{"version":3,"sources":["assets/global/thumbs_down.svg","assets/global/thumbs_up.svg","assets/global/server.svg","assets/global/filter.svg","assets/global/capture.svg","assets/global/notification.svg","assets/global/fullscreen.svg","assets/global/fullscreen-exit.svg","assets/global/update.svg","components/global/FilterBar.jsx","services/CaaS.js","services/CommunicationService.js","components/global/CustomBarLegend.jsx","components/global/ChartBar.jsx","services/DataLoader.js","assets/global/gift.svg","components/donations/DonateButton.jsx","components/global/ContentCluster.jsx","assets/global/timer.svg","assets/global/chain.svg","assets/global/friends_panel.jpg","components/friends/CanvasFriendsPanel.jsx","components/friends/FriendsPanel.jsx","assets/global/dark_theme.svg","assets/global/error.svg","components/global/CustomLegend.jsx","components/global/ChartPie.jsx","components/global/PageMessage.jsx","assets/global/refresh.svg","assets/global/delete.svg","assets/global/expand.svg","assets/global/timeline.svg","constants/Servers.js","components/global/Banner.jsx","assets/global/home.svg","components/global/ScrollToTop.jsx","components/global/NavBar.jsx","assets/global/live.svg","assets/global/servers.svg","assets/global/grouping.svg","assets/global/who.svg","assets/global/trends.svg","assets/global/about.svg","assets/global/menu.svg","assets/global/transfer.svg","hooks/ServerHook.jsx","components/global/NavMenu.jsx","components/global/NavPush.jsx","components/Layout.jsx","history.js","assets/global/friends.svg","assets/global/quests.svg","assets/global/api.svg","assets/global/community.svg","assets/global/feedback.svg","assets/global/register.svg","assets/global/online.svg","components/directory/Footer.jsx","components/directory/Directory.jsx","assets/global/offline.svg","assets/global/pending.svg","assets/global/pumpkin_green.svg","assets/global/pumpkin_red.svg","assets/global/pumpkin_blue.svg","assets/global/add.svg","components/servers/Servers.jsx","components/servers/UniqueCountsSubtitle.jsx","components/servers/CurrentCountsSubtitle.jsx","components/servers/ServersSpecific.jsx","assets/global/lfmsprite_v3.jpg","components/grouping/RaidGroupCluster.jsx","components/grouping/Grouping.jsx","assets/global/pumpkins.png","assets/global/cobweb.png","assets/global/stone_wall.jpg","constants/ClemeitNames.js","components/grouping/CanvasLfmPanel.jsx","assets/global/ghosts.png","components/grouping/LevelRangeSlider.jsx","components/grouping/Group.jsx","constants/FeatureFlag.js","hooks/FeatureFlagHook.jsx","assets/global/edit.svg","components/grouping/GroupingPanel.jsx","components/grouping/PanelSelectPopup.jsx","assets/global/whosprite_v4.jpg","components/who/CanvasWhoPanel.jsx","assets/global/crown.png","components/who/WhoPanel.jsx","components/grouping/GroupingSpecific.jsx","assets/global/mail.svg","components/grouping/NotificationForm.jsx","components/who/Who.jsx","components/who/WhoSpecific.jsx","components/live/FAQ.jsx","components/live/QuickInfo.jsx","components/live/PlayerAndLfmSubtitle.jsx","components/global/ServerStatusDisplay.jsx","components/live/Live.jsx","components/about/About.jsx","components/directory/NotFound.jsx","components/global/Mail.jsx","App.jsx","serviceWorkerRegistration.js","index.js","components/global/BannerMessage.jsx","assets/global/close.svg","components/global/PopupMessage.jsx","components/global/ToggleButton.jsx","components/global/DataClassification.jsx","components/global/ChartLine.jsx","assets/global/warning.svg","assets/global/info.svg"],"names":["_path","_path2","_excluded","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgThumbsDown","_ref","svgRef","title","titleId","props","xmlns","height","viewBox","width","fill","ref","id","d","ForwardRef","SvgThumbsUp","SvgServer","_g","SvgFilter","enableBackground","SvgCapture","SvgNotification","SvgFullscreen","SvgFullscreenExit","_g2","SvgUpdate","x","LfmFilterBar","collapseTimeout","React","useState","fullscreen","set_fullscreen","useHistory","startCollapseTimeout","clearTimeout","setTimeout","$","css","maxWidth","opacity","document","getElementById","removeEventListener","stopCollapseTimeout","collapseFilterButtons","useEffect","minimal","display","addEventListener","style","justifyContent","top","className","flexDirection","onClick","closePanel","currentServer","href","permalink","Log","to","returnTo","textDecoration","color","paddingRight","showSave","marginLeft","padding","handleSaveButton","hideFilterButton","handleFilterButton","showNotifications","whiteSpace","showRefreshButton","handleRefreshButton","failedToFetchCharacters","failedToFetchRaidActivity","CAAS_LIFETIME","getConfig","a","lifetime","cachedCaaS","localStorage","getItem","caas","JSON","parse","caasExists","caasExpired","fetched","Date","getTime","Fetch","setItem","stringify","getValueFromLabel","label","result","Array","isArray","forEach","entry","value","isOpera","window","opera","navigator","userAgent","isFirefox","InstallTrigger","isIE","documentMode","isEdge","StyleMedia","isChrome","chrome","webstore","runtime","Submit","comment","browser","requestOptions","method","headers","body","console","log","fetch","res","json","response","event","meta","url","then","catch","error","CustomBarLegend","COLORS","isMobileLoaded","legendKeys","map","excludedSeries","includes","switchExcludedSeries","backgroundColor","data","SERVER_LIST","server","theme","background","textColor","fontSize","axis","domain","line","stroke","strokeWidth","ticks","grid","crosshair","strokeOpacity","strokeDasharray","tooltip","container","borderRadius","boxShadow","basic","alignItems","table","tableCell","ChartBar","setIsMobileLoaded","isMobile","setIsMobile","innerWidth","forceHardcore","setExcludedSeries","filters","showServerFilters","slice","filter","k","indexBy","margin","right","bottom","paddingBottom","left","minValue","groupMode","valueScale","type","indexScale","round","colors","dataIncludesColors","scheme","borderColor","from","modifiers","axisTop","axisRight","axisBottom","tickSize","tickPadding","tickRotation","straightLegend","legend","legendBottom","legendPosition","legendOffset","format","days","Math","floor","xLabel","axisLeft","legendLeft","labelSkipWidth","labelSkipHeight","labelTextColor","animate","noAnim","motionStiffness","motionDamping","loadingMessage","hideLegend","temp","s","fetchArbitraryData","text","postArbitraryData","mode","timeout","ret","Promise","resolve","reject","isResolved","val","err","Post","VerifyPlayerAndLfmOverview","missingfields","undefined","ServerName","PlayerCount","LfmCount","VerifyServerLfmData","Name","LastUpdateTime","GroupCount","VerifyPlayerData","Population","Players","SvgGift","DonateButton","variant","getClassName","rel","SmallDonateButton","LargeDonateButton","ContentCluster","getId","altTitle","replace","toLowerCase","hidden","noMargin","smallMargin","marginBottom","smallBottomMargin","noLink","location","substring","description","noFade","children","SvgTimer","y","SvgChain","CanvasFriendsPanel","canvasRef","useRef","spriteRef","canvasWidth","setCanvasWidth","isImageLoaded","setIsImageLoaded","playerDataRef","current","multiselectRef","multiselect","showPlayerLocationsRef","showPlayerLocations","PANEL_WIDTH","PLAYER_HEIGHT","LOCATION_HEIGHT","HandleMouseOnCanvas","e","rect","getBoundingClientRect","clientX","clientY","index","handlePlayerSelect","handleHideOfflineFriends","handleShowServerNames","handleShowPlayerLocations","handleSort","addName","removebtn","max","removePlayer","handleSelectPlayer","handleCanvasResize","handleKeyListener","ctx","getContext","alpha","sprite","drawImage","hideOfflineFriends","showServerNames","fillStyle","maxListSize","font","textAlign","textBaseline","fillText","OpenPanel","DrawFiller","player","grad","createLinearGradient","addColorStop","selectedPlayers","fillRect","beginPath","strokeStyle","lineWidth","moveTo","lineTo","Anonymous","Online","GroupId","raceIconPosition","getRaceIconPosition","Gender","Race","measureText","Server","Location","j","Classes","classIconPosition","getClassIconPosition","Level","TotalLevel","guildname","wrapText","Guild","DrawFriends","globalAlpha","dialogW","dialogH","dialogX","dialogY","x_in","y_in","w_in","h_in","DrawMultiselectOption","DrawMultiselect","isLoading","words","split","lines","currentLine","word","push","race","eligible","xsrc","ysrc","classname","src","PanelSprite","onLoad","autoComplete","mod","filterBarShown","computeInputTop","computeInputHeight","computeInputTopPadding","playerInput","onChange","handlePlayerInput","onKeyDown","FriendsPanel","idList","setIdList","idListRef","friendsList","setFriendsList","filteredFriendsList","setFilteredFriendsList","multiselectFriendsList","setMultiselectFriendsList","filteredFriendsListRef","playerInputValue","setPlayerInputValue","playerInputValueRef","sortMethod","setSortMethod","sortMethodRef","sortDirection","setSortDirection","setHideOfflineFriends","hideOfflineFriendsRef","setShowServerNames","showServerNamesRef","setShowPlayerLocations","setSelectedPlayers","selectedPlayersRef","refreshFriendsList","setIsLoading","throwError","onError","reloadData","soft","goodIds","playerids","sortedCharacters","characterId","character","PlayerId","finally","addCharacter","list","parsed","alert","clearInterval","setInterval","hideofflinefriends","showservers","showlocations","finaldata","friend","sortmod","sort","b","InParty","localeCompare","astring","c","bstring","minHeight","secondary","FilterBar","trimmedString","trim","test","name","goodLengths","pid","playerIndex","indexPid","newIdList","SvgDarkTheme","SvgError","CustomLegend","reverse","dat","ChartPie","alwaysShow","series","startAngle","arc","endAngle","innerRadius","valueFormat","sortByValue","padAngle","cornerRadius","activeOuterRadiusOffset","useDataColors","datum","borderWidth","enableArcLinkLabels","arcLinkLabelsSkipAngle","arcLinkLabelsThickness","arcLinkLabelsColor","arcLabel","filtered","total","GetTotalPopulation","toFixed","arcLabelsSkipAngle","arcLabelsRadiusOffset","arcLabelsTextColor","hideCustomLegend","PageMessage","padded","border","getColor","fontWeight","marginRight","getIcon","message","submessage","pushBottom","SvgRefresh","SvgDelete","SvgExpand","SvgTimeline","SERVER_LIST_LOWERCASE","getServers","Banner","voteMessage","set_voteMessage","mayVote","set_mayVote","vote","showVoteButton","ls","mayvote","isNavbarSolid","handleScroll","scrollTop","small","outerWidth","showButtons","bind","unbind","hideOnMobile","showTitle","showSubtitle","subtitle","position","hideSuggestions","hideVote","cursor","hideSmallDonateButton","classList","toggleTheme","paddingLeft","ScrollToTop","prevProps","scrollTo","Fragment","Component","withRouter","NavBar","NavItem","useLocation","pathname","NavDropdown","isDroppedDown","on","slideDown","slideUp","child","NavSubItem","NavDivider","SvgHome","_circle","_circle2","_circle3","SvgLive","cx","cy","r","SvgServers","SvgGrouping","SvgWho","SvgTrends","SvgAbout","SvgMenu","ServerHook","servers","setServers","updatedServers","waitForServers","NavMenu","SERVERS","NavPush","createBrowserHistory","SvgTransfer","SvgFriends","SvgQuests","SvgApi","SvgCommunity","SvgFeedback","SvgRegister","fillRule","Footer","Directory","NAV_OPTIONS","tiles","icon","unavailable","beta","Helmet","property","content","BannerMessage","page","marginTop","option","hide","callback","soon","glowing","new","SvgOnline","SvgOffline","SvgPending","_metadata","SvgPumpkinGreen","xmlnsXlink","xmlSpace","transform","SvgPumpkinRed","SvgPumpkinBlue","EVENT_THEME","dt","getMonth","getDate","isSpookyTime","PENDING","alt","ONLINE","OFFLINE","GetSVG","world","Status","readAbout","setPopupMessage","GetServerDescription","uniqueData","TotalCharacters","TotalGuilds","setUniqueData","serverStatusData","set_serverStatusData","serverDistributionData","setServerDistributionData","hourlyDistributionData","setHourlyDistributionData","dailyDistributionData","setDailyDistributionData","serverDistributionType","setServerDistributionType","hourlyDistributionType","setHourlyDistributionType","dailyDistributionType","setDailyDistributionType","levelDistributionDataBanks","setLevelDistributionDataBanks","classDistributionDataBanks","setClassDistributionDataBanks","raceDistributionDataBanks","setRaceDistributionDataBanks","dailyDistributionDisplay","setDailyDistributionDisplay","classDistributionDisplay","setClassDistributionDisplay","timeNowEvent","setTimeNowEvent","date","getUTCHours","dataFailedToLoad","levelDistributionData","setLevelDistributionData","classDistributionData","setClassDistributionData","raceDistributionData","setRaceDistributionData","refreshServerStatus","reportMessage","loadLevelDistributionBanks","loadClassDistributionBanks","loadRaceDistributionBanks","interval","popupMessage","PopupMessage","popMessage","DataClassification","classification","Worlds","lineHeight","ToggleButton","textA","textB","isA","isB","doA","doB","ChartLine","markedEvents","markedEventsType","trendType","noArea","tooltipPrefix","gap","flexWrap","curve","UniqueCountsSubtitle","FormatWithCommas","GetUniquePlayers","noformat","playercount","toString","GetUniqueActivePlayers","ActiveCharacters","guildcount","GetUniqueGuilds","CurrentCountsSubtitle","getLfmCount","lfmcount","getPopulation","serverData","getPlayersInGroupCount","getPlayersInQuestsCount","IsPublicSpace","getAnonymousPlayersCount","getTransferPlayersCount","HomeServer","averageForThisHour","hourlyLfmDistribution","getRelativeGroupCount","groupIds","getUniqueGroupCount","ServersSpecific","GRAY","DAYS","population1Year","setPopulation1Year","population1Quarter","setPopulation1Quarter","quarterlyData","setQuarterlyData","byHourType","setByHourType","byDayType","setByDayType","annualType","setAnnualType","quarterlyType","setQuarterlyType","setDailyLfmDistribution","setHourlyLfmDistribution","getServerNamePossessive","lastIndexOf","setCurrentServer","serverName","toUpperCase","setByHourChartData","setByDayChartData","startDate","moment","startOf","subtract","endDate","setMarkedEvents","hour","serverStatus","setServerStatus","setServerData","currentData","setCurrentData","serverVal","byHourChartData","totalPerHourQuarter","dataPointsPerHourQuarter","totalPerHourWeek","dataPointsPerHourWeek","playercountField","lfmcountField","datetime","playerCount","lfmCount","relevantData","diff","decimalCount","hourlyAveragesQuarter","pow","hourlyAveragesWeek","chartData","average","generateByHourChart","servername","byDayChartData","totalPerDayQuarter","dataPointsPerDayQuarter","totalPerDayWeek","dataPointsPerDayWeek","day","dailyAveragesQuarter","dailyAveragesWeek","Day","Quarter","QuarterColor","Week","WeekColor","generateByDayChart","item","m","areaOpacity","activeFilter","showActions","showLastUpdated","reportReference","showArea","RaidGroupCluster","canvas","CANVAS_REFS","LFM_HEIGHT","serverRaidCount","Groups","group","Quest","GroupSize","yOffset","Eligible","commentlines","Comment","lfmheight","expandedInfo","Members","AdventureActive","RequiredAdventurePack","isFeytwisted","gradient","Leader","leaderWidth","startsWith","MinimumLevel","MaximumLevel","Guess","textLines","Difficulty","CharactersOnTimer","sanitized","normalpattern","hardpattern","elitepattern","reaperpattern","skullpattern1","skullpattern2","skullpattern3","skullpattern4","skullcount","exec","getGroupDifficulty","raceIconBounds","AcceptedCount","AcceptedClasses","playerclass","min","modifiedaatime","DrawRaid","drawRaidsToPanels","gameRaidCount","maxHeight","Grouping","setServerStatusData","notificationRuleCount","setNotificationRuleCount","allGroupData","setAllGroupData","raidcount","refreshGroupData","messages","SvgAdd","NAMES","CanvasLfmPanel","pumpkinRef","cobwebRef","ghostRef","wallRef","JOIN_REQUEST_MESSAGES","SPOOKY_WORDS","SPOOKY_AREAS","isPumpkinLoaded","setIsPumpkinLoaded","isCobwebLoaded","setIsCobwebLoaded","isGhostLoaded","setIsGhostLoaded","isWallLoaded","setIsWallLoaded","groupIndex","cursorPosition","groupSelection","setGroupSelection","attemptedJoin","setAttemptedJoin","attemptedJoinRef","highlightRaids","setHighlightRaids","search","lfmHeight","lastclickRef","timeStamp","abs","side","doubleClick","computePanelHeight","groups","showNotEligible","overlayTimeout","pumpkins","cobweb","ghost","wall","g","open","lastUpdateTime","getHours","timeText","getMinutes","getSeconds","sortAscending","MINIMUM_LFM_COUNT","AdventureArea","COBWEB_VALUE","translate","rotate","PI","GHOST_MOD","stringToInt","GHOST_TYPE","highVisibility","fontModifier","some","EligibleCharacters","showEligibleCharacters","visibleString","characterWidth","xp","yp","showMemberCount","showQuestGuesses","SHOW_QUEST_TIP","Tip","showQuestTips","questTipLines","AverageTime","showCompletionPercentage","closePath","member","SHOW_GUILD_NAME","showGuildNames","GUILD_NAME_HEIGHT","estimatedBottom","memberList","memberWidth","wrappedguildname","truncatedGuildName","wrappedlocation","DrawPlayerOverlay","estimatedRight","quest","row","drawOverlayBackground","drawOverlayTitle","wrapped","getTimeTillEnd","drawOverlayInfo","QuestJournalGroup","HeroicNormalCR","EpicNormalCR","Patron","questName","raid","RaidActivity","remainingMinutes","remaining","timeInDays","timeInHours","timeInMinutes","returnStringArray","join","DrawQuestOverlay","displayText","random","textWidth","bounds","w","h","DrawJoinRequestOverlay","DrawLfms","string","charCodeAt","PumpkinSprite","CobwebSprite","WallSprite","sliderStyle","Handle","handle","percent","getHandleProps","Track","getTrackProps","LevelRangeSlider","rootStyle","step","values","minimumLevel","maximumLevel","handleChange","getRailProps","handles","tracks","Group","classnames","Short","GetShortName","cls","shortname","obj","handleClick","expanded","getFeatureFlag","flag","FeatureFlagHook","setResult","waitForFlags","Panel","noReport","setTheme","reported","setReported","failedAttemptCount","setFailedAttemptCount","failedAttemptRef","ignoreServerStatus","setIgnoreServerStatus","ignoreServerStatusRef","unfilteredServerData","setUnfilteredServerData","filteredServerData","setFilteredServerData","setShowNotEligible","adjustedGroupCount","setFontModifier","setHighVisibility","alternativeLook","setAlternativeLook","setMinimumLevel","setMaximumLevel","setSortAscending","setShowEligibleCharacters","setShowGuildNames","setShowCompletionPercentage","setShowMemberCount","setShowQuestGuesses","setShowQuestTips","sortAscendingRef","showRaidTimerIndicator","setShowRaidTimerIndicator","filterBasedOnMyLevel","setFilterBasedOnMyLevel","characterIds","setCharacterIds","characterIdsRef","myCharacters","setMyCharacters","myCharactersWithRaidActivity","setMyCharactersWithRaidActivity","lastCharacterLookupTime","setLastCharacterLookupTime","lastCharacterLookupTimeRef","usingCachedCharacterData","setUsingCachedCharacterData","usingCachedCharacterDataRef","refreshLfmsTimeout","hiddenTimerIds","setHiddenTimerIds","setFailedToFetchRaidActivity","setFailedToFetchCharacters","Count","lookups","returnedCharacters","playerid","all","raids","_","localstore","RefreshLfms","serverstatus","getMyCharacters","triggerPopup","getGroupTableCount","appendMyRaidTimers","lastManualLookupTimeRef","refreshButtonAngleRef","IsExpanded","expandedGroups","filteredgroups","levelpass","eligibleCharacters","charactersOnTimer","characters","questid","Id","AltId","getTimers","set_expandedGroups","minlevel","maxlevel","filterbymylevel","showeligiblecharacters","showguildnames","shownoteligible","sortascending","alternativelook","highvisibility","fontmodifier","showcompletionpercentage","showmembercount","showquestguesses","showquesttips","showraidtimerindicator","setFilterPanelVisible","filterPanelVisible","link","createElement","download","toDataURL","click","now","zIndex","columnGap","rowGap","checked","PanelSelectPopup","setVoteMessage","setMayVote","hasVoted","setHasVoted","close","panelType","setPanelType","PANEL_TYPES","userSelected","handleClose","visible","minWidth","t","stopPropagation","CanvasWhoPanel","crownRef","isCrownLoaded","setIsCrownLoaded","classFilterBounds","MAXIMUM_RESULTS","isGroupMode","setIsGroupMode","isGroupModeRef","GROUP_COLORS","colorIndex","groupToColorMap","handleClassFilter","handleAnyClass","handleIncludeRegion","handleExactMatch","crown","classFilterStates","state","isEveryClassChecked","includeRegion","exactMatch","drawClassFilter","getNameFilter","currentPopulation","currentAnonymous","playerColor","p","COLOR","nameWidth","newLines","DrawPlayers","globalFilter","handleGlobalFilter","minimumLevelFilter","handleMinimumLevelFilter","maximumLevelFilter","handleMaximumLevelFilter","WhoPanel","timestamp","playerData","setPlayerData","setCurrentPopulation","setCurrentAnonymous","filteredPlayerData","setFilteredPlayerData","paginatedPlayerData","setPaginatedPlayerData","setPlayerCount","setLastFetchTime","setAttemptedPlayerFetch","setClassFilterStates","classFilterStatesRef","CLASS_NAMES","setIncludeRegion","setExactMatch","activeFilters","sortingMethod","setSortingMethod","sortingMethodRef","sortingDirection","setSortingDirection","pageNumber","pinnedPlayers","setPinnedPlayers","setGlobalFilter","setMinimumLevelFilter","setMaximumLevelFilter","globalFilterRef","IsStarred","bubbleFilter","urlfilters","URLSearchParams","urlfilter","get","urlname","urlguild","urllocation","urlminlevel","urlmaxlevel","globalfilter","inner_player","passingGroupIds","firstPassData","pass","f","trimmedFilter","localmatch","Region","classresult","playercls","starredplayers","ApplyFilters","recheck","refreshdata","FetchPlayerData","anon","pinnedplayers","params","getLink","handleOpenSettings","handleCanvasSort","GroupingSpecific","openPanels","setOpenPanels","panelSelectPopupVisibility","setPanelSelectPopupVisibility","currentServerRef","addPanel","str","secondarytype","secondaryserver","sspc","SvgEdit","NotificationForm","setServer","leaderName","setLeaderName","levelRange","setLevelRange","setQuestName","setComment","canNotify","setCanNotify","deniedNotifications","setDeniedNotifications","rules","setRules","messaging","isSupported","getMessaging","ResetForm","Delete","rulescopy","rule","requestNotificationPermission","Notification","requestPermission","getToken","vapidKey","currentToken","loadrules","permission","serviceWorker","ready","reg","pushManager","subscribe","userVisibleOnly","sub","warn","htmlFor","placeholder","Who","overviewData","setOverviewData","WhoSpecific","primaryFilter","setPrimaryFilter","FAQ","mostPopulatedServer","defaultServer","uniquePlayerCount","getFullYear","uniqueGuildCount","QuickInfo","FAQ_STRUCTURED","mainEntity","acceptedAnswer","getMostPopulatedServerLink","getDefaultServerLink","GetTotalUniquePlayerCount","GetTotalUniqueGuildCount","news","setNews","unique","nameonly","defaultserver","Order","mostpopulatedserver","population","serverdistribution","dangerouslySetInnerHTML","__html","PlayerAndLfmSubtitle","LFMs","ServerStatusDisplay","toLocaleTimeString","Live","uniqueCountsData","setUniqueCountsData","playerAndLFMCountData","setPlayerAndLFMCountData","population24HoursData","setPopulation24HoursData","population24HoursType","setPopulation24HoursType","firstLoadRef","refreshPopulationAndQuickInfo","interval2","About","NotFound","SvgMail","Mail","mail","setMail","dismissed","setDismissed","dismissEnabled","setDismissEnabled","mailRef","dismissMail","myTickets","originalLength","ticket","checkForMail","ignoredList","tickets","Transfers","lazy","Quests","Trends","Suggestions","Api","Timeline","Friends","Timers","CharacterRegistration","DonateThankYou","add","fallback","history","Layout","exact","path","isLocalhost","Boolean","hostname","match","registerValidSW","swUrl","config","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","app","initializeApp","apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId","measurementId","getAnalytics","onMessage","payload","ReactDOM","render","StrictMode","App","URL","process","origin","contentType","status","unregister","reload","checkValidServiceWorker","serviceWorkerRegistration","shiftBanner","setMessages","update","setUpdate","ignoreThisMessage","before","mayDismiss","nodismiss","ignorelist","allmessages","affectedpages","pages","start","end","onLine","getM","SvgClose","set_userClosed","setVisible","set_reported","visibility","messageType","displayIcon","getTitle","getMessage","overflow","textOverflow","getText","paddingTop","options","weekday","year","month","minute","padLeft","markers","me","lineStyle","legendOrientation","textStyle","xScale","useUTC","xFormat","yScale","yMin","stacked","tickValues","orient","enablePoints","enableArea","enableSlices","useMesh","motionConfig","sliceTooltip","points","toLocaleDateString","dateOptions","yFormatted","point","serieColor","serieId","getTooltip","SvgWarning","SvgInfo"],"mappings":"wGAAA,sCAAIA,EAAOC,EAAX,OAEIC,EAAY,CAAC,QAAS,WAE1B,SAASC,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkBH,EAASY,MAAMC,KAAMR,WAEhT,SAASS,EAAyBP,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxMgB,CAA8BZ,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAASoB,EAAcC,EAAMC,GAC3B,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQd,EAAyBU,EAAMzB,GAE3C,OAAoB,gBAAoB,MAAOC,EAAS,CACtD6B,MAAO,6BACPC,OAAQ,OACRC,QAAS,YACTC,MAAO,OACPC,KAAM,UACNC,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM7B,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EuC,EAAG,gBACHH,KAAM,UACHnC,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEsC,EAAG,2MAIP,IAAIC,EAA0B,aAAiBd,GAChC,K,iCCpCf,sCAAI1B,EAAOC,EAAX,OAEIC,EAAY,CAAC,QAAS,WAE1B,SAASC,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkBH,EAASY,MAAMC,KAAMR,WAEhT,SAASS,EAAyBP,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxMgB,CAA8BZ,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAASmC,EAAYd,EAAMC,GACzB,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQd,EAAyBU,EAAMzB,GAE3C,OAAoB,gBAAoB,MAAOC,EAAS,CACtD6B,MAAO,6BACPC,OAAQ,OACRC,QAAS,YACTC,MAAO,OACPC,KAAM,UACNC,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM7B,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EuC,EAAG,kBACHH,KAAM,UACHnC,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEsC,EAAG,8MAIP,IAAIC,EAA0B,aAAiBC,GAChC,K,qCCpCXzC,EAAOC,E,uBAEPC,EAAY,CAAC,QAAS,WAE1B,SAASC,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkBH,EAASY,MAAMC,KAAMR,WAEhT,SAASS,EAAyBP,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxMgB,CAA8BZ,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAASoC,EAAUf,EAAMC,GACvB,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQd,EAAyBU,EAAMzB,GAE3C,OAAoB,gBAAoB,MAAOC,EAAS,CACtD6B,MAAO,6BACPC,OAAQ,GACRC,QAAS,YACTC,MAAO,GACPE,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM7B,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EuC,EAAG,gBACHH,KAAM,UACHnC,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEsC,EAAG,yFACHH,KAAM,WAIV,ICnCIO,EDmCAH,EAA0B,aAAiBE,GCjC3C,GDkCW,IClCC,CAAC,QAAS,YAE1B,SAAS,IAA2Q,OAA9P,EAAWtC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkB,EAASS,MAAMC,KAAMR,WAEhT,SAAS,EAAyBE,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxM,CAA8BI,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAASsC,EAAUjB,EAAMC,GACvB,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQ,EAAyBJ,EAAM,GAE3C,OAAoB,gBAAoB,MAAO,EAAS,CACtDK,MAAO,6BACPa,iBAAkB,gBAClBZ,OAAQ,GACRC,QAAS,YACTC,MAAO,GACPE,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAMc,IAAOA,EAAkB,gBAAoB,IAAK,KAAmB,gBAAoB,OAAQ,CACjHJ,EAAG,mBACHH,KAAM,SACS,gBAAoB,OAAQ,CAC3CG,EAAG,wLACHH,KAAM,SACS,gBAAoB,OAAQ,CAC3CG,EAAG,kBACHH,KAAM,YAIV,ICvCI,EAAO,EDuCP,EAA0B,aAAiBQ,G,GAChC,I,OCtCX,EAAY,CAAC,QAAS,WAE1B,SAAS,IAA2Q,OAA9P,EAAWxC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkB,EAASS,MAAMC,KAAMR,WAEhT,SAAS,EAAyBE,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxM,CAA8BI,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAASwC,EAAWnB,EAAMC,GACxB,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQ,EAAyBJ,EAAM,GAE3C,OAAoB,gBAAoB,MAAO,EAAS,CACtDK,MAAO,6BACPC,OAAQ,OACRC,QAAS,YACTC,MAAO,OACPC,KAAM,UACNC,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM,IAAU,EAAqB,gBAAoB,OAAQ,CAC3EU,EAAG,gBACHH,KAAM,UACH,IAAW,EAAsB,gBAAoB,OAAQ,CAChEG,EAAG,+HAIP,ICnCI,EAAO,EDmCP,EAA0B,aAAiBO,GCjC3C,GDkCW,IClCC,CAAC,QAAS,YAE1B,SAAS,IAA2Q,OAA9P,EAAW1C,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkB,EAASS,MAAMC,KAAMR,WAEhT,SAAS,EAAyBE,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxM,CAA8BI,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAASyC,EAAgBpB,EAAMC,GAC7B,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQ,EAAyBJ,EAAM,GAE3C,OAAoB,gBAAoB,MAAO,EAAS,CACtDK,MAAO,6BACPC,OAAQ,GACRC,QAAS,YACTC,MAAO,GACPE,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM,IAAU,EAAqB,gBAAoB,OAAQ,CAC3EU,EAAG,gBACHH,KAAM,UACH,IAAW,EAAsB,gBAAoB,OAAQ,CAChEG,EAAG,kNACHH,KAAM,WAIV,ICnCI,EAAO,EDmCP,EAA0B,aAAiBW,GCjC3C,GDkCW,IClCC,CAAC,QAAS,YAE1B,SAAS,IAA2Q,OAA9P,EAAW3C,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkB,EAASS,MAAMC,KAAMR,WAEhT,SAAS,EAAyBE,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxM,CAA8BI,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAAS0C,EAAcrB,EAAMC,GAC3B,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQ,EAAyBJ,EAAM,GAE3C,OAAoB,gBAAoB,MAAO,EAAS,CACtDK,MAAO,6BACPC,OAAQ,GACRC,QAAS,YACTC,MAAO,GACPE,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM,IAAU,EAAqB,gBAAoB,OAAQ,CAC3EU,EAAG,gBACHH,KAAM,UACH,IAAW,EAAsB,gBAAoB,OAAQ,CAChEG,EAAG,iFACHH,KAAM,WAIV,ICnCI,EAAO,EDmCP,EAA0B,aAAiBY,GCjC3C,GDkCW,IClCC,CAAC,QAAS,YAE1B,SAAS,IAA2Q,OAA9P,EAAW5C,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkB,EAASS,MAAMC,KAAMR,WAEhT,SAAS,EAAyBE,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxM,CAA8BI,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAAS2C,EAAkBtB,EAAMC,GAC/B,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQ,EAAyBJ,EAAM,GAE3C,OAAoB,gBAAoB,MAAO,EAAS,CACtDK,MAAO,6BACPC,OAAQ,GACRC,QAAS,YACTC,MAAO,GACPE,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM,IAAU,EAAqB,gBAAoB,OAAQ,CAC3EU,EAAG,gBACHH,KAAM,UACH,IAAW,EAAsB,gBAAoB,OAAQ,CAChEG,EAAG,gFACHH,KAAM,WAIV,ICnCI,EAAIc,EDmCJ,EAA0B,aAAiBD,G,GAChC,I,iBClCX,EAAY,CAAC,QAAS,WAE1B,SAAS,IAA2Q,OAA9P,EAAW7C,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkB,EAASS,MAAMC,KAAMR,WAEhT,SAAS,GAAyBE,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxM,CAA8BI,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAAS6C,GAAUxB,EAAMC,GACvB,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQ,GAAyBJ,EAAM,GAE3C,OAAoB,gBAAoB,MAAO,EAAS,CACtDK,MAAO,6BACPa,iBAAkB,gBAClBZ,OAAQ,OACRC,QAAS,YACTC,MAAO,OACPC,KAAM,UACNC,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM,IAAO,EAAkB,gBAAoB,IAAK,KAAmB,gBAAoB,OAAQ,CACjHO,KAAM,OACNH,OAAQ,GACRE,MAAO,GACPiB,EAAG,MACCF,IAAQA,EAAmB,gBAAoB,IAAK,KAAmB,gBAAoB,IAAK,KAAmB,gBAAoB,IAAK,KAAmB,gBAAoB,OAAQ,CAC/LX,EAAG,iTAIP,IAAI,GAA0B,aAAiBY,I,IAChC,I,qDC4OAE,IApQM,SAACtB,GACpB,IAyCIuB,EAzCJ,EAAqCC,IAAMC,UAAS,GAApD,mBAAOC,EAAP,KAAmBC,EAAnB,KACgBC,eA+BhB,SAASC,IACPC,aAAaP,GACbA,EAAkBQ,YAAW,kBAQ/B,WAAkC,IAAD,IAC/BC,KAAE,gCAAgCC,IAAI,CAAEC,SAAS,SACjDF,KAAE,qCAAqCC,IAAI,CAAEE,QAAS,IACtD,UAAAC,SACGC,eAAe,qBADlB,SAEIC,oBAAoB,aAAcT,GACtC,UAAAO,SACGC,eAAe,qBADlB,SAEIC,oBAAoB,aAAcC,GAhBHC,KAAyB,KAG9D,SAASD,IACPT,aAAaP,GAef,OA/CAC,IAAMiB,WAAU,WACTzC,EAAM0C,UACLhB,GACFM,KAAE,gBAAgBC,IAAI,CAAEU,QAAS,SACjCX,KAAE,aAAaC,IAAI,CAAEU,QAAS,SAC9BX,KAAE,wBAAwBC,IAAI,CAAEU,QAAS,WAEzCX,KAAE,gBAAgBC,IAAI,CAAEU,QAAS,UACjCX,KAAE,aAAaC,IAAI,CAAEU,QAAS,UAC9BX,KAAE,wBAAwBC,IAAI,CAAEU,QAAS,cAG5C,CAACjB,IAEJF,IAAMiB,WAAU,WAAO,IAAD,IASpB,OARA,UAAAL,SACGC,eAAe,qBADlB,SAEIO,iBAAiB,aAAcf,GACnC,UAAAO,SACGC,eAAe,qBADlB,SAEIO,iBAAiB,aAAcL,GACnCV,IAEO,kBAAMC,aAAaP,MACzB,IAwBD,uBACEsB,MAAO,CACLF,QAAS,OACTG,eAAgB,SAChB1C,MAAO,OACP2C,IAAK,MACLb,SAAUlC,EAAMkC,SAAW,MAN/B,UASE,sBACEc,UAAU,iBACVH,MAAO,CAAEzC,MAAO,OAAQF,OAAQ,UAElC,sBACE8C,UAAU,aACVzC,GAAG,aACHsC,MAAO,CACLE,IAAK,MACLb,SAAUlC,EAAMkC,SAAW,MAL/B,SAQE,uBAAKW,MAAO,CAAEF,QAAS,OAAQM,cAAe,OAA9C,UACGjD,EAAM0C,SACL,uBAAKM,UAAU,kBAAkBE,QAAS,kBAAMlD,EAAMmD,cAAtD,UACE,eAAC,IAAD,CAAUH,UAAU,2BACnBhD,EAAMoD,eACL,uBAAMJ,UAAU,0CAAhB,SACGhD,EAAMoD,mBAKdpD,EAAM0C,SACL,qBACEM,UAAU,qCACVK,KAAMrD,EAAMsD,UACZ/E,OAAO,SACP2E,QAAS,WACPK,aAAI,oBAAqBvD,EAAMsD,YALnC,UAQE,eAAC,IAAD,CAASN,UAAU,2BACnB,uBAAMA,UAAU,0CAAhB,2BAKFhD,EAAM0C,SACN,gBAAC,KAAD,CACEM,UAAU,mCACVQ,GAAIxD,EAAMyD,SACVZ,MAAO,CACLa,eAAgB,OAChBC,MAAO,eALX,UAQE,eAAC,EAAD,CACEX,UAAU,yBACVH,MAAO,CACLzC,MAAO,OACPF,OAAQ,OACR0D,aAAc,SAGjB5D,EAAMoD,iBAGVpD,EAAM6D,WAAa7D,EAAM0C,SACxB,uBACEM,UAAU,8BACVH,MAAO,CACLiB,WAAY,OACZC,QAAS,WAEXb,QAAS,WACPK,aAAI,sBAAD,mBAAoCvD,EAAMoD,gBAC7CpD,EAAMgE,oBARV,UAWE,eAAC,EAAD,CAAYhB,UAAU,2BACtB,uBAAMA,UAAU,0CAAhB,4BAKFhD,EAAMiE,kBACN,uBACEjB,UAAU,8BACVH,MAAO,CACLiB,WAAY9D,EAAM0C,QACd,OACA1C,EAAM6D,SACN,GACA,OACJE,QAAS,WAEXb,QAASlD,EAAMkE,mBAVjB,UAYE,eAAC,EAAD,CAAWlB,UAAU,2BACrB,uBAAMA,UAAU,0CAAhB,wBAKHhD,EAAMmE,oBAAsBnE,EAAM0C,SACjC,gBAAC,KAAD,CACEc,GAAG,iBACHR,UAAU,8BACVH,MAAO,CACLc,MAAO,cACPD,eAAgB,OAChBK,QAAS,WANb,UASE,eAAC,EAAD,CAAiBf,UAAU,2BAC3B,uBAAMA,UAAU,+CAAhB,+BAKFhD,EAAM0C,SACN,uBACEM,UAAU,6CACVH,MAAO,CACLc,MAAO,cACPD,eAAgB,OAChBK,QAAS,WAEXb,QAAS,WACFxB,GACH6B,aAAI,qBAAD,mBAAmCvD,EAAMoD,gBAE9CzB,GAAgBD,IAXpB,UAcGA,EACC,eAAC,EAAD,CAAmBsB,UAAU,4BAE7B,eAAC,EAAD,CAAeA,UAAU,2BAE3B,uBACEA,UAAU,kBACVH,MAAO,CAAEuB,WAAY,UAFvB,SAIG1C,EAAa,UAAY,kBAI/B1B,EAAMqE,mBACL,sBACErB,UAAU,kBACVE,QAASlD,EAAMsE,oBAFjB,SAIGtE,EAAMuE,wBACL,uCACE,eAAC,GAAD,CACEvB,UAAU,yBACVzC,GACqB,cAAnBP,EAAMyD,SACF,qBACA,uBAGR,uBACET,UAAU,kBACVH,MAAO,CAAEiB,WAAY,OAFvB,mCAOA9D,EAAMwE,0BACR,uCACE,eAAC,GAAD,CACExB,UAAU,yBACVzC,GACqB,cAAnBP,EAAMyD,SACF,qBACA,uBAGR,uBACET,UAAU,kBACVH,MAAO,CAAEiB,WAAY,OAFvB,oCAQF,eAAC,IAAD,CACEd,UAAU,yBACVzC,GACqB,cAAnBP,EAAMyD,SACF,qBACA,mC,wICrQlBgB,EAAgB,M,SAOPC,I,2EAAf,kDAAAC,EAAA,yDAAyBC,EAAzB,+BAAoCH,EAApC,SAEUI,EAAaC,aAAaC,QAAQ,QAClCC,EAAOC,KAAKC,MAAML,GAClBM,EAA2B,MAAdN,EACbO,EACY,MAAhBJ,EAAKK,UAAmB,IAAIC,MAAOC,UAAYP,EAAKK,QAAUT,GAE5DO,GAAeC,EARvB,yCASaJ,EAAKA,MATlB,kFAYqBQ,YAAM,gCAAiC,KAZ5D,eAYQR,EAZR,OAaEF,aAAaW,QACX,OACAR,KAAKS,UAAU,CAAEV,OAAMK,SAAS,IAAIC,MAAOC,aAf/C,kBAiBSP,GAjBT,0D,wBAoBA,SAASW,EAAkBX,EAAMY,GAC/B,IAAIC,EAAS,GAMb,OALIC,MAAMC,QAAQf,IAChBA,EAAKgB,SAAQ,SAACC,GACRA,EAAML,QAAUA,IAAOC,EAASI,EAAMC,UAGvCL,I,+HClCHM,IAAYC,OAAOC,OAASC,UAAUC,UAAUjH,QAAQ,UAAY,EAGpEkH,EAAsC,qBAAnBC,eAGnBC,IAA+BtE,SAASuE,aAGxCC,GAAUF,KAAUN,OAAOS,WAG3BC,IACFV,OAAOW,WAAaX,OAAOW,OAAOC,YAAcZ,OAAOW,OAAOE,SAI3D,SAAeC,EAAtB,oC,4CAAO,WAAsBpH,EAAOqH,GAA7B,qBAAAxC,EAAA,6DAGSyC,EAAVN,EAAoB,SACfN,EAAqB,UACrBE,EAAgB,KAChBE,EAAkB,OAClBT,EAAmB,QACb,UAEH,yCACNkB,EAAiB,CACrBC,OAAQ,OACRC,QAAS,CAAE,eAAgB,oBAC3BC,KAAMvC,KAAKS,UAAU,CAAE0B,UAAStH,QAAOqH,aAEzCM,QAAQC,IAAIzC,KAAKS,UAAU,CAAE0B,UAAStH,QAAOqH,aAhBxC,kBAkBeQ,MARR,yCAQmBN,GAlB1B,cAkBGO,EAlBH,iBAmBoBA,EAAIC,OAnBxB,eAmBGC,EAnBH,yBAoBIA,GApBJ,kCAsBHL,QAAQC,IAAI,mBAAZ,MAtBG,2D,sBA0BA,SAASnE,EAAIwE,GAAmB,IAAZC,EAAW,uDAAJ,GAEhC,IAAMC,EAAM,+BACNZ,EAAiB,CACrBC,OAAQ,OACRC,QAAS,CAAE,eAAgB,oBAC3BC,KAAMvC,KAAKS,UAAU,CAAEqC,QAAOC,UAGhCL,MAAMM,EAAKZ,GACRa,MAAK,SAACN,GAAD,OAASA,EAAIC,UAClBK,MAAK,SAACJ,OACNK,OAAM,SAACC,S,4FCUGC,EAhES,SAACrI,GACvB,IAAMsI,EAAS,CACb,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,qBACA,kBACA,qBAGF,OACE,sBACEtF,UACE,iBAAmBhD,EAAMuI,eAAiB,GAAK,mBAFnD,UAKGvI,EAAMwI,YACLxI,EAAMwI,WAAWC,KAAI,WAAiBjK,GAAjB,IAAGI,EAAH,EAAGA,IAAK+E,EAAR,EAAQA,MAAR,OACnB,sBAEEX,UACE,qBACChD,EAAM0I,eAAeC,SAAS/J,GAAO,YAAc,IAEtDsE,QAAS,kBAAMlD,EAAM4I,qBAAqBhK,IAN5C,UAQE,qBACEiE,MAAO,CACLzC,MAAO,OACPF,OAAQ,OACR2I,gBAAiBlF,KAGrB,+BAAO/E,MAdFJ,OAiBTwB,EAAMwI,YACNxI,EAAM8I,MACNC,IAAYN,KAAI,SAACO,EAAQxK,GAAT,OACd,sBAEEwE,UACE,qBACChD,EAAM0I,eAAeC,SAASK,GAAU,YAAc,IAEzD9F,QAAS,kBAAMlD,EAAM4I,qBAAqBI,IAN5C,UAQE,qBACEnG,MAAO,CACLzC,MAAO,OACPF,OAAQ,OACR2I,gBAAiBP,EAAO9J,MAG5B,+BAAOwK,MAdFxK,UCvCXyK,EAAQ,CACZC,WAAY,cACZC,UAAW,cACXC,SAAU,GACVC,KAAM,CACJC,OAAQ,CACNC,KAAM,CACJC,OAAQ,UACRC,YAAa,IAGjBC,MAAO,CACLH,KAAM,CACJC,OAAQ,UACRC,YAAa,KAInBE,KAAM,CACJJ,KAAM,CACJC,OAAQ,UACRC,YAAa,IAGjBG,UAAW,CACTL,KAAM,CACJC,OAAQ,cACRC,YAAa,EACbI,cAAe,EACfC,gBAAiB,QAGrBC,QAAS,CACPC,UAAW,CACTd,WAAY,cACZvF,MAAO,UACPyF,SAAU,UACVa,aAAc,MACdC,UAAW,uBACXnG,QAAS,WAEXoG,MAAO,CACL/F,WAAY,MACZzB,QAAS,OACTyH,WAAY,UAEdC,MAAO,GACPC,UAAW,CACTvG,QAAS,aAkLAwG,IA7KE,SAACvK,GAChB,MAA4CwB,IAAMC,UAAS,GAA3D,mBAAO8G,EAAP,KAAuBiC,EAAvB,KAEA,EAAgChJ,IAAMC,SAAS,MAA/C,mBAAOgJ,EAAP,KAAiBC,EAAjB,KACAlJ,IAAMiB,WAAU,WACdiI,EAAYtE,OAAOuE,YAAc,OAChC,IAEH,MAA4CnJ,IAAMC,SAChDzB,EAAM4K,cAAgB,GAAK,CAAC,aAD9B,mBAAOlC,EAAP,KAAuBmC,EAAvB,KA6BA,OACE,gCACE,qBACE7H,UACEuF,EACI,iBACA,kEAEN1F,MAAO,CAAEF,QAAS4F,EAAiB,OAAS,IAC5CrF,QAAS,kBAAMsH,GAAkB,IAPnC,6BAWA,qBACExH,WACGhD,EAAM8K,SAAW9K,EAAM+K,kBAAoB,mBAAqB,KAChExC,EAAiB,GAAK,mBAEzB1F,MAAO,CAAE3C,OAAQ,SALnB,SAOGF,EAAM8I,KACL,cAAC,IAAD,CACEA,KAAM9I,EAAM8I,KAaZzJ,KAAMW,EAAMX,KACT2L,MAAM,GACNC,QAAO,SAACC,GAAD,OAAQxC,EAAeC,SAASuC,MAC1CC,QAASnL,EAAMmL,QACfC,OAAQ,CACNrI,IAAK,GACLsI,MAAOZ,EAAW,GAAK,GACvBa,OAAQb,EAAW,GAAKzK,EAAMuL,eAAiB,GAC/CC,KAAMf,EAAW,GAAK,IAExB1G,QAAS,IACT0H,SAAU,EACVC,UACEjB,EAAW,GAAuB,YAAlBzK,EAAM2C,QAAwB,UAAY,GAE5DgJ,WAAY,CAAEC,KAAM,UACpBC,WAAY,CAAED,KAAM,OAAQE,OAAO,GACnCC,OACE/L,EAAMgM,mBACF,gBAAGzL,EAAH,EAAGA,GAAH,SAAOuI,KAAgB,GAAD,OAAIvI,EAAJ,WACtB,CAAE0L,OAAQ,cAEhBC,YAAa,CACXC,KAAM,QACNC,UAAW,CAAC,CAAC,SAAU,OAEzBC,QAAS,KACTC,UAAW,KACXC,WAAY,CACVC,SAAU,EACVC,YAAa,EACbC,aAAcjC,IAAazK,EAAM2M,gBAAkB,GAAK,EACxDC,OAAQnC,EAAW,GAAKzK,EAAM6M,cAAgB,GAC9CC,eAAgB,SAChBC,aAAc/M,EAAM+M,cAAgB,GACpCC,OAAQ,SAAC9G,GAAD,OAtFpB,SAAgBA,GACd,OAAIlG,EAAMiN,KACJ/G,EAAQ,KAAO,EACV,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAChDgH,KAAKC,MAAMjH,EAAQ,KAEZA,EAAQ,IAAM,EAChBA,EAAiC,GAAzBgH,KAAKC,MAAMjH,EAAQ,IAE3B,GAIJA,EAyEsBkH,CAAOlH,KAE5BmH,SAAU,CACRb,SAAU,EACVC,YAAa,EACbC,aAAc,EACdE,OAAQnC,EAAW,GAAKzK,EAAMsN,YAAc,GAC5CR,eAAgB,SAChBC,cAAe,IAMjBQ,eAAgB,GAChBC,gBAAiB,GACjBC,eAAgB,QA0BhBC,SAAS1N,EAAM2N,OACf1E,MAAOA,EACP2E,gBAAiB,IACjBC,cAAe,KAGjB,qBAAK7K,UAAU,uBAAf,SACE,6BAAKhD,EAAM8N,gBAAkB,yBAIjC9N,EAAM+N,YACN,cAAC,EAAD,CACEjF,KAAM9I,EAAM8I,KACZN,WAAYxI,EAAMwI,WAClBD,eAAgBA,EAChBG,eAAgBA,EAChBE,qBAAsB,SAACI,GAAD,OA3J9B,SAA8BA,GAC5B,GAAIN,EAAeC,SAASK,GAAS,CACnC,IAAIgF,EAAI,YAAOtF,EAAeuC,QAAO,SAACgD,GAAD,OAAOA,GAAKjF,MACjD6B,EAAkB,YAAImD,QACjB,CACL,IAAIA,EAAI,sBAAOtF,GAAP,CAAuBM,IAC/B6B,EAAkB,YAAImD,KAqJgBpF,CAAqBI,W,8OClOlDkF,E,gFAAf,WAAkCjG,EAAK2D,GAAvC,eAAAjH,EAAA,sEACuBgD,MAAMM,GAD7B,UACMH,EADN,OAEe,SAAT8D,EAFN,gCAEwC9D,EAASD,OAFjD,OAEuBC,EAFvB,iCAGoB,SAAT8D,EAHX,kCAG6C9D,EAASqG,OAHtD,QAG4BrG,EAH5B,wCAISA,GAJT,6C,+BAOesG,E,gFAAf,WAAiCnG,EAAKT,GAAtC,eAAA7C,EAAA,sEACuBgD,MAAMM,EAAK,CAC9BX,OAAQ,OACR+G,KAAM,OACN9G,QAAS,CACP,eAAgB,oBAElBC,KAAMvC,KAAKS,UAAU8B,KAPzB,cACMM,EADN,gBASmBA,EAASD,OAT5B,cASEC,EATF,yBAUSA,GAVT,4C,sBAaO,SAAetC,EAAtB,oC,4CAAO,WAAqByC,EAAKqG,GAA1B,eAAA3J,EAAA,6DACD4J,EAAM,IAAIC,QAAJ,uCAAY,WAAOC,EAASC,GAAhB,SAAA/J,EAAA,6DACpB5C,YAAW,WACJwM,EAAII,YACPD,EAAO,aAERJ,GALiB,SAOdJ,EAAmBjG,EAAK,QAC3BC,MAAK,SAAC0G,GACLH,EAAQG,MAETzG,OAAM,SAAC0G,GACNpH,QAAQC,IAAI,uBAAwBmH,GACpCH,EAAOG,MAbS,2CAAZ,yDADL,kBAiBEN,GAjBF,2C,wBAmCA,SAAeO,EAAtB,sC,4CAAO,WAAoB7G,EAAKT,EAAM8G,GAA/B,eAAA3J,EAAA,6DACD4J,EAAM,IAAIC,QAAJ,uCAAY,WAAOC,EAASC,GAAhB,SAAA/J,EAAA,6DACpB5C,YAAW,WACJwM,EAAII,YACPD,EAAO,aAERJ,GALiB,SAOdF,EAAkBnG,EAAKT,GAC1BU,MAAK,SAAC0G,GACLH,EAAQG,MAETzG,OAAM,SAAC0G,GACNpH,QAAQC,IAAI,sBAAuBmH,GACnCH,EAAOG,MAbS,2CAAZ,yDADL,kBAiBEN,GAjBF,2C,wBAkCA,SAASQ,EAA2BjG,GACzC,GAAa,OAATA,EAAe,OAAO,EAC1B,GAAoB,IAAhBA,EAAKpK,OAAc,OAAO,EAC9B,IAAIsQ,GAAgB,EAMpB,OALAlG,EAAK9C,SAAQ,SAACgD,QACciG,IAAtBjG,EAAOkG,aAA0BF,GAAgB,QAC1BC,IAAvBjG,EAAOmG,cAA2BH,GAAgB,QAC9BC,IAApBjG,EAAOoG,WAAwBJ,GAAgB,OAEjDA,EAIC,SAASK,EAAoBvG,GAClC,GAAa,OAATA,EAAe,OAAO,EAC1B,IAAIkG,GAAgB,EAIpB,YAHkBC,IAAdnG,EAAKwG,OAAoBN,GAAgB,QACjBC,IAAxBnG,EAAKyG,iBAA8BP,GAAgB,QAC/BC,IAApBnG,EAAK0G,aAA0BR,GAAgB,IAC/CA,EAIC,SAASS,EAAiB3G,GAC/B,OAAa,OAATA,SACoBmG,IAApBnG,EAAK4G,kBACST,IAAdnG,EAAKwG,WACYL,IAAjBnG,EAAK6G,Y,yGCpHP1R,EAAOC,E,eAEPC,EAAY,CAAC,QAAS,WAE1B,SAASC,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkBH,EAASY,MAAMC,KAAMR,WAEhT,SAASS,EAAyBP,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxMgB,CAA8BZ,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAASqR,EAAQhQ,EAAMC,GACrB,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQd,EAAyBU,EAAMzB,GAE3C,OAAoB,gBAAoB,MAAOC,EAAS,CACtD6B,MAAO,6BACPC,OAAQ,OACRC,QAAS,YACTC,MAAO,OACPC,KAAM,UACNC,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM7B,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EuC,EAAG,gBACHH,KAAM,UACHnC,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEsC,EAAG,2bAIP,IAAIC,EAA0B,aAAiBmP,G,GAChC,I,cChCTC,EAAe,SAAC7P,GAiBpB,OACE,4CACEgD,UAfiB,WACnB,OAAQhD,EAAM8P,SACZ,IAAK,WAML,QACE,MAAO,yBALT,IAAK,QACH,MAAO,sBACT,IAAK,QACH,MAAO,uBAQEC,IACP/P,GAFN,IAGEkD,QAAS,kBAAMK,YAAI,0BACnBF,KApBF,gEAqBE2M,IAAI,aACJzR,OAAO,SANT,UAQE,cAAC,EAAD,CAAU8B,KAAK,kBACf,+CAKA4P,EAAoB,WACxB,OAAO,cAAC,EAAD,CAAcH,QAAQ,WAGzBI,EAAoB,SAAClQ,GACzB,OAAO,cAAC,EAAD,2BAAkBA,GAAlB,IAAyB8P,QAAQ,a,gCCzC1C,yBAmEeK,IAhEQ,SAACnQ,GACtB,SAASoQ,IACP,OAAOpQ,EAAMqQ,SACTrQ,EAAMqQ,SAASC,QAAQ,MAAO,KAAKC,cACnCvQ,EAAMF,MACNE,EAAMF,MAAMwQ,QAAQ,MAAO,KAAKC,cAChC,iBAcN,OACE,0BACEvN,UAAU,kBACVzC,GAAI6P,IACJvN,MAAO,CACLF,QAAS3C,EAAMwQ,OAAS,OAAS,GACjCpF,OAAQpL,EAAMyQ,SAAW,MAAQzQ,EAAM0Q,YAAc,OAAS,GAC9DC,aAAc3Q,EAAMyQ,SAChB,MACAzQ,EAAM4Q,kBACN,OACA,IAVR,UAaE,qBAAI5N,UAAU,wBAAd,UACGhD,EAAMF,OAAS,kBACdE,EAAM6Q,QACN,oBAAGxN,KA3BL+C,OAAO0K,SAASzN,KAAKsF,SAAS,KAC1B,GAAN,OAAUvC,OAAO0K,SAASzN,KAAK0N,UAC7B,EACA3K,OAAO0K,SAASzN,KAAK/D,QAAQ,MAF/B,YAGK8Q,KAEC,GAAN,OAAUhK,OAAO0K,SAASzN,KAA1B,YAAkC+M,KAqB9B,UACE,uBAAMpN,UAAU,UAAhB,0BAAwCoN,IAAxC,cACA,cAAC,IAAD,CAASpN,UAAU,6CAIzB,oBACEH,MAAO,CACLgG,gBAAiB,cACjB1G,QAAS,MAGZnC,EAAMgR,aACL,qBACEhO,UAAU,8BACVH,MAAO,CACLc,MAAO3D,EAAMiR,OAAS,cAAgB,qBAH1C,SAMGjR,EAAMgR,cAGX,qBAAKhO,UAAU,2BAAf,SAA2ChD,EAAMkR,gB,iCC9DvD,sCAAItQ,EAAIO,EAAR,OAEIhD,EAAY,CAAC,QAAS,WAE1B,SAASC,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkBH,EAASY,MAAMC,KAAMR,WAEhT,SAASS,EAAyBP,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxMgB,CAA8BZ,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAAS4S,EAASvR,EAAMC,GACtB,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQd,EAAyBU,EAAMzB,GAE3C,OAAoB,gBAAoB,MAAOC,EAAS,CACtD6B,MAAO,6BACPa,iBAAkB,gBAClBZ,OAAQ,OACRC,QAAS,YACTC,MAAO,OACPC,KAAM,UACNC,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAMc,IAAOA,EAAkB,gBAAoB,IAAK,KAAmB,gBAAoB,OAAQ,CACjHP,KAAM,OACNH,OAAQ,GACRE,MAAO,OACHe,IAAQA,EAAmB,gBAAoB,IAAK,KAAmB,gBAAoB,IAAK,KAAmB,gBAAoB,OAAQ,CACnJjB,OAAQ,EACRE,MAAO,EACPiB,EAAG,EACH+P,EAAG,IACY,gBAAoB,OAAQ,CAC3C5Q,EAAG,kMAIP,IAAIC,EAA0B,aAAiB0Q,GAChC,K,iCC3Cf,sCAAIlT,EAAOC,EAAX,OAEIC,EAAY,CAAC,QAAS,WAE1B,SAASC,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,OAAOL,GAAkBH,EAASY,MAAMC,KAAMR,WAEhT,SAASS,EAAyBP,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAAkEC,EAAKJ,EAAnED,EAEzF,SAAuCI,EAAQQ,GAAY,GAAc,MAAVR,EAAgB,MAAO,GAAI,IAA2DC,EAAKJ,EAA5DD,EAAS,GAAQa,EAAaf,OAAOgB,KAAKV,GAAqB,IAAKH,EAAI,EAAGA,EAAIY,EAAWV,OAAQF,IAAOI,EAAMQ,EAAWZ,GAAQW,EAASG,QAAQV,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,EAFxMgB,CAA8BZ,EAAQQ,GAAuB,GAAId,OAAOmB,sBAAuB,CAAE,IAAIC,EAAmBpB,OAAOmB,sBAAsBb,GAAS,IAAKH,EAAI,EAAGA,EAAIiB,EAAiBf,OAAQF,IAAOI,EAAMa,EAAiBjB,GAAQW,EAASG,QAAQV,IAAQ,GAAkBP,OAAOQ,UAAUa,qBAAqBX,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,IAAU,OAAOL,EAMne,SAAS8S,EAASzR,EAAMC,GACtB,IAAIC,EAAQF,EAAKE,MACbC,EAAUH,EAAKG,QACfC,EAAQd,EAAyBU,EAAMzB,GAE3C,OAAoB,gBAAoB,MAAOC,EAAS,CACtD6B,MAAO,6BACPC,OAAQ,OACRC,QAAS,YACTC,MAAO,OACPC,KAAM,UACNC,IAAKT,EACL,kBAAmBE,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DS,GAAIR,GACHD,GAAS,KAAM7B,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EuC,EAAG,gBACHH,KAAM,UACHnC,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEsC,EAAG,0NAIP,IAAIC,EAA0B,aAAiB4Q,GAChC,K,oECpCA,MAA0B,0C,OCyjC1BC,EAtjCY,SAACtR,GAC1B,IAAMuR,EAAY/P,IAAMgQ,OAAO,MACzBC,EAAYjQ,IAAMgQ,OAAO,MAC/B,EAAsChQ,IAAMC,SAAS,GAArD,mBAAOiQ,EAAP,KAAoBC,EAApB,KACA,EAA0CnQ,IAAMC,UAAS,GAAzD,mBAAOmQ,EAAP,KAAsBC,EAAtB,KACMC,EAAgBtQ,IAAMgQ,OAAOxR,EAAM8I,MACzCgJ,EAAcC,QAAU/R,EAAM8I,KAC9B,IAAMkJ,EAAiBxQ,IAAMgQ,OAAOxR,EAAMiS,aAC1CD,EAAeD,QAAU/R,EAAMiS,YAE/B,IAAMC,EAAyB1Q,IAAMgQ,OAAOxR,EAAMmS,qBAClDD,EAAuBH,QAAU/R,EAAMmS,oBAEvC,IAAMC,EAAc,IACdC,EAAgB,GAChBC,EAAkB,GAExB,SAASC,EAAoBC,GAC3B,IAAIC,EAAOD,EAAEjU,OAAOmU,wBAChBrR,GAAKmR,EAAEG,QAAUF,EAAKjH,OAAS4G,EAAcK,EAAKrS,OAClDgR,GAAKoB,EAAEI,QAAUH,EAAK1P,MAAQqP,EAAcK,EAAKrS,OAErD,GAA+B,OAA3B4R,EAAeD,QAAkB,CAErBC,EAAeD,QAD7B,IAKMc,EAAQ3F,KAAKC,OAAOiE,EAAC,KAAiBiB,GAExCQ,GAAS,GAAKA,EAAQb,EAAeD,QAAQrT,OAC/CsB,EAAM8S,mBAAmBd,EAAeD,QAAQc,IAEhD7S,EAAM8S,mBAAmB,UAEtB,CACDzR,EAAI,IAAMA,EAAI,KAAO+P,EAAI,KAAOA,EAAI,KACtCpR,EAAM+S,2BAGJ1R,EAAI,KAAOA,EAAI,KAAO+P,EAAI,KAAOA,EAAI,KACvCpR,EAAMgT,wBAGJ3R,EAAI,KAAOA,EAAI,KAAO+P,EAAI,KAAOA,EAAI,KACvCpR,EAAMiT,4BAGJ5R,GAAK,IAAMA,EAAI,IAAM+P,GAAK,KAAOA,EAAI,KACvCpR,EAAMkT,WAAW,WAGf7R,GAAK,IAAMA,EAAI,IAAM+P,GAAK,KAAOA,EAAI,KACvCpR,EAAMkT,WAAW,UAGf7R,GAAK,IAAMA,EAAI,KAAO+P,GAAK,KAAOA,EAAI,KACxCpR,EAAMkT,WAAW,QAGf7R,GAAK,KAAOA,EAAI,KAAO+P,GAAK,KAAOA,EAAI,KACzCpR,EAAMkT,WAAW,SAGf7R,GAAK,KAAOA,EAAI,KAAO+P,GAAK,KAAOA,EAAI,KACzCpR,EAAMkT,WAAW,SAGf7R,GAAK,KAAOA,EAAI,KAAO+P,GAAK,KAAOA,EAAI,KACzCpR,EAAMkT,WAAW,SAGf7R,GAAK,KAAOA,EAAI,KAAO+P,GAAK,IAAMA,EAAI,IACxCpR,EAAMmT,UAGR,IAAMC,GACHtB,EAAcC,SAAWD,EAAcC,QAAQrT,OAC5CwO,KAAKmG,IAAIvB,EAAcC,QAAQrT,OAAQ,GACvC,IACD2T,GACEH,EAAuBH,QAAUO,EAAkB,IACxD,IACF,GAAIjR,GAAK,KAAOA,EAAI,KAAO+P,GAAKgC,GAAahC,EAAIgC,EAAY,GAE3D,YADApT,EAAMsT,eAIR,GAAIjS,GAAK,IAAMA,EAAI,KAAO+P,GAAK,IAAK,CAClC,IAAMyB,EAAQ3F,KAAKC,OAChBiE,EAAI,MACFiB,GACEH,EAAuBH,QAAUO,EAAkB,KAE1DtS,EAAMuT,mBAAmBV,QAEzB7S,EAAMuT,oBAAoB,IAKhC,SAASC,IACP,GAA0B,OAAtBjC,EAAUQ,QAAkB,CAC9B,IAAIU,EAAOlB,EAAUQ,QAAQW,wBAC7Bf,EAAec,EAAKrS,QAuBxB,IAAMqT,EAAoB,SAACjB,GACX,WAAVA,EAAE5T,KACJoB,EAAMsT,gBA22BV,OAv2BA9R,IAAMiB,WAAU,WASd,OAPA8O,EAAUQ,QAAQnP,iBAAiB,QAAS2P,GAC5CnM,OAAOxD,iBAAiB,SAAU4Q,GAClCpN,OAAOxD,iBAAiB,QAAS6Q,GAEjCD,IAGO,WACLjC,EAAUQ,QAAQzP,oBAAoB,QAASiQ,GAC/CnM,OAAO9D,oBAAoB,SAAUkR,GACrCpN,OAAO9D,oBAAoB,QAASmR,MAErC,CAAClC,IAEJ/P,IAAMiB,WAAU,WACd,GAAKmP,EAAL,CAIA,IACM8B,EADSnC,EAAUQ,QACN4B,WAAW,KAAM,CAAEC,OAAO,IAEvCC,EAASpC,EAAUM,SA8BzB,WACE2B,EAAII,UAAUD,EAAQ,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,IAAK,KAE7C7T,EAAM+T,mBACRL,EAAII,UAAUD,EAAQ,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,IAClDH,EAAII,UAAUD,EAAQ,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,IAEtD7T,EAAMgU,gBACRN,EAAII,UAAUD,EAAQ,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IACnDH,EAAII,UAAUD,EAAQ,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IAEvD7T,EAAMmS,oBACRuB,EAAII,UAAUD,EAAQ,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IACnDH,EAAII,UAAUD,EAAQ,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IAE3DH,EAAIO,UACFjU,EAAM8I,MAAQ9I,EAAM8I,KAAKpK,QAAUsB,EAAMkU,YACrC,UACA,UACNR,EAAIS,KAAO,sBACXT,EAAIU,UAAY,QAChBV,EAAIW,aAAe,SACnBX,EAAIY,SAAJ,UACKtU,EAAM8I,KAAO9I,EAAM8I,KAAKpK,OAAS,IADtC,cAEIsB,EAAMkU,YAFV,YAIE,IACA,KAtDJK,GA2DEb,EAAII,UACFD,EACA,EACA,IACA,IACA,GACA,GACC7T,EAAM8I,KAAOoE,KAAKmG,IAAIrT,EAAM8I,KAAKpK,OAAQ,GAAK,IAC5C2T,GAAiBrS,EAAMmS,oBAAsBG,EAAkB,IAChE,IACF,IACA,IAIJ,WACE,GAAkB,MAAdtS,EAAM8I,MAAgB9I,EAAM8I,KAAKpK,OAAS,EAC5C,IAAK,IAAIF,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAI4S,EACF,IACA5S,GACG6T,GACErS,EAAMmS,oBAAsBG,EAAkB,IACrDoB,EAAII,UACFD,EACA,EACA,IACA,IACAxB,EACA,EACAjB,EACA,IACAiB,GAAiBrS,EAAMmS,oBAAsBG,EAAkB,KArFvEkC,GAGkB,MAAdxU,EAAM8I,MAwFV,WACE,IAAK,IAAItK,EAAI,EAAGA,EAAIwB,EAAM8I,KAAKpK,OAAQF,IAAK,CAC1C,IAAI4S,EACF,IACA5S,GACG6T,GAAiBrS,EAAMmS,oBAAsBG,EAAkB,IAChEjR,EAAI,GAEJnB,EACFmS,GAAiBrS,EAAMmS,oBAAsBG,EAAkB,GAC7DmC,EAASzU,EAAM8I,KAAKtK,GAExBkV,EAAII,UACFD,EACA,EACA,IACA,IACAxB,EACA,EACAjB,EACA,IACAiB,GAAiBrS,EAAMmS,oBAAsBG,EAAkB,IAIjE,IAAIoC,EAAOhB,EAAIiB,qBAAqBtT,EAAG+P,EAAG/P,EAAG+P,EAAIlR,GACjDwU,EAAKE,aACH,EACA5U,EAAM6U,gBAAgBlM,SAASnK,GAAK,UAAY,WAElDkW,EAAKE,aACH,IACA5U,EAAM6U,gBAAgBlM,SAASnK,GAAK,UAAY,WAElDkW,EAAKE,aACH,IACA5U,EAAM6U,gBAAgBlM,SAASnK,GAAK,UAAY,WAElDkW,EAAKE,aACH,EACA5U,EAAM6U,gBAAgBlM,SAASnK,GAAK,UAAY,WAElDkV,EAAIO,UAAYS,EAChBhB,EAAIoB,SAASzT,EAAG+P,EApCJ,IAoCclR,GAG1BwT,EAAIqB,YACJrB,EAAIsB,YAAc,UAClBtB,EAAIuB,UAAY,EAChBvB,EAAIjB,KAAKpR,EAAG+P,EA1CA,IA0CUlR,GACtBwT,EAAIlK,SAGJkK,EAAIqB,YACJrB,EAAIwB,OAAO7T,GAAQ+P,GACnBsC,EAAIyB,OACF9T,GACA+P,GACGiB,GACErS,EAAMmS,oBAAsBG,EAAkB,IACjD,GAEJoB,EAAIwB,OAAO7T,GAAQ+P,GACnBsC,EAAIyB,OACF9T,GACA+P,GACGiB,GACErS,EAAMmS,oBAAsBG,EAAkB,IACjD,GAEJoB,EAAIwB,OAAO7T,IAAS+P,GACpBsC,EAAIyB,OACF9T,IACA+P,GACGiB,GACErS,EAAMmS,oBAAsBG,EAAkB,IACjD,GAEJoB,EAAIwB,OAAO7T,IAAS+P,GACpBsC,EAAIyB,OACF9T,IACA+P,GACGiB,GACErS,EAAMmS,oBAAsBG,EAAkB,IACjD,GAEJoB,EAAIwB,OAAO7T,IAAS+P,GACpBsC,EAAIyB,OACF9T,IACA+P,GACGiB,GACErS,EAAMmS,oBAAsBG,EAAkB,IACjD,GAEJoB,EAAIlK,SAGJkK,EAAII,UACFD,EACA,KAAOY,EAAOW,UAAY,GAAsB,GAAjBX,EAAOY,OAAc,GAAK,GACzD,IACA,GACA,GACAhU,GACA+P,EAAI,IAAMpR,EAAMmS,oBAAsB,GAAK,GAC3C,GACA,IAIoB,GAAlBsC,EAAOa,SAAgBb,EAAOY,QAA+B,IAArBZ,EAAOW,WACjD1B,EAAII,UACFD,EACA,IACA,IACA,GACA,GACAxS,GACA+P,EAAI,IAAMpR,EAAMmS,oBAAsB,GAAK,GAC3C,GACA,IAKJ,IA2CS,EA3CLoD,EAAmBC,EACrBf,EAAOgB,OAAS,IAAMhB,EAAOiB,MAC7B,GAoBF,GAlBAhC,EAAII,UACFD,EACA0B,EAAiB,GACjBA,EAAiB,GACjB,GACA,GACAlU,GACA+P,EAAI,GACJ,GACA,IAIFsC,EAAIO,UAAY,UAChBP,EAAIS,KAAO,sBACXT,EAAIU,UAAY,OAChBV,EAAIW,aAAe,SACnBX,EAAIY,SAASG,EAAOnF,KAAMjO,GAAQ+P,EAAI,IAClCpR,EAAMgU,gBACRN,EAAIO,UAAY,UAChBP,EAAIU,UAAY,QACEV,EAAIiC,YAAJ,UACblB,EAAOnF,KADM,YACEmF,EAAOmB,SACzBxV,MACc,IACdsT,EAAIY,SAAJ,WAAiBG,EAAOmB,OAAO5K,MAAM,EAAG,GAAxC,KAA+C3J,IAAS+P,EAAI,IAE5DsC,EAAIY,SAAJ,WAAiBG,EAAOmB,OAAxB,KAAmCvU,IAAS+P,EAAI,IAElDsC,EAAIU,UAAY,OAChBV,EAAIO,UAAY,UAIlB,GAAIjU,EAAMmS,oBACR,GAAyB,IAArBsC,EAAOW,UACT1B,EAAIO,UAAY,UAChBP,EAAIS,KAAO,6BACXT,EAAIY,SAAS,0BAA2BjT,GAAQ+P,EAAI,SAEpDsC,EAAIO,UAAY,UAChBP,EAAIS,KAAO,sBACXT,EAAIY,UACF,UAAAG,EAAOoB,gBAAP,eAAiBvG,OAAQ,0BACzBjO,GACA+P,EAAI,IAMVsC,EAAIS,KAAO,aACXT,EAAIU,UAAY,QAChB,IAAK,IAAI0B,EAAI,EAAGA,EAAIrB,EAAOsB,QAAQrX,OAAQoX,IACzC,GAC4B,MAA1BrB,EAAOsB,QAAQD,GAAGxG,MACS,SAA3BmF,EAAOsB,QAAQD,GAAGxG,MACS,cAA3BmF,EAAOsB,QAAQD,GAAGxG,KAHpB,CAOA,IAAI0G,EAAoBC,EACtBxB,EAAOsB,QAAQD,GAAGxG,MAClB,GAEFoE,EAAII,UACFD,EACAmC,EAAkB,GAClBA,EAAkB,GAClB,GACA,GACA3U,IAAU,GAAKyU,EACf1E,EAAI,IAAMpR,EAAMmS,oBAAsB,GAAK,GAC3C,GACA,IAGFuB,EAAIO,UAAY,QAChBP,EAAIY,SACFG,EAAOsB,QAAQD,GAAGI,MAClB7U,IAAU,GAAKyU,EAAI,GACnB1E,EAAI,GAAK,GAAKpR,EAAMmS,oBAAsB,GAAK,IAEjDuB,EAAIO,UAAY,QAChBP,EAAIY,SACFG,EAAOsB,QAAQD,GAAGI,MAClB7U,IAAU,GAAKyU,EAAI,GACnB1E,EAAI,GAAK,GAAKpR,EAAMmS,oBAAsB,GAAK,IAenD,GAVAuB,EAAIO,UAAY,UAChBP,EAAIU,UAAY,SAChBV,EAAIS,KAAO,aACXT,EAAIY,SACFG,EAAO0B,WACP9U,IACA+P,EAAI,IAAMpR,EAAMmS,oBAAsB,GAAK,IAIpB,IAArBsC,EAAOW,UACT1B,EAAIS,KAAO,6BACXT,EAAIO,UAAY,UAChBP,EAAIY,SACF,kBACAjT,IACA+P,EAAI,IAAMpR,EAAMmS,oBAAsB,GAAK,QAExC,CACLuB,EAAIS,KAAO,sBACX,IAAIiC,EAAYC,EAAS5B,EAAO6B,MAAO,KACnCF,EAAU1X,OAAS,EACrBgV,EAAIY,SACF8B,EAAU,GAAK,MACf/U,IACA+P,EAAI,IAAMpR,EAAMmS,oBAAsB,GAAK,IAEf,IAArBiE,EAAU1X,QACnBgV,EAAIY,SACF8B,EAAU,GACV/U,IACA+P,EAAI,IAAMpR,EAAMmS,oBAAsB,GAAK,MApV7BoE,GAGC,MAArBvW,EAAMiS,aAwVV,WACEyB,EAAI8C,YAAc,GAElB,IAAIpF,EAAI,IACJ/P,EAAI,GACJjB,EAAQ,IACRF,EACFF,EAAM8I,KAAKpK,QACR2T,GACEH,EAAuBH,QAAUO,EAAkB,IACxD,EAEFoB,EAAIO,UAAY,UAEhBP,EAAIoB,SAASzT,EAAG+P,EAAGhR,EAAOF,GAC1BwT,EAAI8C,YAAc,EAElB,IAAIC,EAAU,IACVC,EAAU1W,EAAMiS,YAAYvT,OAAS2T,EAAgB,GACrDsE,GAAWvW,EAAQqW,GAAW,EAAI,GAClCG,EAAUxF,EAAI,GAElBsC,EAAIO,UAAY,UAChBP,EAAIoB,SAAS6B,EAASC,EAASH,EAASC,GAExChD,EAAII,UACFD,EACA,EACA,EACA4C,EAAU,EACV,GACAE,EACAC,EACAH,EAAU,EACV,IAEF/C,EAAII,UACFD,EACA,IAAM4C,EAAU,EAChB,EACAA,EAAU,EACV,GACAE,EAAUF,EAAU,EACpBG,EACAH,EAAU,EACV,IAGF/C,EAAIO,UAAY,UAChBP,EAAIS,KAAO,sBACXT,EAAIU,UAAY,SAChBV,EAAIW,aAAe,SACnBX,EAAIY,SAAS,gBAAiBqC,EAAUF,EAAU,EAAGG,EAAU,IAG/D,IAAK,IAAIpY,EAAI,EAAGA,EAAIwB,EAAMiS,YAAYvT,OAAQF,IAC5CkV,EAAII,UACFD,EACA,EACA,GACA,EACA,GACA8C,EACAC,EAAU,GAAKpY,EAAI6T,EACnB,EACA,IAEFqB,EAAII,UACFD,EACA,IACA,GACA,EACA,GACA8C,EAAUF,EAAU,EACpBG,EAAU,GAAKpY,EAAI6T,EACnB,EACA,IAKJqB,EAAII,UACFD,EACA,EACA,IACA4C,EACA,EACAE,EACAC,EAAU,GAAK5W,EAAMiS,YAAYvT,OAAS2T,EAC1CoE,EAAU,EACV,GAOJ,SAA+BI,EAAMC,EAAMC,EAAMC,GAC/C,IAAK,IAAIxY,EAAI,EAAGA,EAAIwB,EAAMiS,YAAYvT,OAAQF,IAAK,CACjD,IAAI4S,EAAI0F,EAAO,GAAKtY,EAAI6T,EACpBhR,EAAIwV,EAAO,EACXzW,EAAQ2W,EAAO,EACf7W,EAASmS,EACToC,EAASzU,EAAMiS,YAAYzT,GAG3BkW,EAAOhB,EAAIiB,qBAAqBtT,EAAG+P,EAAG/P,EAAG+P,EAAIlR,GACjDwU,EAAKE,aAAa,EAAG,WACrBF,EAAKE,aAAa,IAAM,WACxBF,EAAKE,aAAa,IAAM,WACxBF,EAAKE,aAAa,EAAG,WACrBlB,EAAIO,UAAYS,EAChBhB,EAAIoB,SAASzT,EAAG+P,EAAGhR,EAAOF,GAG1BwT,EAAIqB,YACJrB,EAAIsB,YAAc,UAClBtB,EAAIuB,UAAY,EAChBvB,EAAIjB,KAAKpR,EAAG+P,EAAGhR,EAAOF,GACtBwT,EAAIlK,SAGJkK,EAAIqB,YACJrB,EAAIwB,OAAO7T,EAAI,GAAI+P,GACnBsC,EAAIyB,OAAO9T,EAAI,GAAI+P,EAAIiB,EAAgB,GACvCqB,EAAIwB,OAAO7T,EAAI,GAAI+P,GACnBsC,EAAIyB,OAAO9T,EAAI,GAAI+P,EAAIiB,EAAgB,GACvCqB,EAAIwB,OAAO7T,EAAI,IAAK+P,GACpBsC,EAAIyB,OAAO9T,EAAI,IAAK+P,EAAIiB,EAAgB,GACxCqB,EAAIwB,OAAO7T,EAAI,IAAK+P,GACpBsC,EAAIyB,OAAO9T,EAAI,IAAK+P,EAAIiB,EAAgB,GACxCqB,EAAIwB,OAAO7T,EAAI,IAAK+P,GACpBsC,EAAIyB,OAAO9T,EAAI,IAAK+P,EAAIiB,EAAgB,GACxCqB,EAAIlK,SAGJkK,EAAII,UACFD,EACA,KAAOY,EAAOW,UAAY,GAAsB,GAAjBX,EAAOY,OAAc,GAAK,GACzD,IACA,GACA,GACAhU,EAAI,GACJ+P,EAAI,GACJ,GACA,IAIoB,GAAlBqD,EAAOa,SAAgBb,EAAOY,QAChC3B,EAAII,UAAUD,EAAQ,IAAK,IAAK,GAAI,GAAIxS,EAAI,EAAG+P,EAAI,GAAI,GAAI,IAI7D,IAAImE,EAAmBC,EACrBf,EAAOgB,OAAS,IAAMhB,EAAOiB,MAC7B,GAEFhC,EAAII,UACFD,EACA0B,EAAiB,GACjBA,EAAiB,GACjB,GACA,GACAlU,EAAI,GACJ+P,EAAI,GACJ,GACA,IAIFsC,EAAIO,UAAY,UAChBP,EAAIS,KAAO,sBACXT,EAAIU,UAAY,OAChBV,EAAIW,aAAe,SACnBX,EAAIY,SAASG,EAAOnF,KAAMjO,EAAI,GAAI+P,EAAI,IAEtCsC,EAAIO,UAAY,UAChBP,EAAIU,UAAY,QACEV,EAAIiC,YAAJ,UACblB,EAAOnF,KADM,YACEmF,EAAOmB,SACzBxV,MACc,IACdsT,EAAIY,SAAJ,WAAiBG,EAAOmB,OAAO5K,MAAM,EAAG,GAAxC,KAA+C3J,EAAI,IAAK+P,EAAI,IAE5DsC,EAAIY,SAAJ,WAAiBG,EAAOmB,OAAxB,KAAmCvU,EAAI,IAAK+P,EAAI,IAElDsC,EAAIU,UAAY,OAChBV,EAAIO,UAAY,UAGhBP,EAAIS,KAAO,aACXT,EAAIU,UAAY,QAChB,IAAK,IAAI0B,EAAI,EAAGA,EAAIrB,EAAOsB,QAAQrX,OAAQoX,IACzC,GAC4B,MAA1BrB,EAAOsB,QAAQD,GAAGxG,MACS,SAA3BmF,EAAOsB,QAAQD,GAAGxG,KAFpB,CAMA,IAAI0G,EAAoBC,EACtBxB,EAAOsB,QAAQD,GAAGxG,MAClB,GAEFoE,EAAII,UACFD,EACAmC,EAAkB,GAClBA,EAAkB,GAClB,GACA,GACA3U,EAAI,IAAM,GAAKyU,EACf1E,EAAI,GACJ,GACA,IAGFsC,EAAIO,UAAY,QAChBP,EAAIY,SACFG,EAAOsB,QAAQD,GAAGI,MAClB7U,EAAI,IAAM,GAAKyU,EAAI,GACnB1E,EAAI,GAAK,GAEXsC,EAAIO,UAAY,QAChBP,EAAIY,SACFG,EAAOsB,QAAQD,GAAGI,MAClB7U,EAAI,IAAM,GAAKyU,EAAI,GACnB1E,EAAI,GAAK,GAYb,GAPAsC,EAAIO,UAAY,UAChBP,EAAIU,UAAY,SAChBV,EAAIS,KAAO,aACXT,EAAIY,SAASG,EAAO0B,WAAY9U,EAAI,IAAK+P,EAAI,IAG7CsC,EAAIS,KAAO,sBACQ,aAAfM,EAAOnF,KACToE,EAAIY,SAAS,kBAAmBjT,EAAI,IAAK+P,EAAI,QACxC,CACL,IAAIgF,EAAYC,EAAS5B,EAAO6B,MAAO,IACnCF,EAAU1X,OAAS,EACrBgV,EAAIY,SAAS8B,EAAU,GAAK,MAAO/U,EAAI,IAAK+P,EAAI,IAClB,IAArBgF,EAAU1X,QACnBgV,EAAIY,SAAS8B,EAAU,GAAI/U,EAAI,IAAK+P,EAAI,MAvJ9C6F,CAAsBN,EAASC,EAASH,GArbxCS,GAGElX,EAAMmX,YACRzD,EAAIO,UAAY,UAChBP,EAAIoB,SAAS1C,IAAuB,IAAK,IAAK,IAE9CsB,EAAIO,UAAY,UAChBP,EAAIS,KAAO,sBACXT,EAAIU,UAAY,SAChBV,EAAIW,aAAe,SACnBX,EAAIY,SAAS,0BAA2BlC,IAAiB,MAwkB3D,SAASiE,EAASlI,EAAMjM,GACtB,GAAa,OAATiM,EAAe,MAAO,GAK1B,IAJA,IAAIiJ,EAAQjJ,EAAKkJ,MAAM,KACnBC,EAAQ,GACRC,EAAcH,EAAM,GAEf5Y,EAAI,EAAGA,EAAI4Y,EAAM1Y,OAAQF,IAAK,CACrC,IAAIgZ,EAAOJ,EAAM5Y,GACLkV,EAAIiC,YAAY4B,EAAc,IAAMC,GAAMpX,MAC1C8B,EACVqV,GAAe,IAAMC,GAErBF,EAAMG,KAAKF,GACXA,EAAcC,GAIlB,OADAF,EAAMG,KAAKF,GACJD,EAIT,SAAS9B,EAAoBkC,EAAMC,GACjC,IAAIC,EAAO,EACPC,EAAO,EACX,OAAQH,GACN,IAAK,iBACL,IAAK,yBACHE,EAAO,EACPC,EAAO,EACP,MACF,IAAK,oBACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,kBACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,eACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,aACL,IAAK,iBACL,IAAK,kBACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,eACL,IAAK,oBACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,eACL,IAAK,oBACL,IAAK,8BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,iBACL,IAAK,2BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,kBACL,IAAK,4BACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,mBACL,IAAK,qBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,eACL,IAAK,uBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,gBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,aACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,WACL,IAAK,eACL,IAAK,gBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,aACL,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,gBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,gBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,gBACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,aACL,IAAK,kBACL,IAAK,4BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,eACL,IAAK,yBACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,gBACL,IAAK,0BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,iBACL,IAAK,mBACHD,EAAO,GACPC,EAAO,GACP,MACF,QACED,EAAO,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F,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,eACL,IAAK,oBACL,IAAK,8BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,iBACL,IAAK,2BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,kBACL,IAAK,4BACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,mBACL,IAAK,qBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,eACL,IAAK,uBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,gBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,aACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,WACL,IAAK,eACL,IAAK,gBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,aACL,IAAK,kBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,gBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,gBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,gBACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,aACL,IAAK,kBACL,IAAK,4BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,eACL,IAAK,yBACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,gBACL,IAAK,0BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,iBACL,IAAK,mBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,cACL,IAAK,gBACL,IAAK,0BACL,IAAK,4BACHD,EAAO,GACPC,EAAO,GACP,MACF,QACED,EAAO,GACPC,EAAO,GAGX,MAAO,CAACD,GAAQD,EAAW,IAAM,KAAME,EAAO,KAzVzBrC,CACnB0d,EAAMc,OAAOve,OAAS,IAAMyd,EAAMc,OAAOte,KACzCwd,EAAMI,UAER5f,EAAII,UACFD,EACAwhB,EAAe,GACfA,EAAe,GACf,GACA,GACA,GACAtyB,EAAM,EACN,GACA,IAIGmwB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GACP,MACF,IAAK,aACL,IAAK,kBACL,IAAK,4BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,eACL,IAAK,yBACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,gBACL,IAAK,0BACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,iBACL,IAAK,mBACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,cACL,IAAK,gBACL,IAAK,0BACL,IAAK,4BACHD,EAAO,GACPC,EAAO,GACP,MACF,QACED,EAAO,GACPC,EAAO,GAGX,MAAO,CAACD,GAAQD,EAAW,IAAM,KAAME,EAAO,KAIhD,SAAS5B,EAAqB6B,EAAWH,GACvC,IAAIC,EAAO,EACPC,EAAO,EACX,OAAQC,GACN,IAAK,YACHF,EAAO,GACPC,EAAO,EACP,MACF,IAAK,YACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,YACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,OACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,SACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,QACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,eACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,UACHD,EAAO,EACPC,EAAO,EACP,MACF,IAAK,OACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,UACHD,EAAO,GACPC,EAAO,EACP,MACF,IAAK,SACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,QACHD,EAAO,EACPC,EAAO,GACP,MACF,IAAK,WACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,UACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,SACHD,EAAO,GACPC,EAAO,GACP,MACF,IAAK,OACL,IAAK,YACHD,EAAO,KAAOD,EAAW,EAAI,KAC7BE,EAAO,EAGX,MAAO,CAACD,EAAO,KAAOD,EAAW,EAAI,KAAME,EAAO,QAEnD,CACD7X,EAAM8I,KACN9I,EAAMo6B,aACNp6B,EAAMm6B,eACNvoB,EACAgmB,EAAeF,WACfE,EAAeY,KACfZ,EAAea,YACfz4B,EAAMm7B,yBACNn7B,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","file":"static/js/main.de52f537.chunk.js","sourcesContent":["var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgThumbsDown(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgThumbsDown);\nexport default __webpack_public_path__ + \"static/media/thumbs_down.201c1f73.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgThumbsUp(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0V0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgThumbsUp);\nexport default __webpack_public_path__ + \"static/media/thumbs_up.3d4425cc.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgServer(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 14h4v-4H4v4zm0 5h4v-4H4v4zM4 9h4V5H4v4zm5 5h12v-4H9v4zm0 5h12v-4H9v4zM9 5v4h12V5H9z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgServer);\nexport default __webpack_public_path__ + \"static/media/server.59f6b56a.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFilter(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n enableBackground: \"new 0 0 24 24\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0,0h24 M24,24H0\",\n fill: \"none\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7,6h10l-5.01,6.3L7,6z M4.25,5.61C6.27,8.2,10,13,10,13v6c0,0.55,0.45,1,1,1h2c0.55,0,1-0.45,1-1v-6 c0,0,3.72-4.8,5.74-7.39C20.25,4.95,19.78,4,18.95,4H5.04C4.21,4,3.74,4.95,4.25,5.61z\",\n fill: \"#fff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0,0h24v24H0V0z\",\n fill: \"none\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFilter);\nexport default __webpack_public_path__ + \"static/media/filter.bc025d7d.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCapture(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCapture);\nexport default __webpack_public_path__ + \"static/media/capture.9fe33868.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgNotification(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgNotification);\nexport default __webpack_public_path__ + \"static/media/notification.b7e12c9c.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFullscreen(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFullscreen);\nexport default __webpack_public_path__ + \"static/media/fullscreen.59add6ef.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFullscreenExit(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFullscreenExit);\nexport default __webpack_public_path__ + \"static/media/fullscreen-exit.d69c2e17.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _g2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgUpdate(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n enableBackground: \"new 0 0 24 24\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"none\",\n height: 24,\n width: 24,\n x: 0\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21,10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-0.1c-2.73,2.71-2.73,7.08,0,9.79s7.15,2.71,9.88,0 C18.32,15.65,19,14.08,19,12.1h2c0,1.98-0.88,4.55-2.64,6.29c-3.51,3.48-9.21,3.48-12.72,0c-3.5-3.47-3.53-9.11-0.02-12.58 s9.14-3.47,12.65,0L21,3V10.12z M12.5,8v4.25l3.5,2.08l-0.72,1.21L11,13V8H12.5z\"\n }))))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgUpdate);\nexport default __webpack_public_path__ + \"static/media/update.2c614442.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { ReactComponent as ServerSelectSVG } from \"../../assets/global/server.svg\";\r\nimport { ReactComponent as FilterSVG } from \"../../assets/global/filter.svg\";\r\nimport { ReactComponent as CloseSVG } from \"../../assets/global/close.svg\";\r\nimport { ReactComponent as CaptureSVG } from \"../../assets/global/capture.svg\";\r\nimport { ReactComponent as NotificationSVG } from \"../../assets/global/notification.svg\";\r\nimport { ReactComponent as FullscreenSVG } from \"../../assets/global/fullscreen.svg\";\r\nimport { ReactComponent as FullscreenExitSVG } from \"../../assets/global/fullscreen-exit.svg\";\r\nimport { ReactComponent as LinkSVG } from \"../../assets/global/chain.svg\";\r\nimport { ReactComponent as RefreshSVG } from \"../../assets/global/refresh.svg\";\r\nimport { ReactComponent as UpdateSVG } from \"../../assets/global/update.svg\";\r\nimport { Link, useHistory } from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\n\r\nconst LfmFilterBar = (props) => {\r\n const [fullscreen, set_fullscreen] = React.useState(false);\r\n const history = useHistory();\r\n const goBack = () => {\r\n history.goBack();\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!props.minimal) {\r\n if (fullscreen) {\r\n $(\"#main-banner\").css({ display: \"none\" });\r\n $(\"#main-nav\").css({ display: \"none\" });\r\n $(\"#top-content-padding\").css({ display: \"none\" });\r\n } else {\r\n $(\"#main-banner\").css({ display: \"block\" });\r\n $(\"#main-nav\").css({ display: \"block\" });\r\n $(\"#top-content-padding\").css({ display: \"block\" });\r\n }\r\n }\r\n }, [fullscreen]);\r\n\r\n React.useEffect(() => {\r\n document\r\n .getElementById(\"filter-bar\")\r\n ?.addEventListener(\"mouseleave\", startCollapseTimeout);\r\n document\r\n .getElementById(\"filter-bar\")\r\n ?.addEventListener(\"mouseenter\", stopCollapseTimeout);\r\n startCollapseTimeout();\r\n\r\n return () => clearTimeout(collapseTimeout);\r\n }, []);\r\n\r\n function startCollapseTimeout() {\r\n clearTimeout(collapseTimeout);\r\n collapseTimeout = setTimeout(() => collapseFilterButtons(), 5000);\r\n }\r\n\r\n function stopCollapseTimeout() {\r\n clearTimeout(collapseTimeout);\r\n }\r\n\r\n let collapseTimeout;\r\n function collapseFilterButtons() {\r\n $(\".filter-bar-item.collapsible\").css({ maxWidth: `44px` });\r\n $(\".filter-bar-item.collapsible span\").css({ opacity: 0 });\r\n document\r\n .getElementById(\"filter-bar\")\r\n ?.removeEventListener(\"mouseleave\", startCollapseTimeout);\r\n document\r\n .getElementById(\"filter-bar\")\r\n ?.removeEventListener(\"mouseenter\", stopCollapseTimeout);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n {props.minimal && (\r\n
props.closePanel()}>\r\n \r\n {props.currentServer && (\r\n \r\n {props.currentServer}\r\n \r\n )}\r\n
\r\n )}\r\n {props.minimal && (\r\n {\r\n Log(\"Clicked permalink\", props.permalink);\r\n }}\r\n >\r\n \r\n \r\n Permalink\r\n \r\n \r\n )}\r\n {!props.minimal && (\r\n \r\n \r\n {props.currentServer}\r\n \r\n )}\r\n {props.showSave && !props.minimal && (\r\n {\r\n Log(\"Took LFM screenshot\", `Grouping ${props.currentServer}`);\r\n props.handleSaveButton();\r\n }}\r\n >\r\n \r\n \r\n Screenshot\r\n \r\n
\r\n )}\r\n {!props.hideFilterButton && (\r\n \r\n \r\n \r\n Filters\r\n \r\n \r\n )}\r\n {props.showNotifications && !props.minimal && (\r\n \r\n \r\n \r\n Notifications\r\n \r\n \r\n )}\r\n {!props.minimal && (\r\n {\r\n if (!fullscreen) {\r\n Log(\"Entered fullscreen\", `Grouping ${props.currentServer}`);\r\n }\r\n set_fullscreen(!fullscreen);\r\n }}\r\n >\r\n {fullscreen ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {fullscreen ? \"Go back\" : \"Fullscreen\"}\r\n \r\n \r\n )}\r\n {props.showRefreshButton && (\r\n \r\n {props.failedToFetchCharacters ? (\r\n <>\r\n \r\n \r\n Refresh characters\r\n \r\n \r\n ) : props.failedToFetchRaidActivity ? (\r\n <>\r\n \r\n \r\n Refresh raid timers\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\nexport default LfmFilterBar;\r\n","import { Fetch } from \"./DataLoader\";\r\n\r\nconst CAAS_LIFETIME = 1000 * 60 * 60 * 24; // Cache for 1 day\r\n\r\n/**\r\n * Returns cached config or, if the cached config has expired,\r\n * makes a network call to CaaS to fetch an up-to-date config.\r\n * @returns Config object from cache or CaaS\r\n */\r\nasync function getConfig(lifetime = CAAS_LIFETIME) {\r\n try {\r\n const cachedCaaS = localStorage.getItem(\"caas\");\r\n const caas = JSON.parse(cachedCaaS);\r\n const caasExists = cachedCaaS != null;\r\n const caasExpired =\r\n caas.fetched == null || new Date().getTime() - caas.fetched > lifetime;\r\n\r\n if (caasExists && !caasExpired) {\r\n return caas.caas;\r\n }\r\n } catch (err) {}\r\n const caas = await Fetch(\"https://api.ddoaudit.com/caas\", 2000);\r\n localStorage.setItem(\r\n \"caas\",\r\n JSON.stringify({ caas, fetched: new Date().getTime() })\r\n );\r\n return caas;\r\n}\r\n\r\nfunction getValueFromLabel(caas, label) {\r\n let result = \"\";\r\n if (Array.isArray(caas)) {\r\n caas.forEach((entry) => {\r\n if (entry.label === label) result = entry.value;\r\n });\r\n }\r\n return result;\r\n}\r\n\r\nexport { getConfig, getValueFromLabel };\r\n","// Browser check\r\n// Opera 8.0+\r\nconst isOpera = !!window.opera || navigator.userAgent.indexOf(\" OPR/\") >= 0;\r\n\r\n// Firefox 1.0+\r\nconst isFirefox = typeof InstallTrigger !== \"undefined\";\r\n\r\n// Internet Explorer 6-11\r\nconst isIE = /*@cc_on!@*/ false || !!document.documentMode;\r\n\r\n// Edge 20+\r\nconst isEdge = !isIE && !!window.StyleMedia;\r\n\r\n// Chrome 1 - 71\r\nconst isChrome =\r\n !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);\r\n\r\nconst LOG_USER_EVENTS = true;\r\n\r\nexport async function Submit(title, comment) {\r\n // event.preventDefault();\r\n let browser;\r\n if (isChrome) browser = \"chrome\";\r\n else if (isFirefox) browser = \"firefox\";\r\n else if (isIE) browser = \"ie\";\r\n else if (isEdge) browser = \"edge\";\r\n else if (isOpera) browser = \"opera\";\r\n else browser = \"unknown\";\r\n\r\n const url = \"https://api.ddoaudit.com/submitmessage\";\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ browser, title, comment }),\r\n };\r\n console.log(JSON.stringify({ browser, title, comment }));\r\n try {\r\n const res = await fetch(url, requestOptions);\r\n const response = await res.json();\r\n return response;\r\n } catch (error) {\r\n console.log(\"Submission error\", error);\r\n }\r\n}\r\n\r\nexport function Log(event, meta = \"\") {\r\n if (!LOG_USER_EVENTS) return;\r\n const url = \"https://api.ddoaudit.com/log\";\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ event, meta }),\r\n };\r\n\r\n fetch(url, requestOptions)\r\n .then((res) => res.json())\r\n .then((response) => {})\r\n .catch((error) => {});\r\n}\r\n","import React from \"react\";\r\nimport { SERVER_LIST } from \"../../constants/Servers\";\r\n\r\nconst CustomBarLegend = (props) => {\r\n const COLORS = [\r\n \"hsl(205, 70%, 41%)\",\r\n \"hsl(28, 100%, 53%)\",\r\n \"hsl(120, 57%, 40%)\",\r\n \"hsl(360, 69%, 50%)\",\r\n \"hsl(271, 39%, 57%)\",\r\n \"hsl(10, 30%, 42%)\",\r\n \"hsl(318, 66%, 68%)\",\r\n \"hsl(0, 0%, 50%)\",\r\n \"hsl(60, 70%, 44%)\",\r\n ];\r\n\r\n return (\r\n \r\n {props.legendKeys &&\r\n props.legendKeys.map(({ key, color }, i) => (\r\n props.switchExcludedSeries(key)}\r\n >\r\n \r\n {key}\r\n \r\n ))}\r\n {!props.legendKeys &&\r\n props.data &&\r\n SERVER_LIST.map((server, i) => (\r\n props.switchExcludedSeries(server)}\r\n >\r\n \r\n {server}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default CustomBarLegend;\r\n","import React from \"react\";\r\nimport { ResponsiveBar } from \"@nivo/bar\";\r\nimport CustomBarLegend from \"./CustomBarLegend\";\r\n\r\n// This chart is used to show class distribution.\r\n// Pages: Servers\r\n\r\nconst theme = {\r\n background: \"var(--base)\",\r\n textColor: \"var(--text)\",\r\n fontSize: 14,\r\n axis: {\r\n domain: {\r\n line: {\r\n stroke: \"#777777\",\r\n strokeWidth: 1,\r\n },\r\n },\r\n ticks: {\r\n line: {\r\n stroke: \"#777777\",\r\n strokeWidth: 2,\r\n },\r\n },\r\n },\r\n grid: {\r\n line: {\r\n stroke: \"#dddddd\",\r\n strokeWidth: 1,\r\n },\r\n },\r\n crosshair: {\r\n line: {\r\n stroke: \"var(--text)\",\r\n strokeWidth: 1,\r\n strokeOpacity: 1,\r\n strokeDasharray: \"6 6\",\r\n },\r\n },\r\n tooltip: {\r\n container: {\r\n background: \"var(--base)\",\r\n color: \"inherit\",\r\n fontSize: \"inherit\",\r\n borderRadius: \"2px\",\r\n boxShadow: \"0 0 6px var(--black)\",\r\n padding: \"5px 9px\",\r\n },\r\n basic: {\r\n whiteSpace: \"pre\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n table: {},\r\n tableCell: {\r\n padding: \"3px 5px\",\r\n },\r\n },\r\n};\r\n\r\nconst ChartBar = (props) => {\r\n const [isMobileLoaded, setIsMobileLoaded] = React.useState(false);\r\n\r\n const [isMobile, setIsMobile] = React.useState(null);\r\n React.useEffect(() => {\r\n setIsMobile(window.innerWidth <= 950);\r\n }, []);\r\n\r\n const [excludedSeries, setExcludedSeries] = React.useState(\r\n props.forceHardcore ? [] : [\"Hardcore\"]\r\n );\r\n function switchExcludedSeries(server) {\r\n if (excludedSeries.includes(server)) {\r\n let temp = [...excludedSeries.filter((s) => s != server)];\r\n setExcludedSeries([...temp]);\r\n } else {\r\n let temp = [...excludedSeries, server];\r\n setExcludedSeries([...temp]);\r\n }\r\n }\r\n\r\n function xLabel(value) {\r\n if (props.days) {\r\n if (value % 24 === 0) {\r\n return [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"][\r\n Math.floor(value / 24)\r\n ];\r\n } else if (value % 6 === 0) {\r\n return value - Math.floor(value / 24) * 24;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n return (\r\n
\r\n setIsMobileLoaded(true)}\r\n >\r\n Show this graph\r\n
\r\n \r\n {props.data ? (\r\n !excludedSeries.includes(k))}\r\n indexBy={props.indexBy}\r\n margin={{\r\n top: 20,\r\n right: isMobile ? 40 : 60,\r\n bottom: isMobile ? 80 : props.paddingBottom || 80,\r\n left: isMobile ? 40 : 60,\r\n }}\r\n padding={0.15}\r\n minValue={0}\r\n groupMode={\r\n isMobile ? \"\" : props.display === \"grouped\" ? \"grouped\" : \"\"\r\n }\r\n valueScale={{ type: \"linear\" }}\r\n indexScale={{ type: \"band\", round: true }}\r\n colors={\r\n props.dataIncludesColors\r\n ? ({ id, data }) => data[`${id}Color`]\r\n : { scheme: \"category10\" }\r\n }\r\n borderColor={{\r\n from: \"color\",\r\n modifiers: [[\"darker\", 1.6]],\r\n }}\r\n axisTop={null}\r\n axisRight={null}\r\n axisBottom={{\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: isMobile || !props.straightLegend ? -45 : 0,\r\n legend: isMobile ? \"\" : props.legendBottom || \"\",\r\n legendPosition: \"middle\",\r\n legendOffset: props.legendOffset || 32,\r\n format: (value) => xLabel(value),\r\n }}\r\n axisLeft={{\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: 0,\r\n legend: isMobile ? \"\" : props.legendLeft || \"\",\r\n legendPosition: \"middle\",\r\n legendOffset: -50,\r\n // format: (value) =>\r\n // `${props.display === \"Grouped\" ? value + \"%\" : \"\"}`,\r\n }}\r\n // tooltipFormat={(value) => `${value}%`}\r\n // label={(d) => `${Math.round(d.value)}%`}\r\n labelSkipWidth={40}\r\n labelSkipHeight={18}\r\n labelTextColor={\"white\"}\r\n // legends={[\r\n // {\r\n // dataFrom: \"keys\",\r\n // anchor: \"right\",\r\n // direction: \"column\",\r\n // justify: false,\r\n // translateX: 120,\r\n // translateY: 0,\r\n // itemsSpacing: 2,\r\n // itemWidth: 110,\r\n // itemHeight: 20,\r\n // symbolShape: \"circle\",\r\n // itemDirection: \"left-to-right\",\r\n // itemOpacity: 1,\r\n // symbolSize: 12,\r\n // // effects: [\r\n // // {\r\n // // on: \"hover\",\r\n // // style: {\r\n // // itemOpacity: 1,\r\n // // },\r\n // // },\r\n // // ],\r\n // },\r\n // ]}\r\n animate={props.noAnim ? false : true}\r\n theme={theme}\r\n motionStiffness={300}\r\n motionDamping={30}\r\n />\r\n ) : (\r\n
\r\n
{props.loadingMessage || \"Loading data...\"}
\r\n
\r\n )}\r\n \r\n {!props.hideLegend && (\r\n switchExcludedSeries(server)}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ChartBar;\r\n","async function fetchArbitraryData(url, type) {\r\n let response = await fetch(url);\r\n if (type === \"json\") response = await response.json();\r\n else if (type === \"text\") response = await response.text();\r\n return response;\r\n}\r\n\r\nasync function postArbitraryData(url, body) {\r\n let response = await fetch(url, {\r\n method: \"POST\",\r\n mode: \"cors\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n response = await response.json();\r\n return response;\r\n}\r\n\r\nexport async function Fetch(url, timeout) {\r\n let ret = new Promise(async (resolve, reject) => {\r\n setTimeout(() => {\r\n if (!ret.isResolved) {\r\n reject(\"timeout\");\r\n }\r\n }, timeout);\r\n\r\n await fetchArbitraryData(url, \"json\")\r\n .then((val) => {\r\n resolve(val);\r\n })\r\n .catch((err) => {\r\n console.log(\"Failed to fetch data\", err);\r\n reject(err);\r\n });\r\n });\r\n return ret;\r\n}\r\n\r\n/*\r\nexport async function Fetch(url, timeout) {\r\n let ret = new Promise(async (resolve, reject) => {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), timeout);\r\n\r\n const response = fetch(url, { signal: controller.signal })\r\n clearTimeout(timer);\r\n \r\n return response\r\n });\r\n return ret;\r\n}\r\n*/\r\n\r\nexport async function Post(url, body, timeout) {\r\n let ret = new Promise(async (resolve, reject) => {\r\n setTimeout(() => {\r\n if (!ret.isResolved) {\r\n reject(\"timeout\");\r\n }\r\n }, timeout);\r\n\r\n await postArbitraryData(url, body)\r\n .then((val) => {\r\n resolve(val);\r\n })\r\n .catch((err) => {\r\n console.log(\"Failed to post data\", err);\r\n reject(err);\r\n });\r\n });\r\n return ret;\r\n}\r\n\r\nexport function VerifyLfmData(data) {\r\n if (data === null) return false;\r\n if (data.length !== 9) return false;\r\n let missingfields = false;\r\n data.forEach((server) => {\r\n if (server.Name === undefined) missingfields = true;\r\n if (server.LastUpdateTime === undefined) missingfields = true;\r\n if (server.Groups === undefined) missingfields = true;\r\n if (server.GroupCount === undefined) missingfields = true;\r\n });\r\n if (missingfields) return false;\r\n return true;\r\n}\r\n\r\nexport function VerifyPlayerAndLfmOverview(data) {\r\n if (data === null) return false;\r\n if (data.length !== 9) return false;\r\n let missingfields = false;\r\n data.forEach((server) => {\r\n if (server.ServerName === undefined) missingfields = true;\r\n if (server.PlayerCount === undefined) missingfields = true;\r\n if (server.LfmCount === undefined) missingfields = true;\r\n });\r\n if (missingfields) return false;\r\n return true;\r\n}\r\n\r\nexport function VerifyServerLfmData(data) {\r\n if (data === null) return false;\r\n let missingfields = false;\r\n if (data.Name === undefined) missingfields = true;\r\n if (data.LastUpdateTime === undefined) missingfields = true;\r\n if (data.GroupCount === undefined) missingfields = true;\r\n if (missingfields) return false;\r\n return true;\r\n}\r\n\r\nexport function VerifyPlayerData(data) {\r\n if (data === null) return false;\r\n if (data.Population === undefined) return false;\r\n if (data.Name === undefined) return false;\r\n if (data.Players === undefined) return false;\r\n return true; // TODO\r\n}\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgGift(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGift);\nexport default __webpack_public_path__ + \"static/media/gift.8ec33b1c.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { ReactComponent as GiftIcon } from \"../../assets/global/gift.svg\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\n\r\nconst DonateButton = (props) => {\r\n const paypalLink =\r\n \"https://www.paypal.com/donate/?hosted_button_id=YWG5SJPYLDQXY\";\r\n\r\n const getClassName = () => {\r\n switch (props.variant) {\r\n case \"Floating\":\r\n return \"donate-button-floating\";\r\n case \"Small\":\r\n return \"donate-button-small\";\r\n case \"Large\":\r\n return \"donate-button-large\";\r\n default:\r\n return \"donate-button-floating\";\r\n }\r\n };\r\n\r\n return (\r\n Log(\"Clicked donate button\")}\r\n href={paypalLink}\r\n rel=\"noreferrer\"\r\n target=\"_blank\"\r\n >\r\n \r\n Donate\r\n \r\n );\r\n};\r\n\r\nconst SmallDonateButton = () => {\r\n return ;\r\n};\r\n\r\nconst LargeDonateButton = (props) => {\r\n return ;\r\n};\r\n\r\nconst FloatingDonateButton = () => {\r\n return ;\r\n};\r\n\r\nexport { SmallDonateButton, LargeDonateButton, FloatingDonateButton };\r\n","import React from \"react\";\r\nimport { ReactComponent as LinkSVG } from \"../../assets/global/chain.svg\";\r\n\r\nconst ContentCluster = (props) => {\r\n function getId() {\r\n return props.altTitle\r\n ? props.altTitle.replace(/\\s/g, \"-\").toLowerCase()\r\n : props.title\r\n ? props.title.replace(/\\s/g, \"-\").toLowerCase()\r\n : \"missing-header\";\r\n }\r\n\r\n function getPath() {\r\n if (window.location.href.includes(\"#\")) {\r\n return `${window.location.href.substring(\r\n 0,\r\n window.location.href.indexOf(\"#\")\r\n )}#${getId()}`;\r\n } else {\r\n return `${window.location.href}#${getId()}`;\r\n }\r\n }\r\n\r\n return (\r\n \r\n

\r\n {props.title || \"Missing Header\"}\r\n {!props.noLink && (\r\n \r\n Link to the '{getId()}' header\r\n \r\n \r\n )}\r\n

\r\n \r\n {props.description && (\r\n \r\n {props.description}\r\n \r\n )}\r\n
{props.children}
\r\n \r\n );\r\n};\r\n\r\nexport default ContentCluster;\r\n","var _g, _g2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgTimer(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n enableBackground: \"new 0 0 24 24\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"none\",\n height: 24,\n width: 24\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n height: 2,\n width: 6,\n x: 9,\n y: 1\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.03,7.39l1.42-1.42c-0.43-0.51-0.9-0.99-1.41-1.41l-1.42,1.42C16.07,4.74,14.12,4,12,4c-4.97,0-9,4.03-9,9 c0,4.97,4.02,9,9,9s9-4.03,9-9C21,10.88,20.26,8.93,19.03,7.39z M13,14h-2V8h2V14z\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTimer);\nexport default __webpack_public_path__ + \"static/media/timer.dd7587c7.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgChain(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgChain);\nexport default __webpack_public_path__ + \"static/media/chain.f0e4e120.svg\";\nexport { ForwardRef as ReactComponent };","export default __webpack_public_path__ + \"static/media/friends_panel.3f832432.jpg\";","import React from \"react\";\r\nimport PanelSprite from \"../../assets/global/friends_panel.jpg\";\r\n\r\nconst CanvasFriendsPanel = (props) => {\r\n const canvasRef = React.useRef(null);\r\n const spriteRef = React.useRef(null);\r\n const [canvasWidth, setCanvasWidth] = React.useState(0);\r\n const [isImageLoaded, setIsImageLoaded] = React.useState(false);\r\n const playerDataRef = React.useRef(props.data);\r\n playerDataRef.current = props.data;\r\n const multiselectRef = React.useRef(props.multiselect);\r\n multiselectRef.current = props.multiselect;\r\n\r\n const showPlayerLocationsRef = React.useRef(props.showPlayerLocations);\r\n showPlayerLocationsRef.current = props.showPlayerLocations;\r\n\r\n const PANEL_WIDTH = 706;\r\n const PLAYER_HEIGHT = 42;\r\n const LOCATION_HEIGHT = 20;\r\n\r\n function HandleMouseOnCanvas(e) {\r\n var rect = e.target.getBoundingClientRect();\r\n var x = (e.clientX - rect.left) * (PANEL_WIDTH / rect.width); //x position within the element.\r\n var y = (e.clientY - rect.top) * (PANEL_WIDTH / rect.width); //y position within the element.\r\n\r\n if (multiselectRef.current !== null) {\r\n let dialogW = 500;\r\n let dialogH = multiselectRef.current * PLAYER_HEIGHT + 37;\r\n let dialogX = (639 - dialogW) / 2 + 15;\r\n let dialogY = 184;\r\n\r\n const index = Math.floor((y - (184 + 32)) / PLAYER_HEIGHT);\r\n\r\n if (index >= 0 && index < multiselectRef.current.length) {\r\n props.handlePlayerSelect(multiselectRef.current[index]);\r\n } else {\r\n props.handlePlayerSelect(null);\r\n }\r\n } else {\r\n if (x > 28 && x < 175 && y > 116 && y < 131) {\r\n props.handleHideOfflineFriends();\r\n }\r\n\r\n if (x > 198 && x < 345 && y > 116 && y < 131) {\r\n props.handleShowServerNames();\r\n }\r\n\r\n if (x > 368 && x < 525 && y > 116 && y < 131) {\r\n props.handleShowPlayerLocations();\r\n }\r\n\r\n if (x >= 28 && x < 48 && y >= 147 && y < 171) {\r\n props.handleSort(\"inparty\");\r\n }\r\n\r\n if (x >= 48 && x < 68 && y >= 147 && y < 171) {\r\n props.handleSort(\"online\");\r\n }\r\n\r\n if (x >= 68 && x < 301 && y >= 147 && y < 171) {\r\n props.handleSort(\"name\");\r\n }\r\n\r\n if (x >= 301 && x < 419 && y >= 147 && y < 171) {\r\n props.handleSort(\"class\");\r\n }\r\n\r\n if (x >= 419 && x < 471 && y >= 147 && y < 171) {\r\n props.handleSort(\"level\");\r\n }\r\n\r\n if (x >= 471 && x < 668 && y >= 147 && y < 171) {\r\n props.handleSort(\"guild\");\r\n }\r\n\r\n if (x >= 610 && x < 672 && y >= 72 && y < 98) {\r\n props.addName();\r\n }\r\n\r\n const removebtn =\r\n (playerDataRef.current && playerDataRef.current.length\r\n ? Math.max(playerDataRef.current.length, 7)\r\n : 7) *\r\n (PLAYER_HEIGHT +\r\n (showPlayerLocationsRef.current ? LOCATION_HEIGHT : 0)) +\r\n 182;\r\n if (x >= 294 && x < 407 && y >= removebtn && y < removebtn + 26) {\r\n props.removePlayer();\r\n return;\r\n }\r\n\r\n if (x >= 28 && x < 668 && y >= 172) {\r\n const index = Math.floor(\r\n (y - 172) /\r\n (PLAYER_HEIGHT +\r\n (showPlayerLocationsRef.current ? LOCATION_HEIGHT : 0))\r\n );\r\n props.handleSelectPlayer(index);\r\n } else {\r\n props.handleSelectPlayer(-1);\r\n }\r\n }\r\n }\r\n\r\n function handleCanvasResize() {\r\n if (canvasRef.current !== null) {\r\n let rect = canvasRef.current.getBoundingClientRect();\r\n setCanvasWidth(rect.width);\r\n }\r\n }\r\n\r\n function computeInputHeight() {\r\n let mod = window.innerWidth <= 950 ? 2 : 1;\r\n return `${((24 * canvasWidth) / PANEL_WIDTH) * mod}px`;\r\n }\r\n\r\n function computeInputTop() {\r\n let mod = window.innerWidth <= 950 ? (24 * canvasWidth) / PANEL_WIDTH : 0;\r\n return `${\r\n (73 * canvasWidth) / PANEL_WIDTH +\r\n (props.filterBarShown ? 36 : 0) -\r\n mod / 2\r\n }px`;\r\n }\r\n\r\n function computeInputTopPadding() {\r\n let mod = window.innerWidth <= 950 ? 2 : 1;\r\n return `${(((24 * canvasWidth) / PANEL_WIDTH) * mod) / 2}px`;\r\n }\r\n\r\n const handleKeyListener = (e) => {\r\n if (e.key === \"Delete\") {\r\n props.removePlayer();\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n // TODO: Remove listeners\r\n canvasRef.current.addEventListener(\"click\", HandleMouseOnCanvas);\r\n window.addEventListener(\"resize\", handleCanvasResize);\r\n window.addEventListener(\"keyup\", handleKeyListener);\r\n\r\n handleCanvasResize();\r\n\r\n // remove listeners from window on unmount\r\n return () => {\r\n canvasRef.current.removeEventListener(\"click\", HandleMouseOnCanvas);\r\n window.removeEventListener(\"resize\", handleCanvasResize);\r\n window.removeEventListener(\"keyup\", handleKeyListener);\r\n };\r\n }, [canvasRef]);\r\n\r\n React.useEffect(() => {\r\n if (!isImageLoaded) {\r\n return;\r\n }\r\n\r\n const canvas = canvasRef.current;\r\n const ctx = canvas.getContext(\"2d\", { alpha: false });\r\n\r\n const sprite = spriteRef.current;\r\n\r\n // Draw the header\r\n OpenPanel();\r\n\r\n // Draw the chin\r\n ClosePanel();\r\n\r\n // Draw filler\r\n DrawFiller();\r\n\r\n // Draw friends\r\n if (props.data != null) DrawFriends();\r\n\r\n // Draw multiselect\r\n if (props.multiselect != null) {\r\n DrawMultiselect();\r\n }\r\n\r\n if (props.isLoading) {\r\n ctx.fillStyle = \"#000000\";\r\n ctx.fillRect(PANEL_WIDTH / 2 - 200, 230, 400, 40);\r\n\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.font = 25 + \"px 'Trebuchet MS'\"; // 18px\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(\"Loading, please wait...\", PANEL_WIDTH / 2, 250);\r\n }\r\n\r\n function OpenPanel() {\r\n ctx.drawImage(sprite, 0, 0, 706, 174, 0, 0, 706, 174);\r\n\r\n if (props.hideOfflineFriends)\r\n ctx.drawImage(sprite, 258, 289, 16, 16, 28, 116, 16, 16);\r\n else ctx.drawImage(sprite, 242, 289, 16, 16, 28, 116, 16, 16);\r\n\r\n if (props.showServerNames)\r\n ctx.drawImage(sprite, 258, 289, 16, 16, 198, 116, 16, 16);\r\n else ctx.drawImage(sprite, 242, 289, 16, 16, 198, 116, 16, 16);\r\n\r\n if (props.showPlayerLocations)\r\n ctx.drawImage(sprite, 258, 289, 16, 16, 368, 116, 16, 16);\r\n else ctx.drawImage(sprite, 242, 289, 16, 16, 368, 116, 16, 16);\r\n\r\n ctx.fillStyle =\r\n props.data && props.data.length >= props.maxListSize\r\n ? \"#ff5353\"\r\n : \"#f6f1d3\";\r\n ctx.font = 18 + \"px 'Trebuchet MS'\"; // 18px\r\n ctx.textAlign = \"right\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(\r\n `${props.data ? props.data.length : \"0\"} / ${\r\n props.maxListSize\r\n } friends`,\r\n 660,\r\n 130\r\n );\r\n }\r\n\r\n function ClosePanel() {\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 231,\r\n 706,\r\n 58,\r\n 0,\r\n (props.data ? Math.max(props.data.length, 7) : 7) *\r\n (PLAYER_HEIGHT + (props.showPlayerLocations ? LOCATION_HEIGHT : 0)) +\r\n 172,\r\n 706,\r\n 58\r\n );\r\n }\r\n\r\n function DrawFiller() {\r\n if (props.data == null || props.data.length < 7) {\r\n for (let i = 0; i < 7; i++) {\r\n let y =\r\n 174 +\r\n i *\r\n (PLAYER_HEIGHT +\r\n (props.showPlayerLocations ? LOCATION_HEIGHT : 0));\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 172,\r\n 706,\r\n PLAYER_HEIGHT,\r\n 0,\r\n y,\r\n 706,\r\n PLAYER_HEIGHT + (props.showPlayerLocations ? LOCATION_HEIGHT : 0)\r\n );\r\n }\r\n }\r\n }\r\n\r\n function DrawFriends() {\r\n for (let i = 0; i < props.data.length; i++) {\r\n let y =\r\n 174 +\r\n i *\r\n (PLAYER_HEIGHT + (props.showPlayerLocations ? LOCATION_HEIGHT : 0));\r\n let x = 28;\r\n var width = 639;\r\n var height =\r\n PLAYER_HEIGHT + (props.showPlayerLocations ? LOCATION_HEIGHT : 0);\r\n let player = props.data[i];\r\n\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 172,\r\n 706,\r\n PLAYER_HEIGHT,\r\n 0,\r\n y,\r\n 706,\r\n PLAYER_HEIGHT + (props.showPlayerLocations ? LOCATION_HEIGHT : 0)\r\n );\r\n\r\n // Draw background gradient:\r\n var grad = ctx.createLinearGradient(x, y, x, y + height);\r\n grad.addColorStop(\r\n 0,\r\n props.selectedPlayers.includes(i) ? \"#5b5b45\" : \"#3b3b25\"\r\n );\r\n grad.addColorStop(\r\n 0.25,\r\n props.selectedPlayers.includes(i) ? \"#5b5b45\" : \"#4c4a31\"\r\n );\r\n grad.addColorStop(\r\n 0.75,\r\n props.selectedPlayers.includes(i) ? \"#5b5b45\" : \"#4c4a31\"\r\n );\r\n grad.addColorStop(\r\n 1,\r\n props.selectedPlayers.includes(i) ? \"#5b5b45\" : \"#3b3b25\"\r\n );\r\n ctx.fillStyle = grad;\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Draw border:\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#898c77\";\r\n ctx.lineWidth = 1;\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Draw dividers:\r\n ctx.beginPath();\r\n ctx.moveTo(x + 21, y);\r\n ctx.lineTo(\r\n x + 21,\r\n y +\r\n (PLAYER_HEIGHT +\r\n (props.showPlayerLocations ? LOCATION_HEIGHT : 0)) -\r\n 2\r\n );\r\n ctx.moveTo(x + 41, y);\r\n ctx.lineTo(\r\n x + 41,\r\n y +\r\n (PLAYER_HEIGHT +\r\n (props.showPlayerLocations ? LOCATION_HEIGHT : 0)) -\r\n 2\r\n );\r\n ctx.moveTo(x + 273, y);\r\n ctx.lineTo(\r\n x + 273,\r\n y +\r\n (PLAYER_HEIGHT +\r\n (props.showPlayerLocations ? LOCATION_HEIGHT : 0)) -\r\n 2\r\n );\r\n ctx.moveTo(x + 391, y);\r\n ctx.lineTo(\r\n x + 391,\r\n y +\r\n (PLAYER_HEIGHT +\r\n (props.showPlayerLocations ? LOCATION_HEIGHT : 0)) -\r\n 2\r\n );\r\n ctx.moveTo(x + 443, y);\r\n ctx.lineTo(\r\n x + 443,\r\n y +\r\n (PLAYER_HEIGHT +\r\n (props.showPlayerLocations ? LOCATION_HEIGHT : 0)) -\r\n 2\r\n );\r\n ctx.stroke();\r\n\r\n // Draw online status:\r\n ctx.drawImage(\r\n sprite,\r\n 274 + (player.Anonymous ? 24 : player.Online == 0 ? 12 : 0),\r\n 289,\r\n 12,\r\n 12,\r\n x + 25,\r\n y + 13 + (props.showPlayerLocations ? 12 : 0),\r\n 12,\r\n 12\r\n );\r\n\r\n // Draw group status:\r\n if (player.GroupId != 0 && player.Online && player.Anonymous === 0) {\r\n ctx.drawImage(\r\n sprite,\r\n 211,\r\n 289,\r\n 16,\r\n 20,\r\n x + 2,\r\n y + 10 + (props.showPlayerLocations ? 10 : 0),\r\n 16,\r\n 20\r\n );\r\n }\r\n\r\n // Draw race icon:\r\n let raceIconPosition = getRaceIconPosition(\r\n player.Gender + \" \" + player.Race,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n raceIconPosition[0],\r\n raceIconPosition[1],\r\n 18,\r\n 18,\r\n x + 45,\r\n y + 10,\r\n 18,\r\n 18\r\n );\r\n\r\n // Draw name\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.font = 18 + \"px 'Trebuchet MS'\"; // 18px\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(player.Name, x + 68, y + 21);\r\n if (props.showServerNames) {\r\n ctx.fillStyle = \"#9c9881\";\r\n ctx.textAlign = \"right\";\r\n const namewidth = ctx.measureText(\r\n `${player.Name} ${player.Server}`\r\n ).width;\r\n if (namewidth > 180) {\r\n ctx.fillText(`[${player.Server.slice(0, 1)}]`, x + 265, y + 21);\r\n } else {\r\n ctx.fillText(`[${player.Server}]`, x + 265, y + 21);\r\n }\r\n ctx.textAlign = \"left\";\r\n ctx.fillStyle = \"#f6f1d3\";\r\n }\r\n\r\n // Draw location\r\n if (props.showPlayerLocations) {\r\n if (player.Anonymous === 1) {\r\n ctx.fillStyle = \"#a6a183\";\r\n ctx.font = \"italic 15px 'Trebuchet MS'\"; // 18px\r\n ctx.fillText(\"Somewhere in the Aether\", x + 45, y + 45);\r\n } else {\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.font = \"15px 'Trebuchet MS'\"; // 18px\r\n ctx.fillText(\r\n player.Location?.Name || \"Somewhere in the Aether\",\r\n x + 45,\r\n y + 45\r\n );\r\n }\r\n }\r\n\r\n // Draw classes:\r\n ctx.font = \"13px Arial\";\r\n ctx.textAlign = \"right\";\r\n for (var j = 0; j < player.Classes.length; j++) {\r\n if (\r\n player.Classes[j].Name == null ||\r\n player.Classes[j].Name === \"Epic\" ||\r\n player.Classes[j].Name === \"Legendary\"\r\n )\r\n continue;\r\n\r\n let classIconPosition = getClassIconPosition(\r\n player.Classes[j].Name,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n classIconPosition[0],\r\n classIconPosition[1],\r\n 18,\r\n 18,\r\n x + 279 + 21 * j,\r\n y + 10 + (props.showPlayerLocations ? 11 : 0),\r\n 18,\r\n 18\r\n );\r\n\r\n ctx.fillStyle = \"black\";\r\n ctx.fillText(\r\n player.Classes[j].Level,\r\n x + 279 + 21 * j + 22,\r\n y + 20 + 5 + (props.showPlayerLocations ? 11 : 0)\r\n );\r\n ctx.fillStyle = \"white\";\r\n ctx.fillText(\r\n player.Classes[j].Level,\r\n x + 279 + 21 * j + 21,\r\n y + 20 + 4 + (props.showPlayerLocations ? 11 : 0)\r\n );\r\n }\r\n\r\n // Draw level:\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.textAlign = \"center\";\r\n ctx.font = 17 + \"px Arial\"; // 15px\r\n ctx.fillText(\r\n player.TotalLevel,\r\n x + 416,\r\n y + 21 + (props.showPlayerLocations ? 11 : 0)\r\n );\r\n\r\n // Guild name:\r\n if (player.Anonymous === 1) {\r\n ctx.font = \"italic 15px 'Trebuchet MS'\";\r\n ctx.fillStyle = \"#a6a183\";\r\n ctx.fillText(\r\n \"Noneya Business\",\r\n x + 542,\r\n y + 22 + (props.showPlayerLocations ? 11 : 0)\r\n );\r\n } else {\r\n ctx.font = \"15px 'Trebuchet MS'\";\r\n let guildname = wrapText(player.Guild, 230);\r\n if (guildname.length > 1) {\r\n ctx.fillText(\r\n guildname[0] + \"...\",\r\n x + 542,\r\n y + 22 + (props.showPlayerLocations ? 11 : 0)\r\n );\r\n } else if (guildname.length === 1) {\r\n ctx.fillText(\r\n guildname[0],\r\n x + 542,\r\n y + 22 + (props.showPlayerLocations ? 11 : 0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n function DrawMultiselect() {\r\n ctx.globalAlpha = 0.8;\r\n\r\n let y = 174;\r\n let x = 28;\r\n var width = 639;\r\n var height =\r\n props.data.length *\r\n (PLAYER_HEIGHT +\r\n (showPlayerLocationsRef.current ? LOCATION_HEIGHT : 0)) +\r\n 2;\r\n\r\n ctx.fillStyle = \"#000000\";\r\n\r\n ctx.fillRect(x, y, width, height);\r\n ctx.globalAlpha = 1;\r\n\r\n let dialogW = 500;\r\n let dialogH = props.multiselect.length * PLAYER_HEIGHT + 37;\r\n let dialogX = (width - dialogW) / 2 + 15;\r\n let dialogY = y + 10;\r\n\r\n ctx.fillStyle = \"#0b0c0a\";\r\n ctx.fillRect(dialogX, dialogY, dialogW, dialogH);\r\n\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 0,\r\n dialogW / 2,\r\n 32,\r\n dialogX,\r\n dialogY,\r\n dialogW / 2,\r\n 32\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n 706 - dialogW / 2,\r\n 0,\r\n dialogW / 2,\r\n 32,\r\n dialogX + dialogW / 2,\r\n dialogY,\r\n dialogW / 2,\r\n 32\r\n );\r\n\r\n ctx.fillStyle = \"#ffffff\";\r\n ctx.font = \"18px 'Trebuchet MS'\";\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(\"Select Player\", dialogX + dialogW / 2, dialogY + 16);\r\n\r\n // Border\r\n for (let i = 0; i < props.multiselect.length; i++) {\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 40,\r\n 5,\r\n 42,\r\n dialogX,\r\n dialogY + 32 + i * PLAYER_HEIGHT,\r\n 5,\r\n 42\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n 701,\r\n 40,\r\n 5,\r\n 42,\r\n dialogX + dialogW - 5,\r\n dialogY + 32 + i * PLAYER_HEIGHT,\r\n 5,\r\n 42\r\n );\r\n }\r\n\r\n // Bottom\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 284,\r\n dialogW,\r\n 5,\r\n dialogX,\r\n dialogY + 32 + props.multiselect.length * PLAYER_HEIGHT,\r\n dialogW - 1,\r\n 5\r\n );\r\n\r\n // Draw options\r\n DrawMultiselectOption(dialogX, dialogY, dialogW, dialogH);\r\n }\r\n\r\n function DrawMultiselectOption(x_in, y_in, w_in, h_in) {\r\n for (let i = 0; i < props.multiselect.length; i++) {\r\n let y = y_in + 32 + i * PLAYER_HEIGHT;\r\n let x = x_in + 2;\r\n var width = w_in - 6;\r\n var height = PLAYER_HEIGHT;\r\n let player = props.multiselect[i];\r\n\r\n // Draw background gradient:\r\n var grad = ctx.createLinearGradient(x, y, x, y + height);\r\n grad.addColorStop(0, \"#3b3b25\");\r\n grad.addColorStop(0.25, \"#4c4a31\");\r\n grad.addColorStop(0.75, \"#4c4a31\");\r\n grad.addColorStop(1, \"#3b3b25\");\r\n ctx.fillStyle = grad;\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Draw border:\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#898c77\";\r\n ctx.lineWidth = 1;\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Draw dividers:\r\n ctx.beginPath();\r\n ctx.moveTo(x + 21, y);\r\n ctx.lineTo(x + 21, y + PLAYER_HEIGHT - 2);\r\n ctx.moveTo(x + 41, y);\r\n ctx.lineTo(x + 41, y + PLAYER_HEIGHT - 2);\r\n ctx.moveTo(x + 223, y);\r\n ctx.lineTo(x + 223, y + PLAYER_HEIGHT - 2);\r\n ctx.moveTo(x + 321, y);\r\n ctx.lineTo(x + 321, y + PLAYER_HEIGHT - 2);\r\n ctx.moveTo(x + 373, y);\r\n ctx.lineTo(x + 373, y + PLAYER_HEIGHT - 2);\r\n ctx.stroke();\r\n\r\n // Draw online status:\r\n ctx.drawImage(\r\n sprite,\r\n 274 + (player.Anonymous ? 24 : player.Online == 0 ? 12 : 0),\r\n 289,\r\n 12,\r\n 12,\r\n x + 25,\r\n y + 13,\r\n 12,\r\n 12\r\n );\r\n\r\n // Draw group status:\r\n if (player.GroupId != 0 && player.Online) {\r\n ctx.drawImage(sprite, 211, 289, 16, 20, x + 2, y + 10, 16, 20);\r\n }\r\n\r\n // Draw race icon:\r\n let raceIconPosition = getRaceIconPosition(\r\n player.Gender + \" \" + player.Race,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n raceIconPosition[0],\r\n raceIconPosition[1],\r\n 18,\r\n 18,\r\n x + 45,\r\n y + 10,\r\n 18,\r\n 18\r\n );\r\n\r\n // Draw name\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.font = 18 + \"px 'Trebuchet MS'\"; // 18px\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(player.Name, x + 68, y + 21);\r\n\r\n ctx.fillStyle = \"#9c9881\";\r\n ctx.textAlign = \"right\";\r\n const namewidth = ctx.measureText(\r\n `${player.Name} ${player.Server}`\r\n ).width;\r\n if (namewidth > 130) {\r\n ctx.fillText(`[${player.Server.slice(0, 1)}]`, x + 215, y + 21);\r\n } else {\r\n ctx.fillText(`[${player.Server}]`, x + 215, y + 21);\r\n }\r\n ctx.textAlign = \"left\";\r\n ctx.fillStyle = \"#f6f1d3\";\r\n\r\n // Draw classes:\r\n ctx.font = \"13px Arial\";\r\n ctx.textAlign = \"right\";\r\n for (var j = 0; j < player.Classes.length; j++) {\r\n if (\r\n player.Classes[j].Name == null ||\r\n player.Classes[j].Name === \"Epic\"\r\n )\r\n continue;\r\n\r\n let classIconPosition = getClassIconPosition(\r\n player.Classes[j].Name,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n classIconPosition[0],\r\n classIconPosition[1],\r\n 18,\r\n 18,\r\n x + 229 + 21 * j,\r\n y + 10,\r\n 18,\r\n 18\r\n );\r\n\r\n ctx.fillStyle = \"black\";\r\n ctx.fillText(\r\n player.Classes[j].Level,\r\n x + 229 + 21 * j + 22,\r\n y + 20 + 5\r\n );\r\n ctx.fillStyle = \"white\";\r\n ctx.fillText(\r\n player.Classes[j].Level,\r\n x + 229 + 21 * j + 21,\r\n y + 20 + 4\r\n );\r\n }\r\n\r\n // Draw level:\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.textAlign = \"center\";\r\n ctx.font = 17 + \"px Arial\"; // 15px\r\n ctx.fillText(player.TotalLevel, x + 348, y + 21);\r\n\r\n // Guild name:\r\n ctx.font = \"15px 'Trebuchet MS'\";\r\n if (player.Name == \"Anonymous\") {\r\n ctx.fillText(\"Noneya Business\", x + 446, y + 22);\r\n } else {\r\n let guildname = wrapText(player.Guild, 90);\r\n if (guildname.length > 1) {\r\n ctx.fillText(guildname[0] + \"...\", x + 436, y + 22);\r\n } else if (guildname.length === 1) {\r\n ctx.fillText(guildname[0], x + 436, y + 22);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Helper function for wrapping text\r\n function wrapText(text, maxWidth) {\r\n if (text === null) return \"\";\r\n let words = text.split(\" \");\r\n let lines = [];\r\n let currentLine = words[0];\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n let word = words[i];\r\n let width = ctx.measureText(currentLine + \" \" + word).width;\r\n if (width < maxWidth) {\r\n currentLine += \" \" + word;\r\n } else {\r\n lines.push(currentLine);\r\n currentLine = word;\r\n }\r\n }\r\n lines.push(currentLine);\r\n return lines;\r\n }\r\n\r\n // Helper function for getting class icon position\r\n function getRaceIconPosition(race, eligible) {\r\n let xsrc = 0;\r\n let ysrc = 0;\r\n switch (race) {\r\n case \"Female Aasimar\":\r\n case \"Female Aasimar Scourge\":\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case \"Female Dragonborn\":\r\n xsrc = 18;\r\n ysrc = 0;\r\n break;\r\n case \"Female Drow Elf\":\r\n xsrc = 36;\r\n ysrc = 0;\r\n break;\r\n case \"Female Dwarf\":\r\n xsrc = 54;\r\n ysrc = 0;\r\n break;\r\n case \"Female Elf\":\r\n case \"Female Sun Elf\":\r\n case \"Female Wood Elf\":\r\n xsrc = 72;\r\n ysrc = 0;\r\n break;\r\n case \"Female Gnome\":\r\n case \"Female Deep Gnome\":\r\n xsrc = 0;\r\n ysrc = 18;\r\n break;\r\n case \"Female Half Elf\":\r\n xsrc = 18;\r\n ysrc = 18;\r\n break;\r\n case \"Female Halfling\":\r\n xsrc = 36;\r\n ysrc = 18;\r\n break;\r\n case \"Female Half Orc\":\r\n xsrc = 54;\r\n ysrc = 18;\r\n break;\r\n case \"Female Human\":\r\n case \"Female Shadar-kai\":\r\n case \"Female Purple Dragon Knight\":\r\n xsrc = 72;\r\n ysrc = 18;\r\n break;\r\n case \"Female Shifter\":\r\n case \"Female Razorclaw Shifter\":\r\n xsrc = 90;\r\n ysrc = 18;\r\n break;\r\n case \"Female Tiefling\":\r\n case \"Female Tiefling Scoundrel\":\r\n xsrc = 0;\r\n ysrc = 36;\r\n break;\r\n case \"Female Warforged\":\r\n case \"Female Bladeforged\":\r\n xsrc = 18;\r\n ysrc = 36;\r\n break;\r\n case \"Male Aasimar\":\r\n case \"Male Aasimar Scourge\":\r\n xsrc = 36;\r\n ysrc = 36;\r\n break;\r\n case \"Male Dragonborn\":\r\n xsrc = 54;\r\n ysrc = 36;\r\n break;\r\n case \"Male Drow Elf\":\r\n xsrc = 72;\r\n ysrc = 36;\r\n break;\r\n case \"Male Dwarf\":\r\n xsrc = 0;\r\n ysrc = 54;\r\n break;\r\n case \"Male Elf\":\r\n case \"Male Sun Elf\":\r\n case \"Male Wood Elf\":\r\n xsrc = 18;\r\n ysrc = 54;\r\n break;\r\n case \"Male Gnome\":\r\n case \"Male Deep Gnome\":\r\n xsrc = 36;\r\n ysrc = 54;\r\n break;\r\n case \"Male Half Elf\":\r\n xsrc = 54;\r\n ysrc = 54;\r\n break;\r\n case \"Male Halfling\":\r\n xsrc = 72;\r\n ysrc = 54;\r\n break;\r\n case \"Male Half Orc\":\r\n xsrc = 0;\r\n ysrc = 72;\r\n break;\r\n case \"Male Human\":\r\n case \"Male Shadar-kai\":\r\n case \"Male Purple Dragon Knight\":\r\n xsrc = 18;\r\n ysrc = 72;\r\n break;\r\n case \"Male Shifter\":\r\n case \"Male Razorclaw Shifter\":\r\n xsrc = 90;\r\n ysrc = 0;\r\n break;\r\n case \"Male Tiefling\":\r\n case \"Male Tiefling Scoundrel\":\r\n xsrc = 36;\r\n ysrc = 72;\r\n break;\r\n case \"Male Warforged\":\r\n case \"Male Bladeforged\":\r\n xsrc = 54;\r\n ysrc = 72;\r\n break;\r\n default:\r\n xsrc = 72;\r\n ysrc = 72;\r\n break;\r\n }\r\n return [xsrc, ysrc + 289];\r\n }\r\n\r\n // Helper function for getting race icon position\r\n function getClassIconPosition(classname, eligible) {\r\n let xsrc = 0;\r\n let ysrc = 0;\r\n switch (classname) {\r\n case \"Alchemist\": // 70032AFE\r\n xsrc = 21;\r\n ysrc = 0;\r\n break;\r\n case \"Artificer\": // 700148CE\r\n xsrc = 42;\r\n ysrc = 42;\r\n break;\r\n case \"Barbarian\": // 7000006B\r\n xsrc = 84;\r\n ysrc = 0;\r\n break;\r\n case \"Bard\": // 7000006C\r\n xsrc = 0;\r\n ysrc = 42;\r\n break;\r\n case \"Cleric\": // 7000006D\r\n xsrc = 42;\r\n ysrc = 21;\r\n break;\r\n case \"Druid\": // 70016ADB\r\n xsrc = 63;\r\n ysrc = 42;\r\n break;\r\n case \"Favored Soul\": // 7000C5CE\r\n xsrc = 63;\r\n ysrc = 0;\r\n break;\r\n case \"Fighter\": // 7000006E\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case \"Monk\": // 70006BF5\r\n xsrc = 21;\r\n ysrc = 42;\r\n break;\r\n case \"Paladin\": // 7000006F\r\n xsrc = 42;\r\n ysrc = 0;\r\n break;\r\n case \"Ranger\": // 70000070\r\n xsrc = 21;\r\n ysrc = 21;\r\n break;\r\n case \"Rogue\": // 70000071\r\n xsrc = 0;\r\n ysrc = 21;\r\n break;\r\n case \"Sorcerer\": // 7000000B\r\n xsrc = 84;\r\n ysrc = 21;\r\n break;\r\n case \"Warlock\": // 7000C5DA\r\n xsrc = 84;\r\n ysrc = 42;\r\n break;\r\n case \"Wizard\": // 7000000E\r\n xsrc = 63;\r\n ysrc = 21;\r\n break;\r\n case \"Epic\": // 7001B1A3\r\n xsrc = 0;\r\n ysrc = 60;\r\n break;\r\n }\r\n return [xsrc + 108, ysrc + 289];\r\n }\r\n }, [\r\n isImageLoaded,\r\n props.data,\r\n props.hideOfflineFriends,\r\n props.showServerNames,\r\n props.showPlayerLocations,\r\n props.isLoading,\r\n ]);\r\n\r\n return (\r\n \r\n setIsImageLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n props.handlePlayerInput(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n props.addName();\r\n }\r\n }}\r\n />\r\n {/* {\r\n props.handleCommentInput(e.target.value);\r\n }}\r\n /> */}\r\n {props.children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CanvasFriendsPanel;\r\n","import React from \"react\";\r\nimport CanvasFriendsPanel from \"./CanvasFriendsPanel\";\r\nimport { Post } from \"../../services/DataLoader\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport FilterBar from \"../global/FilterBar\";\r\n// import SelectFriend from \"./SelectFriend\";\r\n\r\nconst FriendsPanel = (props) => {\r\n const [idList, setIdList] = React.useState(null);\r\n const idListRef = React.useRef(idList);\r\n idListRef.current = idList;\r\n const [friendsList, setFriendsList] = React.useState([]);\r\n const [filteredFriendsList, setFilteredFriendsList] = React.useState([]);\r\n const [multiselectFriendsList, setMultiselectFriendsList] =\r\n React.useState(null);\r\n const filteredFriendsListRef = React.useRef(filteredFriendsList);\r\n filteredFriendsListRef.current = filteredFriendsList;\r\n const [playerInputValue, setPlayerInputValue] = React.useState(\"\");\r\n const playerInputValueRef = React.useRef(playerInputValue);\r\n playerInputValueRef.current = playerInputValue;\r\n const [sortMethod, setSortMethod] = React.useState(\"online\");\r\n const sortMethodRef = React.useRef(sortMethod);\r\n const [sortDirection, setSortDirection] = React.useState(\"ascending\");\r\n\r\n const [hideOfflineFriends, setHideOfflineFriends] = React.useState(false);\r\n const hideOfflineFriendsRef = React.useRef(hideOfflineFriends);\r\n hideOfflineFriendsRef.current = hideOfflineFriends;\r\n\r\n const [showServerNames, setShowServerNames] = React.useState(true);\r\n const showServerNamesRef = React.useRef(showServerNames);\r\n showServerNamesRef.current = showServerNames;\r\n\r\n const [showPlayerLocations, setShowPlayerLocations] = React.useState(false);\r\n const showPlayerLocationsRef = React.useRef(showPlayerLocations);\r\n showPlayerLocationsRef.current = showPlayerLocations;\r\n\r\n const PLAYER_ID_LENGTH = 44;\r\n\r\n // const [selectionScreenVisible, setSelectionScreenVisible] =\r\n // React.useState(false);\r\n // const [friendSelectList, setFriendSelectList] = React.useState([]);\r\n const [selectedPlayers, setSelectedPlayers] = React.useState([]);\r\n const selectedPlayersRef = React.useRef(selectedPlayers);\r\n selectedPlayersRef.current = selectedPlayers;\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const MAX_LIST_SIZE = 50;\r\n\r\n function throwError() {\r\n if (typeof props.onError === \"function\") {\r\n props.onError();\r\n }\r\n }\r\n\r\n let refreshFriendsList;\r\n React.useEffect(() => {\r\n clearInterval(refreshFriendsList);\r\n refreshFriendsList = setInterval(() => reloadData(true), 30000);\r\n\r\n // Load friends list from localstorage\r\n const list = localStorage.getItem(\"friends-list\");\r\n try {\r\n const parsed = JSON.parse(list);\r\n if (parsed && typeof parsed === \"object\") {\r\n setIdList(parsed || []);\r\n } else {\r\n setIdList([]);\r\n }\r\n } catch (e) {\r\n setIdList([]);\r\n }\r\n\r\n const hideofflinefriends = localStorage.getItem(\"friends-hide-offline\");\r\n setHideOfflineFriends(\r\n hideofflinefriends !== null ? hideofflinefriends === \"true\" : false\r\n );\r\n\r\n const showservers = localStorage.getItem(\"friends-show-servers\");\r\n setShowServerNames(showservers !== null ? showservers === \"true\" : true);\r\n\r\n const showlocations = localStorage.getItem(\"friends-show-locations\");\r\n setShowPlayerLocations(\r\n showlocations !== null ? showlocations === \"true\" : false\r\n );\r\n\r\n return () => {\r\n clearInterval(refreshFriendsList);\r\n };\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n reloadData();\r\n }, [idList]);\r\n\r\n function reloadData(soft = false) {\r\n if (idListRef.current == null || !idListRef.current.length) {\r\n setFriendsList([]);\r\n return;\r\n }\r\n setIsLoading(soft ? false : true);\r\n\r\n // Filter out potentially bad ids\r\n let goodIds = idListRef.current.filter(\r\n (id) => id.length === PLAYER_ID_LENGTH\r\n );\r\n if (goodIds.length !== idListRef.current.length) {\r\n localStorage.setItem(\"friends-list\", JSON.stringify(goodIds));\r\n setIdList(goodIds);\r\n }\r\n\r\n Post(\r\n \"https://api.ddoaudit.com/players/lookup\",\r\n { playerids: idListRef.current },\r\n 10000\r\n )\r\n .then((response) => {\r\n if (response.error) {\r\n setFriendsList([]);\r\n } else {\r\n let sortedCharacters = [];\r\n if (idListRef.current !== null && idListRef.current.length > 0) {\r\n idListRef.current.forEach((characterId) => {\r\n sortedCharacters.push(\r\n response.filter(\r\n (character) => character.PlayerId === characterId\r\n )?.[0]\r\n );\r\n });\r\n }\r\n setFriendsList(sortedCharacters);\r\n }\r\n })\r\n .catch(() => {\r\n throwError();\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }\r\n\r\n React.useEffect(() => {\r\n if (!friendsList || !friendsList.length) {\r\n setFilteredFriendsList([]);\r\n return;\r\n }\r\n let finaldata = friendsList.filter(\r\n (friend) => friend != null && (friend.Online || !hideOfflineFriends)\r\n );\r\n\r\n let sortmod = sortDirection === \"ascending\" ? 1 : -1;\r\n finaldata.sort((a, b) => {\r\n switch (sortMethod) {\r\n case \"inparty\":\r\n return (b.InParty * b.Online - a.InParty * a.Online) * sortmod;\r\n case \"name\":\r\n return a.Name.localeCompare(b.Name) * sortmod;\r\n case \"class\":\r\n let astring = \"\";\r\n a.Classes.forEach((c) => {\r\n astring = astring + (c.Name || \"\");\r\n });\r\n let bstring = \"\";\r\n b.Classes.forEach((c) => {\r\n bstring = bstring + (c.Name || \"\");\r\n });\r\n return astring.localeCompare(bstring) * sortmod;\r\n case \"level\":\r\n return (a.TotalLevel - b.TotalLevel) * sortmod;\r\n case \"guild\":\r\n return a.Guild.localeCompare(b.Guild) * sortmod;\r\n case \"online\":\r\n default:\r\n return (b.Online - a.Online) * sortmod;\r\n }\r\n });\r\n\r\n setFilteredFriendsList(finaldata);\r\n }, [\r\n friendsList,\r\n hideOfflineFriends,\r\n sortMethod,\r\n sortDirection,\r\n selectedPlayers,\r\n ]);\r\n\r\n function handleSort(value) {\r\n if (sortMethodRef.current === value) {\r\n setSortDirection((sortDirection) =>\r\n sortDirection === \"ascending\" ? \"descending\" : \"ascending\"\r\n );\r\n } else {\r\n sortMethodRef.current = value;\r\n setSortMethod(value);\r\n setSortDirection(\"ascending\");\r\n }\r\n }\r\n\r\n function addName() {\r\n if (\r\n isLoading ||\r\n playerInputValueRef.current === \"\" ||\r\n playerInputValueRef.current.length === 0\r\n ) {\r\n return;\r\n }\r\n\r\n if (idListRef.current.length >= MAX_LIST_SIZE) {\r\n alert(\r\n `You may only have ${MAX_LIST_SIZE} characters on your friends list.`\r\n );\r\n return;\r\n }\r\n\r\n let trimmedString = playerInputValueRef.current.trim();\r\n let validString = /^[a-zA-Z0-9\\-]+$/;\r\n if (!validString.test(trimmedString)) {\r\n alert(\"Invalid name.\");\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n const body = {\r\n name: trimmedString,\r\n };\r\n Post(\"https://api.ddoaudit.com/players/lookup\", body, 10000)\r\n .then((res) => {\r\n if (res.length > 1) {\r\n let goodLengths = true;\r\n res.forEach((player) => {\r\n if (player.PlayerId.length !== PLAYER_ID_LENGTH) {\r\n goodLengths = false;\r\n }\r\n });\r\n if (goodLengths) {\r\n setMultiselectFriendsList(res);\r\n setIsLoading(false);\r\n } else {\r\n Log(\"Error: Bad ID lengths\", res);\r\n }\r\n } else if (\r\n res.length === 1 &&\r\n res[0].PlayerId.length === PLAYER_ID_LENGTH\r\n ) {\r\n addCharacter(res[0]);\r\n // } else if (res.guilds.length === 1) {\r\n // addGuild(res.guilds[0]);\r\n } else {\r\n Log(\"Failed to find friend\", trimmedString);\r\n alert(\"Character not found or is anonymous.\");\r\n }\r\n })\r\n .catch(() => {\r\n throwError();\r\n setIsLoading(false);\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }\r\n\r\n // function closeSelectFriend() {\r\n // setSelectionScreenVisible(false);\r\n // }\r\n\r\n function addCharacter(character) {\r\n const list = localStorage.getItem(\"friends-list\");\r\n let parsed = [];\r\n try {\r\n parsed = JSON.parse(list || \"[]\");\r\n } catch (e) {\r\n parsed = [];\r\n }\r\n if (parsed.length >= MAX_LIST_SIZE) {\r\n alert(\r\n `You may only have ${MAX_LIST_SIZE} characters on your friends list.`\r\n );\r\n } else {\r\n if (\r\n idListRef.current !== null &&\r\n !idListRef.current.includes(character.PlayerId)\r\n ) {\r\n parsed.push(character.PlayerId);\r\n setIdList(parsed);\r\n localStorage.setItem(\"friends-list\", JSON.stringify(parsed));\r\n Log(\"Added friend\", character.PlayerId);\r\n }\r\n setPlayerInputValue(\"\");\r\n }\r\n setIsLoading(false);\r\n }\r\n\r\n // function addCharactersByIds(ids) {\r\n // const list = localStorage.getItem(\"friends-list\");\r\n // let parsed = [];\r\n // try {\r\n // parsed = JSON.parse(list);\r\n // if (parsed && typeof parsed === \"object\") {\r\n // } else {\r\n // parsed = [];\r\n // }\r\n // } catch (e) {\r\n // parsed = [];\r\n // }\r\n\r\n // if (parsed.length >= MAX_LIST_SIZE) {\r\n // alert(\r\n // `You may only have ${MAX_LIST_SIZE} players on your friends list.`\r\n // );\r\n // return;\r\n // }\r\n\r\n // if (parsed.length + ids.length > MAX_LIST_SIZE) {\r\n // alert(\r\n // `You may only have ${MAX_LIST_SIZE} players on your friends list. Adding the first ${\r\n // MAX_LIST_SIZE - parsed.length\r\n // } players.`\r\n // );\r\n // ids.forEach((id) => {\r\n // if (!idList.includes(id)) {\r\n // parsed.push(id);\r\n // }\r\n // });\r\n // setIdList(parsed.slice(0, MAX_LIST_SIZE - parsed.length));\r\n // localStorage.setItem(\"friends-list\", JSON.stringify(parsed));\r\n // setPlayerInputValue(\"\");\r\n // } else {\r\n // ids.forEach((id) => {\r\n // if (!idList.includes(id)) {\r\n // parsed.push(id);\r\n // }\r\n // });\r\n // setIdList(parsed);\r\n // localStorage.setItem(\"friends-list\", JSON.stringify(parsed));\r\n // setPlayerInputValue(\"\");\r\n // }\r\n // }\r\n\r\n // function addGuild(guild) {\r\n // const body = { guild: guild.name, server: guild.server };\r\n // Post(\"https://api.ddoaudit.com/guilds/lookup\", body, 10000)\r\n // .then((res) => {\r\n // if (res.length) {\r\n // addCharactersByIds(res);\r\n // }\r\n // })\r\n // .catch(() => {\r\n // throwError();\r\n // })\r\n // .finally(() => {\r\n // setIsLoading(false);\r\n // });\r\n // }\r\n\r\n function removePlayer() {\r\n if (selectedPlayersRef.current.length === 0) {\r\n return;\r\n } else {\r\n let newIdList = idListRef.current.filter(\r\n (pid) => !selectedPlayersRef.current.includes(pid)\r\n );\r\n setIdList(newIdList);\r\n localStorage.setItem(\"friends-list\", JSON.stringify(newIdList));\r\n setSelectedPlayers([]);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {props.secondary && (\r\n props.closePanel()}\r\n permalink={props.permalink}\r\n />\r\n )}\r\n \r\n {\r\n if (character !== null) {\r\n addCharacter(character);\r\n }\r\n setMultiselectFriendsList(null);\r\n }}\r\n handleHideOfflineFriends={() => {\r\n localStorage.setItem(\r\n \"friends-hide-offline\",\r\n !hideOfflineFriendsRef.current\r\n );\r\n setHideOfflineFriends((hideOfflineFriends) => !hideOfflineFriends);\r\n }}\r\n hideOfflineFriends={hideOfflineFriends}\r\n handleShowServerNames={(showServerNames) => {\r\n localStorage.setItem(\r\n \"friends-show-servers\",\r\n !showServerNamesRef.current\r\n );\r\n setShowServerNames((showServerNames) => !showServerNames);\r\n }}\r\n showServerNames={showServerNames}\r\n handleShowPlayerLocations={() => {\r\n localStorage.setItem(\r\n \"friends-show-locations\",\r\n !showPlayerLocationsRef.current\r\n );\r\n setShowPlayerLocations(\r\n (showPlayerLocations) => !showPlayerLocations\r\n );\r\n }}\r\n showPlayerLocations={showPlayerLocations}\r\n handleSort={(value) => handleSort(value)}\r\n playerInput={playerInputValue}\r\n handlePlayerInput={(value) => {\r\n setPlayerInputValue(value);\r\n playerInputValueRef.current = value;\r\n }}\r\n addName={() => addName()}\r\n selectedPlayers={selectedPlayersRef.current.map((pid) => {\r\n let i = -1;\r\n filteredFriendsListRef.current.forEach((player, playerIndex) => {\r\n if (player.PlayerId === pid) {\r\n i = playerIndex;\r\n }\r\n });\r\n return i;\r\n })}\r\n handleSelectPlayer={(index) => {\r\n if (\r\n index < 0 ||\r\n index > filteredFriendsListRef.current.length - 1\r\n ) {\r\n return;\r\n }\r\n\r\n let indexPid = filteredFriendsListRef.current[index].PlayerId;\r\n\r\n if (selectedPlayersRef.current.includes(indexPid)) {\r\n setSelectedPlayers((selectedPlayers) =>\r\n selectedPlayers.filter((i) => i !== indexPid)\r\n );\r\n } else {\r\n setSelectedPlayers((selectedPlayers) => [\r\n ...selectedPlayers,\r\n filteredFriendsListRef.current[index].PlayerId,\r\n ]);\r\n }\r\n }}\r\n removePlayer={() => removePlayer()}\r\n isLoading={isLoading}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default FriendsPanel;\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgDarkTheme(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 2c-1.82 0-3.53.5-5 1.35C7.99 5.08 10 8.3 10 12s-2.01 6.92-5 8.65C6.47 21.5 8.18 22 10 22c5.52 0 10-4.48 10-10S15.52 2 10 2z\",\n fill: \"#fff\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDarkTheme);\nexport default __webpack_public_path__ + \"static/media/dark_theme.9e46a9d7.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgError(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\",\n fill: \"#c80606\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgError);\nexport default __webpack_public_path__ + \"static/media/error.0d92510d.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\n\r\nconst CustomLegend = (props) => {\r\n return (\r\n \r\n {props.data &&\r\n props.data\r\n .slice(0)\r\n .reverse()\r\n .map((dat, i) => (\r\n props.switchExcludedSeries(dat)}\r\n >\r\n \r\n {dat.id}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default CustomLegend;\r\n","import React from \"react\";\r\nimport { ResponsivePie } from \"@nivo/pie\";\r\nimport CustomLegend from \"./CustomLegend\";\r\n\r\n// This pie chart is used to show the server distribution.\r\n// Pages: Servers\r\n\r\nconst ChartPie = (props) => {\r\n const theme = {\r\n background: \"var(--base)\",\r\n textColor: \"var(--text)\",\r\n fontSize: 16,\r\n tooltip: {\r\n container: {\r\n background: \"var(--base)\",\r\n color: \"inherit\",\r\n fontSize: \"inherit\",\r\n borderRadius: \"2px\",\r\n boxShadow: \"0 0 6px var(--black)\",\r\n padding: \"5px 9px\",\r\n },\r\n basic: {\r\n whiteSpace: \"pre\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n table: {},\r\n tableCell: {\r\n padding: \"3px 5px\",\r\n },\r\n },\r\n };\r\n\r\n const [isMobileLoaded, setIsMobileLoaded] = React.useState(\r\n props.alwaysShow === true ? true : false\r\n );\r\n\r\n function GetTotalPopulation() {\r\n let filtered = props.data.filter(\r\n (series) => !excludedSeries.includes(series.id)\r\n );\r\n if (filtered.length === 1) return filtered[0].value;\r\n if (filtered.length === 0) return 1;\r\n let total = 0;\r\n for (let i = 0; i < filtered.length; i++) {\r\n total += filtered[i].value;\r\n }\r\n\r\n return total;\r\n }\r\n\r\n const [excludedSeries, setExcludedSeries] = React.useState(\r\n props.forceHardcore ? [] : [\"Hardcore\"]\r\n );\r\n function switchExcludedSeries(series) {\r\n if (excludedSeries.includes(series.id)) {\r\n let temp = [...excludedSeries.filter((s) => s != series.id)];\r\n setExcludedSeries([...temp]);\r\n } else {\r\n let temp = [...excludedSeries, series.id];\r\n setExcludedSeries([...temp]);\r\n }\r\n }\r\n\r\n const [isMobile, setIsMobile] = React.useState(null);\r\n React.useEffect(() => {\r\n setIsMobile(window.innerWidth <= 950);\r\n }, []);\r\n\r\n return (\r\n
\r\n setIsMobileLoaded(true)}\r\n >\r\n Show this graph\r\n
\r\n \r\n {props.data ? (\r\n !excludedSeries.includes(series.id)\r\n )}\r\n startAngle={props.arc ? -90 : 0}\r\n endAngle={props.arc ? 90 : 360}\r\n innerRadius={props.innerRadius || 0}\r\n margin={{\r\n top: isMobile ? 5 : 30,\r\n right: isMobile ? 5 : 140,\r\n bottom: isMobile ? 5 : 30,\r\n left: isMobile ? 5 : 140,\r\n }}\r\n valueFormat=\" >-.1f\"\r\n sortByValue={true}\r\n // colors={(d) => d.color}\r\n padAngle={0.7}\r\n cornerRadius={3}\r\n activeOuterRadiusOffset={8}\r\n colors={\r\n props.useDataColors\r\n ? { datum: \"data.color\" }\r\n : { scheme: \"category10\" }\r\n }\r\n borderWidth={1}\r\n borderColor={{\r\n from: \"color\",\r\n modifiers: [[\"darker\", 0.2]],\r\n }}\r\n enableArcLinkLabels={!isMobile}\r\n arcLinkLabelsSkipAngle={10}\r\n arcLinkLabelsThickness={2}\r\n arcLinkLabelsColor={{ from: \"color\" }}\r\n arcLabel={function (e) {\r\n return `${((e.value / GetTotalPopulation()) * 100).toFixed(1)}%`;\r\n }}\r\n arcLabelsSkipAngle={10}\r\n arcLabelsRadiusOffset={props.arcLabelsRadiusOffset || 0.7}\r\n arcLabelsTextColor={\"white\"}\r\n // legends={[\r\n // {\r\n // anchor: \"right\",\r\n // direction: \"column\",\r\n // justify: false,\r\n // translateX: 0,\r\n // translateY: 0,\r\n // itemsSpacing: 0,\r\n // itemWidth: 120,\r\n // itemHeight: 25,\r\n // itemTextColor: \"#fff\",\r\n // itemDirection: \"left-to-right\",\r\n // itemOpacity: 1,\r\n // symbolSize: 18,\r\n // symbolShape: \"circle\",\r\n // effects: [\r\n // {\r\n // on: \"hover\",\r\n // style: {\r\n // itemTextColor: \"#000\",\r\n // },\r\n // },\r\n // ],\r\n // },\r\n // ]}\r\n theme={theme}\r\n />\r\n ) : (\r\n
\r\n
{props.loadingMessage || \"Loading data...\"}
\r\n
\r\n )}\r\n \r\n {!props.hideCustomLegend && (\r\n switchExcludedSeries(id)}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ChartPie;\r\n","import React from \"react\";\r\nimport { ReactComponent as InfoSVG } from \"../../assets/global/info.svg\";\r\nimport { ReactComponent as ErrorSVG } from \"../../assets/global/error.svg\";\r\nimport { ReactComponent as WarningSVG } from \"../../assets/global/warning.svg\";\r\n\r\nconst PageMessage = (props) => {\r\n function getIcon() {\r\n switch (props.type) {\r\n case \"warning\":\r\n return ;\r\n case \"error\":\r\n return ;\r\n case \"info\":\r\n default:\r\n return ;\r\n }\r\n }\r\n\r\n function getColor() {\r\n switch (props.type) {\r\n case \"warning\":\r\n return \"orange\";\r\n case \"error\":\r\n return \"red\";\r\n case \"info\":\r\n default:\r\n return \"blue\";\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {getIcon()}\r\n {props.title}\r\n \r\n \r\n {props.message}\r\n \r\n
\r\n {props.submessage && (\r\n \r\n {props.submessage}\r\n \r\n )}\r\n \r\n {props.pushBottom &&
}\r\n
\r\n );\r\n};\r\n\r\nexport default PageMessage;\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgRefresh(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgRefresh);\nexport default __webpack_public_path__ + \"static/media/refresh.0684a025.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgDelete(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDelete);\nexport default __webpack_public_path__ + \"static/media/delete.b2ce69d1.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgExpand(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgExpand);\nexport default __webpack_public_path__ + \"static/media/expand.af5969e8.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _g2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgTimeline(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n enableBackground: \"new 0 0 24 24\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"none\",\n height: 24,\n width: 24\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23,8c0,1.1-0.9,2-2,2c-0.18,0-0.35-0.02-0.51-0.07l-3.56,3.55C16.98,13.64,17,13.82,17,14c0,1.1-0.9,2-2,2s-2-0.9-2-2 c0-0.18,0.02-0.36,0.07-0.52l-2.55-2.55C10.36,10.98,10.18,11,10,11s-0.36-0.02-0.52-0.07l-4.55,4.56C4.98,15.65,5,15.82,5,16 c0,1.1-0.9,2-2,2s-2-0.9-2-2s0.9-2,2-2c0.18,0,0.35,0.02,0.51,0.07l4.56-4.55C8.02,9.36,8,9.18,8,9c0-1.1,0.9-2,2-2s2,0.9,2,2 c0,0.18-0.02,0.36-0.07,0.52l2.55,2.55C14.64,12.02,14.82,12,15,12s0.36,0.02,0.52,0.07l3.55-3.56C19.02,8.35,19,8.18,19,8 c0-1.1,0.9-2,2-2S23,6.9,23,8z\",\n fill: \"#fff\"\n }))))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTimeline);\nexport default __webpack_public_path__ + \"static/media/timeline.59721a79.svg\";\nexport { ForwardRef as ReactComponent };","import { getConfig, getValueFromLabel } from \"../services/CaaS\";\r\n\r\nconst SERVER_LIST = [\r\n \"Argonnessen\",\r\n \"Cannith\",\r\n \"Ghallanda\",\r\n \"Khyber\",\r\n \"Orien\",\r\n \"Sarlona\",\r\n \"Thelanis\",\r\n \"Wayfinder\",\r\n \"Hardcore\",\r\n];\r\n\r\nconst SERVER_LIST_LOWERCASE = SERVER_LIST.map((server) => server.toLowerCase());\r\n\r\n/**\r\n * This function returns a list of all DDO servers. The Hardcore\r\n * server may be excluded depending on the current config.\r\n * @returns Array of server names\r\n */\r\nasync function getServers() {\r\n const caas = await getConfig();\r\n if (getValueFromLabel(caas, \"hardcore\") === \"true\") {\r\n return SERVER_LIST;\r\n } else {\r\n return SERVER_LIST.filter((server) => server !== \"Hardcore\");\r\n }\r\n}\r\n\r\nexport { getServers, SERVER_LIST, SERVER_LIST_LOWERCASE };\r\n","import React from \"react\";\r\nimport { Submit } from \"../../services/CommunicationService\";\r\nimport { ReactComponent as DarkThemeSVG } from \"../../assets/global/dark_theme.svg\";\r\nimport { ReactComponent as ThumbsDownSVG } from \"../../assets/global/thumbs_down.svg\";\r\nimport { ReactComponent as ThumbsUpSVG } from \"../../assets/global/thumbs_up.svg\";\r\nimport { Link } from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport {\r\n LargeDonateButton,\r\n SmallDonateButton,\r\n} from \"../donations/DonateButton\";\r\n\r\nconst Banner = (props) => {\r\n function getTimeZone() {\r\n let timezone = localStorage.getItem(\"timezone\");\r\n if (timezone === \"est\") {\r\n return \"EST\";\r\n } else {\r\n return \"Local\";\r\n }\r\n }\r\n\r\n function toggleTheme() {\r\n let theme = localStorage.getItem(\"theme\");\r\n if (theme === \"light-theme\") {\r\n theme = \"dark\";\r\n\r\n document.body.classList.replace(\"light-theme\", \"dark-theme\");\r\n localStorage.setItem(\"theme\", \"dark-theme\");\r\n } else {\r\n theme = \"light\";\r\n\r\n document.body.classList.replace(\"dark-theme\", \"light-theme\");\r\n localStorage.setItem(\"theme\", \"light-theme\");\r\n }\r\n }\r\n\r\n function toggleTimeZone() {\r\n let timezone = localStorage.getItem(\"timezone\");\r\n if (timezone === \"local\") {\r\n timezone = \"est\";\r\n\r\n localStorage.setItem(\"timezone\", \"est\");\r\n } else {\r\n timezone = \"local\";\r\n\r\n localStorage.setItem(\"timezone\", \"local\");\r\n }\r\n window.location.reload();\r\n }\r\n\r\n const [voteMessage, set_voteMessage] = React.useState(null);\r\n const [mayVote, set_mayVote] = React.useState(false);\r\n React.useEffect(() => {\r\n let showVoteButton;\r\n let ls = localStorage.getItem(\"last-major-vote\");\r\n if (ls !== undefined && ls !== null) {\r\n let dt = new Date(ls);\r\n let mayvote =\r\n new Date(localStorage.getItem(\"last-major-vote\")) <=\r\n new Date().getTime() - 1000 * 60 * 60 * 24 * 31;\r\n showVoteButton = setTimeout(() => {\r\n set_mayVote(mayvote);\r\n }, 1000);\r\n // set_mayVote(mayvote);\r\n } else {\r\n showVoteButton = setTimeout(() => {\r\n set_mayVote(true);\r\n }, 1000);\r\n }\r\n\r\n return () => {\r\n clearTimeout(showVoteButton);\r\n };\r\n }, []);\r\n\r\n function vote(response) {\r\n Submit(\"Voted from Banner\", response);\r\n localStorage.setItem(\"last-major-vote\", new Date());\r\n set_mayVote(false);\r\n if (response === \"Like\") {\r\n set_voteMessage(\"Thanks for your feedback!\");\r\n } else {\r\n set_voteMessage(\"Your suggestions are welcome!\");\r\n }\r\n }\r\n\r\n let isNavbarSolid = false;\r\n function handleScroll() {\r\n var scrollTop = $(window).scrollTop();\r\n if (scrollTop > (props.small ? 200 : 450) && isNavbarSolid === true) return;\r\n\r\n var offset;\r\n if (props.small) {\r\n offset = 50;\r\n } else {\r\n offset =\r\n $(window).outerWidth() > 900 ? (props.showButtons ? 140 : 220) : 30;\r\n }\r\n\r\n $(\"#banner-text-container\").css(\r\n \"transform\",\r\n `translateY(${scrollTop / 2}px)`\r\n );\r\n\r\n $(\"#banner-image\").css(\"top\", `${-scrollTop / 6}px`);\r\n\r\n if (scrollTop > (props.small ? 40 : 180)) {\r\n if (isNavbarSolid === false) {\r\n isNavbarSolid = true;\r\n $(\"#nav-bar\").css({ backgroundColor: \"var(--nav-bar)\" });\r\n $(\"#nav-bar\").css({ boxShadow: \"0px 0px 5px black\" });\r\n }\r\n } else {\r\n if (isNavbarSolid === true) {\r\n isNavbarSolid = false;\r\n $(\"#nav-bar\").css({ backgroundColor: \"\" });\r\n $(\"#nav-bar\").css({ boxShadow: \"\" });\r\n }\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n $(window).bind(\"scroll\", handleScroll);\r\n $(window).bind(\"resize\", handleScroll);\r\n\r\n return function cleanup() {\r\n $(window).unbind(\"scroll\", handleScroll);\r\n $(\"#nav-bar\").css({ backgroundColor: \"\" });\r\n $(\"#nav-bar\").css({ boxShadow: \"\" });\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {props.showTitle &&

{props.title}

}\r\n {props.showSubtitle &&

{props.subtitle}

}\r\n {props.showButtons && (\r\n
\r\n
\r\n {!props.hideSuggestions && (\r\n \r\n Make a suggestion\r\n \r\n )}\r\n {\r\n Log(\"Clicked GitHub link\", \"Banner\");\r\n }}\r\n style={{\r\n width: \"175px\",\r\n textAlign: \"center\",\r\n }}\r\n >\r\n Visit my GitHub\r\n \r\n \r\n
\r\n {!props.hideVote && (\r\n \r\n \r\n New Website!\r\n \r\n vote(\"Like\")}\r\n />\r\n vote(\"Dislike\")}\r\n />\r\n
\r\n )}\r\n {voteMessage && (\r\n
\r\n \r\n {voteMessage}\r\n \r\n
\r\n )}\r\n \r\n )}\r\n \r\n
\r\n {!props.hideSmallDonateButton && (\r\n
\r\n \r\n
\r\n )}\r\n
toggleTheme()}>\r\n \r\n \r\n Theme\r\n \r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Banner;\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgHome(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\",\n fill: \"#fff\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgHome);\nexport default __webpack_public_path__ + \"static/media/home.5c98df76.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nclass ScrollToTop extends Component {\r\n componentDidUpdate(prevProps) {\r\n if (this.props.location !== prevProps.location) {\r\n window.scrollTo(0, 0);\r\n }\r\n }\r\n\r\n render() {\r\n return ;\r\n }\r\n}\r\n\r\nexport default withRouter(ScrollToTop);\r\n","import React from \"react\";\r\nimport { Link, useLocation } from \"react-router-dom\";\r\nimport { ReactComponent as ExpandSVG } from \"../../assets/global/expand.svg\";\r\nimport $ from \"jquery\";\r\n\r\nconst NavBar = (props) => {\r\n return (\r\n
\r\n {props.children}\r\n
\r\n );\r\n};\r\n\r\nconst NavItem = (props) => {\r\n const location = useLocation();\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nconst NavDropdown = (props) => {\r\n const location = useLocation();\r\n\r\n let isDroppedDown = false;\r\n $(document).on(\"mouseenter\", `#nav-item-to-${props.to.slice(1)}`, () => {\r\n if (isDroppedDown === false) {\r\n isDroppedDown = true;\r\n $(`#nav-dropdown-to-${props.to.slice(1)}`).slideDown(\r\n \"fast\",\r\n () => (isDroppedDown = true)\r\n );\r\n }\r\n });\r\n $(document).on(\"mouseleave\", `#nav-item-to-${props.to.slice(1)}`, () => {\r\n if (isDroppedDown === true) {\r\n $(`#nav-dropdown-to-${props.to.slice(1)}`).slideUp(\r\n \"fast\",\r\n () => (isDroppedDown = false)\r\n );\r\n }\r\n });\r\n\r\n return (\r\n \r\n \r\n {props.title}\r\n \r\n \r\n
\r\n {props.children.map((child) => child)}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst NavSubItem = (props) => {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nconst NavDivider = (props) => {\r\n return
;\r\n};\r\n\r\nexport { NavBar, NavItem, NavDropdown, NavSubItem, NavDivider };\r\n","var _path, _circle, _circle2, _circle3;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLive(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 7.2,\n cy: 14.4,\n r: 3.2\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 14.8,\n cy: 18,\n r: 2\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 15.2,\n cy: 8.8,\n r: 4.8\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLive);\nexport default __webpack_public_path__ + \"static/media/live.91cac74f.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgServers(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0V0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11 2v20c-5.07-.5-9-4.79-9-10s3.93-9.5 9-10zm2.03 0v8.99H22c-.47-4.74-4.24-8.52-8.97-8.99zm0 11.01V22c4.74-.47 8.5-4.25 8.97-8.99h-8.97z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgServers);\nexport default __webpack_public_path__ + \"static/media/servers.420bc230.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgGrouping(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGrouping);\nexport default __webpack_public_path__ + \"static/media/grouping.7139c094.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgWho(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWho);\nexport default __webpack_public_path__ + \"static/media/who.c15c6989.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgTrends(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z\",\n fill: \"#fff\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTrends);\nexport default __webpack_public_path__ + \"static/media/trends.945836c7.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgAbout(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAbout);\nexport default __webpack_public_path__ + \"static/media/about.1b3a1930.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgMenu(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMenu);\nexport default __webpack_public_path__ + \"static/media/menu.1a34a975.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _g2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgTransfer(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n enableBackground: \"new 0 0 24 24\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"none\",\n height: 24,\n width: 24\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3,11c0,2.45,1.76,4.47,4.08,4.91l-1.49-1.49L7,13l4,4.01L7,21l-1.41-1.41l1.58-1.58l0-0.06C3.7,17.54,1,14.58,1,11 c0-3.87,3.13-7,7-7h3v2H8C5.24,6,3,8.24,3,11z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22,11V4h-9v7H22z M20,9h-5V6h5V9z\"\n }), /*#__PURE__*/React.createElement(\"rect\", {\n height: 7,\n width: 9,\n x: 13,\n y: 13\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTransfer);\nexport default __webpack_public_path__ + \"static/media/transfer.3a2f68bf.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { getServers, SERVER_LIST } from \"../constants/Servers\";\r\n\r\nconst ServerHook = () => {\r\n const [servers, setServers] = React.useState(SERVER_LIST);\r\n\r\n React.useEffect(() => {\r\n async function waitForServers() {\r\n let updatedServers = await getServers();\r\n setServers(updatedServers);\r\n }\r\n waitForServers();\r\n }, []);\r\n\r\n return servers;\r\n};\r\n\r\nexport default ServerHook;\r\n","import React from \"react\";\r\nimport { NavBar, NavItem, NavDropdown, NavSubItem, NavDivider } from \"./NavBar\";\r\nimport { ReactComponent as HomeSVG } from \"../../assets/global/home.svg\";\r\nimport { ReactComponent as LiveSVG } from \"../../assets/global/live.svg\";\r\nimport { ReactComponent as ServersSVG } from \"../../assets/global/servers.svg\";\r\nimport { ReactComponent as GroupingSVG } from \"../../assets/global/grouping.svg\";\r\nimport { ReactComponent as WhoSVG } from \"../../assets/global/who.svg\";\r\nimport { ReactComponent as TrendsSVG } from \"../../assets/global/trends.svg\";\r\nimport { ReactComponent as AboutSVG } from \"../../assets/global/about.svg\";\r\nimport { ReactComponent as MenuSVG } from \"../../assets/global/menu.svg\";\r\nimport ServerHook from \"../../hooks/ServerHook\";\r\nimport { SERVER_LIST } from \"../../constants/Servers\";\r\n\r\nconst NavMenu = () => {\r\n const SERVERS = ServerHook();\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n Home\r\n
\r\n \r\n \r\n Live\r\n \r\n \r\n \r\n Servers\r\n
\r\n }\r\n className=\"hide-on-small-screen\"\r\n >\r\n Overview\r\n \r\n {SERVER_LIST.map((server) => (\r\n \r\n {server}\r\n \r\n ))}\r\n \r\n \r\n \r\n Grouping\r\n
\r\n }\r\n >\r\n Overview\r\n \r\n {SERVERS.map((server) => (\r\n \r\n {server}\r\n \r\n ))}\r\n \r\n \r\n \r\n Who\r\n \r\n }\r\n >\r\n Overview\r\n \r\n {SERVERS.map((server) => (\r\n \r\n {server}\r\n \r\n ))}\r\n \r\n \r\n \r\n Trends\r\n \r\n \r\n \r\n About\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NavMenu;\r\n","import React from \"react\";\r\n\r\nconst NavPush = (props) => {\r\n return
;\r\n};\r\n\r\nexport default NavPush;\r\n","import React from \"react\";\r\nimport NavMenu from \"./global/NavMenu\";\r\nimport NavPush from \"./global/NavPush\";\r\n\r\nexport default (props) => (\r\n \r\n \r\n
{props.children}
\r\n \r\n
\r\n);\r\n","import { createBrowserHistory } from \"history\";\r\n\r\nexport default createBrowserHistory();\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFriends(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFriends);\nexport default __webpack_public_path__ + \"static/media/friends.6e8cf279.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgQuests(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 5v14H5V5h14m1.1-2H3.9c-.5 0-.9.4-.9.9v16.2c0 .4.4.9.9.9h16.2c.4 0 .9-.5.9-.9V3.9c0-.5-.5-.9-.9-.9zM11 7h6v2h-6V7zm0 4h6v2h-6v-2zm0 4h6v2h-6zM7 7h2v2H7zm0 4h2v2H7zm0 4h2v2H7z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgQuests);\nexport default __webpack_public_path__ + \"static/media/quests.6ec4e4c1.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgApi(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n enableBackground: \"new 0 0 24 24\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"none\",\n height: 24,\n width: 24\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14,12l-2,2l-2-2l2-2L14,12z M12,6l2.12,2.12l2.5-2.5L12,1L7.38,5.62l2.5,2.5L12,6z M6,12l2.12-2.12l-2.5-2.5L1,12 l4.62,4.62l2.5-2.5L6,12z M18,12l-2.12,2.12l2.5,2.5L23,12l-4.62-4.62l-2.5,2.5L18,12z M12,18l-2.12-2.12l-2.5,2.5L12,23l4.62-4.62 l-2.5-2.5L12,18z\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgApi);\nexport default __webpack_public_path__ + \"static/media/api.8813e00e.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _g2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCommunity(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n enableBackground: \"new 0 0 24 24\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"none\",\n height: 24,\n width: 24\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n height: 11,\n width: 4,\n x: 1,\n y: 11\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16,3.25C16.65,2.49,17.66,2,18.7,2C20.55,2,22,3.45,22,5.3c0,2.27-2.91,4.9-6,7.7c-3.09-2.81-6-5.44-6-7.7 C10,3.45,11.45,2,13.3,2C14.34,2,15.35,2.49,16,3.25z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20,17h-7l-2.09-0.73l0.33-0.94L13,16h2.82c0.65,0,1.18-0.53,1.18-1.18v0c0-0.49-0.31-0.93-0.77-1.11L8.97,11H7v9.02 L14,22l8.01-3v0C22,17.9,21.11,17,20,17z\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCommunity);\nexport default __webpack_public_path__ + \"static/media/community.262b1186.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFeedback(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFeedback);\nexport default __webpack_public_path__ + \"static/media/feedback.1cf78b41.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgRegister(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\",\n fillRule: \"evenodd\"\n })), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 17l3-2.94c-.39-.04-.68-.06-1-.06-2.67 0-8 1.34-8 4v2h9l-3-3zm2-5c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.47 20.5L12 17l1.4-1.41 2.07 2.08 5.13-5.17 1.4 1.41z\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgRegister);\nexport default __webpack_public_path__ + \"static/media/register.82b4f789.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgOnline(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0V0zm0 0h24v24H0V0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.59 7.58L10 14.17l-3.59-3.58L5 12l5 5 8-8zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\",\n fill: \"#0c0\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOnline);\nexport default __webpack_public_path__ + \"static/media/online.40862527.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from \"react\";\r\n\r\nexport default class Footer extends Component {\r\n render() {\r\n return (\r\n
\r\n
\r\n

\r\n DDO Audit is brought to you by Clemeit of Thelanis.\r\n
\r\n This utility is subject to change without notice.\r\n

\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { ReactComponent as LiveSVG } from \"../../assets/global/live.svg\";\r\nimport { ReactComponent as TransferSVG } from \"../../assets/global/transfer.svg\";\r\nimport { ReactComponent as ServersSVG } from \"../../assets/global/servers.svg\";\r\nimport { ReactComponent as GroupingSVG } from \"../../assets/global/grouping.svg\";\r\nimport { ReactComponent as WhoSVG } from \"../../assets/global/who.svg\";\r\nimport { ReactComponent as FriendsSVG } from \"../../assets/global/friends.svg\";\r\nimport { ReactComponent as QuestsSVG } from \"../../assets/global/quests.svg\";\r\nimport { ReactComponent as TrendsSVG } from \"../../assets/global/trends.svg\";\r\nimport { ReactComponent as AboutSVG } from \"../../assets/global/about.svg\";\r\nimport { ReactComponent as ApiSVG } from \"../../assets/global/api.svg\";\r\nimport { ReactComponent as CommunitySVG } from \"../../assets/global/community.svg\";\r\nimport { Log, Submit } from \"../../services/CommunicationService\";\r\nimport { ReactComponent as ThumbsDownSVG } from \"../../assets/global/thumbs_down.svg\";\r\nimport { ReactComponent as ThumbsUpSVG } from \"../../assets/global/thumbs_up.svg\";\r\nimport { ReactComponent as FeedbackSVG } from \"../../assets/global/feedback.svg\";\r\nimport { ReactComponent as RegisterSVG } from \"../../assets/global/register.svg\";\r\nimport { ReactComponent as TimerSVG } from \"../../assets/global/timer.svg\";\r\nimport { ReactComponent as DarkThemeSVG } from \"../../assets/global/dark_theme.svg\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport Banner from \"../global/Banner\";\r\nimport Footer from \"./Footer\";\r\nimport BannerMessage from \"../global/BannerMessage\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\n\r\nconst Directory = () => {\r\n const TITLE = \"DDO Audit | Population Tracking and LFM Viewer\";\r\n\r\n const NAV_OPTIONS = [\r\n {\r\n title: \"Population and Activity\",\r\n tiles: [\r\n {\r\n icon: ,\r\n title: \"Quick Info\",\r\n description:\r\n \"Server status, most populated server, and default server.\",\r\n to: \"/live\",\r\n },\r\n {\r\n icon: ,\r\n title: \"Server Statistics\",\r\n description:\r\n \"Server population, character demographics, and activity trends.\",\r\n to: \"/servers\",\r\n },\r\n {\r\n icon: ,\r\n title: \"Quest Activity\",\r\n description: \"Content popularity, average duration, and XP/minute.\",\r\n to: \"/quests\",\r\n },\r\n // {\r\n // icon: (\r\n // \r\n // ),\r\n // title: \"Guild Activity\",\r\n // description: \"Guild size and activity.\",\r\n // to: \"/guilds\",\r\n // soon: true,\r\n // },\r\n {\r\n icon: ,\r\n title: \"Population Trends\",\r\n description:\r\n \"Long-term trends, daily minimum and maximum population, and important game events.\",\r\n to: \"/trends\",\r\n },\r\n {\r\n icon: ,\r\n title: \"Server Transfers\",\r\n description:\r\n \"Which servers are gaining characters and which servers are losing them.\",\r\n to: \"/transfers\",\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Social Tools\",\r\n tiles: [\r\n {\r\n icon: ,\r\n title: \"Live LFM Viewer\",\r\n description:\r\n \"Easily find groups with a live LFM panel for every server.\",\r\n to: \"/grouping\",\r\n },\r\n {\r\n icon: ,\r\n title: \"Live Who List\",\r\n description:\r\n \"Explore a list of online players with a live Who panel.\",\r\n to: \"/who\",\r\n },\r\n {\r\n icon: ,\r\n title: \"Friends List\",\r\n description:\r\n \"See what your friends are up to with your own Friends List.\",\r\n to: \"/friends\",\r\n },\r\n {\r\n icon: ,\r\n title: \"Register Characters\",\r\n description:\r\n \"Add your characters for automatic LFM filtering and raid timer tracking.\",\r\n to: \"/registration\",\r\n },\r\n {\r\n icon: ,\r\n title: \"Raid Timers\",\r\n description: \"View and manage your current raid timers.\",\r\n to: \"/timers\",\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Additional Resources\",\r\n tiles: [\r\n {\r\n icon: ,\r\n title: \"About This Project\",\r\n description:\r\n \"Everything you wanted to know about this project, and plenty of things you didn't.\",\r\n to: \"/about\",\r\n },\r\n {\r\n icon: ,\r\n title: \"Community Tools\",\r\n description: \"Tools developed by the community, for the community.\",\r\n to: \"/community\",\r\n unavailable: true,\r\n },\r\n {\r\n icon: ,\r\n title: \"API\",\r\n description:\r\n \"Look behind the curtain. Get the data for your own projects.\",\r\n to: \"/api\",\r\n beta: true,\r\n },\r\n {\r\n icon: ,\r\n title: \"Give Feedback\",\r\n description:\r\n \"Your feedback is welcome! Let me know what you think of my project.\",\r\n to: \"/suggestions\",\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n const [voteMessage, set_voteMessage] = React.useState(null);\r\n const [mayVote, set_mayVote] = React.useState(false);\r\n // React.useEffect(() => {\r\n // let ls = localStorage.getItem(\"last-major-vote\");\r\n // if (ls != null) {\r\n // // let dt = new Date(ls);\r\n // // let mayvote =\r\n // // new Date(localStorage.getItem(\"last-major-vote\")) <=\r\n // // new Date().getTime() - 1000 * 60 * 60 * 24 * 31;\r\n // set_mayVote(false);\r\n // } else {\r\n // set_mayVote(true);\r\n // }\r\n // }, []);\r\n\r\n function toggleTheme() {\r\n let theme = localStorage.getItem(\"theme\");\r\n if (theme === \"light-theme\") {\r\n theme = \"dark\";\r\n\r\n document.body.classList.replace(\"light-theme\", \"dark-theme\");\r\n localStorage.setItem(\"theme\", \"dark-theme\");\r\n } else {\r\n theme = \"light\";\r\n\r\n document.body.classList.replace(\"dark-theme\", \"light-theme\");\r\n localStorage.setItem(\"theme\", \"light-theme\");\r\n }\r\n }\r\n\r\n function vote(response) {\r\n Submit(\"Voted from Directory\", response);\r\n localStorage.setItem(\"last-major-vote\", new Date());\r\n set_mayVote(false);\r\n if (response === \"Like\") {\r\n set_voteMessage(\"Thanks for your feedback!\");\r\n } else {\r\n set_voteMessage(\r\n \r\n Your suggestions are welcome!\r\n \r\n );\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n {TITLE}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
toggleTheme()}>\r\n \r\n \r\n Theme\r\n \r\n
\r\n
\r\n \r\n
\r\n {mayVote && (\r\n \r\n \r\n New Website!\r\n \r\n vote(\"Like\")}\r\n />\r\n vote(\"Dislike\")}\r\n />\r\n
\r\n )}\r\n {voteMessage && (\r\n \r\n \r\n {voteMessage}\r\n \r\n
\r\n )}\r\n {NAV_OPTIONS.map((option, i) => (\r\n \r\n
\r\n {option.tiles\r\n .filter((option) => !option.unavailable)\r\n .map(\r\n (option, i) =>\r\n !option.hide && (\r\n option.callback?.()}\r\n to={option.to}\r\n key={i}\r\n className={\r\n \"nav-box shrinkable\" +\r\n (option.soon === true ? \" no-interact\" : \"\") +\r\n (option.glowing === true ? \" glowing\" : \"\")\r\n }\r\n style={{\r\n height: \"auto\",\r\n minHeight: \"150px\",\r\n }}\r\n >\r\n
\r\n {option.icon}\r\n

\r\n {option.title}\r\n {option.new != null && (\r\n
NEW
\r\n )}\r\n {option.beta != null && (\r\n
BETA
\r\n )}\r\n {option.soon != null && (\r\n
COMING SOON
\r\n )}\r\n

\r\n
\r\n

\r\n {option.description}\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\nexport default Directory;\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgOffline(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\",\n fill: \"#c00\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOffline);\nexport default __webpack_public_path__ + \"static/media/offline.05f011b1.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPending(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: 24,\n viewBox: \"0 0 24 24\",\n width: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z\",\n fill: \"#00c\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPending);\nexport default __webpack_public_path__ + \"static/media/pending.c531a7ee.svg\";\nexport { ForwardRef as ReactComponent };","var _metadata, _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPumpkinGreen(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 1000 1000\",\n enableBackground: \"new 0 0 1000 1000\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _metadata || (_metadata = /*#__PURE__*/React.createElement(\"metadata\", null, \" Svg Vector Icons : http://www.onlinewebfonts.com/icon \")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.000000,511.000000) scale(0.100000,-0.100000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#00FF00\",\n d: \"M5840.1,4981.4c-660.7-129.8-1119.4-539.5-1257.9-1125.2c-23.1-103.9-43.3-320.3-43.3-493.4c0-187.5-11.5-311.6-28.9-311.6c-46.2,0-259.7-204.8-302.9-291.4c-40.4-75-49.1-77.9-213.5-63.5c-178.9,17.3-533.7-46.2-663.6-118.3c-63.5-34.6-92.3-31.7-259.7,34.6c-167.3,66.4-230.8,75-522.2,75c-288.5,0-357.8-11.5-528-77.9C1024.8,2220.3,346.8,933.5,277.6-699.5c-63.5-1520.5,487.6-2963,1358.9-3554.5c346.2-236.6,761.7-340.4,1131-282.7c106.7,17.3,202,37.5,207.7,43.3c5.8,5.8,103.9-40.4,216.4-101c565.5-305.8,1174.3-251,1699.4,150l106.7,83.6l135.6-103.8c499.1-380.8,1119.4-429.9,1676.3-129.8c112.5,60.6,210.6,106.7,216.4,101c5.8-5.8,101-26,213.5-43.3c352-54.8,758.8,43.3,1093.5,259.7c983.8,640.5,1552.2,2331.2,1356,4024.7C9533.1,1074.9,8953.2,2128,8159.7,2526.1c-285.6,141.4-380.8,164.5-721.3,161.6c-271.2,0-346.2-11.5-504.9-72.1c-184.7-75-187.5-75-302.9-23.1c-152.9,69.2-478.9,121.2-646.3,106.7c-129.8-14.4-135.6-11.5-213.5,112.5c-40.4,69.2-115.4,147.1-164.5,176l-86.6,49.1v288.5c0,245.2,11.5,311.6,66.3,418.3c77.9,155.8,219.3,242.3,464.5,285.6c256.8,43.3,277,80.8,277,470.3C6327.7,4992.9,6255.6,5062.2,5840.1,4981.4z M5894.9,4493.8c0-17.3-23.1-37.5-49.1-46.2c-328.9-109.6-562.6-294.3-678-528c-60.6-118.3-66.4-181.8-75-626.1l-11.6-493.4l72.1-54.8c40.4-31.7,112.5-77.9,161.6-103.9c49.1-26,89.5-60.6,89.5-75c0-11.6-51.9-51.9-115.4-89.4c-63.5-34.6-152.9-95.2-199.1-132.7l-80.8-72.1l-204.8,135.6c-121.2,80.8-196.2,150-187.5,170.2c8.7,23.1,83.7,72.1,167.3,109.6c83.7,40.4,158.7,95.2,170.2,121.2c8.7,23.1,17.3,210.6,17.3,409.7c0,553.9,89.4,828,334.7,1044.4C5496.8,4430.3,5894.9,4586.1,5894.9,4493.8z M2773.2,2229c8.7-8.7-49-80.8-126.9-164.5c-369.3-392.4-657.8-969.4-830.9-1661.8c-132.7-530.9-147.1-678-147.1-1448.3c0-770.3,14.4-917.5,147.1-1448.3c135.6-548.2,328.9-986.7,608.8-1390.6l161.6-227.9l-167.3,17.3c-447.2,46.2-911.7,453-1234.8,1081.9c-830.9,1612.8-502,4120,654.9,5008.6c170.2,129.8,354.9,216.4,536.6,248.1C2499.1,2266.5,2744.4,2257.8,2773.2,2229z M7828,2188.6c629-239.5,1168.5-1093.5,1370.4-2166.7c109.6-582.8,103.8-1382-14.4-1956.1c-242.4-1197.3-903-2088.8-1601.3-2161l-167.3-17.3l161.6,227.9c516.4,741.5,770.3,1673.4,770.3,2839c0,741.5-89.4,1321.4-294.3,1904.2c-167.3,473.2-461.6,978.1-715.5,1226.2c-63.5,60.6-115.4,121.2-115.4,132.7C7222.1,2286.7,7623.1,2266.5,7828,2188.6z M4397.5,2136.6c103.9-51.9,210.6-118.3,236.6-147.1c43.3-46.2,37.5-63.5-83.7-236.6c-989.6-1416.6-1004-4056.5-28.9-5553.9l158.7-245.2l-92.3-69.3c-334.7-253.9-764.6-297.2-1142.5-115.4c-213.5,103.9-591.5,484.7-750.1,753c-424.1,718.4-631.8,1609.9-600.1,2590.8C2124-9.9,2305.8,697,2663.6,1337.5c161.6,285.6,556.8,692.4,764.6,790.5c227.9,103.9,274.1,112.5,533.7,106.8C4175.4,2229,4236,2217.4,4397.5,2136.6z M6544.1,2142.4c239.5-112.5,620.3-499.1,793.4-805c233.7-415.4,406.8-920.4,507.8-1474.3c75-406.8,75-1410.8,0-1817.6c-150-816.5-441.4-1485.8-833.8-1907.1c-320.3-343.3-579.9-476-929-478.9c-836.7,0-1578.2,1044.4-1788.8,2518.7c-49.1,354.9-54.8,1087.7-11.5,1454.1C4435,896,5026.5,1937.6,5736.2,2194.3C5955.5,2272.2,6319,2249.2,6544.1,2142.4z\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPumpkinGreen);\nexport default __webpack_public_path__ + \"static/media/pumpkin_green.6f308025.svg\";\nexport { ForwardRef as ReactComponent };","var _metadata, _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPumpkinRed(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 1000 1000\",\n enableBackground: \"new 0 0 1000 1000\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _metadata || (_metadata = /*#__PURE__*/React.createElement(\"metadata\", null, \" Svg Vector Icons : http://www.onlinewebfonts.com/icon \")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.000000,511.000000) scale(0.100000,-0.100000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF0000\",\n d: \"M5840.1,4981.4c-660.7-129.8-1119.4-539.5-1257.9-1125.2c-23.1-103.9-43.3-320.3-43.3-493.4c0-187.5-11.5-311.6-28.9-311.6c-46.2,0-259.7-204.8-302.9-291.4c-40.4-75-49.1-77.9-213.5-63.5c-178.9,17.3-533.7-46.2-663.6-118.3c-63.5-34.6-92.3-31.7-259.7,34.6c-167.3,66.4-230.8,75-522.2,75c-288.5,0-357.8-11.5-528-77.9C1024.8,2220.3,346.8,933.5,277.6-699.5c-63.5-1520.5,487.6-2963,1358.9-3554.5c346.2-236.6,761.7-340.4,1131-282.7c106.7,17.3,202,37.5,207.7,43.3c5.8,5.8,103.9-40.4,216.4-101c565.5-305.8,1174.3-251,1699.4,150l106.7,83.6l135.6-103.8c499.1-380.8,1119.4-429.9,1676.3-129.8c112.5,60.6,210.6,106.7,216.4,101c5.8-5.8,101-26,213.5-43.3c352-54.8,758.8,43.3,1093.5,259.7c983.8,640.5,1552.2,2331.2,1356,4024.7C9533.1,1074.9,8953.2,2128,8159.7,2526.1c-285.6,141.4-380.8,164.5-721.3,161.6c-271.2,0-346.2-11.5-504.9-72.1c-184.7-75-187.5-75-302.9-23.1c-152.9,69.2-478.9,121.2-646.3,106.7c-129.8-14.4-135.6-11.5-213.5,112.5c-40.4,69.2-115.4,147.1-164.5,176l-86.6,49.1v288.5c0,245.2,11.5,311.6,66.3,418.3c77.9,155.8,219.3,242.3,464.5,285.6c256.8,43.3,277,80.8,277,470.3C6327.7,4992.9,6255.6,5062.2,5840.1,4981.4z M5894.9,4493.8c0-17.3-23.1-37.5-49.1-46.2c-328.9-109.6-562.6-294.3-678-528c-60.6-118.3-66.4-181.8-75-626.1l-11.6-493.4l72.1-54.8c40.4-31.7,112.5-77.9,161.6-103.9c49.1-26,89.5-60.6,89.5-75c0-11.6-51.9-51.9-115.4-89.4c-63.5-34.6-152.9-95.2-199.1-132.7l-80.8-72.1l-204.8,135.6c-121.2,80.8-196.2,150-187.5,170.2c8.7,23.1,83.7,72.1,167.3,109.6c83.7,40.4,158.7,95.2,170.2,121.2c8.7,23.1,17.3,210.6,17.3,409.7c0,553.9,89.4,828,334.7,1044.4C5496.8,4430.3,5894.9,4586.1,5894.9,4493.8z M2773.2,2229c8.7-8.7-49-80.8-126.9-164.5c-369.3-392.4-657.8-969.4-830.9-1661.8c-132.7-530.9-147.1-678-147.1-1448.3c0-770.3,14.4-917.5,147.1-1448.3c135.6-548.2,328.9-986.7,608.8-1390.6l161.6-227.9l-167.3,17.3c-447.2,46.2-911.7,453-1234.8,1081.9c-830.9,1612.8-502,4120,654.9,5008.6c170.2,129.8,354.9,216.4,536.6,248.1C2499.1,2266.5,2744.4,2257.8,2773.2,2229z M7828,2188.6c629-239.5,1168.5-1093.5,1370.4-2166.7c109.6-582.8,103.8-1382-14.4-1956.1c-242.4-1197.3-903-2088.8-1601.3-2161l-167.3-17.3l161.6,227.9c516.4,741.5,770.3,1673.4,770.3,2839c0,741.5-89.4,1321.4-294.3,1904.2c-167.3,473.2-461.6,978.1-715.5,1226.2c-63.5,60.6-115.4,121.2-115.4,132.7C7222.1,2286.7,7623.1,2266.5,7828,2188.6z M4397.5,2136.6c103.9-51.9,210.6-118.3,236.6-147.1c43.3-46.2,37.5-63.5-83.7-236.6c-989.6-1416.6-1004-4056.5-28.9-5553.9l158.7-245.2l-92.3-69.3c-334.7-253.9-764.6-297.2-1142.5-115.4c-213.5,103.9-591.5,484.7-750.1,753c-424.1,718.4-631.8,1609.9-600.1,2590.8C2124-9.9,2305.8,697,2663.6,1337.5c161.6,285.6,556.8,692.4,764.6,790.5c227.9,103.9,274.1,112.5,533.7,106.8C4175.4,2229,4236,2217.4,4397.5,2136.6z M6544.1,2142.4c239.5-112.5,620.3-499.1,793.4-805c233.7-415.4,406.8-920.4,507.8-1474.3c75-406.8,75-1410.8,0-1817.6c-150-816.5-441.4-1485.8-833.8-1907.1c-320.3-343.3-579.9-476-929-478.9c-836.7,0-1578.2,1044.4-1788.8,2518.7c-49.1,354.9-54.8,1087.7-11.5,1454.1C4435,896,5026.5,1937.6,5736.2,2194.3C5955.5,2272.2,6319,2249.2,6544.1,2142.4z\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPumpkinRed);\nexport default __webpack_public_path__ + \"static/media/pumpkin_red.bc604a1c.svg\";\nexport { ForwardRef as ReactComponent };","var _metadata, _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPumpkinBlue(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 1000 1000\",\n enableBackground: \"new 0 0 1000 1000\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _metadata || (_metadata = /*#__PURE__*/React.createElement(\"metadata\", null, \" Svg Vector Icons : http://www.onlinewebfonts.com/icon \")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.000000,511.000000) scale(0.100000,-0.100000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0000FF\",\n d: \"M5840.1,4981.4c-660.7-129.8-1119.4-539.5-1257.9-1125.2c-23.1-103.9-43.3-320.3-43.3-493.4c0-187.5-11.5-311.6-28.9-311.6c-46.2,0-259.7-204.8-302.9-291.4c-40.4-75-49.1-77.9-213.5-63.5c-178.9,17.3-533.7-46.2-663.6-118.3c-63.5-34.6-92.3-31.7-259.7,34.6c-167.3,66.4-230.8,75-522.2,75c-288.5,0-357.8-11.5-528-77.9C1024.8,2220.3,346.8,933.5,277.6-699.5c-63.5-1520.5,487.6-2963,1358.9-3554.5c346.2-236.6,761.7-340.4,1131-282.7c106.7,17.3,202,37.5,207.7,43.3c5.8,5.8,103.9-40.4,216.4-101c565.5-305.8,1174.3-251,1699.4,150l106.7,83.6l135.6-103.8c499.1-380.8,1119.4-429.9,1676.3-129.8c112.5,60.6,210.6,106.7,216.4,101c5.8-5.8,101-26,213.5-43.3c352-54.8,758.8,43.3,1093.5,259.7c983.8,640.5,1552.2,2331.2,1356,4024.7C9533.1,1074.9,8953.2,2128,8159.7,2526.1c-285.6,141.4-380.8,164.5-721.3,161.6c-271.2,0-346.2-11.5-504.9-72.1c-184.7-75-187.5-75-302.9-23.1c-152.9,69.2-478.9,121.2-646.3,106.7c-129.8-14.4-135.6-11.5-213.5,112.5c-40.4,69.2-115.4,147.1-164.5,176l-86.6,49.1v288.5c0,245.2,11.5,311.6,66.3,418.3c77.9,155.8,219.3,242.3,464.5,285.6c256.8,43.3,277,80.8,277,470.3C6327.7,4992.9,6255.6,5062.2,5840.1,4981.4z M5894.9,4493.8c0-17.3-23.1-37.5-49.1-46.2c-328.9-109.6-562.6-294.3-678-528c-60.6-118.3-66.4-181.8-75-626.1l-11.6-493.4l72.1-54.8c40.4-31.7,112.5-77.9,161.6-103.9c49.1-26,89.5-60.6,89.5-75c0-11.6-51.9-51.9-115.4-89.4c-63.5-34.6-152.9-95.2-199.1-132.7l-80.8-72.1l-204.8,135.6c-121.2,80.8-196.2,150-187.5,170.2c8.7,23.1,83.7,72.1,167.3,109.6c83.7,40.4,158.7,95.2,170.2,121.2c8.7,23.1,17.3,210.6,17.3,409.7c0,553.9,89.4,828,334.7,1044.4C5496.8,4430.3,5894.9,4586.1,5894.9,4493.8z M2773.2,2229c8.7-8.7-49-80.8-126.9-164.5c-369.3-392.4-657.8-969.4-830.9-1661.8c-132.7-530.9-147.1-678-147.1-1448.3c0-770.3,14.4-917.5,147.1-1448.3c135.6-548.2,328.9-986.7,608.8-1390.6l161.6-227.9l-167.3,17.3c-447.2,46.2-911.7,453-1234.8,1081.9c-830.9,1612.8-502,4120,654.9,5008.6c170.2,129.8,354.9,216.4,536.6,248.1C2499.1,2266.5,2744.4,2257.8,2773.2,2229z M7828,2188.6c629-239.5,1168.5-1093.5,1370.4-2166.7c109.6-582.8,103.8-1382-14.4-1956.1c-242.4-1197.3-903-2088.8-1601.3-2161l-167.3-17.3l161.6,227.9c516.4,741.5,770.3,1673.4,770.3,2839c0,741.5-89.4,1321.4-294.3,1904.2c-167.3,473.2-461.6,978.1-715.5,1226.2c-63.5,60.6-115.4,121.2-115.4,132.7C7222.1,2286.7,7623.1,2266.5,7828,2188.6z M4397.5,2136.6c103.9-51.9,210.6-118.3,236.6-147.1c43.3-46.2,37.5-63.5-83.7-236.6c-989.6-1416.6-1004-4056.5-28.9-5553.9l158.7-245.2l-92.3-69.3c-334.7-253.9-764.6-297.2-1142.5-115.4c-213.5,103.9-591.5,484.7-750.1,753c-424.1,718.4-631.8,1609.9-600.1,2590.8C2124-9.9,2305.8,697,2663.6,1337.5c161.6,285.6,556.8,692.4,764.6,790.5c227.9,103.9,274.1,112.5,533.7,106.8C4175.4,2229,4236,2217.4,4397.5,2136.6z M6544.1,2142.4c239.5-112.5,620.3-499.1,793.4-805c233.7-415.4,406.8-920.4,507.8-1474.3c75-406.8,75-1410.8,0-1817.6c-150-816.5-441.4-1485.8-833.8-1907.1c-320.3-343.3-579.9-476-929-478.9c-836.7,0-1578.2,1044.4-1788.8,2518.7c-49.1,354.9-54.8,1087.7-11.5,1454.1C4435,896,5026.5,1937.6,5736.2,2194.3C5955.5,2272.2,6319,2249.2,6544.1,2142.4z\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPumpkinBlue);\nexport default __webpack_public_path__ + \"static/media/pumpkin_blue.6ec5a9be.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgAdd(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAdd);\nexport default __webpack_public_path__ + \"static/media/add.197a2501.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ReactComponent as OnlineSVG } from \"../../assets/global/online.svg\";\r\nimport { ReactComponent as TransferSVG } from \"../../assets/global/transfer.svg\";\r\nimport { ReactComponent as OfflineSVG } from \"../../assets/global/offline.svg\";\r\nimport { ReactComponent as PendingSVG } from \"../../assets/global/pending.svg\";\r\nimport { ReactComponent as PumpkinOnlineSVG } from \"../../assets/global/pumpkin_green.svg\";\r\nimport { ReactComponent as PumpkinOfflineSVG } from \"../../assets/global/pumpkin_red.svg\";\r\nimport { ReactComponent as PumpkinPendingSVG } from \"../../assets/global/pumpkin_blue.svg\";\r\nimport { ReactComponent as TrendsSVG } from \"../../assets/global/trends.svg\";\r\nimport Banner from \"../global/Banner\";\r\nimport { Fetch } from \"../../services/DataLoader\";\r\nimport PopupMessage from \"../global/PopupMessage\";\r\nimport BannerMessage from \"../global/BannerMessage\";\r\nimport ChartPie from \"../global/ChartPie\";\r\nimport ChartLine from \"../global/ChartLine\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport ChartBar from \"../global/ChartBar\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport ToggleButton from \"../global/ToggleButton\";\r\nimport { SERVER_LIST } from \"../../constants/Servers\";\r\nimport DataClassification from \"../global/DataClassification\";\r\n\r\n// no-change\r\n\r\nconst Directory = (props) => {\r\n const TITLE = \"DDO Server Population and Demographics\";\r\n\r\n const EVENT_THEME = isSpookyTime();\r\n\r\n function isSpookyTime() {\r\n let dt = new Date();\r\n if (dt.getMonth() === 9 && dt.getDate() >= 4) {\r\n return \"revels\";\r\n }\r\n return \"\";\r\n }\r\n\r\n const PENDING =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const ONLINE =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const OFFLINE =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n function GetSVG(world) {\r\n if (world === undefined || world === null) return PENDING;\r\n if (!world.hasOwnProperty(\"Status\")) return PENDING;\r\n switch (world.Status) {\r\n case 0:\r\n return OFFLINE;\r\n case 1:\r\n return ONLINE;\r\n default:\r\n return PENDING;\r\n }\r\n }\r\n\r\n function readAbout(r, callback) {\r\n switch (r) {\r\n case \"filter banks characters\":\r\n Log(\"Read about bank characters\", \"Servers\");\r\n setPopupMessage({\r\n title: \"Bank Characters\",\r\n message: (\r\n \r\n We attempt to filter out bank characters by not including:\r\n
    \r\n
  • Characters that haven't been actively running quests
  • \r\n
  • \r\n Characters that aren't making observable level progression\r\n
  • \r\n
  • Characters that sit in a single area indefinitely
  • \r\n
\r\n

\r\n To see the distribution of what we consider \"bank characters,\"{\" \"}\r\n callback()}>\r\n click here\r\n \r\n .\r\n

\r\n
\r\n ),\r\n icon: \"info\",\r\n fullscreen: true,\r\n });\r\n break;\r\n case \"primary class only\":\r\n Log(\"Read about primary class\", \"Servers\");\r\n setPopupMessage({\r\n title: \"Primary Class Only\",\r\n message: (\r\n \r\n This report only counts a character's primary class. For example,\r\n a character with 18 levels of Wizard and 2 levels of Rogue will\r\n count towards Wizard.\r\n \r\n ),\r\n icon: \"info\",\r\n fullscreen: true,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n function GetServerDescription(name) {\r\n if (uniqueData == null) {\r\n return (\r\n \r\n Loading...\r\n

\r\n );\r\n }\r\n return uniqueData\r\n .filter((server) => server.Name === name)\r\n .map((server, i) => (\r\n \r\n {`${server.TotalCharacters} unique characters`}\r\n
\r\n {`${server.TotalGuilds} unique guilds`}\r\n

\r\n ));\r\n }\r\n\r\n const [uniqueData, setUniqueData] = React.useState(null);\r\n const [serverStatusData, set_serverStatusData] = React.useState(null);\r\n\r\n const [serverDistributionData, setServerDistributionData] =\r\n React.useState(null);\r\n const [hourlyDistributionData, setHourlyDistributionData] =\r\n React.useState(null);\r\n const [dailyDistributionData, setDailyDistributionData] =\r\n React.useState(null);\r\n const [serverDistributionType, setServerDistributionType] =\r\n React.useState(\"population\");\r\n const [hourlyDistributionType, setHourlyDistributionType] =\r\n React.useState(\"population\");\r\n const [dailyDistributionType, setDailyDistributionType] =\r\n React.useState(\"population\");\r\n const [levelDistributionDataBanks, setLevelDistributionDataBanks] =\r\n React.useState(false);\r\n const [classDistributionDataBanks, setClassDistributionDataBanks] =\r\n React.useState(false);\r\n const [raceDistributionDataBanks, setRaceDistributionDataBanks] =\r\n React.useState(false);\r\n\r\n const [dailyDistributionDisplay, setDailyDistributionDisplay] =\r\n React.useState(\"grouped\");\r\n const [classDistributionDisplay, setClassDistributionDisplay] =\r\n React.useState(\"grouped\");\r\n\r\n const [timeNowEvent, setTimeNowEvent] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n setTimeNowEvent([\r\n {\r\n id: 0,\r\n date: (((new Date().getUTCHours() - 5) % 24) + 24) % 24,\r\n type: \"timeevent\",\r\n message: \"Current Time EST\",\r\n color: \"#FF0000\",\r\n width: 4,\r\n },\r\n ]);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n Fetch(\r\n `https://api.ddoaudit.com/population/serverdistributionmonth${\r\n serverDistributionType === \"population\" ? \"\" : \"_groups\"\r\n }`,\r\n 5000\r\n )\r\n .then((val) => {\r\n setServerDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n }, [serverDistributionType]);\r\n\r\n React.useEffect(() => {\r\n Fetch(\r\n `https://api.ddoaudit.com/population/hourlydistribution${\r\n hourlyDistributionType === \"population\" ? \"\" : \"_groups\"\r\n }`,\r\n 5000\r\n )\r\n .then((val) => {\r\n setHourlyDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n }, [hourlyDistributionType]);\r\n\r\n React.useEffect(() => {\r\n Fetch(\r\n `https://api.ddoaudit.com/population/dailydistribution${\r\n dailyDistributionType === \"population\" ? \"\" : \"_groups\"\r\n }`,\r\n 5000\r\n )\r\n .then((val) => {\r\n setDailyDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n }, [dailyDistributionType]);\r\n\r\n const [levelDistributionData, setLevelDistributionData] =\r\n React.useState(null);\r\n const [classDistributionData, setClassDistributionData] =\r\n React.useState(null);\r\n const [raceDistributionData, setRaceDistributionData] = React.useState(null);\r\n function refreshServerStatus() {\r\n Fetch(\"https://api.ddoaudit.com/gamestatus/serverstatus\", 5000)\r\n .then((val) => {\r\n setPopupMessage(null);\r\n set_serverStatusData(val);\r\n })\r\n .catch(() => {\r\n setPopupMessage({\r\n title: \"Can't Determine Server Status\",\r\n message:\r\n \"We weren't able to check on the servers. You can refresh the page or report the issue.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: \"Could not fetch ServerStatus. Timeout\",\r\n });\r\n });\r\n }\r\n React.useEffect(() => {\r\n Fetch(\"https://api.ddoaudit.com/population/uniquedata\", 5000)\r\n .then((val) => {\r\n setUniqueData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n Fetch(\"https://api.ddoaudit.com/population/serverdistributionmonth\", 5000)\r\n .then((val) => {\r\n setServerDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n Fetch(\"https://api.ddoaudit.com/population/hourlydistribution\", 5000)\r\n .then((val) => {\r\n setHourlyDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n Fetch(\"https://api.ddoaudit.com/population/dailydistribution\", 5000)\r\n .then((val) => {\r\n setDailyDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n Fetch(\"https://api.ddoaudit.com/demographics/leveldistribution\", 5000)\r\n .then((val) => {\r\n setLevelDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n Fetch(\"https://api.ddoaudit.com/demographics/classdistribution\", 5000)\r\n .then((val) => {\r\n setClassDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n Fetch(\"https://api.ddoaudit.com/demographics/racedistribution\", 5000)\r\n .then((val) => {\r\n setRaceDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n\r\n refreshServerStatus();\r\n const interval = setInterval(() => refreshServerStatus(), 60000);\r\n return () => clearInterval(interval);\r\n }, []);\r\n\r\n function loadLevelDistributionBanks() {\r\n Fetch(\"https://api.ddoaudit.com/demographics/leveldistribution_banks\", 3000)\r\n .then((val) => {\r\n setLevelDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n setLevelDistributionDataBanks(true);\r\n }\r\n\r\n function loadClassDistributionBanks() {\r\n Fetch(\"https://api.ddoaudit.com/demographics/classdistribution_banks\", 3000)\r\n .then((val) => {\r\n setClassDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n setClassDistributionDataBanks(true);\r\n }\r\n\r\n function loadRaceDistributionBanks() {\r\n Fetch(\"https://api.ddoaudit.com/demographics/racedistribution_banks\", 3000)\r\n .then((val) => {\r\n setRaceDistributionData(val);\r\n })\r\n .catch((err) => {\r\n dataFailedToLoad();\r\n });\r\n setRaceDistributionDataBanks(true);\r\n }\r\n\r\n function dataFailedToLoad() {\r\n setPopupMessage({\r\n title: \"Some data failed to load\",\r\n message:\r\n \"Some of the reports on this page may have failed to load. Please refresh the page. If the issue continues, report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: \"Failed to fetch data.\",\r\n });\r\n }\r\n\r\n // Popup message\r\n var [popupMessage, setPopupMessage] = React.useState(null);\r\n return (\r\n
\r\n \r\n {TITLE}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setPopupMessage(null);\r\n }}\r\n />\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n {SERVER_LIST.map((name, i) => (\r\n \r\n
\r\n {serverStatusData\r\n ? GetSVG(\r\n serverStatusData.Worlds.filter(\r\n (server) => server.Name === name\r\n )[0]\r\n )\r\n : GetSVG()}\r\n

{name}

\r\n
\r\n {GetServerDescription(name)}\r\n \r\n ))}\r\n
\r\n \r\n Unique character counts are based on the last quarter.\r\n

\r\n
\r\n \r\n \r\n {`Which server ${\r\n serverDistributionType === \"population\"\r\n ? \"is the most populated\"\r\n : \"has the most LFMs\"\r\n }?`}\r\n {\" \"}\r\n {`${\r\n serverDistributionType === \"population\" ? \"Population\" : \"LFM\"\r\n } distribution across the servers over the\r\n last 30 days.`}\r\n \r\n }\r\n >\r\n {\r\n if (serverDistributionType === \"groups\") {\r\n setServerDistributionType(\"population\");\r\n Log(\"Switched between population/LFMs\", \"Server pie chart\");\r\n }\r\n }}\r\n doB={() => {\r\n if (serverDistributionType === \"population\") {\r\n setServerDistributionType(\"groups\");\r\n Log(\"Switched between population/LFMs\", \"Server pie chart\");\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {`Which server ${\r\n hourlyDistributionType === \"population\"\r\n ? \"is the most active for my time zone\"\r\n : \"has the most LFMs for my time zone\"\r\n }?`}\r\n {\" \"}\r\n {`Average ${\r\n hourlyDistributionType === \"population\"\r\n ? \"Population\"\r\n : \"LFM count\"\r\n } for each hour of the day.`}\r\n \r\n }\r\n >\r\n {\r\n if (hourlyDistributionType === \"groups\") {\r\n setHourlyDistributionType(\"population\");\r\n Log(\r\n \"Switched between population/LFMs\",\r\n \"Server hourly distribution\"\r\n );\r\n }\r\n }}\r\n doB={() => {\r\n if (hourlyDistributionType === \"population\") {\r\n setHourlyDistributionType(\"groups\");\r\n Log(\r\n \"Switched between population/LFMs\",\r\n \"Server hourly distribution\"\r\n );\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {`Which days ${\r\n dailyDistributionType === \"population\"\r\n ? \"are my server most populated\"\r\n : \"have the most LFMs posted\"\r\n }?`}\r\n {\" \"}\r\n {`Average ${\r\n dailyDistributionType === \"population\"\r\n ? \"Population\"\r\n : \"LFM count\"\r\n } for each day of the week.`}\r\n \r\n }\r\n >\r\n \r\n {\r\n if (dailyDistributionType === \"groups\") {\r\n setDailyDistributionType(\"population\");\r\n Log(\r\n \"Switched between population/LFMs\",\r\n \"Server daily distribution\"\r\n );\r\n }\r\n }}\r\n doB={() => {\r\n if (dailyDistributionType === \"population\") {\r\n setDailyDistributionType(\"groups\");\r\n Log(\r\n \"Switched between population/LFMs\",\r\n \"Server daily distribution\"\r\n );\r\n }\r\n }}\r\n />\r\n {\r\n setDailyDistributionDisplay(\"grouped\");\r\n }}\r\n doB={() => {\r\n setDailyDistributionDisplay(\"stacked\");\r\n }}\r\n />\r\n
\r\n \r\n \r\n \r\n Average percentage of the population at each level.{\" \"}\r\n \r\n {levelDistributionDataBanks\r\n ? \"Showing bank characters\"\r\n : \"Bank characters were filtered out of this report\"}{\" \"}\r\n \r\n readAbout(\r\n \"filter banks characters\",\r\n loadLevelDistributionBanks\r\n )\r\n }\r\n >\r\n (read more)\r\n \r\n \r\n . Normalized for server population.\r\n \r\n }\r\n >\r\n \r\n \r\n \r\n Average percentage of the population for each class.{\" \"}\r\n \r\n Primary class only{\" \"}\r\n readAbout(\"primary class only\")}\r\n >\r\n (read more)\r\n \r\n \r\n .{\" \"}\r\n \r\n {classDistributionDataBanks\r\n ? \"Showing bank characters\"\r\n : \"Bank characters were filtered out of this report\"}{\" \"}\r\n \r\n readAbout(\r\n \"filter banks characters\",\r\n loadClassDistributionBanks\r\n )\r\n }\r\n >\r\n (read more)\r\n \r\n \r\n . Normalized for server population.\r\n \r\n }\r\n >\r\n {\r\n setClassDistributionDisplay(\"grouped\");\r\n }}\r\n doB={() => {\r\n setClassDistributionDisplay(\"stacked\");\r\n }}\r\n />\r\n \r\n \r\n \r\n Average percentage of the population for each race.{\" \"}\r\n \r\n {raceDistributionDataBanks\r\n ? \"Showing bank characters\"\r\n : \"Bank characters were filtered out of this report\"}{\" \"}\r\n \r\n readAbout(\r\n \"filter banks characters\",\r\n loadRaceDistributionBanks\r\n )\r\n }\r\n >\r\n (read more)\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

Trends

\r\n
\r\n

\r\n Long-term trends, daily minimum and maximum population, and\r\n important game events.\r\n

\r\n \r\n \r\n
\r\n \r\n

Server Transfers

\r\n
\r\n

\r\n Which servers are gaining characters and which servers are\r\n losing them.\r\n

\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Directory;\r\n","import React from \"react\";\r\n\r\nconst UniqueCountsSubtitle = (props) => {\r\n function FormatWithCommas(x) {\r\n return x.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n }\r\n\r\n function GetUniquePlayers(noformat) {\r\n let playercount = 0;\r\n props.data.forEach((server) => {\r\n if (server.Name === props.server) {\r\n playercount = server.TotalCharacters;\r\n }\r\n });\r\n if (noformat) return playercount;\r\n return FormatWithCommas(playercount.toString());\r\n }\r\n\r\n function GetUniqueActivePlayers(noformat) {\r\n let playercount = 0;\r\n props.data.forEach((server) => {\r\n if (server.Name === props.server) {\r\n playercount = server.ActiveCharacters;\r\n }\r\n });\r\n if (noformat) return playercount;\r\n return FormatWithCommas(playercount.toString());\r\n }\r\n\r\n function GetUniqueGuilds() {\r\n let guildcount = 0;\r\n props.data.forEach((server) => {\r\n if (server.Name === props.server) {\r\n guildcount = server.TotalGuilds;\r\n }\r\n });\r\n return FormatWithCommas(guildcount.toString());\r\n }\r\n\r\n return (\r\n
\r\n

\r\n We've seen{\" \"}\r\n {GetUniquePlayers()} unique\r\n characters and {GetUniqueGuilds()}{\" \"}\r\n guilds in the last quarter on {props.server}. Of those characters, we\r\n consider{\" \"}\r\n \r\n {GetUniqueActivePlayers()} (\r\n {Math.round(\r\n (GetUniqueActivePlayers(true) / GetUniquePlayers(true)) * 100\r\n )}\r\n %)\r\n {\" \"}\r\n to be active{\" \"}\r\n props.readAbout(\"active characters\")}\r\n >\r\n (read more)\r\n \r\n .\r\n

\r\n
\r\n );\r\n};\r\n\r\nexport default UniqueCountsSubtitle;\r\n","import React from \"react\";\r\n\r\nconst CurrentCountsSubtitle = (props) => {\r\n function FormatWithCommas(x) {\r\n return x.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n }\r\n\r\n function getLfmCount(noformat) {\r\n let lfmcount = 0;\r\n props.data.forEach((server) => {\r\n if (server.ServerName === props.server) {\r\n lfmcount = server.LfmCount;\r\n }\r\n });\r\n if (noformat) return lfmcount;\r\n return FormatWithCommas(lfmcount.toString());\r\n }\r\n\r\n function getPopulation() {\r\n return props.serverData?.Players?.length || \"...\";\r\n }\r\n\r\n function getPlayersInGroupCount() {\r\n return (\r\n props.serverData?.Players?.filter((player) => player.InParty === 1)\r\n ?.length || \"...\"\r\n );\r\n }\r\n\r\n function getPlayersInQuestsCount() {\r\n return props.serverData?.Players?.filter(\r\n (player) => player?.Location?.IsPublicSpace === 0\r\n )?.length;\r\n }\r\n\r\n function getAnonymousPlayersCount() {\r\n return props.serverData?.Players?.filter(\r\n (player) => player?.Name === \"Anonymous\"\r\n )?.length;\r\n }\r\n\r\n function getTransferPlayersCount() {\r\n return props.serverData?.Players?.filter(\r\n (player) => player?.HomeServer !== props.server\r\n )?.length;\r\n }\r\n\r\n // function getTransferList() {\r\n // let val = [];\r\n // props.serverData?.Players?.forEach((player) => {\r\n // if (player.HomeServer !== props.server) {\r\n // let found = false;\r\n // val.forEach((v) => {\r\n // if (v.server === player.HomeServer) {\r\n // v.count++;\r\n // found = true;\r\n // }\r\n // });\r\n // if (!found) {\r\n // val.push({ server: player.HomeServer, count: 1 });\r\n // }\r\n // }\r\n // });\r\n // return val;\r\n // }\r\n\r\n function getUniqueGroupCount() {\r\n let groupIds = [];\r\n props.serverData?.Players?.forEach((player) => {\r\n if (!groupIds.includes(player.GroupId)) {\r\n groupIds.push(player.GroupId);\r\n }\r\n });\r\n return groupIds.length;\r\n }\r\n\r\n function getRelativeGroupCount() {\r\n let data = props.hourlyLfmDistribution?.filter(\r\n (series) => series.id === props.server\r\n )?.[0]?.data;\r\n let currentHour = (((new Date().getUTCHours() - 5) % 24) + 24) % 24;\r\n let averageForThisHour = data[currentHour]?.y;\r\n let current = getLfmCount();\r\n\r\n // Much fewer than average:\r\n if (current < 0.6 * averageForThisHour) {\r\n return \"much fewer than average\";\r\n } else if (current < 0.85 * averageForThisHour) {\r\n return \"fewer than average\";\r\n } else if (current > 1.15 * averageForThisHour) {\r\n return \"more than average\";\r\n } else if (current > 1.4 * averageForThisHour) {\r\n return \"much more than average\";\r\n } else {\r\n return \"about average\";\r\n }\r\n }\r\n\r\n return (\r\n
\r\n There are currently{\" \"}\r\n {getPopulation()} players\r\n online:\r\n
    \r\n
  • \r\n \r\n {getPlayersInGroupCount()} (\r\n {Math.round((100 * getPlayersInGroupCount()) / getPopulation())}\r\n %)\r\n {\" \"}\r\n are in groups\r\n
  • \r\n
  • \r\n \r\n {getPlayersInQuestsCount()} (\r\n {Math.round((100 * getPlayersInQuestsCount()) / getPopulation())}\r\n %)\r\n {\" \"}\r\n are in quests\r\n
  • \r\n
  • \r\n \r\n {getAnonymousPlayersCount()} (\r\n {Math.round((100 * getAnonymousPlayersCount()) / getPopulation())}\r\n %)\r\n {\" \"}\r\n {getAnonymousPlayersCount() === 1 ? \"is\" : \"are\"} anonymous\r\n
  • \r\n
  • \r\n \r\n {getTransferPlayersCount()} (\r\n {Math.round((100 * getTransferPlayersCount()) / getPopulation())}\r\n %)\r\n {\" \"}\r\n transferred from another server\r\n {/*
      \r\n {getTransferList().map((item) => (\r\n
    • \r\n {item.count} from {item.server}\r\n
    • \r\n ))}\r\n
    */}\r\n
  • \r\n
\r\n There {getLfmCount() == 1 ? \"is\" : \"are\"} currently{\" \"}\r\n {getLfmCount()} LFM\r\n {getLfmCount() == 1 ? \"\" : \"s\"} posted:\r\n
    \r\n
  • \r\n That's {getRelativeGroupCount()}{\" \"}\r\n for this time of day\r\n
  • \r\n
  • \r\n There are a total of{\" \"}\r\n {getUniqueGroupCount()} groups\r\n (including groups not posted in the LFM panel)\r\n
  • \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CurrentCountsSubtitle;\r\n","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { Link, useLocation } from \"react-router-dom\";\r\nimport Banner from \"../global/Banner\";\r\nimport { Fetch, Get, Post, VerifyPlayerData } from \"../../services/DataLoader\";\r\nimport PopupMessage from \"../global/PopupMessage\";\r\nimport BannerMessage from \"../global/BannerMessage\";\r\nimport UniqueCountsSubtitle from \"./UniqueCountsSubtitle\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport ChartLine from \"../global/ChartLine\";\r\nimport ChartBar from \"../global/ChartBar\";\r\nimport CurrentCountsSubtitle from \"./CurrentCountsSubtitle\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport { SERVER_LIST } from \"../../constants/Servers\";\r\nimport DataClassification from \"../global/DataClassification\";\r\nimport moment from \"moment\";\r\nimport ToggleButton from \"../global/ToggleButton\";\r\n\r\nconst ServersSpecific = () => {\r\n const TITLE = \"Population and Character Demographics\";\r\n const COLORS = [\r\n \"hsl(205, 70%, 41%)\",\r\n \"hsl(28, 100%, 53%)\",\r\n \"hsl(120, 57%, 40%)\",\r\n \"hsl(360, 69%, 50%)\",\r\n \"hsl(271, 39%, 57%)\",\r\n \"hsl(10, 30%, 42%)\",\r\n \"hsl(318, 66%, 68%)\",\r\n \"hsl(0, 0%, 50%)\",\r\n \"hsl(60, 70%, 44%)\",\r\n ];\r\n const GRAY = \"hsl(0, 0%, 80%)\";\r\n const SERVERS = [\r\n \"Argonnessen\",\r\n \"Cannith\",\r\n \"Ghallanda\",\r\n \"Khyber\",\r\n \"Orien\",\r\n \"Sarlona\",\r\n \"Thelanis\",\r\n \"Wayfinder\",\r\n \"Hardcore\",\r\n ];\r\n const DAYS = [\r\n \"Sunday\",\r\n \"Monday\",\r\n \"Tuesday\",\r\n \"Wednesday\",\r\n \"Thursday\",\r\n \"Friday\",\r\n \"Saturday\",\r\n ];\r\n\r\n function getBreadcrumbs(servername) {\r\n // prettier-ignore\r\n return {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"BreadcrumbList\",\r\n \"itemListElement\": [\r\n {\r\n \"@type\": \"ListItem\",\r\n position: 1,\r\n name: \"Servers\",\r\n item: \"https://www.ddoaudit.com/servers\",\r\n },\r\n {\r\n \"@type\": \"ListItem\",\r\n position: 2,\r\n name: `${servername}`,\r\n },\r\n ],\r\n };\r\n }\r\n\r\n const [population1Year, setPopulation1Year] = React.useState(null);\r\n const [population1Quarter, setPopulation1Quarter] = React.useState(null);\r\n\r\n const [quarterlyData, setQuarterlyData] = React.useState(null);\r\n const [byHourType, setByHourType] = React.useState(\"population\");\r\n const [byDayType, setByDayType] = React.useState(\"population\");\r\n const [annualType, setAnnualType] = React.useState(\"population\");\r\n const [quarterlyType, setQuarterlyType] = React.useState(\"population\");\r\n\r\n const [dailyLfmDistribution, setDailyLfmDistribution] = React.useState(null);\r\n const [hourlyLfmDistribution, setHourlyLfmDistribution] =\r\n React.useState(null);\r\n\r\n function readAbout(r, callback) {\r\n switch (r) {\r\n case \"active characters\":\r\n Log(\"Read about active characters\", `Servers ${currentServer}`);\r\n setPopupMessage({\r\n title: \"Active Characters\",\r\n message: (\r\n \r\n We consider a character \"active\" when they meet the following\r\n criteria:\r\n
    \r\n
  • \r\n A character has moved areas (public or private) within 2 days\r\n of last being online\r\n
  • \r\n
  • \r\n A character has run a quest (solo or in a group) within 7 days\r\n of last being online\r\n
  • \r\n
  • \r\n A character has increased in level within 20 days of last\r\n being online (level 32 characters are excluded)\r\n
  • \r\n
\r\n \r\n This is an art, not a science. If you have suggestions for\r\n improving this algorithm,{\" \"}\r\n please let me know.\r\n \r\n
\r\n ),\r\n icon: \"info\",\r\n fullscreen: true,\r\n });\r\n break;\r\n case \"filter banks characters\":\r\n setPopupMessage({\r\n title: \"Bank Characters\",\r\n message: (\r\n \r\n We attempt to filter out bank characters by not including:\r\n
    \r\n
  • Characters that haven't been actively running quests
  • \r\n
  • \r\n Characters that aren't making observable level progression\r\n
  • \r\n
  • Characters that sit in a single area indefinitely
  • \r\n
\r\n {callback && (\r\n

\r\n To see the distribution of what we consider \"bank characters,\"{\" \"}\r\n callback()}>\r\n click here\r\n \r\n .\r\n

\r\n )}\r\n
\r\n ),\r\n icon: \"info\",\r\n fullscreen: true,\r\n });\r\n break;\r\n case \"primary class only\":\r\n setPopupMessage({\r\n title: \"Primary Class Only\",\r\n message: (\r\n \r\n This report only counts a character's primary class. For example,\r\n a character with 18 levels of Wizard and 2 levels of Rogue will\r\n count towards Wizard.\r\n \r\n ),\r\n icon: \"info\",\r\n fullscreen: true,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n function getServerNamePossessive() {\r\n return `${currentServer}${currentServer === \"Thelanis\" ? \"'\" : \"'s\"}`;\r\n }\r\n\r\n const location = useLocation().pathname.substring(\r\n useLocation().pathname.lastIndexOf(\"/\") + 1\r\n );\r\n var [currentServer, setCurrentServer] = React.useState(null);\r\n React.useEffect(() => {\r\n let serverName =\r\n location.substring(0, 1).toUpperCase() + location.substring(1);\r\n if (SERVER_LIST.includes(serverName)) {\r\n // Good server\r\n setCurrentServer(serverName);\r\n\r\n // Potential race condition!\r\n setUniqueData(null);\r\n setQuarterlyData(null);\r\n setByHourChartData(null);\r\n setByDayChartData(null);\r\n\r\n fetchRange(serverName);\r\n } else {\r\n // Bad server\r\n setCurrentServer(SERVER_LIST[0]); // Just default to the first server in the good list\r\n }\r\n }, [window.location.pathname]);\r\n\r\n const [markedEvents, setMarkedEvents] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n setMarkedEvents([\r\n {\r\n id: 0,\r\n date: (((new Date().getUTCHours() - 5) % 24) + 24) % 24,\r\n type: \"timeevent\",\r\n message: \"Current Time EST\",\r\n color: \"#FF0000\",\r\n width: 4,\r\n },\r\n {\r\n id: 0,\r\n date: moment().hour(),\r\n type: \"timeevent\",\r\n message: \"Current Time Local\",\r\n color: \"#FF0000\",\r\n width: 4,\r\n },\r\n ]);\r\n }, []);\r\n\r\n const [serverStatus, setServerStatus] = React.useState(null);\r\n const [serverData, setServerData] = React.useState(null);\r\n const [uniqueData, setUniqueData] = React.useState(null);\r\n const [currentData, setCurrentData] = React.useState(null);\r\n function refreshServerStatus() {\r\n if (currentServer === null) return;\r\n Fetch(\"https://api.ddoaudit.com/gamestatus/serverstatus\", 5000)\r\n .then((val) => {\r\n setPopupMessage(null);\r\n if (\r\n val?.Worlds?.filter((world) => world.Name === currentServer)?.[0]\r\n ?.Status === 1\r\n ) {\r\n setServerStatus(true);\r\n Fetch(\r\n `https://api.ddoaudit.com/players/${currentServer.toLowerCase()}`,\r\n 5000\r\n ).then((serverVal) => {\r\n setServerData(serverVal);\r\n });\r\n } else {\r\n setServerStatus(false);\r\n setServerData(null);\r\n }\r\n })\r\n .catch(() => {\r\n setPopupMessage({\r\n title: \"Can't Determine Server Status\",\r\n message:\r\n \"We weren't able to check on the servers. You can refresh the page or report the issue.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: \"Could not fetch ServerStatus. Timeout\",\r\n });\r\n });\r\n }\r\n\r\n function fetchRange(server) {\r\n Post(\r\n \"https://api.ddoaudit.com/population/range\",\r\n {\r\n server: server,\r\n startDate: moment()\r\n .startOf(\"day\")\r\n .subtract(90, \"days\")\r\n .format(\"YYYY-MM-DD hh:mm:ss.00000\"),\r\n endDate: moment().startOf(\"day\").format(\"YYYY-MM-DD hh:mm:ss.00000\"),\r\n },\r\n 5000\r\n )\r\n .then((val) => {\r\n setQuarterlyData(val);\r\n })\r\n .catch(() => {\r\n setPopupMessage({\r\n title: \"Couldn't Fetch Unique Data\",\r\n message:\r\n \"We weren't able to find information on this server. You can refresh the page or report the issue.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: \"Could not fetch unique data. Timeout\",\r\n });\r\n });\r\n }\r\n\r\n function fetchUniqueData() {\r\n Fetch(\"https://api.ddoaudit.com/population/uniquedata\", 5000)\r\n .then((val) => {\r\n setUniqueData(val);\r\n })\r\n .catch(() => {\r\n setPopupMessage({\r\n title: \"Couldn't Fetch Unique Data\",\r\n message:\r\n \"We weren't able to find information on this server. You can refresh the page or report the issue.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: \"Could not fetch unique data. Timeout\",\r\n });\r\n });\r\n }\r\n\r\n function fetchCurrentData() {\r\n Fetch(\"https://api.ddoaudit.com/gamestatus/populationoverview\", 5000)\r\n .then((val) => {\r\n setCurrentData(val);\r\n })\r\n .catch(() => {\r\n setPopupMessage({\r\n title: \"Couldn't Fetch Current Data\",\r\n message:\r\n \"We weren't able to find information on this server. You can refresh the page or report the issue.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: \"Could not fetch unique data. Timeout\",\r\n });\r\n });\r\n }\r\n\r\n function fetchPopulationData() {\r\n Fetch(\r\n \"https://api.ddoaudit.com/population/dailydistribution_groups\",\r\n 5000\r\n ).then((val) => {\r\n setDailyLfmDistribution(val);\r\n });\r\n\r\n Fetch(\r\n \"https://api.ddoaudit.com/population/hourlydistribution_groups\",\r\n 5000\r\n ).then((val) => {\r\n setHourlyLfmDistribution(val);\r\n });\r\n }\r\n\r\n React.useEffect(() => {\r\n const interval = setInterval(() => refreshServerStatus, 60000);\r\n if (currentServer !== null) {\r\n refreshServerStatus();\r\n fetchUniqueData();\r\n fetchCurrentData();\r\n fetchPopulationData();\r\n }\r\n return () => clearInterval(interval);\r\n }, [currentServer]);\r\n\r\n // Popup message\r\n var [popupMessage, setPopupMessage] = React.useState(null);\r\n\r\n function getServerNamePossessive() {\r\n return `${currentServer}${currentServer === \"Thelanis\" ? \"'\" : \"'s\"}`;\r\n }\r\n\r\n const [byHourChartData, setByHourChartData] = React.useState(null);\r\n React.useEffect(() => {\r\n function generateByHourChart() {\r\n if (!quarterlyData) return;\r\n const totalPerHourQuarter = Array(24).fill(0);\r\n const dataPointsPerHourQuarter = Array(24).fill(0);\r\n const totalPerHourWeek = Array(24).fill(0);\r\n const dataPointsPerHourWeek = Array(24).fill(0);\r\n const playercountField = `${currentServer.toLowerCase()}_playercount`;\r\n const lfmcountField = `${currentServer.toLowerCase()}_lfmcount`;\r\n quarterlyData.forEach(\r\n ({\r\n datetime,\r\n [playercountField]: playerCount,\r\n [lfmcountField]: lfmCount,\r\n }) => {\r\n const relevantData =\r\n byHourType === \"population\" ? playerCount : lfmCount;\r\n const hour = moment(datetime).hour();\r\n\r\n // quarter\r\n totalPerHourQuarter[hour] += relevantData;\r\n if (relevantData) dataPointsPerHourQuarter[hour]++;\r\n\r\n // week\r\n if (moment().diff(moment(datetime)) < 1000 * 60 * 60 * 24 * 7) {\r\n totalPerHourWeek[hour] += relevantData;\r\n if (relevantData) dataPointsPerHourWeek[hour]++;\r\n }\r\n }\r\n );\r\n\r\n const decimalCount = byHourType === \"population\" ? 0 : 2;\r\n\r\n const hourlyAveragesQuarter = totalPerHourQuarter.map(\r\n (total, i) =>\r\n Math.round(\r\n (total / dataPointsPerHourQuarter[i]) * Math.pow(10, decimalCount)\r\n ) / Math.pow(10, decimalCount)\r\n );\r\n const hourlyAveragesWeek = totalPerHourWeek.map(\r\n (total, i) =>\r\n Math.round(\r\n (total / dataPointsPerHourWeek[i]) * Math.pow(10, decimalCount)\r\n ) / Math.pow(10, decimalCount)\r\n );\r\n\r\n const chartData = [\r\n {\r\n id: \"Week\",\r\n color: GRAY,\r\n data: hourlyAveragesWeek.map((average, hour) => ({\r\n x: hour,\r\n y: average,\r\n })),\r\n },\r\n {\r\n id: \"Quarter\",\r\n color: COLORS[SERVERS.indexOf(currentServer)],\r\n data: hourlyAveragesQuarter.map((average, hour) => ({\r\n x: hour,\r\n y: average,\r\n })),\r\n },\r\n ];\r\n\r\n setByHourChartData(chartData);\r\n }\r\n\r\n generateByHourChart();\r\n }, [quarterlyData, byHourType]);\r\n\r\n React.useEffect(() => {\r\n Fetch(\r\n `https://api.ddoaudit.com/population/year${\r\n annualType === \"population\" ? \"\" : \"_groups\"\r\n }`,\r\n 5000\r\n ).then((val) => {\r\n setPopulation1Year(val);\r\n });\r\n }, [annualType]);\r\n\r\n React.useEffect(() => {\r\n Fetch(\r\n `https://api.ddoaudit.com/population/quarter${\r\n quarterlyType === \"population\" ? \"\" : \"_groups\"\r\n }`,\r\n 5000\r\n ).then((val) => {\r\n setPopulation1Quarter(val);\r\n });\r\n }, [quarterlyType]);\r\n\r\n const [byDayChartData, setByDayChartData] = React.useState(null);\r\n React.useEffect(() => {\r\n function generateByDayChart() {\r\n if (!quarterlyData) return;\r\n const totalPerDayQuarter = Array(7).fill(0);\r\n const dataPointsPerDayQuarter = Array(7).fill(0);\r\n const totalPerDayWeek = Array(7).fill(0);\r\n const dataPointsPerDayWeek = Array(7).fill(0);\r\n const playercountField = `${currentServer.toLowerCase()}_playercount`;\r\n const lfmcountField = `${currentServer.toLowerCase()}_lfmcount`;\r\n quarterlyData.forEach(\r\n ({\r\n datetime,\r\n [playercountField]: playerCount,\r\n [lfmcountField]: lfmCount,\r\n }) => {\r\n const relevantData =\r\n byDayType === \"population\" ? playerCount : lfmCount;\r\n const day = moment(datetime).day();\r\n\r\n // quarter\r\n totalPerDayQuarter[day] += relevantData;\r\n if (relevantData) dataPointsPerDayQuarter[day]++;\r\n\r\n // week\r\n if (moment().diff(moment(datetime)) < 1000 * 60 * 60 * 24 * 7) {\r\n totalPerDayWeek[day] += relevantData;\r\n if (relevantData) dataPointsPerDayWeek[day]++;\r\n }\r\n }\r\n );\r\n\r\n const decimalCount = byDayType === \"population\" ? 0 : 2;\r\n\r\n const dailyAveragesQuarter = totalPerDayQuarter.map(\r\n (total, i) =>\r\n Math.round(\r\n (total / dataPointsPerDayQuarter[i]) * Math.pow(10, decimalCount)\r\n ) / Math.pow(10, decimalCount)\r\n );\r\n const dailyAveragesWeek = totalPerDayWeek.map(\r\n (total, i) =>\r\n Math.round(\r\n (total / dataPointsPerDayWeek[i]) * Math.pow(10, decimalCount)\r\n ) / Math.pow(10, decimalCount)\r\n );\r\n\r\n const chartData = DAYS.map((day, index) => ({\r\n Day: day,\r\n Quarter: dailyAveragesQuarter[index],\r\n QuarterColor: COLORS[SERVERS.indexOf(currentServer)],\r\n Week: dailyAveragesWeek[index],\r\n WeekColor: GRAY,\r\n }));\r\n\r\n setByDayChartData(chartData);\r\n }\r\n\r\n generateByDayChart();\r\n }, [quarterlyData, byDayType]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {`${getServerNamePossessive()} ${TITLE}`} \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setPopupMessage(null);\r\n }}\r\n />\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n readAbout(m)}\r\n />\r\n \r\n ) : serverStatus !== false ? (\r\n Loading all sorts of fun data...\r\n ) : (\r\n This server is offline. Check back later.\r\n )\r\n }\r\n />\r\n \r\n {\r\n setByHourType(\"population\");\r\n }}\r\n doB={() => {\r\n setByHourType(\"lfms\");\r\n }}\r\n />\r\n \r\n \r\n \r\n {\r\n setByDayType(\"population\");\r\n }}\r\n doB={() => {\r\n setByDayType(\"lfms\");\r\n }}\r\n />\r\n \r\n \r\n \r\n {\r\n setQuarterlyType(\"population\");\r\n }}\r\n doB={() => {\r\n setQuarterlyType(\"lfms\");\r\n }}\r\n />\r\n server.id === currentServer)\r\n }\r\n trendType=\"quarter\"\r\n activeFilter=\"Server Activity\"\r\n showActions={false}\r\n showLastUpdated={true}\r\n reportReference={null}\r\n showArea={true}\r\n marginBottom={120}\r\n height=\"460px\"\r\n forceHardcore={true}\r\n />\r\n \r\n \r\n {\r\n setAnnualType(\"population\");\r\n }}\r\n doB={() => {\r\n setAnnualType(\"lfms\");\r\n }}\r\n />\r\n server.id === currentServer)\r\n }\r\n trendType=\"annual\"\r\n activeFilter=\"Server Activity\"\r\n showActions={false}\r\n showLastUpdated={true}\r\n reportReference={null}\r\n showArea={true}\r\n marginBottom={120}\r\n height=\"460px\"\r\n forceHardcore={true}\r\n />\r\n \r\n \r\n \r\n server.id === currentServer || server.id === \"Hardcore\"\r\n )\r\n }\r\n trendType=\"annual\"\r\n activeFilter=\"Server Activity\"\r\n showActions={false}\r\n showLastUpdated={true}\r\n reportReference={null}\r\n marginBottom={120}\r\n height=\"460px\"\r\n showArea={true}\r\n areaOpacity={0.1}\r\n forceHardcore={true}\r\n />\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServersSpecific;\r\n","export default __webpack_public_path__ + \"static/media/lfmsprite_v3.b9a069b5.jpg\";","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport PanelSprite from \"../../assets/global/lfmsprite_v3.jpg\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\n\r\nconst RaidGroupCluster = (props) => {\r\n const CANVAS_REFS = [\r\n React.useRef(null),\r\n React.useRef(null),\r\n React.useRef(null),\r\n React.useRef(null),\r\n React.useRef(null),\r\n React.useRef(null),\r\n React.useRef(null),\r\n React.useRef(null),\r\n React.useRef(null),\r\n ];\r\n const spriteRef = React.useRef(null);\r\n const PANEL_WIDTH = 848;\r\n const LFM_HEIGHT = 90;\r\n const CLASS_COUNT = 15;\r\n\r\n let canvas;\r\n let ctx;\r\n const sprite = spriteRef.current;\r\n\r\n let [isImageLoaded, setIsImageLoaded] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n drawRaidsToPanels();\r\n }, [props.data, isImageLoaded]);\r\n\r\n function serverRaidCount(server) {\r\n let result = 0;\r\n server.Groups.forEach((group) => {\r\n if (group.Quest?.GroupSize === \"Raid\") {\r\n result += 1;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n function gameRaidCount() {\r\n if (props.data && props.data.length) {\r\n let result = 0;\r\n props.data.forEach((server) => {\r\n server.Groups.forEach((group) => {\r\n if (group.Quest?.GroupSize === \"Raid\") {\r\n result += 1;\r\n }\r\n });\r\n });\r\n return result;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n function drawRaidsToPanels() {\r\n if (!props.data) return;\r\n if (!Array.isArray(props.data)) return;\r\n if (!isImageLoaded) return;\r\n\r\n props.data.forEach((server, i) => {\r\n if (serverRaidCount(server) > 0) {\r\n let yOffset = 0;\r\n canvas = CANVAS_REFS[i].current;\r\n ctx = canvas.getContext(\"2d\", { alpha: false });\r\n server.Groups.forEach((group) => {\r\n group.Eligible = true;\r\n if (group.Quest?.GroupSize === \"Raid\") {\r\n DrawRaid(group, yOffset);\r\n yOffset += LFM_HEIGHT;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function DrawRaid(group, yOffset) {\r\n ctx.drawImage(sprite, 0, 72, 848, LFM_HEIGHT, 0, yOffset, 848, LFM_HEIGHT);\r\n\r\n let top = yOffset;\r\n // props.data.Groups.filter((group) => {\r\n // return group.Eligible || props.showNotEligible;\r\n // }).forEach((group, index) => {\r\n // Draw background and borders\r\n let commentlines = wrapText(group.Comment, 330);\r\n let lfmheight = 0;\r\n if (props.expandedInfo) {\r\n if (group.Members.length) {\r\n lfmheight += group.Members.length * 25 + 30;\r\n }\r\n if (group.Comment) {\r\n lfmheight += commentlines.length * 20 + 5;\r\n }\r\n if (group.AdventureActive) {\r\n lfmheight += 20;\r\n }\r\n if (lfmheight < LFM_HEIGHT) {\r\n lfmheight = LFM_HEIGHT;\r\n }\r\n } else {\r\n lfmheight = LFM_HEIGHT;\r\n }\r\n\r\n if (isFeytwisted(group)) {\r\n let gradient = ctx.createLinearGradient(\r\n 0,\r\n top,\r\n PANEL_WIDTH,\r\n top + lfmheight\r\n );\r\n gradient.addColorStop(0, \"#a11d1d\");\r\n gradient.addColorStop(0.2, \"#a1a11d\");\r\n gradient.addColorStop(0.4, \"#1da11f\");\r\n gradient.addColorStop(0.6, \"#1d9aa1\");\r\n gradient.addColorStop(0.8, \"#1d1da1\");\r\n gradient.addColorStop(1, \"#8f1da1\");\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(26, top, 802, lfmheight);\r\n\r\n gradient = ctx.createLinearGradient(0, top, 0, top + lfmheight);\r\n gradient.addColorStop(0, \"#3b3b25\");\r\n gradient.addColorStop(0.25, \"#4c4a31\");\r\n gradient.addColorStop(0.75, \"#4c4a31\");\r\n gradient.addColorStop(1, \"#3b3b25\");\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(31, top + 5, 792, lfmheight - 10);\r\n } else if (group.Eligible) {\r\n let gradient = ctx.createLinearGradient(0, top, 0, top + lfmheight);\r\n gradient.addColorStop(0, \"#3b3b25\");\r\n gradient.addColorStop(0.25, \"#4c4a31\");\r\n gradient.addColorStop(0.75, \"#4c4a31\");\r\n gradient.addColorStop(1, \"#3b3b25\");\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(26, top, 802, lfmheight);\r\n } else {\r\n ctx.fillStyle = \"#150a06\";\r\n ctx.fillRect(26, top, 802, lfmheight);\r\n }\r\n\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#8f8d74\";\r\n ctx.lineWidth = 1;\r\n ctx.rect(26, top, 802, lfmheight);\r\n ctx.stroke();\r\n\r\n ctx.moveTo(375, top);\r\n ctx.lineTo(375, top + lfmheight);\r\n ctx.stroke();\r\n\r\n ctx.moveTo(605, top);\r\n ctx.lineTo(605, top + lfmheight);\r\n ctx.stroke();\r\n\r\n ctx.moveTo(742, top);\r\n ctx.lineTo(742, top + lfmheight);\r\n ctx.stroke();\r\n\r\n // Draw party leader's name\r\n ctx.fillStyle = group.Eligible ? \"#f6f1d3\" : \"#988f80\";\r\n ctx.textBaseline = \"alphabetic\";\r\n ctx.font = `18px 'Trebuchet MS'`;\r\n ctx.textAlign = \"left\";\r\n ctx.fillText(group.Leader.Name, 49, top + 18);\r\n let leaderWidth = ctx.measureText(group.Leader.Name).width;\r\n if (group.Leader.Name.startsWith(\"Clemei\")) {\r\n leaderWidth += 22;\r\n ctx.drawImage(\r\n sprite,\r\n 728,\r\n 189,\r\n 18,\r\n 18,\r\n 49 + leaderWidth - 20,\r\n top + 3,\r\n 18,\r\n 18\r\n );\r\n }\r\n\r\n // Draw party leader's level\r\n ctx.font = `15px Arial`;\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(\r\n group.Leader.TotalLevel ||\r\n (group.Leader.Name === \"DDO Audit\" ? \"99\" : \"0\"),\r\n 360,\r\n 17 + top\r\n );\r\n\r\n // Draw level range\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.font = `16px Arial`;\r\n ctx.fillText(\r\n (group.MinimumLevel || \"1\") + \" - \" + (group.MaximumLevel || \"30\"),\r\n 786,\r\n top + lfmheight / 2\r\n );\r\n ctx.textBaseline = \"alphabetic\";\r\n\r\n // Draw member count\r\n if (group.Members) {\r\n if (group.Members.length > 0) {\r\n ctx.fillStyle = group.Eligible ? \"#b6b193\" : \"#95927e\";\r\n ctx.textAlign = \"left\";\r\n ctx.fillText(\r\n \"(\" + (group.Members.length + 1) + \" members)\",\r\n 49 + leaderWidth + 4,\r\n top + 18\r\n );\r\n }\r\n }\r\n\r\n // Draw quest\r\n if (group.Quest != null) {\r\n ctx.fillStyle = group.Eligible\r\n ? group.Guess\r\n ? \"#d3f6f6\"\r\n : \"#f6f1d3\"\r\n : \"#988f80\";\r\n ctx.font = `${group.Guess ? \"italic \" : \"\"}18px Arial`;\r\n ctx.textAlign = \"center\";\r\n let textLines = wrapText(group.Quest.Name, 220);\r\n if (textLines.length > 2) {\r\n textLines = textLines.slice(0, 2);\r\n textLines[1] = textLines[1] + \"...\";\r\n }\r\n for (let i = 0; i < textLines.length; i++) {\r\n ctx.fillText(\r\n textLines[i],\r\n 489,\r\n top -\r\n 7 +\r\n lfmheight / 2 -\r\n (textLines.length - 1 + (group.Difficulty.length > 3 ? 1 : 0) - 1) *\r\n 9 +\r\n i * 19\r\n );\r\n }\r\n\r\n if (group.CharactersOnTimer) {\r\n // draw timer icon\r\n ctx.drawImage(sprite, 764, 189, 18, 18, 585, top + 2, 18, 18);\r\n }\r\n\r\n ctx.font = `14px Arial`;\r\n ctx.fillStyle = group.Eligible\r\n ? group.Guess\r\n ? \"#d3f6f6\"\r\n : \"#b6b193\"\r\n : \"#95927e\";\r\n ctx.fillText(\r\n \"(\" + getGroupDifficulty(group) + \")\",\r\n 489,\r\n top -\r\n 4 +\r\n lfmheight / 2 -\r\n (textLines.length - 1 + (group.Difficulty.length > 3 ? 1 : 0) - 1) *\r\n 9 +\r\n textLines.length * 19\r\n );\r\n }\r\n\r\n // Draw race icon\r\n let raceIconBounds = getRaceIconPosition(\r\n group.Leader.Gender + \" \" + group.Leader.Race,\r\n group.Eligible\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n raceIconBounds[0],\r\n raceIconBounds[1],\r\n 18,\r\n 18,\r\n 28,\r\n top + 3,\r\n 18,\r\n 18\r\n );\r\n\r\n // Draw class array\r\n if (!group.hasOwnProperty(\"AcceptedCount\")) {\r\n ctx.drawImage(\r\n sprite,\r\n group.Eligible ? 287 : 390,\r\n 189,\r\n 102,\r\n 60,\r\n 608,\r\n 4 + top,\r\n 102,\r\n 60\r\n );\r\n } else {\r\n if (\r\n group.AcceptedCount === CLASS_COUNT ||\r\n group.AcceptedClasses == null\r\n ) {\r\n ctx.drawImage(\r\n sprite,\r\n group.Eligible ? 287 : 390,\r\n 189,\r\n 102,\r\n 60,\r\n 608,\r\n 4 + top,\r\n 102,\r\n 60\r\n );\r\n } else {\r\n group.AcceptedClasses.forEach((playerclass, i) => {\r\n let classIconPosition = getClassIconPosition(\r\n playerclass,\r\n group.Eligible\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n classIconPosition[0],\r\n classIconPosition[1],\r\n 18,\r\n 18,\r\n 608 + (i % 5) * 21,\r\n 4 + top + Math.floor(i / 5) * 21,\r\n 18,\r\n 18\r\n );\r\n });\r\n }\r\n }\r\n\r\n // Draw comment\r\n ctx.fillStyle = group.Eligible ? \"#bfbfbf\" : \"#7f7472\";\r\n ctx.font = `15px Arial`;\r\n ctx.textAlign = \"left\";\r\n let textLines = wrapText(group.Comment, 330);\r\n if (group.AdventureActive !== 0 && group.AdventureActive !== undefined) {\r\n if (textLines.length > 2 || textLines.length > 1) {\r\n textLines = textLines.slice(0, 1);\r\n textLines[textLines.length - 1] =\r\n textLines[textLines.length - 1] + \"...\";\r\n }\r\n } else {\r\n if (textLines.length > 2) {\r\n textLines = textLines.slice(0, 2);\r\n textLines[textLines.length - 1] =\r\n textLines[textLines.length - 1] + \"...\";\r\n } else if (textLines.length > 3) {\r\n textLines = textLines.slice(0, 2);\r\n textLines[textLines.length - 1] =\r\n textLines[textLines.length - 1] + \"...\";\r\n }\r\n }\r\n for (let i = 0; i < Math.min(textLines.length, 3); i++) {\r\n ctx.fillText(textLines[i], 31, 37 + top + +i * 19);\r\n }\r\n\r\n // Draw active time\r\n if (group.AdventureActive != null && group.AdventureActive !== 0) {\r\n let modifiedaatime = Math.max(group.AdventureActive, 60);\r\n ctx.fillStyle = \"#02adfb\";\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(\r\n \"Adventure Active: \" +\r\n Math.round(modifiedaatime / 60) +\r\n (Math.round(modifiedaatime / 60) === 1 ? \" minute\" : \" minutes\"),\r\n 200,\r\n top + lfmheight - 10\r\n );\r\n }\r\n top += lfmheight;\r\n // });\r\n }\r\n\r\n // Helper function for getting group difficulty\r\n function getGroupDifficulty(group) {\r\n if (!group.Guess && group.Difficulty != \"Reaper\") {\r\n return group.Difficulty;\r\n }\r\n\r\n let sanitized = group.Comment.toLowerCase();\r\n let normalpattern = /(\\bln\\b)(\\ben\\b)|(\\bnormal\\b)/;\r\n let hardpattern = /(\\blh\\b)(\\beh\\b)|(\\bhard\\b)/;\r\n let elitepattern = /(\\ble\\b)(\\bee\\b)|(\\belite\\b)/;\r\n let reaperpattern = /(\\br\\b)|(\\breaper\\b)/;\r\n\r\n if (group.Guess) {\r\n if (normalpattern.test(sanitized)) {\r\n return \"Normal\";\r\n }\r\n if (hardpattern.test(sanitized)) {\r\n return \"Hard\";\r\n }\r\n if (elitepattern.test(sanitized)) {\r\n return \"Elite\";\r\n }\r\n }\r\n\r\n let skullpattern1 = /r(\\d+\\+?)/;\r\n let skullpattern2 = /reaper (\\d+\\+?)/;\r\n let skullpattern3 = /(\\d+\\+?) skull/;\r\n let skullpattern4 = /(r\\+)/;\r\n\r\n let skullcount = 0;\r\n if (skullpattern1.test(sanitized)) {\r\n let num = skullpattern1.exec(sanitized);\r\n skullcount = num[1];\r\n }\r\n\r\n if (skullpattern2.test(sanitized)) {\r\n let num = skullpattern2.exec(sanitized);\r\n skullcount = num[1];\r\n }\r\n\r\n if (skullpattern3.test(sanitized)) {\r\n let num = skullpattern3.exec(sanitized);\r\n skullcount = num[1];\r\n }\r\n\r\n if (skullpattern4.test(sanitized)) {\r\n let num = skullpattern4.exec(sanitized);\r\n skullcount = \"1+\";\r\n }\r\n\r\n if (+skullcount !== 0) {\r\n if (+skullcount > 10) {\r\n skullcount = 9001;\r\n }\r\n return `Reaper ${skullcount}`;\r\n }\r\n\r\n if (group.Guess) {\r\n if (reaperpattern.test(sanitized)) {\r\n return \"Reaper\";\r\n }\r\n return \"Normal\";\r\n }\r\n return \"Reaper\";\r\n }\r\n\r\n function isFeytwisted(group) {\r\n if (\r\n (group.Comment.toLowerCase().includes(\"feytwisted\") ||\r\n group.Comment.toLowerCase().includes(\"fey chest\")) &&\r\n group.Quest?.RequiredAdventurePack.toLowerCase().includes(\"feywild\")\r\n )\r\n return true;\r\n return false;\r\n }\r\n\r\n // Helper function for wrapping text\r\n function wrapText(text, maxWidth) {\r\n if (text === null) return \"\";\r\n let words = text.split(\" \");\r\n let lines = [];\r\n let currentLine = words[0];\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n let word = words[i];\r\n let width = ctx.measureText(currentLine + \" \" + word).width;\r\n if (width < maxWidth) {\r\n currentLine += \" \" + word;\r\n } else {\r\n lines.push(currentLine);\r\n currentLine = word;\r\n }\r\n }\r\n lines.push(currentLine);\r\n return lines;\r\n }\r\n\r\n // Helper function for getting race icon position\r\n function getRaceIconPosition(race, eligible) {\r\n let xsrc = 0;\r\n let ysrc = 0;\r\n switch (race) {\r\n case \"Female Aasimar\":\r\n case \"Female Aasimar Scourge\":\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case \"Female Dragonborn\":\r\n xsrc = 18;\r\n ysrc = 0;\r\n break;\r\n case \"Female Drow Elf\":\r\n xsrc = 36;\r\n ysrc = 0;\r\n break;\r\n case \"Female Dwarf\":\r\n xsrc = 54;\r\n ysrc = 0;\r\n break;\r\n case \"Female Elf\":\r\n case \"Female Sun Elf\":\r\n case \"Female Wood Elf\":\r\n xsrc = 72;\r\n ysrc = 0;\r\n break;\r\n case \"Female Gnome\":\r\n case \"Female Deep Gnome\":\r\n xsrc = 0;\r\n ysrc = 18;\r\n break;\r\n case \"Female Half Elf\":\r\n xsrc = 18;\r\n ysrc = 18;\r\n break;\r\n case \"Female Halfling\":\r\n xsrc = 36;\r\n ysrc = 18;\r\n break;\r\n case \"Female Half Orc\":\r\n xsrc = 54;\r\n ysrc = 18;\r\n break;\r\n case \"Female Human\":\r\n case \"Female Shadar-kai\":\r\n case \"Female Purple Dragon Knight\":\r\n xsrc = 72;\r\n ysrc = 18;\r\n break;\r\n case \"Female Shifter\":\r\n case \"Female Razorclaw Shifter\":\r\n xsrc = 90;\r\n ysrc = 18;\r\n break;\r\n case \"Female Tiefling\":\r\n case \"Female Tiefling Scoundrel\":\r\n xsrc = 0;\r\n ysrc = 36;\r\n break;\r\n case \"Female Warforged\":\r\n case \"Female Bladeforged\":\r\n xsrc = 18;\r\n ysrc = 36;\r\n break;\r\n case \"Male Aasimar\":\r\n case \"Male Aasimar Scourge\":\r\n xsrc = 36;\r\n ysrc = 36;\r\n break;\r\n case \"Male Dragonborn\":\r\n xsrc = 54;\r\n ysrc = 36;\r\n break;\r\n case \"Male Drow Elf\":\r\n xsrc = 72;\r\n ysrc = 36;\r\n break;\r\n case \"Male Dwarf\":\r\n xsrc = 0;\r\n ysrc = 54;\r\n break;\r\n case \"Male Elf\":\r\n case \"Male Sun Elf\":\r\n case \"Male Wood Elf\":\r\n xsrc = 18;\r\n ysrc = 54;\r\n break;\r\n case \"Male Gnome\":\r\n case \"Male Deep Gnome\":\r\n xsrc = 36;\r\n ysrc = 54;\r\n break;\r\n case \"Male Half Elf\":\r\n xsrc = 54;\r\n ysrc = 54;\r\n break;\r\n case \"Male Halfling\":\r\n xsrc = 72;\r\n ysrc = 54;\r\n break;\r\n case \"Male Half Orc\":\r\n xsrc = 0;\r\n ysrc = 72;\r\n break;\r\n case \"Male Human\":\r\n case \"Male Shadar-kai\":\r\n case \"Male Purple Dragon Knight\":\r\n xsrc = 18;\r\n ysrc = 72;\r\n break;\r\n case \"Male Shifter\":\r\n case \"Male Razorclaw Shifter\":\r\n xsrc = 90;\r\n ysrc = 0;\r\n break;\r\n case \"Male Tiefling\":\r\n case \"Male Tiefling Scoundrel\":\r\n xsrc = 36;\r\n ysrc = 72;\r\n break;\r\n case \"Male Warforged\":\r\n case \"Male Bladeforged\":\r\n xsrc = 54;\r\n ysrc = 72;\r\n break;\r\n case \"Male Tabaxi\":\r\n case \"Female Tabaxi\":\r\n case \"Male Tabaxi Trailblazer\":\r\n case \"Female Tabaxi Trailblazer\":\r\n xsrc = 90;\r\n ysrc = 36;\r\n break;\r\n default:\r\n xsrc = 72;\r\n ysrc = 72;\r\n break;\r\n }\r\n return [xsrc + (eligible ? 493 : 601), ysrc + 189];\r\n }\r\n\r\n // Helper function for getting race icon position\r\n function getClassIconPosition(classname, eligible) {\r\n let xsrc = 0;\r\n let ysrc = 0;\r\n switch (classname) {\r\n case \"Alchemist\": // 70032AFE\r\n xsrc = 21;\r\n ysrc = 0;\r\n break;\r\n case \"Artificer\": // 700148CE\r\n xsrc = 42;\r\n ysrc = 42;\r\n break;\r\n case \"Barbarian\": // 7000006B\r\n xsrc = 84;\r\n ysrc = 0;\r\n break;\r\n case \"Bard\": // 7000006C\r\n xsrc = 0;\r\n ysrc = 42;\r\n break;\r\n case \"Cleric\": // 7000006D\r\n xsrc = 42;\r\n ysrc = 21;\r\n break;\r\n case \"Druid\": // 70016ADB\r\n xsrc = 63;\r\n ysrc = 42;\r\n break;\r\n case \"Favored Soul\": // 7000C5CE\r\n xsrc = 63;\r\n ysrc = 0;\r\n break;\r\n case \"Fighter\": // 7000006E\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case \"Monk\": // 70006BF5\r\n xsrc = 21;\r\n ysrc = 42;\r\n break;\r\n case \"Paladin\": // 7000006F\r\n xsrc = 42;\r\n ysrc = 0;\r\n break;\r\n case \"Ranger\": // 70000070\r\n xsrc = 21;\r\n ysrc = 21;\r\n break;\r\n case \"Rogue\": // 70000071\r\n xsrc = 0;\r\n ysrc = 21;\r\n break;\r\n case \"Sorcerer\": // 7000000B\r\n xsrc = 84;\r\n ysrc = 21;\r\n break;\r\n case \"Warlock\": // 7000C5DA\r\n xsrc = 84;\r\n ysrc = 42;\r\n break;\r\n case \"Wizard\": // 7000000E\r\n xsrc = 63;\r\n ysrc = 21;\r\n break;\r\n case \"Epic\": // 7001B1A3\r\n xsrc = 423 - (eligible ? 0 : 103);\r\n ysrc = 0;\r\n break;\r\n }\r\n return [xsrc + 287 + (eligible ? 0 : 103), ysrc + 189];\r\n }\r\n\r\n return (\r\n \r\n setIsImageLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n {gameRaidCount() === 0 && (\r\n \r\n When a raid group is posted on any server, it'll show up here.\r\n \r\n )}\r\n {props.data &&\r\n Array.isArray(props.data) &&\r\n props.data.map(\r\n (server, i) =>\r\n serverRaidCount(server) > 0 && (\r\n {\r\n Log(\"Clicked raid group link\", \"Raid group cluster\");\r\n }}\r\n >\r\n
\r\n

{server.Name}

\r\n
\r\n \r\n \r\n )\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default RaidGroupCluster;\r\n","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { Link } from \"react-router-dom\";\r\nimport Banner from \"../global/Banner\";\r\nimport { Fetch, VerifyPlayerAndLfmOverview } from \"../../services/DataLoader\";\r\nimport { ReactComponent as OnlineSVG } from \"../../assets/global/online.svg\";\r\nimport { ReactComponent as OfflineSVG } from \"../../assets/global/offline.svg\";\r\nimport { ReactComponent as PendingSVG } from \"../../assets/global/pending.svg\";\r\nimport { ReactComponent as PumpkinOnlineSVG } from \"../../assets/global/pumpkin_green.svg\";\r\nimport { ReactComponent as PumpkinOfflineSVG } from \"../../assets/global/pumpkin_red.svg\";\r\nimport { ReactComponent as PumpkinPendingSVG } from \"../../assets/global/pumpkin_blue.svg\";\r\nimport { ReactComponent as RegisterSVG } from \"../../assets/global/register.svg\";\r\nimport { ReactComponent as TimerSVG } from \"../../assets/global/timer.svg\";\r\nimport BannerMessage from \"../global/BannerMessage\";\r\nimport PopupMessage from \"../global/PopupMessage\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport RaidGroupCluster from \"./RaidGroupCluster\";\r\nimport ServerHook from \"../../hooks/ServerHook\";\r\nimport DataClassification from \"../global/DataClassification\";\r\n\r\nconst Grouping = () => {\r\n const TITLE = \"DDO Live LFM Viewer\";\r\n const SERVERS = ServerHook();\r\n\r\n const [serverStatusData, setServerStatusData] = React.useState(null);\r\n const [notificationRuleCount, setNotificationRuleCount] = React.useState(0);\r\n const [allGroupData, setAllGroupData] = React.useState(null);\r\n\r\n // Popup message\r\n var [popupMessage, setPopupMessage] = React.useState(null);\r\n\r\n const EVENT_THEME = isSpookyTime();\r\n\r\n function isSpookyTime() {\r\n let dt = new Date();\r\n if (dt.getMonth() === 9 && dt.getDate() >= 4) {\r\n return \"revels\";\r\n }\r\n return \"\";\r\n }\r\n\r\n const PENDING =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const ONLINE =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const OFFLINE =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n function GetSVG(world) {\r\n if (world === undefined || world === null) return PENDING;\r\n if (!world.hasOwnProperty(\"Status\")) return PENDING;\r\n switch (world.Status) {\r\n case 0:\r\n return OFFLINE;\r\n case 1:\r\n return ONLINE;\r\n default:\r\n return PENDING;\r\n }\r\n }\r\n\r\n function getMegaServerDescription() {\r\n if (allGroupData == null) {\r\n return (\r\n \r\n Loading...\r\n

\r\n );\r\n }\r\n let lfmcount = 0;\r\n allGroupData.forEach((s) => {\r\n lfmcount += s.GroupCount;\r\n });\r\n\r\n let raidcount = 0;\r\n allGroupData.forEach((server) => {\r\n server.Groups.forEach((group) => {\r\n if (group.Quest && group.Quest.GroupSize === \"Raid\") raidcount++;\r\n });\r\n });\r\n\r\n return (\r\n

\r\n \r\n {`${lfmcount} group${lfmcount !== 1 ? \"s\" : \"\"}`}{\" \"}\r\n \r\n {raidcount > 0 && `| ${raidcount} raid${raidcount !== 1 ? \"s\" : \"\"}`}\r\n

\r\n );\r\n }\r\n\r\n function GetServerDescription(name) {\r\n if (allGroupData == null) {\r\n return (\r\n \r\n Loading...\r\n

\r\n );\r\n }\r\n if (!Array.isArray(allGroupData))\r\n return (\r\n \r\n 0 groups \r\n

\r\n );\r\n let lfmcount = allGroupData.filter((server) => server.Name === name)[0]\r\n .GroupCount;\r\n\r\n let raidcount = 0;\r\n allGroupData.forEach((server) => {\r\n if (server.Name === name) {\r\n server.Groups.forEach((group) => {\r\n if (group.Quest && group.Quest.GroupSize === \"Raid\") raidcount++;\r\n });\r\n }\r\n });\r\n\r\n return (\r\n

\r\n \r\n {`${lfmcount} group${lfmcount !== 1 ? \"s\" : \"\"}`}{\" \"}\r\n \r\n {raidcount > 0 && `| ${raidcount} raid${raidcount !== 1 ? \"s\" : \"\"}`}\r\n

\r\n );\r\n }\r\n\r\n function refreshGroupData() {\r\n Fetch(\"https://api.ddoaudit.com/gamestatus/serverstatus\", 5000)\r\n .then((val) => {\r\n setPopupMessage(null);\r\n setServerStatusData(val);\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get server status\",\r\n message:\r\n \"We failed to look up server staus. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"Server status error\",\r\n submessage: (err && err.toString()) || \"Server status error\",\r\n });\r\n setServerStatusData(null);\r\n });\r\n\r\n Fetch(\"https://api.ddoaudit.com/groups/all\", 5000)\r\n .then((val) => {\r\n setAllGroupData(val);\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get group data\",\r\n message:\r\n \"We were unable to get group data. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"Group data error\",\r\n submessage: (err && err.toString()) || \"Group data error\",\r\n });\r\n setAllGroupData(null);\r\n });\r\n }\r\n\r\n React.useEffect(() => {\r\n refreshGroupData();\r\n const interval = setInterval(() => refreshGroupData(), 60000);\r\n\r\n setNotificationRuleCount(\r\n localStorage.getItem(\"notification-rules\")\r\n ? JSON.parse(localStorage.getItem(\"notification-rules\")).length\r\n : 0\r\n );\r\n\r\n return () => clearInterval(interval);\r\n }, []);\r\n\r\n function getRaidGroups() {\r\n if (allGroupData == null) return null;\r\n let raidgroups = [];\r\n allGroupData.forEach((server) => {\r\n server.Groups.forEach((group) => {\r\n if (group.Quest) {\r\n if (group.Quest.GroupSize === \"Raid\") {\r\n group.ServerName = server.Name;\r\n raidgroups.push(group);\r\n }\r\n }\r\n });\r\n });\r\n if (raidgroups.length !== 0) {\r\n return raidgroups.map((group, i) => (\r\n {\r\n Log(\"Clicked raid group link\", \"Grouping\");\r\n }}\r\n >\r\n
\r\n

{group.Quest.Name}

\r\n
\r\n \r\n {group.ServerName} |{\" \"}\r\n {group.Leader.Name} |{\" \"}\r\n \r\n {`${group.Members.length + 1} member${\r\n group.Members.length + 1 !== 1 ? \"s\" : \"\"\r\n }`}\r\n \r\n

\r\n \r\n ));\r\n }\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {TITLE}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setPopupMessage(null);\r\n }}\r\n />\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n {SERVERS.map((name, i) => (\r\n \r\n
\r\n {serverStatusData\r\n ? GetSVG(\r\n serverStatusData.Worlds.filter(\r\n (server) => server.Name === name\r\n )[0]\r\n )\r\n : GetSVG()}\r\n

{name}

\r\n
\r\n {GetServerDescription(name)}\r\n \r\n ))}\r\n
\r\n
\r\n \r\n
\r\n {allGroupData ? (\r\n \r\n ) : (\r\n \r\n Loading groups...\r\n \r\n )}\r\n
\r\n
\r\n \r\n Notifications\r\n
\r\n COMING SOON\r\n
\r\n \r\n }\r\n altTitle=\"Notifications\"\r\n description={\r\n \r\n You currently have{\" \"}\r\n \r\n {notificationRuleCount}\r\n {\" \"}\r\n notification rule\r\n {notificationRuleCount !== 1 ? \"s\" : \"\"} setup. Configure\r\n notifications in the{\" \"}\r\n notification settings.\r\n
\r\n }\r\n noFade={true}\r\n />\r\n \r\n
\r\n \r\n
\r\n \r\n

Register Characters

\r\n
\r\n

\r\n Add your characters for automatic LFM filtering and raid timer\r\n tracking.\r\n

\r\n \r\n \r\n
\r\n \r\n

Raid Timers

\r\n
\r\n

\r\n View and manage your current raid timers.\r\n

\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Grouping;\r\n","export default __webpack_public_path__ + \"static/media/pumpkins.b5722f52.png\";","export default __webpack_public_path__ + \"static/media/cobweb.d363084e.png\";","export default __webpack_public_path__ + \"static/media/stone_wall.f90f8cae.jpg\";","const NAMES = [\"Clemeit\", \"Clemeitt\", \"Clemeiit\", \"Clemeiitt\"];\r\n\r\nexport default NAMES;\r\n","import React from \"react\";\r\nimport PanelSprite from \"../../assets/global/lfmsprite_v3.jpg\";\r\nimport PumpkinSprite from \"../../assets/global/pumpkins.png\";\r\nimport CobwebSprite from \"../../assets/global/cobweb.png\";\r\nimport GhostSprite from \"../../assets/global/ghosts.png\";\r\nimport WallSprite from \"../../assets/global/stone_wall.jpg\";\r\nimport NAMES from \"../../constants/ClemeitNames\";\r\n\r\nconst CanvasLfmPanel = (props) => {\r\n // Assume that incoming props.data is already filtered according to user preferences\r\n const canvasRef = React.useRef(null);\r\n const spriteRef = React.useRef(null);\r\n const MINIMUM_LFM_COUNT = 6;\r\n\r\n const EVENT_THEME = isSpookyTime();\r\n const pumpkinRef = React.useRef(null);\r\n const cobwebRef = React.useRef(null);\r\n const ghostRef = React.useRef(null);\r\n const wallRef = React.useRef(null);\r\n\r\n const JOIN_REQUEST_MESSAGES = [\r\n \"You'll have to log in to join {0}\",\r\n \"This is not the group you are looking for\",\r\n \"This isn't the real LFM panel - it's better\",\r\n \"Log in to DDO to join this fabulous group\",\r\n \"Declined!\",\r\n \"Click me again, I dare you\",\r\n \"Well this is awkward\",\r\n \"nope.\",\r\n ];\r\n\r\n const SPOOKY_WORDS = [\r\n \"night\",\r\n \"revel\",\r\n \"mabar\",\r\n \"key\",\r\n \"delera\",\r\n \"spook\",\r\n \"grave\",\r\n ];\r\n\r\n const SPOOKY_AREAS = [\"graveyard\", \"spectral dragon\", \"the night revels\"];\r\n\r\n let [isImageLoaded, setIsImageLoaded] = React.useState(false);\r\n const [isPumpkinLoaded, setIsPumpkinLoaded] = React.useState(false);\r\n const [isCobwebLoaded, setIsCobwebLoaded] = React.useState(false);\r\n const [isGhostLoaded, setIsGhostLoaded] = React.useState(false);\r\n const [isWallLoaded, setIsWallLoaded] = React.useState(false);\r\n // let [selectedGroupIndex, set_selectedGroupIndex] = React.useState(-1);\r\n // let [cursorPosition, set_cursorPosition] = React.useState([0, 0]);\r\n let [groupSelection, setGroupSelection] = React.useState({\r\n groupIndex: -1,\r\n cursorPosition: [0, 0],\r\n });\r\n const [attemptedJoin, setAttemptedJoin] = React.useState(null);\r\n const attemptedJoinRef = React.useRef(attemptedJoin);\r\n attemptedJoinRef.current = attemptedJoin;\r\n\r\n const [highlightRaids, setHighlightRaids] = React.useState(false);\r\n React.useEffect(() => {\r\n if (window.location.search === \"?highlight=raids\") {\r\n setHighlightRaids(true);\r\n }\r\n }, [window.location.pathname]);\r\n\r\n const panelWidth = 848;\r\n const lfmHeight = 90;\r\n const CLASS_COUNT = 15;\r\n let lastclickRef = React.useRef(0);\r\n\r\n function isSpookyTime() {\r\n let dt = new Date();\r\n if (dt.getMonth() === 9 && dt.getDate() >= 4) {\r\n return \"revels\";\r\n }\r\n return \"\";\r\n }\r\n\r\n function HandleMouseOnCanvas(e) {\r\n let rect = e.target.getBoundingClientRect();\r\n let x = (e.clientX - rect.left) * (848 / rect.width); //x position within the element.\r\n let y = (e.clientY - rect.top) * (848 / rect.width); //y position within the element.\r\n\r\n if (e.type === \"click\" && x > 743 && x < 826 && y > 51 && y < 71) {\r\n // Sort by level\r\n props.handleSort(\"level\");\r\n return;\r\n }\r\n\r\n if (x > 605) {\r\n // 375 border between group and quest\r\n setGroupSelection({ ...groupSelection, groupIndex: -1 });\r\n // drawPanel();\r\n return;\r\n }\r\n if (x < 30) {\r\n setGroupSelection({ ...groupSelection, groupIndex: -1 });\r\n // drawPanel();\r\n return;\r\n }\r\n\r\n let index = Math.floor((y - 72) / 90);\r\n // if (groupSelection.groupIndex === index) {\r\n // if (x < 375 && lastSide === \"left\") return;\r\n // else if (x > 375 && lastSide === \"right\") return;\r\n // }\r\n\r\n // Double click the quest\r\n if (e.type === \"click\" && x > 375 && x < 605) {\r\n if (\r\n e.timeStamp - lastclickRef.current.timeStamp < 500 &&\r\n Math.abs(e.clientY - lastclickRef.current.clientY) < 10\r\n ) {\r\n setGroupSelection({\r\n groupIndex: index,\r\n cursorPosition: [x, y],\r\n side,\r\n doubleClick: true,\r\n });\r\n return;\r\n }\r\n lastclickRef.current = e;\r\n }\r\n\r\n // Double click a group\r\n if (e.type === \"click\" && x > 30 && x < 375) {\r\n if (\r\n e.timeStamp - lastclickRef.current.timeStamp < 500 &&\r\n Math.abs(e.clientY - lastclickRef.current.clientY) < 10\r\n ) {\r\n setAttemptedJoin({\r\n groupIndex: index,\r\n cursorPosition: [x, y],\r\n timeStamp: e.timeStamp,\r\n });\r\n return;\r\n }\r\n lastclickRef.current = e;\r\n }\r\n\r\n // Clear attempted join\r\n if (\r\n attemptedJoinRef.current !== null &&\r\n attemptedJoinRef.current.groupIndex !== index\r\n ) {\r\n setAttemptedJoin(null);\r\n }\r\n\r\n let side = \"\";\r\n if (x < 375) side = \"left\";\r\n else if (x > 375) side = \"right\";\r\n\r\n setGroupSelection({\r\n groupIndex: index,\r\n cursorPosition: [x, y],\r\n side,\r\n });\r\n }\r\n\r\n React.useEffect(() => {\r\n // TODO: Remove listeners\r\n let overlayTimeout;\r\n canvasRef.current.addEventListener(\"mousemove\", (e) => {\r\n clearTimeout(overlayTimeout);\r\n overlayTimeout = setTimeout(() => {\r\n HandleMouseOnCanvas(e);\r\n }, 300);\r\n });\r\n canvasRef.current.addEventListener(\"click\", (e) => {\r\n HandleMouseOnCanvas(e);\r\n });\r\n canvasRef.current.addEventListener(\"mouseleave\", () => {\r\n clearTimeout(overlayTimeout);\r\n setGroupSelection({ ...groupSelection, groupIndex: -1 });\r\n setAttemptedJoin(null);\r\n });\r\n }, [canvasRef]);\r\n\r\n function computePanelHeight(groups) {\r\n let top = 0;\r\n\r\n if (groups) {\r\n groups\r\n .filter((group) => {\r\n return group.Eligible || props.showNotEligible;\r\n })\r\n .forEach((group, index) => {\r\n let lfmheight = 0;\r\n if (props.expandedInfo) {\r\n let commentlines = [];\r\n const canvas = canvasRef.current;\r\n const ctx = canvas.getContext(\"2d\", { alpha: false });\r\n\r\n if (group.Comment != null) {\r\n let words = group.Comment.split(\" \");\r\n let lines = [];\r\n let currentLine = words[0];\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n let word = words[i];\r\n let width = ctx.measureText(currentLine + \" \" + word).width;\r\n if (width < 330) {\r\n currentLine += \" \" + word;\r\n } else {\r\n lines.push(currentLine);\r\n currentLine = word;\r\n }\r\n }\r\n lines.push(currentLine);\r\n commentlines = lines;\r\n }\r\n\r\n if (group.Members.length) {\r\n lfmheight += group.Members.length * 25 + 30;\r\n }\r\n if (group.Comment) {\r\n lfmheight += commentlines.length * 20 + 5;\r\n }\r\n if (group.AdventureActive) {\r\n lfmheight += 20;\r\n }\r\n if (lfmheight < lfmHeight) {\r\n lfmheight = lfmHeight;\r\n }\r\n } else {\r\n lfmheight = lfmHeight;\r\n }\r\n top += lfmheight;\r\n });\r\n }\r\n\r\n return top;\r\n }\r\n\r\n React.useEffect(() => {\r\n if (!isImageLoaded) {\r\n return;\r\n }\r\n\r\n if (\r\n EVENT_THEME === \"revels\" &&\r\n (!isPumpkinLoaded || !isWallLoaded || !isCobwebLoaded || !isGhostLoaded)\r\n ) {\r\n return;\r\n }\r\n\r\n // Render canvas\r\n const canvas = canvasRef.current;\r\n const ctx = canvas.getContext(\"2d\", { alpha: false });\r\n\r\n const sprite = spriteRef.current;\r\n const pumpkins = pumpkinRef.current;\r\n const cobweb = cobwebRef.current;\r\n const ghost = ghostRef.current;\r\n const wall = wallRef.current;\r\n\r\n if (groupSelection.doubleClick) {\r\n if (\r\n groupSelection.groupIndex !== -1 &&\r\n groupSelection.groupIndex < props.data.Groups.length\r\n ) {\r\n let g = props.data.Groups[groupSelection.groupIndex];\r\n if (g.Quest != null) {\r\n window.open(\r\n \"https://ddowiki.com/page/\" + g.Quest.Name.replace(/ /g, \"_\"),\r\n \"_blank\"\r\n );\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // Draw the header\r\n OpenPanel();\r\n\r\n // Draw the chin\r\n ClosePanel();\r\n\r\n // Draw lfms\r\n DrawFiller();\r\n if (props.data !== null) DrawLfms();\r\n\r\n // Draws the header and the lastUpdateTime string\r\n function OpenPanel() {\r\n ctx.drawImage(sprite, 0, 0, 848, 72, 0, 0, 848, 72);\r\n if (props.data) {\r\n let lastUpdateTime = new Date(props.data.LastUpdateTime);\r\n let hour = lastUpdateTime.getHours() % 12;\r\n if (hour == 0) hour = 12;\r\n let timeText =\r\n \"Last updated \" +\r\n hour +\r\n \":\" +\r\n (\"0\" + lastUpdateTime.getMinutes()).slice(-2) +\r\n \":\" +\r\n (\"0\" + lastUpdateTime.getSeconds()).slice(-2) +\r\n (Math.floor(lastUpdateTime.getHours() / 12) == 0 ? \" AM\" : \" PM\");\r\n ctx.font = \"18px Arial\";\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillStyle = \"white\";\r\n ctx.fillText(timeText, 212, 19);\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"alphabetic\";\r\n }\r\n if (props.sortAscending) {\r\n // 0, 259 | 30x10 DESC | 746, 55\r\n ctx.drawImage(sprite, 30, 259, 30, 10, 746, 55, 30, 10);\r\n } else {\r\n ctx.drawImage(sprite, 0, 259, 30, 10, 746, 55, 30, 10);\r\n }\r\n }\r\n\r\n // Draws the chin\r\n function ClosePanel() {\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 162,\r\n 848,\r\n 27,\r\n 0,\r\n 72 +\r\n (props.data\r\n ? Math.max(\r\n computePanelHeight(props.data.Groups),\r\n MINIMUM_LFM_COUNT * lfmHeight\r\n )\r\n : MINIMUM_LFM_COUNT * lfmHeight),\r\n 848,\r\n 27\r\n );\r\n }\r\n\r\n // Draws filler\r\n function DrawFiller() {\r\n for (\r\n let i = 0;\r\n i <\r\n (props.data\r\n ? Math.max(props.data.Groups.length, MINIMUM_LFM_COUNT)\r\n : MINIMUM_LFM_COUNT);\r\n i++\r\n ) {\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 72,\r\n 848,\r\n lfmHeight,\r\n 0,\r\n 72 + i * lfmHeight,\r\n 848,\r\n lfmHeight\r\n );\r\n }\r\n }\r\n\r\n function DrawLfms() {\r\n if (props.data === null) {\r\n return;\r\n }\r\n let top = 72;\r\n props.data.Groups.filter((group) => {\r\n return group.Eligible || props.showNotEligible;\r\n }).forEach((group, index) => {\r\n // Draw background and borders\r\n let commentlines = wrapText(group.Comment, 330);\r\n let lfmheight = 0;\r\n if (props.expandedInfo) {\r\n if (group.Members.length) {\r\n lfmheight += group.Members.length * 25 + 30;\r\n }\r\n if (group.Comment) {\r\n lfmheight += commentlines.length * 20 + 5;\r\n }\r\n if (group.AdventureActive) {\r\n lfmheight += 20;\r\n }\r\n if (lfmheight < lfmHeight) {\r\n lfmheight = lfmHeight;\r\n }\r\n } else {\r\n lfmheight = lfmHeight;\r\n }\r\n\r\n if (EVENT_THEME === \"revels\") {\r\n if (group.Eligible) {\r\n ctx.drawImage(wall, 26, top, 802, lfmheight);\r\n } else {\r\n ctx.filter = \"brightness(35%)\";\r\n ctx.drawImage(wall, 26, top, 802, lfmheight);\r\n ctx.filter = \"brightness(100%)\";\r\n }\r\n\r\n if (\r\n SPOOKY_WORDS.filter((word) =>\r\n group.Comment.toLowerCase().includes(word)\r\n ).length ||\r\n SPOOKY_AREAS.filter((word) =>\r\n group.Quest?.AdventureArea?.toLowerCase().includes(word)\r\n ).length ||\r\n SPOOKY_AREAS.filter((word) =>\r\n group.Leader.Location?.Name?.toLowerCase().includes(word)\r\n ).length\r\n ) {\r\n ctx.globalAlpha = group.Eligible ? 1 : 0.5;\r\n if (group.Leader.Name.length % 2 === 0) {\r\n ctx.drawImage(\r\n pumpkins,\r\n 0,\r\n 0,\r\n 93,\r\n 60,\r\n 280,\r\n 73 + lfmHeight * index + 28,\r\n 93,\r\n 60\r\n );\r\n } else {\r\n ctx.drawImage(\r\n pumpkins,\r\n 93,\r\n 0,\r\n 54,\r\n 60,\r\n 315,\r\n 73 + lfmHeight * index + 28,\r\n 54,\r\n 60\r\n );\r\n }\r\n }\r\n\r\n const COBWEB_VALUE =\r\n group.Leader.Name.length + group.Quest?.Name?.length;\r\n\r\n if (COBWEB_VALUE % 7 === 0) {\r\n // Draw cobweb\r\n ctx.globalAlpha = group.Eligible\r\n ? COBWEB_VALUE % 5 === 0\r\n ? 0.4\r\n : 0.3\r\n : 0.2;\r\n if (COBWEB_VALUE % 4 === 0) {\r\n ctx.drawImage(\r\n cobweb,\r\n 0,\r\n 0,\r\n 80,\r\n 88,\r\n 525,\r\n 45 + lfmHeight * index + 28,\r\n 80,\r\n 88\r\n );\r\n } else {\r\n ctx.translate(525, 45 + lfmHeight * index + 28);\r\n ctx.rotate(-(90 * Math.PI) / 180);\r\n ctx.drawImage(cobweb, 0, 0, 80, 88, -78, -149, 80, 88);\r\n ctx.rotate((90 * Math.PI) / 180);\r\n ctx.translate(-525, -(45 + lfmHeight * index + 28));\r\n }\r\n }\r\n\r\n const GHOST_MOD = stringToInt(group.Leader.Name + group.Comment);\r\n const GHOST_TYPE = stringToInt(group.Quest?.Name || \"undef\");\r\n\r\n // Draw ghost\r\n if (GHOST_MOD % 7 === 0) {\r\n ctx.globalAlpha = group.Eligible ? 0.7 : 0.5;\r\n ctx.drawImage(\r\n ghost,\r\n GHOST_TYPE % 2 === 0 ? 90 : 0,\r\n 0,\r\n 90,\r\n 90,\r\n (GHOST_MOD % 3) * 330 + 50,\r\n 45 + lfmHeight * index + 28,\r\n 90,\r\n 90\r\n );\r\n }\r\n\r\n ctx.globalAlpha = 1;\r\n } else {\r\n if (isFeytwisted(group)) {\r\n let gradient = ctx.createLinearGradient(\r\n 0,\r\n top,\r\n panelWidth,\r\n top + lfmheight\r\n );\r\n gradient.addColorStop(0, \"#a11d1d\");\r\n gradient.addColorStop(0.2, \"#a1a11d\");\r\n gradient.addColorStop(0.4, \"#1da11f\");\r\n gradient.addColorStop(0.6, \"#1d9aa1\");\r\n gradient.addColorStop(0.8, \"#1d1da1\");\r\n gradient.addColorStop(1, \"#8f1da1\");\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(26, top, 802, lfmheight);\r\n\r\n if (group.Eligible) {\r\n gradient = ctx.createLinearGradient(0, top, 0, top + lfmheight);\r\n gradient.addColorStop(\r\n 0,\r\n props.highVisibility ? \"#30301e\" : \"#3b3b25\"\r\n );\r\n gradient.addColorStop(\r\n 0.25,\r\n props.highVisibility ? \"#42402a\" : \"#4c4a31\"\r\n );\r\n gradient.addColorStop(\r\n 0.75,\r\n props.highVisibility ? \"#42402a\" : \"#4c4a31\"\r\n );\r\n gradient.addColorStop(\r\n 1,\r\n props.highVisibility ? \"#30301e\" : \"#3b3b25\"\r\n );\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(31, top + 5, 792, lfmheight - 10);\r\n } else {\r\n ctx.fillStyle = \"#150a06\";\r\n ctx.fillRect(31, top + 5, 792, lfmheight - 10);\r\n }\r\n } else if (group.Quest?.GroupSize === \"Raid\" && highlightRaids) {\r\n let gradient = ctx.createLinearGradient(\r\n 0,\r\n top,\r\n panelWidth,\r\n top + lfmheight\r\n );\r\n gradient.addColorStop(0, \"#1da1a1\");\r\n gradient.addColorStop(1, \"#1d6ca1\");\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(26, top, 802, lfmheight);\r\n\r\n if (group.Eligible) {\r\n gradient = ctx.createLinearGradient(0, top, 0, top + lfmheight);\r\n gradient.addColorStop(\r\n 0,\r\n props.highVisibility ? \"#30301e\" : \"#3b3b25\"\r\n );\r\n gradient.addColorStop(\r\n 0.25,\r\n props.highVisibility ? \"#42402a\" : \"#4c4a31\"\r\n );\r\n gradient.addColorStop(\r\n 0.75,\r\n props.highVisibility ? \"#42402a\" : \"#4c4a31\"\r\n );\r\n gradient.addColorStop(\r\n 1,\r\n props.highVisibility ? \"#30301e\" : \"#3b3b25\"\r\n );\r\n ctx.fillStyle = gradient;\r\n } else {\r\n ctx.fillStyle = \"#150a06\";\r\n }\r\n\r\n ctx.fillRect(31, top + 5, 792, lfmheight - 10);\r\n } else if (group.Eligible) {\r\n let gradient = ctx.createLinearGradient(0, top, 0, top + lfmheight);\r\n gradient.addColorStop(\r\n 0,\r\n props.highVisibility ? \"#30301e\" : \"#3b3b25\"\r\n );\r\n gradient.addColorStop(\r\n 0.25,\r\n props.highVisibility ? \"#42402a\" : \"#4c4a31\"\r\n );\r\n gradient.addColorStop(\r\n 0.75,\r\n props.highVisibility ? \"#42402a\" : \"#4c4a31\"\r\n );\r\n gradient.addColorStop(\r\n 1,\r\n props.highVisibility ? \"#30301e\" : \"#3b3b25\"\r\n );\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(26, top, 802, lfmheight);\r\n } else {\r\n ctx.fillStyle = \"#150a06\";\r\n ctx.fillRect(26, top, 802, lfmheight);\r\n }\r\n }\r\n\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#8f8d74\";\r\n ctx.lineWidth = 1;\r\n ctx.rect(26, top, 802, lfmheight);\r\n ctx.stroke();\r\n\r\n ctx.moveTo(375, top);\r\n ctx.lineTo(375, top + lfmheight);\r\n ctx.stroke();\r\n\r\n ctx.moveTo(605, top);\r\n ctx.lineTo(605, top + lfmheight);\r\n ctx.stroke();\r\n\r\n ctx.moveTo(742, top);\r\n ctx.lineTo(742, top + lfmheight);\r\n ctx.stroke();\r\n\r\n // Draw party leader's name\r\n ctx.fillStyle = props.highVisibility\r\n ? \"white\"\r\n : group.Eligible\r\n ? \"#f6f1d3\"\r\n : \"#988f80\";\r\n ctx.textBaseline = \"alphabetic\";\r\n ctx.font = `${18 + props.fontModifier}px 'Trebuchet MS'`;\r\n ctx.textAlign = \"left\";\r\n ctx.fillText(group.Leader.Name, 49, top + 18 + props.fontModifier / 2);\r\n let leaderWidth = ctx.measureText(group.Leader.Name).width;\r\n if (NAMES.some((name) => group.Leader.Name.startsWith(name))) {\r\n leaderWidth += 22;\r\n ctx.drawImage(\r\n sprite,\r\n 728,\r\n 189,\r\n 18,\r\n 18,\r\n 49 + leaderWidth - 20,\r\n top + 3,\r\n 18,\r\n 18\r\n );\r\n }\r\n\r\n // Draw party leader's level or eligible characters\r\n if (\r\n group.EligibleCharacters &&\r\n group.EligibleCharacters.length &&\r\n props.showEligibleCharacters\r\n ) {\r\n ctx.font = `${15}px Arial`;\r\n let visibleString =\r\n group.EligibleCharacters[0] +\r\n (group.EligibleCharacters.length > 1\r\n ? `, +${group.EligibleCharacters.length - 1}`\r\n : \"\");\r\n ctx.strokeStyle = \"#8fcf74\";\r\n ctx.fillStyle = \"#8fcf74\";\r\n let characterWidth = ctx.measureText(visibleString).width;\r\n ctx.textAlign = \"right\";\r\n ctx.fillText(visibleString, 360, 20 + top);\r\n ctx.beginPath();\r\n ctx.rect(360 - characterWidth - 10, 6 + top, characterWidth + 20, 17);\r\n ctx.stroke();\r\n ctx.fillStyle = props.highVisibility\r\n ? \"white\"\r\n : group.Eligible\r\n ? \"#f6f1d3\"\r\n : \"#988f80\";\r\n } else {\r\n ctx.font = `${15 + props.fontModifier}px Arial`;\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(\r\n group.Leader.TotalLevel ||\r\n (group.Leader.Name === \"DDO Audit\" ? \"99\" : \"0\"),\r\n 360,\r\n 17 + top + props.fontModifier / 2\r\n );\r\n }\r\n\r\n // Draw level range\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.font = `${16 + props.fontModifier}px Arial`;\r\n ctx.fillText(\r\n (group.MinimumLevel || \"1\") + \" - \" + (group.MaximumLevel || \"30\"),\r\n 786,\r\n top + lfmheight / 2\r\n );\r\n ctx.textBaseline = \"alphabetic\";\r\n\r\n // Draw member count\r\n if (props.expandedInfo) {\r\n // Classes\r\n let x = 40;\r\n let y = top + 19;\r\n ctx.font = \"13px Arial\";\r\n ctx.textBaseline = \"alphabetic\";\r\n ctx.textAlign = \"right\";\r\n if (group.Leader.Classes != null)\r\n for (let c = 0; c < group.Leader.Classes.length; c++) {\r\n // First pass for icons\r\n let xp = x + 166 + 21 * c;\r\n let yp = y - 15;\r\n\r\n ctx.fillStyle = \"#3e4641\";\r\n ctx.fillRect(xp - 1, yp - 1, 20, 20);\r\n\r\n let classIconPosition = getClassIconPosition(\r\n group.Leader.Classes[c].Name,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n classIconPosition[0],\r\n classIconPosition[1],\r\n 18,\r\n 18,\r\n xp,\r\n yp,\r\n 18,\r\n 18\r\n );\r\n }\r\n if (group.Leader.Classes != null)\r\n for (let c = 0; c < group.Leader.Classes.length; c++) {\r\n // Second pass for levels\r\n let xp = x + 166 + 21 * c;\r\n let yp = y - 15;\r\n\r\n ctx.fillStyle = \"black\";\r\n ctx.fillText(group.Leader.Classes[c].Level, xp + 22, yp + 18);\r\n ctx.fillStyle = \"white\";\r\n ctx.fillText(group.Leader.Classes[c].Level, xp + 21, yp + 17);\r\n }\r\n } else {\r\n if (group.Members && props.showMemberCount) {\r\n if (group.Members.length > 0) {\r\n ctx.fillStyle = props.highVisibility\r\n ? \"white\"\r\n : group.Eligible\r\n ? \"#b6b193\"\r\n : \"#95927e\";\r\n ctx.textAlign = \"left\";\r\n ctx.fillText(\r\n \"(\" + (group.Members.length + 1) + \" members)\",\r\n 49 + leaderWidth + 4,\r\n top + 18 + props.fontModifier / 2\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Draw quest\r\n if (group.Quest != null && (!group.Guess || props.showQuestGuesses)) {\r\n const SHOW_QUEST_TIP =\r\n group.Quest.Tip !== null && props.showQuestTips !== false;\r\n ctx.fillStyle = props.highVisibility\r\n ? \"white\"\r\n : group.Eligible\r\n ? group.Guess\r\n ? \"#d3f6f6\"\r\n : \"#f6f1d3\"\r\n : \"#988f80\";\r\n ctx.font = `${group.Guess ? \"italic \" : \"\"}${\r\n 18 + props.fontModifier\r\n }px Arial`;\r\n ctx.textAlign = \"center\";\r\n let textLines = wrapText(group.Quest.Name, 220);\r\n\r\n if (textLines.length > 1 && SHOW_QUEST_TIP) {\r\n textLines = [textLines[0]];\r\n textLines[0] = textLines[0] + \"...\";\r\n } else if (textLines.length > 2 && props.fontModifier > 0) {\r\n textLines = textLines.slice(0, 2);\r\n textLines[1] = textLines[1] + \"...\";\r\n }\r\n\r\n for (let i = 0; i < textLines.length; i++) {\r\n ctx.fillText(\r\n textLines[i],\r\n 489,\r\n top -\r\n 7 +\r\n lfmheight / 2 -\r\n (textLines.length -\r\n 1 +\r\n (group.Difficulty.length > 3 ? 1 : 0) -\r\n 1) *\r\n 9 +\r\n i * (19 + props.fontModifier) -\r\n (SHOW_QUEST_TIP ? 8 : 0)\r\n );\r\n }\r\n\r\n // Draw quest tip\r\n if (SHOW_QUEST_TIP) {\r\n const questTipLines = wrapText(group.Quest.Tip, 220);\r\n if (questTipLines.length > 1) {\r\n questTipLines[0] += \"...\";\r\n }\r\n ctx.fillStyle = props.highVisibility\r\n ? \"white\"\r\n : group.Eligible\r\n ? group.Guess\r\n ? \"#d3f6f6\"\r\n : \"#f6f1d3\"\r\n : \"#988f80\";\r\n ctx.font = `italic ${14 + props.fontModifier}px Arial`;\r\n ctx.fillText(\r\n questTipLines[0],\r\n 489,\r\n top -\r\n 7 +\r\n lfmheight / 2 -\r\n (SHOW_QUEST_TIP ? 8 : 0) +\r\n 20 +\r\n props.fontModifier / 2\r\n );\r\n }\r\n\r\n if (group.CharactersOnTimer) {\r\n // draw timer icon\r\n ctx.drawImage(sprite, 764, 189, 18, 18, 585, top + 2, 18, 18);\r\n }\r\n\r\n ctx.font = `${14 + props.fontModifier}px Arial`;\r\n ctx.fillStyle = props.highVisibility\r\n ? \"white\"\r\n : group.Eligible\r\n ? group.Guess\r\n ? \"#d3f6f6\"\r\n : \"#b6b193\"\r\n : \"#95927e\";\r\n ctx.fillText(\r\n getGroupDifficulty(group),\r\n 489,\r\n top -\r\n 4 +\r\n lfmheight / 2 -\r\n (textLines.length -\r\n 1 +\r\n (group.Difficulty.length > 3 ? 1 : 0) -\r\n 1) *\r\n 9 +\r\n textLines.length * 19 +\r\n props.fontModifier +\r\n (SHOW_QUEST_TIP ? 10 : 0)\r\n );\r\n }\r\n\r\n // Draw quest completion percentage\r\n if (\r\n group.AdventureActive &&\r\n group.Quest?.AverageTime &&\r\n props.showCompletionPercentage\r\n ) {\r\n // Draw timeline\r\n ctx.closePath();\r\n ctx.strokeStyle = \"#80b6cf\"; //\"#02adfb\";\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.moveTo(489 - 100, top + lfmheight - 10);\r\n ctx.lineTo(489 + 100, top + lfmheight - 10);\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n // Draw completion bar\r\n ctx.closePath();\r\n ctx.strokeStyle = \"#4ba4cc\"; //\"#02adfb\";\r\n ctx.lineWidth = 6;\r\n ctx.beginPath();\r\n ctx.moveTo(394, top + lfmheight - 10);\r\n // prettier-ignore\r\n ctx.lineTo(394 + Math.min(170 * (group.AdventureActive / group.Quest?.AverageTime ), 190),\r\n top + lfmheight - 10\r\n );\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n // Draw average time marker\r\n ctx.closePath();\r\n ctx.strokeStyle = \"#d48824\"; //\"#02adfb\";\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n ctx.moveTo(564, top + lfmheight - 10 - 5);\r\n ctx.lineTo(564, top + lfmheight - 10 + 5);\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n\r\n // Draw race icon\r\n let raceIconBounds = getRaceIconPosition(\r\n group.Leader.Gender + \" \" + group.Leader.Race,\r\n group.Eligible\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n raceIconBounds[0],\r\n raceIconBounds[1],\r\n 18,\r\n 18,\r\n 28,\r\n top + 3,\r\n 18,\r\n 18\r\n );\r\n\r\n // Draw class array\r\n if (!group.hasOwnProperty(\"AcceptedCount\")) {\r\n ctx.drawImage(\r\n sprite,\r\n group.Eligible ? 287 : 390,\r\n 189,\r\n 102,\r\n 60,\r\n 608,\r\n 4 + top,\r\n 102,\r\n 60\r\n );\r\n } else {\r\n if (\r\n group.AcceptedCount === CLASS_COUNT ||\r\n group.AcceptedClasses == null\r\n ) {\r\n ctx.drawImage(\r\n sprite,\r\n group.Eligible ? 287 : 390,\r\n 189,\r\n 102,\r\n 60,\r\n 608,\r\n 4 + top,\r\n 102,\r\n 60\r\n );\r\n } else {\r\n group.AcceptedClasses.forEach((playerclass, i) => {\r\n let classIconPosition = getClassIconPosition(\r\n playerclass,\r\n group.Eligible\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n classIconPosition[0],\r\n classIconPosition[1],\r\n 18,\r\n 18,\r\n 608 + (i % 5) * 21,\r\n 4 + top + Math.floor(i / 5) * 21,\r\n 18,\r\n 18\r\n );\r\n });\r\n }\r\n }\r\n\r\n // Draw comment\r\n ctx.fillStyle = props.highVisibility\r\n ? \"white\"\r\n : group.Eligible\r\n ? \"#bfbfbf\"\r\n : \"#7f7472\";\r\n ctx.font = `${15 + props.fontModifier}px Arial`;\r\n ctx.textAlign = \"left\";\r\n let textLines = wrapText(group.Comment, 330);\r\n if (\r\n group.AdventureActive !== 0 &&\r\n group.AdventureActive !== undefined\r\n ) {\r\n if (\r\n textLines.length > 2 ||\r\n (textLines.length > 1 && props.fontModifier > 0)\r\n ) {\r\n textLines = textLines.slice(0, 1);\r\n textLines[textLines.length - 1] =\r\n textLines[textLines.length - 1] + \"...\";\r\n }\r\n } else {\r\n if (textLines.length > 2 && props.fontModifier > 0) {\r\n textLines = textLines.slice(0, 2);\r\n textLines[textLines.length - 1] =\r\n textLines[textLines.length - 1] + \"...\";\r\n } else if (textLines.length > 3) {\r\n textLines = textLines.slice(0, 2);\r\n textLines[textLines.length - 1] =\r\n textLines[textLines.length - 1] + \"...\";\r\n }\r\n }\r\n for (let i = 0; i < Math.min(textLines.length, 3); i++) {\r\n ctx.fillText(\r\n textLines[i],\r\n 31,\r\n 37 +\r\n top +\r\n (props.expandedInfo ? 5 : 0) +\r\n i * (19 + props.fontModifier) +\r\n (props.expandedInfo ? group.Members.length * 21 : 0) +\r\n props.fontModifier * 1.5\r\n );\r\n }\r\n\r\n // Draw party members\r\n if (props.expandedInfo && group.Members.length) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"white\";\r\n ctx.moveTo(33, top + 20);\r\n ctx.lineTo(33, top + group.Members.length * 21 + 13);\r\n ctx.stroke();\r\n if (group.Members.length) {\r\n for (let i = 0; i < group.Members.length; i++) {\r\n ctx.fillStyle = props.highVisibility\r\n ? \"white\"\r\n : group.Eligible\r\n ? \"#f6f1d3\"\r\n : \"#988f80\";\r\n ctx.font = `${15 + props.fontModifier}px Arial`;\r\n ctx.textAlign = \"left\";\r\n let member = group.Members[i];\r\n\r\n let x = 40;\r\n let y = top + 40 + i * 21;\r\n\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"white\";\r\n ctx.moveTo(33, top + 20 + i * 21 + 14);\r\n ctx.lineTo(43, top + 20 + i * 21 + 14);\r\n ctx.stroke();\r\n\r\n // Race\r\n let raceIconBounds = getRaceIconPosition(\r\n member.Gender + \" \" + member.Race,\r\n group.Eligible\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n raceIconBounds[0],\r\n raceIconBounds[1],\r\n 18,\r\n 18,\r\n x,\r\n y - 15,\r\n 18,\r\n 18\r\n );\r\n\r\n // Name\r\n ctx.fillText(member.Name, x + 20, y);\r\n\r\n // Classes\r\n ctx.font = \"13px Arial\";\r\n ctx.textBaseline = \"alphabetic\";\r\n ctx.textAlign = \"right\";\r\n if (member.Classes != null)\r\n for (let c = 0; c < member.Classes.length; c++) {\r\n // First pass for icons\r\n let xp = x + 166 + 21 * c;\r\n let yp = y - 15;\r\n\r\n ctx.fillStyle = \"#3e4641\";\r\n ctx.fillRect(xp - 1, yp - 1, 20, 20);\r\n\r\n let classIconPosition = getClassIconPosition(\r\n member.Classes[c].Name,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n classIconPosition[0],\r\n classIconPosition[1],\r\n 18,\r\n 18,\r\n xp,\r\n yp,\r\n 18,\r\n 18\r\n );\r\n }\r\n if (member.Classes != null)\r\n for (let c = 0; c < member.Classes.length; c++) {\r\n // Second pass for levels\r\n let xp = x + 166 + 21 * c;\r\n let yp = y - 15;\r\n\r\n ctx.fillStyle = \"black\";\r\n ctx.fillText(member.Classes[c].Level, xp + 22, yp + 18);\r\n ctx.fillStyle = \"white\";\r\n ctx.fillText(member.Classes[c].Level, xp + 21, yp + 17);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Draw active time\r\n if (group.AdventureActive != null && group.AdventureActive !== 0) {\r\n let modifiedaatime = Math.max(group.AdventureActive, 60);\r\n ctx.fillStyle = props.highVisibility ? \"#5fcafc\" : \"#02adfb\";\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(\r\n \"Adventure Active: \" +\r\n Math.round(modifiedaatime / 60) +\r\n (Math.round(modifiedaatime / 60) === 1 ? \" minute\" : \" minutes\"),\r\n 200,\r\n top + lfmheight - 10\r\n );\r\n }\r\n top += lfmheight;\r\n });\r\n\r\n if (\r\n groupSelection.groupIndex !== -1 &&\r\n groupSelection.groupIndex < props.data.Groups.length\r\n ) {\r\n if (groupSelection.cursorPosition[0] < 375) {\r\n DrawPlayerOverlay(\r\n props.data.Groups[groupSelection.groupIndex],\r\n groupSelection.cursorPosition\r\n );\r\n } else {\r\n DrawQuestOverlay(\r\n props.data.Groups[groupSelection.groupIndex],\r\n groupSelection.cursorPosition\r\n );\r\n }\r\n if (attemptedJoin !== null) {\r\n DrawJoinRequestOverlay(\r\n props.data.Groups[groupSelection.groupIndex],\r\n attemptedJoin.cursorPosition\r\n );\r\n }\r\n }\r\n }\r\n\r\n function DrawPlayerOverlay(group, cursorPosition) {\r\n const SHOW_GUILD_NAME = props.showGuildNames;\r\n const GUILD_NAME_HEIGHT = 15;\r\n\r\n if (group === null) return;\r\n\r\n let estimatedBottom =\r\n cursorPosition[1] +\r\n 3 +\r\n (group.Members.length + 1) *\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) +\r\n 26;\r\n if (estimatedBottom > canvas.height) {\r\n cursorPosition[1] -= estimatedBottom - canvas.height;\r\n }\r\n\r\n let fontModifier = props.fontModifier === 0 ? 0 : 4;\r\n\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 189,\r\n 287,\r\n 2,\r\n cursorPosition[0],\r\n cursorPosition[1],\r\n 287,\r\n 2\r\n );\r\n\r\n // Each player in the party is 41px in height (+15 for guild name)\r\n let memberList = [group.Leader, ...group.Members];\r\n if (memberList !== null) {\r\n memberList.forEach((member, i) => {\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 191,\r\n 287,\r\n 41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0),\r\n cursorPosition[0],\r\n cursorPosition[1] +\r\n 2 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i,\r\n 287,\r\n 41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)\r\n );\r\n let grad = ctx.createLinearGradient(\r\n 0,\r\n cursorPosition[1] +\r\n 2 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i,\r\n 0,\r\n cursorPosition[1] +\r\n 2 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * (i + 1)\r\n );\r\n grad.addColorStop(0, \"#404947\");\r\n grad.addColorStop(0.25, \"#4d5955\");\r\n grad.addColorStop(0.75, \"#4d5955\");\r\n grad.addColorStop(1, \"#404947\");\r\n ctx.fillStyle = grad;\r\n ctx.fillRect(\r\n cursorPosition[0] + 4,\r\n cursorPosition[1] +\r\n 3 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i,\r\n 269,\r\n 39 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)\r\n );\r\n\r\n // Race\r\n if (member.Gender == \"Unknown\") member.Gender = \"Male\";\r\n let raceIconPosition = getRaceIconPosition(\r\n member.Gender + \" \" + member.Race,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n raceIconPosition[0],\r\n raceIconPosition[1],\r\n 18,\r\n 18,\r\n cursorPosition[0] + 4,\r\n cursorPosition[1] +\r\n 2 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i,\r\n 18,\r\n 18\r\n );\r\n\r\n // Name\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.font = 18 + fontModifier + \"px 'Trebuchet MS'\"; // 18px\r\n ctx.textAlign = \"left\";\r\n ctx.fillText(\r\n member.Name,\r\n cursorPosition[0] + 26,\r\n cursorPosition[1] +\r\n 3 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i +\r\n 10\r\n );\r\n let memberWidth = ctx.measureText(member.Name).width;\r\n if (NAMES.some((name) => member.Name.startsWith(name))) {\r\n memberWidth += 22;\r\n ctx.drawImage(\r\n sprite,\r\n 746,\r\n 189,\r\n 17,\r\n 18,\r\n cursorPosition[0] + 8 + memberWidth,\r\n cursorPosition[1] +\r\n 3 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i,\r\n 17,\r\n 18\r\n );\r\n }\r\n\r\n // Guild name\r\n if (SHOW_GUILD_NAME) {\r\n ctx.fillStyle = \"#b6b193\";\r\n ctx.font = `${\r\n member.Guild === \"\" ? \"italic \" : \"\"\r\n }15px 'Trebuchet MS'`;\r\n ctx.textAlign = \"left\";\r\n let wrappedguildname = wrapText(member.Guild, 200);\r\n const truncatedGuildName =\r\n wrappedguildname[0] + (wrappedguildname.length > 1 ? \"...\" : \"\");\r\n ctx.fillText(\r\n truncatedGuildName || \"No guild\",\r\n cursorPosition[0] + 26,\r\n cursorPosition[1] +\r\n 3 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i +\r\n 28\r\n );\r\n ctx.fillStyle = \"#f6f1d3\";\r\n }\r\n\r\n // Location\r\n if (member.Location != null) {\r\n let wrappedlocation = wrapText(member.Location.Name, 230);\r\n ctx.font = 12 + \"px 'Trebuchet MS'\";\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(\r\n wrappedlocation[0] + (wrappedlocation.length > 1 ? \"...\" : \"\"),\r\n cursorPosition[0] + 102,\r\n cursorPosition[1] +\r\n 3 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i +\r\n 30 +\r\n (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)\r\n );\r\n }\r\n\r\n // Level\r\n ctx.textAlign = \"center\";\r\n ctx.font = 17 + fontModifier + \"px Arial\"; // 15px\r\n ctx.fillText(\r\n member.TotalLevel,\r\n cursorPosition[0] + 4 + 256,\r\n cursorPosition[1] +\r\n 3 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i +\r\n 11\r\n );\r\n\r\n // Classes\r\n ctx.font = \"13px Arial\";\r\n ctx.textBaseline = \"alphabetic\";\r\n ctx.textAlign = \"right\";\r\n if (member.Classes !== null && member.Classes !== undefined) {\r\n for (let c = 0; c < member.Classes.length; c++) {\r\n if (\r\n member.Classes[c].Name !== \"Epic\" &&\r\n member.Classes[c].Name !== \"Legendary\"\r\n ) {\r\n // First pass for icons\r\n let xp = cursorPosition[0] + 166 + 21 * c;\r\n let yp =\r\n cursorPosition[1] +\r\n 4 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i;\r\n\r\n ctx.fillStyle = \"#3e4641\";\r\n ctx.fillRect(xp - 1, yp - 1, 20, 20);\r\n\r\n let classIconPosition = getClassIconPosition(\r\n member.Classes[c].Name,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n classIconPosition[0],\r\n classIconPosition[1],\r\n 18,\r\n 18,\r\n xp,\r\n yp,\r\n 18,\r\n 18\r\n );\r\n }\r\n }\r\n }\r\n if (member.Classes !== null && member.Classes !== undefined) {\r\n for (let c = 0; c < member.Classes.length; c++) {\r\n if (\r\n member.Classes[c].Name !== \"Epic\" &&\r\n member.Classes[c].Name !== \"Legendary\"\r\n ) {\r\n // Second pass for levels\r\n let xp = cursorPosition[0] + 166 + 21 * c;\r\n let yp =\r\n cursorPosition[1] +\r\n 4 +\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) * i;\r\n\r\n ctx.fillStyle = \"black\";\r\n ctx.fillText(member.Classes[c].Level, xp + 22, yp + 18);\r\n ctx.fillStyle = \"white\";\r\n ctx.fillText(member.Classes[c].Level, xp + 21, yp + 17);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 232,\r\n 287,\r\n 26,\r\n cursorPosition[0],\r\n cursorPosition[1] +\r\n 2 +\r\n memberList.length * (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)),\r\n 287,\r\n 26\r\n );\r\n\r\n // Comment\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillStyle = fontModifier > 0 ? \"white\" : \"#bfbfbf\";\r\n ctx.font = 15 + fontModifier + \"px Arial\"; // 15px\r\n ctx.textAlign = \"left\";\r\n let textLines = wrapText(group.Comment, 269);\r\n\r\n for (let i = 0; i < textLines.length; i++) {\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 232,\r\n 287,\r\n 23,\r\n cursorPosition[0],\r\n cursorPosition[1] +\r\n 2 +\r\n memberList.length *\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) +\r\n i * (19 + (fontModifier < 0 ? -3 : 0)),\r\n 287,\r\n 23\r\n );\r\n ctx.fillText(\r\n textLines[i],\r\n cursorPosition[0] + 4,\r\n cursorPosition[1] +\r\n memberList.length *\r\n (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) +\r\n 13 +\r\n i * (19 + (fontModifier < 0 ? -3 : 0))\r\n );\r\n }\r\n\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 255,\r\n 287,\r\n 3,\r\n cursorPosition[0],\r\n cursorPosition[1] +\r\n 2 +\r\n memberList.length * (41 + (SHOW_GUILD_NAME ? GUILD_NAME_HEIGHT : 0)) +\r\n textLines.length * (19 + (fontModifier < 0 ? -3 : 0)) +\r\n (fontModifier < 0 ? 4 : 3),\r\n 287,\r\n 3\r\n );\r\n }\r\n\r\n function DrawQuestOverlay(group, cursorPosition) {\r\n if (group === null) return;\r\n if (group.Quest == null) return;\r\n\r\n let estimatedBottom =\r\n cursorPosition[1] +\r\n 3 +\r\n 170 +\r\n 26 +\r\n (group.CharactersOnTimer\r\n ? group.CharactersOnTimer.length * 20 + 15\r\n : 0) +\r\n (group.Guess && props.showQuestGuesses ? 60 : 0);\r\n if (estimatedBottom > canvas.height) {\r\n cursorPosition[1] -= estimatedBottom - canvas.height;\r\n }\r\n let estimatedRight = cursorPosition[0] + 350;\r\n if (estimatedRight > canvas.width) {\r\n cursorPosition[0] -= estimatedRight - canvas.width;\r\n }\r\n\r\n let fontModifier = props.fontModifier === 0 ? 0 : 4;\r\n\r\n ctx.globalAlpha = 0.8;\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 189,\r\n 287,\r\n 2,\r\n cursorPosition[0],\r\n cursorPosition[1],\r\n 350,\r\n 2\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 191,\r\n 287,\r\n 10,\r\n cursorPosition[0],\r\n cursorPosition[1] + 2,\r\n 350,\r\n 10\r\n );\r\n ctx.globalAlpha = 1;\r\n\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillStyle = \"white\";\r\n\r\n let quest = group.Quest;\r\n let row = 1;\r\n\r\n // raid timers\r\n if (group.CharactersOnTimer && group.CharactersOnTimer.length > 0) {\r\n ctx.fillStyle = \"#f6d3d3\";\r\n drawOverlayBackground(row);\r\n drawOverlayTitle(\"Raid timers\", row);\r\n group.CharactersOnTimer.forEach((character) => {\r\n let wrapped = wrapText(\r\n `${character.Name} (${getTimeTillEnd(\r\n character,\r\n group.Quest.Name\r\n )})`,\r\n 220\r\n );\r\n for (let i = 0; i < wrapped.length; i++) {\r\n if (i > 0) drawOverlayBackground(row);\r\n drawOverlayInfo(wrapped[i], row);\r\n row++;\r\n drawOverlayBackground(row);\r\n }\r\n });\r\n row++;\r\n ctx.fillStyle = \"white\";\r\n }\r\n\r\n if (group.Guess && props.showQuestGuesses) {\r\n ctx.fillStyle = \"#d3f6f6\";\r\n drawOverlayBackground(row);\r\n ctx.textAlign = \"center\";\r\n ctx.font = \"italic 15px Arial\";\r\n ctx.fillText(\r\n \"The leader has not selected a quest.\",\r\n cursorPosition[0] + 175,\r\n cursorPosition[1] + 3 + 20 * row - 6\r\n );\r\n row++;\r\n\r\n drawOverlayBackground(row);\r\n ctx.fillText(\r\n \"This is the quest we think they're running\",\r\n cursorPosition[0] + 175,\r\n cursorPosition[1] + 3 + 20 * row - 6\r\n );\r\n row++;\r\n drawOverlayBackground(row);\r\n ctx.fillText(\r\n \"based on their location and comment.\",\r\n cursorPosition[0] + 175,\r\n cursorPosition[1] + 3 + 20 * row - 6\r\n );\r\n row++;\r\n ctx.fillStyle = \"white\";\r\n }\r\n\r\n if (quest.Name != null) {\r\n drawOverlayBackground(row);\r\n drawOverlayTitle(\"Quest\", row); // 1-based index\r\n let wrapped = wrapText(quest.Name, 220);\r\n for (let i = 0; i < wrapped.length; i++) {\r\n if (i > 0) drawOverlayBackground(row);\r\n drawOverlayInfo(wrapped[i], row);\r\n row++;\r\n }\r\n }\r\n\r\n if (quest.AdventureArea) {\r\n drawOverlayBackground(row);\r\n drawOverlayTitle(\"Takes place in\", row);\r\n let wrapped = wrapText(quest.AdventureArea, 220);\r\n for (let i = 0; i < wrapped.length; i++) {\r\n if (i > 0) drawOverlayBackground(row);\r\n drawOverlayInfo(wrapped[i], row);\r\n row++;\r\n }\r\n }\r\n\r\n if (quest.QuestJournalGroup) {\r\n drawOverlayBackground(row);\r\n drawOverlayTitle(\"Nearest hub\", row);\r\n let wrapped = wrapText(quest.QuestJournalGroup, 220);\r\n for (let i = 0; i < wrapped.length; i++) {\r\n if (i > 0) drawOverlayBackground(row);\r\n drawOverlayInfo(wrapped[i], row);\r\n row++;\r\n }\r\n }\r\n\r\n drawOverlayBackground(row);\r\n drawOverlayTitle(\"Level\", row);\r\n drawOverlayInfo(\r\n (quest.HeroicNormalCR != null ? quest.HeroicNormalCR + \" Heroic\" : \"\") +\r\n (quest.HeroicNormalCR != null && quest.EpicNormalCR != null\r\n ? \", \"\r\n : \"\") +\r\n (quest.EpicNormalCR != null ? quest.EpicNormalCR + \" Epic\" : \"\"),\r\n row\r\n );\r\n row++;\r\n\r\n drawOverlayBackground(row);\r\n drawOverlayTitle(\"Adventure pack\", row);\r\n let wrapped = wrapText(\r\n quest.RequiredAdventurePack || \"Free to play\",\r\n 220\r\n );\r\n for (let i = 0; i < wrapped.length; i++) {\r\n if (i > 0) drawOverlayBackground(row);\r\n drawOverlayInfo(wrapped[i], row);\r\n row++;\r\n }\r\n\r\n if (quest.Patron) {\r\n drawOverlayBackground(row);\r\n drawOverlayTitle(\"Patron\", row);\r\n drawOverlayInfo(quest.Patron ?? \"\", row);\r\n row++;\r\n }\r\n\r\n if (quest.AverageTime) {\r\n drawOverlayBackground(row);\r\n drawOverlayTitle(\"Average time\", row);\r\n drawOverlayInfo(`${Math.round(quest.AverageTime / 60)} minutes`, row);\r\n row++;\r\n }\r\n\r\n drawOverlayBackground(row);\r\n row++;\r\n drawOverlayBackground(row);\r\n ctx.textAlign = \"center\";\r\n ctx.font = \"italic 15px Arial\";\r\n ctx.fillText(\r\n \"Double-click to open the Wiki page\",\r\n cursorPosition[0] + 175,\r\n cursorPosition[1] + 3 + 20 * row - 10\r\n );\r\n\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 255,\r\n 287,\r\n 3,\r\n cursorPosition[0],\r\n cursorPosition[1] + 2 + 10 + row * 20,\r\n 350,\r\n 3\r\n ); // Close\r\n\r\n // Helper function for drawing part of the quest overlay\r\n function drawOverlayBackground(line) {\r\n ctx.globalAlpha = 0.8;\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 191,\r\n 287,\r\n 20,\r\n cursorPosition[0],\r\n cursorPosition[1] + 2 + 20 * line - 10,\r\n 350,\r\n 20\r\n ); // Background\r\n ctx.globalAlpha = 1;\r\n }\r\n\r\n function getTimeTillEnd(character, questName) {\r\n let raid = character.RaidActivity.filter((raid) =>\r\n questName.toLowerCase().includes(raid.name.toLowerCase())\r\n );\r\n if (raid.length > 0) {\r\n raid = raid[0];\r\n } else {\r\n return \"Unknown\";\r\n }\r\n\r\n let remainingMinutes = raid.remaining;\r\n const timeInDays = Math.floor(remainingMinutes / (60 * 60 * 24));\r\n remainingMinutes = remainingMinutes % (60 * 60 * 24);\r\n const timeInHours = Math.floor(remainingMinutes / (60 * 60));\r\n remainingMinutes = remainingMinutes % (60 * 60);\r\n const timeInMinutes = Math.floor(remainingMinutes / 60);\r\n let returnStringArray = [];\r\n if (timeInDays != 0) {\r\n returnStringArray.push(`${timeInDays}d`);\r\n }\r\n if (timeInHours != 0) {\r\n returnStringArray.push(`${timeInHours}h`);\r\n }\r\n if (timeInMinutes != 0) {\r\n returnStringArray.push(`${timeInMinutes}m`);\r\n }\r\n\r\n return returnStringArray.join(\", \");\r\n }\r\n\r\n // Helper function for drawing the title of a quest info field\r\n function drawOverlayTitle(text, line) {\r\n if (text == null) return;\r\n ctx.font = \"bold 16px Arial\";\r\n ctx.textAlign = \"right\";\r\n ctx.fillText(\r\n text + \":\",\r\n cursorPosition[0] + 140,\r\n cursorPosition[1] + 3 + 20 * line\r\n );\r\n }\r\n\r\n // Helper function for drawing the content of a quest info field\r\n function drawOverlayInfo(text, line) {\r\n if (text == null) return;\r\n ctx.textAlign = \"left\";\r\n ctx.font = \"15px Arial\";\r\n ctx.fillText(\r\n text,\r\n cursorPosition[0] + 150,\r\n cursorPosition[1] + 3 + 20 * line\r\n );\r\n }\r\n }\r\n\r\n function DrawJoinRequestOverlay(group, cursorPosition) {\r\n ctx.font = `${18 + props.fontModifier}px 'Trebuchet MS'`;\r\n let displayText = JOIN_REQUEST_MESSAGES[\r\n Math.floor(Math.random() * JOIN_REQUEST_MESSAGES.length)\r\n ].replace(\"{0}\", group.Leader?.Name);\r\n let textWidth = ctx.measureText(displayText).width;\r\n let bounds = {\r\n x: Math.max(30, cursorPosition[0] - textWidth / 2),\r\n y: cursorPosition[1] - 20,\r\n w: textWidth + 20,\r\n h: 40,\r\n };\r\n ctx.globalAlpha = 0.8;\r\n ctx.fillStyle = \"#000000\";\r\n ctx.fillRect(bounds.x, bounds.y, bounds.w, bounds.h);\r\n ctx.fillStyle = \"#ffffff\";\r\n ctx.lineWidth = \"2\";\r\n ctx.beginPath();\r\n ctx.rect(bounds.x, bounds.y, bounds.w, bounds.h);\r\n ctx.stroke();\r\n ctx.globalAlpha = 1;\r\n\r\n ctx.fillStyle = \"#f9f3d7\";\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(\r\n displayText,\r\n bounds.x + bounds.w / 2,\r\n bounds.y + bounds.h / 2\r\n );\r\n }\r\n\r\n function stringToInt(string, mod = 1) {\r\n if (string == null) return 0;\r\n let total = 0;\r\n for (let i = 0; i < string.length; i++) {\r\n total += string.charCodeAt(i) * (i * mod);\r\n }\r\n return total;\r\n }\r\n\r\n // Helper function for wrapping text\r\n function wrapText(text, maxWidth) {\r\n if (text === null) return \"\";\r\n let words = text.split(\" \");\r\n let lines = [];\r\n let currentLine = words[0];\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n let word = words[i];\r\n let width = ctx.measureText(currentLine + \" \" + word).width;\r\n if (width < maxWidth) {\r\n currentLine += \" \" + word;\r\n } else {\r\n lines.push(currentLine);\r\n currentLine = word;\r\n }\r\n }\r\n lines.push(currentLine);\r\n return lines;\r\n }\r\n\r\n // Helper function for getting group difficulty\r\n function getGroupDifficulty(group) {\r\n if (!group.Guess && group.Difficulty != \"Reaper\") {\r\n return group.Difficulty;\r\n }\r\n\r\n let sanitized = group.Comment.toLowerCase();\r\n let normalpattern = /(\\bln\\b)(\\ben\\b)|(\\bnormal\\b)/;\r\n let hardpattern = /(\\blh\\b)(\\beh\\b)|(\\bhard\\b)/;\r\n let elitepattern = /(\\ble\\b)(\\bee\\b)|(\\belite\\b)/;\r\n let reaperpattern = /(\\br\\b)|(\\breaper\\b)/;\r\n\r\n if (group.Guess) {\r\n if (normalpattern.test(sanitized)) {\r\n return \"Normal\";\r\n }\r\n if (hardpattern.test(sanitized)) {\r\n return \"Hard\";\r\n }\r\n if (elitepattern.test(sanitized)) {\r\n return \"Elite\";\r\n }\r\n }\r\n\r\n let skullpattern1 = /\\br(\\d+\\+?)[\\b]?/;\r\n let skullpattern2 = /reaper (\\d+\\+?)/;\r\n let skullpattern3 = /(\\d+\\+?) skull/;\r\n let skullpattern4 = /\\b(r\\+)[\\b]?/;\r\n\r\n let skullcount = 0;\r\n if (skullpattern1.test(sanitized)) {\r\n let num = skullpattern1.exec(sanitized);\r\n skullcount = num[1];\r\n }\r\n\r\n if (skullpattern2.test(sanitized)) {\r\n let num = skullpattern2.exec(sanitized);\r\n skullcount = num[1];\r\n }\r\n\r\n if (skullpattern3.test(sanitized)) {\r\n let num = skullpattern3.exec(sanitized);\r\n skullcount = num[1];\r\n }\r\n\r\n if (skullpattern4.test(sanitized)) {\r\n skullcount = \"1+\";\r\n }\r\n\r\n if (+skullcount !== 0) {\r\n if (+skullcount > 10) {\r\n skullcount = 9001;\r\n }\r\n return `Reaper ${skullcount}`;\r\n }\r\n\r\n if (group.Guess) {\r\n if (reaperpattern.test(sanitized)) {\r\n return \"Reaper\";\r\n }\r\n return \"Normal\";\r\n }\r\n return \"Reaper\";\r\n }\r\n\r\n function isFeytwisted(group) {\r\n if (\r\n (group.Comment.toLowerCase().includes(\"feytwisted\") ||\r\n group.Comment.toLowerCase().includes(\"fey chest\")) &&\r\n group.Quest?.RequiredAdventurePack.toLowerCase().includes(\"feywild\")\r\n )\r\n return true;\r\n return false;\r\n }\r\n\r\n // Helper function for getting race icon position\r\n function getRaceIconPosition(race, eligible) {\r\n let xsrc = 0;\r\n let ysrc = 0;\r\n switch (race) {\r\n case \"Female Aasimar\":\r\n case \"Female Aasimar Scourge\":\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case \"Female Dragonborn\":\r\n xsrc = 18;\r\n ysrc = 0;\r\n break;\r\n case \"Female Drow Elf\":\r\n xsrc = 36;\r\n ysrc = 0;\r\n break;\r\n case \"Female Dwarf\":\r\n xsrc = 54;\r\n ysrc = 0;\r\n break;\r\n case \"Female Elf\":\r\n case \"Female Sun Elf\":\r\n case \"Female Wood Elf\":\r\n xsrc = 72;\r\n ysrc = 0;\r\n break;\r\n case \"Female Gnome\":\r\n case \"Female Deep Gnome\":\r\n xsrc = 0;\r\n ysrc = 18;\r\n break;\r\n case \"Female Half Elf\":\r\n xsrc = 18;\r\n ysrc = 18;\r\n break;\r\n case \"Female Halfling\":\r\n xsrc = 36;\r\n ysrc = 18;\r\n break;\r\n case \"Female Half Orc\":\r\n xsrc = 54;\r\n ysrc = 18;\r\n break;\r\n case \"Female Human\":\r\n case \"Female Shadar-kai\":\r\n case \"Female Purple Dragon Knight\":\r\n xsrc = 72;\r\n ysrc = 18;\r\n break;\r\n case \"Female Shifter\":\r\n case \"Female Razorclaw Shifter\":\r\n xsrc = 90;\r\n ysrc = 18;\r\n break;\r\n case \"Female Tiefling\":\r\n case \"Female Tiefling Scoundrel\":\r\n xsrc = 0;\r\n ysrc = 36;\r\n break;\r\n case \"Female Warforged\":\r\n case \"Female Bladeforged\":\r\n xsrc = 18;\r\n ysrc = 36;\r\n break;\r\n case \"Male Aasimar\":\r\n case \"Male Aasimar Scourge\":\r\n xsrc = 36;\r\n ysrc = 36;\r\n break;\r\n case \"Male Dragonborn\":\r\n xsrc = 54;\r\n ysrc = 36;\r\n break;\r\n case \"Male Drow Elf\":\r\n xsrc = 72;\r\n ysrc = 36;\r\n break;\r\n case \"Male Dwarf\":\r\n xsrc = 0;\r\n ysrc = 54;\r\n break;\r\n case \"Male Elf\":\r\n case \"Male Sun Elf\":\r\n case \"Male Wood Elf\":\r\n xsrc = 18;\r\n ysrc = 54;\r\n break;\r\n case \"Male Gnome\":\r\n case \"Male Deep Gnome\":\r\n xsrc = 36;\r\n ysrc = 54;\r\n break;\r\n case \"Male Half Elf\":\r\n xsrc = 54;\r\n ysrc = 54;\r\n break;\r\n case \"Male Halfling\":\r\n xsrc = 72;\r\n ysrc = 54;\r\n break;\r\n case \"Male Half Orc\":\r\n xsrc = 0;\r\n ysrc = 72;\r\n break;\r\n case \"Male Human\":\r\n case \"Male Shadar-kai\":\r\n case \"Male Purple Dragon Knight\":\r\n xsrc = 18;\r\n ysrc = 72;\r\n break;\r\n case \"Male Shifter\":\r\n case \"Male Razorclaw Shifter\":\r\n xsrc = 90;\r\n ysrc = 0;\r\n break;\r\n case \"Male Tiefling\":\r\n case \"Male Tiefling Scoundrel\":\r\n xsrc = 36;\r\n ysrc = 72;\r\n break;\r\n case \"Male Warforged\":\r\n case \"Male Bladeforged\":\r\n xsrc = 54;\r\n ysrc = 72;\r\n break;\r\n case \"Male Tabaxi\":\r\n case \"Female Tabaxi\":\r\n case \"Male Tabaxi Trailblazer\":\r\n case \"Female Tabaxi Trailblazer\":\r\n xsrc = 90;\r\n ysrc = 36;\r\n break;\r\n default:\r\n xsrc = 72;\r\n ysrc = 72;\r\n break;\r\n }\r\n return [xsrc + (eligible ? 493 : 601), ysrc + 189];\r\n }\r\n\r\n // Helper function for getting race icon position\r\n function getClassIconPosition(classname, eligible) {\r\n let xsrc = 0;\r\n let ysrc = 0;\r\n switch (classname) {\r\n case \"Alchemist\": // 70032AFE\r\n xsrc = 21;\r\n ysrc = 0;\r\n break;\r\n case \"Artificer\": // 700148CE\r\n xsrc = 42;\r\n ysrc = 42;\r\n break;\r\n case \"Barbarian\": // 7000006B\r\n xsrc = 84;\r\n ysrc = 0;\r\n break;\r\n case \"Bard\": // 7000006C\r\n xsrc = 0;\r\n ysrc = 42;\r\n break;\r\n case \"Cleric\": // 7000006D\r\n xsrc = 42;\r\n ysrc = 21;\r\n break;\r\n case \"Druid\": // 70016ADB\r\n xsrc = 63;\r\n ysrc = 42;\r\n break;\r\n case \"Favored Soul\": // 7000C5CE\r\n xsrc = 63;\r\n ysrc = 0;\r\n break;\r\n case \"Fighter\": // 7000006E\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case \"Monk\": // 70006BF5\r\n xsrc = 21;\r\n ysrc = 42;\r\n break;\r\n case \"Paladin\": // 7000006F\r\n xsrc = 42;\r\n ysrc = 0;\r\n break;\r\n case \"Ranger\": // 70000070\r\n xsrc = 21;\r\n ysrc = 21;\r\n break;\r\n case \"Rogue\": // 70000071\r\n xsrc = 0;\r\n ysrc = 21;\r\n break;\r\n case \"Sorcerer\": // 7000000B\r\n xsrc = 84;\r\n ysrc = 21;\r\n break;\r\n case \"Warlock\": // 7000C5DA\r\n xsrc = 84;\r\n ysrc = 42;\r\n break;\r\n case \"Wizard\": // 7000000E\r\n xsrc = 63;\r\n ysrc = 21;\r\n break;\r\n case \"Epic\": // 7001B1A3\r\n case \"Legendary\":\r\n xsrc = 423 - (eligible ? 0 : 103);\r\n ysrc = 0;\r\n break;\r\n }\r\n return [xsrc + 287 + (eligible ? 0 : 103), ysrc + 189];\r\n }\r\n }, [\r\n props.data,\r\n props.fontModifier,\r\n props.highVisibility,\r\n isImageLoaded,\r\n groupSelection.groupIndex,\r\n groupSelection.side,\r\n groupSelection.doubleClick,\r\n props.showCompletionPercentage,\r\n props.showMemberCount,\r\n props.showQuestGuesses,\r\n props.showQuestTips,\r\n attemptedJoin,\r\n ]);\r\n\r\n return (\r\n \r\n setIsImageLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n {EVENT_THEME === \"revels\" && (\r\n setIsPumpkinLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n )}\r\n {EVENT_THEME === \"revels\" && (\r\n setIsCobwebLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n )}\r\n {EVENT_THEME === \"revels\" && (\r\n setIsGhostLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n )}\r\n {EVENT_THEME === \"revels\" && (\r\n setIsWallLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n )}\r\n {props.children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CanvasLfmPanel;\r\n","export default \"data:image/png;base64,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\"","import React from \"react\";\r\nimport { Slider, Rail, Handles, Tracks, Ticks } from \"react-compound-slider\";\r\n\r\nconst sliderStyle = {\r\n // Give the slider some width\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: 50,\r\n};\r\n\r\nconst MAX_LEVEL = 32;\r\n\r\nexport function Handle({ handle: { id, value, percent }, getHandleProps }) {\r\n return (\r\n \r\n
{value}
\r\n \r\n );\r\n}\r\n\r\nfunction Track({ source, target, getTrackProps }) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst LevelRangeSlider = (props) => {\r\n return (\r\n \r\n \r\n {({ getRailProps }) => (\r\n
\r\n )}\r\n \r\n \r\n {({ handles, getHandleProps }) => (\r\n
\r\n {handles.map((handle) => (\r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n \r\n {({ tracks, getTrackProps }) => (\r\n
\r\n {tracks.map(({ id, source, target }) => (\r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default LevelRangeSlider;\r\n","import React from \"react\";\r\n\r\nconst Group = (props) => {\r\n const classnames = [\r\n { Name: \"Alchemist\", Short: \"Alc\" },\r\n { Name: \"Artificer\", Short: \"Art\" },\r\n { Name: \"Barbarian\", Short: \"Barb\" },\r\n { Name: \"Bard\", Short: \"Brd\" },\r\n { Name: \"Cleric\", Short: \"Clr\" },\r\n { Name: \"Druid\", Short: \"Drd\" },\r\n { Name: \"Favored Soul\", Short: \"FvS\" },\r\n { Name: \"Fighter\", Short: \"Ftr\" },\r\n { Name: \"Monk\", Short: \"Mnk\" },\r\n { Name: \"Paladin\", Short: \"Pal\" },\r\n { Name: \"Ranger\", Short: \"Rgr\" },\r\n { Name: \"Rogue\", Short: \"Rog\" },\r\n { Name: \"Sorcerer\", Short: \"Sorc\" },\r\n { Name: \"Warlock\", Short: \"Wlk\" },\r\n { Name: \"Wizard\", Short: \"Wiz\" },\r\n ];\r\n\r\n function GetShortName(cls) {\r\n let shortname = \"\";\r\n classnames.forEach((obj) => {\r\n if (obj.Name === cls) shortname = obj.Short;\r\n });\r\n return shortname || cls;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n {props.group.Leader.Name}\r\n \r\n {props.group.MinimumLevel && props.group.MaximumLevel && (\r\n \r\n {props.group.MinimumLevel} - {props.group.MaximumLevel}\r\n \r\n )}\r\n
\r\n {props.group.Quest ? (\r\n \r\n {props.group.Quest.Name} ({props.group.Difficulty})\r\n \r\n ) : (\r\n \r\n )}\r\n {props.group.Comment && (\r\n \"{props.group.Comment}\"\r\n )}\r\n {props.group.AdventureActive !== 0 &&\r\n props.group.AdventureActive !== undefined && (\r\n \r\n Adventure Active: {Math.round(props.group.AdventureActive / 60)}{\" \"}\r\n minute\r\n {Math.round(props.group.AdventureActive / 60) !== 1 ? \"s\" : \"\"}\r\n \r\n )}\r\n {props.expanded ? (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {props.group.Leader.Name}\r\n \r\n \r\n {props.group.Leader.Classes &&\r\n props.group.Leader.Classes.map((cls, i) => (\r\n \r\n {i !== 0 && \" / \"}\r\n {GetShortName(cls.Name)} {cls.Level}\r\n \r\n ))}\r\n \r\n \r\n {props.group.Leader.Location &&\r\n props.group.Leader.Location.Name}\r\n \r\n \r\n {props.group.Members &&\r\n props.group.Members.map((member, i) => (\r\n \r\n \r\n {member.Name}\r\n \r\n \r\n {member.Classes &&\r\n member.Classes.map((cls, i) => (\r\n \r\n {i !== 0 && \" / \"}\r\n {GetShortName(cls.Name)} {cls.Level}\r\n \r\n ))}\r\n \r\n \r\n {member.Location.Name}\r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n ) : (\r\n props.group.Members.length > 0 && (\r\n \r\n Click to view all {props.group.Members.length + 1} members\r\n \r\n )\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Group;\r\n","import { getConfig, getValueFromLabel } from \"../services/CaaS\";\r\n\r\nasync function getFeatureFlag(flag, lifetime) {\r\n const caas = await getConfig(lifetime);\r\n return getValueFromLabel(caas, flag) === \"true\";\r\n}\r\n\r\nexport { getFeatureFlag };\r\n","import React from \"react\";\r\nimport { getFeatureFlag } from \"../constants/FeatureFlag\";\r\n\r\nconst FeatureFlagHook = (flag, lifetime) => {\r\n const [result, setResult] = React.useState(null);\r\n\r\n React.useEffect(() => {\r\n async function waitForFlags() {\r\n let val = await getFeatureFlag(flag, lifetime);\r\n setResult(val);\r\n }\r\n waitForFlags();\r\n }, []);\r\n\r\n return result;\r\n};\r\n\r\nexport default FeatureFlagHook;\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgEdit(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgEdit);\nexport default __webpack_public_path__ + \"static/media/edit.8fc9c56e.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { Submit } from \"../../services/CommunicationService\";\r\nimport { Fetch, VerifyServerLfmData, Post } from \"../../services/DataLoader\";\r\nimport { ReactComponent as CloseSVG } from \"../../assets/global/close.svg\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport CanvasLfmPanel from \"./CanvasLfmPanel\";\r\nimport LevelRangeSlider from \"./LevelRangeSlider\";\r\nimport FilterBar from \"../global/FilterBar\";\r\nimport Group from \"./Group\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport $ from \"jquery\";\r\nimport { Link } from \"react-router-dom\";\r\nimport FeatureFlagHook from \"../../hooks/FeatureFlagHook\";\r\nimport PageMessage from \"../global/PageMessage\";\r\n\r\nconst Panel = (props) => {\r\n const REFRESH_CHARACTER_LEVEL_INTERVAL = 60; //seconds\r\n const MAX_LEVEL = 32;\r\n\r\n const noReport = FeatureFlagHook(\"no-report\", 1000 * 60 * 60);\r\n\r\n // Download canvas\r\n var download = function () {\r\n // Redraw panel without names\r\n var link = document.createElement(\"a\");\r\n link.download = `ddo-lfm-panel.png`;\r\n link.href = document.getElementById(\"lfm-canvas\").toDataURL();\r\n link.click();\r\n };\r\n\r\n const [theme, setTheme] = React.useState(true);\r\n const [reported, setReported] = React.useState(false);\r\n\r\n const [failedAttemptCount, setFailedAttemptCount] = React.useState(0);\r\n const failedAttemptRef = React.useRef(failedAttemptCount);\r\n failedAttemptRef.current = failedAttemptCount;\r\n\r\n const [serverStatus, setServerStatus] = React.useState(null);\r\n const serverStatusRef = React.useRef(serverStatus);\r\n serverStatusRef.current = serverStatus;\r\n\r\n const [ignoreServerStatus, setIgnoreServerStatus] = React.useState(false);\r\n const ignoreServerStatusRef = React.useRef(ignoreServerStatus);\r\n ignoreServerStatusRef.current = ignoreServerStatus;\r\n\r\n const [unfilteredServerData, setUnfilteredServerData] = React.useState(null);\r\n const [filteredServerData, setFilteredServerData] = React.useState(null);\r\n const [showNotEligible, setShowNotEligible] = React.useState(true);\r\n const [adjustedGroupCount, setAdjustedGroupCount] = React.useState(4);\r\n const [fontModifier, setFontModifier] = React.useState();\r\n const [highVisibility, setHighVisibility] = React.useState();\r\n const [alternativeLook, setAlternativeLook] = React.useState();\r\n const [minimumLevel, setMinimumLevel] = React.useState(1);\r\n const [maximumLevel, setMaximumLevel] = React.useState(MAX_LEVEL);\r\n const [sortAscending, setSortAscending] = React.useState();\r\n const [showEligibleCharacters, setShowEligibleCharacters] =\r\n React.useState(false);\r\n const [showGuildNames, setShowGuildNames] = React.useState(false);\r\n const [showCompletionPercentage, setShowCompletionPercentage] =\r\n React.useState(false);\r\n const [showMemberCount, setShowMemberCount] = React.useState(true);\r\n const [showQuestGuesses, setShowQuestGuesses] = React.useState(true);\r\n const [showQuestTips, setShowQuestTips] = React.useState(true);\r\n const sortAscendingRef = React.useRef(sortAscending);\r\n sortAscendingRef.current = sortAscending;\r\n const [showRaidTimerIndicator, setShowRaidTimerIndicator] =\r\n React.useState(false);\r\n const [filterBasedOnMyLevel, setFilterBasedOnMyLevel] = React.useState(false);\r\n const [characterIds, setCharacterIds] = React.useState([]);\r\n const characterIdsRef = React.useRef(characterIds);\r\n characterIdsRef.current = characterIds;\r\n const [myCharacters, setMyCharacters] = React.useState(null);\r\n const [myCharactersWithRaidActivity, setMyCharactersWithRaidActivity] =\r\n React.useState(null);\r\n const [lastCharacterLookupTime, setLastCharacterLookupTime] =\r\n React.useState(0);\r\n const lastCharacterLookupTimeRef = React.useRef(lastCharacterLookupTime);\r\n lastCharacterLookupTimeRef.current = lastCharacterLookupTime;\r\n const [usingCachedCharacterData, setUsingCachedCharacterData] =\r\n React.useState(false);\r\n const usingCachedCharacterDataRef = React.useRef(usingCachedCharacterData);\r\n usingCachedCharacterDataRef.current = usingCachedCharacterData;\r\n const [hiddenTimerIds, setHiddenTimerIds] = React.useState([]);\r\n const [failedToFetchRaidActivity, setFailedToFetchRaidActivity] =\r\n React.useState(false);\r\n const [failedToFetchCharacters, setFailedToFetchCharacters] =\r\n React.useState(false);\r\n\r\n async function getGroupTableCount() {\r\n return Fetch(\"https://api.ddoaudit.com/grouptablecount\", 5000)\r\n .then((val) => {\r\n if (val.Count != null) {\r\n return val.Count;\r\n } else {\r\n return -1;\r\n }\r\n })\r\n .catch((err) => {\r\n return -1;\r\n });\r\n }\r\n\r\n function getServerNamePossessive() {\r\n return `${props.server}${props.server === \"Thelanis\" ? \"'\" : \"'s\"}`;\r\n }\r\n\r\n async function appendMyRaidTimers() {\r\n let ret = new Promise((resolve, reject) => {\r\n if (myCharacters != null && myCharacters.length !== 0) {\r\n let lookups = [];\r\n let returnedCharacters = [];\r\n myCharacters.forEach((character) => {\r\n lookups.push(\r\n Post(\r\n \"https://api.ddoaudit.com/players/raidactivity\",\r\n { playerid: character.PlayerId },\r\n 10000\r\n )\r\n .then((res) => {\r\n returnedCharacters.push({\r\n ...character,\r\n RaidActivity: res,\r\n });\r\n setTimeout(() => setFailedToFetchRaidActivity(false), 1000);\r\n })\r\n .catch(() => {\r\n setTimeout(() => setFailedToFetchRaidActivity(true), 1000);\r\n setMyCharactersWithRaidActivity(myCharacters);\r\n Log(\r\n \"Failed to fetch raid timers for LFM\",\r\n `Timeout for ${character.Name}`\r\n );\r\n })\r\n );\r\n });\r\n\r\n if (lookups.length !== 0) {\r\n Promise.all(lookups).then(() => {\r\n // remove raids that are off timer (negative)\r\n returnedCharacters.forEach((character) => {\r\n character.RaidActivity = character.RaidActivity.filter(\r\n (raid) => raid.remaining > 0\r\n );\r\n });\r\n\r\n // remove the first instance of duplicate raids\r\n returnedCharacters.forEach((character) => {\r\n character.RaidActivity.sort((a, b) => a.remaining - b.remaining);\r\n let raids = [];\r\n for (let i = character.RaidActivity.length - 1; i >= 0; i--) {\r\n if (raids.includes(character.RaidActivity[i].name)) {\r\n character.RaidActivity = character.RaidActivity.filter(\r\n (_, index) => i != index\r\n );\r\n } else {\r\n raids.push(character.RaidActivity[i].name);\r\n }\r\n }\r\n });\r\n\r\n // remove raids hidden by the user\r\n returnedCharacters.forEach((character) => {\r\n character.RaidActivity = character.RaidActivity.filter(\r\n (raid) => !hiddenTimerIds.includes(raid.id)\r\n );\r\n });\r\n\r\n returnedCharacters.sort(\r\n (a, b) => b.RaidActivity?.length - a.RaidActivity?.length\r\n );\r\n setMyCharactersWithRaidActivity(returnedCharacters);\r\n resolve();\r\n });\r\n }\r\n } else {\r\n setMyCharactersWithRaidActivity([]);\r\n resolve();\r\n }\r\n });\r\n return ret;\r\n }\r\n\r\n React.useEffect(() => {\r\n appendMyRaidTimers();\r\n }, [myCharacters]);\r\n\r\n async function getMyCharacters() {\r\n let ret = new Promise((resolve, reject) => {\r\n if (!characterIdsRef.current || characterIdsRef.current.length == 0) {\r\n setMyCharacters([]);\r\n resolve();\r\n } else {\r\n if (\r\n new Date().getTime() - lastCharacterLookupTimeRef.current >\r\n 1000 * REFRESH_CHARACTER_LEVEL_INTERVAL ||\r\n usingCachedCharacterDataRef.current\r\n ) {\r\n setLastCharacterLookupTime(new Date().getTime());\r\n Post(\r\n \"https://api.ddoaudit.com/players/lookup\",\r\n { playerids: characterIdsRef.current },\r\n 1000\r\n )\r\n .then((response) => {\r\n if (!response.error) {\r\n setUsingCachedCharacterData(false);\r\n setFailedToFetchCharacters(false);\r\n setMyCharacters(response);\r\n localStorage.setItem(\r\n \"last-successful-character-response\",\r\n JSON.stringify(response)\r\n );\r\n }\r\n })\r\n .catch(() => {\r\n const localstore = localStorage.getItem(\r\n \"last-successful-character-response\"\r\n );\r\n setUsingCachedCharacterData(true);\r\n setMyCharacters(JSON.parse(localstore || \"[]\"));\r\n setTimeout(() => setFailedToFetchCharacters(true), 1000);\r\n Log(\r\n \"Failed to fetch character data for LFM\",\r\n `${localstore ? \"Fallback: \" + localstore : \"No fallback data\"}`\r\n );\r\n })\r\n .finally(() => resolve());\r\n } else {\r\n resolve();\r\n }\r\n }\r\n });\r\n return ret;\r\n }\r\n\r\n let recheck;\r\n function RefreshLfms() {\r\n if (props.server === null) return;\r\n Fetch(\r\n \"https://api.ddoaudit.com/gamestatus/serverstatus\",\r\n 5000 + failedAttemptRef.current * 500\r\n )\r\n .then((val) => {\r\n let serverstatus = false;\r\n if (val.hasOwnProperty(\"Worlds\")) {\r\n val.Worlds.forEach((world) => {\r\n if (world.Name.toLowerCase() === props.server.toLowerCase()) {\r\n if (world.Status === 1) {\r\n serverstatus = true;\r\n setServerStatus(true);\r\n } else {\r\n serverstatus = false;\r\n setServerStatus(false);\r\n }\r\n }\r\n });\r\n } else {\r\n serverstatus = false;\r\n setServerStatus(false);\r\n }\r\n if (serverstatus === true || ignoreServerStatusRef.current) {\r\n getMyCharacters().finally(() => {\r\n Fetch(\r\n `https://api.ddoaudit.com/groups/${props.server.toLowerCase()}`,\r\n 5000 + failedAttemptRef.current * 500\r\n )\r\n .then((val) => {\r\n if (VerifyServerLfmData(val)) {\r\n props.triggerPopup(null);\r\n failedAttemptRef.current = 0;\r\n setFailedAttemptCount(failedAttemptRef.current);\r\n setUnfilteredServerData(val);\r\n } else {\r\n failedAttemptRef.current++;\r\n setFailedAttemptCount(failedAttemptRef.current);\r\n if (failedAttemptRef.current > 5) {\r\n props.triggerPopup({\r\n title: \"Something went wrong\",\r\n message:\r\n \"Pretty descriptive, I know. First try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: `GL127 Bad group data: ${\r\n val ? JSON.stringify(val) : \"null\"\r\n }`,\r\n });\r\n } else {\r\n recheck = setTimeout(() => {\r\n RefreshLfms();\r\n }, 200);\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n failedAttemptRef.current++;\r\n setFailedAttemptCount(failedAttemptRef.current);\r\n if (failedAttemptRef.current > 5) {\r\n getGroupTableCount().then((result) => {\r\n let title = \"\";\r\n let message = \"\";\r\n switch (result) {\r\n case -1:\r\n // Couldn't connect or errored\r\n title = \"Couldn't fetch group data\";\r\n message =\r\n \"First try refreshing the page. If the issue continues, please report it.\";\r\n break;\r\n case 0:\r\n // No groups in table. Server offline?\r\n title = \"No group data found\";\r\n message =\r\n \"The server appears to be online, but we've lost connection. Please try again later.\";\r\n break;\r\n default:\r\n title = \"Something went wrong\";\r\n message =\r\n \"Pretty descriptive, I know. First try refreshing the page. If the issue continues, please report it.\";\r\n break;\r\n }\r\n props.triggerPopup({\r\n title: title,\r\n message: message,\r\n submessage: err && err.toString(),\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: `GL171 Group data generic error (timeout?): ${\r\n err && err.toString()\r\n }`,\r\n });\r\n });\r\n } else {\r\n recheck = setTimeout(() => {\r\n RefreshLfms();\r\n }, 250);\r\n }\r\n });\r\n });\r\n }\r\n })\r\n .catch((err) => {\r\n failedAttemptRef.current++;\r\n setFailedAttemptCount(failedAttemptRef.current);\r\n if (failedAttemptRef.current > 5) {\r\n props.triggerPopup({\r\n title: \"Couldn't fetch server data\",\r\n message:\r\n \"First try refreshing the page. If the issue continues, please report it.\",\r\n submessage: (err && err.toString()) || \"Server status timeout\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: `GL196 Server status generic errr (timeout?): ${\r\n err && err.toString()\r\n }`,\r\n });\r\n } else {\r\n recheck = setTimeout(() => {\r\n RefreshLfms();\r\n }, 250);\r\n }\r\n });\r\n }\r\n\r\n let refreshLfmsTimeout;\r\n React.useEffect(() => {\r\n clearInterval(refreshLfmsTimeout);\r\n RefreshLfms();\r\n refreshLfmsTimeout = setInterval(RefreshLfms, 5000);\r\n\r\n return function cleanup() {\r\n clearInterval(refreshLfmsTimeout);\r\n };\r\n }, [props.server]);\r\n\r\n const lastManualLookupTimeRef = React.useRef(0);\r\n const refreshButtonAngleRef = React.useRef(null);\r\n function refreshButtonHandler() {\r\n if (Date.now() - lastManualLookupTimeRef.current > 1000) {\r\n setLastCharacterLookupTime(0);\r\n RefreshLfms();\r\n refreshButtonAngleRef.current += 360;\r\n $(\"#lfm-refresh-button\").css({\r\n transform: `rotate(${refreshButtonAngleRef.current}deg)`,\r\n });\r\n if (failedToFetchRaidActivity) {\r\n Log(\"Manual LFM refresh\", \"After raid activity lookup failure\");\r\n } else if (failedToFetchCharacters) {\r\n Log(\"Manual LFM refresh\", \"After character lookup failure\");\r\n } else {\r\n Log(\"Manual LFM refresh\", \"\");\r\n }\r\n lastManualLookupTimeRef.current = Date.now();\r\n }\r\n }\r\n\r\n // Helper function returns the character on timer for a raid\r\n function getTimers(group) {\r\n let characters = [];\r\n if (\r\n myCharactersWithRaidActivity &&\r\n myCharactersWithRaidActivity.length > 0 &&\r\n group.Quest != null\r\n ) {\r\n myCharactersWithRaidActivity.forEach((character) => {\r\n if (character.RaidActivity) {\r\n character.RaidActivity.forEach((raid) => {\r\n if (\r\n (raid.questid === group.Quest.Id ||\r\n raid.questid === group.Quest.AltId) &&\r\n raid.remaining &&\r\n character.Server === props.server\r\n ) {\r\n characters.push(character);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n return characters;\r\n }\r\n\r\n React.useEffect(() => {\r\n if (unfilteredServerData === null) return;\r\n let groups = unfilteredServerData.Groups;\r\n let filteredgroups = [];\r\n groups.forEach((group) => {\r\n let levelpass = false;\r\n if (filterBasedOnMyLevel) {\r\n let eligibleCharacters = [];\r\n myCharacters.forEach((character) => {\r\n if (\r\n group.MinimumLevel <= character.TotalLevel &&\r\n group.MaximumLevel >= character.TotalLevel &&\r\n character.Server === props.server\r\n ) {\r\n eligibleCharacters.push(character.Name);\r\n }\r\n });\r\n levelpass = eligibleCharacters.length > 0;\r\n group.EligibleCharacters = eligibleCharacters;\r\n } else {\r\n levelpass =\r\n (group.MinimumLevel >= minimumLevel &&\r\n group.MinimumLevel <= maximumLevel) ||\r\n (group.MaximumLevel >= minimumLevel &&\r\n group.MaximumLevel <= maximumLevel) ||\r\n (group.MinimumLevel <= minimumLevel &&\r\n group.MaximumLevel >= maximumLevel);\r\n }\r\n group.Eligible = levelpass || group.Leader?.Name === \"DDO Audit\";\r\n if (group.Eligible || showNotEligible) {\r\n filteredgroups.push(group);\r\n }\r\n\r\n // check raid timers\r\n if (\r\n showRaidTimerIndicator &&\r\n myCharactersWithRaidActivity != null &&\r\n myCharactersWithRaidActivity.length > 0\r\n ) {\r\n const charactersOnTimer = getTimers(group);\r\n if (charactersOnTimer.length > 0) {\r\n group.CharactersOnTimer = charactersOnTimer;\r\n }\r\n } else {\r\n group.CharactersOnTimer = null;\r\n }\r\n });\r\n setFilteredServerData({\r\n ...unfilteredServerData,\r\n Groups: filteredgroups.sort((a, b) =>\r\n sortAscending\r\n ? a.MaximumLevel - b.MaximumLevel\r\n : b.MaximumLevel - a.MaximumLevel\r\n ),\r\n });\r\n }, [\r\n unfilteredServerData,\r\n minimumLevel,\r\n maximumLevel,\r\n filterBasedOnMyLevel,\r\n sortAscending,\r\n showNotEligible,\r\n showEligibleCharacters,\r\n showRaidTimerIndicator,\r\n myCharactersWithRaidActivity,\r\n ]);\r\n\r\n function handleCanvasSort() {\r\n sortAscendingRef.current = !sortAscendingRef.current;\r\n if (!props.minimal) {\r\n localStorage.setItem(\"sort-order\", sortAscendingRef.current);\r\n }\r\n setSortAscending((sortAscending) => !sortAscending);\r\n }\r\n\r\n function IsExpanded(group) {\r\n let val = false;\r\n expandedGroups.forEach((g) => {\r\n if (g.Leader.Name === group.Leader.Name) val = true;\r\n });\r\n return val;\r\n }\r\n var [expandedGroups, set_expandedGroups] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n // Load local storage\r\n let theme = localStorage.getItem(\"theme\");\r\n setTheme(theme);\r\n\r\n let minlevel = localStorage.getItem(\"minimum-level\");\r\n setMinimumLevel(minlevel || 1);\r\n\r\n let maxlevel = localStorage.getItem(\"maximum-level\");\r\n setMaximumLevel(maxlevel || MAX_LEVEL);\r\n\r\n let filterbymylevel = localStorage.getItem(\"filter-by-my-level\");\r\n setFilterBasedOnMyLevel(\r\n filterbymylevel !== null ? filterbymylevel === \"true\" : false\r\n );\r\n\r\n setCharacterIds(\r\n JSON.parse(localStorage.getItem(\"registered-characters\") || \"[]\")\r\n );\r\n\r\n let showeligiblecharacters = localStorage.getItem(\r\n \"show-eligible-characters\"\r\n );\r\n setShowEligibleCharacters(\r\n showeligiblecharacters !== null\r\n ? showeligiblecharacters === \"true\"\r\n : false\r\n );\r\n\r\n let showguildnames = localStorage.getItem(\"show-guild-names\");\r\n setShowGuildNames(\r\n showguildnames !== null ? showguildnames === \"true\" : false\r\n );\r\n\r\n let shownoteligible = localStorage.getItem(\"show-not-eligible\");\r\n setShowNotEligible(\r\n shownoteligible !== null ? shownoteligible === \"true\" : true\r\n );\r\n\r\n let sortascending = localStorage.getItem(\"sort-order\");\r\n setSortAscending(sortascending !== null ? sortascending === \"true\" : true);\r\n\r\n let alternativelook = localStorage.getItem(\"alternative-lfm-look\");\r\n setAlternativeLook(\r\n alternativelook !== null ? alternativelook === \"true\" : false\r\n );\r\n\r\n let highvisibility = localStorage.getItem(\"high-visibility\");\r\n setHighVisibility(\r\n highvisibility !== null ? highvisibility === \"true\" : false\r\n );\r\n\r\n let fontmodifier = localStorage.getItem(\"font-modifier\");\r\n setFontModifier(fontmodifier !== null ? +fontmodifier : 0);\r\n\r\n let showcompletionpercentage = localStorage.getItem(\r\n \"completion-percentage\"\r\n );\r\n setShowCompletionPercentage(\r\n showcompletionpercentage !== null\r\n ? showcompletionpercentage === \"true\"\r\n : false\r\n );\r\n\r\n let showmembercount = localStorage.getItem(\"member-count\");\r\n setShowMemberCount(\r\n showmembercount !== null ? showmembercount === \"true\" : true\r\n );\r\n\r\n let showquestguesses = localStorage.getItem(\"quest-guess\");\r\n setShowQuestGuesses(\r\n showquestguesses !== null ? showquestguesses === \"true\" : true\r\n );\r\n\r\n let showquesttips = localStorage.getItem(\"quest-tips\");\r\n setShowQuestTips(showquesttips !== null ? showquesttips === \"true\" : true);\r\n\r\n let showraidtimerindicator = localStorage.getItem(\r\n \"show-raid-timer-indicator\"\r\n );\r\n setShowRaidTimerIndicator(\r\n showraidtimerindicator !== null\r\n ? showraidtimerindicator === \"true\"\r\n : false\r\n );\r\n\r\n const hiddenTimerIds = JSON.parse(\r\n localStorage.getItem(\"hidden-raid-timer-ids\") || \"[]\"\r\n );\r\n setHiddenTimerIds(hiddenTimerIds);\r\n\r\n $(document).on(\"keydown.handleEscape\", function (e) {\r\n if (e.key === \"Escape\") {\r\n setFilterPanelVisible(false);\r\n }\r\n });\r\n\r\n return () => $(document).unbind(\"keydown.handleEscape\");\r\n }, []);\r\n\r\n // Filter bar\r\n const [filterPanelVisible, setFilterPanelVisible] = React.useState(false);\r\n\r\n function toggleTheme() {\r\n let theme = localStorage.getItem(\"theme\");\r\n if (theme === \"light-theme\") {\r\n theme = \"dark\";\r\n setTheme(\"dark\");\r\n\r\n document.body.classList.replace(\"light-theme\", \"dark-theme\");\r\n localStorage.setItem(\"theme\", \"dark-theme\");\r\n } else {\r\n theme = \"light\";\r\n setTheme(\"light\");\r\n\r\n document.body.classList.replace(\"dark-theme\", \"light-theme\");\r\n localStorage.setItem(\"theme\", \"light-theme\");\r\n }\r\n }\r\n\r\n return (\r\n \r\n setFilterPanelVisible(!filterPanelVisible)}\r\n handleSaveButton={() => download()}\r\n handleRefreshButton={() => refreshButtonHandler()}\r\n closePanel={() => props.closePanel()}\r\n permalink={props.permalink}\r\n failedToFetchRaidActivity={failedToFetchRaidActivity}\r\n failedToFetchCharacters={failedToFetchCharacters}\r\n />\r\n {filterPanelVisible && (\r\n setFilterPanelVisible(false)}\r\n >\r\n
\r\n \r\n
\r\n \r\n )}\r\n {filterPanelVisible && (\r\n \r\n setFilterPanelVisible(false)}\r\n />\r\n \r\n setFilterPanelVisible(false)}\r\n />\r\n \r\n \r\n {filterBasedOnMyLevel ? (\r\n \r\n {myCharacters && myCharacters.length > 0 && (\r\n \r\n Filtering LFMs based on your characters:\r\n \r\n )}\r\n \r\n {(!myCharacters || myCharacters.length === 0) && (\r\n \r\n \r\n You need to{\" \"}\r\n \r\n add some characters\r\n {\" \"}\r\n first.\r\n \r\n }\r\n fontSize={1.1}\r\n />\r\n \r\n )}\r\n {myCharacters &&\r\n myCharacters.map((character) => (\r\n \r\n {character.Name}{\" \"}\r\n \r\n {`- ${character.TotalLevel}, ${character.Server}`}\r\n \r\n \r\n ))}\r\n \r\n \r\n ) : (\r\n
\r\n {\r\n if (e.length) {\r\n if (!props.minimal) {\r\n localStorage.setItem(\"minimum-level\", e[0]);\r\n localStorage.setItem(\"maximum-level\", e[1]);\r\n }\r\n setMinimumLevel(e[0]);\r\n setMaximumLevel(e[1]);\r\n }\r\n }}\r\n minimumLevel={minimumLevel}\r\n maximumLevel={maximumLevel}\r\n />\r\n
\r\n )}\r\n \r\n \r\n {\r\n if (!props.minimal) {\r\n localStorage.setItem(\r\n \"filter-by-my-level\",\r\n !filterBasedOnMyLevel\r\n );\r\n }\r\n Log(\r\n \"Clicked filter based on my level\",\r\n !filterBasedOnMyLevel ? \"true\" : \"false\"\r\n );\r\n setFilterBasedOnMyLevel(!filterBasedOnMyLevel);\r\n }}\r\n />\r\n Filter groups based on my current level\r\n \r\n {filterBasedOnMyLevel && (\r\n \r\n {\r\n if (!props.minimal) {\r\n localStorage.setItem(\r\n \"show-eligible-characters\",\r\n !showEligibleCharacters\r\n );\r\n }\r\n setShowEligibleCharacters(!showEligibleCharacters);\r\n }}\r\n />\r\n Show my eligible characters\r\n \r\n )}\r\n \r\n Add characters\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 {showRaidTimerIndicator && myCharacters.length === 0 && (\r\n \r\n You'll need to{\" \"}\r\n add a character first\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 {`The image below is a live preview of ${getServerNamePossessive()} LFM panel where all groups are visible.`}\r\n
\r\n {serverStatus !== false || ignoreServerStatus ? (\r\n alternativeLook === false ? (\r\n handleCanvasSort()}\r\n showCompletionPercentage={showCompletionPercentage}\r\n showMemberCount={showMemberCount}\r\n showQuestGuesses={showQuestGuesses}\r\n showQuestTips={showQuestTips}\r\n sortAscending={sortAscending}\r\n showEligibleCharacters={showEligibleCharacters}\r\n showGuildNames={showGuildNames}\r\n />\r\n ) : (\r\n
\r\n {filteredServerData && filteredServerData.Groups.length ? (\r\n filteredServerData.Groups.map(\r\n (group, i) =>\r\n group.Eligible && (\r\n {\r\n if (IsExpanded(group)) {\r\n set_expandedGroups(\r\n expandedGroups.filter((g) => {\r\n return g.Leader.Name !== group.Leader.Name;\r\n })\r\n );\r\n } else {\r\n set_expandedGroups([...expandedGroups, group]);\r\n }\r\n }}\r\n group={group}\r\n expanded={IsExpanded(group)}\r\n />\r\n )\r\n )\r\n ) : (\r\n \r\n {filteredServerData && filteredServerData.Groups.length === 0\r\n ? \"No groups meet your current filter settings\"\r\n : \"Loading data...\"}\r\n \r\n )}\r\n
\r\n )\r\n ) : (\r\n \r\n \r\n \r\n This server might be offline.\r\n
\r\n You may check server status on the{\" \"}\r\n Live page.\r\n
\r\n If you believe this to be an error,\r\n

\r\n \r\n \r\n {\r\n setIgnoreServerStatus(true);\r\n RefreshLfms();\r\n }}\r\n >\r\n Load data anyways\r\n \r\n {\r\n if ((reported || noReport) === false) {\r\n Submit(\r\n \"User reported issue from grouping/\" + props.server,\r\n \"[Internal] Reported 'server offline' message\"\r\n );\r\n setReported(true);\r\n }\r\n }}\r\n >\r\n {reported ? \"Thanks!\" : \"Report Issue\"}\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Panel;\r\n","import React from \"react\";\r\nimport { ReactComponent as CloseSVG } from \"../../assets/global/close.svg\";\r\nimport { ReactComponent as GroupingSVG } from \"../../assets/global/grouping.svg\";\r\nimport { ReactComponent as WhoSVG } from \"../../assets/global/who.svg\";\r\nimport { ReactComponent as FriendsSVG } from \"../../assets/global/friends.svg\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport { ReactComponent as ThumbsDownSVG } from \"../../assets/global/thumbs_down.svg\";\r\nimport { ReactComponent as ThumbsUpSVG } from \"../../assets/global/thumbs_up.svg\";\r\nimport { Submit } from \"../../services/CommunicationService\";\r\nimport { Link } from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\nimport ServerHook from \"../../hooks/ServerHook\";\r\n\r\nconst PanelSelectPopup = (props) => {\r\n const SERVERS = ServerHook();\r\n\r\n const [voteMessage, setVoteMessage] = React.useState(null);\r\n const [mayVote, setMayVote] = React.useState(false);\r\n const [hasVoted, setHasVoted] = React.useState(false);\r\n React.useEffect(() => {\r\n let ls = localStorage.getItem(\"feature-vote-multiple-panels\");\r\n if (ls == null) {\r\n setMayVote(true);\r\n } else {\r\n setMayVote(false);\r\n }\r\n\r\n $(document).on(\"keydown.handleEscape\", function (e) {\r\n if (e.key === \"Escape\") {\r\n close();\r\n }\r\n });\r\n\r\n return () => $(document).unbind(\"keydown.handleEscape\");\r\n }, []);\r\n\r\n const [panelType, setPanelType] = React.useState(null);\r\n\r\n const PANEL_TYPES = [\r\n {\r\n icon: ,\r\n title: \"Live LFM Viewer\",\r\n description: \"Easily find groups with a live LFM panel for every server.\",\r\n onClick: () => setPanelType(\"lfm\"),\r\n },\r\n {\r\n icon: ,\r\n title: \"Live Who List\",\r\n description: \"Explore a list of online players with a live Who panel.\",\r\n onClick: () => setPanelType(\"who\"),\r\n },\r\n {\r\n icon: ,\r\n title: \"Friends List\",\r\n description: \"See what your friends are up to.\",\r\n onClick: () => {\r\n props.userSelected({\r\n type: \"friends\",\r\n });\r\n close();\r\n },\r\n },\r\n ];\r\n\r\n function vote(response) {\r\n if (response != null) {\r\n Submit(\"Feature: Multiple Panels\", response);\r\n if (response === \"Like\") {\r\n setVoteMessage(\"positive\");\r\n } else {\r\n setVoteMessage(\"negative\");\r\n }\r\n } else {\r\n setVoteMessage(\"close\");\r\n setMayVote(false);\r\n }\r\n setHasVoted(true);\r\n localStorage.setItem(\"feature-vote-multiple-panels\", new Date());\r\n }\r\n\r\n function close() {\r\n setPanelType(null);\r\n props.handleClose();\r\n }\r\n\r\n return props.visible ? (\r\n
\r\n
close()} />\r\n \r\n close()}\r\n />\r\n \r\n {`Select a ${panelType === null ? \"Panel\" : \"Server\"}`}\r\n
\r\n }\r\n noLink={true}\r\n altTitle=\"Select\"\r\n description=\"\"\r\n noMargin={true}\r\n >\r\n \r\n {panelType === null &&\r\n PANEL_TYPES.map((t, i) => (\r\n {\r\n t.onClick();\r\n e.stopPropagation();\r\n }}\r\n >\r\n
\r\n {t.icon}\r\n

{t.title}

\r\n
\r\n

{t.description}

\r\n
\r\n ))}\r\n {panelType !== null &&\r\n SERVERS.map((name, i) => (\r\n {\r\n props.userSelected({\r\n type: panelType,\r\n server: name,\r\n });\r\n close();\r\n }}\r\n >\r\n

{name}

\r\n \r\n ))}\r\n \r\n {mayVote &&\r\n (hasVoted ? (\r\n
\r\n {voteMessage === \"positive\" ? (\r\n \"Thanks!\"\r\n ) : voteMessage === \"negative\" ? (\r\n \r\n Your suggestions are welcome!\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n ) : (\r\n
\r\n \r\n Is this feature useful?\r\n \r\n vote(\"Like\")}\r\n />\r\n vote(\"Dislike\")}\r\n />\r\n vote(null)}\r\n />\r\n
\r\n ))}\r\n \r\n \r\n \r\n ) : (\r\n
\r\n );\r\n};\r\n\r\nexport default PanelSelectPopup;\r\n","export default __webpack_public_path__ + \"static/media/whosprite_v4.6a869096.jpg\";","import React from \"react\";\r\nimport PanelSprite from \"../../assets/global/whosprite_v4.jpg\";\r\nimport CrownSprite from \"../../assets/global/crown.png\";\r\nimport NAMES from \"../../constants/ClemeitNames\";\r\n\r\nconst CanvasWhoPanel = (props) => {\r\n // Assume that incoming props.data is already filtered according to user preferences\r\n // TODO: Remove ExactMatch and LocationRegion from the sprite\r\n const canvasRef = React.useRef(null);\r\n const spriteRef = React.useRef(null);\r\n const crownRef = React.useRef(null);\r\n const [canvasWidth, setCanvasWidth] = React.useState(0);\r\n\r\n const [isCrownLoaded, setIsCrownLoaded] = React.useState(false);\r\n const [isImageLoaded, setIsImageLoaded] = React.useState(false);\r\n const classFilterBounds = [\r\n [119, 83, 30, 30],\r\n [152, 83, 30, 30],\r\n [185, 83, 30, 30],\r\n [218, 83, 30, 30],\r\n [251, 83, 30, 30],\r\n [284, 83, 30, 30],\r\n [317, 83, 30, 30],\r\n [350, 83, 30, 30],\r\n [383, 83, 30, 30],\r\n [416, 83, 30, 30],\r\n [449, 83, 30, 30],\r\n [482, 83, 30, 30],\r\n [515, 83, 30, 30],\r\n [548, 83, 30, 30],\r\n [581, 83, 30, 30],\r\n ];\r\n\r\n function computeInputHeight() {\r\n let mod = window.innerWidth <= 950 ? 2 : 1;\r\n return `${((24 * canvasWidth) / PANEL_WIDTH) * mod}px`;\r\n }\r\n\r\n function computeInputTop() {\r\n let mod = window.innerWidth <= 950 ? (24 * canvasWidth) / PANEL_WIDTH : 0;\r\n return `${(139 * canvasWidth) / PANEL_WIDTH + 36 - mod / 2}px`;\r\n }\r\n\r\n function computeInputTopPadding() {\r\n let mod = window.innerWidth <= 950 ? 2 : 1;\r\n return `${(((24 * canvasWidth) / PANEL_WIDTH) * mod) / 2}px`;\r\n }\r\n\r\n function isEveryClassChecked() {\r\n let result = true;\r\n props.classFilterStates.forEach((state) => {\r\n if (!state) result = false;\r\n });\r\n return result;\r\n }\r\n\r\n // function HSVtoRGB(h, s, v) {\r\n // var r, g, b, i, f, p, q, t;\r\n // if (arguments.length === 1) {\r\n // (s = h.s), (v = h.v), (h = h.h);\r\n // }\r\n // i = Math.floor(h * 6);\r\n // f = h * 6 - i;\r\n // p = v * (1 - s);\r\n // q = v * (1 - f * s);\r\n // t = v * (1 - (1 - f) * s);\r\n // switch (i % 6) {\r\n // case 0:\r\n // (r = v), (g = t), (b = p);\r\n // break;\r\n // case 1:\r\n // (r = q), (g = v), (b = p);\r\n // break;\r\n // case 2:\r\n // (r = p), (g = v), (b = t);\r\n // break;\r\n // case 3:\r\n // (r = p), (g = q), (b = v);\r\n // break;\r\n // case 4:\r\n // (r = t), (g = p), (b = v);\r\n // break;\r\n // case 5:\r\n // (r = v), (g = p), (b = q);\r\n // break;\r\n // }\r\n // return {\r\n // r: Math.round(r * 255),\r\n // g: Math.round(g * 255),\r\n // b: Math.round(b * 255),\r\n // };\r\n // }\r\n\r\n // function rgbToHex(r, g, b) {\r\n // return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\r\n // }\r\n\r\n // function componentToHex(c) {\r\n // var hex = c.toString(16);\r\n // return hex.length === 1 ? \"0\" + hex : hex;\r\n // }\r\n\r\n // // Generates a bunch of colors by going around the color wheel, converting to RGB, and then to hex. Adds the colors the the COLOR array.\r\n // function generateColors() {\r\n // let hue = 0;\r\n // let saturation = 0.3;\r\n // let value = 0.3;\r\n // let step = 0.37;\r\n // while (COLORS.length < 100) {\r\n // let rgb = HSVtoRGB(hue, saturation, value);\r\n // let hex = rgbToHex(rgb.r, rgb.g, rgb.b);\r\n // COLORS.push(hex);\r\n // hue += step;\r\n // if (hue > 1) {\r\n // hue -= 1;\r\n // }\r\n // }\r\n // console.log(COLORS);\r\n // }\r\n\r\n // generateColors();\r\n\r\n const PANEL_WIDTH = 706;\r\n const playerHeight = 42;\r\n const MAXIMUM_RESULTS = props.minimal ? 100 : 200;\r\n const [isGroupMode, setIsGroupMode] = React.useState(false);\r\n const isGroupModeRef = React.useRef(isGroupMode);\r\n isGroupModeRef.current = isGroupMode;\r\n const GROUP_COLORS = [\r\n \"#4d3636\",\r\n \"#364d3b\",\r\n \"#40364d\",\r\n \"#4d4536\",\r\n \"#364d4a\",\r\n \"#4d364a\",\r\n \"#454d36\",\r\n \"#36404d\",\r\n \"#4d363b\",\r\n \"#364d36\",\r\n \"#3a364d\",\r\n \"#4d3f36\",\r\n \"#364d44\",\r\n \"#49364d\",\r\n \"#4b4d36\",\r\n \"#36464d\",\r\n \"#4d3641\",\r\n \"#3c4d36\",\r\n ];\r\n\r\n let colorIndex = 0;\r\n let groupToColorMap = {};\r\n\r\n function HandleMouseOnCanvas(e) {\r\n var rect = e.target.getBoundingClientRect();\r\n var x = (e.clientX - rect.left) * (PANEL_WIDTH / rect.width); //x position within the element.\r\n var y = (e.clientY - rect.top) * (PANEL_WIDTH / rect.width); //y position within the element.\r\n\r\n for (let i = 0; i < classFilterBounds.length; i++) {\r\n if (\r\n x > classFilterBounds[i][0] &&\r\n x < classFilterBounds[i][0] + classFilterBounds[i][2] &&\r\n y > classFilterBounds[i][1] &&\r\n y < classFilterBounds[i][1] + classFilterBounds[i][3]\r\n ) {\r\n props.handleClassFilter(i);\r\n }\r\n }\r\n\r\n if (x > 429 && x < 429 + 47 && y > 63 && y < 63 + 16) {\r\n props.handleAnyClass();\r\n }\r\n\r\n if (x > 177 && x < 177 + 184 && y > 171 && y < 171 + 16) {\r\n props.handleIncludeRegion();\r\n }\r\n\r\n if (x > 401 && x < 401 + 110 && y > 171 && y < 171 + 16) {\r\n props.handleExactMatch();\r\n }\r\n\r\n if (x > 559 && x < 583 && y > 140 && y < 164) {\r\n if (isGroupModeRef.current) {\r\n props.handleSort(\"level\");\r\n setIsGroupMode(false);\r\n } else {\r\n props.handleSort(\"groupid\");\r\n setIsGroupMode(true);\r\n }\r\n }\r\n\r\n if (x > 21 && x < 41 && y > 230 && y < 251) {\r\n props.handleSort(\"inparty\");\r\n setIsGroupMode(false);\r\n }\r\n\r\n if (x > 41 && x < 271 && y > 230 && y < 251) {\r\n props.handleSort(\"name\");\r\n setIsGroupMode(false);\r\n }\r\n\r\n if (x > 271 && x < 387 && y > 230 && y < 251) {\r\n props.handleSort(\"class\");\r\n setIsGroupMode(false);\r\n }\r\n\r\n if (x > 387 && x < 456 && y > 230 && y < 251) {\r\n props.handleSort(\"level\");\r\n setIsGroupMode(false);\r\n }\r\n\r\n if (x > 456 && x < 684 && y > 230 && y < 251) {\r\n props.handleSort(\"guild\");\r\n setIsGroupMode(false);\r\n }\r\n }\r\n\r\n function handleCanvasResize() {\r\n let rect = canvasRef.current.getBoundingClientRect();\r\n setCanvasWidth(rect.width);\r\n }\r\n\r\n React.useEffect(() => {\r\n // TODO: Remove listeners\r\n canvasRef.current.addEventListener(\"click\", (e) => {\r\n HandleMouseOnCanvas(e);\r\n });\r\n window.addEventListener(\"resize\", (e) => {\r\n // setCanvasWidth(canvasRef.current.getBoundingClientRect().width);\r\n handleCanvasResize();\r\n });\r\n handleCanvasResize();\r\n }, [canvasRef]);\r\n\r\n function getNameFilter() {\r\n if (!props.filters) return \"\";\r\n let result = \"\";\r\n props.filters.forEach((filter) => {\r\n if (filter.type === \"Name\") {\r\n result = filter.value;\r\n }\r\n });\r\n return result.toString();\r\n }\r\n\r\n function getLowLevelFilter() {\r\n if (!props.filters) return 1;\r\n let result = 1;\r\n props.filters.forEach((filter) => {\r\n if (filter.type === \"Min Level\") {\r\n result = filter.value;\r\n }\r\n });\r\n return result.toString();\r\n }\r\n\r\n function getHighLevelFilter() {\r\n if (!props.filters) return 30;\r\n let result = 30;\r\n props.filters.forEach((filter) => {\r\n if (filter.type === \"Max Level\") {\r\n result = filter.value;\r\n }\r\n });\r\n return result.toString();\r\n }\r\n\r\n React.useEffect(() => {\r\n if (!isImageLoaded) return;\r\n if (!isCrownLoaded) return;\r\n if (props.data === null) {\r\n //console.log(\"Waiting on data\");\r\n return;\r\n }\r\n // Render canvas\r\n const canvas = canvasRef.current;\r\n const ctx = canvas.getContext(\"2d\", { alpha: false });\r\n\r\n // Sprites\r\n const sprite = spriteRef.current;\r\n const crown = crownRef.current;\r\n\r\n // Draw the header\r\n OpenPanel();\r\n\r\n // Draw the chin\r\n ClosePanel();\r\n\r\n // Draw lfms\r\n // DrawFiller();\r\n if (props.data !== null) DrawPlayers();\r\n\r\n // Draws the header and the lastUpdateTime string\r\n function OpenPanel() {\r\n ctx.drawImage(sprite, 0, 0, 706, 260, 0, 0, 706, 260);\r\n\r\n // Draw anyClass checkbox\r\n // 429, 63, 16, 16\r\n if (isEveryClassChecked())\r\n ctx.drawImage(sprite, 467, 340, 16, 16, 429, 63, 16, 16);\r\n else ctx.drawImage(sprite, 450, 340, 16, 16, 429, 63, 16, 16);\r\n\r\n if (props.includeRegion)\r\n ctx.drawImage(sprite, 467, 340, 16, 16, 177, 171, 16, 16);\r\n else ctx.drawImage(sprite, 450, 340, 16, 16, 177, 171, 16, 16);\r\n\r\n if (props.exactMatch)\r\n ctx.drawImage(sprite, 467, 340, 16, 16, 401, 171, 16, 16);\r\n else ctx.drawImage(sprite, 450, 340, 16, 16, 401, 171, 16, 16);\r\n\r\n // Group view\r\n if (isGroupMode)\r\n ctx.drawImage(sprite, 660, 341, 23, 23, 559, 140, 24, 24);\r\n else ctx.drawImage(sprite, 637, 341, 23, 23, 559, 140, 24, 24);\r\n\r\n // Draw class toggles\r\n for (var i = 0; i < 15; i++) {\r\n drawClassFilter(\r\n i,\r\n props.classFilterStates[i],\r\n classFilterBounds[i][0],\r\n classFilterBounds[i][1]\r\n );\r\n }\r\n\r\n // Name box: 125, 140, 282, 22\r\n ctx.fillStyle = \"black\";\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#111111\";\r\n ctx.lineWidth = 1;\r\n ctx.fillRect(125, 140, 282, 22); // name\r\n ctx.fillRect(429, 142, 28, 20); // lower\r\n ctx.fillRect(480, 142, 28, 20); // upper\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#b2b090\";\r\n ctx.lineWidth = 1;\r\n ctx.rect(125, 140, 282, 22); // name\r\n ctx.rect(429, 142, 28, 20); // lower\r\n ctx.rect(480, 142, 28, 20); // upper\r\n ctx.stroke();\r\n\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.font = \"15px 'Trebuchet MS'\"; // 18px\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(getNameFilter(), 130, 151);\r\n\r\n // Last updated\r\n let lastUpdateTime = new Date();\r\n var hour = lastUpdateTime.getHours() % 12;\r\n if (hour == 0) hour = 12;\r\n var timeText =\r\n \"Last updated \" +\r\n hour +\r\n \":\" +\r\n (\"0\" + lastUpdateTime.getMinutes()).slice(-2) +\r\n \":\" +\r\n (\"0\" + lastUpdateTime.getSeconds()).slice(-2) +\r\n (Math.floor(lastUpdateTime.getHours() / 12) == 0 ? \" AM\" : \" PM\");\r\n ctx.font = \"18px Arial\";\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillStyle = \"white\";\r\n ctx.fillText(timeText, 193, 17);\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"alphabetic\";\r\n\r\n // Population\r\n ctx.fillText(props.currentPopulation || \"0\", 174, 210);\r\n ctx.fillText(props.currentAnonymous || \"0\", 341, 210);\r\n ctx.fillText(props.data ? props.data.length : \"0\", 484, 210);\r\n }\r\n\r\n // Draws the chin\r\n function ClosePanel() {\r\n ctx.drawImage(\r\n sprite,\r\n 0,\r\n 315,\r\n 706,\r\n 25,\r\n 0,\r\n (props.data ? Math.min(props.data.length, MAXIMUM_RESULTS) : 4) *\r\n playerHeight +\r\n 259,\r\n 706,\r\n 25\r\n );\r\n }\r\n\r\n // Draws filler\r\n function DrawFiller() {}\r\n\r\n function DrawPlayers() {\r\n if (props.data === null) {\r\n //console.log(\"Waiting on data\");\r\n return;\r\n }\r\n\r\n for (let i = 0; i < props.data.length; i++) {\r\n let player = props.data[i];\r\n let x = 24;\r\n let y = 229 + i * 42 + 25;\r\n // Bounds: 660, 42\r\n var width = 660;\r\n var height = 42;\r\n\r\n // Get the color for this player if they are in a group that has more than one person\r\n // First check if their group is already in the map\r\n // If not, add it to the map and assign it a color\r\n let playerColor = \"\";\r\n if (\r\n isGroupMode &&\r\n player.GroupId != 0 &&\r\n props.data.filter((p) => p.GroupId === player.GroupId).length > 1\r\n ) {\r\n if (!groupToColorMap.hasOwnProperty(player.GroupId)) {\r\n const COLOR = GROUP_COLORS[colorIndex % GROUP_COLORS.length];\r\n groupToColorMap[player.GroupId] = COLOR;\r\n playerColor = COLOR;\r\n colorIndex++;\r\n } else {\r\n playerColor = groupToColorMap[player.GroupId];\r\n }\r\n }\r\n\r\n // Draw background panel\r\n ctx.drawImage(sprite, 0, 259, 706, 47, 0, y, 706, 47);\r\n\r\n // Draw background gradient:\r\n var grad = ctx.createLinearGradient(x, y, x, y + height);\r\n grad.addColorStop(0, \"#3b3b25\");\r\n grad.addColorStop(0.25, \"#4c4a31\");\r\n grad.addColorStop(0.75, \"#4c4a31\");\r\n grad.addColorStop(1, \"#3b3b25\");\r\n if (playerColor != \"\") {\r\n ctx.fillStyle = playerColor;\r\n } else {\r\n ctx.fillStyle = grad;\r\n }\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Draw border:\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#898c77\";\r\n ctx.lineWidth = 1;\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Draw dividers:\r\n ctx.beginPath();\r\n ctx.moveTo(x + 20, y);\r\n ctx.lineTo(x + 20, y + 40);\r\n ctx.stroke();\r\n ctx.moveTo(x + 248, y);\r\n ctx.lineTo(x + 248, y + 40);\r\n ctx.stroke();\r\n ctx.moveTo(x + 365, y);\r\n ctx.lineTo(x + 365, y + 40);\r\n ctx.stroke();\r\n ctx.moveTo(x + 432, y);\r\n ctx.lineTo(x + 432, y + 40);\r\n ctx.stroke();\r\n\r\n // Draw group status:\r\n if (player.GroupId != 0)\r\n ctx.drawImage(sprite, 211, 401, 16, 20, x + 2, y + 10, 16, 20);\r\n\r\n // Draw race icon:\r\n let raceIconPosition = getRaceIconPosition(\r\n player.Gender + \" \" + player.Race,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n raceIconPosition[0],\r\n raceIconPosition[1],\r\n 18,\r\n 18,\r\n x + 23,\r\n y + 3,\r\n 18,\r\n 18\r\n );\r\n\r\n // Draw name:\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.font = 18 + \"px 'Trebuchet MS'\"; // 18px\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(player.Name, x + 44, y + 14);\r\n\r\n // Draw crown:\r\n if (NAMES.some((name) => player.Name.startsWith(name))) {\r\n let nameWidth = ctx.measureText(player.Name).width;\r\n ctx.drawImage(crown, x + 48 + nameWidth, y + 4, 18, 18);\r\n }\r\n\r\n // Draw location: 30, 26\r\n ctx.font = \"12px 'Trebuchet MS'\";\r\n if (player.Name == \"Anonymous\") {\r\n ctx.fillText(\"The Island of Noneya\", x + 30, y + 33);\r\n } else {\r\n let baseString;\r\n if (player.Location.Name === null) {\r\n baseString = \"Somewhere in the Aether\";\r\n } else {\r\n baseString = player.Location.Name;\r\n }\r\n let textLines = wrapText(baseString, 200);\r\n if (textLines.length > 1) {\r\n var newLines = [];\r\n newLines[0] = textLines[0] + \"...\";\r\n textLines = newLines;\r\n }\r\n ctx.fillText(textLines[0], x + 30, y + 33);\r\n }\r\n\r\n // Draw classes:\r\n ctx.font = \"13px Arial\";\r\n ctx.textAlign = \"right\";\r\n for (var j = 0; j < player.Classes.length; j++) {\r\n if (player.Classes[j].Name == null) continue;\r\n if (player.Classes[j].Name === \"Epic\") continue;\r\n if (player.Classes[j].Name === \"Legendary\") continue;\r\n\r\n let classIconPosition = getClassIconPosition(\r\n player.Classes[j].Name,\r\n true\r\n );\r\n ctx.drawImage(\r\n sprite,\r\n classIconPosition[0],\r\n classIconPosition[1],\r\n 18,\r\n 18,\r\n x + 269 + 21 * j,\r\n y + 13,\r\n 18,\r\n 18\r\n );\r\n\r\n ctx.fillStyle = \"black\";\r\n ctx.fillText(\r\n player.Classes[j].Level,\r\n x + 269 + 21 * j + 22,\r\n y + 20 + 8\r\n );\r\n ctx.fillStyle = \"white\";\r\n ctx.fillText(\r\n player.Classes[j].Level,\r\n x + 269 + 21 * j + 21,\r\n y + 20 + 7\r\n );\r\n }\r\n\r\n // Draw level:\r\n ctx.fillStyle = \"#f6f1d3\";\r\n ctx.textAlign = \"center\";\r\n ctx.font = 17 + \"px Arial\"; // 15px\r\n ctx.fillText(player.TotalLevel, x + 400, y + 22);\r\n\r\n // Guild name:\r\n ctx.font = \"15px 'Trebuchet MS'\";\r\n if (player.Name == \"Anonymous\") {\r\n ctx.fillText(\"Noneya Business\", x + 548, y + 22);\r\n } else {\r\n let guildname = wrapText(player.Guild, 230);\r\n if (guildname.length > 1) {\r\n ctx.fillText(guildname[0] + \"...\", x + 548, y + 22);\r\n } else if (guildname.length === 1) {\r\n ctx.fillText(guildname[0], x + 548, y + 22);\r\n }\r\n }\r\n\r\n // Draw text if too many players\r\n if (i >= MAXIMUM_RESULTS - 1) {\r\n ctx.fillStyle = \"rgba(0, 0, 0, 0.6)\";\r\n ctx.fillRect(canvas.width / 2 - 160, canvas.height - 80, 320, 30);\r\n\r\n ctx.fillStyle = \"white\";\r\n ctx.font = \"18px 'Trebuchet MS'\"; // 18px\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(\r\n \"Showing the first \" +\r\n MAXIMUM_RESULTS +\r\n \" of \" +\r\n props.data.length +\r\n \" matches\",\r\n canvas.width / 2,\r\n canvas.height - 65\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function DrawPlayerOverlay(player, cursorPosition) {}\r\n\r\n // Helper function for wrapping text\r\n function wrapText(text, maxWidth) {\r\n if (text === null) return \"\";\r\n let words = text.split(\" \");\r\n let lines = [];\r\n let currentLine = words[0];\r\n\r\n for (let i = 1; i < words.length; i++) {\r\n let word = words[i];\r\n let width = ctx.measureText(currentLine + \" \" + word).width;\r\n if (width < maxWidth) {\r\n currentLine += \" \" + word;\r\n } else {\r\n lines.push(currentLine);\r\n currentLine = word;\r\n }\r\n }\r\n lines.push(currentLine);\r\n return lines;\r\n }\r\n\r\n // Helper function for getting race icon position\r\n function drawClassFilter(index, state, x, y) {\r\n var xsrc = 0;\r\n var ysrc = 0;\r\n switch (index) {\r\n case 0:\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case 1:\r\n xsrc = 30;\r\n ysrc = 0;\r\n break;\r\n case 2:\r\n xsrc = 60;\r\n ysrc = 0;\r\n break;\r\n case 3:\r\n xsrc = 90;\r\n ysrc = 0;\r\n break;\r\n case 4:\r\n xsrc = 120;\r\n ysrc = 0;\r\n break;\r\n case 5:\r\n xsrc = 150;\r\n ysrc = 0;\r\n break;\r\n case 6:\r\n xsrc = 180;\r\n ysrc = 0;\r\n break;\r\n case 7:\r\n xsrc = 210;\r\n ysrc = 0;\r\n break;\r\n case 8:\r\n xsrc = 240;\r\n ysrc = 0;\r\n break;\r\n case 9:\r\n xsrc = 270;\r\n ysrc = 0;\r\n break;\r\n case 10:\r\n xsrc = 300;\r\n ysrc = 0;\r\n break;\r\n case 11:\r\n xsrc = 330;\r\n ysrc = 0;\r\n break;\r\n case 12:\r\n xsrc = 360;\r\n ysrc = 0;\r\n break;\r\n case 13:\r\n xsrc = 390;\r\n ysrc = 0;\r\n break;\r\n case 14:\r\n xsrc = 420;\r\n ysrc = 0;\r\n break;\r\n }\r\n ctx.drawImage(\r\n sprite,\r\n xsrc,\r\n 341 + ysrc + state * 30,\r\n 30,\r\n 30,\r\n x,\r\n y,\r\n 30,\r\n 30\r\n );\r\n }\r\n\r\n function getRaceIconPosition(race, eligible) {\r\n let xsrc = 0;\r\n let ysrc = 0;\r\n switch (race) {\r\n case \"Female Aasimar\":\r\n case \"Female Aasimar Scourge\":\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case \"Female Dragonborn\":\r\n xsrc = 18;\r\n ysrc = 0;\r\n break;\r\n case \"Female Drow Elf\":\r\n xsrc = 36;\r\n ysrc = 0;\r\n break;\r\n case \"Female Dwarf\":\r\n xsrc = 54;\r\n ysrc = 0;\r\n break;\r\n case \"Female Elf\":\r\n case \"Female Sun Elf\":\r\n case \"Female Wood Elf\":\r\n xsrc = 72;\r\n ysrc = 0;\r\n break;\r\n case \"Female Gnome\":\r\n case \"Female Deep Gnome\":\r\n xsrc = 0;\r\n ysrc = 18;\r\n break;\r\n case \"Female Half Elf\":\r\n xsrc = 18;\r\n ysrc = 18;\r\n break;\r\n case \"Female Halfling\":\r\n xsrc = 36;\r\n ysrc = 18;\r\n break;\r\n case \"Female Half Orc\":\r\n xsrc = 54;\r\n ysrc = 18;\r\n break;\r\n case \"Female Human\":\r\n case \"Female Shadar-kai\":\r\n case \"Female Purple Dragon Knight\":\r\n xsrc = 72;\r\n ysrc = 18;\r\n break;\r\n case \"Female Shifter\":\r\n case \"Female Razorclaw Shifter\":\r\n xsrc = 90;\r\n ysrc = 18;\r\n break;\r\n case \"Female Tiefling\":\r\n case \"Female Tiefling Scoundrel\":\r\n xsrc = 0;\r\n ysrc = 36;\r\n break;\r\n case \"Female Warforged\":\r\n case \"Female Bladeforged\":\r\n xsrc = 18;\r\n ysrc = 36;\r\n break;\r\n case \"Male Aasimar\":\r\n case \"Male Aasimar Scourge\":\r\n xsrc = 36;\r\n ysrc = 36;\r\n break;\r\n case \"Male Dragonborn\":\r\n xsrc = 54;\r\n ysrc = 36;\r\n break;\r\n case \"Male Drow Elf\":\r\n xsrc = 72;\r\n ysrc = 36;\r\n break;\r\n case \"Male Dwarf\":\r\n xsrc = 0;\r\n ysrc = 54;\r\n break;\r\n case \"Male Elf\":\r\n case \"Male Sun Elf\":\r\n case \"Male Wood Elf\":\r\n xsrc = 18;\r\n ysrc = 54;\r\n break;\r\n case \"Male Gnome\":\r\n case \"Male Deep Gnome\":\r\n xsrc = 36;\r\n ysrc = 54;\r\n break;\r\n case \"Male Half Elf\":\r\n xsrc = 54;\r\n ysrc = 54;\r\n break;\r\n case \"Male Halfling\":\r\n xsrc = 72;\r\n ysrc = 54;\r\n break;\r\n case \"Male Half Orc\":\r\n xsrc = 0;\r\n ysrc = 72;\r\n break;\r\n case \"Male Human\":\r\n case \"Male Shadar-kai\":\r\n case \"Male Purple Dragon Knight\":\r\n xsrc = 18;\r\n ysrc = 72;\r\n break;\r\n case \"Male Shifter\":\r\n case \"Male Razorclaw Shifter\":\r\n xsrc = 90;\r\n ysrc = 0;\r\n break;\r\n case \"Male Tiefling\":\r\n case \"Male Tiefling Scoundrel\":\r\n xsrc = 36;\r\n ysrc = 72;\r\n break;\r\n case \"Male Warforged\":\r\n case \"Male Bladeforged\":\r\n xsrc = 54;\r\n ysrc = 72;\r\n break;\r\n case \"Male Tabaxi\":\r\n case \"Female Tabaxi\":\r\n case \"Male Tabaxi Trailblazer\":\r\n case \"Female Tabaxi Trailblazer\":\r\n xsrc = 90;\r\n ysrc = 36;\r\n break;\r\n default:\r\n xsrc = 72;\r\n ysrc = 72;\r\n break;\r\n }\r\n return [xsrc, ysrc + 401];\r\n }\r\n\r\n // Helper function for getting race icon position\r\n function getClassIconPosition(classname, eligible) {\r\n let xsrc = 0;\r\n let ysrc = 0;\r\n switch (classname) {\r\n case \"Alchemist\": // 70032AFE\r\n xsrc = 21;\r\n ysrc = 0;\r\n break;\r\n case \"Artificer\": // 700148CE\r\n xsrc = 42;\r\n ysrc = 42;\r\n break;\r\n case \"Barbarian\": // 7000006B\r\n xsrc = 84;\r\n ysrc = 0;\r\n break;\r\n case \"Bard\": // 7000006C\r\n xsrc = 0;\r\n ysrc = 42;\r\n break;\r\n case \"Cleric\": // 7000006D\r\n xsrc = 42;\r\n ysrc = 21;\r\n break;\r\n case \"Druid\": // 70016ADB\r\n xsrc = 63;\r\n ysrc = 42;\r\n break;\r\n case \"Favored Soul\": // 7000C5CE\r\n xsrc = 63;\r\n ysrc = 0;\r\n break;\r\n case \"Fighter\": // 7000006E\r\n xsrc = 0;\r\n ysrc = 0;\r\n break;\r\n case \"Monk\": // 70006BF5\r\n xsrc = 21;\r\n ysrc = 42;\r\n break;\r\n case \"Paladin\": // 7000006F\r\n xsrc = 42;\r\n ysrc = 0;\r\n break;\r\n case \"Ranger\": // 70000070\r\n xsrc = 21;\r\n ysrc = 21;\r\n break;\r\n case \"Rogue\": // 70000071\r\n xsrc = 0;\r\n ysrc = 21;\r\n break;\r\n case \"Sorcerer\": // 7000000B\r\n xsrc = 84;\r\n ysrc = 21;\r\n break;\r\n case \"Warlock\": // 7000C5DA\r\n xsrc = 84;\r\n ysrc = 42;\r\n break;\r\n case \"Wizard\": // 7000000E\r\n xsrc = 63;\r\n ysrc = 21;\r\n break;\r\n case \"Epic\": // 7001B1A3\r\n case \"Legendary\":\r\n xsrc = 0;\r\n ysrc = 60;\r\n break;\r\n }\r\n return [xsrc + 108, ysrc + 401];\r\n }\r\n }, [\r\n props.data,\r\n isImageLoaded,\r\n isCrownLoaded,\r\n props.filters,\r\n props.classFilterStates,\r\n props.includeRegion,\r\n props.exactMatch,\r\n ]);\r\n\r\n return (\r\n \r\n setIsImageLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n setIsCrownLoaded(true)}\r\n style={{ display: \"none\" }}\r\n />\r\n props.handleGlobalFilter(e.target.value)}\r\n />\r\n {\r\n props.handleMinimumLevelFilter(e.target.value);\r\n }}\r\n />\r\n {\r\n props.handleMaximumLevelFilter(e.target.value);\r\n }}\r\n />\r\n {props.children}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default CanvasWhoPanel;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAGaSURBVDhP7ZDPahRBEIe/7t2ZdczEXfJPvAiLIrLxIIKXHAyKZx/CB/CRfIccvAmCCCp4EBXRyyZETVTiRjeZ3e2Z7ml7ZjpDJgHxAfLB9FRV8/tVV3HG/7G3eddHp3F3du/5qvXpKY60sjwdhcCHNROq0nRxvY6Pc7xBbVRwsvNk854N1Apt9Y3tF48ad0Xj97M7PjthtDXq8/TxjYZAZj/ohQlfh598pTJ5+VZyfWnHV7zRUv9ZmawOwvJf8+UngcxoiRnoXV90uPqgL8rwSFtljqKL+fUH0buC3PnIq6Fk7faATr6LzafodsSb1yNuXrUkrWVWluH3YZdLtzZKj4ZRrCeM3VJlew4OQuLovHvymDQ7QHYk1grsVBAFAVIovicXa6PGjpRSbieJW+4+c2JEdrhNMtsnldaZ5ZhUE6IROiFNxl5V0TAysofV89j0HDKP6AQLaNtFmQuotPhiMjOPNl0y3fOqinq0JxsP7LXLEW1jkKlBzKzbjRsnjjFuXGMypM3ptELcYGRK83n4jvsPP9QeZ/wL+AuxBbWCSbppGAAAAABJRU5ErkJggg==\"","import React from \"react\";\r\nimport { Fetch, VerifyPlayerData } from \"../../services/DataLoader\";\r\nimport { ReactComponent as CloseSVG } from \"../../assets/global/close.svg\";\r\nimport FilterBar from \"../global/FilterBar\";\r\nimport CanvasWhoPanel from \"./CanvasWhoPanel\";\r\nimport { Submit } from \"../../services/CommunicationService\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { SERVER_LIST_LOWERCASE } from \"../../constants/Servers\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport FeatureFlagHook from \"../../hooks/FeatureFlagHook\";\r\nimport $ from \"jquery\";\r\n\r\nconst WhoPanel = (props) => {\r\n const MAX_LEVEL = 32;\r\n const PAGE_SIZE = 10;\r\n\r\n const noReport = FeatureFlagHook(\"no-report\", 1000 * 60 * 60);\r\n\r\n // Download canvas\r\n var download = function () {\r\n // Redraw panel without names\r\n var link = document.createElement(\"a\");\r\n link.download = `ddo-who-panel.png`;\r\n link.href = document.getElementById(\"who-canvas\").toDataURL();\r\n link.click();\r\n };\r\n\r\n // Data\r\n // const [currentServer, setCurrentServer] = React.useState(null);\r\n const [playerData, setPlayerData] = React.useState({\r\n timestamp: 0,\r\n data: null,\r\n });\r\n const [currentPopulation, setCurrentPopulation] = React.useState(null);\r\n const [currentAnonymous, setCurrentAnonymous] = React.useState(null);\r\n const [filteredPlayerData, setFilteredPlayerData] = React.useState(null);\r\n const [paginatedPlayerData, setPaginatedPlayerData] = React.useState(null);\r\n const [playerCount, setPlayerCount] = React.useState(null);\r\n const [adjustedPlayerCount, setAdjustedPlayerCount] = React.useState(null);\r\n const [lastFetchTime, setLastFetchTime] = React.useState(null);\r\n const [attemptedPlayerFetch, setAttemptedPlayerFetch] = React.useState(null);\r\n const [classFilterStates, setClassFilterStates] = React.useState([\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n true,\r\n ]);\r\n const classFilterStatesRef = React.useRef(classFilterStates);\r\n classFilterStatesRef.current = classFilterStates;\r\n const CLASS_NAMES = [\r\n \"fighter\",\r\n \"paladin\",\r\n \"barbarian\",\r\n \"rogue\",\r\n \"ranger\",\r\n \"cleric\",\r\n \"wizard\",\r\n \"sorcerer\",\r\n \"bard\",\r\n \"monk\",\r\n \"favored soul\",\r\n \"artificer\",\r\n \"druid\",\r\n \"warlock\",\r\n \"alchemist\",\r\n ];\r\n const [includeRegion, setIncludeRegion] = React.useState(false);\r\n const [exactMatch, setExactMatch] = React.useState(false);\r\n\r\n const [reported, setReported] = React.useState(false);\r\n\r\n const [failedAttemptCount, setFailedAttemptCount] = React.useState(0);\r\n const failedAttemptRef = React.useRef(failedAttemptCount);\r\n failedAttemptRef.current = failedAttemptCount;\r\n\r\n const [serverStatus, setServerStatus] = React.useState(null);\r\n const serverStatusRef = React.useRef(serverStatus);\r\n serverStatusRef.current = serverStatus;\r\n\r\n const [ignoreServerStatus, setIgnoreServerStatus] = React.useState(false);\r\n const ignoreServerStatusRef = React.useRef(ignoreServerStatus);\r\n ignoreServerStatusRef.current = ignoreServerStatus;\r\n\r\n // Settings\r\n const [alternativeLook, setAlternativeLook] = React.useState(true);\r\n const [activeFilters, setActiveFilter] = React.useState([]);\r\n const [sortingMethod, setSortingMethod] = React.useState(\"level\");\r\n const sortingMethodRef = React.useRef(sortingMethod);\r\n const [sortingDirection, setSortingDirection] = React.useState(\"ascending\");\r\n const sortingDirectionRef = React.useRef(sortingDirection);\r\n\r\n const [pageNumber, setPageNumber] = React.useState(0);\r\n\r\n const [expandedPlayers, setExpandedPlayers] = React.useState([]);\r\n const [pinnedPlayers, setPinnedPlayers] = React.useState([]);\r\n\r\n const [filterPanelVisible, setFilterPanelVisible] = React.useState(false);\r\n\r\n const [theme, setTheme] = React.useState(true);\r\n function toggleTheme() {\r\n let theme = localStorage.getItem(\"theme\");\r\n if (theme === \"light-theme\") {\r\n setTheme(\"dark\");\r\n\r\n document.body.classList.replace(\"light-theme\", \"dark-theme\");\r\n localStorage.setItem(\"theme\", \"dark-theme\");\r\n } else {\r\n setTheme(\"light\");\r\n\r\n document.body.classList.replace(\"dark-theme\", \"light-theme\");\r\n localStorage.setItem(\"theme\", \"light-theme\");\r\n }\r\n }\r\n\r\n const [globalFilter, setGlobalFilter] = React.useState(\"\");\r\n const [minimumLevelFilter, setMinimumLevelFilter] = React.useState(1);\r\n const [maximumLevelFilter, setMaximumLevelFilter] = React.useState(MAX_LEVEL);\r\n\r\n const globalFilterRef = React.useRef(globalFilter);\r\n globalFilterRef.current = globalFilter;\r\n\r\n React.useEffect(() => {\r\n props.bubbleFilter(globalFilter);\r\n }, [globalFilter]);\r\n\r\n function getLink() {\r\n let params = \"\";\r\n if (globalFilter) {\r\n if (!params) {\r\n params += \"?\";\r\n } else {\r\n params += \"&\";\r\n }\r\n params += \"filter=\" + globalFilter;\r\n }\r\n if (minimumLevelFilter != 1) {\r\n if (!params) {\r\n params += \"?\";\r\n } else {\r\n params += \"&\";\r\n }\r\n params += \"minlevel=\" + minimumLevelFilter;\r\n }\r\n if (maximumLevelFilter != MAX_LEVEL) {\r\n if (!params) {\r\n params += \"?\";\r\n } else {\r\n params += \"&\";\r\n }\r\n params += \"maxlevel=\" + maximumLevelFilter;\r\n }\r\n\r\n return `https://www.ddoaudit.com/who/${props.server.toLowerCase()}${params}`;\r\n }\r\n\r\n function handleClassFilter(index) {\r\n setClassFilterStates((classFilterStates) =>\r\n classFilterStates.map((r, i) =>\r\n i === index ? (r === true ? false : true) : r\r\n )\r\n );\r\n }\r\n\r\n function isEveryClassChecked() {\r\n let result = true;\r\n classFilterStatesRef.current.forEach((state) => {\r\n if (!state) result = false;\r\n });\r\n return result;\r\n }\r\n\r\n function handleAnyClass() {\r\n if (isEveryClassChecked()) {\r\n setClassFilterStates(Array(15).fill(false));\r\n } else {\r\n setClassFilterStates(Array(15).fill(true));\r\n }\r\n }\r\n\r\n function handleIncludeRegion() {\r\n setIncludeRegion((includeRegion) => !includeRegion);\r\n }\r\n\r\n function handleExactMatch() {\r\n setExactMatch((exactMatch) => !exactMatch);\r\n }\r\n\r\n function handleCanvasSort(type) {\r\n if (sortingMethodRef.current == type) {\r\n setSortingDirection((sortingDirection) =>\r\n sortingDirection === \"ascending\" ? \"descending\" : \"ascending\"\r\n );\r\n } else {\r\n setSortingDirection(\"ascending\");\r\n setSortingMethod(type);\r\n sortingMethodRef.current = type;\r\n if (type === \"groupid\") {\r\n Log(\"Group View\", \"Enabled\");\r\n }\r\n }\r\n }\r\n\r\n function ApplyFilters(data) {\r\n // Apply sorting\r\n if (sortingMethod === \"level\") {\r\n if (sortingDirection === \"ascending\") {\r\n data.sort((a, b) => a.TotalLevel - b.TotalLevel);\r\n } else {\r\n data.sort((a, b) => b.TotalLevel - a.TotalLevel);\r\n }\r\n } else if (sortingMethod === \"guild\") {\r\n if (sortingDirection === \"ascending\") {\r\n data.sort((a, b) => a.Guild.localeCompare(b.Guild));\r\n } else {\r\n data.sort((a, b) => b.Guild.localeCompare(a.Guild));\r\n }\r\n } else if (sortingMethod === \"location\") {\r\n if (sortingDirection === \"ascending\") {\r\n data.sort((a, b) => {\r\n if (a.Location.Name == null || b.Location.Name == null) return 0;\r\n return a.Location.Name.localeCompare(b.Location.Name);\r\n });\r\n } else {\r\n data.sort((a, b) => {\r\n if (a.Location.Name == null || b.Location.Name == null) return 0;\r\n return b.Location.Name.localeCompare(a.Location.Name);\r\n });\r\n }\r\n } else if (sortingMethod === \"inparty\") {\r\n if (sortingDirection === \"ascending\") {\r\n data.sort((a, b) => a.InParty - b.InParty);\r\n } else {\r\n data.sort((a, b) => b.InParty - a.InParty);\r\n }\r\n } else if (sortingMethod === \"groupid\") {\r\n data.sort((a, b) => a.GroupId.localeCompare(b.GroupId));\r\n } else if (sortingMethod === \"class\") {\r\n if (sortingDirection === \"ascending\") {\r\n data.sort((a, b) => {\r\n let astring = \"\";\r\n a.Classes.forEach((c) => {\r\n astring = astring + (c.Name || \"\");\r\n });\r\n let bstring = \"\";\r\n b.Classes.forEach((c) => {\r\n bstring = bstring + (c.Name || \"\");\r\n });\r\n return astring.localeCompare(bstring);\r\n });\r\n } else {\r\n data.sort((a, b) => {\r\n let astring = \"\";\r\n a.Classes.forEach((c) => {\r\n astring = astring + (c.Name || \"\");\r\n });\r\n let bstring = \"\";\r\n b.Classes.forEach((c) => {\r\n bstring = bstring + (c.Name || \"\");\r\n });\r\n return bstring.localeCompare(astring);\r\n });\r\n }\r\n } else {\r\n if (sortingDirection === \"ascending\") {\r\n data.sort((a, b) => a.Name.localeCompare(b.Name));\r\n } else {\r\n data.sort((a, b) => b.Name.localeCompare(a.Name));\r\n }\r\n }\r\n\r\n // Apply filters\r\n data = data.filter(\r\n (player) => player.Name !== \"Anonymous\" && player.Name !== \"\"\r\n );\r\n\r\n // If sortingMethod === \"groupid\", we want to filter out all players not\r\n // in a party, and all players where their party is only themselves.\r\n if (sortingMethod === \"groupid\") {\r\n data = data.filter(\r\n (player) => player.GroupId !== null && player.GroupId !== \"0\"\r\n );\r\n\r\n data = data.filter((player) => {\r\n return (\r\n data.filter((inner_player) => inner_player.GroupId === player.GroupId)\r\n .length > 1\r\n );\r\n });\r\n }\r\n\r\n // if (activeFilters !== null && activeFilters.length !== 0) {\r\n let passingGroupIds = [];\r\n const firstPassData = data.filter((player) => {\r\n let pass = false;\r\n\r\n // Global filters\r\n let splt = globalFilter.split(\",\");\r\n splt.forEach((f) => {\r\n const trimmedFilter = f.trim();\r\n let localmatch = false;\r\n if (exactMatch) {\r\n if (player.Name === trimmedFilter) {\r\n localmatch = true;\r\n }\r\n if (player.Location.Name && player.Location.Name === trimmedFilter) {\r\n localmatch = true;\r\n }\r\n if (includeRegion) {\r\n if (\r\n player.Location.Name &&\r\n player.Location.Region === trimmedFilter\r\n ) {\r\n localmatch = true;\r\n }\r\n }\r\n if (player.Guild === trimmedFilter) {\r\n localmatch = true;\r\n }\r\n } else {\r\n if (player.Name.toLowerCase().includes(trimmedFilter.toLowerCase())) {\r\n localmatch = true;\r\n }\r\n if (\r\n player.Location.Name &&\r\n player.Location.Name.toLowerCase().includes(\r\n trimmedFilter.toLowerCase()\r\n )\r\n ) {\r\n localmatch = true;\r\n }\r\n if (includeRegion) {\r\n if (\r\n player.Location.Name &&\r\n player.Location.Region.toLowerCase().includes(\r\n trimmedFilter.toLowerCase()\r\n )\r\n ) {\r\n localmatch = true;\r\n }\r\n }\r\n if (\r\n player.Guild.toLowerCase().includes(trimmedFilter.toLowerCase())\r\n ) {\r\n localmatch = true;\r\n }\r\n }\r\n pass = pass || localmatch;\r\n });\r\n\r\n if (player.TotalLevel < minimumLevelFilter) pass = false;\r\n if (player.TotalLevel > maximumLevelFilter) pass = false;\r\n\r\n let classresult = false;\r\n classFilterStates.forEach((cls, index) => {\r\n if (cls === true) {\r\n let result = false;\r\n player.Classes.forEach((playercls) => {\r\n if (playercls.Name !== null) {\r\n if (\r\n playercls.Name.toLowerCase() ===\r\n CLASS_NAMES[index].toLowerCase()\r\n ) {\r\n result = true;\r\n }\r\n }\r\n });\r\n if (result === true) classresult = true;\r\n }\r\n });\r\n if (classresult === false) pass = false;\r\n\r\n if (pass) {\r\n if (\r\n !passingGroupIds.includes(player.GroupId) &&\r\n player.GroupId !== \"0\"\r\n ) {\r\n passingGroupIds.push(player.GroupId);\r\n }\r\n }\r\n\r\n return pass;\r\n });\r\n console.log(passingGroupIds);\r\n if (sortingMethod === \"groupid\") {\r\n data = data.filter((player) => passingGroupIds.includes(player.GroupId));\r\n data = data.sort((a, b) => {\r\n if (a.GroupId === b.GroupId) {\r\n if (a.TotalLevel === b.TotalLevel) {\r\n return a.Name.localeCompare(b.Name);\r\n } else {\r\n return a.TotalLevel - b.TotalLevel;\r\n }\r\n } else {\r\n return a.GroupId.localeCompare(b.GroupId);\r\n }\r\n });\r\n } else {\r\n data = firstPassData;\r\n }\r\n // } else {\r\n // // Pull out starred players to be inserted at the top later\r\n // let starredplayers = data.filter((p) => IsStarred(p));\r\n // data = data.filter((p) => !IsStarred(p));\r\n // data = [...starredplayers, ...data];\r\n // }\r\n\r\n // Pull out starred players to be inserted at the top later\r\n let starredplayers = data.filter((p) => IsStarred(p));\r\n data = data.filter((p) => !IsStarred(p));\r\n data = [...starredplayers, ...data];\r\n\r\n return data;\r\n }\r\n\r\n function IsExpanded(player) {\r\n let val = false;\r\n expandedPlayers.forEach((p) => {\r\n if (p.Name === player.Name) val = true;\r\n });\r\n return val;\r\n }\r\n\r\n function IsStarred(player) {\r\n let val = false;\r\n pinnedPlayers.forEach((p) => {\r\n if (p.name === player.Name && p.server === currentServer) val = true;\r\n });\r\n return val;\r\n }\r\n\r\n React.useEffect(() => {\r\n // Load local storage\r\n let theme = localStorage.getItem(\"theme\");\r\n setTheme(theme);\r\n\r\n let alternativelook = localStorage.getItem(\"alternative-who-look\");\r\n setAlternativeLook(\r\n alternativelook !== null ? alternativelook === \"true\" : false\r\n );\r\n\r\n // Load filters from URL\r\n let urlfilters = new URLSearchParams(window.location.search);\r\n let urlfilter = urlfilters.get(\"filter\");\r\n // Legacy:\r\n let urlname = urlfilters.get(\"name\");\r\n let urlguild = urlfilters.get(\"guild\");\r\n let urllocation = urlfilters.get(\"location\");\r\n let urlminlevel = urlfilters.get(\"minlevel\");\r\n let urlmaxlevel = urlfilters.get(\"maxlevel\");\r\n\r\n let activefilterarray = [];\r\n let globalfilter = [];\r\n if (urlfilter) {\r\n globalfilter.push(urlfilter);\r\n }\r\n if (urlminlevel) {\r\n setMinimumLevelFilter(urlminlevel);\r\n }\r\n if (urlmaxlevel) {\r\n setMaximumLevelFilter(urlmaxlevel);\r\n }\r\n // Legacy:\r\n if (urlname) {\r\n globalfilter.push(urlname);\r\n }\r\n if (urlguild) {\r\n globalfilter.push(urlguild);\r\n }\r\n if (urllocation) {\r\n globalfilter.push(urllocation);\r\n }\r\n setGlobalFilter(globalfilter.join(\",\"));\r\n\r\n // setActiveFilter(activefilterarray);\r\n }, []);\r\n\r\n function GetSnarkyMessage() {\r\n if (playerCount === 0) {\r\n return \"Maybe they're all anonymous.\";\r\n } else {\r\n return \"Are you one of them?\";\r\n }\r\n }\r\n\r\n // Apply filter after filter change\r\n React.useEffect(() => {\r\n if (playerData === null || playerData.data === null) return;\r\n setFilteredPlayerData(ApplyFilters(playerData.data.Players));\r\n }, [\r\n globalFilter,\r\n minimumLevelFilter,\r\n maximumLevelFilter,\r\n activeFilters,\r\n playerData,\r\n sortingMethod,\r\n sortingDirection,\r\n pinnedPlayers,\r\n classFilterStates,\r\n includeRegion,\r\n exactMatch,\r\n ]);\r\n\r\n React.useEffect(() => {\r\n if (filteredPlayerData === null) return;\r\n setPaginatedPlayerData(\r\n filteredPlayerData.slice(\r\n Math.max(0, pageNumber * PAGE_SIZE),\r\n Math.min(pageNumber * PAGE_SIZE + PAGE_SIZE, filteredPlayerData.length)\r\n )\r\n );\r\n }, [filteredPlayerData, pageNumber]);\r\n\r\n const lastManualLookupTimeRef = React.useRef(0);\r\n const refreshButtonAngleRef = React.useRef(null);\r\n function refreshButtonHandler() {\r\n if (Date.now() - lastManualLookupTimeRef.current > 3000) {\r\n FetchPlayerData();\r\n refreshButtonAngleRef.current += 360;\r\n $(\"#who-refresh-button\").css({\r\n transform: `rotate(${refreshButtonAngleRef.current}deg)`,\r\n });\r\n Log(\"Manual player refresh\", \"\");\r\n lastManualLookupTimeRef.current = Date.now();\r\n }\r\n }\r\n\r\n // Let's get some data\r\n let recheck; // TODO: Clearing this timeout doesn't work\r\n let refreshdata;\r\n React.useEffect(() => {\r\n clearTimeout(recheck); // TODO: Clearing this timeout doesn't work\r\n setFilteredPlayerData(null);\r\n if (!props.server) return;\r\n\r\n FetchPlayerData();\r\n\r\n refreshdata = setInterval(() => {\r\n FetchPlayerData();\r\n }, 30000);\r\n return () => {\r\n clearInterval(refreshdata);\r\n clearTimeout(recheck);\r\n };\r\n }, [props.server]);\r\n\r\n function FetchPlayerData(timeout = 5000) {\r\n if (failedAttemptRef.current > 6) {\r\n return;\r\n }\r\n Fetch(\"https://api.ddoaudit.com/gamestatus/serverstatus\", 5000)\r\n .then((val) => {\r\n let serverstatus = false;\r\n if (val.hasOwnProperty(\"Worlds\")) {\r\n val.Worlds.forEach((world) => {\r\n if (world.Name.toLowerCase() === props.server.toLowerCase()) {\r\n if (world.Status === 1) {\r\n serverstatus = true;\r\n setServerStatus(true);\r\n } else {\r\n serverstatus = false;\r\n setServerStatus(false);\r\n }\r\n }\r\n });\r\n } else {\r\n serverstatus = false;\r\n setServerStatus(false);\r\n }\r\n if (serverstatus === true || ignoreServerStatusRef.current) {\r\n Fetch(\r\n \"https://api.ddoaudit.com/gamestatus/populationoverview\",\r\n timeout\r\n ).then((val) => {\r\n val.forEach((server) => {\r\n if (server.ServerName === props.server) {\r\n setCurrentPopulation(server.PlayerCount);\r\n }\r\n });\r\n });\r\n Fetch(\r\n \"https://api.ddoaudit.com/players/\" +\r\n (SERVER_LIST_LOWERCASE.includes(props.server.toLowerCase())\r\n ? props.server\r\n : \"\"),\r\n timeout\r\n )\r\n .then((val) => {\r\n setLastFetchTime(Date.now());\r\n setAttemptedPlayerFetch(true);\r\n if (VerifyPlayerData(val)) {\r\n props.triggerPopup(null);\r\n failedAttemptRef.current = 0;\r\n setFailedAttemptCount(failedAttemptRef.current);\r\n setPlayerData({\r\n timestamp: Date.now(),\r\n data: val,\r\n });\r\n setCurrentPopulation(val.Population);\r\n let anon = 0;\r\n val.Players.forEach((player) => {\r\n if (player.Name === \"Anonymous\") anon++;\r\n });\r\n setCurrentAnonymous(anon);\r\n } else {\r\n failedAttemptRef.current++;\r\n setFailedAttemptCount(failedAttemptRef.current);\r\n if (failedAttemptRef.current > 5) {\r\n props.triggerPopup({\r\n title: \"Something went wrong\",\r\n message:\r\n \"Pretty descriptive, I know. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage:\r\n val === null\r\n ? \"Player data returned null\"\r\n : \"Player data verification failed\",\r\n });\r\n clearTimeout(recheck);\r\n clearInterval(refreshdata);\r\n } else {\r\n recheck = setTimeout(() => {\r\n FetchPlayerData(10000);\r\n }, 200);\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n failedAttemptRef.current++;\r\n setFailedAttemptCount(failedAttemptRef.current);\r\n setLastFetchTime(Date.now());\r\n setAttemptedPlayerFetch(true);\r\n if (failedAttemptRef.current > 3) {\r\n props.triggerPopup({\r\n title: \"Couldn't fetch player data\",\r\n message:\r\n \"Try refreshing the page. If the issue continues, please report it.\",\r\n submessage: err && err.toString(),\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage:\r\n (err && err.toString()) ||\r\n \"Player data generic error (timeout?)\",\r\n });\r\n } else {\r\n recheck = setTimeout(() => {\r\n FetchPlayerData(10000);\r\n }, 250);\r\n }\r\n });\r\n }\r\n })\r\n .catch((err) => {\r\n failedAttemptRef.current++;\r\n setFailedAttemptCount(failedAttemptRef.current);\r\n if (failedAttemptRef.current > 5) {\r\n props.triggerPopup({\r\n title: \"Couldn't fetch server data\",\r\n message:\r\n \"Try refreshing the page. If the issue continues, please report it.\",\r\n submessage: (err && err.toString()) || \"Server status timeout\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"Server status timeout\",\r\n });\r\n } else {\r\n recheck = setTimeout(() => {\r\n FetchPlayerData(10000);\r\n }, 250);\r\n }\r\n });\r\n }\r\n\r\n React.useEffect(() => {\r\n if (playerData.data === undefined || playerData.data === null) return;\r\n setPlayerCount(playerData.data.Players.length);\r\n }, [playerData]);\r\n\r\n React.useEffect(() => {\r\n let pinnedplayers = JSON.parse(localStorage.getItem(\"pinned-players\"));\r\n if (pinnedplayers) {\r\n setPinnedPlayers(pinnedplayers);\r\n } else {\r\n setPinnedPlayers([]);\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n localStorage.setItem(\"pinned-players\", JSON.stringify(pinnedPlayers));\r\n }, [pinnedPlayers]);\r\n\r\n function getServerNamePossessive() {\r\n return `${props.server}${props.server === \"Thelanis\" ? \"'\" : \"'s\"}`;\r\n }\r\n\r\n return (\r\n \r\n setFilterPanelVisible(!filterPanelVisible)}\r\n handleSaveButton={() => download()}\r\n closePanel={() => props.closePanel()}\r\n permalink={\r\n props.permalink +\r\n (globalFilterRef.current ? \"&filter=\" + globalFilterRef.current : \"\")\r\n }\r\n showRefreshButton={true}\r\n handleRefreshButton={() => refreshButtonHandler()}\r\n />\r\n {filterPanelVisible && (\r\n \r\n setFilterPanelVisible(false)}\r\n />\r\n \r\n setFilterPanelVisible(false)}\r\n />\r\n \r\n \r\n \r\n

\r\n The Group View feature organizes players by the group they're\r\n in. Groups are distinguished by different colors. Players who\r\n are not in a group (or that are in a group with only hirelings\r\n or offline players) are not shown. Searching by name, guild,\r\n or location will show any player that meets those criteria as\r\n well as all players in their group.\r\n

\r\n

\r\n When searching by name, guild, or location, you can separate\r\n multiple queries with commas (,). For example: \"\r\n \r\n Best Guild Ever,The Marketplace\r\n \r\n \" will show characters who are from the guild \"Best Guild\r\n Ever\" or who are currently in \"The Marketplace\"\r\n

\r\n \r\n Link directly to this page with these filters\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {serverStatus !== false || ignoreServerStatus ? (\r\n paginatedPlayerData && filteredPlayerData ? (\r\n \r\n
\r\n
\r\n {`The image below is a live preview of ${getServerNamePossessive()} Who panel where all online players are visible.`}\r\n
\r\n setGlobalFilter(filter)}\r\n handleMinimumLevelFilter={(val) => {\r\n setMinimumLevelFilter(val);\r\n }}\r\n handleMaximumLevelFilter={(val) => {\r\n setMaximumLevelFilter(val);\r\n }}\r\n handleClassFilter={(i) => {\r\n handleClassFilter(i);\r\n }}\r\n handleAnyClass={() => {\r\n handleAnyClass();\r\n }}\r\n handleIncludeRegion={() => {\r\n handleIncludeRegion();\r\n }}\r\n handleExactMatch={() => {\r\n handleExactMatch();\r\n }}\r\n handleOpenSettings={() =>\r\n setFilterPanelVisible(!filterPanelVisible)\r\n }\r\n handleSort={(type) => {\r\n handleCanvasSort(type);\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n ) : (\r\n \r\n {failedAttemptCount\r\n ? `Loading player data. Attempt ${failedAttemptCount + 1}...`\r\n : \"Loading player data...\"}\r\n \r\n )\r\n ) : (\r\n \r\n \r\n \r\n This server might be offline.\r\n
\r\n You may check server status on the{\" \"}\r\n Live page.\r\n
\r\n If you believe this to be an error,\r\n

\r\n \r\n \r\n {\r\n setIgnoreServerStatus(true);\r\n FetchPlayerData();\r\n }}\r\n >\r\n Load data anyways\r\n \r\n {\r\n if ((reported || noReport) === false) {\r\n Submit(\r\n \"User reported issue from who/\" + props.server,\r\n \"[Internal] Reported 'server offline' message\"\r\n );\r\n setReported(true);\r\n }\r\n }}\r\n >\r\n {reported ? \"Thanks!\" : \"Report Issue\"}\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default WhoPanel;\r\n","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport Banner from \"../global/Banner\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport PopupMessage from \"../global/PopupMessage\";\r\nimport BannerMessage from \"../global/BannerMessage\";\r\nimport { ReactComponent as AddSVG } from \"../../assets/global/add.svg\";\r\nimport LfmPanel from \"./GroupingPanel\";\r\nimport PanelSelectPopup from \"./PanelSelectPopup\";\r\nimport WhoPanel from \"../who/WhoPanel\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport { SERVER_LIST } from \"../../constants/Servers\";\r\nimport FriendsPanel from \"../friends/FriendsPanel\";\r\nimport FeatureFlagHook from \"../../hooks/FeatureFlagHook\";\r\n\r\nconst GroupingSpecific = () => {\r\n const TITLE = \"DDO Live LFM Viewer\";\r\n\r\n const noReport = FeatureFlagHook(\"no-report\", 1000 * 60 * 60);\r\n\r\n function getBreadcrumbs(servername) {\r\n // prettier-ignore\r\n return {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"BreadcrumbList\",\r\n \"itemListElement\": [\r\n {\r\n \"@type\": \"ListItem\",\r\n position: 1,\r\n name: \"Grouping\",\r\n item: \"https://www.ddoaudit.com/grouping\",\r\n },\r\n {\r\n \"@type\": \"ListItem\",\r\n position: 2,\r\n name: `${servername}`,\r\n },\r\n ],\r\n };\r\n }\r\n\r\n const [openPanels, setOpenPanels] = React.useState([]);\r\n const [panelSelectPopupVisibility, setPanelSelectPopupVisibility] =\r\n React.useState(false);\r\n\r\n const location = useLocation().pathname.substring(\r\n useLocation().pathname.lastIndexOf(\"/\") + 1\r\n );\r\n let [currentServer, setCurrentServer] = React.useState(null);\r\n let currentServerRef = React.useRef(currentServer);\r\n React.useEffect(() => {\r\n let serverName =\r\n location.substring(0, 1).toUpperCase() + location.substring(1);\r\n if (SERVER_LIST.includes(serverName)) {\r\n // Good server\r\n setCurrentServer(serverName);\r\n currentServerRef.current = serverName;\r\n setOpenPanels([\r\n setPopupMessage(message)}\r\n permalink={() => permalink()}\r\n />,\r\n ]);\r\n } else {\r\n // Bad server\r\n setCurrentServer(SERVER_LIST[0]); // Just default to the first server in the good list\r\n }\r\n }, [window.location.pathname]);\r\n\r\n function toProperCase(str) {\r\n if (!str) return str;\r\n return `${str.substring(0, 1).toUpperCase()}${str.substring(1)}`;\r\n }\r\n\r\n React.useEffect(() => {\r\n let urlfilters = new URLSearchParams(window.location.search);\r\n let secondarytype = urlfilters.get(\"secondarytype\");\r\n let secondaryserver = urlfilters.get(\"secondaryserver\");\r\n\r\n if (secondarytype === \"friends\") {\r\n addPanel({\r\n type: secondarytype,\r\n });\r\n return;\r\n }\r\n\r\n if (secondarytype && secondaryserver) {\r\n let sspc = toProperCase(secondaryserver);\r\n if (\r\n (secondarytype == \"lfm\" || secondarytype == \"who\") &&\r\n SERVER_LIST.includes(sspc)\r\n ) {\r\n addPanel({\r\n type: secondarytype,\r\n server: sspc,\r\n });\r\n }\r\n }\r\n }, []);\r\n\r\n function getServerNamePossessive() {\r\n return `${currentServer}${currentServer === \"Thelanis\" ? \"'\" : \"'s\"}`;\r\n }\r\n\r\n function addPanel(obj) {\r\n if (obj.type === \"lfm\") {\r\n Log(\"Added LFM panel\", `Grouping ${currentServer}`);\r\n setOpenPanels((openPanels) => [\r\n ...openPanels,\r\n setOpenPanels(openPanels)}\r\n triggerPopup={(message) => setPopupMessage(message)}\r\n permalink={`https://www.ddoaudit.com/grouping/${currentServerRef.current.toLowerCase()}?secondarytype=lfm&secondaryserver=${obj.server.toLowerCase()}`}\r\n />,\r\n ]);\r\n } else if (obj.type === \"who\") {\r\n Log(\"Added Who panel\", `Grouping ${currentServer}`);\r\n setOpenPanels((openPanels) => [\r\n ...openPanels,\r\n setOpenPanels(openPanels)}\r\n triggerPopup={(message) => setPopupMessage(message)}\r\n permalink={`https://www.ddoaudit.com/grouping/${currentServerRef.current.toLowerCase()}?secondarytype=who&secondaryserver=${obj.server.toLowerCase()}`}\r\n bubbleFilter={() => {}}\r\n />,\r\n ]);\r\n } else if (obj.type === \"friends\") {\r\n Log(\"Added Friends panel\", `Grouping ${currentServer}`);\r\n setOpenPanels((openPanels) => [\r\n ...openPanels,\r\n setOpenPanels(openPanels)}\r\n permalink={`https://www.ddoaudit.com/grouping/${currentServerRef.current.toLowerCase()}?secondarytype=friends`}\r\n />,\r\n ]);\r\n }\r\n }\r\n\r\n // Popup message\r\n var [popupMessage, setPopupMessage] = React.useState(null);\r\n\r\n return (\r\n currentServer && (\r\n
\r\n \r\n \r\n {`${TITLE} for ${currentServer}`} \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setPopupMessage(null);\r\n }}\r\n noReport={noReport}\r\n />\r\n setPanelSelectPopupVisibility(false)}\r\n userSelected={(obj) => addPanel(obj)}\r\n />\r\n
\r\n \r\n \r\n
\r\n {openPanels && openPanels.length === 1 && (\r\n {\r\n setPanelSelectPopupVisibility(true);\r\n }}\r\n >\r\n \r\n \r\n Add a panel\r\n \r\n
\r\n )}\r\n {openPanels}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n );\r\n};\r\n\r\nexport default GroupingSpecific;\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgMail(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMail);\nexport default __webpack_public_path__ + \"static/media/mail.2f98028e.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport Banner from \"../global/Banner\";\r\nimport { ReactComponent as DeleteSVG } from \"../../assets/global/delete.svg\";\r\nimport { ReactComponent as EditSVG } from \"../../assets/global/edit.svg\";\r\nimport { ReactComponent as WarningSVG } from \"../../assets/global/warning.svg\";\r\nimport { getMessaging, getToken, isSupported } from \"firebase/messaging\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\n\r\nconst NotificationForm = (props) => {\r\n const TITLE = \"Grouping Notifications\";\r\n\r\n const [server, setServer] = React.useState(\"\");\r\n const [leaderName, setLeaderName] = React.useState(\"\");\r\n const [levelRange, setLevelRange] = React.useState(\"\");\r\n const [questName, setQuestName] = React.useState(\"\");\r\n const [comment, setComment] = React.useState(\"\");\r\n const [canNotify, setCanNotify] = React.useState(false);\r\n const [deniedNotifications, setDeniedNotifications] = React.useState(false);\r\n\r\n const [rules, setRules] = React.useState([]);\r\n\r\n // Firebase messaging object\r\n const messaging = isSupported() ? getMessaging() : null;\r\n\r\n React.useEffect(() => {\r\n let loadrules = JSON.parse(localStorage.getItem(\"notification-rules\"));\r\n if (loadrules) {\r\n setRules(loadrules);\r\n } else {\r\n setRules([]);\r\n }\r\n if (Notification.permission == \"granted\") {\r\n setCanNotify(true);\r\n } else if (Notification.permission == \"denied\") {\r\n setDeniedNotifications(true);\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n localStorage.setItem(\"notification-rules\", JSON.stringify(rules));\r\n }, [rules]);\r\n\r\n function AddRule() {\r\n if (\r\n !server.replace(/\\s/g, \"\") &&\r\n !leaderName.replace(/\\s/g, \"\") &&\r\n !levelRange.replace(/\\s/g, \"\") &&\r\n !questName.replace(/\\s/g, \"\") &&\r\n !comment.replace(/\\s/g, \"\")\r\n )\r\n return;\r\n\r\n setRules([\r\n ...rules,\r\n {\r\n server: server.trim(),\r\n leaderName: leaderName.trim(),\r\n levelRange: levelRange.trim(),\r\n questName: questName.trim(),\r\n comment: comment.trim(),\r\n },\r\n ]);\r\n ResetForm();\r\n }\r\n\r\n function ResetForm() {\r\n setServer(\"\");\r\n setLeaderName(\"\");\r\n setLevelRange(\"\");\r\n setQuestName(\"\");\r\n setComment(\"\");\r\n }\r\n\r\n function Edit(index) {\r\n //console.log(index);\r\n setServer(rules[index].server);\r\n setLeaderName(rules[index].leaderName);\r\n setLevelRange(rules[index].levelRange);\r\n setQuestName(rules[index].questName);\r\n setComment(rules[index].comment);\r\n Delete(index);\r\n }\r\n\r\n function Delete(index) {\r\n let rulescopy = [];\r\n rules.forEach((rule, i) => {\r\n if (i !== index) rulescopy.push(rule);\r\n });\r\n setRules(rulescopy);\r\n }\r\n\r\n function requestNotificationPermission() {\r\n Notification.requestPermission().then((result) => {\r\n if (result === \"granted\") {\r\n setCanNotify(true);\r\n permissionGranted();\r\n } else if (result === \"denied\") {\r\n //console.log(result);\r\n setDeniedNotifications(true);\r\n }\r\n });\r\n }\r\n\r\n function permissionGranted() {\r\n const notifTitle = \"Notification Permission Granted\";\r\n const notifBody = `You have granted DDO Audit the ability to send you notifications.`;\r\n const notifImg = `/icons/logo-512px.png`;\r\n const options = {\r\n body: notifBody,\r\n icon: notifImg,\r\n };\r\n new Notification(notifTitle, options);\r\n\r\n // Get registration token. Initially this makes a network call, once retrieved\r\n // subsequent calls to getToken will return from cache.\r\n getToken(messaging, {\r\n vapidKey:\r\n \"BGEIy0i8MQxyVnVJ8upeejTx2XpUIyDLI1cXnNuO-wZJPiGXdSenxmHXKxEkzIUSklEO2L_vUn4-28x7qDdS7wM\",\r\n })\r\n .then((currentToken) => {\r\n if (currentToken) {\r\n //console.log(currentToken);\r\n } else {\r\n // Show permission request UI\r\n // console.log(\r\n // \"No registration token available. Request permission to generate one.\"\r\n // );\r\n // ...\r\n }\r\n })\r\n .catch((err) => {\r\n // console.log(\"An error occurred while retrieving token. \", err);\r\n // ...\r\n });\r\n }\r\n\r\n function subscribeUser() {\r\n if (\"serviceWorker\" in navigator) {\r\n navigator.serviceWorker.ready.then(function (reg) {\r\n reg.pushManager\r\n .subscribe({\r\n userVisibleOnly: true,\r\n })\r\n .then(function (sub) {\r\n // console.log(\"Endpoint URL: \", sub.endpoint);\r\n })\r\n .catch(function (e) {\r\n if (Notification.permission === \"denied\") {\r\n console.warn(\"Permission for notifications was denied\");\r\n } else {\r\n console.error(\"Unable to subscribe to push\", e);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n subscribeUser();\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n \r\n {TITLE}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Notification Permission Denied\r\n \r\n }\r\n altTitle=\"Notification Permission Denied\"\r\n hidden={!deniedNotifications}\r\n >\r\n \r\n You have explicitly denied DDO Audit the ability to send you\r\n notifications.\r\n

\r\n \r\n If this was an error, please see the following support pages to\r\n reenable notifications:\r\n

\r\n \r\n
  • \r\n \r\n Chrome\r\n \r\n
  • \r\n
  • \r\n \r\n Firefox\r\n \r\n
  • \r\n \r\n \r\n \r\n \r\n Groups must meet all of the following criteria. Leave a\r\n field blank to ignore it. You may separate queries with commas\r\n (,).\r\n \r\n }\r\n hidden={!canNotify}\r\n >\r\n \r\n \r\n Server(s):\r\n \r\n setServer(e.target.value)}\r\n />\r\n\r\n \r\n Leader name:\r\n \r\n setLeaderName(e.target.value)}\r\n />\r\n\r\n \r\n Level range:\r\n \r\n setLevelRange(e.target.value)}\r\n />\r\n\r\n \r\n Quest name:\r\n \r\n setQuestName(e.target.value)}\r\n />\r\n\r\n \r\n Comment:\r\n \r\n setComment(e.target.value)}\r\n />\r\n
    \r\n \r\n ResetForm()}\r\n >\r\n Reset\r\n
    \r\n AddRule()}\r\n >\r\n Add Rule\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NotificationForm;\r\n","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { Link } from \"react-router-dom\";\r\nimport Banner from \"../global/Banner\";\r\nimport { Fetch, VerifyPlayerAndLfmOverview } from \"../../services/DataLoader\";\r\nimport { ReactComponent as OnlineSVG } from \"../../assets/global/online.svg\";\r\nimport { ReactComponent as OfflineSVG } from \"../../assets/global/offline.svg\";\r\nimport { ReactComponent as PendingSVG } from \"../../assets/global/pending.svg\";\r\nimport { ReactComponent as PumpkinOnlineSVG } from \"../../assets/global/pumpkin_green.svg\";\r\nimport { ReactComponent as PumpkinOfflineSVG } from \"../../assets/global/pumpkin_red.svg\";\r\nimport { ReactComponent as PumpkinPendingSVG } from \"../../assets/global/pumpkin_blue.svg\";\r\nimport { ReactComponent as FriendsSVG } from \"../../assets/global/friends.svg\";\r\nimport BannerMessage from \"../global/BannerMessage\";\r\nimport PopupMessage from \"../global/PopupMessage\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport ServerHook from \"../../hooks/ServerHook\";\r\nimport DataClassification from \"../global/DataClassification\";\r\n\r\nconst Who = (props) => {\r\n const TITLE = \"DDO Live Who Panel\";\r\n const SERVERS = ServerHook();\r\n\r\n var [overviewData, setOverviewData] = React.useState(null);\r\n var [serverStatusData, setServerStatusData] = React.useState(null);\r\n\r\n // Popup message\r\n var [popupMessage, setPopupMessage] = React.useState(null);\r\n\r\n const EVENT_THEME = isSpookyTime();\r\n\r\n function isSpookyTime() {\r\n let dt = new Date();\r\n if (dt.getMonth() === 9 && dt.getDate() >= 4) {\r\n return \"revels\";\r\n }\r\n return \"\";\r\n }\r\n\r\n const PENDING =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const ONLINE =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const OFFLINE =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n function GetSVG(world) {\r\n if (world === undefined || world === null) return PENDING;\r\n if (!world.hasOwnProperty(\"Status\")) return PENDING;\r\n switch (world.Status) {\r\n case 0:\r\n return OFFLINE;\r\n case 1:\r\n return ONLINE;\r\n default:\r\n return PENDING;\r\n }\r\n }\r\n\r\n function GetServerDescription(name) {\r\n if (overviewData === null || overviewData === undefined) {\r\n return (\r\n \r\n Loading...\r\n

    \r\n );\r\n }\r\n return (\r\n \r\n {overviewData.filter((server) => server.ServerName === name)[0]\r\n .PlayerCount + \" players\"}\r\n

    \r\n );\r\n }\r\n\r\n React.useEffect(() => {\r\n function FetchPlayerData() {\r\n Fetch(\"https://api.ddoaudit.com/gamestatus/serverstatus\", 5000)\r\n .then((val) => {\r\n setPopupMessage(null);\r\n setServerStatusData(val);\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get server status\",\r\n message:\r\n \"We failed to look up server staus. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"Server status error\",\r\n submessage: (err && err.toString()) || \"Server status error\",\r\n });\r\n setServerStatusData(null);\r\n });\r\n\r\n Fetch(\"https://api.ddoaudit.com/gamestatus/populationoverview\", 5000)\r\n .then((val) => {\r\n if (VerifyPlayerAndLfmOverview(val)) {\r\n setOverviewData(val);\r\n } else {\r\n setPopupMessage({\r\n title: \"Something went wrong\",\r\n message:\r\n \"Pretty descriptive, I know. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: JSON.stringify(val) || \"Group data corrupted\",\r\n });\r\n setOverviewData(null);\r\n }\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get population data\",\r\n message:\r\n \"We were unable to get population data. You can refresh the page or report the issue.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage:\r\n (err && err.toString()) || \"Could not fetch Group data\",\r\n submessage: (err && err.toString()) || \"Could not fetch Group data\",\r\n });\r\n });\r\n }\r\n FetchPlayerData();\r\n\r\n const refreshdata = setInterval(() => {\r\n FetchPlayerData();\r\n }, 60000);\r\n return () => clearInterval(refreshdata);\r\n }, []);\r\n\r\n return (\r\n
    \r\n \r\n {TITLE}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setPopupMessage(null);\r\n }}\r\n />\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n {SERVERS.map((name, i) => (\r\n \r\n
    \r\n {serverStatusData\r\n ? GetSVG(\r\n serverStatusData.Worlds.filter(\r\n (server) => server.Name === name\r\n )[0]\r\n )\r\n : GetSVG()}\r\n

    {name}

    \r\n
    \r\n {GetServerDescription(name)}\r\n \r\n ))}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n

    Friends List

    \r\n
    \r\n

    \r\n Build your own friends list to quickly see who's online.\r\n

    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default Who;\r\n","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport Banner from \"../global/Banner\";\r\nimport PopupMessage from \"../global/PopupMessage\";\r\nimport BannerMessage from \"../global/BannerMessage\";\r\nimport { ReactComponent as AddSVG } from \"../../assets/global/add.svg\";\r\nimport WhoPanel from \"./WhoPanel\";\r\nimport LfmPanel from \"../grouping/GroupingPanel\";\r\nimport PanelSelectPopup from \"../grouping/PanelSelectPopup\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport { SERVER_LIST } from \"../../constants/Servers\";\r\nimport FriendsPanel from \"../friends/FriendsPanel\";\r\nimport FeatureFlagHook from \"../../hooks/FeatureFlagHook\";\r\n\r\nconst WhoSpecific = (props) => {\r\n // TODO: If this server is currently offline, don't bother checking for players\r\n const TITLE = \"DDO Live Who Panel\";\r\n\r\n const noReport = FeatureFlagHook(\"no-report\", 1000 * 60 * 60);\r\n\r\n function getBreadcrumbs(servername) {\r\n // prettier-ignore\r\n return {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"BreadcrumbList\",\r\n \"itemListElement\": [\r\n {\r\n \"@type\": \"ListItem\",\r\n position: 1,\r\n name: \"Who\",\r\n item: \"https://www.ddoaudit.com/who\",\r\n },\r\n {\r\n \"@type\": \"ListItem\",\r\n position: 2,\r\n name: `${servername}`,\r\n },\r\n ],\r\n };\r\n }\r\n\r\n const [openPanels, setOpenPanels] = React.useState([]);\r\n const [panelSelectPopupVisibility, setPanelSelectPopupVisibility] =\r\n React.useState(false);\r\n\r\n const [primaryFilter, setPrimaryFilter] = React.useState(\"\");\r\n\r\n const location = useLocation().pathname.substring(\r\n useLocation().pathname.lastIndexOf(\"/\") + 1\r\n );\r\n var [currentServer, setCurrentServer] = React.useState(null);\r\n let currentServerRef = React.useRef(currentServer);\r\n React.useEffect(() => {\r\n let serverName =\r\n location.substring(0, 1).toUpperCase() + location.substring(1);\r\n if (SERVER_LIST.includes(serverName)) {\r\n // Good server\r\n setCurrentServer(serverName);\r\n currentServerRef.current = serverName;\r\n setOpenPanels([\r\n setPopupMessage(message)}\r\n permalink={() => permalink()}\r\n bubbleFilter={(value) => setPrimaryFilter(value)}\r\n />,\r\n ]);\r\n } else {\r\n // Bad server\r\n setCurrentServer(SERVER_LIST[0]); // Just default to the first server in the good list\r\n }\r\n }, [window.location.pathname]);\r\n\r\n function addPanel(obj) {\r\n if (obj.type === \"lfm\") {\r\n Log(\"Added LFM panel\", `Who ${currentServer}`);\r\n setOpenPanels((openPanels) => [\r\n ...openPanels,\r\n setOpenPanels(openPanels)}\r\n triggerPopup={(message) => setPopupMessage(message)}\r\n permalink={`https://www.ddoaudit.com/who/${currentServerRef.current.toLowerCase()}?secondarytype=lfm&secondaryserver=${obj.server.toLowerCase()}${\r\n primaryFilter ? \"&filter=\" + primaryFilter : \"\"\r\n }`}\r\n />,\r\n ]);\r\n } else if (obj.type === \"who\") {\r\n Log(\"Added Who panel\", `Who ${currentServer}`);\r\n setOpenPanels((openPanels) => [\r\n ...openPanels,\r\n setOpenPanels(openPanels)}\r\n triggerPopup={(message) => setPopupMessage(message)}\r\n permalink={`https://www.ddoaudit.com/who/${currentServerRef.current.toLowerCase()}?secondarytype=who&secondaryserver=${obj.server.toLowerCase()}`}\r\n bubbleFilter={() => {}}\r\n />,\r\n ]);\r\n } else if (obj.type === \"friends\") {\r\n Log(\"Added Friends panel\", `Who ${currentServer}`);\r\n setOpenPanels((openPanels) => [\r\n ...openPanels,\r\n setOpenPanels(openPanels)}\r\n permalink={`https://www.ddoaudit.com/who/${currentServerRef.current.toLowerCase()}?secondarytype=friends`}\r\n />,\r\n ]);\r\n }\r\n }\r\n\r\n function toProperCase(str) {\r\n if (!str) return str;\r\n return `${str.substring(0, 1).toUpperCase()}${str.substring(1)}`;\r\n }\r\n\r\n React.useEffect(() => {\r\n let urlfilters = new URLSearchParams(window.location.search);\r\n let secondarytype = urlfilters.get(\"secondarytype\");\r\n let secondaryserver = urlfilters.get(\"secondaryserver\");\r\n\r\n if (secondarytype === \"friends\") {\r\n addPanel({\r\n type: secondarytype,\r\n });\r\n return;\r\n }\r\n\r\n if (secondarytype && secondaryserver) {\r\n let sspc = toProperCase(secondaryserver);\r\n if (\r\n (secondarytype == \"lfm\" || secondarytype == \"who\") &&\r\n SERVER_LIST.includes(sspc)\r\n ) {\r\n addPanel({\r\n type: secondarytype,\r\n server: sspc,\r\n });\r\n }\r\n }\r\n }, []);\r\n\r\n // Report Form\r\n var [reportFormVisibility, setReportFormVisibility] = React.useState(\"none\");\r\n var [reportFormReference, setReportFormReference] = React.useState(null);\r\n function showReportForm(reference) {\r\n // Grab relevant info from the tile element that's being reported\r\n let referenceInfo = {\r\n title: reference.title,\r\n type: reference.chartType,\r\n displayType: reference.displayType,\r\n trendType: reference.trendType,\r\n showActions: reference.showActions,\r\n precomment: reference.precomment,\r\n //data: reference.chartData,\r\n };\r\n // Show the report form\r\n setReportFormReference(referenceInfo);\r\n setReportFormVisibility(\"block\");\r\n }\r\n function hideReportForm() {\r\n setReportFormVisibility(\"none\");\r\n }\r\n function report(reference, custom) {\r\n showReportForm({\r\n title: \"LFM Viewer\",\r\n precomment: custom,\r\n chartType: null,\r\n displayType: null,\r\n trendType: null,\r\n showActions: null,\r\n });\r\n }\r\n\r\n // Popup message\r\n var [popupMessage, setPopupMessage] = React.useState(null);\r\n\r\n function getServerNamePossessive() {\r\n return `${currentServer}${currentServer === \"Thelanis\" ? \"'\" : \"'s\"}`;\r\n }\r\n\r\n return (\r\n currentServer && (\r\n
    \r\n \r\n \r\n {`${TITLE} for ${currentServer}`} \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setPopupMessage(null);\r\n }}\r\n noReport={noReport}\r\n />\r\n setPanelSelectPopupVisibility(false)}\r\n userSelected={(obj) => addPanel(obj)}\r\n />\r\n \r\n \r\n \r\n
    \r\n {openPanels && openPanels.length === 1 && (\r\n {\r\n setPanelSelectPopupVisibility(true);\r\n }}\r\n >\r\n \r\n \r\n Add a panel\r\n \r\n
    \r\n )}\r\n {openPanels}\r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nexport default WhoSpecific;\r\n","import React from \"react\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\n\r\nconst FAQ = (props) => {\r\n return (\r\n \r\n
    \r\n \r\n What is DDO's most populated server?\r\n \r\n

    \r\n {props.mostPopulatedServer} is DDO's most populated server.\r\n

    \r\n \r\n What is DDO's default server?\r\n \r\n

    \r\n {props.defaultServer} is currently DDO's default server and will have\r\n the most new players.\r\n

    \r\n \r\n How many players does DDO have?\r\n \r\n

    \r\n There have been{\" \"}\r\n {props.uniquePlayerCount}{\" \"}\r\n unique characters on DDO in the last 90 days.\r\n

    \r\n \r\n What is DDO's best server?\r\n \r\n

    \r\n The best server for you will depend on the number of players online\r\n during your preferred play time (check our \"Servers\" page for more\r\n information). If you're new to DDO, start on {props.defaultServer}{\" \"}\r\n which is currently DDO's default server.\r\n

    \r\n \r\n Is DDO down?\r\n \r\n

    \r\n Server status can be checked on our \"Live\" page. The data is updated\r\n every minute.\r\n

    \r\n \r\n Is DDO still active in {new Date().getFullYear()}?\r\n \r\n

    \r\n Yes, DDO is still active and receives periodic updates and content\r\n releases. There have been{\" \"}\r\n {props.uniquePlayerCount}{\" \"}\r\n unique characters and{\" \"}\r\n {props.uniqueGuildCount} unique\r\n guilds on DDO in the last 90 days.\r\n

    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default FAQ;\r\n","import React, { Component } from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Fetch } from \"../../services/DataLoader\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport FAQ from \"./FAQ\";\r\n\r\nconst QuickInfo = (props) => {\r\n const FAQ_STRUCTURED = {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"FAQPage\",\r\n mainEntity: [\r\n {\r\n \"@type\": \"Question\",\r\n name: \"What is DDO's most populated server?\",\r\n acceptedAnswer: {\r\n \"@type\": \"Answer\",\r\n text: `${getMostPopulatedServerLink(\r\n true\r\n )} is DDO's most populated server.`,\r\n },\r\n },\r\n {\r\n \"@type\": \"Question\",\r\n name: \"What is DDO's default server?\",\r\n acceptedAnswer: {\r\n \"@type\": \"Answer\",\r\n text: `${getDefaultServerLink(\r\n true\r\n )} is currently DDO's default server and will have the most new players.`,\r\n },\r\n },\r\n {\r\n \"@type\": \"Question\",\r\n name: \"How many players does DDO have?\",\r\n acceptedAnswer: {\r\n \"@type\": \"Answer\",\r\n text: `There have been ${GetTotalUniquePlayerCount()} unique characters on DDO in the last 90 days.`,\r\n },\r\n },\r\n {\r\n \"@type\": \"Question\",\r\n name: \"What is DDO's best server?\",\r\n acceptedAnswer: {\r\n \"@type\": \"Answer\",\r\n text: `The best server for you will depend on the number of players online during your preferred play time (check our \"Servers\" page for more information). If you're new to DDO, start on ${getDefaultServerLink(\r\n true\r\n )} which is currently DDO's default server.`,\r\n },\r\n },\r\n {\r\n \"@type\": \"Question\",\r\n name: \"Is DDO down?\",\r\n acceptedAnswer: {\r\n \"@type\": \"Answer\",\r\n text: `Server status can be checked on our \"Live\" page. The data is updated every minute.`,\r\n },\r\n },\r\n {\r\n \"@type\": \"Question\",\r\n name: `Is DDO still active in ${new Date().getFullYear()}?`,\r\n acceptedAnswer: {\r\n \"@type\": \"Answer\",\r\n text: `Yes, DDO is still active and receives periodic updates and content releases. There have been ${GetTotalUniquePlayerCount()} unique characters and ${GetTotalUniqueGuildCount()} unique guilds on DDO in the last 90 days.`,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n const [news, setNews] = React.useState(null);\r\n\r\n function FormatWithCommas(x) {\r\n return x.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n }\r\n\r\n function GetTotalUniquePlayerCount() {\r\n if (!props.unique) return \"N/A\";\r\n let total = 0;\r\n props.unique.forEach((server) => {\r\n total += server.TotalCharacters;\r\n });\r\n return FormatWithCommas(total.toString());\r\n }\r\n\r\n function GetTotalUniqueGuildCount() {\r\n if (!props.unique) return \"N/A\";\r\n let total = 0;\r\n props.unique.forEach((server) => {\r\n total += server.TotalGuilds;\r\n });\r\n return FormatWithCommas(total.toString());\r\n }\r\n\r\n function GetNews() {\r\n Fetch(\"https://api.ddoaudit.com/news\", 5000)\r\n .then((val) => {\r\n setNews(val || []);\r\n })\r\n .catch(() => {});\r\n }\r\n\r\n function getMegaServerLink() {\r\n return (\r\n \r\n Eberron Mega-Server\r\n \r\n );\r\n }\r\n\r\n function getDefaultServerLink(nameonly = false) {\r\n let defaultserver = \"\";\r\n if (\r\n props.serverstatus == null ||\r\n props.serverstatus.Worlds == null ||\r\n props.serverstatus.Worlds.length == 0\r\n ) {\r\n return (\r\n \r\n unknown (failed to fetch data)\r\n \r\n );\r\n }\r\n props.serverstatus.Worlds.forEach((server) => {\r\n if (server.Order == null) {\r\n defaultserver = \"unknown (servers are offline)\";\r\n } else {\r\n if (server.Order == 0) {\r\n if (defaultserver == \"\") {\r\n defaultserver = server.Name;\r\n } else {\r\n defaultserver = \"unknown (servers are offline)\";\r\n }\r\n }\r\n }\r\n });\r\n if (nameonly) {\r\n return defaultserver;\r\n }\r\n if (defaultserver == \"unknown (servers are offline)\") {\r\n return (\r\n \r\n unknown (servers are offline)\r\n \r\n );\r\n }\r\n return (\r\n \r\n {defaultserver}\r\n \r\n );\r\n }\r\n\r\n function getMostPopulatedServerLink(nameonly = false) {\r\n let mostpopulatedserver = \"\";\r\n let population = 0;\r\n if (props.serverdistribution == null || props.serverdistribution == []) {\r\n return (\r\n \r\n unknown (failed to fetch data)\r\n \r\n );\r\n }\r\n props.serverdistribution.forEach((series) => {\r\n if (series.value > population && series.id !== \"Hardcore\") {\r\n population = series.value;\r\n mostpopulatedserver = series.id;\r\n }\r\n });\r\n if (nameonly) {\r\n return mostpopulatedserver;\r\n }\r\n if (mostpopulatedserver == \"unknown (servers are offline)\") {\r\n return (\r\n \r\n unknown (servers are offline)\r\n \r\n );\r\n }\r\n return (\r\n \r\n {mostpopulatedserver}\r\n \r\n );\r\n }\r\n\r\n React.useEffect(() => {\r\n GetNews();\r\n }, []);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n
  • \r\n The default server is{\" \"}\r\n {props.serverstatus === null\r\n ? \"(Loading...)\"\r\n : getDefaultServerLink()}\r\n
  • \r\n
  • \r\n The most populated server is{\" \"}\r\n {props.serverdistribution === null\r\n ? \"(Loading...)\"\r\n : getMostPopulatedServerLink()}\r\n
  • \r\n
  • \r\n In the last quarter, we've seen{\" \"}\r\n \r\n {props.unique === null\r\n ? \"(Loading...)\"\r\n : GetTotalUniquePlayerCount()}\r\n {\" \"}\r\n unique characters and{\" \"}\r\n \r\n {props.unique === null\r\n ? \"(Loading...)\"\r\n : GetTotalUniqueGuildCount()}\r\n {\" \"}\r\n unique guilds\r\n
  • \r\n \r\n
    \r\n \r\n {news == null ? (\r\n \r\n Loading news...\r\n \r\n ) : news.length > 0 ? (\r\n \r\n {news.map((message, i) => (\r\n
    \r\n \r\n {message.date}:{\" \"}\r\n \r\n

    \r\n
    \r\n ))}\r\n \r\n ) : (\r\n \r\n There's nothing going on in our neck of the woods!\r\n

    \r\n )}\r\n {news != null && (\r\n \r\n Make a suggestion\r\n \r\n )}\r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nexport default QuickInfo;\r\n","import React from \"react\";\r\n\r\nconst PlayerAndLfmSubtitle = (props) => {\r\n function FormatWithCommas(x) {\r\n return x.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n }\r\n\r\n return (\r\n
    \r\n \r\n There are currently{\" \"}\r\n \r\n {props.data\r\n ? FormatWithCommas(props.data.Players.toString())\r\n : \"(Loading...)\"}\r\n {\" \"}\r\n players online and{\" \"}\r\n \r\n {props.data ? props.data.LFMs : \"(Loading...)\"}\r\n {\" \"}\r\n LFMs posted.{\" \"}\r\n {props.data &&\r\n (props.data.Players\r\n ? \"Are you one of them?\"\r\n : \"Maybe everyone's anonymous.\")}\r\n

    \r\n
    \r\n );\r\n};\r\n\r\nexport default PlayerAndLfmSubtitle;\r\n","import React from \"react\";\r\nimport { ReactComponent as OnlineSVG } from \"../../assets/global/online.svg\";\r\nimport { ReactComponent as OfflineSVG } from \"../../assets/global/offline.svg\";\r\nimport { ReactComponent as PendingSVG } from \"../../assets/global/pending.svg\";\r\nimport { ReactComponent as PumpkinOnlineSVG } from \"../../assets/global/pumpkin_green.svg\";\r\nimport { ReactComponent as PumpkinOfflineSVG } from \"../../assets/global/pumpkin_red.svg\";\r\nimport { ReactComponent as PumpkinPendingSVG } from \"../../assets/global/pumpkin_blue.svg\";\r\nimport ContentCluster from \"./ContentCluster\";\r\nimport { SERVER_LIST } from \"../../constants/Servers\";\r\n\r\nconst ServerStatusDisplay = (props) => {\r\n const EVENT_THEME = isSpookyTime();\r\n\r\n function isSpookyTime() {\r\n let dt = new Date();\r\n if (dt.getMonth() === 9 && dt.getDate() >= 4) {\r\n return \"revels\";\r\n }\r\n return \"\";\r\n }\r\n\r\n const PENDING =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const ONLINE =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const OFFLINE =\r\n EVENT_THEME === \"revels\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n function GetSVG(world) {\r\n if (!world.hasOwnProperty(\"Status\")) return PENDING;\r\n switch (world.Status) {\r\n case 0:\r\n return (\r\n <>\r\n {OFFLINE}\r\n {world.Name} is offline\r\n \r\n );\r\n case 1:\r\n return (\r\n <>\r\n {ONLINE}\r\n {world.Name} is online\r\n \r\n );\r\n default:\r\n return (\r\n <>\r\n {PENDING}\r\n {world.Name} is loading\r\n \r\n );\r\n }\r\n }\r\n\r\n function PrettyTime(dt) {\r\n return new Date(dt).toLocaleTimeString();\r\n }\r\n\r\n return (\r\n \r\n
    \r\n {props.data && props.data.Worlds\r\n ? props.data.Worlds.map((world, i) => (\r\n
    \r\n {GetSVG(world)}\r\n {world.Name}\r\n
    \r\n ))\r\n : SERVER_LIST.map((world, i) => (\r\n
    \r\n
    {props.data ? OFFLINE : PENDING}
    \r\n {world}\r\n
    \r\n ))}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default ServerStatusDisplay;\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport Banner from \"../global/Banner\";\r\nimport { Fetch } from \"../../services/DataLoader\";\r\nimport PopupMessage from \"../global/PopupMessage\";\r\nimport QuickInfo from \"./QuickInfo\";\r\nimport PlayerAndLfmSubtitle from \"./PlayerAndLfmSubtitle\";\r\nimport ChartLine from \"../global/ChartLine\";\r\nimport ServerStatusDisplay from \"../global/ServerStatusDisplay\";\r\nimport { ReactComponent as ServersSVG } from \"../../assets/global/servers.svg\";\r\nimport { ReactComponent as TrendsSVG } from \"../../assets/global/trends.svg\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport BannerMessage from \"../global/BannerMessage\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport ToggleButton from \"../global/ToggleButton\";\r\nimport DataClassification from \"../global/DataClassification\";\r\n\r\nconst Live = (props) => {\r\n const TITLE = \"DDO Server Status\";\r\n\r\n // Popup message\r\n var [popupMessage, setPopupMessage] = React.useState(null);\r\n\r\n const [serverStatusData, setServerStatusData] = React.useState(null);\r\n const [uniqueCountsData, setUniqueCountsData] = React.useState(null);\r\n const [playerAndLFMCountData, setPlayerAndLFMCountData] =\r\n React.useState(null);\r\n const [serverDistributionData, setServerDistributionData] =\r\n React.useState(null);\r\n\r\n const [population24HoursData, setPopulation24HoursData] =\r\n React.useState(null);\r\n const [population24HoursType, setPopulation24HoursType] =\r\n React.useState(\"population\");\r\n let firstLoadRef = React.useRef(true);\r\n\r\n React.useEffect(() => {\r\n if (firstLoadRef.current === true) {\r\n firstLoadRef.current = false;\r\n return;\r\n }\r\n Fetch(\r\n `https://api.ddoaudit.com/population/day${\r\n population24HoursType === \"population\" ? \"\" : \"_groups\"\r\n }`,\r\n 5000\r\n ).then((val) => {\r\n setPopulation24HoursData(val.filter((series) => series.id !== \"Total\"));\r\n });\r\n }, [population24HoursType]);\r\n\r\n function refreshServerStatus() {\r\n Fetch(\"https://api.ddoaudit.com/gamestatus/serverstatus\", 5000)\r\n .then((val) => {\r\n setPopupMessage(null);\r\n val.Worlds = [\r\n ...val.Worlds.filter((w) => w.Name !== \"Hardcore\"),\r\n ...val.Worlds.filter((w) => w.Name === \"Hardcore\"),\r\n ];\r\n setServerStatusData(val);\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get server status\",\r\n message:\r\n \"We failed to look up server staus. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"Server status error\",\r\n submessage: (err && err.toString()) || \"Server status error\",\r\n });\r\n setServerStatusData(null);\r\n });\r\n }\r\n\r\n function refreshPopulationAndQuickInfo() {\r\n Fetch(\"https://api.ddoaudit.com/population/uniquedata\", 5000)\r\n .then((val) => {\r\n setUniqueCountsData(val);\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get unique data\",\r\n message:\r\n \"We failed to look up quarterly players and guilds. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"Unique data error\",\r\n submessage: (err && err.toString()) || \"Unique data error\",\r\n });\r\n setUniqueCountsData(null);\r\n });\r\n\r\n Fetch(\"https://api.ddoaudit.com/population/day\", 5000)\r\n .then((val) => {\r\n setPopulation24HoursData(val.filter((series) => series.id !== \"Total\"));\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get population data\",\r\n message:\r\n \"We failed to look up recent population data. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"24 hour population error\",\r\n submessage: (err && err.toString()) || \"24 hour population error\",\r\n });\r\n setPopulation24HoursData(null);\r\n });\r\n\r\n Fetch(\"https://api.ddoaudit.com/population/latest\", 5000)\r\n .then((val) => {\r\n setPlayerAndLFMCountData(val);\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get population data\",\r\n message:\r\n \"We failed to look up current population data. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"Current population error\",\r\n submessage: (err && err.toString()) || \"Current population error\",\r\n });\r\n setPlayerAndLFMCountData(null);\r\n });\r\n\r\n Fetch(\"https://api.ddoaudit.com/population/serverdistributionmonth\", 5000)\r\n .then((val) => {\r\n setServerDistributionData(val);\r\n })\r\n .catch((err) => {\r\n setPopupMessage({\r\n title: \"Couldn't get most populated server\",\r\n message:\r\n \"We failed to look up recent population data. Try refreshing the page. If the issue continues, please report it.\",\r\n icon: \"warning\",\r\n fullscreen: false,\r\n reportMessage: (err && err.toString()) || \"Server distribution error\",\r\n submessage: (err && err.toString()) || \"Server distribution error\",\r\n });\r\n setServerDistributionData(null);\r\n });\r\n }\r\n\r\n React.useEffect(() => {\r\n refreshServerStatus();\r\n refreshPopulationAndQuickInfo();\r\n const interval = setInterval(() => refreshServerStatus(), 15000); // Server status should refresh on this page\r\n const interval2 = setInterval(\r\n () => refreshPopulationAndQuickInfo(),\r\n 60000 * 5\r\n );\r\n\r\n return () => {\r\n clearInterval(interval);\r\n clearInterval(interval2);\r\n };\r\n }, []);\r\n\r\n return (\r\n
    \r\n \r\n {TITLE}\r\n \r\n \r\n \r\n \r\n \r\n {\r\n setPopupMessage(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 {\r\n setPopulation24HoursType(\"population\");\r\n }}\r\n doB={() => {\r\n setPopulation24HoursType(\"groups\");\r\n }}\r\n />\r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n

    Server Statistics

    \r\n
    \r\n

    \r\n Server population, character demographics, and activity trends.\r\n

    \r\n \r\n \r\n
    \r\n \r\n

    Trends

    \r\n
    \r\n

    \r\n Long-term trends, daily minimum and maximum population, and\r\n important game events.\r\n

    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default Live;\r\n","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ReactComponent as ApiSVG } from \"../../assets/global/api.svg\";\r\nimport { ReactComponent as TimelineSVG } from \"../../assets/global/timeline.svg\";\r\nimport Banner from \"../global/Banner\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport { LargeDonateButton } from \"../donations/DonateButton\";\r\n\r\nconst About = (props) => {\r\n const TITLE = \"About DDO Audit\";\r\n\r\n return (\r\n
    \r\n \r\n {TITLE}\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n

    \r\n We want to provide the community with the most accurate and\r\n up-to-date information on DDO's population as possible, foster\r\n player interactions by hosting a Live LFM panel and Live 'Who' list,\r\n and keep players informed of server status, time zone trends,\r\n character demographics, and more! We're not here to push an agenda\r\n or to point fingers.{\" \"}\r\n \r\n Our goal is, and has always been, to provide useful, transparent,\r\n and unbiased information.\r\n \r\n

    \r\n
    \r\n \r\n

    \r\n Data is collected from the game client every 10 seconds. This data\r\n contains no personal information; the information that this data\r\n contains is visible in the in-game \"Who\" panel (name, gender, race,\r\n etc.).{\" \"}\r\n \r\n We do not collect, store, or publish personal information.\r\n {\" \"}\r\n We do, however, collect information on anonymous characters.\r\n Anonymous characters are counted in the population reports.\r\n Anonymous characters are not counted in any demographic\r\n reports and will never show up in our Who panel (our API includes\r\n anonymous characters, but their names are replaced with \"Anonymous\"\r\n and their guilds and locations are redacted).\r\n

    \r\n

    \r\n The character data that we collect includes name, gender, race,\r\n class, level, location, and guild name. This information is used to\r\n generate the various demographic reports on the website.\r\n Additionally, character location data is recorded, analyzed, and\r\n used to track quest popularity and raid timers.\r\n

    \r\n

    \r\n When a character posts a public LFM, the collected data also\r\n includes public comment, quest selection, difficulty selection,\r\n level range, accepted classes, and the \"adventure active\" length.\r\n Each character in a group is also assigned a Group ID which allows\r\n us to reconstruct groups of characters. The group data is then used\r\n to generate the LFM panel (that's not a screenshot - it's being\r\n drawn in your browser).\r\n

    \r\n
    \r\n \r\n

    \r\n A special thanks to the incredibly talented and generous developers\r\n over at Vault of Kundarak. Their support played an integral role in\r\n the development of this project's Live LFM and Who panels. Visit\r\n their various projects:{\" \"}\r\n \r\n VoK Item Database\r\n \r\n ,{\" \"}\r\n \r\n DDO Plugin Framework\r\n \r\n , and{\" \"}\r\n \r\n Automated Inventory Management\r\n \r\n , or stop by their{\" \"}\r\n \r\n Discord server\r\n {\" \"}\r\n to stay up-to-date on their development.\r\n

    \r\n

    \r\n And thank you for your continued support.{\" \"}\r\n \r\n This project simply would not exist without DDO's incredible\r\n community.\r\n {\" \"}\r\n Many of the features on this website were a direct result of player\r\n feedback on the DDO Discord, Forums, and Reddit, and your continued\r\n use inspires me to grow and develop the DDO Audit project far beyond\r\n what I could have ever imagined. I'm always looking for feedback and\r\n suggestions!\r\n

    \r\n \r\n \r\n Make a suggestion\r\n \r\n {\r\n Log(\"Clicked GitHub link\", \"About\");\r\n }}\r\n >\r\n Visit my GitHub\r\n \r\n
    \r\n \r\n \r\n

    \r\n DDO Audit has been, and will continue to remain, completely free to\r\n use. If you find this tool to be helpful and would like to support\r\n the project, you can do so by donating to my PayPal. All donations\r\n go toward server costs and future development. Thank you for your\r\n support!\r\n

    \r\n \r\n \r\n
    \r\n \r\n \r\n

    \r\n This website is the culmination of over two years of hard work and\r\n many sleepless nights. When I started DDO Audit I knew little to\r\n nothing about web development, server infrastructure, or databases.\r\n I learned as I went, browsing countless forum posts, watching\r\n YouTube tutorial videos, reading books, and iterating on my designs.\r\n

    \r\n

    \r\n The original website was written in HTML, JavaScript, and CSS using\r\n the famous IDE known as Notepad (no joke - I have like 20,000 lines\r\n of frontend work done using Notepad). The data aggregation and\r\n interpretation work was painfully done using C (I'm never using that\r\n terrible language again), and the data collection portion was\r\n written in Visual Basic (using Visual Studio). The current version\r\n of the website is a little less haphazardly thrown together. It's\r\n written using JSX and the React framework in an actual IDE -\r\n Visual Studio Code. All of the server infrastructure work is done\r\n using NodeJS. Data aggregation and interpretation work is now done\r\n using JavaScript, and the data collection side was recreated using\r\n C#.\r\n

    \r\n

    \r\n It honestly has been a lot of fun to work on, and I'm sure I'll\r\n continue development well into the future. Thanks for stopping by!\r\n

    \r\n

    \r\n See you in game,\r\n
    \r\n Clemeit of Thelanis\r\n

    \r\n
    \r\n \r\n \r\n
  • \r\n \r\n Discord: Clemeit#7994\r\n \r\n
  • \r\n
  • \r\n \r\n Reddit: Clemeit\r\n \r\n
  • \r\n
  • \r\n \r\n DDO Forums: Clemeit\r\n \r\n
  • \r\n
  • \r\n \r\n Twitter: @DDOAudit\r\n \r\n
  • \r\n \r\n \r\n \r\n \r\n

    \r\n All screenshots were taken from{\" \"}\r\n \r\n Dungeons and Dragons Online\r\n \r\n . This website is in no way affiliated with, or endorsed by,\r\n Standing Stone Games or{\" \"}\r\n \r\n Daybreak Game Company\r\n \r\n . Dungeons and Dragons Online is a registered trademark of Wizards\r\n of the Coast LLC. You can support this project by supporting\r\n Dungeons and Dragons Online.\r\n

    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n

    API

    \r\n
    \r\n

    \r\n Look behind the curtain. Get the data for your own projects.\r\n

    \r\n \r\n \r\n
    \r\n \r\n

    Timeline

    \r\n
    \r\n

    \r\n This project's development log.\r\n

    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default About;\r\n","import React from \"react\";\r\nimport { Link, useLocation } from \"react-router-dom\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport Banner from \"../global/Banner\";\r\nimport Footer from \"./Footer\";\r\nimport ContentCluster from \"../global/ContentCluster\";\r\nimport { ReactComponent as WarningSVG } from \"../../assets/global/warning.svg\";\r\n\r\nconst NotFound = () => {\r\n const TITLE = \"DDO Audit | 404 Page Not Found\";\r\n\r\n return (\r\n
    \r\n \r\n {TITLE}\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n 404 Page Not Found\r\n
    \r\n }\r\n altTitle=\"404 Page Not Found\"\r\n description={\r\n
    \r\n

    Ooops, that page doesn't exist!

    \r\n
      \r\n
    • \r\n If you clicked a bookmark with the \"playeraudit\" domain, you\r\n may need to update your bookmark.\r\n
    • \r\n
    • \r\n If you clicked on an old link, that link may be directing you\r\n to a page that no longer exists.\r\n
    • \r\n
    \r\n

    \r\n Please use the navigation buttons to find the page you were\r\n looking for, or return to the Directory.\r\n

    \r\n

    \r\n If you believe this to be an error,{\" \"}\r\n please let me know.\r\n

    \r\n
    \r\n }\r\n noFade={true}\r\n >\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default NotFound;\r\n","import React from \"react\";\r\nimport { ReactComponent as CloseSVG } from \"../../assets/global/close.svg\";\r\nimport { ReactComponent as MailSVG } from \"../../assets/global/mail.svg\";\r\nimport { Log } from \"../../services/CommunicationService\";\r\nimport { Post } from \"../../services/DataLoader\";\r\n\r\nconst Mail = () => {\r\n const [mail, setMail] = React.useState(null);\r\n const [dismissed, setDismissed] = React.useState(false);\r\n const [dismissEnabled, setDismissEnabled] = React.useState(false);\r\n const mailRef = React.useRef(mail);\r\n mailRef.current = mail;\r\n\r\n function newMail(title, subtitle, ticket, body, datetime) {\r\n setMail({\r\n title,\r\n subtitle,\r\n ticket,\r\n body,\r\n datetime,\r\n });\r\n }\r\n\r\n function dismissMail() {\r\n let myTickets = JSON.parse(localStorage.getItem(\"my-tickets\") || \"[]\");\r\n let originalLength = myTickets.length;\r\n myTickets = myTickets.filter((ticket) => ticket != mailRef.current.ticket);\r\n let finalLength = myTickets.length;\r\n if (finalLength === originalLength) {\r\n localStorage.setItem(\"my-tickets\", JSON.stringify([]));\r\n Log(\r\n \"Dismissed mail HARD\",\r\n `(${mailRef.current?.ticket}) ${mailRef.current?.subtitle}`\r\n );\r\n } else {\r\n localStorage.setItem(\"my-tickets\", JSON.stringify(myTickets));\r\n Log(\r\n \"Dismissed mail\",\r\n `(${mailRef.current?.ticket}) ${mailRef.current?.subtitle}`\r\n );\r\n }\r\n\r\n setDismissed(true);\r\n }\r\n\r\n React.useEffect(() => {\r\n const checkForMail = setTimeout(() => {\r\n let myTickets = JSON.parse(localStorage.getItem(\"my-tickets\") || \"[]\");\r\n if (myTickets && myTickets.length) {\r\n let ignoredList = JSON.parse(\r\n localStorage.getItem(\"dismissed-mail\") || \"[]\"\r\n );\r\n\r\n Post(\r\n \"https://api.ddoaudit.com/retrieveresponse\",\r\n { tickets: myTickets },\r\n 10000\r\n ).then((response) => {\r\n if (response.length) {\r\n if (!ignoredList.includes(response[0].datetime)) {\r\n newMail(\r\n \"Feedback Response\",\r\n `re: ${response[0].comment}`,\r\n response[0].ticket,\r\n response[0].response,\r\n response[0].datetime\r\n );\r\n setTimeout(() => {\r\n setDismissEnabled(true);\r\n }, 1500);\r\n }\r\n }\r\n });\r\n }\r\n }, 1500);\r\n\r\n return () => clearTimeout(checkForMail);\r\n }, []);\r\n\r\n return (\r\n \r\n dismissMail()}\r\n />\r\n \r\n

    \r\n \r\n {mail?.title}\r\n

    \r\n

    \r\n {mail?.subtitle}\r\n

    \r\n

    Ticket #{mail?.ticket}

    \r\n \r\n

    {mail?.body}

    \r\n \r\n {\r\n if (dismissEnabled) {\r\n dismissMail();\r\n }\r\n }}\r\n >\r\n Dismiss\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Mail;\r\n","import React, { Suspense, lazy } from \"react\";\r\nimport { Router, Switch, Route } from \"react-router-dom\";\r\nimport ScrollToTop from \"./components/global/ScrollToTop\";\r\nimport Layout from \"./components/Layout\";\r\nimport \"./default.css\";\r\nimport history from \"./history\";\r\n\r\n// Most visited pages. Don't lazy-load\r\n// import Grouping from \"./components/grouping/Grouping\";\r\n// import GroupingSpecific from \"./components/grouping/GroupingSpecific\";\r\n\r\n// const Directory = lazy(() => import(\"./components/directory/Directory\"));\r\n// const Servers = lazy(() => import(\"./components/servers/Servers\"));\r\n// // const ServerSpecific = lazy(() => import(\"./components/ServerSpecific\"));\r\n// const Grouping = lazy(() => import(\"./components/grouping/Grouping\"));\r\n// const GroupingSpecific = lazy(() =>\r\n// import(\"./components/grouping/GroupingSpecific\")\r\n// );\r\n// const NotificationForm = lazy(() =>\r\n// import(\"./components/grouping/NotificationForm\")\r\n// );\r\n// const Who = lazy(() => import(\"./components/who/Who\"));\r\n// const WhoSpecific = lazy(() => import(\"./components/who/WhoSpecific\"));\r\n// const Quests = lazy(() => import(\"./components/quests/Quests\"));\r\n// const Live = lazy(() => import(\"./components/live/Live\"));\r\n// const About = lazy(() => import(\"./components/about/About\"));\r\n\r\n// Imports (included in package)\r\nimport Directory from \"./components/directory/Directory\";\r\nimport Servers from \"./components/servers/Servers\";\r\nimport ServersSpecific from \"./components/servers/ServersSpecific\";\r\nimport Grouping from \"./components/grouping/Grouping\";\r\nimport GroupingSpecific from \"./components/grouping/GroupingSpecific\";\r\nimport NotificationForm from \"./components/grouping/NotificationForm\";\r\nimport Who from \"./components/who/Who\";\r\nimport WhoSpecific from \"./components/who/WhoSpecific\";\r\nimport Live from \"./components/live/Live\";\r\nimport About from \"./components/about/About\";\r\nimport NotFound from \"./components/directory/NotFound\";\r\nimport Mail from \"./components/global/Mail\";\r\n// import ActivityTesting from \"./components/dev/ActivityTesting\";\r\n\r\n// Lazy loads (uncommon pages)\r\n// const ServerSpecific = lazy(() => import(\"./components/ServerSpecific\"));\r\nconst Transfers = lazy(() => import(\"./components/transfers/Transfers\"));\r\nconst Quests = lazy(() => import(\"./components/quests/Quests\"));\r\nconst Trends = lazy(() => import(\"./components/trends/Trends\"));\r\nconst Suggestions = lazy(() => import(\"./components/global/Suggestions\"));\r\nconst Community = lazy(() => import(\"./components/community/Community\"));\r\n// const Guilds = lazy(() => import(\"./components/guilds/Guilds\"));\r\nconst Api = lazy(() => import(\"./components/api/Api\"));\r\nconst Timeline = lazy(() => import(\"./components/about/Timeline\"));\r\nconst Friends = lazy(() => import(\"./components/friends/Friends\"));\r\nconst Steps = lazy(() => import(\"./components/iot/Steps\"));\r\nconst Timers = lazy(() => import(\"./components/timers/Timers\"));\r\nconst DataClassification = lazy(() =>\r\n import(\"./components/dataClassification/DataClassification\")\r\n);\r\nconst CharacterRegistration = lazy(() =>\r\n import(\"./components/global/CharacterRegistration\")\r\n);\r\nconst DonateThankYou = lazy(() =>\r\n import(\"./components/donations/DonateThankYou\")\r\n);\r\n\r\nexport default () => {\r\n const theme = localStorage.getItem(\"theme\");\r\n if (theme) {\r\n document.body.classList.add(theme);\r\n } else {\r\n document.body.classList.add(\"dark-theme\");\r\n }\r\n\r\n return (\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 \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 \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 \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 \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 \r\n \r\n \r\n \r\n );\r\n};\r\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n // console.log(\n // \"This web app is being served cache-first by a service \" +\n // \"worker. To learn more, visit https://cra.link/PWA\"\n // );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n if (navigator.serviceWorker == null || navigator.serviceWorker == undefined)\n return;\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://cra.link/PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import \"bootstrap/dist/css/bootstrap.css\";\r\n\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport App from \"./App\";\r\nimport * as serviceWorkerRegistration from \"./serviceWorkerRegistration\";\r\n\r\nimport {\r\n getMessaging,\r\n getToken,\r\n onMessage,\r\n isSupported,\r\n} from \"firebase/messaging\";\r\n\r\n// Import the functions you need from the SDKs you need\r\nimport { initializeApp } from \"firebase/app\";\r\nimport { getAnalytics } from \"firebase/analytics\";\r\n// TODO: Add SDKs for Firebase products that you want to use\r\n// https://firebase.google.com/docs/web/setup#available-libraries\r\n\r\n// Your web app's Firebase configuration\r\n// For Firebase JS SDK v7.20.0 and later, measurementId is optional\r\nconst firebaseConfig = {\r\n apiKey: \"AIzaSyDdyzwPB6QilPc8TjbXur5PFWoDhUwMqgA\",\r\n authDomain: \"ddo-audit.firebaseapp.com\",\r\n projectId: \"ddo-audit\",\r\n storageBucket: \"ddo-audit.appspot.com\",\r\n messagingSenderId: \"991134126408\",\r\n appId: \"1:991134126408:web:d06c24e266191b7c9ea37d\",\r\n measurementId: \"G-YG3R94WB3B\",\r\n};\r\n\r\n// Initialize Firebase\r\nconst app = initializeApp(firebaseConfig);\r\nconst analytics = getAnalytics(app);\r\n\r\n// Firebase messaging object\r\nconst messaging =\r\n isSupported() && navigator.serviceWorker != null ? getMessaging() : null;\r\n\r\nif (messaging != null) {\r\n onMessage(messaging, (payload) => {\r\n //console.log(\"Message received. \", payload);\r\n // ...\r\n });\r\n}\r\n\r\nReactDOM.render(\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://cra.link/PWA\r\nserviceWorkerRegistration.register();\r\n","import React from \"react\";\r\nimport { Fetch } from \"../../services/DataLoader\";\r\nimport { ReactComponent as CloseSVG } from \"../../assets/global/close.svg\";\r\nimport $ from \"jquery\";\r\n\r\nconst BannerMessage = (props) => {\r\n const [messages, setMessages] = React.useState([]);\r\n const [update, setUpdate] = React.useState(null);\r\n\r\n let recheck;\r\n let shiftBanner;\r\n React.useEffect(() => {\r\n recheck = setInterval(() => {\r\n setUpdate(new Date());\r\n }, 3600000);\r\n shiftBanner = setTimeout(() => {\r\n if (window.innerWidth < 900) {\r\n $(\".banner-message-container\").css(\"transform\", `translateY(0%)`);\r\n $(\".banner-message-container\").css(\r\n \"filter\",\r\n `drop-shadow(0px 0px 7px black)`\r\n );\r\n }\r\n }, 1000);\r\n\r\n return function cleanup() {\r\n clearInterval(recheck);\r\n clearTimeout(shiftBanner);\r\n };\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n async function getM() {\r\n let ignorelist = localStorage.getItem(\"ignored-messages\");\r\n if (ignorelist) {\r\n ignorelist = ignorelist.split(\",\");\r\n } else {\r\n ignorelist = [];\r\n }\r\n Fetch(\"https://api.ddoaudit.com/messageservice\", 10000)\r\n .then((response) => {\r\n let allmessages = [];\r\n response.forEach((message) => {\r\n let affectedpages = message.pages.split(\",\");\r\n if (\r\n (affectedpages.includes(props.page) ||\r\n affectedpages.includes(\"all\")) &&\r\n !ignorelist.includes(message.id.toString())\r\n ) {\r\n let now = new Date();\r\n if (\r\n now >= new Date(message.start) &&\r\n now <= new Date(message.end)\r\n ) {\r\n allmessages.push(message);\r\n }\r\n }\r\n });\r\n\r\n setMessages(allmessages);\r\n })\r\n .catch((err) => {\r\n if (window.navigator.onLine == false) {\r\n setMessages([\r\n {\r\n id: 999,\r\n name: \"Offline\",\r\n pages: \"all\",\r\n start: new Date(),\r\n end: new Date(),\r\n message: \"No internet connection.\",\r\n color: \"#AA0000\",\r\n nodismiss: 1,\r\n },\r\n ]);\r\n }\r\n });\r\n }\r\n getM();\r\n }, [update]);\r\n\r\n function ignoreThisMessage(id) {\r\n if (id == null) return;\r\n if (window.innerWidth < 900) {\r\n $(\".banner-message-container\").css(\"transform\", `translateY(-100%)`);\r\n setTimeout(() => {\r\n let before = localStorage.getItem(\"ignored-messages\");\r\n localStorage.setItem(\r\n \"ignored-messages\",\r\n before ? before + \",\" + id : id\r\n );\r\n setUpdate(new Date());\r\n }, 1000);\r\n } else {\r\n let before = localStorage.getItem(\"ignored-messages\");\r\n localStorage.setItem(\"ignored-messages\", before ? before + \",\" + id : id);\r\n setUpdate(new Date());\r\n }\r\n }\r\n\r\n function mayDismiss(message) {\r\n // If on mobile, always allow dismissal\r\n if (window.innerWidth <= 900) {\r\n return true;\r\n }\r\n\r\n if (message.nodismiss === 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n {messages.map((message, i) => (\r\n {\r\n mayDismiss(message)\r\n ? ignoreThisMessage(message.id)\r\n : ignoreThisMessage();\r\n }}\r\n >\r\n \r\n {message.message\r\n .replace(\"{0}\", message.start)\r\n .replace(\"{1}\", message.end)}\r\n

    \r\n {mayDismiss(message) && }\r\n
    \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default BannerMessage;\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgClose(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgClose);\nexport default __webpack_public_path__ + \"static/media/close.84725b04.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { ReactComponent as InfoSVG } from \"../../assets/global/info.svg\";\r\nimport { ReactComponent as WarningSVG } from \"../../assets/global/warning.svg\";\r\nimport { ReactComponent as ErrorSVG } from \"../../assets/global/error.svg\";\r\nimport { ReactComponent as CloseSVG } from \"../../assets/global/close.svg\";\r\nimport $ from \"jquery\";\r\nimport { Submit } from \"../../services/CommunicationService\";\r\n\r\n/*\r\n ** Use with preset messages:\r\n ** messageType=\"all servers offline\"|\"some servers offline\"\r\n ** Or set custom messages:\r\n ** iconType=\"info\"|\"warning\"|\"error\"\r\n ** title=\"string\"\r\n ** message=\"string\"\r\n */\r\n\r\nconst PopupMessage = (props) => {\r\n var [userClosed, set_userClosed] = React.useState(false);\r\n var [visible, setVisible] = React.useState(\"\");\r\n var [reported, set_reported] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if (props.message) {\r\n setVisible(true);\r\n } else {\r\n setVisible(false);\r\n }\r\n }, [props.message]);\r\n\r\n React.useEffect(() => {\r\n $(document).on(\"keydown.handleEscape\", function (e) {\r\n if (e.key === \"Escape\") {\r\n props.popMessage();\r\n set_userClosed(true);\r\n }\r\n });\r\n\r\n return () => $(document).unbind(\"keydown.handleEscape\");\r\n }, []);\r\n\r\n function displayIcon() {\r\n if (!props.message) return;\r\n switch (props.message.messageType) {\r\n case \"all servers offline\" |\r\n \"some servers offline\" |\r\n \"all servers online\":\r\n return ;\r\n default:\r\n switch (props.message.icon) {\r\n case \"info\":\r\n return ;\r\n case \"warning\":\r\n return ;\r\n case \"error\":\r\n return ;\r\n default:\r\n return ;\r\n }\r\n }\r\n }\r\n function getTitle() {\r\n if (!props.message) return;\r\n switch (props.message.messageType) {\r\n case \"all servers offline\":\r\n return \"Servers Offline\";\r\n case \"some servers offline\":\r\n return \"Servers Offline\";\r\n case \"all servers online\":\r\n return \"Servers Online\";\r\n default:\r\n return props.message.title;\r\n }\r\n }\r\n function getMessage() {\r\n if (props.noReport) {\r\n return \"This is a known issue. Reporting is disabled.\";\r\n }\r\n\r\n if (!props.message) return;\r\n switch (props.message.messageType) {\r\n case \"all servers offline\":\r\n return \"The game servers are temporarily offline.\";\r\n case \"some servers offline\":\r\n return \"Some servers are temporarily offline. Check the Servers page for more information.\";\r\n case \"all servers online\":\r\n return \"The game servers are online.\";\r\n default:\r\n return props.message.message;\r\n }\r\n }\r\n\r\n return (\r\n \r\n {props.message ? (\r\n props.message.fullscreen && (\r\n \r\n )\r\n ) : (\r\n <>\r\n )}\r\n {props.message && (\r\n {\r\n if (props.message.reportMessage === undefined) {\r\n props.popMessage();\r\n set_userClosed(true);\r\n }\r\n }}\r\n >\r\n \r\n \r\n {displayIcon()}\r\n \r\n {getTitle()}\r\n \r\n \r\n \r\n {getMessage()}\r\n \r\n {props.message.submessage && (\r\n \r\n Reason: {props.message.submessage}\r\n

    \r\n )}\r\n {props.message.reportMessage && (\r\n \r\n window.location.reload()}\r\n >\r\n Refresh Page\r\n \r\n {\r\n if (!(reported || props.noReport)) {\r\n Submit(\r\n \"User reported issue from \" + props.page + \" popup\",\r\n props.message.submessage || props.message.reportMessage\r\n );\r\n set_reported(true);\r\n set_userClosed(true);\r\n }\r\n }}\r\n >\r\n {reported ? \"Thanks!\" : \"Report Issue\"}\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default PopupMessage;\r\n","import React from \"react\";\r\n\r\nconst ToggleButton = (props) => {\r\n return (\r\n
    \r\n
    \r\n {\r\n props.doA();\r\n }}\r\n >\r\n
    \r\n {props.textA}\r\n \r\n {\r\n props.doB();\r\n }}\r\n >\r\n
    \r\n {props.textB}\r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default ToggleButton;\r\n","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ReactComponent as InfoSVG } from \"../../assets/global/info.svg\";\r\n\r\nconst DataClassification = ({ classification } = props) => {\r\n const getText = () => {\r\n switch (classification) {\r\n case \"mixed\":\r\n return \"Mixed Data\";\r\n case \"observed\":\r\n return \"Observed Data\";\r\n case \"inferred\":\r\n return \"Inferred Data\";\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {getText()}\r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default DataClassification;\r\n","import React from \"react\";\r\nimport { ResponsiveLine } from \"@nivo/line\";\r\nimport CustomLegend from \"./CustomLegend\";\r\n\r\n// This chart is used to show the population history (combined or composite) over time.\r\n// Pages: Home, Servers\r\n\r\nconst ChartLine = (props) => {\r\n const theme = {\r\n background: \"var(--base)\",\r\n textColor: \"var(--text)\",\r\n fontSize: 14,\r\n axis: {\r\n domain: {\r\n line: {\r\n stroke: \"#777777\",\r\n strokeWidth: 1,\r\n },\r\n },\r\n ticks: {\r\n line: {\r\n stroke: \"#777777\",\r\n strokeWidth: 2,\r\n },\r\n },\r\n },\r\n grid: {\r\n line: {\r\n stroke: \"#dddddd\",\r\n strokeWidth: 1,\r\n },\r\n },\r\n crosshair: {\r\n line: {\r\n stroke: \"var(--text)\",\r\n strokeWidth: 1,\r\n strokeOpacity: 1,\r\n strokeDasharray: \"6 6\",\r\n },\r\n },\r\n tooltip: {\r\n container: {\r\n background: \"var(--base)\",\r\n color: \"var(--text)\",\r\n fontSize: \"inherit\",\r\n borderRadius: \"2px\",\r\n boxShadow: \"0 0 6px var(--black)\",\r\n padding: \"5px 9px\",\r\n },\r\n basic: {\r\n whiteSpace: \"pre\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n table: {},\r\n tableCell: {\r\n padding: \"3px 5px\",\r\n },\r\n },\r\n };\r\n\r\n // const [filteredData, set_filteredData] = React.useState(null);\r\n const [isMobileLoaded, setIsMobileLoaded] = React.useState(false);\r\n\r\n // React.useEffect(() => {\r\n // if (props.data === null) return;\r\n // set_filteredData(\r\n // props.data.filter(\r\n // (series) =>\r\n // (series.id === \"Total\") &\r\n // (props.activeFilter === \"Combined Activity\") ||\r\n // (series.id !== \"Total\") &\r\n // (props.activeFilter === \"Server Activity\") ||\r\n // series.id === props.activeFilter\r\n // )\r\n // );\r\n // }, [props.data, props.activeFilter]);\r\n\r\n function XScale() {\r\n return {\r\n type: \"time\",\r\n format: \"%Y-%m-%dT%H:%M:%S.%LZ\",\r\n useUTC: false,\r\n precision: \"hour\",\r\n };\r\n }\r\n\r\n // function BottomAxis() {\r\n // return {\r\n // orient: \"bottom\",\r\n // tickSize: 5,\r\n // tickPadding: 5,\r\n // tickRotation: -45,\r\n // //legend: \"Time\",\r\n // legendPosition: \"middle\",\r\n // tickValues:\r\n // props.trendType === \"day\"\r\n // ? \"every 1 hour\"\r\n // : props.trendType === \"week\"\r\n // ? \"every 6 hour\"\r\n // : \"every 1 week\",\r\n // format:\r\n // props.trendType === \"day\"\r\n // ? \"%-I:%M %p\"\r\n // : props.trendType === \"week\"\r\n // ? \"%a %-I %p\"\r\n // : \"%a %b %-d\",\r\n // };\r\n // }\r\n\r\n const [isMobile, setIsMobile] = React.useState(null);\r\n React.useEffect(() => {\r\n setIsMobile(window.innerWidth <= 950);\r\n }, []);\r\n\r\n var options = {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n };\r\n\r\n function dateToDateString(dt) {\r\n if (dt instanceof Date) {\r\n return dt.toLocaleDateString(\"en-US\", props.dateOptions || options);\r\n } else {\r\n return `${props.tooltipPrefix || \"\"} ${dt}`;\r\n }\r\n }\r\n\r\n function getTooltip(slice) {\r\n return (\r\n \r\n
    \r\n {dateToDateString(slice.points[0].data.x)}\r\n
    \r\n \r\n {slice.points\r\n .sort((a, b) => b.data.yFormatted - a.data.yFormatted)\r\n .map((point) => (\r\n \r\n \r\n {point.serieId}\r\n \r\n {point.data.yFormatted}\r\n \r\n
    \r\n ))}\r\n \r\n );\r\n }\r\n\r\n function getAxisLeft() {\r\n if (isMobile)\r\n return {\r\n orient: \"left\",\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: 0,\r\n };\r\n return {\r\n orient: \"left\",\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: 0,\r\n legend: props.legendLeft,\r\n legendOffset: props.padLeft ? -70 : -50,\r\n legendPosition: \"middle\",\r\n };\r\n }\r\n\r\n const [excludedSeries, setExcludedSeries] = React.useState(\r\n props.forceHardcore ? [] : [\"Hardcore\"]\r\n );\r\n function switchExcludedSeries(series) {\r\n if (excludedSeries.includes(series.id)) {\r\n let temp = [...excludedSeries.filter((s) => s != series.id)];\r\n setExcludedSeries([...temp]);\r\n } else {\r\n let temp = [...excludedSeries, series.id];\r\n setExcludedSeries([...temp]);\r\n }\r\n }\r\n\r\n function getLeftPadding() {\r\n if (isMobile) {\r\n return 40;\r\n }\r\n if (props.padLeft) {\r\n return 80;\r\n }\r\n return 60;\r\n }\r\n\r\n return (\r\n
    \r\n setIsMobileLoaded(true)}\r\n >\r\n Show this graph\r\n
    \r\n \r\n {props.data ? (\r\n !excludedSeries.includes(series.id)\r\n )}\r\n keys={props.keys}\r\n indexBy={props.indexBy}\r\n margin={{\r\n top: 20,\r\n right: 10,\r\n bottom: props.marginBottom || 60,\r\n left: getLeftPadding(),\r\n }}\r\n markers={\r\n props.markedEvents && [\r\n ...props.markedEvents.map((me, i) => ({\r\n axis: \"x\",\r\n value:\r\n props.markedEventsType === \"numeric\"\r\n ? me.date\r\n : new Date(me.date),\r\n lineStyle: {\r\n stroke: me.color,\r\n strokeWidth: me.width,\r\n },\r\n legendOrientation: \"vertical\",\r\n legend: me.message,\r\n textStyle: {\r\n fill: \"var(--text)\",\r\n fontSize: 20,\r\n // fontWeight: \"bold\",\r\n },\r\n })),\r\n ]\r\n }\r\n xScale={{\r\n type:\r\n props.title === \"Popularity over time\" ||\r\n props.title === \"Average duration over time\"\r\n ? \"time\"\r\n : props.title === \"Distribution\"\r\n ? \"point\"\r\n : \"time\",\r\n format:\r\n props.title === \"Popularity over time\" ||\r\n props.title === \"Average duration over time\"\r\n ? \"%Y-%m-%d\"\r\n : props.title === \"Distribution\"\r\n ? \"\"\r\n : \"%Y-%m-%dT%H:%M:%S.%LZ\",\r\n useUTC: true,\r\n // precision: \"hour\",\r\n }}\r\n xFormat={\r\n props.title === \"Popularity over time\" ||\r\n props.title === \"Average duration over time\"\r\n ? \"time:%Y-%m-%d\"\r\n : props.title === \"Distribution\"\r\n ? \"\"\r\n : \"time:%Y-%m-%dT%H:%M:%S.%LZ\"\r\n }\r\n yScale={{\r\n type: \"linear\",\r\n min: props.yMin || 0,\r\n max: \"auto\",\r\n stacked: false,\r\n reverse: false,\r\n }}\r\n // yFormat=\" >-.2f\"\r\n curve={props.curve || \"cardinal\"}\r\n axisTop={null}\r\n axisRight={null}\r\n //axisBottom={BottomAxis()}\r\n axisBottom={{\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: isMobile || !props.straightLegend ? -45 : 0,\r\n legend: isMobile ? \"\" : props.legendBottom || \"\",\r\n legendPosition: \"middle\",\r\n legendOffset: 40,\r\n // format: (value) => xLabel(value),\r\n format:\r\n props.trendType === \"day\"\r\n ? \"%H:%M\"\r\n : props.trendType === \"week\"\r\n ? \"%b %d, %Y\"\r\n : props.trendType === \"quarter\"\r\n ? \"%b %d, %Y\"\r\n : props.trendType === \"annual\"\r\n ? \"%b %d, %Y\"\r\n : \"\",\r\n tickValues:\r\n props.tickValues || props.trendType === \"day\"\r\n ? \"every 1 hour\"\r\n : props.trendType === \"week\"\r\n ? \"every 1 day\"\r\n : props.trendType === \"quarter\"\r\n ? \"every 1 week\"\r\n : props.trendType === \"annual\"\r\n ? \"every 4 week\"\r\n : \"\",\r\n }}\r\n axisLeft={getAxisLeft()}\r\n lineWidth={4}\r\n enablePoints={false}\r\n colors={(d) => d.color}\r\n enableArea={\r\n props.showArea\r\n ? true\r\n : props.noArea\r\n ? false\r\n : props.activeFilter !== \"Server Activity\"\r\n }\r\n areaOpacity={props.areaOpacity || 0.3}\r\n enableSlices=\"x\"\r\n useMesh={true}\r\n motionConfig=\"stiff\"\r\n theme={theme}\r\n sliceTooltip={({ slice }) => getTooltip(slice)}\r\n >\r\n ) : (\r\n
    \r\n
    {props.loadingMessage || \"Loading data...\"}
    \r\n
    \r\n )}\r\n \r\n {!props.hideLegend && (\r\n switchExcludedSeries(id)}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ChartLine;\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgWarning(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\",\n fill: \"#edc611\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWarning);\nexport default __webpack_public_path__ + \"static/media/warning.7a4a9eaf.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgInfo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"#FFFFFF\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\",\n fill: \"#5a93df\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgInfo);\nexport default __webpack_public_path__ + \"static/media/info.2a11c8ab.svg\";\nexport { ForwardRef as ReactComponent };"],"sourceRoot":""}