{"version":3,"sources":["CookieConsent.js","LangSettings.js","store/reducer.js","AppOuter.js","serviceWorker.js","index.js","store/actions.js","WBCReactGA.js","lazyWithRetry.js","mylocalStorage.js","Translator/Translations.js"],"names":["CookieConsent","useCookies","cookies","setCookie","useState","undefined","insideMSTeams","setInsideMSTeams","cookiesAccepted","d","Date","setUTCMilliseconds","now","path","expires","sameSite","window","wbcAnalyticsCC","wbcAdsCC","onlyAnalyticsCookiesAccepted","cookiesPanelClosed","React","useEffect","microsoftTeams","initialize","then","getContext","context","msHost","app","host","setTimeout","location","parent","className","mdUp","action","href","target","rel","onClick","type","value","aria-label","smDown","alt","src","GetLang","string","language","lang","personalConfig","studLang","boardConfig","parsedLang","JSON","parse","parsedStudLang","sessLang","ll","mylocalStorage","initialState","user","userProfile","tutorGroup","tutorUsertype","tutorTourDone","communityUser","authDialog","open","countryCode","clientLoc","BoardConfig","participants","activeUsers","noUser","gvPage","sessionDialog","boardType","name","single","tab","selected","allTabs","assistanceRequest","studentAsked","pendingList","boardChat","started","messages","timer","running","events","boardLocked","locked","allEvents","pageLocked","myev","showCase","dialog","palletDrawer","openCol","ref","richText","object","cb","loc","pendingParticipants","avatarDialogOpen","diceShow","teacher","values","obj","board","followTeacher","set","clockDrift","hideNotification","syncDisabled","drawerWalker","page","gradingWalker","clickMode","mode","ctx","spinnerEvt","fDiceEvt","letItSnowEvt","font","inkColor","dblClickDisable","gridBrowser","pageNum","realTime","groupGridOnly","search","showLabels","hideLabels","matrixGrid","classroom","gridMap","timeMachine","selectedTime","slider","background","color","image","pickerOpen","pickerImageOpen","notmine","boardTools","formSubmit","engagementScore","engagementSticker","meetingToJoin","apiMode","adsEnable","keybMode","enable","lastKey","videoState","modeSelected","mobileModeSelected","videoConfig","pendingSubscriptions","alertMessages","sharedScreen","boardRecording","classPoll","embeddedMode","pageAdding","sharedScreenDialog","gParts","timedOutParticipants","getIdToUse","data","idUse","id","UserProfile","content","jp","localID","setLocal","authid","username","luid","uuid","setLocalPaidPlan","paidPlan","TenantID","pendingRequests","old","req","arr","i","length","splice","State","push","Boolean","pendingChat","state","Content","filter","ff","deleted","pendingFollow","pendingLock","pendingPageLock","rt","Actions","ev","pendingShowCase","readOnlyShowCase","isObject","compareParticipant","object1","object2","partId","keys1","Object","keys","keys2","curTime","getTime","timedOut","key","obj1","obj2","KEEPALIVE_TIMEOUT_SECONDS","checkIfPartsUpdateNeeded","newParts","removeMSTeamsEmail","em","email","includes","split","replace","pendingTimer","processDice","e","classDice","teacherDice","rollerName","inval","inval2","Array","isArray","processSpinner","myTime","evtTime","createdAt","Math","abs","processFdice","processLetItSnow","formSubmitprocess","processScore","dataIn","eng","max","scoreData","calc","calculated","trendown","c","current","per","peak","samp","samples","avg","trenddown","prev","percent","k","kk","v","checkAds","profile","st","isFree","isStudent","session","TutorClass","processPoll","cp","question","forEach","q","mainReducer","ar","shift","appMode","ad","pc","setLangauge","val","pp","rr","stringify","remind","jj","ppp","oper","idx","item","fdiceEvt","HomePage","lazyWithRetry","App","store","createStore","reducer","__REDUX_DEVTOOLS_EXTENSION__","theme","createMuiTheme","palette","primary","purple","secondary","main","status","danger","typography","fontSize","overrides","MuiCssBaseline","width","height","backgroundColor","borderRadius","AppOuter","props","WBCReactGA","CookiesProvider","defaultSetOptions","ThemeProvider","fallback","exact","component","console","log","hostname","match","require","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","registration","unregister","catch","error","message","SET_USER","SET_EXP_REMIND","SET_USER_PROFILE","SET_TUTOR_GROUP","SET_TUTOR_USERTYPE","SET_TUTOR_TOURDONE","OPEN_AUTH_DIALOG","SET_CONFIG","ADD_PARTICIPANT","REMOVE_PARTICIPANT","FLUSH_PARTICIPANT","PROCESS_PENDING_PARTICIPANTS","AVATAR_DIALOG_OPEN","ADD_ACTIVE","DELETE_ACTIVE","SET_NOUSER","SET_GVPAGE","SET_SESSION_DIALOG","SET_BOARD_TYPE","SET_TAB","SET_TEACHER","SET_COUNTRY","SET_CLIENT_LOC","RAISE_HAND","ASSISTANCE_REQUEST","CHAT_MSG","TIMER_EVENT","BOARD_LOCK","PAGE_LOCK","SET_PALETTE","SHOWCASE","SET_RICH_TEXT","SET_DICE","SET_FOLLOW","SET_CLOCK_DRIFT","SET_NOTIFICATION","SET_SYNC_DISABLED","SET_DRAWER_WALKER","SET_GRADING_WALKER","SET_CLICK_MODE","SET_COMMUNITYUSER","SET_SPINNER_EVENT","SET_PERSONAL_CONFIG","SET_GRID_BROWSER","SET_MATRIX_GRID","SET_LETITSNOW_EVENT","SET_TIME_MACHINE","SET_BACK_GROUND","SET_BOARD_TOOLS","SET_FDICE_EVENT","ALL_EVENTS","FORM_SUBMIT","UPDATE_ENGAGEMENT_SCORE","MEETING_TO_JOIN","SET_API_MODE","SET_ENGAGEMENT_STICKER","SET_KEYB_MODE","SET_VIDEO_STATE","SET_MODE","SET_MOBILE_MODE","SET_ALERT_MESSAGES","POP_ALERT_MESSAGES","SET_VIDEO_CONFIG","PENDING_SUBSCRIPTIONS","SET_SHARED_SCREEN","SET_BOARD_RECORDING","ADD_CLASSPOLL_EVENT","SET_EMBEDDED_MODE","SET_PAGE_ADDING","SET_SHARED_SCREEN_DIALOG","setSharedScreenDialog","setEmbeddedMode","addClassPollEvent","setPageAdding","setBoardRecording","setSharedScreen","setPendingSubsciptions","setVideoConfig","setAlertMessages","popAlertMessage","setMobileMode","setVideoState","setKeyBMode","disableKeyBMode","setEngagementSticker","setApiMode","updateEngagementScore","addFormSubmit","addAllEvents","setBoardTools","setBackGround","setTimeMachine","setMatrixGrid","setGridBrowser","setClickMode","setPersonalConfig","setDrawerWalker","setGradingWalker","setSyncDisabled","setNotification","setDrift","setFollow","showDice","setRichText","setShowcase","setPalette","setBoardLock","setPageLock","setTimerEvent","setRaiseHand","setChatMsg","setTeacher","setCountry","setClientLoc","setBoardType","setTab","setSessionDialog","setGVPage","setNoUser","setUser","setNotificationRemind","setUserProfile","setTutorGroup","setTutorUsertype","setTutorTourDone","openAuthDialog","setBoardConfig","starterMode","fourToolsStudent","addParticipant","flushParticipants","processPendingParticipants","setAvatarDialogOpen","deleteActive","setCommunityUser","spinnerEvent","fDiceEvent","getPageLock","pg","sessID","p","pgNum","letItSnowEvent","event","ReactGA","pageview","exception","initializeGA","debug","initializeGoogleTagManager","w","s","l","f","getElementsByTagName","j","createElement","async","parentNode","insertBefore","initializeClarityTagManager","a","r","t","y","arguments","componentImport","lazy","pageHasAlreadyBeenForceRefreshed","reload","LOCAL_STORAGE","getItem","localStorage","setItem","alert","removeItem","clear","Translations","Translate","translated"],"mappings":"sPAWe,SAASA,IAAiB,IAAD,EACPC,YAAW,CAAC,iBAAkB,aADvB,mBAC7BC,EAD6B,KACpBC,EADoB,OAEMC,wBAASC,GAFf,mBAE7BC,EAF6B,KAEdC,EAFc,KAmDpC,SAASC,IACL,IAAIC,EAAI,IAAIC,KAAK,GAEjBD,EAAEE,mBAAmBD,KAAKE,MAAM,QAChCT,EAAU,kBAAkB,EAAM,CAAEU,KAAM,IAAKC,QAASL,EAAGM,SAAU,WACrEZ,EAAU,YAAY,EAAM,CAAEU,KAAM,IAAKC,QAASL,EAAGM,SAAU,WAC/DC,OAAOC,gBAAiB,EACxBD,OAAOE,UAAW,EAGtB,SAASC,IACL,IAAIV,EAAI,IAAIC,KAAK,GAEjBD,EAAEE,mBAAmBD,KAAKE,MAAM,QAChCT,EAAU,kBAAkB,EAAM,CAAEU,KAAM,IAAKC,QAASL,EAAGM,SAAU,WACrEZ,EAAU,YAAY,EAAO,CAAEU,KAAM,IAAKC,QAASL,EAAGM,SAAU,WAChEC,OAAOC,gBAAiB,EACxBD,OAAOE,UAAW,EAGtB,SAASE,IACL,IAAIX,EAAI,IAAIC,KAAK,GAEjBD,EAAEE,mBAAmBD,KAAKE,MAAM,QAChCT,EAAU,kBAAkB,EAAO,CAAEU,KAAM,IAAKC,QAASL,IACzDN,EAAU,YAAY,EAAO,CAAEU,KAAM,IAAKC,QAASL,IACnDO,OAAOC,gBAAiB,EACxBD,OAAOE,UAAW,EAOtB,OAhEAG,IAAMC,WAAU,WACZ,QAAsBjB,IAAlBC,EAGJ,IACIiB,IAAmBC,aAAaC,MAAK,WAEjCT,OAAOV,eAAgB,EACvBC,GAAiB,GACjBgB,IAAmBG,aAAaD,MAAK,SAACE,GACtCX,OAAOY,OAASD,EAAQE,IAAIC,WAI7B,WACCd,OAAOV,eAAgB,EACvBC,GAAiB,MAErBwB,YAAW,gBACkB1B,IAAzBW,OAAOV,gBACPU,OAAOV,eAAgB,EACvBC,GAAiB,MAElB,KACL,SACES,OAAOV,eAAgB,EACvBC,GAAiB,MAEtB,CAACD,IAgCJe,IAAMC,WAAU,cAEd,CAACpB,IAGH,+BA9EQc,OAAOgB,WAAahB,OAAOiB,OAAOD,YA+EiC,IAAlB1B,IAA4BJ,EAAQe,gBACzF,yBAAKiB,UAAU,kBACX,kBAAC,IAAD,CAAQC,MAAI,GACR,yBAAKD,UAAU,+CACX,0BAAME,OAAO,IAAIF,UAAU,4BACvB,uBAAGA,UAAU,uBAAb,oHAGA,uBAAGA,UAAU,eAAeG,KAAK,WAAWC,OAAO,SAASC,IAAI,uBAAhE,oBACA,yBAAKL,UAAU,yBACf,yBAAKA,UAAU,6BAA6BM,QAAShC,GACjD,2BAAOiC,KAAK,SAASC,MAAM,YAE/B,yBAAKR,UAAU,6BAA6BM,QAASrB,GACjD,2BAAOe,UAAU,UAAUO,KAAK,SAASC,MAAM,oBAEnD,kBAAC,IAAD,CAAYC,aAAW,SAASH,QAASpB,GACrC,kBAAC,IAAD,WAMhB,kBAAC,IAAD,CAAQwB,QAAM,GACV,yBAAKV,UAAU,+CACX,0BAAME,OAAO,IAAIF,UAAU,uBACvB,yBAAKW,IAAI,cAAcX,UAAU,YAAYY,IAAI,mBACjD,uBAAGZ,UAAU,kBAAb,mHAEA,uBAAGA,UAAU,eAAeG,KAAK,WAAWC,OAAO,SAASC,IAAI,uBAAhE,qBAGA,yBAAKL,UAAU,oBACf,yBAAKA,UAAU,wBAAwBM,QAAShC,GAC5C,2BAAOiC,KAAK,SAASC,MAAM,gBAE/B,yBAAKR,UAAU,wBAAwBM,QAASrB,GAC5C,2BAAOe,UAAU,UAAUO,KAAK,SAASC,MAAM,oBAKnD,kBAAC,IAAD,CAAYC,aAAW,SAASH,QAASpB,GACrC,kBAAC,IAAD,e,iCC7I5B,WAsBe2B,IApBC,SAACC,GACb,IAAIC,EAAW,GACTC,EAAOlC,OAAOmC,eACdC,EAAWpC,OAAOqC,YAClBC,EAAaJ,GAAQK,KAAKC,MAAMN,GAChCO,EAAiBL,GAAYG,KAAKC,MAAMJ,GAC1CK,GAAkBA,EAAeC,SACjCT,EAAWQ,EAAeC,SAEtBJ,GAAcA,EAAWL,WACzBA,EAAWK,EAAWL,UAG9B,IAAIU,EAAKC,IAAuB,YAIhC,OAHID,IAAIV,EAAWU,GACfV,GAAyB,KAAbA,IACZA,EAAW,MACRA,I,uYCXLY,EAAe,CACjBC,KAAM,KACNC,iBAAa1D,EACb2D,WAAY,KACZC,cAAe,KACfC,eAAe,EACfC,cAAe,KACfC,WAAY,CACRC,MAAM,GAEVC,YAAa,KACbC,UAAW,KACXC,YAAa,GACbC,aAAc,GACdC,YAAa,GACbC,QAAQ,EACRC,OAAQ,EACRC,cAAe,CACXR,MAAM,GAEVS,UAAW,CACPC,KAAM,GACNC,QAAQ,GAEZC,IAAK,CACDC,SAAU,EACVC,QAAS,IAEbC,kBAAmB,CACfC,cAAc,EACdC,YAAa,IAEjBC,UAAW,CACPC,SAAS,EACTC,SAAU,GACVxC,SAAU,MAEdyC,MAAO,CACHC,SAAS,EACTC,OAAQ,IAEZC,YAAa,CACTC,QAAQ,EACRF,OAAQ,IAEZG,UAAW,CACPH,OAAQ,IAEZI,WAAY,CACRJ,OAAQ,GACRE,QAAQ,EACRG,KAAM,MAEVC,SAAU,CACNJ,QAAQ,EACRK,QAAQ,EACRP,OAAQ,IAEZQ,aAAc,CACV/B,MAAM,EACNgC,SAAS,EACTC,IAAK,MAETC,SAAU,CACNlC,MAAM,EACNmC,OAAQ,KACRC,GAAI,KACJC,IAAK,MAETC,oBAAqB,GACrBC,kBAAkB,EAClBC,SAAU,CACNC,QAAS,CACLzC,MAAM,EACN0C,OAAQ,GACRC,IAAK,MAETC,MAAO,CACH5C,MAAM,EACN0C,OAAQ,GACRC,IAAK,OAGbE,cAAe,CACXC,KAAK,EACLvB,OAAQ,IAEZwB,WAAY,EACZN,QAAS,EACTO,kBAAkB,EAClBC,cAAc,EACdC,aAAc,CACVlD,MAAM,EACNmD,KAAM,GAEVC,cAAe,CACXpD,MAAM,EACNmD,KAAM,GAEVE,UAAW,CACPC,KAAM,OACNC,IAAK,QAETC,WAAY,KACZC,SAAU,KACVC,aAAc,KACd5E,eAAgB,CACZ6E,KAAM,SACNC,UAAU,EACVC,iBAAiB,EACjBjF,SAAUW,IAAuB,aAErCuE,YAAa,CACT9D,MAAM,EACN+D,QAAS,EACTC,UAAU,EACVC,eAAe,EACfC,OAAQ,GACRC,WAAY,GACZC,WAAY,IAEhBC,WAAY,CACRC,UAAW,KACXC,QAAS,IAEbC,YAAa,CACTxE,MAAM,EACNgE,UAAU,EACVS,aAAc,KACdC,OAAQ,IAEZC,WAAY,CACRC,MAAO,KACPC,MAAO,KACPC,YAAY,EACZC,iBAAiB,EACjBC,SAAS,GAEbC,WAAY,GACZC,WAAY,CACR3D,OAAQ,IAEZ4D,gBAAiB,GACjBC,kBAAmB,KACnBC,cAAe,KACfC,QAAS,KACTC,WAAW,EACXC,SAAU,CAAEC,QAAQ,EAAOC,QAAS,IACpCC,WAAY,CAAErC,KAAM,QACpBsC,aAAc,KACdC,mBAAoB,CAAE7F,MAAM,GAC5B8F,YAAa,KACbC,qBAAsB,GACtBC,cAAe,CACXhG,MAAM,EACNoB,SAAU,IAEd6E,aAAc,KACdC,eAAgB,KAChBC,UAAW,CACPnG,MAAM,EACNoB,SAAU,IAEdgF,aAAc,KACdC,YAAY,EACZC,mBAAoB,CAChBtG,MAAM,IAIVuG,EAAS,GACTC,EAAuB,GAE3B,SAASC,EAAWC,GAChB,IAAIC,EAAQD,EAAKE,GACjB,GAAIF,EAAKG,YACLF,EAAQD,EAAKG,iBAEb,GAAIH,EAAKI,QAAS,CACd,IAAMC,EAAK7H,KAAKC,MAAMuH,EAAKI,SACvBC,EAAGC,UACHL,EAAQI,EAAGC,SAIvB,OAAOL,EAGX,SAASM,EAASxH,GACd,IAAMyH,EAASzH,EAAOA,EAAK0H,SAAW,KAClCC,EAAO7H,IAAuB,aAUlC,OATK6H,IACDA,EAAOC,cACP9H,IAAuB,YAAa6H,IAEpCF,GAAUE,IAASF,IACnB3H,IAAuB,YAAa2H,GACpC3H,IAAuB,gBAAiB6H,GACxCA,EAAOF,GAEJE,EAGX,SAASE,EAAiB5H,GAClBA,GACKA,EAAY6H,SAGbhI,IAAuB,WAAYG,EAAY6H,UAF/ChI,IAA0B,YAIzBG,EAAY8H,SAGbjI,IAAuB,SAAUG,EAAY8H,UAF7CjI,IAA0B,WAK9BA,IAA0B,YAQlC,SAASkI,EAAgBC,EAAKC,GAE1B,IADA,IAAIC,EAAG,YAAOF,EAAIzG,aACT4G,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAQtB,MALkB,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GAC1B,CACL3G,aAAckH,QAAQN,EAAIE,OAAS,GACnC7G,YAAa2G,GAIrB,SAASO,EAAYT,EAAKC,EAAKS,GAC3B,IAAIR,EAAG,YAAOF,EAAItG,UAClB,IAAKuG,EAAK,MAAO,CAAExG,SAAS,EAAOC,SAAU,IAC7C,IAAIgG,EAAO7H,IAAuB,aAClC,GAAsB,IAAlB6I,EAAM3F,SAAiBkF,GAAOA,EAAIU,SAAWV,EAAIU,QAAQC,SAEpDX,EAAIU,QAAQC,OAAOlB,GAAO,CAC3B,IAAImB,EAAK,CACLpH,QAAS+G,QAAQN,EAAIE,OAAS,GAC9B1G,SAAUwG,GAEd,OAAQW,EAGhB,IAAK,IAAIV,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAoBtB,MAjBkB,SAAdF,EAAIK,OAAqBL,EAAIa,SAASZ,EAAIK,KAAKN,GAanDY,EAAK,CACDpH,QAAS+G,QAAQN,EAAIE,OAAS,GAC9B1G,SAAUwG,GAKlB,SAASa,EAAcL,EAAOT,GAC1B,IAAKA,EACD,MAAO,CACH7E,KAAK,EACLvB,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAMvF,cAActB,QACzBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAGJ,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GACnC,IAAIY,EAAK,CACLzF,IAAKoF,QAAQN,EAAIE,OAAS,GAC1BvG,OAAQqG,GAEZ,OAAO,eAAMW,GAEjB,SAAS7G,EAAU0G,EAAOT,GAEtB,IADA,IAAIC,EAAG,YAAOQ,EAAM1G,UAAUH,QACrBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAKtB,OAFAD,EAAIK,KAAKN,GACA,CAAEpG,OAAQqG,GAGvB,SAASc,EAAYN,EAAOT,GACxB,IAAKA,EACD,MAAO,CACHlG,QAAQ,EACRF,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAM5G,YAAYD,QACvBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAQtB,MALkB,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GAC1B,CACLlG,OAAQyG,QAAQN,EAAIE,OAAS,GAC7BvG,OAAQqG,GAIhB,SAASe,EAAgBP,EAAOT,GAC5B,IAAKA,EACD,MAAO,CACHpG,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAMzG,WAAWJ,QACtBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAGJ,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GACnC,IAAIY,EAAK,CAAEhH,OAAQqG,GACfgB,EAAKC,KAAoBN,GAG7B,OAFAA,EAAE,OAAaK,EAAGnH,OAClB8G,EAAE,KAAWK,EAAGE,GACRP,EAEZ,SAASQ,EAAgBX,EAAOT,GAC5B,IAAKA,EACD,MAAO,CACHlG,QAAQ,EACRF,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAMvG,SAASN,QACpBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAUtB,MAPkB,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GAE1B,CACLlG,OAAQyG,QAAQN,EAAIE,OAAS,GAC7BhG,OAAQoG,QAAQN,EAAIE,OAAS,IAAOI,QAAQN,EAAIE,OAAS,IAAMM,EAAMjI,YAAY6I,iBACjFzH,OAAQqG,GAIhB,SAASqB,EAAS9G,GACd,OAAiB,MAAVA,GAAoC,kBAAXA,EAGpC,SAAS+G,EAAmBC,EAASC,EAASC,GAC1C,IAAMC,EAAQC,OAAOC,KAAKL,GACpBM,EAAQF,OAAOC,KAAKJ,GACpBM,GAAU,IAAIrN,MAAOsN,UACvBC,EAAW,EAEf,GAAIN,EAAMxB,SAAW2B,EAAM3B,OACvB,OAAO,EAGX,cAAgBwB,EAAhB,eAAuB,CAAlB,IAAIO,EAAG,KACJC,EAAOb,EAASE,EAAQU,IACxBE,EAAOd,EAASG,EAAQS,IAE5B,IAAIC,IAAQC,EAAZ,CAEO,GAAKD,IAASC,GAAUA,IAASD,EACpC,OAAO,EAGX,GAAY,cAARD,GAgBA,IARMH,EAPQ,IAAIrN,KAAK+M,EAAQS,KAOJ,IAASG,MAChCJ,EAAW,GAGTpD,EAAqB6C,KACvB7C,EAAqB6C,GAAU,GAG/B7C,EAAqB6C,KAAYO,EAEjC,OADApD,EAAqB6C,GAAUO,GACxB,OAER,GAAIT,EAAQU,KAAST,EAAQS,GAChC,OAAO,GAIf,OAAO,EAGX,SAASI,EAAyBC,GAC9B,IAAMZ,EAAQC,OAAOC,KAAKjD,GACpBkD,EAAQF,OAAOC,KAAKU,GAE1B,GAAIZ,EAAMxB,SAAW2B,EAAM3B,OACvB,OAAO,EAGX,cAAgBwB,EAAhB,eAAuB,CAAlB,IAAIO,EAAG,KACR,QAAsB7N,IAAlBkO,EAASL,GACT,OAAO,EAGX,IAAKX,EAAmB3C,EAAOsD,GAC3BK,EAASL,GAAMA,GACf,OAAO,EAIf,OAAO,EAGX,SAASM,EAAmBC,GACxB,IAAIC,EAAQD,EAKZ,OAJIA,GAAMC,EAAMC,SAAS,qBAErBD,GADAA,EAAQA,EAAME,MAAM,KAAK,IACXC,QAAQ,KAAM,MAEzBH,EAEX,SAASI,EAAarC,EAAOT,GACzB,IAAKA,EACD,MAAO,CACHrG,SAAS,EACTC,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAM/G,MAAME,QACjBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAQtB,MALkB,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GAC1B,CACLrG,QAAS4G,QAAQN,EAAIE,OAAS,GAC9BvG,OAAQqG,GAIhB,SAAS8C,EAAYtC,EAAOuC,GACxB,IAAI3K,GAAO,EACK,SAAZ2K,EAAE3C,QAAkBhI,GAAO,GAC/B,IAAI4K,EAAY,QACZD,EAAEE,cACFD,EAAY,WAEXD,EAAEtC,QAAQyC,aAAYH,EAAEtC,QAAQyC,WAAa,IAClD,IAAIC,EAAQJ,EAAEtC,QAAQhK,MAClB2M,EAASC,MAAMC,QAAQH,GAASA,EAAQ,KAU5C,OATU,2BACH3C,EAAM5F,UADH,kBAELoI,EAAY,CACT5K,KAAMA,EACN2C,IAAKgI,EACLtM,MAAO2M,EACPF,WAAYH,EAAEtC,QAAQyC,cAKlC,SAASK,EAAe3H,EAAYmH,EAAG5H,GACnC,IAAMqI,EAAS,IAAI/O,KACbgP,EAAU,IAAIhP,KAAKsO,EAAEW,WAK3B,OAAIC,KAAKC,IAAIJ,EAASC,EAAuB,IAAbtI,GAAqB,IAG1CS,EAEJmH,EAEX,SAASc,EAAahI,EAAUkH,EAAG5H,GAC/B,IAAMqI,EAAS,IAAI/O,KACbgP,EAAU,IAAIhP,KAAKsO,EAAEW,WAK3B,OAAIC,KAAKC,IAAIJ,EAASC,EAAuB,IAAbtI,GAAqB,IAG1CU,EAEJkH,EAEX,SAASe,EAAiBhI,EAAciH,EAAG5H,GACvC,IAAMqI,EAAS,IAAI/O,KACbgP,EAAU,IAAIhP,KAAKsO,EAAEW,WAC3B,OAAIC,KAAKC,IAAIJ,EAASC,EAAuB,IAAbtI,GAAqB,IAC1CW,EAEJiH,EAEX,SAASgB,EAAkBvD,EAAOT,GAE9B,IADA,IAAIC,EAAG,YAAOQ,EAAMlD,WAAW3D,QACtBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAKtB,OAFAD,EAAIK,KAAKN,GACA,CAAEpG,OAAQqG,GAGvB,SAASgE,EAAaxD,EAAOyD,GACzB,IAAKA,EACD,MAAO,GAEX,IAAK,IAAIhE,EAAI,EAAGA,EAAIgE,EAAO/D,OAAQD,IAAK,CACpC,IAAInB,EAAOmF,EAAOhE,GAEdiE,EAAM1D,EAAMjD,gBACZ4G,EAAM,EACLD,EAAG,MAASA,EAAG,IAAU,IAC9BA,EAAG,IAAQ7D,KAAKvB,GAEZoF,EAAG,MACHC,EAAMD,EAAG,KAEb,IAAI1E,EAAOV,EAAKU,KACZ4E,EAAY9M,KAAKC,MAAMuH,EAAK2B,SAChC,GAAI2D,GAAaA,EAAU7G,gBAAiB,CACxC,IACI8G,EADID,EAAU7G,gBACL+G,WAIb,GAHID,EAAOF,IACPA,EAAME,GAENH,EAAI1E,GAAO,CACX,IAAI+E,GAAW,EACXC,EAAIN,EAAI1E,GAAMiF,QACdD,EAAIH,IAAME,GAAW,GACzB,IAAIG,EAAM,IAAML,EAAOF,EACnBQ,EAAOD,EAAMR,EAAI1E,GAAMmF,KAAOD,EAAMR,EAAI1E,GAAMmF,KAC9CC,EAAOV,EAAI1E,GAAMqF,QAAU,EAC3BC,IAASF,EAAO,GAAKV,EAAI1E,GAAMsF,IAAOJ,GAAOE,EAEjDV,EAAI1E,GAAQ,CAAEiF,QAASJ,EAAMU,UAAWR,EAAUS,KAAMR,EAAGS,QAASP,EAAKC,KAAMA,EAAME,QAASD,EAAME,IAAKA,QAEzGJ,EAAM,IAAML,EAAOF,EACnBD,EAAI1E,GAAQ,CAAEiF,QAASJ,EAAMU,WAAW,EAAOC,KAAM,EAAGH,QAAS,EAAGF,KAAMD,EAAKO,QAASP,EAAKI,IAAKJ,GAEtG,GAAIL,GAAQF,EAAK,CACbD,EAAG,IAAUG,EAEb,IADA,IAAIa,EAAIvD,OAAOC,KAAKsC,GACXjE,EAAI,EAAGA,EAAIiF,EAAEhF,OAAQD,IAAK,CAC/B,IAAIkF,EAAKD,EAAEjF,GACX,GAAW,QAAPkF,GAAuB,QAAPA,EAAc,CAC9B,IAAIC,EAAIlB,EAAIiB,GACZC,EAAEH,QAAW,IAAMG,EAAEX,QAAWN,EAC5BiB,EAAEH,QAAU,MAAKG,EAAEH,QAAU,SAOrD,OAAO,eAAKf,GAGhB,SAASmB,EAASC,EAASzM,EAAW0M,GAClC,GAAIA,EAAG7H,SAAW6H,EAAG7H,QAAQ3C,KAAOwK,EAAG7H,QAAQ3C,IAAImE,SAAWqG,EAAG7H,QAAQ3C,IAAImE,QAAQwD,SAAS,SAC1F,OAAO,EAEX,QAAgBtO,IAAZkR,EAAuB,OAAO,EAClC,GAAIzM,GAAaA,EAAUC,MAAQD,EAAUC,KAAKoH,OAAS,EAAG,CAC1D,IAAIsF,GAAS,EACTC,GAAY,EAEhB,GAAG5M,GAAaA,EAAU6M,SAAW7M,EAAU6M,QAAQC,WAAY,OAAO,EAK1E,GAJKL,GAAYA,EAAQ3F,UAAiC,kBAArB2F,EAAQ3F,WAA8B6F,GAAS,GAChF3M,EAAUC,KAAK4J,SAAS,gBAAe+C,GAAY,GACnD5M,EAAUC,KAAK4J,SAAS,YAAW+C,GAAY,GAE/CD,IAAWC,EAEX,OAAO,GARG,EAclB,OAAO,EAGX,SAASG,EAAYpR,EAAGgM,GACpB,IAAIqF,EAAKrF,EAAMjC,UAAU/E,SACnBhF,EAAEiM,QAAQqF,YAAYD,IACxBA,EAAGrR,EAAEiM,QAAQqF,UAAY,IAEb,SAAZtR,EAAE4L,MACFyF,EAAGrR,EAAEiM,QAAQqF,UAAUtR,EAAEiM,QAAQjB,MAAQhL,SAElCqR,EAAGrR,EAAEiM,QAAQqF,UAAUtR,EAAEiM,QAAQjB,MAE5C,IAAIpH,GAAO,EAaX,OAZAuJ,OAAO7G,OAAO+K,GAAIE,SAAQ,SAAAC,GAAC,OACvBrE,OAAO7G,OAAOkL,GAAGD,SAAQ,SAAAvR,GACjBA,IAAG4D,GAAO,SAGhB,2BACCoI,GADD,IAEFjC,UAAW,CACPnG,KAAMA,EACNoB,SAAS,eAAMqM,MAM3B,IA2lBeI,EA3lBK,WAAyC,IAA/BzF,EAA8B,uDAAtB5I,EAAczB,EAAQ,uCACxD,OAAQA,EAAOK,MACX,KAAKyK,KACD,OAAO,2BACAT,GADP,IAEI9B,mBAAoBvI,EAAO2I,OAGnC,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIhC,aAAcrI,EAAO2I,OAG7B,KAAKmC,IACD,OAAK9K,EAAO2I,KASL8G,EAAYzP,EAAO2I,KAAM0B,GARrB,2BACAA,GADP,IAEIjC,UAAW,CACPnG,MAAM,EACNoB,SAAU,MAM1B,KAAKyH,IACD,OAAO,2BACAT,GADP,IAEI/B,WAAYtI,EAAO2I,OAG3B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlC,eAAgBnI,EAAO2I,OAG/B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEInC,aAAclI,EAAO2I,OAG7B,KAAKmC,IACD,IAAIiF,EAAK,GAIT,OAHI/P,EAAO2I,OACPoH,EAAE,sBAAO1F,EAAMpC,cAAc5E,UAA3B,CAAqCrD,EAAO2I,QAE3C,2BACA0B,GADP,IAEIpC,cAAe,CAAE5E,SAAU0M,EAAI9N,KAAM8N,EAAGhG,OAAS,KAGzD,KAAKe,IACD,IAAIzM,EAAI2B,EAAO2I,KACf,OAAO,2BACA0B,GADP,IAEIrC,qBAAqB,2BACdqC,EAAMrC,sBADO,kBAEf3J,EAAEgC,KAAOhC,EAAEiC,UAIxB,KAAKwK,IACD,IAAIiF,EAAK1F,EAAMpC,cAAc5E,SAE7B,OADA0M,EAAGC,QACI,2BACA3F,GADP,IAEIpC,cAAe,CAAE5E,SAAU0M,EAAI9N,KAAM8N,EAAGhG,OAAS,KAGzD,KAAKe,KACD,OAAO,2BACAT,GADP,IAEItC,YAAa/H,EAAO2I,OAG5B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIxC,aAAc7H,EAAO2I,OAG7B,KAAKmC,IACD,IAAMmF,EAAUzO,IAAuB,WACvC,OAAO,2BACA6I,GADP,IAEIvC,mBAAmB,2BACZ9H,EAAO2I,MADI,IAEdsH,QAASA,MAIrB,KAAKnF,KACD,OAAO,2BACAT,GADP,IAEIzC,WAAY5H,EAAO2I,OAG3B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI5C,SAAUzH,EAAO2I,OAGzB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIhD,kBAAmBrH,EAAO2I,OAGlC,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI9C,QAASvH,EAAO2I,OAGxB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI/C,cAAetH,EAAO2I,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIjD,gBAAiByG,EAAaxD,EAAOrK,EAAO2I,QAGpD,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlD,WAAYyG,EAAkBvD,EAAOrK,EAAO2I,QAGpD,KAAKmC,IACD,IAAIoF,EAAKlQ,EAAO2I,KAChB,OAA+B,IAA3B6C,OAAOC,KAAKyE,GAAInG,QAAyD,IAAzCyB,OAAOC,KAAKpB,EAAMnD,YAAY6C,OACvDM,EAEJ,2BACAA,GADP,IAEInD,WAAYlH,EAAO2I,OAG3B,KAAKmC,IACD,IAAMqF,EAAKnQ,EAAO2I,KAmBlB,OAlBIwH,EAAGvK,MACHpE,IAAuB,OAAQ2O,EAAGvK,MAElCuK,EAAGtP,WACHW,IAAuB,WAAY2O,EAAGtP,UACtCuP,eAECD,EAAGtK,SAGJrE,IAA0B,WAF1BA,IAAuB,UAAW,OAIlC2O,EAAGrK,gBACHtE,IAAuB,kBAAmB,OAE1CA,IAA0B,mBAGvB,2BACA6I,GADP,IAEItJ,eAAgBf,EAAO2I,OAG/B,KAAKmC,IACD,IAAIuF,EAAMrQ,EAAO2I,KAAO3I,EAAO2I,KAAO,CAClC9B,MAAO,KACPE,YAAY,EACZC,iBAAiB,EACjBC,SAAS,EACTH,MAAO,MAEX,OAAIuJ,EAAIxJ,QAAUwD,EAAMzD,WAAWC,OAC/BwJ,EAAIrJ,kBAAoBqD,EAAMzD,WAAWI,iBACzCqJ,EAAItJ,aAAesD,EAAMzD,WAAWG,YACpCsJ,EAAIvJ,QAAUuD,EAAMzD,WAAWE,OAC/BuJ,EAAIpJ,UAAYoD,EAAMzD,WAAWK,QAC1BoD,EAEJ,2BACAA,GADP,IAEIzD,WAAYyJ,IAGpB,KAAKvF,KACD,OAAO,2BACAT,GADP,IAEI5D,YAAazG,EAAO2I,OAG5B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI/D,WAAYtG,EAAO2I,OAG3B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEItE,YAAa/F,EAAO2I,OAG5B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI/E,UAAWtF,EAAO2I,OAG1B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlF,aAAcnF,EAAO2I,OAG7B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIhF,cAAerF,EAAO2I,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEInF,aAAclF,EAAO2I,OAG7B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIpF,iBAAkBjF,EAAO2I,OAGjC,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI5F,SAAUkI,EAAYtC,EAAOrK,EAAO2I,QAG5C,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIrF,WAAYhF,EAAO2I,OAG3B,KAAKmC,IACD,IAAIwF,EAAKtQ,EAAO2I,KAChB,GAAI2H,EAAGrO,MAAQqO,EAAGrM,QAAS,CACvB,IAAIsM,EAAK,GACTA,EAAGtO,KAAOqO,EAAGrO,KACbsO,EAAGtM,QAAUqM,EAAGrM,QAChBzC,IAAuB,UAAWL,KAAKqP,UAAUD,SAEjD/O,IAA0B,WAE9B,OAAO,2BACA6I,GADP,IAEIrG,aAAchE,EAAO2I,OAG7B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEI/G,MAAOoJ,EAAarC,EAAOrK,EAAO2I,QAG1C,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIvG,SAAUkH,EAAgBX,EAAOrK,EAAO2I,QAGhD,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIzG,WAAYgH,EAAgBP,EAAOrK,EAAO2I,QAGlD,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI5G,YAAakH,EAAYN,EAAOrK,EAAO2I,QAG/C,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI1G,UAAWA,EAAU0G,EAAOrK,EAAO2I,QAG3C,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIvF,cAAe4F,EAAcL,EAAOrK,EAAO2I,QAGnD,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlG,SAAUnE,EAAO2I,OAGzB,KAAKmC,IACD,IAAIN,EAAKJ,EAAYC,EAAMlH,UAAWnD,EAAO2I,KAAM0B,GACnD,OAAO,2BACAA,GADP,IAEIlH,UAAU,2BACHkH,EAAMlH,WADJ,IAELC,QAASoH,EAAGpH,QACZC,SAAUmH,EAAGnH,aAKzB,KAAKyH,IACD,OAAO,2BACAT,GADP,IAEIrH,kBAAmB,CACfC,kBAA+BjD,EAAO2I,KACtCzF,YAAa,MAIzB,KAAK4H,IACD,IAAIN,EAAKd,EAAgBW,EAAMrH,kBAAmBhD,EAAO2I,MACzD,OAAO,2BACA0B,GADP,IAEIrH,kBAAmB,CACfC,aAAcuH,EAAGvH,aACjBC,YAAasH,EAAGtH,eAI5B,KAAK4H,IACD,OAAO,2BACAT,GADP,IAEI7H,OAAQxC,EAAO2I,OAGvB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEInI,YAAalC,EAAO2I,OAG5B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlI,UAAWnC,EAAO2I,OAG1B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEI3F,QAAS1E,EAAO2I,OAGxB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI7C,UAAW0H,EAAS7E,EAAM1I,YAAa3B,EAAO2I,KAAM0B,GACpD3H,UAAW1C,EAAO2I,OAG1B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIxH,IAAK7C,EAAO2I,OAGpB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI9H,QAAQ,IAGhB,KAAKuI,KAED,OADA5B,EAASlJ,EAAO2I,MACT,2BACA0B,GADP,IAEI3I,KAAM1B,EAAO2I,OAGrB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIoG,OAAQzQ,EAAO2I,OAGvB,KAAKmC,KAED,OADAvB,EAAiBvJ,EAAO2I,MACjB,2BACA0B,GADP,IAEI7C,UAAW0H,EAASlP,EAAO2I,KAAM0B,EAAM3H,UAAW2H,GAClD1I,YAAa3B,EAAO2I,OAI5B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIzI,WAAY5B,EAAO2I,OAI3B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIxI,cAAe7B,EAAO2I,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIvI,cAAe9B,EAAO2I,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEI5H,cAAezC,EAAO2I,OAG9B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIrI,WAAYhC,EAAO2I,OAG3B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIjI,YAAY,eAAMpC,EAAO2I,QAGjC,KAAKmC,IACD,IAAIwF,EAAKjG,EAAM/H,YACTqG,EAAO3I,EAAO2I,KAEpB,OADA2H,EAAG3H,EAAKE,IAAMF,EACP,2BACA0B,GADP,IAEI/H,YAAY,eAAMgO,KAG1B,KAAKxF,IACD,IAAIwF,EAAKjG,EAAM/H,YACTqG,EAAO3I,EAAO2I,KAEpB,cADO2H,EAAG3H,EAAKE,IACR,2BACAwB,GADP,IAEI/H,YAAY,eAAMgO,KAG1B,KAAKxF,IACD,IAAMnC,EAAO3I,EAAO2I,KACpB,GAAIA,EAAKI,SAAWJ,EAAKI,QAAQgB,OAAS,GAAKpB,EAAKI,QAAQwD,SAAS,kBACjE,IACI,IAAImE,EAAKvP,KAAKC,MAAMuH,EAAKI,SACrB2H,EAAGpE,QACHoE,EAAGpE,MAAQF,EAAmBsE,EAAGpE,QAErC3D,EAAK2D,MAAQF,EAAmBzD,EAAK2D,OACrC3D,EAAKI,QAAU5H,KAAKqP,UAAUE,GAChC,WAIN,IAAI9H,EAAQF,EAAWC,GAEvB,GAAI0B,EAAM7F,iBAAkB,CACxB,IAAImM,EAAMtG,EAAM9F,oBAGhB,OAFAoM,EAAIzG,KAAK,CAAE0G,KAAM,MAAOjI,KAAMA,IAEvB,2BACA0B,GADP,IAEI9F,oBAAoB,YAAKoM,KAIjC,IAAIL,EAAKjG,EAAMhI,aAEf,OADAiO,EAAG1H,GAASD,EACRuD,EAAyBoE,IACzB9H,EAAS8H,EAIN,2BACAjG,GADP,IAEIhI,aAAa,eAAMiO,MAJZjG,EAOf,KAAKS,IACD,IAAMnC,EAAO3I,EAAO2I,KAChBC,EAAQF,EAAWC,GAEvB,GAAI0B,EAAM7F,iBAAkB,CACxB,IAAImM,GAAMtG,EAAM9F,oBAGhB,OAFAoM,GAAIzG,KAAK,CAAE0G,KAAM,SAAUjI,KAAMA,IAE1B,2BACA0B,GADP,IAEI9F,oBAAoB,YAAKoM,MAIjC,IAAIL,GAAKjG,EAAMhI,aAQf,cAPOiO,GAAG1H,GACVJ,EAAS8H,GAEL1H,KAASH,UACFA,EAAqBG,GAGzB,2BACAyB,GADP,IAEIhI,aAAa,eAAMiO,MAG3B,KAAKxF,IAID,OAHAtC,EAAS,GACTC,EAAuB,GAEhB,2BACA4B,GADP,IAEI9F,oBAAqB,GACrBlC,aAAc,KAGtB,KAAKyI,IACD,OAAO,2BACAT,GADP,IAEI7F,iBAAkBxE,EAAO2I,OAGjC,KAAKmC,IACD,IAAI6F,GAAMtG,EAAM9F,oBACZ+L,GAAKjG,EAAMhI,aAEf,IAAK,IAAIwO,MAAOF,GAAK,CACjB,IAAIG,GAAOH,GAAIE,IAGf,GAAMC,IAAQA,GAAKnI,KAAnB,CAEA,IAAIC,GAAQF,EAAWoI,GAAKnI,MAEV,QAAdmI,GAAKF,KACLN,GAAG1H,IAASkI,GAAKnI,aAEV2H,GAAG1H,IAENA,MAASH,UACFA,EAAqBG,MASxC,OAHIsD,EAAyBoE,MACzB9H,EAAS8H,IAEN,2BACAjG,GADP,IAEI9F,oBAAqB,GACrBlC,aAAa,eAAMiO,MAG3B,KAAKxF,IAED,OADA5B,EAASlJ,EAAO2I,MACT,2BACA0B,GADP,IAEItI,cAAe/B,EAAO2I,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEI5E,WAAY2H,EAAe/C,EAAM5E,WAAYzF,EAAO2I,KAAM0B,EAAMrF,cAGxE,KAAK8F,IACD,OAAO,2BACAT,GADP,IAEI1E,aAAcgI,EAAiBtD,EAAM1E,aAAc3F,EAAO2I,KAAM0B,EAAMrF,cAG9E,KAAK8F,IACD,OAAO,2BACAT,GADP,IAEI0G,SAAUrD,EAAarD,EAAM3E,SAAU1F,EAAO2I,KAAM0B,EAAMrF,cAGlE,QACI,OAAOqF,I,SC/tCb2G,GAAWC,aAAc,kBAAM,8EAC/BC,GAAMD,aAAc,kBAAM,wEAC1BE,GAAQC,YAAYC,EACtBzS,OAAO0S,8BAAgC1S,OAAO0S,gCAG5CC,GAAQC,YAAe,CACzBC,QAAS,CACLC,QAASC,IACTC,UAAW,CACPC,KAAM,YAGdC,OAAQ,CACJC,OAAQ,UAEZC,WAAY,CAGRC,SAAU,GAEdC,UAAW,CACPC,eAAgB,CACZ,UAAW,CACP,IAAK,CACD,kBAAmB,QAEvB,uBAAwB,CACpBC,MAAO,MACPC,OAAQ,OAEZ,6BAA8B,CAC1BzL,WAAY,SAEhB,6BAA8B,CAC1B0L,gBAAiB,OACjBC,aAAc,YAOnB,SAASC,GAASC,GAAQ,IAAD,EAClB5U,YAAW,CAAC,iBAAkB,aAAzCC,EAD6B,oBAYpC,OATAmB,IAAMC,WAAU,WACRpB,EAAQe,gBAA6C,SAA3Bf,EAAQe,iBAClCD,OAAOC,gBAAiB,EACxB6T,OACAA,OACAA,UAEL,CAAC5U,IAGA,6BACI,kBAAC,IAAD,CAAUqT,MAAOA,IACf,kBAACwB,EAAA,EAAD,CAAiBC,kBAAmB,CAAEnU,KAAM,MAC1C,kBAACoU,EAAA,EAAD,CAAetB,MAAOA,IAClB,kBAAC,IAAD,KACI,kBAAC,WAAD,CAAUuB,SAAU,4CAChB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAOC,OAAK,EAACtU,KAAK,IAAIuU,UAAWhC,KACjC,kBAAC,IAAD,CAAOgC,UAAW9B,QAI5B+B,QAAQC,IAAI,4BAA6BpV,IACzCA,EAAQe,gBAAkB,kBAACjB,EAAA,EAAD,UCvE5BuM,QACW,cAA7BvL,OAAOgB,SAASuT,UAEe,UAA7BvU,OAAOgB,SAASuT,UAEhBvU,OAAOgB,SAASuT,SAASC,MACvB,2D,OCZNC,EAAQ,KAIRC,IAASC,OACP,kBAAC,IAAMC,WAAP,KACE,kBAAC,GAAD,OAEFC,SAASC,eAAe,SDqHpB,kBAAmBC,WACrBA,UAAUC,cAAcC,MACrBxU,MAAK,SAAAyU,GACJA,EAAaC,gBAEdC,OAAM,SAAAC,GACLhB,QAAQgB,MAAMA,EAAMC,a,+BEzI5B,qyJAAO,IAAMC,EAAW,uBACXC,EAAiB,2BACjBC,EAAmB,0BACnBC,EAAkB,yBAClBC,EAAqB,4BACrBC,EAAqB,4BACrBC,EAAmB,4BACnBC,EAAY,oBACZC,EAAiB,yBACjBC,EAAoB,4BACpBC,EAAmB,2BACnBC,EAA+B,sCAC/BC,EAAqB,4BACrBC,EAAY,oBACZC,EAAgB,uBAChBC,EAAa,qBACbC,EAAa,oBACbC,EAAqB,4BACrBC,EAAiB,wBACjBC,EAAU,iBACVC,EAAc,qBACdC,EAAa,qBACbC,EAAgB,wBAChBC,EAAY,oBACZC,EAAoB,4BACpBC,EAAU,kBACVC,EAAa,qBACbC,EAAY,oBACZC,EAAW,mBACXC,EAAa,qBACbC,EAAU,kBACVC,EAAe,uBACfC,EAAU,kBACVC,EAAY,oBACZC,EAAiB,yBACjBC,EAAkB,0BAClBC,EAAmB,2BACnBC,EAAmB,2BACnBC,EAAoB,4BACpBC,EAAgB,wBAChBC,EAAoB,2BACpBC,EAAoB,2BACpBC,EAAsB,6BACtBC,EAAmB,0BACnBC,EAAkB,yBAClBC,EAAsB,6BACtBC,EAAmB,0BACnBC,EAAkB,yBAClBC,EAAkB,yBAClBC,EAAkB,yBAClBC,EAAa,oBACbC,GAAc,qBACdC,GAA0B,iCAC1BC,GAAkB,yBAClBC,GAAe,sBACfC,GAAyB,gCACzBC,GAAgB,uBAChBC,GAAkB,yBAClBC,GAAW,kBACXC,GAAkB,yBAClBC,GAAqB,4BACrBC,GAAqB,4BACrBC,GAAmB,0BACnBC,GAAwB,+BACxBC,GAAoB,2BACpBC,GAAsB,6BACtBC,GAAsB,6BACtBC,GAAoB,2BACpBC,GAAkB,yBAClBC,GAA2B,kCAEjC,SAASC,GAAsB9P,GAClC,MAAO,CACHtI,KAAMmY,GACN7P,QAGD,SAAS+P,GAAgB/P,GAC5B,MAAO,CACHtI,KAAMiY,GACN3P,QAGD,SAASgQ,GAAkBhQ,GAC9B,MAAO,CACHtI,KAAMgY,GACN1P,QAID,SAASiQ,GAAcjQ,GAC1B,MAAO,CACHtI,KAAMkY,GACN5P,QAGD,SAASkQ,GAAkBlQ,GAC9B,MAAO,CACHtI,KAAM+X,GACNzP,QAGD,SAASmQ,GAAgBnQ,GAC5B,MAAO,CACHtI,KAAM8X,GACNxP,QAGD,SAASoQ,GAAuBpQ,GACnC,MAAO,CACHtI,KAAM6X,GACNvP,QAGD,SAASqQ,GAAerQ,GAC3B,MAAO,CACHtI,KAAM4X,GACNtP,QAGD,SAASsQ,GAAiBtQ,GAC7B,MAAO,CACHtI,KAAM0X,GACNpP,QAGD,SAASuQ,KAEZ,MAAO,CACH7Y,KAAM2X,GACNrP,KAHO,MAMR,SAASwQ,GAAcxQ,GAC1B,MAAO,CACHtI,KAAMyX,GACNnP,QASD,SAASyQ,GAAczQ,GAC1B,MAAO,CACHtI,KAAMuX,GACNjP,QAGD,SAAS0Q,GAAY1Q,GACxB,MAAO,CACHtI,KAAMsX,GACNhP,QAID,SAAS2Q,KAEZ,MAAO,CACHjZ,KAAMsX,GACNhP,KAHO,CAACjB,QAAQ,EAAOC,QAAS,KAOjC,SAAS4R,GAAqB5Q,GACjC,MAAO,CACHtI,KAAMqX,GACN/O,QAGD,SAAS6Q,GAAW7Q,GACvB,MAAO,CACHtI,KAAMoX,GACN9O,QAGD,SAASrB,GAAcqB,GAC1B,MAAO,CACHtI,KAAMmX,GACN7O,QAGD,SAAS8Q,GAAsB9Q,GAClC,MAAO,CACHtI,KAAMkX,GACN5O,QAGD,SAAS+Q,GAAc/Q,GAC1B,MAAO,CACHtI,KAAMiX,GACN3O,QAGD,SAASgR,GAAahR,GACzB,MAAO,CACHtI,KAAMgX,EACN1O,QAGD,SAASiR,GAAcjR,GAC1B,MAAO,CACHtI,KAAM8W,EACNxO,QAID,SAASkR,GAAclR,GAC1B,MAAO,CACHtI,KAAM6W,EACNvO,QAID,SAASmR,GAAenR,GAC3B,MAAO,CACHtI,KAAM4W,EACNtO,QAGD,SAASoR,GAAcpR,GAC1B,MAAO,CACHtI,KAAM0W,EACNpO,QAGD,SAASqR,GAAerR,GAC3B,MAAO,CACHtI,KAAMyW,EACNnO,QAGD,SAASsR,GAAatR,GACzB,MAAO,CACHtI,KAAMqW,EACN/N,QAID,SAASuR,GAAkBvR,GAC9B,MAAO,CACHtI,KAAMwW,EACNlO,QAID,SAASwR,GAAgBxR,GAC5B,MAAO,CACHtI,KAAMmW,EACN7N,QAID,SAASyR,GAAiBzR,GAC7B,MAAO,CACHtI,KAAMoW,EACN9N,QAID,SAAS0R,GAAgB1R,GAC5B,MAAO,CACHtI,KAAMkW,EACN5N,QAGD,SAAS2R,GAAgB3R,GAC5B,MAAO,CACHtI,KAAMiW,EACN3N,QAGD,SAAS4R,GAAS5R,GACrB,MAAO,CACHtI,KAAMgW,EACN1N,QAGD,SAAS6R,GAAU7R,GACtB,MAAO,CACHtI,KAAM+V,EACNzN,QAGD,SAAS8R,GAAS9R,GACrB,MAAO,CACHtI,KAAM8V,EACNxN,QAGD,SAAS+R,GAAY/R,GACxB,MAAO,CACHtI,KAAM6V,EACNvN,QAGD,SAASgS,GAAYhS,GACxB,MAAO,CACHtI,KAAM4V,EACNtN,QAGD,SAASiS,GAAWjS,GACvB,MAAO,CACHtI,KAAM2V,EACNrN,QAGD,SAASkS,GAAalS,GACzB,MAAO,CACHtI,KAAMyV,EACNnN,QAGD,SAASmS,GAAYnS,GACxB,MAAO,CACHtI,KAAM0V,EACNpN,QAGD,SAASoS,GAAcpS,GAC1B,MAAO,CACHtI,KAAMwV,EACNlN,QAGD,SAASqS,GAAarS,GACzB,MAAO,CACHtI,KAAMqV,EACN/M,QAGD,SAASsS,GAAWtS,GACvB,MAAO,CACHtI,KAAMuV,EACNjN,QAID,SAAS3F,GAAkB2F,GAC9B,MAAO,CACHtI,KAAMsV,EACNhN,QAID,SAASuS,GAAWvS,GACvB,MAAO,CACHtI,KAAMkV,EACN5M,QAID,SAASwS,GAAWxS,GACvB,MAAO,CACHtI,KAAMmV,EACN7M,QAID,SAASyS,GAAazS,GACzB,MAAO,CACHtI,KAAMoV,EACN9M,QAID,SAAS0S,GAAa1S,GACzB,MAAO,CACHtI,KAAMgV,EACN1M,QAID,SAAS2S,GAAO3S,GACnB,MAAO,CACHtI,KAAMiV,EACN3M,QAID,SAAS4S,GAAiB5S,GAC7B,MAAO,CACHtI,KAAM+U,EACNzM,QAID,SAAS6S,GAAU7S,GACtB,MAAO,CACHtI,KAAM8U,EACNxM,QAID,SAAS8S,KACZ,MAAO,CACHpb,KAAM6U,GAIP,SAASwG,GAAQ/S,GACpB,MAAO,CACHtI,KAAM8T,EACNxL,QAID,SAASgT,GAAsBhT,GAClC,MAAO,CACHtI,KAAM+T,EACNzL,QAID,SAASiT,GAAejT,GAC3B,MAAO,CACHtI,KAAMgU,EACN1L,QAID,SAASkT,GAAclT,GAC1B,MAAO,CACHtI,KAAMiU,EACN3L,QAID,SAASmT,GAAiBnT,GAC7B,MAAO,CACHtI,KAAMkU,EACN5L,QAID,SAASoT,GAAiBpT,GAC7B,MAAO,CACHtI,KAAMmU,EACN7L,QAID,SAASqT,GAAerT,GAC3B,MAAO,CACHtI,KAAMoU,EACN9L,QAID,SAASsT,GAAetT,GAI3B,OAHIA,EAAKuT,cACLvT,EAAKwT,kBAAmB,GAErB,CACH9b,KAAMqU,EACN/L,QAGD,SAASyT,GAAezT,GAC3B,MAAO,CACHtI,KAAMsU,EACNhM,QASD,SAAS0T,KACZ,MAAO,CACHhc,KAAMwU,GAGP,SAASyH,KACZ,MAAO,CACHjc,KAAMyU,GAIP,SAASyH,GAAoB5T,GAChC,MAAO,CACHtI,KAAM0U,EACNpM,QAUD,SAAS6T,GAAa7T,GACzB,MAAO,CACHtI,KAAM4U,EACNtM,QAID,SAAS8T,GAAiB9T,GAC7B,MAAO,CACHtI,KAAMsW,EACNhO,QAID,SAAS+T,GAAa/T,GACzB,MAAO,CACHtI,KAAMuW,EACNjO,QAID,SAASgU,GAAWhU,GACvB,MAAO,CACHtI,KAAM+W,EACNzO,QAID,SAASiU,GAAYC,GAKxB,IAJA,IACIC,EADYle,OAAOgB,SAASK,KAAKuM,MAAM,WACtB,GAAGA,MAAM,WAC1B4G,GAAQ,EACRrI,EAAK,KACAjB,EAAE,EAAGA,EAAG+S,EAAGrZ,OAAOuG,OAAQD,IAAK,CACpC,IAAMiT,EAAIF,EAAGrZ,OAAOsG,GAEpB,GADSiT,EAAElU,GAAG2D,MAAM,cACb,KAAOsQ,EAAO,GAAI,CACrB1J,GAAQ,EACRrI,EAAKgS,EACL,OAGR,MAAQ,CAACC,MAAOF,EAAO,GAAIpZ,OAAQ0P,EAAOrI,GAAIA,GAE3C,SAASkS,GAAetU,GAC3B,MAAO,CACHtI,KAAM2W,EACNrO,U,gCChiBR,wNAEO,SAASuU,EAAMzK,GACd7T,OAAOC,gBACPse,IAAQD,MAAMzK,GAIf,SAAS2K,EAAS3K,GACjB7T,OAAOC,gBACPse,IAAQC,SAAS3K,GAIlB,SAAS4K,EAAU5K,GAClB7T,OAAOC,gBACPse,IAAQE,UAAU5K,GAKnB,SAAS6K,IACR1e,OAAOC,gBACPse,IAAQ/d,WAAW,iBAAkB,CAAEme,OAAO,IAK/C,SAASC,IACZvK,QAAQC,IAAI,mCACZ,SAAUuK,EAAEpf,EAAEqf,EAAEC,EAAE7T,GAAG2T,EAAEE,GAAGF,EAAEE,IAAI,GAAGF,EAAEE,GAAGzT,KAAK,CAAC,aAC9C,IAAI5L,MAAOsN,UAAUsR,MAAM,WAAW,IAAIU,EAAEvf,EAAEwf,qBAAqBH,GAAG,GACtEI,EAAEzf,EAAE0f,cAAcL,GAAgCI,EAAEE,OAAM,EAAKF,EAAEpd,IACjE,yDAAmDkd,EAAEK,WAAWC,aAAaJ,EAAEF,GAH/E,CAIGhf,OAAO6U,SAAS,SAAS,aAGzB,SAAS0K,IACZ,IAAU9P,EAAEsP,EAAES,EAAEC,EAAIC,EAAEC,EAAZlQ,EAIPzP,OAJS+e,EAIDlK,SAJK4K,EAIgB,SAH5BhQ,EADU+P,EAIO,WAHZ/P,EAAE+P,IAAI,YAAY/P,EAAE+P,GAAGvO,EAAExB,EAAE+P,GAAGvO,GAAG,IAAI3F,KAAKsU,aAC/CF,EAAEX,EAAEI,cAAcM,IAAKL,MAAM,EAAEM,EAAE5d,IAAI,yCACjC6d,EAAEZ,EAAEE,qBAAqBQ,GAAG,IAAKJ,WAAWC,aAAaI,EAAEC,K,4GCtC1DtN,EAAgB,SAACwN,GAAD,OAC3BC,eAAI,sBAAC,8BAAAN,EAAA,6DACGO,EAAmCxd,KAAKC,MAC5CI,IACE,kCACG,SAJJ,kBAQuBid,IARvB,cAQKzL,EARL,OAUDxR,IACE,gCACA,SAZD,kBAeMwR,GAfN,mCAiBI2L,EAjBJ,wBAoBCnd,IACE,gCACA,QAtBH,kBAwBQ5C,OAAOgB,SAASgf,UAxBxB,+E,+BCHP,4IAAIC,EAAgB,GAEb,SAASC,EAAQnc,GACpB,IACI,OAAOoc,aAAaD,QAAQnc,GAC9B,SAEE,OAAOkc,EAAclc,IAItB,SAASqc,EAAQrc,EAAMrC,GAC1B,IACI,OAAOye,aAAaC,QAAQrc,EAAMrC,GACpC,SAME,OALMqC,KAAQkc,GAA4B,cAATlc,GAC7Bsc,MAAM,yEAEVJ,EAAclc,GAAQrC,EAEfA,GAKR,SAAS4e,EAAWvc,GACvB,IACI,OAAOoc,aAAaG,WAAWvc,GACjC,SAGE,cAFOkc,EAAclc,GAEd,MAIR,SAASwc,IACZ,IACI,OAAOJ,aAAaI,QACtB,SAGE,OAFAN,EAAgB,GAET,Q,u8jiCC1Cf,uDAGIhe,EAAW,KAER,SAASuP,IACZvP,EAAWF,cACNye,EAAave,KACdA,EAAW,MAiBJwe,IAbG,SAACze,GACf,GAAKC,GAAuB,OAAXA,EAAkB,CAC/B,IAAMye,EAAaF,EAAave,GAAUD,GAC1C,OAAI0e,GAGO1e,EAGX,OAAOA,K","file":"static/js/main.867f8e09.chunk.js","sourcesContent":["import React, { useState } from 'react';\nimport { useCookies } from 'react-cookie';\nimport \"./styles/accessinclusion.scss\";\nimport \"./styles/fontawesome/scss/fontawesome.scss\"\nimport \"./styles/cookieConsent.css\";\nimport { IconButton } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport Hidden from '@material-ui/core/Hidden';\nimport * as microsoftTeams from \"@microsoft/teams-js\";\n// import CookieIcon from '@material-ui/core/Cookie';\n\nexport default function CookieConsent() {\n const [cookies, setCookie] = useCookies(['wbcAnalyticsCC', 'wbcAdsCC']);\n const [insideMSTeams, setInsideMSTeams] = useState(undefined)\n // const [temporaryBannerDisable, setTemporaryBannerDisable] = useState(true)\n const temporaryBannerDisable = false;\n \n function iniFrame() {\n var withiniframe = false;\n if (window.location !== window.parent.location) {\n // The page is in an iFrames\n // console.log(\"The page is in an iFrame\");\n withiniframe = true;\n }\n else {\n // The page is not in an iFrame\n // console.log(\"The page is not in an iFrame\");\n withiniframe = false;\n }\n return withiniframe;\n }\n\n React.useEffect(() => {\n if (insideMSTeams !== undefined) {\n return;\n }\n try {\n microsoftTeams.app.initialize().then(() => {\n // console.log(\"Detected inside msteams in initialize function\")\n window.insideMSTeams = true\n setInsideMSTeams(true)\n microsoftTeams.app.getContext().then((context) => {\n window.msHost = context.app.host\n // console.log(\"Detected msHost = \", window.msHost);\n // console.log(\"Detected clientType = \", context.app.host.clientType);\n })\n }, () => {\n window.insideMSTeams = false\n setInsideMSTeams(false)\n })\n setTimeout(() => {\n if (window.insideMSTeams === undefined) {\n window.insideMSTeams = false\n setInsideMSTeams(false)\n }\n }, 3000)\n } catch {\n window.insideMSTeams = false\n setInsideMSTeams(false)\n }\n }, [insideMSTeams])\n\n function cookiesAccepted() {\n var d = new Date(0);\n // Six months per regulations\n d.setUTCMilliseconds(Date.now()+15780000000);\n setCookie('wbcAnalyticsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n setCookie('wbcAdsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n window.wbcAnalyticsCC = true\n window.wbcAdsCC = true\n }\n\n function onlyAnalyticsCookiesAccepted() {\n var d = new Date(0);\n // Six months per regulations\n d.setUTCMilliseconds(Date.now()+15780000000);\n setCookie('wbcAnalyticsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n setCookie('wbcAdsCC', false, { path: \"/\", expires: d, sameSite: \"strict\" })\n window.wbcAnalyticsCC = true\n window.wbcAdsCC = false\n }\n\n function cookiesPanelClosed() {\n var d = new Date(0);\n // Show again after 2 days\n d.setUTCMilliseconds(Date.now()+172800000);\n setCookie('wbcAnalyticsCC', false, { path: \"/\", expires: d })\n setCookie('wbcAdsCC', false, { path: \"/\", expires: d })\n window.wbcAnalyticsCC = false\n window.wbcAdsCC = false\n }\n\n React.useEffect(() => {\n\n },[cookies])\n\n return(\n
\n {temporaryBannerDisable === false && !iniFrame() && (insideMSTeams === false && !cookies.wbcAnalyticsCC &&\n
\n \n
\n
\n

We use cookies for application analytics and to display ads on the free plan.\n We do not sell your personal data.\n

\n Privacy Details\n
\n
\n \n
\n
\n \n
\n \n \n \n
\n
\n
\n
\n \n
\n
\n \"cookie\n

We use cookies for application analytics and to display ads on the free plan.\n We do not sell your personal data.\n Privacy Details\n

\n {/*
Privacy
*/}\n
\n
\n \n
\n
\n \n
\n {/*
\n \n
*/}\n \n \n \n
\n
\n
\n
\n
)}\n
\n )\n}","import * as mylocalStorage from \"./mylocalStorage\";\n\nconst GetLang = (string) => {\n var language = \"\"\n const lang = window.personalConfig;\n const studLang = window.boardConfig\n const parsedLang = lang && JSON.parse(lang);\n const parsedStudLang = studLang && JSON.parse(studLang);\n if (parsedStudLang && parsedStudLang.sessLang) {\n language = parsedStudLang.sessLang\n } else {\n if (parsedLang && parsedLang.language) {\n language = parsedLang.language\n }\n }\n let ll = mylocalStorage.getItem(\"language\")\n if (ll) language = ll\n if(!language || language === \"\")\n language = \"EN\"\n return language;\n};\n\nexport default GetLang;","\nimport * as Actions from \"./actions\"\nimport { v4 as uuid } from \"uuid\";\n// import { KEEPALIVE_TIMEOUT_SECONDS } from \"../../src/ibdata\"\nimport * as mylocalStorage from \"../mylocalStorage\";\nimport { setLangauge } from \"../Translator/Translations\";\n\nexport const KEEPALIVE_TIMEOUT_SECONDS = 60;\nconst initialState = {\n user: null,\n userProfile: undefined,\n tutorGroup: null,\n tutorUsertype: null,\n tutorTourDone: false,\n communityUser: null,\n authDialog: {\n open: false\n },\n countryCode: null,\n clientLoc: null,\n BoardConfig: {},\n participants: {},\n activeUsers: {},\n noUser: false,\n gvPage: 1,\n sessionDialog: {\n open: false\n },\n boardType: {\n name: \"\",\n single: false,\n },\n tab: {\n selected: 0,\n allTabs: [],\n },\n assistanceRequest: {\n studentAsked: false,\n pendingList: [],\n },\n boardChat: {\n started: false,\n messages: [],\n language: null\n },\n timer: {\n running: false,\n events: [],\n },\n boardLocked: {\n locked: false,\n events: [],\n },\n allEvents: {\n events: [],\n },\n pageLocked: {\n events: [],\n locked: false,\n myev: null,\n },\n showCase: {\n locked: false,\n dialog: false,\n events: [],\n },\n palletDrawer: {\n open: false,\n openCol: false,\n ref: null,\n },\n richText: {\n open: false,\n object: null,\n cb: null,\n loc: null,\n },\n pendingParticipants: [],\n avatarDialogOpen: false,\n diceShow: {\n teacher: {\n open: false,\n values: [],\n obj: null\n },\n board: {\n open: false,\n values: [],\n obj: null,\n }\n },\n followTeacher: {\n set: false,\n events: [],\n },\n clockDrift: 0,\n teacher: 0,\n hideNotification: false,\n syncDisabled: false,\n drawerWalker: {\n open: false,\n page: 1\n },\n gradingWalker: {\n open: false,\n page: 1\n },\n clickMode: {\n mode: \"none\",\n ctx: \"none\"\n },\n spinnerEvt: null,\n fDiceEvt: null,\n letItSnowEvt: null,\n personalConfig: {\n font: \"Roboto\",\n inkColor: true,\n dblClickDisable: false,\n language: mylocalStorage.getItem(\"language\")\n },\n gridBrowser: {\n open: false,\n pageNum: 1,\n realTime: true,\n groupGridOnly: false,\n search: \"\",\n showLabels: [],\n hideLabels: []\n },\n matrixGrid: {\n classroom: null,\n gridMap: {}\n },\n timeMachine: {\n open: false,\n realTime: false,\n selectedTime: null,\n slider: 50,\n },\n background: {\n color: null,\n image: null,\n pickerOpen: false,\n pickerImageOpen: false,\n notmine: false,\n },\n boardTools: {},\n formSubmit: {\n events: [],\n },\n engagementScore: {},\n engagementSticker: null,\n meetingToJoin: null,\n apiMode: null,\n adsEnable: false,\n keybMode: { enable: false, lastKey: \"\" },\n videoState: { mode: \"none\" },\n modeSelected: null,\n mobileModeSelected: { open: false },\n videoConfig: null,\n pendingSubscriptions: {},\n alertMessages: {\n open: false,\n messages: []\n },\n sharedScreen: null,\n boardRecording: null,\n classPoll: {\n open: false,\n messages: {}\n },\n embeddedMode: null,\n pageAdding: false,\n sharedScreenDialog: {\n open: false\n }\n}\n\nvar gParts = {};\nvar timedOutParticipants = {};\n\nfunction getIdToUse(data) {\n var idUse = data.id\n if (data.UserProfile) {\n idUse = data.UserProfile\n } else {\n if (data.content) {\n const jp = JSON.parse(data.content)\n if (jp.localID) {\n idUse = jp.localID\n }\n }\n }\n return idUse\n}\n\nfunction setLocal(user) {\n const authid = user ? user.username : null;\n var luid = mylocalStorage.getItem('mystoreID');\n if (!luid) {\n luid = uuid()\n mylocalStorage.setItem('mystoreID', luid)\n }\n if (authid && luid !== authid) {\n mylocalStorage.setItem('mystoreID', authid)\n mylocalStorage.setItem('backupLocalID', luid);\n luid = authid //from now on the authenicated user and the stored user will be same\n }\n return luid\n}\n\nfunction setLocalPaidPlan(userProfile) {\n if (userProfile) {\n if (!userProfile.paidPlan) {\n mylocalStorage.removeItem('paidPlan');\n } else {\n mylocalStorage.setItem('paidPlan', userProfile.paidPlan);\n }\n if (!userProfile.TenantID) {\n mylocalStorage.removeItem('tenant');\n } else {\n mylocalStorage.setItem('tenant', userProfile.TenantID);\n }\n } else {\n mylocalStorage.removeItem('paidPlan');\n\n }\n}\n\nfunction studentRaiseHand(set) {\n\n}\nfunction pendingRequests(old, req) {\n var arr = [...old.pendingList]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = {\n studentAsked: Boolean(arr.length > 0),\n pendingList: arr\n }\n return (ff)\n}\nfunction pendingChat(old, req, state) {\n var arr = [...old.messages]\n if (!req) return { started: false, messages: [] }\n var luid = mylocalStorage.getItem('mystoreID');\n if (state.teacher === 0 && req && req.Content && req.Content.filter) {\n //check for filter\n if (!req.Content.filter[luid]) {\n var ff = {\n started: Boolean(arr.length > 0),\n messages: arr\n }\n return (ff)\n }\n }\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\" && !req.deleted) arr.push(req)\n // //sort by ttime \n // arr.sort((a, b) => {\n // var dt1 = new Date(a.updatedAt)\n // var dt2 = new Date(b.updatedAt)\n // if (dt1 < dt2) return 1\n // return -1 \n // })\n // for (let i=0; i 0),\n messages: arr\n }\n return (ff)\n}\n\nfunction pendingFollow(state, req) {\n if (!req) {\n return {\n set: false,\n events: [],\n }\n }\n var arr = [...state.followTeacher.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = {\n set: Boolean(arr.length > 0),\n events: arr\n }\n return ({ ...ff })\n}\nfunction allEvents(state, req) {\n var arr = [...state.allEvents.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n arr.push(req)\n var ff = { events: arr }\n return (ff)\n}\nfunction pendingLock(state, req) {\n if (!req) {\n return {\n locked: false,\n events: [],\n }\n }\n var arr = [...state.boardLocked.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = {\n locked: Boolean(arr.length > 0),\n events: arr\n }\n return (ff)\n}\nfunction pendingPageLock(state, req) {\n if (!req) {\n return {\n events: [],\n }\n }\n var arr = [...state.pageLocked.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = { events: arr }\n var rt = Actions.getPageLock(ff)\n ff['locked'] = rt.locked\n ff['myev'] = rt.ev\n return (ff)\n}\nfunction pendingShowCase(state, req) {\n if (!req) {\n return {\n locked: false,\n events: [],\n }\n }\n var arr = [...state.showCase.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n\n var ff = {\n locked: Boolean(arr.length > 0),\n dialog: Boolean(arr.length > 1) || (Boolean(arr.length > 0) && state.BoardConfig.readOnlyShowCase),\n events: arr\n }\n return (ff)\n}\nfunction isObject(object) {\n return object != null && typeof object === 'object';\n}\n\nfunction compareParticipant(object1, object2, partId) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n const curTime = new Date().getTime();\n let timedOut = 0;\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (let key of keys1) {\n let obj1 = isObject(object1[key]);\n let obj2 = isObject(object2[key]);\n\n if (obj1 && obj2) {\n continue;\n } else if ((obj1 && !obj2) || (obj2 && !obj1)) {\n return false;\n }\n\n if (key === 'updatedAt') {\n let updTime = new Date(object2[key]);\n /**\n * Because the updates can happen at different times between different\n * participants, we need to check if an update was not received for\n * 2 timeout intervals to truly mark a participant as down or else\n * the state could keep fluctuating between timedOut = 0 and timedOut = 1\n */\n if (((curTime - updTime) / 1000) > (KEEPALIVE_TIMEOUT_SECONDS * 2)) {\n timedOut = 1;\n }\n\n if (!(timedOutParticipants[partId])) {\n timedOutParticipants[partId] = 0;\n }\n\n if (timedOutParticipants[partId] !== timedOut) {\n timedOutParticipants[partId] = timedOut;\n return false;\n }\n } else if (object1[key] !== object2[key]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction checkIfPartsUpdateNeeded(newParts) {\n const keys1 = Object.keys(gParts);\n const keys2 = Object.keys(newParts);\n\n if (keys1.length !== keys2.length) {\n return true;\n }\n\n for (let key of keys1) {\n if (newParts[key] === undefined) {\n return true;\n }\n\n if (!compareParticipant(gParts[key],\n newParts[key], key)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction removeMSTeamsEmail(em) {\n let email = em\n if (em && email.includes(\"@microsoftteams\")) {\n email = email.split(\"@\")[0]\n email = email.replace(\"__\", \"@\")\n }\n return email\n}\nfunction pendingTimer(state, req) {\n if (!req) {\n return {\n running: false,\n events: [],\n }\n }\n var arr = [...state.timer.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = {\n running: Boolean(arr.length > 0),\n events: arr\n }\n return (ff)\n}\nfunction processDice(state, e) {\n var open = true\n if (e.State === \"Done\") open = false\n var classDice = \"board\"\n if (e.teacherDice) {\n classDice = \"teacher\"\n }\n if (!e.Content.rollerName) e.Content.rollerName = \"\"\n var inval = e.Content.value\n var inval2 = Array.isArray(inval) ? inval : null\n var setVal = {\n ...state.diceShow,\n [classDice]: {\n open: open,\n obj: e,\n value: inval2,\n rollerName: e.Content.rollerName\n }\n }\n return (setVal)\n}\nfunction processSpinner(spinnerEvt, e, clockDrift) {\n const myTime = new Date()\n const evtTime = new Date(e.createdAt)\n // console.log(\"My time = \", myTime)\n // console.log(\"evtTime = \", evtTime)\n // console.log(\"Drift = \", clockDrift)\n // console.log(\"Difference = \", Math.abs(myTime - evtTime - clockDrift*1000))\n if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n // Too much difference in time, ignore event\n // console.log(\"Too much time difference in spin event, ignoring\")\n return spinnerEvt;\n }\n return e;\n}\nfunction processFdice(fDiceEvt, e, clockDrift) {\n const myTime = new Date()\n const evtTime = new Date(e.createdAt)\n // console.log(\"My time = \", myTime)\n // console.log(\"evtTime = \", evtTime)\n // console.log(\"Drift = \", clockDrift)\n // console.log(\"Difference = \", Math.abs(myTime - evtTime - clockDrift*1000))\n if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n // Too much difference in time, ignore event\n // console.log(\"Too much time difference in spin event, ignoring\")\n return fDiceEvt;\n }\n return e;\n}\nfunction processLetItSnow(letItSnowEvt, e, clockDrift) {\n const myTime = new Date()\n const evtTime = new Date(e.createdAt)\n if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n return letItSnowEvt;\n }\n return e;\n}\nfunction formSubmitprocess(state, req) {\n var arr = [...state.formSubmit.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n arr.push(req)\n var ff = { events: arr }\n return (ff)\n}\nfunction processScore(state, dataIn) {\n if (!dataIn) {\n return {}\n }\n for (let i = 0; i < dataIn.length; i++) {\n var data = dataIn[i]\n\n var eng = state.engagementScore\n var max = 1\n if (!eng['all']) eng['all'] = []\n eng['all'].push(data)\n\n if (eng['max']) {\n max = eng[\"max\"]\n }\n var luid = data.luid\n var scoreData = JSON.parse(data.Content)\n if (scoreData && scoreData.engagementScore) {\n var s = scoreData.engagementScore\n var calc = s.calculated;\n if (calc > max) {\n max = calc\n }\n if (eng[luid]) {\n var trendown = false\n let c = eng[luid].current\n if (c > calc) trendown = true\n var per = 100 * calc / max\n var peak = per > eng[luid].peak ? per : eng[luid].peak\n var samp = eng[luid].samples + 1\n let avg = (((samp - 1) * eng[luid].avg) + per) / samp;\n\n eng[luid] = { current: calc, trenddown: trendown, prev: c, percent: per, peak: peak, samples: samp, avg: avg }\n } else {\n per = 100 * calc / max\n eng[luid] = { current: calc, trenddown: false, prev: 0, samples: 1, peak: per, percent: per, avg: per }\n }\n if (calc >= max) {\n eng['max'] = calc\n var k = Object.keys(eng)\n for (let i = 0; i < k.length; i++) {\n let kk = k[i]\n if (kk !== \"max\" && kk !== \"all\") {\n var v = eng[kk]\n v.percent = (100 * v.current) / max\n if (v.percent > 100) v.percent = 100\n }\n }\n }\n }\n\n }\n return { ...eng }\n}\n\nfunction checkAds(profile, boardType, st) {\n if (st.apiMode && st.apiMode.obj && st.apiMode.obj.content && st.apiMode.obj.content.includes(\"noAds\")) {\n return false\n }\n if (profile === undefined) return true\n if (boardType && boardType.name && boardType.name.length > 0) {\n var isFree = false\n var isStudent = true\n var forTest = false\n if(boardType && boardType.session && boardType.session.TutorClass) return false\n if (!profile || !profile.paidPlan || profile.paidPlan === \"educator-free\") isFree = true\n if (boardType.name.includes(\"Instructor\")) isStudent = false\n if (boardType.name.includes(\"Single\")) isStudent = false\n // if (profile && profile.email && profile.email.includes(\"epiphani\")) forTest = true\n if (isFree && !isStudent) {\n // check creator of the board too if they have a paid plan\n return true\n }\n if (forTest) {\n return true\n }\n }\n return false\n}\n\nfunction processPoll(d, state) {\n let cp = state.classPoll.messages\n if (!(d.Content.question in cp)) {\n cp[d.Content.question] = {}\n }\n if (d.State !== \"DONE\") {\n cp[d.Content.question][d.Content.luid] = d\n } else {\n delete cp[d.Content.question][d.Content.luid]\n }\n let open = false;\n Object.values(cp).forEach(q =>(\n Object.values(q).forEach(d => {\n if (d) open = true\n })\n ))\n let ns = {\n ...state,\n classPoll: {\n open: open,\n messages: { ...cp }\n }\n }\n return ns\n}\n\nconst mainReducer = function (state = initialState, action) {\n switch (action.type) {\n case Actions.SET_SHARED_SCREEN_DIALOG: {\n return {\n ...state,\n sharedScreenDialog: action.data\n }\n } \n case Actions.SET_EMBEDDED_MODE: {\n return {\n ...state,\n embeddedMode: action.data\n }\n }\n case Actions.ADD_CLASSPOLL_EVENT: {\n if (!action.data) {\n return {\n ...state,\n classPoll: {\n open: false,\n messages: {}\n }\n }\n }\n return processPoll(action.data, state)\n }\n case Actions.SET_PAGE_ADDING: {\n return {\n ...state,\n pageAdding: action.data\n }\n }\n case Actions.SET_BOARD_RECORDING: {\n return {\n ...state,\n boardRecording: action.data\n }\n }\n case Actions.SET_SHARED_SCREEN: {\n return {\n ...state,\n sharedScreen: action.data\n }\n }\n case Actions.SET_ALERT_MESSAGES: {\n let ar = []\n if (action.data) {\n ar = [...state.alertMessages.messages, action.data]\n }\n return {\n ...state,\n alertMessages: { messages: ar, open: ar.length > 0 }\n }\n }\n case Actions.PENDING_SUBSCRIPTIONS: {\n let d = action.data\n return {\n ...state,\n pendingSubscriptions: {\n ...state.pendingSubscriptions,\n [d.type]: d.value\n }\n }\n }\n case Actions.POP_ALERT_MESSAGES: {\n let ar = state.alertMessages.messages\n ar.shift()\n return {\n ...state,\n alertMessages: { messages: ar, open: ar.length > 0 }\n }\n }\n case Actions.SET_VIDEO_CONFIG: {\n return {\n ...state,\n videoConfig: action.data\n }\n }\n case Actions.SET_MODE: {\n return {\n ...state,\n modeSelected: action.data\n }\n }\n case Actions.SET_MOBILE_MODE: {\n const appMode = mylocalStorage.getItem('appMode');\n return {\n ...state,\n mobileModeSelected: {\n ...action.data,\n appMode: appMode\n }\n }\n }\n case Actions.SET_VIDEO_STATE: {\n return {\n ...state,\n videoState: action.data\n }\n }\n case Actions.SET_KEYB_MODE: {\n return {\n ...state,\n keybMode: action.data\n }\n }\n case Actions.SET_ENGAGEMENT_STICKER: {\n return {\n ...state,\n engagementSticker: action.data\n }\n }\n case Actions.SET_API_MODE: {\n return {\n ...state,\n apiMode: action.data\n }\n }\n case Actions.MEETING_TO_JOIN: {\n return {\n ...state,\n meetingToJoin: action.data\n }\n }\n case Actions.UPDATE_ENGAGEMENT_SCORE: {\n return {\n ...state,\n engagementScore: processScore(state, action.data)\n }\n }\n case Actions.FORM_SUBMIT: {\n return {\n ...state,\n formSubmit: formSubmitprocess(state, action.data)\n }\n }\n case Actions.SET_BOARD_TOOLS: {\n let ad = action.data\n if (Object.keys(ad).length === 0 && Object.keys(state.boardTools).length === 0) {\n return state\n }\n return {\n ...state,\n boardTools: action.data\n }\n }\n case Actions.SET_PERSONAL_CONFIG: {\n const pc = action.data\n if (pc.font) {\n mylocalStorage.setItem(\"font\", pc.font)\n }\n if (pc.language) {\n mylocalStorage.setItem(\"language\", pc.language)\n setLangauge()\n }\n if (!pc.inkColor) {\n mylocalStorage.setItem(\"inkCopy\", \"yes\")\n } else {\n mylocalStorage.removeItem(\"inkCopy\")\n }\n if (pc.dblClickDisable) {\n mylocalStorage.setItem(\"dblClickDisable\", \"yes\")\n } else {\n mylocalStorage.removeItem(\"dblClickDisable\")\n }\n // window.personalConfig = JSON.stringify(action.data);\n return {\n ...state,\n personalConfig: action.data\n }\n }\n case Actions.SET_BACK_GROUND: {\n var val = action.data ? action.data : {\n color: null,\n pickerOpen: false,\n pickerImageOpen: false,\n notmine: false,\n image: null\n }\n if (val.color === state.background.color &&\n val.pickerImageOpen === state.background.pickerImageOpen &&\n val.pickerOpen === state.background.pickerOpen &&\n val.image === state.background.image &&\n val.notmine === state.background.notmine) {\n return state\n }\n return {\n ...state,\n background: val\n }\n }\n case Actions.SET_TIME_MACHINE: {\n return {\n ...state,\n timeMachine: action.data\n }\n }\n case Actions.SET_MATRIX_GRID: {\n return {\n ...state,\n matrixGrid: action.data\n }\n }\n case Actions.SET_GRID_BROWSER: {\n return {\n ...state,\n gridBrowser: action.data\n }\n }\n case Actions.SET_CLICK_MODE: {\n return {\n ...state,\n clickMode: action.data\n }\n }\n case Actions.SET_DRAWER_WALKER: {\n return {\n ...state,\n drawerWalker: action.data\n }\n }\n case Actions.SET_GRADING_WALKER: {\n return {\n ...state,\n gradingWalker: action.data\n }\n }\n case Actions.SET_SYNC_DISABLED: {\n return {\n ...state,\n syncDisabled: action.data\n }\n }\n case Actions.SET_NOTIFICATION: {\n return {\n ...state,\n hideNotification: action.data\n }\n }\n case Actions.SET_DICE: {\n return {\n ...state,\n diceShow: processDice(state, action.data)\n }\n }\n case Actions.SET_CLOCK_DRIFT: {\n return {\n ...state,\n clockDrift: action.data\n }\n }\n case Actions.SET_PALETTE: {\n var pp = action.data\n if (pp.open || pp.openCol) {\n var rr = {}\n rr.open = pp.open\n rr.openCol = pp.openCol\n mylocalStorage.setItem(\"palette\", JSON.stringify(rr))\n } else {\n mylocalStorage.removeItem(\"palette\")\n }\n return {\n ...state,\n palletDrawer: action.data\n }\n }\n case Actions.TIMER_EVENT: {\n return {\n ...state,\n timer: pendingTimer(state, action.data)\n }\n }\n case Actions.SHOWCASE: {\n return {\n ...state,\n showCase: pendingShowCase(state, action.data)\n }\n }\n case Actions.PAGE_LOCK: {\n return {\n ...state,\n pageLocked: pendingPageLock(state, action.data)\n }\n }\n case Actions.BOARD_LOCK: {\n return {\n ...state,\n boardLocked: pendingLock(state, action.data)\n }\n }\n case Actions.ALL_EVENTS: {\n return {\n ...state,\n allEvents: allEvents(state, action.data)\n }\n }\n case Actions.SET_FOLLOW: {\n return {\n ...state,\n followTeacher: pendingFollow(state, action.data)\n }\n }\n case Actions.SET_RICH_TEXT: {\n return {\n ...state,\n richText: action.data\n }\n }\n case Actions.CHAT_MSG: {\n var ff = pendingChat(state.boardChat, action.data, state)\n return {\n ...state,\n boardChat: {\n ...state.boardChat,\n started: ff.started,\n messages: ff.messages\n }\n }\n }\n\n case Actions.RAISE_HAND: {\n return {\n ...state,\n assistanceRequest: {\n studentAsked: studentRaiseHand(action.data),\n pendingList: []\n }\n }\n }\n case Actions.ASSISTANCE_REQUEST: {\n let ff = pendingRequests(state.assistanceRequest, action.data)\n return {\n ...state,\n assistanceRequest: {\n studentAsked: ff.studentAsked,\n pendingList: ff.pendingList\n }\n }\n }\n case Actions.SET_GVPAGE: {\n return {\n ...state,\n gvPage: action.data\n }\n }\n case Actions.SET_COUNTRY: {\n return {\n ...state,\n countryCode: action.data\n }\n }\n case Actions.SET_CLIENT_LOC: {\n return {\n ...state,\n clientLoc: action.data\n }\n }\n case Actions.SET_TEACHER: {\n return {\n ...state,\n teacher: action.data\n }\n }\n case Actions.SET_BOARD_TYPE: {\n return {\n ...state,\n adsEnable: checkAds(state.userProfile, action.data, state),\n boardType: action.data\n }\n }\n case Actions.SET_TAB: {\n return {\n ...state,\n tab: action.data\n }\n }\n case Actions.SET_NOUSER: {\n return {\n ...state,\n noUser: true\n }\n }\n case Actions.SET_USER: {\n setLocal(action.data)\n return {\n ...state,\n user: action.data\n }\n }\n case Actions.SET_EXP_REMIND: {\n return {\n ...state,\n remind: action.data\n }\n }\n case Actions.SET_USER_PROFILE: {\n setLocalPaidPlan(action.data);\n return {\n ...state,\n adsEnable: checkAds(action.data, state.boardType, state),\n userProfile: action.data\n }\n }\n\n case Actions.SET_TUTOR_GROUP: {\n return {\n ...state,\n tutorGroup: action.data\n }\n }\n\n case Actions.SET_TUTOR_USERTYPE: {\n return {\n ...state,\n tutorUsertype: action.data\n }\n }\n case Actions.SET_TUTOR_TOURDONE: {\n return {\n ...state,\n tutorTourDone: action.data\n }\n }\n case Actions.SET_SESSION_DIALOG: {\n return {\n ...state,\n sessionDialog: action.data\n }\n }\n case Actions.OPEN_AUTH_DIALOG: {\n return {\n ...state,\n authDialog: action.data\n }\n }\n case Actions.SET_CONFIG: {\n return {\n ...state,\n BoardConfig: { ...action.data }\n }\n }\n case Actions.ADD_ACTIVE: {\n let pp = state.activeUsers\n const data = action.data\n pp[data.id] = data\n return {\n ...state,\n activeUsers: { ...pp }\n }\n }\n case Actions.DELETE_ACTIVE: {\n let pp = state.activeUsers\n const data = action.data\n delete pp[data.id]\n return {\n ...state,\n activeUsers: { ...pp }\n }\n }\n case Actions.ADD_PARTICIPANT: {\n const data = action.data\n if (data.content && data.content.length > 0 && data.content.includes(\"microsoftteams\")) {\n try {\n let jj = JSON.parse(data.content)\n if (jj.email) {\n jj.email = removeMSTeamsEmail(jj.email)\n }\n data.email = removeMSTeamsEmail(data.email)\n data.content = JSON.stringify(jj)\n } catch {\n\n }\n }\n var idUse = getIdToUse(data)\n\n if (state.avatarDialogOpen) {\n let ppp = state.pendingParticipants;\n ppp.push({ oper: \"ADD\", data: data });\n\n return {\n ...state,\n pendingParticipants: [...ppp]\n }\n }\n\n let pp = state.participants\n pp[idUse] = data\n if (checkIfPartsUpdateNeeded(pp)) {\n gParts = pp;\n } else {\n return state;\n }\n return {\n ...state,\n participants: { ...pp }\n }\n }\n case Actions.REMOVE_PARTICIPANT: {\n const data = action.data\n let idUse = getIdToUse(data)\n\n if (state.avatarDialogOpen) {\n let ppp = state.pendingParticipants;\n ppp.push({ oper: \"REMOVE\", data: data });\n\n return {\n ...state,\n pendingParticipants: [...ppp]\n }\n }\n\n let pp = state.participants\n delete pp[idUse]\n gParts = pp;\n\n if (idUse in timedOutParticipants) {\n delete timedOutParticipants[idUse];\n }\n\n return {\n ...state,\n participants: { ...pp }\n }\n }\n case Actions.FLUSH_PARTICIPANT: {\n gParts = {};\n timedOutParticipants = {};\n\n return {\n ...state,\n pendingParticipants: [],\n participants: {}\n }\n }\n case Actions.AVATAR_DIALOG_OPEN: {\n return {\n ...state,\n avatarDialogOpen: action.data\n }\n }\n case Actions.PROCESS_PENDING_PARTICIPANTS: {\n let ppp = state.pendingParticipants;\n let pp = state.participants;\n\n for (let idx in ppp) {\n let item = ppp[idx];\n\n // Defensive check to prevent crash due to data being undefined\n if (!(item && item.data)) continue\n\n let idUse = getIdToUse(item.data)\n\n if (item.oper === \"ADD\") {\n pp[idUse] = item.data;\n } else {\n delete pp[idUse];\n\n if (idUse in timedOutParticipants) {\n delete timedOutParticipants[idUse];\n }\n\n }\n }\n\n if (checkIfPartsUpdateNeeded(pp)) {\n gParts = pp;\n }\n return {\n ...state,\n pendingParticipants: [],\n participants: { ...pp }\n }\n }\n case Actions.SET_COMMUNITYUSER: {\n setLocal(action.data)\n return {\n ...state,\n communityUser: action.data\n }\n }\n case Actions.SET_SPINNER_EVENT: {\n return {\n ...state,\n spinnerEvt: processSpinner(state.spinnerEvt, action.data, state.clockDrift)\n }\n }\n case Actions.SET_LETITSNOW_EVENT: {\n return {\n ...state,\n letItSnowEvt: processLetItSnow(state.letItSnowEvt, action.data, state.clockDrift)\n }\n }\n case Actions.SET_FDICE_EVENT: {\n return {\n ...state,\n fdiceEvt: processFdice(state.fDiceEvt, action.data, state.clockDrift)\n }\n }\n default:\n return state;\n }\n}\n\nexport default mainReducer\n","import React, { Suspense } from 'react';\nimport { lazyWithRetry } from './lazyWithRetry';\nimport { ThemeProvider } from '@material-ui/core/styles'\nimport { Provider } from 'react-redux'\nimport { createMuiTheme } from '@material-ui/core/styles';\nimport purple from '@material-ui/core/colors/purple';\nimport { Route, BrowserRouter as Router, Switch } from 'react-router-dom';\nimport { useCookies } from 'react-cookie';\nimport { CookiesProvider } from 'react-cookie';\nimport CookieConsent from './CookieConsent';\n\nimport { createStore } from 'redux';\nimport reducer from \"./store/reducer\"\nimport * as WBCReactGA from './WBCReactGA';\nconst HomePage = lazyWithRetry(() => import(/* webpackPrefetch: true, webpackChunkName: \"homepage\" */'./Home/HomePage'));\nconst App = lazyWithRetry(() => import(/* webpackPrefetch: true, webpackChunkName: \"app\" */'./App'));\nconst store = createStore(reducer,\n window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())\n// WBCReactGA.initialize('UA-169613319-1', { debug: false });\n\nconst theme = createMuiTheme({\n palette: {\n primary: purple,\n secondary: {\n main: \"#1CB1C4\"\n },\n },\n status: {\n danger: 'orange',\n },\n typography: {\n // In Chinese and Japanese the characters are usually larger,\n // so a smaller fontsize may be appropriate.\n fontSize: 7,\n },\n overrides: {\n MuiCssBaseline: {\n '@global': {\n '*': {\n 'scrollbar-width': 'thin',\n },\n '*::-webkit-scrollbar': {\n width: '6px',\n height: '6px',\n },\n '*::-webkit-scrollbar-track': {\n background: 'white'\n },\n '*::-webkit-scrollbar-thumb': {\n backgroundColor: 'grey',\n borderRadius: '2px',\n },\n }\n }\n }\n});\n\nexport default function AppOuter(props) {\n const [cookies] = useCookies(['wbcAnalyticsCC', 'wbcAdsCC']);\n\n React.useEffect(() => {\n if (cookies.wbcAnalyticsCC && cookies.wbcAnalyticsCC === \"true\") {\n window.wbcAnalyticsCC = true;\n WBCReactGA.initializeGoogleTagManager();\n WBCReactGA.initializeClarityTagManager();\n WBCReactGA.initializeGA();\n }\n }, [cookies])\n\n return (\n
\n \n \n \n \n Loading...
}>\n \n \n \n \n \n \n { console.log(\"cookies.wbcAnalyticsCC = \", cookies)}\n {!cookies.wbcAnalyticsCC && }\n \n \n \n \n\n );\n}\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://bit.ly/CRA-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://bit.ly/CRA-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 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://bit.ly/CRA-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 React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './AppOuter';\nimport * as serviceWorker from './serviceWorker';\nimport './styles/iosStyles.css'\n\nrequire('./styles/indexBasic.scss')\n\n//window.LOG_LEVEL = 'DEBUG';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export const SET_USER = \"[MAIN] __SET_USER__ \"\nexport const SET_EXP_REMIND = \"[MAIN] __SET_EXP_REMIND \"\nexport const SET_USER_PROFILE = \"[MAIN] SET_USER_PROFILE\"\nexport const SET_TUTOR_GROUP = \"[MAIN] SET_TUTOR_GROUP\"\nexport const SET_TUTOR_USERTYPE = \"[MAIN] SET_TUTOR_USERTYPE\"\nexport const SET_TUTOR_TOURDONE = \"[MAIN] SET_TUTOR_TOURDONE\"\nexport const OPEN_AUTH_DIALOG = \"[MAIN] _OPEN_AUTH_DIALOG \"\nexport const SET_CONFIG= \"[MAIN] SET_CONFIG\"\nexport const ADD_PARTICIPANT= \"[MAIN] ADD_PARTICIPANT\"\nexport const REMOVE_PARTICIPANT= \"[MAIN] REMOVE_PARTICIPANT\"\nexport const FLUSH_PARTICIPANT= \"[MAIN] FLUSH_PARTICIPANT\"\nexport const PROCESS_PENDING_PARTICIPANTS = \"[MAIN] PROCESS_PENDING_PARTICIPANTS\"\nexport const AVATAR_DIALOG_OPEN = \"[MAIN] AVATAR_DIALOG_OPEN\"\nexport const ADD_ACTIVE= \"[MAIN] ADD_ACTIVE\"\nexport const DELETE_ACTIVE = \"[MAIN] DELETE_ACTIVE\"\nexport const SET_NOUSER = \"[MAIN] SET_NO_USER\"\nexport const SET_GVPAGE = \"[MAIN] SET_GVPAGE\"\nexport const SET_SESSION_DIALOG = \"[MAIN] SET_SESSION_DIALOG\"\nexport const SET_BOARD_TYPE = \"[MAIN] SET_BOARD_TYPE\"\nexport const SET_TAB = \"[MAIN] SET_TAB\"\nexport const SET_TEACHER = \"[MAIN] SET_TEACHER\"\nexport const SET_COUNTRY= \"[MAIN] SET_COUNTRY\"\nexport const SET_CLIENT_LOC= \"[MAIN] SET_CLIENT_LOC\"\nexport const RAISE_HAND= \"[MAIN] RAISE_HAND\"\nexport const ASSISTANCE_REQUEST= \"[MAIN] ASSISTANCE_REQUEST\"\nexport const CHAT_MSG= \"[MAIN] CHAT_MSG\"\nexport const TIMER_EVENT= \"[MAIN] TIMER_EVENT\"\nexport const BOARD_LOCK= \"[MAIN] BOARD_LOCK\"\nexport const PAGE_LOCK= \"[MAIN] PAGE_LOCK\"\nexport const SET_PALETTE= \"[MAIN] SET_PALETTE\"\nexport const SHOWCASE= \"[MAIN] SHOWCASE\"\nexport const SET_RICH_TEXT= \"[MAIN] SET_RICH_TEXT\"\nexport const SET_DICE= \"[MAIN] SET_DICE\"\nexport const SET_FOLLOW= \"[MAIN] SET_FOLLOW\"\nexport const SET_CLOCK_DRIFT= \"[MAIN] SET_CLOCK_DRIFT\"\nexport const SET_NOTIFICATION= \"[MAIN] SET_NOTIFICATION\"\nexport const SET_SYNC_DISABLED= \"[MAIN] SET_SYNC_DISABLED\"\nexport const SET_DRAWER_WALKER= \"[MAIN] SET_DRAWER_WALKER\"\nexport const SET_GRADING_WALKER= \"[MAIN] SET_GRADING_WALKER\"\nexport const SET_CLICK_MODE= \"[MAIN] SET_CLICK_MODE\"\nexport const SET_COMMUNITYUSER = \"[MAIN] SET_COMMUNITYUSER\"\nexport const SET_SPINNER_EVENT = \"[MAIN] SET_SPINNER_EVENT\"\nexport const SET_PERSONAL_CONFIG = \"[MAIN] SET_PERSONAL_CONFIG\"\nexport const SET_GRID_BROWSER = \"[MAIN] SET_GRID_BROWSER\"\nexport const SET_MATRIX_GRID = \"[MAIN] SET_MATRIX_GRID\"\nexport const SET_LETITSNOW_EVENT = \"[MAIN] SET_LETITSNOW_EVENT\"\nexport const SET_TIME_MACHINE = \"[MAIN] SET_TIME_MACHINE\"\nexport const SET_BACK_GROUND = \"[MAIN] SET_BACK_GROUND\"\nexport const SET_BOARD_TOOLS = \"[MAIN] SET_BOARD_TOOLS\"\nexport const SET_FDICE_EVENT = \"[MAIN] SET_FDICE_EVENT\"\nexport const ALL_EVENTS = \"[MAIN] ALL_EVENTS\"\nexport const FORM_SUBMIT = \"[MAIN] FORM_SUBMIT\"\nexport const UPDATE_ENGAGEMENT_SCORE = \"[MAIN] UPDATE_ENGAGEMENT_SCORE\"\nexport const MEETING_TO_JOIN = \"[MAIN] MEETING_TO_JOIN\"\nexport const SET_API_MODE = \"[MAIN] SET_API_MODE\"\nexport const SET_ENGAGEMENT_STICKER = \"[MAIN] SET_ENGAGEMENT_STICKER\"\nexport const SET_KEYB_MODE = \"[MAIN] SET_KEYB_MODE\"\nexport const SET_VIDEO_STATE = \"[MAIN] SET_VIDEO_STATE\"\nexport const SET_MODE = \"[MAIN] SET_MODE\"\nexport const SET_MOBILE_MODE = \"[MAIN] SET_MOBILE_MODE\"\nexport const SET_ALERT_MESSAGES = \"[MAIN] SET_ALERT_MESSAGES\"\nexport const POP_ALERT_MESSAGES = \"[MAIN] POP_ALERT_MESSAGES\"\nexport const SET_VIDEO_CONFIG = \"[MAIN] SET_VIDEO_CONFIG\"\nexport const PENDING_SUBSCRIPTIONS = \"[MAIN] PENDING_SUBSCRIPTIONS\"\nexport const SET_SHARED_SCREEN = \"[MAIN] SET_SHARED_SCREEN\"\nexport const SET_BOARD_RECORDING = \"[MAIN] SET_BOARD_RECORDING\"\nexport const ADD_CLASSPOLL_EVENT = \"[MAIN] ADD_CLASSPOLL_EVENT\"\nexport const SET_EMBEDDED_MODE = \"[MAIN] SET_EMBEDDED_MODE\"\nexport const SET_PAGE_ADDING = \"[MAIN] SET_PAGE_ADDING\"\nexport const SET_SHARED_SCREEN_DIALOG = \"[MAIN] SET_SHARED_SCREEN_DIALOG\"\n\nexport function setSharedScreenDialog(data) {\n return {\n type: SET_SHARED_SCREEN_DIALOG,\n data\n }\n}\nexport function setEmbeddedMode(data) {\n return {\n type: SET_EMBEDDED_MODE,\n data\n }\n}\nexport function addClassPollEvent(data) {\n return {\n type: ADD_CLASSPOLL_EVENT,\n data\n }\n}\n\nexport function setPageAdding(data) {\n return {\n type: SET_PAGE_ADDING,\n data\n }\n}\nexport function setBoardRecording(data) {\n return {\n type: SET_BOARD_RECORDING,\n data\n }\n}\nexport function setSharedScreen(data) {\n return {\n type: SET_SHARED_SCREEN,\n data\n }\n}\nexport function setPendingSubsciptions(data) {\n return {\n type: PENDING_SUBSCRIPTIONS,\n data\n }\n}\nexport function setVideoConfig(data) {\n return {\n type: SET_VIDEO_CONFIG,\n data\n }\n}\nexport function setAlertMessages(data) {\n return {\n type: SET_ALERT_MESSAGES,\n data\n }\n}\nexport function popAlertMessage() {\n let data = null\n return {\n type: POP_ALERT_MESSAGES,\n data\n }\n}\nexport function setMobileMode(data) {\n return {\n type: SET_MOBILE_MODE,\n data\n }\n}\nexport function setMode(data) {\n return {\n type: SET_MODE,\n data\n }\n}\nexport function setVideoState(data) {\n return {\n type: SET_VIDEO_STATE,\n data\n }\n}\nexport function setKeyBMode(data) {\n return {\n type: SET_KEYB_MODE,\n data\n }\n}\n\nexport function disableKeyBMode() {\n let data = {enable: false, lastKey: \"\"}\n return {\n type: SET_KEYB_MODE,\n data\n }\n}\n\nexport function setEngagementSticker(data) {\n return {\n type: SET_ENGAGEMENT_STICKER,\n data\n }\n}\nexport function setApiMode(data) {\n return {\n type: SET_API_MODE,\n data\n }\n}\nexport function meetingToJoin(data) {\n return {\n type: MEETING_TO_JOIN,\n data\n }\n}\nexport function updateEngagementScore(data) {\n return {\n type: UPDATE_ENGAGEMENT_SCORE,\n data\n }\n}\nexport function addFormSubmit(data) {\n return {\n type: FORM_SUBMIT,\n data\n }\n}\nexport function addAllEvents(data) {\n return {\n type: ALL_EVENTS,\n data\n }\n}\nexport function setBoardTools(data) {\n return {\n type: SET_BOARD_TOOLS,\n data\n }\n}\n\nexport function setBackGround(data) {\n return {\n type: SET_BACK_GROUND,\n data\n }\n}\n\nexport function setTimeMachine(data) {\n return {\n type: SET_TIME_MACHINE,\n data\n }\n}\nexport function setMatrixGrid(data) {\n return {\n type: SET_MATRIX_GRID,\n data\n }\n}\nexport function setGridBrowser(data) {\n return {\n type: SET_GRID_BROWSER,\n data\n }\n}\nexport function setClickMode(data) {\n return {\n type: SET_CLICK_MODE,\n data\n }\n}\n\nexport function setPersonalConfig(data) {\n return {\n type: SET_PERSONAL_CONFIG,\n data\n }\n}\n\nexport function setDrawerWalker(data) {\n return {\n type: SET_DRAWER_WALKER,\n data\n }\n}\n\nexport function setGradingWalker(data) {\n return {\n type: SET_GRADING_WALKER,\n data\n }\n}\n\nexport function setSyncDisabled(data) {\n return {\n type: SET_SYNC_DISABLED,\n data\n }\n}\nexport function setNotification(data) {\n return {\n type: SET_NOTIFICATION,\n data\n }\n}\nexport function setDrift(data) {\n return {\n type: SET_CLOCK_DRIFT,\n data\n }\n}\nexport function setFollow(data) {\n return {\n type: SET_FOLLOW,\n data\n }\n}\nexport function showDice(data) {\n return {\n type: SET_DICE,\n data\n }\n}\nexport function setRichText(data) {\n return {\n type: SET_RICH_TEXT,\n data\n }\n}\nexport function setShowcase(data) {\n return {\n type: SHOWCASE, \n data\n } \n}\nexport function setPalette(data) {\n return {\n type: SET_PALETTE, \n data\n } \n}\nexport function setBoardLock(data) {\n return {\n type: BOARD_LOCK, \n data\n } \n}\nexport function setPageLock(data) {\n return {\n type: PAGE_LOCK, \n data\n } \n}\nexport function setTimerEvent(data) {\n return {\n type: TIMER_EVENT, \n data\n } \n}\nexport function setRaiseHand(data) {\n return {\n type: RAISE_HAND, \n data\n } \n}\nexport function setChatMsg(data) {\n return {\n type: CHAT_MSG, \n data\n } \n\n}\nexport function assistanceRequest(data) {\n return {\n type: ASSISTANCE_REQUEST, \n data\n } \n}\n\nexport function setTeacher(data) {\n return {\n type: SET_TEACHER, \n data\n } \n}\n\nexport function setCountry(data) {\n return {\n type: SET_COUNTRY, \n data\n } \n}\n\nexport function setClientLoc(data) {\n return {\n type: SET_CLIENT_LOC,\n data\n }\n}\n\nexport function setBoardType(data) {\n return {\n type: SET_BOARD_TYPE, \n data\n } \n}\n\nexport function setTab(data) {\n return {\n type: SET_TAB, \n data\n } \n}\n\nexport function setSessionDialog(data) {\n return {\n type: SET_SESSION_DIALOG, \n data\n }\n}\n\nexport function setGVPage(data) {\n return {\n type: SET_GVPAGE,\n data\n }\n}\n\nexport function setNoUser() {\n return {\n type: SET_NOUSER,\n }\n}\n\nexport function setUser(data) {\n return {\n type: SET_USER,\n data\n }\n}\n\nexport function setNotificationRemind(data) {\n return {\n type: SET_EXP_REMIND,\n data\n }\n}\n\nexport function setUserProfile(data) {\n return {\n type: SET_USER_PROFILE,\n data\n }\n}\n\nexport function setTutorGroup(data) {\n return {\n type: SET_TUTOR_GROUP,\n data\n }\n}\n\nexport function setTutorUsertype(data) {\n return {\n type: SET_TUTOR_USERTYPE,\n data\n }\n}\n\nexport function setTutorTourDone(data) {\n return {\n type: SET_TUTOR_TOURDONE,\n data\n }\n}\n\nexport function openAuthDialog(data) {\n return {\n type: OPEN_AUTH_DIALOG,\n data\n }\n}\n\nexport function setBoardConfig(data) {\n if (data.starterMode) {\n data.fourToolsStudent = true\n }\n return {\n type: SET_CONFIG,\n data\n }\n}\nexport function addParticipant(data) {\n return {\n type: ADD_PARTICIPANT,\n data\n }\n}\nexport function removeParticipants(data) {\n return {\n type: REMOVE_PARTICIPANT,\n data\n }\n}\nexport function flushParticipants() {\n return {\n type: FLUSH_PARTICIPANT\n }\n}\nexport function processPendingParticipants() {\n return {\n type: PROCESS_PENDING_PARTICIPANTS\n }\n}\n\nexport function setAvatarDialogOpen(data) {\n return {\n type: AVATAR_DIALOG_OPEN,\n data\n }\n}\n\nexport function addActive(data) {\n return {\n type: ADD_ACTIVE,\n data\n }\n}\nexport function deleteActive(data) {\n return {\n type: DELETE_ACTIVE,\n data\n }\n}\n\nexport function setCommunityUser(data) {\n return {\n type: SET_COMMUNITYUSER,\n data\n }\n}\n\nexport function spinnerEvent(data) {\n return {\n type: SET_SPINNER_EVENT,\n data\n }\n}\n\nexport function fDiceEvent(data) {\n return {\n type: SET_FDICE_EVENT,\n data\n }\n}\n\nexport function getPageLock(pg) {\n const JOINURL = window.location.href.split(\"/board/\")\n var sessID = JOINURL[1].split(\"-pgNum-\")\n var match = false \n var ev = null \n for (let i=0; i< pg.events.length; i++) {\n const p = pg.events[i]\n var ff = p.id.split(\"-LockPage-\")\n if (ff[1] === sessID[1]) {\n match = true\n ev = p \n break \n }\n }\n return ({pgNum: sessID[1], locked: match, ev: ev})\n}\nexport function letItSnowEvent(data) {\n return {\n type: SET_LETITSNOW_EVENT,\n data\n }\n}","import ReactGA from 'react-ga';\n\nexport function event(props) {\n if (window.wbcAnalyticsCC) {\n ReactGA.event(props);\n }\n}\n\nexport function pageview(props) {\n if (window.wbcAnalyticsCC) {\n ReactGA.pageview(props);\n }\n}\n\nexport function exception(props) {\n if (window.wbcAnalyticsCC) {\n ReactGA.exception(props);\n }\n}\n\n// Google Analytics\nexport function initializeGA() {\n if (window.wbcAnalyticsCC) {\n ReactGA.initialize('UA-169613319-1', { debug: false });\n }\n}\n\n// Google Tag Manager\nexport function initializeGoogleTagManager() {\n console.log(\"Initializing Google Tag Manager\");\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= // eslint-disable-line eqeqeq\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','GTM-M8MPR46');\n}\n\nexport function initializeClarityTagManager() {\n (function(c,l,a,r,i,t,y){\n c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};\n t=l.createElement(r);t.async=1;t.src='https://www.clarity.ms/tag/'+i;\n var y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\n })(window, document, 'clarity', 'script', 'kkk0idu6gt');\n}","import { lazy } from 'react';\nimport * as mylocalStorage from \"./mylocalStorage\";\n\nexport const lazyWithRetry = (componentImport) =>\n lazy(async () => {\n const pageHasAlreadyBeenForceRefreshed = JSON.parse(\n mylocalStorage.getItem(\n 'page-has-been-force-refreshed'\n ) || 'false'\n );\n\n try {\n const component = await componentImport();\n\n mylocalStorage.setItem(\n 'page-has-been-force-refreshed',\n 'false'\n );\n\n return component;\n } catch (error) {\n if (!pageHasAlreadyBeenForceRefreshed) {\n // Assuming that the user is not on the latest version of the application.\n // Let's refresh the page immediately.\n mylocalStorage.setItem(\n 'page-has-been-force-refreshed',\n 'true'\n );\n return window.location.reload();\n }\n\n // The page has already been reloaded\n // Assuming that user is already using the latest version of the application.\n // Let's let the application crash and raise the error.\n throw error;\n }\n });","\nvar LOCAL_STORAGE = {}\n\nexport function getItem(name) {\n try {\n return localStorage.getItem(name)\n } catch {\n // console.error(\"cannot get storage\", name, LOCAL_STORAGE[name])\n return LOCAL_STORAGE[name];\n }\n}\n\nexport function setItem(name, value) {\n try {\n return localStorage.setItem(name, value) \n } catch {\n if (!(name in LOCAL_STORAGE) && (name === \"mystoreID\")) {\n alert(\"Cookies are disabled. Whiteboard.Chat functionality will be impaired.\");\n }\n LOCAL_STORAGE[name] = value;\n // console.error(\"cannot set storage:\", name, \"value:\", value)\n return value;\n }\n}\n\n\nexport function removeItem(name) {\n try {\n return localStorage.removeItem(name) \n } catch {\n delete LOCAL_STORAGE[name];\n // console.error(\"cannot remove storage\", name) \n return null \n }\n}\n\nexport function clear() {\n try {\n return localStorage.clear() \n } catch {\n LOCAL_STORAGE = {};\n // console.error(\"cannot clear\") \n return null \n }\n}\n","import Translations from './translations.json';\nimport GetLang from '../LangSettings';\n\nvar language = \"EN\";\n\nexport function setLangauge() {\n language = GetLang();\n if (!Translations[language]) {\n language = \"EN\"\n }\n}\n\nconst Translate = (string) => {\n if ((language && language!==\"EN\")) {\n const translated = Translations[language][string];\n if (translated) {\n return translated;\n } else {\n return string\n }\n } else {\n return string\n }\n};\n\nexport default Translate;"],"sourceRoot":""}