{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/Haikumarine.vue?e580","webpack:///./src/App.vue?029c","webpack:///./src/components/Landing.vue?1f22","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/Haikubox.vue?05ae","webpack:///./node_modules/@aws-amplify/ui-vue/node_modules/@aws-amplify/ui-components/dist/esm-es5 lazy ^\\.\\/.*\\.entry\\.js$ include: \\.entry\\.js$ exclude: \\.system\\.entry\\.js$ namespace object","webpack:///./src/App.vue","webpack:///./src/components/Header.vue","webpack:///src/components/Header.vue","webpack:///./src/components/Header.vue?59e1","webpack:///./src/components/Header.vue?8acd","webpack:///./src/components/HeaderSignedIn.vue","webpack:///src/components/HeaderSignedIn.vue","webpack:///./src/components/HeaderSignedIn.vue?aef4","webpack:///./src/components/HeaderSignedIn.vue?cf8c","webpack:///src/App.vue","webpack:///./src/App.vue?fcac","webpack:///./src/App.vue?bff9","webpack:///./src/aws-exports.js","webpack:///./src/Haikubox.vue","webpack:///./src/graphql/queries.js","webpack:///./src/graphql/mutations.js","webpack:///./src/unmute.min.js","webpack:///./src/graphql/subscriptions.js","webpack:///./src/utils.js","webpack:///src/Haikubox.vue","webpack:///./src/Haikubox.vue?2934","webpack:///./src/Haikubox.vue?8be9","webpack:///./src/Haikumarine.vue","webpack:///src/Haikumarine.vue","webpack:///./src/Haikumarine.vue?f5e2","webpack:///./src/Haikumarine.vue?74fa","webpack:///./src/components/Settings.vue","webpack:///src/components/Settings.vue","webpack:///./src/components/Settings.vue?c752","webpack:///./src/components/Settings.vue?35ac","webpack:///./src/components/Privacy.vue","webpack:///src/components/Privacy.vue","webpack:///./src/components/Privacy.vue?4e88","webpack:///./src/components/Privacy.vue?192f","webpack:///./src/components/Terms.vue","webpack:///./src/components/Terms.vue?e3a6","webpack:///./src/components/Label.vue","webpack:///src/components/Label.vue","webpack:///./src/components/Label.vue?aea7","webpack:///./src/components/Label.vue?397e","webpack:///./src/components/Landing.vue","webpack:///./src/components/Landing.vue?9487","webpack:///./src/components/Admin.vue","webpack:///src/components/Admin.vue","webpack:///./src/components/Admin.vue?2806","webpack:///./src/components/Admin.vue?e2bc","webpack:///./src/components/Grid.vue","webpack:///src/components/Grid.vue","webpack:///./src/components/Grid.vue?1f5e","webpack:///./src/components/Grid.vue?ca58","webpack:///./src/components/Notifications.vue","webpack:///src/components/Notifications.vue","webpack:///./src/components/Notifications.vue?a406","webpack:///./src/components/Notifications.vue?0cb8","webpack:///./src/components/Favorites.vue","webpack:///src/components/Favorites.vue","webpack:///./src/components/Support.vue","webpack:///./src/components/Videohaikuboxoverview.vue","webpack:///./src/components/Favorites.vue?3780","webpack:///./src/components/Favorites.vue?7edf","webpack:///src/components/Support.vue","webpack:///./src/components/Support.vue?2762","webpack:///./src/components/Success.vue","webpack:///./src/components/Success.vue?cb3c","webpack:///src/components/Videohaikuboxoverview.vue","webpack:///./src/components/Videohaikuboxoverview.vue?0cbb","webpack:///./src/routes.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/main.js","webpack:///./src/components/HeaderSignedIn.vue?469c"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","jsonpScriptSrc","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","code","keys","webpackAsyncContext","then","ids","on","_vm","signInClicked","authStateType","authStateTypeSignUp","authState","attrs","_c","staticClass","domProps","slot","staticStyle","_v","staticRenderFns","click","$event","signIn","directives","rawName","modifiers","render","props","methods","$emit","signUp","goToHaikuboxDotCom","location","href","component","user","mounted","goHome","toggleMap","scrollTo","toggleBadge","changeLanguage","$i18n","locale","selectedLanguage","beforeCreate","onAuthUIStateChange","authData","username","email","attributes","$route","path","$router","created","Auth","currentAuthenticatedUser","AuthState","SignedIn","components","appHeader","Header","appSignedInHeader","HeaderSignedIn","beforeDestroy","goHomeClicked","toggleMapClicked","toggleBadgeClicked","authStateTypeSignIn","showMarineClicked","signInFields","label","placeholder","required","handleInputChange","cb","querySelector","shadowRoot","toLowerCase","formFields","awsmobile","logClick","mapOptions","haikuboxMarkerID","currentHaikuboxRadius","chunkedLoading","_l","connectedDevices","clickDevice","item","callback","expression","model","_s","totalLabeled","percentTargetLabeled","labelStreak","currentWiFi","haikuboxLoaded","isOwner","toggleHaikuboxBookmark","getStatus","currentSerial","_e","goNativeActive","newBirdAlert","devicesByOwner","bookmarkedDevices","bookmarkSelect","scopedSlots","notifyBirdInfo","_u","navSelection","hitsLoading","recentHours","hitSelectDate","playbackGain","hitCalendarDatePicked","hitDatePicker","viewSettings","setViewSettings","fn","shareDialog","audioLink","copyLinkSnackbar","hits","hidePics","$$v","getImageUrl","spCode","heatmap","scales","yAxes","fontColor","spectrogram","plotlyLayout","countPerHaikubox","navigateTo","$vuetify","breakpoint","$set","favoriteHit","style","height","padding","clipSeconds","minWidth","showSubmitBox","liveHits","lon","wav","allSpeciesList","selectSpecies","speciesSelected","downloadSummary","csvDates","csvDialog","seriesDaily","getWavFileName","toggleShowBird","haiku","poem1","snackbar","showBirdCastButton","offset","getDevice","haikuboxBySerial","haikuboxByType","haikuboxByOwner","deviceHistoryByDate","hitBySerialByDate","hitsBySpeciesByDate","hitNotInGridBySpeciesByDate","getDeviceState","listDeviceStates","bootBySerialByDate","statusByDate","dailyCountBySerialByDate","itemsBySerialByDate","labelBySerialByLabel","labelByCnByLabel","getDailyCountSummary","dailyCountSummaryBySerialByDate","dailyCountSummaryBySerialBySpecies","dailyCountSummaryByDateBySpecies","yearlyCountSummaryBySerialByYear","getUserInteraction","rawHaikumarineBySerialByDate","getGridBySpCode","hideBirdBySerial","notifyBirdBySerial","notificationsBySerialByDate","oneSignalBySerial","getOneSignalConsent","getShareMap","listShareMaps","getHaikuboxUser","listHaikuboxUsers","haikuboxUserByEmail","getBookmarkHaikubox","bookmarkHaikuboxByOwner","userNoticeByOwnerByViewed","getNoticeDescription","getSubscription","getFavoriteHit","favoriteHitBySerial","getUserSettings","stripeUrl","updateDevice","deleteDevice","updateHit","createLabeledData","createUserInteraction","updateUserInteraction","createClickTable","createHideBird","deleteHideBird","createNotifyBird","deleteNotifyBird","deleteNotifications","createOneSignal","deleteOneSignal","createOneSignalConsent","createShareMap","updateShareMap","deleteShareMap","createBookmarkHaikubox","deleteBookmarkHaikubox","createUnclaimHaikubox","updateUserNotice","createOrg","deleteOrg","createFavoriteHit","deleteFavoriteHit","createUserSettings","updateUserSettings","unmute","addEventListener","capture","passive","removeEventListener","a","hidden","visibilitychange","webkitHidden","mozHidden","msHidden","navigator","userAgent","u","indexOf","maxTouchPoints","A","hasFocus","b","h","state","k","resume","catch","suspend","v","unmute_handled","onstatechange","g","f","innerHTML","children","controls","disableRemotePlayback","preload","loop","load","paused","play","w","y","dispose","onCreateHit","extractFileInfo","filename","parts","split","file","fileWithoutExt","replace","includes","warn","datetime","sampleRate","duration","fileUnixTime","Number","moment","require","fft","ifft","hann","subscription","globalAudioContext","globalGainNode","gonative_app_resumed","log","watch","showBadge","showMap","mapInitialized","getDevices","haikuboxLanguage","localStorage","getItem","setLanguage","browserLanguage","language","languages","browserLang","haikuboxView","haikuboxViewText","haikuboxViewIcon","text","icon","haikuboxConfidence","setViewConfidence","getDevicesByOwner","checkOneSignalConsent","Plotly","LCircle","LTooltip","currentTranslations","yesterdayNumSpecies","yesterdayCallsAndSongs","yesterdayMostFrequent","yesterdaySpCode","heading","poem2","poem3","poemAuthor","poemLink","poemLinkName","moreActiveSpeciesList","downloadRaw","playGettingStartedVideo","currentView","lastUpdated","lastStatusUpdate","confidenceThreshold","specSumThreshold","haikuboxSelect","showRenewAlert","subscriptionActive","osConsentGranted","birdCastUrl","maxClipSeconds","fftLength","halfLength","lastEnhancedId","lastEnhancedAudio","isVisibilityListenerAdded","lat","Date","now","getTimezoneOffset","toISOString","substr","maxDate","minDate","setDate","getDate","fusionSchema","format","fusionSchemaDaily","dataSource","legend","enabled","caption","subcaption","extensions","customRangeSelector","yAxis","plot","prefix","title","plotlyLayoutHeatmap","xaxis","autorange","showgrid","zeroline","showline","autotick","ticks","showticklabels","fixedrange","yaxis","margin","pad","hovermode","dropdownVersionList","dropdownVersion","hiddenList","backgroundLabelColor","disconnectedDevices","haikuboxStatus","userNotices","allHits","dailyCounts","currentSiteName","currentHaikuboxBookmark","currentTimezone","seriesHourly","scrolledToBottom","dailyDetectionsTotal","dailySpeciesTotal","newSpeciesList","missingSpeciesList","dailySummaryList","dailySummaryDate","species1HourCounts","specTickLabels","checkConnectionFailed","wifiUpdatedAt","downloadLink","shareCommonName","shareAudioFile","speciesLabeled","totalSpeciesLabeled","labelStreakRecord","targetLabel","targetLabelSpecies","targetLabelStreak","percentTargetLabelSpecies","percentTargetLabelStreak","badgeLabelRewards","badgeLabelSpeciesRewards","badgleLabelStreakRewards","badgeLabelLevel","badgeLabelSpeciesLevel","badgeLabelStreakLevel","newLabelBadge","newLabelSpeciesBadge","newLabelStreakBadge","notifyBirdInfoSnackShown","gn_OneSignalUserId","gn_OneSignalPlatform","gn_OneSignalInfo","animationInterval","animationRunning","summaryColorMapIndex","summaryHourIndex","summaryHour","summaryHourLabel","zoomSummary","centerSummary","latLng","urlSummary","maxZoomSummary","maxZoomHitMap","attributionSummary","zoom","center","url","urlStates","urlStatesSummary","attribution","urlOcean","urlOceanAttribution","currentZoom","currentCenter","zoomSnap","hitMapOptions","zoomControl","bounds","latLngBounds","iconConnected","iconUrl","iconSize","iconAnchor","iconDisconnected","computed","dropdown_class","navList","lang","loadTranslations","translations","setItem","clickRefresh","fetch","response","json","cn","open","changeView","changeRecentHours","getAll","subscribe","numHours","getHits","userInteractionData","API","graphql","query","variables","userData","speciesLabeledCode","labelCounterData","input","nowDate","oldDate","dateLastLabeled","newDate","diffDays","diff","updateLabelBadgeTargetLevels","nextLevelIndex","nextLevelIndexSpecies","nextLevelIndexStreak","index","classLabel","Storage","copy","level","showEntryBox","serial","dt","currentWav","group","sn","labeledBy","score","labeledData","labelHitCustom","tellUsMore","submitted","audioFile","initAudioContext","gain","audioUrl","arrayBuffer","audioBuffer","decodeAudioData","signal","getChannelData","max","reduce","acc","val","Math","Infinity","normalizedSignal","saveArrayToWavFile","array","numChannels","bitsPerSample","byteRate","blockAlign","dataSize","fileLength","buffer","ArrayBuffer","view","DataView","writeString","setUint32","setUint16","setInt16","blob","Blob","link","URL","createObjectURL","download","body","removeChild","string","setUint8","charCodeAt","replaceSpaces","itemWithSpaces","itemWithUnderscores","itemWithApostrophe","itemWithColon","itemWithComma","currentDate","year","getFullYear","startRange1","endRange1","startRange2","endRange2","showButton","fipsCode","countyFips","countyCode","stateCode","res","results","county_fips","state_code","isIOS","test","AudioContext","createGain","connect","destination","close","resetLabel","sampleSource","createBufferSource","isoTimeSeconds","floor","parse","diffSeconds","startTime","start","sourceNode","getFile","filepath","setupSample","filePath","sample","origSignal","startSample","endSample","endTime","fftSize","overlap","hopSize","stft","meanMag","Array","fill","stdMag","numStrides","frame","phasors","sqrt","magnitude","gateSpectrogram","istft","recoveredSignal","recoveredSignalComplex","maxSignal","tempMax","createBuffer","channelData","zoomUpdate","updateCurrentHaikuboxRadius","centerUpdate","getEventText","momentText","fromNow","getState","devicesInfo","temp","getBirdcastUrl","bookmarkSelectDevice","shareLat","shareLon","checkUserInteractionTableExists","getYesterdayCounts","bookmarkID","bmrk","retBookmark","loadUserInteractionData","updateBounds","serialClicked","deviceState","clickedDevice","timezone","oneSignalConsent","consentData","grantOneSignalPrivacyConsent","gonative","onesignal","userPrivacyConsent","grant","register","addConsentToOneSignalDb","getOneSignal","varArg","oneSignalInfo","onesignalInfo","oneSignalUserId","platform","oneSignalData","playerID","userID","loadBookmarkedHaikuboxes","owner","items","getSubscriptionState","ownerSelectDevice","getNotices","demoHaikubox","carouselItems","userSettings","subState","prepaidPeriodEndUnix","unix","currentUnixTime","stripeCurrentPeriodEndUnix","stripeUnix","nextToken","allDevices","bookmarks","concat","bookmarkedHaikuboxes","hbox","retShare","connected","deviceStates","forEach","element","yesterdayDate","utc","subtract","filterArg","createdAt","gt","boxStatus","sortDirection","updatedAt","calendar","local","hourlyTimeSeries","todayDate","tempHits","queryHits","cnDt","between","getDates","startDate","stopDate","dateArray","add","hit","currentMinutes","minutes","diffMinutes","diffHours","minMomentDate","seconds","dateArr","localDateArr","utcDate","tz","chartOptionsHourly","categories","chartOptionsSpeciesHourly","localHour","colorMap","totalDetections","plotData","startingAngle","colorMapIndex","dateText","showLabel","isSliced","dateTextDict","color","tooltext","toString","fusionDataset","chart","numberPrefix","bgColor","showLegend","enableSmartLabels","showLabels","showValues","defaultCenterLabel","centerLabelFontSize","centerLabelBold","enableMultiSlicing","animateClockwise","showPercentInToolTip","nDays","refDate","heatmapData","zerosArray","hourBin","hour","hitDate","endOf","dayBin","formattedDates","formattedDate","formattedHours","x","z","showscale","hoverongaps","commonName","dailyCountSummary","eq","getShortDates","shortDateArray","shortDateArr","dateList","countArray","countIndex","countsPerDay","dailyCountPlotData","fusionDataStore","FusionCharts","DataStore","fusionTable","createDataTable","yesterdayCountsAll","returnCount","countDate","callsAndSongs","mostFrequent","mostFrequentspCode","maxCount","speciesCount","sort","twoDaysAgo","summaryId","hitDateClick","viewSetting","tempHits2","filter","endDate","specSum","speciesHits","uniqueHits","speciesDict","counter","wavTimeStamp","wavTimeMoment","listname","version","wavList","playbackIndex","showBird","notifyBird","listnameL","hiddenBirdList","customHiddenList","notifyBirdList","notify","customNotifyList","startYear","yearlyCountsAll","countYear","ge","countsTotal","keyA","keyB","dailyDataSource","mapHits","mapCount","radius","float2int","hourlyCountPlotData","getHourlySpecies","getDailySpeciesChartsJS","getHeatmap","getMapCountsPerSpecies","$forceUpdate","getDailyCountsBySpecies","setWindowNew","setWindowMissing","noticeViewed","tempNotices","tempNoticeDescriptions","nD","noticeID","noticeData","pageType","pipeTo","playFile","audioContext","linear2Decibel","dB","log10","offsetSeconds","showLength","round","zmidVal","FFT","spectrogramArray","forward","spectrum","dBmag","spectrogramData","arr","zmid","setWindowRecent","setWindowAll","reason","wiFiText","imageUrl","filterHourlySummary","showHour","filteredSummary","hourlySummary","el","incrementHour","tempSummaryHour","toggleBasemap","toggleColormap","tempIndex","startAnimation","setInterval","stopAnimation","clearInterval","sliderSummaryHourIndex","currentHour","hours","maxSliderCorrection","labelText","unsubscribe","next","eventData","liveHit","some","clickTarget","pageClickedFrom","clickData","audioFileParts","pop","dest","put","clipboard","writeText","hideBirdData","notifyBirdData","bookmarkHaikuboxData","csvRows","queryCounter","localTimeStr","localDateStr","detectionCount","species","documentElement","scrollHeight","targetElement","getElementById","targetScrollPosition","offsetTop","top","behavior","favoriteReturn","animalGroup","favoriteData","moveUp","xAxes","setWindow","selectedDeviceAudioPrivate","cpuTempSeries","cpuFreqSeries","signalSeries","warning","context","source","compressor","audio","Audio","getDevicesByType","isFetchingBoxes","devices","ramdiskSeries","seriesSpeciesDaily","isPlaying","soundscapes","width","labelHit","initAudio","createMediaElementSource","createDynamicsCompressor","threshold","knee","ratio","attack","release","createBiquadFilter","frequency","crossOrigin","autoplay","getScoreText","scoreText","getPrivacy","getDailyCount","getHourlyCount","getSoundscapes","haikuboxStateByType","disconnected","privateAudio","entry","find","cpuTemp","cpuFreq","ramdisk","lastMonthDate","date","limit","speciesList","chartOptions","from","Set","nrows","ncolumns","dateIndex","speciesIndex","count","sortOrder","chartOptionsDaily","chartOptionsSpeciesDaily","hourlyCounts","speciesID","obj","getHourlySpeciesCount","arrSum","getDailySpecies","getDailySpeciesCount","variableArg","nativeAudioContext","alertSaveSuccess","unclaimUnlockSnackbar","componentKey","saveName","getPaymentLink","cancelSubscription","unclaimHaikubox","toggleLock","deleteAccountDialog","deleteAccount","claimCode","alertChangeEmail","emailChangeStatus","alertClaimSuccess","alertClaimFail","unclaimDialog","allowDeleteAccount","numberOfDevices","shareMap","haikuboxesLoaded","paymentLinkResponse","defaultText","unclaimLocked","shareLink","linkName","fcc","smsPause","prepaidType","showPayButton","prepaidUnix","autoRenew","createItem","updateItem","JSON","stringify","saveShare","getLink","saveSettings","random","hideOnMap","mapData","publicDirectory","haikuboxName","linkData","notifyList","notifyObjects","allNotifications","oneSignalList","oneSignalObjects","allPlayers","replaceAll","clearNotifyBird","clearOneSignal","unclaimData","userToDelete","deleteUser","refreshPage","signOut","reload","stripeReturn","statusCode","msg","californiaInfo","personalInfo","getHaikuboxList","showSpeciesList","audioPlaying","pauseLabel","hitsToLabel","haikuboxList","serialList","labeledList","labelSearch","nLabeled","haikubox","haikuboxSerial","targetList","labelTable","tableHeaders","falseDetectionHeaders","falseDetectionTable","allHaikuboxes","nameList","sumField","sumFalseDetection","allLabelsBySpecies","tableLabeled","align","sortable","labelHeader","queryIndex","haikuSerialList","labels","curSerial","labelCount","allLabelsByLabel","haikuIndex","scoreThreshold","attributeExists","ne","indexList","randomIndex","beginsWith","dateTime","getUTCHours","month","getMonth","updateHitData","skip","tempSpec","getSum","total","num","historyHeaders","usersList","getUsersByEmail","subscriptionProps","unit","displayFormats","time","nDirectSeries","nCloudSeries","stopPropagation","getDeviceHistory","noticeId","noticeDescription","haikuboxProps","haikuboxHeaders","subscriptionHeaders","deviceHistory","userIdList","bootTable","firmwareVersion","confirmedEmail","accountUpdatedAt","numHaikuboxes","oneSignalConsentGranted","tempList","filteredUsers","contains","clearSettings","userIds","userInfo","ownerList","getSubscriptionStatus","subscriptionStates","subscriptionStatus","serialName","haikuboxId","deviceInfo","getBootTable","lastMonth","bootData","tempBootTable","datetimeX","nDirect","nCloud","noticeInfo","createDate","handleHistoryClick","selectHaikubox","refreshDeviceHistory","week","loadGrid","searchID","latlon","hitNotInGrid","weekNotInGrid","currentWeekNotInGrid","yyyymmdd","eBirdWeek","cnSpCode","grid","gridBySpecies","hitNotInGridList","hitNotInGridObj","hitNotInGridDict","latitude","longitude","id2","list","notification","numNotifications","notifications","loadNotifications","lastWeek","notificationList","favorite","dialog","clickNo","goTo","numFavorites","favorites","loadFavorites","favoriteList","speciesFavorite","handleDialogInput","fav","setWindowImage","routes","Haikubox","meta","requiresAuth","Settings","Success","Privacy","Terms","Haikumarine","Label","Admin","Grid","Notifications","Favorites","Support","Videohaikuboxoverview","Landing","Vue","use","Vuetify","Amplify","configure","aws_exports","VueRouter","Vue2LeafletMarkerCluster","VueFusionCharts","Column2D","TimeSeries","FusionTheme","options","license","creditLabel","VueYoutube","VTooltip","Chartkick","Chart","LMap","LTileLayer","LMarker","config","productionTip","router","vuetify","App","$mount"],"mappings":"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A,CACAC,KAAA,CACAjZ,MAAA,aACAtB,KAAA,UAEA6Z,OAAA,CACAW,OAAA,IAEAC,MAAA,oBAIAC,oBAAA,CACAC,MAAA,CACAC,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAC,MAAA,CACAR,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAV,MAAA,iBACAY,OAAA,CACA9c,EAAA,GACA4C,EAAA,GACAuR,EAAA,GACAnR,EAAA,GACA+Z,IAAA,GAEA3P,OAAA,IACA4P,WAAA,GAEApQ,aAAA,CACAwP,MAAA,CACAC,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAC,MAAA,CACAR,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAE,OAAA,CACA9c,EAAA,EACA4C,EAAA,EACAuR,EAAA,EACAnR,EAAA,EACA+Z,IAAA,GAEA3P,OAAA,IACA4P,WAAA,GAEAC,oBAAA,CACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEAC,gBAAA,OACAC,WAAA,CACA,MACA,cACA,GACA,SACA,QACA,YACA,gBACA,cACA,gBACA,kBACA,MACA,SACA,aACA,cACA,gBACA,eACA,4BACA,QACA,wBACA,wBACA,0BACA,0BACA,0BACA,0BACA,0BACA,+BACA,0BACA,wBACA,+BACA,aACA,gBACA,gBACA,oBACA,gBACA,eACA,eACA,WACA,aACA,gBACA,mBACA,YACA,qBACA,SACA,YACA,8BACA,yBACA,wBACA,kBACA,uBACA,uBACA,iBACA,sBACA,mBACA,oBACA,gBACA,kBACA,8BACA,mCACA,oBACA,wBACA,qBACA,6BACA,iBACA,kBACA,oBACA,aACA,gBACA,YACA,qBACA,uBACA,wBACA,yBACA,wBACA,kBACA,uBACA,oBACA,4BACA,uBACA,qBACA,2BACA,6BACA,oBACA,4BACA,uBACA,8BACA,0BACA,uBACA,wBACA,sBACA,gBACA,qBACA,uBACA,oBACA,qBACA,yBACA,sBACA,sBACA,oBACA,wBACA,eACA,mBACA,4BACA,2BACA,qBACA,sBACA,gBACA,wBAEAC,qBAAA,OAEAxT,iBAAA,GACAyT,oBAAA,GACArS,kBAAA,GACAuM,gBAAA,EACA+F,eAAA,GACAC,YAAA,GACA9P,SAAA,GACAvB,KAAA,GACAsR,QAAA,GACAC,YAAA,GACAC,gBAAA,GACAC,yBAAA,EACAhT,cAAA,GACAiT,gBAAA,mBACAC,aAAA,GACA3P,YAAA,GACAN,eAAA,GACAE,gBAAA,GACAgQ,kBAAA,EACAC,qBAAA,GACAC,kBAAA,GACAC,eAAA,GACAC,mBAAA,GACAC,iBAAA,GACAC,iBAAA,GACAC,mBAAA,KACAC,eAAA,kBACAhU,aAAA,GACAiU,uBAAA,EACAC,cAAA,GACAxS,UAAA,GACAyS,aAAA,GACA1S,aAAA,EACA2S,gBAAA,GACAC,eAAA,GACA1S,kBAAA,EACA9B,aAAA,EACAyU,eAAA,GACAC,oBAAA,EACAxU,YAAA,EACAyU,kBAAA,EACAC,YAAA,GACAC,mBAAA,EACAC,kBAAA,EACA7U,qBAAA,EACA8U,0BAAA,EACAC,yBAAA,EACAC,kBAAA,CACA,qDACA,4CACA,qBAEAC,yBAAA,CACA,oDACA,0DACA,qDAEAC,yBAAA,CACA,oDACA,yBAEAC,gBAAA,EACAC,uBAAA,EACAC,sBAAA,EACAC,eAAA,EACAC,sBAAA,EACAC,qBAAA,EACAzU,gBAAA,EACA0U,0BAAA,EACAC,mBAAA,KACAC,qBAAA,KACAC,iBAAA,GACAC,kBAAA,GACAC,kBAAA,EACAC,qBAAA,EACAC,iBAAA,EACAC,YAAA,EACAC,iBAAA,GACAC,YAAA,EACAC,cAAAC,qBAAA,QACAC,WACA,sGAEAC,eAAA,GACAC,cAAA,EACAC,mBACA,6DACAC,KAAA,EACAC,OAAAN,qBAAA,QACAO,IAAA,mGACAC,UACA,mGACAC,iBACA,kIA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DACA,qDACA,uDACA,uDACA,uDACA,uDACA,qDACA,oDACA,uDACA,uDACA,sDACA,oDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,sDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,yDACA,2DACA,4DACA,4DACA,4DACA,2DACA,4DACA,6DACA,gEACA,iEACA,wEAIA,IAAAC,GACe,QACflV,KAAA,SACAmE,MAAA,yBACAoR,MAAA,CACA9O,cAAA,WAEA,WAAAyC,eAAA,IACA,KAAAlB,YAAA,KAAAkB,eAAA,MAIApD,UACA,KAAA6Q,oBACA,KAAA4nB,oBAGAp4B,WAAA,CACA0Q,qBAEA5a,OACA,OACAiN,eAAA,GACA20B,4BAAA,EACA16B,eAAAjD,EACAogB,eAAA,CACA,kBACA,UACA,OACA,iBACA,YAEA/E,qBAAA,OACAijB,iBAAA,EACAC,QAAA,GACA12B,iBAAA,GACAyT,oBAAA,GACAC,eAAA,GACAqiB,cAAA,GACAC,cAAA,GACAC,aAAA,GACAU,cAAA,GACA9yB,SAAA,GACAvB,KAAA,GACAsR,QAAA,GACAC,YAAA,GACAC,gBAAA,GACA/S,cAAA,GACAkT,aAAA,GACA2iB,mBAAA,GACAC,WAAA,EACAC,YAAA,GACApmB,UAAA,IACAC,WAAA,IACA3N,aAAA,CACAwP,MAAA,CACAC,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAC,MAAA,CACAR,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAE,OAAA,CACA9c,EAAA,EACA4C,EAAA,EACAuR,EAAA,EACAnR,EAAA,EACA+Z,IAAA,GAEA3P,OAAA,IACAuzB,MAAA,IACA3jB,WAAA,GAEA8D,KAAA,EACAC,OAAAN,qBAAA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6E,GAA8C,eAAYqY,GAA+B,WAAS,kBAAsB,EAAC,Q,MAAC,C,KAA0B,GAAgC,2CAAE,kB,CAAQpf,KAAO+G,iBAAgB,mB,YAAU,O,MAAmB,CAA8B,mBAAC,qCAACE,QAAW,eAAiB,cAAG,OAAU,oBAC3hH,IACGxE,gBAAoB,GAEfO,OAAQP,aAAe,K,iJCiMhCkR,GAAAC,EAAA,QAKA,IAAAK,GAAA,KACAC,GAAA,KAIA,IAAAH,GAAA,CACA,uEACA,iEACA,gEACA,6DACA,4DACA,2DACA,4DACA,4DACA,4DACA,2DACA,yDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,sDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,oDACA,sDACA,uDACA,uDACA,oDACA,qDACA,uDACA,uDACA,uDACA,uDACA,qDACA,oDACA,uDACA,uDACA,sDACA,oDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,sDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,yDACA,2DACA,4DACA,4DACA,4DACA,2DACA,4DACA,6DACA,gEACA,iEACA,wEAMe,IACfjV,KAAA,QACAmE,MAAA,SACA2B,UACA,KAAAogC,mBAEA//B,WAAA,CACA0Q,qBAEAjS,YACA3I,OACA,OACAyQ,UAAA,EACAy5B,iBAAA,EACAv8B,aAAA,IACA6O,UAAA,IACAC,WAAA,IACA0tB,cAAA,EACAC,WAAA,QACAlyB,KAAA,ylEACAyH,YAAA,GACA0qB,YAAA,GACAzF,YAAA,GACA0F,aAAA,GACAC,WAAA,GACAzqB,gBAAA,GACA0qB,YAAA,GACAC,YAAA,YACAC,SAAA,EACA7J,QAAA,GACA8J,SAAA,GACAhC,aAAA,G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G,GAAA,CACA,uEACA,iEACA,gEACA,6DACA,4DACA,2DACA,4DACA,4DACA,4DACA,2DACA,yDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,sDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,oDACA,sDACA,uDACA,uDACA,oDACA,qDACA,uDACA,uDACA,uDACA,uDACA,qDACA,oDACA,uDACA,uDACA,sDACA,oDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,sDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,yDACA,2DACA,4DACA,4DACA,4DACA,2DACA,4DACA,6DACA,gEACA,iEACA,wEAEAF,GAAAD,EAAA,QAAAC,IACAC,GAAAF,EAAA,QAAAE,KAGA,IAAAG,GAAA,KACAC,GAAA,KAEe,QACfjR,MAAA,SACA2B,UACA,KAAA+jC,mBACA,KAAA3D,mBAEA//B,WAAA,CACA0Q,oBACAC,iBAEA7a,OACA,OACA2qC,SAAA,GACAkD,SAAA,GACAC,kBAAA,GACAX,UAAA,GACA7C,aAAA,GACAyD,cAAA,GACAV,kBAAA,GACAW,gBAAA,CACA,CACA1zB,KAAA,OACAkxB,MAAA,QACAC,UAAA,EACAxmC,MAAA,QAEA,CAAAqV,KAAA,SAAArV,MAAA,UACA,CAAAqV,KAAA,QAAArV,MAAA,SACA,CAAAqV,KAAA,iBAAArV,MAAA,gBACA,CAAAqV,KAAA,OAAArV,MAAA,aACA,CAAAqV,KAAA,MAAArV,MAAA,OACA,CAAAqV,KAAA,MAAArV,MAAA,OACA,CAAAqV,KAAA,gBAAArV,MAAA,aACA,CAAAqV,KAAA,UAAArV,MAAA,aACA,CAAAqV,KAAA,UAAArV,MAAA,cAEAioC,eAAA,CACA,CACA5yB,KAAA,OACAkxB,MAAA,QACAC,UAAA,EACAxmC,MAAA,QAEA,CAAAqV,KAAA,SAAArV,MAAA,UACA,CAAAqV,KAAA,SAAArV,MAAA,gBACA,CAAAqV,KAAA,QAAArV,MAAA,SACA,CAAAqV,KAAA,MAAArV,MAAA,OACA,CAAAqV,KAAA,MAAArV,MAAA,OACA,CAAAqV,KAAA,gBAAArV,MAAA,aACA,CAAAqV,KAAA,UAAArV,MAAA,cAEAgpC,oBAAA,CACA,CACA3zB,KAAA,SACAkxB,MAAA,QACAC,UAAA,EACAxmC,MAAA,MAEA,CAAAqV,KAAA,OAAArV,MAAA,eACA,CAAAqV,KAAA,kBAAArV,MAAA,wBACA,CAAAqV,KAAA,yBAAArV,MAAA,8BACA,CAAAqV,KAAA,YAAArV,MAAA,aACA,CAAAqV,KAAA,UAAArV,MAAA,aACA,CAAAqV,KAAA,UAAArV,MAAA,cAEAipC,cAAA,GACAC,WAAA,GACAtM,cAAA,GACAC,cAAA,GACAW,cAAA,GACAV,aAAA,GACA0L,cAAA,GACAC,aAAA,GACAU,UAAA,GACAhB,gBAAA,KACA5gC,YAAA,EACA6hC,gBAAA,EACAne,SAAA,GACArjB,cAAA,GACAuB,KAAA,GACAX,YAAA,GACAE,aAAA,IACA6O,UAAA,IACAC,WAAA,IACAoe,iBAAA,GACArtB,YAAA,EACArE,iBAAA,KACA2W,gBAAA,mBACAjE,YAAA,SACArS,MAAA,GACA4nB,OAAA,GACAvU,IAAA,EACAjN,IAAA,EACA0+B,eAAA,KACAC,iBAAA,KACAC,cAAA,KACAC,yBAAA,EACA7gC,uBAAA,EACAC,cAAA,IAAAiP,KACAA,KAAAC,MAAA,SAAAD,MAAAE,qBAEAC,cACAC,OAAA,MACAK,aAAA,CACA,CACAxZ,KAAA,OACAJ,KAAA,OACA6Z,OAAA,kBAEA,CACAzZ,KAAA,aACAJ,KAAA,WAGA8Z,kBAAA,CACA,CACA1Z,KAAA,OACAJ,KAAA,OACA6Z,OAAA,YAEA,CACAzZ,KAAA,aACAJ,KAAA,WAGA+Z,WAAA,CACA1d,KAAA,KACA2d,OAAA,CACAC,QAAA,KAEA9H,UAAA,CACA8H,QAAA,GAEAC,QAAA,CACAvD,KAAA,cAEAwD,WAAA,CACAxD,KAAA,eAEAyD,WAAA,CACAC,oBAAA,CACAJ,QAAA,MAGAK,MAAA,CACA,CACAC,KAAA,CACAjZ,MAAA,aACAtB,KAAA,UAEA6Z,OAAA,CACAW,OAAA,IAEAC,MAAA,oBAIAC,oBAAA,CACAC,MAAA,CACAC,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAC,MAAA,CACAR,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAV,MAAA,iBACAY,OAAA,CACA9c,EAAA,GACA4C,EAAA,GACAuR,EAAA,GACAnR,EAAA,GACA+Z,IAAA,GAEA3P,OAAA,IACA4P,WAAA,GAEApQ,aAAA,CACAwP,MAAA,CACAC,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAC,MAAA,CACAR,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAE,OAAA,CACA9c,EAAA,EACA4C,EAAA,EACAuR,EAAA,EACAnR,EAAA,EACA+Z,IAAA,GAEA3P,OAAA,IACA4P,WAAA,GAEAiE,UACA,mGACAJ,mBACA,oIAGAzJ,MAAA,CACA,sBAAAiP,GAEA,IAAA6J,EAAA,KACAsc,EAAA,GACA,GACA,MAAAC,QAAAnpB,QAAAC,QAAA,CACAC,MAAA9S,GACA+S,UAAA,CACAyM,YACAwH,OAAA,CAAApwB,MAAA,CAAAolC,SAAArmB,OAGA,IAAA4kB,EAAAwB,EAAA3uC,KAAA4S,kBAAA2e,MACAa,EAAAuc,EAAA3uC,KAAA4S,kBAAAwf,UAGA,QAAA9xB,EAAA,EAAAA,EAAA6sC,EAAA3sC,OAAAF,IACAouC,EAAA5tC,KAAAqsC,EAAA7sC,GAAAkJ,OAEA,GAAAklC,EAAAluC,OAAA,eACA,MAAA4xB,GACA,KAAA+a,UAAAuB,IAIAtqB,SAAA,CACAC,iBACA,MAAA/J,EAAA,wCAEA,OAAAA,GAEAgK,UACA,eAAAlI,mBACA,CACA,CACA9V,GAAA,eACAgU,KAAA,eACAC,KAAA,qBAEA,CACAjU,GAAA,cACAgU,KAAA,kBACAC,KAAA,eAIA,CACA,CACAjU,GAAA,eACAgU,KAAA,eACAC,KAAA,qBAEA,CACAjU,GAAA,gBACAgU,KAAA,gBACAC,KAAA,qBAEA,CACAjU,GAAA,gBACAgU,KAAA,gBACAC,KAAA,qBAEA,CACAjU,GAAA,YACAgU,KAAA,YACAC,KAAA,sBAEA,CAAAjU,GAAA,OAAAgU,KAAA,OAAAC,KAAA,cACA,CAAAjU,GAAA,MAAAgU,KAAA,MAAAC,KAAA,yBAKApS,QAAA,CACAoG,YAAAC,GACA,IAAA2vB,EACA,4CAAA3vB,EAAA,QACA,OAAA2vB,GAEAnvB,WAAAkU,GACApd,QAAAuT,IAAA,YAAA6J,GACAld,OAAAgf,KAAA9B,EAAA,WAEAoH,cAAAC,GACA,MAAAC,EAAAD,EAAAnS,QAAA,UACAqS,EAAAD,EAAApS,QAAA,SACAsS,EAAAD,EAAArS,QAAA,SACAuS,EAAAD,EAAAtS,QAAA,SAEA,OAAAuS,GAEA2U,UAAAxH,GACA,YAAAA,EAAA,aAEA,eAAA9rB,GAEA,IAAA2b,EAAA3b,EAAAkb,WAAA,YAEA,KAAAU,mBAEA,cAAA1O,GAAA3C,OACA2C,GAAAzC,SAGA0C,GAAA0O,KAAA5iB,MAAA,KAAA0I,aAEA,IAAAma,QAAAlB,QAAA/hB,IAAA8iB,GAGA,MAAAkC,EAAAjnB,SAAAC,cAAA,KACAgnB,EAAArhB,KAAAsf,EACA+B,EAAAG,SAAArC,EACA/kB,SAAAqnB,KAAA7lB,YAAAylB,GACAA,EAAAliB,QACA/E,SAAAqnB,KAAAC,YAAAL,GAEA,MAAAhF,QAAAD,MAAAkD,GACAC,QAAAlD,EAAAkD,cACAC,QAAA9O,GAAA+O,gBAAAF,GACA,IAAAG,EAAAF,EAAAG,eAAA,GACA,MAAAC,EACA,IAAAF,EAAAG,OAAA,CAAAC,EAAAC,IAAAC,KAAAJ,IAAAE,EAAAC,IAAAE,KACAC,EAAAR,EAAA/hB,IAAAlB,KAAAmjB,GAGA,SAAAO,EAAAC,EAAApQ,EAAAT,GACA,MAAA8Q,EAAA,EACAC,EAAA,GACAC,EAAAvQ,EAAAqQ,EAAAC,EAAA,EACAE,EAAAH,EAAAC,EAAA,EACAG,EAAAL,EAAApoB,OAAAsoB,EAAA,EACAI,EAAA,GAAAD,EAGAE,EAAA,IAAAC,YAAAF,GACAG,EAAA,IAAAC,SAAAH,GAGAI,EAAAF,EAAA,UACAA,EAAAG,UAAA,EAAAN,EAAA,MACAK,EAAAF,EAAA,UACAE,EAAAF,EAAA,WACAA,EAAAG,UAAA,UACAH,EAAAI,UAAA,SACAJ,EAAAI,UAAA,GAAAZ,GAAA,GACAQ,EAAAG,UAAA,GAAAhR,GAAA,GACA6Q,EAAAG,UAAA,GAAAT,GAAA,GACAM,EAAAI,UAAA,GAAAT,GAAA,GACAK,EAAAI,UAAA,GAAAX,GAAA,GACAS,EAAAF,EAAA,WACAA,EAAAG,UAAA,GAAAP,GAAA,GAGA,QAAA3oB,EAAA,EAAAA,EAAAsoB,EAAApoB,OAAAF,IACA+oB,EAAAK,SAAA,KAAAppB,EAAA,MAAAsoB,EAAAtoB,IAAA,GAIA,MAAAqpB,EAAA,IAAAC,KAAA,CAAAT,GAAA,CAAAxlB,KAAA,cAGAkmB,EAAAjnB,SAAAC,cAAA,KACAgnB,EAAArhB,KAAAshB,IAAAC,gBAAAJ,GACAE,EAAAG,SAAAjS,EACAnV,SAAAqnB,KAAA7lB,YAAAylB,GACAA,EAAAliB,QACA/E,SAAAqnB,KAAAC,YAAAL,GAGA,SAAAN,EAAAF,EAAA1Y,EAAAwZ,GACA,QAAA7pB,EAAA,EAAAA,EAAA6pB,EAAA3pB,OAAAF,IACA+oB,EAAAe,SAAAzZ,EAAArQ,EAAA6pB,EAAAE,WAAA/pB,IAGA,IAAAyX,EACA,KAAAuS,cAAAte,EAAA+Y,IACA,IACA,KAAAuF,cAAAte,EAAAkb,WAAA,aACA,OACAyB,EAAAD,EAAAV,EAAAxP,WAAAT,IAEA6P,mBACA,SAAA1O,GAAA,CACA,MAAA0S,EAAA,mBAAAC,KAAA/V,UAAAC,WACA6V,GACA1S,GAAA,IAAA4S,QAEA3W,GAAA+D,IAAA,OAEAA,GAAA,IAAA4S,QAEA3S,GAAAD,GAAA6S,aACA5S,GAAA0O,KAAA5iB,MAAA,KAAA0I,aACAwL,GAAA6S,QAAA9S,GAAA+S,eAGA,eAAAtE,EAAAnZ,EAAAuW,EAAA/Y,EAAA0a,EAAAyF,GAIA,QAAAA,EAAA,CACAngB,EAAA2a,WAAA,KAGA,MAAAvX,QAAAoW,QAAAC,QAAA,CACAC,MAAAvS,GACAwS,UAAA,CACArf,GAAAqhB,KAIA,MAAAvY,EAAApP,KAAAmT,eACAnH,EAAAoD,aAAA,EAEApD,EAAAoD,aAAA,EAEApD,EAAA6D,IAAA8X,EAEA7hB,QAAAuT,IAAA,WAAAsO,GAEA,KAAAC,mBAEA,cAAA1O,GAAA3C,OACA2C,GAAAzC,SAGA0C,GAAA0O,KAAA5iB,MAAA,KAAA0I,aAEA,IAAAma,QAAAlB,QAAA/hB,IAAA8iB,GACA7hB,QAAAuT,IAAAyO,GACA,MAAAjD,QAAAD,MAAAkD,GACAC,QAAAlD,EAAAkD,cACAC,QAAA9O,GAAA+O,gBAAAF,GAEAqE,EAAAlT,GAAAmT,qBACAD,EAAAjD,OAAAnB,EACAoE,EAAAJ,QAAA7S,IACAiT,EAAAO,MAAA,GAEA,eAAA9Q,aACA,eAAA7P,EAAAhG,SACA,KAAA6I,YAAA6X,EAAA1a,EAAAkb,WAAA,sBACAlb,EAAA2a,WAAA,OAIA,sBAAAgB,EAAAnZ,EAAAuW,EAAAze,GAQA,GANA,KAAAshB,mBACA,cAAA1O,GAAA3C,OACA2C,GAAAzC,SAIA,KAAAiG,gBAAApW,EAAA,CAEA,MAAAsmB,EAAA1T,GAAAmT,qBAMA,OALAO,EAAAzD,OAAA,KAAAxM,kBAEAiQ,EAAAZ,QAAA9S,GAAA+S,kBAEAW,EAAAD,QAIA,eAAAE,EAAAC,GACA,MAAAjI,QAAAD,MAAAkI,GACA/E,QAAAlD,EAAAkD,cACAC,QAAAC,gBACA/O,GACA6O,GAEA,OAAAC,EAGA,eAAA+E,EAAAC,GAEA,MAAAC,QAAAJ,EAAAG,GACA,OAAAC,EAGArG,QAAA/hB,IAAA8iB,GAAAhhB,KAAAtF,IAEA0rB,EAAA1rB,GAAAsF,KAAAsmB,IACA,IAAA/E,EAAA+E,EAAA9E,eAAA,GAEA,MAAAmF,EAAA,IACAC,EAAA,IACAC,EAAAF,EAAAC,EAEAE,EAAA,GACA,IAAAC,EAAA,IAAAC,MAAAL,GAAAM,KAAA,GACAC,EAAA,IAAAF,MAAAL,GAAAM,KAAA,GACAE,EAAA,EACA,QAAAxtB,EAAA,EAAAA,EAAA4nB,EAAA1nB,OAAA8sB,EAAAhtB,GAAAktB,EAAA,CACA,MAAAO,EAAA7F,EAAAhiB,MAAA5F,IAAAgtB,GAEA,QAAA9W,EAAA,EAAAA,EAAA8W,EAAA9W,IACAuX,EAAAvX,GAAAuX,EAAAvX,GAAAwC,GAAAxC,GAKA,IAHA,IAAAwX,EAAAlV,GAAAiV,GAGAvsB,EAAA,EAAAA,EAAAwsB,EAAAxtB,OAAAgB,IACAksB,EAAAlsB,IAAAgnB,KAAAyF,KACAD,EAAAxsB,GAAA,GAAAwsB,EAAAxsB,GAAA,GAAAwsB,EAAAxsB,GAAA,GAAAwsB,EAAAxsB,GAAA,IAGAssB,IACAL,EAAA3sB,KAAA,IAAAktB,IAGA,QAAAxsB,EAAA,EAAAA,EAAA8rB,EAAA9rB,IACAksB,EAAAlsB,GAAAksB,EAAAlsB,GAAAssB,EAIA,QAAAxtB,EAAA,EAAAA,EAAAmtB,EAAAjtB,OAAAF,IAEA,QAAAkB,EAAA,EAAAA,EAAA8rB,EAAA9rB,IAAA,CACA,IAAA0sB,EACA1F,KAAAyF,KACAR,EAAAntB,GAAAkB,GAAA,GAAAisB,EAAAntB,GAAAkB,GAAA,GAAAisB,EAAAntB,GAAAkB,GAAA,GAAAisB,EAAAntB,GAAAkB,GAAA,IACAksB,EAAAlsB,GACAqsB,EAAArsB,IAAA0sB,IAGA,IAAA1sB,EAAA,EAAAA,EAAA8rB,EAAA9rB,IACAqsB,EAAArsB,GAAAgnB,KAAAyF,KAAAJ,EAAArsB,GAAAssB,GAGA,eAAAK,IACA,QAAA7tB,EAAA,EAAAA,EAAAmtB,EAAAjtB,OAAA,EAAAF,IAEA,QAAAkB,EAAA,EAAAA,EAAA8rB,EAAA9rB,IAAA,CAEA,IAAA0sB,GACA1F,KAAAyF,KACAR,EAAAntB,GAAAkB,GAAA,GAAAisB,EAAAntB,GAAAkB,GAAA,GACAisB,EAAAntB,GAAAkB,GAAA,GAAAisB,EAAAntB,GAAAkB,GAAA,IAEAgnB,KAAAyF,KACAR,EAAAntB,EAAA,GAAAkB,GAAA,GAAAisB,EAAAntB,EAAA,GAAAkB,GAAA,GACAisB,EAAAntB,EAAA,GAAAkB,GAAA,GAAAisB,EAAAntB,EAAA,GAAAkB,GAAA,IAEAgnB,KAAAyF,KACAR,EAAAntB,EAAA,GAAAkB,GAAA,GAAAisB,EAAAntB,EAAA,GAAAkB,GAAA,GACAisB,EAAAntB,EAAA,GAAAkB,GAAA,GAAAisB,EAAAntB,EAAA,GAAAkB,GAAA,IAEAgnB,KAAAyF,KACAR,EAAAntB,EAAA,GAAAkB,GAAA,GAAAisB,EAAAntB,EAAA,GAAAkB,GAAA,GACAisB,EAAAntB,EAAA,GAAAkB,GAAA,GAAAisB,EAAAntB,EAAA,GAAAkB,GAAA,IAEAgnB,KAAAyF,KACAR,EAAAntB,EAAA,GAAAkB,GAAA,GAAAisB,EAAAntB,EAAA,GAAAkB,GAAA,GACAisB,EAAAntB,EAAA,GAAAkB,GAAA,GAAAisB,EAAAntB,EAAA,GAAAkB,GAAA,KAEA,EACA0sB,EAAAR,EAAAlsB,GAAA,IAAAqsB,EAAArsB,KACAisB,EAAAntB,GAAAkB,GAAA,MAAAisB,EAAAntB,GAAAkB,GAAA,GACAisB,EAAAntB,GAAAkB,GAAA,MAAAisB,EAAAntB,GAAAkB,GAAA,GAEAisB,EAAAntB,GAAAgtB,EAAA,EAAA9rB,GAAA,GACA,GAAAisB,EAAAntB,GAAAgtB,EAAA,EAAA9rB,GAAA,GACAisB,EAAAntB,GAAAgtB,EAAA,EAAA9rB,GAAA,GACA,GAAAisB,EAAAntB,GAAAgtB,EAAA,EAAA9rB,GAAA,IAGAA,EAAA,IACAisB,EAAAntB,GAAAkB,GAAA,MAAAisB,EAAAntB,GAAAkB,GAAA,GACAisB,EAAAntB,GAAAkB,GAAA,MAAAisB,EAAAntB,GAAAkB,GAAA,GAEAisB,EAAAntB,GAAAgtB,EAAA,EAAA9rB,GAAA,GACA,GAAAisB,EAAAntB,GAAAgtB,EAAA,EAAA9rB,GAAA,GACAisB,EAAAntB,GAAAgtB,EAAA,EAAA9rB,GAAA,GACA,GAAAisB,EAAAntB,GAAAgtB,EAAA,EAAA9rB,GAAA,IAKA,OAAAisB,EAGA,eAAAW,IACA,IAAAC,EAAA,IAAAV,MAAAzF,EAAA1nB,QAAAotB,KAAA,GACAU,EAAA,IAAAX,MAAAL,GACA,QAAAhtB,EAAA,EAAAA,EAAAmtB,EAAAjtB,OAAA,EAAAF,IAAA,CAEAguB,EAAAvV,GAAA0U,EAAAntB,IAEA,QAAAkB,EAAA,EAAAA,EAAA8rB,EAAA9rB,IACAlB,EAAAitB,EAAA/rB,EAAA0mB,EAAA1nB,SAEA6tB,EAAA/tB,EAAAktB,EAAAhsB,IACA8sB,EAAA9sB,GAAA,IAIA,OAAA6sB,EAEAF,IACAxnB,KAAA,IAEAynB,KAEAznB,KAAA0nB,IAEA,IAAAE,EAAA,EACA,QAAAjuB,EAAA,EAAAA,EAAA+tB,EAAA7tB,OAAA,IAAAF,GAAA,KAEA,IAAAkuB,EAAAhG,KAAAJ,OAAAiG,EAAAnoB,MAAA5F,IAAA,MACAkuB,EAAAD,IACAA,EAAAC,GAGAD,EAAA,GAAAA,EAGA,MAAAvG,EAAA9O,GAAAuV,aACA,EACAJ,EAAA7tB,OACAysB,EAAAzU,YAEAkW,EAAA1G,EAAAG,eAAA,GACA,QAAA7nB,EAAA,EAAAA,EAAA+tB,EAAA7tB,OAAAF,IACAouB,EAAApuB,GAAA+tB,EAAA/tB,GAAAiuB,EAGA,MAAA3B,EAAA1T,GAAAmT,qBACAO,EAAAzD,OAAAnB,EAEA4E,EAAAZ,QAAA9S,GAAA+S,aAEAW,EAAAD,QACA,KAAAjQ,eAAApW,EACA,KAAAqW,kBAAAqL,SAKAnZ,YAAA6X,EAAAiB,EAAAiV,GAKA,eAAA/P,EAAAkQ,EAAAjQ,GASA,MAAAjI,QAAAD,MAAAkI,GACA/E,QAAAlD,EAAAkD,cACAC,QAAAC,gBACA/O,GACA6O,GAEA,OAAAC,EAGA,eAAA+E,EAAAC,GAEA,MAAAC,QAAAJ,EAAA3T,GAAA8T,GAEA,OAAAC,EAGA,SAAA+P,EAAA/3B,GACA,IAAAg4B,EAAA,GAAAzU,KAAA0U,MAAAj4B,GACA,OAAAg4B,EA7BA,KAAArV,mBAmCAhB,QAAA/hB,IAAA8iB,GACAhhB,KACAtF,IAGA0rB,EAAA1rB,GACAsF,KAAAsmB,IAEA,IAAA/E,EAAA+E,EAAA9E,eAAA,GAMAoF,EAAA,EACA/Q,EAAA,KAAAA,UACAC,EAAA,KAAAA,WAEA2gB,EAAA3gB,EAAA+L,KAAA6U,MAAA,GAAA5gB,GACA6gB,GAAA,GACA,KAAA3V,EAAA,KACAyV,EAAA3gB,EAAA+L,KAAA6U,MAAA,IAAA5gB,GACA6gB,GAAA,IAGA,IAAA3sB,EAAA6X,KAAA+D,MAAA/P,GAAA,EAAA+Q,IAGAzU,EAAA,IAAAykB,UAAA/gB,EAAA,OAGA,IADA,IAAAghB,EAAA,GACA9F,EAAA,EAAAA,EAAAzK,EAAAzsB,OAAAgc,EAAAkb,GAAA/mB,EAAA,CAEA,IADA,IAAAlN,EAAAykB,EAAAhiB,MAAAwxB,IAAAlb,GACAlc,EAAA,EAAAA,EAAAkc,EAAAlc,IACAmD,EAAAnD,GAAAmD,EAAAnD,GAAA0Y,GAAA1Y,GAEAwY,EAAA2kB,QAAAh6B,GACAA,EAAAqV,EAAA4kB,SAAAx3B,MAAA,EAAAk3B,GAEA,IAAAO,EAAAl6B,EAAA0C,IAAA62B,GAEAQ,EAAA18B,QAAA68B,GAOA,IAAAC,EAAA,GACA,IAAAt9B,EAAA,EAAAA,EAAA88B,EAAA98B,IAAA,CAEA,IAAAu9B,EAAAL,EAAA5D,QAAA,SAAA30B,EAAAzD,GACA,OAAAA,EAAA47B,GAAA,KAGAQ,EAAA98B,KAAA+8B,GACAL,EAAAv8B,QAIA,WAAA27B,IACA,KAAAxuB,KAAAsY,GAAA7X,YAAA,CACA,CACA8oB,EAAAiG,EACAj6B,KAAA,UACAi0B,WAAA,EACAkG,KAAAR,IAIA,KAAAS,gBACArX,EACA,cACA,KAAAtY,KAAAsY,GAAAlY,OACA,KAAAJ,KAAAsY,GAAA3B,KAGA,QAAA6X,IACA,KAAAxsB,YAAAsW,GAAA7X,YAAA,CACA,CACA8oB,EAAAiG,EACAj6B,KAAA,UACAi0B,WAAA,EACAkG,KAAAR,IAGA,KAAAU,aACAtX,EACA,cACA,KAAAtW,YAAAsW,GAAAlY,OACA,KAAA4B,YAAAsW,GAAA3B,KAIA,QAAA6X,IACA,KAAAzc,eAAAuG,GAAA7X,YAAA,CACA,CACA8oB,EAAAiG,EACAj6B,KAAA,UACAi0B,WAAA,EACAkG,KAAAR,IAGA,KAAAlB,aACA1V,EACA,cACA,KAAAvG,eAAAuG,GAAAlY,OACA,KAAA2R,eAAAuG,GAAA3B,KAIA,YAAA6X,IACA,KAAAxc,mBAAAsG,GAAA7X,YAAA,CACA,CACA8oB,EAAAiG,EACAj6B,KAAA,UACAi0B,WAAA,EACAkG,KAAAR,IAGA,KAAAjB,iBACA3V,EACA,cACA,KAAAtG,mBAAAsG,GAAAlY,OACA,KAAA4R,mBAAAsG,GAAA3B,OAIArO,MAAA7Q,IACAC,QAAAuT,IAAAxT,GACAC,QAAAuT,IAAA,WAAAsO,GAEA,KAAAlX,UAAA,GACA,KAGAwtB,IAEAn4B,QAAAuT,IAAA,cAAA4kB,KAGAvnB,MAAA7Q,IACAC,QAAAuT,IAAAxT,MAGAgpC,gBACA,KAAAd,cAAA,GACA,KAAAV,kBAAA,GACA,KAAAa,cAAA,GACA,KAAAvD,SAAA,GACA,KAAAnhC,MAAA,GACA,KAAA8kC,eAAA,GACA,KAAAC,iBAAA,GACA,KAAAC,cAAA,EACA,KAAAC,wBAAA,GACA,KAAAL,UAAA,GACA,KAAAC,gBAAA,GACA,KAAAxM,cAAA,GACA,KAAAE,aAAA,GACA,KAAA0L,cAAA,GACA,KAAAC,aAAA,GACA,KAAAt/B,KAAA,GACA,KAAAyO,IAAA,EACA,KAAAjN,IAAA,GAEA,wBACA,KAAAi/B,gBACA,IAAAzc,EAAA,KACA8Y,EAAA,GACA4D,EAAA,GAEA,GACA,MAAAtM,QAAAhd,QAAAC,QAAA,CACAC,MAAA5U,GACA6U,UAAA,CAAAhiB,KAAA,WAAAyuB,eAEAA,EAAAoQ,EAAAxiC,KAAA8Q,eAAAshB,UACA8Y,IAAA3Y,OAAAiQ,EAAAxiC,KAAA8Q,eAAAygB,aAGA,MAAAa,GAEA,IAAA+Y,EAAA,GACAD,EAAArY,SAAA,SAAAC,GAGA,MAAAA,EAAAxB,QACA,GAAAwd,EAAAz2B,SAAAya,EAAAxB,QACAwd,EAAAhuC,KAAAgyB,EAAAxB,OACA,MAAAwB,EAAA/uB,KACAonC,EAAArqC,KAAAgyB,EAAA9L,OAAA,KAAA8L,EAAA/uB,MAEAonC,EAAArqC,KAAAgyB,EAAA9L,YAIA,KAAAsjB,aAAAa,EACA,KAAAgD,WAAAW,GAGA,0BAEA,MAAAC,QAAAvpB,QAAAC,QAAA,CACAC,MAAA7S,GACA8S,UAAA,CAAAnc,MAAA,KAAAA,SAEA,KAAA4nB,OAAA2d,EAAA/uC,KAAA6S,oBAAA0e,MAAA,GAAAjrB,GAEA,KAAAgoC,eACAS,EAAA/uC,KAAA6S,oBAAA0e,MAAA,GAAA+c,eACA,KAAAC,iBAAA31B,GACAoa,IAAA+b,EAAA/uC,KAAA6S,oBAAA0e,MAAA,GAAAgC,WACAwB,GAAA,oBACAvX,OAAA,iCAEA,MAAAvQ,QAAAuY,QAAAC,QAAA,CACAC,MAAA3U,GACA4U,UAAA,CAAA2L,MAAA,KAAAF,UAEA,IAAA4d,EAAA/hC,EAAAjN,KAAA+Q,gBAAAwgB,MAEA4Z,EAAA,GACA,KAAA4C,cAAAiB,EACAA,EAAAnc,SAAA,SAAAC,GAGA,MAAAA,EAAAxB,QACA,MAAAwB,EAAA/uB,KACAonC,EAAArqC,KAAAgyB,EAAA9L,OAAA,KAAA8L,EAAA/uB,MAEAonC,EAAArqC,KAAAgyB,EAAA9L,YAIA,KAAAsjB,aAAAa,EACA,KAAAqD,cAAArD,EAAA3qC,OAEA,MAAA2vB,QAAA3K,QAAAC,QAAA,CACAC,MAAAlT,GACAmT,UAAA,CAAArf,GAAA,KAAA8qB,UAGA,IAEA,GAAAjB,EAAAnwB,KAAAwS,oBAAA6J,iBAEA,KAAAoyB,yBAAA,EAEA,KAAAA,yBAAA,EAEA,MACA,KAAAA,yBAAA,EAEA,KAAAQ,yBAEA,8BAEA,IAAAC,EAAA,GACA,UAAAljC,KAAA,KAAA+hC,cAAA,CAEA,MAAAoB,QAAA3pB,QAAAC,QAAA,CACAC,MAAAxS,GACAyS,UAAA,CAAArf,GAAA0F,EAAAgb,UAGAmoB,EAAAnvC,KAAAkT,gBAAA6e,qBAAAnZ,GACAoZ,KAAAmd,EAAAnvC,KAAAkT,gBAAA6e,sBACAvU,OAAA,uBAGA,MADA2xB,EAAAnvC,KAAAkT,gBAAAgf,6BAGAid,EAAAnvC,KAAAkT,gBAAAgf,2BACAtZ,GACAoZ,KACAmd,EAAAnvC,KAAAkT,gBACAgf,4BAEA1U,OAAA,wBAEA0xB,EAAApuC,KAAAquC,EAAAnvC,KAAAkT,iBAEA,KAAAm6B,kBAAA6B,GAEA,qBAAAE,GACA,MAAA9oC,EAAA8oC,EAAAn3B,MAAA,KACA,IAAA8X,EAAAzpB,EAAA,GACA,MAAA+oC,EAAAtf,EAAA9X,MAAA,KAGAq3B,QAAA9pB,QAAAC,QAAA,CACAC,MAAA9U,GACA+U,UAAA,CACArf,GAAA+oC,EAAA,MAKAN,QAAAvpB,QAAAC,QAAA,CACAC,MAAA/S,GACAgT,UAAA,CACArf,GAAAgpC,EAAAtvC,KAAA4Q,UAAA0gB,SAIA,KAAA9nB,MAAAulC,EAAA/uC,KAAA2S,gBAAAnJ,YAEA,KAAAylB,SAAAc,GACA,KAAAwf,aAAAxf,GACA,KAAAnjB,UAAAmjB,GACA,KAAArV,oBACA,KAAA4K,QAAAyK,IAEA,cAAAA,GAEA,KAAAljB,cAAAkjB,EACA,IAAAqC,EAAA,KACA,IAAAW,EACA,IAAAa,EAAA,GAEA,QAAAnmB,YAAA,GACAslB,EAAAna,GACAoa,MACAC,SAAA,KAAAxlB,YAAA,SACA+P,SAEA,GACA,MAAAqW,QAAArO,QAAAC,QAAA,CACAC,MAAAzU,GACA0U,UAAA,CACAqB,OAAA+I,EACA9I,GAAA,CAAAmM,GAAAL,GACAO,cAAA,OACAlB,aAEAwH,OAAA,CAAA/pB,IAAA,CAAAujB,GAAA,OAEAQ,IAAArB,OAAAsB,EAAA7zB,KAAAiR,kBAAAsgB,OACAa,EAAAyB,EAAA7zB,KAAAiR,kBAAAmhB,UACA,KAAA5kB,YAAAomB,EAAApzB,aACA,MAAA4xB,GAEA,WAAA3kB,YAAA,CACA,IAAAwmB,EAAArb,GAAA,KAAA/K,eACAknB,GAAA,KAAAjV,iBACAkT,MACAxV,OAAA,uBACAqc,EAAAjhB,GAAAqb,GACAG,IAAA,YACA5W,OAAA,uBAEA,GACA,MAAAqW,QAAArO,QAAAC,QAAA,CACAC,MAAAzU,GACA0U,UAAA,CACAqB,OAAA+I,EACA9I,GAAA,CAAA8M,QAAA,CAAAE,EAAA4F,IACAvG,cAAA,OACAlB,aAEAwH,OAAA,CAAA/pB,IAAA,CAAAujB,GAAA,OAEAQ,IAAArB,OAAAsB,EAAA7zB,KAAAiR,kBAAAsgB,OACAa,EAAAyB,EAAA7zB,KAAAiR,kBAAAmhB,UACA,KAAA5kB,YAAAomB,EAAApzB,aACA,MAAA4xB,GAQA,IALA,IAAA2H,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,EAEA55B,EAAA,EAAAA,EAAAszB,EAAApzB,OAAAF,IAAA,CAGA,IAAA65B,EAAAvG,EAAAtzB,GAAA2mB,GAGAmT,EAAAxhB,GACAoa,IAAAmH,GACApF,GAAA,KAAAjV,iBACA5W,OAAA,KAAAC,kBACAqU,OAAA,UAOA6c,EAAA,KAAAD,EACAxG,EAAAtzB,GAAAgnB,MAAA,GAAAsM,EAAAtzB,GAAAw5B,QAAA,IACAO,EAAA,KAAAD,GAEAxG,EAAAtzB,GAAAgnB,MAAA,IAAAsM,EAAAtzB,GAAAw5B,QAAA,IACAO,EAAA,KAAAD,GAIAxG,EAAAtzB,GAAAgnB,MAAA,IACAsM,EAAAtzB,GAAAw5B,QAAA,GACA,KAAAlG,EAAAtzB,GAAAg6B,QAAAp0B,OAAA,KAEAm0B,EAAA,MAAAD,GAGAxG,EAAAtzB,GAAAgnB,MAAA,IACAsM,EAAAtzB,GAAAw5B,QAAA,GACA,KAAAlG,EAAAtzB,GAAAg6B,QAAAp0B,OAAA,KAEAm0B,EAAA,MAAAD,GAGAL,EAAA1hB,SAAAub,EAAAtzB,GAAAykB,IA0BAiV,EAAAC,EAAArG,EAAAtzB,GAAAykB,KAAA,WAAAjkB,KAAA,CACAiX,SAAA6b,EAAAtzB,GAAA,OACA+5B,WACApT,GAAA2M,EAAAtzB,GAAA,MACAgnB,MAAAsM,EAAAtzB,GAAA,SACAw5B,QAAAlG,EAAAtzB,GAAA,cA9BAy5B,EAAAj5B,KAAA8yB,EAAAtzB,GAAAykB,IACAkV,EAAArG,EAAAtzB,GAAAykB,IAAAmV,EACAF,EAAAl5B,KAAA8yB,EAAAtzB,IACA05B,EAAAE,GAAAK,QAAA,CACA,CACAxiB,SAAA6b,EAAAtzB,GAAA,OACA+5B,WACApT,GAAA2M,EAAAtzB,GAAA,MACAgnB,MAAAsM,EAAAtzB,GAAA,SACAw5B,QAAAlG,EAAAtzB,GAAA,aAGA05B,EAAAE,GAAAhT,WAAA,CACAnP,SAAA6b,EAAAtzB,GAAA,OACA+5B,WACApT,GAAA2M,EAAAtzB,GAAA,MACAgnB,MAAAsM,EAAAtzB,GAAA,SACAw5B,QAAAlG,EAAAtzB,GAAA,YAEA05B,EAAAE,GAAAM,cAAA,EACAR,EAAAE,GAAAl0B,OAAA,QACAg0B,EAAAE,GAAAO,UAAA,EACAT,EAAAE,GAAAQ,YAAA,EACAR,GAAA,GAiBA,MAAAnB,QAAAvT,QAAAC,QAAA,CACAC,MAAAtT,GACAuT,UAAA,CACAqB,OAAA+I,KAIA,IAAA6K,EAAA7B,EAAA/4B,KAAAoS,iBAAAmf,MACAsJ,EAAA,GACA,QAAAv6B,EAAA,EAAAA,EAAAs6B,EAAAp6B,OAAAF,IACAu6B,EAAA/5B,KAAA85B,EAAAt6B,GAAAykB,IAIAqN,EAAA,KACA,IAAA0I,EAAA,GACA,GACA,MAAAC,QAAAvV,QAAAC,QAAA,CACAC,MAAArT,GACAsT,UAAA,CACAqB,OAAA+I,EACAqC,eAGA0I,IAAAvI,OACAwI,EAAA/6B,KAAAqS,mBAAAkf,OAEAa,EAAA2I,EAAA/6B,KAAAqS,mBAAA+f,gBACA,MAAAA,GAEA,IAAA4I,EAAA,GAEA,QAAA16B,EAAA,EAAAA,EAAAw6B,EAAAt6B,OAAAF,IACA06B,EAAAl6B,KAAAg6B,EAAAx6B,GAAAykB,IAIA,IAAAzkB,KAAA05B,EACAgB,EAAA3iB,SAAA2hB,EAAA15B,GAAAykB,MACAiV,EAAA15B,GAAAo6B,YAAA,GAqBA,KAAAtsB,KAAA4rB,EAEA,KAAAxsB,YAAA,GAEAE,gBAEA,QAAAE,sBACA,KAAAA,uBAAA,GAEA,KAAAA,uBAAA,EACA,KAAAH,YAAA,IAGAgsB,eACA3zB,QAAAuT,IAAA,oBAAAxL,eACA,KAAAD,uBAAA,EACA,KAAAsX,kBAAA,IAEAA,kBAAAG,GACA,KAAAzX,uBAAA,EACA,KAAAH,YAAA4X,EACA,KAAAjX,KAAA,GACA,KAAAZ,YAAA,EACA,KAAA8X,QAAA,KAAAzY,gBAEA,mBAAAkjB,GACA,IAAAyf,EAAA52B,GAAAoa,MAAAC,SAAA,YAAAzV,SACA,MAAA0V,EAAA,CACAlM,OAAA+I,EACAoD,UAAA,CAAAC,GAAAoc,IAEApB,QAAA5oB,QAAAC,QAAA,CACAC,MAAApU,GACAqU,UAAAuN,IAEA,IAAAuc,EAAArB,EAAApuC,KAAAsR,mBAAAigB,MACAme,EAAA,GACA,QAAAhpB,KAAA+oB,EAAA,CACA,IAAAE,EAAA/2B,GACAoa,IAAAyc,EAAA/oB,GAAAyM,WACA4B,GAAA,KAAA7E,UACA1S,OAAA,iCACAkyB,EAAAhpB,GAAA+oB,EAAA/oB,GACAgpB,EAAAhpB,GAAAyM,UAAAwc,EAEA,KAAAvB,UAAAsB,GAQA,eAAA3f,GACA,MAAAC,QAAAxK,QAAAC,QAAA,CACAC,MAAAtU,GACAuU,UAAA,CAAArf,GAAAypB,KAEA,IAAAE,EAAAD,EAAAhwB,KAAAoR,eAEA,MAAA6e,EAAApT,MACA,KAAAA,IAAAoT,EAAApT,IACA,KAAAjN,IAAAqgB,EAAArgB,KAEA,MAAAqgB,EAAAC,SACA,KAAAA,SAAAD,EAAAC,SAAA9X,QAAA,UAEA,KAAA8X,SAAA,mBAEA,KAAAme,gBAAApe,EAAAqK,SAEA,gBAAAvK,GACA,IAAAgD,EAAAna,GAAAoa,MAAAC,SAAA,UAAAzV,SACA,IAAA4U,EAAA,KACA5S,EAAA,GAEA,GACA,MAAA0T,EAAA,CACAlM,OAAA+I,EACAoD,UAAA,CAAAC,GAAAL,GACAX,aAEAiB,QAAA7N,QAAAC,QAAA,CACAC,MAAAnU,GACAoU,UAAAuN,IAEA1T,IAAA+S,OACAc,EAAArzB,KAAAuR,aAAAggB,OAEAa,EAAAiB,EAAArzB,KAAAuR,aAAA6gB,gBACA,MAAAA,GAGA,MAAA5S,EAAAhf,OAAA,CACAuyB,EAAAna,GAAAoa,MAAAC,SAAA,WAAAzV,SACA4U,EAAA,KACA5S,EAAA,GAEA,GACA,MAAA0T,EAAA,CACAlM,OAAA+I,EACAoD,UAAA,CAAAC,GAAAL,GACAX,aAEAiB,QAAA7N,QAAAC,QAAA,CACAC,MAAAnU,GACAoU,UAAAuN,IAEA1T,IAAA+S,OACAc,EAAArzB,KAAAuR,aAAAggB,OAEAa,EAAAiB,EAAArzB,KAAAuR,aAAA6gB,gBACA,MAAAA,GAIA,MAAA5S,EAAAhf,OAAA,CACAuyB,EAAAna,GAAAoa,MAAAC,SAAA,YAAAzV,SACA4U,EAAA,KACA5S,EAAA,GAEA,GACA,MAAA0T,EAAA,CACAlM,OAAA+I,EACAoD,UAAA,CAAAC,GAAAL,GACAX,aAEAiB,QAAA7N,QAAAC,QAAA,CACAC,MAAAnU,GACAoU,UAAAuN,IAEA1T,IAAA+S,OACAc,EAAArzB,KAAAuR,aAAAggB,OAEAa,EAAAiB,EAAArzB,KAAAuR,aAAA6gB,gBACA,MAAAA,GAKA,IAAAyP,EAAA,GACAC,EAAA,GACAW,EAAA,GACAV,EAAA,GACA0L,EAAA,GACAC,EAAA,GACAlhC,EAAA,EAEA,QAAA43B,KAAA5kB,EAAA,CACA,IAAAmwB,EAAA/2B,GACAoa,IAAAxT,EAAA4kB,GAAAjR,WACA4B,GAAA,KAAA7E,UACA1S,OAAA,iBACAqkB,EAAA/gC,KAAA,CAAA6uC,EAAAnwB,EAAA4kB,GAAAE,UACAxC,EAAAhhC,KAAA,CAAA6uC,EAAAnwB,EAAA4kB,GAAAG,UACA9B,EAAA3hC,KAAA,CAAA6uC,EAAAnwB,EAAA4kB,GAAAI,UACAzC,EAAAjhC,KAAA,CAAA6uC,EAAAnwB,EAAA4kB,GAAAlc,SAEAulB,EAAA3sC,KAAA,CAAA6uC,EAAAnwB,EAAA4kB,GAAAwL,UACAlC,EAAA5sC,KAAA,CAAA6uC,EAAAnwB,EAAA4kB,GAAAyL,SACArjC,EAAAgT,EAAA4kB,GAAAlc,OAEA,KAAA2Z,gBACA,KAAAC,gBACA,KAAAW,gBACA,KAAAV,eACA,KAAA0L,gBACA,KAAAC,eACA,KAAAlhC,eAEA,kBACA,MAAAsjC,QAAAtqB,QAAAC,QAAA,CACAC,MAAAzS,GACA0S,UAAA,CAAArf,GAAA,KAAAunC,YAEA,KAAAC,kBAAAgC,EAAA9vC,KAAAiT,sBAGA,yBACA,KAAAi7B,cAAA,GACA,QAAA5tC,EAAA,EAAAA,GAAA,EAAAA,IAAA,CACA,IAAAsqB,EAAAhS,GAAAoa,MAAAC,SAAA3yB,EAAA,QAAAkd,OAAA,cAEA,MAAA0wB,QAAA1oB,QAAAC,QAAA,CACAC,MAAA1U,GACA2U,UAAA,CAAAoqB,WAAAnlB,KAEA,KAAAsjB,cAAA,KAAAA,cAAA3b,OACA2b,EAAAluC,KAAAgR,oBAAAugB,SAKAye,mBAAA/qC,GAEA,KAAA0lC,SAAA1lC,EAAA+hB,OAAA,KAAA/hB,EAAAlB,KACA,KAAAksC,eAAAhrC,EAAA+hB,SAEAkpB,uBACA,KAAAtC,oBAEA,6BAAA9V,GACA,IAAA/E,EAAAna,GACAoa,MACAS,QACAR,SAAA,YACAzV,OAAA,cACA,IAAAoW,EAAA,GACAxB,EAAA,KACA,GACA,MAAAyB,QAAArO,QAAAC,QAAA,CACAC,MAAA3T,GACA4T,UAAA,CACAZ,GAAA,CAAAiT,GAAAF,GACAkB,UAAAjG,EACAX,eAGAwB,IAAArB,OACAsB,EAAA7zB,KAAA+R,iCAAAwf,OAEAa,EAAAyB,EAAA7zB,KAAA+R,iCAAAqgB,gBACA,MAAAA,GAEA,IAAAqJ,EAAA,GACA,QAAAn7B,EAAA,EAAAA,EAAAszB,EAAApzB,OAAAF,IAAA,CACA,IAAAo7B,EAAA,CACA7e,IAAA+W,EAAAtzB,GAAAuc,IACAjN,IAAAgkB,EAAAtzB,GAAAsP,IACA+rB,OAAA,IAAA/H,EAAAtzB,GAAAi4B,cAEAkD,EAAA36B,KAAA46B,GAEA,OAAAD,GAEAG,UAAA32B,GACA,SAAAA,GAEA,sBAAAyhB,EAAAzhB,EAAAuJ,EAAAspB,GAEA,SAAA7yB,IACA,KAAAmJ,KAAAsY,GAAAmV,0BAAA,KAAAC,iBACAhE,IAGA,WAAA7yB,IACA,KAAAmJ,KAAAsY,GAAA8R,yBACA,KAAAuD,wBAAAjE,IAEA,WAAA7yB,IACA,KAAAmJ,KAAAsY,GAAAjY,cAAA,KAAAutB,WAAAlE,IAEA,OAAA7yB,IACA,KAAAmJ,KAAAsY,GAAAvgB,UAAA,KAAA81B,uBAAAnE,IAEA,KAAA1pB,KAAAsY,GAAA1gB,OAAAf,EACA,KAAAi3B,gBAIA,mBAAAxV,EAAAzhB,EAAAuJ,EAAAspB,GAGA,KAAA1nB,YAAAsW,GAAA1gB,QAAAf,EACA,KAAAmL,YAAAsW,GAAA1gB,OAAA,QAGA,WAAAf,IACA,KAAAmL,YAAAsW,GAAAhJ,WAAA1d,WACA,KAAAm8B,wBAAArE,IAEA,KAAA1nB,YAAAsW,GAAA1gB,OAAAf,GAEA,KAAAmL,YAAAsW,GAAApgB,IAAA,GAGA81B,aAAA1V,EAAAzhB,GACA,KAAAkb,eAAAuG,GAAA1gB,OAAAf,EACA,KAAAkb,eAAAuG,GAAApgB,IAAA,GAGA+1B,iBAAA3V,EAAAzhB,GACA,KAAAmb,mBAAAsG,GAAA1gB,OAAAf,EACA,KAAAmb,mBAAAsG,GAAApgB,IAAA,GAGA,eAAAogB,EAAA1a,GAEA,IAAAA,EAAA2a,WAAA,OAQA,SALAC,QAAAC,KACA,CAAAthB,IAAAyG,EAAA6D,IAAAiX,MAAA,UACA,CAAAvhB,IAAA,SAAAyG,EAAA6D,IAAAiX,MAAA,YAGA,iBAAA9a,EAAA2a,WAKA,OAJA,KAAAvY,KAAAsY,GAAAK,cAAA,EACA,KAAA3Y,KAAAsY,GAAAhX,eAAA,OACA,KAAAtB,KAAAsY,GAAApgB,IAAA,GAKA,MAAA0gB,EAAAhb,EAAAgb,OACAC,EAAAjb,EAAAkb,WAAA,MACAC,EAAAnb,EAAAmb,MACApC,EAAA/Y,EAAA+Y,GACAqC,EAAApb,EAAAob,GACA5Y,EAAAxC,EAAAwC,OACAqB,EAAA7D,EAAAkb,WAAA,YACAG,EAAA,KAAA3e,KACAoC,EAAAkB,EAAA2a,WACAW,EAAAtb,EAAAkb,WAAA,SACArK,EAAA7Q,EAAA6Q,IACAjN,EAAA5D,EAAA4D,IACA2X,EAAA,CACAP,SACAC,KACAE,QACApC,KACAqC,KACA5Y,SACAqB,MACAwX,YACAvc,QACAwc,QACAzK,MACAjN,OAEA4V,QAAAC,QAAA,CACAC,MAAAhS,GACAiS,UAAA,CAAAI,MAAAwB,KAMA,MAAAvb,EAAA2a,WACA,OAAA3a,EAAA2a,aAEA,KAAAvY,KAAAsY,GAAAK,cAAA,EACA,KAAA3Y,KAAAsY,GAAApgB,IAAA,IAGAkhB,eAAAd,EAAA1a,GAEA,IAAAA,EAAA2a,WAAA,OACA,MAAAK,EAAAhb,EAAAgb,OACAC,EAAAjb,EAAAib,GACAE,EAAAnb,EAAAmb,MACApC,EAAA/Y,EAAA+Y,GACAqC,EAAApb,EAAAob,GACA5Y,EAAAxC,EAAAwC,OACAqB,EAAA7D,EAAA6D,IACAwX,EAAA,KAAA3e,KACAoC,EAAAkB,EAAAyb,WACAH,EAAAtb,EAAAsb,MACAzK,EAAA7Q,EAAA6Q,IACAjN,EAAA5D,EAAA4D,IACA2X,EAAA,CACAP,SACAC,KACAE,QACApC,KACAqC,KACA5Y,SACAqB,MACAwX,YACAvc,QACAwc,QACAzK,MACAjN,OAEA4V,QAAAC,QAAA,CACAC,MAAAhS,GACAiS,UAAA,CAAAI,MAAAwB,KAEA,KAAAnZ,KAAAsY,GAAAgB,WAAA,EACA,KAAAtZ,KAAAsY,GAAAhX,eAAA,EACA,KAAAtB,KAAAsY,GAAApgB,IAAA,KCv9E8U,MCO1U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,WClBgI,W,IAAa,OAAE,EAAK,QAAU,G,MAAQ,IAAD,KAAC,yB,YAAS,Q,MAAY,CAAM,SAAS,KAAwB,YAACO,MAAG,CAAC,MAAQ,O,IAAkB,KAAqB,QAAE,wB,GAAQ5B,CAAiBgH,OAAS,SAAUqC,GAAMxH,OAAIqpC,EAAK7hC,aAAsB,OAAIlH,MAAG,OAAkBD,SAAM,YAAC,OAAY4d,GAAM,WAAC,U,EAA2B,OAAWqrB,C,MAAU,CAAE,Y,GAAQnrC,CAAoBgH,OAAS,SAAUqC,GAAMxH,OAAI+5B,EAAO,aAA0B,OAAIz5B,MAAG,EAAO,QAAED,SAAM,YAAC,UAAe,GAAe,wBAAsDK,SAAW,C,MAAE,CAAiB,OAAQ,OAAO,e,CAAQ,SAAY,EAAG,GAAG,+B,YAAC,CAAoB,OAAO,QAAC,cAAuBL,MAAM,CAAC,OAAS,CAACgc,QAAU,aAAcrc,EAAsB,SAAuC,kBAAoB,C,MAAMkF,CAAQ7E,IAAM,Y,YAAY6E,EAAK6Q,sB,EAA4B,KAAQ,oB,OAAS,cAAG,SAAG/V,MAAQA,CAAkC,UAAU,GAAU,IAAC,OAACvB,OAAUe,IAAGa,MAAM,gB,EAA0D,KAAQ,0B,OAAS,cAAG,SAAGL,MAAQA,CAA4C,UAAU,GAAW,sBAACvB,OAAK,IAAC4B,MAAM,gB,EAAgE,KAAQ,oC,OAAS,cAAG,MAAG,MAAM,CACr0C,yCACGO,WAEJ,MAAiBA,iB,6BCsKjBkR,GAAAC,EAAA,QAKAG,GAAA,CACA,uEACA,iEACA,gEACA,6DACA,4DACA,2DACA,4DACA,4DACA,4DACA,2DACA,yDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,sDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,oDACA,sDACA,uDACA,uDACA,oDACA,qDACA,uDACA,uDACA,uDACA,uDACA,qDACA,oDACA,uDACA,uDACA,sDACA,oDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,sDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,yDACA,2DACA,4DACA,4DACA,4DACA,2DACA,4DACA,6DACA,gEACA,iEACA,wEAEe,IACf9Q,MAAA,SACA2B,UACA,KAAAumC,YAEAlmC,WAAA,GAGAlK,OACA,OACAqwC,SAAA,GACAC,OAAA,GACAhC,eAAA,KACAC,iBAAA,KACAgC,aAAA,GACAC,cAAA,GACAC,qBAAA,GACAN,KAAA,EACAtP,QAAA,yBACArkB,UAAA,IACAC,WAAA,IACA3N,aAAA,CACAwP,MAAA,CACAC,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAC,MAAA,CACAR,WAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,MAAA,GACAC,gBAAA,EACAC,YAAA,GAEAE,OAAA,CACA9c,EAAA,EACA4C,EAAA,EACAuR,EAAA,EACAnR,EAAA,EACA+Z,IAAA,GAEA3P,OAAA,IACA4P,WAAA,GAEA6F,GAAA,CACA,yBACA,wBACA,uBACA,iBACA,uBACA,0BACA,+BACA,4BACA,qBACA,mCACA,mCACA,6BACA,6BACA,+BACA,oCACA,+BACA,6BACA,gCACA,0BACA,wBACA,wBACA,gCACA,iCACA,0BACA,2BACA,uBACA,uBACA,0BACA,+BACA,oBACA,8BACA,0BACA,8BACA,8BACA,wBACA,gCACA,uBACA,mBACA,0BACA,gCACA,wCACA,mBACA,4BACA,gBACA,+BACA,qCACA,qCACA,qCACA,wBACA,sBACA,kCACA,kCACA,+BACA,0BACA,8BACA,8BACA,4BACA,0CACA,qCACA,mCACA,0CACA,6BACA,2BACA,0BACA,gCACA,8BACA,0BACA,2BACA,kBACA,6BACA,wBACA,2BACA,2BACA,+BACA,2BACA,0BACA,0BACA,sBACA,wBACA,2BACA,8BACA,iBACA,qCACA,uBACA,2BACA,oBACA,2BACA,0BACA,sBACA,4BACA,sBACA,4BACA,wBACA,4BACA,qBACA,uBACA,0BACA,wBACA,sBACA,yBACA,oBACA,wBACA,iCACA,4BACA,gCACA,iCACA,+BACA,sBACA,gCACA,uBACA,uBACA,sBACA,uBACA,uBACA,sBACA,wBACA,mCACA,mCACA,qBACA,qBACA,2BACA,uBACA,wBACA,yBACA,yBACA,uBACA,yBACA,4BACA,+BACA,yBACA,wBACA,uBACA,qBACA,gCACA,mCACA,gBACA,iBACA,0BACA,wBACA,qBACA,iCACA,yBACA,sBACA,2BACA,0BACA,0BACA,4BACA,+BACA,iCACA,uBACA,0BACA,uBACA,0BACA,wBACA,0BACA,cACA,sBACA,yBACA,wBACA,wBACA,6BACA,0BACA,sBACA,0BACA,oBACA,0BACA,8BACA,0BACA,2BACA,yBACA,yBACA,6BACA,oBACA,2BACA,yBACA,4BACA,2BACA,wBACA,qBACA,sBACA,kCACA,0BACA,oCACA,0BACA,oBACA,gBACA,2BACA,kBACA,0BACA,gCACA,yBACA,0BACA,2BACA,4BACA,sBACA,yBACA,wBACA,gCACA,0BACA,kBACA,6BACA,0BACA,uBACA,wBACA,sBACA,mCACA,2BACA,4BACA,6BACA,iCACA,uCACA,qBACA,uBACA,uBACA,oBACA,uBACA,4BACA,wBACA,8BACA,0BACA,wBACA,0BACA,sBACA,2BACA,2BACA,qBACA,4BACA,uBACA,0BACA,gCACA,2CACA,cACA,uBACA,6BACA,2BACA,qBACA,6BACA,6BACA,yBACA,2BACA,0BACA,oCACA,uBACA,iCACA,+BACA,0BACA,0BACA,uBACA,sBACA,iBACA,yBACA,8BACA,8BACA,uBACA,4BACA,2BACA,uBACA,6BACA,kBACA,yBACA,wBACA,yBACA,2BACA,oBACA,8BACA,6BACA,0BACA,2BACA,sBACA,0BACA,0BACA,8BACA,0BACA,2BACA,qBACA,sBACA,gCACA,yBACA,uBACA,4BACA,iCACA,iCACA,2BACA,4BACA,4BACA,oBACA,qBACA,+BACA,0BACA,kBACA,0BACA,8BACA,6BACA,yBACA,0BACA,wBACA,2BACA,qBACA,qBACA,6BACA,mBACA,4BACA,2BACA,yCACA,oCACA,gCACA,uBACA,4BACA,4BACA,wBACA,0BACA,uBACA,8BACA,uBACA,2BACA,sBACA,sBACA,uBACA,0BACA,aACA,4BACA,0BACA,mBACA,qBACA,uBACA,oBACA,2BACA,uBACA,uBACA,wBACA,0BACA,wBACA,2BACA,8BACA,6BACA,6BACA,kCACA,4BACA,yBACA,2BACA,2BACA,oBACA,2BACA,kBACA,uBACA,sBACA,mBACA,yBACA,8BACA,oCACA,oBACA,wBACA,qBACA,sBACA,mBACA,kCACA,yBACA,4BACA,8BACA,uBACA,sBACA,kCACA,kCACA,4BACA,oCACA,sCACA,gCACA,aACA,kBACA,YACA,iCACA,4BACA,iCACA,oCACA,8BACA,0BACA,kCACA,0BACA,8BACA,2BACA,6BACA,mCACA,6BACA,kCACA,kCACA,4BACA,iCACA,8BACA,+BACA,2BACA,sBACA,2BACA,sBACA,qBACA,0BACA,6BACA,4BACA,2BACA,6BACA,iCACA,uBACA,gCACA,uBACA,yBACA,uBACA,uBACA,kCACA,0BACA,sBACA,+BACA,wBACA,wBACA,sBACA,8BACA,0BACA,0BACA,kCACA,mCACA,kCACA,8BACA,0BACA,0BACA,gCACA,2BACA,4BACA,yBACA,gBACA,uBACA,iCACA,4BACA,qBACA,yBACA,wBACA,oBACA,+BACA,qCACA,qCACA,2BACA,yBACA,4BACA,yBACA,uBACA,qBACA,gBACA,yBACA,yBACA,0BACA,0BACA,wBACA,0BACA,2BACA,8BACA,mCACA,6BACA,+BACA,iCACA,mCACA,mBACA,yBACA,0BACA,mBACA,uBACA,uBACA,yBACA,uBACA,wBACA,oBACA,yBACA,sBACA,sBACA,2BACA,2BACA,uBACA,yCACA,8CACA,qBACA,qBACA,2BACA,2BACA,4BACA,0BACA,0BACA,gCACA,6BACA,2BACA,6BACA,+BACA,4BACA,6BACA,sBACA,+BACA,mCACA,gCACA,wCACA,aACA,oBACA,kCACA,2BACA,6BACA,iCACA,gCACA,wBACA,qBACA,sBACA,2BACA,oCACA,4BACA,oBACA,8BACA,uCACA,uBACA,4BACA,4BACA,2BACA,4BACA,sBACA,kCACA,+BACA,yBACA,qBACA,uBACA,8BACA,qBACA,uBACA,iCACA,qBACA,6BACA,6BACA,8BACA,0BACA,uBACA,0BACA,0BACA,wBACA,8BACA,wBACA,6BACA,0BACA,yBACA,qCACA,qCACA,0BACA,6BACA,uBACA,yBACA,wBACA,uBACA,yBACA,yBACA,2BACA,0BACA,+BACA,0BACA,iCACA,yBACA,oCACA,0BACA,6BACA,4BACA,sBACA,4BACA,2BACA,8BACA,6BACA,0BACA,4BACA,sBACA,uBACA,yBACA,qBACA,0BACA,kCACA,8BACA,yBACA,uBACA,iCACA,6BACA,sBACA,yBACA,6BACA,8BACA,oBACA,gCACA,wBACA,wBACA,2BACA,2BACA,4BACA,8BACA,oCACA,2BACA,uBACA,yBACA,0BACA,iCACA,gCACA,+BACA,4BACA,wBACA,0BACA,2BACA,6BACA,0BACA,eACA,+BACA,wBACA,2BACA,uBACA,8BACA,wBACA,6BACA,yBACA,qCACA,0BACA,sBACA,uBACA,gCACA,2BACA,oBACA,6BACA,6BACA,oBACA,oBACA,yBACA,yBACA,iBACA,4BACA,4BACA,8BACA,8BACA,gCACA,mCACA,gCACA,+BACA,0BACA,4BACA,yBACA,uBACA,wBACA,wBACA,0BACA,qBACA,uBACA,2BACA,sBACA,wBACA,2BACA,uBACA,uCACA,0BACA,gCACA,6BACA,0BACA,iCACA,iBACA,gCACA,qBACA,mBACA,8BACA,kCACA,2BACA,iCACA,yBACA,8BACA,oCACA,0BACA,iCACA,yBACA,uBACA,sBACA,yBACA,iCACA,2BACA,gCACA,gCACA,mCACA,6BACA,iCACA,8BACA,oBACA,iCACA,kCACA,8BACA,iCACA,kCACA,iCACA,0BACA,oCACA,uBACA,4BACA,kCACA,6BACA,mCACA,oCACA,mCACA,6BACA,kCACA,2BACA,eACA,8BACA,4BACA,4BACA,yBACA,kBACA,gCACA,oCACA,mCACA,yBACA,+BACA,uCACA,kCACA,gCACA,sCACA,wCACA,+BACA,uCACA,8BACA,yBACA,2BACA,qBACA,6BACA,kCACA,yCACA,qCACA,wBACA,uBACA,kCACA,6BACA,iCACA,0BACA,kCACA,oCACA,6BACA,6BACA,6BACA,4BACA,oBACA,8BACA,gBACA,2BACA,uBACA,+BACA,8BACA,oBACA,uBACA,yBACA,uBACA,0BACA,0BACA,+BACA,0BACA,qBACA,wBACA,wBACA,yBACA,wBACA,wBACA,wBACA,6BACA,4BACA,wBACA,uBACA,mBACA,oBACA,uBACA,iCACA,iCACA,sBACA,uBACA,uBACA,2BACA,2BACA,+BACA,0BACA,uBACA,qBACA,yBACA,yBACA,wBACA,8BACA,4BACA,8BACA,yBACA,gCACA,+BACA,qBACA,0BACA,2BACA,2BACA,yBACA,0BACA,2BACA,oCACA,yBACA,gCACA,4BACA,kCACA,iCACA,uBACA,yBACA,6BACA,gCACA,wBACA,kCACA,oCACA,6BACA,gCACA,0BACA,sBACA,8BACA,mCACA,2BACA,wBACA,0BACA,8BACA,0BACA,0BACA,iCACA,yCACA,yCACA,iCACA,mCACA,oCACA,uBACA,6BACA,wBACA,wBACA,+BACA,yBACA,yBACA,yBACA,wBACA,wBACA,4BACA,sBACA,0BACA,qBACA,gCACA,gCACA,+BACA,8BACA,sBACA,8BACA,0BACA,qBACA,2BACA,gCACA,4BACA,4BACA,2BACA,qBACA,oBACA,mCACA,2BACA,+BACA,kCACA,kCACA,wBACA,2BACA,+BACA,2BACA,YACA,wBACA,qBACA,0BACA,uBACA,8BACA,0BACA,kBACA,iBACA,mCACA,iCACA,2BACA,gCACA,kCACA,+BACA,gCACA,oCACA,iCACA,yBACA,wBACA,+BACA,8BACA,qCACA,iCACA,gCACA,+BACA,yBACA,wBACA,6BACA,kCACA,8BACA,+BACA,4BACA,4BACA,6BACA,8BACA,wBACA,qBACA,wBACA,oBACA,uBACA,yBACA,yBACA,sBACA,2BACA,oBACA,gCACA,iCACA,+BACA,sBACA,gCACA,uBACA,mBACA,+BACA,6BACA,mBACA,6BACA,sBACA,wBACA,sBACA,+BACA,mCACA,2BACA,2BACA,uCACA,sCACA,gCACA,mBACA,8BACA,kCACA,4BACA,6BACA,yBACA,yBACA,qCACA,8BACA,0BACA,gCACA,wBACA,+BACA,yBACA,iCACA,8BACA,yBACA,0BACA,qCACA,wBACA,sBACA,gCACA,wBACA,sBACA,yBACA,2BACA,2BACA,0BACA,4BACA,sCACA,2BACA,0BACA,0BACA,qCACA,eACA,+BACA,iCACA,4BACA,4BACA,gCACA,+BACA,wBACA,qBACA,sBACA,2BACA,uBACA,0BACA,kBACA,8BACA,6BACA,gCACA,gCACA,kCACA,8BACA,8BACA,qBACA,0BACA,yBACA,4BACA,oBACA,+BACA,0BACA,8BACA,0BACA,uBACA,+BACA,iCACA,8BACA,oCACA,uCACA,4BACA,0BACA,sBACA,wBACA,qBACA,qBACA,sBACA,qBACA,gCACA,8BACA,wBACA,8BACA,oBACA,wBACA,qBACA,mBACA,oBACA,4BACA,4BACA,4BACA,2BACA,2BACA,4BACA,yBACA,4BACA,qBACA,uBACA,sBACA,8BACA,wBACA,yBACA,8BACA,0BACA,8BACA,gCACA,uCACA,+BACA,uBACA,yBACA,uBACA,qBACA,wBACA,uBACA,uBACA,uBACA,oCACA,wBACA,4BACA,0BACA,+BACA,4BACA,8BACA,6BACA,wBACA,0BACA,2BACA,wBACA,4BACA,4BACA,2BACA,yBACA,iBACA,4BACA,yBACA,0BACA,oBACA,sBACA,uBACA,wBACA,wBACA,0BACA,gCACA,gCACA,0BACA,8BACA,uBACA,6BACA,6BACA,iBACA,4BACA,wBACA,0BACA,sBACA,sBACA,mBACA,6BACA,qBACA,wBACA,iCACA,6BACA,0BACA,+BACA,mCACA,2BACA,0BACA,0BACA,2BACA,kBACA,yBACA,sBACA,yBACA,8BACA,8BACA,0BACA,+BACA,6BACA,6BACA,sBACA,wBACA,+BACA,4BACA,wBACA,0BACA,wBACA,uBACA,yBACA,4BACA,yBACA,2BACA,oBACA,+BACA,iCACA,yBACA,mCACA,uCACA,+BACA,uBACA,0BACA,2BACA,uBACA,gCACA,gCACA,+BACA,0BACA,yBACA,0BAEA5B,UACA,+GACAJ,mBACA,oIAGAzJ,MAAA,GACAnR,QAAA,CACA,cAAAuoC,GACA,IAAAh5B,EAAAkB,GAAA83B,EAAA,cAAAP,OACAQ,EAAAnoB,KAAA+D,MAAA,GAAA7U,EAAA,IAIA,OAHAi5B,EAAA,KAAAA,EAAA,IACA,GAAAA,MAAA,GAEAA,GAEArmB,cAAAC,GACA,MAAAC,EAAAD,EAAAnS,QAAA,UACAqS,EAAAD,EAAApS,QAAA,SAEA,OAAAqS,GAEA,iBACA,IAAAmmB,EAAA,KAAA/P,QAAA5oB,MAAA,KACAo4B,EAAAO,EAAA,YAAAT,KAEA,MAAAU,QAAArrB,QAAAC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,MAAO,SAAU,GAA4DK,OAAM,+CAAe,CAACC,EAAG,OAAO,CAAED,MAAM,CAAC,KAAO,KAAkBN,CAAE,EAAC,kC,YAAS,O,MAAiB,CAA8C,eAAKC,EAAIW,GAAGX,IAAM,EAAI,GAAG,gBAAkB,MAAM,IAAI,IAAI,aAAa,GAAGkF,OAAK4D,CAAuBzI,MAAM,CAAC,KAAO,O,CAAqB,SAAQ,CAAY,MAAC,CAAG,MAAC,iB,GAA0BL,CAClf,kBAAC,qC,CAAiE,KAAM,EAAG,kE,MAAC,CAAkB,KAAO,GAAc,gBAAG,MAAC,c,GAA0B,CAAyE,kBAAC,8EAAoD,GAAI,GAAE,EAAEA,GAAG,EAAI,EAAC,8BAC3V,OACGY,QAEKO,OAAQP,S,+KC8HjBkR,GAAAC,EAAA,QACAG,GAAA,CACA,uEACA,iEACA,gEACA,6DACA,4DACA,2DACA,4DACA,4DACA,4DACA,2DACA,yDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,sDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,oDACA,sDACA,uDACA,uDACA,oDACA,qDACA,uDACA,uDACA,uDACA,uDACA,qDACA,oDACA,uDACA,uDACA,sDACA,oDACA,uDACA,uDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,sDACA,sDACA,sDACA,uDACA,sDACA,sDACA,uDACA,uDACA,uDACA,qDACA,uDACA,sDACA,uDACA,qDACA,uDACA,uDACA,uDACA,uDACA,uDACA,uDACA,qDACA,uDACA,uDACA,uDACA,yDACA,2DACA,4DACA,4DACA,4DACA,2DACA,4DACA,6DACA,gEACA,iEACA,wEAEAF,GAAAD,EAAA,QAAAC,IACAC,GAAAF,EAAA,QAAAE,KAKA,IAAAG,GAAA,KACAC,GAAA,KACe,QACfpV,KAAA,WACAmE,MAAA,iBACAS,UAEA,SAAAD,MACA5C,QAAAuT,IAAA,mBACAnV,WAAA,gBACA,KA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","file":"js/app.c1956e29.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"polyfills-core-js\":\"polyfills-core-js\",\"polyfills-css-shim\":\"polyfills-css-shim\",\"polyfills-dom\":\"polyfills-dom\"}[chunkId]||chunkId) + \".\" + {\"chunk-04507dbb\":\"f88ffd26\",\"chunk-0b4d2404\":\"55854189\",\"chunk-0b56efa5\":\"44502ac7\",\"chunk-0b5842b2\":\"93529172\",\"chunk-177da74d\":\"cd292212\",\"chunk-18eee2f8\":\"598027a0\",\"chunk-196a4a46\":\"848bb2da\",\"chunk-1aad595c\":\"4d0b593c\",\"chunk-2ce47f8c\":\"f838dd9a\",\"chunk-2d0b308c\":\"510c9663\",\"chunk-2d0b959d\":\"0fe99e36\",\"chunk-2d0dae66\":\"f086fa49\",\"chunk-2d0e9704\":\"102db839\",\"chunk-2d207ac9\":\"e04643d0\",\"chunk-2d21e3f3\":\"a55fccc9\",\"chunk-2d2214a0\":\"d38ba0fd\",\"chunk-2d22496d\":\"d6e7e18f\",\"chunk-2d45f43e\":\"8bde38f3\",\"chunk-32a2fc82\":\"b42646ae\",\"chunk-36464361\":\"54daa6fc\",\"chunk-3aa6c4fc\":\"4c5656db\",\"chunk-55ee6439\":\"17fbd7cd\",\"chunk-5785b65a\":\"d94cbf85\",\"chunk-740e993c\":\"ce5c93f3\",\"chunk-759593db\":\"8cc2fa84\",\"chunk-7e515f7a\":\"19109bcb\",\"chunk-968d5460\":\"2bf4e20b\",\"chunk-b06965cc\":\"682f38d1\",\"chunk-c9150256\":\"b4a4c5cf\",\"polyfills-core-js\":\"0bd5621a\",\"polyfills-css-shim\":\"080c71f5\",\"polyfills-dom\":\"ed66f224\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Haikumarine.vue?vue&type=style&index=0&id=d8d5fa4e&prod&lang=css\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=6e659077&prod&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Landing.vue?vue&type=style&index=0&id=edecce54&prod&lang=css\"","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-ps\": \"4c98\",\n\t\"./ar-ps.js\": \"4c98\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku-kmr\": \"7558\",\n\t\"./ku-kmr.js\": \"7558\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Haikubox.vue?vue&type=style&index=0&id=75b0b008&prod&lang=css\"","var map = {\n\t\"./amplify-amazon-button_5.entry.js\": [\n\t\t\"7c7c\",\n\t\t\"chunk-7e515f7a\"\n\t],\n\t\"./amplify-auth-container.entry.js\": [\n\t\t\"ca5a\",\n\t\t\"chunk-2d2214a0\"\n\t],\n\t\"./amplify-auth-fields_9.entry.js\": [\n\t\t\"625d\",\n\t\t\"chunk-04507dbb\"\n\t],\n\t\"./amplify-authenticator.entry.js\": [\n\t\t\"0161\",\n\t\t\"chunk-36464361\"\n\t],\n\t\"./amplify-button_3.entry.js\": [\n\t\t\"8e12\",\n\t\t\"chunk-2d0e9704\"\n\t],\n\t\"./amplify-chatbot.entry.js\": [\n\t\t\"c52b\",\n\t\t\"chunk-3aa6c4fc\"\n\t],\n\t\"./amplify-checkbox.entry.js\": [\n\t\t\"e17b\",\n\t\t\"chunk-2d22496d\"\n\t],\n\t\"./amplify-confirm-sign-in_7.entry.js\": [\n\t\t\"46a4\",\n\t\t\"chunk-5785b65a\"\n\t],\n\t\"./amplify-container.entry.js\": [\n\t\t\"273d\",\n\t\t\"chunk-2d0b308c\"\n\t],\n\t\"./amplify-federated-buttons_2.entry.js\": [\n\t\t\"3fb1\",\n\t\t\"chunk-55ee6439\"\n\t],\n\t\"./amplify-federated-sign-in.entry.js\": [\n\t\t\"b3e9\",\n\t\t\"chunk-1aad595c\"\n\t],\n\t\"./amplify-form-field_4.entry.js\": [\n\t\t\"87dc\",\n\t\t\"chunk-196a4a46\"\n\t],\n\t\"./amplify-greetings.entry.js\": [\n\t\t\"00ee4\",\n\t\t\"chunk-759593db\"\n\t],\n\t\"./amplify-icon-button.entry.js\": [\n\t\t\"6e23\",\n\t\t\"chunk-2d0dae66\"\n\t],\n\t\"./amplify-icon.entry.js\": [\n\t\t\"4908\",\n\t\t\"chunk-2d45f43e\"\n\t],\n\t\"./amplify-link.entry.js\": [\n\t\t\"a213\",\n\t\t\"chunk-2d207ac9\"\n\t],\n\t\"./amplify-nav_2.entry.js\": [\n\t\t\"4689\",\n\t\t\"chunk-18eee2f8\"\n\t],\n\t\"./amplify-photo-picker.entry.js\": [\n\t\t\"5693\",\n\t\t\"chunk-0b56efa5\"\n\t],\n\t\"./amplify-picker.entry.js\": [\n\t\t\"82b0\",\n\t\t\"chunk-0b5842b2\"\n\t],\n\t\"./amplify-radio-button_3.entry.js\": [\n\t\t\"12b1\",\n\t\t\"chunk-c9150256\"\n\t],\n\t\"./amplify-s3-album.entry.js\": [\n\t\t\"4427\",\n\t\t\"chunk-968d5460\"\n\t],\n\t\"./amplify-s3-image-picker.entry.js\": [\n\t\t\"a84e\",\n\t\t\"chunk-177da74d\"\n\t],\n\t\"./amplify-s3-image.entry.js\": [\n\t\t\"f2ca\",\n\t\t\"chunk-32a2fc82\"\n\t],\n\t\"./amplify-s3-text-picker.entry.js\": [\n\t\t\"fca7\",\n\t\t\"chunk-740e993c\"\n\t],\n\t\"./amplify-s3-text.entry.js\": [\n\t\t\"c04b\",\n\t\t\"chunk-2ce47f8c\"\n\t],\n\t\"./amplify-select-mfa-type.entry.js\": [\n\t\t\"a1cb\",\n\t\t\"chunk-b06965cc\"\n\t],\n\t\"./amplify-sign-in-button.entry.js\": [\n\t\t\"3978\",\n\t\t\"chunk-0b4d2404\"\n\t],\n\t\"./amplify-tooltip.entry.js\": [\n\t\t\"d56b\",\n\t\t\"chunk-2d21e3f3\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = \"52ee\";\nmodule.exports = webpackAsyncContext;","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-app',{staticStyle:{\"background\":\"black\"}},[(_vm.authState != 'signedin')?_c('div',[_c('app-header',{on:{\"signIn\":() => {\n          _vm.signInClicked = !_vm.signInClicked;\n          _vm.authStateType = _vm.authStateTypeSignIn;\n        },\"signUp\":() => {\n          _vm.signInClicked = !_vm.signInClicked;\n          _vm.authStateType = _vm.authStateTypeSignUp;\n        }}})],1):_vm._e(),(_vm.authState === 'signedin' && _vm.user)?_c('div',[_c('app-signed-in-header',{attrs:{\"user\":_vm.user,\"email\":_vm.email},on:{\"goHome\":() => {\n          _vm.goHomeClicked = !_vm.goHomeClicked;\n        },\"toggleMap\":_vm.toggleMap,\"toggleBadge\":_vm.toggleBadge}})],1):_vm._e(),_c('v-main',[_c('router-view',{attrs:{\"goHomeClicked\":_vm.goHomeClicked,\"user\":_vm.user,\"email\":_vm.email,\"toggleMapClicked\":_vm.toggleMapClicked,\"toggleBadgeClicked\":_vm.toggleBadgeClicked}}),_c('div',{staticClass:\"auth\"},[(_vm.authState != 'signedin')?_c('div',[(_vm.signInClicked)?_c('v-card',{attrs:{\"flat\":\"\",\"tile\":\"\"}},[_c('amplify-auth-container',[_c('amplify-authenticator',{attrs:{\"username-alias\":\"email\",\"initial-auth-state\":_vm.authStateType}},[_c('amplify-sign-up',{attrs:{\"slot\":\"sign-up\",\"header-text\":\"Sign Up for Free\",\"username-alias\":\"email\"},domProps:{\"formFields\":_vm.formFields},slot:\"sign-up\"}),_c('amplify-sign-in',{attrs:{\"slot\":\"sign-in\",\"header-text\":\"Haikubox Sign In\"},domProps:{\"formFields\":_vm.signInFields},slot:\"sign-in\"})],1)],1),_c('v-card-subtitle',[_vm._v(\"By continuing, I agree to the Haikubox Terms of Service. \")]),_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/terms\"}},[_c('v-btn',[_vm._v(\"Terms \")])],1),_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/privacy\"}},[_c('v-btn',[_vm._v(\"Privacy Policy \")])],1)],1):_vm._e(),_c('v-img',{attrs:{\"height\":\"200px\",\"src\":\"https://haikubox-images.s3.amazonaws.com/web/partnerssm.jpeg\"}})],1):_vm._e()]),(_vm.authState != 'signedin')?_c('div',[_c('v-icon',{attrs:{\"small\":\"\",\"color\":\"white\"}},[_vm._v(\"mdi-copyright\")]),_c('span',{staticClass:\"white--text font-weight-light\"},[_vm._v(\"2024 Loggerhead Instruments, Inc\")])],1):_vm._e(),(_vm.authState === 'signedin' && _vm.user)?_c('div',[_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/\"}},[_c('amplify-sign-out')],1)],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-app-bar',{attrs:{\"app\":\"\",\"prominent\":\"\",\"color\":\"#fcb69f\",\"dark\":\"\",\"src\":\"https://haikubox-images.s3.amazonaws.com/web/birdSinging3.jpeg\",\"shrink-on-scroll\":\"\"}},[_c('v-toolbar-title',{staticClass:\"mx-2\",staticStyle:{\"cursor\":\"pointer\"},on:{\"click\":function($event){return _vm.goToHaikuboxDotCom()}}},[_vm._v(\"HAIKUBOX \")]),_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",on:{\"click\":function($event){return _vm.signUp()}}},[_vm._v(\"Sign Up\")]),_c('v-btn',{on:{\"click\":function($event){return _vm.signIn()}}},[_vm._v(\"Sign In \")]),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Help'),expression:\"'Help'\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\",\"href\":'https://haikubox.com/support-haikubox',\"target\":\"_blank\"}},[_c('v-icon',{attrs:{\"alt\":\"help\"}},[_vm._v(\"mdi-help-circle-outline\")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-app-bar\n    app\n    prominent\n    color=\"#fcb69f\"\n    dark\n    src=\"https://haikubox-images.s3.amazonaws.com/web/birdSinging3.jpeg\"\n    shrink-on-scroll\n  >\n    \n   <v-toolbar-title class=\"mx-2\" style=\"cursor: pointer\" @click=\"goToHaikuboxDotCom()\">HAIKUBOX\n    </v-toolbar-title>\n    \n\n    <v-spacer></v-spacer>\n\n    <v-btn class=\"mx-2\" @click=\"signUp()\">Sign Up</v-btn>\n\n    <v-btn @click=\"signIn()\">Sign In </v-btn>\n    <v-btn icon v-tooltip.bottom-start=\"'Help'\" :href=\"'https://haikubox.com/support-haikubox'\" target=\"_blank\">\n      <v-icon alt=\"help\">mdi-help-circle-outline</v-icon>\n    </v-btn>\n  </v-app-bar>\n</template>\n\n<script>\nexport default {\n  props: {},\n  methods: {\n    signIn() {\n      this.$emit(\"signIn\");\n    },\n    signUp() {\n      this.$emit(\"signUp\");\n    },\n    goToHaikuboxDotCom(){\n      // console.log(\"open haikubox.com\");\n      window.location.href = 'https://haikubox.com';\n    },\n  },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Header.vue?vue&type=template&id=2c9be3bd\"\nimport script from \"./Header.vue?vue&type=script&lang=js\"\nexport * from \"./Header.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-app-bar',{attrs:{\"app\":\"\",\"color\":\"#fcb69f\",\"dark\":\"\",\"src\":\"https://haikubox-images.s3.amazonaws.com/web/header.jpeg\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"aria-label\":\"Home\"},on:{\"click\":function($event){return _vm.goHome()}}},[_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/haikubox\",\"aria-hidden\":\"true\",\"tabindex\":\"-1\"}},[_c('v-icon',{attrs:{\"alt\":\"home\",\"aria-hidden\":\"true\"}},[_vm._v(\"mdi-home\")])],1)],1),_c('v-btn',{attrs:{\"icon\":\"\",\"aria-label\":\"Map\"},on:{\"click\":function($event){return _vm.toggleMap()}}},[_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/haikubox\",\"aria-hidden\":\"true\",\"tabindex\":\"-1\"}},[_c('v-icon',{attrs:{\"alt\":\"map\",\"aria-hidden\":\"true\"}},[_vm._v(\"mdi-map-search\")])],1)],1),_c('v-btn',{attrs:{\"icon\":\"\",\"aria-label\":\"Badges\"},on:{\"click\":function($event){return _vm.toggleBadge()}}},[_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/haikubox\",\"aria-hidden\":\"true\",\"tabindex\":\"-1\"}},[_c('v-icon',{attrs:{\"alt\":\"labeling badges\",\"aria-hidden\":\"true\"}},[_vm._v(\"mdi-trophy\")])],1)],1),_c('v-btn',{attrs:{\"icon\":\"\",\"aria-label\":\"Notifications\"}},[_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/notifications\",\"aria-hidden\":\"true\",\"tabindex\":\"-1\"}},[_c('v-icon',{attrs:{\"alt\":\"notifications\",\"aria-hidden\":\"true\"}},[_vm._v(\"mdi-bell\")])],1)],1),_c('v-btn',{attrs:{\"icon\":\"\",\"aria-label\":\"Favorites\"}},[_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/favorites\",\"aria-hidden\":\"true\",\"tabindex\":\"-1\"}},[_c('v-icon',{attrs:{\"alt\":\"favorites\",\"aria-hidden\":\"true\"}},[_vm._v(\"mdi-star\")])],1)],1),_c('v-spacer',{attrs:{\"tabindex\":\"-1\",\"aria-hidden\":\"true\"}}),(\n      (this.user != '60c05843-732f-4d66-a49a-bd39658cdacb') &\n      (this.user != '332232a5-51da-4f3e-a260-d83fdd959b12')\n    )?_c('v-btn',{attrs:{\"icon\":\"\",\"aria-label\":\"Account Settings\"}},[_c('router-link',{staticStyle:{\"text-decoration\":\"none\",\"color\":\"inherit\"},attrs:{\"to\":\"/settings\",\"aria-hidden\":\"true\",\"tabindex\":\"-1\"}},[_c('v-icon',{attrs:{\"alt\":\"account settings\"}},[_vm._v(\"mdi-account-circle\")])],1)],1):_vm._e(),_c('v-btn',{attrs:{\"icon\":\"\",\"href\":'https://haikubox.com/support-haikubox',\"target\":\"_blank\",\"aria-label\":\"Help\"}},[_c('v-icon',{attrs:{\"alt\":\"help link\"}},[_vm._v(\"mdi-help-circle-outline\")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-app-bar\n    app\n    color=\"#fcb69f\"\n    dark\n    src=\"https://haikubox-images.s3.amazonaws.com/web/header.jpeg\"\n  >\n    <!-- <v-toolbar-title class=\"mx-2\" style=\"cursor: pointer\" @click=\"goToHaikuboxDotCom()\">HAIKUBOX\n    </v-toolbar-title> -->\n\n    <v-btn icon @click=\"goHome()\" aria-label=\"Home\"> \n      <router-link style=\"text-decoration: none; color: inherit\" to=\"/haikubox\"  aria-hidden=\"true\"  tabindex=\"-1\"\n        ><v-icon alt=\"home\" aria-hidden=\"true\">mdi-home</v-icon>\n      </router-link>\n    </v-btn>\n\n    <v-btn icon @click=\"toggleMap()\"  aria-label=\"Map\">\n      <router-link style=\"text-decoration: none; color: inherit\" to=\"/haikubox\"  aria-hidden=\"true\"  tabindex=\"-1\">\n        <v-icon alt=\"map\" aria-hidden=\"true\">mdi-map-search</v-icon>\n      </router-link>\n    </v-btn>\n\n    <v-btn icon @click=\"toggleBadge()\"  aria-label=\"Badges\">\n      <router-link style=\"text-decoration: none; color: inherit\" to=\"/haikubox\"  aria-hidden=\"true\"  tabindex=\"-1\">\n        <v-icon alt=\"labeling badges\" aria-hidden=\"true\">mdi-trophy</v-icon>\n      </router-link>\n    </v-btn>\n\n    <v-btn icon   aria-label=\"Notifications\">\n      <router-link\n        style=\"text-decoration: none; color: inherit\"\n        to=\"/notifications\"\n        aria-hidden=\"true\"\n        tabindex=\"-1\"\n        ><v-icon alt=\"notifications\" aria-hidden=\"true\">mdi-bell</v-icon>\n      </router-link>\n    </v-btn>\n\n    <v-btn icon aria-label=\"Favorites\">\n      <router-link\n        style=\"text-decoration: none; color: inherit\"\n        to=\"/favorites\"\n        aria-hidden=\"true\"\n        tabindex=\"-1\"\n        ><v-icon alt=\"favorites\" aria-hidden=\"true\">mdi-star</v-icon>\n      </router-link>\n    </v-btn>\n\n    <v-spacer  tabindex=\"-1\"  aria-hidden=\"true\"></v-spacer>\n    <!-- <v-btn\n      icon\n      v-tooltip.bottom-start=\"'Label'\"\n    >\n      <router-link style=\"text-decoration: none; color: inherit;\" to=\"/label\"\n        ><v-icon>mdi-label-multiple-outline</v-icon></router-link\n      >\n    </v-btn> -->\n\n    <!-- <v-btn icon v-tooltip.bottom-start=\"'Marine'\">\n      <router-link style=\"text-decoration: none; color: inherit;\" to=\"/marine\"\n        ><v-icon>mdi-shark-fin</v-icon></router-link\n      >\n    </v-btn> -->\n\n\n    <v-btn\n      icon\n      v-if=\"\n        (this.user != '60c05843-732f-4d66-a49a-bd39658cdacb') &\n        (this.user != '332232a5-51da-4f3e-a260-d83fdd959b12')\n      \"\n        aria-label=\"Account Settings\"\n    >\n      <router-link style=\"text-decoration: none; color: inherit\" to=\"/settings\"  aria-hidden=\"true\"  tabindex=\"-1\"\n        ><v-icon alt=\"account settings\">mdi-account-circle</v-icon></router-link\n      >\n    </v-btn>\n\n    <v-btn icon :href=\"'https://haikubox.com/support-haikubox'\" target=\"_blank\" aria-label=\"Help\">\n      <v-icon alt=\"help link\">mdi-help-circle-outline</v-icon>\n    </v-btn>\n  </v-app-bar>\n</template>\n\n<script>\nexport default {\n  props: [\"user\", \"email\"],\n  data() {\n    return {\n    };\n  },\n  mounted() {\n\n  },\n  methods: {\n    goHome() {\n      // console.log(\"HeaderSignedIn goHome\");\n      this.$emit(\"goHome\");\n    },\n    goToHaikuboxDotCom() {\n      // console.log(\"open haikubox.com\");\n      window.location.href = \"https://haikubox.com\";\n    },\n    toggleMap() {\n      this.$emit(\"toggleMap\");\n      window.scrollTo(0, 0);\n    },\n    toggleBadge() {\n      this.$emit(\"toggleBadge\");\n      window.scrollTo(0, 0);\n    },\n    changeLanguage() {\n      this.$i18n.locale = this.selectedLanguage;\n    }\n  },\n};\n</script>\n\n<style>\n.tooltip {\n  display: block !important;\n  z-index: 10000;\n}\n\n.tooltip .tooltip-inner {\n  background: black;\n  color: white;\n  border-radius: 16px;\n  padding: 5px 10px 4px;\n}\n\n.tooltip .tooltip-arrow {\n  width: 0;\n  height: 0;\n  border-style: solid;\n  position: absolute;\n  margin: 5px;\n  border-color: black;\n  z-index: 1;\n}\n\n.tooltip[x-placement^=\"top\"] {\n  margin-bottom: 5px;\n}\n\n.tooltip[x-placement^=\"top\"] .tooltip-arrow {\n  border-width: 5px 5px 0 5px;\n  border-left-color: transparent !important;\n  border-right-color: transparent !important;\n  border-bottom-color: transparent !important;\n  bottom: -5px;\n  left: calc(50% - 5px);\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.tooltip[x-placement^=\"bottom\"] {\n  margin-top: 5px;\n}\n\n.tooltip[x-placement^=\"bottom\"] .tooltip-arrow {\n  border-width: 0 5px 5px 5px;\n  border-left-color: transparent !important;\n  border-right-color: transparent !important;\n  border-top-color: transparent !important;\n  top: -5px;\n  left: calc(50% - 5px);\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.tooltip[x-placement^=\"right\"] {\n  margin-left: 5px;\n}\n\n.tooltip[x-placement^=\"right\"] .tooltip-arrow {\n  border-width: 5px 5px 5px 0;\n  border-left-color: transparent !important;\n  border-top-color: transparent !important;\n  border-bottom-color: transparent !important;\n  left: -5px;\n  top: calc(50% - 5px);\n  margin-left: 0;\n  margin-right: 0;\n}\n\n.tooltip[x-placement^=\"left\"] {\n  margin-right: 5px;\n}\n\n.tooltip[x-placement^=\"left\"] .tooltip-arrow {\n  border-width: 5px 0 5px 5px;\n  border-top-color: transparent !important;\n  border-right-color: transparent !important;\n  border-bottom-color: transparent !important;\n  right: -5px;\n  top: calc(50% - 5px);\n  margin-left: 0;\n  margin-right: 0;\n}\n\n.tooltip.popover .popover-inner {\n  background: #f9f9f9;\n  color: black;\n  padding: 24px;\n  border-radius: 5px;\n  box-shadow: 0 5px 30px rgba(black, 0.1);\n}\n\n.tooltip.popover .popover-arrow {\n  border-color: #f9f9f9;\n}\n\n.tooltip[aria-hidden=\"true\"] {\n  visibility: hidden;\n  opacity: 0;\n  transition: opacity 0.15s, visibility 0.15s;\n}\n\n.tooltip[aria-hidden=\"false\"] {\n  visibility: visible;\n  opacity: 1;\n  transition: opacity 0.15s;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderSignedIn.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderSignedIn.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HeaderSignedIn.vue?vue&type=template&id=522c0948\"\nimport script from \"./HeaderSignedIn.vue?vue&type=script&lang=js\"\nexport * from \"./HeaderSignedIn.vue?vue&type=script&lang=js\"\nimport style0 from \"./HeaderSignedIn.vue?vue&type=style&index=0&id=522c0948&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","<template>\n  <v-app style=\"background: black\">\n    <div v-if=\"authState != 'signedin'\">\n      <app-header\n        @signIn=\"\n          () => {\n            signInClicked = !signInClicked;\n            authStateType = authStateTypeSignIn;\n          }\n        \"\n        @signUp=\"\n          () => {\n            signInClicked = !signInClicked;\n            authStateType = authStateTypeSignUp;\n          }\n        \"\n      ></app-header>\n    </div>\n    <div v-if=\"authState === 'signedin' && user\">\n      <app-signed-in-header\n        @goHome=\"\n          () => {\n            goHomeClicked = !goHomeClicked;\n          }\n        \"\n        @toggleMap=\"toggleMap\"\n        @toggleBadge=\"toggleBadge\"\n        :user=\"user\"\n        :email=\"email\"\n      ></app-signed-in-header>\n    </div>\n\n    <v-main>\n      <router-view\n        :goHomeClicked=\"goHomeClicked\"\n        :user=\"user\"\n        :email=\"email\"\n        :toggleMapClicked=\"toggleMapClicked\"\n        :toggleBadgeClicked=\"toggleBadgeClicked\"\n      ></router-view>\n      <div class=\"auth\">\n        <div v-if=\"authState != 'signedin'\">\n          <v-card v-if=\"signInClicked\" flat tile>\n            <amplify-auth-container>\n              <amplify-authenticator\n                username-alias=\"email\"\n                :initial-auth-state=\"authStateType\"\n              >\n                <amplify-sign-up\n                  header-text=\"Sign Up for Free\"\n                  slot=\"sign-up\"\n                  username-alias=\"email\"\n                  :form-fields.prop=\"formFields\"\n                ></amplify-sign-up>\n                <amplify-sign-in\n                  header-text=\"Haikubox Sign In\"\n                  slot=\"sign-in\"\n                  :form-fields.prop=\"signInFields\"\n                ></amplify-sign-in>\n              </amplify-authenticator>\n            </amplify-auth-container>\n            <v-card-subtitle\n              >By continuing, I agree to the Haikubox Terms of Service.\n            </v-card-subtitle>\n\n            <router-link\n              style=\"text-decoration: none; color: inherit\"\n              to=\"/terms\"\n            >\n              <v-btn>Terms </v-btn>\n            </router-link>\n\n            <router-link\n              style=\"text-decoration: none; color: inherit\"\n              to=\"/privacy\"\n            >\n              <v-btn>Privacy Policy </v-btn>\n            </router-link>\n          </v-card>\n          <v-img\n            height=\"200px\"\n            src=\"https://haikubox-images.s3.amazonaws.com/web/partnerssm.jpeg\"\n          ></v-img>\n        </div>\n      </div>\n      <div v-if=\"authState != 'signedin'\">\n        <v-icon small color=\"white\">mdi-copyright</v-icon\n        ><span class=\"white--text font-weight-light\"\n          >2024 Loggerhead Instruments, Inc</span\n        >\n      </div>\n      <div v-if=\"authState === 'signedin' && user\">\n        <!-- <app-footer></app-footer> -->\n        <router-link style=\"text-decoration: none; color: inherit\" to=\"/\">\n          <amplify-sign-out></amplify-sign-out>\n        </router-link>\n      </div>\n    </v-main>\n  </v-app>\n</template>\n\n<script>\nimport { Auth } from \"aws-amplify\";\nimport { AuthState, onAuthUIStateChange } from \"@aws-amplify/ui-components\";\nimport Header from \"./components/Header.vue\";\n// import Footer from \"./components/Footer.vue\";\nimport HeaderSignedIn from \"./components/HeaderSignedIn.vue\";\n// import Landing from \"./components/Landing.vue\";\n// import Privacy from \"./components/Privacy.vue\";\n// import Terms from \"./components/Terms.vue\";\n// import Haikumarine from \"./Haikumarine.vue\"\n\nexport default {\n  beforeCreate() {\n    // console.log('App.vue beforeCreate');\n    onAuthUIStateChange((authState, authData) => {\n      // console.log('onAuthUIStateChange', authState, authData, this.$route.path);\n      this.authState = authState;\n      if (authData != undefined) {\n        // console.log(authData);\n        this.user = authData.username;\n        this.email = authData.attributes.email;\n        // console.log('user', this.user);\n        if (this.$route.path === \"/\") this.$router.push({ path: \"/haikubox\" });\n      } else {\n        this.user = \"\";\n        this.email = \"\";\n        // this is needed for correct login. If try to login from /haikubox it loads last loaded login, not new login.\n        if (\n          (this.$route.path !== \"/\") &\n          (this.$route.path !== \"/settings\") &\n          (this.$route.path !== \"/privacy\") &\n          (this.$route.path !== \"/terms\") &\n          (this.$route.path !== \"/success\")\n        ) {\n          this.$router.push({ path: \"/\" });\n          // console.log(\"go to landing\");\n        }\n      }\n    });\n  },\n  created() {\n    if (this.authState === undefined) {\n      Auth.currentAuthenticatedUser().then((authData) => {\n        this.authState = AuthState.SignedIn;\n        this.user = authData.username;\n        this.email = authData.attributes.email;\n        // console.log('created, signed in');\n        // line below causes duplicate routing error\n        // without this line refreshing a page stays on the same page\n        // if ((this.$route.path !== '/haikubox') & (this.$route.path !== '/settings') & (this.$route.path !== '/privacy') & (this.$route.path !== '/terms') & (this.$route.path !== '/success')) this.$router.push({ path: \"/haikubox\" });\n      });\n    }\n  },\n  components: {\n    appHeader: Header,\n    // appFooter: Footer,\n    appSignedInHeader: HeaderSignedIn,\n    // appLanding: Landing,\n    // appPrivacy: Privacy,\n    // appTerms: Terms,\n    // appHaikumarine: Haikumarine,\n  },\n  beforeDestroy() {\n    return onAuthUIStateChange;\n  },\n  data() {\n    return {\n      goHomeClicked: false,\n      toggleMapClicked: false,\n      toggleBadgeClicked: false,\n      user: \"\",\n      email: \"\",\n      authState: undefined,\n      authStateType: \"signin\",\n      authStateTypeSignIn: \"signin\",\n      authStateTypeSignUp: \"signup\",\n      signInClicked: true,\n      showMarineClicked: false,\n      signInFields: [\n        {\n          type: \"email\",\n          label: \"Email Address\",\n          placeholder: \"Enter your email\",\n          required: true,\n          handleInputChange: (event, cb) => {\n            document\n              .querySelector(\"amplify-sign-in\")\n              .shadowRoot.querySelector(\"amplify-input input\").value = document\n              .querySelector(\"amplify-sign-in\")\n              .shadowRoot.querySelector(\"amplify-input input\")\n              .value.toLowerCase();\n            cb(event);\n          },\n        },\n        {\n          type: \"password\",\n          label: \"Password\",\n          placeholder: \"Enter password\",\n          required: true,\n        },\n      ],\n      formFields: [\n        {\n          type: \"email\",\n          label: \"Email Address\",\n          placeholder: \"Enter your email address\",\n          required: true,\n          handleInputChange: (event, cb) => {\n            document\n              .querySelector(\"amplify-sign-up\")\n              .shadowRoot.querySelector(\"amplify-input input\").value = document\n              .querySelector(\"amplify-sign-up\")\n              .shadowRoot.querySelector(\"amplify-input input\")\n              .value.toLowerCase();\n            cb(event);\n          },\n        },\n        {\n          type: \"password\",\n          label: \"Password\",\n          placeholder: \"Enter password (>7 characters)\",\n          required: true,\n        },\n      ],\n    };\n  },\n  methods: {\n    toggleMap() {\n      this.toggleMapClicked = !this.toggleMapClicked;\n      // console.log(\"App toggle map\", this.toggleMapClicked);\n    },\n    toggleBadge() {\n      this.toggleBadgeClicked = !this.toggleBadgeClicked;\n      // console.log(\"App toggle map\", this.toggleMapClicked);\n    },\n  },\n};\n</script>\n\n<style>\n@import \"~leaflet.markercluster/dist/MarkerCluster.css\";\n@import \"~leaflet.markercluster/dist/MarkerCluster.Default.css\";\n@import url(\"https://fonts.googleapis.com/css?family=Quicksand\");\n#app {\n  font-family: Quicksand, Avenir, Helvetica, Arial, sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  width: 100%;\n  height: 100%;\n}\n.auth {\n  /* margin: auto auto; */\n}\namplify-authenticator {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  flex: 1;\n  height: 60vh;\n}\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=6e659077\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=6e659077&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n    \"aws_project_region\": \"us-east-1\",\n    \"aws_cognito_identity_pool_id\": \"us-east-1:0ca5c98c-fc23-45c8-b4d1-e91c7e21534d\",\n    \"aws_cognito_region\": \"us-east-1\",\n    \"aws_user_pools_id\": \"us-east-1_SrYXYCj4a\",\n    \"aws_user_pools_web_client_id\": \"5l07h6rq8oi69iu3q3pbkvcf7i\",\n    \"oauth\": {},\n    \"aws_cognito_username_attributes\": [\n        \"EMAIL\"\n    ],\n    \"aws_cognito_social_providers\": [],\n    \"aws_cognito_signup_attributes\": [\n        \"EMAIL\"\n    ],\n    \"aws_cognito_mfa_configuration\": \"OFF\",\n    \"aws_cognito_mfa_types\": [\n        \"SMS\"\n    ],\n    \"aws_cognito_password_protection_settings\": {\n        \"passwordPolicyMinLength\": 8,\n        \"passwordPolicyCharacters\": []\n    },\n    \"aws_cognito_verification_mechanisms\": [\n        \"EMAIL\"\n    ],\n    \"aws_appsync_graphqlEndpoint\": \"https://x7bmgdtd7nbdpobdv2ytrrzsuy.appsync-api.us-east-1.amazonaws.com/graphql\",\n    \"aws_appsync_region\": \"us-east-1\",\n    \"aws_appsync_authenticationType\": \"AMAZON_COGNITO_USER_POOLS\",\n    \"aws_user_files_s3_bucket\": \"haikubox-media152750-prod\",\n    \"aws_user_files_s3_bucket_region\": \"us-east-1\",\n    \"aws_cognito_login_mechanisms\": [\n        \"EMAIL\"\n    ]\n};\n\n\nexport default awsmobile;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return (this.user != '')?_c('div',{attrs:{\"id\":\"haikubox\"}},[_vm._l((_vm.userNotices),function(notice){return _c('v-alert',{key:notice.id,attrs:{\"type\":\"info\"}},[_c('v-row',{attrs:{\"align\":\"center\"}},[_c('v-col',{staticClass:\"grow\"},[_vm._v(\" \"+_vm._s(notice.noticeTitle)+\" \"+_vm._s(notice.noticeDescription)+\" \")]),_c('v-col',{staticClass:\"shrink\"},[_c('v-btn',{on:{\"click\":function($event){return _vm.acknowledgeNotice(notice.id)}}},[_vm._v(\"OK\")])],1)],1)],1)}),(_vm.showRenewAlert)?_c('v-alert',{attrs:{\"type\":\"info\",\"dismissible\":\"\"},on:{\"input\":function($event){return _vm.logClick('subscription', '', '')}}},[_c('v-row',{attrs:{\"align\":\"center\"}},[_c('v-col',{staticClass:\"grow\"},[_vm._v(\" \"+_vm._s(_vm.t(\"Subscription Expired\"))+\" \")])],1)],1):_vm._e(),(_vm.showMap)?_c('v-card',{staticClass:\"mx-auto\",attrs:{\"max-width\":\"100%\",\"max-height\":\"400\",\"outlined\":\"\"}},[_c('div',[_c('v-img',{attrs:{\"height\":\"100%\",\"width\":\"100%\"}},[_c('l-map',{staticStyle:{\"height\":\"400px\",\"width\":\"100%\"},attrs:{\"zoom\":_vm.zoom,\"center\":_vm.center,\"options\":_vm.mapOptions,\"bounds\":_vm.bounds,\"maxZoom\":_vm.maxZoomSummary},on:{\"update:center\":_vm.centerUpdate,\"update:zoom\":_vm.zoomUpdate}},[_c('l-tile-layer',{attrs:{\"url\":_vm.urlStates,\"attribution\":_vm.urlOceanAttribution}}),_c('l-circle',{key:_vm.haikuboxMarkerID,attrs:{\"lat-lng\":[_vm.lat, _vm.lon],\"radius\":_vm.currentHaikuboxRadius}}),_c('v-marker-cluster',{attrs:{\"options\":{ chunkedLoading: true }}},_vm._l((_vm.connectedDevices),function(item){return _c('l-marker',{key:item.id,attrs:{\"lat-lng\":[item.shareLat, item.shareLon],\"radius\":2000,\"color\":\"#0277BD\"},on:{\"click\":function($event){return _vm.clickDevice(item, 1, false, item.shareLat, item.shareLon)}}},[_c('l-tooltip',{attrs:{\"options\":{ permanent: true }}},[_vm._v(_vm._s(item.name))])],1)}),1)],1)],1)],1)]):_vm._e(),(\n      (_vm.showMap == false) &\n      (_vm.yesterdayCallsAndSongs == 0) &\n      (_vm.showBadge == false)\n    )?_c('v-card',{attrs:{\"outlined\":\"\",\"height\":\"200px\",\"width\":\"100%\"}},[_c('v-img',{attrs:{\"src\":\"https://haikubox-images.s3.amazonaws.com/carousel/callOutBackground3.jpeg\",\"height\":\"100%\",\"width\":\"100%\"}},[_c('v-row',{attrs:{\"no-gutter\":\"\"}},[_c('v-col',{staticClass:\"py-1\",attrs:{\"cols\":\"9\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\" \"+_vm._s(_vm.t(\"Welcome\"))+\" \")])],1),_c('v-col',{staticClass:\"d-flex align-center py-1\",attrs:{\"cols\":\"3\"}},[_c('v-icon',{attrs:{\"dark\":\"\"}},[_vm._v(\"mdi-web\")]),_c('v-select',{attrs:{\"items\":_vm.languages,\"dark\":\"\"},on:{\"change\":function($event){return _vm.setLanguage(_vm.selectedLanguage)}},model:{value:(_vm.selectedLanguage),callback:function ($$v) {_vm.selectedLanguage=$$v},expression:\"selectedLanguage\"}})],1)],1)],1)],1):_vm._e(),(\n      (_vm.showMap == false) & (_vm.yesterdayCallsAndSongs > 0) & (_vm.showBadge == false)\n    )?_c('v-card',{staticClass:\"transparent px-0 mx-0 my-0 py-0\",attrs:{\"flat\":\"\",\"height\":\"280px\",\"width\":\"100%\"}},[_c('v-img',{attrs:{\"src\":\"https://haikubox-images.s3.amazonaws.com/carousel/callOutBackground3.jpeg\",\"height\":\"280px\"}},[_c('v-row',{attrs:{\"no-gutter\":\"\"}},[_c('v-col',{staticClass:\"py-1\",attrs:{\"cols\":\"9\"}},[_c('v-card-title',[_vm._v(_vm._s(_vm.t(\"Yesterday\")))])],1),_c('v-col',{staticClass:\"d-flex align-center py-1\",attrs:{\"cols\":\"3\"}},[_c('v-icon',{attrs:{\"dark\":\"\"}},[_vm._v(\"mdi-web\")]),_c('v-select',{attrs:{\"items\":_vm.languages,\"dark\":\"\"},on:{\"change\":function($event){return _vm.setLanguage(_vm.selectedLanguage)}},model:{value:(_vm.selectedLanguage),callback:function ($$v) {_vm.selectedLanguage=$$v},expression:\"selectedLanguage\"}})],1)],1),_c('v-row',{staticClass:\"mx-1\"},[_c('v-col',{staticClass:\"py-1\",attrs:{\"xs\":\"4\",\"sm\":\"4\",\"md\":\"3\"}},[_c('v-card',{attrs:{\"dark\":\"\",\"color\":\"grey\",\"tile\":\"\"}},[_c('v-card-title',{staticClass:\"justify-center\"},[_vm._v(_vm._s(_vm.yesterdayNumSpecies)+\" \")]),_c('v-card-subtitle',{staticClass:\"text-center\"},[_vm._v(_vm._s(_vm.t(\"Species\")))])],1)],1),_c('v-col',{staticClass:\"py-1\",attrs:{\"xs\":\"4\",\"sm\":\"4\",\"md\":\"3\"}},[_c('v-card',{attrs:{\"dark\":\"\",\"color\":\"grey\",\"tile\":\"\"}},[_c('v-card-title',{staticClass:\"justify-center\"},[_vm._v(_vm._s(_vm.yesterdayCallsAndSongs)+\" \")]),_c('v-card-subtitle',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.t(\"Calls and Songs\"))+\" \")])],1)],1)],1),_c('v-row',{staticClass:\"mx-1 my-2 py-4\",attrs:{\"align\":\"center\"}},[_c('v-col',{staticClass:\"py-2\",attrs:{\"xs\":\"8\",\"sm\":\"8\",\"md\":\"6\"}},[_c('v-card',{attrs:{\"dark\":\"\",\"color\":\"grey\",\"tile\":\"\"}},[_c('v-row',[_c('v-col',{staticClass:\"my-0\",attrs:{\"cols\":\"4\"}},[_c('v-img',{staticClass:\"mx-2\",attrs:{\"width\":\"80%\",\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                    _vm.yesterdaySpCode +\n                    '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})],1),_c('v-col',{staticClass:\"py-2\",attrs:{\"cols\":\"7\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\" \"+_vm._s(_vm.t(_vm.yesterdaySpCode, _vm.yesterdayMostFrequent)))]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.t(\"Most Frequent Visitor\"))+\" \")])],1)],1)],1)],1)],1)],1)],1):_vm._e(),((_vm.showMap == false) & (_vm.showBadge == true))?_c('v-card',{staticClass:\"transparent mx-auto\",attrs:{\"height\":\"280\",\"light\":\"\",\"tile\":\"\",\"width\":\"100%\",\"flat\":\"\"}},[_c('v-img',{attrs:{\"src\":\"https://haikubox-images.s3.amazonaws.com/carousel/callOutBackground1.jpeg\",\"height\":\"280px\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(_vm._s(_vm.t(\"Progress and Badges\")))]),_c('v-row',{staticStyle:{\"height\":\"10px\"}}),_c('v-row',{staticStyle:{\"height\":\"20px\"}},[_c('v-col',{attrs:{\"cols\":\"7\"}}),_c('v-col',{attrs:{\"cols\":\"2\"}},[(_vm.totalLabeled > 0)?_c('v-btn',{staticClass:\"white--text\",attrs:{\"text\":\"\",\"height\":\"40\",\"width\":\"40\"}},[_vm._v(\"Level\")]):_vm._e()],1)],1),(_vm.totalLabeled == 0)?_c('v-card-text',{staticClass:\"white--text text-xs-h6 text-sm-h5\"},[_vm._v(_vm._s(_vm.t(\"Label bird detections to earn badges\")))]):_vm._e(),(_vm.totalLabeled > 0)?_c('div',[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"7\"}},[(_vm.totalLabeled > 0)?_c('v-progress-linear',{staticClass:\"mx-2 white--text\",attrs:{\"rounded\":\"\",\"value\":_vm.percentTargetLabeled,\"color\":\"amber\",\"height\":\"40\"}},[_vm._v(_vm._s(_vm.t(\"Labeled\"))+\": \"+_vm._s(_vm.totalLabeled)+\" / \"+_vm._s(_vm.targetLabel)+\" \")]):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"2\"}},[_c('v-btn',{staticClass:\"white--text\",attrs:{\"color\":\"orange\",\"height\":\"40\"}},[_vm._v(\" \"+_vm._s(_vm.badgeLabelLevel)+\" \")])],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"7\"}},[(_vm.totalLabeled > 0)?_c('v-progress-linear',{staticClass:\"mx-2 my-1 white--text\",attrs:{\"rounded\":\"\",\"value\":_vm.percentTargetLabelSpecies,\"color\":\"orange\",\"height\":\"40\"}},[_vm._v(_vm._s(_vm.t(\"Species\"))+\": \"+_vm._s(_vm.totalSpeciesLabeled)+\" / \"+_vm._s(_vm.targetLabelSpecies))]):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"2\"}},[_c('v-btn',{staticClass:\"white--text\",attrs:{\"color\":\"orange\",\"height\":\"40\"}},[_vm._v(\" \"+_vm._s(_vm.badgeLabelSpeciesLevel)+\" \")])],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"7\"}},[(_vm.totalLabeled > 0)?_c('v-progress-linear',{staticClass:\"mx-2 white--text\",attrs:{\"rounded\":\"\",\"value\":_vm.percentTargetLabelStreak,\"height\":\"40\"}},[_vm._v(_vm._s(_vm.t(\"Streak\"))+\": \"+_vm._s(_vm.labelStreak)+\" / \"+_vm._s(_vm.targetLabelStreak)+\" \"+_vm._s(_vm.t(\"days\")))]):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"2\"}},[_c('v-btn',{staticClass:\"white--text\",attrs:{\"color\":\"orange\",\"height\":\"40\"}},[_vm._v(\" \"+_vm._s(_vm.badgeLabelStreakLevel)+\" \")])],1)],1)],1):_vm._e()],1)],1):_vm._e(),_c('v-card',{staticClass:\"mx-auto\",attrs:{\"max-width\":\"100%\",\"outlined\":\"\",\"color\":\"blue-grey darken-4\"}},[(_vm.currentWiFi === 0 && _vm.isOwner)?_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-card',{staticClass:\"px-2\",attrs:{\"dark\":\"\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\" \"+_vm._s(_vm.t(\"No WiFi\"))+\" \")]),_c('v-card-text',{staticClass:\"my-0 py=0\"},[_vm._v(_vm._s(_vm.t(\"WiFi Step 1\")))]),_c('v-card-text',{staticClass:\"my-0 py=0\"},[_vm._v(_vm._s(_vm.t(\"WiFi Step 2\")))]),_c('v-btn',{staticClass:\"mx-2 my-2\",on:{\"click\":function($event){return _vm.checkConnection(_vm.currentSerial)}}},[_vm._v(\"Check Connection\")]),(_vm.checkConnectionFailed)?_c('v-card-subtitle',[_vm._v(_vm._s(_vm.t(\"WiFi Check\"))+\" \"+_vm._s(_vm.currentSerial)+\" \")]):_vm._e()],1)],1)],1):_vm._e(),_c('v-row',[_c('v-col',{staticClass:\"my-1 py-0\",attrs:{\"cols\":\"10\"}},[(_vm.haikuboxLoaded == 1)?_c('v-card-title',{staticClass:\"white--text text-no-wrap\",staticStyle:{\"word-break\":\"break-word\"}},[(_vm.isOwner == true)?_c('v-btn',{attrs:{\"color\":\"white\",\"icon\":\"\",\"aria-hidden\":\"true\",\"tabindex\":\"-1\"}},[_c('v-icon',[_vm._v(\"mdi-home\")])],1):_vm._e(),(\n              (_vm.currentHaikuboxBookmark == false) &\n              (_vm.isOwner == false) &\n              (_vm.currentSiteName != '')\n            )?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Bookmark this Haikubox'),expression:\"'Bookmark this Haikubox'\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\",\"color\":\"pink\"},on:{\"click\":function($event){return _vm.toggleHaikuboxBookmark()}}},[_c('v-icon',{attrs:{\"alt\":\"bookmark\"}},[_vm._v(\"mdi-bookmark-multiple-outline\")])],1):_vm._e(),((_vm.currentHaikuboxBookmark == true) & (_vm.isOwner == false))?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Un-Bookmark this Haikubox'),expression:\"'Un-Bookmark this Haikubox'\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\",\"color\":\"pink\"},on:{\"click\":function($event){return _vm.toggleHaikuboxBookmark()}}},[_c('v-icon',{attrs:{\"alt\":\"bookmark\"}},[_vm._v(\"mdi-bookmark-multiple\")])],1):_vm._e(),_vm._v(\" \"+_vm._s(_vm.currentSiteName)+\" \")],1):_vm._e()],1),(_vm.isOwner)?_c('v-col',{staticClass:\"my-1 d-flex justify-end\",attrs:{\"cols\":\"2\"}},[(_vm.currentWiFi >= -60 && _vm.currentWiFi != 0)?_c('v-btn',{attrs:{\"disabled\":\"\",\"icon\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.getStatus(_vm.currentSerial)}}},[_c('v-icon',[_vm._v(\"mdi-signal-cellular-3\")])],1):_vm._e(),(_vm.currentWiFi >= -74 && _vm.currentWiFi < -60)?_c('v-btn',{attrs:{\"disabled\":\"\",\"icon\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.getStatus(_vm.currentSerial)}}},[_c('v-icon',[_vm._v(\"mdi-signal-cellular-2\")])],1):_vm._e(),(_vm.currentWiFi >= -78 && _vm.currentWiFi < -74)?_c('v-btn',{attrs:{\"disabled\":\"\",\"icon\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.getStatus(_vm.currentSerial)}}},[_c('v-icon',[_vm._v(\"mdi-signal-cellular-1\")])],1):_vm._e(),(_vm.currentWiFi < -78)?_c('v-btn',{attrs:{\"disabled\":\"\",\"icon\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.getStatus(_vm.currentSerial)}}},[_c('v-icon',[_vm._v(\"mdi-signal-cellular-outline\")])],1):_vm._e()],1):_vm._e()],1),_c('v-row',{staticClass:\"py-0 my-0\"},[_c('v-col',{staticClass:\"py-0 my-0 px-10 d-flex justify-end\",attrs:{\"cols\":\"12\"}},[(\n            _vm.isOwner &\n            _vm.goNativeActive &\n            (_vm.currentView == 'Recent') &\n            _vm.subscriptionActive\n          )?_c('v-switch',{attrs:{\"label\":_vm.t('New Bird Alerts'),\"dark\":\"\",\"color\":\"info\"},on:{\"change\":function($event){return _vm.toggleNewBirdAlert(_vm.newBirdAlert)}},model:{value:(_vm.newBirdAlert),callback:function ($$v) {_vm.newBirdAlert=$$v},expression:\"newBirdAlert\"}}):_vm._e()],1)],1),(\n        ((_vm.devicesByOwner.length > 1) |\n          ((_vm.devicesByOwner.length >= 0) & (_vm.bookmarkedDevices.length > 0))) &\n        !_vm.showMap\n      )?_c('v-app-bar',{attrs:{\"color\":\"blue-grey darken-4\",\"dark\":\"\",\"dense\":\"\",\"flat\":\"\",\"height\":\"80px\"}},[(\n          (_vm.devicesByOwner.length > 1) |\n            ((_vm.devicesByOwner.length >= 0) & (_vm.bookmarkedDevices.length > 0))\n        )?_c('v-select',{staticClass:\"mx-4\",attrs:{\"items\":_vm.devicesByOwner,\"item-text\":\"name\",\"item-value\":\"serial\",\"return-object\":\"\",\"dark\":\"\",\"label\":_vm.t('Your Haikuboxes')},on:{\"input\":function($event){return _vm.ownerSelectDevice()}},model:{value:(_vm.haikuboxSelect),callback:function ($$v) {_vm.haikuboxSelect=$$v},expression:\"haikuboxSelect\"}}):_vm._e(),(_vm.bookmarkedDevices.length > 0)?_c('v-select',{staticClass:\"mx-4\",attrs:{\"items\":_vm.bookmarkedDevices,\"item-text\":\"name\",\"item-value\":\"id\",\"return-object\":\"\",\"dark\":\"\",\"label\":_vm.t('Bookmarks')},on:{\"input\":function($event){return _vm.bookmarkSelectDevice()}},model:{value:(_vm.bookmarkSelect),callback:function ($$v) {_vm.bookmarkSelect=$$v},expression:\"bookmarkSelect\"}}):_vm._e()],1):_vm._e(),_c('v-snackbar',{attrs:{\"centered\":\"\",\"timeout\":60000},scopedSlots:_vm._u([{key:\"action\",fn:function({ attrs }){return [_c('v-btn',_vm._b({attrs:{\"color\":\"blue\",\"text\":\"\"},on:{\"click\":function($event){_vm.notifyBirdInfo = false}}},'v-btn',attrs,false),[_vm._v(\" No \")]),_c('v-btn',_vm._b({attrs:{\"color\":\"blue\",\"text\":\"\"},on:{\"click\":function($event){return _vm.grantOneSignalPrivacyConsent()}}},'v-btn',attrs,false),[_vm._v(\" Yes \")])]}}],null,false,1027979172),model:{value:(_vm.notifyBirdInfo),callback:function ($$v) {_vm.notifyBirdInfo=$$v},expression:\"notifyBirdInfo\"}},[_c('v-icon',[_vm._v(\"mdi-account\")]),_vm._v(\" \"+_vm._s(_vm.t(\"Notify Auth\"))+\" \")],1),_c('v-row',[_c('v-col',{staticClass:\"white--text my-0 py-0 mx-4\",attrs:{\"cols\":\"6\"}},[_c('v-select',{staticClass:\"mx-4\",attrs:{\"items\":_vm.navList,\"item-text\":\"text\",\"item-value\":\"id\",\"return-object\":\"\",\"dark\":\"\",\"label\":_vm.t('View')},on:{\"input\":function($event){return _vm.changeView()}},scopedSlots:_vm._u([{key:\"item\",fn:function({ item }){return [_c('v-list-item-icon',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.text))])],1)]}}],null,false,2145199803),model:{value:(_vm.navSelection),callback:function ($$v) {_vm.navSelection=$$v},expression:\"navSelection\"}})],1),_c('v-col',{attrs:{\"cols\":\"5\"}},[(_vm.hitsLoading > 0)?_c('v-btn',{attrs:{\"color\":\"yellow\",\"plain\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.t(\"Loading\"))+\" \"+_vm._s(_vm.hitsLoading))]):_vm._e(),((_vm.currentView === 'Recent') & (_vm.hitsLoading == 0) & _vm.isOwner)?_c('v-btn',{attrs:{\"icon\":\"\",\"color\":\"grey\",\"aria-label\":\"Refresh\"},on:{\"click\":function($event){return _vm.clickRefresh(_vm.currentSerial)}}},[_c('v-icon',{attrs:{\"alt\":\"refresh\"}},[_vm._v(\"mdi-refresh\")])],1):_vm._e(),(\n            (_vm.currentView === 'Recent') &\n            (_vm.hitsLoading == 0) &\n            _vm.isOwner &\n            _vm.subscriptionActive &\n            !_vm.hidePics\n          )?_c('v-btn',{staticClass:\"pa-1 ma-1\",attrs:{\"fab\":\"\",\"small\":\"\",\"color\":_vm.recentHours == 0 ? 'blue lighten-2' : 'grey'},on:{\"click\":function($event){return _vm.hitSelectDate()}}},[_c('v-icon',{attrs:{\"alt\":\"calendar\"}},[_vm._v(\"mdi-calendar\")])],1):_vm._e(),((_vm.hitsLoading == 0) & (!_vm.hidePics))?_c('v-slider',{staticClass:\"px-2\",attrs:{\"dark\":\"\",\"color\":\"grey\",\"prepend-icon\":\"mdi-volume-high\",\"prepend-icon-color\":\"grey\",\"min\":\"50\",\"max\":\"200\"},model:{value:(_vm.playbackGain),callback:function ($$v) {_vm.playbackGain=$$v},expression:\"playbackGain\"}}):_vm._e()],1)],1),(_vm.hitCalendarDatePicked == false)?[_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-date-picker',{attrs:{\"min\":_vm.minDate,\"max\":_vm.maxDate},on:{\"change\":function($event){return _vm.hitDateClick()}},model:{value:(_vm.hitDatePicker),callback:function ($$v) {_vm.hitDatePicker=$$v},expression:\"hitDatePicker\"}})],1)]:_vm._e(),(_vm.currentView == 'Daily Summary')?_c('v-card-title',{staticClass:\"grey--text my-0 py-0 subtitle-1\"},[_vm._v(_vm._s(_vm.dailySummaryDate))]):_vm._e(),((_vm.currentView == 'Recent') | (_vm.currentView == 'Live'))?_c('v-card-title',{staticClass:\"grey--text my-0 py-0 subtitle-1\"},[(_vm.recentHours != 0)?_c('div',[_vm._v(_vm._s(_vm.lastUpdated))]):_vm._e(),(_vm.recentHours == 0)?_c('div',[_vm._v(_vm._s(_vm.hitDatePicker))]):_vm._e(),_c('v-spacer'),(\n          ((_vm.currentView === 'Recent') | (_vm.currentView === 'Live')) &\n          (_vm.hitsLoading == 0)\n        )?_c('v-btn',{staticClass:\"pa-1 ma-1\",attrs:{\"rounded\":\"\",\"x-small\":\"\",\"color\":_vm.viewSettings == 'Low' ? 'blue lighten-2' : 'grey'},on:{\"click\":function($event){return _vm.setViewSettings('Low')}}},[_vm._v(_vm._s(_vm.t(\"Low\"))+\" \")]):_vm._e(),(\n          ((_vm.currentView === 'Recent') | (_vm.currentView === 'Live')) &\n          (_vm.hitsLoading == 0)\n        )?_c('v-btn',{staticClass:\"pa-1 ma-1\",attrs:{\"rounded\":\"\",\"x-small\":\"\",\"color\":_vm.viewSettings == 'Medium' ? 'blue lighten-2' : 'grey'},on:{\"click\":function($event){return _vm.setViewSettings('Medium')}}},[_vm._v(_vm._s(_vm.t(\"Med\"))+\" \")]):_vm._e(),(\n          ((_vm.currentView === 'Recent') | (_vm.currentView === 'Live')) &\n          (_vm.hitsLoading == 0)\n        )?_c('v-btn',{staticClass:\"pa-1 ma-1\",attrs:{\"rounded\":\"\",\"x-small\":\"\",\"color\":_vm.viewSettings == 'High' ? 'blue lighten-2' : 'grey'},on:{\"click\":function($event){return _vm.setViewSettings('High')}}},[_vm._v(_vm._s(_vm.t(\"High\"))+\" \")]):_vm._e(),((_vm.currentView === 'Recent') | (_vm.currentView === 'Live'))?_c('v-dialog',{attrs:{\"width\":\"300\"},scopedSlots:_vm._u([(!_vm.hidePics)?{key:\"activator\",fn:function({ on, attrs }){return [_c('v-btn',_vm._g(_vm._b({staticClass:\"my-6 mx-3\",attrs:{\"icon\":\"\",\"color\":\"yellow\"}},'v-btn',attrs,false),on),[_c('v-icon',{attrs:{\"alt\":\"info\"}},[_vm._v(\"mdi-information\")])],1)]}}:null],null,true)},[_c('v-card',[_c('v-card-title',{staticClass:\"headline grey lighten-2\"},[_vm._v(\" \"+_vm._s(_vm.t(\"View Settings\"))+\" \")]),_c('v-card-text',[_c('v-list-item',[_c('v-list-item-content',[_vm._v(\" \"+_vm._s(_vm.t(\"View Info\"))+\" \")])],1)],1)],1)],1):_vm._e()],1):_vm._e(),_c('v-dialog',{attrs:{\"max-width\":\"400\"},model:{value:(_vm.shareDialog),callback:function ($$v) {_vm.shareDialog=$$v},expression:\"shareDialog\"}},[_c('v-card',[_c('v-card-title',{staticClass:\"text-h5 blue lighten-1 white--text\"},[_vm._v(\" \"+_vm._s(_vm.t(\"Share\"))+\" \"),_c('v-spacer'),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{staticClass:\"white--text\",attrs:{\"tile\":\"\",\"text\":\"\"},on:{\"click\":function($event){_vm.shareDialog = false}}},[_vm._v(\" \"+_vm._s(_vm.t(\"Close\"))+\" \")])],1)],1),_c('v-divider'),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"9\"}},[_c('v-text-field',{staticClass:\"mx-2 my-6\",attrs:{\"value\":_vm.audioLink,\"readonly\":\"\",\"solo\":\"\"}})],1),_c('v-col',{attrs:{\"cols\":\"2\"}},[_c('v-btn',{staticClass:\"my-8\",on:{\"click\":function($event){return _vm.copyLink()}}},[_vm._v(\"Copy\")]),_c('v-snackbar',{attrs:{\"absolute\":\"\",\"shaped\":\"\",\"color\":\"success\",\"timeout\":1000,\"icon\":\"check_circle\"},model:{value:(_vm.copyLinkSnackbar),callback:function ($$v) {_vm.copyLinkSnackbar=$$v},expression:\"copyLinkSnackbar\"}},[_c('v-icon',[_vm._v(\"mdi-check\")]),_vm._v(\" \"+_vm._s(_vm.t(\"Copied\"))+\" \")],1)],1)],1)],1)],1),(_vm.currentView == 'Recent')?_c('v-container',[_c('v-row',{attrs:{\"dense\":\"\"}},_vm._l((_vm.hits),function(item,index){return _c('v-col',{key:item.id,attrs:{\"cols\":\"12\",\"xs\":\"12\",\"sm\":\"6\",\"md\":\"6\",\"lg\":\"4\",\"xl\":\"3\"}},[_c('v-card',{staticClass:\"mx-auto mx-auto\",staticStyle:{\"word-break\":\"break-word\"},attrs:{\"color\":\"light-blue darken-4\",\"dark\":\"\"}},[(_vm.hidePics)?_c('div',{attrs:{\"tabindex\":\"0\",\"aria-label\":_vm.t(item.spCode, item.cn)}},[_vm._v(\" \"+_vm._s(_vm.t(item.spCode, item.cn))+\" \")]):_vm._e(),(!_vm.hidePics)?_c('v-card-title',[_vm._v(_vm._s(_vm.t(item.spCode, item.cn)))]):_vm._e(),(!_vm.hidePics)?_c('v-card-subtitle',{staticClass:\"font-italic\"},[_vm._v(_vm._s(item.sn))]):_vm._e(),_c('v-row',{staticClass:\"px-8 my-0\",attrs:{\"justify\":\"end\"}},[(_vm.isOwner & _vm.goNativeActive & _vm.subscriptionActive)?_c('v-switch',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(\n                  'Send notification when this species is detected'\n                ),expression:\"\\n                  'Send notification when this species is detected'\\n                \",modifiers:{\"bottom-start\":true}}],staticClass:\"mr-5 py-0\",attrs:{\"dense\":\"\",\"label\":\"Notify\",\"color\":\"info\"},on:{\"change\":function($event){return _vm.toggleNotifyBird(item.cn, item.spCode, item.notifyBird)}},model:{value:(item.notifyBird),callback:function ($$v) {_vm.$set(item, \"notifyBird\", $$v)},expression:\"item.notifyBird\"}}):_vm._e(),(_vm.isOwner)?_c('v-switch',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(\n                  'Turning Show OFF will hide this species on M and H setting'\n                ),expression:\"\\n                  'Turning Show OFF will hide this species on M and H setting'\\n                \",modifiers:{\"bottom-start\":true}}],staticClass:\"py-0\",attrs:{\"dense\":\"\",\"label\":_vm.t('Show'),\"color\":\"info\"},on:{\"change\":function($event){return _vm.toggleShowBird(item.cn, item.spCode, item.showBird)}},model:{value:(item.showBird),callback:function ($$v) {_vm.$set(item, \"showBird\", $$v)},expression:\"item.showBird\"}}):_vm._e()],1),_c('v-card-subtitle',{staticClass:\"py-0\"},[(item.window == 'image' & !_vm.hidePics)?_c('img',{attrs:{\"width\":\"100%\",\"src\":_vm.getImageUrl(item.spCode),\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}}):_vm._e(),(item.window == 'daily')?_c('div',[_c('fusioncharts',{attrs:{\"type\":\"doughnut2d\",\"width\":\"100%\",\"height\":\"240\",\"dataFormat\":\"json\",\"dataSource\":item.hourlyCountPlotData}})],1):_vm._e(),(item.window == 'heatmap')?_c('div',[_c('Plotly',{attrs:{\"data\":item.heatmap,\"display-mode-bar\":false,\"layout\":_vm.plotlyLayoutHeatmap}})],1):_vm._e(),(item.window == 'monthly')?_c('div',[_c('v-card-text',{staticClass:\"ma-3\"},[_c('v-icon',[_vm._v(\"mdi-music-note\")]),_vm._v(\" Past 3 Months \")],1),_c('column-chart',{attrs:{\"colors\":['#90A4AE'],\"height\":300,\"library\":{\n                    scales: {\n                      xAxes: [\n                        {\n                          ticks: {\n                            fontColor: '#ffffff',\n                          },\n                        },\n                      ],\n                      yAxes: [\n                        {\n                          ticks: {\n                            fontColor: '#ffffff',\n                          },\n                        },\n                      ],\n                    },\n                  },\"data\":item.dailyCountPlotData}})],1):_vm._e(),(item.window == 'spectrogram')?_c('div',[_c('Plotly',{attrs:{\"data\":item.spectrogram,\"layout\":_vm.plotlyLayout,\"display-mode-bar\":false}}),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"1\"}},[_vm._v(\"0\")]),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{staticClass:\"d-flex justify-end\",attrs:{\"cols\":\"1\"}},[_vm._v(_vm._s(_vm.clipSeconds)+\"s\")])],1)],1):_vm._e(),(item.window == 'map')?_c('div',[_c('l-map',{staticStyle:{\"height\":\"240px\",\"width\":\"100%\"},attrs:{\"center\":_vm.center,\"options\":_vm.hitMapOptions,\"bounds\":_vm.bounds,\"zoomControl\":false,\"zoom\":_vm.zoom,\"maxZoom\":_vm.maxZoomHitMap},on:{\"update:center\":_vm.centerUpdate,\"update:zoom\":_vm.zoomUpdate}},[_c('l-tile-layer',{attrs:{\"url\":_vm.urlStates,\"attribution\":_vm.attributionSummary}}),_vm._l((item.map),function(countPerHaikubox){return _c('l-circle',{key:countPerHaikubox.id,attrs:{\"lat-lng\":[countPerHaikubox.lat, countPerHaikubox.lon],\"radius\":countPerHaikubox.radius,\"color\":\"#0277BD\",\"fillColor\":\"#039BE5\"}})})],2)],1):_vm._e()]),_c('v-row',{staticClass:\"my-0 py-0\"},[_c('v-card-text',{staticClass:\"my-0 py-0\"},[(item.lon < -30)?_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){_vm.navigateTo('https://www.allaboutbirds.org/guide/' +\n                          _vm.replaceSpaces(item.cn))}}},[_vm._v(_vm._s(_vm.t(\"About\")))]):_vm._e(),_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){return _vm.navigateTo('https://ebird.org/species/' + item.spCode)}}},[_vm._v(\"eBird\")])],1),_c('v-spacer')],1),(!_vm.hidePics)?_c('v-row',{staticClass:\"mb-1\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"8\"}},[_c('v-avatar',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Image')),expression:\"t('Image')\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-4\",attrs:{\"size\":\"24\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'image', item.spCode, item.cn)}}},[_c('img',{attrs:{\"width\":_vm.$vuetify.breakpoint.xs ? '100%' : '320',\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})]),(_vm.recentHours != 0)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Hourly Chart')),expression:\"t('Hourly Chart')\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'daily', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"hourly chart\"}},[_vm._v(\"mdi-chart-donut\")])],1):_vm._e(),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Daily Chart')),expression:\"t('Daily Chart')\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'monthly', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"daily chart\"}},[_vm._v(\"mdi-chart-bar\")])],1),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Heat Map')),expression:\"t('Heat Map')\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'heatmap', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"heat map\"}},[_vm._v(\"mdi-checkerboard\")])],1),(_vm.recentHours != 0)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Map')),expression:\"t('Map')\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'map', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"map\"}},[_vm._v(\"mdi-earth\")])],1):_vm._e(),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Spectrogram')),expression:\"t('Spectrogram')\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.spectrogram(index, item.currentWav['filename'], 'Recent')}}},[_c('v-icon',{attrs:{\"alt\":\"spectrogram\"}},[_vm._v(\"mdi-chart-bubble\")])],1)],1),_c('v-spacer'),(\n                  _vm.isOwner || _vm.user === '9042f396-b3f9-49ec-b398-6c35bb29886a'\n                )?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Share sound')),expression:\"t('Share sound')\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0 mr-2\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":[function($event){return _vm.shareLink(item.spCode, item.cn, item.currentWav['filename'])},function($event){$event.stopPropagation();_vm.shareDialog = true}]}},[_vm._v(_vm._s(_vm.t(\"Share\"))+\" \")]):_vm._e()],1):_vm._e(),_c('div',[_c('v-card-actions',{staticClass:\"mx-0 my-0 py-0\"},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{staticClass:\"mx-1 my-1\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFile(\n                          item.currentWav['filename'],\n                          item.spCode,\n                          item.cn,\n                          item,\n                          index,\n                          false\n                        )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Play\"))+\" \")],1),_c('v-btn',{staticClass:\"mx-1\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFileEnhance(\n                          item.currentWav['filename'],\n                          item.spCode,\n                          item.cn,\n                          item.id,\n                          index\n                        )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Enhance\"))+\" \")],1)],1),_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-select',{staticClass:\"mx-2 my-0 py-0\",attrs:{\"items\":item.wavList,\"item-text\":\"listname\",\"item-value\":\"filename\",\"return-object\":\"\",\"single-line\":\"\"},on:{\"change\":function($event){return _vm.playFile(\n                          item.currentWav['filename'],\n                          item.spCode,\n                          item.cn,\n                          item,\n                          index,\n                          true\n                        )}},model:{value:(item.currentWav),callback:function ($$v) {_vm.$set(item, \"currentWav\", $$v)},expression:\"item.currentWav\"}})],1)],1)],1),_c('v-card-actions',{staticClass:\"mx-0 my-0 py-0\"},[_c('v-row',{attrs:{\"align\":\"center\",\"justify\":\"center\",\"no-gutter\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"12\"}},[(_vm.isOwner & _vm.subscriptionActive)?_c('v-btn',{staticClass:\"mx-1 my-0\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.favoriteHit(item)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(_vm._s(item.favoriteHit ? \"mdi-star\" : \"mdi-star-outline\"))]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Favorite\"))+\" \")],1):_vm._e(),(_vm.goNativeActive == false & _vm.isOwner & _vm.subscriptionActive)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Download'),expression:\"'Download'\",modifiers:{\"bottom-start\":true}}],staticClass:\"mx-2 my-0\",attrs:{\"color\":\"light-blue darken-1\",\"fab\":\"\",\"small\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.download(item)}}},[_c('v-icon',{attrs:{\"alt\":\"download\"}},[_vm._v(\"mdi-download\")])],1):_vm._e(),(_vm.maxClipSeconds > 3)?_c('v-btn',{staticClass:\"mx-1\",style:({ minWidth: '40px', height: '32px', padding: '0 8px' }),attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){_vm.clipSeconds > 3 ? _vm.clipSeconds-- : _vm.clipSeconds}}},[_c('v-icon',[_vm._v(\"mdi-minus\")])],1):_vm._e(),(_vm.maxClipSeconds > 3)?_c('v-btn',{style:({ minWidth: '40px', height: '32px', padding: '0 8px' }),attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){_vm.clipSeconds < _vm.maxClipSeconds ? _vm.clipSeconds++ : _vm.clipSeconds}}},[_c('v-icon',[_vm._v(\"mdi-plus\")])],1):_vm._e(),(_vm.maxClipSeconds > 3)?_c('span',{style:({ minWidth: '40px', height: '32px', padding: '0 8px' }),attrs:{\"color\":\"grey lighten-1\"}},[_vm._v(_vm._s(_vm.clipSeconds)+\"s\")]):_vm._e()],1)],1)],1),(_vm.isOwner & !_vm.hidePics)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"10\"}},[(item.wav)?_c('v-overflow-btn',{staticClass:\"mx-3 my-2\",attrs:{\"items\":_vm.dropdown_class,\"background-color\":item.classLabel != null\n                        ? 'light-blue darken-4'\n                        : 'light-blue darken-1',\"label\":_vm.labelText(item.spCode, item.cn),\"aria-label\":_vm.labelText(item.spCode, item.cn),\"target\":\"#label_sound\"},on:{\"change\":function($event){return _vm.labelHit(index, item)}},model:{value:(item.classLabel),callback:function ($$v) {_vm.$set(item, \"classLabel\", $$v)},expression:\"item.classLabel\"}}):_vm._e(),(item.showEntryBox == true)?_c('v-text-field',{attrs:{\"counter\":\"50\",\"maxlength\":\"50\",\"placeholder\":_vm.t('What is this sound?'),\"label\":_vm.t('This sound is a:'),\"outlined\":\"\",\"hint\":item.submitted == true ? _vm.t('Submitted') : '',\"persistent-hint\":\"\"},model:{value:(item.tellUsMore),callback:function ($$v) {_vm.$set(item, \"tellUsMore\", $$v)},expression:\"item.tellUsMore\"}}):_vm._e(),(item.showSubmitBox == true)?_c('v-btn',{staticClass:\"ma-2\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.labelHitCustom(index, item)}}},[_vm._v(_vm._s(_vm.t(\"Submit\")))]):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"2\"}},[_c('v-dialog',{attrs:{\"width\":\"300\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [(!_vm.hidePics)?_c('v-btn',_vm._g(_vm._b({staticClass:\"my-6 mx-3\",attrs:{\"icon\":\"\"}},'v-btn',attrs,false),on),[_c('v-icon',{attrs:{\"alt\":\" labeling information\"}},[_vm._v(\"mdi-information\")])],1):_vm._e()]}}],null,true)},[_c('v-card',[_c('v-card-title',{staticClass:\"headline grey lighten-2\"},[_vm._v(\" \"+_vm._s(_vm.t(\"About Labeling\"))+\" \")]),_c('v-card-text',[_vm._v(\" \"+_vm._s(_vm.t(\"Label Info\"))+\" \")])],1)],1)],1)],1):_vm._e()],1)],1)],1)}),1)],1):_vm._e(),(_vm.currentView == 'Live')?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"dense\":\"\"}},_vm._l((_vm.liveHits),function(item){return _c('v-col',{key:item.id,attrs:{\"cols\":\"12\"}},[_c('v-card',{attrs:{\"outlined\":\"\",\"tile\":\"\",\"color\":\"black\",\"dark\":\"\"}},[_c('v-row',{attrs:{\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"3\",\"align\":\"center\"}},[(!_vm.hidePics)?_c('v-img',{attrs:{\"width\":\"100%\",\"max-width\":\"120\",\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                    item.spCode +\n                    '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}}):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"3\"}},[_vm._v(\" \"+_vm._s(_vm.t(item.spCode, item.cn))+\" \"),_c('v-card-text',{staticClass:\"my-0 py-0\"},[((!_vm.goNativeActive))?_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){return _vm.navigateTo('https://ebird.org/species/' + item.spCode)}}},[_vm._v(\"eBird\")]):_vm._e()],1)],1),_c('v-col',{attrs:{\"cols\":\"3\",\"align\":\"right\"}},[_vm._v(\" \"+_vm._s(_vm.getEventText(item))+\" \")]),_c('v-col',{attrs:{\"cols\":\"3\",\"align\":\"center\"}},[_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Play')),expression:\"t('Play')\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.playFile(\n                      item.wav,\n                      item.spCode,\n                      item.cn,\n                      item,\n                      null,\n                      false\n                    )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")])],1),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Enhance')),expression:\"t('Enhance')\",modifiers:{\"bottom-start\":true}}],staticClass:\"mx-1\",attrs:{\"icon\":\"\",\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFileEnhance(item.wav, item.spCode, item.cn, item.id, _vm.index)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")])],1)],1)],1)],1)],1)}),1),_c('v-row',{attrs:{\"align\":\"center\"}},[_c('v-card-title',{staticClass:\"white--text\"},[_vm._v(\"Previous Detections\")]),_vm._l((_vm.allHits.slice(0, 100)),function(item,index2){return _c('v-col',{key:item.id,attrs:{\"cols\":\"12\"}},[_c('v-card',{attrs:{\"dark\":\"\",\"tile\":\"\",\"color\":\"#385F73\"}},[_c('v-row',{attrs:{\"dense\":\"\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"3\",\"align\":\"center\"}},[(!_vm.hidePics)?_c('v-img',{attrs:{\"width\":\"100%\",\"max-width\":\"120\",\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                    item.spCode +\n                    '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}}):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"3\",\"align\":\"left\"}},[_vm._v(\" \"+_vm._s(index2 + 1)+\". \"+_vm._s(_vm.t(item.spCode, item.cn))+\" \"),_c('v-card-text',{staticClass:\"my-0 py-0\"},[((item.lon < -30) & (!_vm.goNativeActive))?_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){return _vm.navigateTo('https://ebird.org/species/' + item.spCode)}}},[_vm._v(\"eBird\")]):_vm._e()],1)],1),_c('v-col',{attrs:{\"cols\":\"3\",\"align\":\"right\"}},[_vm._v(\" \"+_vm._s(_vm.getEventText(item))+\" \")]),_c('v-col',{attrs:{\"cols\":\"3\",\"align\":\"center\"}},[(item.wav)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Play')),expression:\"t('Play')\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.playFile(\n                      item.wav,\n                      item.spCode,\n                      item.cn,\n                      item,\n                      null,\n                      false\n                    )}}},[_c('v-icon',[_vm._v(\"mdi-play-circle\")])],1):_vm._e(),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Enhance')),expression:\"t('Enhance')\",modifiers:{\"bottom-start\":true}}],staticClass:\"mx-1\",attrs:{\"icon\":\"\",\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFileEnhance(item.wav, item.spCode, item.cn, item.id, _vm.index)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")])],1)],1)],1)],1)],1)})],2)],1):_vm._e(),(_vm.currentView == 'All')?_c('v-container',{attrs:{\"fluid\":\"\"}},[[_c('v-row',[_c('v-col',{staticClass:\"text-left mx-5\"},[_c('v-autocomplete',{attrs:{\"dark\":\"\",\"items\":_vm.allSpeciesList,\"label\":_vm.t('Select Species'),\"auto-select-first\":\"\"},on:{\"change\":function($event){return _vm.selectSpecies(_vm.speciesSelected)}},model:{value:(_vm.speciesSelected),callback:function ($$v) {_vm.speciesSelected=$$v},expression:\"speciesSelected\"}})],1),_c('v-dialog',{attrs:{\"persistent\":\"\",\"max-width\":\"600px\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c('v-col',{staticClass:\"text-right\"},[_c('v-btn',_vm._g(_vm._b({attrs:{\"color\":\"primary\",\"dark\":\"\"}},'v-btn',attrs,false),on),[_vm._v(\" \"+_vm._s(_vm.t(\"Download CSV\"))+\" \")])],1)]}}],null,false,146328591),model:{value:(_vm.csvDialog),callback:function ($$v) {_vm.csvDialog=$$v},expression:\"csvDialog\"}},[_c('v-card',[_c('v-card-title',[_c('span',{staticClass:\"text-h5\"},[_vm._v(\"Download CSV\")])]),_c('v-card-text',[_c('v-container',[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-checkbox',{attrs:{\"dense\":\"\",\"label\":_vm.t('Download Summary')},model:{value:(_vm.downloadSummary),callback:function ($$v) {_vm.downloadSummary=$$v},expression:\"downloadSummary\"}}),_c('v-checkbox',{attrs:{\"dense\":\"\",\"label\":_vm.t('DownloadInfo')},model:{value:(_vm.downloadRaw),callback:function ($$v) {_vm.downloadRaw=$$v},expression:\"downloadRaw\"}})],1),(_vm.downloadRaw == true)?_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-date-picker',{attrs:{\"range\":\"\",\"no-title\":\"\"},model:{value:(_vm.csvDates),callback:function ($$v) {_vm.csvDates=$$v},expression:\"csvDates\"}})],1):_vm._e()],1)],1)],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"blue darken-1\",\"text\":\"\"},on:{\"click\":function($event){_vm.csvDialog = false}}},[_vm._v(\" \"+_vm._s(_vm.t(\"Close\"))+\" \")]),_c('v-btn',{attrs:{\"color\":\"blue darken-1\",\"text\":\"\"},on:{\"click\":function($event){return _vm.downloadCSV()}}},[_vm._v(\" \"+_vm._s(_vm.t(\"Download CSV\"))+\" \")])],1)],1)],1)],1)],_c('v-row',{attrs:{\"dense\":\"\"}},_vm._l((_vm.seriesDaily),function(item,index){return _c('v-col',{key:item.id,attrs:{\"cols\":\"12\",\"id\":_vm.t(item.spCode, item.cn)}},[_c('v-card',{staticClass:\"mx-auto mx-auto\",attrs:{\"tile\":\"\",\"outlined\":\"\",\"color\":\"light-blue darken-4\",\"dark\":\"\",\"scroll-margin-top\":\"50px\"}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"2\"}},[(!_vm.hidePics)?_c('v-img',{staticClass:\"mx-1 my-1\",attrs:{\"width\":\"80%\",\"max-width\":\"120\",\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                    item.spCode +\n                    '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}}):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"5\"}},[_vm._v(\" \"+_vm._s(index + 1)+\". \"+_vm._s(_vm.t(item.spCode, item.cn))+\" \"+_vm._s(item.countsTotal)+\" \")]),_c('v-col',{attrs:{\"cols\":\"5\"}},[(!_vm.hidePics)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Daily Chart')),expression:\"t('Daily Chart')\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowAll(index, 'monthly', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"daily chart\"}},[_vm._v(\"mdi-chart-multiple\")])],1):_vm._e(),(!_vm.hidePics)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Spectrogram')),expression:\"t('Spectrogram')\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.getWavFileName(\n                      index,\n                      item.spCode,\n                      item.cn,\n                      'All',\n                      'spectrogram',\n                      item.wav\n                    )}}},[_c('v-icon',{attrs:{\"alt\":\"spectrogram\"}},[_vm._v(\"mdi-chart-bubble\")])],1):_vm._e(),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Play')),expression:\"t('Play')\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.getWavFileName(\n                      index,\n                      item.spCode,\n                      item.cn,\n                      'All',\n                      'play',\n                      item.wav\n                    )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")])],1),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Enhance')),expression:\"t('Enhance')\",modifiers:{\"bottom-start\":true}}],staticClass:\"mx-1\",attrs:{\"icon\":\"\",\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFileEnhance(item.wav, item.spCode, item.cn, item.id, index)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")])],1)],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('div',{staticClass:\"d-flex align-center\"},[(item.lon < -30)?_c('v-btn',{staticStyle:{\"height\":\"12px\",\"margin\":\"0\",\"padding\":\"0\",\"margin-left\":\"2px\",\"margin-right\":\"1px\"},attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){_vm.navigateTo('https://www.allaboutbirds.org/guide/' +\n                          _vm.replaceSpaces(item.cn))}}},[_vm._v(_vm._s(_vm.t(\"About\"))+\" \")]):_vm._e(),_c('v-btn',{staticStyle:{\"height\":\"12px\",\"margin\":\"0\",\"padding\":\"0\",\"margin-left\":\"0px\",\"margin-right\":\"10px\"},attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){return _vm.navigateTo('https://ebird.org/species/' + item.spCode)}}},[_vm._v(\"eBird\")]),_c('v-spacer'),(_vm.isOwner)?_c('v-switch',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(\n                    'Turning Show OFF will hide this species on M and H setting'\n                  ),expression:\"\\n                    'Turning Show OFF will hide this species on M and H setting'\\n                  \",modifiers:{\"bottom-start\":true}}],staticStyle:{\"margin\":\"0\",\"padding\":\"0\",\"margin-left\":\"8px\",\"margin-right\":\"8px\"},attrs:{\"label\":_vm.t('Show'),\"color\":\"info\"},on:{\"change\":function($event){return _vm.toggleShowBird(item.cn, item.spCode, item.showBird)}},model:{value:(item.showBird),callback:function ($$v) {_vm.$set(item, \"showBird\", $$v)},expression:\"item.showBird\"}}):_vm._e(),(_vm.isOwner & _vm.goNativeActive & _vm.subscriptionActive)?_c('v-switch',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(\n                    'Send notification when this species is detected'\n                  ),expression:\"\\n                    'Send notification when this species is detected'\\n                  \",modifiers:{\"bottom-start\":true}}],staticStyle:{\"margin\":\"0\",\"padding\":\"0\",\"margin-right\":\"16px\"},attrs:{\"label\":_vm.t('Notify'),\"color\":\"info\"},on:{\"change\":function($event){return _vm.toggleNotifyBird(item.cn, item.spCode, item.notifyBird)}},model:{value:(item.notifyBird),callback:function ($$v) {_vm.$set(item, \"notifyBird\", $$v)},expression:\"item.notifyBird\"}}):_vm._e()],1)])],1),(item.window == 'monthly')?_c('div',[_c('v-card-text',{staticClass:\"ma-3\"},[_vm._v(\" Past Year \"),_c('v-icon',[_vm._v(\"mdi-music-note\")]),_vm._v(_vm._s(item.countsTotal))],1),_c('fusioncharts',{attrs:{\"width\":\"100%\",\"height\":\"300\",\"type\":\"timeseries\",\"dataFormat\":\"json\",\"dataSource\":item.dataSource}})],1):_vm._e(),(item.window == 'spectrogram')?_c('div',[_c('Plotly',{attrs:{\"data\":item.spectrogram,\"layout\":_vm.plotlyLayout,\"display-mode-bar\":false}})],1):_vm._e()],1)],1)}),1)],2):_vm._e(),(_vm.currentView == 'Yesterday')?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"dense\":\"\"}},_vm._l((_vm.dailySummaryList),function(item,index){return _c('v-col',{key:item.id,attrs:{\"cols\":\"12\"}},[_c('v-card',{staticClass:\"mx-auto my-auto\",attrs:{\"tile\":\"\",\"outlined\":\"\",\"color\":\"light-blue darken-4\",\"dark\":\"\"}},[_c('v-row',{attrs:{\"no-gutters\":\"\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"3\"}},[(!_vm.hidePics)?_c('v-img',{staticClass:\"mx-2 my-3\",attrs:{\"width\":\"85%\",\"max-width\":\"120\",\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                    item.spCode +\n                    '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}}):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"4\"}},[_vm._v(\" \"+_vm._s(index + 1)+\". \"+_vm._s(_vm.t(item.spCode, item.cn))+\" \"+_vm._s(item.countsPerDay)+\" \")]),_c('v-spacer'),_c('v-col',{attrs:{\"cols\":\"5\"}},[_c('v-btn',{staticClass:\"mx-1 my-1\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.getWavFileName(\n                      index,\n                      item.spCode,\n                      item.cn,\n                      'Daily Summary',\n                      'play',\n                      item.wav\n                    )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Play\"))+\" \")],1),_c('v-spacer'),_c('v-btn',{staticClass:\"mx-1 my-2\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFileEnhance(item.wav, item.spCode, item.cn, item.id, index)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Enhance\"))+\" \")],1)],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"8\"}},[(item.lon < -30)?_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){_vm.navigateTo('https://www.allaboutbirds.org/guide/' +\n                          _vm.replaceSpaces(item.cn))}}},[_vm._v(_vm._s(_vm.t(\"About\")))]):_vm._e(),_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){return _vm.navigateTo('https://ebird.org/species/' + item.spCode)}}},[_vm._v(\"eBird\")])],1)],1),(item.window == 'monthly')?_c('div',[_c('v-card-text',{staticClass:\"ma-3\"},[_vm._v(\" Past Year \"),_c('v-icon',[_vm._v(\"mdi-music-note\")]),_vm._v(_vm._s(item.countsTotal))],1),_c('fusioncharts',{attrs:{\"width\":\"100%\",\"height\":\"300\",\"type\":\"timeseries\",\"dataFormat\":\"json\",\"dataSource\":item.dataSource}})],1):_vm._e(),(item.window == 'spectrogram')?_c('div',[_c('Plotly',{attrs:{\"data\":item.spectrogram,\"layout\":_vm.plotlyLayout,\"display-mode-bar\":false}})],1):_vm._e()],1)],1)}),1)],1):_vm._e()],2),_c('v-card',{attrs:{\"light\":\"\",\"tile\":\"\",\"flat\":\"\",\"color\":\"rgb(255, 255, 255, 0.6)\"}},[_c('v-img',{attrs:{\"src\":_vm.haiku.src}},[_c('v-row',{staticStyle:{\"height\":\"10px\"}}),_c('v-row',{staticStyle:{\"height\":\"40px\"}},[_c('v-col',{staticClass:\"mx-6 my-2\",attrs:{\"cols\":\"12\"}},[_c('v-card-text',{staticClass:\"mx-6 text-xs-h6 text-sm-h5 mx-sm-5\",staticStyle:{\"color\":\"black\",\"text-align\":\"left\",\"text-indent\":\"20%\"},attrs:{\"role\":\"none\",\"aria-label\":_vm.haiku.poem1,\"tabindex\":\"0\"}},[_vm._v(\" \"+_vm._s(_vm.haiku.poem1))])],1)],1),_c('v-row',{staticStyle:{\"height\":\"40px\"}},[_c('v-col',{staticClass:\"mx-6 my-1\",attrs:{\"cols\":\"12\"}},[_c('v-card-text',{staticClass:\"mx-6 text-xs-h6 text-sm-h5 mx-sm-5\",staticStyle:{\"color\":\"black\",\"text-align\":\"left\",\"text-indent\":\"20%\"},attrs:{\"aria-label\":_vm.haiku.poem2,\"tabindex\":\"0\"}},[_vm._v(_vm._s(_vm.haiku.poem2)+\" \")])],1)],1),_c('v-row',{staticStyle:{\"height\":\"40px\"}},[_c('v-col',{staticClass:\"mx-6 my-1\",attrs:{\"cols\":\"12\"}},[_c('v-card-text',{staticClass:\"mx-6 text-xs-h6 text-sm-h5 mx-sm-5\",staticStyle:{\"color\":\"black\",\"text-align\":\"left\",\"text-indent\":\"20%\"},attrs:{\"aria-label\":_vm.haiku.poem3,\"tabindex\":\"0\"}},[_vm._v(\" \"+_vm._s(_vm.haiku.poem3))])],1)],1),_c('v-row',{staticStyle:{\"height\":\"2px\"}}),_c('v-row',{staticStyle:{\"height\":\"50px\"}},[_c('v-col',{attrs:{\"xs\":\"2\",\"sm\":\"4\"}}),_c('v-col',{attrs:{\"xs\":\"10\",\"sm\":\"8\"}},[_c('v-card-text',{staticClass:\"text-xs-h6 text-sm-h5\",staticStyle:{\"color\":\"black\",\"text-align\":\"left\"},attrs:{\"aria-label\":_vm.haiku.poemAuthor,\"tabindex\":\"0\"}},[_vm._v(\" \"+_vm._s(_vm.haiku.poemAuthor)+\" \")])],1)],1),_c('v-row',{staticStyle:{\"height\":\"60px\"}},[_c('v-col',{attrs:{\"xs\":\"2\",\"sm\":\"4\"}}),_c('v-col',{attrs:{\"xs\":\"10\",\"sm\":\"8\"}})],1)],1)],1),_c('v-snackbar',{scopedSlots:_vm._u([{key:\"action\",fn:function({ attrs }){return [_c('v-btn',_vm._b({attrs:{\"color\":\"yellow\",\"text\":\"\"},on:{\"click\":function($event){_vm.snackbar = false}}},'v-btn',attrs,false),[_vm._v(\" Close \")])]}}],null,false,392007350),model:{value:(_vm.snackbar),callback:function ($$v) {_vm.snackbar=$$v},expression:\"snackbar\"}},[_vm._v(\" Audio unavailable \")]),_c('v-bottom-navigation',{attrs:{\"hide-on-scroll\":\"\",\"fixed\":\"\",\"horizontal\":\"\",\"dark\":\"\",\"height\":\"60\"}},[(_vm.showBirdCastButton())?_c('v-btn',{on:{\"click\":function($event){return _vm.navigateTo(_vm.birdCastUrl)}}},[_c('span',[_vm._v(\"Birdcast\")]),_c('v-icon',{attrs:{\"alt\":\"Birdcast link\"}},[_vm._v(\"mdi-earth\")])],1):_vm._e(),_c('v-btn',{on:{\"click\":function($event){return _vm.$vuetify.goTo(0, {\n          duration: 300,\n          offset: 0,\n          easing: 'easeInOutCubic',\n        })}}},[_c('span',[_vm._v(\"To Top\")]),_c('v-icon',{attrs:{\"alt\":\"Go to top of page\"}},[_vm._v(\"mdi-pan-up\")])],1)],1)],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const getDevice = /* GraphQL */ `\n  query GetDevice($id: ID!) {\n    getDevice(id: $id) {\n      id\n      serial\n      type\n      version\n      owner\n      name\n      privateAudio\n      shareLink\n      shareBird\n      shareMarine\n      hideOnMap\n      collectSoundscape\n      createdAt\n      updatedAt\n      lat\n      lon\n      tzOffsetMinutes\n      tz\n      smsPhone1\n      smsPhone2\n      smsTimeStart\n      smsTimeStop\n      smsPause\n      newBirdAlert\n    }\n  }\n`;\nexport const listDevices = /* GraphQL */ `\n  query ListDevices(\n    $filter: ModelDeviceFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listDevices(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        type\n        version\n        owner\n        name\n        privateAudio\n        shareLink\n        shareBird\n        shareMarine\n        hideOnMap\n        collectSoundscape\n        createdAt\n        updatedAt\n        lat\n        lon\n        tzOffsetMinutes\n        tz\n        smsPhone1\n        smsPhone2\n        smsTimeStart\n        smsTimeStop\n        smsPause\n        newBirdAlert\n      }\n      nextToken\n    }\n  }\n`;\nexport const haikuboxBySerial = /* GraphQL */ `\n  query HaikuboxBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModeldeviceFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    haikuboxBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        type\n        version\n        owner\n        name\n        privateAudio\n        shareLink\n        shareBird\n        shareMarine\n        hideOnMap\n        collectSoundscape\n        createdAt\n        updatedAt\n        lat\n        lon\n        tzOffsetMinutes\n        tz\n        smsPhone1\n        smsPhone2\n        smsTimeStart\n        smsTimeStop\n        smsPause\n        newBirdAlert\n      }\n      nextToken\n    }\n  }\n`;\nexport const haikuboxByType = /* GraphQL */ `\n  query HaikuboxByType(\n    $type: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModeldeviceFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    haikuboxByType(\n      type: $type\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        type\n        version\n        owner\n        name\n        privateAudio\n        shareLink\n        shareBird\n        shareMarine\n        hideOnMap\n        collectSoundscape\n        createdAt\n        updatedAt\n        lat\n        lon\n        tzOffsetMinutes\n        tz\n        smsPhone1\n        smsPhone2\n        smsTimeStart\n        smsTimeStop\n        smsPause\n        newBirdAlert\n      }\n      nextToken\n    }\n  }\n`;\nexport const haikuboxByOwner = /* GraphQL */ `\n  query HaikuboxByOwner(\n    $owner: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModeldeviceFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    haikuboxByOwner(\n      owner: $owner\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        type\n        version\n        owner\n        name\n        privateAudio\n        shareLink\n        shareBird\n        shareMarine\n        hideOnMap\n        collectSoundscape\n        createdAt\n        updatedAt\n        lat\n        lon\n        tzOffsetMinutes\n        tz\n        smsPhone1\n        smsPhone2\n        smsTimeStart\n        smsTimeStop\n        smsPause\n        newBirdAlert\n      }\n      nextToken\n    }\n  }\n`;\nexport const getDeviceHistory = /* GraphQL */ `\n  query GetDeviceHistory($id: ID!) {\n    getDeviceHistory(id: $id) {\n      id\n      serial\n      version\n      owner\n      name\n      shareBird\n      createDate\n      createdAt\n      updatedAt\n      lat\n      lon\n      deviceAction\n    }\n  }\n`;\nexport const listDeviceHistories = /* GraphQL */ `\n  query ListDeviceHistories(\n    $filter: ModelDeviceHistoryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listDeviceHistories(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        version\n        owner\n        name\n        shareBird\n        createDate\n        createdAt\n        updatedAt\n        lat\n        lon\n        deviceAction\n      }\n      nextToken\n    }\n  }\n`;\nexport const deviceHistoryBySerial = /* GraphQL */ `\n  query DeviceHistoryBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModeldeviceHistoryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    deviceHistoryBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        version\n        owner\n        name\n        shareBird\n        createDate\n        createdAt\n        updatedAt\n        lat\n        lon\n        deviceAction\n      }\n      nextToken\n    }\n  }\n`;\nexport const deviceHistoryByOwner = /* GraphQL */ `\n  query DeviceHistoryByOwner(\n    $owner: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModeldeviceHistoryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    deviceHistoryByOwner(\n      owner: $owner\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        version\n        owner\n        name\n        shareBird\n        createDate\n        createdAt\n        updatedAt\n        lat\n        lon\n        deviceAction\n      }\n      nextToken\n    }\n  }\n`;\nexport const deviceHistoryByDate = /* GraphQL */ `\n  query DeviceHistoryByDate(\n    $createDate: AWSDate!\n    $sortDirection: ModelSortDirection\n    $filter: ModeldeviceHistoryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    deviceHistoryByDate(\n      createDate: $createDate\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        version\n        owner\n        name\n        shareBird\n        createDate\n        createdAt\n        updatedAt\n        lat\n        lon\n        deviceAction\n      }\n      nextToken\n    }\n  }\n`;\nexport const getHit = /* GraphQL */ `\n  query GetHit($id: ID!) {\n    getHit(id: $id) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      lat\n      lon\n      score\n      specSum\n      version\n      detectionArray\n      detectionConfidence\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listHits = /* GraphQL */ `\n  query ListHits(\n    $filter: ModelHitFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listHits(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        lat\n        lon\n        score\n        specSum\n        version\n        detectionArray\n        detectionConfidence\n        detectionCount\n        type\n        labeledBy\n        label\n        human\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const hitBySerialByDate = /* GraphQL */ `\n  query HitBySerialByDate(\n    $serial: String!\n    $dt: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelhitFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    hitBySerialByDate(\n      serial: $serial\n      dt: $dt\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        lat\n        lon\n        score\n        specSum\n        version\n        detectionArray\n        detectionConfidence\n        detectionCount\n        type\n        labeledBy\n        label\n        human\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const hitsBySpeciesByDate = /* GraphQL */ `\n  query HitsBySpeciesByDate(\n    $serial: String!\n    $cnDt: ModelhitHitsBySpeciesByDateCompositeKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelhitFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    hitsBySpeciesByDate(\n      serial: $serial\n      cnDt: $cnDt\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        lat\n        lon\n        score\n        specSum\n        version\n        detectionArray\n        detectionConfidence\n        detectionCount\n        type\n        labeledBy\n        label\n        human\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getHitNotInGrid = /* GraphQL */ `\n  query GetHitNotInGrid($id: ID!) {\n    getHitNotInGrid(id: $id) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      latitude\n      longitude\n      score\n      specSum\n      version\n      detectionArrayF\n      detectionConfidenceF\n      detectionArrayUf\n      detectionConfidenceUf\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listHitNotInGrids = /* GraphQL */ `\n  query ListHitNotInGrids(\n    $filter: ModelHitNotInGridFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listHitNotInGrids(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        latitude\n        longitude\n        score\n        specSum\n        version\n        detectionArrayF\n        detectionConfidenceF\n        detectionArrayUf\n        detectionConfidenceUf\n        detectionCount\n        type\n        labeledBy\n        label\n        human\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const hitNotInGridBySpeciesByDate = /* GraphQL */ `\n  query HitNotInGridBySpeciesByDate(\n    $spCode: String!\n    $dt: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelhitNotInGridFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    hitNotInGridBySpeciesByDate(\n      spCode: $spCode\n      dt: $dt\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        latitude\n        longitude\n        score\n        specSum\n        version\n        detectionArrayF\n        detectionConfidenceF\n        detectionArrayUf\n        detectionConfidenceUf\n        detectionCount\n        type\n        labeledBy\n        label\n        human\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getDeviceState = /* GraphQL */ `\n  query GetDeviceState($id: ID!) {\n    getDeviceState(id: $id) {\n      id\n      serial\n      type\n      lat\n      lon\n      timezone\n      connected\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listDeviceStates = /* GraphQL */ `\n  query ListDeviceStates(\n    $filter: ModelDeviceStateFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listDeviceStates(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        type\n        lat\n        lon\n        timezone\n        connected\n        version\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getBootTable = /* GraphQL */ `\n  query GetBootTable($id: ID!) {\n    getBootTable(id: $id) {\n      id\n      serial\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listBootTables = /* GraphQL */ `\n  query ListBootTables(\n    $filter: ModelBootTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listBootTables(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        version\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const bootBySerialByDate = /* GraphQL */ `\n  query BootBySerialByDate(\n    $serial: String!\n    $createdAt: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelbootTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    bootBySerialByDate(\n      serial: $serial\n      createdAt: $createdAt\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        version\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getStatusTable = /* GraphQL */ `\n  query GetStatusTable($id: ID!) {\n    getStatusTable(id: $id) {\n      id\n      serial\n      cpuTemp\n      cpuFreq\n      warning\n      ramdisk\n      signal\n      availMem\n      pyMem\n      gridLength\n      nDirect\n      nCloud\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listStatusTables = /* GraphQL */ `\n  query ListStatusTables(\n    $filter: ModelStatusTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listStatusTables(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        cpuTemp\n        cpuFreq\n        warning\n        ramdisk\n        signal\n        availMem\n        pyMem\n        gridLength\n        nDirect\n        nCloud\n        version\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const statusByDate = /* GraphQL */ `\n  query StatusByDate(\n    $serial: String!\n    $createdAt: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelstatusTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    statusByDate(\n      serial: $serial\n      createdAt: $createdAt\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        cpuTemp\n        cpuFreq\n        warning\n        ramdisk\n        signal\n        availMem\n        pyMem\n        gridLength\n        nDirect\n        nCloud\n        version\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getLogTable = /* GraphQL */ `\n  query GetLogTable($id: ID!) {\n    getLogTable(id: $id) {\n      id\n      serial\n      log\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listLogTables = /* GraphQL */ `\n  query ListLogTables(\n    $filter: ModelLogTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listLogTables(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        log\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getExceptionTable = /* GraphQL */ `\n  query GetExceptionTable($id: ID!) {\n    getExceptionTable(id: $id) {\n      id\n      serial\n      exception\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listExceptionTables = /* GraphQL */ `\n  query ListExceptionTables(\n    $filter: ModelExceptionTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listExceptionTables(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        exception\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const exceptionBySerial = /* GraphQL */ `\n  query ExceptionBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelexceptionTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    exceptionBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        exception\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const exceptionBySerialByDate = /* GraphQL */ `\n  query ExceptionBySerialByDate(\n    $serial: String!\n    $createdAt: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelexceptionTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    exceptionBySerialByDate(\n      serial: $serial\n      createdAt: $createdAt\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        exception\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getDailyCount = /* GraphQL */ `\n  query GetDailyCount($id: ID!) {\n    getDailyCount(id: $id) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listDailyCounts = /* GraphQL */ `\n  query ListDailyCounts(\n    $filter: ModelDailyCountFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listDailyCounts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        date\n        group\n        cn\n        sn\n        spCode\n        count\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const dailyCountBySerialByDate = /* GraphQL */ `\n  query DailyCountBySerialByDate(\n    $serial: String!\n    $date: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModeldailyCountFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    dailyCountBySerialByDate(\n      serial: $serial\n      date: $date\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        date\n        group\n        cn\n        sn\n        spCode\n        count\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const dailyCountByDate = /* GraphQL */ `\n  query DailyCountByDate(\n    $date: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModeldailyCountFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    dailyCountByDate(\n      date: $date\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        date\n        group\n        cn\n        sn\n        spCode\n        count\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getHourlyCount = /* GraphQL */ `\n  query GetHourlyCount($id: ID!) {\n    getHourlyCount(id: $id) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listHourlyCounts = /* GraphQL */ `\n  query ListHourlyCounts(\n    $filter: ModelHourlyCountFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listHourlyCounts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        date\n        group\n        cn\n        sn\n        spCode\n        count\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const itemsBySerialByDate = /* GraphQL */ `\n  query ItemsBySerialByDate(\n    $serial: String!\n    $date: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelhourlyCountFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    itemsBySerialByDate(\n      serial: $serial\n      date: $date\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        date\n        group\n        cn\n        sn\n        spCode\n        count\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getLabeledData = /* GraphQL */ `\n  query GetLabeledData($id: ID!) {\n    getLabeledData(id: $id) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      labeledBy\n      label\n      score\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listLabeledData = /* GraphQL */ `\n  query ListLabeledData(\n    $filter: ModelLabeledDataFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listLabeledData(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        labeledBy\n        label\n        score\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const labelBySerialByCn = /* GraphQL */ `\n  query LabelBySerialByCn(\n    $serial: String!\n    $cn: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModellabeledDataFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    labelBySerialByCn(\n      serial: $serial\n      cn: $cn\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        labeledBy\n        label\n        score\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const labelBySerialByLabel = /* GraphQL */ `\n  query LabelBySerialByLabel(\n    $serial: String!\n    $label: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModellabeledDataFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    labelBySerialByLabel(\n      serial: $serial\n      label: $label\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        labeledBy\n        label\n        score\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const labelByCn = /* GraphQL */ `\n  query LabelByCn(\n    $cn: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModellabeledDataFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    labelByCn(\n      cn: $cn\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        labeledBy\n        label\n        score\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const labelByCnByLabel = /* GraphQL */ `\n  query LabelByCnByLabel(\n    $cn: String!\n    $label: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModellabeledDataFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    labelByCnByLabel(\n      cn: $cn\n      label: $label\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        dt\n        group\n        cn\n        sn\n        spCode\n        wav\n        labeledBy\n        label\n        score\n        lat\n        lon\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getDailyCountSummary = /* GraphQL */ `\n  query GetDailyCountSummary($id: ID!) {\n    getDailyCountSummary(id: $id) {\n      id\n      serial\n      countsPerDay\n      cn\n      spCode\n      lat\n      lon\n      countDate\n      wav\n      newBirdAlertAt\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listDailyCountSummaries = /* GraphQL */ `\n  query ListDailyCountSummaries(\n    $filter: ModelDailyCountSummaryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listDailyCountSummaries(\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        countsPerDay\n        cn\n        spCode\n        lat\n        lon\n        countDate\n        wav\n        newBirdAlertAt\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const dailyCountSummaryBySerialByDate = /* GraphQL */ `\n  query DailyCountSummaryBySerialByDate(\n    $serial: String!\n    $countDate: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModeldailyCountSummaryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    dailyCountSummaryBySerialByDate(\n      serial: $serial\n      countDate: $countDate\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        countsPerDay\n        cn\n        spCode\n        lat\n        lon\n        countDate\n        wav\n        newBirdAlertAt\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const dailyCountSummaryBySerialBySpecies = /* GraphQL */ `\n  query DailyCountSummaryBySerialBySpecies(\n    $serial: String!\n    $cn: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModeldailyCountSummaryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    dailyCountSummaryBySerialBySpecies(\n      serial: $serial\n      cn: $cn\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        countsPerDay\n        cn\n        spCode\n        lat\n        lon\n        countDate\n        wav\n        newBirdAlertAt\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const dailyCountSummaryByDateBySpecies = /* GraphQL */ `\n  query DailyCountSummaryByDateBySpecies(\n    $countDate: AWSDate!\n    $cn: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModeldailyCountSummaryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    dailyCountSummaryByDateBySpecies(\n      countDate: $countDate\n      cn: $cn\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        countsPerDay\n        cn\n        spCode\n        lat\n        lon\n        countDate\n        wav\n        newBirdAlertAt\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getYearlyCountSummary = /* GraphQL */ `\n  query GetYearlyCountSummary($id: ID!) {\n    getYearlyCountSummary(id: $id) {\n      id\n      serial\n      countsTotal\n      cn\n      spCode\n      lat\n      lon\n      countYear\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listYearlyCountSummaries = /* GraphQL */ `\n  query ListYearlyCountSummaries(\n    $filter: ModelYearlyCountSummaryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listYearlyCountSummaries(\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        countsTotal\n        cn\n        spCode\n        lat\n        lon\n        countYear\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const yearlyCountSummaryBySerialByYear = /* GraphQL */ `\n  query YearlyCountSummaryBySerialByYear(\n    $serial: String!\n    $countYear: ModelIntKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelyearlyCountSummaryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    yearlyCountSummaryBySerialByYear(\n      serial: $serial\n      countYear: $countYear\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        countsTotal\n        cn\n        spCode\n        lat\n        lon\n        countYear\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getUserInteraction = /* GraphQL */ `\n  query GetUserInteraction($id: ID!) {\n    getUserInteraction(id: $id) {\n      id\n      totalLabeled\n      speciesLabeled\n      speciesLabeledCode\n      totalSpeciesLabeled\n      labelStreak\n      labelStreakRecord\n      dateLastLabeled\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listUserInteractions = /* GraphQL */ `\n  query ListUserInteractions(\n    $filter: ModelUserInteractionFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listUserInteractions(\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        totalLabeled\n        speciesLabeled\n        speciesLabeledCode\n        totalSpeciesLabeled\n        labelStreak\n        labelStreakRecord\n        dateLastLabeled\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getClickTable = /* GraphQL */ `\n  query GetClickTable($id: ID!) {\n    getClickTable(id: $id) {\n      id\n      userID\n      serial\n      spCode\n      cn\n      clickTarget\n      pageClickedFrom\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const listClickTables = /* GraphQL */ `\n  query ListClickTables(\n    $filter: ModelClickTableFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listClickTables(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        userID\n        serial\n        spCode\n        cn\n        clickTarget\n        pageClickedFrom\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const getRawHaikumarine = /* GraphQL */ `\n  query GetRawHaikumarine($id: ID!) {\n    getRawHaikumarine(id: $id) {\n      id\n      serial\n      dt\n      lat\n      lon\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listRawHaikumarines = /* GraphQL */ `\n  query ListRawHaikumarines(\n    $filter: ModelRawHaikumarineFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listRawHaikumarines(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        dt\n        lat\n        lon\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const rawHaikumarineBySerialByDate = /* GraphQL */ `\n  query RawHaikumarineBySerialByDate(\n    $serial: String!\n    $dt: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelrawHaikumarineFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    rawHaikumarineBySerialByDate(\n      serial: $serial\n      dt: $dt\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        dt\n        lat\n        lon\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getGridByLoc = /* GraphQL */ `\n  query GetGridByLoc($id: ID!) {\n    getGridByLoc(id: $id) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      gridName\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listGridByLocs = /* GraphQL */ `\n  query ListGridByLocs(\n    $filter: ModelGridByLocFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listGridByLocs(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        lat\n        lon\n        week\n        spCode\n        cn\n        sn\n        gridName\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const gridByWeek = /* GraphQL */ `\n  query GridByWeek(\n    $week: Int!\n    $sortDirection: ModelSortDirection\n    $filter: ModelgridByLocFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    gridByWeek(\n      week: $week\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        lat\n        lon\n        week\n        spCode\n        cn\n        sn\n        gridName\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getGridBySpCode = /* GraphQL */ `\n  query GetGridBySpCode($id: ID!) {\n    getGridBySpCode(id: $id) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      gridName\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listGridBySpCodes = /* GraphQL */ `\n  query ListGridBySpCodes(\n    $filter: ModelGridBySpCodeFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listGridBySpCodes(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        lat\n        lon\n        week\n        spCode\n        cn\n        sn\n        gridName\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getGridHistory = /* GraphQL */ `\n  query GetGridHistory($id: ID!) {\n    getGridHistory(id: $id) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      modType\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listGridHistories = /* GraphQL */ `\n  query ListGridHistories(\n    $filter: ModelGridHistoryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listGridHistories(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        lat\n        lon\n        week\n        spCode\n        cn\n        sn\n        modType\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getHideBird = /* GraphQL */ `\n  query GetHideBird($id: ID!) {\n    getHideBird(id: $id) {\n      id\n      spCode\n      cn\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const listHideBirds = /* GraphQL */ `\n  query ListHideBirds(\n    $filter: ModelHideBirdFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listHideBirds(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        spCode\n        cn\n        serial\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const hideBirdBySerial = /* GraphQL */ `\n  query HideBirdBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelhideBirdFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    hideBirdBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        spCode\n        cn\n        serial\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const getNotifyBird = /* GraphQL */ `\n  query GetNotifyBird($id: ID!) {\n    getNotifyBird(id: $id) {\n      id\n      spCode\n      cn\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const listNotifyBirds = /* GraphQL */ `\n  query ListNotifyBirds(\n    $filter: ModelNotifyBirdFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listNotifyBirds(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        spCode\n        cn\n        serial\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const notifyBirdBySerial = /* GraphQL */ `\n  query NotifyBirdBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelnotifyBirdFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    notifyBirdBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        spCode\n        cn\n        serial\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const getNotifications = /* GraphQL */ `\n  query GetNotifications($id: ID!) {\n    getNotifications(id: $id) {\n      id\n      serial\n      owner\n      played\n      notificationType\n      cn\n      spCode\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listNotifications = /* GraphQL */ `\n  query ListNotifications(\n    $filter: ModelNotificationsFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listNotifications(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        owner\n        played\n        notificationType\n        cn\n        spCode\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const notificationsBySerial = /* GraphQL */ `\n  query NotificationsBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelnotificationsFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    notificationsBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        played\n        notificationType\n        cn\n        spCode\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const notificationsBySerialByPlayed = /* GraphQL */ `\n  query NotificationsBySerialByPlayed(\n    $serial: String!\n    $played: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelnotificationsFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    notificationsBySerialByPlayed(\n      serial: $serial\n      played: $played\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        played\n        notificationType\n        cn\n        spCode\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const notificationsBySerialByDate = /* GraphQL */ `\n  query NotificationsBySerialByDate(\n    $serial: String!\n    $createdAt: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModelnotificationsFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    notificationsBySerialByDate(\n      serial: $serial\n      createdAt: $createdAt\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        played\n        notificationType\n        cn\n        spCode\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const notificationsByOwner = /* GraphQL */ `\n  query NotificationsByOwner(\n    $owner: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelnotificationsFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    notificationsByOwner(\n      owner: $owner\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        played\n        notificationType\n        cn\n        spCode\n        wav\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getOneSignal = /* GraphQL */ `\n  query GetOneSignal($id: ID!) {\n    getOneSignal(id: $id) {\n      id\n      playerID\n      platform\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const listOneSignals = /* GraphQL */ `\n  query ListOneSignals(\n    $filter: ModelOneSignalFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listOneSignals(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        playerID\n        platform\n        serial\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const oneSignalBySerial = /* GraphQL */ `\n  query OneSignalBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModeloneSignalFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    oneSignalBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        playerID\n        platform\n        serial\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const getOneSignalConsent = /* GraphQL */ `\n  query GetOneSignalConsent($id: ID!) {\n    getOneSignalConsent(id: $id) {\n      id\n      osConsentGranted\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const listOneSignalConsents = /* GraphQL */ `\n  query ListOneSignalConsents(\n    $filter: ModelOneSignalConsentFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listOneSignalConsents(\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        osConsentGranted\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const getShareMap = /* GraphQL */ `\n  query GetShareMap($id: ID!) {\n    getShareMap(id: $id) {\n      id\n      name\n      shareLat\n      shareLon\n      tz\n      connected\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const listShareMaps = /* GraphQL */ `\n  query ListShareMaps(\n    $filter: ModelShareMapFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listShareMaps(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        name\n        shareLat\n        shareLon\n        tz\n        connected\n        createdAt\n        updatedAt\n        owner\n      }\n      nextToken\n    }\n  }\n`;\nexport const getHaikuboxUser = /* GraphQL */ `\n  query GetHaikuboxUser($id: ID!) {\n    getHaikuboxUser(id: $id) {\n      id\n      email\n      confirmedEmail\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listHaikuboxUsers = /* GraphQL */ `\n  query ListHaikuboxUsers(\n    $filter: ModelHaikuboxUserFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listHaikuboxUsers(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        email\n        confirmedEmail\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const haikuboxUserByEmail = /* GraphQL */ `\n  query HaikuboxUserByEmail(\n    $email: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelhaikuboxUserFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    haikuboxUserByEmail(\n      email: $email\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        email\n        confirmedEmail\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getBookmarkHaikubox = /* GraphQL */ `\n  query GetBookmarkHaikubox($id: ID!) {\n    getBookmarkHaikubox(id: $id) {\n      id\n      serial\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listBookmarkHaikuboxes = /* GraphQL */ `\n  query ListBookmarkHaikuboxes(\n    $filter: ModelBookmarkHaikuboxFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listBookmarkHaikuboxes(\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const bookmarkHaikuboxByOwner = /* GraphQL */ `\n  query BookmarkHaikuboxByOwner(\n    $owner: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelbookmarkHaikuboxFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    bookmarkHaikuboxByOwner(\n      owner: $owner\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getUnclaimHaikubox = /* GraphQL */ `\n  query GetUnclaimHaikubox($id: ID!) {\n    getUnclaimHaikubox(id: $id) {\n      id\n      serial\n      owner\n      email\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listUnclaimHaikuboxes = /* GraphQL */ `\n  query ListUnclaimHaikuboxes(\n    $filter: ModelUnclaimHaikuboxFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listUnclaimHaikuboxes(\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        email\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const unclaimHaikuboxByOwner = /* GraphQL */ `\n  query UnclaimHaikuboxByOwner(\n    $owner: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelunclaimHaikuboxFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    unclaimHaikuboxByOwner(\n      owner: $owner\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        email\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getUserNotice = /* GraphQL */ `\n  query GetUserNotice($id: ID!) {\n    getUserNotice(id: $id) {\n      id\n      owner\n      noticeID\n      noticeViewed\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listUserNotices = /* GraphQL */ `\n  query ListUserNotices(\n    $filter: ModelUserNoticeFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listUserNotices(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        owner\n        noticeID\n        noticeViewed\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const userNoticeByOwner = /* GraphQL */ `\n  query UserNoticeByOwner(\n    $owner: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModeluserNoticeFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    userNoticeByOwner(\n      owner: $owner\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        owner\n        noticeID\n        noticeViewed\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const userNoticeByOwnerByViewed = /* GraphQL */ `\n  query UserNoticeByOwnerByViewed(\n    $owner: String!\n    $noticeViewed: ModelStringKeyConditionInput\n    $sortDirection: ModelSortDirection\n    $filter: ModeluserNoticeFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    userNoticeByOwnerByViewed(\n      owner: $owner\n      noticeViewed: $noticeViewed\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        owner\n        noticeID\n        noticeViewed\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getNoticeDescription = /* GraphQL */ `\n  query GetNoticeDescription($id: ID!) {\n    getNoticeDescription(id: $id) {\n      id\n      noticeTitle\n      noticeDescription\n      noticeLink\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listNoticeDescriptions = /* GraphQL */ `\n  query ListNoticeDescriptions(\n    $filter: ModelNoticeDescriptionFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listNoticeDescriptions(\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        noticeTitle\n        noticeDescription\n        noticeLink\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getDeleteAccount = /* GraphQL */ `\n  query GetDeleteAccount($id: ID!) {\n    getDeleteAccount(id: $id) {\n      id\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listDeleteAccounts = /* GraphQL */ `\n  query ListDeleteAccounts(\n    $filter: ModelDeleteAccountFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listDeleteAccounts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        owner\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getOrg = /* GraphQL */ `\n  query GetOrg($id: ID!) {\n    getOrg(id: $id) {\n      id\n      owner\n      haikuboxName\n      lat\n      lon\n      tz\n      publicDirectory\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listOrgs = /* GraphQL */ `\n  query ListOrgs(\n    $filter: ModelOrgFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listOrgs(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        owner\n        haikuboxName\n        lat\n        lon\n        tz\n        publicDirectory\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const orgByPublicDirectory = /* GraphQL */ `\n  query OrgByPublicDirectory(\n    $publicDirectory: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelorgFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    orgByPublicDirectory(\n      publicDirectory: $publicDirectory\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        owner\n        haikuboxName\n        lat\n        lon\n        tz\n        publicDirectory\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getSubscription = /* GraphQL */ `\n  query GetSubscription($id: ID!) {\n    getSubscription(id: $id) {\n      id\n      owner\n      stripeCustomer\n      prepaidType\n      prepaidPeriodEndUnix\n      stripeCurrentPeriodEndUnix\n      subscriptionId\n      autoRenew\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listSubscriptions = /* GraphQL */ `\n  query ListSubscriptions(\n    $filter: ModelSubscriptionFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listSubscriptions(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        owner\n        stripeCustomer\n        prepaidType\n        prepaidPeriodEndUnix\n        stripeCurrentPeriodEndUnix\n        subscriptionId\n        autoRenew\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const subscriptionByOwner = /* GraphQL */ `\n  query SubscriptionByOwner(\n    $owner: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelsubscriptionFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    subscriptionByOwner(\n      owner: $owner\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        owner\n        stripeCustomer\n        prepaidType\n        prepaidPeriodEndUnix\n        stripeCurrentPeriodEndUnix\n        subscriptionId\n        autoRenew\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const subscriptionByStripeCustomer = /* GraphQL */ `\n  query SubscriptionByStripeCustomer(\n    $stripeCustomer: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelsubscriptionFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    subscriptionByStripeCustomer(\n      stripeCustomer: $stripeCustomer\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        owner\n        stripeCustomer\n        prepaidType\n        prepaidPeriodEndUnix\n        stripeCurrentPeriodEndUnix\n        subscriptionId\n        autoRenew\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getSubscriptionHistory = /* GraphQL */ `\n  query GetSubscriptionHistory($id: ID!) {\n    getSubscriptionHistory(id: $id) {\n      id\n      owner\n      serial\n      eventType\n      latestInvoice\n      stripeCustomer\n      subscriptionId\n      autoRenew\n      datePaidUnix\n      unitAmount\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listSubscriptionHistories = /* GraphQL */ `\n  query ListSubscriptionHistories(\n    $filter: ModelSubscriptionHistoryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listSubscriptionHistories(\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        owner\n        serial\n        eventType\n        latestInvoice\n        stripeCustomer\n        subscriptionId\n        autoRenew\n        datePaidUnix\n        unitAmount\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const subscriptionHistoryBySerial = /* GraphQL */ `\n  query SubscriptionHistoryBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelsubscriptionHistoryFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    subscriptionHistoryBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        owner\n        serial\n        eventType\n        latestInvoice\n        stripeCustomer\n        subscriptionId\n        autoRenew\n        datePaidUnix\n        unitAmount\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getFavoriteHit = /* GraphQL */ `\n  query GetFavoriteHit($id: ID!) {\n    getFavoriteHit(id: $id) {\n      id\n      serial\n      owner\n      dt\n      animalGroup\n      cn\n      sn\n      spCode\n      wav\n      score\n      specSum\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listFavoriteHits = /* GraphQL */ `\n  query ListFavoriteHits(\n    $filter: ModelFavoriteHitFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listFavoriteHits(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        serial\n        owner\n        dt\n        animalGroup\n        cn\n        sn\n        spCode\n        wav\n        score\n        specSum\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const favoriteHitBySerial = /* GraphQL */ `\n  query FavoriteHitBySerial(\n    $serial: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelfavoriteHitFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    favoriteHitBySerial(\n      serial: $serial\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        dt\n        animalGroup\n        cn\n        sn\n        spCode\n        wav\n        score\n        specSum\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const favoriteHitByOwner = /* GraphQL */ `\n  query FavoriteHitByOwner(\n    $owner: String!\n    $sortDirection: ModelSortDirection\n    $filter: ModelfavoriteHitFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    favoriteHitByOwner(\n      owner: $owner\n      sortDirection: $sortDirection\n      filter: $filter\n      limit: $limit\n      nextToken: $nextToken\n    ) {\n      items {\n        id\n        serial\n        owner\n        dt\n        animalGroup\n        cn\n        sn\n        spCode\n        wav\n        score\n        specSum\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const getUserSettings = /* GraphQL */ `\n  query GetUserSettings($id: ID!) {\n    getUserSettings(id: $id) {\n      id\n      owner\n      hidePics\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const listUserSettings = /* GraphQL */ `\n  query ListUserSettings(\n    $filter: ModelUserSettingsFilterInput\n    $limit: Int\n    $nextToken: String\n  ) {\n    listUserSettings(filter: $filter, limit: $limit, nextToken: $nextToken) {\n      items {\n        id\n        owner\n        hidePics\n        createdAt\n        updatedAt\n      }\n      nextToken\n    }\n  }\n`;\nexport const stripeUrl = /* GraphQL */ `\n  query StripeUrl(\n    $serial: String\n    $email: String\n    $owner: String\n    $autoRenew: Boolean\n  ) {\n    stripeUrl(\n      serial: $serial\n      email: $email\n      owner: $owner\n      autoRenew: $autoRenew\n    )\n  }\n`;\n","/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const createDevice = /* GraphQL */ `\n  mutation CreateDevice(\n    $input: CreateDeviceInput!\n    $condition: ModelDeviceConditionInput\n  ) {\n    createDevice(input: $input, condition: $condition) {\n      id\n      serial\n      type\n      version\n      owner\n      name\n      privateAudio\n      shareLink\n      shareBird\n      shareMarine\n      hideOnMap\n      collectSoundscape\n      createdAt\n      updatedAt\n      lat\n      lon\n      tzOffsetMinutes\n      tz\n      smsPhone1\n      smsPhone2\n      smsTimeStart\n      smsTimeStop\n      smsPause\n      newBirdAlert\n    }\n  }\n`;\nexport const updateDevice = /* GraphQL */ `\n  mutation UpdateDevice(\n    $input: UpdateDeviceInput!\n    $condition: ModelDeviceConditionInput\n  ) {\n    updateDevice(input: $input, condition: $condition) {\n      id\n      serial\n      type\n      version\n      owner\n      name\n      privateAudio\n      shareLink\n      shareBird\n      shareMarine\n      hideOnMap\n      collectSoundscape\n      createdAt\n      updatedAt\n      lat\n      lon\n      tzOffsetMinutes\n      tz\n      smsPhone1\n      smsPhone2\n      smsTimeStart\n      smsTimeStop\n      smsPause\n      newBirdAlert\n    }\n  }\n`;\nexport const deleteDevice = /* GraphQL */ `\n  mutation DeleteDevice(\n    $input: DeleteDeviceInput!\n    $condition: ModelDeviceConditionInput\n  ) {\n    deleteDevice(input: $input, condition: $condition) {\n      id\n      serial\n      type\n      version\n      owner\n      name\n      privateAudio\n      shareLink\n      shareBird\n      shareMarine\n      hideOnMap\n      collectSoundscape\n      createdAt\n      updatedAt\n      lat\n      lon\n      tzOffsetMinutes\n      tz\n      smsPhone1\n      smsPhone2\n      smsTimeStart\n      smsTimeStop\n      smsPause\n      newBirdAlert\n    }\n  }\n`;\nexport const createDeviceHistory = /* GraphQL */ `\n  mutation CreateDeviceHistory(\n    $input: CreateDeviceHistoryInput!\n    $condition: ModelDeviceHistoryConditionInput\n  ) {\n    createDeviceHistory(input: $input, condition: $condition) {\n      id\n      serial\n      version\n      owner\n      name\n      shareBird\n      createDate\n      createdAt\n      updatedAt\n      lat\n      lon\n      deviceAction\n    }\n  }\n`;\nexport const updateDeviceHistory = /* GraphQL */ `\n  mutation UpdateDeviceHistory(\n    $input: UpdateDeviceHistoryInput!\n    $condition: ModelDeviceHistoryConditionInput\n  ) {\n    updateDeviceHistory(input: $input, condition: $condition) {\n      id\n      serial\n      version\n      owner\n      name\n      shareBird\n      createDate\n      createdAt\n      updatedAt\n      lat\n      lon\n      deviceAction\n    }\n  }\n`;\nexport const deleteDeviceHistory = /* GraphQL */ `\n  mutation DeleteDeviceHistory(\n    $input: DeleteDeviceHistoryInput!\n    $condition: ModelDeviceHistoryConditionInput\n  ) {\n    deleteDeviceHistory(input: $input, condition: $condition) {\n      id\n      serial\n      version\n      owner\n      name\n      shareBird\n      createDate\n      createdAt\n      updatedAt\n      lat\n      lon\n      deviceAction\n    }\n  }\n`;\nexport const createHit = /* GraphQL */ `\n  mutation CreateHit(\n    $input: CreateHitInput!\n    $condition: ModelHitConditionInput\n  ) {\n    createHit(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      lat\n      lon\n      score\n      specSum\n      version\n      detectionArray\n      detectionConfidence\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateHit = /* GraphQL */ `\n  mutation UpdateHit(\n    $input: UpdateHitInput!\n    $condition: ModelHitConditionInput\n  ) {\n    updateHit(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      lat\n      lon\n      score\n      specSum\n      version\n      detectionArray\n      detectionConfidence\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteHit = /* GraphQL */ `\n  mutation DeleteHit(\n    $input: DeleteHitInput!\n    $condition: ModelHitConditionInput\n  ) {\n    deleteHit(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      lat\n      lon\n      score\n      specSum\n      version\n      detectionArray\n      detectionConfidence\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createHitNotInGrid = /* GraphQL */ `\n  mutation CreateHitNotInGrid(\n    $input: CreateHitNotInGridInput!\n    $condition: ModelHitNotInGridConditionInput\n  ) {\n    createHitNotInGrid(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      latitude\n      longitude\n      score\n      specSum\n      version\n      detectionArrayF\n      detectionConfidenceF\n      detectionArrayUf\n      detectionConfidenceUf\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateHitNotInGrid = /* GraphQL */ `\n  mutation UpdateHitNotInGrid(\n    $input: UpdateHitNotInGridInput!\n    $condition: ModelHitNotInGridConditionInput\n  ) {\n    updateHitNotInGrid(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      latitude\n      longitude\n      score\n      specSum\n      version\n      detectionArrayF\n      detectionConfidenceF\n      detectionArrayUf\n      detectionConfidenceUf\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteHitNotInGrid = /* GraphQL */ `\n  mutation DeleteHitNotInGrid(\n    $input: DeleteHitNotInGridInput!\n    $condition: ModelHitNotInGridConditionInput\n  ) {\n    deleteHitNotInGrid(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      latitude\n      longitude\n      score\n      specSum\n      version\n      detectionArrayF\n      detectionConfidenceF\n      detectionArrayUf\n      detectionConfidenceUf\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createDeviceState = /* GraphQL */ `\n  mutation CreateDeviceState(\n    $input: CreateDeviceStateInput!\n    $condition: ModelDeviceStateConditionInput\n  ) {\n    createDeviceState(input: $input, condition: $condition) {\n      id\n      serial\n      type\n      lat\n      lon\n      timezone\n      connected\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateDeviceState = /* GraphQL */ `\n  mutation UpdateDeviceState(\n    $input: UpdateDeviceStateInput!\n    $condition: ModelDeviceStateConditionInput\n  ) {\n    updateDeviceState(input: $input, condition: $condition) {\n      id\n      serial\n      type\n      lat\n      lon\n      timezone\n      connected\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteDeviceState = /* GraphQL */ `\n  mutation DeleteDeviceState(\n    $input: DeleteDeviceStateInput!\n    $condition: ModelDeviceStateConditionInput\n  ) {\n    deleteDeviceState(input: $input, condition: $condition) {\n      id\n      serial\n      type\n      lat\n      lon\n      timezone\n      connected\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createBootTable = /* GraphQL */ `\n  mutation CreateBootTable(\n    $input: CreateBootTableInput!\n    $condition: ModelBootTableConditionInput\n  ) {\n    createBootTable(input: $input, condition: $condition) {\n      id\n      serial\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateBootTable = /* GraphQL */ `\n  mutation UpdateBootTable(\n    $input: UpdateBootTableInput!\n    $condition: ModelBootTableConditionInput\n  ) {\n    updateBootTable(input: $input, condition: $condition) {\n      id\n      serial\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteBootTable = /* GraphQL */ `\n  mutation DeleteBootTable(\n    $input: DeleteBootTableInput!\n    $condition: ModelBootTableConditionInput\n  ) {\n    deleteBootTable(input: $input, condition: $condition) {\n      id\n      serial\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createStatusTable = /* GraphQL */ `\n  mutation CreateStatusTable(\n    $input: CreateStatusTableInput!\n    $condition: ModelStatusTableConditionInput\n  ) {\n    createStatusTable(input: $input, condition: $condition) {\n      id\n      serial\n      cpuTemp\n      cpuFreq\n      warning\n      ramdisk\n      signal\n      availMem\n      pyMem\n      gridLength\n      nDirect\n      nCloud\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateStatusTable = /* GraphQL */ `\n  mutation UpdateStatusTable(\n    $input: UpdateStatusTableInput!\n    $condition: ModelStatusTableConditionInput\n  ) {\n    updateStatusTable(input: $input, condition: $condition) {\n      id\n      serial\n      cpuTemp\n      cpuFreq\n      warning\n      ramdisk\n      signal\n      availMem\n      pyMem\n      gridLength\n      nDirect\n      nCloud\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteStatusTable = /* GraphQL */ `\n  mutation DeleteStatusTable(\n    $input: DeleteStatusTableInput!\n    $condition: ModelStatusTableConditionInput\n  ) {\n    deleteStatusTable(input: $input, condition: $condition) {\n      id\n      serial\n      cpuTemp\n      cpuFreq\n      warning\n      ramdisk\n      signal\n      availMem\n      pyMem\n      gridLength\n      nDirect\n      nCloud\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createLogTable = /* GraphQL */ `\n  mutation CreateLogTable(\n    $input: CreateLogTableInput!\n    $condition: ModelLogTableConditionInput\n  ) {\n    createLogTable(input: $input, condition: $condition) {\n      id\n      serial\n      log\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateLogTable = /* GraphQL */ `\n  mutation UpdateLogTable(\n    $input: UpdateLogTableInput!\n    $condition: ModelLogTableConditionInput\n  ) {\n    updateLogTable(input: $input, condition: $condition) {\n      id\n      serial\n      log\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteLogTable = /* GraphQL */ `\n  mutation DeleteLogTable(\n    $input: DeleteLogTableInput!\n    $condition: ModelLogTableConditionInput\n  ) {\n    deleteLogTable(input: $input, condition: $condition) {\n      id\n      serial\n      log\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createExceptionTable = /* GraphQL */ `\n  mutation CreateExceptionTable(\n    $input: CreateExceptionTableInput!\n    $condition: ModelExceptionTableConditionInput\n  ) {\n    createExceptionTable(input: $input, condition: $condition) {\n      id\n      serial\n      exception\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateExceptionTable = /* GraphQL */ `\n  mutation UpdateExceptionTable(\n    $input: UpdateExceptionTableInput!\n    $condition: ModelExceptionTableConditionInput\n  ) {\n    updateExceptionTable(input: $input, condition: $condition) {\n      id\n      serial\n      exception\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteExceptionTable = /* GraphQL */ `\n  mutation DeleteExceptionTable(\n    $input: DeleteExceptionTableInput!\n    $condition: ModelExceptionTableConditionInput\n  ) {\n    deleteExceptionTable(input: $input, condition: $condition) {\n      id\n      serial\n      exception\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createDailyCount = /* GraphQL */ `\n  mutation CreateDailyCount(\n    $input: CreateDailyCountInput!\n    $condition: ModelDailyCountConditionInput\n  ) {\n    createDailyCount(input: $input, condition: $condition) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateDailyCount = /* GraphQL */ `\n  mutation UpdateDailyCount(\n    $input: UpdateDailyCountInput!\n    $condition: ModelDailyCountConditionInput\n  ) {\n    updateDailyCount(input: $input, condition: $condition) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteDailyCount = /* GraphQL */ `\n  mutation DeleteDailyCount(\n    $input: DeleteDailyCountInput!\n    $condition: ModelDailyCountConditionInput\n  ) {\n    deleteDailyCount(input: $input, condition: $condition) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createHourlyCount = /* GraphQL */ `\n  mutation CreateHourlyCount(\n    $input: CreateHourlyCountInput!\n    $condition: ModelHourlyCountConditionInput\n  ) {\n    createHourlyCount(input: $input, condition: $condition) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateHourlyCount = /* GraphQL */ `\n  mutation UpdateHourlyCount(\n    $input: UpdateHourlyCountInput!\n    $condition: ModelHourlyCountConditionInput\n  ) {\n    updateHourlyCount(input: $input, condition: $condition) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteHourlyCount = /* GraphQL */ `\n  mutation DeleteHourlyCount(\n    $input: DeleteHourlyCountInput!\n    $condition: ModelHourlyCountConditionInput\n  ) {\n    deleteHourlyCount(input: $input, condition: $condition) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createLabeledData = /* GraphQL */ `\n  mutation CreateLabeledData(\n    $input: CreateLabeledDataInput!\n    $condition: ModelLabeledDataConditionInput\n  ) {\n    createLabeledData(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      labeledBy\n      label\n      score\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateLabeledData = /* GraphQL */ `\n  mutation UpdateLabeledData(\n    $input: UpdateLabeledDataInput!\n    $condition: ModelLabeledDataConditionInput\n  ) {\n    updateLabeledData(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      labeledBy\n      label\n      score\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteLabeledData = /* GraphQL */ `\n  mutation DeleteLabeledData(\n    $input: DeleteLabeledDataInput!\n    $condition: ModelLabeledDataConditionInput\n  ) {\n    deleteLabeledData(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      labeledBy\n      label\n      score\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createDailyCountSummary = /* GraphQL */ `\n  mutation CreateDailyCountSummary(\n    $input: CreateDailyCountSummaryInput!\n    $condition: ModelDailyCountSummaryConditionInput\n  ) {\n    createDailyCountSummary(input: $input, condition: $condition) {\n      id\n      serial\n      countsPerDay\n      cn\n      spCode\n      lat\n      lon\n      countDate\n      wav\n      newBirdAlertAt\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateDailyCountSummary = /* GraphQL */ `\n  mutation UpdateDailyCountSummary(\n    $input: UpdateDailyCountSummaryInput!\n    $condition: ModelDailyCountSummaryConditionInput\n  ) {\n    updateDailyCountSummary(input: $input, condition: $condition) {\n      id\n      serial\n      countsPerDay\n      cn\n      spCode\n      lat\n      lon\n      countDate\n      wav\n      newBirdAlertAt\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteDailyCountSummary = /* GraphQL */ `\n  mutation DeleteDailyCountSummary(\n    $input: DeleteDailyCountSummaryInput!\n    $condition: ModelDailyCountSummaryConditionInput\n  ) {\n    deleteDailyCountSummary(input: $input, condition: $condition) {\n      id\n      serial\n      countsPerDay\n      cn\n      spCode\n      lat\n      lon\n      countDate\n      wav\n      newBirdAlertAt\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createYearlyCountSummary = /* GraphQL */ `\n  mutation CreateYearlyCountSummary(\n    $input: CreateYearlyCountSummaryInput!\n    $condition: ModelYearlyCountSummaryConditionInput\n  ) {\n    createYearlyCountSummary(input: $input, condition: $condition) {\n      id\n      serial\n      countsTotal\n      cn\n      spCode\n      lat\n      lon\n      countYear\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateYearlyCountSummary = /* GraphQL */ `\n  mutation UpdateYearlyCountSummary(\n    $input: UpdateYearlyCountSummaryInput!\n    $condition: ModelYearlyCountSummaryConditionInput\n  ) {\n    updateYearlyCountSummary(input: $input, condition: $condition) {\n      id\n      serial\n      countsTotal\n      cn\n      spCode\n      lat\n      lon\n      countYear\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteYearlyCountSummary = /* GraphQL */ `\n  mutation DeleteYearlyCountSummary(\n    $input: DeleteYearlyCountSummaryInput!\n    $condition: ModelYearlyCountSummaryConditionInput\n  ) {\n    deleteYearlyCountSummary(input: $input, condition: $condition) {\n      id\n      serial\n      countsTotal\n      cn\n      spCode\n      lat\n      lon\n      countYear\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createUserInteraction = /* GraphQL */ `\n  mutation CreateUserInteraction(\n    $input: CreateUserInteractionInput!\n    $condition: ModelUserInteractionConditionInput\n  ) {\n    createUserInteraction(input: $input, condition: $condition) {\n      id\n      totalLabeled\n      speciesLabeled\n      speciesLabeledCode\n      totalSpeciesLabeled\n      labelStreak\n      labelStreakRecord\n      dateLastLabeled\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateUserInteraction = /* GraphQL */ `\n  mutation UpdateUserInteraction(\n    $input: UpdateUserInteractionInput!\n    $condition: ModelUserInteractionConditionInput\n  ) {\n    updateUserInteraction(input: $input, condition: $condition) {\n      id\n      totalLabeled\n      speciesLabeled\n      speciesLabeledCode\n      totalSpeciesLabeled\n      labelStreak\n      labelStreakRecord\n      dateLastLabeled\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteUserInteraction = /* GraphQL */ `\n  mutation DeleteUserInteraction(\n    $input: DeleteUserInteractionInput!\n    $condition: ModelUserInteractionConditionInput\n  ) {\n    deleteUserInteraction(input: $input, condition: $condition) {\n      id\n      totalLabeled\n      speciesLabeled\n      speciesLabeledCode\n      totalSpeciesLabeled\n      labelStreak\n      labelStreakRecord\n      dateLastLabeled\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createClickTable = /* GraphQL */ `\n  mutation CreateClickTable(\n    $input: CreateClickTableInput!\n    $condition: ModelClickTableConditionInput\n  ) {\n    createClickTable(input: $input, condition: $condition) {\n      id\n      userID\n      serial\n      spCode\n      cn\n      clickTarget\n      pageClickedFrom\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const updateClickTable = /* GraphQL */ `\n  mutation UpdateClickTable(\n    $input: UpdateClickTableInput!\n    $condition: ModelClickTableConditionInput\n  ) {\n    updateClickTable(input: $input, condition: $condition) {\n      id\n      userID\n      serial\n      spCode\n      cn\n      clickTarget\n      pageClickedFrom\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const deleteClickTable = /* GraphQL */ `\n  mutation DeleteClickTable(\n    $input: DeleteClickTableInput!\n    $condition: ModelClickTableConditionInput\n  ) {\n    deleteClickTable(input: $input, condition: $condition) {\n      id\n      userID\n      serial\n      spCode\n      cn\n      clickTarget\n      pageClickedFrom\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const createRawHaikumarine = /* GraphQL */ `\n  mutation CreateRawHaikumarine(\n    $input: CreateRawHaikumarineInput!\n    $condition: ModelRawHaikumarineConditionInput\n  ) {\n    createRawHaikumarine(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      lat\n      lon\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateRawHaikumarine = /* GraphQL */ `\n  mutation UpdateRawHaikumarine(\n    $input: UpdateRawHaikumarineInput!\n    $condition: ModelRawHaikumarineConditionInput\n  ) {\n    updateRawHaikumarine(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      lat\n      lon\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteRawHaikumarine = /* GraphQL */ `\n  mutation DeleteRawHaikumarine(\n    $input: DeleteRawHaikumarineInput!\n    $condition: ModelRawHaikumarineConditionInput\n  ) {\n    deleteRawHaikumarine(input: $input, condition: $condition) {\n      id\n      serial\n      dt\n      lat\n      lon\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createGridByLoc = /* GraphQL */ `\n  mutation CreateGridByLoc(\n    $input: CreateGridByLocInput!\n    $condition: ModelGridByLocConditionInput\n  ) {\n    createGridByLoc(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      gridName\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateGridByLoc = /* GraphQL */ `\n  mutation UpdateGridByLoc(\n    $input: UpdateGridByLocInput!\n    $condition: ModelGridByLocConditionInput\n  ) {\n    updateGridByLoc(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      gridName\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteGridByLoc = /* GraphQL */ `\n  mutation DeleteGridByLoc(\n    $input: DeleteGridByLocInput!\n    $condition: ModelGridByLocConditionInput\n  ) {\n    deleteGridByLoc(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      gridName\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createGridBySpCode = /* GraphQL */ `\n  mutation CreateGridBySpCode(\n    $input: CreateGridBySpCodeInput!\n    $condition: ModelGridBySpCodeConditionInput\n  ) {\n    createGridBySpCode(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      gridName\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateGridBySpCode = /* GraphQL */ `\n  mutation UpdateGridBySpCode(\n    $input: UpdateGridBySpCodeInput!\n    $condition: ModelGridBySpCodeConditionInput\n  ) {\n    updateGridBySpCode(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      gridName\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteGridBySpCode = /* GraphQL */ `\n  mutation DeleteGridBySpCode(\n    $input: DeleteGridBySpCodeInput!\n    $condition: ModelGridBySpCodeConditionInput\n  ) {\n    deleteGridBySpCode(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      gridName\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createGridHistory = /* GraphQL */ `\n  mutation CreateGridHistory(\n    $input: CreateGridHistoryInput!\n    $condition: ModelGridHistoryConditionInput\n  ) {\n    createGridHistory(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      modType\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateGridHistory = /* GraphQL */ `\n  mutation UpdateGridHistory(\n    $input: UpdateGridHistoryInput!\n    $condition: ModelGridHistoryConditionInput\n  ) {\n    updateGridHistory(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      modType\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteGridHistory = /* GraphQL */ `\n  mutation DeleteGridHistory(\n    $input: DeleteGridHistoryInput!\n    $condition: ModelGridHistoryConditionInput\n  ) {\n    deleteGridHistory(input: $input, condition: $condition) {\n      id\n      lat\n      lon\n      week\n      spCode\n      cn\n      sn\n      modType\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createHideBird = /* GraphQL */ `\n  mutation CreateHideBird(\n    $input: CreateHideBirdInput!\n    $condition: ModelHideBirdConditionInput\n  ) {\n    createHideBird(input: $input, condition: $condition) {\n      id\n      spCode\n      cn\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const updateHideBird = /* GraphQL */ `\n  mutation UpdateHideBird(\n    $input: UpdateHideBirdInput!\n    $condition: ModelHideBirdConditionInput\n  ) {\n    updateHideBird(input: $input, condition: $condition) {\n      id\n      spCode\n      cn\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const deleteHideBird = /* GraphQL */ `\n  mutation DeleteHideBird(\n    $input: DeleteHideBirdInput!\n    $condition: ModelHideBirdConditionInput\n  ) {\n    deleteHideBird(input: $input, condition: $condition) {\n      id\n      spCode\n      cn\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const createNotifyBird = /* GraphQL */ `\n  mutation CreateNotifyBird(\n    $input: CreateNotifyBirdInput!\n    $condition: ModelNotifyBirdConditionInput\n  ) {\n    createNotifyBird(input: $input, condition: $condition) {\n      id\n      spCode\n      cn\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const updateNotifyBird = /* GraphQL */ `\n  mutation UpdateNotifyBird(\n    $input: UpdateNotifyBirdInput!\n    $condition: ModelNotifyBirdConditionInput\n  ) {\n    updateNotifyBird(input: $input, condition: $condition) {\n      id\n      spCode\n      cn\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const deleteNotifyBird = /* GraphQL */ `\n  mutation DeleteNotifyBird(\n    $input: DeleteNotifyBirdInput!\n    $condition: ModelNotifyBirdConditionInput\n  ) {\n    deleteNotifyBird(input: $input, condition: $condition) {\n      id\n      spCode\n      cn\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const createNotifications = /* GraphQL */ `\n  mutation CreateNotifications(\n    $input: CreateNotificationsInput!\n    $condition: ModelNotificationsConditionInput\n  ) {\n    createNotifications(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      played\n      notificationType\n      cn\n      spCode\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateNotifications = /* GraphQL */ `\n  mutation UpdateNotifications(\n    $input: UpdateNotificationsInput!\n    $condition: ModelNotificationsConditionInput\n  ) {\n    updateNotifications(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      played\n      notificationType\n      cn\n      spCode\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteNotifications = /* GraphQL */ `\n  mutation DeleteNotifications(\n    $input: DeleteNotificationsInput!\n    $condition: ModelNotificationsConditionInput\n  ) {\n    deleteNotifications(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      played\n      notificationType\n      cn\n      spCode\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createOneSignal = /* GraphQL */ `\n  mutation CreateOneSignal(\n    $input: CreateOneSignalInput!\n    $condition: ModelOneSignalConditionInput\n  ) {\n    createOneSignal(input: $input, condition: $condition) {\n      id\n      playerID\n      platform\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const updateOneSignal = /* GraphQL */ `\n  mutation UpdateOneSignal(\n    $input: UpdateOneSignalInput!\n    $condition: ModelOneSignalConditionInput\n  ) {\n    updateOneSignal(input: $input, condition: $condition) {\n      id\n      playerID\n      platform\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const deleteOneSignal = /* GraphQL */ `\n  mutation DeleteOneSignal(\n    $input: DeleteOneSignalInput!\n    $condition: ModelOneSignalConditionInput\n  ) {\n    deleteOneSignal(input: $input, condition: $condition) {\n      id\n      playerID\n      platform\n      serial\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const createOneSignalConsent = /* GraphQL */ `\n  mutation CreateOneSignalConsent(\n    $input: CreateOneSignalConsentInput!\n    $condition: ModelOneSignalConsentConditionInput\n  ) {\n    createOneSignalConsent(input: $input, condition: $condition) {\n      id\n      osConsentGranted\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const updateOneSignalConsent = /* GraphQL */ `\n  mutation UpdateOneSignalConsent(\n    $input: UpdateOneSignalConsentInput!\n    $condition: ModelOneSignalConsentConditionInput\n  ) {\n    updateOneSignalConsent(input: $input, condition: $condition) {\n      id\n      osConsentGranted\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const deleteOneSignalConsent = /* GraphQL */ `\n  mutation DeleteOneSignalConsent(\n    $input: DeleteOneSignalConsentInput!\n    $condition: ModelOneSignalConsentConditionInput\n  ) {\n    deleteOneSignalConsent(input: $input, condition: $condition) {\n      id\n      osConsentGranted\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const createShareMap = /* GraphQL */ `\n  mutation CreateShareMap(\n    $input: CreateShareMapInput!\n    $condition: ModelShareMapConditionInput\n  ) {\n    createShareMap(input: $input, condition: $condition) {\n      id\n      name\n      shareLat\n      shareLon\n      tz\n      connected\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const updateShareMap = /* GraphQL */ `\n  mutation UpdateShareMap(\n    $input: UpdateShareMapInput!\n    $condition: ModelShareMapConditionInput\n  ) {\n    updateShareMap(input: $input, condition: $condition) {\n      id\n      name\n      shareLat\n      shareLon\n      tz\n      connected\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const deleteShareMap = /* GraphQL */ `\n  mutation DeleteShareMap(\n    $input: DeleteShareMapInput!\n    $condition: ModelShareMapConditionInput\n  ) {\n    deleteShareMap(input: $input, condition: $condition) {\n      id\n      name\n      shareLat\n      shareLon\n      tz\n      connected\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const createHaikuboxUser = /* GraphQL */ `\n  mutation CreateHaikuboxUser(\n    $input: CreateHaikuboxUserInput!\n    $condition: ModelHaikuboxUserConditionInput\n  ) {\n    createHaikuboxUser(input: $input, condition: $condition) {\n      id\n      email\n      confirmedEmail\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateHaikuboxUser = /* GraphQL */ `\n  mutation UpdateHaikuboxUser(\n    $input: UpdateHaikuboxUserInput!\n    $condition: ModelHaikuboxUserConditionInput\n  ) {\n    updateHaikuboxUser(input: $input, condition: $condition) {\n      id\n      email\n      confirmedEmail\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteHaikuboxUser = /* GraphQL */ `\n  mutation DeleteHaikuboxUser(\n    $input: DeleteHaikuboxUserInput!\n    $condition: ModelHaikuboxUserConditionInput\n  ) {\n    deleteHaikuboxUser(input: $input, condition: $condition) {\n      id\n      email\n      confirmedEmail\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createBookmarkHaikubox = /* GraphQL */ `\n  mutation CreateBookmarkHaikubox(\n    $input: CreateBookmarkHaikuboxInput!\n    $condition: ModelBookmarkHaikuboxConditionInput\n  ) {\n    createBookmarkHaikubox(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateBookmarkHaikubox = /* GraphQL */ `\n  mutation UpdateBookmarkHaikubox(\n    $input: UpdateBookmarkHaikuboxInput!\n    $condition: ModelBookmarkHaikuboxConditionInput\n  ) {\n    updateBookmarkHaikubox(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteBookmarkHaikubox = /* GraphQL */ `\n  mutation DeleteBookmarkHaikubox(\n    $input: DeleteBookmarkHaikuboxInput!\n    $condition: ModelBookmarkHaikuboxConditionInput\n  ) {\n    deleteBookmarkHaikubox(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createUnclaimHaikubox = /* GraphQL */ `\n  mutation CreateUnclaimHaikubox(\n    $input: CreateUnclaimHaikuboxInput!\n    $condition: ModelUnclaimHaikuboxConditionInput\n  ) {\n    createUnclaimHaikubox(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      email\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateUnclaimHaikubox = /* GraphQL */ `\n  mutation UpdateUnclaimHaikubox(\n    $input: UpdateUnclaimHaikuboxInput!\n    $condition: ModelUnclaimHaikuboxConditionInput\n  ) {\n    updateUnclaimHaikubox(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      email\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteUnclaimHaikubox = /* GraphQL */ `\n  mutation DeleteUnclaimHaikubox(\n    $input: DeleteUnclaimHaikuboxInput!\n    $condition: ModelUnclaimHaikuboxConditionInput\n  ) {\n    deleteUnclaimHaikubox(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      email\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createUserNotice = /* GraphQL */ `\n  mutation CreateUserNotice(\n    $input: CreateUserNoticeInput!\n    $condition: ModelUserNoticeConditionInput\n  ) {\n    createUserNotice(input: $input, condition: $condition) {\n      id\n      owner\n      noticeID\n      noticeViewed\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateUserNotice = /* GraphQL */ `\n  mutation UpdateUserNotice(\n    $input: UpdateUserNoticeInput!\n    $condition: ModelUserNoticeConditionInput\n  ) {\n    updateUserNotice(input: $input, condition: $condition) {\n      id\n      owner\n      noticeID\n      noticeViewed\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteUserNotice = /* GraphQL */ `\n  mutation DeleteUserNotice(\n    $input: DeleteUserNoticeInput!\n    $condition: ModelUserNoticeConditionInput\n  ) {\n    deleteUserNotice(input: $input, condition: $condition) {\n      id\n      owner\n      noticeID\n      noticeViewed\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createNoticeDescription = /* GraphQL */ `\n  mutation CreateNoticeDescription(\n    $input: CreateNoticeDescriptionInput!\n    $condition: ModelNoticeDescriptionConditionInput\n  ) {\n    createNoticeDescription(input: $input, condition: $condition) {\n      id\n      noticeTitle\n      noticeDescription\n      noticeLink\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateNoticeDescription = /* GraphQL */ `\n  mutation UpdateNoticeDescription(\n    $input: UpdateNoticeDescriptionInput!\n    $condition: ModelNoticeDescriptionConditionInput\n  ) {\n    updateNoticeDescription(input: $input, condition: $condition) {\n      id\n      noticeTitle\n      noticeDescription\n      noticeLink\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteNoticeDescription = /* GraphQL */ `\n  mutation DeleteNoticeDescription(\n    $input: DeleteNoticeDescriptionInput!\n    $condition: ModelNoticeDescriptionConditionInput\n  ) {\n    deleteNoticeDescription(input: $input, condition: $condition) {\n      id\n      noticeTitle\n      noticeDescription\n      noticeLink\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createDeleteAccount = /* GraphQL */ `\n  mutation CreateDeleteAccount(\n    $input: CreateDeleteAccountInput!\n    $condition: ModelDeleteAccountConditionInput\n  ) {\n    createDeleteAccount(input: $input, condition: $condition) {\n      id\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateDeleteAccount = /* GraphQL */ `\n  mutation UpdateDeleteAccount(\n    $input: UpdateDeleteAccountInput!\n    $condition: ModelDeleteAccountConditionInput\n  ) {\n    updateDeleteAccount(input: $input, condition: $condition) {\n      id\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteDeleteAccount = /* GraphQL */ `\n  mutation DeleteDeleteAccount(\n    $input: DeleteDeleteAccountInput!\n    $condition: ModelDeleteAccountConditionInput\n  ) {\n    deleteDeleteAccount(input: $input, condition: $condition) {\n      id\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createOrg = /* GraphQL */ `\n  mutation CreateOrg(\n    $input: CreateOrgInput!\n    $condition: ModelOrgConditionInput\n  ) {\n    createOrg(input: $input, condition: $condition) {\n      id\n      owner\n      haikuboxName\n      lat\n      lon\n      tz\n      publicDirectory\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateOrg = /* GraphQL */ `\n  mutation UpdateOrg(\n    $input: UpdateOrgInput!\n    $condition: ModelOrgConditionInput\n  ) {\n    updateOrg(input: $input, condition: $condition) {\n      id\n      owner\n      haikuboxName\n      lat\n      lon\n      tz\n      publicDirectory\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteOrg = /* GraphQL */ `\n  mutation DeleteOrg(\n    $input: DeleteOrgInput!\n    $condition: ModelOrgConditionInput\n  ) {\n    deleteOrg(input: $input, condition: $condition) {\n      id\n      owner\n      haikuboxName\n      lat\n      lon\n      tz\n      publicDirectory\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createSubscription = /* GraphQL */ `\n  mutation CreateSubscription(\n    $input: CreateSubscriptionInput!\n    $condition: ModelSubscriptionConditionInput\n  ) {\n    createSubscription(input: $input, condition: $condition) {\n      id\n      owner\n      stripeCustomer\n      prepaidType\n      prepaidPeriodEndUnix\n      stripeCurrentPeriodEndUnix\n      subscriptionId\n      autoRenew\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateSubscription = /* GraphQL */ `\n  mutation UpdateSubscription(\n    $input: UpdateSubscriptionInput!\n    $condition: ModelSubscriptionConditionInput\n  ) {\n    updateSubscription(input: $input, condition: $condition) {\n      id\n      owner\n      stripeCustomer\n      prepaidType\n      prepaidPeriodEndUnix\n      stripeCurrentPeriodEndUnix\n      subscriptionId\n      autoRenew\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteSubscription = /* GraphQL */ `\n  mutation DeleteSubscription(\n    $input: DeleteSubscriptionInput!\n    $condition: ModelSubscriptionConditionInput\n  ) {\n    deleteSubscription(input: $input, condition: $condition) {\n      id\n      owner\n      stripeCustomer\n      prepaidType\n      prepaidPeriodEndUnix\n      stripeCurrentPeriodEndUnix\n      subscriptionId\n      autoRenew\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createSubscriptionHistory = /* GraphQL */ `\n  mutation CreateSubscriptionHistory(\n    $input: CreateSubscriptionHistoryInput!\n    $condition: ModelSubscriptionHistoryConditionInput\n  ) {\n    createSubscriptionHistory(input: $input, condition: $condition) {\n      id\n      owner\n      serial\n      eventType\n      latestInvoice\n      stripeCustomer\n      subscriptionId\n      autoRenew\n      datePaidUnix\n      unitAmount\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateSubscriptionHistory = /* GraphQL */ `\n  mutation UpdateSubscriptionHistory(\n    $input: UpdateSubscriptionHistoryInput!\n    $condition: ModelSubscriptionHistoryConditionInput\n  ) {\n    updateSubscriptionHistory(input: $input, condition: $condition) {\n      id\n      owner\n      serial\n      eventType\n      latestInvoice\n      stripeCustomer\n      subscriptionId\n      autoRenew\n      datePaidUnix\n      unitAmount\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteSubscriptionHistory = /* GraphQL */ `\n  mutation DeleteSubscriptionHistory(\n    $input: DeleteSubscriptionHistoryInput!\n    $condition: ModelSubscriptionHistoryConditionInput\n  ) {\n    deleteSubscriptionHistory(input: $input, condition: $condition) {\n      id\n      owner\n      serial\n      eventType\n      latestInvoice\n      stripeCustomer\n      subscriptionId\n      autoRenew\n      datePaidUnix\n      unitAmount\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createFavoriteHit = /* GraphQL */ `\n  mutation CreateFavoriteHit(\n    $input: CreateFavoriteHitInput!\n    $condition: ModelFavoriteHitConditionInput\n  ) {\n    createFavoriteHit(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      dt\n      animalGroup\n      cn\n      sn\n      spCode\n      wav\n      score\n      specSum\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateFavoriteHit = /* GraphQL */ `\n  mutation UpdateFavoriteHit(\n    $input: UpdateFavoriteHitInput!\n    $condition: ModelFavoriteHitConditionInput\n  ) {\n    updateFavoriteHit(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      dt\n      animalGroup\n      cn\n      sn\n      spCode\n      wav\n      score\n      specSum\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteFavoriteHit = /* GraphQL */ `\n  mutation DeleteFavoriteHit(\n    $input: DeleteFavoriteHitInput!\n    $condition: ModelFavoriteHitConditionInput\n  ) {\n    deleteFavoriteHit(input: $input, condition: $condition) {\n      id\n      serial\n      owner\n      dt\n      animalGroup\n      cn\n      sn\n      spCode\n      wav\n      score\n      specSum\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const createUserSettings = /* GraphQL */ `\n  mutation CreateUserSettings(\n    $input: CreateUserSettingsInput!\n    $condition: ModelUserSettingsConditionInput\n  ) {\n    createUserSettings(input: $input, condition: $condition) {\n      id\n      owner\n      hidePics\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const updateUserSettings = /* GraphQL */ `\n  mutation UpdateUserSettings(\n    $input: UpdateUserSettingsInput!\n    $condition: ModelUserSettingsConditionInput\n  ) {\n    updateUserSettings(input: $input, condition: $condition) {\n      id\n      owner\n      hidePics\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const deleteUserSettings = /* GraphQL */ `\n  mutation DeleteUserSettings(\n    $input: DeleteUserSettingsInput!\n    $condition: ModelUserSettingsConditionInput\n  ) {\n    deleteUserSettings(input: $input, condition: $condition) {\n      id\n      owner\n      hidePics\n      createdAt\n      updatedAt\n    }\n  }\n`;\n","\"use strict\";function unmute(i,e,n){var t;function d(n,i,e,t,d){for(var o=0;o<i.length;++o)n.addEventListener(i[o],e,{capture:t,passive:d})}function o(n,i,e,t,d){for(var o=0;o<i.length;++o)n.removeEventListener(i[o],e,{capture:t,passive:d})}function a(){}void 0===e&&(e=!1),void 0===n&&(n=!1),void 0!==document.hidden?t={hidden:\"hidden\",visibilitychange:\"visibilitychange\"}:void 0!==document.webkitHidden?t={hidden:\"webkitHidden\",visibilitychange:\"webkitvisibilitychange\"}:void 0!==document.mozHidden?t={hidden:\"mozHidden\",visibilitychange:\"mozvisibilitychange\"}:void 0!==document.msHidden&&(t={hidden:\"msHidden\",visibilitychange:\"msvisibilitychange\"});var c=navigator.userAgent.toLowerCase(),u=n||0<=c.indexOf(\"iphone\")&&c.indexOf(\"like iphone\")<0||0<=c.indexOf(\"ipad\")&&c.indexOf(\"like ipad\")<0||0<=c.indexOf(\"ipod\")&&c.indexOf(\"like ipod\")<0||0<=c.indexOf(\"mac os x\")&&0<navigator.maxTouchPoints,A=!0;function s(){var n=!(!e&&(t&&document[t.hidden]||u&&!document.hasFocus()));n!==A&&(A=n,b(!1),h())}function l(){s()}function r(n){n&&n.target!==window||s()}function h(){var n;A?\"running\"!==i.state&&\"closed\"!==i.state&&k&&(n=i.resume(),n&&n.then(a,a).catch(a)):\"running\"===i.state&&(n=i.suspend(),n&&n.then(a,a).catch(a))}function v(n){n&&n.unmute_handled||(n.unmute_handled=!0,h())}t&&d(document,[t.visibilitychange],l,!0,!0),u&&d(window,[\"focus\",\"blur\"],r,!0,!0),d(i,[\"statechange\"],v,!0,!0),i.onstatechange||(i.onstatechange=v);var g=null;function m(n,i){for(var e=i;1<n;n--)e+=i;return e}var f=\"data:audio/mpeg;base64,//uQx\"+m(23,\"A\")+\"WGluZwAAAA8AAAACAAACcQCA\"+m(16,\"gICA\")+m(66,\"/\")+\"8AAABhTEFNRTMuMTAwA8MAAAAAAAAAABQgJAUHQQAB9AAAAnGMHkkI\"+m(320,\"A\")+\"//sQxAADgnABGiAAQBCqgCRMAAgEAH\"+m(15,\"/\")+\"7+n/9FTuQsQH//////2NG0jWUGlio5gLQTOtIoeR2WX////X4s9Atb/JRVCbBUpeRUq\"+m(18,\"/\")+\"9RUi0f2jn/+xDECgPCjAEQAABN4AAANIAAAAQVTEFNRTMuMTAw\"+m(97,\"V\")+\"Q==\";function b(n){var i;u&&(A?n&&(g||(i=document.createElement(\"div\"),i.innerHTML=\"<audio x-webkit-airplay='deny'></audio>\",g=i.children.item(0),g.controls=!1,g.disableRemotePlayback=!0,g.preload=\"auto\",g.src=f,g.loop=!0,g.load()),g.paused&&(i=g.play(),i&&i.then(a,p).catch(p))):p())}function p(){g&&(g.src=\"about:blank\",g.load(),g=null)}var w=[\"click\",\"contextmenu\",\"auxclick\",\"dblclick\",\"mousedown\",\"mouseup\",\"touchend\",\"keydown\",\"keyup\"],k=!1;function y(){k=!0,b(!0),h()}return d(window,w,y,!0,!0),{dispose:function(){p(),t&&o(document,[t.visibilitychange],l,!0,!0),u&&o(window,[\"focus\",\"blur\"],r,!0,!0),o(window,w,y,!0,!0),o(i,[\"statechange\"],v,!0,!0),i.onstatechange===v&&(i.onstatechange=null)}}}export { unmute };","/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const onCreateHit = /* GraphQL */ `\n  subscription OnCreateHit($serial: String) {\n    onCreateHit(serial: $serial) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      lat\n      lon\n      score\n      specSum\n      version\n      detectionArray\n      detectionConfidence\n      detectionCount\n      type\n      labeledBy\n      label\n      human\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateDevice = /* GraphQL */ `\n  subscription OnCreateDevice(\n    $filter: ModelSubscriptionDeviceFilterInput\n    $owner: String\n  ) {\n    onCreateDevice(filter: $filter, owner: $owner) {\n      id\n      serial\n      type\n      version\n      owner\n      name\n      privateAudio\n      shareLink\n      shareBird\n      shareMarine\n      hideOnMap\n      collectSoundscape\n      createdAt\n      updatedAt\n      lat\n      lon\n      tzOffsetMinutes\n      tz\n      smsPhone1\n      smsPhone2\n      smsTimeStart\n      smsTimeStop\n      smsPause\n      newBirdAlert\n    }\n  }\n`;\nexport const onUpdateDevice = /* GraphQL */ `\n  subscription OnUpdateDevice(\n    $filter: ModelSubscriptionDeviceFilterInput\n    $owner: String\n  ) {\n    onUpdateDevice(filter: $filter, owner: $owner) {\n      id\n      serial\n      type\n      version\n      owner\n      name\n      privateAudio\n      shareLink\n      shareBird\n      shareMarine\n      hideOnMap\n      collectSoundscape\n      createdAt\n      updatedAt\n      lat\n      lon\n      tzOffsetMinutes\n      tz\n      smsPhone1\n      smsPhone2\n      smsTimeStart\n      smsTimeStop\n      smsPause\n      newBirdAlert\n    }\n  }\n`;\nexport const onDeleteDevice = /* GraphQL */ `\n  subscription OnDeleteDevice(\n    $filter: ModelSubscriptionDeviceFilterInput\n    $owner: String\n  ) {\n    onDeleteDevice(filter: $filter, owner: $owner) {\n      id\n      serial\n      type\n      version\n      owner\n      name\n      privateAudio\n      shareLink\n      shareBird\n      shareMarine\n      hideOnMap\n      collectSoundscape\n      createdAt\n      updatedAt\n      lat\n      lon\n      tzOffsetMinutes\n      tz\n      smsPhone1\n      smsPhone2\n      smsTimeStart\n      smsTimeStop\n      smsPause\n      newBirdAlert\n    }\n  }\n`;\nexport const onCreateDeviceHistory = /* GraphQL */ `\n  subscription OnCreateDeviceHistory(\n    $filter: ModelSubscriptionDeviceHistoryFilterInput\n  ) {\n    onCreateDeviceHistory(filter: $filter) {\n      id\n      serial\n      version\n      owner\n      name\n      shareBird\n      createDate\n      createdAt\n      updatedAt\n      lat\n      lon\n      deviceAction\n    }\n  }\n`;\nexport const onUpdateDeviceHistory = /* GraphQL */ `\n  subscription OnUpdateDeviceHistory(\n    $filter: ModelSubscriptionDeviceHistoryFilterInput\n  ) {\n    onUpdateDeviceHistory(filter: $filter) {\n      id\n      serial\n      version\n      owner\n      name\n      shareBird\n      createDate\n      createdAt\n      updatedAt\n      lat\n      lon\n      deviceAction\n    }\n  }\n`;\nexport const onDeleteDeviceHistory = /* GraphQL */ `\n  subscription OnDeleteDeviceHistory(\n    $filter: ModelSubscriptionDeviceHistoryFilterInput\n  ) {\n    onDeleteDeviceHistory(filter: $filter) {\n      id\n      serial\n      version\n      owner\n      name\n      shareBird\n      createDate\n      createdAt\n      updatedAt\n      lat\n      lon\n      deviceAction\n    }\n  }\n`;\nexport const onCreateDeviceState = /* GraphQL */ `\n  subscription OnCreateDeviceState(\n    $filter: ModelSubscriptionDeviceStateFilterInput\n  ) {\n    onCreateDeviceState(filter: $filter) {\n      id\n      serial\n      type\n      lat\n      lon\n      timezone\n      connected\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateDeviceState = /* GraphQL */ `\n  subscription OnUpdateDeviceState(\n    $filter: ModelSubscriptionDeviceStateFilterInput\n  ) {\n    onUpdateDeviceState(filter: $filter) {\n      id\n      serial\n      type\n      lat\n      lon\n      timezone\n      connected\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteDeviceState = /* GraphQL */ `\n  subscription OnDeleteDeviceState(\n    $filter: ModelSubscriptionDeviceStateFilterInput\n  ) {\n    onDeleteDeviceState(filter: $filter) {\n      id\n      serial\n      type\n      lat\n      lon\n      timezone\n      connected\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateBootTable = /* GraphQL */ `\n  subscription OnCreateBootTable(\n    $filter: ModelSubscriptionBootTableFilterInput\n  ) {\n    onCreateBootTable(filter: $filter) {\n      id\n      serial\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateBootTable = /* GraphQL */ `\n  subscription OnUpdateBootTable(\n    $filter: ModelSubscriptionBootTableFilterInput\n  ) {\n    onUpdateBootTable(filter: $filter) {\n      id\n      serial\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteBootTable = /* GraphQL */ `\n  subscription OnDeleteBootTable(\n    $filter: ModelSubscriptionBootTableFilterInput\n  ) {\n    onDeleteBootTable(filter: $filter) {\n      id\n      serial\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateStatusTable = /* GraphQL */ `\n  subscription OnCreateStatusTable(\n    $filter: ModelSubscriptionStatusTableFilterInput\n  ) {\n    onCreateStatusTable(filter: $filter) {\n      id\n      serial\n      cpuTemp\n      cpuFreq\n      warning\n      ramdisk\n      signal\n      availMem\n      pyMem\n      gridLength\n      nDirect\n      nCloud\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateStatusTable = /* GraphQL */ `\n  subscription OnUpdateStatusTable(\n    $filter: ModelSubscriptionStatusTableFilterInput\n  ) {\n    onUpdateStatusTable(filter: $filter) {\n      id\n      serial\n      cpuTemp\n      cpuFreq\n      warning\n      ramdisk\n      signal\n      availMem\n      pyMem\n      gridLength\n      nDirect\n      nCloud\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteStatusTable = /* GraphQL */ `\n  subscription OnDeleteStatusTable(\n    $filter: ModelSubscriptionStatusTableFilterInput\n  ) {\n    onDeleteStatusTable(filter: $filter) {\n      id\n      serial\n      cpuTemp\n      cpuFreq\n      warning\n      ramdisk\n      signal\n      availMem\n      pyMem\n      gridLength\n      nDirect\n      nCloud\n      version\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateLogTable = /* GraphQL */ `\n  subscription OnCreateLogTable($filter: ModelSubscriptionLogTableFilterInput) {\n    onCreateLogTable(filter: $filter) {\n      id\n      serial\n      log\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateLogTable = /* GraphQL */ `\n  subscription OnUpdateLogTable($filter: ModelSubscriptionLogTableFilterInput) {\n    onUpdateLogTable(filter: $filter) {\n      id\n      serial\n      log\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteLogTable = /* GraphQL */ `\n  subscription OnDeleteLogTable($filter: ModelSubscriptionLogTableFilterInput) {\n    onDeleteLogTable(filter: $filter) {\n      id\n      serial\n      log\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateExceptionTable = /* GraphQL */ `\n  subscription OnCreateExceptionTable(\n    $filter: ModelSubscriptionExceptionTableFilterInput\n  ) {\n    onCreateExceptionTable(filter: $filter) {\n      id\n      serial\n      exception\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateExceptionTable = /* GraphQL */ `\n  subscription OnUpdateExceptionTable(\n    $filter: ModelSubscriptionExceptionTableFilterInput\n  ) {\n    onUpdateExceptionTable(filter: $filter) {\n      id\n      serial\n      exception\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteExceptionTable = /* GraphQL */ `\n  subscription OnDeleteExceptionTable(\n    $filter: ModelSubscriptionExceptionTableFilterInput\n  ) {\n    onDeleteExceptionTable(filter: $filter) {\n      id\n      serial\n      exception\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateDailyCount = /* GraphQL */ `\n  subscription OnCreateDailyCount(\n    $filter: ModelSubscriptionDailyCountFilterInput\n  ) {\n    onCreateDailyCount(filter: $filter) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateDailyCount = /* GraphQL */ `\n  subscription OnUpdateDailyCount(\n    $filter: ModelSubscriptionDailyCountFilterInput\n  ) {\n    onUpdateDailyCount(filter: $filter) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteDailyCount = /* GraphQL */ `\n  subscription OnDeleteDailyCount(\n    $filter: ModelSubscriptionDailyCountFilterInput\n  ) {\n    onDeleteDailyCount(filter: $filter) {\n      id\n      serial\n      date\n      group\n      cn\n      sn\n      spCode\n      count\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateLabeledData = /* GraphQL */ `\n  subscription OnCreateLabeledData(\n    $filter: ModelSubscriptionLabeledDataFilterInput\n    $labeledBy: String\n  ) {\n    onCreateLabeledData(filter: $filter, labeledBy: $labeledBy) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      labeledBy\n      label\n      score\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateLabeledData = /* GraphQL */ `\n  subscription OnUpdateLabeledData(\n    $filter: ModelSubscriptionLabeledDataFilterInput\n    $labeledBy: String\n  ) {\n    onUpdateLabeledData(filter: $filter, labeledBy: $labeledBy) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      labeledBy\n      label\n      score\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteLabeledData = /* GraphQL */ `\n  subscription OnDeleteLabeledData(\n    $filter: ModelSubscriptionLabeledDataFilterInput\n    $labeledBy: String\n  ) {\n    onDeleteLabeledData(filter: $filter, labeledBy: $labeledBy) {\n      id\n      serial\n      dt\n      group\n      cn\n      sn\n      spCode\n      wav\n      labeledBy\n      label\n      score\n      lat\n      lon\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateRawHaikumarine = /* GraphQL */ `\n  subscription OnCreateRawHaikumarine(\n    $filter: ModelSubscriptionRawHaikumarineFilterInput\n  ) {\n    onCreateRawHaikumarine(filter: $filter) {\n      id\n      serial\n      dt\n      lat\n      lon\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateRawHaikumarine = /* GraphQL */ `\n  subscription OnUpdateRawHaikumarine(\n    $filter: ModelSubscriptionRawHaikumarineFilterInput\n  ) {\n    onUpdateRawHaikumarine(filter: $filter) {\n      id\n      serial\n      dt\n      lat\n      lon\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteRawHaikumarine = /* GraphQL */ `\n  subscription OnDeleteRawHaikumarine(\n    $filter: ModelSubscriptionRawHaikumarineFilterInput\n  ) {\n    onDeleteRawHaikumarine(filter: $filter) {\n      id\n      serial\n      dt\n      lat\n      lon\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateNotifications = /* GraphQL */ `\n  subscription OnCreateNotifications(\n    $filter: ModelSubscriptionNotificationsFilterInput\n    $owner: String\n  ) {\n    onCreateNotifications(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      played\n      notificationType\n      cn\n      spCode\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateNotifications = /* GraphQL */ `\n  subscription OnUpdateNotifications(\n    $filter: ModelSubscriptionNotificationsFilterInput\n    $owner: String\n  ) {\n    onUpdateNotifications(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      played\n      notificationType\n      cn\n      spCode\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteNotifications = /* GraphQL */ `\n  subscription OnDeleteNotifications(\n    $filter: ModelSubscriptionNotificationsFilterInput\n    $owner: String\n  ) {\n    onDeleteNotifications(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      played\n      notificationType\n      cn\n      spCode\n      wav\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateShareMap = /* GraphQL */ `\n  subscription OnCreateShareMap(\n    $filter: ModelSubscriptionShareMapFilterInput\n    $owner: String\n  ) {\n    onCreateShareMap(filter: $filter, owner: $owner) {\n      id\n      name\n      shareLat\n      shareLon\n      tz\n      connected\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const onUpdateShareMap = /* GraphQL */ `\n  subscription OnUpdateShareMap(\n    $filter: ModelSubscriptionShareMapFilterInput\n    $owner: String\n  ) {\n    onUpdateShareMap(filter: $filter, owner: $owner) {\n      id\n      name\n      shareLat\n      shareLon\n      tz\n      connected\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const onDeleteShareMap = /* GraphQL */ `\n  subscription OnDeleteShareMap(\n    $filter: ModelSubscriptionShareMapFilterInput\n    $owner: String\n  ) {\n    onDeleteShareMap(filter: $filter, owner: $owner) {\n      id\n      name\n      shareLat\n      shareLon\n      tz\n      connected\n      createdAt\n      updatedAt\n      owner\n    }\n  }\n`;\nexport const onCreateHaikuboxUser = /* GraphQL */ `\n  subscription OnCreateHaikuboxUser(\n    $filter: ModelSubscriptionHaikuboxUserFilterInput\n  ) {\n    onCreateHaikuboxUser(filter: $filter) {\n      id\n      email\n      confirmedEmail\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateHaikuboxUser = /* GraphQL */ `\n  subscription OnUpdateHaikuboxUser(\n    $filter: ModelSubscriptionHaikuboxUserFilterInput\n  ) {\n    onUpdateHaikuboxUser(filter: $filter) {\n      id\n      email\n      confirmedEmail\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteHaikuboxUser = /* GraphQL */ `\n  subscription OnDeleteHaikuboxUser(\n    $filter: ModelSubscriptionHaikuboxUserFilterInput\n  ) {\n    onDeleteHaikuboxUser(filter: $filter) {\n      id\n      email\n      confirmedEmail\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateBookmarkHaikubox = /* GraphQL */ `\n  subscription OnCreateBookmarkHaikubox(\n    $filter: ModelSubscriptionBookmarkHaikuboxFilterInput\n    $owner: String\n  ) {\n    onCreateBookmarkHaikubox(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateBookmarkHaikubox = /* GraphQL */ `\n  subscription OnUpdateBookmarkHaikubox(\n    $filter: ModelSubscriptionBookmarkHaikuboxFilterInput\n    $owner: String\n  ) {\n    onUpdateBookmarkHaikubox(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteBookmarkHaikubox = /* GraphQL */ `\n  subscription OnDeleteBookmarkHaikubox(\n    $filter: ModelSubscriptionBookmarkHaikuboxFilterInput\n    $owner: String\n  ) {\n    onDeleteBookmarkHaikubox(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateUnclaimHaikubox = /* GraphQL */ `\n  subscription OnCreateUnclaimHaikubox(\n    $filter: ModelSubscriptionUnclaimHaikuboxFilterInput\n    $owner: String\n  ) {\n    onCreateUnclaimHaikubox(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      email\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateUnclaimHaikubox = /* GraphQL */ `\n  subscription OnUpdateUnclaimHaikubox(\n    $filter: ModelSubscriptionUnclaimHaikuboxFilterInput\n    $owner: String\n  ) {\n    onUpdateUnclaimHaikubox(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      email\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteUnclaimHaikubox = /* GraphQL */ `\n  subscription OnDeleteUnclaimHaikubox(\n    $filter: ModelSubscriptionUnclaimHaikuboxFilterInput\n    $owner: String\n  ) {\n    onDeleteUnclaimHaikubox(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      email\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateUserNotice = /* GraphQL */ `\n  subscription OnCreateUserNotice(\n    $filter: ModelSubscriptionUserNoticeFilterInput\n    $owner: String\n  ) {\n    onCreateUserNotice(filter: $filter, owner: $owner) {\n      id\n      owner\n      noticeID\n      noticeViewed\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateUserNotice = /* GraphQL */ `\n  subscription OnUpdateUserNotice(\n    $filter: ModelSubscriptionUserNoticeFilterInput\n    $owner: String\n  ) {\n    onUpdateUserNotice(filter: $filter, owner: $owner) {\n      id\n      owner\n      noticeID\n      noticeViewed\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteUserNotice = /* GraphQL */ `\n  subscription OnDeleteUserNotice(\n    $filter: ModelSubscriptionUserNoticeFilterInput\n    $owner: String\n  ) {\n    onDeleteUserNotice(filter: $filter, owner: $owner) {\n      id\n      owner\n      noticeID\n      noticeViewed\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateNoticeDescription = /* GraphQL */ `\n  subscription OnCreateNoticeDescription(\n    $filter: ModelSubscriptionNoticeDescriptionFilterInput\n  ) {\n    onCreateNoticeDescription(filter: $filter) {\n      id\n      noticeTitle\n      noticeDescription\n      noticeLink\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateNoticeDescription = /* GraphQL */ `\n  subscription OnUpdateNoticeDescription(\n    $filter: ModelSubscriptionNoticeDescriptionFilterInput\n  ) {\n    onUpdateNoticeDescription(filter: $filter) {\n      id\n      noticeTitle\n      noticeDescription\n      noticeLink\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteNoticeDescription = /* GraphQL */ `\n  subscription OnDeleteNoticeDescription(\n    $filter: ModelSubscriptionNoticeDescriptionFilterInput\n  ) {\n    onDeleteNoticeDescription(filter: $filter) {\n      id\n      noticeTitle\n      noticeDescription\n      noticeLink\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateDeleteAccount = /* GraphQL */ `\n  subscription OnCreateDeleteAccount(\n    $filter: ModelSubscriptionDeleteAccountFilterInput\n    $owner: String\n  ) {\n    onCreateDeleteAccount(filter: $filter, owner: $owner) {\n      id\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateDeleteAccount = /* GraphQL */ `\n  subscription OnUpdateDeleteAccount(\n    $filter: ModelSubscriptionDeleteAccountFilterInput\n    $owner: String\n  ) {\n    onUpdateDeleteAccount(filter: $filter, owner: $owner) {\n      id\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteDeleteAccount = /* GraphQL */ `\n  subscription OnDeleteDeleteAccount(\n    $filter: ModelSubscriptionDeleteAccountFilterInput\n    $owner: String\n  ) {\n    onDeleteDeleteAccount(filter: $filter, owner: $owner) {\n      id\n      owner\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateOrg = /* GraphQL */ `\n  subscription OnCreateOrg(\n    $filter: ModelSubscriptionOrgFilterInput\n    $owner: String\n  ) {\n    onCreateOrg(filter: $filter, owner: $owner) {\n      id\n      owner\n      haikuboxName\n      lat\n      lon\n      tz\n      publicDirectory\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateOrg = /* GraphQL */ `\n  subscription OnUpdateOrg(\n    $filter: ModelSubscriptionOrgFilterInput\n    $owner: String\n  ) {\n    onUpdateOrg(filter: $filter, owner: $owner) {\n      id\n      owner\n      haikuboxName\n      lat\n      lon\n      tz\n      publicDirectory\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteOrg = /* GraphQL */ `\n  subscription OnDeleteOrg(\n    $filter: ModelSubscriptionOrgFilterInput\n    $owner: String\n  ) {\n    onDeleteOrg(filter: $filter, owner: $owner) {\n      id\n      owner\n      haikuboxName\n      lat\n      lon\n      tz\n      publicDirectory\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateSubscription = /* GraphQL */ `\n  subscription OnCreateSubscription(\n    $filter: ModelSubscriptionSubscriptionFilterInput\n    $owner: String\n  ) {\n    onCreateSubscription(filter: $filter, owner: $owner) {\n      id\n      owner\n      stripeCustomer\n      prepaidType\n      prepaidPeriodEndUnix\n      stripeCurrentPeriodEndUnix\n      subscriptionId\n      autoRenew\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateSubscription = /* GraphQL */ `\n  subscription OnUpdateSubscription(\n    $filter: ModelSubscriptionSubscriptionFilterInput\n    $owner: String\n  ) {\n    onUpdateSubscription(filter: $filter, owner: $owner) {\n      id\n      owner\n      stripeCustomer\n      prepaidType\n      prepaidPeriodEndUnix\n      stripeCurrentPeriodEndUnix\n      subscriptionId\n      autoRenew\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteSubscription = /* GraphQL */ `\n  subscription OnDeleteSubscription(\n    $filter: ModelSubscriptionSubscriptionFilterInput\n    $owner: String\n  ) {\n    onDeleteSubscription(filter: $filter, owner: $owner) {\n      id\n      owner\n      stripeCustomer\n      prepaidType\n      prepaidPeriodEndUnix\n      stripeCurrentPeriodEndUnix\n      subscriptionId\n      autoRenew\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateSubscriptionHistory = /* GraphQL */ `\n  subscription OnCreateSubscriptionHistory(\n    $filter: ModelSubscriptionSubscriptionHistoryFilterInput\n  ) {\n    onCreateSubscriptionHistory(filter: $filter) {\n      id\n      owner\n      serial\n      eventType\n      latestInvoice\n      stripeCustomer\n      subscriptionId\n      autoRenew\n      datePaidUnix\n      unitAmount\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateSubscriptionHistory = /* GraphQL */ `\n  subscription OnUpdateSubscriptionHistory(\n    $filter: ModelSubscriptionSubscriptionHistoryFilterInput\n  ) {\n    onUpdateSubscriptionHistory(filter: $filter) {\n      id\n      owner\n      serial\n      eventType\n      latestInvoice\n      stripeCustomer\n      subscriptionId\n      autoRenew\n      datePaidUnix\n      unitAmount\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteSubscriptionHistory = /* GraphQL */ `\n  subscription OnDeleteSubscriptionHistory(\n    $filter: ModelSubscriptionSubscriptionHistoryFilterInput\n  ) {\n    onDeleteSubscriptionHistory(filter: $filter) {\n      id\n      owner\n      serial\n      eventType\n      latestInvoice\n      stripeCustomer\n      subscriptionId\n      autoRenew\n      datePaidUnix\n      unitAmount\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateFavoriteHit = /* GraphQL */ `\n  subscription OnCreateFavoriteHit(\n    $filter: ModelSubscriptionFavoriteHitFilterInput\n    $owner: String\n  ) {\n    onCreateFavoriteHit(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      dt\n      animalGroup\n      cn\n      sn\n      spCode\n      wav\n      score\n      specSum\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateFavoriteHit = /* GraphQL */ `\n  subscription OnUpdateFavoriteHit(\n    $filter: ModelSubscriptionFavoriteHitFilterInput\n    $owner: String\n  ) {\n    onUpdateFavoriteHit(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      dt\n      animalGroup\n      cn\n      sn\n      spCode\n      wav\n      score\n      specSum\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteFavoriteHit = /* GraphQL */ `\n  subscription OnDeleteFavoriteHit(\n    $filter: ModelSubscriptionFavoriteHitFilterInput\n    $owner: String\n  ) {\n    onDeleteFavoriteHit(filter: $filter, owner: $owner) {\n      id\n      serial\n      owner\n      dt\n      animalGroup\n      cn\n      sn\n      spCode\n      wav\n      score\n      specSum\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onCreateUserSettings = /* GraphQL */ `\n  subscription OnCreateUserSettings(\n    $filter: ModelSubscriptionUserSettingsFilterInput\n    $owner: String\n  ) {\n    onCreateUserSettings(filter: $filter, owner: $owner) {\n      id\n      owner\n      hidePics\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onUpdateUserSettings = /* GraphQL */ `\n  subscription OnUpdateUserSettings(\n    $filter: ModelSubscriptionUserSettingsFilterInput\n    $owner: String\n  ) {\n    onUpdateUserSettings(filter: $filter, owner: $owner) {\n      id\n      owner\n      hidePics\n      createdAt\n      updatedAt\n    }\n  }\n`;\nexport const onDeleteUserSettings = /* GraphQL */ `\n  subscription OnDeleteUserSettings(\n    $filter: ModelSubscriptionUserSettingsFilterInput\n    $owner: String\n  ) {\n    onDeleteUserSettings(filter: $filter, owner: $owner) {\n      id\n      owner\n      hidePics\n      createdAt\n      updatedAt\n    }\n  }\n`;\n","export function extractFileInfo(filename) {\n    const parts = filename.split(\"/\");\n    const file = parts[parts.length - 1]; // Get last part of path\n    const fileWithoutExt = file.replace(\".flac\", \"\");\n\n    // Check if the filename contains \"_\"\n    if (!fileWithoutExt.includes(\"_\")) {\n      console.warn(\"Filename does not contain expected '_' separators:\", filename);\n      return { datetime: null, sampleRate: null, duration: 3 }; // Return safe defaults\n    }\n  \n    const [datetime, sampleRate, duration] = fileWithoutExt.split(\"_\");\n  \n    return { \n      fileUnixTime: datetime || null, \n      sampleRate: Number(sampleRate) || null, \n      duration: Number(duration) || null \n    };\n  }\n  ","// The white and black (the black is really a dark grey) ['#FFFFFF,'#333333'] //\n// The colors from color brewer: //\n['#ffffd9','#edf8b1','#c7e9b4','#7fcdbb','#41b6c4','#1d91c0','#225ea8','#253494','#081d58']\n// https://colorbrewer2.org/#type=sequential&scheme=YlGnBu&n=9\n\n<template>\n  <div id=\"haikubox\" v-if=\"this.user != ''\">\n    <!-- notices -->\n    <v-alert type=\"info\" v-for=\"notice in userNotices\" :key=\"notice.id\">\n      <v-row align=\"center\">\n        <v-col class=\"grow\">\n          {{ notice.noticeTitle }}\n          {{ notice.noticeDescription }}\n        </v-col>\n        <v-col class=\"shrink\">\n          <v-btn @click=\"acknowledgeNotice(notice.id)\">OK</v-btn>\n        </v-col>\n      </v-row>\n    </v-alert>\n\n    <v-alert type=\"info\" @input=\"logClick('subscription', '', '')\" dismissible v-if=\"showRenewAlert\">\n      <v-row align=\"center\">\n        <v-col class=\"grow\">\n          {{ t(\"Subscription Expired\") }}\n        </v-col>\n      </v-row>\n    </v-alert>\n\n    <!-- Map -->\n    <v-card\n      class=\"mx-auto\"\n      max-width=\"100%\"\n      max-height=\"400\"\n      outlined\n      v-if=\"showMap\"\n    >\n      <div>\n        <v-img height=\"100%\" width=\"100%\">\n          <l-map\n            :zoom=\"zoom\"\n            :center=\"center\"\n            :options=\"mapOptions\"\n            :bounds=\"bounds\"\n            style=\"height: 400px; width: 100%\"\n            @update:center=\"centerUpdate\"\n            @update:zoom=\"zoomUpdate\"\n            :maxZoom=\"maxZoomSummary\"\n          >\n            <l-tile-layer :url=\"urlStates\" :attribution=\"urlOceanAttribution\" />\n            <l-circle\n              :key=\"haikuboxMarkerID\"\n              :lat-lng=\"[lat, lon]\"\n              :radius=\"currentHaikuboxRadius\"\n            >\n            </l-circle>\n            <v-marker-cluster :options=\"{ chunkedLoading: true }\">\n              <l-marker\n                @click=\"\n                  clickDevice(item, 1, false, item.shareLat, item.shareLon)\n                \"\n                v-for=\"item in connectedDevices\"\n                :key=\"item.id\"\n                :lat-lng=\"[item.shareLat, item.shareLon]\"\n                :radius=\"2000\"\n                color=\"#0277BD\"\n              >\n                <l-tooltip :options=\"{ permanent: true }\">{{\n                  item.name\n                }}</l-tooltip>\n              </l-marker>\n            </v-marker-cluster>\n          </l-map></v-img\n        >\n      </div>\n    </v-card>\n\n    <!-- Map Animation -->\n    <!-- <v-card dark v-if=\"animationRunning\">\n      <div>\n        <l-map\n          style=\"height: 350px\"\n          :zoom=\"zoomSummary\"\n          :center=\"centerSummary\"\n          :maxZoom=\"maxZoomSummary\"\n        >\n          <l-tile-layer :url=\"urlSummary\" :attribution=\"attributionSummary\" />\n          <l-circle\n            v-for=\"item in filterHourlySummary(summaryHour)\"\n            :key=\"item.id\"\n            :lat-lng=\"[item.lat, item.lon]\"\n            :radius=\"item.radius\"\n            :color=\"item.color\"\n          >\n            <l-tooltip\n              :options=\"{ sticky: true }\"\n              :content=\"item.name + ': ' + item.count\"\n            />\n          </l-circle>\n        </l-map>\n      </div>\n      <v-row>\n        <v-col>\n          <v-btn icon @click=\"startAnimation()\"\n            ><v-icon left>mdi-play-circle</v-icon></v-btn\n          >\n          <v-btn icon @click=\"stopAnimation()\">\n            <v-icon left>mdi-stop-circle</v-icon></v-btn\n          >\n          <v-card-text>{{ summaryHourLabel }} </v-card-text>\n          <v-slider v-model=\"summaryHour\" step=\"1\" min=\"0\" max=\"23\"></v-slider> \n          <v-slider\n            v-if=\"animationRunning == false\"\n            v-model=\"summaryHourIndex\"\n            step=\"1\"\n            min=\"0\"\n            max=\"23\"\n            @change=\"sliderSummaryHourIndex()\"\n          ></v-slider>\n        </v-col>\n        <v-col>\n          <v-btn @click=\"toggleBasemap()\">Basemap</v-btn>\n          <v-btn @click=\"toggleColormap()\"\n            >Colormap {{ summaryColorMapIndex }}</v-btn\n          >\n        </v-col>\n      </v-row>\n    </v-card> -->\n\n    <!-- Haikubox Stats -->\n\n    <v-card\n      outlined\n      height=\"200px\"\n      width=\"100%\"\n      v-if=\"\n        (showMap == false) &\n        (yesterdayCallsAndSongs == 0) &\n        (showBadge == false)\n      \"\n    >\n      <v-img\n        src=\"https://haikubox-images.s3.amazonaws.com/carousel/callOutBackground3.jpeg\"\n        height=\"100%\"\n        width=\"100%\"\n      >\n        <v-row no-gutter>\n          <v-col cols=\"9\" class=\"py-1\">\n            <v-card-title style=\"word-break: break-word\">\n              {{ t(\"Welcome\") }}\n            </v-card-title></v-col\n          >\n          <v-col cols=\"3\" class=\"d-flex align-center py-1\">\n            <v-icon dark>mdi-web</v-icon>\n            <v-select\n              :items=\"languages\"\n              v-model=\"selectedLanguage\"\n              @change=\"setLanguage(selectedLanguage)\"\n              dark\n            ></v-select>\n          </v-col>\n        </v-row>\n        <!-- <v-row class=\"mx-1\"><v-col xs=\"4\" sm=\"3\"> </v-col></v-row> -->\n      </v-img>\n    </v-card>\n\n    <v-card\n      flat\n      height=\"280px\"\n      width=\"100%\"\n      class=\"transparent px-0 mx-0 my-0 py-0\"\n      v-if=\"\n        (showMap == false) & (yesterdayCallsAndSongs > 0) & (showBadge == false)\n      \"\n    >\n      <v-img\n        src=\"https://haikubox-images.s3.amazonaws.com/carousel/callOutBackground3.jpeg\"\n        height=\"280px\"\n      >\n        <v-row no-gutter>\n          <v-col cols=\"9\" class=\"py-1\"\n            ><v-card-title>{{ t(\"Yesterday\") }}</v-card-title></v-col\n          >\n          <v-col cols=\"3\" class=\"d-flex align-center py-1\">\n            <v-icon dark>mdi-web</v-icon>\n            <v-select\n              :items=\"languages\"\n              v-model=\"selectedLanguage\"\n              @change=\"setLanguage(selectedLanguage)\"\n              dark\n            ></v-select>\n          </v-col>\n        </v-row>\n\n        <v-row class=\"mx-1\"\n          ><v-col xs=\"4\" sm=\"4\" md=\"3\" class=\"py-1\">\n            <v-card dark color=\"grey\" tile>\n              <v-card-title class=\"justify-center\"\n                >{{ yesterdayNumSpecies }}\n              </v-card-title>\n              <v-card-subtitle class=\"text-center\">{{\n                t(\"Species\")\n              }}</v-card-subtitle>\n            </v-card>\n          </v-col>\n          <v-col xs=\"4\" sm=\"4\" md=\"3\" class=\"py-1\">\n            <v-card dark color=\"grey\" tile>\n              <v-card-title class=\"justify-center\"\n                >{{ yesterdayCallsAndSongs }} </v-card-title\n              ><v-card-subtitle class=\"text-center\">\n                {{ t(\"Calls and Songs\") }}\n              </v-card-subtitle>\n            </v-card>\n          </v-col>\n        </v-row>\n\n        <v-row class=\"mx-1 my-2 py-4\" align=\"center\"\n          ><v-col xs=\"8\" sm=\"8\" md=\"6\" class=\"py-2\">\n            <v-card dark color=\"grey\" tile>\n              <v-row\n                ><v-col cols=\"4\" class=\"my-0\">\n                  <v-img\n                    class=\"mx-2\"\n                    width=\"80%\"\n                    :src=\"\n                      'https://haikubox-images.s3.amazonaws.com/' +\n                      yesterdaySpCode +\n                      '.jpeg'\n                    \"\n                    onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                  ></v-img>\n                </v-col>\n                <v-col cols=\"7\" class=\"py-2\">\n                  <v-card-title style=\"word-break: break-word\">\n                    {{\n                      t(yesterdaySpCode, yesterdayMostFrequent)\n                    }}</v-card-title\n                  >\n                  <v-card-subtitle\n                    >{{ t(\"Most Frequent Visitor\") }}\n                    <!-- <v-btn\n                      text\n                      color=\"yellow\"\n                      @click=\"dailySummary()\"\n                      >More</v-btn\n                    > -->\n                  </v-card-subtitle>\n                </v-col>\n              </v-row>\n            </v-card>\n          </v-col>\n        </v-row>\n      </v-img>\n    </v-card>\n\n    <!-- Badges -->\n    <v-card\n      v-if=\"(showMap == false) & (showBadge == true)\"\n      height=\"280\"\n      light\n      tile\n      class=\"transparent mx-auto\"\n      width=\"100%\"\n      flat\n    >\n      <v-img\n        src=\"https://haikubox-images.s3.amazonaws.com/carousel/callOutBackground1.jpeg\"\n        height=\"280px\"\n      >\n        <v-card-title style=\"word-break: break-word\">{{\n          t(\"Progress and Badges\")\n        }}</v-card-title>\n        <v-row style=\"height: 10px\"></v-row>\n        <v-row style=\"height: 20px\"\n          ><v-col cols=\"7\"></v-col\n          ><v-col cols=\"2\"\n            ><v-btn\n              text\n              class=\"white--text\"\n              height=\"40\"\n              width=\"40\"\n              v-if=\"totalLabeled > 0\"\n              >Level</v-btn\n            ></v-col\n          ></v-row\n        >\n\n        <v-card-text\n          class=\"white--text text-xs-h6 text-sm-h5\"\n          v-if=\"totalLabeled == 0\"\n          >{{ t(\"Label bird detections to earn badges\") }}</v-card-text\n        >\n        <div v-if=\"totalLabeled > 0\">\n          <v-row>\n            <v-col cols=\"7\">\n              <v-progress-linear\n                v-if=\"totalLabeled > 0\"\n                rounded\n                :value=\"percentTargetLabeled\"\n                color=\"amber\"\n                height=\"40\"\n                class=\"mx-2 white--text\"\n                >{{ t(\"Labeled\") }}: {{ totalLabeled }} / {{ targetLabel }}\n              </v-progress-linear>\n            </v-col>\n            <v-col cols=\"2\">\n              <v-btn class=\"white--text\" color=\"orange\" height=\"40\">\n                {{ badgeLabelLevel }}\n              </v-btn>\n            </v-col>\n          </v-row>\n\n          <v-row>\n            <v-col cols=\"7\">\n              <v-progress-linear\n                v-if=\"totalLabeled > 0\"\n                rounded\n                :value=\"percentTargetLabelSpecies\"\n                color=\"orange\"\n                height=\"40\"\n                class=\"mx-2 my-1 white--text\"\n                >{{ t(\"Species\") }}: {{ totalSpeciesLabeled }} /\n                {{ targetLabelSpecies }}</v-progress-linear\n              >\n            </v-col>\n            <v-col cols=\"2\">\n              <v-btn class=\"white--text\" color=\"orange\" height=\"40\">\n                {{ badgeLabelSpeciesLevel }}\n              </v-btn>\n            </v-col>\n          </v-row>\n\n          <v-row>\n            <v-col cols=\"7\">\n              <v-progress-linear\n                v-if=\"totalLabeled > 0\"\n                rounded\n                :value=\"percentTargetLabelStreak\"\n                height=\"40\"\n                class=\"mx-2 white--text\"\n                >{{ t(\"Streak\") }}: {{ labelStreak }} / {{ targetLabelStreak }}\n                {{ t(\"days\") }}</v-progress-linear\n              >\n            </v-col>\n            <v-col cols=\"2\">\n              <v-btn class=\"white--text\" color=\"orange\" height=\"40\">\n                {{ badgeLabelStreakLevel }}\n              </v-btn>\n            </v-col></v-row\n          >\n        </div>\n      </v-img>\n    </v-card>\n\n    <v-card\n      class=\"mx-auto\"\n      max-width=\"100%\"\n      outlined\n      color=\"blue-grey darken-4\"\n    >\n      <!-- More Active Species  -->\n      <!-- <v-card\n        tile\n        flat\n        height=\"338\"\n        width=\"80%\"\n        class=\"transparent mx-auto\"\n      >\n        <v-card-title class=\"my-6\" style=\"word-break: break-word\"\n          >Singing levels are similar as previous day</v-card-title\n        >\n      </v-card> -->\n\n      <!-- <v-card\n        tile\n        height=\"338\"\n        class=\"transparent\"\n      >\n        <v-card-title>Increasing Activity</v-card-title>\n        <v-container fluid>\n          <v-row dense>\n            <v-col\n              cols=\"12\"\n              v-for=\"(item, index) in moreActiveSpeciesList\"\n              :key=\"item.id\"\n            >\n              <v-card\n                outlined\n                color=\"light-grey darken-4\"\n                class=\"mx-auto\"\n                dark\n                height=\"60\"\n                width=\"80%\"\n                max-width=\"500\"\n              >\n                <v-row align=\"center\" justify=\"center\">\n                  <v-col cols=\"3\">\n                    <v-avatar\n                      class=\"mx-2 my-1\"\n                      :href=\"\n                        item.lon > -30\n                          ? 'https://ebird.org/species/' + item.spCode\n                          : 'https://www.allaboutbirds.org/guide/' +\n                            replaceSpaces(item.cn)\n                      \"\n                      target=\"_blank\"\n                    >\n                      <v-img\n                        width=\"60\"\n                        :src=\"\n                          'https://haikubox-images.s3.amazonaws.com/' +\n                          item.spCode +\n                          '.jpeg'\n                        \"\n                      ></v-img\n                    ></v-avatar>\n                  </v-col>\n                  <v-col cols=\"6\"> {{ item.cn }} </v-col>\n                  <v-col cols=\"3\">\n                    <v-btn\n                      icon\n                      @click=\"\n                        getWavFileName(\n                          index,\n                          item.spCode,\n                          item.cn,\n                          'Increasing',\n                          'play',\n                          ''\n                        )\n                      \"\n                    >\n                      <v-icon>mdi-play-circle</v-icon>\n                    </v-btn>\n                  </v-col>\n                </v-row>\n              </v-card>\n            </v-col>\n          </v-row>\n        </v-container>\n      </v-card> -->\n\n      <!-- Header Info Section -->\n      <v-row v-if=\"currentWiFi === 0 && isOwner\">\n        <v-col cols=\"12\">\n          <v-card dark class=\"px-2\">\n            <v-card-title style=\"word-break: break-word\">\n              {{ t(\"No WiFi\") }}\n            </v-card-title>\n            <v-card-text class=\"my-0 py=0\">{{ t(\"WiFi Step 1\") }}</v-card-text>\n            <v-card-text class=\"my-0 py=0\">{{ t(\"WiFi Step 2\") }}</v-card-text>\n            <v-btn class=\"mx-2 my-2\" @click=\"checkConnection(currentSerial)\"\n              >Check Connection</v-btn\n            >\n            <v-card-subtitle v-if=\"checkConnectionFailed\"\n              >{{ t(\"WiFi Check\") }}\n              {{ currentSerial }}\n            </v-card-subtitle>\n          </v-card>\n        </v-col>\n      </v-row>\n\n      <v-row>\n        <v-col cols=\"10\" class=\"my-1 py-0\">\n          <v-card-title\n            class=\"white--text text-no-wrap\"\n            style=\"word-break: break-word\"\n            v-if=\"haikuboxLoaded == 1\"\n          >\n            <v-btn v-if=\"isOwner == true\" color=\"white\" icon  aria-hidden=\"true\" tabindex=\"-1\">\n              <v-icon>mdi-home</v-icon>\n            </v-btn>\n            <v-btn\n              v-if=\"\n                (currentHaikuboxBookmark == false) &\n                (isOwner == false) &\n                (currentSiteName != '')\n              \"\n              icon\n              color=\"pink\"\n              @click=\"toggleHaikuboxBookmark()\"\n              v-tooltip.bottom-start=\"'Bookmark this Haikubox'\"\n            >\n              <v-icon alt=\"bookmark\">mdi-bookmark-multiple-outline</v-icon>\n            </v-btn>\n            <v-btn\n              v-if=\"(currentHaikuboxBookmark == true) & (isOwner == false)\"\n              icon\n              color=\"pink\"\n              @click=\"toggleHaikuboxBookmark()\"\n              v-tooltip.bottom-start=\"'Un-Bookmark this Haikubox'\"\n            >\n              <v-icon alt=\"bookmark\">mdi-bookmark-multiple</v-icon>\n            </v-btn>\n            {{ currentSiteName }}\n          </v-card-title>\n        </v-col>\n\n        <v-col cols=\"2\" class=\"my-1 d-flex justify-end\" v-if=\"isOwner\">\n          <v-btn\n            disabled\n            icon\n            v-if=\"currentWiFi >= -60 && currentWiFi != 0\"\n            dark\n            @click=\"getStatus(currentSerial)\"\n            ><v-icon>mdi-signal-cellular-3</v-icon></v-btn\n          >\n          <v-btn\n            disabled\n            icon\n            v-if=\"currentWiFi >= -74 && currentWiFi < -60\"\n            dark\n            @click=\"getStatus(currentSerial)\"\n            ><v-icon>mdi-signal-cellular-2</v-icon></v-btn\n          >\n          <v-btn\n            disabled\n            icon\n            v-if=\"currentWiFi >= -78 && currentWiFi < -74\"\n            dark\n            @click=\"getStatus(currentSerial)\"\n            ><v-icon>mdi-signal-cellular-1</v-icon></v-btn\n          >\n          <v-btn\n            disabled\n            icon\n            v-if=\"currentWiFi < -78\"\n            dark\n            @click=\"getStatus(currentSerial)\"\n            ><v-icon>mdi-signal-cellular-outline</v-icon></v-btn\n          >\n        </v-col>\n      </v-row>\n      <v-row class=\"py-0 my-0\">\n        <v-col cols=\"12\" class=\"py-0 my-0 px-10 d-flex justify-end\">\n          <!-- New Bird Alert -->\n          <v-switch\n            v-if=\"\n              isOwner &\n              goNativeActive &\n              (currentView == 'Recent') &\n              subscriptionActive\n            \"\n            v-model=\"newBirdAlert\"\n            :label=\"t('New Bird Alerts')\"\n            @change=\"toggleNewBirdAlert(newBirdAlert)\"\n            dark\n            color=\"info\"\n          ></v-switch> </v-col\n      ></v-row>\n\n      <!-- User window with App Bar -->\n      <v-app-bar\n        color=\"blue-grey darken-4\"\n        dark\n        dense\n        flat\n        height=\"80px\"\n        v-if=\"\n          ((devicesByOwner.length > 1) |\n            ((devicesByOwner.length >= 0) & (bookmarkedDevices.length > 0))) &\n          !showMap\n        \"\n      >\n        <v-select\n          v-if=\"\n            (devicesByOwner.length > 1) |\n              ((devicesByOwner.length >= 0) & (bookmarkedDevices.length > 0))\n          \"\n          v-model=\"haikuboxSelect\"\n          :items=\"devicesByOwner\"\n          item-text=\"name\"\n          item-value=\"serial\"\n          return-object\n          @input=\"ownerSelectDevice()\"\n          dark\n          class=\"mx-4\"\n          :label=\"t('Your Haikuboxes')\"\n        ></v-select>\n        <v-select\n          v-if=\"bookmarkedDevices.length > 0\"\n          v-model=\"bookmarkSelect\"\n          :items=\"bookmarkedDevices\"\n          item-text=\"name\"\n          item-value=\"id\"\n          return-object\n          @input=\"bookmarkSelectDevice()\"\n          dark\n          class=\"mx-4\"\n          :label=\"t('Bookmarks')\"\n        ></v-select>\n      </v-app-bar>\n\n      <!-- New Badges Alert -->\n      <!-- <v-snackbar v-model=\"newLabelBadge\" centered>\n        You reached a labeling milestone! Thank you for helping make Haikubox\n        better.\n        <template v-slot:action=\"{ attrs }\">\n          <v-btn\n            color=\"blue\"\n            text\n            v-bind=\"attrs\"\n            @click=\"newLabelBadge = false\"\n          >\n            Close\n          </v-btn>\n        </template>\n      </v-snackbar> -->\n\n      <!-- <v-snackbar v-model=\"newLabelSpeciesBadge\" centered>\n        Species labeling milestone reached!\n        <template v-slot:action=\"{ attrs }\">\n          <v-btn\n            color=\"blue\"\n            text\n            v-bind=\"attrs\"\n            @click=\"newLabelSpeciesBadge = false\"\n          >\n            Close\n          </v-btn>\n        </template>\n      </v-snackbar> -->\n\n      <!-- <v-snackbar v-model=\"newLabelStreakBadge\" centered>\n        Fantastic! New labeling streak!\n        <template v-slot:action=\"{ attrs }\">\n          <v-btn\n            color=\"blue\"\n            text\n            v-bind=\"attrs\"\n            @click=\"newLabelStreakBadge = false\"\n          >\n            Close\n          </v-btn>\n        </template>\n      </v-snackbar> -->\n\n      <v-snackbar v-model=\"notifyBirdInfo\" centered :timeout=\"60000\">\n        <v-icon>mdi-account</v-icon>\n        {{ t(\"Notify Auth\") }}\n        <template v-slot:action=\"{ attrs }\">\n          <v-btn\n            color=\"blue\"\n            text\n            v-bind=\"attrs\"\n            @click=\"notifyBirdInfo = false\"\n          >\n            No\n          </v-btn>\n          <v-btn\n            color=\"blue\"\n            text\n            v-bind=\"attrs\"\n            @click=\"grantOneSignalPrivacyConsent()\"\n          >\n            Yes\n          </v-btn>\n        </template>\n      </v-snackbar>\n\n      <v-row\n        ><v-col cols=\"6\" class=\"white--text my-0 py-0 mx-4\">\n          <!-- Header for page viewing (Recent, All) -->\n          <!-- Main Navigation Dropdown -->\n          <v-select\n            v-model=\"navSelection\"\n            :items=\"navList\"\n            item-text=\"text\"\n            item-value=\"id\"\n            return-object\n            @input=\"changeView()\"\n            dark\n            class=\"mx-4\"\n            :label=\"t('View')\"\n            ><template v-slot:item=\"{ item }\">\n              <v-list-item-icon>\n                <v-icon>{{ item.icon }}</v-icon>\n              </v-list-item-icon>\n              <v-list-item-content>\n                <v-list-item-title>{{ item.text }}</v-list-item-title>\n              </v-list-item-content>\n            </template></v-select\n          > </v-col\n        ><v-col cols=\"5\">\n          <v-btn color=\"yellow\" plain v-if=\"hitsLoading > 0\">\n            {{ t(\"Loading\") }} {{ hitsLoading }}</v-btn\n          >\n\n          <!-- Refresh Button -->\n          <v-btn\n            v-if=\"(currentView === 'Recent') & (hitsLoading == 0) & isOwner\"\n            icon\n            color=\"grey\"\n            @click=\"clickRefresh(currentSerial)\"\n            aria-label=\"Refresh\"\n          >\n            <v-icon alt=\"refresh\">mdi-refresh</v-icon>\n            <!-- <router-link\n            style=\"text-decoration: none; color: inherit\"\n            to=\"/haikubox\"\n            >\n          </router-link> -->\n          </v-btn>\n          <!-- Calendar Picker -->\n          <v-btn\n            fab\n            small\n            v-if=\"\n              (currentView === 'Recent') &\n              (hitsLoading == 0) &\n              isOwner &\n              subscriptionActive &\n              !hidePics\n            \"\n            class=\"pa-1 ma-1\"\n            :color=\"recentHours == 0 ? 'blue lighten-2' : 'grey'\"\n            @click=\"hitSelectDate()\"\n            ><v-icon alt=\"calendar\">mdi-calendar</v-icon>\n          </v-btn>\n\n          <!-- Volume Control -->\n          <v-slider\n            dark\n            v-if=\"(hitsLoading == 0) & (!hidePics)\"\n            color=\"grey\"\n            class=\"px-2\"\n            v-model=\"playbackGain\"\n            prepend-icon=\"mdi-volume-high\"\n            prepend-icon-color=\"grey\"\n            min=\"50\"\n            max=\"200\"\n          ></v-slider> </v-col\n      ></v-row>\n\n      <template v-if=\"hitCalendarDatePicked == false\">\n        <v-row justify=\"center\">\n          <v-date-picker\n            v-model=\"hitDatePicker\"\n            :min=\"minDate\"\n            :max=\"maxDate\"\n            @change=\"hitDateClick()\"\n          ></v-date-picker>\n        </v-row>\n      </template>\n\n      <v-card-title\n        v-if=\"currentView == 'Daily Summary'\"\n        class=\"grey--text my-0 py-0 subtitle-1\"\n        >{{ dailySummaryDate }}</v-card-title\n      >\n      <v-card-title\n        v-if=\"(currentView == 'Recent') | (currentView == 'Live')\"\n        class=\"grey--text my-0 py-0 subtitle-1\"\n      >\n        <div v-if=\"recentHours != 0\">{{ lastUpdated }}</div>\n        <div v-if=\"recentHours == 0\">{{ hitDatePicker }}</div>\n\n        <v-spacer></v-spacer>\n        <!-- Buttons to control viewSettings confidence level for Recent -->\n        <v-btn\n          rounded\n          x-small\n          v-if=\"\n            ((currentView === 'Recent') | (currentView === 'Live')) &\n            (hitsLoading == 0)\n          \"\n          class=\"pa-1 ma-1\"\n          :color=\"viewSettings == 'Low' ? 'blue lighten-2' : 'grey'\"\n          @click=\"setViewSettings('Low')\"\n          >{{ t(\"Low\") }}\n        </v-btn>\n        <v-btn\n          rounded\n          x-small\n          v-if=\"\n            ((currentView === 'Recent') | (currentView === 'Live')) &\n            (hitsLoading == 0)\n          \"\n          class=\"pa-1 ma-1\"\n          :color=\"viewSettings == 'Medium' ? 'blue lighten-2' : 'grey'\"\n          @click=\"setViewSettings('Medium')\"\n          >{{ t(\"Med\") }}\n        </v-btn>\n        <v-btn\n          rounded\n          x-small\n          v-if=\"\n            ((currentView === 'Recent') | (currentView === 'Live')) &\n            (hitsLoading == 0)\n          \"\n          class=\"pa-1 ma-1\"\n          :color=\"viewSettings == 'High' ? 'blue lighten-2' : 'grey'\"\n          @click=\"setViewSettings('High')\"\n          >{{ t(\"High\") }}\n        </v-btn>\n        <v-dialog\n          width=\"300\"\n          v-if=\"(currentView === 'Recent') | (currentView === 'Live')\"\n        >\n          <template v-slot:activator=\"{ on, attrs }\"  v-if=\"!hidePics\">\n            <v-btn\n              icon\n              color=\"yellow\"\n              v-bind=\"attrs\"\n              v-on=\"on\"\n              class=\"my-6 mx-3\"\n            >\n              <v-icon alt=\"info\">mdi-information</v-icon>\n            </v-btn>\n          </template>\n\n          <v-card>\n            <v-card-title class=\"headline grey lighten-2\">\n              {{ t(\"View Settings\") }}\n            </v-card-title>\n            <v-card-text>\n              <v-list-item\n                ><v-list-item-content>\n                  {{ t(\"View Info\") }}\n                </v-list-item-content></v-list-item\n              >\n            </v-card-text>\n          </v-card>\n        </v-dialog>\n      </v-card-title>\n\n      <!-- Recent -->\n      <!-- Share dialog outside of for loop -->\n      <v-dialog v-model=\"shareDialog\" max-width=\"400\">\n        <v-card>\n          <v-card-title class=\"text-h5 blue lighten-1 white--text\">\n            {{ t(\"Share\") }}\n            <v-spacer></v-spacer>\n            <v-card-actions>\n              <v-spacer></v-spacer>\n              <v-btn tile class=\"white--text\" text @click=\"shareDialog = false\">\n                {{ t(\"Close\") }}\n              </v-btn>\n            </v-card-actions>\n          </v-card-title>\n\n          <!-- <v-btn\n            v-if=\"goNativeActive == false\"\n            class=\"mx-2 my-4\"\n            color=\"primary\"\n            fab\n            medium\n            dark\n            v-tooltip.bottom-start=\"'Download File'\"\n            :href=\"downloadLink\"\n            ><v-icon alt=\"download\">mdi-download</v-icon>\n          </v-btn> -->\n\n          <v-divider></v-divider>\n          <v-row no-gutters>\n            <v-col cols=\"9\">\n              <v-text-field\n                class=\"mx-2 my-6\"\n                :value=\"audioLink\"\n                readonly\n                solo\n              ></v-text-field>\n            </v-col>\n            <v-col cols=\"2\">\n              <v-btn @click=\"copyLink()\" class=\"my-8\">Copy</v-btn>\n              <v-snackbar\n                absolute\n                shaped\n                color=\"success\"\n                v-model=\"copyLinkSnackbar\"\n                :timeout=\"1000\"\n                icon=\"check_circle\"\n              >\n                <v-icon>mdi-check</v-icon>\n                {{ t(\"Copied\") }}\n              </v-snackbar>\n            </v-col>\n          </v-row>\n        </v-card>\n      </v-dialog>\n\n      <!-- Recent card loop -->\n      <v-container v-if=\"currentView == 'Recent'\">\n        <v-row dense>\n          <v-col\n            cols=\"12\"\n            xs=\"12\"\n            sm=\"6\"\n            md=\"6\"\n            lg=\"4\"\n            xl=\"3\"\n            v-for=\"(item, index) in hits\"\n            :key=\"item.id\"\n          >\n            <v-card\n              color=\"light-blue darken-4\"\n              class=\"mx-auto mx-auto\"\n              style=\"word-break: break-word\"\n              dark\n            >\n            \n            <div  v-if=\"hidePics\"  tabindex=\"0\"  :aria-label=\"t(item.spCode, item.cn)\">\n              {{t(item.spCode, item.cn)}}\n            </div>\n\n\n              <v-card-title v-if=\"!hidePics\">{{ t(item.spCode, item.cn) }}</v-card-title>\n              <v-card-subtitle class=\"font-italic\" v-if=\"!hidePics\">{{\n                item.sn\n              }}</v-card-subtitle>\n\n              <v-row justify=\"end\" class=\"px-8 my-0\">\n                <v-switch\n                  v-if=\"isOwner & goNativeActive & subscriptionActive\"\n                  dense\n                  class=\"mr-5 py-0\"\n                  v-model=\"item.notifyBird\"\n                  v-tooltip.bottom-start=\"\n                    'Send notification when this species is detected'\n                  \"\n                  label=\"Notify\"\n                  @change=\"\n                    toggleNotifyBird(item.cn, item.spCode, item.notifyBird)\n                  \"\n                  color=\"info\"\n                ></v-switch>\n\n                <v-switch\n                  dense\n                  class=\"py-0\"\n                  v-if=\"isOwner\"\n                  v-model=\"item.showBird\"\n                  v-tooltip.bottom-start=\"\n                    'Turning Show OFF will hide this species on M and H setting'\n                  \"\n                  :label=\"t('Show')\"\n                  @change=\"toggleShowBird(item.cn, item.spCode, item.showBird)\"\n                  color=\"info\"\n                ></v-switch>\n              </v-row>\n\n              <!-- Recent Image -->\n              <v-card-subtitle class=\"py-0\">\n                <img\n                  width=\"100%\"\n                  v-if=\"item.window == 'image' & !hidePics\"\n                  :src=\"getImageUrl(item.spCode)\"\n                  onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                />\n\n                <!-- Recent 24 Hour Donut Chart -->\n                <div v-if=\"item.window == 'daily'\">\n                  <fusioncharts\n                    type=\"doughnut2d\"\n                    width=\"100%\"\n                    height=\"240\"\n                    dataFormat=\"json\"\n                    :dataSource=\"item.hourlyCountPlotData\"\n                  >\n                  </fusioncharts>\n                </div>\n                <!-- Recent 14 day heat map -->\n                <div v-if=\"item.window == 'heatmap'\">\n                  <Plotly\n                    :data=\"item.heatmap\"\n                    :display-mode-bar=\"false\"\n                    :layout=\"plotlyLayoutHeatmap\"\n                  ></Plotly>\n                </div>\n\n                <!-- Recent Daily Time Series -->\n                <div v-if=\"item.window == 'monthly'\">\n                  <v-card-text class=\"ma-3\"\n                    ><v-icon>mdi-music-note</v-icon>\n                    Past 3 Months\n\n                    <!-- <span\n                      class=\"font-weight-white\"\n                      v-text=\"getDailySpeciesCount(item.cn)\"\n                    ></span> -->\n                  </v-card-text>\n                  <column-chart\n                    :colors=\"['#90A4AE']\"\n                    :height=\"300\"\n                    :library=\"{\n                      scales: {\n                        xAxes: [\n                          {\n                            ticks: {\n                              fontColor: '#ffffff',\n                            },\n                          },\n                        ],\n                        yAxes: [\n                          {\n                            ticks: {\n                              fontColor: '#ffffff',\n                            },\n                          },\n                        ],\n                      },\n                    }\"\n                    :data=\"item.dailyCountPlotData\"\n                  ></column-chart>\n                </div>\n\n                <!-- Recent Spectrogram -->\n                <div v-if=\"item.window == 'spectrogram'\">\n                  <Plotly\n                    :data=\"item.spectrogram\"\n                    :layout=\"plotlyLayout\"\n                    :display-mode-bar=\"false\"\n                  ></Plotly>\n                  <v-row no-gutters>\n                    <v-col cols=\"1\">0</v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\" class=\"d-flex justify-end\">{{clipSeconds}}s</v-col>\n                  </v-row>\n                </div>\n\n                <!-- Recent Map -->\n                <div v-if=\"item.window == 'map'\">\n                  <l-map\n                    :center=\"center\"\n                    :options=\"hitMapOptions\"\n                    :bounds=\"bounds\"\n                    style=\"height: 240px; width: 100%\"\n                    @update:center=\"centerUpdate\"\n                    @update:zoom=\"zoomUpdate\"\n                    :zoomControl=\"false\"\n                    :zoom=\"zoom\"\n                    :maxZoom=\"maxZoomHitMap\"\n                  >\n                    <l-tile-layer\n                      :url=\"urlStates\"\n                      :attribution=\"attributionSummary\"\n                    />\n                    <l-circle\n                      v-for=\"countPerHaikubox in item.map\"\n                      :key=\"countPerHaikubox.id\"\n                      :lat-lng=\"[countPerHaikubox.lat, countPerHaikubox.lon]\"\n                      :radius=\"countPerHaikubox.radius\"\n                      color=\"#0277BD\"\n                      fillColor=\"#039BE5\"\n                    />\n                  </l-map>\n                </div>\n              </v-card-subtitle>\n\n              <v-row class=\"my-0 py-0\">\n                <v-card-text class=\"my-0 py-0\">\n                  <v-btn\n                    text\n                    v-if=\"item.lon < -30\"\n                    @click=\"navigateTo('https://www.allaboutbirds.org/guide/' +\n                            replaceSpaces(item.cn))\"\n                    color=\"light-blue\"\n                    >{{ t(\"About\") }}</v-btn\n                  >\n                  <v-btn\n                    text\n                    @click=\"navigateTo('https://ebird.org/species/' + item.spCode)\"\n                    color=\"light-blue\"\n                    >eBird</v-btn\n                  >\n                </v-card-text>\n\n                <v-spacer></v-spacer>\n              </v-row>\n\n              <!-- Recent Navigation -->\n              <v-row class=\"mb-1\" no-gutters v-if=\"!hidePics\">\n                <v-col cols=\"8\">\n                  <v-avatar\n                    class=\"ml-4\"\n                    size=\"24\"\n                    v-tooltip.bottom-start=\"t('Image')\"\n                    @click=\"\n                      setWindowRecent(index, 'image', item.spCode, item.cn)\n                    \"\n                  >\n                    <img\n                      :width=\"$vuetify.breakpoint.xs ? '100%' : '320'\"\n                      :src=\"\n                        'https://haikubox-images.s3.amazonaws.com/' +\n                        item.spCode +\n                        '.jpeg'\n                      \"\n                      onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                    />\n                  </v-avatar>\n\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"t('Hourly Chart')\"\n                    @click=\"\n                      setWindowRecent(index, 'daily', item.spCode, item.cn)\n                    \"\n                    v-if=\"recentHours != 0\"\n                  >\n                    <v-icon alt=\"hourly chart\">mdi-chart-donut</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"t('Daily Chart')\"\n                    @click=\"\n                      setWindowRecent(index, 'monthly', item.spCode, item.cn)\n                    \"\n                  >\n                    <v-icon alt=\"daily chart\">mdi-chart-bar</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"t('Heat Map')\"\n                    @click=\"\n                      setWindowRecent(index, 'heatmap', item.spCode, item.cn)\n                    \"\n                  >\n                    <v-icon alt=\"heat map\">mdi-checkerboard</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"t('Map')\"\n                    @click=\"setWindowRecent(index, 'map', item.spCode, item.cn)\"\n                    v-if=\"recentHours != 0\"\n                  >\n                    <v-icon alt=\"map\">mdi-earth</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"t('Spectrogram')\"\n                    @click=\"\n                      spectrogram(index, item.currentWav['filename'], 'Recent')\n                    \"\n                  >\n                    <v-icon alt=\"spectrogram\">mdi-chart-bubble</v-icon>\n                  </v-btn>\n                </v-col>\n\n                <v-spacer></v-spacer>\n\n                <v-btn\n                  v-tooltip.bottom-start=\"t('Share sound')\"\n                  @click=\"\n                    shareLink(item.spCode, item.cn, item.currentWav['filename'])\n                  \"\n                  color=\"light-blue darken-1\"\n                  @click.stop=\"shareDialog = true\"\n                  v-if=\"\n                    isOwner || user === '9042f396-b3f9-49ec-b398-6c35bb29886a'\n                  \"\n                  class=\"ml-0 mr-2\"\n                  >{{ t(\"Share\") }}\n                </v-btn>\n              </v-row>\n\n              <!-- Recent Play -->\n              <div>\n                <v-card-actions class=\"mx-0 my-0 py-0\">\n                  <v-row\n                    ><v-col cols=\"12\">\n                      <v-btn\n                        class=\"mx-1 my-1\"\n                        @click=\"\n                          playFile(\n                            item.currentWav['filename'],\n                            item.spCode,\n                            item.cn,\n                            item,\n                            index,\n                            false\n                          )\n                        \"\n                        color=\"light-blue darken-1\"\n                      >\n                        <v-icon left>mdi-play-circle</v-icon>\n                        <v-divider class=\"mx-1\" vertical></v-divider>\n                        {{ t(\"Play\")}}\n                      </v-btn>\n                      <v-btn\n                        class=\"mx-1\"\n                        @click=\"\n                          playFileEnhance(\n                            item.currentWav['filename'],\n                            item.spCode,\n                            item.cn,\n                            item.id,\n                            index\n                          )\n                        \"\n                        color=\"light-blue darken-1\"\n                      >\n                        <v-icon left>mdi-play-circle</v-icon>\n                        <v-divider class=\"mx-1\" vertical></v-divider>\n                        {{ t(\"Enhance\") }}\n                      </v-btn>\n                      </v-col\n                    >\n                      \n                    <v-col cols=\"12\">\n                      <v-select\n                        class=\"mx-2 my-0 py-0\"\n                        :items=\"item.wavList\"\n                        v-model=\"item.currentWav\"\n                        item-text=\"listname\"\n                        item-value=\"filename\"\n                        @change=\"\n                          playFile(\n                            item.currentWav['filename'],\n                            item.spCode,\n                            item.cn,\n                            item,\n                            index,\n                            true\n                          )\n                        \"\n                        return-object\n                        single-line\n                      ></v-select>\n                    </v-col>\n                  </v-row>\n                </v-card-actions>\n                <v-card-actions class=\"mx-0 my-0 py-0\">\n                  <v-row align=\"center\" justify=\"center\" no-gutter>\n                    <v-col cols=\"12\">\n                      \n                      <v-btn\n                        v-if=\"isOwner & subscriptionActive\"\n                        class=\"mx-1 my-0\"\n                        @click=\"favoriteHit(item)\"\n                        color=\"light-blue darken-1\"\n                      >\n                        <v-icon left>{{\n                          item.favoriteHit ? \"mdi-star\" : \"mdi-star-outline\"\n                        }}</v-icon>\n                        <v-divider class=\"mx-1\" vertical></v-divider>\n                        {{ t(\"Favorite\") }}\n                      </v-btn>\n                      <v-btn\n                        v-if=\"goNativeActive == false & isOwner & subscriptionActive\"\n                        class=\"mx-2 my-0\"\n                        color=\"light-blue darken-1\"\n                        fab\n                        small\n                        dark\n                        v-tooltip.bottom-start=\"'Download'\"\n                        @click=\"download(item)\"\n                        ><v-icon alt=\"download\">mdi-download</v-icon>\n                      </v-btn>\n\n                      <!-- Minus Button -->\n                      <v-btn v-if=\"maxClipSeconds > 3\" class=\"mx-1\" :style=\"{ minWidth: '40px', height: '32px', padding: '0 8px' }\" color=\"light-blue darken-1\" @click=\"clipSeconds > 3 ? clipSeconds-- : clipSeconds\">\n                          <v-icon>mdi-minus</v-icon>\n                        </v-btn>\n\n                        <!-- Plus Button -->\n                        <v-btn v-if=\"maxClipSeconds > 3\" :style=\"{ minWidth: '40px', height: '32px', padding: '0 8px' }\" color=\"light-blue darken-1\" @click=\"clipSeconds < maxClipSeconds ? clipSeconds++ : clipSeconds\">\n                          <v-icon>mdi-plus</v-icon>\n                        </v-btn>\n                        <span v-if=\"maxClipSeconds > 3\" :style=\"{ minWidth: '40px', height: '32px', padding: '0 8px' }\" color=\"grey lighten-1\">{{ clipSeconds }}s</span>\n                    \n\n\n                    </v-col>\n                  </v-row>\n                </v-card-actions>\n\n                <!-- Recent Label -->\n                <v-row no-gutters v-if=\"isOwner & !hidePics\"\n                  ><v-col cols=\"10\">\n                    <v-overflow-btn\n                      class=\"mx-3 my-2\"\n                      v-if=\"item.wav\"\n                      @change=\"labelHit(index, item)\"\n                      :items=\"dropdown_class\"\n                      :background-color=\"\n                        item.classLabel != null\n                          ? 'light-blue darken-4'\n                          : 'light-blue darken-1'\n                      \"\n                      :label=\"labelText(item.spCode, item.cn)\"\n                      :aria-label=\"labelText(item.spCode, item.cn)\" \n                      target=\"#label_sound\"\n                      v-model=\"item.classLabel\"\n                    ></v-overflow-btn>\n\n                    <v-text-field\n                      v-if=\"item.showEntryBox == true\"\n                      counter=\"50\"\n                      maxlength=\"50\"\n                      v-model=\"item.tellUsMore\"\n                      :placeholder=\"t('What is this sound?')\"\n                      :label=\"t('This sound is a:')\"\n                      outlined\n                      :hint=\"item.submitted == true ? t('Submitted') : ''\"\n                      persistent-hint\n                    >\n                    </v-text-field>\n\n                    <v-btn\n                      v-if=\"item.showSubmitBox == true\"\n                      @click=\"labelHitCustom(index, item)\"\n                      class=\"ma-2\"\n                      color=\"light-blue darken-1\"\n                      >{{ t(\"Submit\") }}</v-btn\n                    >\n                  </v-col>\n                  <v-col cols=\"2\">\n                    <v-dialog width=\"300\">\n                      <template v-slot:activator=\"{ on, attrs }\">\n                        <v-btn icon v-bind=\"attrs\" v-on=\"on\" class=\"my-6 mx-3\" v-if=\"!hidePics\">\n                          <v-icon alt=\" labeling information\"\n                            >mdi-information</v-icon\n                          >\n                        </v-btn>\n                      </template>\n\n                      <v-card>\n                        <v-card-title class=\"headline grey lighten-2\">\n                          {{ t(\"About Labeling\") }}\n                        </v-card-title>\n\n                        <v-card-text>\n                          {{ t(\"Label Info\") }}\n                        </v-card-text>\n                      </v-card>\n                    </v-dialog>\n                  </v-col>\n                </v-row>\n              </div>\n            </v-card>\n          </v-col>\n        </v-row>\n      </v-container>\n\n      <!-- Live Detections -->\n      <v-container fluid v-if=\"currentView == 'Live'\">\n        <v-row dense>\n          <v-col cols=\"12\" v-for=\"item in liveHits\" :key=\"item.id\">\n            <v-card outlined tile color=\"black\" dark>\n              <v-row align=\"center\">\n                <v-col cols=\"3\" align=\"center\">\n                  <v-img\n                    v-if = \"!hidePics\"\n                    width=\"100%\"\n                    max-width=\"120\"\n                    :src=\"\n                      'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg'\n                    \"\n                    onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                  ></v-img>\n\n                </v-col>\n\n                <v-col cols=\"3\"> {{ t(item.spCode, item.cn) }}\n                  <v-card-text class=\"my-0 py-0\">\n                  <v-btn\n                    v-if=\"(!goNativeActive)\"\n                    text\n                    @click=\"navigateTo('https://ebird.org/species/' + item.spCode)\"\n                    color=\"light-blue\"\n                    >eBird</v-btn\n                  >\n                </v-card-text>\n                </v-col>\n                \n                <v-col cols=\"3\" align=\"right\"> {{ getEventText(item) }} </v-col>\n                <v-col cols=\"3\" align=\"center\">\n                  <v-btn\n                    icon\n                    v-tooltip.bottom-start=\"t('Play')\"\n                    @click=\"\n                      playFile(\n                        item.wav,\n                        item.spCode,\n                        item.cn,\n                        item,\n                        null,\n                        false\n                      )\n                    \"\n                  >\n                    <v-icon left>mdi-play-circle</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"mx-1\"\n                    v-tooltip.bottom-start=\"t('Enhance')\"\n                    @click=\"\n                      playFileEnhance(item.wav, item.spCode, item.cn, item.id, index)\n                    \"\n                    color=\"light-blue darken-1\"\n                  >\n                    <v-icon left>mdi-play-circle</v-icon>\n                  </v-btn>\n                </v-col>\n              </v-row>\n\n              <!-- <div v-if=\"item.window == 'spectrogram'\">\n                <Plotly\n                  :data=\"item.spectrogram\"\n                  :layout=\"plotlyLayout\"\n                  :display-mode-bar=\"false\"\n                ></Plotly>\n              </div> -->\n            </v-card>\n          </v-col>\n        </v-row>\n        <v-row align=\"center\">\n          <v-card-title class=\"white--text\">Previous Detections</v-card-title>\n          <v-col\n            cols=\"12\"\n            v-for=\"(item, index2) in allHits.slice(0, 100)\"\n            :key=\"item.id\"\n          >\n            <v-card dark tile color=\"#385F73\">\n              <v-row dense align=\"center\">\n                <v-col cols=\"3\" align=\"center\">\n                  <v-img\n                    v-if = \"!hidePics\"\n                    width=\"100%\"\n                    max-width=\"120\"\n                    :src=\"\n                      'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg'\n                    \"\n                    onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                  ></v-img>\n                </v-col>\n                <v-col cols=\"3\" align=\"left\">\n                  {{ index2 + 1 }}. {{ t(item.spCode, item.cn) }}\n                  <v-card-text class=\"my-0 py-0\">\n               \n                  <v-btn\n                    v-if=\"(item.lon < -30) & (!goNativeActive)\"\n                    text\n                    @click=\"navigateTo('https://ebird.org/species/' + item.spCode)\"\n                    color=\"light-blue\"\n                    >eBird</v-btn\n                  >\n                </v-card-text>\n                </v-col>\n                <v-col cols=\"3\" align=\"right\">\n                  {{ getEventText(item) }}\n                </v-col>\n                <v-col cols=\"3\" align=\"center\">\n                  <v-btn\n                    icon\n                    v-tooltip.bottom-start=\"t('Play')\"\n                    v-if=\"item.wav\"\n                    @click=\"\n                      playFile(\n                        item.wav,\n                        item.spCode,\n                        item.cn,\n                        item,\n                        null,\n                        false\n                      )\n                    \"\n                    ><v-icon>mdi-play-circle</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    v-tooltip.bottom-start=\"t('Enhance')\"\n                    class=\"mx-1\"\n                    @click=\"\n                      playFileEnhance(item.wav, item.spCode, item.cn, item.id, index)\n                    \"\n                    color=\"light-blue darken-1\"\n                  >\n                    <v-icon left>mdi-play-circle</v-icon>\n                  </v-btn>\n                </v-col>\n              </v-row>\n            </v-card>\n          </v-col>\n        </v-row>\n      </v-container>\n\n      <!-- All -->\n      <v-container v-if=\"currentView == 'All'\" fluid>\n        <template>\n          <v-row>\n            <v-col class=\"text-left mx-5\">\n              <v-autocomplete\n                dark\n                :items=\"allSpeciesList\"\n                :label=\"t('Select Species')\"\n                v-model=\"speciesSelected\"\n                @change=\"selectSpecies(speciesSelected)\"\n                auto-select-first\n              ></v-autocomplete>\n            </v-col>\n            <v-dialog v-model=\"csvDialog\" persistent max-width=\"600px\">\n              <template v-slot:activator=\"{ on, attrs }\">\n                <v-col class=\"text-right\">\n                  <v-btn color=\"primary\" dark v-bind=\"attrs\" v-on=\"on\">\n                    {{ t(\"Download CSV\") }}\n                  </v-btn>\n                </v-col>\n              </template>\n              <v-card>\n                <v-card-title>\n                  <span class=\"text-h5\">Download CSV</span>\n                </v-card-title>\n                <v-card-text>\n                  <v-container>\n                    <v-row>\n                      <v-col cols=\"12\">\n                        <v-checkbox\n                          dense\n                          v-model=\"downloadSummary\"\n                          :label=\"t('Download Summary')\"\n                        ></v-checkbox>\n                        <v-checkbox\n                          dense\n                          v-model=\"downloadRaw\"\n                          :label=\"t('DownloadInfo')\"\n                        ></v-checkbox>\n                      </v-col>\n\n                      <v-col cols=\"12\" v-if=\"downloadRaw == true\">\n                        <v-date-picker\n                          v-model=\"csvDates\"\n                          range\n                          no-title\n                        ></v-date-picker>\n                      </v-col>\n                    </v-row>\n                  </v-container>\n                </v-card-text>\n                <v-card-actions>\n                  <v-spacer></v-spacer>\n                  <v-btn color=\"blue darken-1\" text @click=\"csvDialog = false\">\n                    {{ t(\"Close\") }}\n                  </v-btn>\n                  <v-btn color=\"blue darken-1\" text @click=\"downloadCSV()\">\n                    {{ t(\"Download CSV\") }}\n                  </v-btn>\n                </v-card-actions>\n              </v-card>\n            </v-dialog>\n          </v-row>\n        </template>\n\n        <!-- ALL Loop through all species -->\n        <v-row dense>\n          <v-col\n            cols=\"12\"\n            v-for=\"(item, index) in seriesDaily\"\n            :key=\"item.id\"\n            :id=\"t(item.spCode, item.cn)\"\n          >\n            <v-card\n              tile\n              outlined\n              color=\"light-blue darken-4\"\n              class=\"mx-auto mx-auto\"\n              dark\n              scroll-margin-top=\"50px\"\n            >   \n              <v-row no-gutters>\n                <v-col cols=\"2\">\n                  <v-img\n                    v-if = \"!hidePics\"\n                    class=\"mx-1 my-1\"\n                    width=\"80%\"\n                    max-width=\"120\"   \n                    :src=\"\n                      'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg'\n                    \"\n                    onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                  ></v-img>\n                </v-col>\n\n                <v-col cols=\"5\">\n                  {{ index + 1 }}. {{ t(item.spCode, item.cn) }}\n                  {{ item.countsTotal }}\n                </v-col>\n\n                <v-col cols=\"5\">\n                  <v-btn\n                    v-if=\"!hidePics\"\n                    icon\n                    v-tooltip.bottom-start=\"t('Daily Chart')\"\n                    @click=\"\n                      setWindowAll(index, 'monthly', item.spCode, item.cn)\n                    \"\n                  >\n                    <v-icon alt=\"daily chart\">mdi-chart-multiple</v-icon>\n                  </v-btn>\n                  <v-btn\n                    v-if=\"!hidePics\"\n                    icon\n                    v-tooltip.bottom-start=\"t('Spectrogram')\"\n                    @click=\"\n                      getWavFileName(\n                        index,\n                        item.spCode,\n                        item.cn,\n                        'All',\n                        'spectrogram',\n                        item.wav\n                      )\n                    \"\n                  >\n                    <v-icon alt=\"spectrogram\">mdi-chart-bubble</v-icon>\n                  </v-btn>\n                  <!-- <v-btn\n                    icon\n                    v-tooltip.bottom-start=\"'Download File'\"\n                    :href=\"downloadLink\"\n                    v-if=\"isOwner\"\n                    ><v-icon>mdi-download</v-icon>\n                  </v-btn> -->\n                  <v-btn\n                    icon\n                    v-tooltip.bottom-start=\"t('Play')\"\n                    @click=\"\n                      getWavFileName(\n                        index,\n                        item.spCode,\n                        item.cn,\n                        'All',\n                        'play',\n                        item.wav\n                      )\n                    \"\n                  >\n                    <v-icon left>mdi-play-circle</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"mx-1\"\n                    v-tooltip.bottom-start=\"t('Enhance')\"\n                    @click=\"\n                      playFileEnhance(item.wav, item.spCode, item.cn, item.id, index)\n                    \"\n                    color=\"light-blue darken-1\"\n                  >\n                    <v-icon left>mdi-play-circle</v-icon>\n                  </v-btn>\n                </v-col>\n              </v-row>\n              <v-row no-gutters>\n                <v-col cols=\"12\">\n                  <div class=\"d-flex align-center\">\n                    <v-btn\n                    text\n                    style=\"height: 12px; margin: 0; padding: 0; margin-left: 2px; margin-right: 1px;\"\n                    v-if=\"item.lon < -30\"\n                    @click=\"navigateTo('https://www.allaboutbirds.org/guide/' +\n                            replaceSpaces(item.cn))\"\n                    color=\"light-blue\"\n                    >{{ t(\"About\") }}\n                    </v-btn\n                  >\n                  <v-btn\n                    text\n                    style=\"height: 12px;margin: 0; padding: 0; margin-left: 0px; margin-right: 10px;\"\n                    @click=\"navigateTo('https://ebird.org/species/' + item.spCode)\"\n                    color=\"light-blue\"\n                    >eBird</v-btn\n                  >\n                  <v-spacer></v-spacer>\n                  <v-switch\n                    v-if=\"isOwner\"\n                    v-model=\"item.showBird\"\n                    v-tooltip.bottom-start=\"\n                      'Turning Show OFF will hide this species on M and H setting'\n                    \"\n                    :label=\"t('Show')\"\n                    @change=\"\n                      toggleShowBird(item.cn, item.spCode, item.showBird)\n                    \"\n                    color=\"info\"\n                    style=\"margin: 0; padding: 0; margin-left: 8px; margin-right: 8px;\"\n                  ></v-switch>\n                  \n                  <v-switch\n                    v-if=\"isOwner & goNativeActive & subscriptionActive\"\n                    v-model=\"item.notifyBird\"\n                    v-tooltip.bottom-start=\"\n                      'Send notification when this species is detected'\n                    \"\n                    :label=\"t('Notify')\"\n                    @change=\"\n                      toggleNotifyBird(item.cn, item.spCode, item.notifyBird)\n                    \"\n                    color=\"info\"\n                    style=\"margin: 0; padding: 0; margin-right: 16px;\"\n                  ></v-switch>\n                    \n                 \n                </div>\n\n\n                 \n\n                </v-col>\n              </v-row>\n\n              <!-- All Daily Time Series -->\n              <div v-if=\"item.window == 'monthly'\">\n                <v-card-text class=\"ma-3\">\n                  Past Year <v-icon>mdi-music-note</v-icon\n                  >{{ item.countsTotal }}</v-card-text\n                >\n                <fusioncharts\n                  width=\"100%\"\n                  height=\"300\"\n                  type=\"timeseries\"\n                  dataFormat=\"json\"\n                  :dataSource=\"item.dataSource\"\n                >\n                </fusioncharts>\n              </div>\n\n              <!-- All Spectrogram -->\n              <div v-if=\"item.window == 'spectrogram'\">\n                <Plotly\n                  :data=\"item.spectrogram\"\n                  :layout=\"plotlyLayout\"\n                  :display-mode-bar=\"false\"\n                ></Plotly>\n              </div>\n\n              <!-- <div v-if=\"item.wav\">\n                  <v-card-actions>\n                    <v-btn @click=\"playFile(item.wav, item.spCode, item.cn)\" color=\"light-blue darken-1\">\n                      <v-icon class=\"mx-1\" small align=\"center\">mdi-play-circle</v-icon>\n                      {{t(\"Play\")}}\n                    </v-btn>\n                    <v-slider class=\"px-3\" v-model=\"playbackGain\" prepend-icon=\"mdi-volume-high\" min=\"20\" max=\"60\"></v-slider>\n                  </v-card-actions>\n                </div> -->\n            </v-card>\n          </v-col>\n        </v-row>\n      </v-container>\n\n      <!-- Yesterday Daily Summary -->\n      <v-container v-if=\"currentView == 'Yesterday'\" fluid>\n        <v-row dense>\n          <v-col\n            cols=\"12\"\n            v-for=\"(item, index) in dailySummaryList\"\n            :key=\"item.id\"\n          >\n            <v-card\n              tile\n              outlined\n              color=\"light-blue darken-4\"\n              class=\"mx-auto my-auto\"\n              dark\n            >\n              <v-row no-gutters align=\"center\">\n                <v-col cols=\"3\">\n                  <v-img\n                    v-if=\"!hidePics\"\n                    class=\"mx-2 my-3\"\n                    width=\"85%\"\n                    max-width=\"120\"\n                    :src=\"\n                      'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg'\n                    \"\n                    onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                  ></v-img>\n                </v-col>\n\n                <v-col cols=\"4\">\n                  {{ index + 1 }}. {{ t(item.spCode, item.cn) }}\n                  {{ item.countsPerDay }}\n                </v-col>\n                <v-spacer></v-spacer>\n                <v-col cols=\"5\">\n                  <v-btn\n                    class=\"mx-1 my-1\"\n                    @click=\"\n                      getWavFileName(\n                        index,\n                        item.spCode,\n                        item.cn,\n                        'Daily Summary',\n                        'play',\n                        item.wav\n                      )\n                    \"\n                    color=\"light-blue darken-1\"\n                    ><v-icon left>mdi-play-circle</v-icon>\n                    <v-divider class=\"mx-1\" vertical></v-divider>\n                    {{ t(\"Play\") }}\n                  </v-btn>\n                  <v-spacer></v-spacer>\n                  <v-btn\n                    class=\"mx-1 my-2\"\n                    @click=\"\n                      playFileEnhance(item.wav, item.spCode, item.cn, item.id, index)\n                    \"\n                    color=\"light-blue darken-1\"\n                  >\n                    <v-icon left>mdi-play-circle</v-icon>\n                    <v-divider class=\"mx-1\" vertical></v-divider>\n                    {{ t(\"Enhance\") }}\n                  </v-btn>\n                </v-col>\n              </v-row>\n              <v-row no-gutters align=\"center\"\n                ><v-col cols=\"8\">\n                  <v-btn\n                    text\n                    v-if=\"item.lon < -30\"\n                    @click=\"navigateTo('https://www.allaboutbirds.org/guide/' +\n                            replaceSpaces(item.cn))\"\n                    color=\"light-blue\"\n                    >{{ t(\"About\") }}</v-btn\n                  >\n                  <v-btn\n                    text\n                    @click=\"navigateTo('https://ebird.org/species/' + item.spCode)\"\n                    color=\"light-blue\"\n                    >eBird</v-btn\n                  >\n                </v-col>\n              </v-row>\n\n              <!-- All Daily Time Series -->\n              <div v-if=\"item.window == 'monthly'\">\n                <v-card-text class=\"ma-3\">\n                  Past Year <v-icon>mdi-music-note</v-icon\n                  >{{ item.countsTotal }}</v-card-text\n                >\n                <fusioncharts\n                  width=\"100%\"\n                  height=\"300\"\n                  type=\"timeseries\"\n                  dataFormat=\"json\"\n                  :dataSource=\"item.dataSource\"\n                >\n                </fusioncharts>\n              </div>\n\n              <!-- All Spectrogram -->\n              <div v-if=\"item.window == 'spectrogram'\">\n                <Plotly\n                  :data=\"item.spectrogram\"\n                  :layout=\"plotlyLayout\"\n                  :display-mode-bar=\"false\"\n                ></Plotly>\n              </div>\n\n              <!-- <div v-if=\"item.wav\">\n                  <v-card-actions>\n                    <v-btn @click=\"playFile(item.wav, item.spCode, item.cn)\" color=\"light-blue darken-1\">\n                      <v-icon class=\"mx-1\" small align=\"center\">mdi-play-circle</v-icon>\n                      Play\n                    </v-btn>\n                    <v-slider class=\"px-3\" v-model=\"playbackGain\" prepend-icon=\"mdi-volume-high\" min=\"20\" max=\"60\"></v-slider>\n                  </v-card-actions>\n                </div> -->\n            </v-card>\n          </v-col>\n        </v-row>\n      </v-container>\n    </v-card>\n\n    <!-- Haiku Poem -->\n    <v-card light tile flat color=\"rgb(255, 255, 255, 0.6)\">\n      <v-img :src=\"haiku.src\">\n        <v-row style=\"height: 10px\"></v-row>\n        <v-row style=\"height: 40px\">\n          <v-col class=\"mx-6 my-2\" cols=\"12\">\n            <v-card-text\n             role=\"none\"\n              class=\"mx-6 text-xs-h6 text-sm-h5 mx-sm-5\"\n              style=\"color: black; text-align: left; text-indent: 20%;\"\n               :aria-label=\"haiku.poem1\"\n               tabindex=\"0\"\n            >\n              {{ haiku.poem1 }}</v-card-text\n            >\n          </v-col>\n        </v-row>\n        <v-row style=\"height: 40px\">\n          <v-col class=\"mx-6 my-1\" cols=\"12\">\n            <v-card-text\n              class=\"mx-6 text-xs-h6 text-sm-h5 mx-sm-5\"\n              style=\"color: black; text-align: left; text-indent: 20%;\"\n              :aria-label=\"haiku.poem2\"\n               tabindex=\"0\"\n              >{{ haiku.poem2 }}\n            </v-card-text>\n          </v-col>\n        </v-row>\n        <v-row style=\"height: 40px\">\n          <v-col class=\"mx-6 my-1\" cols=\"12\">\n            <v-card-text\n              class=\"mx-6 text-xs-h6 text-sm-h5 mx-sm-5\"\n              style=\"color: black; text-align: left; text-indent: 20%;\"\n              :aria-label=\"haiku.poem3\"\n               tabindex=\"0\"\n            >\n              {{ haiku.poem3 }}</v-card-text\n            >\n          </v-col>\n        </v-row>\n\n        <v-row style=\"height: 2px\"></v-row>\n\n        <v-row style=\"height: 50px\"\n          ><v-col xs=\"2\" sm=\"4\"> </v-col\n          ><v-col xs=\"10\" sm=\"8\">\n            <v-card-text class=\"text-xs-h6 text-sm-h5\" style=\"color: black; text-align: left; \" :aria-label=\"haiku.poemAuthor\"\n            tabindex=\"0\">\n              {{ haiku.poemAuthor }}\n            </v-card-text>\n            \n          </v-col></v-row\n        >\n        <v-row style=\"height: 60px\"\n          ><v-col xs=\"2\" sm=\"4\"> </v-col\n          ><v-col xs=\"10\" sm=\"8\">\n          </v-col></v-row\n        >\n      </v-img>\n    </v-card>\n\n    <!-- Snackbar No Audio -->\n    <v-snackbar v-model=\"snackbar\">\n      Audio unavailable\n      <template v-slot:action=\"{ attrs }\">\n        <v-btn color=\"yellow\" text v-bind=\"attrs\" @click=\"snackbar = false\">\n          Close\n        </v-btn>\n      </template>\n    </v-snackbar>\n\n    <!-- Bottom Navigation -->\n    <v-bottom-navigation hide-on-scroll fixed horizontal dark height=\"60\">\n      <v-btn v-if=\"showBirdCastButton()\" @click=navigateTo(birdCastUrl)>\n        <span>Birdcast</span>\n        <v-icon alt=\"Birdcast link\">mdi-earth</v-icon>\n      </v-btn>\n      <v-btn\n        @click=\"\n          $vuetify.goTo(0, {\n            duration: 300,\n            offset: 0,\n            easing: 'easeInOutCubic',\n          })\n        \"\n      >\n        <span>To Top</span>\n        <v-icon alt=\"Go to top of page\">mdi-pan-up</v-icon>\n      </v-btn>\n    </v-bottom-navigation>\n  </div>\n</template>\n\n<script\n  async\n  defer\n  crossorigin=\"anonymous\"\n></script>\n\n<script>\nimport { API, Storage } from \"aws-amplify\";\nimport {\n  hitBySerialByDate,\n  statusByDate,\n  getDeviceState,\n  dailyCountSummaryBySerialBySpecies,\n  dailyCountSummaryBySerialByDate,\n  yearlyCountSummaryBySerialByYear,\n  getUserInteraction,\n  dailyCountSummaryByDateBySpecies,\n  getDailyCountSummary,\n  listShareMaps,\n  haikuboxByOwner,\n  hideBirdBySerial,\n  notifyBirdBySerial,\n  getOneSignalConsent,\n  bookmarkHaikuboxByOwner,\n  getShareMap,\n  getBookmarkHaikubox,\n  getDevice,\n  hitsBySpeciesByDate,\n  userNoticeByOwnerByViewed,\n  getNoticeDescription,\n  getSubscription,\n  getFavoriteHit,\n  getUserSettings\n} from \"./graphql/queries\";\nimport {\n  createLabeledData,\n  createUserInteraction,\n  updateUserInteraction,\n  createClickTable,\n  deleteHideBird,\n  createHideBird,\n  deleteNotifyBird,\n  createNotifyBird,\n  createOneSignal,\n  createOneSignalConsent,\n  updateDevice,\n  deleteBookmarkHaikubox,\n  createBookmarkHaikubox,\n  updateUserNotice,\n  createFavoriteHit,\n  deleteFavoriteHit,\n} from \"./graphql/mutations\";\nimport { latLngBounds, latLng, icon } from \"leaflet\";\nimport { LCircle, LTooltip } from \"vue2-leaflet\";\n// import terminator from '@joergdietrich/leaflet.terminator';\n\nimport FusionCharts from \"fusioncharts\";\n\nimport { Plotly } from \"vue-plotly\";\nvar moment = require(\"moment-timezone\");\n\nvar fft = require(\"fft-js\").fft,\n  ifft = require(\"fft-js\").ifft;\n\n// https://github.com/chrisguttandin/standardized-audio-context\nimport { AudioContext, decodeAudioData } from \"standardized-audio-context\";\n//const AudioContext = window.AudioContext || window.webkitAudioContext;\n\nvar hann = [\n  0.0, 3.77965773e-5, 1.51180595e-4, 3.4013491e-4, 6.04630957e-4, 9.44628746e-4,\n  1.36007687e-3, 1.85091253e-3, 2.41706151e-3, 3.05843822e-3, 3.77494569e-3,\n  4.56647559e-3, 5.43290826e-3, 6.3741127e-3, 7.38994662e-3, 8.48025644e-3,\n  9.64487731e-3, 1.08836332e-2, 1.21963367e-2, 1.35827895e-2, 1.50427819e-2,\n  1.65760932e-2, 1.81824916e-2, 1.98617342e-2, 2.16135671e-2, 2.34377255e-2,\n  2.53339336e-2, 2.73019047e-2, 2.93413412e-2, 3.1451935e-2, 3.36333667e-2,\n  3.58853068e-2, 3.82074146e-2, 4.05993391e-2, 4.30607187e-2, 4.55911813e-2,\n  4.81903443e-2, 5.08578147e-2, 5.35931893e-2, 5.63960544e-2, 5.92659864e-2,\n  6.22025514e-2, 6.52053053e-2, 6.82737943e-2, 7.14075543e-2, 7.46061116e-2,\n  7.78689827e-2, 8.11956742e-2, 8.45856832e-2, 8.80384971e-2, 9.1553594e-2,\n  9.51304424e-2, 9.87685015e-2, 1.02467221e-1, 1.06226043e-1, 1.10044397e-1,\n  1.13921708e-1, 1.17857388e-1, 1.21850843e-1, 1.25901469e-1, 1.30008654e-1,\n  1.34171776e-1, 1.38390206e-1, 1.42663307e-1, 1.46990432e-1, 1.51370928e-1,\n  1.55804131e-1, 1.60289372e-1, 1.64825973e-1, 1.69413247e-1, 1.74050502e-1,\n  1.78737036e-1, 1.8347214e-1, 1.88255099e-1, 1.9308519e-1, 1.97961681e-1,\n  2.02883837e-1, 2.07850913e-1, 2.12862158e-1, 2.17916814e-1, 2.23014117e-1,\n  2.28153297e-1, 2.33333576e-1, 2.38554171e-1, 2.43814294e-1, 2.49113148e-1,\n  2.54449933e-1, 2.59823842e-1, 2.65234062e-1, 2.70679775e-1, 2.76160159e-1,\n  2.81674384e-1, 2.87221617e-1, 2.92801019e-1, 2.98411747e-1, 3.04052952e-1,\n  3.09723782e-1, 3.15423378e-1, 3.21150881e-1, 3.26905422e-1, 3.32686134e-1,\n  3.38492141e-1, 3.44322565e-1, 3.50176526e-1, 3.56053138e-1, 3.61951513e-1,\n  3.6787076e-1, 3.73809982e-1, 3.79768282e-1, 3.8574476e-1, 3.91738511e-1,\n  3.97748631e-1, 4.03774209e-1, 4.09814335e-1, 4.15868096e-1, 4.21934577e-1,\n  4.2801286e-1, 4.34102027e-1, 4.40201156e-1, 4.46309327e-1, 4.52425614e-1,\n  4.58549094e-1, 4.64678841e-1, 4.70813928e-1, 4.76953428e-1, 4.83096412e-1,\n  4.89241951e-1, 4.95389117e-1, 5.0153698e-1, 5.07684611e-1, 5.1383108e-1,\n  5.19975458e-1, 5.26116815e-1, 5.32254225e-1, 5.38386758e-1, 5.44513487e-1,\n  5.50633486e-1, 5.56745831e-1, 5.62849596e-1, 5.68943859e-1, 5.75027699e-1,\n  5.81100196e-1, 5.87160431e-1, 5.93207489e-1, 5.99240456e-1, 6.05258418e-1,\n  6.11260467e-1, 6.17245695e-1, 6.23213197e-1, 6.2916207e-1, 6.35091417e-1,\n  6.41000339e-1, 6.46887944e-1, 6.52753341e-1, 6.58595644e-1, 6.6441397e-1,\n  6.70207439e-1, 6.75975174e-1, 6.81716305e-1, 6.87429962e-1, 6.93115283e-1,\n  6.98771407e-1, 7.0439748e-1, 7.09992651e-1, 7.15556073e-1, 7.21086907e-1,\n  7.26584315e-1, 7.32047467e-1, 7.37475536e-1, 7.42867702e-1, 7.4822315e-1,\n  7.5354107e-1, 7.58820659e-1, 7.64061117e-1, 7.69261652e-1, 7.74421479e-1,\n  7.79539817e-1, 7.84615893e-1, 7.89648938e-1, 7.94638193e-1, 7.99582902e-1,\n  8.04482319e-1, 8.09335702e-1, 8.14142317e-1, 8.18901439e-1, 8.23612347e-1,\n  8.28274329e-1, 8.32886681e-1, 8.37448705e-1, 8.41959711e-1, 8.46419017e-1,\n  8.5082595e-1, 8.55179843e-1, 8.59480037e-1, 8.63725883e-1, 8.67916738e-1,\n  8.7205197e-1, 8.76130952e-1, 8.80153069e-1, 8.84117711e-1, 8.88024281e-1,\n  8.91872186e-1, 8.95660845e-1, 8.99389686e-1, 9.03058145e-1, 9.06665667e-1,\n  9.10211707e-1, 9.13695728e-1, 9.17117204e-1, 9.20475618e-1, 9.23770461e-1,\n  9.27001237e-1, 9.30167455e-1, 9.33268638e-1, 9.36304317e-1, 9.39274033e-1,\n  9.42177336e-1, 9.45013788e-1, 9.4778296e-1, 9.50484434e-1, 9.531178e-1,\n  9.55682662e-1, 9.5817863e-1, 9.60605328e-1, 9.62962389e-1, 9.65249456e-1,\n  9.67466184e-1, 9.69612237e-1, 9.71687291e-1, 9.73691033e-1, 9.75623159e-1,\n  9.77483377e-1, 9.79271407e-1, 9.80986977e-1, 9.82629829e-1, 9.84199713e-1,\n  9.85696393e-1, 9.87119643e-1, 9.88469246e-1, 9.89745e-1, 9.90946711e-1,\n  9.92074198e-1, 9.9312729e-1, 9.94105827e-1, 9.95009663e-1, 9.9583866e-1,\n  9.96592693e-1, 9.97271648e-1, 9.97875422e-1, 9.98403924e-1, 9.98857075e-1,\n  9.99234805e-1, 9.99537058e-1, 9.99763787e-1, 9.99914959e-1, 9.99990551e-1,\n  9.99990551e-1, 9.99914959e-1, 9.99763787e-1, 9.99537058e-1, 9.99234805e-1,\n  9.98857075e-1, 9.98403924e-1, 9.97875422e-1, 9.97271648e-1, 9.96592693e-1,\n  9.9583866e-1, 9.95009663e-1, 9.94105827e-1, 9.9312729e-1, 9.92074198e-1,\n  9.90946711e-1, 9.89745e-1, 9.88469246e-1, 9.87119643e-1, 9.85696393e-1,\n  9.84199713e-1, 9.82629829e-1, 9.80986977e-1, 9.79271407e-1, 9.77483377e-1,\n  9.75623159e-1, 9.73691033e-1, 9.71687291e-1, 9.69612237e-1, 9.67466184e-1,\n  9.65249456e-1, 9.62962389e-1, 9.60605328e-1, 9.5817863e-1, 9.55682662e-1,\n  9.531178e-1, 9.50484434e-1, 9.4778296e-1, 9.45013788e-1, 9.42177336e-1,\n  9.39274033e-1, 9.36304317e-1, 9.33268638e-1, 9.30167455e-1, 9.27001237e-1,\n  9.23770461e-1, 9.20475618e-1, 9.17117204e-1, 9.13695728e-1, 9.10211707e-1,\n  9.06665667e-1, 9.03058145e-1, 8.99389686e-1, 8.95660845e-1, 8.91872186e-1,\n  8.88024281e-1, 8.84117711e-1, 8.80153069e-1, 8.76130952e-1, 8.7205197e-1,\n  8.67916738e-1, 8.63725883e-1, 8.59480037e-1, 8.55179843e-1, 8.5082595e-1,\n  8.46419017e-1, 8.41959711e-1, 8.37448705e-1, 8.32886681e-1, 8.28274329e-1,\n  8.23612347e-1, 8.18901439e-1, 8.14142317e-1, 8.09335702e-1, 8.04482319e-1,\n  7.99582902e-1, 7.94638193e-1, 7.89648938e-1, 7.84615893e-1, 7.79539817e-1,\n  7.74421479e-1, 7.69261652e-1, 7.64061117e-1, 7.58820659e-1, 7.5354107e-1,\n  7.4822315e-1, 7.42867702e-1, 7.37475536e-1, 7.32047467e-1, 7.26584315e-1,\n  7.21086907e-1, 7.15556073e-1, 7.09992651e-1, 7.0439748e-1, 6.98771407e-1,\n  6.93115283e-1, 6.87429962e-1, 6.81716305e-1, 6.75975174e-1, 6.70207439e-1,\n  6.6441397e-1, 6.58595644e-1, 6.52753341e-1, 6.46887944e-1, 6.41000339e-1,\n  6.35091417e-1, 6.2916207e-1, 6.23213197e-1, 6.17245695e-1, 6.11260467e-1,\n  6.05258418e-1, 5.99240456e-1, 5.93207489e-1, 5.87160431e-1, 5.81100196e-1,\n  5.75027699e-1, 5.68943859e-1, 5.62849596e-1, 5.56745831e-1, 5.50633486e-1,\n  5.44513487e-1, 5.38386758e-1, 5.32254225e-1, 5.26116815e-1, 5.19975458e-1,\n  5.1383108e-1, 5.07684611e-1, 5.0153698e-1, 4.95389117e-1, 4.89241951e-1,\n  4.83096412e-1, 4.76953428e-1, 4.70813928e-1, 4.64678841e-1, 4.58549094e-1,\n  4.52425614e-1, 4.46309327e-1, 4.40201156e-1, 4.34102027e-1, 4.2801286e-1,\n  4.21934577e-1, 4.15868096e-1, 4.09814335e-1, 4.03774209e-1, 3.97748631e-1,\n  3.91738511e-1, 3.8574476e-1, 3.79768282e-1, 3.73809982e-1, 3.6787076e-1,\n  3.61951513e-1, 3.56053138e-1, 3.50176526e-1, 3.44322565e-1, 3.38492141e-1,\n  3.32686134e-1, 3.26905422e-1, 3.21150881e-1, 3.15423378e-1, 3.09723782e-1,\n  3.04052952e-1, 2.98411747e-1, 2.92801019e-1, 2.87221617e-1, 2.81674384e-1,\n  2.76160159e-1, 2.70679775e-1, 2.65234062e-1, 2.59823842e-1, 2.54449933e-1,\n  2.49113148e-1, 2.43814294e-1, 2.38554171e-1, 2.33333576e-1, 2.28153297e-1,\n  2.23014117e-1, 2.17916814e-1, 2.12862158e-1, 2.07850913e-1, 2.02883837e-1,\n  1.97961681e-1, 1.9308519e-1, 1.88255099e-1, 1.8347214e-1, 1.78737036e-1,\n  1.74050502e-1, 1.69413247e-1, 1.64825973e-1, 1.60289372e-1, 1.55804131e-1,\n  1.51370928e-1, 1.46990432e-1, 1.42663307e-1, 1.38390206e-1, 1.34171776e-1,\n  1.30008654e-1, 1.25901469e-1, 1.21850843e-1, 1.17857388e-1, 1.13921708e-1,\n  1.10044397e-1, 1.06226043e-1, 1.02467221e-1, 9.87685015e-2, 9.51304424e-2,\n  9.1553594e-2, 8.80384971e-2, 8.45856832e-2, 8.11956742e-2, 7.78689827e-2,\n  7.46061116e-2, 7.14075543e-2, 6.82737943e-2, 6.52053053e-2, 6.22025514e-2,\n  5.92659864e-2, 5.63960544e-2, 5.35931893e-2, 5.08578147e-2, 4.81903443e-2,\n  4.55911813e-2, 4.30607187e-2, 4.05993391e-2, 3.82074146e-2, 3.58853068e-2,\n  3.36333667e-2, 3.1451935e-2, 2.93413412e-2, 2.73019047e-2, 2.53339336e-2,\n  2.34377255e-2, 2.16135671e-2, 1.98617342e-2, 1.81824916e-2, 1.65760932e-2,\n  1.50427819e-2, 1.35827895e-2, 1.21963367e-2, 1.08836332e-2, 9.64487731e-3,\n  8.48025644e-3, 7.38994662e-3, 6.3741127e-3, 5.43290826e-3, 4.56647559e-3,\n  3.77494569e-3, 3.05843822e-3, 2.41706151e-3, 1.85091253e-3, 1.36007687e-3,\n  9.44628746e-4, 6.04630957e-4, 3.4013491e-4, 1.51180595e-4, 3.77965773e-5, 0.0,\n];\nimport { FFT } from \"dsp.js\";\nimport { unmute } from \"./unmute.min.js\";\nlet globalAudioContext = null;\nlet globalGainNode = null;\n\n// subscription for new hits\nimport { onCreateHit } from \"./graphql/subscriptions\";\nlet subscription;\n\nimport { extractFileInfo } from \"@/utils\";\n\nwindow.gonative_app_resumed = function () {\n  console.log(\"gonative_app_resumed\");\n  // window.location.reload();\n};\n\nexport default {\n  name: \"App\",\n  props: [\"user\", \"goHomeClicked\", \"toggleMapClicked\", \"toggleBadgeClicked\"],\n  watch: {\n    goHomeClicked: function () {\n      // watch it\n      // console.log(\"Haikbuox.vue goHomeClicked:\", this.haikuboxLoaded);\n      // mounted gets run again when home clicked\n      // if (this.haikuboxLoaded == 1) this.getDevicesByOwner();\n      this.showBadge = false;\n      this.showMap = false;\n    },\n    toggleMapClicked: function () {\n      this.showMap = !this.showMap;\n      if (this.showMap === true) {\n        this.showBadge = false;\n        if (this.mapInitialized == false) {\n          this.getDevices();\n          this.mapInitialized = true;\n        }\n        // this.updateCurrentHaikuboxRadius(); // kick off animation\n      }\n      // console.log('showMap',this.showMap);\n    },\n    toggleBadgeClicked: function () {\n      this.showBadge = !this.showBadge;\n      if (this.showBadge) this.showMap = false;\n      // console.log(\"showBadge\", this.showBadge);\n    },\n  },\n  mounted() {\n    this.haikuboxLoaded = 0;\n    // console.log(\"haikubox.vue mounted:\", this.user);\n    // delay is to handle page reload, waiting for user auth update\n    const haikuboxLanguage = localStorage.getItem(\"haikuboxLanguage\");\n    if (haikuboxLanguage != null) {\n      this.setLanguage(haikuboxLanguage);\n    } else {\n      let browserLanguage = navigator.language || navigator.languages[0];\n      this.browserLang = browserLanguage.split(\"-\")[0];\n      // console.log(\"language\", this.browserLang);\n      this.setLanguage(this.browserLang);\n    }\n    // get view from local storage\n    const haikuboxView = localStorage.getItem(\"haikuboxView\");\n    const haikuboxViewText = this.t(haikuboxView);\n    // console.log('Mounted Haikubox View', haikuboxView, haikuboxViewText);\n    if (haikuboxView != null) {\n      const haikuboxViewIcon = localStorage.getItem(\"haikuboxViewIcon\");\n      this.navSelection = {\n        id: haikuboxView,\n        text: haikuboxViewText,\n        icon: haikuboxViewIcon,\n      };\n    }\n\n    // get confidence from local storage\n    const haikuboxConfidence = localStorage.getItem(\"haikuboxConfidence\");\n\n    // console.log('Mounted Haikubox Confidence', haikuboxConfidence);\n    if (haikuboxConfidence != null) {\n      this.viewSettings= haikuboxConfidence;\n      this.setViewConfidence(this.viewSettings); // set threshold values\n    }\n\n    if (this.user != \"\") this.getDevicesByOwner();\n    else {\n      setTimeout(this.getDevicesByOwner, 1000); // load owners boxes first\n      // console.log('delay load');\n    }\n    // if (this.devicesByOwner[0] != null) {\n    //   // this.clickDevice(this.devicesByOwner[0], 0, true, this.devicesByOwner[0].lat, this.devicesByOwner[0].lon);\n    // }\n    // else {\n    // // this\n    //   // console.log(\"mounted getDevices\");\n    //   // setTimeout(this.getDevices, 1000); // only load if no owner devices, or if click on map\n    // }\n\n    // check for oneSignalConsent if on smartphone app\n    if (navigator.userAgent.indexOf(\"gonative\") > -1) {\n      this.goNativeActive = true;\n      setTimeout(this.checkOneSignalConsent, 2000);\n    }\n    this.haikuboxLoaded = 1;\n\n    // setTimeout(this.getDevicesByOwner, 500);\n    // this.startAnimation();\n  },\n  components: {\n    Plotly,\n    LCircle,\n    LTooltip,\n  },\n  data() {\n    return {\n      browserLang: \"\",\n      currentTranslations: {},\n      languages: [\n        \"da\",\n        \"de\",\n        \"en\",\n        \"es\",\n        \"fr\",\n        \"fi\",\n        \"it\",\n        \"nl\",\n        \"no\",\n        \"pt\",\n        \"sv\",\n      ],\n      selectedLanguage: \"en\",\n      haikuboxLoaded: 0,\n      yesterdayNumSpecies: 0,\n      yesterdayCallsAndSongs: 0,\n      yesterdayMostFrequent: \"\",\n      yesterdaySpCode: 0,\n      navSelection: {\n        id: \"Last 2 Hours\",\n        text: \"Last 2 Hours\",\n        icon: \"mdi-clock-outline\",\n      },\n      // haiku: {\n      //   src: \"https://haikubox-images.s3.amazonaws.com/carousel/haikuPoemBackground1.jpeg\",\n      //   type: \"haiku\",\n      //   heading: \"\",\n      //   poem1: \"On a withered branch\",\n      //   poem2: \"a crow is perched\",\n      //   poem3: \"an autumn evening\",\n      //   poemAuthor: \"Basho\",\n      //   poemLink:\n      //     \"https://www.basho4humanity.com/topic-description.php?ID=1525957618\",\n      //   poemLinkName: \"Learn More\",\n      // },\n      haiku: {\n        src: \"https://haikubox-images.s3.amazonaws.com/carousel/haikuPoemBackground6.jpeg\",\n        type: \"haiku\",\n        heading: \"\",\n        poem1: \"That's unusual!\",\n        poem2: \"The birds have arrived, twittering away,\",\n        poem3: \"while the trees are still in bud!\",\n        poemAuthor: \"Shiki Masaoka\",\n        poemLink:\n          \"https://allpoetry.com/a-cuckoo-cries\",\n        poemLinkName: \"Learn More\",\n      },\n      moreActiveSpeciesList: [],\n      csvDialog: false,\n      csvDates: [\"\", \"\"],\n      downloadSummary: true,\n      downloadRaw: false,\n      showMap: false,\n      showBadge: false,\n      playGettingStartedVideo: false,\n      currentView: \"Recent\",\n      lastUpdated: \"\",\n      lastStatusUpdate: \"\",\n      confidenceThreshold: 0.4,\n      specSumThreshold: 2,\n      viewSettings: \"Medium\",\n      recentHours: 2,\n      hitsLoading: 0,\n      haikuboxSelect: {},\n      bookmarkSelect: {},\n      devicesByOwner: [],\n      hidePics: false,\n      isOwner: false,\n      showRenewAlert: false,\n      subscriptionActive: true,\n      newBirdAlert: false,\n      authState: undefined,\n      goNativeActive: false,\n      osConsentGranted: false,\n      birdCastUrl: \"https://dashboard.birdcast.info/\",\n      clipSeconds: 3,\n      maxClipSeconds: 3,\n      playbackGain: 100,\n      fftLength: 512,\n      halfLength: 256,\n      lastEnhancedId: \"\",\n      lastEnhancedAudio: [],\n      isVisibilityListenerAdded: false,\n      lat: 0.0,\n      lon: 0.0,\n      snackbar: false,\n      hitCalendarDatePicked: true,\n      hitDatePicker: new Date(\n        Date.now() - new Date().getTimezoneOffset() * 60000\n      )\n        .toISOString()\n        .substr(0, 10),\n      maxDate: new Date().toISOString().substr(0, 10),\n      minDate: new Date(new Date().setDate(new Date().getDate() - 30))\n        .toISOString()\n        .substr(0, 10),\n      fusionSchema: [\n        {\n          name: \"Time\",\n          type: \"date\",\n          format: \"%Y-%m-%d %H:%M\",\n        },\n        {\n          name: \"Detections\",\n          type: \"number\",\n        },\n      ],\n      fusionSchemaDaily: [\n        {\n          name: \"Date\",\n          type: \"date\",\n          format: \"%Y-%m-%d\",\n        },\n        {\n          name: \"Detections\",\n          type: \"number\",\n        },\n      ],\n      dataSource: {\n        data: null,\n        legend: {\n          enabled: \"0\",\n        },\n        navigator: {\n          enabled: 0,\n        },\n        caption: {\n          text: \"Detections\",\n        },\n        subcaption: {\n          text: \"All Species\",\n        },\n        extensions: {\n          customRangeSelector: {\n            enabled: \"0\",\n          },\n        },\n        yAxis: [\n          {\n            plot: {\n              value: \"Detections\",\n              type: \"column\",\n            },\n            format: {\n              prefix: \"\",\n            },\n            title: \"Avg/15 minutes\",\n          },\n        ],\n      },\n      plotlyLayoutHeatmap: {\n        xaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: true,\n          fixedrange: true,\n        },\n        yaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: true,\n          fixedrange: true,\n        },\n        title: \"Calls Per Hour\",\n        margin: {\n          l: 60,\n          r: 40,\n          b: 60,\n          t: 40,\n          pad: 4,\n        },\n        height: 300,\n        hovermode: false,\n      },\n      plotlyLayout: {\n        xaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        yaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        margin: {\n          l: 0,\n          r: 0,\n          b: 0,\n          t: 0,\n          pad: 4,\n        },\n        height: 240,\n        hovermode: false,\n      },\n      dropdownVersionList: [\n        \"1.38\",\n        \"1.41\",\n        \"2.03\",\n        \"2.06\",\n        \"2.07\",\n        \"2.08\",\n        \"2.09\",\n      ],\n      dropdownVersion: \"2.09\",\n      hiddenList: [\n        \"Gun\",\n        \"Power tools\",\n        \"\",\n        \"Engine\",\n        \"Siren\",\n        \"Fireworks\",\n        \"Environmental\",\n        \"Human vocal\",\n        \"Human whistle\",\n        \"Human non-vocal\",\n        \"Dog\",\n        \"nocode\",\n        \"soundscape\",\n        \"Rock Pigeon\",\n        \"Black Vulture\",\n        \"Cattle Egret\",\n        \"Black-crowned Night-Heron\",\n        \"Noise\",\n        \"Northern Cricket Frog\",\n        \"Southern Cricket Frog\",\n        \"Allard's Ground Cricket\",\n        \"Tinkling Ground Cricket\",\n        \"Walker's Ground Cricket\",\n        \"Confused Ground Cricket\",\n        \"Carolina Ground Cricket\",\n        \"Clicker Round-winged Katydid\",\n        \"Common Virtuoso Katydid\",\n        \"Oblong-winged Katydid\",\n        \"Rattler Round-winged Katydid\",\n        \"Say's Trig\",\n        \"American Toad\",\n        \"Yosemite Toad\",\n        \"Great Plains Toad\",\n        \"Fowler's Toad\",\n        \"Houston Toad\",\n        \"Arizona Toad\",\n        \"Oak Toad\",\n        \"Texas Toad\",\n        \"Southern Toad\",\n        \"Woodhouse's Toad\",\n        \"Honey Bee\",\n        \"Protean Shieldback\",\n        \"Coyote\",\n        \"Gray Wolf\",\n        \"Short-winged Meadow Katydid\",\n        \"Slender Meadow Katydid\",\n        \"Pine Barrens Treefrog\",\n        \"Canyon Treefrog\",\n        \"Bird-voiced Treefrog\",\n        \"Cope's Gray Treefrog\",\n        \"Green Treefrog\",\n        \"Pine Woods Treefrog\",\n        \"Barking Treefrog\",\n        \"Squirrel Treefrog\",\n        \"Gray Treefrog\",\n        \"Greenhouse Frog\",\n        \"Eastern Narrow-mouthed Toad\",\n        \"Great Plains Narrow-mouthed Toad\",\n        \"Gryllus assimilis\",\n        \"Southern Wood Cricket\",\n        \"Fall Field Cricket\",\n        \"Southeastern Field Cricket\",\n        \"Columbian Trig\",\n        \"Gulf Coast Toad\",\n        \"American Bullfrog\",\n        \"Green Frog\",\n        \"Pickerel Frog\",\n        \"Wood Frog\",\n        \"Greater Angle-wing\",\n        \"Miogryllus saussurei\",\n        \"False Robust Conehead\",\n        \"Sword-bearing Conehead\",\n        \"Round-tipped Conehead\",\n        \"Robust Conehead\",\n        \"Cuban Ground Cricket\",\n        \"White-tailed Deer\",\n        \"Fast-calling Tree Cricket\",\n        \"Davis's Tree Cricket\",\n        \"Snowy Tree Cricket\",\n        \"Blackhorned Tree Cricket\",\n        \"Narrow-winged Tree Cricket\",\n        \"Pine Tree Cricket\",\n        \"Four-spotted Tree Cricket\",\n        \"Agile Meadow Katydid\",\n        \"Stripe-faced Meadow Katydid\",\n        \"Handsome Meadow Katydid\",\n        \"Jumping Bush Cricket\",\n        \"Brimley's Chorus Frog\",\n        \"Spotted Chorus Frog\",\n        \"Spring Peeper\",\n        \"Upland Chorus Frog\",\n        \"Southern Chorus Frog\",\n        \"Little Grass Frog\",\n        \"Ornate Chorus Frog\",\n        \"Strecker's Chorus Frog\",\n        \"Striped Chorus Frog\",\n        \"Common True Katydid\",\n        \"Couch's Spadefoot\",\n        \"Eastern Gray Squirrel\",\n        \"Red Squirrel\",\n        \"Eastern Chipmunk\",\n        \"Curve-tailed Bush Katydid\",\n        \"Fork-tailed Bush Katydid\",\n        \"Texas Bush Katydid\",\n        \"Pacific Chorus Frog\",\n        \"Handsome Trig\",\n        \"Red-legged Partridge\",\n      ],\n      backgroundLabelColor: \"blue\",\n      // isFetchingBoxes: true,\n      connectedDevices: [],\n      disconnectedDevices: [],\n      bookmarkedDevices: [],\n      mapInitialized: false,\n      haikuboxStatus: [],\n      userNotices: [],\n      liveHits: [],\n      hits: [],\n      allHits: [],\n      dailyCounts: [],\n      currentSiteName: \"\",\n      currentHaikuboxBookmark: false,\n      currentSerial: \"\",\n      currentTimezone: \"America/New_York\",\n      seriesHourly: [],\n      seriesDaily: [],\n      allSpeciesList: [],\n      speciesSelected: \"\",\n      scrolledToBottom: false,\n      dailyDetectionsTotal: [],\n      dailySpeciesTotal: [],\n      newSpeciesList: [],\n      missingSpeciesList: [],\n      dailySummaryList: [],\n      dailySummaryDate: \"\",\n      species1HourCounts: null,\n      specTickLabels: [\"0\", \"1\", \"2\", \"3\"],\n      currentWiFi: -60,\n      checkConnectionFailed: false,\n      wifiUpdatedAt: \"\",\n      audioLink: \"\",\n      downloadLink: \"\",\n      shareDialog: false,\n      shareCommonName: \"\",\n      shareAudioFile: \"\",\n      copyLinkSnackbar: false,\n      totalLabeled: 0,\n      speciesLabeled: [],\n      totalSpeciesLabeled: 0,\n      labelStreak: 0,\n      labelStreakRecord: 0,\n      targetLabel: 10,\n      targetLabelSpecies: 2,\n      targetLabelStreak: 2,\n      percentTargetLabeled: 0,\n      percentTargetLabelSpecies: 0,\n      percentTargetLabelStreak: 0,\n      badgeLabelRewards: [\n        10, 25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 2000,\n        3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 20000, 30000, 40000,\n        50000, 100000, 200000, 1000000, 10000000,\n      ],\n      badgeLabelSpeciesRewards: [\n        2, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85,\n        90, 95, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 250, 300,\n        350, 400, 500, 600, 700, 800, 900, 1000, 2000, 3000, 4000, 5000, 10000,\n      ],\n      badgleLabelStreakRewards: [\n        2, 3, 5, 7, 10, 12, 14, 16, 21, 28, 60, 90, 120, 150, 180, 210, 240,\n        270, 300, 330, 360, 1000, 10000,\n      ],\n      badgeLabelLevel: 0,\n      badgeLabelSpeciesLevel: 0,\n      badgeLabelStreakLevel: 0,\n      newLabelBadge: false,\n      newLabelSpeciesBadge: false,\n      newLabelStreakBadge: false,\n      notifyBirdInfo: false,\n      notifyBirdInfoSnackShown: false,\n      gn_OneSignalUserId: null,\n      gn_OneSignalPlatform: null,\n      gn_OneSignalInfo: \"\",\n      animationInterval: \"\",\n      animationRunning: false,\n      summaryColorMapIndex: 0,\n      summaryHourIndex: 0,\n      summaryHour: 0,\n      summaryHourLabel: \"\",\n      zoomSummary: 3,\n      centerSummary: latLng(39, -94),\n      urlSummary:\n        \"https://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}\",\n      // \"https://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer/tile/{z}/{y}/{x}\",\n      maxZoomSummary: 15,\n      maxZoomHitMap: 7,\n      attributionSummary:\n        \"Tiles &copy; Esri &mdash; Source: US National Park Service\",\n      zoom: 3,\n      center: latLng(39, -94),\n      url: \"https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}\",\n      urlStates:\n        \"https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}\",\n      urlStatesSummary:\n        \"Tiles &copy; Esri &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC\",\n      attribution:\n        \"Tiles &copy; Esri &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC\",\n      urlOcean:\n        \"https://server.arcgisonline.com/ArcGIS/rest/services/Ocean_Basemap/MapServer/tile/{z}/{y}/{x}\",\n      urlOceanAttribution:\n        \"Tiles &copy; Esri &mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri\",\n      currentZoom: 3,\n      currentCenter: latLng(39, -94),\n      mapOptions: {\n        zoomSnap: 0.5,\n      },\n      hitMapOptions: {\n        zoomControl: false,\n      },\n      bounds: latLngBounds([\n        [20, -120],\n        [55, -70],\n      ]),\n      iconConnected: icon({\n        iconUrl: \"./apple-icon-57.png\",\n        iconSize: [32, 37],\n        iconAnchor: [16, 37],\n      }),\n      iconDisconnected: icon({\n        iconUrl: \"./signal_wifi_off-24px.svg\",\n        iconSize: [24, 24],\n        iconAnchor: [16, 37],\n      }),\n      currentHaikuboxRadius: 50,\n      haikuboxMarkerID: 0,\n      formFields: [\n        {\n          type: \"email\",\n          label: \"Email Address\",\n          placeholder: \"Enter your email address\",\n          required: true,\n        },\n        {\n          type: \"password\",\n          label: \"Password\",\n          placeholder: \"Enter password (>7 characters)\",\n          required: true,\n        },\n      ],\n    };\n  },\n  computed: {\n    dropdown_class() {\n      const text = this.t(\"dropdown\");\n      // console.log(text);\n      return text;\n    },\n    navList() {\n      if (this.subscriptionActive == false) {\n        return [\n          {\n            id: \"Last 2 Hours\",\n            text: this.t(\"Last 2 Hours\"),\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Last 12 Hours\",\n            text: this.t(\"Last 12 Hours\"),\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Last 24 Hours\",\n            text: this.t(\"Last 24 Hours\"),\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Resubscribe\",\n            text: this.t(\"ResubscribeInfo\"),\n            icon: \"mdi-meteor\",\n          },\n        ];\n      } else {\n        return [\n          {\n            id: \"Last 2 Hours\",\n            text: this.t(\"Last 2 Hours\"),\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Last 12 Hours\",\n            text: this.t(\"Last 12 Hours\"),\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Last 24 Hours\",\n            text: this.t(\"Last 24 Hours\"),\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Yesterday\",\n            text: this.t(\"Yesterday\"),\n            icon: \"mdi-calendar-clock\",\n          },\n          { id: \"Live\", text: this.t(\"Live\"), icon: \"mdi-meteor\" },\n          { id: \"All\", text: this.t(\"All\"), icon: \"mdi-ballot-outline\" },\n        ];\n      }\n    },\n  },\n  methods: {\n    setLanguage(lang) {\n      // console.log(lang);\n      if (\n        (lang != \"da\") &\n        (lang != \"de\") &\n        (lang != \"en\") &\n        (lang != \"es\") &\n        (lang != \"fi\") &\n        (lang != \"fr\") &\n        (lang != \"it\") &\n        (lang != \"nl\") &\n        (lang != \"no\") &\n        (lang != \"pt\") &\n        (lang != \"sv\")\n      ) {\n        lang = \"en\";\n      }\n      this.loadTranslations(lang).then((translations) => {\n        this.currentTranslations = translations;\n      });\n      localStorage.setItem(\"haikuboxLanguage\", lang);\n      this.selectedLanguage = lang;\n      if (this.currentSerial != \"\") this.clickRefresh(this.currentSerial); // reload page\n    },\n    loadTranslations(lang) {\n      return fetch(`/I18N/${lang}.json`)\n        .then((response) => response.json())\n        .then((translations) => {\n          return translations;\n        });\n    },\n    t(key, cn) {\n      return this.currentTranslations[key] || cn;\n    },\n    navigateTo(url) {\n      if(this.goNativeActive){\n        window.location.href = 'gonative://window/open?url=' + url + '&mode=appbrowser';\n      }\n      else{\n        window.open(url, '_blank');\n      } \n    },\n    changeView() {\n      // console.log(\"changeView\", this.navSelection);\n      this.logClick(this.navSelection.id, \"\", \"\");\n\n      // if subscription not active only show last 2 hours\n      if (this.subscriptionActive == false) {\n        if (this.navSelection.id == \"Resubscribe\") {\n          this.navSelection.id = \"Last 2 Hours\";\n          this.navSelection.text = this.t(this.navSelection.id);\n          this.navSelection.icon = \"mdi-clock-outline\";\n          this.$router.push(\"/settings\");\n        }\n      }\n\n      localStorage.setItem(\"haikuboxView\", this.navSelection.id);\n      localStorage.setItem(\"haikuboxViewIcon\", this.navSelection.icon);\n\n      if (this.navSelection.id == \"Last 2 Hours\") {\n        this.currentView = \"Recent\";\n        this.changeRecentHours(2);\n      }\n      if (this.navSelection.id == \"Last 12 Hours\") {\n        this.currentView = \"Recent\";\n        this.changeRecentHours(12);\n      }\n      if (this.navSelection.id == \"Last 24 Hours\") {\n        this.currentView = \"Recent\";\n        this.changeRecentHours(24);\n      }\n      if (this.navSelection.id == \"All\") {\n        this.getAll(this.currentSerial);\n        this.currentView = \"All\";\n        this.logClick(\"All\", \"\", \"\");\n      }\n      // if switching from calendar date to live, load last 2 hours\n      if ((this.navSelection.id == \"Live\") & (this.recentHours == 0)) {\n        this.changeRecentHours(2);\n      }\n      if (this.navSelection.id == \"Live\") {\n        this.liveHits = []; // clear liveHits so don't see old ones\n        this.subscribe(this.currentSerial);\n        // this.clickRefresh(this.currentSerial);\n        this.currentView = \"Live\";\n        this.logClick(\"Live\", \"\", \"\");\n      }\n      if (this.navSelection.id == \"Yesterday\") {\n        this.currentView = \"Yesterday\";\n        this.logClick(\"Yesterday\", \"\", \"\");\n      }\n    },\n    changeRecentHours(numHours) {\n      this.hitCalendarDatePicked = true; // hide calendar\n      this.logClick(\"changeRecentHours_\" + numHours, \"\", \"\");\n      this.recentHours = numHours;\n      this.hits = [];\n      this.hitsLoading = 0;\n      this.getHits(this.currentSerial);\n    },\n    async checkUserInteractionTableExists() {\n      const userInteractionData = await API.graphql({\n        query: getUserInteraction,\n        variables: { id: this.user },\n      });\n      let userData = userInteractionData.data.getUserInteraction;\n      // console.log(\"check for user\", userData);\n      if (userData == null) {\n        const id = this.user;\n        const totalLabeled = 0;\n        const speciesLabeled = [];\n        const speciesLabeledCode = [];\n        const totalSpeciesLabeled = 0;\n        const labelStreak = 0;\n        const labelStreakRecord = 0;\n        // createdAt\n        const labelCounterData = {\n          id,\n          totalLabeled,\n          speciesLabeled,\n          speciesLabeledCode,\n          totalSpeciesLabeled,\n          labelStreak,\n          labelStreakRecord,\n        };\n\n        await API.graphql({\n          query: createUserInteraction,\n          variables: { input: labelCounterData },\n        });\n        // console.log(\"checkUserInteractionTableExists: Create user.\");\n      }\n    },\n    async loadUserInteractionData() {\n      // getUserInteraction\n      const userInteractionData = await API.graphql({\n        query: getUserInteraction,\n        variables: { id: this.user },\n      });\n      let userData = userInteractionData.data.getUserInteraction;\n\n      // check if more than 1 day since last labeled (note we are not resetting this in the database, just in the display)\n      const nowDate = moment().format(\"YYYY-MM-DD\");\n      let oldDate = moment(userData.dateLastLabeled);\n      let newDate = moment(nowDate);\n      let diffDays = newDate.diff(oldDate, \"days\");\n      if (diffDays > 1) this.labelStreak = 0;\n      else {\n        this.labelStreak = userData.labelStreak;\n      }\n\n      this.totalLabeled = userData.totalLabeled;\n      this.speciesLabeled = userData.speciesLabeled;\n      this.totalSpeciesLabeled = userData.totalSpeciesLabeled;\n      this.labelStreakRecord = userData.labelStreakRecord;\n      this.updateLabelBadgeTargetLevels();\n    },\n    updateLabelBadgeTargetLevels() {\n      // get target level for number of labels\n      var nextLevelIndex = 0;\n      for (let i = this.badgeLabelRewards.length - 1; i >= 0; i--) {\n        if (this.totalLabeled >= this.badgeLabelRewards[i]) {\n          nextLevelIndex = i + 1;\n          break;\n        }\n      }\n      if (nextLevelIndex > this.badgeLabelRewards.length - 1)\n        nextLevelIndex = this.badgeLabelRewards.length - 1;\n      this.targetLabel = this.badgeLabelRewards[nextLevelIndex];\n      this.badgeLabelLevel = nextLevelIndex;\n\n      // get target level for number of species\n      var nextLevelIndexSpecies = 0;\n      for (let i = this.badgeLabelSpeciesRewards.length - 1; i >= 0; i--) {\n        if (this.totalSpeciesLabeled >= this.badgeLabelSpeciesRewards[i]) {\n          nextLevelIndexSpecies = i + 1;\n          break;\n        }\n      }\n      if (nextLevelIndexSpecies > this.badgeLabelSpeciesRewards.length - 1)\n        nextLevelIndexSpecies = this.badgeLabelSpeciesRewards.length - 1;\n      this.targetLabelSpecies =\n        this.badgeLabelSpeciesRewards[nextLevelIndexSpecies];\n      this.badgeLabelSpeciesLevel = nextLevelIndexSpecies;\n\n      // get target level for label streak\n      var nextLevelIndexStreak = 0;\n      for (let i = this.badgleLabelStreakRewards.length - 1; i >= 0; i--) {\n        if (this.labelStreakRecord >= this.badgleLabelStreakRewards[i]) {\n          nextLevelIndexStreak = i + 1;\n          break;\n        }\n      }\n      if (nextLevelIndexStreak > this.badgleLabelStreakRewards.length - 1)\n        nextLevelIndexStreak = this.badgleLabelStreakRewards.length - 1;\n      this.targetLabelStreak =\n        this.badgleLabelStreakRewards[nextLevelIndexStreak];\n      this.badgeLabelStreakLevel = nextLevelIndexStreak;\n\n      this.percentTargetLabeled = (this.totalLabeled / this.targetLabel) * 100;\n      this.percentTargetLabelSpecies =\n        (this.totalSpeciesLabeled / this.targetLabelSpecies) * 100;\n      this.percentTargetLabelStreak =\n        (this.labelStreakRecord / this.targetLabelStreak) * 100;\n\n      // console.log(\"badgeLabelStreakLevel\", this.badgeLabelStreakLevel);\n      // console.log(\"totalLabeled\", this.totalLabeled);\n      // console.log(\"totalSpeciesLabeled\", this.totalSpeciesLabeled);\n      // console.log(\"labelStreakRecord\", this.labelStreakRecord);\n      // console.log(\"targetLabel\", this.targetLabel);\n      // console.log(\"targetLabelSpecies\", this.targetLabelSpecies);\n      // console.log(\"targetLabelStreak\", this.targetLabelStreak);\n      // console.log(\"badgeLabelSpeciesLevel\", this.badgeLabelSpeciesLevel);\n      // console.log(\"percentTargetLabelSpecies\", this.percentTargetLabelSpecies);\n    },\n    async labelHit(index, item) {\n      // console.log(\"labelHit\", index, item);\n      if (!item.classLabel) return;\n      this.logClick(\"label\", item.spCode, item.cn);\n\n      // copy file to label bucket\n      await Storage.copy(\n        { key: item.wav, level: \"public\" },\n        { key: \"label/\" + item.wav, level: \"private\" }\n      );\n\n      if (item.classLabel == this.t(\"No, it's a ...\")) {\n        this.hits[index].showEntryBox = true;\n        this.hits[index].showSubmitBox = true;\n        this.hits[index].id += 1; // increment ID so that component updates\n        // console.log();\n        return;\n      }\n\n      const serial = item.serial;\n      const dt = item.currentWav[\"dt\"];\n      const group = item.group;\n      const cn = item.cn;\n      const sn = item.sn;\n      const spCode = item.spCode;\n      const wav = item.currentWav[\"filename\"];\n      const labeledBy = this.user;\n      const label = item.classLabel;\n      const score = item.currentWav[\"score\"];\n      const lat = item.lat;\n      const lon = item.lon;\n      const labeledData = {\n        serial,\n        dt,\n        group,\n        cn,\n        sn,\n        spCode,\n        wav,\n        labeledBy,\n        label,\n        score,\n        lat,\n        lon,\n      };\n      API.graphql({\n        query: createLabeledData,\n        variables: { input: labeledData },\n      });\n\n      // console.log(labeledData);\n\n      if (\n        (item.classLabel == this.t(\"No\")) |\n        (item.classLabel == this.t(\"Yes\"))\n      ) {\n        this.hits[index].showEntryBox = false;\n        this.hits[index].id += 1; // increment ID so that component updates\n      }\n\n      // getUserInteraction\n      const userInteractionData = await API.graphql({\n        query: getUserInteraction,\n        variables: { id: this.user },\n      });\n      let userData = userInteractionData.data.getUserInteraction;\n      // console.log(\"userInteractionData\", userData);\n\n      const id = this.user;\n      const totalLabeled = userData.totalLabeled + 1;\n\n      // Check if species is a new one for this user\n      if (!userData.speciesLabeledCode.includes(item.spCode)) {\n        userData.speciesLabeled.push(item.cn);\n        userData.speciesLabeledCode.push(item.spCode);\n        userData.totalSpeciesLabeled += 1;\n      }\n\n      const speciesLabeled = userData.speciesLabeled;\n      const speciesLabeledCode = userData.speciesLabeledCode;\n      const totalSpeciesLabeled = userData.totalSpeciesLabeled;\n\n      // Update Label Streak (# days in a row)\n      const nowDate = moment().format(\"YYYY-MM-DD\");\n      if (userData.dateLastLabeled == null) {\n        userData.dateLastLabeled = nowDate;\n        userData.labelStreak = 1;\n      }\n      // new day?\n      let oldDate = moment(userData.dateLastLabeled);\n      let newDate = moment(nowDate);\n      let diffDays = newDate.diff(oldDate, \"days\");\n\n      if (diffDays == 1) {\n        userData.labelStreak += 1; // increment if it has been at least one day but not more than 2\n      } else if (diffDays > 1) {\n        userData.labelStreak = 1; // reset if it has been\n      }\n      const labelStreak = userData.labelStreak;\n\n      // update labelStreakRecord\n      if (userData.labelStreak > userData.labelStreakRecord) {\n        userData.labelStreakRecord = userData.labelStreak;\n      }\n      const labelStreakRecord = userData.labelStreakRecord;\n      const dateLastLabeled = nowDate;\n\n      const labelCounterData = {\n        id,\n        totalLabeled,\n        speciesLabeled,\n        speciesLabeledCode,\n        totalSpeciesLabeled,\n        labelStreak,\n        labelStreakRecord,\n        dateLastLabeled,\n      };\n\n      API.graphql({\n        query: updateUserInteraction,\n        variables: { input: labelCounterData },\n      });\n      // console.log(\"updateUserInteraction\", labelCounterData);\n\n      this.totalLabeled = totalLabeled;\n      this.speciesLabeled = speciesLabeled;\n      this.totalSpeciesLabeled = totalSpeciesLabeled;\n      this.labelStreak = labelStreak;\n      this.labelStreakRecord = labelStreakRecord;\n\n      // check if hit any badge levels\n      if (this.totalLabeled == this.targetLabel) {\n        // new label badge!\n        this.newLabelBadge = true;\n        // (\"new label badge\");\n      }\n      if (this.totalSpeciesLabeled == this.targetLabelSpecies) {\n        // new species badge!\n        this.newLabelSpeciesBadge = true;\n        // console.log(\"new species label badge\");\n      }\n      if (this.labelStreakRecord == this.targetLabelStreak) {\n        // new streak badge!\n        this.newLabelStreakBadge = true;\n        // console.log(\"new label streak badge\");\n      }\n\n      this.updateLabelBadgeTargetLevels();\n    },\n    labelHitCustom(index, item) {\n      // console.log(\"labelHitCustom\");\n      if (!item.classLabel) return;\n      const serial = item.serial;\n      const dt = item.dt;\n      const group = item.group;\n      const cn = item.cn;\n      const sn = item.sn;\n      const spCode = item.spCode;\n      const wav = item.wav;\n      const labeledBy = this.user;\n      const label = item.tellUsMore;\n      const score = item.score;\n      const lat = item.lat;\n      const lon = item.lon;\n      const labeledData = {\n        serial,\n        dt,\n        group,\n        cn,\n        sn,\n        spCode,\n        wav,\n        labeledBy,\n        label,\n        score,\n        lat,\n        lon,\n      };\n      API.graphql({\n        query: createLabeledData,\n        variables: { input: labeledData },\n      });\n      this.hits[index].submitted = true;\n      this.hits[index].showSubmitBox = false;\n      this.hits[index].id += 1; // increment ID so that component updates\n    },\n    async download(item) {\n      // console.log(item);\n      let audioFile = item.currentWav[\"filename\"];\n      this.initAudioContext();\n\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      globalGainNode.gain.value = this.playbackGain;\n      if (audioFile[5] == \"P\") {\n          globalGainNode.gain.value = globalGainNode.gain.value / 20;\n      }\n\n      var audioUrl = await Storage.get(audioFile);\n      const response = await fetch(audioUrl);\n      const arrayBuffer = await response.arrayBuffer();\n      const audioBuffer = await globalAudioContext.decodeAudioData(arrayBuffer);\n      let signal = audioBuffer.getChannelData(0);\n      const max =\n        1.5 * signal.reduce((acc, val) => Math.max(acc, val), -Infinity);\n      const normalizedSignal = signal.map((value) => value / max);\n      // console.log(audioBuffer);\n\n      function saveArrayToWavFile(array, sampleRate, filename) {\n        const numChannels = 1;\n        const bitsPerSample = 16;\n        const byteRate = (sampleRate * numChannels * bitsPerSample) / 8;\n        const blockAlign = (numChannels * bitsPerSample) / 8;\n        const dataSize = (array.length * bitsPerSample) / 8;\n        const fileLength = 44 + dataSize;\n\n        // Create a buffer for the WAV file\n        const buffer = new ArrayBuffer(fileLength);\n        const view = new DataView(buffer);\n\n        // Write the WAV file header\n        writeString(view, 0, \"RIFF\");\n        view.setUint32(4, fileLength - 8, true);\n        writeString(view, 8, \"WAVE\");\n        writeString(view, 12, \"fmt \");\n        view.setUint32(16, 16, true);\n        view.setUint16(20, 1, true);\n        view.setUint16(22, numChannels, true);\n        view.setUint32(24, sampleRate, true);\n        view.setUint32(28, byteRate, true);\n        view.setUint16(32, blockAlign, true);\n        view.setUint16(34, bitsPerSample, true);\n        writeString(view, 36, \"data\");\n        view.setUint32(40, dataSize, true);\n\n        // Write the sample data\n        for (let i = 0; i < array.length; i++) {\n          view.setInt16(44 + i * 2, array[i] * 32767, true);\n        }\n\n        // Convert the buffer to a Blob\n        const blob = new Blob([buffer], { type: \"audio/wav\" });\n\n        // Create a link element and trigger a download\n        const link = document.createElement(\"a\");\n        link.href = URL.createObjectURL(blob);\n        link.download = filename;\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n      }\n\n      function writeString(view, offset, string) {\n        for (let i = 0; i < string.length; i++) {\n          view.setUint8(offset + i, string.charCodeAt(i));\n        }\n      }\n      let filename =\n        this.replaceSpaces(item.cn) +\n        \"_\" +\n        this.replaceSpaces(item.currentWav[\"listname\"]) +\n        \".wav\";\n      saveArrayToWavFile(normalizedSignal, audioBuffer.sampleRate, filename);\n    },\n    replaceSpaces(itemWithSpaces) {\n      const itemWithUnderscores = itemWithSpaces.replace(/ /g, \"_\");\n      const itemWithApostrophe = itemWithUnderscores.replace(/'/g, \"\");\n      const itemWithColon = itemWithApostrophe.replace(/:/g, \"\");\n      const itemWithComma = itemWithColon.replace(/,/g, \"\");\n      // console.log(\"link\", itemWithColon);\n      return itemWithComma;\n    },\n    showBirdCastButton() {\n      // Check dates\n      const currentDate = new Date();\n      const year = currentDate.getFullYear();\n\n      // Define the start and end dates for the first range\n      const startRange1 = new Date(year, 2, 1); // March 1st (month is 0-indexed)\n      const endRange1 = new Date(year, 5, 15); // June 15th (month is 0-indexed)\n\n      // Define the start and end dates for the second range\n      const startRange2 = new Date(year, 7, 1); // August 1st (month is 0-indexed)\n      const endRange2 = new Date(year, 10, 9); // November 9th (month is 0-indexed)\n\n      // Check if current date is between start and end dates of either range\n      let showButton =\n        (currentDate >= startRange1 && currentDate <= endRange1) ||\n        (currentDate >= startRange2 && currentDate <= endRange2);\n      if (this.lon > -30) showButton = false;\n      return showButton;\n    },\n    async getBirdcastUrl() {\n      if (this.showBirdCastButton()==false) return;\n      // get county location with fips lookup\n      var fipsCode = \"https://dashboard.birdcast.info\";\n      const url =\n        \"https://geo.fcc.gov/api/census/area?lat=\" +\n        this.lat +\n        \"&lon=\" +\n        this.lon +\n        \"&censusYear=2020&format=json\";\n      // console.log(\"getBirdcastUrl\", url);\n      var countyFips, countyCode, stateCode;\n\n      await fetch(url)\n        .then((data) => {\n          return data.json();\n        })\n        .then((res) => {\n          try {\n            countyFips = res.results[0].county_fips;\n            stateCode = res.results[0].state_code;\n            countyCode = countyFips.slice(2);\n          } catch (err) {\n            // console.log(res);\n          }\n        });\n      // console.log('fipsCode', fipsCode);\n      if ((countyFips != null) & (countyFips != \"\")) {\n        fipsCode =\n          \"https://dashboard.birdcast.info/region/US-\" +\n          stateCode +\n          \"-\" +\n          countyCode;\n      }\n      this.birdCastUrl = fipsCode;\n    },\n    // async loadAndPlay(stationID, commonName) {\n    //   // get wav file\n    //   // query MyQuery($cnDt: ModelhitHitsBySpeciesByDateCompositeKeyConditionInput = {gt: {cn: \"Northern Cardinal\", dt:\"2021-03-20T20:27:03.968487Z\"}}) {\n    //   //     hitsBySpeciesByDate(serial: \"Haikubox_100000009aec770c\", cnDt: $cnDt) {\n    //   //       items {\n    //   //         wav\n    //   //         score\n    //   //       }\n    //   //     }\n    //   //   }\n\n    //   let lastMonthDate = moment.utc().subtract(60, \"days\").format();\n\n    //   // could not figure out how to limit return to wav and score\n    //   const wavFilterArg = {\n    //     serial: stationID,\n    //     cnDt: { gt: { cn: commonName, dt: lastMonthDate } },\n    //     limit: 20,\n    //     filter: { score: { gt: this.confidenceThreshold } },\n    //   };\n    //   const wavFilenames = await API.graphql({\n    //     query: hitsBySpeciesByDate,\n    //     variables: wavFilterArg,\n    //   });\n    //   var retWavs = wavFilenames.data.hitsBySpeciesByDate.items;\n    //   console.log(retWavs);\n    // },\n    initAudioContext() {\n      if (!globalAudioContext) {\n        const isIOS = /iPhone|iPod|iPad/.test(navigator.userAgent);\n        if (isIOS) {\n          globalAudioContext = new AudioContext();\n          // Note: audioContext, allowBackgroundPlayback, forceIOSBehavior\n          unmute(globalAudioContext, false, false);\n        } else {\n          globalAudioContext = new AudioContext();\n        }\n        globalGainNode = globalAudioContext.createGain();\n        globalGainNode.gain.value = this.playbackGain; // Set initial volume level\n        globalGainNode.connect(globalAudioContext.destination);\n\n        if (isIOS && !this.isVisibilityListenerAdded) {\n          document.addEventListener('visibilitychange', () => {\n          if (document.hidden) {\n            if (globalAudioContext.state !== \"suspended\") {\n              globalAudioContext.suspend();\n              console.log(\"AudioContext suspended\");\n            }\n          } else {\n            if (globalAudioContext.state === \"suspended\") {\n              globalAudioContext.resume().then(() => {\n                console.log(\"AudioContext resumed\");\n                \n                globalAudioContext.close().then(() => {\n                  console.log(\"AudioContext closed\");\n                  globalAudioContext = new AudioContext();\n                  globalGainNode = globalAudioContext.createGain();\n                  globalGainNode.gain.value = this.playbackGain; // Set initial volume level\n                  globalGainNode.connect(globalAudioContext.destination); \n                  unmute(globalAudioContext, false, false);\n                }).catch((error) => {\n                  console.error(\"Error closing AudioContext:\", error);\n                });\n              }).catch((error) => {\n                console.error(\"Error resuming AudioContext:\", error);\n              });\n            }\n          }\n        });\n        // Set the flag to true after adding the listener\n        this.isVisibilityListenerAdded = true;\n      }\n      }\n    },\n    async playFile(audioFile, spCode, cn, item, index, resetLabel) {\n      this.logClick(\"playFile\", spCode, cn);\n      // console.log(item);\n      // console.log(\"playFile\", resetLabel);\n      // reset label is true when playing from wav select dropdown\n      if (resetLabel === true) {\n        item.classLabel = null;\n        // get favorite status for this file\n\n        const favoriteHit = await API.graphql({\n          query: getFavoriteHit,\n          variables: {\n            id: audioFile,\n          },\n        });\n\n        if (favoriteHit.data.getFavoriteHit != null) {\n          item.favoriteHit = true;\n        } else {\n          item.favoriteHit = false;\n        }\n        item.wav = audioFile;\n      }\n      // console.log(\"playFile\", audioFile);\n\n      this.initAudioContext();\n\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      globalGainNode.gain.value = this.playbackGain;\n      if (audioFile[5] == \"P\") {\n          globalGainNode.gain.value = globalGainNode.gain.value / 20;\n      }\n      \n      var audioUrl = await Storage.get(audioFile);\n      const response = await fetch(audioUrl);\n      const arrayBuffer = await response.arrayBuffer();\n      const audioBuffer = await globalAudioContext.decodeAudioData(arrayBuffer);\n\n      const sampleSource = globalAudioContext.createBufferSource();\n      sampleSource.buffer = audioBuffer;\n      sampleSource.connect(globalGainNode);\n      \n      if (audioFile[5] == \"P\") {\n        const {fileUnixTime, sampleRate, duration} = extractFileInfo(audioFile);\n        var isoTimeSeconds = Math.floor(Date.parse(this.hits[index].dt) / 1000);\n        var diffSeconds = isoTimeSeconds - fileUnixTime;\n        // Define the start and end times (in seconds)\n        var startTime = diffSeconds; // Start at diffseconds second\n        if (startTime < 0) startTime = 0;\n        if (startTime > (30 - this.clipSeconds)) startTime = 30 - this.clipSeconds;\n        sampleSource.start(0, startTime, this.clipSeconds); //play x seconds\n      }else{\n        sampleSource.start(0);\n      }\n\n      if (this.currentView == \"Recent\") {\n        if (item.window == \"spectrogram\") {\n          this.spectrogram(index, item.currentWav[\"filename\"], \"Recent\");\n          item.classLabel = null;\n        }\n      }\n    },\n    async playFileEnhance(audioFile, spCode, cn, id, index) {\n      this.logClick(\"playFileEnhance\", spCode, cn);\n\n      this.initAudioContext();\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      // playing last file again\n      if (this.lastEnhancedId == id) {\n        // Create an AudioBufferSourceNode\n        const sourceNode = globalAudioContext.createBufferSource();\n        sourceNode.buffer = this.lastEnhancedAudio;\n        // Connect the source node to the AudioContext's destination (speakers)\n        sourceNode.connect(globalAudioContext.destination);\n        // Start playback\n        sourceNode.start();\n        return;\n      }\n\n      async function getFile(filepath) {\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          globalAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        // var context = new AudioContext();\n        const sample = await getFile(filePath);\n        return sample;\n      }\n\n      Storage.get(audioFile).then((result) => {\n        // console.log(\"Storage get\", result);\n        setupSample(result).then((sample) => {\n          \n\n          let origSignal = sample.getChannelData(0);\n          var signal;\n\n          // Define the start and end times (in seconds)\n          if (audioFile[5] == \"P\") {\n            const {fileUnixTime, sampleRate, duration} = extractFileInfo(audioFile);\n            var isoTimeSeconds = Math.floor(Date.parse(this.hits[index].dt) / 1000);\n            var diffSeconds = isoTimeSeconds - fileUnixTime;\n            // Define the start and end times (in seconds)\n            var startTime = diffSeconds; // Start at diffseconds second\n            if (startTime < 0) startTime = 0;\n            if (startTime > (duration - this.clipSeconds)) startTime = duration - this.clipSeconds;\n\n              // Convert time to sample indices\n              sampleRate = sample.sampleRate;\n              var startSample = Math.floor(startTime * sampleRate);\n              var endSample = Math.floor(endTime * sampleRate);\n\n              // check if playback beyond end of clip\n              if(endSample > sample.length) {\n                endSample = sample.length - 1;\n                startSample = endSample - (this.clipSeconds * sampleRate);\n                if (startSample < 0) startSample = 0;\n              }\n              \n              console.log(\"start\", startSample);\n              console.log(\"end\", endSample);\n\n              signal = origSignal.slice(startSample, endSample);\n            }\n            else{\n              signal = origSignal;\n            }\n\n          // Define STFT parameters\n          const fftSize = 512;\n          const overlap = 256;\n          const hopSize = fftSize - overlap;\n          // Compute the STFT\n          const stft = [];\n          var meanMag = new Array(fftSize).fill(0);\n          var stdMag = new Array(fftSize).fill(0);\n          var numStrides = 0;\n          for (let i = 0; i < signal.length - fftSize; i += hopSize) {\n            const frame = signal.slice(i, i + fftSize);\n            // Hanning Window\n            for (var k = 0; k < fftSize; k++) {\n              frame[k] = frame[k] * hann[k];\n            }\n            var phasors = fft(frame);\n            // console.log(phasors);\n            // store running sum of magnitude to calculate mean\n            for (var j = 0; j < phasors.length; j++) {\n              meanMag[j] += Math.sqrt(\n                phasors[j][0] * phasors[j][0] + phasors[j][1] * phasors[j][1]\n              );\n            }\n            numStrides++;\n            stft.push([...phasors]);\n          }\n          // console.log('stft', stft);\n          for (let j = 0; j < fftSize; j++) {\n            meanMag[j] = meanMag[j] / numStrides;\n          }\n          // calculate SD\n          // loop through each time slice\n          for (let i = 0; i < stft.length; i++) {\n            // loop through each frequency\n            for (let j = 0; j < fftSize; j++) {\n              let magnitude =\n                Math.sqrt(\n                  stft[i][j][0] * stft[i][j][0] + stft[i][j][1] * stft[i][j][1]\n                ) - meanMag[j];\n              stdMag[j] += magnitude * magnitude;\n            }\n          }\n          for (j = 0; j < fftSize; j++) {\n            stdMag[j] = Math.sqrt(stdMag[j] / numStrides);\n          }\n          // gate values based on mean + 2*SD\n          async function gateSpectrogram() {\n            for (let i = 0; i < stft.length - 4; i++) {\n              // loop through each frequency\n              for (let j = 0; j < fftSize; j++) {\n                // get average magnitude over 5 time slices\n                let magnitude =\n                  (Math.sqrt(\n                    stft[i][j][0] * stft[i][j][0] +\n                      stft[i][j][1] * stft[i][j][1]\n                  ) +\n                    Math.sqrt(\n                      stft[i + 1][j][0] * stft[i + 1][j][0] +\n                        stft[i + 1][j][1] * stft[i + 1][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 2][j][0] * stft[i + 2][j][0] +\n                        stft[i + 2][j][1] * stft[i + 2][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 3][j][0] * stft[i + 3][j][0] +\n                        stft[i + 3][j][1] * stft[i + 3][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 4][j][0] * stft[i + 4][j][0] +\n                        stft[i + 4][j][1] * stft[i + 4][j][1]\n                    )) /\n                  5;\n                if (magnitude < meanMag[j] + 1.9 * stdMag[j]) {\n                  stft[i][j][0] = stft[i][j][0] * 0.2;\n                  stft[i][j][1] = stft[i][j][1] * 0.2;\n                  // also flip mirror\n                  stft[i][fftSize - 1 - j][0] =\n                    stft[i][fftSize - 1 - j][0] * 0.2;\n                  stft[i][fftSize - 1 - j][1] =\n                    stft[i][fftSize - 1 - j][1] * 0.2;\n                  // console.log(i, j);\n                }\n                if (j < 4) {\n                  stft[i][j][0] = stft[i][j][0] * 0.2;\n                  stft[i][j][1] = stft[i][j][1] * 0.2;\n                  // also flip mirror\n                  stft[i][fftSize - 1 - j][0] =\n                    stft[i][fftSize - 1 - j][0] * 0.2;\n                  stft[i][fftSize - 1 - j][1] =\n                    stft[i][fftSize - 1 - j][1] * 0.2;\n                  // console.log(i, j);\n                }\n              }\n            }\n            return stft;\n          }\n          // Compute the ISTFT\n          async function istft() {\n            let recoveredSignal = new Array(signal.length).fill(0);\n            let recoveredSignalComplex = new Array(fftSize);\n            for (let i = 0; i < stft.length - 4; i++) {\n              // console.log('before ifft', stft[i]);\n              recoveredSignalComplex = ifft(stft[i]);\n              // console.log('recoveredSignalComplex', recoveredSignalComplex);\n              for (let j = 0; j < fftSize; j++) {\n                if (i * overlap + j < signal.length) {\n                  // get real part\n                  recoveredSignal[i * hopSize + j] +=\n                    recoveredSignalComplex[j][0];\n                }\n              }\n            }\n            return recoveredSignal;\n          }\n          gateSpectrogram()\n            .then((res) => {\n              // console.log(res);\n              return istft();\n            })\n            .then((recoveredSignal) => {\n              // console.log('recoveredSignal', recoveredSignal);\n              var maxSignal = 0;\n              for (let i = 0; i < recoveredSignal.length - 1000; i += 1000) {\n                // get stack issues so doing in chunks\n                var tempMax = Math.max(...recoveredSignal.slice(i, i + 1000));\n                if (tempMax > maxSignal) {\n                  maxSignal = tempMax;\n                }\n              }\n              var maxSignal = 0.9 / maxSignal; // scale so can multiply to get max amp of 0.9\n              // console.log('maxValue', maxSignal);\n              // Create an AudioBuffer from the audio data\n              const audioBuffer = globalAudioContext.createBuffer(\n                1,\n                recoveredSignal.length,\n                sample.sampleRate\n              );\n              const channelData = audioBuffer.getChannelData(0);\n              for (let i = 0; i < recoveredSignal.length; i++) {\n                channelData[i] = recoveredSignal[i] * maxSignal;\n              }\n              // Create an AudioBufferSourceNode\n              const sourceNode = globalAudioContext.createBufferSource();\n              sourceNode.buffer = audioBuffer;\n              // Connect the source node to the AudioContext's destination (speakers)\n              sourceNode.connect(globalAudioContext.destination);\n              // Start playback\n              sourceNode.start();\n              this.lastEnhancedId = id;\n              this.lastEnhancedAudio = audioBuffer;\n            });\n        });\n      });\n    },\n    zoomUpdate(zoom) {\n      // console.log('zoomUpdate');\n      this.currentZoom = Math.floor(zoom);\n      this.updateCurrentHaikuboxRadius();\n    },\n    centerUpdate(center) {\n      this.currentCenter = center;\n    },\n    getEventText(item) {\n      let momentText = moment(item.dt).locale(this.selectedLanguage).fromNow();\n      if (momentText == \"in a few seconds\") {\n        momentText = \"just now\";\n      }\n      if (momentText == \"a few seconds ago\") {\n        momentText = \"just now\";\n      }\n      return momentText;\n    },\n    // getScoreText(score) {\n    //   //let scoreText = score;\n    //   let scoreText = \"high\";\n    //   if (score < 0.4) {\n    //     scoreText = \"low\";\n    //   } else {\n    //     if (score < 0.9) scoreText = \"medium\";\n    //   }\n    //   return scoreText;\n    // },\n    clickRefresh(currentSerial) {\n      this.logClick(\"clickRefresh\", \"\", \"\");\n      this.getHits(currentSerial);\n      this.getState(currentSerial); // current state including timezone\n      if (this.isOwner) this.getStatus(currentSerial); // wifi strength\n      // this.getHourlyCount(currentSerial);\n      // this.loadSummary(currentSerial);\n    },\n    async ownerSelectDevice() {\n      // need to get lat lon\n      // console.log('ownerSelectDevice', this.haikuboxSelect);\n      this.currentSerial = this.haikuboxSelect.serial;\n      this.subscriptionActive = this.haikuboxSelect.subscriptionActive;\n\n      // get new bird alert setting\n      const id = this.currentSerial.split(\"_\");\n      const devicesInfo = await API.graphql({\n        query: getDevice,\n        variables: { id: id[1] },\n      });\n      var temp = devicesInfo.data.getDevice;\n      this.newBirdAlert = temp.newBirdAlert;\n\n      this.clickDevice(\n        { serial: this.currentSerial, name: this.haikuboxSelect.name },\n        true,\n        true,\n        this.haikuboxSelect.lat,\n        this.haikuboxSelect.lon\n      );\n      this.bookmarkSelect = {};\n      this.getBirdcastUrl();\n      // try {\n      //   this.getBirdcastUrl();\n      // } catch (error) {\n      //   console.error(error);\n      // }\n    },\n    bookmarkSelectDevice() {\n      // need to get lat lon\n      // console.log(\"bookmarkSelectDevice\", this.bookmarkSelect);\n      this.currentSerial = this.bookmarkSelect.id;\n      this.clickDevice(\n        { serial: this.currentSerial, name: this.bookmarkSelect.name },\n        true,\n        false,\n        this.bookmarkSelect.shareLat,\n        this.bookmarkSelect.shareLon\n      );\n      this.haikuboxSelect = {};\n    },\n    async clickDevice(item, logClick, isOwner, lat, lon) {\n      // console.log(\"clickDevice\", item);\n      // double-checking in case click on their own device from map\n      if (isOwner == false) {\n        for (let i = 0; i < this.devicesByOwner.length; i++) {\n          if (this.devicesByOwner[i].serial.includes(item.serial))\n            isOwner = true;\n          this.isOwner = true;\n        }\n      }\n      this.lat = lat;\n      this.lon = lon;\n      this.hitCalendarDatePicked = true; // this hides calendar if it is open\n      this.hitDatePicker = new Date(\n        Date.now() - new Date().getTimezoneOffset() * 60000\n      )\n        .toISOString()\n        .substr(0, 10); // reset to now\n      if (this.recentHours == 0) this.recentHours = 2; // in case clicked on a device after clicking on Home calendar\n      this.currentSiteName = item.name;\n      if (logClick) this.logClick(\"clickDevice\", \"\", \"\");\n      this.isOwner = isOwner;\n      this.checkUserInteractionTableExists();\n      this.currentSerial = item.serial;\n      this.liveHits = [];\n      this.moreActiveSpeciesList = [];\n      this.hits = []; //clear previously clicked site\n      await this.getState(item.serial);\n      this.getYesterdayCounts(item.serial);\n      this.getHits(item.serial);\n      this.changeView(); // this will set subscription for Live and load All if on All view\n      // this.getPrivacy(item.serial);\n\n      if (this.isOwner) {\n        this.getStatus(item.serial);\n        // console.log('clickDevice is owner', item);\n        // if (item.newBirdAlert === null) item.newBirdAlert = false;\n        // this.newBirdAlert = item.newBirdAlert;\n      }\n      if (this.isOwner == false) {\n        // check if site is bookmarked\n        let bookmarkID = this.currentSerial + \"_\" + this.user;\n        const bmrk = await API.graphql({\n          query: getBookmarkHaikubox,\n          variables: { id: bookmarkID },\n        });\n        let retBookmark = bmrk.data.getBookmarkHaikubox;\n        // console.log(\"clickDevice bookmark\", retBookmark);\n        if (retBookmark != null) this.currentHaikuboxBookmark = true;\n        else {\n          this.currentHaikuboxBookmark = false;\n          this.bookmarkSelect = {}; // clear bookmark select dropdown\n        }\n        this.haikuboxSelect = {}; // clear Haikubox select dropdown\n        this.getBirdcastUrl();\n      }\n      // this.loadSummary(item.serial);\n      this.loadUserInteractionData();\n      // this.getHourlyCount(item.serial);\n\n      this.showMap = false;\n      this.updateBounds();\n    },\n    async getState(serialClicked) {\n      const deviceState = await API.graphql({\n        query: getDeviceState,\n        variables: { id: serialClicked },\n      });\n      var clickedDevice = deviceState.data.getDeviceState;\n      // console.log(\"getState\", clickedDevice);\n      if (clickedDevice.timezone != null) {\n        this.currentTimezone = clickedDevice.timezone;\n      }\n    },\n    async updateBounds() {\n      this.bounds = latLngBounds([\n        [this.lat - 5.0, this.lon - 5.0],\n        [this.lat + 5.0, this.lon + 5.0],\n      ]);\n    },\n    async checkOneSignalConsent() {\n      // console.log('checkOneSignalConsent');\n      const oneSignalConsent = await API.graphql({\n        query: getOneSignalConsent,\n        variables: { id: this.user },\n      });\n      let consentData = oneSignalConsent.data.getOneSignalConsent;\n      // console.log(\"checkOneSignalConsent\", consentData);\n      if (consentData.osConsentGranted == null) {\n        this.osConsentGranted = false;\n      } else {\n        this.osConsentGranted = true;\n      }\n      //console.log('osConsentGranted', this.osConsentGranted);\n\n      if (this.osConsentGranted) {\n        this.grantOneSignalPrivacyConsent(); // this will connect oneSignal if new device and get OneSignal Info\n      }\n    },\n    async grantOneSignalPrivacyConsent() {\n      if (navigator.userAgent.indexOf(\"gonative\") > -1) {\n        await gonative.onesignal.userPrivacyConsent.grant();\n        await gonative.onesignal.register();\n        this.osConsentGranted = true;\n        this.addConsentToOneSignalDb();\n        this.getOneSignal();\n      }\n      this.notifyBirdInfo = false; // hide snackbar\n    },\n    async addConsentToOneSignalDb() {\n      // update database\n      const varArg = {\n        id: this.user,\n        osConsentGranted: true,\n      };\n      await API.graphql({\n        query: createOneSignalConsent,\n        variables: { input: varArg },\n      });\n    },\n    async getOneSignal() {\n      if (navigator.userAgent.indexOf(\"gonative\") > -1) {\n        this.gn_OneSignalInfo =\n          \"goNative active: \" + this.devicesByOwner.length;\n        let oneSignalInfo = await gonative.onesignal.onesignalInfo();\n        this.gn_OneSignalUserId = oneSignalInfo.oneSignalUserId;\n        this.gn_OneSignalPlatform = oneSignalInfo.platform;\n        if (this.gn_OneSignalUserId) {\n          for (let i = 0; i < this.devicesByOwner.length; i++) {\n            const oneSignalData = {\n              id: this.gn_OneSignalUserId + \"_\" + this.devicesByOwner[i].serial,\n              playerID: this.gn_OneSignalUserId,\n              platform: this.gn_OneSignalPlatform,\n              serial: this.devicesByOwner[i].serial,\n            };\n            await API.graphql({\n              query: createOneSignal,\n              variables: { input: oneSignalData },\n            });\n          }\n        }\n      } else this.gn_OneSignalInfo = \"Go Native Not Recoginized\";\n    },\n    async getDevicesByOwner() {\n      this.haikuboxLoaded = 0;\n      var userID = this.user;\n      if (userID == \"\" || userID == undefined) {\n        this.showMap = true;\n        await this.loadBookmarkedHaikuboxes();\n        return;\n      }\n      // console.log(\"getDevicesByOwner\", this.user);\n      const devicesByOwner = await API.graphql({\n        query: haikuboxByOwner,\n        variables: { owner: userID },\n      });\n      this.devicesByOwner = devicesByOwner.data.haikuboxByOwner.items;\n\n      // console.log(\"devicesByOwner\", this.devicesByOwner);\n      if (this.devicesByOwner.length > 0) {\n        this.haikuboxSelect = this.devicesByOwner[0];\n        this.haikuboxSelect.lat = this.devicesByOwner[0].lat;\n        this.haikuboxSelect.lon = this.devicesByOwner[0].lon;\n        // check if subscription still valid\n        this.getSubscriptionState().then((value) => {\n          // console.log('sub ok');\n          this.ownerSelectDevice(); // this calls clickDevice after getting newBirdAlert\n        });\n\n        this.getOneSignal();\n        this.getNotices(); // see if there are any notices to show\n        await this.loadBookmarkedHaikuboxes();\n      } else {\n        // If there are no haikuboxes owned but one or more bookmarked go to first in list\n        // console.log(\n        //   \"getDevicesByOwner check bookmarks\",\n        //   this.bookmarkedDevices\n        // );\n        await this.loadBookmarkedHaikuboxes();\n        if (this.bookmarkedDevices.length > 0) {\n          this.clickDevice(\n            this.bookmarkedDevices[0],\n            0,\n            0,\n            this.bookmarkedDevices[0].shareLat,\n            this.bookmarkedDevices[0].shareLon\n          );\n        } else {\n          // this.showMap = true;\n          if (\n            (this.user == \"60c05843-732f-4d66-a49a-bd39658cdacb\") |\n            (this.user == \"332232a5-51da-4f3e-a260-d83fdd959b12\")\n          ) {\n            var demoHaikubox = {\n              name: \"Younger Lagoon 1\",\n              serial: \"Haikubox_100000003071d681\",\n              lat: 36.956374713079256,\n              lon: -122.06877083821281,\n            };\n            this.carouselItems[0].src =\n              \"https://haikubox-images.s3.amazonaws.com/carousel/YL_marinesteps.jpg\";\n          } else {\n            var demoHaikubox = {\n              name: \"Haikubox Demo\",\n              serial: \"Haikubox_3485188E66CC\",\n              lat: 41.601,\n              lon: -70.608,\n            };\n          }\n\n          this.clickDevice(\n            demoHaikubox,\n            0,\n            false,\n            demoHaikubox.lat,\n            demoHaikubox.lon\n          );\n        }\n      }\n      this.haikuboxLoaded = 1;\n      \n      const userSettings = await API.graphql({\n          query: getUserSettings,\n          variables: { id: this.user },\n        });\n        // no entry yet leave at false\n        if(userSettings.data.getUserSettings==null){\n          this.hidePics = false;\n        }\n        else{\n          this.hidePics = userSettings.data.getUserSettings.hidePics;\n        }\n    },\n    async getSubscriptionState() {\n      // query subscription state\n      this.showRenewAlert = false;\n      for (let i = 0; i < this.devicesByOwner.length; i++) {\n        const subState = await API.graphql({\n          query: getSubscription,\n          variables: { id: this.devicesByOwner[i].serial },\n        });\n        // console.log(subState);\n        this.devicesByOwner[i].prepaidPeriodEndUnix = moment\n          .unix(Number(subState.data.getSubscription.prepaidPeriodEndUnix))\n          .format(\"LL\");\n        let currentUnixTime = Math.floor(Date.now() / 1000); // convert ms to s\n        this.devicesByOwner[i].subscriptionActive = true;\n\n        if (subState.data.getSubscription.stripeCurrentPeriodEndUnix != null) {\n          this.devicesByOwner[i].stripeCurrentPeriodEndUnix = moment\n            .unix(\n              Number(subState.data.getSubscription.stripeCurrentPeriodEndUnix)\n            )\n            .format(\"LL\");\n          // check if stripeCurrentPeriodEndUnix is within 2 weeks (1209600 s) of expiring\n          let stripeUnix = Number(\n            subState.data.getSubscription.stripeCurrentPeriodEndUnix\n          );\n          // if((stripeUnix - currentUnixTime) < 1209600){\n          //   this.showRenewAlert = true;\n          // }\n          if (stripeUnix - currentUnixTime < 0) {\n            this.devicesByOwner[i].subscriptionActive = false;\n          }\n        } else {\n          // Prepaid period\n          if (subState.data.getSubscription.prepaidPeriodEndUnix != null) {\n            // check if prepaid period is within 2 weeks of expiring\n            let stripeUnix = Number(\n              subState.data.getSubscription.prepaidPeriodEndUnix\n            );\n            if (stripeUnix - currentUnixTime < 1209600) {\n              this.showRenewAlert = true;\n            }\n            if (stripeUnix - currentUnixTime < 0) {\n              this.devicesByOwner[i].subscriptionActive = false;\n            }\n          }\n        }\n      }\n      return true;\n    },\n    async loadBookmarkedHaikuboxes() {\n      var nextToken = null;\n      var allDevices = [];\n      do {\n        const bookmarks = await API.graphql({\n          query: bookmarkHaikuboxByOwner,\n          variables: { owner: this.user, nextToken: nextToken },\n        });\n        allDevices = allDevices.concat(\n          bookmarks.data.bookmarkHaikuboxByOwner.items\n        );\n        nextToken = bookmarks.data.bookmarkHaikuboxByOwner.nextToken;\n      } while (nextToken != null);\n      // console.log(\"loadBookmarkedHaikuboxes\", allDevices);\n\n      // are these Haikuboxes in shareMap\n      var bookmarkedHaikuboxes = [];\n      if (allDevices.length > 0) {\n        for (let i = 0; i < allDevices.length; i++) {\n          let id = allDevices[i].serial;\n          const hbox = await API.graphql({\n            query: getShareMap,\n            variables: { id: id },\n          });\n          let retShare = hbox.data.getShareMap;\n          // console.log(\"load bookmark check shareMap\", retShare);\n          if (retShare != null) {\n            retShare.serial = retShare.id;\n            bookmarkedHaikuboxes.push(retShare);\n          }\n        }\n      }\n      this.bookmarkedDevices = bookmarkedHaikuboxes;\n      // console.log(\"bookmarked Haikbuoxes\", this.bookmarkedDevices);\n    },\n    async getDevices() {\n      var nextToken = null;\n      var allDevices = [];\n      var connected = [];\n      do {\n        const deviceStates = await API.graphql({\n          query: listShareMaps,\n          variables: { nextToken: nextToken },\n        });\n        allDevices = allDevices.concat(deviceStates.data.listShareMaps.items);\n        nextToken = deviceStates.data.listShareMaps.nextToken;\n        deviceStates.data.listShareMaps.items.forEach(function (element) {\n          // console.log(\"Element\", element);\n          element.serial = element.id;\n          if ((element.shareLat != null) & element.connected) {\n            connected.push(element);\n          }\n\n        });\n        this.connectedDevices = connected;\n      } while (nextToken != null);\n\n      // console.log(\"Devices\", this.devices);\n\n      // var disconnected = [];\n\n      // this.disconnectedDevices = disconnected;\n      // console.log(\"connected\", connected);\n      // console.log(\"disconnected\", disconnected);\n\n      // this.isFetchingBoxes = false;\n    },\n    async checkConnection(serialClicked) {\n      await this.getStatus(serialClicked);\n      if (this.currentWiFi == 0) {\n        this.checkConnectionFailed = true;\n      } else {\n        this.checkConnectionFailed = false;\n      }\n    },\n    async getStatus(serialClicked) {\n      let yesterdayDate = moment.utc().subtract(1, \"hours\").format();\n      const filterArg = {\n        serial: serialClicked,\n        createdAt: { gt: yesterdayDate },\n      };\n      const boxStatus = await API.graphql({\n        query: statusByDate,\n        variables: filterArg,\n        sortDirection: \"ASC\",\n      });\n      this.haikuboxStatus = boxStatus.data.statusByDate.items;\n      // console.log('getStatus', this.haikuboxStatus);\n      var currentWiFi = 0;\n      this.lastStatusUpdate = \"\";\n      if (this.haikuboxStatus.length > 0) {\n        currentWiFi =\n          this.haikuboxStatus[this.haikuboxStatus.length - 1].signal;\n        this.lastStatusUpdate = moment(\n          this.haikuboxStatus[this.haikuboxStatus.length - 1].updatedAt,\n          \"YYYY-MM-DDThh:mm:ssZ\"\n        ).calendar();\n        this.wifiUpdatedAt = moment(\n          this.haikuboxStatus[this.haikuboxStatus.length - 1].updatedAt\n        )\n          .local()\n          .calendar();\n      }\n\n      this.currentWiFi = currentWiFi;\n\n      // console.log('wifi last updated', this.haikuboxStatus[this.haikuboxStatus.length-1].updatedAt);\n    },\n    // fusioncharts format hourly data\n    async getHourlySpecies(cn) {\n      let hourlyTimeSeries = Array(24).fill(0);\n      var nextToken = null;\n      this.lastUpdated = moment\n        .utc()\n        .local()\n        .locale(this.selectedLanguage)\n        .calendar();\n      let yesterdayDate, todayDate;\n      var tempHits = [];\n\n      todayDate = moment.utc().format();\n\n      yesterdayDate = moment.utc().subtract(23, \"hours\").format();\n      // console.log(cn, yesterdayDate, todayDate, this.currentSerial)\n      do {\n        const queryHits = await API.graphql({\n          query: hitsBySpeciesByDate,\n          variables: {\n            serial: this.currentSerial,\n            cnDt: {\n              between: [\n                { cn: cn, dt: yesterdayDate },\n                { cn: cn, dt: todayDate },\n              ],\n            },\n            sortDirection: \"DESC\",\n            nextToken: nextToken,\n          },\n        });\n        tempHits = tempHits.concat(queryHits.data.hitsBySpeciesByDate.items);\n        nextToken = queryHits.data.hitsBySpeciesByDate.nextToken;\n      } while (nextToken != null);\n\n      // console.log(tempHits);\n      // loop through all detections and add to correct hour bin\n      // localHour will correspond to bin index 23\n      tempHits.forEach((hit) => {\n        var currentMinutes = moment.utc().minutes();\n        // convert to local time to get correct hour bin\n        var diffMinutes = moment.utc(hit[\"dt\"]).diff(todayDate, \"minutes\");\n        var diffHours = moment.utc(hit[\"dt\"]).diff(todayDate, \"hours\");\n        if ((diffHours == 0) & (-diffMinutes > currentMinutes)) diffHours = -1; // round current hour\n        // console.log('diff from now', currentMinutes, diffMinutes, diffHours);\n        var i = 23 + diffHours;\n        if (i < 0) i = 0;\n        if (i > 23) i = 23;\n        hourlyTimeSeries[i] = hourlyTimeSeries[i] + hit[\"detectionCount\"];\n      });\n      // console.log(\"UTC\", hourlyTimeSeries);\n\n      function getDates(startDate, stopDate) {\n        var dateArray = [];\n        var currentDate = moment(startDate).utc();\n        stopDate = moment(stopDate).utc();\n        // console.log(\"start date\", startDate);\n        // console.log(\"stop date\", stopDate);\n        while (currentDate <= stopDate) {\n          var a = moment.utc(currentDate);\n          dateArray.push(a.format());\n          currentDate = moment(currentDate).add(1, \"hours\");\n        }\n        return dateArray;\n      }\n\n      let minMomentDate = moment.utc().subtract(23, \"hours\");\n      minMomentDate.minutes(0);\n      minMomentDate.seconds(0);\n      let minDate = minMomentDate.format();\n      let maxDate = minMomentDate.add(23, \"hours\").format();\n      let dateArr = getDates(minDate, maxDate);\n      let localDateArr = [];\n      for (let utcDate of dateArr) {\n        localDateArr.push([\n          moment.utc(utcDate).tz(this.currentTimezone).format(\"hh:mm a\"),\n        ]);\n      }\n\n      this.chartOptionsHourly = {\n        xaxis: {\n          categories: localDateArr,\n        },\n      };\n\n      this.chartOptionsSpeciesHourly = {\n        xaxis: {\n          categories: localDateArr,\n        },\n      };\n\n      // console.log(localDateArr);\n      // console.log(this.chartOptionsHourly);\n      // console.log(this.chartOptionsSpeciesHourly);\n\n      var colorMap = [\n        \"#ffffd9\",\n        \"#edf8b1\",\n        \"#c7e9b4\",\n        \"#7fcdbb\",\n        \"#41b6c4\",\n        \"#1d91c0\",\n        \"#225ea8\",\n        \"#0c2c84\",\n      ];\n\n      // console.log(\"speciesID\", speciesID);\n      var totalDetections = 0;\n      var plotData = [];\n\n      var localHour;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"12:00 am\")\n        localHour = 0;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"01:00 am\")\n        localHour = 1;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"02:00 am\")\n        localHour = 2;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"03:00 am\")\n        localHour = 3;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"04:00 am\")\n        localHour = 4;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"05:00 am\")\n        localHour = 5;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"06:00 am\")\n        localHour = 6;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"07:00 am\")\n        localHour = 7;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"08:00 am\")\n        localHour = 8;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"09:00 am\")\n        localHour = 9;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"10:00 am\")\n        localHour = 10;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"11:00 am\")\n        localHour = 11;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"12:00 pm\")\n        localHour = 12;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"01:00 pm\")\n        localHour = 13;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"02:00 pm\")\n        localHour = 14;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"03:00 pm\")\n        localHour = 15;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"04:00 pm\")\n        localHour = 16;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"05:00 pm\")\n        localHour = 17;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"06:00 pm\")\n        localHour = 18;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"07:00 pm\")\n        localHour = 19;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"08:00 pm\")\n        localHour = 20;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"09:00 pm\")\n        localHour = 21;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"10:00 pm\")\n        localHour = 22;\n      if (this.chartOptionsSpeciesHourly.xaxis.categories[23] == \"11:00 pm\")\n        localHour = 23;\n      var startingAngle = 260 - localHour * (360 / 24);\n      if (startingAngle < 0) startingAngle += 360;\n      // console.log('localHour', localHour);\n      // console.log(\"startingAngle\", startingAngle);\n\n      for (var i = 23; i > -1; i--) {\n        var colorMapIndex = 0;\n        if (hourlyTimeSeries[i] > 0) colorMapIndex = 1;\n        if (hourlyTimeSeries[i] > 1) colorMapIndex = 2;\n        if (hourlyTimeSeries[i] > 2) colorMapIndex = 3;\n        if (hourlyTimeSeries[i] > 5) colorMapIndex = 4;\n        if (hourlyTimeSeries[i] > 10) colorMapIndex = 5;\n        if (hourlyTimeSeries[i] > 15) colorMapIndex = 6;\n        if (hourlyTimeSeries[i] > 20) colorMapIndex = 7;\n        totalDetections += hourlyTimeSeries[i];\n        var dateText = this.chartOptionsSpeciesHourly.xaxis.categories[i];\n        var showLabel = 0;\n        var isSliced = 0;\n        var dateTextDict = {\n          \"12:00 am\": \"midnight\",\n          \"01:00 am\": \"1am\",\n          \"02:00 am\": \"2am\",\n          \"03:00 am\": \"3am\",\n          \"04:00 am\": \"4am\",\n          \"05:00 am\": \"5am\",\n          \"06:00 am\": \"6am\",\n          \"07:00 am\": \"7am\",\n          \"08:00 am\": \"8am\",\n          \"09:00 am\": \"9am\",\n          \"10:00 am\": \"10am\",\n          \"11:00 am\": \"11am\",\n          \"12:00 pm\": \"noon\",\n          \"01:00 pm\": \"1pm\",\n          \"02:00 pm\": \"2pm\",\n          \"03:00 pm\": \"3pm\",\n          \"04:00 pm\": \"4pm\",\n          \"05:00 pm\": \"5pm\",\n          \"06:00 pm\": \"6pm\",\n          \"07:00 pm\": \"7pm\",\n          \"08:00 pm\": \"8pm\",\n          \"09:00 pm\": \"9pm\",\n          \"10:00 pm\": \"10pm\",\n          \"11:00 pm\": \"11pm\",\n        };\n        if (dateText == \"12:00 am\") showLabel = 1;\n        if (dateText == \"12:00 pm\") showLabel = 1;\n        if (dateText == \"06:00 pm\") showLabel = 1;\n        if (dateText == \"06:00 am\") showLabel = 1;\n        if (i == 23) isSliced = 1;\n        plotData.push({\n          label: dateTextDict[dateText],\n          value: 100,\n          color: colorMap[colorMapIndex],\n          showLabel: showLabel,\n          isSliced: isSliced,\n          tooltext:\n            dateTextDict[dateText] + \":\" + hourlyTimeSeries[i].toString(),\n        });\n      }\n      // console.log(\"hourly plotData\", plotData);\n      // console.log(\"totalDetections\", totalDetections);\n\n      var fusionDataset = {\n        chart: {\n          caption: \"Past 24h\",\n          numberPrefix: \"\",\n          bgColor: \"#ffffff\",\n          startingAngle: startingAngle.toString(),\n          showLegend: \"0\",\n          enableSmartLabels: \"1\",\n          showLabels: \"0\",\n          showValues: \"0\",\n          defaultCenterLabel: totalDetections.toString(),\n          centerLabelFontSize: \"18\",\n          centerLabelBold: \"1\",\n          enableMultiSlicing: \"0\",\n          animateClockwise: \"1\",\n          showPercentInToolTip: \"0\",\n        },\n        data: plotData,\n      };\n      // console.log(\"fusionDataset\", fusionDataset);\n      return fusionDataset;\n    },\n\n    async getHeatmap(cn) {\n      let nDays = 14;\n      var nextToken = null;\n      // this.lastUpdated = moment.utc().local().locale(this.selectedLanguage).calendar();\n      let startDate, todayDate, refDate;\n      var tempHits = [];\n\n      refDate = moment.utc();\n      todayDate = moment.utc().format();\n      startDate = moment.utc().subtract(nDays, \"days\").format();\n      // console.log(todayDate);\n      if (this.recentHours == 0) {\n        refDate = moment(this.hitDatePicker).utc();\n        todayDate = moment(this.hitDatePicker).utc().format();\n        startDate = moment(this.hitDatePicker).utc().subtract(nDays, \"days\").format();\n      }      \n      // console.log(startDate, todayDate, this.currentSerial)\n      do {\n        const queryHits = await API.graphql({\n          query: hitsBySpeciesByDate,\n          variables: {\n            serial: this.currentSerial,\n            cnDt: {\n              between: [\n                { cn: cn, dt: startDate },\n                { cn: cn, dt: todayDate },\n              ],\n            },\n            sortDirection: \"DESC\",\n            nextToken: nextToken,\n          },\n        });\n        tempHits = tempHits.concat(queryHits.data.hitsBySpeciesByDate.items);\n        nextToken = queryHits.data.hitsBySpeciesByDate.nextToken;\n      } while (nextToken != null);\n      // console.log(tempHits);\n\n      // data are in rows; each row is a single hour for all days\n      // create empty array with zeros\n      var heatmapData = [];\n\n      for (var i = 0; i < 24; i++) {\n        const zerosArray = Array(nDays).fill(0); // this needs to be in the loop to clone the array (otherwise all rows end up with same value)\n        heatmapData.push(zerosArray);\n      }\n      // loop through all detections and add to correct hour and day bin\n      tempHits.forEach((hit) => {\n        // To Do: convert to local time to get correct hour and date bin\n        var hourBin = moment.utc(hit[\"dt\"]).tz(this.currentTimezone).hour();\n        var hitDate = moment.utc(hit[\"dt\"]).tz(this.currentTimezone).diff(refDate.tz(this.currentTimezone).endOf('day'), \"days\");\n        let dayBin = nDays + hitDate - 1;\n\n        // increment heatmap\n        // console.log('hit[\"dt\"], day hourBin dayBin heatmap cell',hit[\"dt\"], hitDate, hourBin, dayBin);\n        heatmapData[hourBin][dayBin] += hit[\"detectionCount\"];\n      });\n\n      const formattedDates = [];\n      // Loop through the dates and format them as \"MMM D\" (e.g., \"Oct 1\", \"Oct 2\", ...)\n      for (let i = nDays - 1; i >= 0; i--) {\n        // Assuming you want 31 days for October\n        let formattedDate = moment\n          .utc()\n          .tz(this.currentTimezone)\n          .subtract(i, \"days\")\n          .format(\"MMM D\");\n\n        if (this.recentHours == 0) {\n          formattedDate = moment(this.hitDatePicker)\n          .utc()\n          .tz(this.currentTimezone)\n          .subtract(i, \"days\")\n          .format(\"MMM D\");\n        }\n        formattedDates.push(formattedDate);\n      }\n      const formattedHours = [];\n      for (let i = 0; i < 24; i++) {\n        formattedHours.push(i + \":\" + \"00\");\n      }\n\n      var heatmap = [\n        {\n          x: formattedDates,\n          y: formattedHours,\n          z: heatmapData,\n          type: \"heatmap\",\n          showscale: true,\n          hoverongaps: false,\n        },\n      ];\n\n      return heatmap;\n    },\n\n    // for charts.js plots\n    async getDailySpeciesChartsJS(commonName) {\n      // query daily table to get time series for year\n      // console.log(\"getDailyCountsBySpecies commonName\", commonName);\n\n      var nextToken = null;\n      var dailyCounts = [];\n      do {\n        const dailyCountSummary = await API.graphql({\n          query: dailyCountSummaryBySerialBySpecies,\n          variables: {\n            serial: this.currentSerial,\n            cn: { eq: commonName },\n            nextToken: nextToken,\n          },\n        });\n        dailyCounts = dailyCounts.concat(\n          dailyCountSummary.data.dailyCountSummaryBySerialBySpecies.items\n        );\n        nextToken =\n          dailyCountSummary.data.dailyCountSummaryBySerialBySpecies.nextToken;\n      } while (nextToken != null);\n      // console.log(\"daily counts\", dailyCounts);\n\n      // Create date array in case dates with no results\n      let maxDate = moment.utc().format();\n      let minDate = moment.utc().subtract(90, \"days\").format();\n      function getDates(startDate, stopDate) {\n        var dateArray = [];\n        var currentDate = moment(startDate);\n        stopDate = moment(stopDate);\n        while (currentDate <= stopDate) {\n          dateArray.push(moment(currentDate).format(\"YYYY-MM-DD\"));\n          currentDate = moment(currentDate).add(1, \"days\");\n        }\n        return dateArray;\n      }\n      let dateArr = getDates(minDate, maxDate);\n      function getShortDates(startDate, stopDate) {\n        var shortDateArray = [];\n        var currentDate = moment(startDate);\n        stopDate = moment(stopDate);\n        while (currentDate <= stopDate) {\n          shortDateArray.push(moment(currentDate).format(\"MM-DD\"));\n          currentDate = moment(currentDate).add(1, \"days\");\n        }\n        return shortDateArray;\n      }\n      let shortDateArr = getShortDates(minDate, maxDate);\n      // console.log('dateArr', dateArr);\n      // console.log('shortDateArr', shortDateArr);\n\n      //\n      // dailyCounts is sparse; add missing dates\n      //\n\n      // dateList will hold array of all dates to plot\n      var dateList = [];\n      for (let item in dailyCounts) {\n        dateList.push(dailyCounts[item][\"countDate\"]);\n      }\n      // console.log('dateList', dateList);\n\n      // create array with zeros\n      let countArray = [];\n      for (let i = 0; i < countArray.length; i++) {\n        countArray.push(0);\n      }\n\n      // loop through all dates with counts and subsitute actual count in countArray\n      for (let i in dateList) {\n        let countIndex = dateArr.indexOf(dateList[i]);\n        countArray[countIndex] = dailyCounts[i].countsPerDay;\n      }\n\n      //console.log(\"countArray\", countArray);\n\n      var dailyCountPlotData = [];\n      for (let item in dateArr) {\n        dailyCountPlotData.push([shortDateArr[item], countArray[item]]);\n      }\n      // console.log(\"dailyCountPlotData\", dailyCountPlotData);\n      return dailyCountPlotData;\n    },\n    // Daily count for fusion charts plot\n    async getDailyCountsBySpecies(commonName) {\n      // query daily table to get time series for year\n      // console.log(\"getDailyCountsBySpecies commonName\", commonName);\n      var nextToken = null;\n      var dailyCounts = [];\n      do {\n        const dailyCountSummary = await API.graphql({\n          query: dailyCountSummaryBySerialBySpecies,\n          variables: {\n            serial: this.currentSerial,\n            cn: { eq: commonName },\n            nextToken: nextToken,\n          },\n        });\n        dailyCounts = dailyCounts.concat(\n          dailyCountSummary.data.dailyCountSummaryBySerialBySpecies.items\n        );\n        nextToken =\n          dailyCountSummary.data.dailyCountSummaryBySerialBySpecies.nextToken;\n      } while (nextToken != null);\n      // console.log(\"daily counts\", dailyCounts);\n\n      var dailyCountPlotData = [];\n\n      for (let item in dailyCounts) {\n        dailyCountPlotData.push([\n          dailyCounts[item][\"countDate\"],\n          dailyCounts[item][\"countsPerDay\"],\n        ]);\n      }\n      const fusionDataStore = new FusionCharts.DataStore();\n      const fusionTable = fusionDataStore.createDataTable(\n        dailyCountPlotData,\n        this.fusionSchemaDaily\n      );\n      return fusionTable;\n    },\n    async getYesterdayCounts(serial) {\n      let yesterdayDate = moment\n        .utc()\n        .local()\n        .subtract(24, \"hours\")\n        .format(\"YYYY-MM-DD\");\n      var nextToken = null;\n      var yesterdayCountsAll = [];\n      do {\n        const returnCount = await API.graphql({\n          query: dailyCountSummaryBySerialByDate,\n          variables: {\n            serial: serial,\n            countDate: { eq: yesterdayDate },\n            nextToken: nextToken,\n          },\n        });\n        yesterdayCountsAll = yesterdayCountsAll.concat(\n          returnCount.data.dailyCountSummaryBySerialByDate.items\n        );\n        nextToken = returnCount.data.dailyCountSummaryBySerialByDate.nextToken;\n      } while (nextToken != null);\n\n      var callsAndSongs = 0;\n      var mostFrequent = \"\";\n      var mostFrequentspCode = \"\";\n      var maxCount = 0;\n      var speciesCount = 0;\n      // console.log(\"getYesterdayCounts\", yesterdayDate, yesterdayCountsAll);\n      var dailySummaryList = [];\n      for (let i = 0; i < yesterdayCountsAll.length; i++) {\n        if (!this.hiddenList.includes(yesterdayCountsAll[i].cn)) {\n          dailySummaryList.push(yesterdayCountsAll[i]);\n          callsAndSongs += yesterdayCountsAll[i].countsPerDay;\n          speciesCount++;\n          if (yesterdayCountsAll[i].countsPerDay > maxCount) {\n            maxCount = yesterdayCountsAll[i].countsPerDay;\n            mostFrequent = yesterdayCountsAll[i].cn;\n            mostFrequentspCode = yesterdayCountsAll[i].spCode;\n          }\n        }\n      }\n      //console.log('dailySummaryList', dailySummaryList);\n      // sort list by abundance\n      dailySummaryList.sort((a, b) =>\n        a.countsPerDay < b.countsPerDay ? 1 : -1\n      );\n      this.dailySummaryList = dailySummaryList;\n      this.dailySummaryDate = moment\n        .utc()\n        .local()\n        .subtract(24, \"hours\")\n        .format(\"dddd, MMMM Do YYYY\");\n\n      this.yesterdayNumSpecies = speciesCount;\n      this.yesterdayCallsAndSongs = callsAndSongs;\n      this.yesterdayMostFrequent = mostFrequent;\n      this.yesterdaySpCode = mostFrequentspCode;\n\n      // get change in activity for birds detected yesterdayl\n      let twoDaysAgo = moment\n        .utc()\n        .local()\n        .subtract(48, \"hours\")\n        .format(\"YYYY-MM-DD\");\n\n      var moreActiveSpeciesList = [];\n      for (let i = 0; i < yesterdayCountsAll.length; i++) {\n        // if had at least 10 detections yesterday, check to see if increasing pattern\n        if (\n          (yesterdayCountsAll[i].countsPerDay > 9) &\n          !this.hiddenList.includes(yesterdayCountsAll[i].cn)\n        ) {\n          let summaryId =\n            this.currentSerial +\n            \"_\" +\n            yesterdayCountsAll[i].spCode +\n            \"_\" +\n            twoDaysAgo;\n          const dailyCountSummary = await API.graphql({\n            query: getDailyCountSummary,\n            variables: { id: summaryId },\n          });\n          const dailyCounts = dailyCountSummary.data.getDailyCountSummary;\n          // console.log(yesterdayCountsAll[i].cn, dailyCounts);\n          if (dailyCounts !== null) {\n            if (dailyCounts[\"countsPerDay\"] < 4) {\n              // console.log(\"more active species\", yesterdayCountsAll[i].cn);\n              moreActiveSpeciesList.push(yesterdayCountsAll[i]);\n            }\n          } else {\n            // console.log(\"more active species\", yesterdayCountsAll[i].cn);\n            moreActiveSpeciesList.push(yesterdayCountsAll[i]);\n          }\n        }\n        this.moreActiveSpeciesList = moreActiveSpeciesList.slice(0, 3);\n      }\n    },\n    hitSelectDate() {\n      // console.log('hitsSelectRange');\n      if (this.hitCalendarDatePicked == false) {\n        this.hitCalendarDatePicked = true; // hide calendar\n      } else {\n        this.hitCalendarDatePicked = false; // show calendar\n        this.recentHours = 0;\n      }\n    },\n    hitDateClick() {\n      // console.log('hitDateClick', this.hitDatePicker);\n      this.logClick(\"calendar\", \"\", \"\");\n      this.hitCalendarDatePicked = true; // hide calendar\n      this.changeRecentHours(0);\n    },\n    setViewSettings(viewSetting) {\n      // console.log(\"setViewSettings\", viewSetting);\n      this.viewSettings = viewSetting;\n      this.logClick(\"setViewSettings_\" + viewSetting, \"\", \"\");\n      if (viewSetting == \"Low\") {\n        this.confidenceThreshold = 0.0;\n        this.specSumThreshold = -1;\n      }\n      if (viewSetting == \"Medium\") {\n        this.confidenceThreshold = 0.4;\n        this.specSumThreshold = 2;\n      }\n      if (viewSetting == \"High\") {\n        this.confidenceThreshold = 0.9;\n        this.specSumThreshold = 6;\n      }\n      localStorage.setItem('haikuboxConfidence', viewSetting);\n      this.clickRefresh(this.currentSerial);\n    },\n    setViewConfidence(viewSetting){\n      // console.log(\"setViewConfidence\", viewSetting);\n      if (viewSetting == \"Low\") {\n        this.confidenceThreshold = 0.0;\n        this.specSumThreshold = -1;\n      }\n      if (viewSetting == \"Medium\") {\n        this.confidenceThreshold = 0.4;\n        this.specSumThreshold = 2;\n      }\n      if (viewSetting == \"High\") {\n        this.confidenceThreshold = 0.9;\n        this.specSumThreshold = 6;\n      }\n    },\n    async getHits(serialClicked) {\n      //console.log(\"getHits\", serialClicked);\n      var nextToken = null;\n      this.lastUpdated = moment\n        .utc()\n        .local()\n        .locale(this.selectedLanguage)\n        .calendar();\n      let yesterdayDate;\n      var tempHits = [];\n      var tempHits2 = [];\n\n      if (this.recentHours > 0) {\n        yesterdayDate = moment\n          .utc()\n          .subtract(this.recentHours, \"hours\")\n          .format();\n        do {\n          const queryHits = await API.graphql({\n            query: hitBySerialByDate,\n            variables: {\n              serial: serialClicked,\n              dt: { gt: yesterdayDate },\n              sortDirection: \"DESC\",\n              nextToken: nextToken,\n            },\n            filter: { wav: { gt: \"\" } },\n          });\n          tempHits = tempHits.concat(queryHits.data.hitBySerialByDate.items);\n          nextToken = queryHits.data.hitBySerialByDate.nextToken;\n          this.hitsLoading = tempHits.length;\n        } while (nextToken != null);\n      }\n      if (this.recentHours == 0) {\n        let startDate = moment(this.hitDatePicker)\n          .tz(this.currentTimezone)\n          .utc()\n          .format(\"YYYY-MM-DDTHH:mm:ss\");\n        let endDate = moment(startDate)\n          .add(24, \"hours\")\n          .format(\"YYYY-MM-DDTHH:mm:ss\");\n        // console.log('query hits ', startDate, endDate)\n        do {\n          const queryHits = await API.graphql({\n            query: hitBySerialByDate,\n            variables: {\n              serial: serialClicked,\n              dt: { between: [startDate, endDate] },\n              sortDirection: \"DESC\",\n              nextToken: nextToken,\n            },\n            filter: { wav: { gt: \"\" } },\n          });\n          tempHits = tempHits.concat(queryHits.data.hitBySerialByDate.items);\n          nextToken = queryHits.data.hitBySerialByDate.nextToken;\n          this.hitsLoading = tempHits.length;\n        } while (nextToken != null);\n      }\n\n      // filter allHits\n      // console.log('tempHits', tempHits);\n\n      for (var i = 0; i < tempHits.length; i++) {\n        if (\n          !this.hiddenList.includes(tempHits[i].cn) &\n          (tempHits[i].wav != \"\")\n        ) {\n          if (\n            tempHits[i].score > this.confidenceThreshold &&\n            tempHits[i].specSum > this.specSumThreshold\n          )\n            tempHits2.push(tempHits[i]);\n        }\n      }\n\n      // console.log('tempHits2', tempHits2);\n      this.allHits = tempHits2;\n\n      // keep track of species in list and put wav files in list\n      var speciesHits = [];\n      var uniqueHits = [];\n      var speciesDict = {};\n      var counter = 0;\n\n      for (i = 0; i < tempHits2.length; i++) {\n        // var splitWav = tempHits2[i][\"wav\"].split(\"_\");\n        //var wavTimeStamp = splitWav[3].slice(0, -5);\n        var wavTimeStamp = tempHits2[i].dt;\n        // console.log(wavTimeStamp, this.currentTimezone)\n        // let wavTimeMoment = moment(wavTimeStamp).fromNow();\n        var wavTimeMoment = moment\n          .utc(wavTimeStamp)\n          .tz(this.currentTimezone)\n          .locale(this.selectedLanguage)\n          .format('ll LTS');\n\n        // console.log(splitWav, wavTimeStamp);\n        // console.log(wavTimeMoment);\n\n        // use for quick check of low scores\n        // var listname = \"L \" + tempHits2[i].score) + ' ' + wavTimeMoment;\n        var listname = \"L \" + wavTimeMoment;\n        if ((tempHits2[i].score > 0.4) & (tempHits2[i].specSum > 2)) {\n          listname = \"M \" + wavTimeMoment;\n        }\n        if (tempHits2[i].score > 0.9 && tempHits2[i].specSum > 6) {\n          listname = \"H \" + wavTimeMoment;\n        }\n\n        if (\n          tempHits2[i].score < 0.4 &&\n          (tempHits2[i].version.slice(-1) == \"D\" | tempHits2[i].version.slice(-2) == \"6\")\n        ) {\n          listname = \"L. \" + wavTimeMoment;\n        }\n\n        if (\n          tempHits2[i].score > 0.4 &&\n          tempHits2[i].specSum > 3 &&\n          (tempHits2[i].version.slice(-1) == \"D\" | tempHits2[i].version.slice(-2) == \"6\")\n        ) {\n          listname = \"M. \" + wavTimeMoment;\n        }\n        if (\n          tempHits2[i].score > 0.9 &&\n          tempHits2[i].specSum > 5 &&\n          (tempHits2[i].version.slice(-1) == \"D\"  | tempHits2[i].version.slice(-2) == \"6\")\n        ) {\n          listname = \"H. \" + wavTimeMoment;\n        }\n\n        if (!speciesHits.includes(tempHits2[i].cn)) {\n          speciesHits.push(tempHits2[i].cn);\n          speciesDict[tempHits2[i].cn] = counter;\n          uniqueHits.push(tempHits2[i]);\n          uniqueHits[counter].wavList = [\n            {\n              filename: tempHits2[i][\"wav\"],\n              listname: listname,\n              dt: tempHits2[i][\"dt\"],\n              score: tempHits2[i][\"score\"],\n              specSum: tempHits2[i][\"specSum\"],\n            },\n          ];\n          uniqueHits[counter].currentWav = {\n            filename: tempHits2[i][\"wav\"],\n            listname: listname,\n            dt: tempHits2[i][\"dt\"],\n            score: tempHits2[i][\"score\"],\n            specSum: tempHits2[i][\"specSum\"],\n          };\n          uniqueHits[counter].playbackIndex = 0;\n          uniqueHits[counter].window = \"image\";\n          uniqueHits[counter].showBird = true;\n          uniqueHits[counter].notifyBird = false;\n          counter = counter + 1;\n        } else {\n          uniqueHits[speciesDict[tempHits2[i].cn]][\"wavList\"].push({\n            filename: tempHits2[i][\"wav\"],\n            listname: listname,\n            dt: tempHits2[i][\"dt\"],\n            score: tempHits2[i][\"score\"],\n            specSum: tempHits2[i][\"specSum\"],\n          });\n        }\n      }\n      // console.log('speciesHits', speciesHits);\n      // console.log('speciesDict', speciesDict);\n      // console.log(\"uniqueHits\", uniqueHits);\n\n      \n\n      // If only 1 wav file for a species and confidence is set to MED or HIGH remove from list\n      if(this.confidenceThreshold >=0.4){\n        for (i = uniqueHits.length - 1; i>=0; i--) {\n          if (uniqueHits[i].wavList.length == 1){\n            // console.log(\"delete single detection\", uniqueHits[i].cn);\n            uniqueHits.splice(i, 1); // remove and shift object\n          }\n        }\n      }\n      else{  \n        // If only 1 wav file for a species and confidence is set to LOW, change confidence to LOW\n        for (i = uniqueHits.length - 1; i>=0; i--) {\n          if (uniqueHits[i].wavList.length == 1){\n            var listname = uniqueHits[i].wavList[0].listname;\n            var listnameL = 'L' + listname.slice(1);\n            uniqueHits[i].wavList[0].listname = listnameL;\n          }\n        }\n      }\n\n      // Check if clips > 3s\n      if(uniqueHits.length>0){\n        // console.log(uniqueHits[0].wav[5]);\n          if(uniqueHits[0].wav[5]=='P') this.maxClipSeconds = 30;\n        else {\n          this.maxClipSeconds = 3;\n          this.clipSeconds = 3;\n        }\n      }\n\n      // query hidden list for this Haikubox\n      // query hideBirds condition for this Haikubox\n      const returnCount = await API.graphql({\n        query: hideBirdBySerial,\n        variables: {\n          serial: this.currentSerial,\n        },\n      });\n      // console.log('hideBirdBySerial', returnCount.data.hideBirdBySerial.items);\n      let hiddenBirdList = returnCount.data.hideBirdBySerial.items;\n      let customHiddenList = [];\n      for (let i = 0; i < hiddenBirdList.length; i++) {\n        customHiddenList.push(hiddenBirdList[i].cn);\n      }\n\n      // query notify birds\n      var nextToken = null;\n      let notifyBirdList = [];\n      do {\n        const notify = await API.graphql({\n          query: notifyBirdBySerial,\n          variables: {\n            serial: this.currentSerial,\n            nextToken: nextToken,\n          },\n        });\n        notifyBirdList = notifyBirdList.concat(\n          notify.data.notifyBirdBySerial.items\n        );\n        nextToken = notify.data.notifyBirdBySerial.nextToken;\n      } while (nextToken != null);\n\n      let customNotifyList = [];\n      // console.log('notifyBirdList', notifyBirdList);\n      for (let i = 0; i < notifyBirdList.length; i++) {\n        customNotifyList.push(notifyBirdList[i].cn);\n      }\n\n      // update hits with notifyBird\n      for (i in uniqueHits) {\n        if (customNotifyList.includes(uniqueHits[i].cn)) {\n          uniqueHits[i].notifyBird = true;\n          // console.log(\"notify index and species\", i, uniqueHits[i]);\n        }\n      }\n\n      // update hits with showBird and\n      for (i = uniqueHits.length - 1; i >= 0; i--) {\n        // console.log(\"unique hits\", i, uniqueHits[i].cn)\n        if (customHiddenList.includes(uniqueHits[i].cn)) {\n          // console.log(\"hide bird\", uniqueHits[i].cn)\n          uniqueHits.splice(i, 1);\n        }\n      }\n\n      // query favorites\n      for (i = uniqueHits.length - 1; i >= 0; i--) {\n        uniqueHits[i].favoriteHit = false;\n        // console.log(uniqueHits[i].currentWav.filename);\n        const favoriteHit = await API.graphql({\n          query: getFavoriteHit,\n          variables: {\n            id: uniqueHits[i].wav,\n          },\n        });\n        if (favoriteHit.data.getFavoriteHit != null) {\n          uniqueHits[i].favoriteHit = true;\n          // console.log('getHits favorite', favoriteHit);\n        }\n      }\n\n      this.hits = uniqueHits; // this.hits is what is looped through to show cards\n      // console.log(\"hits\", this.hits);\n      this.hitsLoading = 0; // hide hits loading counter\n    },\n    async getAll(serial) {\n      this.seriesDaily = [];\n      var startYear = \"2022\";\n      // console.log(\"getAll\", currentYear);\n\n      var nextToken = null;\n      var yearlyCountsAll = [];\n\n      do {\n        const returnCount = await API.graphql({\n          query: yearlyCountSummaryBySerialByYear,\n          variables: {\n            serial: serial,\n            countYear: { ge: startYear },\n            nextToken: nextToken,\n          },\n        });\n        yearlyCountsAll = yearlyCountsAll.concat(\n          returnCount.data.yearlyCountSummaryBySerialByYear.items\n        );\n        nextToken = returnCount.data.yearlyCountSummaryBySerialByYear.nextToken;\n      } while (nextToken != null);\n\n      // console.log(\"yearly counts All\", yearlyCountsAll);\n      // sum and remove duplicates to get total\n      var k = 0;\n      while (k < yearlyCountsAll.length) {\n        for (let i = yearlyCountsAll.length - 1; i > k; i--) {\n          // if found a match add count and remove match\n          if (yearlyCountsAll[k].cn == yearlyCountsAll[i].cn) {\n            yearlyCountsAll[k].countsTotal += yearlyCountsAll[i].countsTotal;\n            yearlyCountsAll.splice(i, 1);\n          }\n        }\n        k++;\n        // console.log(k);\n      }\n\n      // sort by totalCount\n      yearlyCountsAll.sort(function (a, b) {\n        var keyA = a.countsTotal,\n          keyB = b.countsTotal;\n        // Compare the 2 counts\n        if (keyA > keyB) return -1;\n        if (keyA < keyB) return 1;\n        return 0;\n      });\n      // console.log(\"yearly counts All sorted\", yearlyCountsAll);\n\n      // query hideBirds condition for this Haikubox\n      const returnCount = await API.graphql({\n        query: hideBirdBySerial,\n        variables: {\n          serial: this.currentSerial,\n        },\n      });\n      // console.log('hideBirdBySerial', returnCount.data.hideBirdBySerial.items);\n      let hiddenBirdList = returnCount.data.hideBirdBySerial.items;\n      let customHiddenList = [];\n      for (let i = 0; i < hiddenBirdList.length; i++) {\n        customHiddenList.push(hiddenBirdList[i].cn);\n      }\n      // console.log('customHiddenList', customHiddenList);\n\n      // query notify birds\n      var nextToken = null;\n      let notifyBirdList = [];\n      do {\n        const notify = await API.graphql({\n          query: notifyBirdBySerial,\n          variables: {\n            serial: this.currentSerial,\n            nextToken: nextToken,\n          },\n        });\n        notifyBirdList = notifyBirdList.concat(\n          notify.data.notifyBirdBySerial.items\n        );\n        nextToken = notify.data.notifyBirdBySerial.nextToken;\n      } while (nextToken != null);\n\n      let customNotifyList = [];\n      // console.log('notifyBirdList', notifyBirdList);\n      for (let i = 0; i < notifyBirdList.length; i++) {\n        customNotifyList.push(notifyBirdList[i].cn);\n      }\n      // remove hidden birds and set showBird and notifyBird\n      for (let i = yearlyCountsAll.length - 1; i >= 0; i--) {\n        if (this.hiddenList.includes(yearlyCountsAll[i].cn)) {\n          yearlyCountsAll.splice(i, 1);\n        } else {\n          yearlyCountsAll[i].showBird = true;\n          if (customHiddenList.includes(yearlyCountsAll[i].cn))\n            yearlyCountsAll[i].showBird = false;\n          yearlyCountsAll[i].notifyBird = false;\n          if (customNotifyList.includes(yearlyCountsAll[i].cn)) {\n            yearlyCountsAll[i].notifyBird = true;\n          }\n        }\n      }\n      var dailyDataSource = {\n        data: null,\n        legend: {\n          enabled: \"0\",\n        },\n        navigator: {\n          enabled: 0,\n        },\n        extensions: {\n          customRangeSelector: {\n            enabled: \"0\",\n          },\n        },\n        yAxis: [\n          {\n            plot: {\n              value: \"Detections\",\n              type: \"column\",\n            },\n            format: {\n              prefix: \"\",\n            },\n            title: \"Count\",\n          },\n        ],\n      };\n      this.allSpeciesList = [];\n      this.speciesSelected = \"\";\n      this.scrolledToBottom = false;\n      for (let i in yearlyCountsAll) {\n        yearlyCountsAll[i].dataSource = { ...dailyDataSource }; //spread operator to make deep copy\n        this.allSpeciesList.push(\n          this.t(yearlyCountsAll[i].spCode, yearlyCountsAll[i].cn)\n        );\n      }\n      this.seriesDaily = yearlyCountsAll;\n      // console.log('yearlyCountsAll', yearlyCountsAll);\n      // console.log(\"seriesDaily\", this.seriesDaily);\n    },\n    async getMapCountsPerSpecies(commonName) {\n      let yesterdayDate = moment\n        .utc()\n        .local()\n        .subtract(24, \"hours\")\n        .format(\"YYYY-MM-DD\");\n      var tempHits = [];\n      var nextToken = null;\n      do {\n        const queryHits = await API.graphql({\n          query: dailyCountSummaryByDateBySpecies,\n          variables: {\n            cn: { eq: commonName },\n            countDate: yesterdayDate,\n            nextToken: nextToken,\n          },\n        });\n        tempHits = tempHits.concat(\n          queryHits.data.dailyCountSummaryByDateBySpecies.items\n        );\n        nextToken = queryHits.data.dailyCountSummaryByDateBySpecies.nextToken;\n      } while (nextToken != null);\n      // console.log(\"getMapCountsPerSpecies tempHits\", tempHits);\n      var mapHits = [];\n      for (let i = 0; i < tempHits.length; i++) {\n        let mapCount = {\n          lat: tempHits[i].lat,\n          lon: tempHits[i].lon,\n          radius: tempHits[i].countsPerDay * 100,\n        };\n        mapHits.push(mapCount);\n      }\n      return mapHits;\n    },\n    float2int(value) {\n      return value | 0;\n    },\n    async setWindowRecent(index, value, spCode, commonName) {\n      this.logClick(\"setWindowRecent_\" + value, spCode, commonName);\n\n      if (value == \"daily\") {\n        this.hits[index].hourlyCountPlotData = await this.getHourlySpecies(\n          commonName\n        );\n      }\n      if (value == \"monthly\") {\n        this.hits[index].dailyCountPlotData =\n          await this.getDailySpeciesChartsJS(commonName);\n      }\n      if (value == \"heatmap\") {\n        this.hits[index].heatmap = await this.getHeatmap(commonName);\n      }\n      if (value == \"map\") {\n        this.hits[index].map = await this.getMapCountsPerSpecies(commonName);\n      }\n      this.hits[index].window = value;\n      this.$forceUpdate(); \n     // this.hits[index].id += 1; // increment ID so that component updates\n     // console.log('setWindowRecent', this.hits[index]);\n      // console.log(\"setWindowRecent\", commonName, this.hits[index]);\n    },\n    async setWindowAll(index, value, spCode, commonName) {\n      this.logClick(\"setWindowAll_\" + value, spCode, commonName);\n      // console.log(\"setWindowAll\", index, value, commonName);\n      if (this.seriesDaily[index].window == value)\n        this.seriesDaily[index].window = \"none\";\n      // toggle view\n      else {\n        if (value == \"monthly\") {\n          this.seriesDaily[index].dataSource.data =\n            await this.getDailyCountsBySpecies(commonName);\n        }\n        this.seriesDaily[index].window = value;\n      }\n      this.seriesDaily[index].id += 1; // increment ID so that component updates\n      // console.log(\"setWindowAll\", this.seriesDaily[index]);\n    },\n    setWindowNew(index, value) {\n      this.newSpeciesList[index].window = value;\n      this.newSpeciesList[index].id += 1; // increment ID so that component updates\n      // console.log(\"Change Window\", this.hits[index]);\n    },\n    setWindowMissing(index, value) {\n      this.missingSpeciesList[index].window = value;\n      this.missingSpeciesList[index].id += 1; // increment ID so that component updates\n      // console.log(\"Change Window\", this.hits[index]);\n    },\n    async getNotices() {\n      const userNotices = await API.graphql({\n        query: userNoticeByOwnerByViewed,\n        variables: {\n          owner: this.user,\n          noticeViewed: { eq: \"False\" },\n        },\n      });\n      // console.log(userNotices.data.userNoticeByOwnerByViewed.items);\n      var tempNotices = userNotices.data.userNoticeByOwnerByViewed.items;\n      var tempNoticeDescriptions = [];\n      for (var i = 0; i < tempNotices.length; i++) {\n        const nD = await API.graphql({\n          query: getNoticeDescription,\n          variables: {\n            id: tempNotices[i].noticeID,\n          },\n        });\n        // console.log(nD.data.getNoticeDescription);\n        tempNoticeDescriptions.push(nD.data.getNoticeDescription);\n      }\n      this.userNotices = tempNoticeDescriptions;\n    },\n    async acknowledgeNotice(noticeID) {\n      // set notice to True (read)\n      var id = noticeID + \"-\" + this.user;\n      var owner = this.user;\n      var noticeViewed = \"True\";\n      const noticeData = {\n        id,\n        owner,\n        noticeViewed,\n      };\n\n      await API.graphql({\n        query: updateUserNotice,\n        variables: { input: noticeData },\n      });\n\n      this.getNotices(); // this will clear the notice\n    },\n    async getWavFileName(index, spCode, cn, pageType, pipeTo, audioFile) {\n      // hitsBySpecies\n      if (pageType === \"Increasing\") {\n        // To Do:\n        // move increasing into yesterday summary)\n      }\n\n      if ((audioFile != \"\") & (pipeTo === \"spectrogram\"))\n        this.spectrogram(index, audioFile, pageType);\n      if ((audioFile != \"\") & (pipeTo === \"play\"))\n        this.playFile(audioFile, spCode, cn);\n    },\n    spectrogram(index, audioFile, pageType) {\n      // console.log(\"Spectrogram\", index, audioFile, pageType);\n\n      this.initAudioContext();\n\n      async function getFile(audioContext, filepath) {\n        // webkit audio decodeAudioData does not work in Safari\n        // const response = await fetch(filepath);\n        // const arrayBuffer = await response.arrayBuffer();\n        // const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n        // return audioBuffer;\n\n        // standardized-audio-context from npm\n        // const nativeAudioContext = new AudioContext();\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          globalAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        // var context = new AudioContext();\n        const sample = await getFile(globalAudioContext, filePath);\n\n        return sample;\n      }\n\n      function linear2Decibel(value) {\n        var dB = 20 * Math.log10(value);\n        return dB;\n      }\n\n      //var c = document.getElementById(\"myCanvas\");\n      //this.canvas = c.getContext(\"2d\");\n\n      Storage.get(audioFile)\n        .then(\n          (result) => {\n            // console.log(\"Storage get\", result);\n\n            setupSample(result)\n              .then((sample) => {\n                // console.log(\"sample \", sample);\n\n                let origSignal = sample.getChannelData(0);\n                var signal;\n\n                // Define the start and end times (in seconds)\n                if (audioFile[5] == \"P\") {\n                    var {fileUnixTime, sampleRate, duration} = extractFileInfo(audioFile);\n                    var isoTimeSeconds = Math.floor(Date.parse(this.hits[index].dt) / 1000);\n                    var diffSeconds = isoTimeSeconds - fileUnixTime;\n                    // Define the start and end times (in seconds)\n                    \n                    var offsetSeconds = (this.clipSeconds - 3) / 2;\n                    if (offsetSeconds < 0) offsetSeconds = 0;\n                    var startTime = diffSeconds - offsetSeconds; // Start at diffseconds second\n                    if (startTime < 0) startTime = 0;\n                    // console.log(this.clipSeconds, duration);\n                    if (this.clipSeconds == duration) startTime = 0;\n                    var endTime = startTime + this.clipSeconds;   // End at + clipSeconds\n                    \n\n                    // Convert time to sample indices\n                    sampleRate = sample.sampleRate;\n                    var startSample = Math.floor(startTime * sampleRate);\n                    var endSample = Math.floor(endTime * sampleRate);\n\n                    // console.log(this.hits[index].dt, isoTimeSeconds, fileUnixTime, diffSeconds, startTime, endTime, startSample, endSample);\n\n                    // check if playback beyond end of clip\n                    if(endSample > sample.length) {\n                      endSample = sample.length - 1;\n                      startSample = endSample - (this.clipSeconds * sampleRate);\n                      if (startSample < 0) startSample = 0;\n                    }\n                    \n                    // console.log(\"start\", startSample);\n                    // console.log(\"end\", endSample);\n\n                    signal = origSignal.slice(startSample, endSample);\n                  }\n                  else{\n                    signal = origSignal;\n                  }\n\n                // console.log(\"samples\", origSignal.length, this.hits[index].dt, fileUnixTime, diffSeconds);\n\n                let overlap = 0.0;\n                let fftLength = this.fftLength;\n                let halfLength = this.halfLength; // chop off top\n\n                let showLength = halfLength - Math.round(0.2 * halfLength);\n                let zmidVal = -90;\n                // console.log(audioFile)\n                if (audioFile[5] == \"2\") {\n                  showLength = halfLength - Math.round(0.48 * halfLength);\n                  zmidVal = -66;\n                }\n                if (audioFile[5] == \"P\") {\n                  showLength = halfLength - Math.round(0.48 * halfLength);\n                  zmidVal = -34;\n                }\n\n                let offset = Math.floor(fftLength * (1.0 - overlap));\n                // console.log(\"offset\", offset);\n                // let ctx = this.canvas;\n                let fft = new FFT(fftLength, 44100);\n\n                var spectrogramArray = [];\n                for (var x = 0; x < signal.length - fftLength; x += offset) {\n                  var chunk = signal.slice(x, x + fftLength);\n                  for (var i = 0; i < fftLength; i++) {\n                    chunk[i] = chunk[i] * hann[i];\n                  }\n                  fft.forward(chunk);\n                  chunk = fft.spectrum.slice(0, showLength);\n                  // console.log(\"fft\", chunk);\n                  var dBmag = chunk.map(linear2Decibel);\n                  // console.log(\"dB\", dBmag);\n                  spectrogramArray.push(...dBmag);\n                }\n\n                // console.log(\"spectrogramArray\", spectrogramArray);\n                // console.log('showLength', showLength);\n\n                // arrange spectrogram for Plotly\n                var spectrogramData = [];\n                for (i = 0; i < showLength; i++) {\n                  // grab one element every halfLength points\n                  var arr = spectrogramArray.filter(function (value, j) {\n                    return j % showLength == 0;\n                  });\n                  // console.log(arr);\n                  spectrogramData.push(arr);\n                  spectrogramArray.shift(); // remove first element\n                }\n                // console.log(\"spectrogramData\", spectrogramData);\n\n                if (pageType === \"Recent\") {\n                  this.hits[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: zmidVal,\n                    },\n                  ];\n                  // console.log(\"spec\", this.hits[index].spectrogram);\n                  this.setWindowRecent(\n                    index,\n                    \"spectrogram\",\n                    this.hits[index].spCode,\n                    this.hits[index].cn\n                  );\n                }\n                if (pageType === \"All\") {\n                  this.seriesDaily[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: zmidVal,\n                    },\n                  ];\n                  this.setWindowAll(\n                    index,\n                    \"spectrogram\",\n                    this.seriesDaily[index].spCode,\n                    this.seriesDaily[index].cn\n                  );\n                }\n\n                if (pageType === \"New\") {\n                  this.newSpeciesList[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: zmidVal,\n                    },\n                  ];\n                  this.setWindowNew(\n                    index,\n                    \"spectrogram\",\n                    this.newSpeciesList[index].spCode,\n                    this.newSpeciesList[index].cn\n                  );\n                }\n\n                if (pageType === \"Missing\") {\n                  this.missingSpeciesList[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: zmidVal,\n                    },\n                  ];\n                  this.setWindowMissing(\n                    index,\n                    \"spectrogram\",\n                    this.missingSpeciesList[index].spCode,\n                    this.missingSpeciesList[index].cn\n                  );\n                }\n              })\n              .catch((err) => {\n                console.log(err);\n                console.log(\"No audio\", audioFile);\n                // console.log(\"Delete index\", index);\n                this.snackbar = true;\n                return false;\n              });\n          },\n          (reason) => {\n            // rejection\n            console.log(\"Can't play \", reason);\n          }\n        )\n        .catch((err) => {\n          console.log(err);\n        });\n    },\n    wiFiText() {\n      if (this.currentWiFi <= -75) return \"WiFi Weak\";\n      if (this.currentWiFi <= -60) return \"WiFi Good\";\n      if (this.currentWiFi == 0) return \"No data\";\n      return \"WiFi Strong\";\n    },\n    getImageUrl(spCode) {\n      var imageUrl =\n        \"https://haikubox-images.s3.amazonaws.com/\" + spCode + \".jpeg\";\n      // if (\n      //   (spCode == \"amecro\") |\n      //   (spCode == \"amerob\") |\n      //   (spCode == \"bkchhi\") |\n      //   (spCode == \"blujay\") |\n      //   (spCode == \"carchi\") |\n      //   (spCode == \"daijun\") |\n      //   (spCode == \"eastow\") |\n      //   (spCode == \"fiscro\") |\n      //   (spCode == \"houfin\") |\n      //   (spCode == \"houspa\") |\n      //   (spCode == \"moudov\") |\n      //   (spCode == \"norcar\") |\n      //   (spCode == \"pilwoo\") |\n      //   (spCode == \"reshaw\")\n      // ) {\n      //   imageUrl =\n      //     \"https://haikubox-images.s3.amazonaws.com/\" + spCode + \"H.jpg\";\n      // }\n      // console.log(imageUrl);\n      return imageUrl;\n    },\n    updateCurrentHaikuboxRadius() {\n      // console.log('current zoom', this.currentZoom);\n      this.currentHaikuboxRadius = 20000 / this.currentZoom;\n      // var radiusIncrement = 40000;\n      // var markerThreshold = 400000;\n      if (this.currentZoom <= 4) {\n        this.currentHaikuboxRadius = 40000;\n      }\n      if (this.currentZoom == 5) {\n        this.currentHaikuboxRadius = 20000;\n      }\n      // if (this.currentZoom == 6) {\n      //   markerThreshold = 80000;\n      //   radiusIncrement = 8000;\n      // }\n      // if (this.currentZoom == 7) {\n      //   markerThreshold = 40000;\n      //   radiusIncrement = 4000;\n      // }\n      // if (this.currentZoom == 8) {\n      //   markerThreshold = 30000;\n      //   radiusIncrement = 3000;\n      // }\n      // if (this.currentZoom == 9) {\n      //   markerThreshold = 20000;\n      //   radiusIncrement = 2000;\n      // }\n      // if (this.currentZoom == 10) {\n      //   markerThreshold = 10000;\n      //   radiusIncrement = 1000;\n      // }\n      // if (this.currentZoom == 11) {\n      //   markerThreshold = 3000;\n      //   radiusIncrement = 300;\n      // }\n      // if (this.currentZoom == 12) {\n      //   markerThreshold = 1000;\n      //   radiusIncrement = 100;\n      // }\n      // if (this.currentZoom >= 13) {\n      //   markerThreshold = 500;\n      //   radiusIncrement = 50;\n      // }\n      // this.currentHaikuboxRadius += radiusIncrement;\n      // if (this.currentHaikuboxRadius > markerThreshold)\n      //   this.currentHaikuboxRadius = 0;\n      // // console.log(\"updateCurrentHaikuboxRadius\", this.currentZoom);\n      // this.haikuboxMarkerID += 1; // force redraw\n      // console.log(this.currentZoom);\n      // if (this.showMap) setTimeout(this.updateCurrentHaikuboxRadius, 200);\n    },\n    // async loadSummary(serial) {\n    //   var tempSummary = [];\n    //   // var colorMap = ['#ffffcc','#c7e9b4','#7fcdbb','#41b6c4','#2c7fb8','#253494'];\n\n    //   // load past day first so fast to load, then load beyond that\n    //   var startDate = moment.utc().subtract(24, \"hours\").format();\n    //   const queryHitSummary = await API.graphql({\n    //     query: hitSummaryBySerialByDate,\n    //     variables: {\n    //       serial: serial,\n    //       dt: { ge: startDate },\n    //     },\n    //   });\n    //   tempSummary = tempSummary.concat(\n    //     queryHitSummary.data.hitSummaryBySerialByDate.items\n    //   );\n    //   // console.log(\"1 day tempSummary\", tempSummary);\n\n    //   // parse by species and total\n    //   // goal is list of objects\n    //   // [ { Bluejay: [0,0,12,12,43,54,]},\n    //   //   {American Goldfinch: [ 0, 0, 123,34,324,]}]\n\n    //   var species15MinuteCounts = {};\n    //   // empty list\n    //   let n = 24 * 4; // every 15 minutes for 24 hours\n    //   let a = new Array(n);\n    //   for (let i = 0; i < n; ++i) a[i] = 0;\n    //   species15MinuteCounts[\"dt\"] = a;\n\n    //   async function createEmptyLists() {\n    //     // set up keys with empty lists\n    //     for (let item in tempSummary) {\n    //       let speciesCount = JSON.parse(tempSummary[item].name);\n    //       // console.log('speciesCount', speciesCount);\n    //       for (var key in speciesCount) {\n    //         species15MinuteCounts[key] = a.slice();\n    //       }\n    //     }\n    //   }\n\n    //   async function fillList() {\n    //     var tempArray;\n    //     for (let item in tempSummary) {\n    //       tempArray = species15MinuteCounts[\"dt\"].slice();\n    //       tempArray[item] = tempSummary[item].dt;\n    //       species15MinuteCounts[\"dt\"] = tempArray.slice();\n    //       let speciesCount = JSON.parse(tempSummary[item].name);\n    //       for (var key in speciesCount) {\n    //         // console.log(\"item key count\", item, key, speciesCount[key]);\n    //         tempArray = species15MinuteCounts[key].slice();\n    //         tempArray[item] = speciesCount[key];\n    //         species15MinuteCounts[key] = tempArray.slice();\n    //       }\n    //     }\n    //   }\n    //   await createEmptyLists();\n    //   await fillList();\n\n    //   // console.log(\"species15MinuteCounts\", species15MinuteCounts);\n\n    //   var species1HourCounts = {};\n\n    //   for (var key in species15MinuteCounts) {\n    //     // console.log(key, species15MinuteCounts[key]);\n    //     var tempArray4 = [];\n    //     var tempArray = species15MinuteCounts[key].slice();\n    //     for (let i = 0; i < n; i += 4) {\n    //       if (key == \"dt\") {\n    //         tempArray4.push(tempArray[i]);\n    //       } else {\n    //         tempArray4.push(\n    //           tempArray[i] +\n    //             tempArray[i + 1] +\n    //             tempArray[i + 2] +\n    //             tempArray[i + 3]\n    //         );\n    //       }\n    //     }\n    //     species1HourCounts[key] = tempArray4.slice();\n    //   }\n    //   // console.log(\"species1HourCounts\", species1HourCounts);\n    //   this.species1HourCounts = species1HourCounts;\n\n    //   var nextToken = null;\n    //   startDate = moment.utc().subtract(60, \"days\").format();\n    //   tempSummary = [];\n    //   do {\n    //     const queryHitSummary = await API.graphql({\n    //       query: hitSummaryBySerialByDate,\n    //       variables: {\n    //         serial: serial,\n    //         dt: { gt: startDate },\n    //         nextToken: nextToken,\n    //       },\n    //     });\n    //     tempSummary = tempSummary.concat(\n    //       queryHitSummary.data.hitSummaryBySerialByDate.items\n    //     );\n    //     nextToken = queryHitSummary.data.hitSummaryBySerialByDate.nextToken;\n    //   } while (nextToken != null);\n\n    //   // console.log(\"tempSummary\", tempSummary);\n    //   var fifteenMinuteCountPlot = [];\n    //   for (let item in tempSummary) {\n    //     let dateText = moment(tempSummary[item].createdAt)\n    //       .local()\n    //       .format(\"YYYY-MM-DD HH:mm\");\n    //     fifteenMinuteCountPlot.push([dateText, tempSummary[item].count]);\n    //   }\n    //   // console.log(\"fifteenMinuteCount\", fifteenMinuteCountPlot);\n    //   this.fifteenMinuteCountPlot = fifteenMinuteCountPlot;\n\n    //   const fusionDataStore = new FusionCharts.DataStore();\n    //   // After that we are creating a DataTable by passing our data and schema as arguments\n    //   const fusionTable = fusionDataStore.createDataTable(\n    //     fifteenMinuteCountPlot,\n    //     this.fusionSchema\n    //   );\n    //   // After that we simply mutated our timeseries datasource by attaching the above\n    //   // DataTable into its data property.\n    //   this.dataSource.data = fusionTable;\n    // },\n    filterHourlySummary(showHour) {\n      // if (this.animationRunning==false) this.sliderSummaryHourIndex();\n      const filteredSummary = this.hourlySummary.filter(function (el) {\n        // if (el.hour == showHour) console.log('el', el);\n        return el.hour == showHour;\n      });\n      // console.log('filterHourlySummary', showHour, filteredSummary);\n      this.summaryHourLabel = filteredSummary[0].datetime;\n      return filteredSummary;\n    },\n    incrementHour() {\n      var tempSummaryHour = this.summaryHour + 1;\n      if (tempSummaryHour == 24) tempSummaryHour = 0;\n      this.summaryHour = tempSummaryHour;\n    },\n    toggleBasemap() {\n      if (\n        this.urlSummary ==\n        \"https://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}\"\n      )\n        this.urlSummary =\n          \"https://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer/tile/{z}/{y}/{x}\";\n      else\n        this.urlSummary =\n          \"https://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}\";\n    },\n    toggleColormap() {\n      let tempIndex = this.summaryColorMapIndex + 1;\n      if (this.summaryColorMapIndex == 5) tempIndex = 0;\n      this.summaryColorMapIndex = tempIndex;\n    },\n    startAnimation() {\n      if (this.animationRunning) return;\n      this.animationInterval = setInterval(this.incrementHour, 500);\n      this.animationRunning = true;\n    },\n    stopAnimation() {\n      if (this.animationRunning) {\n        clearInterval(this.animationInterval);\n        this.animationRunning = false;\n      }\n    },\n    sliderSummaryHourIndex() {\n      // map slider values from 0 to 23, so that 23 is latest time and 0 is earliest\n      var currentHour = moment.utc().hours() - 1;\n      if (currentHour < 0) currentHour = 23;\n      var maxSliderCorrection = 23 - currentHour;\n      var tempSummaryHour = this.summaryHourIndex - maxSliderCorrection;\n      if (tempSummaryHour < 0) tempSummaryHour = tempSummaryHour + 24;\n      this.summaryHour = tempSummaryHour;\n    },\n    labelText(spCode, commonName) {\n      let cn = this.t(spCode, commonName);\n      // console.log(spCode, cn);\n      return this.t(\"Is\") + \" \" + cn + \" \" + this.t(\"Correct\") + \"?\";\n    },\n    subscribe(serialClicked) {\n      if (subscription) {\n        // console.log(\"unsubscribing\");\n        subscription.unsubscribe();\n      }\n      // console.log(\"subscribe\");\n      subscription = API.graphql({\n        query: onCreateHit,\n        variables: { serial: serialClicked },\n      }).subscribe({\n        next: (eventData) => {\n          // console.log(eventData);\n          let liveHit = eventData.value.data.onCreateHit;\n          if (liveHit.specSum <= this.specSumThreshold) return;\n          if (liveHit.score <= this.confidenceThreshold) return;\n          if (this.hiddenList.includes(liveHit.cn)) return;\n          if (liveHit.cn === \"soundscape\") return;\n          if (this.liveHits.some((item) => item.id === liveHit.id)) return; // remove duplications\n          this.liveHits = [liveHit, ...this.liveHits];\n          this.liveHits = this.liveHits.slice(0, 20); // limit to 20 hits\n          this.lastUpdated = moment\n            .utc()\n            .local()\n            .locale(this.selectedLanguage)\n            .calendar();\n        },\n      });\n    },\n    async logClick(clickTarget, spCode, cn) {\n      const userID = this.user;\n      const serial = this.currentSerial;\n      const pageClickedFrom = this.currentView;\n\n      // createdAt\n      const clickData = {\n        userID,\n        serial,\n        spCode,\n        cn,\n        clickTarget,\n        pageClickedFrom,\n      };\n\n      await API.graphql({\n        query: createClickTable,\n        variables: { input: clickData },\n      });\n    },\n    async shareLink(spCode, commonName, audioFile) {\n      this.logClick(\"shareLink\", \"\", commonName);\n      var audioFileParts = audioFile.split(\"/\").pop();\n      // console.log('shareLink', audioFileParts);\n      this.audioLink =\n        \"https://haikubox.social/\" + audioFileParts.slice(0, -4) + \"html\";\n\n      // this is link for downloading file that is created in haikubox.social\n      this.downloadLink =\n        \"https://haikubox.social/public/tweet/\" +\n        this.audioLink.slice(24, -4) +\n        \"flac\";\n\n      var dest = \"tweet/\" + audioFile.slice(0, -4) + \"txt\";\n      // html web page gets generated when new audio file saved in s3 haikubox.social\n      this.shareCommonName = commonName;\n      this.shareAudioFile = audioFile;\n      await Storage.put(dest, commonName);\n    },\n    async copyLink() {\n      this.logClick(\"copyLink\");\n      this.copyLinkSnackbar = true;\n      await navigator.clipboard.writeText(this.audioLink);\n    },\n    async toggleShowBird(cn, spCode, showBird) {\n      let id = this.currentSerial + \"_\" + spCode;\n      this.logClick(\"hideBird\" + \"_\" + showBird, spCode, cn);\n      let serial = this.currentSerial;\n      const hideBirdData = {\n        id,\n        spCode,\n        cn,\n        serial,\n      };\n      // console.log('toggleShowBird', hideBirdData);\n      if (showBird == true) {\n        await API.graphql({\n          query: deleteHideBird,\n          variables: { input: { id: id } },\n        });\n      }\n      if (showBird == false) {\n        await API.graphql({\n          query: createHideBird,\n          variables: { input: hideBirdData },\n        });\n      }\n    },\n    async toggleNewBirdAlert(newBirdAlert) {\n      // update device table\n      var id = this.currentSerial.split(\"_\");\n      this.logClick(\"toggleNewBirdAlert\" + \"_\" + newBirdAlert, null, null);\n      // console.log('toggleNewBirdAlert', this.currentSerial);\n      await API.graphql({\n        query: updateDevice,\n        variables: { input: { id: id[1], newBirdAlert: newBirdAlert } },\n      });\n      if (newBirdAlert == true) {\n        // console.log(\"notify check notifications on\", deviceInfo);\n        if (this.osConsentGranted === false) {\n          this.notifyBirdInfo = true;\n          // notifyBirdInfoSnackShown will show for each notify clicked if on Pause\n          // this.notifyBirdInfoSnackShown = true;\n        }\n      }\n    },\n    async toggleNotifyBird(cn, spCode, notifyBird) {\n      let id = this.currentSerial + \"_\" + spCode;\n      this.logClick(\"notifyBird\" + \"_\" + notifyBird, spCode, cn);\n      let serial = this.currentSerial;\n      const notifyBirdData = {\n        id,\n        spCode,\n        cn,\n        serial,\n      };\n      // console.log(\"toggleNotifyBird\", notifyBirdData);\n      if (notifyBird == false) {\n        await API.graphql({\n          query: deleteNotifyBird,\n          variables: { input: { id: id } },\n        });\n      }\n      if (notifyBird == true) {\n        await API.graphql({\n          query: createNotifyBird,\n          variables: { input: notifyBirdData },\n        });\n\n        if (this.osConsentGranted === false) {\n          this.notifyBirdInfo = true;\n          // notifyBirdInfoSnackShown will show for each notify clicked if on Pause\n          // this.notifyBirdInfoSnackShown = true;\n        }\n      }\n      // console.log('notifySnackShown', this.notifyBirdInfoSnackShown);\n    },\n    async toggleHaikuboxBookmark() {\n      if (this.currentSerial === \"\") return;\n      this.currentHaikuboxBookmark = !this.currentHaikuboxBookmark;\n      // create or delete bookmark from bookmarkHaikubox\n      let id = this.currentSerial + \"_\" + this.user;\n      this.logClick(\n        \"toggleHaikuboxBookmark\" + \"_\" + this.currentSerial,\n        null,\n        null\n      );\n      let serial = this.currentSerial;\n      let owner = this.user;\n      const bookmarkHaikuboxData = {\n        id,\n        serial,\n        owner,\n      };\n      // console.log(\"toggleHaikuboxBookmark\", bookmarkHaikuboxData);\n      // console.log('toggleNotifyBird', id);\n      if (this.currentHaikuboxBookmark == false) {\n        await API.graphql({\n          query: deleteBookmarkHaikubox,\n          variables: { input: { id: id } },\n        });\n      }\n\n      if (this.currentHaikuboxBookmark == true) {\n        await API.graphql({\n          query: createBookmarkHaikubox,\n          variables: { input: bookmarkHaikuboxData },\n        });\n      }\n      // update list\n      this.loadBookmarkedHaikuboxes();\n      // this.bookmarkHaikuboxKey += 1;\n    },\n    async downloadCSV() {\n      if (this.downloadRaw) {\n        this.logClick(\"downloadRaw\", \"\", \"\");\n        // console.log(this.csvDates.length);\n        // if only pick one day add one to start for end\n        if (this.csvDates.length == 1) {\n          // console.log(\"second date not selected\");\n          let startDate = moment(this.csvDates[0]);\n          this.csvDates[1] = startDate.add(1, \"d\").format(\"YYYY-MM-DD\");\n        }\n\n        var b = moment(this.csvDates[0]);\n        var a = moment(this.csvDates[1]);\n        let diffDays = a.diff(b, \"days\"); // 1\n        // console.log(\"number of days\", diffDays);\n        if (diffDays > 31) return;\n      }\n\n      this.csvDialog = false;\n\n      if (this.downloadSummary) {\n        this.logClick(\"downloadSummary\", \"\", \"\");\n        // Empty array for storing the values\n        let csvRows = \"Species,Count\\n\";\n        // const values = Object.values(this.seriesDaily).join(',');\n        // csvRows.push(values);\n        for (let i in this.seriesDaily) {\n          csvRows +=\n            this.t(this.seriesDaily[i].spCode) +\n            \",\" +\n            this.seriesDaily[i].countsTotal +\n            \"\\n\";\n        }\n\n        // Creating a Blob for having a csv file format\n        // and passing the data with type\n        const blob = new Blob([csvRows], { type: \"text/csv\" });\n\n        // Creating an object for downloading url\n        const url = window.URL.createObjectURL(blob);\n\n        // Creating an anchor(a) tag of HTML\n        const a = document.createElement(\"a\");\n\n        // Passing the blob downloading url\n        a.setAttribute(\"href\", url);\n\n        // Setting the anchor tag attribute for downloading\n        // and passing the download file name\n        a.setAttribute(\"download\", this.currentSiteName + \".csv\");\n\n        // Performing a download with click\n        a.click();\n      }\n\n      if (this.downloadRaw) {\n        // Empty array for storing the values\n        let csvRows =\n          \"Species,Scientific Name,UTC Date,Local Date,Local Time,Score,Count\\n\";\n\n        // Big Query of Hit Table\n        var nextToken = null;\n        // console.log(\"Yesterday\", yesterdayDate)\n        var tempHits = [];\n        // console.log(\"csv range\", this.csvDates);\n        var queryCounter = 0;\n        do {\n          const queryHits = await API.graphql({\n            query: hitBySerialByDate,\n            variables: {\n              serial: this.currentSerial,\n              dt: { between: this.csvDates },\n              sortDirection: \"DESC\",\n              filter: { group: { eq: \"bird\" }, specSum: { gt: 1 } },\n              nextToken: nextToken,\n            },\n          });\n          tempHits = tempHits.concat(queryHits.data.hitBySerialByDate.items);\n          nextToken = queryHits.data.hitBySerialByDate.nextToken;\n          this.hitsLoading = queryCounter;\n          queryCounter++;\n          if (queryCounter > 1000) break;\n        } while (nextToken != null);\n        this.hitsLoading = 0;\n\n        // console.log('csv export tempHits', tempHits);\n        for (let i in tempHits) {\n          let localTimeStr = moment\n            .utc(tempHits[i].dt)\n            .tz(this.currentTimezone)\n            .format(\"HH:mm:ss\");\n          let localDateStr = moment\n            .utc(tempHits[i].dt)\n            .tz(this.currentTimezone)\n            .format(\"DD-MMM-YYYY\");\n          csvRows +=\n            this.t(tempHits[i].spCode) +\n            \",\" +\n            tempHits[i].sn +\n            \",\" +\n            tempHits[i].dt +\n            \",\" +\n            localDateStr +\n            \",\" +\n            localTimeStr +\n            \",\" +\n            tempHits[i].score +\n            \",\" +\n            tempHits[i].detectionCount +\n            \"\\n\";\n        }\n\n        // Creating a Blob for having a csv file format\n        // and passing the data with type\n        const blob = new Blob([csvRows], { type: \"text/csv\" });\n\n        // Creating an object for downloading url\n        const url = window.URL.createObjectURL(blob);\n\n        // Creating an anchor(a) tag of HTML\n        const a = document.createElement(\"a\");\n\n        // Passing the blob downloading url\n        a.setAttribute(\"href\", url);\n\n        // Setting the anchor tag attribute for downloading\n        // and passing the download file name\n        a.setAttribute(\"download\", this.currentSiteName + \"_raw.csv\");\n\n        // Performing a download with click\n        a.click();\n      }\n    },\n    selectSpecies(species) {\n      // console.log('selectSpecies', species);\n      // janky way to make sure scrolling goes to right location\n      if (this.scrolledToBottom == false) {\n        window.scrollTo(0, document.documentElement.scrollHeight, \"instant\"); // scroll to bottom first\n        this.scrolledToBottom = true;\n      }\n      var targetElement = document.getElementById(species);\n      var targetScrollPosition = targetElement.offsetTop + 80;\n      window.scrollTo({\n        top: targetScrollPosition,\n        behavior: \"smooth\", // You can use 'auto' for instant scrolling\n      });\n    },\n    async favoriteHit(item) {\n      // console.log(\"favoriteHit\", item);\n      item.favoriteHit = !item.favoriteHit;\n      item.id = item.id + 1;\n      // console.log(\"favoriteHit\", item.favoriteHit);\n      // if hit already in table, delete it\n      try {\n        const favoriteReturn = await API.graphql({\n          query: getFavoriteHit,\n          variables: {\n            id: item.currentWav[\"filename\"],\n          },\n        });\n        // console.log(item.id, favoriteReturn);\n        const id = item.currentWav[\"filename\"];\n        if (favoriteReturn.data.getFavoriteHit != null) {\n          await API.graphql({\n            query: deleteFavoriteHit,\n            variables: { input: { id: id } },\n          });\n        } else {\n          // if not in table, copy flac to wav using lambda copyWav\n          // Copies 'existing/srcKey' to 'copied/destKey' from 'public' to 'private'\n          await Storage.copy(\n            { key: item.wav, level: \"public\" },\n            { key: item.wav, level: \"private\" }\n          );\n          // console.log(\"copied\", copied);\n\n          const id = item.currentWav[\"filename\"];\n          const serial = item.serial;\n          const owner = this.user;\n          const dt = item.currentWav[\"dt\"];\n          const animalGroup = item.group;\n          const cn = item.cn;\n          const sn = item.sn;\n          const spCode = item.spCode;\n          const wav = item.currentWav[\"filename\"];\n          const score = item.currentWav[\"score\"];\n          const specSum = item.currentWav[\"specSum\"];\n\n          const favoriteData = {\n            id,\n            serial,\n            owner,\n            dt,\n            animalGroup,\n            cn,\n            sn,\n            spCode,\n            wav,\n            score,\n            specSum,\n          };\n\n          await API.graphql({\n            query: createFavoriteHit,\n            variables: { input: favoriteData },\n          });\n        }\n      } catch (err) {\n        console.log(\"getFavoriteHit failed\");\n      }\n    },\n    moveUp() {\n      window.scrollTo(0, 0);\n    },\n  },\n};\n</script>\n\n<style>\n@import \"~leaflet.markercluster/dist/MarkerCluster.css\";\n@import \"~leaflet.markercluster/dist/MarkerCluster.Default.css\";\n@import url(\"https://fonts.googleapis.com/css?family=Quicksand\");\n#haikubox {\n  font-family: Quicksand, Avenir, Helvetica, Arial, sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  /* text-align: center; */\n  /* color: #2c3e50; */\n  /* margin-top: 0;\n  box-sizing: border-box;  */\n}\nheader {\n  font-family: Quicksand;\n  /* display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: 15px;\n  background-color: #212121;\n  color: #fff; */\n}\nmain {\n  min-height: 100%;\n  overflow: hidden;\n  /* background-color: #ffe; */\n  justify-content: center;\n  align-items: center;\n}\n.v-menu__content {\n  max-height: 600px !important; /* Set the max-height as needed */\n}\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Haikubox.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Haikubox.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Haikubox.vue?vue&type=template&id=75b0b008\"\nimport script from \"./Haikubox.vue?vue&type=script&lang=js\"\nexport * from \"./Haikubox.vue?vue&type=script&lang=js\"\nimport style0 from \"./Haikubox.vue?vue&type=style&index=0&id=75b0b008&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (this.user!='')?_c('div',{attrs:{\"id\":\"haikumarine\"}},[_c('v-main',[_c('v-card',{staticClass:\"mx-auto\",attrs:{\"max-width\":\"100%\",\"max-height\":\"300\",\"outlined\":\"\"}},[_c('div',[(_vm.showMap && !_vm.isFetchingBoxes)?_c('l-map',{staticStyle:{\"height\":\"300px\",\"width\":\"100%\"},attrs:{\"zoom\":_vm.zoom,\"center\":_vm.center,\"options\":_vm.mapOptions,\"bounds\":_vm.bounds},on:{\"update:center\":_vm.centerUpdate,\"update:zoom\":_vm.zoomUpdate}},[_c('l-tile-layer',{attrs:{\"url\":_vm.url,\"attribution\":_vm.attribution}}),_c('v-marker-cluster',[_vm._l((_vm.connectedDevices),function(item){return _c('l-marker',{key:item.id,attrs:{\"lat-lng\":[item.lat, item.lon]},on:{\"click\":function($event){return _vm.clickDevice(item)}}})}),_vm._l((_vm.disconnectedDevices),function(item){return _c('l-marker',{key:item.id,attrs:{\"lat-lng\":[item.lat, item.lon],\"icon\":_vm.iconDisconnected},on:{\"click\":function($event){return _vm.clickDevice(item)}}})})],2)],1):_vm._e()],1)]),_c('v-card',{staticClass:\"mx-auto\",attrs:{\"max-width\":\"100%\",\"outlined\":\"\",\"color\":\"blue-grey darken-4\"}},[_c('v-app-bar',{attrs:{\"color\":\"blue-grey darken-4\",\"dark\":\"\"}},[_c('v-toolbar-title',[_vm._v(\" Live - \"+_vm._s(_vm.currentSiteName))]),_c('v-spacer')],1),_c('v-container',[_c('v-row',_vm._l((_vm.liveHits),function(item){return _c('v-col',{key:item.id,attrs:{\"cols\":\"11\"}},[_c('v-card',{attrs:{\"color\":\"teal darken-4\",\"dark\":\"\"}},[_c('v-avatar',{staticClass:\"ma-3\",attrs:{\"width\":\"64\",\"height\":\"48\",\"tile\":\"\"}},[_c('img',{attrs:{\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                    item.spCode +\n                    '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})]),_c('v-card-title',[_vm._v(_vm._s(item.cn))]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.getEventText(item)))]),(item.wav)?_c('div',[_c('v-card-actions',[(item.wav)?_c('v-btn',{attrs:{\"color\":\"#7eccba\",\"light\":\"\"},on:{\"click\":function($event){return _vm.play(item.wav)}}},[_vm._v(\"Play\")]):_vm._e(),_c('v-btn',{attrs:{\"text\":\"\",\"href\":\"https://sarasotadolphin.org\",\"target\":\"_blank\"}},[_vm._v(\"Learn More\")])],1)],1):_vm._e()],1)],1)}),1)],1)],1),_c('v-card',{staticClass:\"mx-auto\",attrs:{\"max-width\":\"100%\",\"outlined\":\"\",\"color\":\"blue-grey darken-4\"}},[_c('v-app-bar',{attrs:{\"dark\":\"\",\"color\":\"blue-grey darken-4\"}},[_c('v-toolbar-title',[_vm._v(\"Recent - \"+_vm._s(_vm.currentSiteName))]),_c('v-spacer')],1),_c('v-container',[_c('v-row',_vm._l((_vm.hits),function(item,index){return _c('v-col',{key:item.id},[_c('v-card',{staticClass:\"mx-auto mx-auto\",attrs:{\"color\":\"light-blue darken-4\",\"max-width\":\"350\",\"dark\":\"\"}},[_c('v-card-title',[_vm._v(_vm._s(item.cn))]),_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(item.spCode)+\" \"),(item.window == 'image')?_c('img',{attrs:{\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                    item.spCode +\n                    '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}}):_vm._e(),(item.window == 'daily')?_c('div',[_c('v-card-text',{staticClass:\"ma-3 font-weight-white\"},[_vm._v(\" Past Day \"),_c('v-icon',[_vm._v(\"mdi-music-note\")]),_c('span',{staticClass:\"font-weight-white\",domProps:{\"textContent\":_vm._s(_vm.getHourlySpeciesCount(item.spCode))}})],1),_c('column-chart',{attrs:{\"colors\":['#90A4AE'],\"height\":100,\"library\":{\n                      scales: {\n                        xAxes: [\n                          {\n                            ticks: {\n                              fontColor: '#ffffff',\n                            },\n                          },\n                        ],\n                        yAxes: [\n                          {\n                            ticks: {\n                              fontColor: '#ffffff',\n                            },\n                          },\n                        ],\n                      },\n                    },\"data\":_vm.getHourlySpecies(item.spCode)}})],1):_vm._e(),(item.window == 'monthly')?_c('div',[_c('v-card-text',{staticClass:\"ma-3\"},[_vm._v(\" Past Month \"),_c('v-icon',[_vm._v(\"mdi-music-note\")]),_c('span',{staticClass:\"font-weight-white\",domProps:{\"textContent\":_vm._s(_vm.getDailySpeciesCount(item.spCode))}})],1),_c('div',[_c('column-chart',{attrs:{\"colors\":['#90A4AE'],\"height\":100,\"library\":{\n                        scales: {\n                          xAxes: [\n                            {\n                              ticks: {\n                                fontColor: '#ffffff',\n                              },\n                            },\n                          ],\n                          yAxes: [\n                            {\n                              ticks: {\n                                fontColor: '#ffffff',\n                              },\n                            },\n                          ],\n                        },\n                      },\"data\":_vm.getDailySpecies(item.spCode)}})],1)],1):_vm._e(),(item.window == 'spectrogram')?_c('div',[_c('Plotly',{attrs:{\"data\":item.spectrogram,\"layout\":_vm.plotlyLayout,\"display-mode-bar\":false}})],1):_vm._e()]),_c('v-row',{staticClass:\"mb-1\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',[_c('v-avatar',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Image'),expression:\"'Image'\",modifiers:{\"bottom-start\":true}}],staticClass:\"mx-4\",attrs:{\"size\":\"24\"},on:{\"click\":function($event){return _vm.setWindow(index, 'image')}}},[_c('img',{attrs:{\"width\":_vm.$vuetify.breakpoint.xs ? '100%' : '320',\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                        item.spCode +\n                        '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})]),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Day Chart'),expression:\"'Day Chart'\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindow(index, 'daily')}}},[_c('v-icon',[_vm._v(\"mdi-chart-bar\")])],1),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Month Chart'),expression:\"'Month Chart'\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindow(index, 'monthly')}}},[_c('v-icon',[_vm._v(\"mdi-chart-multiple\")])],1),(item.wav && _vm.selectedDeviceAudioPrivate === false)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Spectrogram'),expression:\"'Spectrogram'\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.spectrogram(index, item.wav, 'Recent')}}},[_c('v-icon',[_vm._v(\"mdi-chart-bubble\")])],1):_vm._e()],1)],1),(item.wav && _vm.selectedDeviceAudioPrivate === false)?_c('div',[_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.play(item.wav)}}},[_c('v-icon',{staticClass:\"mr-1\",attrs:{\"small\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_vm._v(\" \"+_vm._s(_vm.getEventText(item))+\" \")],1),_c('v-btn',{attrs:{\"text\":\"\",\"href\":\"https://sarasotadolphin.org\",\"target\":\"_blank\"}},[_vm._v(\"Learn More\")])],1),_c('v-container',{attrs:{\"id\":\"label_sound\"}},[(item.wav)?_c('v-overflow-btn',{staticClass:\"my-2\",attrs:{\"items\":_vm.dropdown_class,\"background-color\":item.classLabel != null\n                        ? 'light-blue darken-4'\n                        : 'light-blue darken-1',\"label\":\"Label\",\"target\":\"#label_sound\"},on:{\"change\":function($event){return _vm.labelHit(item)}},model:{value:(item.classLabel),callback:function ($$v) {_vm.$set(item, \"classLabel\", $$v)},expression:\"item.classLabel\"}}):_vm._e()],1)],1):_vm._e()],1)],1)}),1)],1)],1),(_vm.soundscapes.length != 0)?_c('v-card',{staticClass:\"mx-2\",attrs:{\"max-width\":\"100%\",\"outlined\":\"\",\"color\":\"blue-grey darken-4\",\"dark\":\"\"}},[_c('v-app-bar',{attrs:{\"dark\":\"\",\"color\":\"ffffd9\"}},[_c('v-toolbar-title',[_vm._v(\"Soundscapes\")])],1),_c('v-row',_vm._l((_vm.soundscapes),function(item,index){return _c('v-col',{key:item.id},[(item.wav && _vm.selectedDeviceAudioPrivate === false)?_c('div',[(item.window == 'spectrogram')?_c('div',[_c('v-card-subtitle',[_c('Plotly',{attrs:{\"data\":item.spectrogram,\"layout\":_vm.plotlyLayout,\"display-mode-bar\":false}})],1)],1):_vm._e(),_c('v-card-actions',[_c('v-btn',{on:{\"click\":function($event){return _vm.play(item.wav)}}},[_c('v-icon',{staticClass:\"mr-1\",attrs:{\"small\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_vm._v(\" \"+_vm._s(_vm.getEventText(item))+\" \")],1),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Spectrogram'),expression:\"'Spectrogram'\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.spectrogram(index, item.wav, 'Soundscape')}}},[_c('v-icon',[_vm._v(\"mdi-chart-bubble\")])],1)],1)],1):_vm._e()])}),1)],1):_vm._e(),(_vm.selectedDeviceAudioPrivate === false)?_c('div',[_c('v-card',{staticClass:\"mx-auto\",attrs:{\"max-width\":\"100%\",\"outlined\":\"\"}},[_c('v-app-bar',{attrs:{\"dark\":\"\",\"color\":\"ffffd9\"}},[_c('v-toolbar-title',[_vm._v(\"Help Improve Haikumarine\")]),_c('v-spacer')],1),_c('v-container',[_c('v-row',_vm._l((_vm.allHits),function(item){return _c('v-col',{key:item.id},[_c('v-card',{staticClass:\"mx-auto mx-auto\",attrs:{\"dark\":\"\",\"color\":\"#385F73\",\"max-width\":\"350\"}},[_c('v-avatar',{staticClass:\"ma-3\",attrs:{\"width\":\"64\",\"height\":\"48\",\"tile\":\"\"}},[_c('img',{attrs:{\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})]),_c('v-card-title',[_vm._v(\" \"+_vm._s(item.cn)+\" \")]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.getEventText(item)))]),_c('v-card-actions',[(item.wav)?_c('v-btn',{attrs:{\"color\":\"#385F73\"},on:{\"click\":function($event){return _vm.play(item.wav)}}},[_vm._v(\"Play\")]):_vm._e(),_c('v-btn',{attrs:{\"text\":\"\",\"href\":\"https://sarasotadolphin.org\",\"target\":\"_blank\"}},[_vm._v(\"Learn More\")])],1),_c('v-container',{attrs:{\"id\":\"label_all_sound\"}},[(item.wav)?_c('v-overflow-btn',{staticClass:\"my-2\",attrs:{\"background-color\":item.classLabel != null ? 'accent' : 'darken',\"items\":_vm.dropdown_class,\"label\":\"Label\",\"target\":\"#label_all_sound\"},on:{\"change\":function($event){return _vm.labelHit(item)}},model:{value:(item.classLabel),callback:function ($$v) {_vm.$set(item, \"classLabel\", $$v)},expression:\"item.classLabel\"}}):_vm._e()],1)],1)],1)}),1)],1)],1)],1):_vm._e(),_c('h3',[_vm._v(_vm._s(_vm.currentSiteName))]),_c('v-card',{staticClass:\"mx-auto pa-10\",attrs:{\"outlined\":\"\"}},[_c('v-app-bar',{attrs:{\"dark\":\"\",\"color\":\"blue\"}},[_c('v-toolbar-title',[_vm._v(_vm._s(_vm.currentSerial))]),_c('v-spacer')],1),_c('v-card-subtitle',[_vm._v(\"Status\")]),_c('div',{staticClass:\"mx-auto pa-12\"},[_c('line-chart',{attrs:{\"colors\":['#fcba03'],\"height\":150,\"min\":30,\"max\":100,\"ytitle\":\"CPU Temp\",\"library\":{\n            scales: {\n              xAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          },\"data\":_vm.cpuTempSeries}}),_c('column-chart',{attrs:{\"colors\":['#fcba03'],\"height\":150,\"min\":0,\"max\":2,\"ytitle\":\"CPU GHz\",\"library\":{\n            scales: {\n              xAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          },\"data\":_vm.cpuFreqSeries}}),_c('column-chart',{attrs:{\"colors\":['#fcba03'],\"height\":150,\"min\":0,\"ytitle\":\"ramdisk\",\"library\":{\n            scales: {\n              xAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          },\"data\":_vm.ramdiskSeries}}),_c('line-chart',{attrs:{\"colors\":['#fcba03'],\"height\":150,\"min\":-100,\"max\":0,\"ytitle\":\"WiFi dBm\",\"library\":{\n            scales: {\n              xAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          },\"data\":_vm.signalSeries}})],1),_c('v-expansion-panels',[_c('v-expansion-panel',[_c('v-expansion-panel-header',[_vm._v(\"Text Warnings\")]),_vm._l((_vm.haikuboxStatus),function(item){return _c('v-expansion-panel-content',{key:item.id},[(item.warning != '')?[_vm._v(\" Date: \"+_vm._s(item.createdAt)+\" \"+_vm._s(item.warning)+\" \")]:_vm._e()],2)})],2)],1)],1)],1)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// The white and black (the black is really a dark grey) ['#FFFFFF,'#333333'] //\n// The colors from color brewer: //\n['#ffffd9','#edf8b1','#c7e9b4','#7fcdbb','#41b6c4','#1d91c0','#225ea8','#253494','#081d58']\n// https://colorbrewer2.org/#type=sequential&scheme=YlGnBu&n=9\n\n<template>\n  <div id=\"haikumarine\"  v-if=\"this.user!=''\">\n    <v-main>\n      <v-card class=\"mx-auto\" max-width=\"100%\" max-height=\"300\" outlined>\n        <div>\n          <l-map\n            v-if=\"showMap && !isFetchingBoxes\"\n            :zoom=\"zoom\"\n            :center=\"center\"\n            :options=\"mapOptions\"\n            :bounds=\"bounds\"\n            style=\"height: 300px; width: 100%\"\n            @update:center=\"centerUpdate\"\n            @update:zoom=\"zoomUpdate\"\n          >\n            <l-tile-layer :url=\"url\" :attribution=\"attribution\" />\n            <v-marker-cluster>\n              <l-marker\n                @click=\"clickDevice(item)\"\n                v-for=\"item in connectedDevices\"\n                :key=\"item.id\"\n                :lat-lng=\"[item.lat, item.lon]\"\n              />\n              <l-marker\n                @click=\"clickDevice(item)\"\n                v-for=\"item in disconnectedDevices\"\n                :key=\"item.id\"\n                :lat-lng=\"[item.lat, item.lon]\"\n                :icon=\"iconDisconnected\"\n              />\n            </v-marker-cluster>\n          </l-map>\n        </div>\n      </v-card>\n\n      <v-card\n        class=\"mx-auto\"\n        max-width=\"100%\"\n        outlined\n        color=\"blue-grey darken-4\"\n      >\n        <v-app-bar color=\"blue-grey darken-4\" dark>\n          <v-toolbar-title> Live - {{ currentSiteName }}</v-toolbar-title>\n          <v-spacer></v-spacer>\n        </v-app-bar>\n        <v-container>\n          <v-row>\n            <v-col v-for=\"item in liveHits\" :key=\"item.id\" cols=\"11\">\n              <v-card color=\"teal darken-4\" dark>\n                <!-- var htmlText = '<a href=\"https://ebird.org/species/' + audioInfo[i].Species + '\" target=\"_blank\">' + 'audioInfo[i].Species' + '</a> '; -->\n                <v-avatar class=\"ma-3\" width=\"64\" height=\"48\" tile>\n                  <img\n                    :src=\"\n                      'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg'\n                    \"\n                    onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                  />\n                </v-avatar>\n                <v-card-title>{{ item.cn }}</v-card-title>\n                <v-card-subtitle>{{ getEventText(item) }}</v-card-subtitle>\n                <div v-if=\"item.wav\">\n                  <v-card-actions>\n                    <v-btn\n                      v-if=\"item.wav\"\n                      @click=\"play(item.wav)\"\n                      color=\"#7eccba\"\n                      light\n                      >Play</v-btn\n                    >\n                    <v-btn\n                      text\n                      href=\"https://sarasotadolphin.org\"\n                      target=\"_blank\"\n                      >Learn More</v-btn\n                    >\n                  </v-card-actions>\n                </div>\n              </v-card>\n            </v-col>\n          </v-row>\n        </v-container>\n      </v-card>\n\n      <v-card\n        class=\"mx-auto\"\n        max-width=\"100%\"\n        outlined\n        color=\"blue-grey darken-4\"\n      >\n        <v-app-bar dark color=\"blue-grey darken-4\">\n          <v-toolbar-title>Recent - {{ currentSiteName }}</v-toolbar-title>\n          <v-spacer></v-spacer>\n        </v-app-bar>\n        <v-container>\n          <v-row>\n            <v-col v-for=\"(item, index) in hits\" :key=\"item.id\">\n              <v-card\n                color=\"light-blue darken-4\"\n                class=\"mx-auto mx-auto\"\n                max-width=\"350\"\n                dark\n              >\n                <v-card-title>{{ item.cn }}</v-card-title>\n\n                <v-card-subtitle>\n                  {{ item.spCode }}\n                  <!-- <v-avatar class=\"ma-3\" size=\"180\" tile> -->\n                  <img\n                    v-if=\"item.window == 'image'\"\n                    :src=\"\n                      'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg'\n                    \"\n                    onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                  />\n                  <!-- </v-avatar> -->\n\n                  <!-- <v-card-text\n                          >confidence: {{ getScoreText(item) }}</v-card-text\n                > -->\n                  <div v-if=\"item.window == 'daily'\">\n                    <v-card-text class=\"ma-3 font-weight-white\">\n                      Past Day\n                      <v-icon>mdi-music-note</v-icon>\n                      <span\n                        class=\"font-weight-white\"\n                        v-text=\"getHourlySpeciesCount(item.spCode)\"\n                      ></span>\n                    </v-card-text>\n                    <column-chart\n                      :colors=\"['#90A4AE']\"\n                      :height=\"100\"\n                      :library=\"{\n                        scales: {\n                          xAxes: [\n                            {\n                              ticks: {\n                                fontColor: '#ffffff',\n                              },\n                            },\n                          ],\n                          yAxes: [\n                            {\n                              ticks: {\n                                fontColor: '#ffffff',\n                              },\n                            },\n                          ],\n                        },\n                      }\"\n                      :data=\"getHourlySpecies(item.spCode)\"\n                    ></column-chart>\n                  </div>\n\n                  <div v-if=\"item.window == 'monthly'\">\n                    <v-card-text class=\"ma-3\">\n                      Past Month\n                      <v-icon>mdi-music-note</v-icon>\n                      <span\n                        class=\"font-weight-white\"\n                        v-text=\"getDailySpeciesCount(item.spCode)\"\n                      ></span>\n                    </v-card-text>\n                    <div>\n                      <column-chart\n                        :colors=\"['#90A4AE']\"\n                        :height=\"100\"\n                        :library=\"{\n                          scales: {\n                            xAxes: [\n                              {\n                                ticks: {\n                                  fontColor: '#ffffff',\n                                },\n                              },\n                            ],\n                            yAxes: [\n                              {\n                                ticks: {\n                                  fontColor: '#ffffff',\n                                },\n                              },\n                            ],\n                          },\n                        }\"\n                        :data=\"getDailySpecies(item.spCode)\"\n                      ></column-chart>\n                    </div>\n                  </div>\n\n                  <div v-if=\"item.window == 'spectrogram'\">\n                    <Plotly\n                      :data=\"item.spectrogram\"\n                      :layout=\"plotlyLayout\"\n                      :display-mode-bar=\"false\"\n                    ></Plotly>\n                  </div>\n                </v-card-subtitle>\n\n                <v-row class=\"mb-1\" no-gutters>\n                  <v-col>\n                    <v-avatar\n                      class=\"mx-4\"\n                      size=\"24\"\n                      v-tooltip.bottom-start=\"'Image'\"\n                      @click=\"setWindow(index, 'image')\"\n                    >\n                      <img\n                        :width=\"$vuetify.breakpoint.xs ? '100%' : '320'\"\n                        :src=\"\n                          'https://haikubox-images.s3.amazonaws.com/' +\n                          item.spCode +\n                          '.jpeg'\n                        \"\n                        onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                      />\n                    </v-avatar>\n\n                    <v-btn\n                      icon\n                      v-tooltip.bottom-start=\"'Day Chart'\"\n                      @click=\"setWindow(index, 'daily')\"\n                    >\n                      <v-icon>mdi-chart-bar</v-icon>\n                    </v-btn>\n                    <v-btn\n                      icon\n                      v-tooltip.bottom-start=\"'Month Chart'\"\n                      @click=\"setWindow(index, 'monthly')\"\n                    >\n                      <v-icon>mdi-chart-multiple</v-icon>\n                    </v-btn>\n                    <v-btn\n                      icon\n                      v-tooltip.bottom-start=\"'Spectrogram'\"\n                      @click=\"spectrogram(index, item.wav, 'Recent')\"\n                      v-if=\"item.wav && selectedDeviceAudioPrivate === false\"\n                    >\n                      <v-icon>mdi-chart-bubble</v-icon>\n                    </v-btn>\n                  </v-col>\n                </v-row>\n\n                <div v-if=\"item.wav && selectedDeviceAudioPrivate === false\">\n                  <v-card-actions>\n                    <v-btn @click=\"play(item.wav)\" color=\"light-blue darken-1\">\n                      <v-icon class=\"mr-1\" small>mdi-play-circle</v-icon>\n                      {{ getEventText(item) }}\n                    </v-btn>\n                    <v-btn\n                      text\n                      href=\"https://sarasotadolphin.org\"\n                      target=\"_blank\"\n                      >Learn More</v-btn\n                    >\n                  </v-card-actions>\n                  <v-container id=\"label_sound\">\n                    <v-overflow-btn\n                      v-if=\"item.wav\"\n                      @change=\"labelHit(item)\"\n                      class=\"my-2\"\n                      :items=\"dropdown_class\"\n                      :background-color=\"\n                        item.classLabel != null\n                          ? 'light-blue darken-4'\n                          : 'light-blue darken-1'\n                      \"\n                      label=\"Label\"\n                      target=\"#label_sound\"\n                      v-model=\"item.classLabel\"\n                    ></v-overflow-btn>\n                  </v-container>\n                </div>\n              </v-card>\n            </v-col>\n          </v-row>\n        </v-container>\n      </v-card>\n\n      <v-card\n        class=\"mx-2\"\n        max-width=\"100%\"\n        outlined\n        color=\"blue-grey darken-4\"\n        v-if=\"soundscapes.length != 0\"\n        dark\n      >\n        <v-app-bar dark color=\"ffffd9\">\n          <v-toolbar-title>Soundscapes</v-toolbar-title>\n        </v-app-bar>\n        <v-row>\n          <v-col v-for=\"(item, index) in soundscapes\" :key=\"item.id\">\n            <div v-if=\"item.wav && selectedDeviceAudioPrivate === false\">\n              <div v-if=\"item.window == 'spectrogram'\">\n                <v-card-subtitle>\n                <Plotly\n                  :data=\"item.spectrogram\"\n                  :layout=\"plotlyLayout\"\n                  :display-mode-bar=\"false\"\n                ></Plotly>\n                </v-card-subtitle>\n              </div>\n              <v-card-actions>\n                <v-btn @click=\"play(item.wav)\">\n                  <v-icon class=\"mr-1\" small>mdi-play-circle</v-icon>\n                  {{ getEventText(item) }}\n                </v-btn>\n                <v-btn\n                  icon\n                  v-tooltip.bottom-start=\"'Spectrogram'\"\n                  @click=\"spectrogram(index, item.wav, 'Soundscape')\"\n                >\n                  <v-icon>mdi-chart-bubble</v-icon>\n                </v-btn>\n              </v-card-actions>\n            </div>\n          </v-col>\n        </v-row>\n      </v-card>\n\n      <div v-if=\"selectedDeviceAudioPrivate === false\">\n        <v-card class=\"mx-auto\" max-width=\"100%\" outlined>\n          <v-app-bar dark color=\"ffffd9\">\n            <v-toolbar-title>Help Improve Haikumarine</v-toolbar-title>\n            <v-spacer></v-spacer>\n          </v-app-bar>\n          <v-container>\n            <v-row>\n              <v-col v-for=\"item in allHits\" :key=\"item.id\">\n                <v-card\n                  dark\n                  color=\"#385F73\"\n                  class=\"mx-auto mx-auto\"\n                  max-width=\"350\"\n                >\n                  <v-avatar class=\"ma-3\" width=\"64\" height=\"48\" tile>\n                    <img\n                      :src=\"\n                        'https://haikubox-images.s3.amazonaws.com/' +\n                        item.spCode +\n                        '.jpeg'\n                      \"\n                      onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                    />\n                  </v-avatar>\n                  <v-card-title>\n                    {{ item.cn }}\n                  </v-card-title>\n                  <v-card-subtitle>{{ getEventText(item) }}</v-card-subtitle>\n                  <v-card-actions>\n                    <v-btn\n                      v-if=\"item.wav\"\n                      @click=\"play(item.wav)\"\n                      color=\"#385F73\"\n                      >Play</v-btn\n                    >\n                    <v-btn\n                      text\n                      href=\"https://sarasotadolphin.org\"\n                      target=\"_blank\"\n                      >Learn More</v-btn\n                    >\n                  </v-card-actions>\n                  <v-container id=\"label_all_sound\">\n                    <v-overflow-btn\n                      v-if=\"item.wav\"\n                      @change=\"labelHit(item)\"\n                      :background-color=\"\n                        item.classLabel != null ? 'accent' : 'darken'\n                      \"\n                      class=\"my-2\"\n                      :items=\"dropdown_class\"\n                      label=\"Label\"\n                      target=\"#label_all_sound\"\n                      v-model=\"item.classLabel\"\n                    ></v-overflow-btn>\n                  </v-container>\n                </v-card>\n              </v-col>\n            </v-row>\n          </v-container>\n        </v-card>\n      </div>\n\n      <h3>{{ currentSiteName }}</h3>\n      <v-card class=\"mx-auto pa-10\" outlined>\n        <v-app-bar dark color=\"blue\">\n          <v-toolbar-title>{{ currentSerial }}</v-toolbar-title>\n          <v-spacer></v-spacer>\n        </v-app-bar>\n        <v-card-subtitle>Status</v-card-subtitle>\n        <div class=\"mx-auto pa-12\">\n          <line-chart\n            :colors=\"['#fcba03']\"\n            :height=\"150\"\n            :min=\"30\"\n            :max=\"100\"\n            ytitle=\"CPU Temp\"\n            :library=\"{\n              scales: {\n                xAxes: [\n                  {\n                    ticks: {\n                      fontColor: '#000000',\n                    },\n                  },\n                ],\n                yAxes: [\n                  {\n                    ticks: {\n                      fontColor: '#000000',\n                    },\n                  },\n                ],\n              },\n            }\"\n            :data=\"cpuTempSeries\"\n          ></line-chart>\n          <column-chart\n            :colors=\"['#fcba03']\"\n            :height=\"150\"\n            :min=\"0\"\n            :max=\"2\"\n            ytitle=\"CPU GHz\"\n            :library=\"{\n              scales: {\n                xAxes: [\n                  {\n                    ticks: {\n                      fontColor: '#000000',\n                    },\n                  },\n                ],\n                yAxes: [\n                  {\n                    ticks: {\n                      fontColor: '#000000',\n                    },\n                  },\n                ],\n              },\n            }\"\n            :data=\"cpuFreqSeries\"\n          ></column-chart>\n          <column-chart\n            :colors=\"['#fcba03']\"\n            :height=\"150\"\n            :min=\"0\"\n            ytitle=\"ramdisk\"\n            :library=\"{\n              scales: {\n                xAxes: [\n                  {\n                    ticks: {\n                      fontColor: '#000000',\n                    },\n                  },\n                ],\n                yAxes: [\n                  {\n                    ticks: {\n                      fontColor: '#000000',\n                    },\n                  },\n                ],\n              },\n            }\"\n            :data=\"ramdiskSeries\"\n          ></column-chart>\n          <line-chart\n            :colors=\"['#fcba03']\"\n            :height=\"150\"\n            :min=\"-100\"\n            :max=\"0\"\n            ytitle=\"WiFi dBm\"\n            :library=\"{\n              scales: {\n                xAxes: [\n                  {\n                    ticks: {\n                      fontColor: '#000000',\n                    },\n                  },\n                ],\n                yAxes: [\n                  {\n                    ticks: {\n                      fontColor: '#000000',\n                    },\n                  },\n                ],\n              },\n            }\"\n            :data=\"signalSeries\"\n          ></line-chart>\n        </div>\n        <v-expansion-panels>\n          <v-expansion-panel>\n            <v-expansion-panel-header>Text Warnings</v-expansion-panel-header>\n            <v-expansion-panel-content\n              v-for=\"item in haikuboxStatus\"\n              :key=\"item.id\"\n            >\n              <template v-if=\"item.warning != ''\">\n                Date: {{ item.createdAt }}\n                {{ item.warning }}\n              </template>\n            </v-expansion-panel-content>\n          </v-expansion-panel>\n        </v-expansion-panels>\n      </v-card>\n    </v-main>\n  </div>\n</template>\n\n<script>\nimport { API, Storage } from \"aws-amplify\";\nimport {\n  hitBySerialByDate,\n  listDeviceStates,\n  dailyCountBySerialByDate,\n  itemsBySerialByDate,\n  statusByDate,\n  getDeviceState,\n  rawHaikumarineBySerialByDate,\n} from \"./graphql/queries\";\nimport { createLabeledData } from \"./graphql/mutations\";\nimport { onCreateHit } from \"./graphql/subscriptions\";\nimport {\n  haikuboxByOwner,\n  haikuboxBySerial,\n  haikuboxStateByType,\n} from \"./graphql/queries\";\nimport { latLngBounds, latLng, icon } from \"leaflet\";\n\nvar moment = require(\"moment-timezone\");\n\n// const AudioContext = window.AudioContext || window.webkitAudioContext;\nlet context;\nlet source;\nlet compressor;\nvar audio = new Audio();\n\nimport { AudioContext, decodeAudioData } from \"standardized-audio-context\";\n//const AudioContext = window.AudioContext || window.webkitAudioContext;\n\nimport { Plotly } from \"vue-plotly\";\n\nvar hann = [\n  0.0, 3.77965773e-5, 1.51180595e-4, 3.4013491e-4, 6.04630957e-4, 9.44628746e-4,\n  1.36007687e-3, 1.85091253e-3, 2.41706151e-3, 3.05843822e-3, 3.77494569e-3,\n  4.56647559e-3, 5.43290826e-3, 6.3741127e-3, 7.38994662e-3, 8.48025644e-3,\n  9.64487731e-3, 1.08836332e-2, 1.21963367e-2, 1.35827895e-2, 1.50427819e-2,\n  1.65760932e-2, 1.81824916e-2, 1.98617342e-2, 2.16135671e-2, 2.34377255e-2,\n  2.53339336e-2, 2.73019047e-2, 2.93413412e-2, 3.1451935e-2, 3.36333667e-2,\n  3.58853068e-2, 3.82074146e-2, 4.05993391e-2, 4.30607187e-2, 4.55911813e-2,\n  4.81903443e-2, 5.08578147e-2, 5.35931893e-2, 5.63960544e-2, 5.92659864e-2,\n  6.22025514e-2, 6.52053053e-2, 6.82737943e-2, 7.14075543e-2, 7.46061116e-2,\n  7.78689827e-2, 8.11956742e-2, 8.45856832e-2, 8.80384971e-2, 9.1553594e-2,\n  9.51304424e-2, 9.87685015e-2, 1.02467221e-1, 1.06226043e-1, 1.10044397e-1,\n  1.13921708e-1, 1.17857388e-1, 1.21850843e-1, 1.25901469e-1, 1.30008654e-1,\n  1.34171776e-1, 1.38390206e-1, 1.42663307e-1, 1.46990432e-1, 1.51370928e-1,\n  1.55804131e-1, 1.60289372e-1, 1.64825973e-1, 1.69413247e-1, 1.74050502e-1,\n  1.78737036e-1, 1.8347214e-1, 1.88255099e-1, 1.9308519e-1, 1.97961681e-1,\n  2.02883837e-1, 2.07850913e-1, 2.12862158e-1, 2.17916814e-1, 2.23014117e-1,\n  2.28153297e-1, 2.33333576e-1, 2.38554171e-1, 2.43814294e-1, 2.49113148e-1,\n  2.54449933e-1, 2.59823842e-1, 2.65234062e-1, 2.70679775e-1, 2.76160159e-1,\n  2.81674384e-1, 2.87221617e-1, 2.92801019e-1, 2.98411747e-1, 3.04052952e-1,\n  3.09723782e-1, 3.15423378e-1, 3.21150881e-1, 3.26905422e-1, 3.32686134e-1,\n  3.38492141e-1, 3.44322565e-1, 3.50176526e-1, 3.56053138e-1, 3.61951513e-1,\n  3.6787076e-1, 3.73809982e-1, 3.79768282e-1, 3.8574476e-1, 3.91738511e-1,\n  3.97748631e-1, 4.03774209e-1, 4.09814335e-1, 4.15868096e-1, 4.21934577e-1,\n  4.2801286e-1, 4.34102027e-1, 4.40201156e-1, 4.46309327e-1, 4.52425614e-1,\n  4.58549094e-1, 4.64678841e-1, 4.70813928e-1, 4.76953428e-1, 4.83096412e-1,\n  4.89241951e-1, 4.95389117e-1, 5.0153698e-1, 5.07684611e-1, 5.1383108e-1,\n  5.19975458e-1, 5.26116815e-1, 5.32254225e-1, 5.38386758e-1, 5.44513487e-1,\n  5.50633486e-1, 5.56745831e-1, 5.62849596e-1, 5.68943859e-1, 5.75027699e-1,\n  5.81100196e-1, 5.87160431e-1, 5.93207489e-1, 5.99240456e-1, 6.05258418e-1,\n  6.11260467e-1, 6.17245695e-1, 6.23213197e-1, 6.2916207e-1, 6.35091417e-1,\n  6.41000339e-1, 6.46887944e-1, 6.52753341e-1, 6.58595644e-1, 6.6441397e-1,\n  6.70207439e-1, 6.75975174e-1, 6.81716305e-1, 6.87429962e-1, 6.93115283e-1,\n  6.98771407e-1, 7.0439748e-1, 7.09992651e-1, 7.15556073e-1, 7.21086907e-1,\n  7.26584315e-1, 7.32047467e-1, 7.37475536e-1, 7.42867702e-1, 7.4822315e-1,\n  7.5354107e-1, 7.58820659e-1, 7.64061117e-1, 7.69261652e-1, 7.74421479e-1,\n  7.79539817e-1, 7.84615893e-1, 7.89648938e-1, 7.94638193e-1, 7.99582902e-1,\n  8.04482319e-1, 8.09335702e-1, 8.14142317e-1, 8.18901439e-1, 8.23612347e-1,\n  8.28274329e-1, 8.32886681e-1, 8.37448705e-1, 8.41959711e-1, 8.46419017e-1,\n  8.5082595e-1, 8.55179843e-1, 8.59480037e-1, 8.63725883e-1, 8.67916738e-1,\n  8.7205197e-1, 8.76130952e-1, 8.80153069e-1, 8.84117711e-1, 8.88024281e-1,\n  8.91872186e-1, 8.95660845e-1, 8.99389686e-1, 9.03058145e-1, 9.06665667e-1,\n  9.10211707e-1, 9.13695728e-1, 9.17117204e-1, 9.20475618e-1, 9.23770461e-1,\n  9.27001237e-1, 9.30167455e-1, 9.33268638e-1, 9.36304317e-1, 9.39274033e-1,\n  9.42177336e-1, 9.45013788e-1, 9.4778296e-1, 9.50484434e-1, 9.531178e-1,\n  9.55682662e-1, 9.5817863e-1, 9.60605328e-1, 9.62962389e-1, 9.65249456e-1,\n  9.67466184e-1, 9.69612237e-1, 9.71687291e-1, 9.73691033e-1, 9.75623159e-1,\n  9.77483377e-1, 9.79271407e-1, 9.80986977e-1, 9.82629829e-1, 9.84199713e-1,\n  9.85696393e-1, 9.87119643e-1, 9.88469246e-1, 9.89745e-1, 9.90946711e-1,\n  9.92074198e-1, 9.9312729e-1, 9.94105827e-1, 9.95009663e-1, 9.9583866e-1,\n  9.96592693e-1, 9.97271648e-1, 9.97875422e-1, 9.98403924e-1, 9.98857075e-1,\n  9.99234805e-1, 9.99537058e-1, 9.99763787e-1, 9.99914959e-1, 9.99990551e-1,\n  9.99990551e-1, 9.99914959e-1, 9.99763787e-1, 9.99537058e-1, 9.99234805e-1,\n  9.98857075e-1, 9.98403924e-1, 9.97875422e-1, 9.97271648e-1, 9.96592693e-1,\n  9.9583866e-1, 9.95009663e-1, 9.94105827e-1, 9.9312729e-1, 9.92074198e-1,\n  9.90946711e-1, 9.89745e-1, 9.88469246e-1, 9.87119643e-1, 9.85696393e-1,\n  9.84199713e-1, 9.82629829e-1, 9.80986977e-1, 9.79271407e-1, 9.77483377e-1,\n  9.75623159e-1, 9.73691033e-1, 9.71687291e-1, 9.69612237e-1, 9.67466184e-1,\n  9.65249456e-1, 9.62962389e-1, 9.60605328e-1, 9.5817863e-1, 9.55682662e-1,\n  9.531178e-1, 9.50484434e-1, 9.4778296e-1, 9.45013788e-1, 9.42177336e-1,\n  9.39274033e-1, 9.36304317e-1, 9.33268638e-1, 9.30167455e-1, 9.27001237e-1,\n  9.23770461e-1, 9.20475618e-1, 9.17117204e-1, 9.13695728e-1, 9.10211707e-1,\n  9.06665667e-1, 9.03058145e-1, 8.99389686e-1, 8.95660845e-1, 8.91872186e-1,\n  8.88024281e-1, 8.84117711e-1, 8.80153069e-1, 8.76130952e-1, 8.7205197e-1,\n  8.67916738e-1, 8.63725883e-1, 8.59480037e-1, 8.55179843e-1, 8.5082595e-1,\n  8.46419017e-1, 8.41959711e-1, 8.37448705e-1, 8.32886681e-1, 8.28274329e-1,\n  8.23612347e-1, 8.18901439e-1, 8.14142317e-1, 8.09335702e-1, 8.04482319e-1,\n  7.99582902e-1, 7.94638193e-1, 7.89648938e-1, 7.84615893e-1, 7.79539817e-1,\n  7.74421479e-1, 7.69261652e-1, 7.64061117e-1, 7.58820659e-1, 7.5354107e-1,\n  7.4822315e-1, 7.42867702e-1, 7.37475536e-1, 7.32047467e-1, 7.26584315e-1,\n  7.21086907e-1, 7.15556073e-1, 7.09992651e-1, 7.0439748e-1, 6.98771407e-1,\n  6.93115283e-1, 6.87429962e-1, 6.81716305e-1, 6.75975174e-1, 6.70207439e-1,\n  6.6441397e-1, 6.58595644e-1, 6.52753341e-1, 6.46887944e-1, 6.41000339e-1,\n  6.35091417e-1, 6.2916207e-1, 6.23213197e-1, 6.17245695e-1, 6.11260467e-1,\n  6.05258418e-1, 5.99240456e-1, 5.93207489e-1, 5.87160431e-1, 5.81100196e-1,\n  5.75027699e-1, 5.68943859e-1, 5.62849596e-1, 5.56745831e-1, 5.50633486e-1,\n  5.44513487e-1, 5.38386758e-1, 5.32254225e-1, 5.26116815e-1, 5.19975458e-1,\n  5.1383108e-1, 5.07684611e-1, 5.0153698e-1, 4.95389117e-1, 4.89241951e-1,\n  4.83096412e-1, 4.76953428e-1, 4.70813928e-1, 4.64678841e-1, 4.58549094e-1,\n  4.52425614e-1, 4.46309327e-1, 4.40201156e-1, 4.34102027e-1, 4.2801286e-1,\n  4.21934577e-1, 4.15868096e-1, 4.09814335e-1, 4.03774209e-1, 3.97748631e-1,\n  3.91738511e-1, 3.8574476e-1, 3.79768282e-1, 3.73809982e-1, 3.6787076e-1,\n  3.61951513e-1, 3.56053138e-1, 3.50176526e-1, 3.44322565e-1, 3.38492141e-1,\n  3.32686134e-1, 3.26905422e-1, 3.21150881e-1, 3.15423378e-1, 3.09723782e-1,\n  3.04052952e-1, 2.98411747e-1, 2.92801019e-1, 2.87221617e-1, 2.81674384e-1,\n  2.76160159e-1, 2.70679775e-1, 2.65234062e-1, 2.59823842e-1, 2.54449933e-1,\n  2.49113148e-1, 2.43814294e-1, 2.38554171e-1, 2.33333576e-1, 2.28153297e-1,\n  2.23014117e-1, 2.17916814e-1, 2.12862158e-1, 2.07850913e-1, 2.02883837e-1,\n  1.97961681e-1, 1.9308519e-1, 1.88255099e-1, 1.8347214e-1, 1.78737036e-1,\n  1.74050502e-1, 1.69413247e-1, 1.64825973e-1, 1.60289372e-1, 1.55804131e-1,\n  1.51370928e-1, 1.46990432e-1, 1.42663307e-1, 1.38390206e-1, 1.34171776e-1,\n  1.30008654e-1, 1.25901469e-1, 1.21850843e-1, 1.17857388e-1, 1.13921708e-1,\n  1.10044397e-1, 1.06226043e-1, 1.02467221e-1, 9.87685015e-2, 9.51304424e-2,\n  9.1553594e-2, 8.80384971e-2, 8.45856832e-2, 8.11956742e-2, 7.78689827e-2,\n  7.46061116e-2, 7.14075543e-2, 6.82737943e-2, 6.52053053e-2, 6.22025514e-2,\n  5.92659864e-2, 5.63960544e-2, 5.35931893e-2, 5.08578147e-2, 4.81903443e-2,\n  4.55911813e-2, 4.30607187e-2, 4.05993391e-2, 3.82074146e-2, 3.58853068e-2,\n  3.36333667e-2, 3.1451935e-2, 2.93413412e-2, 2.73019047e-2, 2.53339336e-2,\n  2.34377255e-2, 2.16135671e-2, 1.98617342e-2, 1.81824916e-2, 1.65760932e-2,\n  1.50427819e-2, 1.35827895e-2, 1.21963367e-2, 1.08836332e-2, 9.64487731e-3,\n  8.48025644e-3, 7.38994662e-3, 6.3741127e-3, 5.43290826e-3, 4.56647559e-3,\n  3.77494569e-3, 3.05843822e-3, 2.41706151e-3, 1.85091253e-3, 1.36007687e-3,\n  9.44628746e-4, 6.04630957e-4, 3.4013491e-4, 1.51180595e-4, 3.77965773e-5, 0.0,\n];\nimport { FFT } from \"dsp.js\";\n\nlet subscription;\nexport default {\n  name: \"marine\",\n  props: [\"user\", \"goHomeClicked\"],\n  watch: {\n    goHomeClicked: function () {\n      // watch it\n      if (this.devicesByOwner[0] != null) {\n        this.clickDevice(this.devicesByOwner[0]);\n      }\n    },\n  },\n  created() {\n    this.getDevicesByOwner();\n    this.getDevicesByType();\n    // this.getDevices();\n  },\n  components: {\n    Plotly,\n  },\n  data() {\n    return {\n      devicesByOwner: [],\n      selectedDeviceAudioPrivate: false,\n      authState: undefined,\n      dropdown_class: [\n        \"Dolphin whistle\",\n        \"Manatee\",\n        \"Boat\",\n        \"Something else\",\n        \"Not Sure\",\n      ],\n      backgroundLabelColor: \"blue\",\n      isFetchingBoxes: true,\n      devices: [],\n      connectedDevices: [],\n      disconnectedDevices: [],\n      haikuboxStatus: [],\n      cpuTempSeries: [],\n      cpuFreqSeries: [],\n      signalSeries: [],\n      ramdiskSeries: [],\n      liveHits: [],\n      hits: [],\n      allHits: [],\n      dailyCounts: [],\n      currentSiteName: \"\",\n      currentSerial: \"\",\n      seriesHourly: [],\n      seriesSpeciesDaily: [],\n      isPlaying: false,\n      soundscapes: [],\n      fftLength: 512,\n      halfLength: 256,\n      plotlyLayout: {\n        xaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        yaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        margin: {\n          l: 0,\n          r: 0,\n          b: 0,\n          t: 0,\n          pad: 4,\n        },\n        height: 240,\n        width: 300,\n        hovermode: false,\n      },\n      zoom: 3,\n      center: latLng(39, -94),\n      url: \"https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}\",\n      attribution:\n        \"Tiles &copy; Esri &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC\",\n      currentZoom: 5,\n      currentCenter: latLng(39, -94),\n      mapOptions: {\n        zoomSnap: 0.5,\n      },\n      showMap: true,\n      bounds: latLngBounds([\n        [25, -90],\n        [29, -75],\n      ]),\n      iconConnected: icon({\n        iconUrl: \"./icon.png\",\n        iconSize: [32, 37],\n        iconAnchor: [16, 37],\n      }),\n      iconDisconnected: icon({\n        iconUrl: \"./signal_wifi_off-24px.svg\",\n        iconSize: [24, 24],\n        iconAnchor: [16, 37],\n      }),\n      formFields: [\n        {\n          type: \"email\",\n          label: \"Email Address\",\n          placeholder: \"Enter your email address\",\n          required: true,\n        },\n        {\n          type: \"password\",\n          label: \"Password\",\n          placeholder: \"Enter password (>7 characters)\",\n          required: true,\n        },\n      ],\n    };\n  },\n  methods: {\n    labelHit(item) {\n      // console.log(item);\n      if (!item.classLabel) return;\n      const serial = item.serial;\n      const dt = item.dt;\n      const group = item.group;\n      const cn = item.cn;\n      const sn = item.sn;\n      const spCode = item.spCode;\n      const wav = item.wav;\n      const labeledBy = this.user;\n      const label = item.classLabel;\n      const score = item.score;\n      const lat = item.lat;\n      const lon = item.lon;\n      const labeledData = {\n        serial,\n        dt,\n        group,\n        cn,\n        sn,\n        spCode,\n        wav,\n        labeledBy,\n        label,\n        score,\n        lat,\n        lon,\n      };\n      API.graphql({\n        query: createLabeledData,\n        variables: { input: labeledData },\n      });\n    },\n    replaceSpaces(itemWithSpaces) {\n      const itemWithUnderscores = itemWithSpaces.replace(/ /g, \"_\");\n      // // console.log(\"link\", itemWithUnderscores);\n      return itemWithUnderscores;\n    },\n    play(audioFile) {\n      // console.log(audioFile);\n\n      function initAudio() {\n        context = new AudioContext();\n        source = context.createMediaElementSource(audio);\n        compressor = context.createDynamicsCompressor();\n        compressor.threshold.value = -40;\n        compressor.knee.value = 30;\n        compressor.ratio.value = 10;\n        compressor.attack.value = 0.25;\n        compressor.release.value = 0.25;\n        var filter = context.createBiquadFilter();\n        filter.type = \"highpass\";\n        filter.frequency.value = 3000;\n        source.connect(filter);\n        filter.connect(compressor);\n        compressor.connect(context.destination);\n        audio.crossOrigin = \"anonymous\";\n        audio.autoplay = true;\n      }\n\n      if (!context) {\n        initAudio();\n        if (context.state === \"suspended\") {\n          context.resume();\n        }\n      }\n\n      Storage.get(audioFile)\n        .then((result) => {\n          audio.src = result;\n          audio.play();\n        })\n        .catch((err) => console.log(err));\n    },\n    zoomUpdate(zoom) {\n      this.currentZoom = zoom;\n    },\n    centerUpdate(center) {\n      this.currentCenter = center;\n    },\n    getEventText(item) {\n      let momentText = moment(item.dt).fromNow();\n      if (momentText == \"in a few seconds\") {\n        momentText = \"just now\";\n      }\n      return momentText;\n    },\n    getScoreText(item) {\n      let scoreText = \"high\";\n      if (item.score <= 0.3) {\n        scoreText = \"low\";\n      } else {\n        if (item.score < 0.6) scoreText = \"medium\";\n      }\n      return scoreText;\n    },\n    clickDevice(item) {\n      // console.log(\"clicked\", item.id);\n      this.liveHits = [];\n      this.getPrivacy(item.serial);\n      this.getDailyCount(item.serial);\n      this.getHourlyCount(item.serial);\n      this.getHits(item.serial);\n      this.subscribe(item.serial);\n      this.getStatus(item.serial);\n      this.getSoundscapes(item.serial);\n      // this.updateBounds(item.serial);\n      this.currentSerial = item.serial;\n    },\n\n    async updateBounds(serialClicked) {\n      const deviceState = await API.graphql({\n        query: getDeviceState,\n        variables: { id: serialClicked },\n      });\n      var clickedDevice = deviceState.data.getDeviceState;\n      // // console.log(\"update bounds clicked\", clickedDevice);\n      this.bounds = latLngBounds([\n        [clickedDevice.lat - 0.5, clickedDevice.lon - 0.5],\n        [clickedDevice.lat + 0.5, clickedDevice.lon + 0.5],\n      ]);\n    },\n    async getDevicesByType() {\n      const devices = await API.graphql({\n        query: haikuboxStateByType,\n        variables: { type: \"haikumarine\" },\n      });\n      this.devices = devices.data.haikuboxStateByType.items;\n      // console.log(\"Devices\", this.devices);\n      this.connectedDevices = [];\n      this.disconnectedDevices = [];\n      var connected = [];\n      var disconnected = [];\n      this.devices.forEach(function (element) {\n        // console.log(element);\n        if ((element.connected === false) & (element.lat != null)) {\n          disconnected.push(element);\n        }\n        if ((element.connected === true) & (element.lat != null)) {\n          connected.push(element);\n        }\n      });\n      this.connectedDevices = connected;\n      this.disconnectedDevices = disconnected;\n      // console.log(\"connected\", connected);\n      // console.log(\"disconnected\", disconnected);\n      this.isFetchingBoxes = false;\n    },\n\n    async getDevicesByOwner() {\n      const devicesByOwner = await API.graphql({\n        query: haikuboxByOwner,\n        variables: { owner: this.user },\n      });\n      this.devicesByOwner = devicesByOwner.data.haikuboxByOwner.items;\n      // console.log(\"Device by owner\", this.devicesByOwner);\n      if (this.devicesByOwner.length > 0)\n        this.clickDevice(this.devicesByOwner[0]);\n    },\n    async getDevices() {\n      const deviceStates = await API.graphql({\n        query: listDeviceStates,\n      });\n      this.devices = deviceStates.data.listDeviceStates.items;\n      // console.log(\"Devices\", this.devices);\n      this.connectedDevices = [];\n      this.disconnectedDevices = [];\n      var connected = [];\n      var disconnected = [];\n      this.devices.forEach(function (element) {\n        // console.log(element);\n        if ((element.connected === false) & (element.lat != null)) {\n          disconnected.push(element);\n        }\n        if ((element.connected === true) & (element.lat != null)) {\n          connected.push(element);\n        }\n      });\n      this.connectedDevices = connected;\n      this.disconnectedDevices = disconnected;\n      // console.log(\"connected\", connected);\n      // console.log(\"disconnected\", disconnected);\n\n      this.isFetchingBoxes = false;\n    },\n    async getPrivacy(serialClicked) {\n      const result = await API.graphql({\n        query: haikuboxBySerial,\n        variables: { serial: serialClicked },\n      });\n      // console.log(\"Privacy\", result.data.haikuboxBySerial.items[0]);\n      this.currentSiteName = result.data.haikuboxBySerial.items[0].name;\n      // if owner, audio is always available\n      if (result.data.haikuboxBySerial.items[0].owner === this.user) {\n        this.selectedDeviceAudioPrivate = false;\n      } else {\n        this.selectedDeviceAudioPrivate =\n          result.data.haikuboxBySerial.items[0].privateAudio;\n        // console.log(\"Audio Private\", this.selectedDeviceAudioPrivate);\n      }\n    },\n    async getStatus(serialClicked) {\n      let yesterdayDate = moment.utc().subtract(24, \"hours\").format();\n      const filterArg = {\n        serial: serialClicked,\n        createdAt: { gt: yesterdayDate },\n      };\n      const boxStatus = await API.graphql({\n        query: statusByDate,\n        variables: filterArg,\n      });\n      this.haikuboxStatus = boxStatus.data.statusByDate.items;\n      this.cpuTempSeries = [];\n\n      for (var entry in this.haikuboxStatus) {\n        this.cpuTempSeries.push([\n          moment\n            .utc(this.haikuboxStatus[entry].createdAt)\n            .tz(this.devices.find((x) => x.serial === serialClicked).timezone)\n            .format(\"hh:mm a\"),\n          this.haikuboxStatus[entry].cpuTemp,\n        ]);\n      }\n\n      this.cpuFreqSeries = [];\n      for (entry in this.haikuboxStatus) {\n        this.cpuFreqSeries.push([\n          moment\n            .utc(this.haikuboxStatus[entry].createdAt)\n            .tz(this.devices.find((x) => x.serial === serialClicked).timezone)\n            .format(\"hh:mm a\"),\n          this.haikuboxStatus[entry].cpuFreq,\n        ]);\n      }\n\n      this.ramdiskSeries = [];\n      for (entry in this.haikuboxStatus) {\n        this.ramdiskSeries.push([\n          moment\n            .utc(this.haikuboxStatus[entry].createdAt)\n            .tz(this.devices.find((x) => x.serial === serialClicked).timezone)\n            .format(\"hh:mm a\"),\n          this.haikuboxStatus[entry].ramdisk,\n        ]);\n      }\n\n      this.signalSeries = [];\n      for (entry in this.haikuboxStatus) {\n        this.signalSeries.push([\n          moment\n            .utc(this.haikuboxStatus[entry].createdAt)\n            .tz(this.devices.find((x) => x.serial === serialClicked).timezone)\n            .format(\"hh:mm a\"),\n          this.haikuboxStatus[entry].signal,\n        ]);\n      }\n      //// console.log(\"cpu freq\", this.cpuFreqSeries);\n      // // console.log(\"temp\", this.cpuTempSeries);\n      // // console.log(\"status\", this.haikuboxStatus);\n    },\n    async getDailyCount(serialClicked) {\n      let lastMonthDate = moment.utc().subtract(31, \"days\").format();\n      const filterArg = {\n        serial: serialClicked,\n        date: { gt: lastMonthDate },\n      };\n      const dailyCounts = await API.graphql({\n        query: dailyCountBySerialByDate,\n        variables: filterArg,\n        limit: 30,\n      });\n      this.dailyCounts = dailyCounts.data.dailyCountBySerialByDate.items;\n      // console.log(\"Daily Counts Query\", this.dailyCounts);\n      let speciesList = [];\n      let dateList = [];\n      let entry = {};\n      for (entry in this.dailyCounts) {\n        speciesList.push(...this.dailyCounts[entry].spCode);\n        dateList.push(this.dailyCounts[entry].date);\n      }\n\n      // clear chart if no data\n      if (speciesList.length == 0) {\n        // console.log(\"no data\");\n        this.seriesDaily = [];\n        this.chartOptions = {\n          xaxis: {\n            categories: [],\n          },\n        };\n        return;\n      }\n\n      // Create date array in case dates with no results\n      let minDate = dateList.reduce(function (a, b) {\n        return a < b ? a : b;\n      });\n      let maxDate = dateList.reduce(function (a, b) {\n        return a > b ? a : b;\n      });\n\n      function getDates(startDate, stopDate) {\n        var dateArray = [];\n        var currentDate = moment(startDate);\n        stopDate = moment(stopDate);\n        while (currentDate <= stopDate) {\n          dateArray.push(moment(currentDate).format(\"YYYY-MM-DD\"));\n          currentDate = moment(currentDate).add(1, \"days\");\n        }\n        return dateArray;\n      }\n      let dateArr = getDates(minDate, maxDate);\n\n      function getShortDates(startDate, stopDate) {\n        var shortDateArray = [];\n        var currentDate = moment(startDate);\n        stopDate = moment(stopDate);\n        while (currentDate <= stopDate) {\n          shortDateArray.push(moment(currentDate).format(\"MM-DD\"));\n          currentDate = moment(currentDate).add(1, \"days\");\n        }\n        return shortDateArray;\n      }\n      let shortDateArr = getShortDates(minDate, maxDate);\n\n      // Remove duplicates from species list\n      speciesList = Array.from(new Set(speciesList));\n      // console.log(\"dateArr\", dateArr);\n      // console.log(\"speciesList\", speciesList);\n      let nrows = speciesList.length;\n      let ncolumns = dateArr.length;\n\n      // create array with zeros for species counts\n      let countArray = new Array(nrows);\n      for (let i = 0; i < countArray.length; i++) {\n        countArray[i] = new Array(ncolumns).fill(0);\n      }\n      // // console.log(countArray);\n\n      // loop through all days\n      // for each entry figure out date index\n      // loop through each species for that date and put in array\n      for (entry in this.dailyCounts) {\n        let newDate = moment(this.dailyCounts[entry].date).format(\"YYYY-MM-DD\");\n        let dateIndex = dateArr.indexOf(newDate);\n        let species = {};\n        for (species in this.dailyCounts[entry].spCode) {\n          //  console.log(\"species\", species);\n          let speciesIndex = speciesList.indexOf(\n            this.dailyCounts[entry].spCode[species]\n          );\n          // console.log(dateIndex, speciesIndex);\n          countArray[speciesIndex][dateIndex] =\n            this.dailyCounts[entry].count[species];\n        }\n      }\n      this.seriesDaily = [];\n      var sortOrder = Array.from(Array(speciesList.length).keys()).sort(\n        (a, b) =>\n          speciesList[a] > speciesList[b]\n            ? -1\n            : (speciesList[b] > speciesList[a]) | 0\n      );\n      // console.log(\"sorted\", sortOrder);\n      for (let i = 0; i < nrows; i++) {\n        this.seriesDaily.push({\n          name: speciesList[sortOrder[i]],\n          data: countArray[sortOrder[i]],\n        });\n      }\n\n      this.chartOptionsDaily = {\n        xaxis: {\n          categories: dateArr,\n        },\n      };\n      this.chartOptionsSpeciesDaily = {\n        xaxis: {\n          categories: shortDateArr,\n        },\n      };\n      // console.log(\"daily x-axis\", this.chartOptionsDaily.xaxis.categories);\n      // console.log(\"seriesDaily\", this.seriesDaily);\n    },\n\n    async getHourlyCount(serialClicked) {\n      let yesterdayDate = moment.utc().subtract(1, \"hours\").format();\n      const filterArg = {\n        serial: serialClicked,\n        date: { gt: yesterdayDate },\n      };\n      const hourlyCounts = await API.graphql({\n        query: itemsBySerialByDate,\n        variables: filterArg,\n        limit: 24,\n      });\n      this.hourlyCounts = hourlyCounts.data.itemsBySerialByDate.items;\n      // console.log(\"hourly counts\", this.hourlyCounts);\n\n      let speciesList = [];\n      let dateList = [];\n      let entry = {};\n      for (entry in this.hourlyCounts) {\n        speciesList.push(...this.hourlyCounts[entry].spCode);\n        dateList.push(this.hourlyCounts[entry].date);\n      }\n\n      // console.log(\"Hourly Date list\", dateList);\n\n      // clear chart if no data\n      if (speciesList.length == 0) {\n        // console.log(\"no data\");\n        this.seriesHourly = [];\n        this.chartOptions = {\n          xaxis: {\n            categories: [],\n          },\n        };\n        return;\n      }\n\n      // Create date array in case dates with no results\n      let minDate = dateList.reduce(function (a, b) {\n        return a < b ? a : b;\n      });\n      let maxDate = dateList.reduce(function (a, b) {\n        return a > b ? a : b;\n      });\n\n      function getDates(startDate, stopDate) {\n        var dateArray = [];\n        var currentDate = moment(startDate).utc();\n        stopDate = moment(stopDate).utc();\n        // console.log(\"start date\", startDate);\n        // console.log(\"stop date\", stopDate);\n        while (currentDate <= stopDate) {\n          var a = moment.utc(currentDate);\n          dateArray.push(a.format());\n          currentDate = moment(currentDate).add(1, \"hours\");\n        }\n        return dateArray;\n      }\n      let dateArr = getDates(minDate, maxDate);\n      // console.log(\"hourly date array\", dateArr);\n\n      // Remove duplicates from species list\n      speciesList = Array.from(new Set(speciesList));\n      // console.log(\"species\", speciesList);\n      let nrows = speciesList.length;\n      let ncolumns = dateArr.length;\n\n      // create array with zeros for species counts\n      let countArray = new Array(nrows);\n      for (let i = 0; i < countArray.length; i++) {\n        countArray[i] = new Array(ncolumns).fill(0);\n      }\n      // console.log(\"counts\", countArray);\n\n      // loop through all hours\n      // for each entry figure out date index\n      // loop through each species for that date and put in array\n      for (entry in this.hourlyCounts) {\n        let newDate = moment(this.hourlyCounts[entry].date).utc().format();\n        let dateIndex = dateArr.indexOf(newDate);\n        let species = {};\n        for (species in this.hourlyCounts[entry].spCode) {\n          let speciesIndex = speciesList.indexOf(\n            this.hourlyCounts[entry].spCode[species]\n          );\n          countArray[speciesIndex][dateIndex] =\n            this.hourlyCounts[entry].count[species];\n        }\n      }\n      this.seriesHourly = [];\n      var sortOrder = Array.from(Array(speciesList.length).keys()).sort(\n        (a, b) =>\n          speciesList[a] > speciesList[b]\n            ? -1\n            : (speciesList[b] > speciesList[a]) | 0\n      );\n      for (let i = 0; i < nrows; i++) {\n        this.seriesHourly.push({\n          name: speciesList[sortOrder[i]],\n          data: countArray[sortOrder[i]],\n        });\n      }\n\n      //  console.log(\n      //   \"Looking for tz\",\n      //   this.devices.find((x) => x.serial === serialClicked).timezone\n      // );\n      let localDateArr = [];\n      for (let utcDate of dateArr) {\n        localDateArr.push([\n          moment\n            .utc(utcDate)\n            .tz(this.devices.find((x) => x.serial === serialClicked).timezone)\n            .format(\"hh:mm a\"),\n        ]);\n      }\n\n      this.chartOptionsHourly = {\n        xaxis: {\n          categories: localDateArr,\n        },\n      };\n\n      this.chartOptionsSpeciesHourly = {\n        xaxis: {\n          categories: localDateArr,\n        },\n      };\n      // console.log(\"hourly x-axis\", this.chartOptionsHourly.xaxis.categories);\n      // console.log(\"seriesHourly\", this.seriesHourly);\n    },\n\n    // for charts.js plots\n    getHourlySpecies(speciesID) {\n      let obj = this.seriesHourly.find((o) => o.name === speciesID);\n      if (obj === undefined) {\n        // console.log(\"No hourly counts for \", speciesID);\n        return [];\n      }\n      var plotData = [];\n      for (var index in obj.data) {\n        plotData.push([\n          this.chartOptionsSpeciesHourly.xaxis.categories[index],\n          obj.data[index],\n        ]);\n      }\n      //// console.log(\"plotData\", plotData);\n      return plotData;\n    },\n\n    getHourlySpeciesCount(speciesID) {\n      let obj = this.seriesHourly.find((o) => o.name === speciesID);\n      if (obj === undefined) {\n        return 0;\n      }\n      const arrSum = (arr) => arr.reduce((a, b) => a + b, 0);\n      return arrSum(obj.data);\n    },\n\n    // for charts.js plots\n    getDailySpecies(speciesID) {\n      console.log(\"getDailySpecies\", speciesID);\n      let obj = this.seriesDaily.find((o) => o.name === speciesID);\n      if (obj === undefined) {\n        console.log(\"No daily counts for \", speciesID);\n        return [];\n      }\n      var plotData = [];\n      for (var index in obj.data) {\n        plotData.push([\n          this.chartOptionsSpeciesDaily.xaxis.categories[index],\n          obj.data[index],\n        ]);\n      }\n      console.log(\"plotData\", plotData);\n      return plotData;\n    },\n\n    getDailySpeciesCount(speciesID) {\n      let obj = this.seriesDaily.find((o) => o.name === speciesID);\n      if (obj === undefined) {\n        return 0;\n      }\n      const arrSum = (arr) => arr.reduce((a, b) => a + b, 0);\n      return arrSum(obj.data);\n    },\n    async getSoundscapes(serialClicked) {\n      let yesterdayDate = moment.utc().subtract(24, \"hours\").format();\n      const variableArg = {\n        serial: serialClicked,\n        wav: { gt: \"\" },\n        sortDirection: \"DESC\",\n        dt: { gt: yesterdayDate },\n      };\n      const hits = await API.graphql({\n        query: rawHaikumarineBySerialByDate,\n        variables: variableArg,\n      });\n      this.soundscapes = hits.data.rawHaikumarineBySerialByDate.items;\n      console.log(\"soundscapes\", this.soundscapes);\n    },\n    async getHits(serialClicked) {\n      // console.log(\"getHits\", serialClicked);\n      let yesterdayDate = moment.utc().subtract(24, \"hours\").format();\n      const filterArg = {\n        serial: serialClicked,\n        wav: { gt: \"\" },\n        sortDirection: \"DESC\",\n        dt: { gt: yesterdayDate },\n      };\n      const hits = await API.graphql({\n        query: hitBySerialByDate,\n        variables: filterArg,\n      });\n      this.hits = hits.data.hitBySerialByDate.items;\n      this.allHits = this.hits;\n\n      for (i in this.hits) {\n        this.hits[i].window = \"image\";\n      }\n\n      // // leave one per species in allHits--used for help Haikubox\n      // var i;\n      // var helpHits = [];\n      // var helpHitsIndex = [];\n      // for (i = this.hits.length - 1; i >= 0; i--) {\n      //   if (!helpHits.includes(this.hits[i].cn)) {\n      //     helpHits.push(this.hits[i].cn);\n      //     helpHitsIndex.push(i);\n      //   }\n      // }\n\n      // var uniqueHelpHits = [];\n      // for (i in helpHitsIndex) {\n      //   uniqueHelpHits.push(this.hits[helpHitsIndex[i]]);\n      // }\n      // this.allHits = uniqueHelpHits;\n\n      // keep track of species in list\n      var speciesHits = [];\n      var speciesIndex = [];\n      for (var i = 0; i < this.hits.length; i++) {\n        if (!speciesHits.includes(this.hits[i].spCode)) {\n          speciesHits.push(this.hits[i].spCode);\n          speciesIndex.push(i);\n        }\n      }\n      var uniqueHits = [];\n      for (i in speciesIndex) {\n        uniqueHits.push(this.hits[speciesIndex[i]]);\n      }\n      // console.log(\"Hits\", uniqueHits);\n      this.hits = uniqueHits;\n    },\n    subscribe(serialClicked) {\n      if (subscription) {\n        // console.log(\"unsubscribing\");\n        subscription.unsubscribe();\n      }\n      // console.log(\"subscribe\");\n      subscription = API.graphql({\n        query: onCreateHit,\n        variables: { serial: serialClicked },\n      }).subscribe({\n        next: (eventData) => {\n          // console.log(eventData);\n          let liveHit = eventData.value.data.onCreateHit;\n          if (this.liveHits.some((item) => item.id === liveHit.id)) return; // remove duplications\n          this.liveHits = [liveHit, ...this.liveHits];\n          this.liveHits = this.liveHits.slice(0, 10); // limit to 10 hits\n        },\n      });\n    },\n    setWindow(index, value) {\n      this.hits[index].window = value;\n      this.hits[index].id += 1; // increment ID so that component updates\n\n      // console.log(\"Change Window\", this.hits[index]);\n    },\n    spectrogram(index, audioFile, pageType) {\n      console.log(\"Spectrogram\", audioFile);\n\n      // if (!context) {\n      //   if (context.state === \"suspended\") {\n      //     context.resume();\n      //   }\n      // }\n\n      async function getFile(audioContext, filepath) {\n        // webkit audio decodeAudioData does not work in Safari\n        // const response = await fetch(filepath);\n        // const arrayBuffer = await response.arrayBuffer();\n        // const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n        // return audioBuffer;\n\n        // standardized-audio-context from npm\n        const nativeAudioContext = new AudioContext();\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          nativeAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        var context = new AudioContext();\n        const sample = await getFile(context, filePath);\n\n        return sample;\n      }\n\n      function linear2Decibel(value) {\n        var dB = 20 * Math.log10(value);\n        return dB;\n      }\n\n      //var c = document.getElementById(\"myCanvas\");\n      //this.canvas = c.getContext(\"2d\");\n\n      Storage.get(audioFile)\n        .then(\n          (result) => {\n            // console.log(\"Storage get\", result);\n\n            setupSample(result)\n              .then((sample) => {\n                // console.log(\"sample\", sample);\n                let signal = sample.getChannelData(0);\n                // console.log(\"raw\", signal);\n\n                // calculate spectrogram\n                // let ts = 0;\n                let overlap = 0.0;\n                let fftLength = this.fftLength;\n                let halfLength = this.halfLength;\n                let offset = Math.floor(fftLength * (1.0 - overlap));\n                // console.log(\"offset\", offset);\n                // let ctx = this.canvas;\n                let fft = new FFT(fftLength, 44100);\n                var spectrogramArray = [];\n                for (var x = 0; x < sample.length - fftLength; x += offset) {\n                  var chunk = signal.slice(x, x + fftLength);\n                  for (var i = 0; i < fftLength; i++) {\n                    chunk[i] = chunk[i] * hann[i];\n                  }\n                  fft.forward(chunk);\n                  chunk = fft.spectrum.slice(0, halfLength);\n                  // console.log(\"fft\", chunk);\n                  var dBmag = chunk.map(linear2Decibel);\n                  // console.log(\"dB\", dBmag);\n                  spectrogramArray.push(...dBmag);\n                }\n\n                // console.log(\"linear spec\", spectrogramArray);\n\n                // arrange spectrogram for Plotly\n                var spectrogramData = [];\n                for (i = 0; i < halfLength; i++) {\n                  // grab one element every halfLength points\n                  var arr = spectrogramArray.filter(function (value, j) {\n                    return j % halfLength == 0;\n                  });\n                  spectrogramData.push(arr);\n                  spectrogramArray.shift(); // remove first element\n                }\n\n                if (pageType === \"Recent\") {\n                  this.hits[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: -70,\n                    },\n                  ];\n                  // console.log(\"spec\", this.hits[index].spectrogram);\n                  this.setWindow(index, \"spectrogram\");\n                }\n\n                if (pageType === \"Soundscape\") {\n                  this.soundscapes[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: -70,\n                    },\n                  ];\n                  // console.log(\"spec\", this.hits[index].spectrogram);\n                  this.soundscapes[index].window = \"spectrogram\";\n                  this.soundscapes[index].id += 1; // increment ID so that component updates\n                }\n              })\n              .catch((err) => {\n                console.log(err);\n                console.log(\"No audio\", audioFile);\n                // console.log(\"Delete index\", index);\n                this.snackbar = true;\n                return false;\n              });\n          },\n          (reason) => {\n            // rejection\n            console.log(\"Can't play \", reason);\n          }\n        )\n        .catch((err) => {\n          console.log(\"Storage error\", err);\n        });\n    },\n  },\n};\n</script>\n\n<style>\n@import \"~leaflet.markercluster/dist/MarkerCluster.css\";\n@import \"~leaflet.markercluster/dist/MarkerCluster.Default.css\";\n@import url(\"https://fonts.googleapis.com/css?family=Quicksand\");\n#haikumarine {\n  font-family: Quicksand, Avenir, Helvetica, Arial, sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  /* text-align: center; */\n  /* color: #2c3e50; */\n  /* margin-top: 0;\n  box-sizing: border-box;  */\n}\nheader {\n  font-family: Quicksand;\n  /* display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: 15px;\n  background-color: #212121;\n  color: #fff; */\n}\nmain {\n  min-height: 100%;\n  overflow: hidden;\n  /* background-color: #ffe; */\n  justify-content: center;\n  align-items: center;\n}\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Haikumarine.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./Haikumarine.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Haikumarine.vue?vue&type=template&id=d8d5fa4e\"\nimport script from \"./Haikumarine.vue?vue&type=script&lang=js\"\nexport * from \"./Haikumarine.vue?vue&type=script&lang=js\"\nimport style0 from \"./Haikumarine.vue?vue&type=style&index=0&id=d8d5fa4e&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (this.user != '')?_c('v-form',{staticClass:\"my-0\"},[_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-card',{staticClass:\"mx-auto my-2\",attrs:{\"dark\":\"\"}},[_c('v-card-title',[_vm._v(_vm._s(_vm.t(\"Haikubox Settings\", \"Haikubox Settings\")))]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.email))]),_c('v-card',{staticClass:\"mx-2 my-8\",attrs:{\"color\":\"blue-grey darken-4\",\"dark\":\"\",\"max-width\":\"100%\"}},[_c('v-card-title',[_vm._v(_vm._s(_vm.t('Accessibility')))]),_c('v-switch',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(\n            'Hides Images and Graphs for Screen Readers'\n          ),expression:\"\\n            'Hides Images and Graphs for Screen Readers'\\n          \",modifiers:{\"bottom-start\":true}}],staticClass:\"mx-5 mr-5 py-0\",attrs:{\"dense\":\"\",\"label\":_vm.t('hidePics'),\"color\":\"info\"},on:{\"change\":function($event){return _vm.toggleHidePics()}},model:{value:(_vm.hidePics),callback:function ($$v) {_vm.hidePics=$$v},expression:\"hidePics\"}})],1),_c('v-snackbar',{attrs:{\"centered\":\"\"},scopedSlots:_vm._u([{key:\"action\",fn:function({ attrs }){return [_c('v-btn',_vm._b({attrs:{\"color\":\"blue\",\"text\":\"\"},on:{\"click\":function($event){_vm.alertSaveSuccess = false}}},'v-btn',attrs,false),[_vm._v(\" \"+_vm._s(_vm.t(\"Close\"))+\" \")])]}}],null,false,3713418589),model:{value:(_vm.alertSaveSuccess),callback:function ($$v) {_vm.alertSaveSuccess=$$v},expression:\"alertSaveSuccess\"}},[_vm._v(\" \"+_vm._s(_vm.t(\"Submitted\"))+\" \")]),_c('v-snackbar',{attrs:{\"centered\":\"\",\"timeout\":\"20000\"},scopedSlots:_vm._u([{key:\"action\",fn:function({ attrs }){return [_c('v-btn',_vm._b({attrs:{\"color\":\"blue\",\"text\":\"\"},on:{\"click\":function($event){_vm.unclaimUnlockSnackbar = false}}},'v-btn',attrs,false),[_vm._v(\" \"+_vm._s(_vm.t(\"Close\"))+\" \")])]}}],null,false,1783683285),model:{value:(_vm.unclaimUnlockSnackbar),callback:function ($$v) {_vm.unclaimUnlockSnackbar=$$v},expression:\"unclaimUnlockSnackbar\"}},[_vm._v(\" \"+_vm._s(_vm.t(\"Unclaim Warning\"))+\" \")]),_c('v-row',_vm._l((_vm.devicesByOwner),function(item,index){return _c('v-col',{key:item.componentKey,attrs:{\"cols\":\"12\"}},[_c('v-card',{staticClass:\"mx-2 my-8\",attrs:{\"color\":\"blue-grey darken-4\",\"dark\":\"\",\"max-width\":\"100%\"}},[_c('v-card-title',[_vm._v(\"Haikubox: \"+_vm._s(item.name)+\" \"),_c('v-spacer')],1),_c('v-card-subtitle',[_vm._v(\"Model: \"+_vm._s(item.model)+\" \"),_c('v-spacer'),_vm._v(\" FCC ID: \"+_vm._s(item.fcc)+\" \")],1),_c('v-row',[_c('v-col',[_c('v-text-field',{attrs:{\"placeholder\":\"Enter haikubox name\",\"label\":\"Name\",\"outlined\":\"\"},model:{value:(item.name),callback:function ($$v) {_vm.$set(item, \"name\", $$v)},expression:\"item.name\"}})],1),_c('v-col',[_c('v-btn',{staticClass:\"mx-2 my-4\",attrs:{\"color\":\"light-blue darken-1\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.saveName(item)}}},[_vm._v(_vm._s(_vm.t(\"Submit\"))+\" \")])],1)],1),_c('v-checkbox',{staticClass:\"mx-2\",attrs:{\"label\":_vm.t('Share Haikubox')},on:{\"change\":function($event){return _vm.getLink(item)}},model:{value:(item.shareLink),callback:function ($$v) {_vm.$set(item, \"shareLink\", $$v)},expression:\"item.shareLink\"}}),(item.linkName != null)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"9\"}},[_c('v-text-field',{staticClass:\"mx-2 my-6\",attrs:{\"value\":item.linkName,\"readonly\":\"\",\"solo\":\"\"}})],1),_c('v-col',{attrs:{\"cols\":\"2\"}},[_c('v-btn',{staticClass:\"my-8\",on:{\"click\":function($event){return _vm.copyLink(item.linkName)}}},[_vm._v(\"Copy\")]),_c('v-snackbar',{attrs:{\"absolute\":\"\",\"shaped\":\"\",\"color\":\"success\",\"timeout\":1000,\"icon\":\"check_circle\"},model:{value:(_vm.copyLinkSnackbar),callback:function ($$v) {_vm.copyLinkSnackbar=$$v},expression:\"copyLinkSnackbar\"}},[_c('v-icon',[_vm._v(\"mdi-check\")]),_vm._v(\" Copied \")],1)],1)],1):_vm._e(),_c('v-card-title',[_vm._v(_vm._s(_vm.t(\"Privacy\")))]),_c('v-checkbox',{staticClass:\"mx-2\",attrs:{\"label\":_vm.t('Make Private'),\"disabled\":!item.subscriptionActive},on:{\"change\":function($event){return _vm.saveShare(item)}},model:{value:(item.hideOnMap),callback:function ($$v) {_vm.$set(item, \"hideOnMap\", $$v)},expression:\"item.hideOnMap\"}}),(item.type === 'haikubox')?_c('v-checkbox',{staticClass:\"mx-2\",attrs:{\"label\":_vm.t('Share Cornell')},on:{\"change\":function($event){return _vm.saveSettings(item)}},model:{value:(item.shareBird),callback:function ($$v) {_vm.$set(item, \"shareBird\", $$v)},expression:\"item.shareBird\"}}):_vm._e(),(item.prepaidType != 'lifetime')?_c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.t(\"Billing\")))]),_c('v-card-subtitle'),(item.stripeCurrentPeriodEndUnix == null)?_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(_vm.t(\"Prepaid Period Ends\"))+\" \"+_vm._s(item.prepaidPeriodEndUnix))]):_vm._e(),(item.stripeCurrentPeriodEndUnix != null & item.stripeCurrentPeriodEndUnix==item.prepaidPeriodEndUnix)?_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(_vm.t(\"Membership First\"))+\" \"+_vm._s(item.stripeCurrentPeriodEndUnix)+\" \")]):_vm._e(),(item.stripeCurrentPeriodEndUnix != null & item.autoRenew == true  & item.stripeCurrentPeriodEndUnix!=item.prepaidPeriodEndUnix)?_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(_vm.t(\"Membership Renews On\"))+\" \"+_vm._s(item.stripeCurrentPeriodEndUnix)+\" \")]):_vm._e(),(item.stripeCurrentPeriodEndUnix != null & item.autoRenew == false)?_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(_vm.t(\"Membership Ends On\"))+\" \"+_vm._s(item.stripeCurrentPeriodEndUnix)+\" \")]):_vm._e(),(\n                  item.prepaidPeriodEndUnix ===\n                  item.stripeCurrentPeriodEndUnix\n                )?_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(_vm.t(\"Credit Card\"))+\" \")]):_vm._e(),(\n                  (_vm.goNativeActive == false) & (item.showPayButton == true) & (item.autoRenew != true)\n                )?_c('v-btn',{staticClass:\"mx-2 my-4\",attrs:{\"color\":\"light-green darken-1\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.getPaymentLink(item.serial)}}},[_vm._v(_vm._s(_vm.t(\"Renew Membership\"))+\" \")]):_vm._e(),((_vm.goNativeActive == true) & (item.showPayButton == true))?_c('v-subtitle',[_vm._v(_vm._s(_vm.t(\"Manage Membership\"))+\" https://listen.haikubox.com \")]):_vm._e(),((item.autoRenew == true) & (_vm.goNativeActive == false))?_c('v-btn',{staticClass:\"mx-2 my-4\",attrs:{\"color\":\"darken-1\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.cancelSubscription(item.serial)}}},[_vm._v(_vm._s(_vm.t(\"Cancel Auto-Renew\"))+\" \")]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.paymentLinkResponse)+\" \")],1):_vm._e(),_c('v-divider'),_c('v-card',[_c('v-card-subtitle',[_vm._v(_vm._s(_vm.t(\"Danger Zone\")))]),_c('v-btn',{staticClass:\"mx-2 my-4\",attrs:{\"disabled\":item.unclaimLocked,\"color\":\"blue-grey darken-3\"},on:{\"click\":function($event){return _vm.unclaimHaikubox(item.id, item.name, item.serial, index)}}},[_vm._v(\" \"+_vm._s(_vm.t(\"Unclaim Haikubox\"))+\" \")]),(item.unclaimLocked === true)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Unclaim Info')),expression:\"t('Unclaim Info')\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleLock(index)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-lock\")])],1):_vm._e(),(item.unclaimLocked === false)?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleLock(index)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-lock-open\")])],1):_vm._e()],1)],1)],1)}),1),_c('v-card',{staticClass:\"mx-2\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.t(\"Delete Account\")))]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.t(\"Delete Account Info1\")))]),_c('v-dialog',{attrs:{\"max-width\":\"290\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c('v-btn',_vm._g(_vm._b({staticClass:\"mx-4\",attrs:{\"disabled\":_vm.allowDeleteAccount,\"elevation\":\"2\",\"color\":\"primary\",\"dark\":\"\"}},'v-btn',attrs,false),on),[_vm._v(_vm._s(_vm.t(\"Delete Account\")))])]}}],null,false,289508042),model:{value:(_vm.deleteAccountDialog),callback:function ($$v) {_vm.deleteAccountDialog=$$v},expression:\"deleteAccountDialog\"}},[_c('v-card',[_c('v-card-title',{staticClass:\"text-h5\"},[_vm._v(\" \"+_vm._s(_vm.t(\"Delete Account\"))+\"? \")]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.t(\"Delete Account Info2\")))]),_c('v-card-text',[_vm._v(_vm._s(_vm.t(\"Delete Account Warning\"))+\" \")]),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"green darken-1\",\"text\":\"\"},on:{\"click\":function($event){_vm.deleteAccountDialog = false}}},[_vm._v(\" No \")]),_c('v-btn',{attrs:{\"color\":\"yellow darken-2\",\"text\":\"\"},on:{\"click\":function($event){return _vm.deleteAccount()}}},[_vm._v(\" Yes \")])],1)],1)],1)],1)],1)],1),_c('v-card',[_c('v-btn',{attrs:{\"to\":\"/privacy\"}},[_vm._v(_vm._s(_vm.t(\"Privacy\", \"Privacy\")))]),_c('v-btn',{attrs:{\"to\":\"/terms\"}},[_vm._v(_vm._s(_vm.t(\"Terms\", \"Terms\")))])],1)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-form v-if=\"this.user != ''\" class=\"my-0\">\n    <!-- <div v-if='this.haikuboxesLoaded===false && getDevicesByOwner()'></div> -->\n    <v-container fluid>\n      <v-card dark class=\"mx-auto my-2\">\n        <v-card-title>{{\n          t(\"Haikubox Settings\", \"Haikubox Settings\")\n        }}</v-card-title>\n        <v-card-subtitle>{{ email }}</v-card-subtitle>\n\n      <v-card color=\"blue-grey darken-4\"\n              dark\n              class=\"mx-2 my-8\"\n              max-width=\"100%\">\n        <v-card-title>{{ t('Accessibility')}}</v-card-title>\n        <v-switch\n            dense\n            class=\"mx-5 mr-5 py-0\"\n            v-model=\"hidePics\"\n            v-tooltip.bottom-start=\"\n              'Hides Images and Graphs for Screen Readers'\n            \"\n            :label=\"t('hidePics')\"\n            @change=\"\n              toggleHidePics()\n            \"\n            color=\"info\"\n          ></v-switch>\n      </v-card>\n       \n        <v-snackbar v-model=\"alertSaveSuccess\" centered>\n          {{ t(\"Submitted\") }}\n          <template v-slot:action=\"{ attrs }\">\n            <v-btn\n              color=\"blue\"\n              text\n              v-bind=\"attrs\"\n              @click=\"alertSaveSuccess = false\"\n            >\n              {{ t(\"Close\") }}\n            </v-btn>\n          </template>\n        </v-snackbar>\n\n        <v-snackbar v-model=\"unclaimUnlockSnackbar\" centered timeout=\"20000\">\n          {{ t(\"Unclaim Warning\") }}\n          <template v-slot:action=\"{ attrs }\">\n            <v-btn\n              color=\"blue\"\n              text\n              v-bind=\"attrs\"\n              @click=\"unclaimUnlockSnackbar = false\"\n            >\n              {{ t(\"Close\") }}\n            </v-btn>\n          </template>\n        </v-snackbar>\n\n        <v-row>\n          <v-col\n            v-for=\"(item, index) in devicesByOwner\"\n            :key=\"item.componentKey\"\n            cols=\"12\"\n          >\n            <v-card\n              color=\"blue-grey darken-4\"\n              dark\n              class=\"mx-2 my-8\"\n              max-width=\"100%\"\n            >\n              <v-card-title\n                >Haikubox: {{ item.name }}\n                <v-spacer></v-spacer>\n              </v-card-title>\n              <v-card-subtitle\n                >Model: {{ item.model }}\n                <v-spacer></v-spacer>\n                FCC ID: {{ item.fcc }}\n              </v-card-subtitle>\n              <v-row>\n                <v-col>\n                  <v-text-field\n                    v-model=\"item.name\"\n                    placeholder=\"Enter haikubox name\"\n                    label=\"Name\"\n                    outlined\n                  >\n                  </v-text-field>\n                </v-col>\n                <v-col>\n                  <v-btn\n                    color=\"light-blue darken-1\"\n                    @click=\"saveName(item)\"\n                    dark\n                    class=\"mx-2 my-4\"\n                    >{{ t(\"Submit\") }}\n                  </v-btn>\n                </v-col>\n              </v-row>\n\n              <v-checkbox\n                v-model=\"item.shareLink\"\n                class=\"mx-2\"\n                :label=\"t('Share Haikubox')\"\n                @change=\"getLink(item)\"\n              >\n              </v-checkbox>\n              <v-row v-if=\"item.linkName != null\" no-gutters>\n                <v-col cols=\"9\">\n                  <v-text-field\n                    class=\"mx-2 my-6\"\n                    :value=\"item.linkName\"\n                    readonly\n                    solo\n                  ></v-text-field>\n                </v-col>\n                <v-col cols=\"2\">\n                  <v-btn @click=\"copyLink(item.linkName)\" class=\"my-8\"\n                    >Copy</v-btn\n                  >\n                  <v-snackbar\n                    absolute\n                    shaped\n                    color=\"success\"\n                    v-model=\"copyLinkSnackbar\"\n                    :timeout=\"1000\"\n                    icon=\"check_circle\"\n                  >\n                    <v-icon>mdi-check</v-icon>\n                    Copied\n                  </v-snackbar>\n                </v-col>\n              </v-row>\n\n              <v-card-title>{{ t(\"Privacy\") }}</v-card-title>\n              <v-checkbox\n                @change=\"saveShare(item)\"\n                v-model=\"item.hideOnMap\"\n                class=\"mx-2\"\n                :label=\"t('Make Private')\"\n                :disabled=\"!item.subscriptionActive\"\n              >\n              </v-checkbox>\n              <v-checkbox\n                @change=\"saveSettings(item)\"\n                v-if=\"item.type === 'haikubox'\"\n                class=\"mx-2\"\n                v-model=\"item.shareBird\"\n                :label=\"t('Share Cornell')\"\n              >\n              </v-checkbox>\n              <!-- <v-card-text>Firmware Version: {{ item.version }}</v-card-text> -->\n\n              <v-card v-if=\"item.prepaidType != 'lifetime'\">\n                <v-card-title>{{ t(\"Billing\") }}</v-card-title>\n                <v-card-subtitle></v-card-subtitle>\n                <v-card-subtitle v-if=\"item.stripeCurrentPeriodEndUnix == null\">\n                  {{ t(\"Prepaid Period Ends\") }}\n                  {{ item.prepaidPeriodEndUnix }}</v-card-subtitle\n                >\n                <v-card-subtitle v-if=\"item.stripeCurrentPeriodEndUnix != null & item.stripeCurrentPeriodEndUnix==item.prepaidPeriodEndUnix\">\n                  {{ t(\"Membership First\") }}\n                  {{ item.stripeCurrentPeriodEndUnix }}\n                </v-card-subtitle>\n                <v-card-subtitle v-if=\"item.stripeCurrentPeriodEndUnix != null & item.autoRenew == true  & item.stripeCurrentPeriodEndUnix!=item.prepaidPeriodEndUnix\">\n                  {{ t(\"Membership Renews On\") }}\n                  {{ item.stripeCurrentPeriodEndUnix }}\n                </v-card-subtitle>\n                <v-card-subtitle v-if=\"item.stripeCurrentPeriodEndUnix != null & item.autoRenew == false\">\n                  {{ t(\"Membership Ends On\") }}\n                  {{ item.stripeCurrentPeriodEndUnix }}\n                </v-card-subtitle>\n                <v-card-subtitle\n                  v-if=\"\n                    item.prepaidPeriodEndUnix ===\n                    item.stripeCurrentPeriodEndUnix\n                  \"\n                >\n                  {{ t(\"Credit Card\") }}\n                </v-card-subtitle>\n                <v-btn\n                  v-if=\"\n                    (goNativeActive == false) & (item.showPayButton == true) & (item.autoRenew != true)\n                  \"\n                  color=\"light-green darken-1\"\n                  @click=\"getPaymentLink(item.serial)\"\n                  dark\n                  class=\"mx-2 my-4\"\n                  >{{ t(\"Renew Membership\") }}\n                </v-btn>\n                <v-subtitle\n                  v-if=\"(goNativeActive == true) & (item.showPayButton == true)\"\n                  >{{ t(\"Manage Membership\") }} https://listen.haikubox.com\n                </v-subtitle>\n                <!-- <v-btn\n                  v-if=\"goNativeActive==true & item.showPayButton==true\"\n                  color=\"light-green darken-1\"\n                  :href=\"'https://listen.haikubox.com'\"\n                  target=\"_blank\"\n                  dark\n                  class=\"mx-2 my-4\"\n                  >Manage Membership on Website \n                </v-btn> -->\n                <v-btn\n                  v-if=\"(item.autoRenew == true) & (goNativeActive == false)\"\n                  color=\"darken-1\"\n                  @click=\"cancelSubscription(item.serial)\"\n                  dark\n                  class=\"mx-2 my-4\"\n                  >{{ t(\"Cancel Auto-Renew\") }}\n                </v-btn>\n                {{ paymentLinkResponse }}\n              </v-card>\n\n              <v-divider></v-divider>\n              <v-card>\n                <v-card-subtitle>{{ t(\"Danger Zone\") }}</v-card-subtitle>\n                <v-btn\n                  :disabled=\"item.unclaimLocked\"\n                  color=\"blue-grey darken-3\"\n                  @click=\"\n                    unclaimHaikubox(item.id, item.name, item.serial, index)\n                  \"\n                  class=\"mx-2 my-4\"\n                >\n                  {{ t(\"Unclaim Haikubox\") }}\n                </v-btn>\n                <v-btn\n                  v-if=\"item.unclaimLocked === true\"\n                  icon\n                  @click=\"toggleLock(index)\"\n                  v-tooltip.bottom-start=\"t('Unclaim Info')\"\n                >\n                  <v-icon left>mdi-lock</v-icon>\n                </v-btn>\n                <v-btn\n                  v-if=\"item.unclaimLocked === false\"\n                  icon\n                  @click=\"toggleLock(index)\"\n                >\n                  <v-icon left>mdi-lock-open</v-icon>\n                </v-btn>\n              </v-card>\n            </v-card>\n          </v-col>\n        </v-row>\n\n        <v-card class=\"mx-2\">\n          <v-card-title>{{ t(\"Delete Account\") }}</v-card-title>\n          <v-card-subtitle>{{ t(\"Delete Account Info1\") }}</v-card-subtitle>\n          <v-dialog v-model=\"deleteAccountDialog\" max-width=\"290\">\n            <template v-slot:activator=\"{ on, attrs }\">\n              <v-btn\n                class=\"mx-4\"\n                :disabled=\"allowDeleteAccount\"\n                elevation=\"2\"\n                color=\"primary\"\n                dark\n                v-bind=\"attrs\"\n                v-on=\"on\"\n                >{{ t(\"Delete Account\") }}</v-btn\n              >\n            </template>\n            <v-card>\n              <v-card-title class=\"text-h5\">\n                {{ t(\"Delete Account\") }}?\n              </v-card-title>\n              <v-card-subtitle>{{ t(\"Delete Account Info2\") }}</v-card-subtitle>\n              <v-card-text>{{ t(\"Delete Account Warning\") }} </v-card-text>\n              <v-card-actions>\n                <v-spacer></v-spacer>\n                <v-btn\n                  color=\"green darken-1\"\n                  text\n                  @click=\"deleteAccountDialog = false\"\n                >\n                  No\n                </v-btn>\n                <v-btn color=\"yellow darken-2\" text @click=\"deleteAccount()\">\n                  Yes\n                </v-btn>\n              </v-card-actions>\n            </v-card>\n          </v-dialog>\n        </v-card>\n      </v-card>\n    </v-container>\n    <v-card>\n      <v-btn to=\"/privacy\">{{ t(\"Privacy\", \"Privacy\") }}</v-btn>\n      <v-btn to=\"/terms\">{{ t(\"Terms\", \"Terms\") }}</v-btn>\n    </v-card>\n  </v-form>\n</template>\n\n<script>\nimport { API } from \"aws-amplify\";\nimport { Auth } from \"aws-amplify\";\nimport {\n  haikuboxByOwner,\n  notifyBirdBySerial,\n  oneSignalBySerial,\n  getDeviceState,\n  stripeUrl,\n  getSubscription,\n  getUserSettings\n} from \"../graphql/queries\";\nimport {\n  updateDevice,\n  createShareMap,\n  updateShareMap,\n  deleteShareMap,\n  deleteDevice,\n  deleteNotifyBird,\n  deleteOneSignal,\n  createUnclaimHaikubox,\n  createOrg,\n  deleteOrg,\n  updateUserSettings,\n  createUserSettings\n} from \"../graphql/mutations\";\nvar moment = require(\"moment-timezone\");\nexport default {\n  name: \"Settings\",\n  props: [\"user\", \"email\"],\n  created() {\n    // get language from local storage or browser\n    const haikuboxLanguage = localStorage.getItem(\"haikuboxLanguage\");\n    if (haikuboxLanguage != null) {\n      this.setLanguage(haikuboxLanguage);\n    } else {\n      let browserLanguage = navigator.language || navigator.languages[0];\n      let browserLang = browserLanguage.split(\"-\")[0];\n      // console.log(\"language\", this.browserLang);\n      this.setLanguage(browserLang);\n    }\n  },\n  mounted() {\n    if (this.user == \"\") {\n      // console.log(\"no user....wait\");\n      setTimeout(async () => {\n        await this.getDevicesByOwner().then(() => {\n          this.getSubscriptionState();\n          this.getUserSettings();\n        });\n      }, 2000);\n    } else {\n      this.getDevicesByOwner().then(() => {\n        this.getSubscriptionState();\n        this.getUserSettings();\n      });\n    }\n\n    if (navigator.userAgent.indexOf(\"gonative\") > -1) {\n      this.goNativeActive = true;\n    }\n  },\n  data() {\n    return {\n      devicesByOwner: [],\n      claimCode: \"\",\n      alertChangeEmail: false,\n      emailChangeStatus: \"\",\n      alertSaveSuccess: false,\n      alertClaimSuccess: false,\n      alertClaimFail: false,\n      unclaimDialog: false,\n      unclaimUnlockSnackbar: false,\n      deleteAccountDialog: false,\n      allowDeleteAccount: false,\n      numberOfDevices: null,\n      shareMap: true,\n      goNativeActive: false,\n      haikuboxesLoaded: false,\n      copyLinkSnackbar: false,\n      paymentLinkResponse: \"\",\n      selectedLanguage: \"en\",\n      currentTranslations: {},\n      hidePics: false\n    };\n  },\n  methods: {\n    setLanguage(lang) {\n      // console.log(lang);\n      if (\n        (lang != \"da\") &\n        (lang != \"de\") &\n        (lang != \"en\") &\n        (lang != \"es\") &\n        (lang != \"fi\") &\n        (lang != \"fr\") &\n        (lang != \"it\") &\n        (lang != \"nl\") &\n        (lang != \"no\") &\n        (lang != \"pt\") &\n        (lang != \"sv\")\n      ) {\n        lang = \"en\";\n      }\n      this.loadTranslations(lang).then((translations) => {\n        this.currentTranslations = translations;\n      });\n      this.selectedLanguage = lang;\n    },\n    loadTranslations(lang) {\n      return fetch(`/I18N/${lang}.json`)\n        .then((response) => response.json())\n        .then((translations) => {\n          return translations;\n        });\n    },\n    t(key, defaultText) {\n      return this.currentTranslations[key] || defaultText;\n    },\n    async getDevicesByOwner() {\n      // if(this.user==='') {\n      //     this.haikuboxesLoaded = false;\n      //     return;\n      // }\n      const devicesByOwner = await API.graphql({\n        query: haikuboxByOwner,\n        variables: { owner: this.user },\n      });\n      this.devicesByOwner = devicesByOwner.data.haikuboxByOwner.items;\n\n      for (let i = 0; i < this.devicesByOwner.length; i++) {\n        // need to do this for reactivity to work\n        this.$set(\n          this.devicesByOwner[i],\n          \"componentKey\",\n          this.devicesByOwner[i].id\n        ); // key so can force DOM update\n        this.devicesByOwner[i].unclaimLocked = true;\n        if (this.devicesByOwner[i].shareLink == null) {\n          this.devicesByOwner[i].shareLink = false;\n        }\n        if (this.devicesByOwner[i].shareLink == true) {\n          this.devicesByOwner[i].linkName =\n            \"https://birds.haikubox.com/listen/\" + this.devicesByOwner[i].id;\n        }\n        if (this.devicesByOwner[i].serial.length == 21) {\n          this.devicesByOwner[i].model = \"Haikubox 2\";\n          this.devicesByOwner[i].fcc = \"2AC7Z-ESPS3WROOM1\";\n        } else {\n          this.devicesByOwner[i].model = \"Haikubox\";\n          this.devicesByOwner[i].fcc = \"2ABCB-RPICM4\";\n        }\n        if (this.devicesByOwner[i].smsPause == null) {\n          this.devicesByOwner[i].smsPause = true;\n        }\n      }\n\n      this.numberOfDevices = this.devicesByOwner.length;\n      this.allowDeleteAccount = this.numberOfDevices > 0;\n\n      // console.log(\"settings: devices by owner:\", this.devicesByOwner);\n    },\n    async getSubscriptionState() {\n      // query subscription state\n      for (let i = 0; i < this.devicesByOwner.length; i++) {\n        const subState = await API.graphql({\n          query: getSubscription,\n          variables: { id: this.devicesByOwner[i].serial },\n        });\n        // console.log(subState);\n        this.devicesByOwner[i].prepaidPeriodEndUnix = moment\n          .unix(Number(subState.data.getSubscription.prepaidPeriodEndUnix))\n          .locale(this.selectedLanguage)\n          .format(\"LL\");\n        this.devicesByOwner[i].prepaidType =\n          subState.data.getSubscription.prepaidType;\n        this.devicesByOwner[i].showPayButton = false;\n        let currentUnixTime = Math.floor(Date.now() / 1000); // convert ms to s\n        this.devicesByOwner[i].subscriptionActive = true;\n        if (subState.data.getSubscription.stripeCurrentPeriodEndUnix != null) {\n          this.devicesByOwner[i].stripeCurrentPeriodEndUnix = moment\n            .unix(\n              Number(subState.data.getSubscription.stripeCurrentPeriodEndUnix)\n            )\n            .locale(this.selectedLanguage)\n            .format(\"LL\");\n\n          // check if stripeCurrentPeriodEndUnix is within 1 month of expiring\n          let stripeUnix = Number(\n            subState.data.getSubscription.stripeCurrentPeriodEndUnix\n          );\n          if (stripeUnix - currentUnixTime < 0) {\n            this.devicesByOwner[i].subscriptionActive = false;\n          }\n          if (stripeUnix - currentUnixTime < 2630000) {\n            this.devicesByOwner[i].showPayButton = true;\n          }\n        } else {\n          // check if prepaidPeriodEnd is expired or within 2 months of expiring\n          let prepaidUnix = Number(\n            subState.data.getSubscription.prepaidPeriodEndUnix\n          );\n          // console.log('prepaid, current, diff', prepaidUnix, currentUnixTime, (prepaidUnix - currentUnixTime))\n          if (prepaidUnix - currentUnixTime < 5260000) {\n            this.devicesByOwner[i].showPayButton = true;\n          }\n          if (prepaidUnix - currentUnixTime < 0) {\n            this.devicesByOwner[i].subscriptionActive = false;\n          }\n        }\n        // subscriptionAutoRenew? (for showing Cancel Auto-renew button)\n        this.devicesByOwner[i].autoRenew =\n          subState.data.getSubscription.autoRenew;\n\n        // change key to update page\n        this.devicesByOwner[i].componentKey =\n          this.devicesByOwner[i].componentKey + \"1\";\n      }\n    },\n    async getUserSettings(){\n      const userSettings = await API.graphql({\n          query: getUserSettings,\n          variables: { id: this.user },\n        });\n        // no entry yet, update table\n        if(userSettings.data.getUserSettings==null){\n          this.hidePics = false;\n          // console.log(updateItem)\n          var createItem = {\n            id: this.user,\n            owner: this.user,\n            hidePics: false,\n            createdAt: moment.utc().format(),\n            updatedAt: moment.utc().format(),\n          }\n          await API.graphql({\n            query: createUserSettings,\n            variables: { input: createItem },\n          });\n        }\n        else{\n          this.hidePics = userSettings.data.getUserSettings.hidePics;\n        }\n    },\n    async toggleHidePics(){\n      var updateItem = {\n            id: this.user,\n            owner: this.user,\n            hidePics: this.hidePics,\n            updatedAt: moment.utc().format(),\n          }\n      await API.graphql({\n        query: updateUserSettings,\n        variables: { input: updateItem },\n      });\n    },\n    toggleLock(index) {\n      this.devicesByOwner[index].unclaimLocked =\n        !this.devicesByOwner[index].unclaimLocked;\n      this.devicesByOwner[index].id = this.devicesByOwner[index].id + \"_\";\n      if (this.devicesByOwner[index].unclaimLocked == false)\n        this.unclaimUnlockSnackbar = true;\n      // console.log(this.devicesByOwner[index]);\n    },\n    async saveSettings(item) {\n      // console.log(\"saveSettings\", item);\n      var updateItem = JSON.parse(JSON.stringify(item));\n      delete updateItem.unclaimLocked;\n      delete updateItem.fcc;\n      delete updateItem.model;\n      delete updateItem.linkName;\n      delete updateItem.prepaidPeriodEndUnix;\n      delete updateItem.prepaidType;\n      delete updateItem.stripeCurrentPeriodEndUnix;\n      delete updateItem.autoRenew;\n      delete updateItem.componentKey;\n      delete updateItem.showPayButton;\n      delete updateItem.subscriptionActive;\n      // console.log(updateItem)\n      updateItem.updatedAt = moment.utc().format();\n      await API.graphql({\n        query: updateDevice,\n        variables: { input: updateItem },\n      });\n    },\n    async saveName(item) {\n      this.saveShare(item);  // will also saveSettings\n      this.alertSaveSuccess = true;\n      if(item.shareLink == true){\n        await API.graphql({\n          query: deleteOrg,\n          variables: { input: { id: item.id } },\n        });\n        this.getLink(item); // update org table with new name\n      }\n    },\n    async saveShare(item) {\n      this.saveSettings(item);\n      // create randomized location for sharing\n      const shareLat = item.lat + (Math.random() - 0.5) / 50;\n      const shareLon = item.lon + (Math.random() - 0.5) / 50;\n      const name = item.name;\n      //console.log('togglePrivate', shareLat, shareLon);\n      let id = item.serial;\n      this.shareMap = !item.hideOnMap;\n      // console.log('shareMap', this.shareMap, id, shareLat, shareLon, name);\n      // say it is online so shows on map and makes people happy\n      // if it is disconnected it will update within a day\n      let connected = true;\n      if (this.shareMap === true) {\n        try {\n          const mapData = {\n            id,\n            shareLat,\n            shareLon,\n            name,\n            connected\n          };\n          await API.graphql({\n            query: updateShareMap,\n            variables: { input: mapData },\n          });\n        } catch (err) {\n          const mapData = {\n            id,\n            shareLat,\n            shareLon,\n            name,\n            connected\n          };\n          await API.graphql({\n            query: createShareMap,\n            variables: { input: mapData },\n          });\n        }\n      } else {\n        // delete existing\n        try {\n          await API.graphql({\n            query: deleteShareMap,\n            variables: { input: { id: item.serial } },\n          });\n        } catch (err) {\n          console.log(\"already deleted\");\n        }\n      }\n    },\n    async getLink(item) {\n      if (item.shareLink == true) {\n        item.linkName = \"https://birds.haikubox.com/listen/\" + item.id;\n        // write to org table\n        let publicDirectory = false;\n        let id = item.id;\n        let haikuboxName = item.name;\n        let lat = Math.round(item.lat * 100) / 100;\n        let lon = Math.round(item.lon * 100) / 100;\n        let owner = this.user;\n\n        // console.log(item);\n        // get timezone from deviceState\n        const deviceState = await API.graphql({\n          query: getDeviceState,\n          variables: { id: item.serial },\n        });\n        let tz = deviceState.data.getDeviceState.timezone;\n\n        // create org entry\n        const linkData = {\n          id,\n          haikuboxName,\n          lat,\n          lon,\n          tz,\n          publicDirectory,\n          owner,\n        };\n        await API.graphql({\n          query: createOrg,\n          variables: { input: linkData },\n        });\n      }\n      if (item.shareLink == false) {\n        item.linkName = null;\n        await API.graphql({\n          query: deleteOrg,\n          variables: { input: { id: item.id } },\n        });\n      }\n      // update device table\n      this.saveSettings(item);\n    },\n    async copyLink(linkName) {\n      this.copyLinkSnackbar = true;\n      await navigator.clipboard.writeText(linkName);\n    },\n    async clearNotifyBird(serial) {\n      // delete from notifyBird table\n      // get id's for serial in notifyBird table\n      // console.log(\"clearNotifyBird: \", serial)\n      var nextToken = null;\n      var notifyList = [];\n      do {\n        var notifyObjects = await API.graphql({\n          query: notifyBirdBySerial,\n          variables: { serial: serial },\n        });\n        var allNotifications = notifyObjects.data.notifyBirdBySerial.items;\n        // console.log(allNotifications)\n        nextToken = notifyObjects.data.notifyBirdBySerial.nextToken;\n        for (let i = 0; i < allNotifications.length; i++) {\n          notifyList.push(allNotifications[i].id);\n        }\n      } while (nextToken != null);\n\n      for (let i = 0; i < notifyList.length; i++) {\n        await API.graphql({\n          query: deleteNotifyBird,\n          variables: { input: { id: notifyList[i] } },\n        });\n      }\n    },\n    async clearOneSignal(serial) {\n      // delete from oneSignal table\n      // get id's for serial in oneSignal table\n      // console.log(\"clearOneSignal: \", serial)\n      var nextToken = null;\n      var oneSignalList = [];\n      do {\n        var oneSignalObjects = await API.graphql({\n          query: oneSignalBySerial,\n          variables: { serial: serial },\n        });\n        var allPlayers = oneSignalObjects.data.oneSignalBySerial.items;\n        nextToken = oneSignalObjects.data.oneSignalBySerial.nextToken;\n        for (let i = 0; i < allPlayers.length; i++) {\n          oneSignalList.push(allPlayers[i].id);\n        }\n      } while (nextToken != null);\n\n      for (let i = 0; i < oneSignalList.length; i++) {\n        await API.graphql({\n          query: deleteOneSignal,\n          variables: { input: { id: oneSignalList[i] } },\n        });\n      }\n    },\n    async unclaimHaikubox(id, name, serial, index) {\n      id = id.replaceAll(\"_\", \"\");\n      this.unclaimDialog = false;\n\n      // delete from Device Table\n      await API.graphql({\n        query: deleteDevice,\n        variables: { input: { id: id } },\n      });\n      this.devicesByOwner.splice(index, 1);\n      this.numberOfDevices = this.numberOfDevices--;\n      this.allowDeleteAccount = this.numberOfDevices > 0;\n\n      this.clearNotifyBird(serial);\n      this.clearOneSignal(serial);\n\n      // log unclaim in table\n      const unclaimData = {\n        owner: this.user,\n        serial: serial,\n        email: this.email,\n      };\n\n      await API.graphql({\n        query: createUnclaimHaikubox,\n        variables: { input: unclaimData },\n      });\n\n      // delete from shareMap table (if present)\n      try {\n        await API.graphql({\n          query: deleteShareMap,\n          variables: { input: { id: serial } },\n        });\n      } catch (err) {\n        console.log(\"Not present\");\n      }\n\n      // console.log(\"index\", index);\n      // console.log(\"removed from list\", this.devicesByOwner);\n    },\n    async deleteAccount() {\n      // console.log('delete account');\n      this.deleteAccountDialog = false;\n\n      try {\n        const userToDelete = await Auth.currentAuthenticatedUser();\n        // console.log(\"userToDelete\", userToDelete);\n        userToDelete.deleteUser();\n        setTimeout(this.refreshPage, 5000);\n      } catch (error) {\n        console.log(\"Error deleting user\", error);\n      }\n    },\n    async refreshPage() {\n      await Auth.signOut();\n      this.$router.push({ path: \"/\" });\n      location.reload();\n    },\n    async getPaymentLink(serial) {\n      // console.log('getPaymentLink', serial);\n      try {\n        const stripeReturn = await API.graphql({\n          query: stripeUrl,\n          variables: {\n            serial: serial,\n            owner: this.user,\n            email: this.email,\n            autoRenew: true,\n          },\n        });\n        const item = JSON.parse(stripeReturn.data.stripeUrl);\n        console.log(item);\n        // if get 303 with url, redirect\n        // anything else show Error message\n        if (item.statusCode == 303) {\n          this.paymentLinkResponse = \"\";\n          window.location = item.url;\n        } else {\n          this.paymentLinkResponse = item.msg;\n        }\n      } catch (err) {\n        console.log(\"Not present\");\n      }\n    },\n    async cancelSubscription(serial) {\n      console.log(\"cancelSubscription\", serial);\n      try {\n        const stripeReturn = await API.graphql({\n          query: stripeUrl,\n          variables: {\n            serial: serial,\n            owner: this.user,\n            email: this.email,\n            autoRenew: false,\n          },\n        });\n        const item = JSON.parse(stripeReturn.data.stripeUrl);\n        console.log(item);\n        this.paymentLinkResponse = item.msg;\n      } catch (err) {\n        console.log(\"Query failed\");\n      }\n    },\n  },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=2652a41a\"\nimport script from \"./Settings.vue?vue&type=script&lang=js\"\nexport * from \"./Settings.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('v-card',[_c('v-card-title',[_vm._v(\"Privacy Notice\")]),_c('v-card-title',[_vm._v(\"Haikubox Privacy Policy\")]),_c('v-card-subtitle',[_vm._v(\" Effective Date: June 20, 2022 \")]),_c('v-card-text',[_vm._v(\" Loggerhead Instruments, Inc., Haikubox and our affiliates (collectively “Haikubox”) respect your concerns about privacy. This Privacy Notice is a binding part of Haikubox Terms of Service and describes how Haikubox collects and processes your personal information through Haikubox websites, devices, products, services, online, and applications that reference this Privacy Notice (collectively “Haikubox Services”). This Privacy Notice also describes the measures we take to safeguard the personal information and how individuals can contact us about our privacy practices.\")]),_c('v-card-text',{staticClass:\"font-weight-bold\"},[_vm._v(\" By using Haikubox Services, you are consenting to the practices described in this Privacy Notice. This notice may change from time to time, so you should check it frequently. \")]),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"WHAT PERSONAL INFORMATION DOES HAIKUBOX COLLECT?\")]),_c('v-card-subtitle',{staticClass:\"font-weight-bold\"},[_vm._v(\"Information You Give Us\")]),_c('v-card-text',[_vm._v(\" We receive and store any information you provide in connection with the Haikubox Services. You may choose not to provide certain information, but then you might not be able to take advantage of many of our Haikubox Services. The types of personal information we obtain include: \"),_c('ol',[_c('li',[_vm._v(\" Contact information, such as name, phone number, and email and postal address; \")]),_c('li',[_vm._v(\" Account information, such as online password and other log-in details used to access Haikubox Services; \")]),_c('li',[_vm._v(\" Payment information, such as name, billing address and payment card details, including card number, expiration date and security code, which is collected and stored by our third-party payment processor on our behalf; \")]),_c('li',[_vm._v(\"The geolocation of your Haikubox;\")]),_c('li',[_vm._v(\" Technical information about your Haikubox product, such as your Wi-Fi network information and signal strength, and your Haikubox product’s model, serial number and software version; \")]),_c('li',[_vm._v(\" Data about your interactions with our websites and mobile apps; Social media handles, content and other data posted on our official social media pages; \")]),_c('li',[_vm._v(\" Information we obtain from third-party social media services (e.g., Facebook, Twitter) if you choose to link to your Haikubox account through these services (including when you share Haikubox audio or content via your social media account); \")]),_c('li',[_vm._v(\" Other personal information contained in content you submit to us, such as through our customer support tools on our websites or mobile apps. \")])]),_c('v-card-subtitle',{staticClass:\"font-weight-bold\"},[_vm._v(\"Information We Collect from Your Use of Haikubox\")]),_c('v-card-text',[_vm._v(\" The Haikubox Services are designed to allow you to listen to Haikubox audio detections from your computer or mobile device, and collaborate with others in your community. To provide you with these services, we obtain content (and related information) that is captured and recorded when using your Haikubox, such as: \"),_c('ol',[_c('li',[_vm._v(\"Audio recordings;\")]),_c('li',[_vm._v(\"Comments;\")]),_c('li',[_vm._v(\" Data our products collect from their surrounding environment to perform their functions (such as temperature). \")])])]),_c('v-card-text',{staticClass:\"font-weight-bold\"},[_vm._v(\" Privacy laws in your jurisdiction may apply to your use of our products and services. You are solely responsible for ensuring that you comply with applicable law when you use our products or services. For example, you may need to display a notice that alerts visitors to your home that you are using our products or services. Capturing, recording, or sharing audio content that involves other people may affect their privacy rights. \")]),_c('v-card-subtitle',{staticClass:\"font-weight-bold\"},[_vm._v(\"Information We Obtain by Automated Means\")]),_c('v-card-text',[_vm._v(\" When you interact with our products and services, we obtain certain information by automated means, such as cookies, web server logs, web beacons, and other technologies. \"),_c('ol',[_c('li',[_vm._v(\" A “cookie” is a text file that websites send to a visitor’s computer or other Internet-connected device to uniquely identify the visitor’s browser or to store information or settings in the browser. \")]),_c('li',[_vm._v(\" A “web beacon,” also known as an Internet tag, pixel tag or clear GIF, links web pages to web servers and their cookies and may be used to transmit information collected through cookies back to a web server. \")])])]),_c('v-card-text',[_vm._v(\"We may use these automated technologies to collect information about your equipment, browsing actions, and usage patterns. The information we obtain in this manner may include: \"),_c('ol',[_c('li',[_vm._v(\"Your device IP address;\")]),_c('li',[_vm._v(\"Identifiers associated with your devices;\")]),_c('li',[_vm._v(\"Types of devices connected to Haikubox Services;\")]),_c('li',[_vm._v(\"Web browser and device characteristics;\")]),_c('li',[_vm._v(\"Language preferences;\")]),_c('li',[_vm._v(\"Referring/exit pages;\")]),_c('li',[_vm._v(\"Clickstream data;\")]),_c('li',[_vm._v(\"Dates and times of website or app visits.\")])]),_c('v-card-text',[_vm._v(\" Your browser may tell you how to be notified when you receive certain types of cookies or how to restrict or disable certain types of cookies. Please note, however, that without cookies you may not be able to use all of the features of our online services. For mobile devices, you can manage how your device and browser share certain device data by adjusting the privacy and security settings on your mobile device.\")])],1)],1)],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"FOR WHAT PURPOSE DOES HAIKUBOX USE YOUR PERSONAL INFORMATION?\")]),_c('v-card-text',[_vm._v(\" We use your personal information to operate, provide, develop, and improve the products and services that we offer our customers. The table below explains what we use (process) your personal information for and our reasons for doing so: \"),_c('v-simple-table',{attrs:{\"fixed-header\":\"\",\"height\":\"300px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',{staticClass:\"text-left\"},[_vm._v(\" What we use your personal information for \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Our reasons \")])])]),_c('tbody',_vm._l((_vm.personalInfo),function(item){return _c('tr',{key:item.name},[_c('td',[_vm._v(_vm._s(item.name))]),_c('td',[_vm._v(_vm._s(item.reason))])])}),0)]},proxy:true}])}),_c('v-card-text',[_vm._v(\" We also may use the personal information we collect about you in other ways for which we provide specific notice at the time of collection and obtain your consent if required by applicable law.\")])],1)],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"WHAT ABOUT INTERNET-BASED ADVERTISING?\")]),_c('v-card-text',[_vm._v(\"When you use our websites and apps, information about your online activities may be collected to provide you with advertising about products and services tailored to your interests. This section of our Privacy Notice provides details and explains how to exercise your choices. You may see our ads on other websites or mobile apps because we participate in advertising networks. Ad networks allow us to target our messaging to individuals considering demographic data, individuals’ inferred interests and browsing context. These networks track individuals’ online activities over time by collecting information through automated means, including through the use of cookies, web server logs, web beacons and other similar technologies. The networks use this information to show ads that may be tailored to individuals’ interests, to track individuals’ browsers or devices across multiple websites, and to build a profile of individuals’ online browsing activities. The information our ad networks may collect includes data about individuals’ visits to websites that participate in the relevant ad networks, such as the pages or ads viewed and the actions taken on the websites. This data collection takes place both on our websites and on third-party websites that participate in the ad networks. This process also helps us track the effectiveness of our marketing efforts. You have the right to opt out of receiving promotional communications at any time by: \"),_c('ol',[_c('li',[_vm._v(\"Contacting us at unsubscribe@haikubox.com\")]),_c('li',[_vm._v(\" Using the “unsubscribe” link in emails or “stop” number in texts; or \")]),_c('li',[_vm._v(\"Updating your marketing preferences in your settings.\")])]),_vm._v(\" We may ask you to confirm or update your marketing preferences if you instruct us to provide further products and/or services in the future, or if there are changes in the law, regulation, or the structure of our business. \")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"DOES HAIKUBOX SHARE THE INFORMATION IT RECEIVES?\")]),_c('v-card-text',[_vm._v(\"We may share our customers’ personal information only as described below and with our affiliates and subsidiaries. \")]),_c('v-card-subtitle',{staticClass:\"font-weight-bold\"},[_vm._v(\" Third-Party Research: \")]),_c('v-card-text',[_vm._v(\" We share the bird detections and audio as well as labeled data with the Cornell University Laboratory of Ornithology, so that they may use these data for scientific research and to help improve the accuracy of the bird call detection. This information sharing may include your unique user ID and email address. Dolphin detections and audio are shared with the Sarasota Dolphin Research Program and their partners for scientific research. You may opt out of sharing data from your Haikubox by changing the settings for your box on the website.\")]),_c('v-card-subtitle',{staticClass:\"font-weight-bold\"},[_vm._v(\"Third-Party Service Providers: \")]),_c('v-card-text',[_vm._v(\"We employ other companies and individuals to perform certain functions on our behalf. Examples include storing and analyzing data, providing customer service, advertising, payment processing, and order fulfillment. We do not authorize our service providers to use or disclose your personal information except as necessary to perform services on our behalf or comply with legal requirements. \")]),_c('v-card-subtitle',{staticClass:\"font-weight-bold\"},[_vm._v(\"Business Partners: \")]),_c('v-card-text',[_vm._v(\"We partner with other businesses with whom we jointly offer products and services, and for payment processing and fraud prevention purposes. \")]),_c('v-card-subtitle',{staticClass:\"font-weight-bold\"},[_vm._v(\"Business Transfers: \")]),_c('v-card-text',[_vm._v(\"As we continue to develop our business, we might sell or buy other businesses or services. In such transactions, personal information generally is one of the transferred business assets but remains subject to the promises made in any pre-existing privacy notice (unless, of course, the individual consents otherwise). Also, in the event that Haikubox or substantially all of its assets are acquired, we reserve the right to transfer any personal information we have about you. This includes but is not limited to a merger, acquisition, joint venture, reorganization, divesture, dissolution, or liquidation. \")]),_c('v-card-subtitle',{staticClass:\"font-weight-bold\"},[_vm._v(\"Protection of Haikubox and Others: \")]),_c('v-card-text',[_vm._v(\"We may release account and other personal information when we believe release is appropriate to comply with the law, enforce or apply our Terms of Service and other agreements, or protect the rights, property, or safety of Haikubox, our users, or others. This may include exchanging information with other companies and organizations for fraud protection and credit risk reduction. \")]),_c('v-card-text',[_vm._v(\" We do not sell or otherwise share personal information about you except as described in this Privacy Notice. \")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',[_vm._v(\"WHAT CHOICES DO I HAVE?\")]),_c('v-card-text',[_c('ol',[_c('li',[_vm._v(\" You may choose not to receive marketing e-mails from us by clicking on the unsubscribe link in any marketing e-mail or by sending an email to unsubscribe@haikubox.com. \")]),_c('li',[_vm._v(\" You may choose to keep your audio recordings private, so that other Haikubox users cannot access or listen to those recordings. This is configured on the Settings page. \")]),_c('li',[_vm._v(\" To the extent required by applicable law, you may have the right to request access to or delete your personal data. If you wish to do this, please contact customer service at support@haikubox.com. \")]),_c('li',[_vm._v(\" Please be advised that we do need to send you certain communications about our products and services, and you may not opt out of those communications. This includes, but is not limited to, information about billing. \")])])])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',[_vm._v(\"NOTICE TO CALIFORNIA RESIDENTS\")]),_c('v-simple-table',{attrs:{\"fixed-header\":\"\",\"height\":\"300px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',{staticClass:\"text-left\"},[_vm._v(\" Categories of Personal Information \")]),_c('th',{staticClass:\"text-left\"},[_vm._v(\" Specific Types of Personal Information Collected \")])])]),_c('tbody',_vm._l((_vm.californiaInfo),function(item){return _c('tr',{key:item.name},[_c('td',[_vm._v(_vm._s(item.name))]),_c('td',[_vm._v(_vm._s(item.reason))])])}),0)]},proxy:true}])})],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"HOW LONG DOES HAIKUBOX KEEP PERSONAL INFORMATION? \")]),_c('v-card-text',[_vm._v(\" We will keep your personal information while you have an account with us or while we are providing products and/or services to you. Thereafter, we will keep your personal information as long as is necessary: \"),_c('ol',[_c('li',[_vm._v(\" To respond to any questions, complaints, or claims made by your or on your behalf; \")]),_c('li',[_vm._v(\"To show that we treated you fairly, or\")]),_c('li',[_vm._v(\"To keep records required by law.\")])]),_vm._v(\" We will not retain your personal information for longer than necessary for the purpose set out in this policy. Different retention periods apply for different types of personal information. When it is no longer necessary to retain your personal information, we will delete or anonymize it. \")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"TRANSFERRING YOUR PERSONAL INFORMATION OUT OF THE EEA\")]),_c('v-card-text',[_vm._v(\" To deliver services to you, it is sometimes necessary for us to share your personal information outside the European Economic Area (EEA), for example: With our office outside the EEA;  With your and our service providers located outside the EEA; If you are based outside the EEA; or Where there is an international dimension to the services we are providing to you. These transfers are subject to special rules under European and UK data protection law. If you would like further information, please contact us or our Data Protection Officer (see “How To Contact Us” below). \")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"YOUR RIGHTS UNDER THE GENERAL DATA PROTECTION REGULATION (GDPR)\")]),_c('v-card-text',[_vm._v(\" Right to Access: The right to be provided with a copy of your personal information (the right of access).\")]),_c('v-card-text',[_vm._v(\" Right to Rectification: The right to require us to correct any mistakes in your personal information. \")]),_c('v-card-text',[_vm._v(\"Right to be Forgotten: The right to require us to delete your personal information—in certain situations. \")]),_c('v-card-text',[_vm._v(\"Right to Restriction of Processing: The right to require us to restrict processing of your personal information—in certain circumstances, e.g., if you contest the accuracy of the data \")]),_c('v-card-text',[_vm._v(\"Right to Data Portability The right to receive the personal information you provided to us, in a structured, commonly used and machine-readable format and/or transmit that data to a third party—in certain situations \")]),_c('v-card-text',[_vm._v(\"Right to Object The right to object: at any time to your personal information being processed for direct marketing (including profiling); in certain other situations to our continued processing of your personal information, e.g. processing carried out for the purpose of our legitimate interests. \")]),_c('v-card-text',[_vm._v(\"Right Not to be Subject to Automated Individual Decision-Making The right not to be subject to a decision based solely on automated processing (including profiling) that produces legal effects concerning you or similarly significantly affects you \")]),_c('v-card-text',[_vm._v(\"For further information on each of those rights, including the circumstances in which they apply, see the guidance from the UK Information Commissioner's Office (ICO) on individual rights under the General Data Protection Regulation.\")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"YOUR RIGHTS UNDER THE CCPA\")]),_c('v-card-text',[_vm._v(\" You have the right under the California Consumer Privacy Act of 2018 (CCPA) and certain other privacy and data protection laws, as applicable, to exercise free of charge:\")]),_c('v-card-subtitle',[_vm._v(\"Disclosure of Personal Information We Collect About You\")]),_c('v-card-text',[_vm._v(\" You have the right to know: \"),_c('ol',[_c('li',[_vm._v(\" The categories of personal information we have collected about you; \")]),_c('li',[_vm._v(\" The categories of sources from which the personal information is collected; \")]),_c('li',[_vm._v(\" Our business or commercial purpose for collecting or selling personal information; \")]),_c('li',[_vm._v(\" The categories of third parties with whom we share personal information, if any; and \")]),_c('li',[_vm._v(\" The specific pieces of personal information we have collected about you. \")])])]),_c('v-card-text',[_vm._v(\" Please note that we are not required to: \"),_c('ol',[_c('li',[_vm._v(\" Retain any personal information about you that was collected for a single one-time transaction if, in the ordinary course of business, that information about you is not retained; \")]),_c('li',[_vm._v(\" Reidentify or otherwise link any data that, in the ordinary course of business, is not maintained in a manner that would be considered personal information; or \")]),_c('li',[_vm._v(\" Provide the personal information to you more than twice in a 12-month period. \")])])]),_c('v-card-subtitle',[_vm._v(\"Personal Information Sold or Used for a Business Purpose\")]),_c('v-card-text',[_vm._v(\"We will not sell or disclose your personal information. Use of the Haikubox service requires the location of the haikubox device. \")]),_c('v-card-subtitle',[_vm._v(\"Right to Deletion\")]),_c('v-card-text',[_vm._v(\"Subject to certain exceptions set out below, on receipt of a verifiable request from you, we will: • Delete your personal information from our records; and • Direct any service providers to delete your personal information from their records. Please note that we may not delete your personal information if it is necessary to: • Complete the transaction for which the personal information was collected, fulfill the terms of a written warranty or product recall conducted in accordance with federal law, provide a good or service requested by you, or reasonably anticipated within the context of our ongoing business relationship with you, or otherwise perform a contract between you and us; • Detect security incidents, protect against malicious, deceptive, fraudulent, or illegal activity; or prosecute those responsible for that activity; • Debug to identify and repair errors that impair existing intended functionality; • Exercise free speech, ensure the right of another consumer to exercise his or her right of free speech, or exercise another right provided for by law; • Comply with the California Electronic Communications Privacy Act; • Engage in public or peer-reviewed scientific, historical, or statistical research in the public interest that adheres to all other applicable ethics and privacy laws, when our deletion of the information is likely to render impossible or seriously impair the achievement of such research, provided we have obtained your informed consent; • Enable solely internal uses that are reasonably aligned with your expectations based on your relationship with us; • Comply with an existing legal obligation; or • Otherwise use your personal information, internally, in a lawful manner that is compatible with the context in which you provided the information. \")]),_c('v-card-subtitle',[_vm._v(\"Protection Against Discrimination\")]),_c('v-card-text',[_vm._v(\"You have the right to not be discriminated against by us because you exercised any of your rights under the CCPA. This means we cannot, among other things: • Deny goods or services to you; • Charge different prices or rates for goods or services, including through the use of discounts or other benefits or imposing penalties; • Provide a different level or quality of goods or services to you; or • Suggest that you will receive a different price or rate for goods or services or a different level or quality of goods or services. Please note that we may charge a different price or rate or provide a different level or quality of goods and/or services to you, if that difference is reasonably related to the value provided to our business by your personal information. \")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"HOW TO EXERCISE YOUR RIGHTS\")]),_c('v-card-text',[_vm._v(\" If you would like to exercise any of your rights as described in this Privacy Policy, please: • Email/write to us at support@haikubox.com; Haikubox 6576 Palmer Park Circle Sarasota, FL 34238. Please note that you may only make a CCPA-related data access or data portability disclosure request twice within a 12-month period. If you choose to contact directly by email, or in writing, you will need to provide us with: • Enough information to identify you (e.g., your full name, address and customer or matter reference number); • Proof of your identity and address (e.g., a copy of your driving license or passport and a recent utility or credit card bill); and • A description of what right you want to exercise and the information to which your request relates. We are not obligated to make a data access or data portability disclosure if we cannot verify that the person making the request is the person about whom we collected information, or is someone authorized to act on such person’s behalf. Any personal information we collect from you to verify your identity in connection with your request will be used solely for the purposes of verification. \")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"HOW TO FILE A GDPR COMPLAINT\")]),_c('v-card-text',[_vm._v(\" We hope that we can resolve any query or concern you raise about our use of your information. The General Data Protection Regulation also gives you right to lodge a complaint with a supervisory authority, in the European Union (or European Economic Area) state where you work, normally live, or where any alleged infringement of data protection laws occurred. The supervisory authority in each country can be found at https://edpb.europa.eu/about-edpb/board/members_en. \")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"OTHER THIRD-PARTY SERVICES AND FEATURES\")]),_c('v-card-text',[_vm._v(\" Our website and mobile apps may provide links to other online services for your convenience and information, and may include third-party features such as apps, tools, payment services, widgets and plug-ins (e.g., Facebook or Twitter buttons). If you opt-in to push notifications, information about your phone will be stored by OneSignal, so that we may send appropriate notifications. These third-party services and features may operate independently from us. The privacy practices of the relevant third parties, including details on the information they may collect about you, is subject to the privacy statements of these parties, which we strongly suggest you review. To the extent any linked online services or third-party features are not owned or controlled by us, Haikubox is not responsible for these third parties’ information practices. By using or engaging with such services and features, you are requesting and authorizing us to transfer or provide access to information on your behalf, for example, your account ID, email address, data about your Haikubox device usage or collected by your Haikubox device, etc.\")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"HOW DOES HAIKUBOX PROTECT PERSONAL INFORMATION\")]),_c('v-card-text',[_vm._v(\" We maintain administrative, technical and physical safeguards designed to protect personal information against accidental, unlawful or unauthorized destruction, loss, alteration, access, disclosure or use.\")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"HOW CAN I REQUEST DELETION OF MY PERSONAL INFORMATION?\")]),_c('v-card-text',[_vm._v(\" You may have the right under the California Consumer Privacy Act, to request information about the collection of your personal information by Haikubox, or access to or deletion of your personal information. If you wish to do any of these things, please contact support@haikubox.com. Haikubox will not discriminate against any consumer for exercising their rights under the California Consumer Privacy Act.\")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"DOES HAIKUBOX SELL PERSONAL INFORMATION?\")]),_c('v-card-text',[_vm._v(\" No. In the twelve months prior to the effective date of this Disclosure, Haikubox has not sold any personal information of consumers, as those terms are defined under the California Consumer Privacy Act. \")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"POLICIES FOR CHILDREN\")]),_c('v-card-text',[_vm._v(\" We recognize the importance of protecting children's online privacy. Haikubox's products and services are intended for a general audience and are not directed to children. We do not knowingly collect personal information online from children under the age of 13.\")])],1),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"UPDATES TO OUR PRIVACY NOTICE \")]),_c('v-card-text',[_vm._v(\" This Privacy Notice may be updated periodically and without prior notice to you to reflect changes in our personal information practices. We will post a notice on our websites and mobile apps to notify you of significant changes to our Privacy Notice and indicate at the top of the notice when it was most recently updated.\")])],1),_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(\"HOW TO CONTACT US\")]),_c('v-card-text',[_vm._v(\" If you have any questions about this Privacy Notice, or if you would like us to update information we have about you, change your preferences or exercise other applicable data protection rights, please contact us by e-mail at support@haikubox.com or write to us at: Loggerhead Instruments-Haikubox 6576 Palmer Park Circle Sarasota, FL 34238\")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div>\n    <v-card>\n      <v-card-title>Privacy Notice</v-card-title>\n      <v-card-title>Haikubox Privacy Policy</v-card-title>\n      <v-card-subtitle>\n        Effective Date: June 20, 2022\n      </v-card-subtitle>\n      <v-card-text>\n        Loggerhead Instruments, Inc., Haikubox and our affiliates (collectively\n        “Haikubox”) respect your concerns about privacy. This Privacy Notice is\n        a binding part of Haikubox Terms of Service and describes how Haikubox\n        collects and processes your personal information through Haikubox\n        websites, devices, products, services, online, and applications that\n        reference this Privacy Notice (collectively “Haikubox Services”). This\n        Privacy Notice also describes the measures we take to safeguard the\n        personal information and how individuals can contact us about our\n        privacy practices.</v-card-text\n      >\n      <v-card-text class=\"font-weight-bold\">\n        By using Haikubox Services, you are consenting to the practices\n        described in this Privacy Notice. This notice may change from time to\n        time, so you should check it frequently.\n      </v-card-text>\n      <v-card elevation=\"0\">\n        <v-card-title  style=\"word-break: break-word\"\n          >WHAT PERSONAL INFORMATION DOES HAIKUBOX COLLECT?</v-card-title\n        >\n        <v-card-subtitle class=\"font-weight-bold\"\n          >Information You Give Us</v-card-subtitle\n        >\n        <v-card-text>\n          We receive and store any information you provide in connection with\n          the Haikubox Services. You may choose not to provide certain\n          information, but then you might not be able to take advantage of many\n          of our Haikubox Services. The types of personal information we obtain\n          include:\n          <ol>\n            <li>\n              Contact information, such as name, phone number, and email and\n              postal address;\n            </li>\n            <li>\n              Account information, such as online password and other log-in\n              details used to access Haikubox Services;\n            </li>\n            <li>\n              Payment information, such as name, billing address and payment\n              card details, including card number, expiration date and security\n              code, which is collected and stored by our third-party payment\n              processor on our behalf;\n            </li>\n            <li>The geolocation of your Haikubox;</li>\n            <li>\n              Technical information about your Haikubox product, such as your\n              Wi-Fi network information and signal strength, and your Haikubox\n              product’s model, serial number and software version;\n            </li>\n            <li>\n              Data about your interactions with our websites and mobile apps;\n              Social media handles, content and other data posted on our\n              official social media pages;\n            </li>\n            <li>\n              Information we obtain from third-party social media services\n              (e.g., Facebook, Twitter) if you choose to link to your Haikubox\n              account through these services (including when you share Haikubox\n              audio or content via your social media account);\n            </li>\n            <li>\n              Other personal information contained in content you submit to us,\n              such as through our customer support tools on our websites or\n              mobile apps.\n            </li>\n          </ol>\n\n          <v-card-subtitle class=\"font-weight-bold\"\n            >Information We Collect from Your Use of Haikubox</v-card-subtitle\n          >\n          <v-card-text>\n            The Haikubox Services are designed to allow you to listen to\n            Haikubox audio detections from your computer or mobile device, and\n            collaborate with others in your community. To provide you with these\n            services, we obtain content (and related information) that is\n            captured and recorded when using your Haikubox, such as:\n            <ol>\n              <li>Audio recordings;</li>\n              <li>Comments;</li>\n              <li>\n                Data our products collect from their surrounding environment to\n                perform their functions (such as temperature).\n              </li>\n            </ol>\n          </v-card-text>\n          <v-card-text class=\"font-weight-bold\">\n            Privacy laws in your jurisdiction may apply to your use of our\n            products and services. You are solely responsible for ensuring that\n            you comply with applicable law when you use our products or\n            services. For example, you may need to display a notice that alerts\n            visitors to your home that you are using our products or services.\n            Capturing, recording, or sharing audio content that involves other\n            people may affect their privacy rights.\n          </v-card-text>\n\n          <v-card-subtitle class=\"font-weight-bold\"\n            >Information We Obtain by Automated Means</v-card-subtitle\n          >\n          <v-card-text>\n            When you interact with our products and services, we obtain certain\n            information by automated means, such as cookies, web server logs,\n            web beacons, and other technologies.\n\n            <ol>\n              <li>\n                A “cookie” is a text file that websites send to a visitor’s\n                computer or other Internet-connected device to uniquely identify\n                the visitor’s browser or to store information or settings in the\n                browser.\n              </li>\n              <li>\n                A “web beacon,” also known as an Internet tag, pixel tag or\n                clear GIF, links web pages to web servers and their cookies and\n                may be used to transmit information collected through cookies\n                back to a web server.\n              </li>\n            </ol>\n          </v-card-text>\n          <v-card-text\n            >We may use these automated technologies to collect information\n            about your equipment, browsing actions, and usage patterns. The\n            information we obtain in this manner may include:\n            <ol>\n              <li>Your device IP address;</li>\n              <li>Identifiers associated with your devices;</li>\n              <li>Types of devices connected to Haikubox Services;</li>\n              <li>Web browser and device characteristics;</li>\n              <li>Language preferences;</li>\n              <li>Referring/exit pages;</li>\n              <li>Clickstream data;</li>\n              <li>Dates and times of website or app visits.</li>\n            </ol>\n\n            <v-card-text>\n              Your browser may tell you how to be notified when you receive\n              certain types of cookies or how to restrict or disable certain\n              types of cookies. Please note, however, that without cookies you\n              may not be able to use all of the features of our online services.\n              For mobile devices, you can manage how your device and browser\n              share certain device data by adjusting the privacy and security\n              settings on your mobile device.</v-card-text\n            >\n          </v-card-text>\n        </v-card-text></v-card\n      >\n      <v-card elevation=\"0\">\n        <v-card-title  style=\"word-break: break-word\"\n          >FOR WHAT PURPOSE DOES HAIKUBOX USE YOUR PERSONAL\n          INFORMATION?</v-card-title\n        >\n        <v-card-text>\n          We use your personal information to operate, provide, develop, and\n          improve the products and services that we offer our customers. The\n          table below explains what we use (process) your personal information\n          for and our reasons for doing so:\n\n          <v-simple-table fixed-header height=\"300px\">\n            <template v-slot:default>\n              <thead>\n                <tr>\n                  <th class=\"text-left\">\n                    What we use your personal information for\n                  </th>\n                  <th class=\"text-left\">\n                    Our reasons\n                  </th>\n                </tr>\n              </thead>\n              <tbody>\n                <tr v-for=\"item in personalInfo\" :key=\"item.name\">\n                  <td>{{ item.name }}</td>\n                  <td>{{ item.reason }}</td>\n                </tr>\n              </tbody>\n            </template>\n          </v-simple-table>\n          <v-card-text>\n            We also may use the personal information we collect about you in\n            other ways for which we provide specific notice at the time of\n            collection and obtain your consent if required by applicable\n            law.</v-card-text\n          ></v-card-text\n        >\n      </v-card>\n      <v-card elevation=\"0\">\n        <v-card-title  style=\"word-break: break-word\">WHAT ABOUT INTERNET-BASED ADVERTISING?</v-card-title>\n        <v-card-text\n          >When you use our websites and apps, information about your online\n          activities may be collected to provide you with advertising about\n          products and services tailored to your interests. This section of our\n          Privacy Notice provides details and explains how to exercise your\n          choices. You may see our ads on other websites or mobile apps because\n          we participate in advertising networks. Ad networks allow us to target\n          our messaging to individuals considering demographic data,\n          individuals’ inferred interests and browsing context. These networks\n          track individuals’ online activities over time by collecting\n          information through automated means, including through the use of\n          cookies, web server logs, web beacons and other similar technologies.\n          The networks use this information to show ads that may be tailored to\n          individuals’ interests, to track individuals’ browsers or devices\n          across multiple websites, and to build a profile of individuals’\n          online browsing activities. The information our ad networks may\n          collect includes data about individuals’ visits to websites that\n          participate in the relevant ad networks, such as the pages or ads\n          viewed and the actions taken on the websites. This data collection\n          takes place both on our websites and on third-party websites that\n          participate in the ad networks. This process also helps us track the\n          effectiveness of our marketing efforts. You have the right to opt out\n          of receiving promotional communications at any time by:\n          <ol>\n            <li>Contacting us at unsubscribe@haikubox.com</li>\n            <li>\n              Using the “unsubscribe” link in emails or “stop” number in texts;\n              or\n            </li>\n            <li>Updating your marketing preferences in your settings.</li>\n          </ol>\n          We may ask you to confirm or update your marketing preferences if you\n          instruct us to provide further products and/or services in the future,\n          or if there are changes in the law, regulation, or the structure of\n          our business.\n        </v-card-text></v-card\n      >\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\"\n          >DOES HAIKUBOX SHARE THE INFORMATION IT RECEIVES?</v-card-title\n        >\n        <v-card-text\n          >We may share our customers’ personal information only as described\n          below and with our affiliates and subsidiaries.\n        </v-card-text>\n        <v-card-subtitle class=\"font-weight-bold\">\n          Third-Party Research:\n        </v-card-subtitle>\n        <v-card-text>\n          We share the bird detections and audio as well as labeled data with\n          the Cornell University Laboratory of Ornithology, so that they may use\n          these data for scientific research and to help improve the accuracy of\n          the bird call detection. This information sharing may include your\n          unique user ID and email address. Dolphin detections and audio are\n          shared with the Sarasota Dolphin Research Program and their partners\n          for scientific research. You may opt out of sharing data from your\n          Haikubox by changing the settings for your box on the\n          website.</v-card-text\n        >\n\n        <v-card-subtitle class=\"font-weight-bold\"\n          >Third-Party Service Providers:\n        </v-card-subtitle>\n        <v-card-text\n          >We employ other companies and individuals to perform certain\n          functions on our behalf. Examples include storing and analyzing data,\n          providing customer service, advertising, payment processing, and order\n          fulfillment. We do not authorize our service providers to use or\n          disclose your personal information except as necessary to perform\n          services on our behalf or comply with legal requirements.\n        </v-card-text>\n\n        <v-card-subtitle class=\"font-weight-bold\"\n          >Business Partners:\n        </v-card-subtitle>\n        <v-card-text\n          >We partner with other businesses with whom we jointly offer products\n          and services, and for payment processing and fraud prevention\n          purposes.\n        </v-card-text>\n\n        <v-card-subtitle class=\"font-weight-bold\"\n          >Business Transfers:\n        </v-card-subtitle>\n        <v-card-text\n          >As we continue to develop our business, we might sell or buy other\n          businesses or services. In such transactions, personal information\n          generally is one of the transferred business assets but remains\n          subject to the promises made in any pre-existing privacy notice\n          (unless, of course, the individual consents otherwise). Also, in the\n          event that Haikubox or substantially all of its assets are acquired,\n          we reserve the right to transfer any personal information we have\n          about you. This includes but is not limited to a merger, acquisition,\n          joint venture, reorganization, divesture, dissolution, or liquidation.\n        </v-card-text>\n\n        <v-card-subtitle class=\"font-weight-bold\"\n          >Protection of Haikubox and Others:\n        </v-card-subtitle>\n        <v-card-text\n          >We may release account and other personal information when we believe\n          release is appropriate to comply with the law, enforce or apply our\n          Terms of Service and other agreements, or protect the rights,\n          property, or safety of Haikubox, our users, or others. This may\n          include exchanging information with other companies and organizations\n          for fraud protection and credit risk reduction.\n        </v-card-text>\n\n        <v-card-text>\n          We do not sell or otherwise share personal information about you\n          except as described in this Privacy Notice.\n        </v-card-text>\n      </v-card>\n      <v-card elevation=\"0\">\n        <v-card-title>WHAT CHOICES DO I HAVE?</v-card-title>\n        <v-card-text>\n          <ol>\n            <li>\n              You may choose not to receive marketing e-mails from us by\n              clicking on the unsubscribe link in any marketing e-mail or by\n              sending an email to unsubscribe@haikubox.com.\n            </li>\n            <li>\n              You may choose to keep your audio recordings private, so that\n              other Haikubox users cannot access or listen to those recordings.\n              This is configured on the Settings page.\n            </li>\n            <li>\n              To the extent required by applicable law, you may have the right\n              to request access to or delete your personal data. If you wish to\n              do this, please contact customer service at support@haikubox.com.\n            </li>\n            <li>\n              Please be advised that we do need to send you certain\n              communications about our products and services, and you may not\n              opt out of those communications. This includes, but is not limited\n              to, information about billing.\n            </li>\n          </ol>\n        </v-card-text>\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title>NOTICE TO CALIFORNIA RESIDENTS</v-card-title>\n        <v-simple-table fixed-header height=\"300px\">\n          <template v-slot:default>\n            <thead>\n              <tr>\n                <th class=\"text-left\">\n                  Categories of Personal Information\n                </th>\n                <th class=\"text-left\">\n                  Specific Types of Personal Information Collected\n                </th>\n              </tr>\n            </thead>\n            <tbody>\n              <tr v-for=\"item in californiaInfo\" :key=\"item.name\">\n                <td>{{ item.name }}</td>\n                <td>{{ item.reason }}</td>\n              </tr>\n            </tbody>\n          </template>\n        </v-simple-table>\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\"\n          >HOW LONG DOES HAIKUBOX KEEP PERSONAL INFORMATION?\n        </v-card-title>\n        <v-card-text>\n          We will keep your personal information while you have an account with\n          us or while we are providing products and/or services to you.\n          Thereafter, we will keep your personal information as long as is\n          necessary:\n\n          <ol>\n            <li>\n              To respond to any questions, complaints, or claims made by your or\n              on your behalf;\n            </li>\n            <li>To show that we treated you fairly, or</li>\n            <li>To keep records required by law.</li>\n          </ol>\n\n          We will not retain your personal information for longer than necessary\n          for the purpose set out in this policy. Different retention periods\n          apply for different types of personal information. When it is no\n          longer necessary to retain your personal information, we will delete\n          or anonymize it.\n        </v-card-text>\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\"\n          >TRANSFERRING YOUR PERSONAL INFORMATION OUT OF THE EEA</v-card-title\n        >\n        <v-card-text>\n          To deliver services to you, it is sometimes necessary for us to share\n          your personal information outside the European Economic Area (EEA),\n          for example: With our office outside the EEA;  With your and our\n          service providers located outside the EEA; If you are based outside\n          the EEA; or Where there is an international dimension to the services\n          we are providing to you. These transfers are subject to special rules\n          under European and UK data protection law. If you would like further\n          information, please contact us or our Data Protection Officer (see\n          “How To Contact Us” below).\n        </v-card-text>\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\"\n          >YOUR RIGHTS UNDER THE GENERAL DATA PROTECTION REGULATION\n          (GDPR)</v-card-title\n        >\n        <v-card-text>\n          Right to Access: The right to be provided with a copy of your personal\n          information (the right of access).</v-card-text\n        >\n        <v-card-text>\n          Right to Rectification: The right to require us to correct any\n          mistakes in your personal information.\n        </v-card-text>\n        <v-card-text\n          >Right to be Forgotten: The right to require us to delete your\n          personal information—in certain situations. </v-card-text\n        ><v-card-text\n          >Right to Restriction of Processing: The right to require us to\n          restrict processing of your personal information—in certain\n          circumstances, e.g., if you contest the accuracy of the data </v-card-text\n        ><v-card-text\n          >Right to Data Portability The right to receive the personal\n          information you provided to us, in a structured, commonly used and\n          machine-readable format and/or transmit that data to a third party—in\n          certain situations </v-card-text\n        ><v-card-text\n          >Right to Object The right to object: at any time to your personal\n          information being processed for direct marketing (including\n          profiling); in certain other situations to our continued processing of\n          your personal information, e.g. processing carried out for the purpose\n          of our legitimate interests. </v-card-text\n        ><v-card-text\n          >Right Not to be Subject to Automated Individual Decision-Making The\n          right not to be subject to a decision based solely on automated\n          processing (including profiling) that produces legal effects\n          concerning you or similarly significantly affects you\n        </v-card-text>\n        <v-card-text\n          >For further information on each of those rights, including the\n          circumstances in which they apply, see the guidance from the UK\n          Information Commissioner's Office (ICO) on individual rights under the\n          General Data Protection Regulation.</v-card-text\n        >\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\">YOUR RIGHTS UNDER THE CCPA</v-card-title>\n        <v-card-text>\n          You have the right under the California Consumer Privacy Act of 2018\n          (CCPA) and certain other privacy and data protection laws, as\n          applicable, to exercise free of charge:</v-card-text\n        >\n        <v-card-subtitle\n          >Disclosure of Personal Information We Collect About\n          You</v-card-subtitle\n        >\n        <v-card-text>\n          You have the right to know:\n          <ol>\n            <li>\n              The categories of personal information we have collected about\n              you;\n            </li>\n            <li>\n              The categories of sources from which the personal information is\n              collected;\n            </li>\n            <li>\n              Our business or commercial purpose for collecting or selling\n              personal information;\n            </li>\n            <li>\n              The categories of third parties with whom we share personal\n              information, if any; and\n            </li>\n            <li>\n              The specific pieces of personal information we have collected\n              about you.\n            </li>\n          </ol>\n        </v-card-text>\n        <v-card-text>\n          Please note that we are not required to:\n          <ol>\n            <li>\n              Retain any personal information about you that was collected for a\n              single one-time transaction if, in the ordinary course of\n              business, that information about you is not retained;\n            </li>\n            <li>\n              Reidentify or otherwise link any data that, in the ordinary course\n              of business, is not maintained in a manner that would be\n              considered personal information; or\n            </li>\n            <li>\n              Provide the personal information to you more than twice in a\n              12-month period.\n            </li>\n          </ol>\n        </v-card-text>\n\n        <v-card-subtitle\n          >Personal Information Sold or Used for a Business\n          Purpose</v-card-subtitle\n        >\n        <v-card-text\n          >We will not sell or disclose your personal information. Use of the\n          Haikubox service requires the location of the haikubox device.\n        </v-card-text>\n\n        <v-card-subtitle>Right to Deletion</v-card-subtitle>\n        <v-card-text\n          >Subject to certain exceptions set out below, on receipt of a\n          verifiable request from you, we will: • Delete your personal\n          information from our records; and • Direct any service providers to\n          delete your personal information from their records. Please note that\n          we may not delete your personal information if it is necessary to: •\n          Complete the transaction for which the personal information was\n          collected, fulfill the terms of a written warranty or product recall\n          conducted in accordance with federal law, provide a good or service\n          requested by you, or reasonably anticipated within the context of our\n          ongoing business relationship with you, or otherwise perform a\n          contract between you and us; • Detect security incidents, protect\n          against malicious, deceptive, fraudulent, or illegal activity; or\n          prosecute those responsible for that activity; • Debug to identify and\n          repair errors that impair existing intended functionality; • Exercise\n          free speech, ensure the right of another consumer to exercise his or\n          her right of free speech, or exercise another right provided for by\n          law; • Comply with the California Electronic Communications Privacy\n          Act; • Engage in public or peer-reviewed scientific, historical, or\n          statistical research in the public interest that adheres to all other\n          applicable ethics and privacy laws, when our deletion of the\n          information is likely to render impossible or seriously impair the\n          achievement of such research, provided we have obtained your informed\n          consent; • Enable solely internal uses that are reasonably aligned\n          with your expectations based on your relationship with us; • Comply\n          with an existing legal obligation; or • Otherwise use your personal\n          information, internally, in a lawful manner that is compatible with\n          the context in which you provided the information.\n        </v-card-text>\n\n        <v-card-subtitle>Protection Against Discrimination</v-card-subtitle>\n        <v-card-text\n          >You have the right to not be discriminated against by us because you\n          exercised any of your rights under the CCPA. This means we cannot,\n          among other things: • Deny goods or services to you; • Charge\n          different prices or rates for goods or services, including through the\n          use of discounts or other benefits or imposing penalties; • Provide a\n          different level or quality of goods or services to you; or • Suggest\n          that you will receive a different price or rate for goods or services\n          or a different level or quality of goods or services. Please note that\n          we may charge a different price or rate or provide a different level\n          or quality of goods and/or services to you, if that difference is\n          reasonably related to the value provided to our business by your\n          personal information.\n        </v-card-text>\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\">HOW TO EXERCISE YOUR RIGHTS</v-card-title>\n        <v-card-text>\n          If you would like to exercise any of your rights as described in this\n          Privacy Policy, please: • Email/write to us at support@haikubox.com;\n          Haikubox 6576 Palmer Park Circle Sarasota, FL 34238. Please note that\n          you may only make a CCPA-related data access or data portability\n          disclosure request twice within a 12-month period. If you choose to\n          contact directly by email, or in writing, you will need to provide us\n          with: • Enough information to identify you (e.g., your full name,\n          address and customer or matter reference number); • Proof of your\n          identity and address (e.g., a copy of your driving license or passport\n          and a recent utility or credit card bill); and • A description of what\n          right you want to exercise and the information to which your request\n          relates. We are not obligated to make a data access or data\n          portability disclosure if we cannot verify that the person making the\n          request is the person about whom we collected information, or is\n          someone authorized to act on such person’s behalf. Any personal\n          information we collect from you to verify your identity in connection\n          with your request will be used solely for the purposes of\n          verification.\n        </v-card-text>\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\">HOW TO FILE A GDPR COMPLAINT</v-card-title>\n        <v-card-text>\n          We hope that we can resolve any query or concern you raise about our\n          use of your information. The General Data Protection Regulation also\n          gives you right to lodge a complaint with a supervisory authority, in\n          the European Union (or European Economic Area) state where you work,\n          normally live, or where any alleged infringement of data protection\n          laws occurred. The supervisory authority in each country can be found\n          at https://edpb.europa.eu/about-edpb/board/members_en.\n        </v-card-text>\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\">OTHER THIRD-PARTY SERVICES AND FEATURES</v-card-title>\n        <v-card-text>\n          Our website and mobile apps may provide links to other online services\n          for your convenience and information, and may include third-party\n          features such as apps, tools, payment services, widgets and plug-ins\n          (e.g., Facebook or Twitter buttons). If you opt-in to push notifications, \n          information about your phone will be stored by OneSignal, so that we \n          may send appropriate notifications. These third-party services and\n          features may operate independently from us. The privacy practices of\n          the relevant third parties, including details on the information they\n          may collect about you, is subject to the privacy statements of these\n          parties, which we strongly suggest you review. To the extent any\n          linked online services or third-party features are not owned or\n          controlled by us, Haikubox is not responsible for these third parties’\n          information practices. By using or engaging with such services and\n          features, you are requesting and authorizing us to transfer or provide\n          access to information on your behalf, for example, your account ID,\n          email address, data about your Haikubox device usage or collected by\n          your Haikubox device, etc.</v-card-text\n        >\n      </v-card>\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\"\n          >HOW DOES HAIKUBOX PROTECT PERSONAL INFORMATION</v-card-title\n        ><v-card-text>\n          We maintain administrative, technical and physical safeguards designed\n          to protect personal information against accidental, unlawful or\n          unauthorized destruction, loss, alteration, access, disclosure or\n          use.</v-card-text\n        >\n      </v-card>\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\"\n          >HOW CAN I REQUEST DELETION OF MY PERSONAL INFORMATION?</v-card-title\n        ><v-card-text>\n          You may have the right under the California Consumer Privacy Act, to\n          request information about the collection of your personal information\n          by Haikubox, or access to or deletion of your personal information. If\n          you wish to do any of these things, please contact\n          support@haikubox.com. Haikubox will not discriminate against any\n          consumer for exercising their rights under the California Consumer\n          Privacy Act.</v-card-text\n        >\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\">DOES HAIKUBOX SELL PERSONAL INFORMATION?</v-card-title\n        ><v-card-text>\n          No. In the twelve months prior to the effective date of this\n          Disclosure, Haikubox has not sold any personal information of\n          consumers, as those terms are defined under the California Consumer\n          Privacy Act.\n        </v-card-text>\n      </v-card>\n\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\">POLICIES FOR CHILDREN</v-card-title\n        ><v-card-text>\n          We recognize the importance of protecting children's online privacy.\n          Haikubox's products and services are intended for a general audience\n          and are not directed to children. We do not knowingly collect personal\n          information online from children under the age of 13.</v-card-text\n        >\n      </v-card>\n      <v-card elevation=\"0\">\n        <v-card-title style=\"word-break: break-word\">UPDATES TO OUR PRIVACY NOTICE </v-card-title\n        ><v-card-text>\n          This Privacy Notice may be updated periodically and without prior\n          notice to you to reflect changes in our personal information\n          practices. We will post a notice on our websites and mobile apps to\n          notify you of significant changes to our Privacy Notice and indicate\n          at the top of the notice when it was most recently\n          updated.</v-card-text\n        >\n      </v-card>\n      <v-card-title style=\"word-break: break-word\">HOW TO CONTACT US</v-card-title\n      ><v-card-text>\n        If you have any questions about this Privacy Notice, or if you would\n        like us to update information we have about you, change your preferences\n        or exercise other applicable data protection rights, please contact us\n        by e-mail at support@haikubox.com or write to us at: Loggerhead\n        Instruments-Haikubox 6576 Palmer Park Circle Sarasota, FL\n        34238</v-card-text\n      >\n    </v-card>\n  </div>\n</template>\n\n<script>\n  export default {\n    data() {\n      return {\n        californiaInfo: [\n          {\n            name:\n              \"Identifiers (e.g., a real name, alias, postal address, unique personal identifier, online identifier, Internet Protocol address, email address, account name, social security number, driver’s license number, passport number, bank account number, credit card number, debit card number, any other financial information or other similar identifiers)\",\n            reason:\n              \"Full name; City, State, Country and Zip Code; Email Address; Username; Bank account number; Credit card number; Debit card number; Any other financial information that you provide\",\n          },\n          {\n            name:\n              \"Personal Information categories listed in the California Customer Records statute (Cal. Civ. Code \",\n            reason: \"Full name; City, State, Country and Zip Code\",\n          },\n          {\n            name:\n              \"Characteristics of protected classifications under California or federal law.\",\n            reason: \"Age, Gender\",\n          },\n          {\n            name:\n              \"Commercial information (e.g., records of personal property, products or services purchased, obtained, or considered or other purchasing or consuming histories or tendencies)\",\n            reason:\n              \"Products and/or services purchased, obtained or considered; Other purchasing or consuming histories or tendencies \",\n          },\n          {\n            name:\n              \"Internet or other electronic network activity information (e.g., browsing history, search history, and information regarding a consumer’s interaction with an internet web site, application, or advertisement)\",\n            reason:\n              \"Crash reports for analyzing the health of our devices and services  (Please note that no information listed in this category is specific to any individual user or account)\",\n          },\n          {\n            name: \"Geolocation data\",\n            reason:\n              \"•\tThe GPS location of your Haikubox; The location of your mobile device\",\n          },\n          {\n            name:\n              \"Audio; electronic, visual, thermal, olfactory, or similar information\",\n            reason: \"The audio recordings stored on your Haikubox\",\n          },\n          {\n            name:\n              \"Inferences drawn from any of the information identified above to create a profile about a consumer reflecting the consumer’s preferences, characteristics, psychological trends, predispositions, behavior, attitudes, intelligence, abilities, and aptitudes \",\n            reason: \"Interests in other Haikubox products or services. \",\n          },\n        ],\n        personalInfo: [\n          {\n            name: \"• To provide our products and services to you\",\n            reason:\n              \"For the performance of our contract with you or to take steps at your request before entering into a contract\",\n          },\n          {\n            name: \"•\tTo prevent and detect fraud against you or Haikubox\",\n            reason:\n              \"For our legitimate interests or those of a third party, i.e., to minimize fraud that could be damaging for us and for you \",\n          },\n          {\n            name:\n              \"•\tConducting checks to identify our customers and verify their identity •\tScreening for financial and other sanctions or embargoes  •\tOther processing necessary to comply with professional, legal, and regulatory obligations that apply to our business, e.g., under health and safety regulation or rules issued by our professional regulator  •\tGathering and providing information required by or relating to audits, enquiries or investigations of regulatory bodies\",\n            reason: \"To comply with our legal and regulatory obligations\",\n          },\n          {\n            name:\n              \"•\tEnsuring business policies are adhered to, e.g., Policies covering security and internet use listed in our Terms of Service\",\n            reason:\n              \"For our legitimate interest or those of a third party, i.e., to make sure we are following our own internal procedures so we can deliver the best service to you\",\n          },\n          {\n            name:\n              \"•\tOperational reasons, such as improving efficiency, training and quality control\",\n            reason:\n              \"For our legitimate interest of those of a third party, i.e., to be as efficient as we can so we can deliver the best service for you at the best price\",\n          },\n          {\n            name:\n              \"•\tEnsuring confidentiality of commercially sensitive information\",\n            reason:\n              \"For our legitimate interest or those of a third party, i.e., to protect trade secrets and other commercially valuable information and to comply with our legal and regulatory obligations\",\n          },\n          {\n            name:\n              \"•\tStatistical analysis to help us manage our business, e.g., in relation to our financial performance, customer base, product range or other efficiency measures\",\n            reason:\n              \"For our legitimate interest or those of a third party, i.e., to be as efficient as we can so we can deliver the best service for you at the best price\",\n          },\n          {\n            name:\n              \"•\tPreventing unauthorized access and modifications to systems\",\n            reason:\n              \"For our legitimate interest or those of a third party, i.e., to prevent and detect criminal activity that could be damaging for us and for you and to comply with our legal and regulatory obligations\",\n          },\n          {\n            name: \"•\tUpdating and enhancing customer records\",\n            reason:\n              \"For the performance of our contract with you or to take steps at your request before entering into a contract; to comply with our legal and regulatory obligations; and for our legitimate interests or those of a third party, e.g., making sure that we can keep in touch with our customers about existing orders and new products\",\n          },\n          {\n            name: \"•\tStatutory returns \",\n            reason: \"To comply with our legal and regulatory obligations\",\n          },\n          {\n            name:\n              \"•\tEnsuring safe working practices, staff administration and assessment\",\n            reason: \"To comply with our legal and regulatory obligations\",\n          },\n          {\n            name:\n              \"•\tMarketing our services and those of selected third parties to: Existing and former customers, Third parties who have previously expressed an interest in our services, Third parties with whom we have had no previous dealings\",\n            reason:\n              \"For our legitimate interests or those of a third party, i.e., to promote our business to existing and former customers\",\n          },\n          {\n            name:\n              \"•\tAllow you to interact with certain third-party products and/or services\",\n            reason:\n              \"For our legitimate interests or those of a third party, i.e. to enable you to link to, or view content from third-party sites within our services\",\n          },\n        ],\n      };\n    },\n  };\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Privacy.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Privacy.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Privacy.vue?vue&type=template&id=81593874\"\nimport script from \"./Privacy.vue?vue&type=script&lang=js\"\nexport * from \"./Privacy.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('v-card',[_c('v-card-title',[_vm._v(\"Terms of Service\")]),_c('v-card-subtitle',[_vm._v(\"Last updated June 20, 2022\")]),_c('v-card-text',[_vm._v(\"IMPORTANT NOTICE: THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION AND A WAIVER OF CLASS ACTION RIGHTS AS DETAILED IN THE DISPUTE RESOLUTION SECTION. \")]),_c('v-card',{attrs:{\"elevation\":\"0\"}},[_c('v-card-title',[_vm._v(\"Haikubox Terms of Service\")]),_c('v-card-text',[_vm._v(\"This website is owned and operated by Loggerhead Instruments, Inc. and its affiliates (collectively “Haikubox,” “we,” “us,” or “our”). These Terms of Service (“Terms”) govern your legal rights to use or access our services, software, mobile application, and our websites (the “Services”) and Haikubox hardware products or devices (“Products”). These Terms also govern your legal rights with respect to Third Party Services (defined below). Please read these Terms carefully before purchasing or using the Products or Services or purchasing or using Third Party Services. By using or accessing our Products or Services or purchasing or using Third Party Services, you signify your acknowledgement and assent to the terms and conditions of use set forth below. These Terms (together with our Privacy Notice and other user agreements, where applicable) constitute a binding legal agreement between you and Haikubox (this “Agreement”). Please read these Terms closely because they contain important information about automatic renewal, a class action waiver, and an arbitration provision, requiring you to arbitrate any claims you may have against Haikubox on an individual basis. ARBITRATION ON AN INDIVIDUAL BASIS MEANS THAT YOU WILL NOT HAVE, AND YOU WAIVE, THE RIGHT FOR A JUDGE OR JURY TO DECIDE YOUR CLAIMS, AND THAT YOU MAY NOT PROCEED IN A CLASS, CONSOLIDATED, OR REPRESENTATIVE CAPACITY. *If you do not agree with these Terms, you should not use this site or purchase or use our Products or Services or Third Party Services.* \")]),_c('v-card',[_c('v-card-title',[_vm._v(\"GENERAL\")]),_c('v-card-text',[_vm._v(\" The Agreement represents the entire understanding relating to your purchase or use of the Products and Services or Third Party Services and prevails over any prior or contemporaneous, conflicting, or additional communications between you and Haikubox. All rights not expressly granted herein are reserved by Haikubox. However, to the extent your use of a Product or Service involves or is integrated with products or services of affiliated companies, any terms and policies covering those products or services may also apply. Specific areas or pages of our websites may include additional or different terms relating to the purchase or use of our Products and Services or Third Party Services. In the event of a conflict between such specific terms and these Terms, the specific terms shall control. The term “you,” as used in these Terms, includes any person or entity who is the owner of the Product and creates an account associated with the Product (“Owner”), as well as any person or entity allowed or authorized to access or use the Owner’s Products and Services (“Authorized Users”). Authorized Users are responsible for their own actions in connection with the Products and Services, but Owner hereby consents to these terms on behalf of all Authorized Users and agrees to be fully responsible for all actions taken by Authorized Users relating to the Owner’s Products, Services and account. As a result, if you are an Owner, you should authorize only those individuals that you trust to access your account, Products, and Services. You must be at least 13 years old to use the Products and Services. If you are between the ages of 13 and 18, you may use our Products and Services only with the consent and under the supervision of a parent or legal guardian who agrees to be bound by the Agreement. If you are a parent or legal guardian of a user between the ages of 13 and 18, you consent to the Agreement on behalf of such user and you are fully responsible for the acts of such user in relation to our Products and Services. If you are agreeing to the Agreement on behalf of an organization or entity, you represent and warrant that you are authorized to agree to the Agreement on that organization or entity’s behalf and bind them to the Agreement (in which case, the references to “you” and “your” in the Agreement, except for in this sentence, refer collectively to you personally and to that organization or entity). \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"CHANGES TO THIS AGREEMENT AND SERVICES\")]),_c('v-card-text',[_vm._v(\"Except as set forth in the Dispute Resolution section, Haikubox is free to revise these Terms or any other part of the Agreement at any time by updating this page. If we make changes to these Terms that we consider material, we will make reasonable efforts to notify you by placing a notice on the haikubox.com website, notifying you through the Services, by sending you an email, or by some other means. By continuing to use our website, our Products and Services after such changes, you are expressing your acknowledgement and acceptance of the changes. Please check the Agreement periodically for updates. We are always trying to improve the Products and Services, so they may change over time. We may suspend or discontinue any part of the Services, or we may introduce new features or impose limits on certain features or restrict access to parts or all of the Products or Services. Similarly, we reserve the right to remove any Content from the Services at any time, for any reason, in our sole discretion, and without notice. We are also free to terminate (or suspend access to) your use of the Services or your account, for any reason in our discretion, including your breach of the Agreement. We have the sole right to decide whether you are in violation of any of the restrictions set forth in the Agreement. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"ACCESS AND USE; GUIDELINES FOR INSTALLATION AND USE\")]),_c('v-card-text',[_vm._v(\" All right, title and interest in the Services and our content provided through the Products and Services (including without limitation information, documents, logos, graphics, designs and images) are owned by Haikubox, its licensors, or designated third parties. Subject to these Terms, Haikubox grants you a limited, non-transferable, non-exclusive right to access and make personal and non-commercial use of the Products and Services. Notwithstanding the foregoing, businesses may purchase Products and use the Services for their own internal, lawful business purposes (such as using Products on their business premises or enabling tenants to use the Products); however, this license does not include any right to resell Products or Services, or otherwise make the Products or Services available for third parties. Privacy and other laws applicable in your jurisdiction may impose certain responsibilities on you and your use of the Products and Services. You agree that it is your responsibility, and not the responsibility of Haikubox, to ensure that you comply with any applicable laws when you use the Products and Services, including but not limited to: (1) any laws or regulations relating to the recording or sharing of video or audio content, (2) any laws or regulations requiring that notice be given to or that consent be obtained from third parties with respect to your use of the Products or Services (for example, laws or regulations requiring you to display appropriate signage advising others that audio recording is taking place), and/or (3) any laws or regulations requiring (a) that installation of any Product which takes audio recordings be installed at such a location that it does not take any recordings beyond the boundary of your property (including public pavements or roads); and (b) that, if you use your property as a workplace, you comply with laws governing the monitoring of employees. If your use of the Services or any Products is prohibited by applicable laws, then you are not authorized to use the Services or Products. We cannot and will not be responsible for your using the Services or any Products in a way that breaks the law. You may be required to sign up for an account, and select a password and username (“User ID”). You promise to provide us with accurate, complete, and updated registration information about yourself. You may not select as your User ID a name or e-mail address that you do not have the right to use, or another person’s name or e-mail address with the intent to impersonate that person. Also, you will not share your account or password with anyone, and you must protect the security of your account and your password. You are responsible for any activity associated with your account. You represent, warrant, and agree that you will not capture or contribute any Content (as defined below) or otherwise use the Services or Products or interact with the Services or Products in a manner that: Infringes or violates the intellectual property rights or any other rights of anyone else (including us); Violates any law, ordinance, or regulation, including privacy and other laws referenced above and any applicable export control laws; Is harmful, fraudulent, deceptive, threatening, harassing, defamatory, obscene, or otherwise objectionable; Jeopardizes the security of your Haikubox account or anyone else’s (such as allowing someone else to log in to the Services as you); Attempts, in any manner, to obtain the password, account, or other security information from any other user; Violates the security of any computer network, or cracks any passwords or security encryption codes; Runs Maillist, Listserv, any form of auto-responder or “spam” on the Services, or any processes that run or are activated while you are not logged into the Services, or that otherwise interfere with the proper working of the Services (including by placing an unreasonable load on the Services’ infrastructure); “Crawls,” “scrapes,” or “spiders” any page, data, or portion of or relating to the Services or Content (through use of manual or automated means); or Copies or stores any significant portion of the Content. A violation of any of the foregoing is grounds for termination of your right to use or access the Products and Services. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"TRADEMARKS AND COPYRIGHTS\")]),_c('v-card-text',[_vm._v(\"You acknowledge Loggerhead Instruments, Inc.’s exclusive rights in the Haikubox and Haikubox Connect trademark and service mark. Trademarks, service marks, logos, and copyrighted works appearing in this website are the property of Loggerhead Instruments, Inc. or the party that provided such intellectual property to Haikubox. Haikubox and any party that provides intellectual property to Haikubox retains all rights with respect to any of their respective intellectual property appearing in this website, and no rights in such materials are transferred or assigned to you. Nothing on or in the Products or Services shall be construed as conferring any license under any intellectual property right, including any right in the nature of trademark or copyright, of Haikubox or any third party, whether by estoppel, implication or otherwise. All trademarks and trade names are the property of their respective owners. Except as otherwise noted, Haikubox is the owner of all trademarks and service marks on or in the Products and Services, whether registered or not, including, without limitation, Haikubox and Haikubox Connect. Haikubox expressly forbids the unauthorized use of its logos, trademarks, or other graphics to create links. All registered trademarks are registered in the United States of America (and/or other applicable jurisdictions). \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"CONTENT \")]),_c('v-card-text',[_vm._v(\" You are solely responsible for all of your Content. “Content” means all audio, text, or other types of content captured by our Products or provided to us (including content posted by you) in connection with the Services. You represent and warrant that: (a) you own the intellectual property rights in Content posted by you or otherwise have the right to post the Content and grant the license set forth below, and (b) the posting and use of your Content on or through the Services does not violate the privacy rights, publicity rights, copyrights, contract rights, intellectual property rights or any other rights of any person. You hereby grant Haikubox and its licensees an unlimited, irrevocable, fee-free and royalty-free, perpetual, worldwide right to use, distribute, store, delete, translate, copy, modify, display, and create derivative works from such Content that you share through our Services including, without limitation, via a share link, for any purpose and in any media format. You shall not use, reproduce, modify, upload, publish, transmit, distribute, display, or otherwise exploit for any purposes whatsoever any Content: (i) not owned by you without the express prior written consent of the respective owners, and (ii) in any way that violates any third party right. Haikubox reserves the right, but shall not be obligated, to remove any Content from the Services at any time in its sole and absolute discretion. You agree that you will indemnify Haikubox for all claims resulting from Content you share through our Services. If you see Content that you believe violates our Terms, please flag it in our mobile application or report it to us by emailing support@haikubox.com. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" AUDIO RECORDINGS\")]),_c('v-card-text',[_vm._v(\" The purpose of Haikubox is to create a permanent record of nature by capturing and storing audio recordings made by birds and other animals. By using the Products and Services you grant Haikubox a perpetual, transferrable license to the recordings and associated data (including, but not limited to, geolocation, animal identification, device name, etc.) to be shared with other users of the Service and outside parties conducting scientific research (“Haikubox License”). More information on who Haikubox discloses this data to is provided pursuant to applicable laws outlined in the Haikubox Privacy Notice. Users may limit the ability of other users of the Service from listening to recordings by changing their settings to Private. In the event that the settings are set to Private, Haikubox will still retain access to the recordings and may still share them with third parties for scientific research purposes. To revoke the Haikubox License you will need to provide your request in writing to support@haikubox.com or to the address listed below. Haikubox strives to exclude recordings of human speech from being transmitted. However, the algorithms may occasionally transmit human speech as a false detection of a bird sound. You may request that specific audio recordings be deleted that you have shown contain human speech by contacting support@haikubox.com. In addition to the rights granted above, you also acknowledge and agree that Haikubox may access, use, preserve and/or disclose Content to law enforcement authorities, government officials, and/or third parties, if legally required to do so or if we have a good faith belief that such access, use, preservation or disclosure is reasonably necessary to: (a) comply with applicable law, regulation, legal process or reasonable governmental request; (b) enforce these Terms, including investigation of any potential violation thereof; (c) detect, prevent or otherwise address security, fraud or technical issues; or (d) protect the rights, property or safety of Haikubox, its users, a third party, or the public as required or permitted by law. Deleted Content may be stored by Haikubox in order to comply with certain legal obligations and are not retrievable without a valid court order. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" REFUNDS\")]),_c('v-card-subtitle',[_vm._v(\"Risk of Loss\")]),_c('v-card-text',[_vm._v(\" All purchases of physical items from Haikubox are made pursuant to a shipment contract. This means that the risk of loss and title for such items pass to you upon our delivery to the carrier. \")]),_c('v-card-subtitle',[_vm._v(\"Return Policy\")]),_c('v-card-text',[_vm._v(\" If, for any reason, you decide to return Product that you purchased from us for a refund, you must notify us and return the Product to us within thirty (30) days from the date the Product was delivered. *Items purchased at Haikubox.com between November 1 and December 31, may be returned through January 31 of the immediately following year. Haikubox does not take title to returned items until the item arrives at our fulfillment center. At our discretion, a refund may be issued without requiring a return. In this situation, Haikubox does not take title to the refunded item. \")]),_c('v-card-subtitle',[_vm._v(\"Order Limits / End-User Customers Only\")]),_c('v-card-text',[_vm._v(\" Haikubox reserves the right, in its sole discretion, to refuse or cancel any order and limit order quantity. Haikubox may also require additional qualifying information prior to accepting or processing any order. Haikubox.com sells products to end-user customers only, and we reserve the right to refuse or cancel your order if we suspect you are purchasing products for resale. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" THIRD PARTY SERVICES\")]),_c('v-card-text',[_vm._v(\" You may be allowed to access or acquire products, websites, applications, content, or services from third parties (“Third Party Services”) through our Services. A description or reference to any Third Party Service by or through our Services (including any description or reference via hyperlink) does not imply endorsement by Haikubox of such Third Party Service. These Third Party Services are the sole responsibility of such independent third parties, and your use thereof is solely at your own risk. Haikubox has no control over the content or policies of such Third Party Services, and we are not responsible for (and under no circumstances shall we be liable for) the contents, accuracy, reliability, quality or security of any such Third Party Service. Third Party Services may be subject to their own warranties, terms of service, and privacy policies. You may be required to agree to those third party terms to use the Third Party Services. Please review all information about Third Party Services before purchasing them through Haikubox. Those who choose to access information provided by third parties (including any information obtained through our Services) are solely responsible for the compliance of such information with any applicable law. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" SOFTWARE UPDATES\")]),_c('v-card-text',[_vm._v(\" From time to time, Haikubox may develop updates, upgrades, patches, and other modifications to improve the performance of the Services and/or the Products or for other reasons in our sole discretion (“Updates”). You agree that Haikubox may automatically install such Updates without providing any additional notice to you or receiving any additional consent from you. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" USER COMMUNICATIONS\")]),_c('v-card-text',[_vm._v(\" Haikubox is pleased to hear from its customers. However, we do not accept or consider any unsolicited creative ideas, suggestions or other materials related to products, services, or marketing. Anything you disclose or offer to us by or through our websites or our Services (“communications”), including e-mails to Haikubox or postings on interactive portions of our websites, shall be deemed and shall remain the property of Haikubox. If you send us such communications, you do so on a NON-CONFIDENTIAL BASIS, and we will have no obligation to keep such information secret, to refrain from using such information, or to compensate you for the receipt or use of such communications. Haikubox is free to use, for any purpose whatsoever, any communications, including but not limited to publishing, developing, manufacturing, and marketing our Products or Services using such communications. By submitting communications to us through our websites, via e-mail, or by any means, you hereby RELEASE Haikubox from any liability under any legal theory in connection with the use, modification, sale, or disclosure of any such communications. By uploading or otherwise providing any communications to our websites or to Haikubox, you hereby grant Haikubox, to the extent you retain any rights, the unlimited, perpetual right to reuse, redistribute, modify, and create derivative works from such communications for any purpose and in any media without compensation to you. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" PRODUCTS AND SOFTWARE\")]),_c('v-card-text',[_vm._v(\" Downloading or using our software (including our mobile application and device firmware) does not give you title to such software, including any files, data and images incorporated in or associated with the software. Your use of any such software shall be only in accordance with the Agreement. Our software is copyrighted by Haikubox or its licensor(s) and may be protected by one or more patents owned by Haikubox or its licensor(s). Software may not be copied, redistributed, or placed on any server for further distribution. You may not sell, modify, decompile, disassemble, or otherwise reverse engineer the software or hardware. Products and Services offered through this website shall be warranted, if at all, through the written license or warranty provided in connection with such product or software. These Terms apply to your use of all the Products and Services, including software that may be downloaded to your smartphone or tablet to access the Services (the “Application”). The Application is licensed to you on a limited, non-exclusive, non-transferrable, non-sublicensable basis, solely to be used in connection with the Products and Services for your private, personal, non-commercial use, subject to all the terms and conditions of these Terms as they are applicable to the Products and Services. You represent and warrant that you are not located in a country subject to a U.S. Government embargo, or that has been designated by the U.S. Government as a “terrorist supporting” country, and that you are not listed on any U.S. Government list of prohibited or restricted parties. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"Subscriptions\")]),_c('v-card-text',[_vm._v(\" A current subscription/membership is required for full access to Haikubox features. If a subscription/membership lapses, Haikubox functionality may be limited. Two different types of Haikubox are sold: Pre-paid subscription/membership and Pay-as-you-go annual subscription/membership. \")]),_c('v-card-subtitle',[_vm._v(\"Pre-paid Subscription\")]),_c('v-card-text',[_vm._v(\" Pre-paid models include a multi-year subscription/membership with purchase. This multi-year subscription/membership is included with the physical Haikubox and is not transferrable to another Haikubox or owner.\")]),_c('v-card-subtitle',[_vm._v(\"Pay-as-you-go Subscription\")]),_c('v-card-text',[_vm._v(\" Pay-as-you-go Haikubox models require an annual subscription/membership to maintain full access to all Haikubox features, including the Haikubox website and smartphone app. The first year of the subscription/membership may be included in the initial Haikubox purchase price. Renewal is the date on which the Haikubox is first connected to the user’s WiFi.\")]),_c('v-card-text',[_vm._v(\" After any initial trial period, the annual subscription/membership fee will be billed or charged on the first day of the applicable subscription/membership period. If any payment is not received, is returned unpaid or if any credit card or similar transaction is rejected or denied, Haikubox reserves the right to cancel your subscription/membership plan. Haikubox may charge a credit card on the same day as enrollment if the user enrolls for a paid subscription/membership on or after the expiry of the free trial. Haikubox will confirm the charge by email once the user has enrolled and will provide advanced notice of future charges after the initial charge. \")]),_c('v-card-subtitle',[_vm._v(\"Cancellation of Subscription Services.\")]),_c('v-card-text',[_vm._v(\" For more information about canceling a pay-as-you-go Haikubox subscription/membership, please contact support@haikubox.com. You may opt-out of auto-renewal on the Haikubox account page. Once a subscription/membership ends, Haikubox data and recordings will no longer be accessible to the user. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" NO REPRESENTATIONS OR WARRANTIES\")]),_c('v-card-text',[_vm._v(\" This website may contain errors and may not be complete or current. Haikubox therefore reserves the right to the fullest extent allowed by law to correct any errors or omissions (including after an order has been submitted) and to change or update information at any time without prior notice. Please note that such errors or omissions may relate to product descriptions, pricing, and availability. We reserve the right to the fullest extent allowed by applicable law to cancel or refuse to accept any order. We apologize for any inconvenience. EXCEPT FOR THE LIMITED WARRANTY PROVIDED ON OUR WEBSITE, OUR PRODUCTS AND SERVICES ARE PROVIDED ‘AS IS,’ AND HAIKUBOX DOES NOT MAKE ANY WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR MERCHANTABILITY, NOR DO WE IN ANY WAY GUARANTEE THE QUALITY, DATA CONTENT, ARTISTIC WORTH OR LEGALITY OF INFORMATION, CONTENT, GOODS OR SERVICES THAT ARE TRANSFERRED, RECEIVED, PURCHASED OR OTHERWISE MADE AVAILABLE OR OBTAINED BY WAY OF THIS WEBSITE OR THE SERVICES. WE DO NOT WARRANT THAT OUR PRODUCTS OR SERVICES WILL BE UNINTERRUPTED, OR ERROR-FREE, OR THAT DEFECTS WILL BE CORRECTED. APPLICABLE LAW MAY NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. EXCLUSION OF LIABILITY UNDER NO CIRCUMSTANCES, INCLUDING NEGLIGENCE, SHALL HAIKUBOX BE LIABLE FOR ANY SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR LOST PROFITS THAT RESULT FROM THE DISTRIBUTION OR USE OF, OR THE INABILITY TO USE, THE CONTENT OR MATERIALS ON THIS WEBSITE, THE PRODUCTS, OR THE SERVICES EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. APPLICABLE LAW MAY NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY OR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION MAY NOT APPLY TO YOU. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" LIMITATIONS OF LIABILITY\")]),_c('v-card-text',[_vm._v(\" IN NO EVENT SHALL HAIKUBOX’S TOTAL LIABILITY TO YOU FOR ALL DAMAGES, LOSSES AND CAUSES OF ACTION (WHETHER IN CONTRACT, TORT OR OTHERWISE) EXCEED THE AMOUNT PAID BY YOU, IF ANY, FOR THE PRODUCTS OR SERVICES AT ISSUE WITHIN THE PRIOR TWELVE (12) MONTHS. THIS LIMITATION IS CUMULATIVE AND WILL NOT BE INCREASED BY THE EXISTENCE OF MORE THAN ONE INCIDENT OR CLAIM. HAIKUBOX DISCLAIMS ALL LIABILITY OF ANY KIND OF HAIKUBOX’S LICENSORS AND SUPPLIERS. TO THE EXTENT PERMITTED BY APPLICABLE LAW, UNDER NO CIRCUMSTANCES WILL HAIKUBOX BE LIABLE IN ANY WAY FOR ANY CONTENT, INCLUDING, BUT NOT LIMITED TO, ANY ERRORS OR OMISSIONS IN ANY CONTENT, OR ANY LOSS OR DAMAGE OF ANY KIND INCURRED IN CONNECTION WITH USE OF OR EXPOSURE TO ANY CONTENT POSTED, EMAILED, ACCESSED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SERVICES. YOU USE THE PRODUCTS AND SERVICES AT YOUR OWN RISK. YOU HAVE SOLE RESPONSIBILITY FOR ADEQUATE PROTECTION OF DATA AND/OR EQUIPMENT USED IN CONNECTION WITH YOUR USE OF THE SERVICE, AND YOU AGREE TO HOLD HAIKUBOX HARMLESS FROM, AND YOU COVENANT NOT TO SUE US FOR, ANY CLAIMS BASED ON YOUR USE OF THE PRODUCT OR SERVICES, INCLUDING CLAIMS FOR LOST DATA OR CONTENT, WORK DELAYS OR LOST PROFITS RESULTING FROM YOUR USE OF THE PRODUCT OR SERVICES. THE LIMITATION OF LIABILITY DESCRIBED ABOVE SHALL APPLY FULLY TO RESIDENTS OF NEW JERSEY. IF ANY PORTION OF THIS SECTION IS HELD TO BE INVALID UNDER THE LAWS OF THE STATE OF NEW JERSEY, THE INVALIDITY OF SUCH PORTION SHALL NOT AFFECT THE VALIDITY OF THE REMAINING PORTIONS OF THE APPLICABLE SECTIONS. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" JURISDICTION AND CHOICE OF LAW \")]),_c('v-card-text',[_vm._v(\"Haikubox controls and manages the Services from its facilities in the State of Florida in the United States of America. Unless otherwise stated, materials and content on the Services are presented solely for promoting Products and Services in the United States of America. Information published on the Products and Services may contain references to products, programs, and services that are not announced or available in your country or region. We make no representation that such information, products, programs, or services referenced on the Products or Services are legal, available, or appropriate in your country or region. These Terms shall be governed by and construed in accordance with the laws of the State of Florida and the United States of America, without giving effect to any principles of conflicts of law. \")]),_vm._v(\"> \")],1),_c('v-card',[_c('v-card-title',[_vm._v(\" DISPUTE RESOLUTION\")]),_c('v-card-text',[_vm._v(\"Mandatory, Bilateral Arbitration and Waiver of Class Actions PLEASE READ THIS SECTION CAREFULLY – IT MAY SIGNIFICANTLY AFFECT YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT. YOU AND HAIKUBOX AGREE THAT ANY DISPUTE, CONTROVERSY, OR CLAIM ARISING OUT OF, OR RELATING TO YOUR USE OF THE SERVICES AND/OR PRODUCTS, TO THIS AGREEMENT, OR TO THE CONTENT, ANY RELATIONSHIP BETWEEN US AND/OR ANY RECORDING ON THE SERVICES AND/OR PRODUCTS SHALL BE RESOLVED ONLY BY FINAL AND BINDING, BILATERAL ARBITRATION, except that (1) you may assert claims in small claims court in your county of residence within the United States if your claims qualify; and (2) this agreement to arbitrate does not include your or Haikubox’s right to seek injunctive or other equitable relief in state or federal court in Sarasota County, Florida to prevent the actual or threatened infringement, misappropriation or violation of a party’s copyrights, trademarks, trade secrets, patents, or other intellectual property rights. The Federal Arbitration Act (the “FAA”), 9 U.S.C. § 1, et seq., and federal arbitration law apply to this Agreement and govern all questions as to whether a dispute is subject to arbitration. There is no judge or jury in arbitration, and court review of an arbitration award is limited. An arbitrator, however, can award on an individual basis the same damages and relief as a court (including injunctive and declaratory relief or statutory damages), and must follow the terms of the Agreement. “Disputes” shall include, but are not limited to, any claims or controversies between you and Haikubox against each other related in any way to or arising out of in any way from this Agreement, the Services, the Products, and/or the Content, including but not limited to sales, returns, refunds, cancellations, defects, policies, privacy, advertising, or any communications between you and Haikubox, even if the claim arises after you or Haikubox has terminated Services or a user account. Disputes also include, but are not limited to, claims that: (a) you bring against our employees, agents, affiliates, or other representatives; or (b) Haikubox brings against you. Disputes also include, but are not limited to, (i) claims in any way related to or arising out of any aspect of the relationship between you and Haikubox, whether based in contract, tort, statute, fraud, misrepresentation, advertising claims, or any other legal theory; (ii) claims that arose before these Terms or out of a prior set of Terms with Haikubox; (iii) claims that are subject to on-going litigation where you are not a party or a class member; and/or (iv) claims that arise after the termination of these Terms. \")]),_c('v-card-subtitle',[_vm._v(\" Dispute Notice\")]),_c('v-card-text',[_vm._v(\"Before initiating an arbitration, you and Haikubox each agree to first provide the other a written notice (“Notice of Dispute”), which shall contain: (a) a written description of the problem and relevant documents and supporting information; and (b) a statement of the specific relief sought. A Notice of Dispute should be sent to: Stanton IP Law Firm, 201 East Kennedy Blvd., Suite 825, Tampa, FL 33602, Attention: Legal Department. We will provide a Notice of Dispute to you via the email address associated with your Haikubox account. You and Haikubox agree to attempt in good faith to resolve the Dispute prior to commencing an arbitration and not to commence an arbitration proceeding until a forty-five (45) day post-notice resolution period expires. *Arbitration Process and Procedure * If the parties do not reach an agreed upon solution within forty-five (45) days from the original Dispute Notice, then either party may initiate binding arbitration as the sole means to resolve claims, subject to these terms. Arbitration shall (1) be administered by the Judicial Arbitration and Mediation Services, Inc. (“JAMS”), pursuant to the JAMS Streamlined Arbitration Rules & Procedures then in effect (the “JAMS Rules”) and as modified by this agreement to arbitrate, including the rules regarding filing, administration, discovery, and arbitrator fees; (2) be conducted by a single, neutral arbitrator; and (3) take place in the county where you reside or any reasonable location within the United States convenient for you. To the extent that this agreement to arbitrate conflicts with the JAMS Policy on Consumer Arbitrations Pursuant to Pre-Dispute Clauses Minimum Standards for Procedural Fairness (the “Minimum Standards”), the Minimum Standards in that regard will apply. WE EACH AGREE THAT ANY DISPUTE RESOLUTION PROCEEDINGS WILL BE CONDUCTED ONLY ON AN INDIVIDUAL BASIS AND NOT IN A CLASS, REPRESENTATIVE OR PRIVATE ATTORNEY GENERAL ACTION. Further, unless both you and Haikubox expressly agree otherwise, the arbitrator may not consolidate more than one person’s claims and may not otherwise preside over any form of a representative or class proceeding. If a court decides that applicable law precludes enforcement of any of this subsection’s limitations as to a particular claim for relief, then that claim (and only that claim) must be severed from the arbitration and may be brought in court. If, for any reason, a claim proceeds in court rather than in arbitration, we each waive our right to a jury trial. YOU THEREFORE UNDERSTAND AND AGREE THAT BY ENTERING INTO THIS AGREEMENT, YOU AND HAIKUBOX ARE EACH WAIVING THE RIGHT TO A TRIAL BY JURY AND THE RIGHT TO PARTICIPATE IN A CLASS OR REPRESENTATIVE ACTION FOR ANY CLAIMS COVERED BY THIS AGREEMENT. The JAMS Rules are available on its website at http://www.jamsadr.com/rules-streamlined-arbitration/. Notwithstanding any JAMS Rules to the contrary or any other provision in the arbitration rules chosen, by agreement, to govern, you and Haikubox each agree that all issues regarding the Dispute are delegated to the arbitrator to decide. Further, the arbitrator, and not any federal, state or local court or agency, shall have exclusive authority to resolve all disputes arising out of or relating to the interpretation, applicability, enforceability or formation of these Terms, including, but not limited to any claim that all or any part of these Terms are void or voidable, or whether a claim is subject to arbitration. The arbitrator’s award shall be written, and binding on the parties and may be entered as a judgment in any court of competent jurisdiction. \")]),_c('v-card-subtitle',[_vm._v(\" Hearing:\")]),_c('v-card-text',[_vm._v(\"If your claim does not exceed $10,000 (USD), you and Haikubox agree to waive an oral hearing by the arbitrator and the arbitration will be conducted solely on the basis of documents you and Haikubox submit to the arbitrator, unless you request a hearing or the arbitrator determines that a hearing is necessary. To the extent an oral hearing is requested by you or Haikubox, or deemed necessary by the arbitrator, you and Haikubox agree that the hearing will be conducted telephonically or by video. \")]),_c('v-card-subtitle',[_vm._v(\" Arbitrator's Decision:\")]),_c('v-card-text',[_vm._v(\"An arbitrator’s award will be a written statement of the disposition of each claim and will also provide a concise written statement of the essential findings and conclusions which form the basis of the award. The arbitrator’s decision and award is final and binding, with some limited court review under the FAA, and judgment on the award may be entered in any court of competent jurisdiction. *Fees * It is each parties’ responsibility to pay any JAMS filing, case management/administrative, and arbitrator fees as set forth in the JAMS Rules. To the extent the filing fee for the arbitration exceeds the cost of filing a lawsuit, Haikubox will pay the additional cost. If your claim for damages does not exceed $25,000 (USD) and you follow the dispute notice procedure set forth above, Haikubox will pay all such fees unless the arbitrator finds that either the substance of your Dispute or the relief sought was frivolous or was brought for an improper purpose (as measured by the standards set forth in the Federal Rule of Civil Procedure 11(b)). *Small Claims & Government Actions * As an alternative to arbitration, you or Haikubox may resolve Disputes in a small claims court that has jurisdiction over your claim. These Terms and this arbitration agreement do not prevent you from bringing your Dispute to the attention of any federal, state, or local government agency. Such agencies can, if the law allows, seek relief against Haikubox on your behalf. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" SEVERABILITY AND SURVIVAL\")]),_c('v-card-text',[_vm._v(\" If any provision of these Terms shall be deemed unlawful, void, or for any reason unenforceable, then that provision shall be deemed severable from the remaining Terms and shall not affect the validity and enforceability of any remaining provisions. Provisions that, by their nature, should survive termination of these Terms shall survive termination. By way of example, all of the following will survive termination: any obligation you have to pay us or indemnify us, any limitations on our liability, any terms regarding ownership of intellectual property rights, and terms regarding disputes between us. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"WAIVER \")]),_c('v-card-text',[_vm._v(\" The failure of Haikubox to exercise or enforce any right or provision of this Agreement shall not operate as a waiver of such right or provision. Any waiver of this Agreement by Haikubox must be in writing and signed by an authorized representative of Haikubox. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"ENTIRE AGREEMENT \")]),_c('v-card-text',[_vm._v(\" This Agreement constitutes the entire agreement between you and Haikubox and governs the terms and conditions of your use of the Site, the Products, and Services and supersedes all prior or contemporaneous communications and proposals, whether electronic, oral, or written, between you and Haikubox with respect to this Site, the Products, and Services. Notwithstanding the foregoing, you may also be subject to additional terms and conditions, posted policies (including but not limited to the Privacy Notice), guidelines, or rules that may apply when you use the website. Haikubox may revise this Agreement at any time by updating this Agreement and posting it on the Site. Accordingly, you should visit the Site and review the Terms of Service periodically to determine if any changes have been made. Your continued use of this website after any changes have been made to the Terms of Service signifies and confirms your acceptance of any such changes or amendments to the Terms of Service. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"PRIVACY \")]),_c('v-card-text',[_vm._v(\" Please see our Privacy Notice for information regarding the collection and use of personal information collected through our Products and Services. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\"RELATIONSHIP OF THE PARTIES \")]),_c('v-card-text',[_vm._v(\" Nothing contained in this Agreement or your use of the Site shall be construed to constitute either party as a partner, joint venturer, employee, or agent of the other party, nor shall either party hold itself out as such. Neither party has any right or authority to incur, assume, or create, in writing or otherwise, any warranty, liability or other obligation of any kind, express or implied, in the name of or on behalf of the other party, it being intended by both parties that each shall remain independent contractors responsible for its own actions. \")])],1),_c('v-card',[_c('v-card-title',[_vm._v(\" CUSTOMER SERVICE\")]),_c('v-card-text',[_vm._v(\" Questions concerning these Terms, requests for refund, or other requests or questions should be directed to the contact point specified at the end of these Terms. Haikubox, 6576 Palmer Park Circle, Sarasota, FL 34238. support@haikubox.com \")])],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Terms.vue?vue&type=template&id=80fe5c56\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (this.user != '')?_c('v-form',[_c('v-card',{staticClass:\"mx-auto my-8\",attrs:{\"color\":\"orange darken-2\",\"dark\":\"\"}},[_c('v-card-title',[_vm._v(\" This page is for experts to label target species\")]),_c('v-card-subtitle',[_vm._v(\" Use Chrome Browser on Desktop\")]),_c('v-btn',{staticClass:\"mx-8 my-8\",attrs:{\"color\":\"#385F73\"},on:{\"click\":_vm.getStats}},[_vm._v(\"Summary Stats By Species\")]),_c('v-overflow-btn',{staticClass:\"my-2\",attrs:{\"items\":_vm.dropdown_class,\"label\":\"Select Label\",\"hint\":\"Label to Query\"},model:{value:(_vm.labelSearch),callback:function ($$v) {_vm.labelSearch=$$v},expression:\"labelSearch\"}}),_c('v-data-table',{staticClass:\"elevation-1\",attrs:{\"dense\":\"\",\"headers\":_vm.tableHeaders,\"items\":_vm.labelTable,\"item-key\":\"name\"}})],1),_c('v-card',{staticClass:\"mx-auto my-8\",attrs:{\"color\":\"blue-grey darken-2\",\"dark\":\"\",\"max-width\":\"100%\"}},[_c('v-card-title',[_vm._v(\" Species To Label\")]),(_vm.species != '')?_c('v-btn',{staticClass:\"mx-2\",on:{\"click\":function($event){return _vm.selectSpecies(_vm.species)}}},[_vm._v(\"Reload\")]):_vm._e(),_c('v-overflow-btn',{staticClass:\"my-2\",attrs:{\"items\":_vm.targetList,\"label\":\"Select Species\"},on:{\"change\":function($event){return _vm.selectSpecies(_vm.species)}},model:{value:(_vm.species),callback:function ($$v) {_vm.species=$$v},expression:\"species\"}})],1),_c('v-container',[_c('v-snackbar',{attrs:{\"timeout\":\"1500\",\"color\":\"cyan\",\"darken-2\":\"\"},scopedSlots:_vm._u([{key:\"action\",fn:function({ attrs }){return [_c('v-btn',_vm._b({attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.snackbar = false}}},'v-btn',attrs,false))]}}],null,false,175347437),model:{value:(_vm.snackbar),callback:function ($$v) {_vm.snackbar=$$v},expression:\"snackbar\"}},[_vm._v(\" No audio \")]),_vm._l((_vm.hitsToLabel),function(item,index){return _c('v-row',{key:item.id},[_c('v-card',{staticClass:\"mx-auto my-8\",attrs:{\"color\":\"blue-grey darken-4\",\"dark\":\"\",\"width\":\"100%\"}},[_c('v-card-title',[_vm._v(_vm._s(item.cn)+\" \"+_vm._s(item.createdAt)+\" | score:\"+_vm._s(item.score)+\" | specSum:\"+_vm._s(item.specSum)+\" \"),_c('v-spacer'),_c('v-btn',{attrs:{\"text\":\"\",\"href\":'https://ebird.org/species/' + item.spCode,\"target\":\"_blank\",\"color\":\"light-blue\"}},[_vm._v(\"eBird\")])],1),_c('v-card-subtitle',[_vm._v(_vm._s(item.serial)+_vm._s(item.name)+\" \"+_vm._s(item.detectionArray)+\" v\"+_vm._s(item.version)+\".lat:\"+_vm._s(item.lat)+\" .lon:\"+_vm._s(item.lon)+\" \")]),_c('v-card-subtitle',[_c('Plotly',{attrs:{\"data\":item.spectrogram,\"layout\":_vm.plotlyLayout,\"display-mode-bar\":false}})],1),_c('v-card-actions',[(item.wav)?_c('v-btn',{attrs:{\"color\":\"#385F73\"},on:{\"click\":function($event){return _vm.play(item.wav)}}},[_vm._v(\"Play\")]):_vm._e(),(item.wav)?_c('v-btn',{attrs:{\"color\":\"#385F73\"},on:{\"click\":function($event){return _vm.skip(item.wav, index)}}},[_vm._v(\"Skip\")]):_vm._e(),_c('v-slider',{staticClass:\"px-3\",attrs:{\"prepend-icon\":\"mdi-volume-high\",\"min\":\"40\",\"max\":\"200\"},model:{value:(_vm.playbackGain),callback:function ($$v) {_vm.playbackGain=$$v},expression:\"playbackGain\"}}),_c('v-btn',{attrs:{\"text\":\"\",\"href\":'https://ebird.org/species/' + item.spCode,\"target\":\"_blank\"}},[_vm._v(\"Learn More\")])],1),(item.wav)?_c('v-overflow-btn',{staticClass:\"my-2\",attrs:{\"background-color\":item.classLabel != null ? 'accent' : 'darken',\"items\":_vm.dropdown_class,\"label\":\"Label\",\"target\":\"#label_all_sound\"},on:{\"change\":function($event){return _vm.labelHit(item, index)}},model:{value:(item.classLabel),callback:function ($$v) {_vm.$set(item, \"classLabel\", $$v)},expression:\"item.classLabel\"}}):_vm._e()],1)],1)})],2)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-form v-if=\"this.user != ''\">\n    <v-card color=\"orange darken-2\" dark class=\"mx-auto my-8\">\n      <v-card-title>\n        This page is for experts to label target species</v-card-title\n      >\n      <v-card-subtitle> Use Chrome Browser on Desktop</v-card-subtitle>\n      <v-btn class=\"mx-8 my-8\" @click=\"getStats\" color=\"#385F73\"\n        >Summary Stats By Species</v-btn\n      >\n\n      <v-overflow-btn\n        class=\"my-2\"\n        :items=\"dropdown_class\"\n        label=\"Select Label\"\n        v-model=\"labelSearch\"\n        hint=\"Label to Query\"\n      ></v-overflow-btn>\n      <v-data-table\n        dense\n        :headers=\"tableHeaders\"\n        :items=\"labelTable\"\n        item-key=\"name\"\n        class=\"elevation-1\"\n      >\n        <!-- <template slot=\"body.append\">\n                <tr class=\"yellow--text\">\n                    <th class=\"title\">Totals</th>\n                    <td  v-for=\"bird in targetList\" :key=\"bird\">\n                    <th class=\"title\">{{ sumField(bird) }}</th>\n                    </td>\n                </tr>\n            </template> -->\n      </v-data-table>\n      <!-- <v-btn\n            class=\"mx-8 my-8\" \n              @click=\"getFalseDetectionStats\"\n              color=\"#385F73\"\n              >Get False Detection Stats</v-btn\n            >\n            <v-data-table\n              dense\n              :headers=\"falseDetectionHeaders\"\n              :items=\"falseDetectionTable\"\n              item-key=\"name\"\n              class=\"elevation-1\"\n              >\n              <template slot=\"body.append\">\n                <tr class=\"yellow--text\">\n                    <th class=\"title\">Totals</th>\n                    <td  v-for=\"label in dropdown_class\" :key=\"label\">\n                    <th class=\"title\">{{ sumFalseDetection(label) }}</th>\n                    </td>\n                </tr>\n            </template>\n            </v-data-table> -->\n    </v-card>\n    <!-- <v-card\n      color=\"blue-grey darken-2\"\n      dark\n      class=\"mx-auto my-8\"\n      max-width=\"100%\"\n    >\n      <v-card-title> Haikubox: {{ haikuboxName }}</v-card-title>\n\n      <v-overflow-btn\n        @change=\"selectHaikubox(haikubox)\"\n        class=\"my-2\"\n        :items=\"haikuboxList\"\n        label=\"Select Haikubox\"\n        v-model=\"haikubox\"\n      ></v-overflow-btn>\n    </v-card> -->\n    <!-- <v-expansion-panels>\n            <v-expansion-panel>\n              <v-expansion-panel-header>Top detections</v-expansion-panel-header>\n              <v-expansion-panel-content>\n            <v-list dense>\n              <v-list-item v-for=\"item in seriesDaily\" :key=\"item.name\">\n                <v-list-item-content>\n                  {{item.data}}  {{item.name}}\n                </v-list-item-content>\n              </v-list-item>\n            </v-list>\n              </v-expansion-panel-content>\n            </v-expansion-panel>\n          </v-expansion-panels> -->\n    <v-card\n      color=\"blue-grey darken-2\"\n      dark\n      class=\"mx-auto my-8\"\n      max-width=\"100%\"\n    >\n      <v-card-title> Species To Label</v-card-title>\n      <!-- <v-card-subtitle>Soundscape labeled {{ nLabeled }}</v-card-subtitle> -->\n      <v-btn class=\"mx-2\" v-if=\"species != ''\" @click=\"selectSpecies(species)\"\n        >Reload</v-btn\n      >\n      <v-overflow-btn\n        @change=\"selectSpecies(species)\"\n        class=\"my-2\"\n        :items=\"targetList\"\n        label=\"Select Species\"\n        v-model=\"species\"\n      ></v-overflow-btn>\n    </v-card>\n    <v-container>\n      <v-snackbar v-model=\"snackbar\" timeout=\"1500\" color=\"cyan\" darken-2>\n        No audio\n\n        <template v-slot:action=\"{ attrs }\">\n          <v-btn text v-bind=\"attrs\" @click=\"snackbar = false\"> </v-btn>\n        </template>\n      </v-snackbar>\n      <v-row v-for=\"(item, index) in hitsToLabel\" :key=\"item.id\">\n        <v-card\n          color=\"blue-grey darken-4\"\n          dark\n          class=\"mx-auto my-8\"\n          width=\"100%\"\n        >\n          <v-card-title\n            >{{ item.cn }} {{ item.createdAt }} | score:{{ item.score }} |\n            specSum:{{ item.specSum }}\n            <v-spacer></v-spacer>\n            <v-btn\n              text\n              :href=\"'https://ebird.org/species/' + item.spCode\"\n              target=\"_blank\"\n              color=\"light-blue\"\n              >eBird</v-btn\n            >\n          </v-card-title>\n          <v-card-subtitle\n            >{{ item.serial }}{{ item.name }} {{ item.detectionArray }} v{{\n              item.version\n            }}.lat:{{ item.lat }} .lon:{{ item.lon }}\n          </v-card-subtitle>\n          <v-card-subtitle>\n            <Plotly\n              :data=\"item.spectrogram\"\n              :layout=\"plotlyLayout\"\n              :display-mode-bar=\"false\"\n            ></Plotly>\n          </v-card-subtitle>\n\n          <v-card-actions>\n            <v-btn v-if=\"item.wav\" @click=\"play(item.wav)\" color=\"#385F73\"\n              >Play</v-btn\n            >\n            <v-btn\n              v-if=\"item.wav\"\n              @click=\"skip(item.wav, index)\"\n              color=\"#385F73\"\n              >Skip</v-btn\n            >\n            <v-slider\n              class=\"px-3\"\n              v-model=\"playbackGain\"\n              prepend-icon=\"mdi-volume-high\"\n              min=\"40\"\n              max=\"200\"\n            ></v-slider>\n            <v-btn\n              text\n              :href=\"'https://ebird.org/species/' + item.spCode\"\n              target=\"_blank\"\n              >Learn More</v-btn\n            >\n          </v-card-actions>\n          <v-overflow-btn\n            v-if=\"item.wav\"\n            @change=\"labelHit(item, index)\"\n            :background-color=\"item.classLabel != null ? 'accent' : 'darken'\"\n            class=\"my-2\"\n            :items=\"dropdown_class\"\n            label=\"Label\"\n            target=\"#label_all_sound\"\n            v-model=\"item.classLabel\"\n          ></v-overflow-btn>\n        </v-card>\n      </v-row>\n    </v-container>\n  </v-form>\n</template>\n\n<script>\nimport { API, Storage } from \"aws-amplify\";\nimport {\n  hitsBySpeciesByDate,\n  haikuboxByType,\n  dailyCountBySerialByDate,\n  labelBySerialByLabel,\n  getDeviceState,\n  labelByCnByLabel,\n} from \"../graphql/queries\";\nimport { createLabeledData, updateHit } from \"../graphql/mutations\";\nvar moment = require(\"moment-timezone\");\n\nimport { unmute } from \"../unmute.min.js\";\nimport { AudioContext, decodeAudioData } from \"standardized-audio-context\";\n// const AudioContext = window.AudioContext || window.webkitAudioContext;\nlet globalAudioContext = null;\nlet globalGainNode = null;\n\n// var fft = require('fft-js').fft;\n// var fftUtil = require('fft-js').util;\nvar hann = [\n  0.0, 3.77965773e-5, 1.51180595e-4, 3.4013491e-4, 6.04630957e-4, 9.44628746e-4,\n  1.36007687e-3, 1.85091253e-3, 2.41706151e-3, 3.05843822e-3, 3.77494569e-3,\n  4.56647559e-3, 5.43290826e-3, 6.3741127e-3, 7.38994662e-3, 8.48025644e-3,\n  9.64487731e-3, 1.08836332e-2, 1.21963367e-2, 1.35827895e-2, 1.50427819e-2,\n  1.65760932e-2, 1.81824916e-2, 1.98617342e-2, 2.16135671e-2, 2.34377255e-2,\n  2.53339336e-2, 2.73019047e-2, 2.93413412e-2, 3.1451935e-2, 3.36333667e-2,\n  3.58853068e-2, 3.82074146e-2, 4.05993391e-2, 4.30607187e-2, 4.55911813e-2,\n  4.81903443e-2, 5.08578147e-2, 5.35931893e-2, 5.63960544e-2, 5.92659864e-2,\n  6.22025514e-2, 6.52053053e-2, 6.82737943e-2, 7.14075543e-2, 7.46061116e-2,\n  7.78689827e-2, 8.11956742e-2, 8.45856832e-2, 8.80384971e-2, 9.1553594e-2,\n  9.51304424e-2, 9.87685015e-2, 1.02467221e-1, 1.06226043e-1, 1.10044397e-1,\n  1.13921708e-1, 1.17857388e-1, 1.21850843e-1, 1.25901469e-1, 1.30008654e-1,\n  1.34171776e-1, 1.38390206e-1, 1.42663307e-1, 1.46990432e-1, 1.51370928e-1,\n  1.55804131e-1, 1.60289372e-1, 1.64825973e-1, 1.69413247e-1, 1.74050502e-1,\n  1.78737036e-1, 1.8347214e-1, 1.88255099e-1, 1.9308519e-1, 1.97961681e-1,\n  2.02883837e-1, 2.07850913e-1, 2.12862158e-1, 2.17916814e-1, 2.23014117e-1,\n  2.28153297e-1, 2.33333576e-1, 2.38554171e-1, 2.43814294e-1, 2.49113148e-1,\n  2.54449933e-1, 2.59823842e-1, 2.65234062e-1, 2.70679775e-1, 2.76160159e-1,\n  2.81674384e-1, 2.87221617e-1, 2.92801019e-1, 2.98411747e-1, 3.04052952e-1,\n  3.09723782e-1, 3.15423378e-1, 3.21150881e-1, 3.26905422e-1, 3.32686134e-1,\n  3.38492141e-1, 3.44322565e-1, 3.50176526e-1, 3.56053138e-1, 3.61951513e-1,\n  3.6787076e-1, 3.73809982e-1, 3.79768282e-1, 3.8574476e-1, 3.91738511e-1,\n  3.97748631e-1, 4.03774209e-1, 4.09814335e-1, 4.15868096e-1, 4.21934577e-1,\n  4.2801286e-1, 4.34102027e-1, 4.40201156e-1, 4.46309327e-1, 4.52425614e-1,\n  4.58549094e-1, 4.64678841e-1, 4.70813928e-1, 4.76953428e-1, 4.83096412e-1,\n  4.89241951e-1, 4.95389117e-1, 5.0153698e-1, 5.07684611e-1, 5.1383108e-1,\n  5.19975458e-1, 5.26116815e-1, 5.32254225e-1, 5.38386758e-1, 5.44513487e-1,\n  5.50633486e-1, 5.56745831e-1, 5.62849596e-1, 5.68943859e-1, 5.75027699e-1,\n  5.81100196e-1, 5.87160431e-1, 5.93207489e-1, 5.99240456e-1, 6.05258418e-1,\n  6.11260467e-1, 6.17245695e-1, 6.23213197e-1, 6.2916207e-1, 6.35091417e-1,\n  6.41000339e-1, 6.46887944e-1, 6.52753341e-1, 6.58595644e-1, 6.6441397e-1,\n  6.70207439e-1, 6.75975174e-1, 6.81716305e-1, 6.87429962e-1, 6.93115283e-1,\n  6.98771407e-1, 7.0439748e-1, 7.09992651e-1, 7.15556073e-1, 7.21086907e-1,\n  7.26584315e-1, 7.32047467e-1, 7.37475536e-1, 7.42867702e-1, 7.4822315e-1,\n  7.5354107e-1, 7.58820659e-1, 7.64061117e-1, 7.69261652e-1, 7.74421479e-1,\n  7.79539817e-1, 7.84615893e-1, 7.89648938e-1, 7.94638193e-1, 7.99582902e-1,\n  8.04482319e-1, 8.09335702e-1, 8.14142317e-1, 8.18901439e-1, 8.23612347e-1,\n  8.28274329e-1, 8.32886681e-1, 8.37448705e-1, 8.41959711e-1, 8.46419017e-1,\n  8.5082595e-1, 8.55179843e-1, 8.59480037e-1, 8.63725883e-1, 8.67916738e-1,\n  8.7205197e-1, 8.76130952e-1, 8.80153069e-1, 8.84117711e-1, 8.88024281e-1,\n  8.91872186e-1, 8.95660845e-1, 8.99389686e-1, 9.03058145e-1, 9.06665667e-1,\n  9.10211707e-1, 9.13695728e-1, 9.17117204e-1, 9.20475618e-1, 9.23770461e-1,\n  9.27001237e-1, 9.30167455e-1, 9.33268638e-1, 9.36304317e-1, 9.39274033e-1,\n  9.42177336e-1, 9.45013788e-1, 9.4778296e-1, 9.50484434e-1, 9.531178e-1,\n  9.55682662e-1, 9.5817863e-1, 9.60605328e-1, 9.62962389e-1, 9.65249456e-1,\n  9.67466184e-1, 9.69612237e-1, 9.71687291e-1, 9.73691033e-1, 9.75623159e-1,\n  9.77483377e-1, 9.79271407e-1, 9.80986977e-1, 9.82629829e-1, 9.84199713e-1,\n  9.85696393e-1, 9.87119643e-1, 9.88469246e-1, 9.89745e-1, 9.90946711e-1,\n  9.92074198e-1, 9.9312729e-1, 9.94105827e-1, 9.95009663e-1, 9.9583866e-1,\n  9.96592693e-1, 9.97271648e-1, 9.97875422e-1, 9.98403924e-1, 9.98857075e-1,\n  9.99234805e-1, 9.99537058e-1, 9.99763787e-1, 9.99914959e-1, 9.99990551e-1,\n  9.99990551e-1, 9.99914959e-1, 9.99763787e-1, 9.99537058e-1, 9.99234805e-1,\n  9.98857075e-1, 9.98403924e-1, 9.97875422e-1, 9.97271648e-1, 9.96592693e-1,\n  9.9583866e-1, 9.95009663e-1, 9.94105827e-1, 9.9312729e-1, 9.92074198e-1,\n  9.90946711e-1, 9.89745e-1, 9.88469246e-1, 9.87119643e-1, 9.85696393e-1,\n  9.84199713e-1, 9.82629829e-1, 9.80986977e-1, 9.79271407e-1, 9.77483377e-1,\n  9.75623159e-1, 9.73691033e-1, 9.71687291e-1, 9.69612237e-1, 9.67466184e-1,\n  9.65249456e-1, 9.62962389e-1, 9.60605328e-1, 9.5817863e-1, 9.55682662e-1,\n  9.531178e-1, 9.50484434e-1, 9.4778296e-1, 9.45013788e-1, 9.42177336e-1,\n  9.39274033e-1, 9.36304317e-1, 9.33268638e-1, 9.30167455e-1, 9.27001237e-1,\n  9.23770461e-1, 9.20475618e-1, 9.17117204e-1, 9.13695728e-1, 9.10211707e-1,\n  9.06665667e-1, 9.03058145e-1, 8.99389686e-1, 8.95660845e-1, 8.91872186e-1,\n  8.88024281e-1, 8.84117711e-1, 8.80153069e-1, 8.76130952e-1, 8.7205197e-1,\n  8.67916738e-1, 8.63725883e-1, 8.59480037e-1, 8.55179843e-1, 8.5082595e-1,\n  8.46419017e-1, 8.41959711e-1, 8.37448705e-1, 8.32886681e-1, 8.28274329e-1,\n  8.23612347e-1, 8.18901439e-1, 8.14142317e-1, 8.09335702e-1, 8.04482319e-1,\n  7.99582902e-1, 7.94638193e-1, 7.89648938e-1, 7.84615893e-1, 7.79539817e-1,\n  7.74421479e-1, 7.69261652e-1, 7.64061117e-1, 7.58820659e-1, 7.5354107e-1,\n  7.4822315e-1, 7.42867702e-1, 7.37475536e-1, 7.32047467e-1, 7.26584315e-1,\n  7.21086907e-1, 7.15556073e-1, 7.09992651e-1, 7.0439748e-1, 6.98771407e-1,\n  6.93115283e-1, 6.87429962e-1, 6.81716305e-1, 6.75975174e-1, 6.70207439e-1,\n  6.6441397e-1, 6.58595644e-1, 6.52753341e-1, 6.46887944e-1, 6.41000339e-1,\n  6.35091417e-1, 6.2916207e-1, 6.23213197e-1, 6.17245695e-1, 6.11260467e-1,\n  6.05258418e-1, 5.99240456e-1, 5.93207489e-1, 5.87160431e-1, 5.81100196e-1,\n  5.75027699e-1, 5.68943859e-1, 5.62849596e-1, 5.56745831e-1, 5.50633486e-1,\n  5.44513487e-1, 5.38386758e-1, 5.32254225e-1, 5.26116815e-1, 5.19975458e-1,\n  5.1383108e-1, 5.07684611e-1, 5.0153698e-1, 4.95389117e-1, 4.89241951e-1,\n  4.83096412e-1, 4.76953428e-1, 4.70813928e-1, 4.64678841e-1, 4.58549094e-1,\n  4.52425614e-1, 4.46309327e-1, 4.40201156e-1, 4.34102027e-1, 4.2801286e-1,\n  4.21934577e-1, 4.15868096e-1, 4.09814335e-1, 4.03774209e-1, 3.97748631e-1,\n  3.91738511e-1, 3.8574476e-1, 3.79768282e-1, 3.73809982e-1, 3.6787076e-1,\n  3.61951513e-1, 3.56053138e-1, 3.50176526e-1, 3.44322565e-1, 3.38492141e-1,\n  3.32686134e-1, 3.26905422e-1, 3.21150881e-1, 3.15423378e-1, 3.09723782e-1,\n  3.04052952e-1, 2.98411747e-1, 2.92801019e-1, 2.87221617e-1, 2.81674384e-1,\n  2.76160159e-1, 2.70679775e-1, 2.65234062e-1, 2.59823842e-1, 2.54449933e-1,\n  2.49113148e-1, 2.43814294e-1, 2.38554171e-1, 2.33333576e-1, 2.28153297e-1,\n  2.23014117e-1, 2.17916814e-1, 2.12862158e-1, 2.07850913e-1, 2.02883837e-1,\n  1.97961681e-1, 1.9308519e-1, 1.88255099e-1, 1.8347214e-1, 1.78737036e-1,\n  1.74050502e-1, 1.69413247e-1, 1.64825973e-1, 1.60289372e-1, 1.55804131e-1,\n  1.51370928e-1, 1.46990432e-1, 1.42663307e-1, 1.38390206e-1, 1.34171776e-1,\n  1.30008654e-1, 1.25901469e-1, 1.21850843e-1, 1.17857388e-1, 1.13921708e-1,\n  1.10044397e-1, 1.06226043e-1, 1.02467221e-1, 9.87685015e-2, 9.51304424e-2,\n  9.1553594e-2, 8.80384971e-2, 8.45856832e-2, 8.11956742e-2, 7.78689827e-2,\n  7.46061116e-2, 7.14075543e-2, 6.82737943e-2, 6.52053053e-2, 6.22025514e-2,\n  5.92659864e-2, 5.63960544e-2, 5.35931893e-2, 5.08578147e-2, 4.81903443e-2,\n  4.55911813e-2, 4.30607187e-2, 4.05993391e-2, 3.82074146e-2, 3.58853068e-2,\n  3.36333667e-2, 3.1451935e-2, 2.93413412e-2, 2.73019047e-2, 2.53339336e-2,\n  2.34377255e-2, 2.16135671e-2, 1.98617342e-2, 1.81824916e-2, 1.65760932e-2,\n  1.50427819e-2, 1.35827895e-2, 1.21963367e-2, 1.08836332e-2, 9.64487731e-3,\n  8.48025644e-3, 7.38994662e-3, 6.3741127e-3, 5.43290826e-3, 4.56647559e-3,\n  3.77494569e-3, 3.05843822e-3, 2.41706151e-3, 1.85091253e-3, 1.36007687e-3,\n  9.44628746e-4, 6.04630957e-4, 3.4013491e-4, 1.51180595e-4, 3.77965773e-5, 0.0,\n];\n\nimport { FFT } from \"dsp.js\";\nimport { Plotly } from \"vue-plotly\";\n\nexport default {\n  name: \"Label\",\n  props: [\"user\"],\n  created() {\n    this.getHaikuboxList();\n  },\n  components: {\n    Plotly,\n  },\n  mounted() {},\n  data() {\n    return {\n      snackbar: false,\n      showSpeciesList: false,\n      playbackGain: 100,\n      fftLength: 512,\n      halfLength: 100,\n      audioPlaying: false,\n      pauseLabel: \"Pause\",\n      file: \"https://haikubox-media152750-prod.s3.amazonaws.com/public/Haikubox_1000000042361621/audio/bcnher_63_2020-10-29T20%3A13%3A37.660514Z.flac?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAW2VJULPB3WSHNY46%2F20201124%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20201124T191741Z&X-Amz-Expires=900&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEGQaCXVzLWVhc3QtMSJIMEYCIQCuYNQpdcHg1nsA5b6o3bDBmvHvLz%2F%2F%2B%2BFfouKpqAdHWQIhAIhokh8sbcz7z%2FNCr2djIWbT8fgODhHn%2FYA1VoDSeYntKs0ECNz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQAhoMNDY5NTgwOTI5OTg3Igxac6GaiIZ18YGgmRQqoQTtKlxZJJ%2FL5wyJxUfT2WIzJStAIgYgj6UwriyNG%2B2enc%2FPFsJ%2F3h1E9hfxEPqkbtiXm%2FhHM8dl7dKDfx5yz5mAJtgDZO%2Fw5iINeS%2F1utylwyIcsSqv6%2BLxF0eRw9pZLQZuMeAyqLalgc04CS3yAMYxC%2FcqJtN5yt7t1wuN23lRpoVz3vZ7Vaf9WUWpdNlEHE%2BMvK8ly3sI8kRlPMI0iPquPUSe1SMI0dAmDc8kfZRwYf165H8ze3KBR39yCWu2V8X5YkdTBTSLidCiz8r6ai2cQdyJEZfIY57AntGA6R5Mye9royV%2B0M8C%2BZn3iL33bdtzdrPNMAWPW1DlTM08Xrf%2ByWiXNGEAZvGIe1%2BusGnV9zQf7%2Bp57402gJePYnvXWC41LnuToRnvIUH15BmUiymvy54WNQ0Xo2tYZTiWT3BhKnxQ7PFTu%2FNOWk3z4K597QWy%2BBgI1D3mj9ShhLupj75eL8hQ5CQH3H7jQV0gBGt%2BW%2FNWPWq1%2FEBx4SszShzev7ysjgTkpa1dx%2Bz%2BgmRMamz3OU7k4Mnq99Wl9nB0esHtbYHLO8N5gm0M3DQ6xKXeBkM0Pf93RDS01vPvaP0UtpRFFqacyb%2BZDL%2F6my1oC3hVXu6HprXeuF87BNwrHpvx2yJm8D%2BGHum72uY0h%2FUGhqI9lr1DC%2Fc8m4hfgFQ95FumaTapcLxmPrnEXy%2FZ0oh%2FqKCBmgZ2F9OTS7AzAOwu23ubezDvtPX9BTqEArI4ZyljiBv59kWuuI0AW6RFdGhUmZALWesphIE0fdTXhZ4I3OD8eZJUZq7e%2FrobZzBCxcWYToo%2B2FjT59dOPpyYey6IzwCaeG5Na9jUYMSEr200FQciBvee29lvgS0ctxkuHeBFUNa9Js0PCOyv026qbfL4LemvYEZMuXQz22zRj6pd3xUICzJdMIe6%2F0AYQWoT4UKtc6dE8ddWFR20QghrRXL31g3DhDse1%2FBRg2r0a7%2F1ZqgBGPw4ErUj%2BiOalcBID86B0UeZh7Gpeyjj%2B0ASxU89lvGD668ILVn2NX%2BW90nrhi1Fnw9LQhhY%2FGEDZdmGBqs%2FvmvxIGpvs01qjs0oEw%2BL&X-Amz-Signature=5f72f16c613f40d550512d3b1c14ed33281dc8c16edb02f855aa33b1106bbc7a&X-Amz-SignedHeaders=host&x-amz-user-agent=aws-sdk-js-v3-%40aws-sdk%2Fclient-s3%2F1.0.0-gamma.8%20Mozilla%2F5.0%20%28Macintosh%3B%20Intel%20Mac%20OS%20X%2010_15_7%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F86.0.4240.198%20Safari%2F537.36%20aws-amplify%2F3.5.3%20js&x-id=GetObject\",\n      dailyCounts: [],\n      hitsToLabel: [],\n      speciesList: [],\n      haikuboxList: [],\n      serialList: [],\n      currentTimezone: \"\",\n      labeledList: [],\n      labelSearch: \"Yes, song\",\n      nLabeled: 0,\n      species: \"\",\n      haikubox: \"\",\n      haikuboxName: \"\",\n      haikuboxSerial: \"\",\n      dropdown_class: [\n        // \"Yes\",\n        \"spot-Yes, song\",\n        \"spot-Yes, call\",\n        // \"spot-Yes, song, but more than 1 species\",\n        // \"spot-Yes, call, but more than 1 species\",\n        // \"spot-Wrong species\",\n        \"spot-Not sure\",\n        // \"spot-frog\",\n        // \"spot-insect\",\n        // \"spot-environmental\",\n        // \"spot-Not a bird\",\n        // \"Yes, but not sure about species\",\n        // \"Yes, but wrong species\",\n        // \"Something else\",\n        // \"Not Sure\",\n        // \"soundscape-bird\",\n        // \"soundscape-no-bird\",\n        // \"soundscape-human-bird\",\n        // \"soundscape-human-no-bird\",\n        \"Yes\",\n        \"No\",\n        \"No, it's a ...\",\n        // \"Vehicle/Machine\",\n        // \"Siren\",\n        // \"Horn\",\n        // \"Rain\",\n        // \"Wind\",\n        // \"Knock/Bang\",\n        // \"Dog\",\n        // \"Human\",\n        // \"Gunshot\",\n        // \"Insect\",\n        // \"Squirrel\",\n        \"Spring peeper\",\n        // \"Greenhouse frog\",\n        // \"Other frog\",\n        // \"H2-Alarm\",\n        // \"H2-Bang\",\n        // \"H2-Beep\",\n        // \"H2-Cat\",\n        // \"H2-Chicken\",\n        // \"H2-Child\",\n        \"H2-Chime\",\n        // \"H2-Construction\",\n        // \"H2-Coyote\",\n        // \"H2-Different species\",\n        // \"H2-Dog\",\n        // \"H2-Electrical\",\n        \"H2-Engine\",\n        // \"H2-Frog\",\n        // \"H2-Gun\",\n        \"H2-Human\",\n        \"H2-Insect\",\n        \"H2-Mechanical\",\n        // \"H2-Music\",\n        // \"H2-Noise\",\n        \"H2-Phone\",\n        \"H2-Power tool\",\n        \"H2-Rain\",\n        \"H2-Rooster\",\n        \"H2-Scrape\",\n        \"H2-Siren\",\n        \"H2-Squeak\",\n        \"H2-Squirrel\",\n        \"H2-Train\",\n        \"H2-Vehicle\",\n        \"H2-Water\",\n        \"H2-Wind\",\n        \"H2-Skip\"\n      ],\n      targetList: [\n        // \"Eurasian Blackbird\",\n        // \"House Sparrow\",\n        // \"European Robin\",\n        // \"Common Redpoll\",\n        // \"European Greenfinch\",\n        // \"European Goldfinch\",\n        // \"Eurasian Magpie\",\n        // \"Common Wood-Pigeon\",\n        // \"Redwing\",\n        // \"Common House-Martin\",\n        // \"Black Redstart\",\n        // \"Great Tit\",\n        // \"Eurasian Blue Tit\",\n        // \"Common Chiffchaff\",\n        // \"European Starling\",\n        // \"Snow Bunting\",\n        // \"Eurasian Collared-Dove\",\n        // \"Eurasian Tree Sparrow\",\n        // \"Tawny Owl\",\n        // \"Barn Owl\",\n        // \"Barred Owl\",\n        // \"Eastern Screech-Owl\",\n        // \"Northern Saw-whet Owl\",\n        // \"Great Horned Owl\",\n        // \"Northern Saw-whet Owl\",\n        // \"Western Screech-Owl\",\n        // \"Northern Pygmy-Owl\",\n        // \"Long-eared Owl\",\n        // \"Long-tailed Tit\",\n        // \"Eurasian Blackcap\",\n        // \"Great Spotted Woodpecker\",\n        // \"Common Chaffinch\",\n\n        // \"Cooper's Hawk\",\n        // \"Bald Eagle\",\n\n        // \"Belted Kingfisher\",\n        // \"Broad-winged Hawk\",\n        // \"Canada Goose\",\n        // \"Common Grackle\",\n        // \"Common Loon\",\n        // \"Common Raven\",\n        // \"Downy Woodpecker\",\n        \n        // \"Great Black-backed Gull\",\n        // \"Great Blue Heron\",\n        // \"Lesser Black-backed Gull\",\n        // \"Mallard\",\n        \n        // \"Peregrine Falcon\",\n        // \"Pileated Woodpecker\",\n        // \"Red-breasted Nuthatch\",\n        // \"Ring-billed Gull\",\n        // \"Ring-necked Pheasant\",\n        // \"Ruby-throated Hummingbird\",\n        // \"Trumpeter Swan\",\n        // \"White-breasted Nuthatch\",\n        // \"White-throated Sparrow\",\n        // \"Wild Turkey\",\n        // \"Wood Duck\",\n        // \"soundscape\",\n        // \"Blue Jay\",\n        //  \"Black-capped Chickadee\",\n        \"Northern Cardinal\",\n        // \"House Finch\",\n        // \"Anna's Hummingbird\",\n        // \"Tufted Titmouse\",\n        //  \"American Crow\",\n        // \"Red-bellied Woodpecker\",\n        // \"Carolina Chickadee\",\n        //  \"Yellow-rumped Warbler\",\n        // \"Black Phoebe\",\n        //  \"Fish Crow\",\n        //  \"Downy Woodpecker\",\n        //  \"White-breasted Nuthatch\",\n        //  \"White-throated Sparrow\",\n        // \"Engine\",\n        //  \"Carolina Wren\",\n        // \"Canada Goose\",\n        //  \"Siren\",\n        //  \"Hairy Woodpecker\",\n        // \"Golden-crowned Kinglet\",\n        //  \"American Tree Sparrow\",\n        // \"American Goldfinch\",\n        // \"House Sparrow\",\n        //  \"Blue-gray Gnatcatcher\",\n        // \"Northern Flicker\",\n        //  \"Red-shouldered Hawk\",\n        // \"Steller's Jay\",\n        // \"Cedar Waxwing\",\n        //  \"Dark-eyed Junco\",\n        //  \"Palm Warbler\",\n        //  \"European Starling\",\n        //  \"Common Grackle\",\n        //  \"Pileated Woodpecker\",\n        //  \"Bewick's Wren\",\n        // \"California Scrub-Jay\",\n        // \"Dog\",\n        //  \"Human non-vocal\",\n        // \"Song Sparrow\",\n        // \"White-crowned Sparrow\",\n        //  \"California Towhee\",\n        // \"Yellow-bellied Sapsucker\",\n        //  \"Eastern Phoebe\",\n        //  \"Chestnut-backed Chickadee\",\n        // \"Gun\",\n        //  \"Black-billed Magpie\",\n        // \"American Robin\",\n        //  \"Ruby-throated Hummingbird\",\n        //  \"Eastern Bluebird\",\n        //  \"Lesser Goldfinch\",\n        // \"Power tools\",\n        //  \"Gray Catbird\",\n        \n        // \"Mourning Dove\",\n        // \"Spotted Towhee\",\n        //  \"White-winged Dove\",\n        //  \"Bushtit\",\n        // \"Environmental\",\n        //  \"Northern Mockingbird\",\n        //  \"Eurasian Collared-Dove\",\n        //  \"Red-breasted Nuthatch\",\n        // \"Mountain Chickadee\",\n        // \"Fireworks\",\n        // \"Osprey\",\n        //  \"Common Raven\",\n        // \"Acorn Woodpecker\",\n        //  \"Common Redpoll\",\n        //  \"Oak Titmouse\",\n        //  \"Eastern Wood-Pewee\",\n        //  \"Red-tailed Hawk\",\n        //  \"Golden-crowned Sparrow\",\n        //  \"Pine Warbler\",\n        // \"Eastern Towhee\",\n        //  \"Pine Siskin\",\n        //  \"Orange-crowned Warbler\",\n        //  \"Nuttall's Woodpecker\",\n        //  \"Killdeer\",\n        //  \"Brown-headed Nuthatch\",\n        // \"Ruby-crowned Kinglet\",\n        // \"Brown-headed Cowbird\",\n        // \"Rose-breasted Grosbeak\",\n        // \"Belted Kingfisher\",\n        // \"Hermit Thrush\",\n        // \"Chimney Swift\",\n        // \"Bald Eagle\",\n        // \"Red-winged Blackbird\",\n        // \"Wild Turkey\",\n        // \"Townsend's Solitaire\",\n        // \"Yellow-throated Warbler\",\n        // \"Common Yellowthroat\",\n        // \"Yellow-billed Cuckoo\",\n        // \"White-eyed Vireo\",\n        // \"Boat-tailed Grackle\",\n        // \"Yellow-throated Vireo\",\n        // \"Black-and-white Warbler\",\n        // \"Woodhouse's Scrub-Jay\",\n        // \"California Quail\",\n        // \"Acadian Flycatcher\",\n        // \"Summer Tanager\",\n        // \"Cassin's Kingbird\",\n        // \"American Kestrel\",\n        // \"Western Bluebird\",\n        // \"Sandhill Crane\",\n        // \"Eastern Gray Squirrel\",\n        // \"Human whistle\",\n        // \"Ring-necked Pheasant\",\n        // \"Northern Rough-winged Swallow\",\n        // \"Costa's Hummingbird\",\n        // \"Ovenbird\",\n        // \"Brown Thrasher\",\n        // \"Chipping Sparrow\",\n        // \"Abert's Towhee\",\n        // \"Broad-winged Hawk\",\n        // \"Common Ground Dove\",\n        // \"Red-eyed Vireo\",\n        // \"Red-headed Woodpecker\",\n        // \"American Pipit\",\n        // \"Western Tanager\",\n        // \"Rufous Hummingbird\",\n        // \"Great Crested Flycatcher\",\n        // \"Brewer's Blackbird\",\n        // \"Wrentit\",\n        // \"Brown Creeper\",\n        // \"Cooper's Hawk\",\n        // \"House Wren\",\n        // \"Fox Sparrow\",\n        // \"Savannah Sparrow\",\n        // \"Pacific Wren\",\n        // \"Trumpeter Swan\",\n        // \"Common Loon\",\n        // \"California Thrasher\",\n        // \"Ladder-backed Woodpecker\",\n        // \"Pacific-slope Flycatcher\",\n        // \"Gray Kingbird\",\n        // \"Black-bellied Whistling-Duck\",\n        // \"Black-crested Titmouse\",\n        // \"Purple Finch\",\n        // \"Loggerhead Shrike\",\n        // \"Say's Phoebe\",\n        // \"Scarlet Tanager\",\n        // \"Pygmy Nuthatch\",\n        // \"Varied Thrush\",\n        // \"Swamp Sparrow\",\n        // \"Rusty Blackbird\",\n        // \"Mississippi Kite\",\n        // \"Winter Wren\",\n        // \"Broad-tailed Hummingbird\",\n        // \"Hooded Warbler\",\n        // \"Golden-fronted Woodpecker\",\n        // \"Northern Waterthrush\",\n        // \"Wood Thrush\",\n        \n        // \"Blue-headed Vireo\",\n        // \"Northern Parula\",\n        // \"Eastern Meadowlark\",\n        // \"Great-tailed Grackle\",\n        // \"Indigo Bunting\",\n        // \"Barn Swallow\",\n        // \"Snow Goose\",\n        // \"Buff-bellied Hummingbird\",\n        // \"Painted Bunting\",\n        // \"Cape May Warbler\",\n        // \"Canyon Wren\",\n        // \"Eastern Kingbird\",\n        // \"Greater Roadrunner\",\n        // \"Hutton's Vireo\",\n        // \"Swallow-tailed Kite\",\n        // \"Purple Martin\",\n        // \"Magnolia Warbler\",\n        // \"Yellow-breasted Chat\",\n        // \"Violet-green Swallow\",\n        // \"Swainson's Thrush\",\n        // \"Golden Eagle\",\n        // \"Hooded Oriole\",\n        // \"Warbling Vireo\",\n        // \"Rock Wren\",\n        // \"Black-throated Gray Warbler\",\n        // \"Northern Shrike\",\n        // \"Peregrine Falcon\",\n        // \"Black-throated Green Warbler\",\n        // \"Least Flycatcher\",\n        // \"Curve-billed Thrasher\",\n        // \"Clark's Nutcracker\",\n        // \"Wilson's Warbler\",\n        // \"Verdin\",\n        // \"Tree Swallow\",\n        // \"Lincoln's Sparrow\",\n        \n        // \"Baltimore Oriole\",\n        // \"Marsh Wren\",\n        // \"Gambel's Quail\",\n        // \"Bell's Sparrow\",\n        // \"Evening Grosbeak\",\n        // \"White-tailed Kite\",\n        // \"Kentucky Warbler\",\n        // \"Blue Grosbeak\",\n        // \"Field Sparrow\",\n        // \"Swainson's Hawk\",\n        // \"Mountain Bluebird\",\n        // \"Northern Bobwhite\",\n        // \"Western Wood-Pewee\",\n        // \"Prairie Warbler\",\n        // \"Green-tailed Towhee\",\n        \n        // \"Gray-crowned Rosy-Finch\",\n        // \"Red Crossbill\",\n        // \"Common Nighthawk\",\n        // \"Cassin's Finch\",\n        // \"Northern Harrier\",\n        // \"Monk Parakeet\",\n        // \"Nanday Parakeet\",\n        // \"Swainson's Warbler\",\n        // \"Prothonotary Warbler\",\n        // \"Lark Sparrow\",\n        // \"Veery\",\n        // \"Red-breasted Sapsucker\",\n        // \"Sharp-shinned Hawk\",\n        // \"Bachman's Sparrow\",\n        // \"Orchard Oriole\",\n        // \"Townsend's Warbler\",\n        // \"Black-throated Blue Warbler\",\n        // \"Canyon Towhee\",\n        // \"Red-naped Sapsucker\",\n        // \"Harris's Sparrow\",\n        // \"Merlin\",\n        // \"MacGillivray's Warbler\",\n        // \"Western Meadowlark\",\n        // \"Tricolored Blackbird\",\n        // \"Black-chinned Hummingbird\",\n        // \"Gila Woodpecker\",\n        // \"Blackburnian Warbler\",\n        // \"Bullock's Oriole\",\n        // \"White-throated Swift\",\n        // \"Long-billed Thrasher\",\n        // \"Phainopepla\",\n        // \"Tennessee Warbler\",\n        // \"Black-headed Grosbeak\",\n        // \"Cliff Swallow\",\n        // \"American Woodcock\",\n        \n        // \"Yellow Warbler\",\n        // \"Allen's Hummingbird\",\n        // \"Hammond's Flycatcher\",\n        // \"Arctic Warbler\",\n        // \"Worm-eating Warbler\",\n        // \"Horned Lark\",\n        // \"Alder Flycatcher\",\n        // \"Nashville Warbler\",\n        // \"Willow Flycatcher\",\n        // \"Juniper Titmouse\",\n        // \"Pine Grosbeak\",\n        // \"Ash-throated Flycatcher\",\n        // \"Elegant Trogon\",\n        // \"Green Kingfisher\",\n        // \"Lazuli Bunting\",\n        // \"Louisiana Waterthrush\",\n        // \"Cactus Wren\",\n        // \"Clay-colored Sparrow\",\n        // \"Crissal Thrasher\",\n        // \"Hermit Warbler\",\n        // \"Lapland Longspur\",\n        // \"Red-throated Loon\",\n        // \"Black-throated Sparrow\",\n        // \"Bobolink\",\n        // \"Couch's Kingbird\",\n        // \"Dusky-capped Flycatcher\",\n        // \"Great Kiskadee\",\n        // \"Green Jay\",\n        // \"Lesser Nighthawk\",\n        // \"Pinyon Jay\",\n        // \"Ringed Kingfisher\",\n        // \"Rivoli's Hummingbird\",\n        // \"Sagebrush Sparrow\",\n        // \"Tropical Kingbird\",\n        // \"Western Kingbird\",\n        // \"Yellow-bellied Flycatcher\",\n        // \"Pacific Chorus Frog\",\n        // \"Green Frog\",\n        // \"Spring Peeper\",\n        // \"Greenhouse Frog\",\n        // \"Eastern Narrow-mouthed Toad\",\n        // \"Chuck-will's-widow\",\n        // \"Common True Katydid\",\n        // \"Sword-bearing Conehead\",\n        // \"Jumping Bush Cricket\",\n        // \"Carolina Ground Cricket\",\n        // \"Fall Field Cricket\",\n        // \"Miogryllus saussurei\",\n        // \"Pacific Chorus Frog\",\n        // \"Snowy Tree Cricket\",\n        // \"Columbian Trig\",\n        // \"Common Virtuoso Katydid\",\n        // \"Greater Angle-wing\",\n        // \"Oblong-winged Katydid\",\n      ],\n      labelTable: [],\n      tableHeaders: [],\n      falseDetectionHeaders: [],\n      falseDetectionTable: [],\n      plotlyLayout: {\n        xaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        yaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        margin: {\n          l: 0,\n          r: 0,\n          b: 0,\n          t: 0,\n          pad: 4,\n        },\n        height: 240,\n        hovermode: false,\n      },\n    };\n  },\n  methods: {\n    async getHaikuboxList() {\n      var nextToken = null;\n      var allHaikuboxes = [];\n      do {\n        const devices = await API.graphql({\n          query: haikuboxByType,\n          variables: { type: \"haikubox\", nextToken: nextToken },\n        });\n        nextToken = devices.data.haikuboxByType.nextToken;\n        allHaikuboxes = allHaikuboxes.concat(devices.data.haikuboxByType.items);\n        // console.log(\"allHaikuboxes\", allHaikuboxes);\n        // console.log(\"nextToken\", nextToken);\n      } while (nextToken != null);\n      // console.log(\"Devices\", this.devices);\n      var serialList = [];\n      var nameList = [];\n      allHaikuboxes.forEach(function (element) {\n        // console.log(element);\n        //if ((element.owner != null) & tempList.includes(element.serial)) {\n        if (element.owner != null) {\n          if (element.name != null)\n            nameList.push(element.serial + \":\" + element.name);\n          else {\n            nameList.push(element.serial);\n          }\n          serialList.push(element.serial);\n        }\n      });\n      this.devices = allHaikuboxes;\n      this.haikuboxList = nameList;\n      this.serialList = serialList;\n      console.log(this.serialList);\n      // this.serialList = [\n      //   \"Haikubox_10000000b5951071\",\n      //   \"Haikubox_10000000afe87612\",\n      //   \"Haikubox_100000005dd021ba\",\n      //   \"Haikubox_1000000025913c0d\",\n      //   \"Haikubox_10000000668d0e22\",\n      //   \"Haikubox_100000002263c56e\",\n      //   \"Haikubox_10000000e9435c55\",\n      //   \"Haikubox_100000001160714a\",\n      //   \"Haikubox_10000000020a01ad\",\n      //   \"Haikubox_10000000b75d6ca7\",\n      //   \"Haikubox_10000000eef044a3\",\n      //   \"Haikubox_1000000088bf6ded\",\n      //   \"Haikubox_1000000079e54129\",\n      //   \"Haikubox_10000000dc9aadc6\",\n      //   \"Haikubox_1000000032bbd3e2\",\n      //   \"Haikubox_10000000cd32a2f3\",\n      //   \"Haikubox_10000000ce373d69\",\n      //   \"Haikubox_1000000035e90322\",\n      //   \"Haikubox_3485188D7D44\",\n      //   \"Haikubox_1000000012b37079\",\n      //   \"Haikubox_10000000ef732633\",\n      //   \"Haikubox_100000008d73911d\",\n      //   \"Haikubox_348518973944\",\n      //   \"Haikubox_100000007c1c7cd1\",\n      //   \"Haikubox_1000000016dbd275\",\n      //   \"Haikubox_1000000038006eab\",\n      //   \"Haikubox_100000003b7f7ed9\",\n      //   \"Haikubox_100000008b36b0d8\",\n      //   \"Haikubox_10000000166b3b52\",\n      //   \"Haikubox_100000007561eab4\",\n      //   \"Haikubox_100000008cb335e8\",\n      //   \"Haikubox_348518963E00\",\n      //   \"Haikubox_34851897CB9C\",\n      //   \"Haikubox_34851897246C\",\n      //   \"Haikubox_348518979F78\",\n      //   \"Haikubox_1000000091fab07c\",\n      //   \"Haikubox_10000000bfdef646\",\n      //   \"Haikubox_100000002b2675b2\",\n      //   \"Haikubox_348518971EAC\",\n      //   \"Haikubox_34851897CC0C\",\n      //   \"Haikubox_10000000fd8f17da\",\n      //   \"Haikubox_100000005034b990\",\n      //   \"Haikubox_100000004d26ec78\",\n      //   \"Haikubox_10000000d17dbb4f\",\n      //   \"Haikubox_348518972C08\",\n      //   \"Haikubox_10000000d3677778\",\n      //   \"Haikubox_10000000cc4f6fd2\",\n      //   \"Haikubox_100000009935b370\",\n      //   \"Haikubox_100000002944e964\",\n      //   \"Haikubox_10000000273810d0\",\n      //   \"Haikubox_100000002ea953ec\",\n      //   \"Haikubox_100000007bce31b0\",\n      //   \"Haikubox_10000000f274f41f\",\n      //   \"Haikubox_1000000019c6887b\",\n      //   \"Haikubox_100000003d429712\",\n      //   \"Haikubox_100000007f04987d\",\n      //   \"Haikubox_10000000d5dbea53\",\n      //   \"Haikubox_10000000f5393a80\",\n      //   \"Haikubox_10000000f3d414ac\",\n      //   \"Haikubox_100000000bad9f6f\",\n      //   \"Haikubox_100000005aed9637\",\n      //   \"Haikubox_1000000068d5b2b1\",\n      //   \"Haikubox_100000008e43d7c3\",\n      //   \"Haikubox_3485189762C8\",\n      //   \"Haikubox_1000000063492601\",\n      //   \"Haikubox_348518964A88\",\n      //   \"Haikubox_348518973574\",\n      //   \"Haikubox_10000000ccd644ef\",\n      //   \"Haikubox_10000000d108c8cc\",\n      //   \"Haikubox_100000007853cbce\",\n      //   \"Haikubox_1000000061f1b65f\",\n      //   \"Haikubox_100000000ee5163e\",\n      //   \"Haikubox_10000000b7f7332f\",\n      //   \"Haikubox_10000000f8f6a5c2\",\n      //   \"Haikubox_100000006c1fbf14\",\n      //   \"Haikubox_348518977A78\",\n      //   \"Haikubox_100000001ebe636a\",\n      //   \"Haikubox_100000009825df89\",\n      //   \"Haikubox_10000000a2c206d7\",\n      //   \"Haikubox_100000009aec770c\"\n      // ];\n    },\n    sumField(key) {\n      // sum data in give key (property)\n      return this.labelTable.reduce((a, b) => a + (b[key] || 0), 0);\n    },\n    sumFalseDetection(key) {\n      // sum data in give key (property)\n      return this.falseDetectionTable.reduce((a, b) => a + (b[key] || 0), 0);\n    },\n    async getStats() {\n      // get stats\n      // query labeledData for summary of what's been done\n      var nextToken = null;\n      var speciesCount = 0;\n      var allLabelsBySpecies = {};\n      var tableLabeled = [];\n      this.tableHeaders = [\n        {\n          text: \"Species\",\n          align: \"start\",\n          sortable: false,\n          value: \"name\",\n        },\n        // { text: this.labelSearch, value: \"count\", sortable: true },\n      ];\n      for (var i = 0; i < this.dropdown_class.length; i++) {\n        var labelHeader = {\n          text: this.dropdown_class[i],\n          value: this.dropdown_class[i],\n        };\n        this.tableHeaders.push(labelHeader);\n      }\n\n      // loop through species\n      for (\n        var queryIndex = 0;\n        queryIndex < this.targetList.length;\n        queryIndex++\n      ) {\n        allLabelsBySpecies[\"name\"] = this.targetList[queryIndex];\n        var haikuSerialList = [];\n        // loop through labels\n        for (i = 0; i < this.dropdown_class.length; i++) {\n          // search hit table for labeled sounds\n          // console.log(\"cn\", this.targetList[queryIndex], this.dropdown_class[i]);\n          do {\n            const labels = await API.graphql({\n              query: labelByCnByLabel,\n              variables: {\n                cn: this.targetList[queryIndex],\n                label: { eq: this.dropdown_class[i] },\n                nextToken: nextToken,\n              },\n            });\n            nextToken = labels.data.labelByCnByLabel.nextToken;\n            speciesCount += labels.data.labelByCnByLabel.items.length;\n            for (var j=0; j<labels.data.labelByCnByLabel.items.length; j++){\n              let curSerial = labels.data.labelByCnByLabel.items[j].serial;\n              if (!haikuSerialList.includes(curSerial)){\n                haikuSerialList.push(curSerial);\n              }\n            }\n            \n            console.log(this.dropdown_class[i], \"speciesCount\", speciesCount);\n            console.log(\n              \"Page\",\n              this.targetList[queryIndex],\n              labels.data.labelByCnByLabel.items\n            );\n          } while (nextToken != null);\n          console.log(\"speciesCount\", speciesCount);\n          console.log(\"Serial List\", haikuSerialList);\n          //console.log(this.targetList[queryIndex], speciesCount);\n          allLabelsBySpecies[this.dropdown_class[i]] = speciesCount;\n          speciesCount = 0;\n        }\n        tableLabeled.push(allLabelsBySpecies);\n        allLabelsBySpecies = {};\n        this.labelTable = tableLabeled;\n      }\n      // console.log(\"Table\", this.labelTable);\n      // console.log(\"Headers\", this.tableHeaders);\n    },\n    async getFalseDetectionStats() {\n      // query labeledData for summary of what's been done\n      var nextToken = null;\n      var labelCount = 0;\n      var allLabelsByLabel = {};\n      var tableLabeled = [];\n      this.falseDetectionHeaders = [\n        {\n          text: \"Haikubox\",\n          align: \"start\",\n          sortable: false,\n          value: \"name\",\n        },\n      ];\n      for (\n        queryIndex = 0;\n        queryIndex < this.dropdown_class.length;\n        queryIndex++\n      ) {\n        var labelHeader = {\n          text: this.dropdown_class[queryIndex],\n          value: this.dropdown_class[queryIndex],\n        };\n        this.falseDetectionHeaders.push(labelHeader);\n      }\n\n      for (\n        var haikuIndex = 0;\n        haikuIndex < this.haikuboxList.length;\n        haikuIndex++\n      ) {\n        allLabelsByLabel[\"name\"] = this.haikuboxList[haikuIndex];\n        for (\n          var queryIndex = 0;\n          queryIndex < this.dropdown_class.length;\n          queryIndex++\n        ) {\n          // console.log(\"query\", this.dropdown_class[queryIndex]);\n          do {\n            const labels = await API.graphql({\n              query: labelBySerialByLabel,\n              variables: {\n                serial: this.haikuboxList[haikuIndex].slice(0, 25),\n                label: { eq: this.dropdown_class[queryIndex] },\n                nextToken: nextToken,\n              },\n            });\n            nextToken = labels.data.labelBySerialByLabel.nextToken;\n            labelCount += labels.data.labelBySerialByLabel.items.length;\n            // console.log(\"Page\", this.haikuboxList[haikuIndex], this.dropdown_class[queryIndex], labels.data.labelBySerialByLabel.items);\n          } while (nextToken != null);\n          allLabelsByLabel[this.dropdown_class[queryIndex]] = labelCount;\n          labelCount = 0;\n        }\n        tableLabeled.push(allLabelsByLabel);\n        allLabelsByLabel = {};\n        this.falseDetectionTable = tableLabeled;\n      }\n      // console.log(\"FD Table\", this.falseDetectionTable);\n      // console.log(\"FD Headers\", this.tableHeaders);\n    },\n    async selectHaikubox(haikubox) {\n      var index = this.haikuboxList.indexOf(haikubox);\n      var serial = this.serialList[index];\n      console.log(\"index serial\", index, serial);\n      // const deviceInfo = await API.graphql({\n      //   query: haikuboxBySerial,\n      //   variables: { serial: serial },\n      // });\n      // console.log(\"device info\", deviceInfo.data.haikuboxBySerial.items);\n      this.haikuboxName = serial;\n      this.haikuboxSerial = serial;\n      this.showSpeciesList = true;\n      this.species = \"\";\n      this.nLabeled = 0;\n      this.hitsToLabel = [];\n\n      const deviceState = await API.graphql({\n        query: getDeviceState,\n        variables: { id: serial },\n      });\n      var clickedDevice = deviceState.data.getDeviceState;\n      this.currentTimezone = clickedDevice.timezone;\n      // console.log(this.currentTimezone);\n    },\n    async selectSpecies(species) {\n      this.species = species;\n\n      // // query hit labels for summary of what's been done\n      // var nextToken = null;\n      // var allLabels = [];\n      // do {\n      //   const labels = await API.graphql({\n      //     query: hitsBySpecies,\n      //     variables: {\n      //       serial: this.haikuboxSerial,\n      //       cn: { eq: this.species },\n      //       filter: {label: { beginsWith: \"soundscape-\" }},\n      //       nextToken: nextToken,\n      //     },\n      //   });\n      //   nextToken = labels.data.hitsBySpecies.nextToken;\n      //   allLabels = allLabels.concat(labels.data.hitsBySpecies.items);\n      // } while (nextToken != null);\n      // // console.log(\"labeled\", allLabels);\n      // this.labeledList = allLabels;\n      // this.nLabeled = this.labeledList.length;\n\n      this.hitsToLabel = [];\n      // query species for unlabeled hits\n      var scoreThreshold = 0.4;\n      if (species === \"soundscape\") {\n        scoreThreshold = 0;\n      }\n      const filterArg = {\n        label: { attributeExists: false },\n        wav: { ne: \"\" },\n        score: { ge: scoreThreshold },\n        specSum: {ge: 100}\n        // lon: {lt: -20},\n        // version: { gt: 1.37 },\n      };\n      // console.log(filterArg);\n      // console.log(\"Haikubox\", this.haikuboxSerial);\n\n      // load samples for selected haikubox\n      var indexList = [];\n      // for (var i = 0; i < this.serialList.length; i++) {\n      for (var i = 0; i < 20; i++) {\n        let randomIndex = Math.floor(Math.random() * this.serialList.length);\n        while (indexList.includes(randomIndex)) {\n          randomIndex = Math.floor(Math.random() * this.serialList.length);\n        }\n        indexList.push(randomIndex);\n        // console.log('index', randomIndex, this.serialList.length);\n        const hits = await API.graphql({\n          query: hitsBySpeciesByDate,\n          variables: {\n            serial: this.serialList[randomIndex],\n            cnDt: { beginsWith: { cn: this.species } },\n            filter: filterArg,\n            limit: 20,\n          },\n        });\n        console.log(\"query\", this.species, this.haikuboxSerial, hits);\n        if (hits.data.hitsBySpeciesByDate.items[0]) {\n          // hits.data.hitsBySpeciesByDate.items[0].name = this.haikuboxList[i];\n          //  hits.data.hitsBySpeciesByDate.items[0].name = this.haikuboxList[i];\n\n          // Look for times between 00:00Z and 09:00Z\n\n          var items = hits.data.hitsBySpeciesByDate.items;\n          for (var j = 0; j < items.length; j++){\n            var dateTime = new Date(items[j].createdAt);\n            var hour = dateTime.getUTCHours();\n            var month = dateTime.getMonth();\n            if ((hour >= 1 && hour < 9) && (month >=2 && month <=5) && (items[j].type=='haikubox2') && (items[j].lon > -92)) {\n                console.log(hour, month, items[j]);\n                this.hitsToLabel.push(items[j]);\n              }\n          }\n          // this.hitsToLabel = this.hitsToLabel.concat(\n          //   hits.data.hitsBySpeciesByDate.items\n          // );\n          // console.log(this.serialList[i], this.haikuboxList[i], hits.data.hitsBySpeciesByDate.items[0]);\n        }\n        if (this.hitsToLabel.length >= 60) break;\n      }\n\n      // console.log(\"hitsToLabel\", this.hitsToLabel);\n      // this.hitsToLabel = hits.data.hitsBySpecies.items;\n\n      for (i = 0; i < this.hitsToLabel.length; i++) {\n        this.spectrogram(i, this.hitsToLabel[i].wav);\n        // var timeString = moment\n        //   .utc(this.hitsToLabel[i].createdAt)\n        //   .tz(this.currentTimezone)\n        //   .format(\"MMM D h:mm:ss a\");\n        // this.hitsToLabel[i].localTime = timeString;\n      }\n    },\n    labelHit(item, index) {\n      // console.log(item, index);\n      if (!item.classLabel) return;\n      const serial = item.serial;\n      const dt = item.dt;\n      const group = item.group;\n      const cn = item.cn;\n      const sn = item.sn;\n      const spCode = item.spCode;\n      const wav = item.wav;\n      const labeledBy = this.user;\n      const label = item.classLabel;\n      const score = item.score;\n      const lat = item.lat;\n      const lon = item.lon;\n      const labeledData = {\n        serial,\n        dt,\n        group,\n        cn,\n        sn,\n        spCode,\n        wav,\n        labeledBy,\n        label,\n        score,\n        lat,\n        lon,\n      };\n      API.graphql({\n        query: createLabeledData,\n        variables: { input: labeledData },\n      });\n\n      let id = item.id;\n      if (item.id.slice(0, 8) == \"Haikubox\") id = item.id.slice(0, -1);\n      const updateHitData = {\n        id,\n        labeledBy,\n        label,\n      };\n      // console.log(\"updateHitData\", updateHitData);\n      API.graphql({\n        query: updateHit,\n        variables: { input: updateHitData },\n      });\n      this.hitsToLabel.splice(index, 1);\n      if (label === \"Yes, correct species\") this.nLabeled += 1;\n    },\n    skip(audioFile, index) {\n      this.hitsToLabel.splice(index, 1);\n    },\n    initAudioContext() {\n      if (globalAudioContext == null) {\n        const isIOS = /iPhone|iPod|iPad/.test(navigator.userAgent);\n        if (isIOS) {\n          globalAudioContext = new AudioContext();\n          // Note: audioContext, allowBackgroundPlayback, forceIOSBehavior\n          unmute(globalAudioContext, false, false);\n        } else {\n          globalAudioContext = new AudioContext();\n        }\n        globalGainNode = globalAudioContext.createGain();\n        globalGainNode.gain.value = this.playbackGain; // Set initial volume level\n        globalGainNode.connect(globalAudioContext.destination);\n      }\n    },\n    async play(audioFile) {\n      console.log(\"playFile\", audioFile);\n      this.initAudioContext();\n\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n      globalGainNode.gain.value = this.playbackGain;\n\n      var audioUrl = await Storage.get(audioFile);\n      const response = await fetch(audioUrl);\n      const arrayBuffer = await response.arrayBuffer();\n      const audioBuffer = await globalAudioContext.decodeAudioData(arrayBuffer);\n\n      const sampleSource = globalAudioContext.createBufferSource();\n      sampleSource.buffer = audioBuffer;\n      sampleSource.connect(globalGainNode);\n      sampleSource.start(0);\n    },\n    spectrogram(index, audioFile) {\n      // console.log(\"Spectrogram\", audioFile);\n      this.initAudioContext();\n\n      // if (!context) {\n      //   if (context.state === \"suspended\") {\n      //     context.resume();\n      //   }\n      // }\n\n      async function getFile(audioContext, filepath) {\n        // webkit audio decodeAudioData does not work in Safari\n        // const response = await fetch(filepath);\n        // const arrayBuffer = await response.arrayBuffer();\n        // const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n        // return audioBuffer;\n\n        // standardized-audio-context from npm\n        const nativeAudioContext = new AudioContext();\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          nativeAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        var context = new AudioContext();\n        const sample = await getFile(context, filePath);\n\n        return sample;\n      }\n\n      function linear2Decibel(value) {\n        var dB = 20 * Math.log10(value);\n        return dB;\n      }\n\n      Storage.get(audioFile)\n        .then(\n          (result) => {\n            // console.log(\"Storage get\", result);\n\n            setupSample(result)\n              .then((sample) => {\n                // console.log(\"sample\", sample);\n                let signal = sample.getChannelData(0);\n                // console.log(\"raw\", signal);\n\n                // calculate spectrogram\n                // let ts = 0;\n                let overlap = 0.0;\n                let fftLength = this.fftLength;\n                let halfLength = this.halfLength;\n                let offset = Math.floor(fftLength * (1.0 - overlap));\n                // console.log(\"offset\", offset);\n                let fft = new FFT(fftLength, 44100);\n                var spectrogramArray = [];\n                for (var x = 0; x < sample.length - fftLength; x += offset) {\n                  var chunk = signal.slice(x, x + fftLength);\n                  for (var i = 0; i < fftLength; i++) {\n                    chunk[i] = chunk[i] * hann[i];\n                  }\n                  fft.forward(chunk);\n                  chunk = fft.spectrum.slice(0, halfLength);\n                  // console.log(\"fft\", chunk);\n                  var dBmag = chunk.map(linear2Decibel);\n                  // console.log(\"dB\", dBmag);\n                  spectrogramArray.push(...dBmag);\n                }\n\n                // console.log(\"linear spec\", spectrogramArray);\n\n                // arrange spectrogram for Plotly\n                var spectrogramData = [];\n                for (i = 0; i < halfLength; i++) {\n                  // grab one element every halfLength points\n                  var arr = spectrogramArray.filter(function (value, j) {\n                    return j % halfLength == 0;\n                  });\n                  spectrogramData.push(arr);\n                  spectrogramArray.shift(); // remove first element\n                }\n\n                var tempSpec = [\n                  {\n                    z: spectrogramData,\n                    type: \"heatmap\",\n                    showscale: false,\n                    zmid: -90,\n                  },\n                ];\n\n                // console.log('tempSpec', tempSpec);\n                this.hitsToLabel[index].spectrogram = tempSpec;\n                this.hitsToLabel[index].id += 1; // update image on page\n              })\n              .catch((err) => {\n                console.log(err);\n                console.log(\"No audio\", audioFile);\n                // console.log(\"Delete index\", index);\n                this.snackbar = true;\n                return false;\n              });\n          },\n          (reason) => {\n            // rejection\n            console.log(\"Can't play \", reason);\n          }\n        )\n        .catch((err) => {\n          console.log(err);\n        });\n    },\n    async getDailyCount() {\n      this.species = null;\n      this.labeledList = [];\n      this.haikuboxSerial = this.haikubox.slice(0, 25);\n      let lastMonthDate = moment.utc().subtract(90, \"days\").format();\n      const filterArg = {\n        serial: this.haikuboxSerial,\n        date: { gt: lastMonthDate },\n      };\n      const dailyCounts = await API.graphql({\n        query: dailyCountBySerialByDate,\n        variables: filterArg,\n      });\n      this.dailyCounts = dailyCounts.data.dailyCountBySerialByDate.items;\n      // // console.log(\"Daily Counts Query\", this.dailyCounts);\n      let speciesList = [];\n      let dateList = [];\n      let entry = {};\n      for (entry in this.dailyCounts) {\n        speciesList.push(...this.dailyCounts[entry].cn);\n        dateList.push(this.dailyCounts[entry].date);\n      }\n\n      // clear chart if no data\n      if (speciesList.length == 0) {\n        // console.log(\"no data\");\n        this.seriesDaily = [];\n        this.chartOptions = {\n          xaxis: {\n            categories: [],\n          },\n        };\n        return;\n      }\n\n      // Create date array in case dates with no results\n      let minDate = dateList.reduce(function (a, b) {\n        return a < b ? a : b;\n      });\n      let maxDate = dateList.reduce(function (a, b) {\n        return a > b ? a : b;\n      });\n\n      function getDates(startDate, stopDate) {\n        var dateArray = [];\n        var currentDate = moment(startDate);\n        stopDate = moment(stopDate);\n        while (currentDate <= stopDate) {\n          dateArray.push(moment(currentDate).format(\"YYYY-MM-DD\"));\n          currentDate = moment(currentDate).add(1, \"days\");\n        }\n        return dateArray;\n      }\n      let dateArr = getDates(minDate, maxDate);\n\n      // Remove duplicates from species list\n      speciesList = Array.from(new Set(speciesList));\n      // // console.log(\"dateArr\", dateArr);\n      // // console.log(\"speciesList\", speciesList);\n      let nrows = speciesList.length;\n      let ncolumns = dateArr.length;\n\n      // create array with zeros for species counts\n      let countArray = new Array(nrows);\n      for (let i = 0; i < countArray.length; i++) {\n        countArray[i] = new Array(ncolumns).fill(0);\n      }\n      // // console.log(countArray);\n\n      // loop through all days\n      // for each entry figure out date index\n      // loop through each species for that date and put in array\n      for (entry in this.dailyCounts) {\n        let newDate = moment(this.dailyCounts[entry].date).format(\"YYYY-MM-DD\");\n        let dateIndex = dateArr.indexOf(newDate);\n        let species = {};\n        for (species in this.dailyCounts[entry].cn) {\n          //// console.log(\"species\", species);\n          let speciesIndex = speciesList.indexOf(\n            this.dailyCounts[entry].cn[species]\n          );\n          // // console.log(dateIndex, speciesIndex);\n          countArray[speciesIndex][dateIndex] =\n            this.dailyCounts[entry].count[species];\n        }\n      }\n\n      function getSum(total, num) {\n        return total + num;\n      }\n      for (let i = 0; i < nrows; i++) {\n        countArray[i] = countArray[i].reduce(getSum);\n      }\n\n      this.seriesDaily = [];\n      this.speciesList = [];\n      var sortOrder = Array.from(Array(speciesList.length).keys()).sort(\n        (a, b) =>\n          countArray[a] > countArray[b]\n            ? -1\n            : (countArray[b] > countArray[a]) | 0\n      );\n\n      for (let i = 0; i < nrows; i++) {\n        this.seriesDaily.push({\n          name: speciesList[sortOrder[i]],\n          data: countArray[sortOrder[i]],\n        });\n        this.speciesList.push(speciesList[sortOrder[i]]);\n      }\n\n      // console.log(\"dailyCount\", this.seriesDaily);\n    },\n  },\n};\n</script>\n\n<style>\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Label.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Label.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Label.vue?vue&type=template&id=41b05314\"\nimport script from \"./Label.vue?vue&type=script&lang=js\"\nexport * from \"./Label.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"landing\"}},[_c('v-card',{staticClass:\"mx-auto\",attrs:{\"flat\":\"\",\"tile\":\"\"}},[_c('v-card-title',[_vm._v(\"Welcome to Haikubox\")]),_c('v-card-text',[_vm._v(\" Haikubox listens for birdsong and uses a proprietary neural network to identify and report bird species. Sign in to see what Haikubox found in your yard! \")])],1),_c('v-card',{staticClass:\"mx-auto\",attrs:{\"flat\":\"\",\"tile\":\"\"}},[_c('v-card-title',[_vm._v(\"How Do I Get a Haikubox?\")]),_c('v-card-text',[_vm._v(\" Visit our website to learn more and purchase a Haikubox. \")]),_c('v-btn',{staticClass:\"ma-4\",attrs:{\"href\":\"https://haikubox.com\",\"target\":\"_blank\"}},[_vm._v(\"Learn More\")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Landing.vue?vue&type=template&id=edecce54\"\nvar script = {}\nimport style0 from \"./Landing.vue?vue&type=style&index=0&id=edecce54&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (this.user != '')?_c('v-container',[_c('v-card',{attrs:{\"color\":\"rgb(0, 255, 200, 0.6)\"}},[_c('v-card-title',[_vm._v(\"Past Week \"),_c('v-spacer'),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Refresh'),expression:\"'Refresh'\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.refreshDeviceHistory()}}},[_c('v-icon',[_vm._v(\"mdi-refresh\")])],1)],1),_c('v-data-table',{staticClass:\"elevation-1\",attrs:{\"dense\":\"\",\"headers\":_vm.historyHeaders,\"items\":_vm.deviceHistory,\"sort-by\":\"createdAt\",\"sort-desc\":\"\"},on:{\"click:row\":_vm.handleHistoryClick}})],1),_c('v-card',{staticClass:\"mx-auto\",attrs:{\"dark\":\"\",\"color\":\"rgb(80, 80, 80, 0.6)\"}},[_c('v-card-title',[_vm._v(\"Haikubox Admin\")]),_c('v-row',{staticClass:\"px-4\"},[_c('v-col',{attrs:{\"cols\":\"8\"}},[_c('v-autocomplete',{attrs:{\"items\":_vm.haikuboxList,\"label\":\"Select Haikubox\",\"auto-select-first\":\"\"},on:{\"change\":function($event){return _vm.selectHaikubox(_vm.haikubox)}},model:{value:(_vm.haikubox),callback:function ($$v) {_vm.haikubox=$$v},expression:\"haikubox\"}})],1),_c('v-col',{attrs:{\"cols\":\"4\"}},[_c('v-btn',{staticClass:\"my-5\",attrs:{\"dark\":\"\"},on:{\"click\":function($event){return _vm.getHaikuboxList()}}},[_vm._v(\"Reset \")])],1)],1),_c('v-row',{staticClass:\"px-4\"},[_c('v-col',{attrs:{\"cols\":\"8\"}},[_c('v-autocomplete',{attrs:{\"items\":_vm.usersList,\"search-input\":_vm.getUsersByEmail,\"dense\":\"\",\"filled\":\"\",\"label\":\"email\"},on:{\"update:searchInput\":function($event){_vm.getUsersByEmail=$event},\"update:search-input\":function($event){_vm.getUsersByEmail=$event},\"change\":function($event){return _vm.getDevicesByOwner()}},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}}),_c('v-card-text',[_vm._v(\"Email: \"+_vm._s(_vm.email))]),(_vm.confirmedEmail)?_c('v-card-text',[_vm._v(\"Account confirmed: Yes\")]):_vm._e(),(_vm.confirmedEmail === false)?_c('v-card-text',[_vm._v(\"Account confirmed: No\")]):_vm._e(),_c('v-card-text',[_vm._v(\"Account last updated: \"+_vm._s(_vm.accountUpdatedAt)+\" ET\")]),_c('v-card-text',[_vm._v(\"Number of Haikuboxes: \"+_vm._s(_vm.numHaikuboxes))]),_c('v-card-text',[_vm._v(\"One Signal Consent for Notifications Granted: \"+_vm._s(_vm.oneSignalConsentGranted))])],1)],1),_c('v-data-table',{staticClass:\"elevation-1\",attrs:{\"dense\":\"\",\"headers\":_vm.haikuboxHeaders,\"items\":_vm.haikuboxProps},on:{\"click:row\":_vm.handleHistoryClick}}),_c('v-data-table',{staticClass:\"elevation-1\",attrs:{\"dense\":\"\",\"headers\":_vm.subscriptionHeaders,\"items\":_vm.subscriptionProps}})],1),_c('v-card',{staticClass:\"mx-auto pa-10\",attrs:{\"outlined\":\"\"}},[_c('v-app-bar',{attrs:{\"dark\":\"\",\"color\":\"blue\"}},[_vm._v(\" \"+_vm._s(_vm.haikubox)+\" \"),_c('v-spacer')],1),_c('v-card-subtitle',[_vm._v(\"v\"+_vm._s(_vm.firmwareVersion)+\" \")]),(_vm.lat != 0)?_c('v-img',{attrs:{\"height\":\"100%\",\"width\":\"100%\"}},[_c('l-map',{staticStyle:{\"height\":\"400px\",\"width\":\"100%\"},attrs:{\"center\":[_vm.lat, _vm.lon],\"zoomControl\":false,\"zoom\":7}},[_c('l-tile-layer',{attrs:{\"url\":_vm.urlStates,\"attribution\":_vm.attributionSummary}}),_c('l-marker',{attrs:{\"lat-lng\":[_vm.lat, _vm.lon]}})],1)],1):_vm._e(),_vm._v(\" Boot History \"),_vm._l((_vm.bootTable),function(item){return _c('v-list',{key:item.id,attrs:{\"dense\":\"\"}},[_c('v-list-item',[_vm._v(\" v\"+_vm._s(item.version)+\": \"+_vm._s(item.createdAt))])],1)}),_c('div',{staticClass:\"mx-auto pa-12\"},[_c('line-chart',{attrs:{\"colors\":['#fcba03'],\"height\":150,\"ytitle\":\"CPU Temp\",\"library\":{\n          scales: {\n            xAxes: [\n              {\n                type: 'time', time: { unit: 'hour', displayFormats: { hour: 'MMM DD HH:mm' } },\n                ticks: {\n                  fontColor: '#000000',\n                },\n              },\n            ],\n            yAxes: [\n              {\n                ticks: {\n                  fontColor: '#000000',\n                },\n              },\n            ],\n          },\n        },\"data\":_vm.cpuTempSeries}}),_c('line-chart',{attrs:{\"colors\":['#fcba03'],\"height\":150,\"ytitle\":\"WiFi dBm\",\"library\":{\n          scales: {\n            xAxes: [\n              {\n                type: 'time', time: { unit: 'hour', displayFormats: { hour: 'MMM DD HH:mm' } },\n                ticks: {\n                  fontColor: '#000000',\n                },\n              },\n            ],\n            yAxes: [\n              {\n                ticks: {\n                  fontColor: '#000000',\n                },\n              },\n            ],\n          },\n        },\"data\":_vm.signalSeries}}),_c('line-chart',{attrs:{\"colors\":['#fcba03'],\"height\":150,\"ytitle\":\"# Direct\",\"library\":{\n          scales: {\n            xAxes: [\n              {\n                type: 'time', time: { unit: 'hour', displayFormats: { hour: 'MMM DD HH:mm' } },\n                ticks: {\n                  fontColor: '#000000',\n                },\n              },\n            ],\n            yAxes: [\n              {\n                ticks: {\n                  fontColor: '#000000',\n                },\n              },\n            ],\n          },\n        },\"data\":_vm.nDirectSeries}}),_c('line-chart',{attrs:{\"colors\":['#fcba03'],\"height\":150,\"ytitle\":\"# Cloud\",\"library\":{\n          scales: {\n            xAxes: [\n              {\n                type: 'time', time: { unit: 'hour', displayFormats: { hour: 'MMM DD HH:mm' } },\n                ticks: {\n                  fontColor: '#000000',\n                },\n              },\n            ],\n            yAxes: [\n              {\n                ticks: {\n                  fontColor: '#000000',\n                },\n              },\n            ],\n          },\n        },\"data\":_vm.nCloudSeries}})],1)],2),_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"dense\":\"\"}},[(_vm.hitsLoading > 0)?_c('v-btn',{attrs:{\"color\":\"yellow\",\"plain\":\"\"}},[_vm._v(\" \"+_vm._s(\"Loading\")+\" \"+_vm._s(_vm.hitsLoading))]):_vm._e(),_c('v-btn',{staticClass:\"pa-1 ma-1\",attrs:{\"fab\":\"\",\"small\":\"\",\"color\":_vm.recentHours == 0 ? 'blue lighten-2' : 'grey'},on:{\"click\":function($event){return _vm.hitSelectDate()}}},[_c('v-icon',{attrs:{\"alt\":\"calendar\"}},[_vm._v(\"mdi-calendar\")])],1),(_vm.hitCalendarDatePicked == false)?[_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-date-picker',{on:{\"change\":function($event){return _vm.hitDateClick()}},model:{value:(_vm.hitDatePicker),callback:function ($$v) {_vm.hitDatePicker=$$v},expression:\"hitDatePicker\"}})],1)]:_vm._e(),_c('v-container',[_c('v-row',{attrs:{\"dense\":\"\"}},_vm._l((_vm.hits),function(item,index){return _c('v-col',{key:item.id,attrs:{\"cols\":\"12\",\"xs\":\"12\",\"sm\":\"6\",\"md\":\"6\",\"lg\":\"4\",\"xl\":\"3\"}},[_c('v-card',{staticClass:\"mx-auto mx-auto\",staticStyle:{\"word-break\":\"break-word\"},attrs:{\"color\":\"light-blue darken-4\",\"dark\":\"\"}},[_c('v-card-title',[_vm._v(_vm._s(item.cn))]),_c('v-card-subtitle',{staticClass:\"font-italic\"},[_vm._v(_vm._s(item.sn))]),_c('v-row',{staticClass:\"px-8 my-0\",attrs:{\"justify\":\"end\"}},[_c('v-switch',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(\n                  'Send notification when this species is detected'\n                ),expression:\"\\n                  'Send notification when this species is detected'\\n                \",modifiers:{\"bottom-start\":true}}],staticClass:\"mr-5 py-0\",attrs:{\"dense\":\"\",\"label\":\"Notify\",\"color\":\"info\",\"disabled\":\"\"},model:{value:(item.notifyBird),callback:function ($$v) {_vm.$set(item, \"notifyBird\", $$v)},expression:\"item.notifyBird\"}}),_c('v-switch',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(\n                  'Turning Show OFF will hide this species on M and H setting'\n                ),expression:\"\\n                  'Turning Show OFF will hide this species on M and H setting'\\n                \",modifiers:{\"bottom-start\":true}}],staticClass:\"py-0\",attrs:{\"dense\":\"\",\"label\":'Show',\"color\":\"info\",\"disabled\":\"\"},model:{value:(item.showBird),callback:function ($$v) {_vm.$set(item, \"showBird\", $$v)},expression:\"item.showBird\"}})],1),_c('v-card-subtitle',{staticClass:\"py-0\"},[(item.window == 'image')?_c('img',{attrs:{\"width\":\"100%\",\"src\":_vm.getImageUrl(item.spCode),\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}}):_vm._e(),(item.window == 'daily')?_c('div',[_c('fusioncharts',{attrs:{\"type\":\"doughnut2d\",\"width\":\"100%\",\"height\":\"240\",\"dataFormat\":\"json\",\"dataSource\":item.hourlyCountPlotData}})],1):_vm._e(),(item.window == 'heatmap')?_c('div',[_c('Plotly',{attrs:{\"data\":item.heatmap,\"display-mode-bar\":false,\"layout\":_vm.plotlyLayoutHeatmap}})],1):_vm._e(),(item.window == 'monthly')?_c('div',[_c('v-card-text',{staticClass:\"ma-3\"},[_c('v-icon',[_vm._v(\"mdi-music-note\")]),_vm._v(\" Past 3 Months \")],1),_c('column-chart',{attrs:{\"colors\":['#90A4AE'],\"height\":300,\"library\":{\n                    scales: {\n                      xAxes: [\n                        {\n                          ticks: {\n                            fontColor: '#ffffff',\n                          },\n                        },\n                      ],\n                      yAxes: [\n                        {\n                          ticks: {\n                            fontColor: '#ffffff',\n                          },\n                        },\n                      ],\n                    },\n                  },\"data\":item.dailyCountPlotData}})],1):_vm._e(),(item.window == 'spectrogram')?_c('div',[_c('Plotly',{attrs:{\"data\":item.spectrogram,\"layout\":_vm.plotlyLayout,\"display-mode-bar\":false}}),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"1\"}},[_vm._v(\"0\")]),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}},[_vm._v(\"1\")]),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}},[_vm._v(\"2\")]),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{staticClass:\"d-flex justify-end\",attrs:{\"cols\":\"1\"}},[_vm._v(\"3s\")])],1)],1):_vm._e(),(item.window == 'map')?_c('div',[_c('l-map',{staticStyle:{\"height\":\"240px\",\"width\":\"100%\"},attrs:{\"center\":_vm.center,\"options\":_vm.hitMapOptions,\"bounds\":_vm.bounds,\"zoomControl\":false,\"zoom\":_vm.zoom,\"maxZoom\":_vm.maxZoomHitMap},on:{\"update:center\":_vm.centerUpdate,\"update:zoom\":_vm.zoomUpdate}},[_c('l-tile-layer',{attrs:{\"url\":_vm.urlSummary,\"attribution\":_vm.attributionSummary}}),_vm._l((item.map),function(countPerHaikubox){return _c('l-circle',{key:countPerHaikubox.id,attrs:{\"lat-lng\":[countPerHaikubox.lat, countPerHaikubox.lon],\"radius\":countPerHaikubox.radius,\"color\":\"#0277BD\",\"fillColor\":\"#039BE5\"}})})],2)],1):_vm._e()]),_c('v-row',{staticClass:\"my-0 py-0\"},[_c('v-card-text',{staticClass:\"my-0 py-0\"},[_c('v-btn',{attrs:{\"text\":\"\",\"target\":\"_blank\",\"color\":\"light-blue\"},on:{\"click\":function($event){return _vm.navigateTo('https://ebird.org/species/' + item.spCode)}}},[_vm._v(\"eBird\")])],1),_c('v-spacer')],1),_c('v-row',{staticClass:\"mb-1\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"8\"}},[_c('v-avatar',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Image'),expression:\"'Image'\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-4\",attrs:{\"size\":\"24\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'image', item.spCode, item.cn)}}},[_c('img',{attrs:{\"width\":_vm.$vuetify.breakpoint.xs ? '100%' : '320',\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                      item.spCode +\n                      '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})]),(_vm.recentHours != 0)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Hourly Chart'),expression:\"'Hourly Chart'\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'daily', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"hourly chart\"}},[_vm._v(\"mdi-chart-donut\")])],1):_vm._e(),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Daily Chart'),expression:\"'Daily Chart'\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'monthly', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"daily chart\"}},[_vm._v(\"mdi-chart-bar\")])],1),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Heat Map'),expression:\"'Heat Map'\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'heatmap', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"heat map\"}},[_vm._v(\"mdi-checkerboard\")])],1),(_vm.recentHours != 0)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Map'),expression:\"'Map'\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.setWindowRecent(index, 'map', item.spCode, item.cn)}}},[_c('v-icon',{attrs:{\"alt\":\"map\"}},[_vm._v(\"mdi-earth\")])],1):_vm._e(),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Spectrogram'),expression:\"'Spectrogram'\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.spectrogram(index, item.currentWav['filename'], 'Recent')}}},[_c('v-icon',{attrs:{\"alt\":\"spectrogram\"}},[_vm._v(\"mdi-chart-bubble\")])],1)],1),_c('v-spacer'),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Share sound'),expression:\"'Share sound'\",modifiers:{\"bottom-start\":true}}],staticClass:\"ml-0 mr-2\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":[function($event){return _vm.shareLink(item.spCode, item.cn, item.currentWav['filename'])},function($event){$event.stopPropagation();_vm.shareDialog = true}]}},[_vm._v(_vm._s(\"Share\")+\" \")])],1),_c('div',[_c('v-card-actions',{staticClass:\"mx-0 my-0 py-0\"},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{staticClass:\"mx-1 my-1\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFile(\n                          item.currentWav['filename'],\n                          item.spCode,\n                          item.cn,\n                          item,\n                          index,\n                          false\n                        )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(\"Play\")+\" \")],1),_c('v-btn',{staticClass:\"mx-1\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFileEnhance(\n                          item.currentWav['filename'],\n                          item.spCode,\n                          item.cn,\n                          item.id\n                        )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(\"Enhance\")+\" \")],1)],1),_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-select',{staticClass:\"mx-2 my-0 py-0\",attrs:{\"items\":item.wavList,\"item-text\":\"listname\",\"item-value\":\"filename\",\"return-object\":\"\",\"single-line\":\"\"},on:{\"change\":function($event){return _vm.playFile(\n                          item.currentWav['filename'],\n                          item.spCode,\n                          item.cn,\n                          item,\n                          index,\n                          true\n                        )}},model:{value:(item.currentWav),callback:function ($$v) {_vm.$set(item, \"currentWav\", $$v)},expression:\"item.currentWav\"}})],1)],1)],1),_c('v-card-actions',{staticClass:\"mx-0 my-0 py-0\"},[_c('v-row',{attrs:{\"align\":\"center\",\"justify\":\"center\",\"no-gutter\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{staticClass:\"mx-1 my-0\",attrs:{\"color\":\"light-blue darken-1\"}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(_vm._s(item.favoriteHit ? \"mdi-star\" : \"mdi-star-outline\"))]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(\"Favorite\")+\" \")],1),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Download'),expression:\"'Download'\",modifiers:{\"bottom-start\":true}}],staticClass:\"mx-2 my-0\",attrs:{\"color\":\"light-blue darken-1\",\"fab\":\"\",\"small\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.download(item)}}},[_c('v-icon',{attrs:{\"alt\":\"download\"}},[_vm._v(\"mdi-download\")])],1)],1)],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"10\"}},[(item.wav)?_c('v-overflow-btn',{staticClass:\"mx-3 my-2\",attrs:{\"items\":_vm.dropdown_class,\"background-color\":item.classLabel != null\n                        ? 'light-blue darken-4'\n                        : 'light-blue darken-1',\"label\":_vm.labelText(item.cn),\"target\":\"#label_sound\"},on:{\"change\":function($event){return _vm.labelHit(index, item)}},model:{value:(item.classLabel),callback:function ($$v) {_vm.$set(item, \"classLabel\", $$v)},expression:\"item.classLabel\"}}):_vm._e(),(item.showEntryBox == true)?_c('v-text-field',{attrs:{\"counter\":\"50\",\"maxlength\":\"50\",\"placeholder\":'What is this sound?',\"label\":'This sound is a:',\"outlined\":\"\",\"hint\":item.submitted == true ? 'Submitted' : '',\"persistent-hint\":\"\"},model:{value:(item.tellUsMore),callback:function ($$v) {_vm.$set(item, \"tellUsMore\", $$v)},expression:\"item.tellUsMore\"}}):_vm._e(),(item.showSubmitBox == true)?_c('v-btn',{staticClass:\"ma-2\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.labelHitCustom(index, item)}}},[_vm._v(_vm._s(\"Submit\"))]):_vm._e()],1),_c('v-col',{attrs:{\"cols\":\"2\"}},[_c('v-dialog',{attrs:{\"width\":\"300\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c('v-btn',_vm._g(_vm._b({staticClass:\"my-6 mx-3\",attrs:{\"icon\":\"\"}},'v-btn',attrs,false),on),[_c('v-icon',{attrs:{\"alt\":\" labeling information\"}},[_vm._v(\"mdi-information\")])],1)]}}],null,true)},[_c('v-card',[_c('v-card-title',{staticClass:\"headline grey lighten-2\"},[_vm._v(\" \"+_vm._s(\"About Labeling\")+\" \")]),_c('v-card-text',[_vm._v(\" \"+_vm._s(\"Label Info\")+\" \")])],1)],1)],1)],1)],1)],1)],1)}),1)],1)],2)],1)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-container v-if=\"this.user != ''\">\n    <!-- <v-card class=\"mx-auto red\">\n        <v-card-title>Add Users To Notice</v-card-title>\n        <v-text-field\n            v-model=\"noticeId\"\n            @change=\"getNotice()\"\n            dense\n            filled\n            label=\"notice\"\n          ></v-text-field>\n          <v-row><v-col class = \"mx-2\" cols=\"11\">\n            {{ noticeDescription.noticeTitle }}\n            </v-col><v-col class = \"mx-2\" cols=\"11\">\n            {{ noticeDescription.noticeDescription }}\n          </v-col><v-col class = \"mx-2\" cols=\"11\">\n            {{ noticeDescription.noticeLink }}\n          </v-col></v-row>\n\n        <v-btn\n              class=\"mx-4 my-5\"\n              dark\n              @click=\"addDeviceOwnersToNotice()\"\n              >Add Device Owners\n            </v-btn>\n      </v-card> -->\n\n    <v-card color=\"rgb(0, 255, 200, 0.6)\">\n      <v-card-title\n        >Past Week\n        <v-spacer></v-spacer>\n        <!-- Refresh Button -->\n        <v-btn\n          icon\n          v-tooltip.bottom-start=\"'Refresh'\"\n          @click=\"refreshDeviceHistory()\"\n        >\n          <v-icon>mdi-refresh</v-icon>\n        </v-btn></v-card-title\n      >\n\n      <v-data-table\n        dense\n        :headers=\"historyHeaders\"\n        :items=\"deviceHistory\"\n        class=\"elevation-1\"\n        sort-by=\"createdAt\"\n        sort-desc\n        @click:row=\"handleHistoryClick\"\n      >\n      </v-data-table>\n    </v-card>\n\n    <v-card dark class=\"mx-auto\" color=\"rgb(80, 80, 80, 0.6)\">\n      <v-card-title>Haikubox Admin</v-card-title>\n      <v-row class=\"px-4\"\n        ><v-col cols=\"8\">\n          <v-autocomplete\n            :items=\"haikuboxList\"\n            label=\"Select Haikubox\"\n            v-model=\"haikubox\"\n            @change=\"selectHaikubox(haikubox)\"\n            auto-select-first\n          ></v-autocomplete\n        ></v-col>\n        <v-col cols=\"4\">\n          <v-btn class=\"my-5\" dark @click=\"getHaikuboxList()\"\n            >Reset\n          </v-btn></v-col\n        ></v-row\n      >\n      <v-row class=\"px-4\"\n        ><v-col cols=\"8\">\n          <v-autocomplete\n            v-model=\"email\"\n            :items=\"usersList\"\n            :search-input.sync=\"getUsersByEmail\"\n            @change=\"getDevicesByOwner()\"\n            dense\n            filled\n            label=\"email\"\n          ></v-autocomplete>\n          <v-card-text>Email: {{ email }}</v-card-text>\n          <v-card-text v-if=\"confirmedEmail\"\n            >Account confirmed: Yes</v-card-text\n          >\n          <v-card-text v-if=\"confirmedEmail === false\"\n            >Account confirmed: No</v-card-text\n          >\n          <v-card-text\n            >Account last updated: {{ accountUpdatedAt }} ET</v-card-text\n          >\n          <v-card-text>Number of Haikuboxes: {{ numHaikuboxes }}</v-card-text>\n          <v-card-text\n            >One Signal Consent for Notifications Granted:\n            {{ oneSignalConsentGranted }}</v-card-text\n          >\n        </v-col>\n      </v-row>\n      <v-data-table\n        dense\n        :headers=\"haikuboxHeaders\"\n        :items=\"haikuboxProps\"\n        class=\"elevation-1\"\n        @click:row=\"handleHistoryClick\"\n      >\n      </v-data-table>\n      <v-data-table\n        dense\n        :headers=\"subscriptionHeaders\"\n        :items=\"subscriptionProps\"\n        class=\"elevation-1\"\n      >\n      </v-data-table>\n    </v-card>\n    <v-card class=\"mx-auto pa-10\" outlined>\n      <v-app-bar dark color=\"blue\">\n        {{ haikubox }}\n        <v-spacer></v-spacer>\n      </v-app-bar>\n      <v-card-subtitle>v{{ firmwareVersion }} </v-card-subtitle>\n      <v-img height=\"100%\" width=\"100%\" v-if=\"lat != 0\">\n        <l-map\n          :center=\"[lat, lon]\"\n          style=\"height: 400px; width: 100%\"\n          :zoomControl=\"false\"\n          :zoom=\"7\"\n        >\n          <l-tile-layer :url=\"urlStates\" :attribution=\"attributionSummary\" />\n          <l-marker :lat-lng=\"[lat, lon]\" /> </l-map\n      ></v-img>\n\n      Boot History\n      <v-list dense v-for=\"item in bootTable\" :key=\"item.id\">\n        <v-list-item> v{{ item.version }}: {{ item.createdAt }}</v-list-item>\n      </v-list>\n\n      <div class=\"mx-auto pa-12\">\n        <line-chart\n          :colors=\"['#fcba03']\"\n          :height=\"150\"\n          ytitle=\"CPU Temp\"\n          :library=\"{\n            scales: {\n              xAxes: [\n                {\n                  type: 'time', time: { unit: 'hour', displayFormats: { hour: 'MMM DD HH:mm' } },\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          }\"\n          :data=\"cpuTempSeries\"\n        ></line-chart>\n        <!-- <column-chart\n          :colors=\"['#fcba03']\"\n          :height=\"150\"\n          :min=\"0\"\n          :max=\"2\"\n          ytitle=\"CPU GHz\"\n          :library=\"{\n            scales: {\n              xAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          }\"\n          :data=\"cpuFreqSeries\"\n        ></column-chart> -->\n        <!-- <column-chart\n          :colors=\"['#fcba03']\"\n          :height=\"150\"\n          :min=\"0\"\n          ytitle=\"ramdisk\"\n          :library=\"{\n            scales: {\n              xAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          }\"\n          :data=\"ramdiskSeries\"\n        ></column-chart> -->\n        <line-chart\n          :colors=\"['#fcba03']\"\n          :height=\"150\"\n          ytitle=\"WiFi dBm\"\n          :library=\"{\n            scales: {\n              xAxes: [\n                {\n                  type: 'time', time: { unit: 'hour', displayFormats: { hour: 'MMM DD HH:mm' } },\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          }\"\n          :data=\"signalSeries\"\n        ></line-chart>\n        <line-chart\n          :colors=\"['#fcba03']\"\n          :height=\"150\"\n          ytitle=\"# Direct\"\n          :library=\"{\n            scales: {\n              xAxes: [\n                {\n                  type: 'time', time: { unit: 'hour', displayFormats: { hour: 'MMM DD HH:mm' } },\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          }\"\n          :data=\"nDirectSeries\"\n        ></line-chart>\n        <line-chart\n          :colors=\"['#fcba03']\"\n          :height=\"150\"\n          ytitle=\"# Cloud\"\n          :library=\"{\n            scales: {\n              xAxes: [\n                {\n                  type: 'time', time: { unit: 'hour', displayFormats: { hour: 'MMM DD HH:mm' } },\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n              yAxes: [\n                {\n                  ticks: {\n                    fontColor: '#000000',\n                  },\n                },\n              ],\n            },\n          }\"\n          :data=\"nCloudSeries\"\n        ></line-chart>\n      </div>\n      <!-- <v-expansion-panels>\n          <v-expansion-panel>\n            <v-expansion-panel-header>Text Warnings</v-expansion-panel-header>\n            <v-expansion-panel-content\n              v-for=\"item in haikuboxStatus\"\n              :key=\"item.id\"\n            >\n              <template v-if=\"item.warning != ''\">\n                Date: {{ item.createdAt }}\n                {{ item.warning }}\n              </template>\n            </v-expansion-panel-content>\n          </v-expansion-panel>\n        </v-expansion-panels> -->\n    </v-card>\n    <v-container fluid>\n      <v-row dense>\n        <v-btn color=\"yellow\" plain v-if=\"hitsLoading > 0\">\n            {{ \"Loading\" }} {{ hitsLoading }}</v-btn\n          >\n\n          <!-- Calendar Picker -->\n          <v-btn\n            fab\n            small\n            class=\"pa-1 ma-1\"\n            :color=\"recentHours == 0 ? 'blue lighten-2' : 'grey'\"\n            @click=\"hitSelectDate()\"\n            ><v-icon alt=\"calendar\">mdi-calendar</v-icon>\n          </v-btn>\n\n          <template v-if=\"hitCalendarDatePicked == false\">\n        <v-row justify=\"center\">\n          <v-date-picker\n            v-model=\"hitDatePicker\"\n            @change=\"hitDateClick()\"\n          ></v-date-picker>\n        </v-row>\n      </template>\n\n      <!-- Recent card loop -->\n      <v-container>\n        <v-row dense>\n          <v-col\n            cols=\"12\"\n            xs=\"12\"\n            sm=\"6\"\n            md=\"6\"\n            lg=\"4\"\n            xl=\"3\"\n            v-for=\"(item, index) in hits\"\n            :key=\"item.id\"\n          >\n            <v-card\n              color=\"light-blue darken-4\"\n              class=\"mx-auto mx-auto\"\n              style=\"word-break: break-word\"\n              dark\n            >\n              <v-card-title>{{ item.cn }}</v-card-title>\n              <v-card-subtitle class=\"font-italic\">{{\n                item.sn\n              }}</v-card-subtitle>\n\n              <v-row justify=\"end\" class=\"px-8 my-0\">\n                <v-switch\n                  dense\n                  class=\"mr-5 py-0\"\n                  v-model=\"item.notifyBird\"\n                  v-tooltip.bottom-start=\"\n                    'Send notification when this species is detected'\n                  \"\n                  label=\"Notify\"\n                  color=\"info\"\n                  disabled\n                ></v-switch>\n\n                <v-switch\n                  dense\n                  class=\"py-0\"\n                  v-model=\"item.showBird\"\n                  v-tooltip.bottom-start=\"\n                    'Turning Show OFF will hide this species on M and H setting'\n                  \"\n                  :label=\"'Show'\"\n                  color=\"info\"\n                  disabled\n                ></v-switch>\n              </v-row>\n\n              <!-- Recent Image -->\n              <v-card-subtitle class=\"py-0\">\n                <img\n                  width=\"100%\"\n                  v-if=\"item.window == 'image'\"\n                  :src=\"getImageUrl(item.spCode)\"\n                  onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                />\n\n                <!-- Recent 24 Hour Donut Chart -->\n                <div v-if=\"item.window == 'daily'\">\n                  <fusioncharts\n                    type=\"doughnut2d\"\n                    width=\"100%\"\n                    height=\"240\"\n                    dataFormat=\"json\"\n                    :dataSource=\"item.hourlyCountPlotData\"\n                  >\n                  </fusioncharts>\n                </div>\n                <!-- Recent 14 day heat map -->\n                <div v-if=\"item.window == 'heatmap'\">\n                  <Plotly\n                    :data=\"item.heatmap\"\n                    :display-mode-bar=\"false\"\n                    :layout=\"plotlyLayoutHeatmap\"\n                  ></Plotly>\n                </div>\n\n                <!-- Recent Daily Time Series -->\n                <div v-if=\"item.window == 'monthly'\">\n                  <v-card-text class=\"ma-3\"\n                    ><v-icon>mdi-music-note</v-icon>\n                    Past 3 Months\n\n                    <!-- <span\n                      class=\"font-weight-white\"\n                      v-text=\"getDailySpeciesCount(item.cn)\"\n                    ></span> -->\n                  </v-card-text>\n                  <column-chart\n                    :colors=\"['#90A4AE']\"\n                    :height=\"300\"\n                    :library=\"{\n                      scales: {\n                        xAxes: [\n                          {\n                            ticks: {\n                              fontColor: '#ffffff',\n                            },\n                          },\n                        ],\n                        yAxes: [\n                          {\n                            ticks: {\n                              fontColor: '#ffffff',\n                            },\n                          },\n                        ],\n                      },\n                    }\"\n                    :data=\"item.dailyCountPlotData\"\n                  ></column-chart>\n                </div>\n\n                <!-- Recent Spectrogram -->\n                <div v-if=\"item.window == 'spectrogram'\">\n                  <Plotly\n                    :data=\"item.spectrogram\"\n                    :layout=\"plotlyLayout\"\n                    :display-mode-bar=\"false\"\n                  ></Plotly>\n                  <v-row no-gutters>\n                    <v-col cols=\"1\">0</v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\">1</v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\">2</v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\"></v-col>\n                    <v-col cols=\"1\" class=\"d-flex justify-end\">3s</v-col>\n                  </v-row>\n                </div>\n\n                <!-- Recent Map -->\n                <div v-if=\"item.window == 'map'\">\n                  <l-map\n                    :center=\"center\"\n                    :options=\"hitMapOptions\"\n                    :bounds=\"bounds\"\n                    style=\"height: 240px; width: 100%\"\n                    @update:center=\"centerUpdate\"\n                    @update:zoom=\"zoomUpdate\"\n                    :zoomControl=\"false\"\n                    :zoom=\"zoom\"\n                    :maxZoom=\"maxZoomHitMap\"\n                  >\n                    <l-tile-layer\n                      :url=\"urlSummary\"\n                      :attribution=\"attributionSummary\"\n                    />\n                    <l-circle\n                      v-for=\"countPerHaikubox in item.map\"\n                      :key=\"countPerHaikubox.id\"\n                      :lat-lng=\"[countPerHaikubox.lat, countPerHaikubox.lon]\"\n                      :radius=\"countPerHaikubox.radius\"\n                      color=\"#0277BD\"\n                      fillColor=\"#039BE5\"\n                    />\n                  </l-map>\n                </div>\n              </v-card-subtitle>\n\n              <v-row class=\"my-0 py-0\">\n                <v-card-text class=\"my-0 py-0\">\n                  <!-- <v-btn\n                    text\n                    v-if=\"item.lon < -30\"\n                    :href=\"\n                      item.lon > -30\n                        ? 'https://ebird.org/species/' + item.spCode\n                        : 'https://www.allaboutbirds.org/guide/' +\n                          replaceSpaces(item.cn)\n                    \"\n                    target=\"_blank\"\n                    color=\"light-blue\"\n                    >{{ \"About\" }}</v-btn\n                  > -->\n                  <v-btn\n                    text\n                    @click=\"navigateTo('https://ebird.org/species/' + item.spCode)\"\n                    target=\"_blank\"\n                    color=\"light-blue\"\n                    >eBird</v-btn\n                  >\n                </v-card-text>\n\n                <v-spacer></v-spacer>\n              </v-row>\n\n              <!-- Recent Navigation -->\n              <v-row class=\"mb-1\" no-gutters>\n                <v-col cols=\"8\">\n                  <v-avatar\n                    class=\"ml-4\"\n                    size=\"24\"\n                    v-tooltip.bottom-start=\"'Image'\"\n                    @click=\"\n                      setWindowRecent(index, 'image', item.spCode, item.cn)\n                    \"\n                  >\n                    <img\n                      :width=\"$vuetify.breakpoint.xs ? '100%' : '320'\"\n                      :src=\"\n                        'https://haikubox-images.s3.amazonaws.com/' +\n                        item.spCode +\n                        '.jpeg'\n                      \"\n                      onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                    />\n                  </v-avatar>\n\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"'Hourly Chart'\"\n                    @click=\"\n                      setWindowRecent(index, 'daily', item.spCode, item.cn)\n                    \"\n                    v-if=\"recentHours != 0\"\n                  >\n                    <v-icon alt=\"hourly chart\">mdi-chart-donut</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"'Daily Chart'\"\n                    @click=\"\n                      setWindowRecent(index, 'monthly', item.spCode, item.cn)\n                    \"\n                  >\n                    <v-icon alt=\"daily chart\">mdi-chart-bar</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"'Heat Map'\"\n                    @click=\"\n                      setWindowRecent(index, 'heatmap', item.spCode, item.cn)\n                    \"\n                  >\n                    <v-icon alt=\"heat map\">mdi-checkerboard</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"'Map'\"\n                    @click=\"setWindowRecent(index, 'map', item.spCode, item.cn)\"\n                    v-if=\"recentHours != 0\"\n                  >\n                    <v-icon alt=\"map\">mdi-earth</v-icon>\n                  </v-btn>\n                  <v-btn\n                    icon\n                    class=\"ml-0\"\n                    v-tooltip.bottom-start=\"'Spectrogram'\"\n                    @click=\"\n                      spectrogram(index, item.currentWav['filename'], 'Recent')\n                    \"\n                  >\n                    <v-icon alt=\"spectrogram\">mdi-chart-bubble</v-icon>\n                  </v-btn>\n                </v-col>\n\n                <v-spacer></v-spacer>\n\n                <v-btn\n                  v-tooltip.bottom-start=\"'Share sound'\"\n                  @click=\"\n                    shareLink(item.spCode, item.cn, item.currentWav['filename'])\n                  \"\n                  color=\"light-blue darken-1\"\n                  @click.stop=\"shareDialog = true\"\n                  class=\"ml-0 mr-2\"\n                  >{{ \"Share\" }}\n                </v-btn>\n              </v-row>\n\n              <!-- Recent Play -->\n              <div>\n                <v-card-actions class=\"mx-0 my-0 py-0\">\n                  <v-row\n                    ><v-col cols=\"12\">\n                      <v-btn\n                        class=\"mx-1 my-1\"\n                        @click=\"\n                          playFile(\n                            item.currentWav['filename'],\n                            item.spCode,\n                            item.cn,\n                            item,\n                            index,\n                            false\n                          )\n                        \"\n                        color=\"light-blue darken-1\"\n                      >\n                        <v-icon left>mdi-play-circle</v-icon>\n                        <v-divider class=\"mx-1\" vertical></v-divider>\n                        {{\"Play\" }}\n                      </v-btn>\n                      <v-btn\n                        class=\"mx-1\"\n                        @click=\"\n                          playFileEnhance(\n                            item.currentWav['filename'],\n                            item.spCode,\n                            item.cn,\n                            item.id\n                          )\n                        \"\n                        color=\"light-blue darken-1\"\n                      >\n                        <v-icon left>mdi-play-circle</v-icon>\n                        <v-divider class=\"mx-1\" vertical></v-divider>\n                        {{ \"Enhance\" }}\n                      </v-btn>\n                      </v-col\n                    >\n                    <v-col cols=\"12\">\n                      <v-select\n                        class=\"mx-2 my-0 py-0\"\n                        :items=\"item.wavList\"\n                        v-model=\"item.currentWav\"\n                        item-text=\"listname\"\n                        item-value=\"filename\"\n                        @change=\"\n                          playFile(\n                            item.currentWav['filename'],\n                            item.spCode,\n                            item.cn,\n                            item,\n                            index,\n                            true\n                          )\n                        \"\n                        return-object\n                        single-line\n                      ></v-select>\n                    </v-col>\n                  </v-row>\n                </v-card-actions>\n                <v-card-actions class=\"mx-0 my-0 py-0\">\n                  <v-row align=\"center\" justify=\"center\" no-gutter>\n                    <v-col cols=\"12\">\n                      \n                      <v-btn\n                        class=\"mx-1 my-0\"\n                        color=\"light-blue darken-1\"\n                      >\n                        <v-icon left>{{\n                          item.favoriteHit ? \"mdi-star\" : \"mdi-star-outline\"\n                        }}</v-icon>\n                        <v-divider class=\"mx-1\" vertical></v-divider>\n                        {{ \"Favorite\" }}\n                      </v-btn>\n                      <v-btn\n                        class=\"mx-2 my-0\"\n                        color=\"light-blue darken-1\"\n                        fab\n                        small\n                        dark\n                        v-tooltip.bottom-start=\"'Download'\"\n                        @click=\"download(item)\"\n                        ><v-icon alt=\"download\">mdi-download</v-icon>\n                      </v-btn>\n                    </v-col>\n                  </v-row>\n                </v-card-actions>\n\n                <!-- Recent Label -->\n                <v-row no-gutters \n                  ><v-col cols=\"10\">\n                    <v-overflow-btn\n                      class=\"mx-3 my-2\"\n                      v-if=\"item.wav\"\n                      @change=\"labelHit(index, item)\"\n                      :items=\"dropdown_class\"\n                      :background-color=\"\n                        item.classLabel != null\n                          ? 'light-blue darken-4'\n                          : 'light-blue darken-1'\n                      \"\n                      :label=\"labelText(item.cn)\"\n                      target=\"#label_sound\"\n                      v-model=\"item.classLabel\"\n                    ></v-overflow-btn>\n\n                    <v-text-field\n                      v-if=\"item.showEntryBox == true\"\n                      counter=\"50\"\n                      maxlength=\"50\"\n                      v-model=\"item.tellUsMore\"\n                      :placeholder=\"'What is this sound?'\"\n                      :label=\"'This sound is a:'\"\n                      outlined\n                      :hint=\"item.submitted == true ? 'Submitted' : ''\"\n                      persistent-hint\n                    >\n                    </v-text-field>\n\n                    <v-btn\n                      v-if=\"item.showSubmitBox == true\"\n                      @click=\"labelHitCustom(index, item)\"\n                      class=\"ma-2\"\n                      color=\"light-blue darken-1\"\n                      >{{ \"Submit\" }}</v-btn\n                    >\n                  </v-col>\n                  <v-col cols=\"2\">\n                    <v-dialog width=\"300\">\n                      <template v-slot:activator=\"{ on, attrs }\">\n                        <v-btn icon v-bind=\"attrs\" v-on=\"on\" class=\"my-6 mx-3\">\n                          <v-icon alt=\" labeling information\"\n                            >mdi-information</v-icon\n                          >\n                        </v-btn>\n                      </template>\n\n                      <v-card>\n                        <v-card-title class=\"headline grey lighten-2\">\n                          {{ \"About Labeling\" }}\n                        </v-card-title>\n\n                        <v-card-text>\n                          {{ \"Label Info\" }}\n                        </v-card-text>\n                      </v-card>\n                    </v-dialog>\n                  </v-col>\n                </v-row>\n              </div>\n            </v-card>\n          </v-col>\n        </v-row>\n      </v-container>\n\n      </v-row>\n\n    </v-container>\n  </v-container>\n</template>\n\n<script>\nimport { API, Storage } from \"aws-amplify\";\nimport {\n  statusByDate,\n  haikuboxByType,\n  getDeviceState,\n  bootBySerialByDate,\n  hitBySerialByDate,\n  haikuboxByOwner,\n  haikuboxUserByEmail,\n  listHaikuboxUsers,\n  getNoticeDescription,\n  deviceHistoryByDate,\n  getOneSignalConsent,\n  getHaikuboxUser,\n  getDevice,\n  getSubscription,\n  hideBirdBySerial,\n  notifyBirdBySerial,\n  getFavoriteHit,\n  dailyCountSummaryByDateBySpecies,\n} from \"../graphql/queries\";\n// import { createUserNotice } from \"../graphql/mutations\";\nimport { createLabeledData } from \"../graphql/mutations\";\nvar moment = require(\"moment-timezone\");\nimport { LCircle } from \"vue2-leaflet\";\n// import FusionCharts from \"fusioncharts\";\nimport { Plotly } from \"vue-plotly\";\n// https://github.com/chrisguttandin/standardized-audio-context\nimport { AudioContext, decodeAudioData } from \"standardized-audio-context\";\n//const AudioContext = window.AudioContext || window.webkitAudioContext;\n\nvar hann = [\n  0.0, 3.77965773e-5, 1.51180595e-4, 3.4013491e-4, 6.04630957e-4, 9.44628746e-4,\n  1.36007687e-3, 1.85091253e-3, 2.41706151e-3, 3.05843822e-3, 3.77494569e-3,\n  4.56647559e-3, 5.43290826e-3, 6.3741127e-3, 7.38994662e-3, 8.48025644e-3,\n  9.64487731e-3, 1.08836332e-2, 1.21963367e-2, 1.35827895e-2, 1.50427819e-2,\n  1.65760932e-2, 1.81824916e-2, 1.98617342e-2, 2.16135671e-2, 2.34377255e-2,\n  2.53339336e-2, 2.73019047e-2, 2.93413412e-2, 3.1451935e-2, 3.36333667e-2,\n  3.58853068e-2, 3.82074146e-2, 4.05993391e-2, 4.30607187e-2, 4.55911813e-2,\n  4.81903443e-2, 5.08578147e-2, 5.35931893e-2, 5.63960544e-2, 5.92659864e-2,\n  6.22025514e-2, 6.52053053e-2, 6.82737943e-2, 7.14075543e-2, 7.46061116e-2,\n  7.78689827e-2, 8.11956742e-2, 8.45856832e-2, 8.80384971e-2, 9.1553594e-2,\n  9.51304424e-2, 9.87685015e-2, 1.02467221e-1, 1.06226043e-1, 1.10044397e-1,\n  1.13921708e-1, 1.17857388e-1, 1.21850843e-1, 1.25901469e-1, 1.30008654e-1,\n  1.34171776e-1, 1.38390206e-1, 1.42663307e-1, 1.46990432e-1, 1.51370928e-1,\n  1.55804131e-1, 1.60289372e-1, 1.64825973e-1, 1.69413247e-1, 1.74050502e-1,\n  1.78737036e-1, 1.8347214e-1, 1.88255099e-1, 1.9308519e-1, 1.97961681e-1,\n  2.02883837e-1, 2.07850913e-1, 2.12862158e-1, 2.17916814e-1, 2.23014117e-1,\n  2.28153297e-1, 2.33333576e-1, 2.38554171e-1, 2.43814294e-1, 2.49113148e-1,\n  2.54449933e-1, 2.59823842e-1, 2.65234062e-1, 2.70679775e-1, 2.76160159e-1,\n  2.81674384e-1, 2.87221617e-1, 2.92801019e-1, 2.98411747e-1, 3.04052952e-1,\n  3.09723782e-1, 3.15423378e-1, 3.21150881e-1, 3.26905422e-1, 3.32686134e-1,\n  3.38492141e-1, 3.44322565e-1, 3.50176526e-1, 3.56053138e-1, 3.61951513e-1,\n  3.6787076e-1, 3.73809982e-1, 3.79768282e-1, 3.8574476e-1, 3.91738511e-1,\n  3.97748631e-1, 4.03774209e-1, 4.09814335e-1, 4.15868096e-1, 4.21934577e-1,\n  4.2801286e-1, 4.34102027e-1, 4.40201156e-1, 4.46309327e-1, 4.52425614e-1,\n  4.58549094e-1, 4.64678841e-1, 4.70813928e-1, 4.76953428e-1, 4.83096412e-1,\n  4.89241951e-1, 4.95389117e-1, 5.0153698e-1, 5.07684611e-1, 5.1383108e-1,\n  5.19975458e-1, 5.26116815e-1, 5.32254225e-1, 5.38386758e-1, 5.44513487e-1,\n  5.50633486e-1, 5.56745831e-1, 5.62849596e-1, 5.68943859e-1, 5.75027699e-1,\n  5.81100196e-1, 5.87160431e-1, 5.93207489e-1, 5.99240456e-1, 6.05258418e-1,\n  6.11260467e-1, 6.17245695e-1, 6.23213197e-1, 6.2916207e-1, 6.35091417e-1,\n  6.41000339e-1, 6.46887944e-1, 6.52753341e-1, 6.58595644e-1, 6.6441397e-1,\n  6.70207439e-1, 6.75975174e-1, 6.81716305e-1, 6.87429962e-1, 6.93115283e-1,\n  6.98771407e-1, 7.0439748e-1, 7.09992651e-1, 7.15556073e-1, 7.21086907e-1,\n  7.26584315e-1, 7.32047467e-1, 7.37475536e-1, 7.42867702e-1, 7.4822315e-1,\n  7.5354107e-1, 7.58820659e-1, 7.64061117e-1, 7.69261652e-1, 7.74421479e-1,\n  7.79539817e-1, 7.84615893e-1, 7.89648938e-1, 7.94638193e-1, 7.99582902e-1,\n  8.04482319e-1, 8.09335702e-1, 8.14142317e-1, 8.18901439e-1, 8.23612347e-1,\n  8.28274329e-1, 8.32886681e-1, 8.37448705e-1, 8.41959711e-1, 8.46419017e-1,\n  8.5082595e-1, 8.55179843e-1, 8.59480037e-1, 8.63725883e-1, 8.67916738e-1,\n  8.7205197e-1, 8.76130952e-1, 8.80153069e-1, 8.84117711e-1, 8.88024281e-1,\n  8.91872186e-1, 8.95660845e-1, 8.99389686e-1, 9.03058145e-1, 9.06665667e-1,\n  9.10211707e-1, 9.13695728e-1, 9.17117204e-1, 9.20475618e-1, 9.23770461e-1,\n  9.27001237e-1, 9.30167455e-1, 9.33268638e-1, 9.36304317e-1, 9.39274033e-1,\n  9.42177336e-1, 9.45013788e-1, 9.4778296e-1, 9.50484434e-1, 9.531178e-1,\n  9.55682662e-1, 9.5817863e-1, 9.60605328e-1, 9.62962389e-1, 9.65249456e-1,\n  9.67466184e-1, 9.69612237e-1, 9.71687291e-1, 9.73691033e-1, 9.75623159e-1,\n  9.77483377e-1, 9.79271407e-1, 9.80986977e-1, 9.82629829e-1, 9.84199713e-1,\n  9.85696393e-1, 9.87119643e-1, 9.88469246e-1, 9.89745e-1, 9.90946711e-1,\n  9.92074198e-1, 9.9312729e-1, 9.94105827e-1, 9.95009663e-1, 9.9583866e-1,\n  9.96592693e-1, 9.97271648e-1, 9.97875422e-1, 9.98403924e-1, 9.98857075e-1,\n  9.99234805e-1, 9.99537058e-1, 9.99763787e-1, 9.99914959e-1, 9.99990551e-1,\n  9.99990551e-1, 9.99914959e-1, 9.99763787e-1, 9.99537058e-1, 9.99234805e-1,\n  9.98857075e-1, 9.98403924e-1, 9.97875422e-1, 9.97271648e-1, 9.96592693e-1,\n  9.9583866e-1, 9.95009663e-1, 9.94105827e-1, 9.9312729e-1, 9.92074198e-1,\n  9.90946711e-1, 9.89745e-1, 9.88469246e-1, 9.87119643e-1, 9.85696393e-1,\n  9.84199713e-1, 9.82629829e-1, 9.80986977e-1, 9.79271407e-1, 9.77483377e-1,\n  9.75623159e-1, 9.73691033e-1, 9.71687291e-1, 9.69612237e-1, 9.67466184e-1,\n  9.65249456e-1, 9.62962389e-1, 9.60605328e-1, 9.5817863e-1, 9.55682662e-1,\n  9.531178e-1, 9.50484434e-1, 9.4778296e-1, 9.45013788e-1, 9.42177336e-1,\n  9.39274033e-1, 9.36304317e-1, 9.33268638e-1, 9.30167455e-1, 9.27001237e-1,\n  9.23770461e-1, 9.20475618e-1, 9.17117204e-1, 9.13695728e-1, 9.10211707e-1,\n  9.06665667e-1, 9.03058145e-1, 8.99389686e-1, 8.95660845e-1, 8.91872186e-1,\n  8.88024281e-1, 8.84117711e-1, 8.80153069e-1, 8.76130952e-1, 8.7205197e-1,\n  8.67916738e-1, 8.63725883e-1, 8.59480037e-1, 8.55179843e-1, 8.5082595e-1,\n  8.46419017e-1, 8.41959711e-1, 8.37448705e-1, 8.32886681e-1, 8.28274329e-1,\n  8.23612347e-1, 8.18901439e-1, 8.14142317e-1, 8.09335702e-1, 8.04482319e-1,\n  7.99582902e-1, 7.94638193e-1, 7.89648938e-1, 7.84615893e-1, 7.79539817e-1,\n  7.74421479e-1, 7.69261652e-1, 7.64061117e-1, 7.58820659e-1, 7.5354107e-1,\n  7.4822315e-1, 7.42867702e-1, 7.37475536e-1, 7.32047467e-1, 7.26584315e-1,\n  7.21086907e-1, 7.15556073e-1, 7.09992651e-1, 7.0439748e-1, 6.98771407e-1,\n  6.93115283e-1, 6.87429962e-1, 6.81716305e-1, 6.75975174e-1, 6.70207439e-1,\n  6.6441397e-1, 6.58595644e-1, 6.52753341e-1, 6.46887944e-1, 6.41000339e-1,\n  6.35091417e-1, 6.2916207e-1, 6.23213197e-1, 6.17245695e-1, 6.11260467e-1,\n  6.05258418e-1, 5.99240456e-1, 5.93207489e-1, 5.87160431e-1, 5.81100196e-1,\n  5.75027699e-1, 5.68943859e-1, 5.62849596e-1, 5.56745831e-1, 5.50633486e-1,\n  5.44513487e-1, 5.38386758e-1, 5.32254225e-1, 5.26116815e-1, 5.19975458e-1,\n  5.1383108e-1, 5.07684611e-1, 5.0153698e-1, 4.95389117e-1, 4.89241951e-1,\n  4.83096412e-1, 4.76953428e-1, 4.70813928e-1, 4.64678841e-1, 4.58549094e-1,\n  4.52425614e-1, 4.46309327e-1, 4.40201156e-1, 4.34102027e-1, 4.2801286e-1,\n  4.21934577e-1, 4.15868096e-1, 4.09814335e-1, 4.03774209e-1, 3.97748631e-1,\n  3.91738511e-1, 3.8574476e-1, 3.79768282e-1, 3.73809982e-1, 3.6787076e-1,\n  3.61951513e-1, 3.56053138e-1, 3.50176526e-1, 3.44322565e-1, 3.38492141e-1,\n  3.32686134e-1, 3.26905422e-1, 3.21150881e-1, 3.15423378e-1, 3.09723782e-1,\n  3.04052952e-1, 2.98411747e-1, 2.92801019e-1, 2.87221617e-1, 2.81674384e-1,\n  2.76160159e-1, 2.70679775e-1, 2.65234062e-1, 2.59823842e-1, 2.54449933e-1,\n  2.49113148e-1, 2.43814294e-1, 2.38554171e-1, 2.33333576e-1, 2.28153297e-1,\n  2.23014117e-1, 2.17916814e-1, 2.12862158e-1, 2.07850913e-1, 2.02883837e-1,\n  1.97961681e-1, 1.9308519e-1, 1.88255099e-1, 1.8347214e-1, 1.78737036e-1,\n  1.74050502e-1, 1.69413247e-1, 1.64825973e-1, 1.60289372e-1, 1.55804131e-1,\n  1.51370928e-1, 1.46990432e-1, 1.42663307e-1, 1.38390206e-1, 1.34171776e-1,\n  1.30008654e-1, 1.25901469e-1, 1.21850843e-1, 1.17857388e-1, 1.13921708e-1,\n  1.10044397e-1, 1.06226043e-1, 1.02467221e-1, 9.87685015e-2, 9.51304424e-2,\n  9.1553594e-2, 8.80384971e-2, 8.45856832e-2, 8.11956742e-2, 7.78689827e-2,\n  7.46061116e-2, 7.14075543e-2, 6.82737943e-2, 6.52053053e-2, 6.22025514e-2,\n  5.92659864e-2, 5.63960544e-2, 5.35931893e-2, 5.08578147e-2, 4.81903443e-2,\n  4.55911813e-2, 4.30607187e-2, 4.05993391e-2, 3.82074146e-2, 3.58853068e-2,\n  3.36333667e-2, 3.1451935e-2, 2.93413412e-2, 2.73019047e-2, 2.53339336e-2,\n  2.34377255e-2, 2.16135671e-2, 1.98617342e-2, 1.81824916e-2, 1.65760932e-2,\n  1.50427819e-2, 1.35827895e-2, 1.21963367e-2, 1.08836332e-2, 9.64487731e-3,\n  8.48025644e-3, 7.38994662e-3, 6.3741127e-3, 5.43290826e-3, 4.56647559e-3,\n  3.77494569e-3, 3.05843822e-3, 2.41706151e-3, 1.85091253e-3, 1.36007687e-3,\n  9.44628746e-4, 6.04630957e-4, 3.4013491e-4, 1.51180595e-4, 3.77965773e-5, 0.0,\n];\nvar fft = require(\"fft-js\").fft,\n  ifft = require(\"fft-js\").ifft;\nimport { FFT } from \"dsp.js\";\nimport { unmute } from \"../unmute.min.js\";\nlet globalAudioContext = null;\nlet globalGainNode = null;\n\nexport default {\n  props: [\"user\"],\n  created() {\n    this.getDeviceHistory();\n    this.getHaikuboxList();\n  },\n  components: {\n    Plotly,\n    LCircle,\n  },\n  data() {\n    return {\n      haikubox: \"\",\n      noticeId: \"\",\n      noticeDescription: \"\",\n      usersList: [],\n      haikuboxList: [],\n      haikuboxProps: [],\n      subscriptionProps: [],\n      haikuboxHeaders: [\n        {\n          text: \"Name\",\n          align: \"start\",\n          sortable: true,\n          value: \"name\",\n        },\n        { text: \"Serial\", value: \"serial\" },\n        { text: \"Owner\", value: \"owner\" },\n        { text: \"New Bird Alert\", value: \"newBirdAlert\" },\n        { text: \"Hide\", value: \"hideOnMap\" },\n        { text: \"Lat\", value: \"lat\" },\n        { text: \"Lon\", value: \"lon\" },\n        { text: \"Share Cornell\", value: \"shareBird\" },\n        { text: \"Created\", value: \"createdAt\" },\n        { text: \"Updated\", value: \"updatedAt\" },\n      ],\n      historyHeaders: [\n        {\n          text: \"Name\",\n          align: \"start\",\n          sortable: true,\n          value: \"name\",\n        },\n        { text: \"Serial\", value: \"serial\" },\n        { text: \"Action\", value: \"deviceAction\" },\n        { text: \"Owner\", value: \"owner\" },\n        { text: \"lat\", value: \"lat\" },\n        { text: \"lon\", value: \"lon\" },\n        { text: \"Share Cornell\", value: \"shareBird\" },\n        { text: \"Created\", value: \"createdAt\" },\n      ],\n      subscriptionHeaders: [\n        {\n          text: \"Serial\",\n          align: \"start\",\n          sortable: true,\n          value: \"id\",\n        },\n        { text: \"Type\", value: \"prepaidType\" },\n        { text: \"Prepaid End UTC\", value: \"prepaidPeriodEndUnix\" },\n        { text: \"Stripe Renewal End UTC\", value: \"stripeCurrentPeriodEndUnix\" },\n        { text: \"autoRenew\", value: \"autoRenew\" },\n        { text: \"Created\", value: \"createdAt\" },\n        { text: \"Updated\", value: \"updatedAt\" },\n      ],\n      deviceHistory: [],\n      userIdList: [],\n      cpuTempSeries: [],\n      cpuFreqSeries: [],\n      ramdiskSeries: [],\n      signalSeries: [],\n      nDirectSeries: [],\n      nCloudSeries: [],\n      bootTable: [],\n      getUsersByEmail: null,\n      currentWiFi: 0,\n      firmwareVersion: 0,\n      timezone: \"\",\n      currentSerial: \"\",\n      hits: [],\n      recentHours: 24,\n      playbackGain: 100,\n      fftLength: 512,\n      halfLength: 256,\n      customHiddenList: [],\n      hitsLoading: 0,\n      selectedLanguage: \"en\",\n      currentTimezone: \"America/New_York\",\n      currentView: \"Recent\",\n      email: \"\",\n      userID: \"\",\n      lat: 0.0,\n      lon: 0.0,\n      confirmedEmail: null,\n      accountUpdatedAt: null,\n      numHaikuboxes: null,\n      oneSignalConsentGranted: false,\n      hitCalendarDatePicked: true,\n      hitDatePicker: new Date(\n        Date.now() - new Date().getTimezoneOffset() * 60000\n      )\n        .toISOString()\n        .substr(0, 10),\n      fusionSchema: [\n        {\n          name: \"Time\",\n          type: \"date\",\n          format: \"%Y-%m-%d %H:%M\",\n        },\n        {\n          name: \"Detections\",\n          type: \"number\",\n        },\n      ],\n      fusionSchemaDaily: [\n        {\n          name: \"Date\",\n          type: \"date\",\n          format: \"%Y-%m-%d\",\n        },\n        {\n          name: \"Detections\",\n          type: \"number\",\n        },\n      ],\n      dataSource: {\n        data: null,\n        legend: {\n          enabled: \"0\",\n        },\n        navigator: {\n          enabled: 0,\n        },\n        caption: {\n          text: \"Detections\",\n        },\n        subcaption: {\n          text: \"All Species\",\n        },\n        extensions: {\n          customRangeSelector: {\n            enabled: \"0\",\n          },\n        },\n        yAxis: [\n          {\n            plot: {\n              value: \"Detections\",\n              type: \"column\",\n            },\n            format: {\n              prefix: \"\",\n            },\n            title: \"Avg/15 minutes\",\n          },\n        ],\n      },\n      plotlyLayoutHeatmap: {\n        xaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: true,\n          fixedrange: true,\n        },\n        yaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: true,\n          fixedrange: true,\n        },\n        title: \"Calls Per Hour\",\n        margin: {\n          l: 60,\n          r: 40,\n          b: 60,\n          t: 40,\n          pad: 4,\n        },\n        height: 300,\n        hovermode: false,\n      },\n      plotlyLayout: {\n        xaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        yaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        margin: {\n          l: 0,\n          r: 0,\n          b: 0,\n          t: 0,\n          pad: 4,\n        },\n        height: 240,\n        hovermode: false,\n      },\n      urlStates:\n        \"https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}\",\n      attributionSummary:\n        \"Tiles &copy; Esri &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC\",\n    };\n  },\n  watch: {\n    async getUsersByEmail(val) {\n      // console.log(\"getUsersByEmail\", val);\n      var nextToken = null;\n      var tempList = [];\n      do {\n        const filteredUsers = await API.graphql({\n          query: listHaikuboxUsers,\n          variables: {\n            nextToken: nextToken,\n            filter: { email: { contains: val } },\n          },\n        });\n        var usersList = filteredUsers.data.listHaikuboxUsers.items;\n        nextToken = filteredUsers.data.listHaikuboxUsers.nextToken;\n        // console.log(\"getUsersByEmail\", usersList);\n\n        for (var i = 0; i < usersList.length; i++) {\n          tempList.push(usersList[i].email);\n        }\n        if (tempList.length > 20) break;\n      } while (nextToken != null);\n      this.usersList = tempList;\n      // console.log(this.usersList);\n    },\n  },\n  computed: {\n    dropdown_class() {\n      const text = [\"Yes\",\"No\",\"No it's a ...\", \"Not Sure\"];\n      // console.log(text);\n      return text;\n    },\n    navList() {\n      if (this.subscriptionActive == false) {\n        return [\n          {\n            id: \"Last 2 Hours\",\n            text: \"Last 2 Hours\",\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Resubscribe\",\n            text: \"ResubscribeInfo\",\n            icon: \"mdi-meteor\",\n          },\n        ];\n      } else {\n        return [\n          {\n            id: \"Last 2 Hours\",\n            text: \"Last 2 Hours\",\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Last 12 Hours\",\n            text: \"Last 12 Hours\",\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Last 24 Hours\",\n            text: \"Last 24 Hours\",\n            icon: \"mdi-clock-outline\",\n          },\n          {\n            id: \"Yesterday\",\n            text: \"Yesterday\",\n            icon: \"mdi-calendar-clock\",\n          },\n          { id: \"Live\", text: \"Live\", icon: \"mdi-meteor\" },\n          { id: \"All\", text: \"All\", icon: \"mdi-ballot-outline\" },\n        ];\n      }\n    },\n  },\n  methods: {\n    getImageUrl(spCode) {\n      var imageUrl =\n        \"https://haikubox-images.s3.amazonaws.com/\" + spCode + \".jpeg\";\n      return imageUrl;\n    },\n    navigateTo(url) {\n      console.log('navigatTo', url);\n      window.open(url, '_blank');\n    },\n    replaceSpaces(itemWithSpaces) {\n      const itemWithUnderscores = itemWithSpaces.replace(/ /g, \"_\");\n      const itemWithApostrophe = itemWithUnderscores.replace(/'/g, \"\");\n      const itemWithColon = itemWithApostrophe.replace(/:/g, \"\");\n      const itemWithComma = itemWithColon.replace(/,/g, \"\");\n      // console.log(\"link\", itemWithColon);\n      return itemWithComma;\n    },\n    labelText(commonName) {\n      return \"Is\" + \" \" + commonName + \" \" + \"Correct\" + \"?\";\n    },\n    async download(item) {\n      // console.log(item);\n      let audioFile = item.currentWav[\"filename\"];\n\n      this.initAudioContext();\n\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      globalGainNode.gain.value = this.playbackGain;\n\n      var audioUrl = await Storage.get(audioFile);\n\n      // Create a link element and trigger a flac download\n      const link = document.createElement(\"a\");\n      link.href = audioUrl;\n      link.download = audioFile;\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n\n      const response = await fetch(audioUrl);\n      const arrayBuffer = await response.arrayBuffer();\n      const audioBuffer = await globalAudioContext.decodeAudioData(arrayBuffer);\n      let signal = audioBuffer.getChannelData(0);\n      const max =\n        1.5 * signal.reduce((acc, val) => Math.max(acc, val), -Infinity);\n      const normalizedSignal = signal.map((value) => value / max);\n      // console.log(audioBuffer);\n\n      function saveArrayToWavFile(array, sampleRate, filename) {\n        const numChannels = 1;\n        const bitsPerSample = 16;\n        const byteRate = (sampleRate * numChannels * bitsPerSample) / 8;\n        const blockAlign = (numChannels * bitsPerSample) / 8;\n        const dataSize = (array.length * bitsPerSample) / 8;\n        const fileLength = 44 + dataSize;\n\n        // Create a buffer for the WAV file\n        const buffer = new ArrayBuffer(fileLength);\n        const view = new DataView(buffer);\n\n        // Write the WAV file header\n        writeString(view, 0, \"RIFF\");\n        view.setUint32(4, fileLength - 8, true);\n        writeString(view, 8, \"WAVE\");\n        writeString(view, 12, \"fmt \");\n        view.setUint32(16, 16, true);\n        view.setUint16(20, 1, true);\n        view.setUint16(22, numChannels, true);\n        view.setUint32(24, sampleRate, true);\n        view.setUint32(28, byteRate, true);\n        view.setUint16(32, blockAlign, true);\n        view.setUint16(34, bitsPerSample, true);\n        writeString(view, 36, \"data\");\n        view.setUint32(40, dataSize, true);\n\n        // Write the sample data\n        for (let i = 0; i < array.length; i++) {\n          view.setInt16(44 + i * 2, array[i] * 32767, true);\n        }\n\n        // Convert the buffer to a Blob\n        const blob = new Blob([buffer], { type: \"audio/wav\" });\n\n        // Create a link element and trigger a wav download\n        const link = document.createElement(\"a\");\n        link.href = URL.createObjectURL(blob);\n        link.download = filename;\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n      }\n\n      function writeString(view, offset, string) {\n        for (let i = 0; i < string.length; i++) {\n          view.setUint8(offset + i, string.charCodeAt(i));\n        }\n      }\n      let filename =\n        this.replaceSpaces(item.cn) +\n        \"_\" +\n        this.replaceSpaces(item.currentWav[\"listname\"]) +\n        \".wav\";\n      saveArrayToWavFile(normalizedSignal, audioBuffer.sampleRate, filename);\n    },\n    initAudioContext() {\n      if (globalAudioContext == null) {\n        const isIOS = /iPhone|iPod|iPad/.test(navigator.userAgent);\n        if (isIOS) {\n          globalAudioContext = new AudioContext();\n          // Note: audioContext, allowBackgroundPlayback, forceIOSBehavior\n          unmute(globalAudioContext, false, false);\n        } else {\n          globalAudioContext = new AudioContext();\n        }\n        globalGainNode = globalAudioContext.createGain();\n        globalGainNode.gain.value = this.playbackGain; // Set initial volume level\n        globalGainNode.connect(globalAudioContext.destination);\n      }\n    },\n    async playFile(audioFile, spCode, cn, item, index, resetLabel) {\n      // console.log(item);\n      // console.log(\"playFile\", resetLabel);\n      // reset label is true when playing from wav select dropdown\n      if (resetLabel === true) {\n        item.classLabel = null;\n        // get favorite status for this file\n\n        const favoriteHit = await API.graphql({\n          query: getFavoriteHit,\n          variables: {\n            id: audioFile,\n          },\n        });\n\n        if (favoriteHit.data.getFavoriteHit != null) {\n          item.favoriteHit = true;\n        } else {\n          item.favoriteHit = false;\n        }\n        item.wav = audioFile;\n      }\n      console.log(\"playFile\", audioFile);\n\n      this.initAudioContext();\n\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      globalGainNode.gain.value = this.playbackGain;\n\n      var audioUrl = await Storage.get(audioFile);\n      console.log(audioUrl);\n      const response = await fetch(audioUrl);\n      const arrayBuffer = await response.arrayBuffer();\n      const audioBuffer = await globalAudioContext.decodeAudioData(arrayBuffer);\n\n      const sampleSource = globalAudioContext.createBufferSource();\n      sampleSource.buffer = audioBuffer;\n      sampleSource.connect(globalGainNode);\n      sampleSource.start(0);\n\n      if (this.currentView == \"Recent\") {\n        if (item.window == \"spectrogram\") {\n          this.spectrogram(index, item.currentWav[\"filename\"], \"Recent\");\n          item.classLabel = null;\n        }\n      }\n    },\n    async playFileEnhance(audioFile, spCode, cn, id) {\n\n      this.initAudioContext();\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      // playing last file again\n      if (this.lastEnhancedId == id) {\n        // Create an AudioBufferSourceNode\n        const sourceNode = globalAudioContext.createBufferSource();\n        sourceNode.buffer = this.lastEnhancedAudio;\n        // Connect the source node to the AudioContext's destination (speakers)\n        sourceNode.connect(globalAudioContext.destination);\n        // Start playback\n        sourceNode.start();\n        return;\n      }\n\n      async function getFile(filepath) {\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          globalAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        // var context = new AudioContext();\n        const sample = await getFile(filePath);\n        return sample;\n      }\n\n      Storage.get(audioFile).then((result) => {\n        // console.log(\"Storage get\", result);\n        setupSample(result).then((sample) => {\n          let signal = sample.getChannelData(0);\n          // Define STFT parameters\n          const fftSize = 512;\n          const overlap = 256;\n          const hopSize = fftSize - overlap;\n          // Compute the STFT\n          const stft = [];\n          var meanMag = new Array(fftSize).fill(0);\n          var stdMag = new Array(fftSize).fill(0);\n          var numStrides = 0;\n          for (let i = 0; i < signal.length - fftSize; i += hopSize) {\n            const frame = signal.slice(i, i + fftSize);\n            // Hanning Window\n            for (var k = 0; k < fftSize; k++) {\n              frame[k] = frame[k] * hann[k];\n            }\n            var phasors = fft(frame);\n            // console.log(phasors);\n            // store running sum of magnitude to calculate mean\n            for (var j = 0; j < phasors.length; j++) {\n              meanMag[j] += Math.sqrt(\n                phasors[j][0] * phasors[j][0] + phasors[j][1] * phasors[j][1]\n              );\n            }\n            numStrides++;\n            stft.push([...phasors]);\n          }\n          // console.log('stft', stft);\n          for (let j = 0; j < fftSize; j++) {\n            meanMag[j] = meanMag[j] / numStrides;\n          }\n          // calculate SD\n          // loop through each time slice\n          for (let i = 0; i < stft.length; i++) {\n            // loop through each frequency\n            for (let j = 0; j < fftSize; j++) {\n              let magnitude =\n                Math.sqrt(\n                  stft[i][j][0] * stft[i][j][0] + stft[i][j][1] * stft[i][j][1]\n                ) - meanMag[j];\n              stdMag[j] += magnitude * magnitude;\n            }\n          }\n          for (j = 0; j < fftSize; j++) {\n            stdMag[j] = Math.sqrt(stdMag[j] / numStrides);\n          }\n          // gate values based on mean + 2*SD\n          async function gateSpectrogram() {\n            for (let i = 0; i < stft.length - 4; i++) {\n              // loop through each frequency\n              for (let j = 0; j < fftSize; j++) {\n                // get average magnitude over 5 time slices\n                let magnitude =\n                  (Math.sqrt(\n                    stft[i][j][0] * stft[i][j][0] +\n                      stft[i][j][1] * stft[i][j][1]\n                  ) +\n                    Math.sqrt(\n                      stft[i + 1][j][0] * stft[i + 1][j][0] +\n                        stft[i + 1][j][1] * stft[i + 1][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 2][j][0] * stft[i + 2][j][0] +\n                        stft[i + 2][j][1] * stft[i + 2][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 3][j][0] * stft[i + 3][j][0] +\n                        stft[i + 3][j][1] * stft[i + 3][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 4][j][0] * stft[i + 4][j][0] +\n                        stft[i + 4][j][1] * stft[i + 4][j][1]\n                    )) /\n                  5;\n                if (magnitude < meanMag[j] + 1.9 * stdMag[j]) {\n                  stft[i][j][0] = stft[i][j][0] * 0.2;\n                  stft[i][j][1] = stft[i][j][1] * 0.2;\n                  // also flip mirror\n                  stft[i][fftSize - 1 - j][0] =\n                    stft[i][fftSize - 1 - j][0] * 0.2;\n                  stft[i][fftSize - 1 - j][1] =\n                    stft[i][fftSize - 1 - j][1] * 0.2;\n                  // console.log(i, j);\n                }\n                if (j < 4) {\n                  stft[i][j][0] = stft[i][j][0] * 0.2;\n                  stft[i][j][1] = stft[i][j][1] * 0.2;\n                  // also flip mirror\n                  stft[i][fftSize - 1 - j][0] =\n                    stft[i][fftSize - 1 - j][0] * 0.2;\n                  stft[i][fftSize - 1 - j][1] =\n                    stft[i][fftSize - 1 - j][1] * 0.2;\n                  // console.log(i, j);\n                }\n              }\n            }\n            return stft;\n          }\n          // Compute the ISTFT\n          async function istft() {\n            let recoveredSignal = new Array(signal.length).fill(0);\n            let recoveredSignalComplex = new Array(fftSize);\n            for (let i = 0; i < stft.length - 4; i++) {\n              // console.log('before ifft', stft[i]);\n              recoveredSignalComplex = ifft(stft[i]);\n              // console.log('recoveredSignalComplex', recoveredSignalComplex);\n              for (let j = 0; j < fftSize; j++) {\n                if (i * overlap + j < signal.length) {\n                  // get real part\n                  recoveredSignal[i * hopSize + j] +=\n                    recoveredSignalComplex[j][0];\n                }\n              }\n            }\n            return recoveredSignal;\n          }\n          gateSpectrogram()\n            .then(() => {\n              //console.log(res);\n              return istft();\n            })\n            .then((recoveredSignal) => {\n              // console.log('recoveredSignal', recoveredSignal);\n              var maxSignal = 0;\n              for (let i = 0; i < recoveredSignal.length - 1000; i += 1000) {\n                // get stack issues so doing in chunks\n                var tempMax = Math.max(...recoveredSignal.slice(i, i + 1000));\n                if (tempMax > maxSignal) {\n                  maxSignal = tempMax;\n                }\n              }\n              maxSignal = 0.9 / maxSignal; // scale so can multiply to get max amp of 0.9\n              // console.log('maxValue', maxSignal);\n              // Create an AudioBuffer from the audio data\n              const audioBuffer = globalAudioContext.createBuffer(\n                1,\n                recoveredSignal.length,\n                sample.sampleRate\n              );\n              const channelData = audioBuffer.getChannelData(0);\n              for (let i = 0; i < recoveredSignal.length; i++) {\n                channelData[i] = recoveredSignal[i] * maxSignal;\n              }\n              // Create an AudioBufferSourceNode\n              const sourceNode = globalAudioContext.createBufferSource();\n              sourceNode.buffer = audioBuffer;\n              // Connect the source node to the AudioContext's destination (speakers)\n              sourceNode.connect(globalAudioContext.destination);\n              // Start playback\n              sourceNode.start();\n              this.lastEnhancedId = id;\n              this.lastEnhancedAudio = audioBuffer;\n            });\n        });\n      });\n    },\n    spectrogram(index, audioFile, pageType) {\n      // console.log(\"Spectrogram\", index, audioFile, pageType);\n\n      this.initAudioContext();\n\n      async function getFile(audioContext, filepath) {\n        // webkit audio decodeAudioData does not work in Safari\n        // const response = await fetch(filepath);\n        // const arrayBuffer = await response.arrayBuffer();\n        // const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n        // return audioBuffer;\n\n        // standardized-audio-context from npm\n        // const nativeAudioContext = new AudioContext();\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          globalAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        // var context = new AudioContext();\n        const sample = await getFile(globalAudioContext, filePath);\n\n        return sample;\n      }\n\n      function linear2Decibel(value) {\n        var dB = 20 * Math.log10(value);\n        return dB;\n      }\n\n      //var c = document.getElementById(\"myCanvas\");\n      //this.canvas = c.getContext(\"2d\");\n\n      Storage.get(audioFile)\n        .then(\n          (result) => {\n            // console.log(\"Storage get\", result);\n\n            setupSample(result)\n              .then((sample) => {\n                // console.log(\"sample\", sample);\n                let signal = sample.getChannelData(0);\n                // console.log(\"raw\", signal);\n\n                // calculate spectrogram\n                // let ts = 0;\n\n                let overlap = 0.0;\n                let fftLength = this.fftLength;\n                let halfLength = this.halfLength; // chop off top\n\n                let showLength = halfLength - Math.round(0.2 * halfLength);\n                let zmidVal = -90;\n                if (audioFile[5] == \"2\") {\n                  showLength = halfLength - Math.round(0.48 * halfLength);\n                  zmidVal = -66;\n                }\n\n                let offset = Math.floor(fftLength * (1.0 - overlap));\n                // console.log(\"offset\", offset);\n                // let ctx = this.canvas;\n                let fft = new FFT(fftLength, 44100);\n\n                var spectrogramArray = [];\n                for (var x = 0; x < sample.length - fftLength; x += offset) {\n                  var chunk = signal.slice(x, x + fftLength);\n                  for (var i = 0; i < fftLength; i++) {\n                    chunk[i] = chunk[i] * hann[i];\n                  }\n                  fft.forward(chunk);\n                  chunk = fft.spectrum.slice(0, showLength);\n                  // console.log(\"fft\", chunk);\n                  var dBmag = chunk.map(linear2Decibel);\n                  // console.log(\"dB\", dBmag);\n                  spectrogramArray.push(...dBmag);\n                }\n\n                // console.log(\"spectrogramArray\", spectrogramArray);\n                // console.log('showLength', showLength);\n\n                // arrange spectrogram for Plotly\n                var spectrogramData = [];\n                for (i = 0; i < showLength; i++) {\n                  // grab one element every halfLength points\n                  var arr = spectrogramArray.filter(function (value, j) {\n                    return j % showLength == 0;\n                  });\n                  // console.log(arr);\n                  spectrogramData.push(arr);\n                  spectrogramArray.shift(); // remove first element\n                }\n                // console.log(\"spectrogramData\", spectrogramData);\n\n                if (pageType === \"Recent\") {\n                  this.hits[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: zmidVal,\n                    },\n                  ];\n                  // console.log(\"spec\", this.hits[index].spectrogram);\n                  this.setWindowRecent(\n                    index,\n                    \"spectrogram\",\n                    this.hits[index].spCode,\n                    this.hits[index].cn\n                  );\n                }\n                if (pageType === \"All\") {\n                  this.seriesDaily[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: zmidVal,\n                    },\n                  ];\n                  this.setWindowAll(\n                    index,\n                    \"spectrogram\",\n                    this.seriesDaily[index].spCode,\n                    this.seriesDaily[index].cn\n                  );\n                }\n\n                if (pageType === \"New\") {\n                  this.newSpeciesList[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: zmidVal,\n                    },\n                  ];\n                  this.setWindowNew(\n                    index,\n                    \"spectrogram\",\n                    this.newSpeciesList[index].spCode,\n                    this.newSpeciesList[index].cn\n                  );\n                }\n\n                if (pageType === \"Missing\") {\n                  this.missingSpeciesList[index].spectrogram = [\n                    {\n                      z: spectrogramData,\n                      type: \"heatmap\",\n                      showscale: false,\n                      zmid: zmidVal,\n                    },\n                  ];\n                  this.setWindowMissing(\n                    index,\n                    \"spectrogram\",\n                    this.missingSpeciesList[index].spCode,\n                    this.missingSpeciesList[index].cn\n                  );\n                }\n              })\n              .catch((err) => {\n                console.log(err);\n                console.log(\"No audio\", audioFile);\n                // console.log(\"Delete index\", index);\n                this.snackbar = true;\n                return false;\n              });\n          },\n          (reason) => {\n            // rejection\n            console.log(\"Can't play \", reason);\n          }\n        )\n        .catch((err) => {\n          console.log(err);\n        });\n    },\n    clearSettings() {\n      this.haikuboxProps = [];\n      this.subscriptionProps = [];\n      this.deviceHistory = [];\n      this.haikubox = \"\";\n      this.email = \"\";\n      this.confirmedEmail = \"\";\n      this.accountUpdatedAt = \"\";\n      this.numHaikuboxes = 0;\n      this.oneSignalConsentGranted = \"\";\n      this.bootTable = [];\n      this.firmwareVersion = \"\";\n      this.cpuTempSeries = [];\n      this.signalSeries = [];\n      this.nDirectSeries = [];\n      this.nCloudSeries = [];\n      this.hits = [];\n      this.lat = 0;\n      this.lon = 0;\n    },\n    async getHaikuboxList() {\n      this.clearSettings();\n      var nextToken = null;\n      var allHaikuboxes = [];\n      var userIds = [];\n\n      do {\n        const devices = await API.graphql({\n          query: haikuboxByType,\n          variables: { type: \"haikubox\", nextToken: nextToken },\n        });\n        nextToken = devices.data.haikuboxByType.nextToken;\n        allHaikuboxes = allHaikuboxes.concat(devices.data.haikuboxByType.items);\n        // console.log(\"allHaikuboxes\", allHaikuboxes);\n        // console.log(\"nextToken\", nextToken);\n      } while (nextToken != null);\n      // console.log(\"Devices\", this.devices);\n      var nameList = [];\n      allHaikuboxes.forEach(function (element) {\n        // console.log(element.owner);\n        //if ((element.owner != null) & tempList.includes(element.serial)) {\n        if (element.owner != null) {\n          if (userIds.includes(element.owner) == false)\n            userIds.push(element.owner); //remove duplicates\n          if (element.name != null)\n            nameList.push(element.serial + \": \" + element.name);\n          else {\n            nameList.push(element.serial);\n          }\n        }\n      });\n      this.haikuboxList = nameList;\n      this.userIdList = userIds;\n      //console.log(\"Haikubox list\", this.haikuboxList);\n    },\n    async getDevicesByOwner() {\n      // console.log(\"getDevicesByOwner\", this.email);\n      const userInfo = await API.graphql({\n        query: haikuboxUserByEmail,\n        variables: { email: this.email },\n      });\n      this.userID = userInfo.data.haikuboxUserByEmail.items[0].id;\n      // console.log(\"getDevicesByOwner\", userInfo.data.haikuboxUserByEmail.items[0]);\n      this.confirmedEmail =\n        userInfo.data.haikuboxUserByEmail.items[0].confirmedEmail;\n      this.accountUpdatedAt = moment\n        .utc(userInfo.data.haikuboxUserByEmail.items[0].updatedAt)\n        .tz(\"America/New_York\")\n        .format(\"dddd, MMMM Do YYYY, h:mm:ss a\");\n\n      const devicesByOwner = await API.graphql({\n        query: haikuboxByOwner,\n        variables: { owner: this.userID },\n      });\n      var ownerList = devicesByOwner.data.haikuboxByOwner.items;\n      //console.log(\"devicesByOwner\", ownerList);\n      var nameList = [];\n      this.haikuboxProps = ownerList;\n      ownerList.forEach(function (element) {\n        // console.log(element.owner);\n        //if ((element.owner != null) & tempList.includes(element.serial)) {\n        if (element.owner != null) {\n          if (element.name != null) {\n            nameList.push(element.serial + \": \" + element.name);\n          } else {\n            nameList.push(element.serial);\n          }\n        }\n      });\n      this.haikuboxList = nameList;\n      this.numHaikuboxes = nameList.length;\n\n      const oneSignalConsent = await API.graphql({\n        query: getOneSignalConsent,\n        variables: { id: this.userID },\n      });\n      // console.log(\"oneSignalConsent\", oneSignalConsent);\n      try {\n        if (\n          oneSignalConsent.data.getOneSignalConsent.osConsentGranted == true\n        ) {\n          this.oneSignalConsentGranted = true;\n        } else {\n          this.oneSignalConsentGranted = false;\n        }\n      } catch {\n        this.oneSignalConsentGranted = false;\n      }\n      this.getSubscriptionStatus();\n    },\n    async getSubscriptionStatus() {\n      // query subscription state\n      var subscriptionStates = [];\n      for (const item of this.haikuboxProps) {\n        // console.log(item);\n        const subscriptionStatus = await API.graphql({\n          query: getSubscription,\n          variables: { id: item.serial },\n        });\n        // console.log(subscriptionStatus.data.getSubscription);\n        subscriptionStatus.data.getSubscription.prepaidPeriodEndUnix = moment\n          .unix(subscriptionStatus.data.getSubscription.prepaidPeriodEndUnix)\n          .format(\"YYYY-MM-DD HH:mm:ss\");\n        if (\n          subscriptionStatus.data.getSubscription.stripeCurrentPeriodEndUnix !=\n          null\n        ) {\n          subscriptionStatus.data.getSubscription.stripeCurrentPeriodEndUnix =\n            moment\n              .unix(\n                subscriptionStatus.data.getSubscription\n                  .stripeCurrentPeriodEndUnix\n              )\n              .format(\"YYYY-MM-DD HH:mm:ss\");\n        }\n        subscriptionStates.push(subscriptionStatus.data.getSubscription);\n      }\n      this.subscriptionProps = subscriptionStates;\n    },\n    async selectHaikubox(serialName) {\n      const id = serialName.split(\":\");\n      let serialClicked = id[0];\n      const haikuboxId = serialClicked.split(\"_\");\n      // console.log(\"selectHaikubox\", serialClicked);\n      // get owner\n      const deviceInfo = await API.graphql({\n        query: getDevice,\n        variables: {\n          id: haikuboxId[1],\n        },\n      });\n      // console.log('deviceInfo', deviceInfo);\n      // get email associated with Haikubox\n      const userInfo = await API.graphql({\n        query: getHaikuboxUser,\n        variables: {\n          id: deviceInfo.data.getDevice.owner,\n        },\n      });\n      // console.log('email lookup', userInfo);\n      this.email = userInfo.data.getHaikuboxUser.email;\n\n      await this.getState(serialClicked);\n      this.getBootTable(serialClicked);\n      this.getStatus(serialClicked);\n      this.getDevicesByOwner(); // load all Haikuboxes for this owner which also gets other info about the Haikubox\n      this.getHits(serialClicked);\n    },\n    async getHits(serialClicked) {\n      // console.log(\"getHits\", serialClicked);\n      this.currentSerial = serialClicked;\n      var nextToken = null;\n      let yesterdayDate;\n      var tempHits = [];\n\n      if (this.recentHours > 0) {\n        yesterdayDate = moment\n          .utc()\n          .subtract(this.recentHours, \"hours\")\n          .format();\n        // console.log(yesterdayDate)\n        do {\n          const queryHits = await API.graphql({\n            query: hitBySerialByDate,\n            variables: {\n              serial: serialClicked,\n              dt: { gt: yesterdayDate },\n              sortDirection: \"DESC\",\n              nextToken: nextToken,\n            },\n            filter: { wav: { gt: \"\" } },\n          });\n          tempHits = tempHits.concat(queryHits.data.hitBySerialByDate.items);\n          nextToken = queryHits.data.hitBySerialByDate.nextToken;\n          this.hitsLoading = tempHits.length;\n        } while (nextToken != null);\n      }\n      if (this.recentHours == 0) {\n        let startDate = moment(this.hitDatePicker)\n          .tz(this.currentTimezone)\n          .utc()\n          .format(\"YYYY-MM-DDTHH:mm:ss\");\n        let endDate = moment(startDate)\n          .add(24, \"hours\")\n          .format(\"YYYY-MM-DDTHH:mm:ss\");\n        // console.log('query hits ', startDate, endDate)\n        do {\n          const queryHits = await API.graphql({\n            query: hitBySerialByDate,\n            variables: {\n              serial: serialClicked,\n              dt: { between: [startDate, endDate] },\n              sortDirection: \"DESC\",\n              nextToken: nextToken,\n            },\n            filter: { wav: { gt: \"\" } },\n          });\n          tempHits = tempHits.concat(queryHits.data.hitBySerialByDate.items);\n          nextToken = queryHits.data.hitBySerialByDate.nextToken;\n          this.hitsLoading = tempHits.length;\n        } while (nextToken != null);\n      }\n      // keep track of species in list and put wav files in list\n      var speciesHits = [];\n      var uniqueHits = [];\n      var speciesDict = {};\n      var counter = 0;\n\n      for (var i = 0; i < tempHits.length; i++) {\n        // var splitWav = tempHits2[i][\"wav\"].split(\"_\");\n        //var wavTimeStamp = splitWav[3].slice(0, -5);\n        var wavTimeStamp = tempHits[i].dt;\n        // console.log(wavTimeStamp, this.currentTimezone)\n        // let wavTimeMoment = moment(wavTimeStamp).fromNow();\n        var wavTimeMoment = moment\n          .utc(wavTimeStamp)\n          .tz(this.currentTimezone)\n          .locale(this.selectedLanguage)\n          .format('ll LTS');\n\n        // console.log(splitWav, wavTimeStamp);\n        // console.log(wavTimeMoment);\n\n        // use for quick check of low scores\n        // var listname = \"L \" + tempHits2[i].score) + ' ' + wavTimeMoment;\n        var listname = \"L \" + wavTimeMoment;\n        if ((tempHits[i].score > 0.4) & (tempHits[i].specSum > 2)) {\n          listname = \"M \" + wavTimeMoment;\n        }\n        if (tempHits[i].score > 0.9 && tempHits[i].specSum > 6) {\n          listname = \"H \" + wavTimeMoment;\n        }\n\n        if (\n          tempHits[i].score > 0.4 &&\n          tempHits[i].specSum > 3 &&\n          tempHits[i].version.slice(-1) == \"D\"\n        ) {\n          listname = \"M. \" + wavTimeMoment;\n        }\n        if (\n          tempHits[i].score > 0.9 &&\n          tempHits[i].specSum > 5 &&\n          tempHits[i].version.slice(-1) == \"D\"\n        ) {\n          listname = \"H. \" + wavTimeMoment;\n        }\n\n        if (!speciesHits.includes(tempHits[i].cn)) {\n          speciesHits.push(tempHits[i].cn);\n          speciesDict[tempHits[i].cn] = counter;\n          uniqueHits.push(tempHits[i]);\n          uniqueHits[counter].wavList = [\n            {\n              filename: tempHits[i][\"wav\"],\n              listname: listname,\n              dt: tempHits[i][\"dt\"],\n              score: tempHits[i][\"score\"],\n              specSum: tempHits[i][\"specSum\"],\n            },\n          ];\n          uniqueHits[counter].currentWav = {\n            filename: tempHits[i][\"wav\"],\n            listname: listname,\n            dt: tempHits[i][\"dt\"],\n            score: tempHits[i][\"score\"],\n            specSum: tempHits[i][\"specSum\"],\n          };\n          uniqueHits[counter].playbackIndex = 0;\n          uniqueHits[counter].window = \"image\";\n          uniqueHits[counter].showBird = true;\n          uniqueHits[counter].notifyBird = false;\n          counter = counter + 1;\n        } else {\n          uniqueHits[speciesDict[tempHits[i].cn]][\"wavList\"].push({\n            filename: tempHits[i][\"wav\"],\n            listname: listname,\n            dt: tempHits[i][\"dt\"],\n            score: tempHits[i][\"score\"],\n            specSum: tempHits[i][\"specSum\"],\n          });\n        }\n      }\n      // console.log('speciesHits', speciesHits);\n      // console.log('speciesDict', speciesDict);\n      // console.log(\"uniqueHits\", uniqueHits);\n\n      // query hidden list for this Haikubox\n      // query hideBirds condition for this Haikubox\n      const returnCount = await API.graphql({\n        query: hideBirdBySerial,\n        variables: {\n          serial: serialClicked,\n        },\n      });\n      // console.log('hideBirdBySerial', returnCount.data.hideBirdBySerial.items);\n      let hiddenBirdList = returnCount.data.hideBirdBySerial.items;\n      let customHiddenList = [];\n      for (let i = 0; i < hiddenBirdList.length; i++) {\n        customHiddenList.push(hiddenBirdList[i].cn);\n      }\n\n      // query notify birds\n      nextToken = null;\n      let notifyBirdList = [];\n      do {\n        const notify = await API.graphql({\n          query: notifyBirdBySerial,\n          variables: {\n            serial: serialClicked,\n            nextToken: nextToken,\n          },\n        });\n        notifyBirdList = notifyBirdList.concat(\n          notify.data.notifyBirdBySerial.items\n        );\n        nextToken = notify.data.notifyBirdBySerial.nextToken;\n      } while (nextToken != null);\n\n      let customNotifyList = [];\n      // console.log('notifyBirdList', notifyBirdList);\n      for (let i = 0; i < notifyBirdList.length; i++) {\n        customNotifyList.push(notifyBirdList[i].cn);\n      }\n\n      // update hits with notifyBird\n      for (i in uniqueHits) {\n        if (customNotifyList.includes(uniqueHits[i].cn)) {\n          uniqueHits[i].notifyBird = true;\n          // console.log(\"notify index and species\", i, uniqueHits[i]);\n        }\n      }\n\n      // // query favorites\n      // for (i = uniqueHits.length - 1; i >= 0; i--) {\n      //   uniqueHits[i].favoriteHit = false;\n      //   // console.log(uniqueHits[i].currentWav.filename);\n      //   const favoriteHit = await API.graphql({\n      //     query: getFavoriteHit,\n      //     variables: {\n      //       id: uniqueHits[i].wav,\n      //     },\n      //   });\n      //   if (favoriteHit.data.getFavoriteHit != null) {\n      //     uniqueHits[i].favoriteHit = true;\n      //     // console.log('getHits favorite', favoriteHit);\n      //   }\n      // }\n\n      this.hits = uniqueHits; // this.hits is what is looped through to show cards\n      // console.log(\"hits\", this.hits);\n      this.hitsLoading = 0; // hide hits loading counter\n    },\n    hitSelectDate() {\n      // console.log('hitsSelectRange');\n      if (this.hitCalendarDatePicked == false) {\n        this.hitCalendarDatePicked = true; // hide calendar\n      } else {\n        this.hitCalendarDatePicked = false; // show calendar\n        this.recentHours = 0;\n      }\n    },\n    hitDateClick() {\n      console.log('hitDateClick', this.hitDatePicker);\n      this.hitCalendarDatePicked = true; // hide calendar\n      this.changeRecentHours(0);\n    },\n    changeRecentHours(numHours) {\n      this.hitCalendarDatePicked = true; // hide calendar\n      this.recentHours = numHours;\n      this.hits = [];\n      this.hitsLoading = 0;\n      this.getHits(this.currentSerial);\n    },\n    async getBootTable(serialClicked) {\n      let lastMonth = moment.utc().subtract(345, \"days\").format();\n      const filterArg = {\n        serial: serialClicked,\n        createdAt: { gt: lastMonth },\n      };\n      const bootTable = await API.graphql({\n        query: bootBySerialByDate,\n        variables: filterArg,\n      });\n      var bootData = bootTable.data.bootBySerialByDate.items;\n      var tempBootTable = [];\n      for (var index in bootData) {\n        var datetimeX = moment\n          .utc(bootData[index].createdAt)\n          .tz(this.timezone)\n          .format(\"dddd, MMMM Do YYYY, h:mm:ss a\");\n        tempBootTable[index] = bootData[index];\n        tempBootTable[index].createdAt = datetimeX; // local time\n      }\n      this.bootTable = tempBootTable;\n      // console.log(\"getBootTable\", bootData);\n      // if (bootData.length > 0) {\n      //   this.firmwareVersion = bootData[bootData.length - 1].version;\n      // } else {\n      //   this.firmwareVersion = 0;\n      // }\n    },\n    async getState(serialClicked) {\n      const deviceState = await API.graphql({\n        query: getDeviceState,\n        variables: { id: serialClicked },\n      });\n      var clickedDevice = deviceState.data.getDeviceState;\n      // console.log(\"getState\", clickedDevice);\n      if (clickedDevice.lat != null) {\n        this.lat = clickedDevice.lat;\n        this.lon = clickedDevice.lon;\n      }\n      if (clickedDevice.timezone != null) {\n        this.timezone = clickedDevice.timezone.replace(/ /g, \"_\");\n      } else {\n        this.timezone = \"America/New_York\";\n      }\n      this.firmwareVersion = clickedDevice.version;\n    },\n    async getStatus(serialClicked) {\n      let yesterdayDate = moment.utc().subtract(2, \"days\").format();\n      var nextToken = null;\n      var haikuboxStatus = [];\n\n      do {\n        const filterArg = {\n          serial: serialClicked,\n          createdAt: { gt: yesterdayDate },\n          nextToken: nextToken,\n        };\n        const boxStatus = await API.graphql({\n          query: statusByDate,\n          variables: filterArg,\n        });\n        haikuboxStatus = haikuboxStatus.concat(\n          boxStatus.data.statusByDate.items\n        );\n        nextToken = boxStatus.data.statusByDate.nextToken;\n      } while (nextToken != null);\n\n      // check if any loaded, if not try to go back in time farther\n      if (haikuboxStatus.length == 0) {\n        yesterdayDate = moment.utc().subtract(30, \"days\").format();\n        nextToken = null;\n        haikuboxStatus = [];\n\n        do {\n          const filterArg = {\n            serial: serialClicked,\n            createdAt: { gt: yesterdayDate },\n            nextToken: nextToken,\n          };\n          const boxStatus = await API.graphql({\n            query: statusByDate,\n            variables: filterArg,\n          });\n          haikuboxStatus = haikuboxStatus.concat(\n            boxStatus.data.statusByDate.items\n          );\n          nextToken = boxStatus.data.statusByDate.nextToken;\n        } while (nextToken != null);\n      }\n\n      // check if any loaded, if not try to go back in time farther\n      if (haikuboxStatus.length == 0) {\n        yesterdayDate = moment.utc().subtract(180, \"days\").format();\n        nextToken = null;\n        haikuboxStatus = [];\n\n        do {\n          const filterArg = {\n            serial: serialClicked,\n            createdAt: { gt: yesterdayDate },\n            nextToken: nextToken,\n          };\n          const boxStatus = await API.graphql({\n            query: statusByDate,\n            variables: filterArg,\n          });\n          haikuboxStatus = haikuboxStatus.concat(\n            boxStatus.data.statusByDate.items\n          );\n          nextToken = boxStatus.data.statusByDate.nextToken;\n        } while (nextToken != null);\n      }\n\n      // console.log(haikuboxStatus);\n      // console.log(\"getStatus\", serialClicked, yesterdayDate, haikuboxStatus);\n      var cpuTempSeries = [];\n      var cpuFreqSeries = [];\n      var ramdiskSeries = [];\n      var signalSeries = [];\n      var nDirectSeries = [];\n      var nCloudSeries = [];\n      var currentWiFi = 0;\n\n      for (var entry in haikuboxStatus) {\n        var datetimeX = moment\n          .utc(haikuboxStatus[entry].createdAt)\n          .tz(this.timezone)\n          .format(\"MM-DD hh:mm a\");\n        cpuTempSeries.push([datetimeX, haikuboxStatus[entry].cpuTemp]);\n        cpuFreqSeries.push([datetimeX, haikuboxStatus[entry].cpuFreq]);\n        ramdiskSeries.push([datetimeX, haikuboxStatus[entry].ramdisk]);\n        signalSeries.push([datetimeX, haikuboxStatus[entry].signal]);\n\n        nDirectSeries.push([datetimeX, haikuboxStatus[entry].nDirect]);\n        nCloudSeries.push([datetimeX, haikuboxStatus[entry].nCloud]);\n        currentWiFi = haikuboxStatus[entry].signal;\n      }\n      this.cpuTempSeries = cpuTempSeries;\n      this.cpuFreqSeries = cpuFreqSeries;\n      this.ramdiskSeries = ramdiskSeries;\n      this.signalSeries = signalSeries;\n      this.nDirectSeries = nDirectSeries;\n      this.nCloudSeries = nCloudSeries;\n      this.currentWiFi = currentWiFi;\n    },\n    async getNotice() {\n      const noticeInfo = await API.graphql({\n        query: getNoticeDescription,\n        variables: { id: this.noticeId },\n      });\n      this.noticeDescription = noticeInfo.data.getNoticeDescription;\n      // console.log(\"getNotice\", this.noticeDescription);\n    },\n    async getDeviceHistory() {\n      this.deviceHistory = [];\n      for (var i = 7; i >= 0; i--) {\n        let currentDate = moment.utc().subtract(i, \"days\").format(\"YYYY-MM-DD\");\n        // console.log(currentDate);\n        const deviceHistory = await API.graphql({\n          query: deviceHistoryByDate,\n          variables: { createDate: currentDate },\n        });\n        this.deviceHistory = this.deviceHistory.concat(\n          deviceHistory.data.deviceHistoryByDate.items\n        );\n      }\n      // console.log(\"getDeviceHistory\", this.deviceHistory);\n    },\n    handleHistoryClick(value) {\n      // console.log(value);\n      this.haikubox = value.serial + \": \" + value.name;\n      this.selectHaikubox(value.serial);\n    },\n    refreshDeviceHistory() {\n      this.getDeviceHistory();\n    },\n    async getMapCountsPerSpecies(commonName) {\n      let yesterdayDate = moment\n        .utc()\n        .local()\n        .subtract(24, \"hours\")\n        .format(\"YYYY-MM-DD\");\n      var tempHits = [];\n      var nextToken = null;\n      do {\n        const queryHits = await API.graphql({\n          query: dailyCountSummaryByDateBySpecies,\n          variables: {\n            cn: { eq: commonName },\n            countDate: yesterdayDate,\n            nextToken: nextToken,\n          },\n        });\n        tempHits = tempHits.concat(\n          queryHits.data.dailyCountSummaryByDateBySpecies.items\n        );\n        nextToken = queryHits.data.dailyCountSummaryByDateBySpecies.nextToken;\n      } while (nextToken != null);\n      // console.log(\"getMapCountsPerSpecies tempHits\", tempHits);\n      var mapHits = [];\n      for (let i = 0; i < tempHits.length; i++) {\n        let mapCount = {\n          lat: tempHits[i].lat,\n          lon: tempHits[i].lon,\n          radius: tempHits[i].countsPerDay * 100,\n        };\n        mapHits.push(mapCount);\n      }\n      return mapHits;\n    },\n    float2int(value) {\n      return value | 0;\n    },\n    async setWindowRecent(index, value, spCode, commonName) {\n      \n      if (value == \"daily\") {\n        this.hits[index].hourlyCountPlotData = await this.getHourlySpecies(\n          commonName\n        );\n      }\n      if (value == \"monthly\") {\n        this.hits[index].dailyCountPlotData =\n          await this.getDailySpeciesChartsJS(commonName);\n      }\n      if (value == \"heatmap\") {\n        this.hits[index].heatmap = await this.getHeatmap(commonName);\n      }\n      if (value == \"map\") {\n        this.hits[index].map = await this.getMapCountsPerSpecies(commonName);\n      }\n      this.hits[index].window = value;\n      this.$forceUpdate();\n      // this.hits[index].id += 1; // increment ID so that component updates\n      // console.log(\"setWindowRecent\", commonName, this.hits[index]);\n    },\n    async setWindowAll(index, value, spCode, commonName) {\n\n      // console.log(\"setWindowAll\", index, value, commonName);\n      if (this.seriesDaily[index].window == value)\n        this.seriesDaily[index].window = \"none\";\n      // toggle view\n      else {\n        if (value == \"monthly\") {\n          this.seriesDaily[index].dataSource.data =\n            await this.getDailyCountsBySpecies(commonName);\n        }\n        this.seriesDaily[index].window = value;\n      }\n      this.seriesDaily[index].id += 1; // increment ID so that component updates\n      // console.log(\"setWindowAll\", this.seriesDaily[index]);\n    },\n    setWindowNew(index, value) {\n      this.newSpeciesList[index].window = value;\n      this.newSpeciesList[index].id += 1; // increment ID so that component updates\n      // console.log(\"Change Window\", this.hits[index]);\n    },\n    setWindowMissing(index, value) {\n      this.missingSpeciesList[index].window = value;\n      this.missingSpeciesList[index].id += 1; // increment ID so that component updates\n      // console.log(\"Change Window\", this.hits[index]);\n    },\n    async labelHit(index, item) {\n      // console.log(\"labelHit\", index, item);\n      if (!item.classLabel) return;\n\n      // copy file to label bucket\n      await Storage.copy(\n        { key: item.wav, level: \"public\" },\n        { key: \"label/\" + item.wav, level: \"private\" }\n      );\n\n      if (item.classLabel == \"No it's a ...\") {\n        this.hits[index].showEntryBox = true;\n        this.hits[index].showSubmitBox = true;\n        this.hits[index].id += 1; // increment ID so that component updates\n        // console.log(\"no its a\");\n        return;\n      }\n\n      const serial = item.serial;\n      const dt = item.currentWav[\"dt\"];\n      const group = item.group;\n      const cn = item.cn;\n      const sn = item.sn;\n      const spCode = item.spCode;\n      const wav = item.currentWav[\"filename\"];\n      const labeledBy = this.user;\n      const label = item.classLabel;\n      const score = item.currentWav[\"score\"];\n      const lat = item.lat;\n      const lon = item.lon;\n      const labeledData = {\n        serial,\n        dt,\n        group,\n        cn,\n        sn,\n        spCode,\n        wav,\n        labeledBy,\n        label,\n        score,\n        lat,\n        lon,\n      };\n      API.graphql({\n        query: createLabeledData,\n        variables: { input: labeledData },\n      });\n\n      // console.log(labeledData);\n\n      if (\n        (item.classLabel == \"No\") |\n        (item.classLabel == \"Yes\")\n      ) {\n        this.hits[index].showEntryBox = false;\n        this.hits[index].id += 1; // increment ID so that component updates\n      }\n    },\n    labelHitCustom(index, item) {\n      // console.log(\"labelHitCustom\");\n      if (!item.classLabel) return;\n      const serial = item.serial;\n      const dt = item.dt;\n      const group = item.group;\n      const cn = item.cn;\n      const sn = item.sn;\n      const spCode = item.spCode;\n      const wav = item.wav;\n      const labeledBy = this.user;\n      const label = item.tellUsMore;\n      const score = item.score;\n      const lat = item.lat;\n      const lon = item.lon;\n      const labeledData = {\n        serial,\n        dt,\n        group,\n        cn,\n        sn,\n        spCode,\n        wav,\n        labeledBy,\n        label,\n        score,\n        lat,\n        lon,\n      };\n      API.graphql({\n        query: createLabeledData,\n        variables: { input: labeledData },\n      });\n      this.hits[index].submitted = true;\n      this.hits[index].showSubmitBox = false;\n      this.hits[index].id += 1; // increment ID so that component updates\n    },\n    // async addDeviceOwnersToNotice(){\n    //   for (var i = 0; i<this.userIdList.length; i++){\n    //     console.log(this.userIdList[i]);\n    //     var id = this.noticeId + '-' + this.userIdList[i];\n    //     var owner = this.userIdList[i];\n    //     var noticeID = this.noticeId;\n    //     var noticeViewed = \"False\";\n\n    //     const noticeData = {\n    //       id,\n    //       owner,\n    //       noticeID,\n    //       noticeViewed\n    //     };\n\n    //     await API.graphql({\n    //       query: createUserNotice,\n    //       variables: {  input: noticeData },\n    //     });\n    //   }\n\n    // },\n  },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Admin.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Admin.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Admin.vue?vue&type=template&id=7264f667\"\nimport script from \"./Admin.vue?vue&type=script&lang=js\"\nexport * from \"./Admin.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (this.user != '')?_c('v-container',[_c('v-card',{staticClass:\"py-12\",attrs:{\"outlined\":\"\"}},[_c('v-slider',{attrs:{\"label\":\"Week\",\"max\":\"48\",\"min\":\"1\",\"thumb-label\":\"always\"},on:{\"change\":function($event){return _vm.loadGrid()}},model:{value:(_vm.week),callback:function ($$v) {_vm.week=$$v},expression:\"week\"}}),_c('v-autocomplete',{attrs:{\"items\":_vm.cn},on:{\"change\":function($event){return _vm.loadGrid()}},model:{value:(_vm.species),callback:function ($$v) {_vm.species=$$v},expression:\"species\"}}),_c('v-img',{attrs:{\"height\":\"100%\",\"width\":\"100%\"}},[_vm._v(\" \"+_vm._s(this.searchID)+\" \"),_c('l-map',{staticStyle:{\"height\":\"600px\",\"width\":\"100%\"},attrs:{\"center\":[30, -40],\"zoomControl\":false,\"zoom\":2}},[_c('l-tile-layer',{attrs:{\"url\":_vm.urlStates,\"attribution\":_vm.attributionSummary}}),_vm._l((_vm.latlon),function(item){return _c('l-circle',{key:item.id,attrs:{\"lat-lng\":[item.lat, item.lon],\"radius\":400,\"color\":\"#A9A9A9\"}})}),_vm._l((_vm.hitNotInGrid),function(item2){return _c('l-circle',{key:item2.id,attrs:{\"lat-lng\":[item2.latitude, item2.longitude],\"radius\":200,\"color\":\"#F4BB44\"}})}),_vm._l((_vm.currentWeekNotInGrid),function(item3,i){return _c('l-circle',{key:i,attrs:{\"lat-lng\":[item3[0].latitude, item3[0].longitude],\"radius\":800,\"color\":\"#FF0703\"}})})],2)],1)],1)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-container v-if=\"this.user != ''\">\n\n    <v-card outlined class=\"py-12\">\n      <v-slider\n        v-model=\"week\"\n        label=\"Week\"\n        max=\"48\"\n        min=\"1\"\n        thumb-label=\"always\"\n        @change=\"loadGrid()\"\n      ></v-slider>\n      <v-autocomplete\n        v-model=\"species\"\n        :items=\"cn\"\n        @change=\"loadGrid()\"\n      ></v-autocomplete>\n\n      <v-img height=\"100%\" width=\"100%\">\n        {{ this.searchID }}\n        <l-map\n          :center=\"[30, -40]\"\n          style=\"height: 600px; width: 100%\"\n          :zoomControl=\"false\"\n          :zoom=\"2\"\n        >\n          <l-tile-layer :url=\"urlStates\" :attribution=\"attributionSummary\" />\n          <l-circle\n            v-for=\"item in latlon\"\n            :key=\"item.id\"\n            :lat-lng=\"[item.lat, item.lon]\"\n            :radius=\"400\"\n            color=\"#A9A9A9\"\n          >\n          </l-circle>\n          <l-circle\n            v-for=\"item2 in hitNotInGrid\"\n            :key=\"item2.id\"\n            :lat-lng=\"[item2.latitude, item2.longitude]\"\n            :radius=\"200\"\n            color=\"#F4BB44\"\n          >\n          </l-circle>\n          <l-circle\n            v-for=\"(item3, i) in currentWeekNotInGrid\"\n            :key=\"i\"\n            :lat-lng=\"[item3[0].latitude, item3[0].longitude]\"\n            :radius=\"800\"\n            color=\"#FF0703\"\n          >\n          </l-circle> </l-map\n      ></v-img>\n    </v-card>\n    <!-- <v-row>\n      <v-col\n        cols=\"12\"\n        xs=\"12\"\n        sm=\"6\"\n        md=\"6\"\n        lg=\"4\"\n        xl=\"3\"\n        v-for=\"(haikubox) in hitNotInGrid\"\n        :key=\"haikubox.id2\"\n      >\n        <v-card dark class=\"py-2\" variant=\"outlines\">\n          <v-card-title>{{ haikubox.serial }}</v-card-title>\n\n          <l-map\n            :center=\"[0, -40]\"\n            style=\"height: 300px; width: 100%\"\n            :scrollWheelZoom=\"false\"\n            :zoom=\"1\"\n          >\n            <l-tile-layer :url=\"urlStates\" :attribution=\"attributionSummary\" />\n            <l-circle\n              :lat-lng=\"[haikubox.latitude, haikubox.longitude]\"\n              :radius=\"800\"\n              color=\"#FF0703\"\n            >\n            </l-circle>\n          </l-map>\n\n          <Plotly\n            :data=\"haikubox.spectrogram\"\n            :layout=\"plotlyLayout\"\n            :display-mode-bar=\"false\"\n          ></Plotly>\n          <v-row>\n            <v-col cols=\"8\">\n              <v-btn\n                text\n                :href=\"\n                  haikubox.longitude > -30\n                    ? 'https://ebird.org/species/' + haikubox.spCode\n                    : 'https://www.allaboutbirds.org/guide/' +\n                      replaceSpaces(haikubox.cn)\n                \"\n                target=\"_blank\"\n                color=\"light-blue\"\n                >About</v-btn\n              ><v-btn\n                text\n                :href=\"'https://ebird.org/species/' + haikubox.spCode\"\n                target=\"_blank\"\n                color=\"light-blue\"\n                >eBird</v-btn\n              >\n            </v-col>\n          </v-row>\n          <v-row>\n            <v-col>\n              Unfiltered:\n              {{ haikubox.detectionArrayUf }}\n              {{ haikubox.detectionConfidenceUf }}\n              <v-spacer></v-spacer>\n              Filtered:\n              {{ haikubox.detectionArrayF }}\n              {{ haikubox.detectionConfidenceF }}\n            </v-col> </v-row\n          ><v-row>\n            <v-col cols=\"1\" class=\"mx-4\">\n              <v-btn\n                icon\n                @click=\"\n                  playFile(\n                    haikubox.wav,\n                    haikubox.spCode,\n                    haikubox.cn,\n                    haikubox,\n                    index,\n                    true\n                  )\n                \"\n              >\n                <v-icon left>mdi-play-circle</v-icon>\n              </v-btn>\n            </v-col>\n            <v-col cols=\"10\">\n              <v-select\n                class=\"mx-2\"\n                :items=\"haikubox.wavList\"\n                v-model=\"haikubox.currentWav\"\n                item-text=\"listname\"\n                item-value=\"filename\"\n                @change=\"\n                  playFile(\n                    haikubox.currentWav['filename'],\n                    haikubox.spCode,\n                    haikubox.cn,\n                    haikubox,\n                    index,\n                    true\n                  )\n                \"\n                return-object\n                single-line\n              ></v-select> </v-col\n          ></v-row>\n        </v-card>\n      </v-col>\n    </v-row> -->\n  </v-container>\n</template>\n  \n<script>\nimport { API, Storage } from \"aws-amplify\";\nimport {\n  getGridBySpCode,\n  hitNotInGridBySpeciesByDate,\n} from \"../graphql/queries\";\nvar moment = require(\"moment-timezone\");\n// import { Plotly } from \"vue-plotly\";\n// https://github.com/chrisguttandin/standardized-audio-context\nimport { AudioContext, decodeAudioData } from \"standardized-audio-context\";\nimport { FFT } from \"dsp.js\";\nvar hann = [\n  0.0, 3.77965773e-5, 1.51180595e-4, 3.4013491e-4, 6.04630957e-4, 9.44628746e-4,\n  1.36007687e-3, 1.85091253e-3, 2.41706151e-3, 3.05843822e-3, 3.77494569e-3,\n  4.56647559e-3, 5.43290826e-3, 6.3741127e-3, 7.38994662e-3, 8.48025644e-3,\n  9.64487731e-3, 1.08836332e-2, 1.21963367e-2, 1.35827895e-2, 1.50427819e-2,\n  1.65760932e-2, 1.81824916e-2, 1.98617342e-2, 2.16135671e-2, 2.34377255e-2,\n  2.53339336e-2, 2.73019047e-2, 2.93413412e-2, 3.1451935e-2, 3.36333667e-2,\n  3.58853068e-2, 3.82074146e-2, 4.05993391e-2, 4.30607187e-2, 4.55911813e-2,\n  4.81903443e-2, 5.08578147e-2, 5.35931893e-2, 5.63960544e-2, 5.92659864e-2,\n  6.22025514e-2, 6.52053053e-2, 6.82737943e-2, 7.14075543e-2, 7.46061116e-2,\n  7.78689827e-2, 8.11956742e-2, 8.45856832e-2, 8.80384971e-2, 9.1553594e-2,\n  9.51304424e-2, 9.87685015e-2, 1.02467221e-1, 1.06226043e-1, 1.10044397e-1,\n  1.13921708e-1, 1.17857388e-1, 1.21850843e-1, 1.25901469e-1, 1.30008654e-1,\n  1.34171776e-1, 1.38390206e-1, 1.42663307e-1, 1.46990432e-1, 1.51370928e-1,\n  1.55804131e-1, 1.60289372e-1, 1.64825973e-1, 1.69413247e-1, 1.74050502e-1,\n  1.78737036e-1, 1.8347214e-1, 1.88255099e-1, 1.9308519e-1, 1.97961681e-1,\n  2.02883837e-1, 2.07850913e-1, 2.12862158e-1, 2.17916814e-1, 2.23014117e-1,\n  2.28153297e-1, 2.33333576e-1, 2.38554171e-1, 2.43814294e-1, 2.49113148e-1,\n  2.54449933e-1, 2.59823842e-1, 2.65234062e-1, 2.70679775e-1, 2.76160159e-1,\n  2.81674384e-1, 2.87221617e-1, 2.92801019e-1, 2.98411747e-1, 3.04052952e-1,\n  3.09723782e-1, 3.15423378e-1, 3.21150881e-1, 3.26905422e-1, 3.32686134e-1,\n  3.38492141e-1, 3.44322565e-1, 3.50176526e-1, 3.56053138e-1, 3.61951513e-1,\n  3.6787076e-1, 3.73809982e-1, 3.79768282e-1, 3.8574476e-1, 3.91738511e-1,\n  3.97748631e-1, 4.03774209e-1, 4.09814335e-1, 4.15868096e-1, 4.21934577e-1,\n  4.2801286e-1, 4.34102027e-1, 4.40201156e-1, 4.46309327e-1, 4.52425614e-1,\n  4.58549094e-1, 4.64678841e-1, 4.70813928e-1, 4.76953428e-1, 4.83096412e-1,\n  4.89241951e-1, 4.95389117e-1, 5.0153698e-1, 5.07684611e-1, 5.1383108e-1,\n  5.19975458e-1, 5.26116815e-1, 5.32254225e-1, 5.38386758e-1, 5.44513487e-1,\n  5.50633486e-1, 5.56745831e-1, 5.62849596e-1, 5.68943859e-1, 5.75027699e-1,\n  5.81100196e-1, 5.87160431e-1, 5.93207489e-1, 5.99240456e-1, 6.05258418e-1,\n  6.11260467e-1, 6.17245695e-1, 6.23213197e-1, 6.2916207e-1, 6.35091417e-1,\n  6.41000339e-1, 6.46887944e-1, 6.52753341e-1, 6.58595644e-1, 6.6441397e-1,\n  6.70207439e-1, 6.75975174e-1, 6.81716305e-1, 6.87429962e-1, 6.93115283e-1,\n  6.98771407e-1, 7.0439748e-1, 7.09992651e-1, 7.15556073e-1, 7.21086907e-1,\n  7.26584315e-1, 7.32047467e-1, 7.37475536e-1, 7.42867702e-1, 7.4822315e-1,\n  7.5354107e-1, 7.58820659e-1, 7.64061117e-1, 7.69261652e-1, 7.74421479e-1,\n  7.79539817e-1, 7.84615893e-1, 7.89648938e-1, 7.94638193e-1, 7.99582902e-1,\n  8.04482319e-1, 8.09335702e-1, 8.14142317e-1, 8.18901439e-1, 8.23612347e-1,\n  8.28274329e-1, 8.32886681e-1, 8.37448705e-1, 8.41959711e-1, 8.46419017e-1,\n  8.5082595e-1, 8.55179843e-1, 8.59480037e-1, 8.63725883e-1, 8.67916738e-1,\n  8.7205197e-1, 8.76130952e-1, 8.80153069e-1, 8.84117711e-1, 8.88024281e-1,\n  8.91872186e-1, 8.95660845e-1, 8.99389686e-1, 9.03058145e-1, 9.06665667e-1,\n  9.10211707e-1, 9.13695728e-1, 9.17117204e-1, 9.20475618e-1, 9.23770461e-1,\n  9.27001237e-1, 9.30167455e-1, 9.33268638e-1, 9.36304317e-1, 9.39274033e-1,\n  9.42177336e-1, 9.45013788e-1, 9.4778296e-1, 9.50484434e-1, 9.531178e-1,\n  9.55682662e-1, 9.5817863e-1, 9.60605328e-1, 9.62962389e-1, 9.65249456e-1,\n  9.67466184e-1, 9.69612237e-1, 9.71687291e-1, 9.73691033e-1, 9.75623159e-1,\n  9.77483377e-1, 9.79271407e-1, 9.80986977e-1, 9.82629829e-1, 9.84199713e-1,\n  9.85696393e-1, 9.87119643e-1, 9.88469246e-1, 9.89745e-1, 9.90946711e-1,\n  9.92074198e-1, 9.9312729e-1, 9.94105827e-1, 9.95009663e-1, 9.9583866e-1,\n  9.96592693e-1, 9.97271648e-1, 9.97875422e-1, 9.98403924e-1, 9.98857075e-1,\n  9.99234805e-1, 9.99537058e-1, 9.99763787e-1, 9.99914959e-1, 9.99990551e-1,\n  9.99990551e-1, 9.99914959e-1, 9.99763787e-1, 9.99537058e-1, 9.99234805e-1,\n  9.98857075e-1, 9.98403924e-1, 9.97875422e-1, 9.97271648e-1, 9.96592693e-1,\n  9.9583866e-1, 9.95009663e-1, 9.94105827e-1, 9.9312729e-1, 9.92074198e-1,\n  9.90946711e-1, 9.89745e-1, 9.88469246e-1, 9.87119643e-1, 9.85696393e-1,\n  9.84199713e-1, 9.82629829e-1, 9.80986977e-1, 9.79271407e-1, 9.77483377e-1,\n  9.75623159e-1, 9.73691033e-1, 9.71687291e-1, 9.69612237e-1, 9.67466184e-1,\n  9.65249456e-1, 9.62962389e-1, 9.60605328e-1, 9.5817863e-1, 9.55682662e-1,\n  9.531178e-1, 9.50484434e-1, 9.4778296e-1, 9.45013788e-1, 9.42177336e-1,\n  9.39274033e-1, 9.36304317e-1, 9.33268638e-1, 9.30167455e-1, 9.27001237e-1,\n  9.23770461e-1, 9.20475618e-1, 9.17117204e-1, 9.13695728e-1, 9.10211707e-1,\n  9.06665667e-1, 9.03058145e-1, 8.99389686e-1, 8.95660845e-1, 8.91872186e-1,\n  8.88024281e-1, 8.84117711e-1, 8.80153069e-1, 8.76130952e-1, 8.7205197e-1,\n  8.67916738e-1, 8.63725883e-1, 8.59480037e-1, 8.55179843e-1, 8.5082595e-1,\n  8.46419017e-1, 8.41959711e-1, 8.37448705e-1, 8.32886681e-1, 8.28274329e-1,\n  8.23612347e-1, 8.18901439e-1, 8.14142317e-1, 8.09335702e-1, 8.04482319e-1,\n  7.99582902e-1, 7.94638193e-1, 7.89648938e-1, 7.84615893e-1, 7.79539817e-1,\n  7.74421479e-1, 7.69261652e-1, 7.64061117e-1, 7.58820659e-1, 7.5354107e-1,\n  7.4822315e-1, 7.42867702e-1, 7.37475536e-1, 7.32047467e-1, 7.26584315e-1,\n  7.21086907e-1, 7.15556073e-1, 7.09992651e-1, 7.0439748e-1, 6.98771407e-1,\n  6.93115283e-1, 6.87429962e-1, 6.81716305e-1, 6.75975174e-1, 6.70207439e-1,\n  6.6441397e-1, 6.58595644e-1, 6.52753341e-1, 6.46887944e-1, 6.41000339e-1,\n  6.35091417e-1, 6.2916207e-1, 6.23213197e-1, 6.17245695e-1, 6.11260467e-1,\n  6.05258418e-1, 5.99240456e-1, 5.93207489e-1, 5.87160431e-1, 5.81100196e-1,\n  5.75027699e-1, 5.68943859e-1, 5.62849596e-1, 5.56745831e-1, 5.50633486e-1,\n  5.44513487e-1, 5.38386758e-1, 5.32254225e-1, 5.26116815e-1, 5.19975458e-1,\n  5.1383108e-1, 5.07684611e-1, 5.0153698e-1, 4.95389117e-1, 4.89241951e-1,\n  4.83096412e-1, 4.76953428e-1, 4.70813928e-1, 4.64678841e-1, 4.58549094e-1,\n  4.52425614e-1, 4.46309327e-1, 4.40201156e-1, 4.34102027e-1, 4.2801286e-1,\n  4.21934577e-1, 4.15868096e-1, 4.09814335e-1, 4.03774209e-1, 3.97748631e-1,\n  3.91738511e-1, 3.8574476e-1, 3.79768282e-1, 3.73809982e-1, 3.6787076e-1,\n  3.61951513e-1, 3.56053138e-1, 3.50176526e-1, 3.44322565e-1, 3.38492141e-1,\n  3.32686134e-1, 3.26905422e-1, 3.21150881e-1, 3.15423378e-1, 3.09723782e-1,\n  3.04052952e-1, 2.98411747e-1, 2.92801019e-1, 2.87221617e-1, 2.81674384e-1,\n  2.76160159e-1, 2.70679775e-1, 2.65234062e-1, 2.59823842e-1, 2.54449933e-1,\n  2.49113148e-1, 2.43814294e-1, 2.38554171e-1, 2.33333576e-1, 2.28153297e-1,\n  2.23014117e-1, 2.17916814e-1, 2.12862158e-1, 2.07850913e-1, 2.02883837e-1,\n  1.97961681e-1, 1.9308519e-1, 1.88255099e-1, 1.8347214e-1, 1.78737036e-1,\n  1.74050502e-1, 1.69413247e-1, 1.64825973e-1, 1.60289372e-1, 1.55804131e-1,\n  1.51370928e-1, 1.46990432e-1, 1.42663307e-1, 1.38390206e-1, 1.34171776e-1,\n  1.30008654e-1, 1.25901469e-1, 1.21850843e-1, 1.17857388e-1, 1.13921708e-1,\n  1.10044397e-1, 1.06226043e-1, 1.02467221e-1, 9.87685015e-2, 9.51304424e-2,\n  9.1553594e-2, 8.80384971e-2, 8.45856832e-2, 8.11956742e-2, 7.78689827e-2,\n  7.46061116e-2, 7.14075543e-2, 6.82737943e-2, 6.52053053e-2, 6.22025514e-2,\n  5.92659864e-2, 5.63960544e-2, 5.35931893e-2, 5.08578147e-2, 4.81903443e-2,\n  4.55911813e-2, 4.30607187e-2, 4.05993391e-2, 3.82074146e-2, 3.58853068e-2,\n  3.36333667e-2, 3.1451935e-2, 2.93413412e-2, 2.73019047e-2, 2.53339336e-2,\n  2.34377255e-2, 2.16135671e-2, 1.98617342e-2, 1.81824916e-2, 1.65760932e-2,\n  1.50427819e-2, 1.35827895e-2, 1.21963367e-2, 1.08836332e-2, 9.64487731e-3,\n  8.48025644e-3, 7.38994662e-3, 6.3741127e-3, 5.43290826e-3, 4.56647559e-3,\n  3.77494569e-3, 3.05843822e-3, 2.41706151e-3, 1.85091253e-3, 1.36007687e-3,\n  9.44628746e-4, 6.04630957e-4, 3.4013491e-4, 1.51180595e-4, 3.77965773e-5, 0.0,\n];\nexport default {\n  props: [\"user\"],\n  created() {\n    this.loadGrid();\n  },\n  components: {\n    // Plotly,\n  },\n  data() {\n    return {\n      searchID: \"\",\n      latlon: [],\n      confirmedEmail: null,\n      accountUpdatedAt: null,\n      hitNotInGrid: [],\n      weekNotInGrid: [],\n      currentWeekNotInGrid: [],\n      week: 1,\n      species: \"Tufted Titmouse_tuftit\",\n      fftLength: 512,\n      halfLength: 256,\n      plotlyLayout: {\n        xaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        yaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        margin: {\n          l: 0,\n          r: 0,\n          b: 0,\n          t: 0,\n          pad: 4,\n        },\n        height: 240,\n        hovermode: false,\n      },\n      cn: [\n        \"Lesser Redpoll_lesred1\",\n        \"Common Redpoll_comred\",\n        \"Hoary Redpoll_hoared\",\n        \"Shikra_shikra1\",\n        \"Cooper's Hawk_coohaw\",\n        \"Northern Goshawk_norgos\",\n        \"Eurasian Sparrowhawk_eurspa1\",\n        \"Sharp-shinned Hawk_shshaw\",\n        \"Common Myna_commyn\",\n        \"Northern Cricket Frog_t-11145339\",\n        \"Southern Cricket Frog_t-11164140\",\n        \"Paddyfield Warbler_padwar1\",\n        \"Great Reed Warbler_grrwar1\",\n        \"African Reed Warbler_afrwar1\",\n        \"Black-browed Reed Warbler_bbrwar1\",\n        \"Blyth's Reed Warbler_blrwar1\",\n        \"Moustached Warbler_mouwar1\",\n        \"Oriental Reed Warbler_orrwar1\",\n        \"Aquatic Warbler_aquwar1\",\n        \"Marsh Warbler_marwar3\",\n        \"Sedge Warbler_sedwar1\",\n        \"Eurasian Reed Warbler_eurwar1\",\n        \"Clamorous Reed Warbler_clrwar1\",\n        \"Common Sandpiper_comsan\",\n        \"Spotted Sandpiper_sposan\",\n        \"Clark's Grebe_clagre\",\n        \"Western Grebe_wesgre\",\n        \"Long-tailed Tit_lottit1\",\n        \"Northern Saw-whet Owl_nswowl\",\n        \"Boreal Owl_borowl\",\n        \"White-throated Swift_whtswi\",\n        \"Whiskered Auklet_whiauk\",\n        \"Red-winged Blackbird_rewbla\",\n        \"Tricolored Blackbird_tribla\",\n        \"Rusty Sparrow_russpa1\",\n        \"Rufous-crowned Sparrow_rucspa\",\n        \"Mandarin Duck_manduc\",\n        \"Wood Duck_wooduc\",\n        \"Eurasian Skylark_skylar\",\n        \"Asian Short-toed Lark_lstlar2\",\n        \"Mediterranean Short-toed Lark_mstlar1\",\n        \"Razorbill_razorb\",\n        \"Common Kingfisher_comkin1\",\n        \"Chukar_chukar\",\n        \"Red-legged Partridge_relpar1\",\n        \"Allard's Ground Cricket_t-11840984\",\n        \"Tinkling Ground Cricket_t-11843287\",\n        \"Walker's Ground Cricket_t-11855914\",\n        \"Egyptian Goose_egygoo\",\n        \"Red Avadavat_redava\",\n        \"White-breasted Waterhen_whbwat1\",\n        \"Buff-bellied Hummingbird_bubhum\",\n        \"White-fronted Parrot_whfpar1\",\n        \"Red-lored Parrot_relpar\",\n        \"Lilac-crowned Parrot_licpar\",\n        \"Yellow-headed Parrot_yehpar\",\n        \"Red-crowned Parrot_recpar\",\n        \"Clicker Round-winged Katydid_t-11838680\",\n        \"Common Virtuoso Katydid_t-11851326\",\n        \"Oblong-winged Katydid_t-11845584\",\n        \"Rattler Round-winged Katydid_t-11854789\",\n        \"Grasshopper Sparrow_graspa\",\n        \"LeConte's Sparrow_lecspa\",\n        \"Nelson's Sparrow_nstspa\",\n        \"Black-throated Sparrow_bktspa\",\n        \"Five-striped Sparrow_fisspa\",\n        \"Northern Pintail_norpin\",\n        \"Green-winged Teal_gnwtea\",\n        \"Mallard_mallar3\",\n        \"American Black Duck_ambduc\",\n        \"Say's Trig_t-11847882\",\n        \"American Toad_t-11140103\",\n        \"Yosemite Toad_t-11050888\",\n        \"Great Plains Toad_t-11100978\",\n        \"Fowler's Toad_t-11132206\",\n        \"Houston Toad_t-11153124\",\n        \"Arizona Toad_t-11160924\",\n        \"Oak Toad_t-11107100\",\n        \"Texas Toad_t-11051816\",\n        \"Southern Toad_t-11045871\",\n        \"Woodhouse's Toad_t-11105570\",\n        \"Anhinga_anhing\",\n        \"Greater White-fronted Goose_gwfgoo\",\n        \"Graylag Goose_gragoo\",\n        \"Pink-footed Goose_pifgoo\",\n        \"Snow Goose_snogoo\",\n        \"Taiga Bean-Goose_taibeg1\",\n        \"Bar-headed Goose_bahgoo\",\n        \"Ross's Goose_rosgoo\",\n        \"Tundra Bean-Goose_tunbeg1\",\n        \"Tawny Pipit_tawpip1\",\n        \"Red-throated Pipit_retpip\",\n        \"Blyth's Pipit_blypip1\",\n        \"Olive-backed Pipit_olbpip\",\n        \"Rock Pipit_rocpip1\",\n        \"Meadow Pipit_meapip1\",\n        \"Richard's Pipit_ricpip1\",\n        \"American Pipit_amepip\",\n        \"Water Pipit_watpip1\",\n        \"Sprague's Pipit_sprpip\",\n        \"Tree Pipit_trepip\",\n        \"Sandhill Crane_sancra\",\n        \"Mexican Whip-poor-will_souwpw1\",\n        \"Chuck-will's-widow_chwwid\",\n        \"Buff-collared Nightjar_bucnig\",\n        \"Eastern Whip-poor-will_easwpw1\",\n        \"California Scrub-Jay_cowscj1\",\n        \"Mexican Jay_mexjay4\",\n        \"Woodhouse's Scrub-Jay_wooscj2\",\n        \"Honey Bee_t-11139707\",\n        \"Little Swift_litswi1\",\n        \"Common Swift_comswi\",\n        \"Alpine Swift_alpswi1\",\n        \"Pallid Swift_palswi3\",\n        \"Golden Eagle_goleag\",\n        \"Military Macaw_milmac\",\n        \"Black-chinned Hummingbird_bkchum\",\n        \"Ruby-throated Hummingbird_rthhum\",\n        \"Great Egret_greegr\",\n        \"Gray Heron_graher1\",\n        \"Great Blue Heron_grbher3\",\n        \"Purple Heron_purher1\",\n        \"Squacco Heron_squher1\",\n        \"Ruddy Turnstone_rudtur\",\n        \"Black Turnstone_blktur\",\n        \"Olive Sparrow_olispa\",\n        \"Bell's Sparrow_belspa2\",\n        \"Sagebrush Sparrow_sagspa1\",\n        \"Thick-billed Warbler_thbwar1\",\n        \"Short-eared Owl_sheowl\",\n        \"Long-eared Owl_loeowl\",\n        \"Burrowing Owl_burowl\",\n        \"Little Owl_litowl1\",\n        \"Protean Shieldback_t-11844441\",\n        \"Rufous-capped Brushfinch_rcbfin1\",\n        \"Verdin_verdin\",\n        \"Redhead_redhea\",\n        \"Ring-necked Duck_rinduc\",\n        \"Common Pochard_compoc\",\n        \"Tufted Duck_tufduc\",\n        \"Black-crested Titmouse_blctit4\",\n        \"Tufted Titmouse_tuftit\",\n        \"Oak Titmouse_oaktit\",\n        \"Juniper Titmouse_juntit1\",\n        \"Bridled Titmouse_britit\",\n        \"Upland Sandpiper_uplsan\",\n        \"Fan-tailed Warbler_fatwar\",\n        \"Rufous-capped Warbler_rucwar\",\n        \"White-eared Hummingbird_whehum\",\n        \"Cedar Waxwing_cedwax\",\n        \"Bohemian Waxwing_bohwax\",\n        \"Ruffed Grouse_rufgro\",\n        \"American Bittern_amebit\",\n        \"Great Bittern_grebit1\",\n        \"Marbled Murrelet_marmur\",\n        \"Brant_brant\",\n        \"Canada Goose_cangoo\",\n        \"Cackling Goose_cacgoo1\",\n        \"Barnacle Goose_bargoo\",\n        \"Hawaiian Goose_hawgoo\",\n        \"Eurasian Eagle-Owl_eueowl1\",\n        \"Great Horned Owl_grhowl\",\n        \"Cattle Egret_categr\",\n        \"Trumpeter Finch_trufin2\",\n        \"Bufflehead_buffle\",\n        \"Common Goldeneye_comgol\",\n        \"Eurasian Thick-knee_eutkne1\",\n        \"Zone-tailed Hawk_zothaw\",\n        \"Short-tailed Hawk_shthaw\",\n        \"Common Buzzard_combuz1\",\n        \"Red-tailed Hawk_rethaw\",\n        \"Red-shouldered Hawk_reshaw\",\n        \"Gray Hawk_gryhaw2\",\n        \"Broad-winged Hawk_brwhaw\",\n        \"Swainson's Hawk_swahaw\",\n        \"Common Black Hawk_comblh1\",\n        \"Great Black Hawk_grbhaw1\",\n        \"Striated Heron_strher\",\n        \"Green Heron_grnher\",\n        \"Lark Bunting_larbun\",\n        \"Greater Short-toed Lark_gstlar1\",\n        \"Lapland Longspur_laplon\",\n        \"Chestnut-collared Longspur_chclon\",\n        \"Smith's Longspur_smilon\",\n        \"Sanderling_sander\",\n        \"Dunlin_dunlin\",\n        \"Baird's Sandpiper_baisan\",\n        \"Red Knot_redkno\",\n        \"Curlew Sandpiper_cursan\",\n        \"White-rumped Sandpiper_whrsan\",\n        \"Stilt Sandpiper_stisan\",\n        \"Purple Sandpiper_pursan\",\n        \"Western Sandpiper_wessan\",\n        \"Pectoral Sandpiper_pecsan\",\n        \"Little Stint_litsti\",\n        \"Least Sandpiper_leasan\",\n        \"Rock Sandpiper_rocsan\",\n        \"Semipalmated Sandpiper_semsan\",\n        \"Temminck's Stint_temsti\",\n        \"Surfbird_surfbi\",\n        \"Siberian Rubythroat_sibrub\",\n        \"California Quail_calqua\",\n        \"Elegant Quail_elequa\",\n        \"Gambel's Quail_gamqua\",\n        \"Scaled Quail_scaqua\",\n        \"Black-throated Magpie-Jay_btmjay\",\n        \"Cory's Shearwater_corshe\",\n        \"Anna's Hummingbird_annhum\",\n        \"Costa's Hummingbird_coshum\",\n        \"Pale-billed Woodpecker_pabwoo1\",\n        \"Northern Beardless-Tyrannulet_nobtyr\",\n        \"Cactus Wren_cacwre\",\n        \"Spotted Wren_spowre1\",\n        \"Spruce Grouse_sprgro\",\n        \"Coyote_t-11031961\",\n        \"Gray Wolf_t-11032766\",\n        \"Eurasian Nightjar_eurnig1\",\n        \"Gray Nightjar_grynig1\",\n        \"Red-necked Nightjar_rennig1\",\n        \"Crested Caracara_y00678\",\n        \"Canada Warbler_canwar\",\n        \"Wilson's Warbler_wlswar\",\n        \"Red Warbler_redwar1\",\n        \"Red-faced Warbler_refwar\",\n        \"Northern Cardinal_norcar\",\n        \"Pyrrhuloxia_pyrrhu\",\n        \"European Goldfinch_eurgol\",\n        \"Citril Finch_citfin1\",\n        \"Common Rosefinch_comros\",\n        \"Long-tailed Rosefinch_lotros1\",\n        \"Orange-billed Nightingale-Thrush_obnthr1\",\n        \"Veery_veery\",\n        \"Hermit Thrush_herthr\",\n        \"Gray-cheeked Thrush_gycthr\",\n        \"Swainson's Thrush_swathr\",\n        \"Canyon Wren_canwre\",\n        \"Red-rumped Swallow_rerswa1\",\n        \"Greater Sage-Grouse_saggro\",\n        \"Baird's Sparrow_baispa\",\n        \"Henslow's Sparrow_henspa\",\n        \"Pigeon Guillemot_piggui\",\n        \"Rufous-tailed Scrub-Robin_rutscr1\",\n        \"Brown Creeper_brncre\",\n        \"Short-toed Treecreeper_shttre1\",\n        \"Eurasian Treecreeper_eurtre1\",\n        \"Pied Kingfisher_piekin1\",\n        \"Cetti's Warbler_cetwar1\",\n        \"Chimney Swift_chiswi\",\n        \"Vaux's Swift_vauswi\",\n        \"Wrentit_wrenti\",\n        \"Kentish Plover_kenplo1\",\n        \"Little Ringed Plover_lirplo\",\n        \"Common Ringed Plover_corplo\",\n        \"Piping Plover_pipplo\",\n        \"Lesser Sand-Plover_lesplo\",\n        \"Eurasian Dotterel_eurdot\",\n        \"Snowy Plover_snoplo5\",\n        \"Semipalmated Plover_semplo\",\n        \"Killdeer_killde\",\n        \"Wilson's Plover_wilplo\",\n        \"Dupont's Lark_duplar1\",\n        \"Whiskered Tern_whiter2\",\n        \"White-winged Tern_whwter\",\n        \"Black Tern_blkter\",\n        \"European Greenfinch_eurgre1\",\n        \"Oriental Greenfinch_origre\",\n        \"Green Kingfisher_grnkin\",\n        \"Elegant Euphonia_eleeup1\",\n        \"Lark Sparrow_larspa\",\n        \"Lesser Nighthawk_lesnig\",\n        \"Common Nighthawk_comnig\",\n        \"Slender-billed Gull_slbgul1\",\n        \"Bonaparte's Gull_bongul\",\n        \"Black-headed Gull_bkhgul\",\n        \"Mottled Owl_motowl\",\n        \"White Stork_whisto1\",\n        \"White-throated Dipper_whtdip1\",\n        \"American Dipper_amedip\",\n        \"Brown Dipper_brodip1\",\n        \"Palestine Sunbird_palsun2\",\n        \"Short-toed Snake-Eagle_shteag1\",\n        \"Eurasian Marsh-Harrier_wemhar1\",\n        \"Northern Harrier_norhar2\",\n        \"Montagu's Harrier_monhar1\",\n        \"Zitting Cisticola_zitcis1\",\n        \"Marsh Wren_marwre\",\n        \"Sedge Wren_sedwre1\",\n        \"Great Spotted Cuckoo_grscuc1\",\n        \"Long-tailed Duck_lotduc\",\n        \"Hawfinch_hawfin\",\n        \"Evening Grosbeak_evegro\",\n        \"Yellow-billed Cuckoo_yebcuc\",\n        \"Black-billed Cuckoo_bkbcuc\",\n        \"Mangrove Cuckoo_mancuc\",\n        \"Northern Flicker_norfli\",\n        \"Gilded Flicker_gilfli\",\n        \"Northern Bobwhite_norbob\",\n        \"Rock Pigeon_rocpig\",\n        \"Stock Dove_stodov1\",\n        \"Common Wood-Pigeon_cowpig1\",\n        \"Inca Dove_incdov\",\n        \"Common Ground Dove_cogdov\",\n        \"Ruddy Ground Dove_rugdov\",\n        \"Short-winged Meadow Katydid_t-11876252\",\n        \"Slender Meadow Katydid_t-11877699\",\n        \"Olive-sided Flycatcher_olsfly\",\n        \"Greater Pewee_grepew\",\n        \"Western Wood-Pewee_wewpew\",\n        \"Eastern Wood-Pewee_eawpew\",\n        \"Indian Roller_indrol2\",\n        \"European Roller_eurrol1\",\n        \"Black Vulture_blkvul\",\n        \"Ruby-crowned Kinglet_ruckin\",\n        \"American Crow_amecro\",\n        \"Northwestern Crow_norcro\",\n        \"Common Raven_comrav\",\n        \"Hooded Crow_hoocro1\",\n        \"Carrion Crow_carcro1\",\n        \"Chihuahuan Raven_chirav\",\n        \"Rook_rook1\",\n        \"Large-billed Crow_labcro1\",\n        \"Eurasian Jackdaw_eurjac\",\n        \"Fish Crow_fiscro\",\n        \"Yellow Rail_yelrai\",\n        \"Common Quail_comqua1\",\n        \"Corn Crake_corcra\",\n        \"Groove-billed Ani_grbani\",\n        \"Common Cuckoo_comcuc\",\n        \"Sunda Cuckoo_suncuc2\",\n        \"Indian Cuckoo_indcuc1\",\n        \"Oriental Cuckoo_oricuc2\",\n        \"Lesser Cuckoo_lescuc1\",\n        \"Himalayan Cuckoo_himcuc1\",\n        \"Greater Whitethroat_grewhi1\",\n        \"Spectacled Warbler_spewar2\",\n        \"Lesser Whitethroat_leswhi4\",\n        \"Western Orphean Warbler_weowar2\",\n        \"Sardinian Warbler_sarwar1\",\n        \"Barred Warbler_barwar1\",\n        \"Dartford Warbler_darwar1\",\n        \"Eurasian Blue Tit_blutit\",\n        \"Azure Tit_azutit2\",\n        \"African Blue Tit_afbtit2\",\n        \"Blue Jay_blujay\",\n        \"Steller's Jay_stejay\",\n        \"Blue Bunting_blubun\",\n        \"Green Jay_grnjay\",\n        \"Iberian Magpie_azwmag3\",\n        \"Azure-winged Magpie_azwmag2\",\n        \"Blue-and-white Flycatcher_bawfly2\",\n        \"Black Swan_blkswa\",\n        \"Trumpeter Swan_truswa\",\n        \"Tundra Swan_tunswa\",\n        \"Whooper Swan_whoswa\",\n        \"Mute Swan_mutswa\",\n        \"Broad-billed Hummingbird_brbhum\",\n        \"Montezuma Quail_monqua\",\n        \"Columbian Trig_t-11839828\",\n        \"Common House-Martin_cohmar1\",\n        \"Sooty Grouse_soogro1\",\n        \"Dusky Grouse_dusgro\",\n        \"White-backed Woodpecker_whbwoo1\",\n        \"Great Spotted Woodpecker_grswoo\",\n        \"Syrian Woodpecker_syrwoo1\",\n        \"Middle Spotted Woodpecker_miswoo1\",\n        \"Black-bellied Whistling-Duck_bbwduc\",\n        \"Fulvous Whistling-Duck_fuwduc\",\n        \"Dog_dogdog\",\n        \"Bobolink_boboli\",\n        \"Iiwi_iiwi\",\n        \"White-headed Woodpecker_whhwoo\",\n        \"Arizona Woodpecker_ariwoo\",\n        \"Red-cockaded Woodpecker_recwoo\",\n        \"Lesser Spotted Woodpecker_leswoo1\",\n        \"Nuttall's Woodpecker_nutwoo\",\n        \"Downy Woodpecker_dowwoo\",\n        \"Ladder-backed Woodpecker_labwoo\",\n        \"Hairy Woodpecker_haiwoo\",\n        \"Lineated Woodpecker_linwoo1\",\n        \"Black Woodpecker_blawoo1\",\n        \"Pileated Woodpecker_pilwoo\",\n        \"Pine Barrens Treefrog_t-11128090\",\n        \"Canyon Treefrog_t-11052284\",\n        \"Bird-voiced Treefrog_t-11146158\",\n        \"Cope's Gray Treefrog_t-11052428\",\n        \"Green Treefrog_t-11043207\",\n        \"Pine Woods Treefrog_t-11149613\",\n        \"Barking Treefrog_t-11109790\",\n        \"Squirrel Treefrog_t-11130854\",\n        \"Gray Treefrog_t-11124704\",\n        \"Gray Catbird_grycat\",\n        \"Little Blue Heron_libher\",\n        \"Little Egret_litegr\",\n        \"Snowy Egret_snoegr\",\n        \"Tricolored Heron_triher\",\n        \"Swallow-tailed Kite_swtkit\",\n        \"Black-winged Kite_bkskit1\",\n        \"White-tailed Kite_whtkit\",\n        \"Greenhouse Frog_t-11149861\",\n        \"Yellow-breasted Bunting_yebbun\",\n        \"Corn Bunting_corbun1\",\n        \"Yellow-browed Bunting_yebbun1\",\n        \"Rock Bunting_rocbun1\",\n        \"Meadow Bunting_meabun1\",\n        \"Cirl Bunting_cirbun1\",\n        \"Yellowhammer_yellow2\",\n        \"Yellow-throated Bunting_yetbun1\",\n        \"Ortolan Bunting_ortbun1\",\n        \"Pine Bunting_pinbun\",\n        \"Black-headed Bunting_blhbun1\",\n        \"Little Bunting_litbun\",\n        \"Rustic Bunting_rusbun\",\n        \"Reed Bunting_reebun\",\n        \"Black-faced Bunting_blfbun1\",\n        \"Pine Flycatcher_pinfly1\",\n        \"Alder Flycatcher_aldfly\",\n        \"Pacific-slope Flycatcher_pasfly\",\n        \"Yellow-bellied Flycatcher_yebfly\",\n        \"Buff-breasted Flycatcher_bubfly\",\n        \"Hammond's Flycatcher_hamfly\",\n        \"Least Flycatcher_leafly\",\n        \"Dusky Flycatcher_dusfly\",\n        \"Cordilleran Flycatcher_corfly\",\n        \"Willow Flycatcher_wilfly\",\n        \"Acadian Flycatcher_acafly\",\n        \"Gray Flycatcher_gryfly\",\n        \"Engine_engine\",\n        \"Environmental_envrnm\",\n        \"Yellow-billed Grosbeak_yebgro1\",\n        \"Japanese Grosbeak_japgro1\",\n        \"Horned Lark_horlar\",\n        \"European Robin_eurrob1\",\n        \"Common Waxbill_comwax\",\n        \"White Ibis_whiibi\",\n        \"Rivoli's Hummingbird_maghum1\",\n        \"Carolina Ground Cricket_t-11849030\",\n        \"Confused Ground Cricket_t-11843278\",\n        \"Indian Silverbill_indsil\",\n        \"Rusty Blackbird_rusbla\",\n        \"Brewer's Blackbird_brebla\",\n        \"Scrub Euphonia_screup1\",\n        \"Eared Quetzal_earque\",\n        \"Dollarbird_dollar1\",\n        \"Merlin_merlin\",\n        \"Aplomado Falcon_aplfal\",\n        \"Lesser Kestrel_leskes1\",\n        \"Peregrine Falcon_perfal\",\n        \"American Kestrel_amekes\",\n        \"Eurasian Hobby_eurhob\",\n        \"Eurasian Kestrel_eurkes\",\n        \"Taiga Flycatcher_taifly1\",\n        \"Collared Flycatcher_colfly1\",\n        \"European Pied Flycatcher_eupfly1\",\n        \"Mugimaki Flycatcher_mugfly\",\n        \"Narcissus Flycatcher_narfly2\",\n        \"Red-breasted Flycatcher_rebfly\",\n        \"Yellow-rumped Flycatcher_korfly1\",\n        \"Fireworks_frwrks\",\n        \"Black Francolin_blkfra\",\n        \"Common Chaffinch_comcha\",\n        \"Brambling_brambl\",\n        \"American Coot_y00475\",\n        \"Eurasian Coot_eurcoo\",\n        \"Northern Fulmar_norful\",\n        \"Crested Lark_crelar2\",\n        \"Thekla's Lark_thelar1\",\n        \"Watercock_waterc1\",\n        \"Wilson's Snipe_wilsni1\",\n        \"Common Snipe_comsni\",\n        \"Great Snipe_gresni1\",\n        \"Eurasian Moorhen_commoo3\",\n        \"Common Gallinule_comgal1\",\n        \"Eurasian Jay_eurjay1\",\n        \"Eastern Narrow-mouthed Toad_t-11138802\",\n        \"Great Plains Narrow-mouthed Toad_t-11130090\",\n        \"Arctic Loon_arcloo\",\n        \"Common Loon_comloo\",\n        \"Red-throated Loon_retloo\",\n        \"Gull-billed Tern_gubter1\",\n        \"Greater Roadrunner_greroa\",\n        \"Kentucky Warbler_kenwar\",\n        \"Mourning Warbler_mouwar\",\n        \"MacGillivray's Warbler_macwar\",\n        \"Common Yellowthroat_comyel\",\n        \"White-tailed Hawk_whthaw\",\n        \"Collared Pratincole_colpra\",\n        \"Ferruginous Pygmy-Owl_fepowl\",\n        \"Northern Pygmy-Owl_nopowl\",\n        \"Eurasian Pygmy-Owl_eupowl1\",\n        \"Common Crane_comcra\",\n        \"Gryllus assimilis_t-11872975\",\n        \"Southern Wood Cricket_t-11847878\",\n        \"Fall Field Cricket_t-11844438\",\n        \"Southeastern Field Cricket_t-11847880\",\n        \"Gun_gungun\",\n        \"Pinyon Jay_pinjay\",\n        \"Yellow-throated Sparrow_chspet1\",\n        \"Eurasian Griffon_eurgri1\",\n        \"Black Oystercatcher_blkoys\",\n        \"Eurasian Oystercatcher_euroys1\",\n        \"American Oystercatcher_ameoys\",\n        \"Cassin's Finch_casfin\",\n        \"House Finch_houfin\",\n        \"Purple Finch_purfin\",\n        \"Ruddy Kingfisher_rudkin1\",\n        \"White-throated Kingfisher_whtkin2\",\n        \"White-tailed Eagle_whteag\",\n        \"Bald Eagle_baleag\",\n        \"Worm-eating Warbler_woewar1\",\n        \"Pallas's Grasshopper Warbler_pagwar1\",\n        \"Booted Eagle_booeag1\",\n        \"Black-winged Stilt_bkwsti\",\n        \"Black-necked Stilt_bknsti\",\n        \"Icterine Warbler_ictwar1\",\n        \"Melodious Warbler_melwar1\",\n        \"Barn Swallow_barswa\",\n        \"Manchurian Bush Warbler_manbuw1\",\n        \"Japanese Bush Warbler_jabwar\",\n        \"Human non-vocal_humnov\",\n        \"Human vocal_humvoc\",\n        \"Human whistle_humwhi\",\n        \"Leach's Storm-Petrel_lcspet\",\n        \"Little Gull_litgul\",\n        \"Caspian Tern_caster1\",\n        \"Pacific Chorus Frog_t-11127057\",\n        \"Wood Thrush_woothr\",\n        \"Brown-eared Bulbul_brebul1\",\n        \"Mediterranean Gull_medgul1\",\n        \"Yellow-breasted Chat_yebcha\",\n        \"Bullock's Oriole_bulori\",\n        \"Hooded Oriole_hooori\",\n        \"Baltimore Oriole_balori\",\n        \"Audubon's Oriole_audori\",\n        \"Scott's Oriole_scoori\",\n        \"Streak-backed Oriole_stbori\",\n        \"Orchard Oriole_orcori\",\n        \"Black-vented Oriole_bkvori\",\n        \"Mississippi Kite_miskit\",\n        \"Booted Warbler_boowar1\",\n        \"Western Olivaceous Warbler_weowar1\",\n        \"Eastern Olivaceous Warbler_eaowar1\",\n        \"Sykes's Warbler_sykwar2\",\n        \"Gulf Coast Toad_t-11145798\",\n        \"Least Bittern_leabit\",\n        \"Little Bittern_litbit1\",\n        \"Yellow Bittern_yelbit\",\n        \"Varied Thrush_varthr\",\n        \"Northern Jacana_norjac\",\n        \"Dark-eyed Junco_daejun\",\n        \"Yellow-eyed Junco_yeejun\",\n        \"Eurasian Wryneck_eurwry\",\n        \"Red-billed Firefinch_rebfir2\",\n        \"Willow Ptarmigan_wilpta\",\n        \"White-tailed Ptarmigan_whtpta1\",\n        \"Rock Ptarmigan_rocpta1\",\n        \"Blue-throated Mountain-gem_buthum\",\n        \"Northern Shrike_norshr4\",\n        \"Bull-headed Shrike_buhshr1\",\n        \"Red-backed Shrike_rebshr1\",\n        \"Brown Shrike_brnshr\",\n        \"Great Gray Shrike_norshr1\",\n        \"Loggerhead Shrike_logshr\",\n        \"Iberian Gray Shrike_ibgshr1\",\n        \"Long-tailed Shrike_lotshr1\",\n        \"Woodchat Shrike_wooshr1\",\n        \"Bay-backed Shrike_babshr1\",\n        \"Herring Gull_hergul\",\n        \"Caspian Gull_casgul2\",\n        \"California Gull_calgul\",\n        \"Common Gull_mewgul\",\n        \"Ring-billed Gull_ribgul\",\n        \"Lesser Black-backed Gull_lbbgul\",\n        \"Glaucous-winged Gull_glwgul\",\n        \"Heermann's Gull_heegul\",\n        \"Glaucous Gull_glagul\",\n        \"Great Black-backed Gull_gbbgul\",\n        \"Yellow-legged Gull_yelgul1\",\n        \"Western Gull_wesgul\",\n        \"Japanese Robin_japrob1\",\n        \"Siberian Blue Robin_sibrob\",\n        \"Rufous-tailed Robin_rutrob1\",\n        \"Black Rail_blkrai\",\n        \"Orange-crowned Warbler_orcwar\",\n        \"Colima Warbler_colwar\",\n        \"Lucy's Warbler_lucwar\",\n        \"Tennessee Warbler_tenwar\",\n        \"Nashville Warbler_naswar\",\n        \"Virginia's Warbler_virwar\",\n        \"Red-billed Leiothrix_reblei\",\n        \"White-striped Woodcreeper_whswoo1\",\n        \"White-tipped Dove_whtdov\",\n        \"Laughing Gull_laugul\",\n        \"Franklin's Gull_fragul\",\n        \"Black Rosy-Finch_bkrfin\",\n        \"Gray-crowned Rosy-Finch_gcrfin\",\n        \"Short-billed Dowitcher_shbdow\",\n        \"Long-billed Dowitcher_lobdow\",\n        \"Swainson's Warbler_swawar\",\n        \"Marbled Godwit_margod\",\n        \"Hudsonian Godwit_hudgod\",\n        \"Bar-tailed Godwit_batgod\",\n        \"Black-tailed Godwit_bktgod\",\n        \"Eurasian Linnet_eurlin1\",\n        \"Twite_twite1\",\n        \"American Bullfrog_t-11113588\",\n        \"Green Frog_t-11154219\",\n        \"Pickerel Frog_t-11148801\",\n        \"Wood Frog_t-11044823\",\n        \"Baikal Bush Warbler_spobuw1\",\n        \"River Warbler_eurwar2\",\n        \"Lanceolated Warbler_lanwar\",\n        \"Savi's Warbler_savwar1\",\n        \"Common Grasshopper-Warbler_cogwar1\",\n        \"Hooded Merganser_hoomer\",\n        \"Crested Tit_cretit2\",\n        \"Red Crossbill_redcro\",\n        \"White-winged Crossbill_whwcro\",\n        \"Parrot Crossbill_parcro2\",\n        \"Wood Lark_woolar1\",\n        \"Thrush Nightingale_thrnig1\",\n        \"Common Nightingale_comnig1\",\n        \"Bluethroat_blueth\",\n        \"Jack Snipe_jacsni\",\n        \"American Wigeon_amewig\",\n        \"Eurasian Wigeon_eurwig\",\n        \"Gadwall_gadwal\",\n        \"Belted Kingfisher_belkin1\",\n        \"Ringed Kingfisher_rinkin1\",\n        \"Eastern Screech-Owl_easowl1\",\n        \"Western Screech-Owl_wesowl1\",\n        \"Whiskered Screech-Owl_whsowl1\",\n        \"Golden-fronted Woodpecker_gofwoo\",\n        \"Red-bellied Woodpecker_rebwoo\",\n        \"Red-headed Woodpecker_rehwoo\",\n        \"Acorn Woodpecker_acowoo\",\n        \"Lewis's Woodpecker_lewwoo\",\n        \"Gila Woodpecker_gilwoo\",\n        \"Black Scoter_blksco2\",\n        \"Common Scoter_blksco1\",\n        \"Calandra Lark_callar1\",\n        \"Blue Mockingbird_blumoc\",\n        \"Wild Turkey_wiltur\",\n        \"Swamp Sparrow_swaspa\",\n        \"Lincoln's Sparrow_linspa\",\n        \"Song Sparrow_sonspa\",\n        \"Abert's Towhee_abetow\",\n        \"California Towhee_caltow\",\n        \"Canyon Towhee_cantow\",\n        \"Rusty-crowned Ground-Sparrow_rcgspa1\",\n        \"Common Merganser_commer\",\n        \"Red-breasted Merganser_rebmer\",\n        \"European Bee-eater_eubeat1\",\n        \"Green Bee-eater_grbeat1\",\n        \"Blue-cheeked Bee-eater_bcbeat1\",\n        \"Elf Owl_elfowl\",\n        \"Greater Angle-wing_t-11874264\",\n        \"Black Kite_blakit1\",\n        \"Red Kite_redkit1\",\n        \"Northern Mockingbird_normoc\",\n        \"Miogryllus saussurei_t-12024862\",\n        \"Tufted Flycatcher_tuffly\",\n        \"Black-and-white Warbler_bawwar\",\n        \"Bronzed Cowbird_brocow\",\n        \"Brown-headed Cowbird_bnhcow\",\n        \"Rufous-tailed Rock-Thrush_rtrthr1\",\n        \"Blue Rock-Thrush_burthr\",\n        \"White-winged Snowfinch_whwsno1\",\n        \"Northern Gannet_norgan\",\n        \"White Wagtail_whiwag\",\n        \"Gray Wagtail_grywag\",\n        \"Citrine Wagtail_citwag\",\n        \"Western Yellow Wagtail_eaywag1\",\n        \"Japanese Wagtail_japwag1\",\n        \"Eastern Yellow Wagtail_eaywag\",\n        \"Asian Brown Flycatcher_asbfly\",\n        \"Gray-streaked Flycatcher_gysfly1\",\n        \"Spotted Flycatcher_spofly1\",\n        \"Brown-backed Solitaire_brbsol1\",\n        \"Townsend's Solitaire_towsol\",\n        \"Wood Stork_woosto\",\n        \"Ash-throated Flycatcher_astfly\",\n        \"Great Crested Flycatcher_grcfly\",\n        \"Nutting's Flycatcher_nutfly\",\n        \"Dusky-capped Flycatcher_ducfly\",\n        \"Brown-crested Flycatcher_bncfly\",\n        \"Slate-throated Redstart_sltred\",\n        \"Painted Redstart_paired\",\n        \"Sulphur-bellied Flycatcher_subfly\",\n        \"Monk Parakeet_monpar\",\n        \"Social Flycatcher_socfly1\",\n        \"Double-crested Cormorant_doccor\",\n        \"Neotropic Cormorant_neocor\",\n        \"False Robust Conehead_t-11878179\",\n        \"Sword-bearing Conehead_t-11871906\",\n        \"Round-tipped Conehead_t-11879189\",\n        \"Robust Conehead_t-11875804\",\n        \"Cuban Ground Cricket_t-11852490\",\n        \"Northern Boobook_norboo1\",\n        \"Noise_nocall\",\n        \"Eurasian Nutcracker_eurnut1\",\n        \"Clark's Nutcracker_clanut\",\n        \"Long-billed Curlew_lobcur\",\n        \"Eurasian Curlew_eurcur\",\n        \"Whimbrel_whimbr\",\n        \"Bristle-thighed Curlew_brtcur\",\n        \"Yellow-crowned Night-Heron_ycnher\",\n        \"Black-crowned Night-Heron_bcnher\",\n        \"Common Pauraque_compau\",\n        \"White-tailed Deer_t-11075702\",\n        \"Fast-calling Tree Cricket_t-11847881\",\n        \"Davis's Tree Cricket_t-11849040\",\n        \"Snowy Tree Cricket_t-11852477\",\n        \"Blackhorned Tree Cricket_t-11843289\",\n        \"Narrow-winged Tree Cricket_t-11854772\",\n        \"Pine Tree Cricket_t-11850166\",\n        \"Four-spotted Tree Cricket_t-11853634\",\n        \"Isabelline Wheatear_isawhe1\",\n        \"Black Wheatear_blawhe1\",\n        \"Northern Wheatear_norwhe\",\n        \"Sooty Tern_sooter1\",\n        \"Connecticut Warbler_conwar\",\n        \"Agile Meadow Katydid_t-11872394\",\n        \"Stripe-faced Meadow Katydid_t-11875824\",\n        \"Handsome Meadow Katydid_t-11874857\",\n        \"Mountain Quail_mouqua\",\n        \"Sage Thrasher_sagthr\",\n        \"Crescent-chested Warbler_crcwar\",\n        \"Black-naped Oriole_blnori1\",\n        \"Eurasian Golden Oriole_eugori2\",\n        \"Striped Sparrow_strspa1\",\n        \"Jumping Bush Cricket_t-11850192\",\n        \"Rufous-bellied Chachalaca_rubcha1\",\n        \"Collared Scops-Owl_cosowl1\",\n        \"Eurasian Scops-Owl_eursco1\",\n        \"Japanese Scops-Owl_jasowl1\",\n        \"Oriental Scops-Owl_orsowl\",\n        \"Ruddy Duck_rudduc\",\n        \"Rose-throated Becard_rotbec\",\n        \"Osprey_osprey\",\n        \"Bearded Reedling_bearee1\",\n        \"Harris's Hawk_hrshaw\",\n        \"Louisiana Waterthrush_louwat\",\n        \"Northern Waterthrush_norwat\",\n        \"Great Tit_gretit1\",\n        \"Japanese Tit_gretit4\",\n        \"Russet Sparrow_russpa2\",\n        \"House Sparrow_houspa\",\n        \"Spanish Sparrow_spaspa1\",\n        \"Italian Sparrow_itaspa1\",\n        \"Eurasian Tree Sparrow_eutspa\",\n        \"Savannah Sparrow_savspa\",\n        \"Fox Sparrow_foxspa\",\n        \"Lazuli Bunting_lazbun\",\n        \"Blue Grosbeak_blugrb1\",\n        \"Painted Bunting_paibun\",\n        \"Indigo Bunting_indbun\",\n        \"Varied Bunting_varbun\",\n        \"Rosy Starling_rossta2\",\n        \"Band-tailed Pigeon_batpig1\",\n        \"Red-billed Pigeon_rebpig1\",\n        \"Gray Partridge_grypar\",\n        \"Ashy Minivet_ashmin1\",\n        \"Coal Tit_coatit2\",\n        \"Canada Jay_gryjay\",\n        \"Siberian Jay_sibjay1\",\n        \"European Honey-buzzard_euhbuz1\",\n        \"Oriental Honey-buzzard_orihob2\",\n        \"Cave Swallow_cavswa\",\n        \"Cliff Swallow_cliswa\",\n        \"Rock Sparrow_rocpet1\",\n        \"Bachman's Sparrow_bacspa\",\n        \"Botteri's Sparrow_botspa\",\n        \"Rufous-winged Sparrow_ruwspa\",\n        \"Cassin's Sparrow_casspa\",\n        \"Olive Warbler_oliwar\",\n        \"Phainopepla_phaino\",\n        \"Great Cormorant_grecor\",\n        \"Common Poorwill_compoo\",\n        \"Red Phalarope_redpha1\",\n        \"Red-necked Phalarope_renpha\",\n        \"Wilson's Phalarope_wilpha\",\n        \"Ring-necked Pheasant_rinphe\",\n        \"Yellow Grosbeak_yelgro\",\n        \"Rose-breasted Grosbeak_robgro\",\n        \"Black-headed Grosbeak_bkhgro\",\n        \"Happy Wren_hapwre1\",\n        \"Laysan Albatross_layalb\",\n        \"Greater Flamingo_grefla3\",\n        \"Daurian Redstart_daured1\",\n        \"Black Redstart_blared1\",\n        \"Common Redstart_comred2\",\n        \"Handsome Trig_t-11850174\",\n        \"Western Bonelli's Warbler_webwar1\",\n        \"Arctic Warbler_arcwar1\",\n        \"Sakhalin Leaf Warbler_salwar1\",\n        \"Common Chiffchaff_comchi1\",\n        \"Eastern Crowned Warbler_eacwar1\",\n        \"Kamchatka Leaf Warbler_arcwar2\",\n        \"Dusky Warbler_duswar\",\n        \"Hume's Warbler_humwar1\",\n        \"Iberian Chiffchaff_ibechi2\",\n        \"Yellow-browed Warbler_yebwar3\",\n        \"Green Warbler_grnwar1\",\n        \"Western Crowned Warbler_weclew1\",\n        \"Eastern Bonelli's Warbler_eabwar1\",\n        \"Two-barred Warbler_grewar2\",\n        \"Pallas's Leaf Warbler_palwar5\",\n        \"Radde's Warbler_radwar1\",\n        \"Wood Warbler_woowar\",\n        \"Mountain Chiffchaff_mouchi2\",\n        \"Pale-legged Leaf Warbler_pllwar1\",\n        \"Greenish Warbler_grewar3\",\n        \"Willow Warbler_wlwwar\",\n        \"Squirrel Cuckoo_squcuc1\",\n        \"Black-billed Magpie_bkbmag1\",\n        \"Eurasian Magpie_eurmag1\",\n        \"Oriental Magpie_orimag1\",\n        \"Black-backed Woodpecker_bkbwoo\",\n        \"American Three-toed Woodpecker_attwoo1\",\n        \"Eurasian Three-toed Woodpecker_ettwoo1\",\n        \"Gray-headed Woodpecker_gyfwoo1\",\n        \"Iberian Green Woodpecker_grnwoo3\",\n        \"Eurasian Green Woodpecker_eugwoo2\",\n        \"Pine Grosbeak_pingro\",\n        \"Green-tailed Towhee_gnttow\",\n        \"Eastern Towhee_eastow\",\n        \"Spotted Towhee_spotow\",\n        \"Flame-colored Tanager_flctan\",\n        \"Hepatic Tanager_heptan\",\n        \"Western Tanager_westan\",\n        \"Scarlet Tanager_scatan\",\n        \"Summer Tanager_sumtan\",\n        \"Great Kiskadee_grekis\",\n        \"Roseate Spoonbill_rosspo1\",\n        \"Snow Bunting_snobun\",\n        \"White-faced Ibis_whfibi\",\n        \"Glossy Ibis_gloibi\",\n        \"European Golden-Plover_eugplo\",\n        \"American Golden-Plover_amgplo\",\n        \"Pacific Golden-Plover_pagplo\",\n        \"Black-bellied Plover_bkbplo\",\n        \"Horned Grebe_horgre\",\n        \"Great Crested Grebe_grcgre1\",\n        \"Red-necked Grebe_rengre\",\n        \"Eared Grebe_eargre\",\n        \"Pied-billed Grebe_pibgre\",\n        \"Black-capped Chickadee_bkcchi\",\n        \"Carolina Chickadee_carchi\",\n        \"Mountain Chickadee_mouchi\",\n        \"Boreal Chickadee_borchi2\",\n        \"Willow Tit_wiltit1\",\n        \"Marsh Tit_martit2\",\n        \"Chestnut-backed Chickadee_chbchi\",\n        \"Mexican Chickadee_mexchi\",\n        \"Blue-gray Gnatcatcher_buggna\",\n        \"Black-tailed Gnatcatcher_bktgna\",\n        \"Black-capped Gnatcatcher_bkcgna\",\n        \"Vesper Sparrow_vesspa\",\n        \"Purple Gallinule_purgal2\",\n        \"Gray-headed Swamphen_purswa3\",\n        \"Western Swamphen_purswa1\",\n        \"Sora_sora\",\n        \"Spotted Crake_spocra1\",\n        \"Power tools_powtoo\",\n        \"Graceful Prinia_grapri1\",\n        \"Purple Martin_purmar\",\n        \"Prothonotary Warbler_prowar\",\n        \"Alpine Accentor_alpacc1\",\n        \"Dunnock_dunnoc1\",\n        \"Bushtit_bushti\",\n        \"Brimley's Chorus Frog_t-11106613\",\n        \"Spotted Chorus Frog_t-11131510\",\n        \"Spring Peeper_t-11049240\",\n        \"Upland Chorus Frog_t-11128923\",\n        \"Southern Chorus Frog_t-11039564\",\n        \"Little Grass Frog_t-11126440\",\n        \"Ornate Chorus Frog_t-11146926\",\n        \"Strecker's Chorus Frog_t-11157653\",\n        \"Striped Chorus Frog_t-11124302\",\n        \"Flammulated Owl_flaowl\",\n        \"Green Parakeet_grnpar\",\n        \"Alexandrine Parakeet_alepar2\",\n        \"Rose-ringed Parakeet_rorpar\",\n        \"Chestnut-bellied Sandgrouse_chbsan\",\n        \"Common True Katydid_t-11876111\",\n        \"Gray Silky-flycatcher_grsfly1\",\n        \"Eurasian Crag-Martin_eurcrm1\",\n        \"Manx Shearwater_manshe\",\n        \"Common Bulbul_combul2\",\n        \"White-eared Bulbul_whebul1\",\n        \"White-spectacled Bulbul_whsbul1\",\n        \"Vermilion Flycatcher_verfly\",\n        \"Yellow-billed Chough_yebcho1\",\n        \"Red-billed Chough_rebcho1\",\n        \"Eurasian Bullfinch_eurbul\",\n        \"Boat-tailed Grackle_botgra\",\n        \"Great-tailed Grackle_grtgra\",\n        \"Common Grackle_comgra\",\n        \"Water Rail_watrai1\",\n        \"Clapper Rail_clarai11\",\n        \"King Rail_kinrai4\",\n        \"Virginia Rail_virrai\",\n        \"Ridgway's Rail_ridrai1\",\n        \"American Avocet_ameavo\",\n        \"Pied Avocet_pieavo1\",\n        \"Common Firecrest_firecr1\",\n        \"Goldcrest_goldcr1\",\n        \"Golden-crowned Kinglet_gockin\",\n        \"Eurasian Penduline-Tit_euptit1\",\n        \"Thick-billed Longspur_mcclon\",\n        \"Bank Swallow_banswa\",\n        \"Black-legged Kittiwake_bklkit\",\n        \"Black Skimmer_blkski\",\n        \"Rock Wren_rocwre\",\n        \"Berylline Hummingbird_berhum\",\n        \"Siberian Stonechat_sibsto1\",\n        \"Whinchat_whinch1\",\n        \"European Stonechat_stonec4\",\n        \"Black Phoebe_blkpho\",\n        \"Eastern Phoebe_easpho\",\n        \"Say's Phoebe_saypho\",\n        \"Couch's Spadefoot_t-11148974\",\n        \"Eastern Gray Squirrel_t-11052840\",\n        \"American Woodcock_amewoo\",\n        \"Eurasian Woodcock_eurwoo\",\n        \"Curve-tailed Bush Katydid_t-11851338\",\n        \"Fork-tailed Bush Katydid_t-11850187\",\n        \"Texas Bush Katydid_t-11853621\",\n        \"Ovenbird_ovenbi1\",\n        \"Calliope Hummingbird_calhum\",\n        \"Broad-tailed Hummingbird_brthum\",\n        \"Rufous Hummingbird_rufhum\",\n        \"Allen's Hummingbird_allhum\",\n        \"European Serin_eurser1\",\n        \"Northern Parula_norpar\",\n        \"Black-throated Blue Warbler_btbwar\",\n        \"Bay-breasted Warbler_babwar\",\n        \"Cerulean Warbler_cerwar\",\n        \"Golden-cheeked Warbler_gchwar\",\n        \"Hooded Warbler_hoowar\",\n        \"Yellow-rumped Warbler_yerwar\",\n        \"Prairie Warbler_prawar\",\n        \"Yellow-throated Warbler_yetwar\",\n        \"Blackburnian Warbler_bkbwar\",\n        \"Grace's Warbler_grawar\",\n        \"Magnolia Warbler_magwar\",\n        \"Black-throated Gray Warbler_btywar\",\n        \"Hermit Warbler_herwar\",\n        \"Palm Warbler_palwar\",\n        \"Chestnut-sided Warbler_chswar\",\n        \"Yellow Warbler_yelwar\",\n        \"Pine Warbler_pinwar\",\n        \"Tropical Parula_tropar\",\n        \"American Redstart_amered\",\n        \"Blackpoll Warbler_bkpwar\",\n        \"Cape May Warbler_camwar\",\n        \"Townsend's Warbler_towwar\",\n        \"Black-throated Green Warbler_btnwar\",\n        \"Mountain Bluebird_moublu\",\n        \"Western Bluebird_wesblu\",\n        \"Eastern Bluebird_easblu\",\n        \"Vinous-throated Parrotbill_vitpar1\",\n        \"Siren_siren1\",\n        \"Red-breasted Nuthatch_rebnut\",\n        \"White-breasted Nuthatch_whbnut\",\n        \"Eurasian Nuthatch_eurnut2\",\n        \"Krüper's Nuthatch_krunut1\",\n        \"Western Rock Nuthatch_rocnut1\",\n        \"Brown-headed Nuthatch_bnhnut\",\n        \"Pygmy Nuthatch_pygnut\",\n        \"Varied Tit_vartit1\",\n        \"Common Eider_comeid\",\n        \"Northern Shoveler_norsho\",\n        \"Cinnamon Teal_cintea\",\n        \"Blue-winged Teal_buwtea\",\n        \"Garganey_gargan\",\n        \"Plains Spadefoot_t-11139213\",\n        \"Red-naped Sapsucker_rensap\",\n        \"Red-breasted Sapsucker_rebsap\",\n        \"Williamson's Sapsucker_wilsap\",\n        \"Yellow-bellied Sapsucker_yebsap\",\n        \"Lawrence's Goldfinch_lawgol\",\n        \"Black-headed Siskin_blhsis1\",\n        \"Pine Siskin_pinsis\",\n        \"Lesser Goldfinch_lesgol\",\n        \"Eurasian Siskin_eursis\",\n        \"American Goldfinch_amegfi\",\n        \"Dickcissel_dickci\",\n        \"Black-chinned Sparrow_bkcspa\",\n        \"Brewer's Sparrow_brespa\",\n        \"Clay-colored Sparrow_clcspa\",\n        \"Chipping Sparrow_chispa\",\n        \"Field Sparrow_fiespa\",\n        \"American Tree Sparrow_amtspa\",\n        \"White-cheeked Starling_whcsta1\",\n        \"Morelet's Seedeater_whcsee1\",\n        \"Cinnamon-rumped Seedeater_whcsee2\",\n        \"Northern Rough-winged Swallow_nrwswa\",\n        \"Long-tailed Jaeger_lotjae\",\n        \"Parasitic Jaeger_parjae\",\n        \"Roseate Tern_roster\",\n        \"Forster's Tern_forter\",\n        \"Common Tern_comter\",\n        \"Arctic Tern_arcter\",\n        \"Little Tern_litter1\",\n        \"Least Tern_leater1\",\n        \"Eurasian Collared-Dove_eucdov\",\n        \"Oriental Turtle-Dove_ortdov\",\n        \"Laughing Dove_laudov1\",\n        \"European Turtle-Dove_eutdov\",\n        \"Tawny Owl_tawowl1\",\n        \"Great Gray Owl_grgowl\",\n        \"Spotted Owl_spoowl\",\n        \"Ural Owl_uraowl1\",\n        \"Barred Owl_brdowl\",\n        \"Eastern Meadowlark_easmea\",\n        \"Western Meadowlark_wesmea\",\n        \"Spotless Starling_sposta1\",\n        \"European Starling_eursta\",\n        \"Northern Hawk Owl_nohowl\",\n        \"Eurasian Blackcap_blackc1\",\n        \"Garden Warbler_garwar1\",\n        \"Subalpine Warbler_subwar1\",\n        \"Least Grebe_leagre\",\n        \"Little Grebe_litgre1\",\n        \"Tree Swallow_treswa\",\n        \"Violet-green Swallow_vigswa\",\n        \"Ruddy Shelduck_rudshe\",\n        \"Common Shelduck_comshe\",\n        \"Eastern Chipmunk_t-11061759\",\n        \"Red Squirrel_t-11056904\",\n        \"Red-flanked Bluetail_refblu\",\n        \"Black-crowned Tchagra_bkctch1\",\n        \"Japanese Paradise-Flycatcher_japfly1\",\n        \"Western Capercaillie_wescap1\",\n        \"Hazel Grouse_hazgro1\",\n        \"Little Bustard_litbus1\",\n        \"Elegant Tern_eleter1\",\n        \"Royal Tern_royter1\",\n        \"Sandwich Tern_santer1\",\n        \"Bewick's Wren_bewwre\",\n        \"Sinaloa Wren_sinwre1\",\n        \"Carolina Wren_carwre\",\n        \"Bare-throated Tiger-Heron_btther1\",\n        \"Masked Tityra_mastit1\",\n        \"Bendire's Thrasher_benthr\",\n        \"Crissal Thrasher_crithr\",\n        \"Curve-billed Thrasher_cubthr\",\n        \"LeConte's Thrasher_lecthr\",\n        \"Long-billed Thrasher_lobthr\",\n        \"California Thrasher_calthr\",\n        \"Brown Thrasher_brnthr\",\n        \"Spotted Redshank_spored\",\n        \"Lesser Yellowlegs_lesyel\",\n        \"Wood Sandpiper_woosan\",\n        \"Wandering Tattler_wantat1\",\n        \"Greater Yellowlegs_greyel\",\n        \"Common Greenshank_comgre\",\n        \"Green Sandpiper_grnsan\",\n        \"Willet_willet1\",\n        \"Solitary Sandpiper_solsan\",\n        \"Marsh Sandpiper_marsan\",\n        \"Common Redshank_comred1\",\n        \"House Wren_houwre\",\n        \"Winter Wren_winwre3\",\n        \"Pacific Wren_pacwre1\",\n        \"Eurasian Wren_winwre4\",\n        \"Elegant Trogon_eletro\",\n        \"Mountain Trogon_moutro1\",\n        \"White-throated Thrush_whtrob1\",\n        \"Black-throated Thrush_datthr1\",\n        \"Japanese Thrush_japthr1\",\n        \"Brown-headed Thrush_brhthr1\",\n        \"Dusky Thrush_dusthr2\",\n        \"Clay-colored Thrush_clcrob\",\n        \"Gray-backed Thrush_gybthr1\",\n        \"Redwing_redwin\",\n        \"Eurasian Blackbird_eurbla\",\n        \"American Robin_amerob\",\n        \"Eyebrowed Thrush_eyethr\",\n        \"Pale Thrush_palthr1\",\n        \"Song Thrush_sonthr1\",\n        \"Fieldfare_fieldf\",\n        \"Rufous-backed Robin_rubrob\",\n        \"Ring Ouzel_rinouz1\",\n        \"Mistle Thrush_misthr1\",\n        \"Greater Prairie-Chicken_grpchi\",\n        \"Sharp-tailed Grouse_shtgro\",\n        \"Couch's Kingbird_coukin\",\n        \"Thick-billed Kingbird_thbkin\",\n        \"Scissor-tailed Flycatcher_sctfly\",\n        \"Tropical Kingbird_trokin\",\n        \"Eastern Kingbird_easkin\",\n        \"Western Kingbird_weskin\",\n        \"Cassin's Kingbird_caskin\",\n        \"Barn Owl_brnowl\",\n        \"Eurasian Hoopoe_hoopoe\",\n        \"Common Murre_commur\",\n        \"Asian Stubtail_asistu1\",\n        \"Red-wattled Lapwing_rewlap1\",\n        \"Spur-winged Lapwing_spwlap1\",\n        \"Northern Lapwing_norlap\",\n        \"Golden-winged Warbler_gowwar\",\n        \"Blue-winged Warbler_buwwar\",\n        \"Black-capped Vireo_bkcvir1\",\n        \"Bell's Vireo_belvir\",\n        \"Cassin's Vireo_casvir\",\n        \"Yellow-throated Vireo_yetvir\",\n        \"Yellow-green Vireo_yegvir\",\n        \"Warbling Vireo_warvir\",\n        \"White-eyed Vireo_whevir\",\n        \"Hutton's Vireo_hutvir\",\n        \"Golden Vireo_golvir1\",\n        \"Red-eyed Vireo_reevir1\",\n        \"Philadelphia Vireo_phivir\",\n        \"Plumbeous Vireo_plsvir\",\n        \"Blue-headed Vireo_buhvir\",\n        \"Gray Vireo_gryvir\",\n        \"Blue-black Grassquit_blbgra1\",\n        \"Yellow-headed Blackbird_yehbla\",\n        \"Terek Sandpiper_tersan\",\n        \"Ivory-billed Woodcreeper_ivbwoo1\",\n        \"Gray-capped Pygmy Woodpecker_gycwoo1\",\n        \"Ruddy-breasted Crake_rubcra1\",\n        \"Little Crake_litcra1\",\n        \"Baillon's Crake_baicra1\",\n        \"White-winged Dove_whwdov\",\n        \"Mourning Dove_moudov\",\n        \"White-throated Sparrow_whtspa\",\n        \"Golden-crowned Sparrow_gocspa\",\n        \"White-crowned Sparrow_whcspa\",\n        \"Harris's Sparrow_harspa\",\n        \"White's Thrush_scathr2\",\n        \"Nanday Parakeet_bkhpar\",\n      ],\n      urlStates:\n        \"https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}\",\n      attributionSummary:\n        \"Tiles &copy; Esri &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC\",\n    };\n  },\n  watch: {},\n  methods: {\n    async getWeek(yyyymmdd) {\n      var w = moment(yyyymmdd, \"YYYY-MM-DD\").week();\n      var eBirdWeek = Math.floor((48.0 * w) / 52.0);\n      if (eBirdWeek > 48) eBirdWeek = 48;\n      if (eBirdWeek == 0) eBirdWeek = 1;\n      // console.log(eBirdWeek);\n      return eBirdWeek;\n    },\n    replaceSpaces(itemWithSpaces) {\n      const itemWithUnderscores = itemWithSpaces.replace(/ /g, \"_\");\n      const itemWithApostrophe = itemWithUnderscores.replace(/'/g, \"\");\n      // // console.log(\"link\", itemWithUnderscores);\n      return itemWithApostrophe;\n    },\n    async loadGrid() {\n      var cnSpCode = this.species.split(\"_\");\n      var searchID = cnSpCode[1] + \"_\" + this.week;\n      // console.log(searchID);\n      const grid = await API.graphql({\n        query: getGridBySpCode,\n        variables: { id: searchID },\n      });\n      var gridBySpecies = grid.data.getGridBySpCode;\n      // console.log(gridBySpecies);\n      this.gridBySpecies = gridBySpecies;\n      this.latlon = [];\n      for (var i = 0; i < gridBySpecies.lat.length; i++) {\n        this.searchID = searchID; // update if successful\n        this.latlon.push({\n          lat: gridBySpecies.lat[i],\n          lon: gridBySpecies.lon[i],\n          id: 'latlon' + i\n        });\n      }\n      this.currentWeekNotInGrid = this.weekNotInGrid[this.week];\n      // console.log(this.currentWeekNotInGrid);\n      // if (changeSpecies) this.loadHitNotInGrid(cnSpCode[1]);\n    },\n    async loadHitNotInGrid(spCode) {\n      var serialList = [];\n      this.hitNotInGrid = [];\n      var nextToken = null;\n      var hitNotInGridList = [];\n      do {\n        const hitNotInGridObj = await API.graphql({\n          query: hitNotInGridBySpeciesByDate,\n          variables: {\n            spCode: spCode,\n            dt: { gt: \"2022-01-01\" },\n            nextToken: nextToken,\n          },\n        });\n        hitNotInGridList = hitNotInGridList.concat(\n          hitNotInGridObj.data.hitNotInGridBySpeciesByDate.items\n        );\n        nextToken = hitNotInGridObj.data.hitNotInGridBySpeciesByDate.nextToken;\n      } while (nextToken != null);\n\n      // console.log(hitNotInGridList);\n      // organize by serial\n      var counter = 0;\n      var hitNotInGridDict = {}; // lookup for serial position\n      this.weekNotInGrid = [];\n      // initialize array for objects\n      for (var i = 0; i < 49; i++) {\n        this.weekNotInGrid.push([]);\n      }\n      for (const item of hitNotInGridList) {\n        // console.log(item);\n        var w = moment(item[\"dt\"].substr(0, 10), \"YYYY-MM-DD\").week();\n        var eBirdWeek = Math.floor((48.0 * w) / 52.0);\n        if (eBirdWeek > 48) eBirdWeek = 48;\n        if (eBirdWeek == 0) eBirdWeek = 1;\n        this.weekNotInGrid[eBirdWeek].push([\n          { latitude: item[\"latitude\"], longitude: item[\"longitude\"] },\n        ]);\n        if (!serialList.includes(item.serial)) {\n          serialList.push(item.serial);\n          hitNotInGridDict[item.serial] = counter;\n          this.hitNotInGrid.push(item);\n          this.hitNotInGrid[counter].id = 'hng' + counter;\n          this.hitNotInGrid[counter].id2 = 'hngid2_' + counter;\n          this.hitNotInGrid[counter].wavList = [\n            {\n              filename: item[\"wav\"],\n              listname: item[\"dt\"] + ' ' + item[\"score\"],\n              score: item[\"score\"],\n              week: eBirdWeek,\n            },\n          ];\n          this.hitNotInGrid[counter].currentWav = {\n            filename: item[\"wav\"],\n            listname: item[\"dt\"] + ' ' + item[\"score\"],\n            score: item[\"score\"],\n            week: eBirdWeek,\n          };\n          counter = counter + 1;\n        } else {\n          this.hitNotInGrid[hitNotInGridDict[item.serial]][\"wavList\"].push({\n            filename: item[\"wav\"],\n            listname: item[\"dt\"] + ' ' + item[\"score\"],\n            score: item[\"score\"],\n            week: eBirdWeek,\n          });\n        }\n      }\n      // console.log(this.hitNotInGrid);\n      // console.log(this.weekNotInGrid);\n    },\n    spectrogram(index, audioFile) {\n      async function getFile(audioContext, filepath) {\n        // standardized-audio-context from npm\n        const nativeAudioContext = new AudioContext();\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          nativeAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        var context = new AudioContext();\n        const sample = await getFile(context, filePath);\n        return sample;\n      }\n\n      function linear2Decibel(value) {\n        var dB = 20 * Math.log10(value);\n        return dB;\n      }\n\n      //var c = document.getElementById(\"myCanvas\");\n      //this.canvas = c.getContext(\"2d\");\n\n      Storage.get(audioFile)\n        .then(\n          (result) => {\n            // console.log(\"Storage get\", result);\n\n            setupSample(result)\n              .then((sample) => {\n                // console.log(\"sample\", sample);\n                let signal = sample.getChannelData(0);\n                // console.log(\"raw\", signal);\n\n                // calculate spectrogram\n                // let ts = 0;\n\n                let overlap = 0.0;\n                let fftLength = this.fftLength;\n                let halfLength = this.halfLength; // chop off top\n\n                let showLength = halfLength - Math.round(0.2 * halfLength);\n                let zmidVal = -90;\n                if (audioFile[5] == \"2\") {\n                  showLength = halfLength - Math.round(0.48 * halfLength);\n                  zmidVal = -66;\n                }\n\n                let offset = Math.floor(fftLength * (1.0 - overlap));\n                // console.log(\"offset\", offset);\n                // let ctx = this.canvas;\n                let fft = new FFT(fftLength, 44100);\n\n                var spectrogramArray = [];\n                for (var x = 0; x < sample.length - fftLength; x += offset) {\n                  var chunk = signal.slice(x, x + fftLength);\n                  for (var i = 0; i < fftLength; i++) {\n                    chunk[i] = chunk[i] * hann[i];\n                  }\n                  fft.forward(chunk);\n                  chunk = fft.spectrum.slice(0, showLength);\n                  // console.log(\"fft\", chunk);\n                  var dBmag = chunk.map(linear2Decibel);\n                  // console.log(\"dB\", dBmag);\n                  spectrogramArray.push(...dBmag);\n                }\n\n                // console.log(\"spectrogramArray\", spectrogramArray);\n                // console.log('showLength', showLength);\n\n                // arrange spectrogram for Plotly\n                var spectrogramData = [];\n                for (i = 0; i < showLength; i++) {\n                  // grab one element every halfLength points\n                  var arr = spectrogramArray.filter(function (value, j) {\n                    return j % showLength == 0;\n                  });\n                  // console.log(arr);\n                  spectrogramData.push(arr);\n                  spectrogramArray.shift(); // remove first element\n                }\n                // console.log(\"spectrogramData\", spectrogramData);\n\n                this.hitNotInGrid[index].spectrogram = [\n                  {\n                    z: spectrogramData,\n                    type: \"heatmap\",\n                    showscale: false,\n                    zmid: zmidVal,\n                  },\n                ];\n                // console.log('spec done', this.hitNotInGrid[index]);\n                this.hitNotInGrid[index].id = this.hitNotInGrid[index].id + \"1\";\n              })\n              .catch((err) => {\n                console.log(err);\n                console.log(\"No audio\", audioFile);\n                // console.log(\"Delete index\", index);\n                this.snackbar = true;\n                return false;\n              });\n          },\n          (reason) => {\n            // rejection\n            console.log(\"Can't play \", reason);\n          }\n        )\n        .catch((err) => {\n          console.log(err);\n        });\n    },\n    async playFile(audioFile, spCode, cn, item, index, resetLabel) {\n      // console.log('playFile', resetLabel);\n      if (resetLabel === true) {\n        item.classLabel = null;\n      }\n      // console.log(\"playFile\", audioFile);\n\n      var audio = new Audio();\n      var context = new AudioContext();\n      var source = context.createMediaElementSource(audio);\n      var filter = context.createBiquadFilter();\n      source.connect(filter);\n      filter.connect(context.destination);\n      filter.type = \"highshelf\";\n      filter.frequency.value = 400;\n      filter.gain.value = 40;\n      if (cn.includes(\"Great Horned Owl\")) {\n        //console.log(\"GHO playback\");\n        filter.type = \"highshelf\";\n        filter.frequency.value = 100;\n        filter.gain.value = 40;\n      }\n      if (cn.includes(\"Barred Owl\")) {\n        //console.log(\"GHO playback\");\n        filter.type = \"highshelf\";\n        filter.frequency.value = 200;\n        filter.gain.value = 40;\n      }\n\n      audio.crossOrigin = \"anonymous\";\n      audio.autoplay = true;\n\n      if (context.state === \"suspended\") {\n        context.resume();\n      }\n\n      // check to see if s3 file exists...takes too long\n      await Storage.list(audioFile)\n        .then((result) => {\n          if (result.length > 0) {\n            Storage.get(audioFile)\n              .then((result) => {\n                filter.gain.value = 30;\n                audio.src = result;\n                audio.play();\n              })\n              .catch((err) => {\n                console.log(err);\n                console.log(\"No audio\", audioFile);\n                // console.log(\"Delete index\", index);\n                this.snackbar = true;\n                return false;\n              });\n          } else {\n            this.snackbar = true;\n          }\n        })\n        .catch((err) => console.log(err));\n\n      this.spectrogram(index, item.currentWav[\"filename\"]);\n      item.classLabel = null;\n    },\n  },\n};\n</script>\n  ","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Grid.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Grid.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Grid.vue?vue&type=template&id=5e3a2a9b\"\nimport script from \"./Grid.vue?vue&type=script&lang=js\"\nexport * from \"./Grid.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (this.user != '')?_c('v-container',{staticClass:\"my-0\"},[_c('v-card',{staticClass:\"mx-auto my-2\",attrs:{\"dark\":\"\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(_vm._s(_vm.t(\"Notifications\"))),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.getDevicesByOwner}},[_c('v-icon',[_vm._v(\"mdi-refresh\")])],1)],1),_c('v-row',_vm._l((_vm.devicesByOwner),function(item,index){return _c('v-col',{key:item.id,attrs:{\"cols\":\"12\"}},[_c('v-card',{staticClass:\"mx-2 my-8\",attrs:{\"color\":\"blue-grey\",\"dark\":\"\",\"max-width\":\"100%\",\"tile\":\"\"}},[_c('v-card-title',[_vm._v(_vm._s(item.name)+\" \")]),_c('v-row',_vm._l((_vm.notifications[index]),function(notification){return _c('v-col',{key:notification.id,attrs:{\"cols\":\"12\"}},[_c('v-card',{staticClass:\"mx-auto\",attrs:{\"width\":\"90%\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(_vm._s(_vm.t(notification.spCode, notification.cn)))]),_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(notification.notificationType == \"newBirdAlert\" ? _vm.t(\"New Bird Alerts\") : \"\")+\" \"+_vm._s(_vm.getEventText(notification.createdAt))+\" \")]),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-img',{staticClass:\"mx-2\",attrs:{\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                        notification.spCode +\n                        '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})],1),_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFile(notification.wav)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Play\"))+\" \")],1)],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFileEnhance(\n                              notification.wav,\n                              notification.spCode,\n                              notification.cn,\n                              notification.id\n                            )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Enhance\"))+\" \")],1)],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{attrs:{\"color\":\"grey darken-2\"},on:{\"click\":function($event){return _vm.deleteNotification(notification.id)}}},[_vm._v(_vm._s(_vm.t(\"Clear\")))])],1)],1)],1)],1),_c('v-card-text',[(item.lon < -30)?_c('v-btn',{attrs:{\"text\":\"\",\"target\":\"_blank\",\"color\":\"light-blue\"},on:{\"click\":function($event){_vm.navigateTo('https://www.allaboutbirds.org/guide/' +\n                          _vm.replaceSpaces(notification.cn))}}},[_vm._v(_vm._s(_vm.t(\"About\")))]):_vm._e(),_c('v-btn',{attrs:{\"text\":\"\",\"target\":\"_blank\",\"color\":\"light-blue\"},on:{\"click\":function($event){return _vm.navigateTo('https://ebird.org/species/' + notification.spCode)}}},[_vm._v(\"eBird\")])],1)],1)],1)}),1)],1)],1)}),1)],1)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-container v-if=\"this.user != ''\" class=\"my-0\">\n    <v-card dark class=\"mx-auto my-2\">\n      <v-card-title style=\"word-break: break-word\"\n        >{{ t(\"Notifications\") }}<v-spacer></v-spacer>\n        <v-btn icon @click=\"getDevicesByOwner\"\n          ><v-icon>mdi-refresh</v-icon></v-btn\n        >\n      </v-card-title>\n      <!-- <v-card-subtitle v-if=\"numNotifications == 0\"\n        >No Notifications</v-card-subtitle\n      >\n      <v-card-text v-if=\"numNotifications == 0\"\n        >Set up notifications on the Last 2 hours or All pages</v-card-text\n      > -->\n\n      <v-row>\n        <v-col v-for=\"(item, index) in devicesByOwner\" :key=\"item.id\" cols=\"12\">\n          <v-card\n            color=\"blue-grey\"\n            dark\n            class=\"mx-2 my-8\"\n            max-width=\"100%\"\n            tile\n          >\n            <v-card-title>{{ item.name }} </v-card-title>\n\n            <v-row>\n              <v-col\n                v-for=\"notification in notifications[index]\"\n                :key=\"notification.id\"\n                cols=\"12\"\n              >\n                <v-card width=\"90%\" class=\"mx-auto\">\n                  <v-card-title style=\"word-break: break-word\">{{\n                    t(notification.spCode, notification.cn)\n                  }}</v-card-title>\n                  <v-card-subtitle>\n                    {{\n                      notification.notificationType == \"newBirdAlert\"\n                        ? t(\"New Bird Alerts\")\n                        : \"\"\n                    }}\n\n                    {{ getEventText(notification.createdAt) }}\n                  </v-card-subtitle>\n                  <v-row\n                    ><v-col cols=\"6\"\n                      ><v-img\n                        class=\"mx-2\"\n                        :src=\"\n                          'https://haikubox-images.s3.amazonaws.com/' +\n                          notification.spCode +\n                          '.jpeg'\n                        \"\n                        onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                      ></v-img\n                    ></v-col>\n                    <v-col cols=\"6\">\n                      <v-row>\n                        <v-col cols=\"12\">\n                          <v-btn\n                            @click=\"\n                              playFile(notification.wav)\n                            \"\n                            color=\"light-blue darken-1\"\n                          >\n                            <v-icon left>mdi-play-circle</v-icon>\n                            <v-divider class=\"mx-1\" vertical></v-divider>\n                            {{ t(\"Play\") }}\n                          </v-btn>\n                          </v-col></v-row>\n                          <v-row>\n                        <v-col cols=\"12\">\n                          <v-btn\n                            @click=\"\n                              playFileEnhance(\n                                notification.wav,\n                                notification.spCode,\n                                notification.cn,\n                                notification.id\n                              )\n                            \"\n                            color=\"light-blue darken-1\"\n                          >\n                            <v-icon left>mdi-play-circle</v-icon>\n                            <v-divider class=\"mx-1\" vertical></v-divider>\n                            {{ t(\"Enhance\") }}\n                          </v-btn>\n                        </v-col>\n                      </v-row>\n                      <v-row>\n                        <v-col cols=\"12\">\n                          <v-btn\n                            @click=\"deleteNotification(notification.id)\"\n                            color=\"grey darken-2\"\n                            >{{t(\"Clear\")}}</v-btn\n                          >\n                        </v-col></v-row\n                      >\n                    </v-col>\n                  </v-row>\n                  <v-card-text>\n                    <v-btn\n                      text\n                      v-if=\"item.lon < -30\"\n                      @click=\"navigateTo('https://www.allaboutbirds.org/guide/' +\n                            replaceSpaces(notification.cn))\"\n                      target=\"_blank\"\n                      color=\"light-blue\"\n                      >{{ t(\"About\") }}</v-btn\n                    >\n                    <v-btn\n                      text\n                      @click=\"navigateTo('https://ebird.org/species/' + notification.spCode)\"\n                      target=\"_blank\"\n                      color=\"light-blue\"\n                      >eBird</v-btn\n                    >\n                  </v-card-text>\n                </v-card>\n              </v-col>\n            </v-row>\n          </v-card>\n        </v-col>\n      </v-row>\n    </v-card>\n  </v-container>\n</template>\n\n<script>\nimport { API, Storage } from \"aws-amplify\";\n// import { Auth } from \"aws-amplify\";\nimport {\n  notificationsBySerialByDate,\n  haikuboxByOwner,\n} from \"../graphql/queries\";\nimport { deleteNotifications } from \"../graphql/mutations\";\nvar moment = require(\"moment-timezone\");\nvar hann = [\n  0.0, 3.77965773e-5, 1.51180595e-4, 3.4013491e-4, 6.04630957e-4, 9.44628746e-4,\n  1.36007687e-3, 1.85091253e-3, 2.41706151e-3, 3.05843822e-3, 3.77494569e-3,\n  4.56647559e-3, 5.43290826e-3, 6.3741127e-3, 7.38994662e-3, 8.48025644e-3,\n  9.64487731e-3, 1.08836332e-2, 1.21963367e-2, 1.35827895e-2, 1.50427819e-2,\n  1.65760932e-2, 1.81824916e-2, 1.98617342e-2, 2.16135671e-2, 2.34377255e-2,\n  2.53339336e-2, 2.73019047e-2, 2.93413412e-2, 3.1451935e-2, 3.36333667e-2,\n  3.58853068e-2, 3.82074146e-2, 4.05993391e-2, 4.30607187e-2, 4.55911813e-2,\n  4.81903443e-2, 5.08578147e-2, 5.35931893e-2, 5.63960544e-2, 5.92659864e-2,\n  6.22025514e-2, 6.52053053e-2, 6.82737943e-2, 7.14075543e-2, 7.46061116e-2,\n  7.78689827e-2, 8.11956742e-2, 8.45856832e-2, 8.80384971e-2, 9.1553594e-2,\n  9.51304424e-2, 9.87685015e-2, 1.02467221e-1, 1.06226043e-1, 1.10044397e-1,\n  1.13921708e-1, 1.17857388e-1, 1.21850843e-1, 1.25901469e-1, 1.30008654e-1,\n  1.34171776e-1, 1.38390206e-1, 1.42663307e-1, 1.46990432e-1, 1.51370928e-1,\n  1.55804131e-1, 1.60289372e-1, 1.64825973e-1, 1.69413247e-1, 1.74050502e-1,\n  1.78737036e-1, 1.8347214e-1, 1.88255099e-1, 1.9308519e-1, 1.97961681e-1,\n  2.02883837e-1, 2.07850913e-1, 2.12862158e-1, 2.17916814e-1, 2.23014117e-1,\n  2.28153297e-1, 2.33333576e-1, 2.38554171e-1, 2.43814294e-1, 2.49113148e-1,\n  2.54449933e-1, 2.59823842e-1, 2.65234062e-1, 2.70679775e-1, 2.76160159e-1,\n  2.81674384e-1, 2.87221617e-1, 2.92801019e-1, 2.98411747e-1, 3.04052952e-1,\n  3.09723782e-1, 3.15423378e-1, 3.21150881e-1, 3.26905422e-1, 3.32686134e-1,\n  3.38492141e-1, 3.44322565e-1, 3.50176526e-1, 3.56053138e-1, 3.61951513e-1,\n  3.6787076e-1, 3.73809982e-1, 3.79768282e-1, 3.8574476e-1, 3.91738511e-1,\n  3.97748631e-1, 4.03774209e-1, 4.09814335e-1, 4.15868096e-1, 4.21934577e-1,\n  4.2801286e-1, 4.34102027e-1, 4.40201156e-1, 4.46309327e-1, 4.52425614e-1,\n  4.58549094e-1, 4.64678841e-1, 4.70813928e-1, 4.76953428e-1, 4.83096412e-1,\n  4.89241951e-1, 4.95389117e-1, 5.0153698e-1, 5.07684611e-1, 5.1383108e-1,\n  5.19975458e-1, 5.26116815e-1, 5.32254225e-1, 5.38386758e-1, 5.44513487e-1,\n  5.50633486e-1, 5.56745831e-1, 5.62849596e-1, 5.68943859e-1, 5.75027699e-1,\n  5.81100196e-1, 5.87160431e-1, 5.93207489e-1, 5.99240456e-1, 6.05258418e-1,\n  6.11260467e-1, 6.17245695e-1, 6.23213197e-1, 6.2916207e-1, 6.35091417e-1,\n  6.41000339e-1, 6.46887944e-1, 6.52753341e-1, 6.58595644e-1, 6.6441397e-1,\n  6.70207439e-1, 6.75975174e-1, 6.81716305e-1, 6.87429962e-1, 6.93115283e-1,\n  6.98771407e-1, 7.0439748e-1, 7.09992651e-1, 7.15556073e-1, 7.21086907e-1,\n  7.26584315e-1, 7.32047467e-1, 7.37475536e-1, 7.42867702e-1, 7.4822315e-1,\n  7.5354107e-1, 7.58820659e-1, 7.64061117e-1, 7.69261652e-1, 7.74421479e-1,\n  7.79539817e-1, 7.84615893e-1, 7.89648938e-1, 7.94638193e-1, 7.99582902e-1,\n  8.04482319e-1, 8.09335702e-1, 8.14142317e-1, 8.18901439e-1, 8.23612347e-1,\n  8.28274329e-1, 8.32886681e-1, 8.37448705e-1, 8.41959711e-1, 8.46419017e-1,\n  8.5082595e-1, 8.55179843e-1, 8.59480037e-1, 8.63725883e-1, 8.67916738e-1,\n  8.7205197e-1, 8.76130952e-1, 8.80153069e-1, 8.84117711e-1, 8.88024281e-1,\n  8.91872186e-1, 8.95660845e-1, 8.99389686e-1, 9.03058145e-1, 9.06665667e-1,\n  9.10211707e-1, 9.13695728e-1, 9.17117204e-1, 9.20475618e-1, 9.23770461e-1,\n  9.27001237e-1, 9.30167455e-1, 9.33268638e-1, 9.36304317e-1, 9.39274033e-1,\n  9.42177336e-1, 9.45013788e-1, 9.4778296e-1, 9.50484434e-1, 9.531178e-1,\n  9.55682662e-1, 9.5817863e-1, 9.60605328e-1, 9.62962389e-1, 9.65249456e-1,\n  9.67466184e-1, 9.69612237e-1, 9.71687291e-1, 9.73691033e-1, 9.75623159e-1,\n  9.77483377e-1, 9.79271407e-1, 9.80986977e-1, 9.82629829e-1, 9.84199713e-1,\n  9.85696393e-1, 9.87119643e-1, 9.88469246e-1, 9.89745e-1, 9.90946711e-1,\n  9.92074198e-1, 9.9312729e-1, 9.94105827e-1, 9.95009663e-1, 9.9583866e-1,\n  9.96592693e-1, 9.97271648e-1, 9.97875422e-1, 9.98403924e-1, 9.98857075e-1,\n  9.99234805e-1, 9.99537058e-1, 9.99763787e-1, 9.99914959e-1, 9.99990551e-1,\n  9.99990551e-1, 9.99914959e-1, 9.99763787e-1, 9.99537058e-1, 9.99234805e-1,\n  9.98857075e-1, 9.98403924e-1, 9.97875422e-1, 9.97271648e-1, 9.96592693e-1,\n  9.9583866e-1, 9.95009663e-1, 9.94105827e-1, 9.9312729e-1, 9.92074198e-1,\n  9.90946711e-1, 9.89745e-1, 9.88469246e-1, 9.87119643e-1, 9.85696393e-1,\n  9.84199713e-1, 9.82629829e-1, 9.80986977e-1, 9.79271407e-1, 9.77483377e-1,\n  9.75623159e-1, 9.73691033e-1, 9.71687291e-1, 9.69612237e-1, 9.67466184e-1,\n  9.65249456e-1, 9.62962389e-1, 9.60605328e-1, 9.5817863e-1, 9.55682662e-1,\n  9.531178e-1, 9.50484434e-1, 9.4778296e-1, 9.45013788e-1, 9.42177336e-1,\n  9.39274033e-1, 9.36304317e-1, 9.33268638e-1, 9.30167455e-1, 9.27001237e-1,\n  9.23770461e-1, 9.20475618e-1, 9.17117204e-1, 9.13695728e-1, 9.10211707e-1,\n  9.06665667e-1, 9.03058145e-1, 8.99389686e-1, 8.95660845e-1, 8.91872186e-1,\n  8.88024281e-1, 8.84117711e-1, 8.80153069e-1, 8.76130952e-1, 8.7205197e-1,\n  8.67916738e-1, 8.63725883e-1, 8.59480037e-1, 8.55179843e-1, 8.5082595e-1,\n  8.46419017e-1, 8.41959711e-1, 8.37448705e-1, 8.32886681e-1, 8.28274329e-1,\n  8.23612347e-1, 8.18901439e-1, 8.14142317e-1, 8.09335702e-1, 8.04482319e-1,\n  7.99582902e-1, 7.94638193e-1, 7.89648938e-1, 7.84615893e-1, 7.79539817e-1,\n  7.74421479e-1, 7.69261652e-1, 7.64061117e-1, 7.58820659e-1, 7.5354107e-1,\n  7.4822315e-1, 7.42867702e-1, 7.37475536e-1, 7.32047467e-1, 7.26584315e-1,\n  7.21086907e-1, 7.15556073e-1, 7.09992651e-1, 7.0439748e-1, 6.98771407e-1,\n  6.93115283e-1, 6.87429962e-1, 6.81716305e-1, 6.75975174e-1, 6.70207439e-1,\n  6.6441397e-1, 6.58595644e-1, 6.52753341e-1, 6.46887944e-1, 6.41000339e-1,\n  6.35091417e-1, 6.2916207e-1, 6.23213197e-1, 6.17245695e-1, 6.11260467e-1,\n  6.05258418e-1, 5.99240456e-1, 5.93207489e-1, 5.87160431e-1, 5.81100196e-1,\n  5.75027699e-1, 5.68943859e-1, 5.62849596e-1, 5.56745831e-1, 5.50633486e-1,\n  5.44513487e-1, 5.38386758e-1, 5.32254225e-1, 5.26116815e-1, 5.19975458e-1,\n  5.1383108e-1, 5.07684611e-1, 5.0153698e-1, 4.95389117e-1, 4.89241951e-1,\n  4.83096412e-1, 4.76953428e-1, 4.70813928e-1, 4.64678841e-1, 4.58549094e-1,\n  4.52425614e-1, 4.46309327e-1, 4.40201156e-1, 4.34102027e-1, 4.2801286e-1,\n  4.21934577e-1, 4.15868096e-1, 4.09814335e-1, 4.03774209e-1, 3.97748631e-1,\n  3.91738511e-1, 3.8574476e-1, 3.79768282e-1, 3.73809982e-1, 3.6787076e-1,\n  3.61951513e-1, 3.56053138e-1, 3.50176526e-1, 3.44322565e-1, 3.38492141e-1,\n  3.32686134e-1, 3.26905422e-1, 3.21150881e-1, 3.15423378e-1, 3.09723782e-1,\n  3.04052952e-1, 2.98411747e-1, 2.92801019e-1, 2.87221617e-1, 2.81674384e-1,\n  2.76160159e-1, 2.70679775e-1, 2.65234062e-1, 2.59823842e-1, 2.54449933e-1,\n  2.49113148e-1, 2.43814294e-1, 2.38554171e-1, 2.33333576e-1, 2.28153297e-1,\n  2.23014117e-1, 2.17916814e-1, 2.12862158e-1, 2.07850913e-1, 2.02883837e-1,\n  1.97961681e-1, 1.9308519e-1, 1.88255099e-1, 1.8347214e-1, 1.78737036e-1,\n  1.74050502e-1, 1.69413247e-1, 1.64825973e-1, 1.60289372e-1, 1.55804131e-1,\n  1.51370928e-1, 1.46990432e-1, 1.42663307e-1, 1.38390206e-1, 1.34171776e-1,\n  1.30008654e-1, 1.25901469e-1, 1.21850843e-1, 1.17857388e-1, 1.13921708e-1,\n  1.10044397e-1, 1.06226043e-1, 1.02467221e-1, 9.87685015e-2, 9.51304424e-2,\n  9.1553594e-2, 8.80384971e-2, 8.45856832e-2, 8.11956742e-2, 7.78689827e-2,\n  7.46061116e-2, 7.14075543e-2, 6.82737943e-2, 6.52053053e-2, 6.22025514e-2,\n  5.92659864e-2, 5.63960544e-2, 5.35931893e-2, 5.08578147e-2, 4.81903443e-2,\n  4.55911813e-2, 4.30607187e-2, 4.05993391e-2, 3.82074146e-2, 3.58853068e-2,\n  3.36333667e-2, 3.1451935e-2, 2.93413412e-2, 2.73019047e-2, 2.53339336e-2,\n  2.34377255e-2, 2.16135671e-2, 1.98617342e-2, 1.81824916e-2, 1.65760932e-2,\n  1.50427819e-2, 1.35827895e-2, 1.21963367e-2, 1.08836332e-2, 9.64487731e-3,\n  8.48025644e-3, 7.38994662e-3, 6.3741127e-3, 5.43290826e-3, 4.56647559e-3,\n  3.77494569e-3, 3.05843822e-3, 2.41706151e-3, 1.85091253e-3, 1.36007687e-3,\n  9.44628746e-4, 6.04630957e-4, 3.4013491e-4, 1.51180595e-4, 3.77965773e-5, 0.0,\n];\nvar fft = require(\"fft-js\").fft,\n  ifft = require(\"fft-js\").ifft;\n\n// https://github.com/chrisguttandin/standardized-audio-context\nimport { AudioContext, decodeAudioData } from \"standardized-audio-context\";\nimport { unmute } from \"../unmute.min.js\";\nlet globalAudioContext = null;\nlet globalGainNode = null;\nexport default {\n  name: \"Settings\",\n  props: [\"user\", \"email\"],\n  mounted() {\n    // load notifications with delay because sometimes don't have user\n    if (this.user == \"\") {\n      console.log(\"no user....wait\");\n      setTimeout(async () => {\n        await this.getDevicesByOwner();\n      }, 2000);\n    } else {\n      this.getDevicesByOwner();\n    }\n    // get language from local storage or browser\n    const haikuboxLanguage = localStorage.getItem(\"haikuboxLanguage\");\n    if (haikuboxLanguage != null) {\n      this.setLanguage(haikuboxLanguage);\n    } else {\n      let browserLanguage = navigator.language || navigator.languages[0];\n      let browserLang = browserLanguage.split(\"-\")[0];\n      // console.log(\"language\", browserLang);\n      this.setLanguage(browserLang);\n    }\n\n    if (navigator.userAgent.indexOf(\"gonative\") > -1) {\n      this.goNativeActive = true;\n    }\n  },\n  data() {\n    return {\n      numNotifications: 0,\n      devicesByOwner: {},\n      notifications: [],\n      currentTranslations: {},\n      selectedLanguage: \"en\",\n      playbackGain: 100,\n      goNativeActive: false,\n    };\n  },\n  methods: {\n    setLanguage(lang) {\n      // console.log(lang);\n      if (\n        (lang != \"da\") &\n        (lang != \"de\") &\n        (lang != \"en\") &\n        (lang != \"es\") &\n        (lang != \"fi\") &\n        (lang != \"fr\") &\n        (lang != \"it\") &\n        (lang != \"nl\") &\n        (lang != \"no\") &\n        (lang != \"pt\") &\n        (lang != \"sv\")\n      ) {\n        lang = \"en\";\n      }\n      this.loadTranslations(lang).then((translations) => {\n        this.currentTranslations = translations;\n      });\n      this.selectedLanguage = lang;\n    },\n    loadTranslations(lang) {\n      return fetch(`/I18N/${lang}.json`)\n        .then((response) => response.json())\n        .then((translations) => {\n          return translations;\n        });\n    },\n    t(key, cn) {\n      return this.currentTranslations[key] || cn;\n    },\n    navigateTo(url) {\n      if(this.goNativeActive){\n        window.location.href = 'gonative://window/open?url=' + url + '&mode=appbrowser';\n      }\n      else{\n        window.open(url, '_blank');\n      } \n    },\n    async getDevicesByOwner() {\n      if (this.user == \"\") {\n        console.log(\"user not recoginized\");\n        return;\n      }\n      const devicesByOwner = await API.graphql({\n        query: haikuboxByOwner,\n        variables: { owner: this.user },\n      });\n      this.devicesByOwner = devicesByOwner.data.haikuboxByOwner.items;\n      this.loadNotifications();\n      // console.log(\"devices by owner:\", this.devicesByOwner);\n    },\n    async loadNotifications() {\n      // console.log('loadNotifications');\n      let lastWeek = moment.utc().subtract(7, \"days\").format();\n      // console.log(lastWeek);\n      this.notifications = [];\n\n      for (var i = 0; i < this.devicesByOwner.length; i++) {\n        var notificationList = [];\n        var nextToken = null;\n        // console.log(this.devicesByOwner[i].serial);\n        do {\n          const filterArg = {\n            serial: this.devicesByOwner[i].serial,\n            createdAt: { gt: lastWeek },\n            nextToken: nextToken,\n          };\n          const notifications = await API.graphql({\n            query: notificationsBySerialByDate,\n            variables: filterArg,\n            limit: 24,\n          });\n          notificationList = notificationList.concat(\n            notifications.data.notificationsBySerialByDate.items\n          );\n          nextToken = notifications.data.notificationsBySerialByDate.nextToken;\n          // console.log('loadNotifications', notificationList, nextToken);\n        } while (nextToken != null);\n        notificationList.sort((a, b) => (a.createdAt < b.createdAt ? 1 : -1));\n\n        this.notifications.push(notificationList);\n      }\n      // this.getNotificationCount();\n\n      // console.log(\"notifications\", this.notifications);\n    },\n    // async getNotificationCount() {\n    //   // console.log('getNotificationCount');\n    //   const notifications = await API.graphql({\n    //     query: notificationsByOwner,\n    //     variables: { owner: this.user },\n    //   });\n    //   // console.log(notifications);\n    //   if (notifications.data.notificationsByOwner.items.length > 0) {\n    //     this.numNotifications =\n    //       notifications.data.notificationsByOwner.items.length;\n    //   } else {\n    //     this.numNotifications = 0;\n    //   }\n    // },\n    async deleteNotification(id) {\n      await API.graphql({\n        query: deleteNotifications,\n        variables: { input: { id: id } },\n      });\n      this.loadNotifications();\n    },\n    // async playFile(audioFile, cn) {\n    //   //console.log(\"playFile\", audioFile, cn);\n    //   var audio = new Audio();\n    //   var context = new AudioContext();\n    //   var source = context.createMediaElementSource(audio);\n    //   var filter = context.createBiquadFilter();\n    //   source.connect(filter);\n    //   filter.connect(context.destination);\n    //   filter.type = \"highshelf\";\n    //   filter.frequency.value = 400;\n    //   filter.gain.value = 40;\n    //   if (cn.includes(\"Great Horned Owl\")) {\n    //     //console.log(\"GHO playback\");\n    //     filter.type = \"lowshelf\";\n    //     filter.frequency.value = 450;\n    //     filter.gain.value = 30;\n    //   }\n    //   if (cn.includes(\"Barred Owl\")) {\n    //     //console.log(\"GHO playback\");\n    //     filter.type = \"lowshelf\";\n    //     filter.frequency.value = 600;\n    //     filter.gain.value = 30;\n    //   }\n\n    //   audio.crossOrigin = \"anonymous\";\n    //   audio.autoplay = true;\n\n    //   if (context.state === \"suspended\") {\n    //     context.resume();\n    //   }\n\n    //   // check to see if s3 file exists...takes too long\n    //   await Storage.list(audioFile)\n    //     .then((result) => {\n    //       if (result.length > 0) {\n    //         Storage.get(audioFile)\n    //           .then((result) => {\n    //             audio.src = result;\n    //             audio.play();\n    //           })\n    //           .catch((err) => {\n    //             console.log(err);\n    //             console.log(\"No audio\", audioFile);\n    //             // console.log(\"Delete index\", index);\n    //             this.snackbar = true;\n    //             return false;\n    //           });\n    //       } else {\n    //         this.snackbar = true;\n    //       }\n    //     })\n    //     .catch((err) => console.log(err));\n    // },\n    initAudioContext() {\n      if (globalAudioContext == null) {\n        const isIOS = /iPhone|iPod|iPad/.test(navigator.userAgent);\n        if (isIOS) {\n          globalAudioContext = new AudioContext();\n          // Note: audioContext, allowBackgroundPlayback, forceIOSBehavior\n          unmute(globalAudioContext, false, false);\n        } else {\n          globalAudioContext = new AudioContext();\n        }\n        globalGainNode = globalAudioContext.createGain();\n        globalGainNode.gain.value = this.playbackGain; // Set initial volume level\n        globalGainNode.connect(globalAudioContext.destination);\n      }\n    },\n    async playFile(audioFile) {\n      // console.log(\"playFile\", cn);\n      this.initAudioContext();\n\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      globalGainNode.gain.value = this.playbackGain;\n\n      var audioUrl = await Storage.get(audioFile);\n      const response = await fetch(audioUrl);\n      const arrayBuffer = await response.arrayBuffer();\n      const audioBuffer = await globalAudioContext.decodeAudioData(arrayBuffer);\n\n      const sampleSource = globalAudioContext.createBufferSource();\n      sampleSource.buffer = audioBuffer;\n      sampleSource.connect(globalGainNode);\n      sampleSource.start(0);\n    },\n    async playFileEnhance(audioFile, spCode, cn, id) {\n      this.initAudioContext();\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      // playing last file again\n      if (this.lastEnhancedId == id) {\n        // Create an AudioBufferSourceNode\n        const sourceNode = globalAudioContext.createBufferSource();\n        sourceNode.buffer = this.lastEnhancedAudio;\n        // Connect the source node to the AudioContext's destination (speakers)\n        sourceNode.connect(globalAudioContext.destination);\n        // Start playback\n        sourceNode.start();\n        return;\n      }\n\n      async function getFile(filepath) {\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          globalAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        // var context = new AudioContext();\n        const sample = await getFile(filePath);\n        return sample;\n      }\n\n      Storage.get(audioFile).then((result) => {\n        // console.log(\"Storage get\", result);\n        setupSample(result).then((sample) => {\n          let signal = sample.getChannelData(0);\n          // Define STFT parameters\n          const fftSize = 512;\n          const overlap = 256;\n          const hopSize = fftSize - overlap;\n          // Compute the STFT\n          const stft = [];\n          var meanMag = new Array(fftSize).fill(0);\n          var stdMag = new Array(fftSize).fill(0);\n          var numStrides = 0;\n          for (let i = 0; i < signal.length - fftSize; i += hopSize) {\n            const frame = signal.slice(i, i + fftSize);\n            // Hanning Window\n            for (var k = 0; k < fftSize; k++) {\n              frame[k] = frame[k] * hann[k];\n            }\n            var phasors = fft(frame);\n            // console.log(phasors);\n            // store running sum of magnitude to calculate mean\n            for (var j = 0; j < phasors.length; j++) {\n              meanMag[j] += Math.sqrt(\n                phasors[j][0] * phasors[j][0] + phasors[j][1] * phasors[j][1]\n              );\n            }\n            numStrides++;\n            stft.push([...phasors]);\n          }\n          // console.log('stft', stft);\n          for (let j = 0; j < fftSize; j++) {\n            meanMag[j] = meanMag[j] / numStrides;\n          }\n          // calculate SD\n          // loop through each time slice\n          for (let i = 0; i < stft.length; i++) {\n            // loop through each frequency\n            for (let j = 0; j < fftSize; j++) {\n              let magnitude =\n                Math.sqrt(\n                  stft[i][j][0] * stft[i][j][0] + stft[i][j][1] * stft[i][j][1]\n                ) - meanMag[j];\n              stdMag[j] += magnitude * magnitude;\n            }\n          }\n          for (j = 0; j < fftSize; j++) {\n            stdMag[j] = Math.sqrt(stdMag[j] / numStrides);\n          }\n          // gate values based on mean + 2*SD\n          async function gateSpectrogram() {\n            for (let i = 0; i < stft.length - 4; i++) {\n              // loop through each frequency\n              for (let j = 0; j < fftSize; j++) {\n                // get average magnitude over 5 time slices\n                let magnitude =\n                  (Math.sqrt(\n                    stft[i][j][0] * stft[i][j][0] +\n                      stft[i][j][1] * stft[i][j][1]\n                  ) +\n                    Math.sqrt(\n                      stft[i + 1][j][0] * stft[i + 1][j][0] +\n                        stft[i + 1][j][1] * stft[i + 1][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 2][j][0] * stft[i + 2][j][0] +\n                        stft[i + 2][j][1] * stft[i + 2][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 3][j][0] * stft[i + 3][j][0] +\n                        stft[i + 3][j][1] * stft[i + 3][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 4][j][0] * stft[i + 4][j][0] +\n                        stft[i + 4][j][1] * stft[i + 4][j][1]\n                    )) /\n                  5;\n                if (magnitude < meanMag[j] + 1.9 * stdMag[j]) {\n                  stft[i][j][0] = stft[i][j][0] * 0.2;\n                  stft[i][j][1] = stft[i][j][1] * 0.2;\n                  // also flip mirror\n                  stft[i][fftSize - 1 - j][0] =\n                    stft[i][fftSize - 1 - j][0] * 0.2;\n                  stft[i][fftSize - 1 - j][1] =\n                    stft[i][fftSize - 1 - j][1] * 0.2;\n                  // console.log(i, j);\n                }\n                if (j < 4) {\n                  stft[i][j][0] = stft[i][j][0] * 0.2;\n                  stft[i][j][1] = stft[i][j][1] * 0.2;\n                  // also flip mirror\n                  stft[i][fftSize - 1 - j][0] =\n                    stft[i][fftSize - 1 - j][0] * 0.2;\n                  stft[i][fftSize - 1 - j][1] =\n                    stft[i][fftSize - 1 - j][1] * 0.2;\n                  // console.log(i, j);\n                }\n              }\n            }\n            return stft;\n          }\n          // Compute the ISTFT\n          async function istft() {\n            let recoveredSignal = new Array(signal.length).fill(0);\n            let recoveredSignalComplex = new Array(fftSize);\n            for (let i = 0; i < stft.length - 4; i++) {\n              // console.log('before ifft', stft[i]);\n              recoveredSignalComplex = ifft(stft[i]);\n              // console.log('recoveredSignalComplex', recoveredSignalComplex);\n              for (let j = 0; j < fftSize; j++) {\n                if (i * overlap + j < signal.length) {\n                  // get real part\n                  recoveredSignal[i * hopSize + j] +=\n                    recoveredSignalComplex[j][0];\n                }\n              }\n            }\n            return recoveredSignal;\n          }\n          gateSpectrogram()\n            .then(() => {\n              //console.log(res);\n              return istft();\n            })\n            .then((recoveredSignal) => {\n              // console.log('recoveredSignal', recoveredSignal);\n              var maxSignal = 0;\n              for (let i = 0; i < recoveredSignal.length - 1000; i += 1000) {\n                // get stack issues so doing in chunks\n                var tempMax = Math.max(...recoveredSignal.slice(i, i + 1000));\n                if (tempMax > maxSignal) {\n                  maxSignal = tempMax;\n                }\n              }\n              maxSignal = 0.9 / maxSignal; // scale so can multiply to get max amp of 0.9\n              // console.log('maxValue', maxSignal);\n              // Create an AudioBuffer from the audio data\n              const audioBuffer = globalAudioContext.createBuffer(\n                1,\n                recoveredSignal.length,\n                sample.sampleRate\n              );\n              const channelData = audioBuffer.getChannelData(0);\n              for (let i = 0; i < recoveredSignal.length; i++) {\n                channelData[i] = recoveredSignal[i] * maxSignal;\n              }\n              // Create an AudioBufferSourceNode\n              const sourceNode = globalAudioContext.createBufferSource();\n              sourceNode.buffer = audioBuffer;\n              // Connect the source node to the AudioContext's destination (speakers)\n              sourceNode.connect(globalAudioContext.destination);\n              // Start playback\n              sourceNode.start();\n              this.lastEnhancedId = id;\n              this.lastEnhancedAudio = audioBuffer;\n            });\n        });\n      });\n    },\n    getEventText(dt) {\n      let momentText = moment(dt).locale(this.selectedLanguage).fromNow();\n      if (momentText == \"in a few seconds\") {\n        momentText = \"just now\";\n      }\n      if (momentText == \"a few seconds ago\") {\n        momentText = \"just now\";\n      }\n      return momentText;\n    },\n    replaceSpaces(itemWithSpaces) {\n      const itemWithUnderscores = itemWithSpaces.replace(/ /g, \"_\");\n      const itemWithApostrophe = itemWithUnderscores.replace(/'/g, \"\");\n      // // console.log(\"link\", itemWithUnderscores);\n      return itemWithApostrophe;\n    },\n  },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notifications.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notifications.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Notifications.vue?vue&type=template&id=45cb9372\"\nimport script from \"./Notifications.vue?vue&type=script&lang=js\"\nexport * from \"./Notifications.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (this.user != '')?_c('v-container',{staticClass:\"my-0\"},[_c('v-card',{staticClass:\"mx-auto my-2\",attrs:{\"dark\":\"\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(_vm._s(_vm.t(\"Favorites\"))),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.getDevicesByOwner}},[_c('v-icon',[_vm._v(\"mdi-refresh\")])],1)],1),_c('v-row',_vm._l((_vm.devicesByOwner),function(item,index){return _c('v-col',{key:item.id,attrs:{\"cols\":\"12\"}},[_c('v-card',{staticClass:\"mx-2 my-8\",attrs:{\"color\":\"blue-grey\",\"dark\":\"\",\"max-width\":\"100%\",\"tile\":\"\"}},[_c('v-card-title',[_vm._v(_vm._s(item.name)+\" \")]),_c('v-row',_vm._l((_vm.favorites[index]),function(favorite){return _c('v-col',{key:favorite.id,attrs:{\"xs\":\"12\",\"sm\":\"6\",\"md\":\"6\",\"lg\":\"4\",\"xl\":\"3\",\"cols\":\"12\"}},[_c('v-card',{staticClass:\"mx-auto\",attrs:{\"width\":\"90%\"}},[_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"}},[_vm._v(_vm._s(_vm.t(favorite.spCode, favorite.cn)))]),_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(favorite.sn)+\" \")]),_c('v-card-subtitle',{staticClass:\"py-0\"},[(favorite.window == 'image')?_c('div',[_c('img',{attrs:{\"width\":\"100%\",\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                        favorite.spCode +\n                        '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})]):_vm._e(),(favorite.window == 'spec')?_c('div',[_c('Plotly',{attrs:{\"data\":favorite.spectrogram,\"layout\":_vm.plotlyLayout,\"display-mode-bar\":false}}),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"1\"}},[_vm._v(\"0\")]),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}},[_vm._v(\"1\")]),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}},[_vm._v(\"2\")]),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{attrs:{\"cols\":\"1\"}}),_c('v-col',{staticClass:\"d-flex justify-end\",attrs:{\"cols\":\"1\"}},[_vm._v(\"3s\")])],1)],1):_vm._e()]),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-avatar',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Image')),expression:\"t('Image')\",modifiers:{\"bottom-start\":true}}],staticClass:\"mx-4\",attrs:{\"size\":\"24\"},on:{\"click\":function($event){return _vm.setWindowImage(favorite)}}},[_c('img',{attrs:{\"width\":_vm.$vuetify.breakpoint.xs ? '100%' : '320',\"src\":'https://haikubox-images.s3.amazonaws.com/' +\n                          favorite.spCode +\n                          '.jpeg',\"onerror\":\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"}})]),_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:(_vm.t('Spectrogram')),expression:\"t('Spectrogram')\",modifiers:{\"bottom-start\":true}}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.spectrogram(favorite)}}},[_c('v-icon',{attrs:{\"alt\":\"spectrogram\"}},[_vm._v(\"mdi-chart-bubble\")])],1),(_vm.goNativeActive == false)?_c('v-btn',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom-start\",value:('Download'),expression:\"'Download'\",modifiers:{\"bottom-start\":true}}],attrs:{\"fab\":\"\",\"small\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.download(favorite)}}},[_c('v-icon',{attrs:{\"alt\":\"download\"}},[_vm._v(\"mdi-download\")])],1):_vm._e()],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{staticClass:\"mx-2\",attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFile(favorite.wav, favorite)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Play\"))+\" \")],1),_c('v-btn',{attrs:{\"color\":\"light-blue darken-1\"},on:{\"click\":function($event){return _vm.playFileEnhance(\n                          favorite.wav,\n                          favorite.spCode,\n                          favorite.cn,\n                          favorite.id\n                        )}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-play-circle\")]),_c('v-divider',{staticClass:\"mx-1\",attrs:{\"vertical\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.t(\"Enhance\"))+\" \")],1)],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-select',{staticClass:\"mx-3 my-0 py-0\",attrs:{\"items\":favorite.wavList,\"item-text\":\"listname\",\"item-value\":\"filename\",\"return-object\":\"\",\"single-line\":\"\"},on:{\"change\":function($event){return _vm.playFile(favorite.currentWav['filename'], favorite)}},model:{value:(favorite.currentWav),callback:function ($$v) {_vm.$set(favorite, \"currentWav\", $$v)},expression:\"favorite.currentWav\"}})],1)],1),_c('v-card-text',[(item.lon < -30)?_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){_vm.navigateTo('https://www.allaboutbirds.org/guide/' +\n                          _vm.replaceSpaces(favorite.cn))}}},[_vm._v(_vm._s(_vm.t(\"About\")))]):_vm._e(),_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"light-blue\"},on:{\"click\":function($event){return _vm.navigateTo('https://ebird.org/species/' + favorite.spCode)}}},[_vm._v(\"eBird\")]),_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"grey darken-1\"},on:{\"click\":function($event){_vm.dialog = true}}},[_vm._v(_vm._s(_vm.t(\"Delete\")))]),(_vm.dialog)?_c('v-dialog',{attrs:{\"max-width\":\"290\"},on:{\"input\":_vm.handleDialogInput},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(_vm._s(_vm.t(\"AreYouSure\")))]),_c('v-card-text',[_vm._v(_vm._s(_vm.t(\"DeleteFavWarning\")))]),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"green darken-1\",\"text\":\"\"},on:{\"click\":function($event){return _vm.deleteFavorite(favorite.id)}}},[_vm._v(\"Yes\")]),_c('v-btn',{attrs:{\"color\":\"red darken-1\",\"text\":\"\"},on:{\"click\":function($event){return _vm.clickNo()}}},[_vm._v(\"No\")]),_c('v-spacer')],1)],1)],1):_vm._e()],1)],1)],1)}),1)],1)],1)}),1)],1),_c('v-bottom-navigation',{attrs:{\"hide-on-scroll\":\"\",\"fixed\":\"\",\"horizontal\":\"\",\"dark\":\"\",\"height\":\"60\"}},[_c('v-btn',{on:{\"click\":function($event){return _vm.$vuetify.goTo(0, {\n          duration: 300,\n          offset: 0,\n          easing: 'easeInOutCubic',\n        })}}},[_c('span',[_vm._v(\"To Top\")]),_c('v-icon',{attrs:{\"alt\":\"Go to top of page\"}},[_vm._v(\"mdi-pan-up\")])],1)],1)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-container v-if=\"this.user != ''\" class=\"my-0\">\n    <v-card dark class=\"mx-auto my-2\">\n      <v-card-title style=\"word-break: break-word\"\n        >{{ t(\"Favorites\") }}<v-spacer></v-spacer>\n        <v-btn icon @click=\"getDevicesByOwner\"\n          ><v-icon>mdi-refresh</v-icon></v-btn\n        >\n      </v-card-title>\n      <!-- <v-card-subtitle v-if=\"numFavorites == 0\"\n          >No Favorites</v-card-subtitle\n        >\n        <v-card-text v-if=\"numFavorites == 0\"\n          >Set up favorites on the Last 2 hours or All pages</v-card-text\n        > -->\n\n      <v-row>\n        <v-col v-for=\"(item, index) in devicesByOwner\" :key=\"item.id\" cols=\"12\">\n          <v-card\n            color=\"blue-grey\"\n            dark\n            class=\"mx-2 my-8\"\n            max-width=\"100%\"\n            tile\n          >\n            <v-card-title>{{ item.name }} </v-card-title>\n\n            <v-row>\n              <v-col\n                xs=\"12\"\n                sm=\"6\"\n                md=\"6\"\n                lg=\"4\"\n                xl=\"3\"\n                v-for=\"favorite in favorites[index]\"\n                :key=\"favorite.id\"\n                cols=\"12\"\n              >\n                <v-card width=\"90%\" class=\"mx-auto\">\n                  <v-card-title style=\"word-break: break-word\">{{\n                    t(favorite.spCode, favorite.cn)\n                  }}</v-card-title>\n                  <v-card-subtitle>\n                    {{ favorite.sn }}\n                  </v-card-subtitle>\n                  <v-card-subtitle class=\"py-0\">\n                    <!-- Bird Pic -->\n                    <div v-if=\"favorite.window == 'image'\">\n                      <img\n                        width=\"100%\"\n                        :src=\"\n                          'https://haikubox-images.s3.amazonaws.com/' +\n                          favorite.spCode +\n                          '.jpeg'\n                        \"\n                        onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                      />\n                    </div>\n\n                    <!-- Spectrogram -->\n                    <div v-if=\"favorite.window == 'spec'\">\n                      <Plotly\n                        :data=\"favorite.spectrogram\"\n                        :layout=\"plotlyLayout\"\n                        :display-mode-bar=\"false\"\n                      ></Plotly>\n                      <v-row no-gutters>\n                        <v-col cols=\"1\">0</v-col>\n                        <v-col cols=\"1\"></v-col>\n                        <v-col cols=\"1\"></v-col>\n                        <v-col cols=\"1\"></v-col>\n                        <v-col cols=\"1\">1</v-col>\n                        <v-col cols=\"1\"></v-col>\n                        <v-col cols=\"1\"></v-col>\n                        <v-col cols=\"1\"></v-col>\n                        <v-col cols=\"1\">2</v-col>\n                        <v-col cols=\"1\"></v-col>\n                        <v-col cols=\"1\"></v-col>\n                        <v-col cols=\"1\" class=\"d-flex justify-end\">3s</v-col>\n                      </v-row>\n                    </div></v-card-subtitle\n                  >\n                  <v-row\n                    ><v-col cols=\"6\">\n                      <v-avatar\n                        class=\"mx-4\"\n                        size=\"24\"\n                        v-tooltip.bottom-start=\"t('Image')\"\n                        @click=\"setWindowImage(favorite)\"\n                      >\n                        <img\n                          :width=\"$vuetify.breakpoint.xs ? '100%' : '320'\"\n                          :src=\"\n                            'https://haikubox-images.s3.amazonaws.com/' +\n                            favorite.spCode +\n                            '.jpeg'\n                          \"\n                          onerror=\"this.onerror=null;this.src='https://haikubox-images.s3.amazonaws.com/placeholder.jpeg';\"\n                        />\n                      </v-avatar>\n                      <v-btn\n                        icon\n                        v-tooltip.bottom-start=\"t('Spectrogram')\"\n                        @click=\"spectrogram(favorite)\"\n                      >\n                        <v-icon alt=\"spectrogram\">mdi-chart-bubble</v-icon>\n                      </v-btn>\n                      <v-btn\n                        v-if=\"goNativeActive == false\"\n                        fab\n                        small\n                        dark\n                        v-tooltip.bottom-start=\"'Download'\"\n                        @click=\"download(favorite)\"\n                        ><v-icon alt=\"download\">mdi-download</v-icon>\n                      </v-btn>\n                    </v-col></v-row\n                  >\n\n                  <v-row>\n                    <v-col cols=\"12\">\n                      <v-btn\n                        class=\"mx-2\"\n                        @click=\"playFile(favorite.wav, favorite)\"\n                        color=\"light-blue darken-1\"\n                      >\n                        <v-icon left>mdi-play-circle</v-icon>\n                        <v-divider class=\"mx-1\" vertical></v-divider>\n                        {{ t(\"Play\") }}\n                      </v-btn>\n\n                      <v-btn\n                        @click=\"\n                          playFileEnhance(\n                            favorite.wav,\n                            favorite.spCode,\n                            favorite.cn,\n                            favorite.id\n                          )\n                        \"\n                        color=\"light-blue darken-1\"\n                      >\n                        <v-icon left>mdi-play-circle</v-icon>\n                        <v-divider class=\"mx-1\" vertical></v-divider>\n                        {{ t(\"Enhance\") }}\n                      </v-btn>\n                    </v-col>\n                  </v-row>\n                  <v-row>\n                    <v-col cols=\"12\">\n                      <v-select\n                        class=\"mx-3 my-0 py-0\"\n                        :items=\"favorite.wavList\"\n                        v-model=\"favorite.currentWav\"\n                        item-text=\"listname\"\n                        item-value=\"filename\"\n                        @change=\"\n                          playFile(favorite.currentWav['filename'], favorite)\n                        \"\n                        return-object\n                        single-line\n                      ></v-select> </v-col\n                  ></v-row>\n                  <v-card-text>\n                    <v-btn\n                      v-if=\"item.lon < -30\"\n                      text\n                      @click=\"navigateTo('https://www.allaboutbirds.org/guide/' +\n                            replaceSpaces(favorite.cn))\"\n                      color=\"light-blue\"\n                      >{{ t(\"About\") }}</v-btn\n                    >\n                    <v-btn\n                      text\n                      @click=\"navigateTo('https://ebird.org/species/' + favorite.spCode)\"\n                      color=\"light-blue\"\n                      >eBird</v-btn\n                    >\n                    <v-btn text color=\"grey darken-1\" @click=\"dialog = true\">{{ t(\"Delete\") }}</v-btn>\n\n                    <v-dialog v-if=\"dialog\" v-model=\"dialog\" max-width=\"290\"  @input=\"handleDialogInput\">\n                      <v-card>\n                        <v-card-title class=\"headline\"\n                          >{{ t(\"AreYouSure\") }}</v-card-title\n                        >\n                        <v-card-text>{{t(\"DeleteFavWarning\")}}</v-card-text>\n                        <v-card-actions>\n                          <v-spacer></v-spacer>\n                          <v-btn\n                            color=\"green darken-1\"\n                            text\n                            @click=\"deleteFavorite(favorite.id)\"\n                            >Yes</v-btn\n                          >\n                          <v-btn color=\"red darken-1\" text @click=\"clickNo()\">No</v-btn>\n                          <v-spacer></v-spacer>\n                        </v-card-actions>\n                      </v-card>\n                    </v-dialog>\n                  </v-card-text>\n                </v-card>\n              </v-col>\n            </v-row>\n          </v-card>\n        </v-col>\n      </v-row>\n    </v-card>\n    <!-- Bottom Navigation -->\n    <v-bottom-navigation hide-on-scroll fixed horizontal dark height=\"60\">\n      <v-btn\n        @click=\"\n          $vuetify.goTo(0, {\n            duration: 300,\n            offset: 0,\n            easing: 'easeInOutCubic',\n          })\n        \"\n      >\n        <span>To Top</span>\n        <v-icon alt=\"Go to top of page\">mdi-pan-up</v-icon>\n      </v-btn>\n    </v-bottom-navigation>\n  </v-container>\n</template>\n  \n  <script>\nimport { API, Storage } from \"aws-amplify\";\n// import { Auth } from \"aws-amplify\";\nimport {\n  haikuboxByOwner,\n  favoriteHitBySerial,\n  getDeviceState,\n} from \"../graphql/queries\";\nimport { deleteFavoriteHit } from \"../graphql/mutations\";\nimport { Plotly } from \"vue-plotly\";\nvar moment = require(\"moment-timezone\");\nvar hann = [\n  0.0, 3.77965773e-5, 1.51180595e-4, 3.4013491e-4, 6.04630957e-4, 9.44628746e-4,\n  1.36007687e-3, 1.85091253e-3, 2.41706151e-3, 3.05843822e-3, 3.77494569e-3,\n  4.56647559e-3, 5.43290826e-3, 6.3741127e-3, 7.38994662e-3, 8.48025644e-3,\n  9.64487731e-3, 1.08836332e-2, 1.21963367e-2, 1.35827895e-2, 1.50427819e-2,\n  1.65760932e-2, 1.81824916e-2, 1.98617342e-2, 2.16135671e-2, 2.34377255e-2,\n  2.53339336e-2, 2.73019047e-2, 2.93413412e-2, 3.1451935e-2, 3.36333667e-2,\n  3.58853068e-2, 3.82074146e-2, 4.05993391e-2, 4.30607187e-2, 4.55911813e-2,\n  4.81903443e-2, 5.08578147e-2, 5.35931893e-2, 5.63960544e-2, 5.92659864e-2,\n  6.22025514e-2, 6.52053053e-2, 6.82737943e-2, 7.14075543e-2, 7.46061116e-2,\n  7.78689827e-2, 8.11956742e-2, 8.45856832e-2, 8.80384971e-2, 9.1553594e-2,\n  9.51304424e-2, 9.87685015e-2, 1.02467221e-1, 1.06226043e-1, 1.10044397e-1,\n  1.13921708e-1, 1.17857388e-1, 1.21850843e-1, 1.25901469e-1, 1.30008654e-1,\n  1.34171776e-1, 1.38390206e-1, 1.42663307e-1, 1.46990432e-1, 1.51370928e-1,\n  1.55804131e-1, 1.60289372e-1, 1.64825973e-1, 1.69413247e-1, 1.74050502e-1,\n  1.78737036e-1, 1.8347214e-1, 1.88255099e-1, 1.9308519e-1, 1.97961681e-1,\n  2.02883837e-1, 2.07850913e-1, 2.12862158e-1, 2.17916814e-1, 2.23014117e-1,\n  2.28153297e-1, 2.33333576e-1, 2.38554171e-1, 2.43814294e-1, 2.49113148e-1,\n  2.54449933e-1, 2.59823842e-1, 2.65234062e-1, 2.70679775e-1, 2.76160159e-1,\n  2.81674384e-1, 2.87221617e-1, 2.92801019e-1, 2.98411747e-1, 3.04052952e-1,\n  3.09723782e-1, 3.15423378e-1, 3.21150881e-1, 3.26905422e-1, 3.32686134e-1,\n  3.38492141e-1, 3.44322565e-1, 3.50176526e-1, 3.56053138e-1, 3.61951513e-1,\n  3.6787076e-1, 3.73809982e-1, 3.79768282e-1, 3.8574476e-1, 3.91738511e-1,\n  3.97748631e-1, 4.03774209e-1, 4.09814335e-1, 4.15868096e-1, 4.21934577e-1,\n  4.2801286e-1, 4.34102027e-1, 4.40201156e-1, 4.46309327e-1, 4.52425614e-1,\n  4.58549094e-1, 4.64678841e-1, 4.70813928e-1, 4.76953428e-1, 4.83096412e-1,\n  4.89241951e-1, 4.95389117e-1, 5.0153698e-1, 5.07684611e-1, 5.1383108e-1,\n  5.19975458e-1, 5.26116815e-1, 5.32254225e-1, 5.38386758e-1, 5.44513487e-1,\n  5.50633486e-1, 5.56745831e-1, 5.62849596e-1, 5.68943859e-1, 5.75027699e-1,\n  5.81100196e-1, 5.87160431e-1, 5.93207489e-1, 5.99240456e-1, 6.05258418e-1,\n  6.11260467e-1, 6.17245695e-1, 6.23213197e-1, 6.2916207e-1, 6.35091417e-1,\n  6.41000339e-1, 6.46887944e-1, 6.52753341e-1, 6.58595644e-1, 6.6441397e-1,\n  6.70207439e-1, 6.75975174e-1, 6.81716305e-1, 6.87429962e-1, 6.93115283e-1,\n  6.98771407e-1, 7.0439748e-1, 7.09992651e-1, 7.15556073e-1, 7.21086907e-1,\n  7.26584315e-1, 7.32047467e-1, 7.37475536e-1, 7.42867702e-1, 7.4822315e-1,\n  7.5354107e-1, 7.58820659e-1, 7.64061117e-1, 7.69261652e-1, 7.74421479e-1,\n  7.79539817e-1, 7.84615893e-1, 7.89648938e-1, 7.94638193e-1, 7.99582902e-1,\n  8.04482319e-1, 8.09335702e-1, 8.14142317e-1, 8.18901439e-1, 8.23612347e-1,\n  8.28274329e-1, 8.32886681e-1, 8.37448705e-1, 8.41959711e-1, 8.46419017e-1,\n  8.5082595e-1, 8.55179843e-1, 8.59480037e-1, 8.63725883e-1, 8.67916738e-1,\n  8.7205197e-1, 8.76130952e-1, 8.80153069e-1, 8.84117711e-1, 8.88024281e-1,\n  8.91872186e-1, 8.95660845e-1, 8.99389686e-1, 9.03058145e-1, 9.06665667e-1,\n  9.10211707e-1, 9.13695728e-1, 9.17117204e-1, 9.20475618e-1, 9.23770461e-1,\n  9.27001237e-1, 9.30167455e-1, 9.33268638e-1, 9.36304317e-1, 9.39274033e-1,\n  9.42177336e-1, 9.45013788e-1, 9.4778296e-1, 9.50484434e-1, 9.531178e-1,\n  9.55682662e-1, 9.5817863e-1, 9.60605328e-1, 9.62962389e-1, 9.65249456e-1,\n  9.67466184e-1, 9.69612237e-1, 9.71687291e-1, 9.73691033e-1, 9.75623159e-1,\n  9.77483377e-1, 9.79271407e-1, 9.80986977e-1, 9.82629829e-1, 9.84199713e-1,\n  9.85696393e-1, 9.87119643e-1, 9.88469246e-1, 9.89745e-1, 9.90946711e-1,\n  9.92074198e-1, 9.9312729e-1, 9.94105827e-1, 9.95009663e-1, 9.9583866e-1,\n  9.96592693e-1, 9.97271648e-1, 9.97875422e-1, 9.98403924e-1, 9.98857075e-1,\n  9.99234805e-1, 9.99537058e-1, 9.99763787e-1, 9.99914959e-1, 9.99990551e-1,\n  9.99990551e-1, 9.99914959e-1, 9.99763787e-1, 9.99537058e-1, 9.99234805e-1,\n  9.98857075e-1, 9.98403924e-1, 9.97875422e-1, 9.97271648e-1, 9.96592693e-1,\n  9.9583866e-1, 9.95009663e-1, 9.94105827e-1, 9.9312729e-1, 9.92074198e-1,\n  9.90946711e-1, 9.89745e-1, 9.88469246e-1, 9.87119643e-1, 9.85696393e-1,\n  9.84199713e-1, 9.82629829e-1, 9.80986977e-1, 9.79271407e-1, 9.77483377e-1,\n  9.75623159e-1, 9.73691033e-1, 9.71687291e-1, 9.69612237e-1, 9.67466184e-1,\n  9.65249456e-1, 9.62962389e-1, 9.60605328e-1, 9.5817863e-1, 9.55682662e-1,\n  9.531178e-1, 9.50484434e-1, 9.4778296e-1, 9.45013788e-1, 9.42177336e-1,\n  9.39274033e-1, 9.36304317e-1, 9.33268638e-1, 9.30167455e-1, 9.27001237e-1,\n  9.23770461e-1, 9.20475618e-1, 9.17117204e-1, 9.13695728e-1, 9.10211707e-1,\n  9.06665667e-1, 9.03058145e-1, 8.99389686e-1, 8.95660845e-1, 8.91872186e-1,\n  8.88024281e-1, 8.84117711e-1, 8.80153069e-1, 8.76130952e-1, 8.7205197e-1,\n  8.67916738e-1, 8.63725883e-1, 8.59480037e-1, 8.55179843e-1, 8.5082595e-1,\n  8.46419017e-1, 8.41959711e-1, 8.37448705e-1, 8.32886681e-1, 8.28274329e-1,\n  8.23612347e-1, 8.18901439e-1, 8.14142317e-1, 8.09335702e-1, 8.04482319e-1,\n  7.99582902e-1, 7.94638193e-1, 7.89648938e-1, 7.84615893e-1, 7.79539817e-1,\n  7.74421479e-1, 7.69261652e-1, 7.64061117e-1, 7.58820659e-1, 7.5354107e-1,\n  7.4822315e-1, 7.42867702e-1, 7.37475536e-1, 7.32047467e-1, 7.26584315e-1,\n  7.21086907e-1, 7.15556073e-1, 7.09992651e-1, 7.0439748e-1, 6.98771407e-1,\n  6.93115283e-1, 6.87429962e-1, 6.81716305e-1, 6.75975174e-1, 6.70207439e-1,\n  6.6441397e-1, 6.58595644e-1, 6.52753341e-1, 6.46887944e-1, 6.41000339e-1,\n  6.35091417e-1, 6.2916207e-1, 6.23213197e-1, 6.17245695e-1, 6.11260467e-1,\n  6.05258418e-1, 5.99240456e-1, 5.93207489e-1, 5.87160431e-1, 5.81100196e-1,\n  5.75027699e-1, 5.68943859e-1, 5.62849596e-1, 5.56745831e-1, 5.50633486e-1,\n  5.44513487e-1, 5.38386758e-1, 5.32254225e-1, 5.26116815e-1, 5.19975458e-1,\n  5.1383108e-1, 5.07684611e-1, 5.0153698e-1, 4.95389117e-1, 4.89241951e-1,\n  4.83096412e-1, 4.76953428e-1, 4.70813928e-1, 4.64678841e-1, 4.58549094e-1,\n  4.52425614e-1, 4.46309327e-1, 4.40201156e-1, 4.34102027e-1, 4.2801286e-1,\n  4.21934577e-1, 4.15868096e-1, 4.09814335e-1, 4.03774209e-1, 3.97748631e-1,\n  3.91738511e-1, 3.8574476e-1, 3.79768282e-1, 3.73809982e-1, 3.6787076e-1,\n  3.61951513e-1, 3.56053138e-1, 3.50176526e-1, 3.44322565e-1, 3.38492141e-1,\n  3.32686134e-1, 3.26905422e-1, 3.21150881e-1, 3.15423378e-1, 3.09723782e-1,\n  3.04052952e-1, 2.98411747e-1, 2.92801019e-1, 2.87221617e-1, 2.81674384e-1,\n  2.76160159e-1, 2.70679775e-1, 2.65234062e-1, 2.59823842e-1, 2.54449933e-1,\n  2.49113148e-1, 2.43814294e-1, 2.38554171e-1, 2.33333576e-1, 2.28153297e-1,\n  2.23014117e-1, 2.17916814e-1, 2.12862158e-1, 2.07850913e-1, 2.02883837e-1,\n  1.97961681e-1, 1.9308519e-1, 1.88255099e-1, 1.8347214e-1, 1.78737036e-1,\n  1.74050502e-1, 1.69413247e-1, 1.64825973e-1, 1.60289372e-1, 1.55804131e-1,\n  1.51370928e-1, 1.46990432e-1, 1.42663307e-1, 1.38390206e-1, 1.34171776e-1,\n  1.30008654e-1, 1.25901469e-1, 1.21850843e-1, 1.17857388e-1, 1.13921708e-1,\n  1.10044397e-1, 1.06226043e-1, 1.02467221e-1, 9.87685015e-2, 9.51304424e-2,\n  9.1553594e-2, 8.80384971e-2, 8.45856832e-2, 8.11956742e-2, 7.78689827e-2,\n  7.46061116e-2, 7.14075543e-2, 6.82737943e-2, 6.52053053e-2, 6.22025514e-2,\n  5.92659864e-2, 5.63960544e-2, 5.35931893e-2, 5.08578147e-2, 4.81903443e-2,\n  4.55911813e-2, 4.30607187e-2, 4.05993391e-2, 3.82074146e-2, 3.58853068e-2,\n  3.36333667e-2, 3.1451935e-2, 2.93413412e-2, 2.73019047e-2, 2.53339336e-2,\n  2.34377255e-2, 2.16135671e-2, 1.98617342e-2, 1.81824916e-2, 1.65760932e-2,\n  1.50427819e-2, 1.35827895e-2, 1.21963367e-2, 1.08836332e-2, 9.64487731e-3,\n  8.48025644e-3, 7.38994662e-3, 6.3741127e-3, 5.43290826e-3, 4.56647559e-3,\n  3.77494569e-3, 3.05843822e-3, 2.41706151e-3, 1.85091253e-3, 1.36007687e-3,\n  9.44628746e-4, 6.04630957e-4, 3.4013491e-4, 1.51180595e-4, 3.77965773e-5, 0.0,\n];\nvar fft = require(\"fft-js\").fft,\n  ifft = require(\"fft-js\").ifft;\nimport { FFT } from \"dsp.js\";\n\n// https://github.com/chrisguttandin/standardized-audio-context\nimport { AudioContext, decodeAudioData } from \"standardized-audio-context\";\nimport { unmute } from \"../unmute.min.js\";\nlet globalAudioContext = null;\nlet globalGainNode = null;\n\nexport default {\n  name: \"Settings\",\n  props: [\"user\", \"email\"],\n  mounted() {\n    // load favorites with delay because sometimes don't have user\n    if (this.user == \"\") {\n      console.log(\"no user....wait\");\n      setTimeout(async () => {\n        await this.getDevicesByOwner();\n      }, 2000);\n    } else {\n      this.getDevicesByOwner();\n    }\n    // get language from local storage or browser\n    const haikuboxLanguage = localStorage.getItem(\"haikuboxLanguage\");\n    if (haikuboxLanguage != null) {\n      this.setLanguage(haikuboxLanguage);\n    } else {\n      let browserLanguage = navigator.language || navigator.languages[0];\n      let browserLang = browserLanguage.split(\"-\")[0];\n      // console.log(\"language\", browserLang);\n      this.setLanguage(browserLang);\n    }\n    if (navigator.userAgent.indexOf(\"gonative\") > -1) {\n      this.goNativeActive = true;\n    }\n  },\n  components: {\n    Plotly,\n  },\n  data() {\n    return {\n      dialog: false,\n      numFavorites: 0,\n      devicesByOwner: {},\n      favorites: [],\n      currentTranslations: {},\n      selectedLanguage: \"en\",\n      playbackGain: 100,\n      goNativeActive: false,\n      fftLength: 512,\n      halfLength: 256,\n      plotlyLayout: {\n        xaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        yaxis: {\n          autorange: true,\n          showgrid: false,\n          zeroline: false,\n          showline: false,\n          autotick: true,\n          ticks: \"\",\n          showticklabels: false,\n          fixedrange: true,\n        },\n        margin: {\n          l: 0,\n          r: 0,\n          b: 0,\n          t: 0,\n          pad: 4,\n        },\n        height: 240,\n        hovermode: false,\n      },\n    };\n  },\n  methods: {\n    setLanguage(lang) {\n      // console.log(lang);\n      if (\n        (lang != \"da\") &\n        (lang != \"de\") &\n        (lang != \"en\") &\n        (lang != \"es\") &\n        (lang != \"fi\") &\n        (lang != \"fr\") &\n        (lang != \"it\") &\n        (lang != \"nl\") &\n        (lang != \"no\") &\n        (lang != \"pt\") &\n        (lang != \"sv\")\n      ) {\n        lang = \"en\";\n      }\n      this.loadTranslations(lang).then((translations) => {\n        this.currentTranslations = translations;\n      });\n      this.selectedLanguage = lang;\n    },\n    loadTranslations(lang) {\n      return fetch(`/I18N/${lang}.json`)\n        .then((response) => response.json())\n        .then((translations) => {\n          return translations;\n        });\n    },\n    t(key, cn) {\n      return this.currentTranslations[key] || cn;\n    },\n    navigateTo(url) {\n      if(this.goNativeActive){\n        window.location.href = 'gonative://window/open?url=' + url + '&mode=appbrowser';\n      }\n      else{\n        window.open(url, '_blank');\n      } \n    },\n    async getDevicesByOwner() {\n      if (this.user == \"\") {\n        console.log(\"user not recoginized\");\n        return;\n      }\n      const devicesByOwner = await API.graphql({\n        query: haikuboxByOwner,\n        variables: { owner: this.user },\n      });\n      this.devicesByOwner = devicesByOwner.data.haikuboxByOwner.items;\n      this.loadFavorites();\n      // console.log(\"devices by owner:\", this.devicesByOwner);\n    },\n    async loadFavorites() {\n      // console.log(\"loadFavorites\", this.devicesByOwner.length);\n      this.favorites = [];\n\n      for (var i = 0; i < this.devicesByOwner.length; i++) {\n        var favoriteList = [];\n        var speciesFavorite = [];\n        var uniqueHits = [];\n        var speciesDict = {};\n        var counter = 0;\n        var nextToken = null;\n        // console.log(this.devicesByOwner[i].serial);\n        // get timezone from deviceState\n        const deviceState = await API.graphql({\n          query: getDeviceState,\n          variables: { id: this.devicesByOwner[i].serial },\n        });\n        var currentTimezone = deviceState.data.getDeviceState.timezone;\n\n        // load favorites from owner serial\n        do {\n          const filterArg = {\n            serial: this.devicesByOwner[i].serial,\n            nextToken: nextToken,\n          };\n          const favorites = await API.graphql({\n            query: favoriteHitBySerial,\n            variables: filterArg,\n            limit: 24,\n          });\n          favoriteList = favoriteList.concat(\n            favorites.data.favoriteHitBySerial.items\n          );\n          nextToken = favorites.data.favoriteHitBySerial.nextToken;\n          // console.log('loadFavorites', favoriteList, nextToken);\n        } while (nextToken != null);\n        favoriteList.sort((a, b) => (a.createdAt < b.createdAt ? 1 : -1));\n        // console.log(favoriteList);\n        // Group by species\n        for (var j = 0; j < favoriteList.length; j++) {\n          var listname = moment\n            .utc(favoriteList[j].dt)\n            .tz(currentTimezone)\n            .locale(this.selectedLanguage)\n            .format(\"MMM D Y h:mm:ss a\");\n          if (!speciesFavorite.includes(favoriteList[j].cn)) {\n            speciesFavorite.push(favoriteList[j].cn);\n            speciesDict[favoriteList[j].cn] = counter;\n            uniqueHits.push(favoriteList[j]);\n            uniqueHits[counter].window = \"image\";\n            uniqueHits[counter].wavList = [\n              {\n                filename: favoriteList[j][\"wav\"],\n                listname: listname,\n              },\n            ];\n            uniqueHits[counter].currentWav = {\n              filename: favoriteList[j][\"wav\"],\n              listname: listname,\n            };\n            counter = counter + 1;\n          } else {\n            uniqueHits[speciesDict[favoriteList[j].cn]][\"wavList\"].push({\n              filename: favoriteList[j][\"wav\"],\n              listname: listname,\n            });\n          }\n        }\n        // console.log(\"uniqueHits\", uniqueHits);\n        this.favorites.push(uniqueHits);\n      }\n\n      // console.log(\"favorites\", this.favorites);\n    },\n    async deleteFavorite(id) {\n      // console.log('deleteFavorite', id);\n      await API.graphql({\n        query: deleteFavoriteHit,\n        variables: { input: { id: id } },\n      });\n      this.loadFavorites();\n      this.dialog = false;\n    },\n    handleDialogInput(value) {\n      this.dialog = value;\n    },\n    clickNo(){\n        this.dialog = false;\n    },\n    initAudioContext() {\n      if (globalAudioContext == null) {\n        const isIOS = /iPhone|iPod|iPad/.test(navigator.userAgent);\n        if (isIOS) {\n          globalAudioContext = new AudioContext();\n          // Note: audioContext, allowBackgroundPlayback, forceIOSBehavior\n          unmute(globalAudioContext, false, false);\n        } else {\n          globalAudioContext = new AudioContext();\n        }\n        globalGainNode = globalAudioContext.createGain();\n        globalGainNode.gain.value = this.playbackGain; // Set initial volume level\n        globalGainNode.connect(globalAudioContext.destination);\n      }\n    },\n    async playFile(audioFile, fav) {\n      // console.log(\"playFile\", cn);\n      this.initAudioContext();\n\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      globalGainNode.gain.value = this.playbackGain;\n\n      var audioUrl = await Storage.get(audioFile, { level: \"private\" });\n      const response = await fetch(audioUrl);\n      const arrayBuffer = await response.arrayBuffer();\n      const audioBuffer = await globalAudioContext.decodeAudioData(arrayBuffer);\n\n      const sampleSource = globalAudioContext.createBufferSource();\n      sampleSource.buffer = audioBuffer;\n      sampleSource.connect(globalGainNode);\n      sampleSource.start(0);\n      if (fav.window == \"spec\") {\n        this.spectrogram(fav);\n      }\n    },\n    async playFileEnhance(audioFile, spCode, cn, id) {\n      this.initAudioContext();\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      // playing last file again\n      if (this.lastEnhancedId == id) {\n        // Create an AudioBufferSourceNode\n        const sourceNode = globalAudioContext.createBufferSource();\n        sourceNode.buffer = this.lastEnhancedAudio;\n        // Connect the source node to the AudioContext's destination (speakers)\n        sourceNode.connect(globalAudioContext.destination);\n        // Start playback\n        sourceNode.start();\n        return;\n      }\n\n      async function getFile(filepath) {\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          globalAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        // var context = new AudioContext();\n        const sample = await getFile(filePath);\n        return sample;\n      }\n\n      Storage.get(audioFile, { level: \"private\" }).then((result) => {\n        // console.log(\"Storage get\", result);\n        setupSample(result).then((sample) => {\n          let signal = sample.getChannelData(0);\n          // Define STFT parameters\n          const fftSize = 512;\n          const overlap = 256;\n          const hopSize = fftSize - overlap;\n          // Compute the STFT\n          const stft = [];\n          var meanMag = new Array(fftSize).fill(0);\n          var stdMag = new Array(fftSize).fill(0);\n          var numStrides = 0;\n          for (let i = 0; i < signal.length - fftSize; i += hopSize) {\n            const frame = signal.slice(i, i + fftSize);\n            // Hanning Window\n            for (var k = 0; k < fftSize; k++) {\n              frame[k] = frame[k] * hann[k];\n            }\n            var phasors = fft(frame);\n            // console.log(phasors);\n            // store running sum of magnitude to calculate mean\n            for (var j = 0; j < phasors.length; j++) {\n              meanMag[j] += Math.sqrt(\n                phasors[j][0] * phasors[j][0] + phasors[j][1] * phasors[j][1]\n              );\n            }\n            numStrides++;\n            stft.push([...phasors]);\n          }\n          // console.log('stft', stft);\n          for (let j = 0; j < fftSize; j++) {\n            meanMag[j] = meanMag[j] / numStrides;\n          }\n          // calculate SD\n          // loop through each time slice\n          for (let i = 0; i < stft.length; i++) {\n            // loop through each frequency\n            for (let j = 0; j < fftSize; j++) {\n              let magnitude =\n                Math.sqrt(\n                  stft[i][j][0] * stft[i][j][0] + stft[i][j][1] * stft[i][j][1]\n                ) - meanMag[j];\n              stdMag[j] += magnitude * magnitude;\n            }\n          }\n          for (j = 0; j < fftSize; j++) {\n            stdMag[j] = Math.sqrt(stdMag[j] / numStrides);\n          }\n          // gate values based on mean + 2*SD\n          async function gateSpectrogram() {\n            for (let i = 0; i < stft.length - 4; i++) {\n              // loop through each frequency\n              for (let j = 0; j < fftSize; j++) {\n                // get average magnitude over 5 time slices\n                let magnitude =\n                  (Math.sqrt(\n                    stft[i][j][0] * stft[i][j][0] +\n                      stft[i][j][1] * stft[i][j][1]\n                  ) +\n                    Math.sqrt(\n                      stft[i + 1][j][0] * stft[i + 1][j][0] +\n                        stft[i + 1][j][1] * stft[i + 1][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 2][j][0] * stft[i + 2][j][0] +\n                        stft[i + 2][j][1] * stft[i + 2][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 3][j][0] * stft[i + 3][j][0] +\n                        stft[i + 3][j][1] * stft[i + 3][j][1]\n                    ) +\n                    Math.sqrt(\n                      stft[i + 4][j][0] * stft[i + 4][j][0] +\n                        stft[i + 4][j][1] * stft[i + 4][j][1]\n                    )) /\n                  5;\n                if (magnitude < meanMag[j] + 1.9 * stdMag[j]) {\n                  stft[i][j][0] = stft[i][j][0] * 0.2;\n                  stft[i][j][1] = stft[i][j][1] * 0.2;\n                  // also flip mirror\n                  stft[i][fftSize - 1 - j][0] =\n                    stft[i][fftSize - 1 - j][0] * 0.2;\n                  stft[i][fftSize - 1 - j][1] =\n                    stft[i][fftSize - 1 - j][1] * 0.2;\n                  // console.log(i, j);\n                }\n                if (j < 4) {\n                  stft[i][j][0] = stft[i][j][0] * 0.2;\n                  stft[i][j][1] = stft[i][j][1] * 0.2;\n                  // also flip mirror\n                  stft[i][fftSize - 1 - j][0] =\n                    stft[i][fftSize - 1 - j][0] * 0.2;\n                  stft[i][fftSize - 1 - j][1] =\n                    stft[i][fftSize - 1 - j][1] * 0.2;\n                  // console.log(i, j);\n                }\n              }\n            }\n            return stft;\n          }\n          // Compute the ISTFT\n          async function istft() {\n            let recoveredSignal = new Array(signal.length).fill(0);\n            let recoveredSignalComplex = new Array(fftSize);\n            for (let i = 0; i < stft.length - 4; i++) {\n              // console.log('before ifft', stft[i]);\n              recoveredSignalComplex = ifft(stft[i]);\n              // console.log('recoveredSignalComplex', recoveredSignalComplex);\n              for (let j = 0; j < fftSize; j++) {\n                if (i * overlap + j < signal.length) {\n                  // get real part\n                  recoveredSignal[i * hopSize + j] +=\n                    recoveredSignalComplex[j][0];\n                }\n              }\n            }\n            return recoveredSignal;\n          }\n          gateSpectrogram()\n            .then(() => {\n              //console.log(res);\n              return istft();\n            })\n            .then((recoveredSignal) => {\n              // console.log('recoveredSignal', recoveredSignal);\n              var maxSignal = 0;\n              for (let i = 0; i < recoveredSignal.length - 1000; i += 1000) {\n                // get stack issues so doing in chunks\n                var tempMax = Math.max(...recoveredSignal.slice(i, i + 1000));\n                if (tempMax > maxSignal) {\n                  maxSignal = tempMax;\n                }\n              }\n              maxSignal = 0.9 / maxSignal; // scale so can multiply to get max amp of 0.9\n              // console.log('maxValue', maxSignal);\n              // Create an AudioBuffer from the audio data\n              const audioBuffer = globalAudioContext.createBuffer(\n                1,\n                recoveredSignal.length,\n                sample.sampleRate\n              );\n              const channelData = audioBuffer.getChannelData(0);\n              for (let i = 0; i < recoveredSignal.length; i++) {\n                channelData[i] = recoveredSignal[i] * maxSignal;\n              }\n              // Create an AudioBufferSourceNode\n              const sourceNode = globalAudioContext.createBufferSource();\n              sourceNode.buffer = audioBuffer;\n              // Connect the source node to the AudioContext's destination (speakers)\n              sourceNode.connect(globalAudioContext.destination);\n              // Start playback\n              sourceNode.start();\n              this.lastEnhancedId = id;\n              this.lastEnhancedAudio = audioBuffer;\n            });\n        });\n      });\n    },\n    getEventText(dt) {\n      let momentText = moment(dt).locale(this.selectedLanguage).fromNow();\n      if (momentText == \"in a few seconds\") {\n        momentText = \"just now\";\n      }\n      if (momentText == \"a few seconds ago\") {\n        momentText = \"just now\";\n      }\n      return momentText;\n    },\n    spectrogram(fav) {\n      //  console.log(\"Spectrogram\", fav, audioFile);\n      this.initAudioContext();\n\n      async function getFile(filepath) {\n        const response = await fetch(filepath);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer = await decodeAudioData(\n          globalAudioContext,\n          arrayBuffer\n        );\n        return audioBuffer;\n      }\n\n      async function setupSample(filePath) {\n        // var context = new AudioContext();\n        const sample = await getFile(filePath);\n        return sample;\n      }\n\n      function linear2Decibel(value) {\n        var dB = 20 * Math.log10(value);\n        return dB;\n      }\n      let audioFile = fav.currentWav[\"filename\"];\n      Storage.get(audioFile, { level: \"private\" })\n        .then(\n          (result) => {\n            setupSample(result)\n              .then((sample) => {\n                // console.log(\"sample\", sample);\n                let signal = sample.getChannelData(0);\n                // console.log(\"raw\", signal);\n                let overlap = 0.0;\n                let fftLength = this.fftLength;\n                let halfLength = this.halfLength; // chop off top\n\n                let showLength = halfLength - Math.round(0.2 * halfLength);\n                let zmidVal = -90;\n                if (audioFile[5] == \"2\") {\n                  showLength = halfLength - Math.round(0.48 * halfLength);\n                  zmidVal = -66;\n                }\n\n                let offset = Math.floor(fftLength * (1.0 - overlap));\n                // console.log(\"offset\", offset);\n                // let ctx = this.canvas;\n                let fft = new FFT(fftLength, 44100);\n\n                var spectrogramArray = [];\n                for (var x = 0; x < sample.length - fftLength; x += offset) {\n                  var chunk = signal.slice(x, x + fftLength);\n                  for (var i = 0; i < fftLength; i++) {\n                    chunk[i] = chunk[i] * hann[i];\n                  }\n                  fft.forward(chunk);\n                  chunk = fft.spectrum.slice(0, showLength);\n                  // console.log(\"fft\", chunk);\n                  var dBmag = chunk.map(linear2Decibel);\n                  // console.log(\"dB\", dBmag);\n                  spectrogramArray.push(...dBmag);\n                }\n\n                // console.log(\"spectrogramArray\", spectrogramArray);\n                // console.log('showLength', showLength);\n\n                // arrange spectrogram for Plotly\n                var spectrogramData = [];\n                for (i = 0; i < showLength; i++) {\n                  // grab one element every halfLength points\n                  var arr = spectrogramArray.filter(function (value, j) {\n                    return j % showLength == 0;\n                  });\n                  // console.log(arr);\n                  spectrogramData.push(arr);\n                  spectrogramArray.shift(); // remove first element\n                }\n                // console.log(\"spectrogramData\", spectrogramData);\n\n                fav.spectrogram = [\n                  {\n                    z: spectrogramData,\n                    type: \"heatmap\",\n                    showscale: false,\n                    zmid: zmidVal,\n                  },\n                ];\n\n                fav.window = \"spec\";\n                fav.id += 1; // increment ID so that component updates\n                // console.log(\"spec\", fav);\n              })\n              .catch((err) => {\n                console.log(err);\n                console.log(\"No audio\", audioFile);\n                // console.log(\"Delete index\", index);\n                // this.snackbar = true;\n                return false;\n              });\n          },\n          (reason) => {\n            // rejection\n            console.log(\"Can't play \", reason);\n          }\n        )\n        .catch((err) => {\n          console.log(err);\n        });\n    },\n    setWindowImage(fav) {\n      fav.window = \"image\";\n      fav.id += 1;\n    },\n    async download(item) {\n      // console.log(item);\n      let audioFile = item.currentWav[\"filename\"];\n      this.initAudioContext();\n\n      if (globalAudioContext.state === \"suspended\") {\n        globalAudioContext.resume();\n      }\n\n      globalGainNode.gain.value = this.playbackGain;\n\n      var audioUrl = await Storage.get(audioFile, { level: \"private\" });\n      const response = await fetch(audioUrl);\n      const arrayBuffer = await response.arrayBuffer();\n      const audioBuffer = await globalAudioContext.decodeAudioData(arrayBuffer);\n      let signal = audioBuffer.getChannelData(0);\n      const max =\n        1.5 * signal.reduce((acc, val) => Math.max(acc, val), -Infinity);\n      const normalizedSignal = signal.map((value) => value / max);\n      // console.log(audioBuffer);\n\n      function saveArrayToWavFile(array, sampleRate, filename) {\n        const numChannels = 1;\n        const bitsPerSample = 16;\n        const byteRate = (sampleRate * numChannels * bitsPerSample) / 8;\n        const blockAlign = (numChannels * bitsPerSample) / 8;\n        const dataSize = (array.length * bitsPerSample) / 8;\n        const fileLength = 44 + dataSize;\n\n        // Create a buffer for the WAV file\n        const buffer = new ArrayBuffer(fileLength);\n        const view = new DataView(buffer);\n\n        // Write the WAV file header\n        writeString(view, 0, \"RIFF\");\n        view.setUint32(4, fileLength - 8, true);\n        writeString(view, 8, \"WAVE\");\n        writeString(view, 12, \"fmt \");\n        view.setUint32(16, 16, true);\n        view.setUint16(20, 1, true);\n        view.setUint16(22, numChannels, true);\n        view.setUint32(24, sampleRate, true);\n        view.setUint32(28, byteRate, true);\n        view.setUint16(32, blockAlign, true);\n        view.setUint16(34, bitsPerSample, true);\n        writeString(view, 36, \"data\");\n        view.setUint32(40, dataSize, true);\n\n        // Write the sample data\n        for (let i = 0; i < array.length; i++) {\n          view.setInt16(44 + i * 2, array[i] * 32767, true);\n        }\n\n        // Convert the buffer to a Blob\n        const blob = new Blob([buffer], { type: \"audio/wav\" });\n\n        // Create a link element and trigger a download\n        const link = document.createElement(\"a\");\n        link.href = URL.createObjectURL(blob);\n        link.download = filename;\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n      }\n\n      function writeString(view, offset, string) {\n        for (let i = 0; i < string.length; i++) {\n          view.setUint8(offset + i, string.charCodeAt(i));\n        }\n      }\n      let filename =\n        this.replaceSpaces(item.cn) +\n        \"_\" +\n        this.replaceSpaces(item.currentWav[\"listname\"]) +\n        \".wav\";\n      saveArrayToWavFile(normalizedSignal, audioBuffer.sampleRate, filename);\n    },\n    replaceSpaces(itemWithSpaces) {\n      const itemWithUnderscores = itemWithSpaces.replace(/ /g, \"_\");\n      const itemWithApostrophe = itemWithUnderscores.replace(/'/g, \"\");\n      // // console.log(\"link\", itemWithUnderscores);\n      return itemWithApostrophe;\n    },\n  },\n};\n</script>\n  ","var render, staticRenderFns\nimport script from \"./Support.vue?vue&type=script&lang=js\"\nexport * from \"./Support.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render, staticRenderFns\nimport script from \"./Videohaikuboxoverview.vue?vue&type=script&lang=js\"\nexport * from \"./Videohaikuboxoverview.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Favorites.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Favorites.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Favorites.vue?vue&type=template&id=df1686ea\"\nimport script from \"./Favorites.vue?vue&type=script&lang=js\"\nexport * from \"./Favorites.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","<script>\n    export default {\n    created() {\n        window.location.href = \"https://haikubox.com/support-haikubox\";\n    }\n}\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Support.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Support.vue?vue&type=script&lang=js\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-card',{attrs:{\"height\":\"100%\"}},[_c('v-img',{attrs:{\"height\":\"250px\",\"src\":\"https://haikubox-images.s3.amazonaws.com/web/owlBricksm.jpeg\"}}),_c('v-card-title',[_vm._v(\"Enjoy Your Birds!\")]),_c('v-card-subtitle',[_vm._v(\"Payment Successful\")]),_c('v-card-text',[_vm._v(\" Many thanks for renewing your Haikubox membership for another year. It may take a few minutes for the Haikubox membership to show as paid. \")]),_c('v-card-text',[_vm._v(\" --The Haikubox Team \")]),_c('v-img',{attrs:{\"height\":\"250px\",\"src\":\"https://haikubox-images.s3.amazonaws.com/web/partnerssm.jpeg\"}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Success.vue?vue&type=template&id=2bb02e7a\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","<script>\nexport default {\n  name: \"VideoHaikuboxOverview.vue\",\n  beforeCreate() {\n    // Redirect to a different webpage\n    window.location.href = \"https://youtu.be/8bEdAY1Z1hQ\";\n  },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Videohaikuboxoverview.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Videohaikuboxoverview.vue?vue&type=script&lang=js\"","import Haikubox from \"./Haikubox.vue\";\nimport Haikumarine from \"./Haikumarine.vue\";\nimport Settings from \"./components/Settings.vue\";\nimport Privacy from \"./components/Privacy.vue\";\nimport Terms from \"./components/Terms.vue\";\nimport Label from \"./components/Label.vue\";\nimport Landing from \"./components/Landing.vue\";\nimport Admin from \"./components/Admin.vue\";\nimport Grid from \"./components/Grid.vue\";\nimport Notifications from \"./components/Notifications.vue\";\nimport Favorites from \"./components/Favorites.vue\";\nimport Support from \"./components/Support.vue\";\nimport Success from \"./components/Success.vue\";\nimport Videohaikuboxoverview from \"./components/Videohaikuboxoverview.vue\"\n// import router from \"./main.js\"\n// import { Auth } from 'aws-amplify';\n\n// var authState = true;\n\n// router.beforeEach((to, from, next) => {\n//   if (to.matched.some(record => record.meta.requiresAuth)) {\n//     // this route requires auth, check if logged in\n//     // if not, redirect to login page.\n//     Auth.currentAuthenticatedUser().then(authData => {\n//       console.log(\"router authData\", authData);\n//     });\n//     console.log(\"router auth state\", authState);\n//     if (!authState) {\n//       next({\n//         path: '/landing',\n//         query: { redirect: to.fullPath }\n//       })\n//     } else {\n//       next()\n//     }\n//   } else {\n//     next() // does not require Auth\n//   }\n// })\n\nexport const routes = [\n  { path: \"/haikubox\", component: Haikubox, meta: { requiresAuth: true }},\n  { path: \"/settings\", component: Settings, meta: { requiresAuth: true }},\n  { path: \"/success\", component: Success, meta: { requiresAuth: true }},\n  { path: \"/privacy\", component: Privacy, meta: { requiresAuth: false }},\n  { path: \"/terms\", component: Terms, meta: { requiresAuth: false }},\n  { path: \"/marine\", component: Haikumarine,meta: { requiresAuth: true }},\n  { path: \"/label\", component: Label, meta: { requiresAuth: true }},\n  { path: \"/admin\", component: Admin, meta: { requiresAuth: true }},\n  { path: \"/grid\", component: Grid, meta: { requiresAuth: true }},\n  { path: \"/notifications\", component: Notifications, meta: { requiresAuth: true }},\n  { path: \"/favorites\", component: Favorites, meta: { requiresAuth: true }},\n  { path: \"/support\", component: Support, meta: { requiresAuth: false }},\n  { path: \"/videohaikuboxoverview\", component: Videohaikuboxoverview, meta: { requiresAuth: false }},\n  { path: \"\", component: Landing, meta: { requiresAuth: false }}\n];\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n});\n","import Vue from \"vue\";\nimport App from \"./App.vue\";\nimport Amplify from \"aws-amplify\";\nimport \"@aws-amplify/ui-vue\";\nimport aws_exports from \"./aws-exports\";\nimport VueRouter from \"vue-router\";\nimport { routes } from \"./routes\";\n\nAmplify.configure(aws_exports);\nVue.use(VueRouter);\n\nimport { LMap, LTileLayer, LCircle, LMarker } from \"vue2-leaflet\";\nimport \"leaflet/dist/leaflet.css\";\nimport \"leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.webpack.css\"; // Re-uses images from ~leaflet package\n\nimport \"leaflet-defaulticon-compatibility\";\nimport Vue2LeafletMarkerCluster from \"vue2-leaflet-markercluster\";\nVue.component(\"v-marker-cluster\", Vue2LeafletMarkerCluster);\n\nimport VueFusionCharts from 'vue-fusioncharts';\n\n// import FusionCharts modules and resolve dependency\nimport FusionCharts from 'fusioncharts';\nimport TimeSeries from 'fusioncharts/fusioncharts.timeseries';\nimport Column2D from 'fusioncharts/fusioncharts.charts';\nimport FusionTheme from 'fusioncharts/themes/fusioncharts.theme.fusion';\nVue.use(VueFusionCharts, FusionCharts, Column2D, TimeSeries, FusionTheme);\n\n\nFusionCharts.options.license({\n  key: 'PtB2dF-7wB4C5C3D5G4E3A2J4B10A7D2B3F6tgoD3B1d1fdzoG4I3I-7jD-17A3D5B3D5D4B3B3C3D7D7C2C4G5G1D2G1rmoE6E1C4gI4B3C8zyhD3D2E3vraA4B2C2zbnD1H4B3A5B3F4F3H3G4A19A32aikC6D3RH4moA-31A7C8A3wfA2IC1C5rA-16mD2D5F1A2B2B7C4D6A3A1E4E2C2C3u==',\n  creditLabel: false,\n});\n\nimport VueYoutube from 'vue-youtube'\nVue.use(VueYoutube)\n\nimport vuetify from \"./plugins/vuetify\";\n\nimport VTooltip from \"v-tooltip\";\nVue.use(VTooltip);\n\n// import VueApexCharts from \"vue-apexcharts\";\n// Vue.use(VueApexCharts);\n// Vue.component(\"apexchart\", VueApexCharts);\n\nimport Chartkick from \"vue-chartkick\";\nimport Chart from \"chart.js\";\nVue.use(Chartkick.use(Chart));\n\nVue.component(\"l-map\", LMap);\nVue.component(\"l-tile-layer\", LTileLayer);\nVue.component(\"l-marker\", LMarker);\nVue.component(\"l-circle\", LCircle);\n\nVue.config.productionTip = false;\n\nconst router = new VueRouter({\n  routes,\n});\n\n// router.beforeEach((to, from, next) => {\n//   // console.log(\"Router Before Each\", to, from, next);\n\n//   Auth.currentAuthenticatedUser().then(authData => {\n//     console.log('router beforeEach authData', authData);\n//   });\n//   var authState = 'signedout';\n//   var authExists = true;\n//   if(authExists){\n//     if (to.matched.some(record => record.meta.requiresAuth)) {\n//       // this route requires auth, check if logged in\n//       // if not, redirect to login page.\n//       if (authState != 'signedin') {\n//         next({\n//           path: '',\n//           // query: { redirect: to.Landing }\n//         })\n//       } else {\n//         next()\n//       }\n//     } else {\n//       next() // make sure to always call next()!\n//     }\n//   }\n//   else{\n//     next({\n//       path: \"/\",\n//     })\n//   }\n// })\n\nnew Vue({\n  vuetify,\n  router,\n  render: (h) => h(App),\n}).$mount(\"#app\");\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderSignedIn.vue?vue&type=style&index=0&id=522c0948&prod&lang=css\""],"sourceRoot":""}