{"version":3,"sources":["components/loading/loading.jsx","components/dataselect/dataselect.jsx","components/filterbox/filterbox.jsx","graphs/leaflet/leaflet_vectorField.js","components/gradients/gradients.js","graphs/leaflet/basemap.jsx","img/qm.svg","graphs/d3/linegraph/functions.js","graphs/d3/linegraph/verify.js","graphs/d3/linegraph/plotlinegraph.js","graphs/d3/linegraph/linegraph.jsx","format/sidebarlayout/sidebarlayout.jsx","functions.js","graphs/leaflet/mapselect.jsx","graphs/leaflet/leaflet_customcontrol.js","graphs/leaflet/leaflet_colorpicker.js","graphs/d3/graphheader/graphheader.jsx","components/datetimedepthselector/depthselector.jsx","components/datetimedepthselector/selectormodal.jsx","components/datetimedepthselector/timeselector.jsx","components/datetimedepthselector/datetimedepthselector.jsx","components/sidebardatetime/sidebardatetime.jsx","components/layergroups/layergroups.jsx","components/legend/rasterlegenditem.jsx","components/legend/markerlegenditem.jsx","components/maplayers/editsettings.jsx","components/maplayers/layerobject.jsx","components/maplayers/maplayers.jsx","components/addlayers/addlayers.jsx","components/legend/legend.jsx","graphs/leaflet/minimap.jsx","components/basemapselector/basemapselector.jsx","graphs/leaflet/gis.jsx","components/colorramp/colorramp.jsx","components/colortable/colortable.jsx","components/colorslider/colorslider.jsx","components/colorsolid/colorsolid.jsx","components/colormanipulation/colormanipulation.jsx","errorboundary/img/bug.svg","format/header/img/logo.svg","format/header/img/map.svg","format/header/img/data.svg","format/header/img/home.svg","format/header/img/about.svg","format/header/img/map_2.svg","format/header/img/data_2.svg","format/header/img/api_2.svg","format/header/img/about_2.svg","format/footer/img/epfl.png","format/footer/img/eawag.png","format/footer/img/geneve.png","format/footer/img/carrtel.png","format/footer/img/sdsc.png","format/footer/img/unil.png","format/footer/img/twitter.png","format/footer/img/node.png","format/footer/img/react.png","img/epfl.png","img/epflc.png","img/eawag.png","img/eawagc.png","img/unil.png","img/unilc.png","img/geneve.png","img/genevec.png","img/carrtel.png","img/carrtelc.png","img/sdsc.png","img/sdscc.png","img/james.png","img/damien.jpg","img/map.png","img/data.png","img/api.png","pages/dataportal/img/calendar.svg","pages/dataportal/img/location.svg","pages/dataportal/img/model.svg","pages/dataportal/img/satellite.svg","pages/dataportal/img/measurement.svg","components/fileselector/img/file.svg","components/fileselector/img/folder.svg","img/measurement.svg","img/model.svg","img/satellite.svg","graphs/d3/graphheader/img/download.svg","graphs/d3/graphheader/img/heat.svg","graphs/d3/graphheader/img/contour.svg","graphs/d3/graphheader/img/info.svg","graphs/d3/graphheader/img/shrink.svg","graphs/d3/graphheader/img/fullscreen.svg","graphs/d3/graphheader/img/fontsize.svg","graphs/d3/graphheader/img/xgraph.svg","graphs/d3/graphheader/img/ygraph.svg","components/datetimedepthselector/img/pause.svg","components/datetimedepthselector/img/play.svg","components/datetimedepthselector/img/skipbackwards.svg","components/datetimedepthselector/img/skipforwards.svg","components/datetimedepthselector/img/clock.svg","components/datetimedepthselector/img/depth.svg","components/layergroups/img/editlayers.svg","components/layergroups/img/drawing.svg","components/maplayers/img/settings.svg","components/asynccomponent/asynccomponent.jsx","errorboundary/errorboundary.jsx","format/header/header.jsx","format/footer/footer.jsx","pages/home/home.jsx","pages/notfound/notfound.jsx","pages/dataportal/dataportal.jsx","pages/adddataset/steps/clonerepository.jsx","pages/adddataset/steps/selectdataset.jsx","components/modal/modal.jsx","pages/adddataset/adddropdownitem.jsx","pages/adddataset/steps/reviewdata.jsx","components/fileselector/fileselector.jsx","pages/adddataset/steps/reviewlineage.jsx","pages/adddataset/steps/addmetadata.jsx","pages/adddataset/steps/publish.jsx","pages/adddataset/progressbar.jsx","pages/adddataset/adddataset.jsx","pages/monitor/monitor.jsx","pages/lakemorphology/lakemorphology.jsx","pages/mapviewer/mapviewer.jsx","App.js","index.js"],"names":["Loading","className","Component","DataSelect","addNew","table","props","showModal","customStyles","control","base","height","minHeight","this","dataList","defaultValue","value","label","disabled","list","length","param","inner","isDisabled","push","e","dValue","find","x","options","classNamePrefix","onChange","styles","isOptionDisabled","option","noOptionsMessage","style","cursor","onClick","FilterBox","state","open","toggle","setState","window","dispatchEvent","Event","preopen","prevProps","content","title","newFeature","L","VectorField","Layer","Class","extend","initialize","inputdata","_inputdata","setOptions","setInputData","redraw","addInputData","_frame","_map","_animating","Util","requestAnimFrame","_redraw","onAdd","map","_canvas","_initCanvas","pane","getPane","appendChild","_panes","overlayPane","on","_onClick","_reset","_onMousemove","zoomAnimation","Browser","any3d","_animateZoom","onRemove","removeChild","getPanes","off","addTo","addLayer","canvas","DomUtil","create","originProp","testProp","size","getSize","width","y","animated","addClass","_ctx","getContext","_width","_height","topLeft","containerPointToLayerPoint","setPosition","_CHtolatlng","yx","y_aux","x_aux","lat","Math","pow","lng","_WGSlatlngtoCH","lat_aux","lng_aux","_pixelSize","i","j","d","nRows","nCols","abort","i0j0","latLngToContainerPoint","i1j0","i0j1","i1j1","apixelx","apixely","pixelx","max","min","pixely","_drawArrow","cell","ctx","vectorArrowColor","colors","center","rotation","save","translate","color","_getColor","strokeStyle","PI","rotate","globalAlpha","lineWidth","beginPath","moveTo","lineTo","stroke","restore","getBounds","noNan","flat","filter","isNaN","n","southWest","latLng","northEast","latLngBounds","_drawArrows","k","l","vx","vy","alat","alng","avx","avy","clearRect","pixelSize","stride","floor","maxRow","maxCol","_getAve","abs","sqrt","atan2","arr","reduce","a","b","_hex","c","s","parseInt","round","charAt","_trim","substring","_convertToRGB","hex","_convertToHex","rgb","loc","index","point","color1","color2","f","scale","getZoomScale","zoom","offset","_getCenterOffset","_multiplyBy","subtract","_getMapPanePos","setTransform","TRANSFORM","getTranslateString","_getClosestLocation","latArray","lngArray","targetLat","targetLng","Array","isArray","minDistance","Infinity","closestIndex","row","col","distance","t","_queryValue","fire","click","u","v","latlng","vectorField","getColor","trim","convertToRGB","convertToHex","Basemap","isInt","test","zoomIn","setZoom","getZoom","zoomOut","hoverOver","hoverFunc","target","hoverOut","CHtoWGSlatlng","UTMtoWGSlatlng","zoneNum","easting","northing","K0","E","E2","E3","E_P2","SQRT_E","_E","_E2","_E3","_E4","_E5","M1","P2","P3","P4","P5","R","m","mu","pRad","sin","pSin","pSin2","pCos","cos","pTan","tan","pTan2","pTan4","epSin","epSinSqrt","r","c2","d2","d3","d4","d5","d6","latitude","longitude","movingAverage","data","pointsInRadius","quadtree","radius","result","radius2","accept","visit","node","x1","y1","x2","y2","dx","_x","call","dy","_y","next","medianofpoints","points","p","sort","half","lon","lonres","latres","outdata","JSON","parse","stringify","quadtreedata","min_x","min_y","max_x","max_y","extent","addAll","remoteSensing","layer","file","mindatetime","unit","validpixelexpression","url","datasets_id","vp","splice","polygons","plotdata","coords","valuestring","String","pixelcolor","polygon","fillColor","fillOpacity","bindPopup","description","parseDatetime","name","bindTooltip","permanent","direction","opacity","raster","layerGroup","swapCoord","newArr","findFeature","features","key","properties","id","simstrat","Object","keys","includes","lakejson","datetime","di","indexClosest","getTime","outdate","Date","layerData","type","parameters_id","lakefeature","Name","geometry","coordinates","maxdatetime","delft3dToJavascriptDatetime","date","out","setTime","getCellCorners","cellCorner","opposite","left","right","oppositePoint","corner","tl","bl","br","tr","op","prepareContourData","xx","yy","z","onEachContour","info","depth","feature","toFixed","threeDmodel","timeformat","getLineColor","vectorArrows","vectorMagnitude","vectorFlow","vectorFlowColor","contour","thresholds","contourData","contours","onEachFeature","featureGroup","zoomedtolayer","fitBounds","magnitude","deg","html","arrows","arrowtooltip","mag","_tooltip","_content","openTooltip","closeTooltip","console","log","popup","setLatLng","setContent","openOn","dict","2","14","5","6","8","10","15","vectordata","parseVectorData","vectorfieldanim","updateData","vectorfieldtime","vectors","val","streamlines","paths","xMin","xMax","yMin","yMax","flowtooltip","capitalize","toUpperCase","slice","gitPlot","datasetparameters","markerLabel","markerSymbol","markerFixedSize","markerSize","maxdepth","yselectindex","datasetparameter","dp","axis","markerGroup","dt","dd","dp2","dp3","numberformat","parseFloat","join","indexx","indexy","parseparameter","error","shape","marker","icon","divIcon","popupAnchor","tooltipAnchor","plotDatasets","datasets","addSelectedLayer","measurementIcon","iconUrl","measurement","iconSize","iconAnchor","modelIcon","model","satelliteIcon","satellite","markerClusterGroup","dataset","mapplotfunction","origin","buttons","d_id","ids","parseMonth","select_id","document","getElementById","addEventListener","event","split","addSelected","removeDatasets","forEach","removeLayer","parseDate","input","getDate","getMonth","getFullYear","getHours","getSeconds","createAndFillTwoDArray","rows","columns","from","x_array","y_array","xSize","ySize","undefined","num","toExponential","diff","newdiff","addPoint","updatePoint","addLine","line","_layers","clearLayers","updateLine","pointList","Polyline","weight","smoothFactor","dashArray","dashOffset","arraysEqual","findDataset","fileid","files","updatePlot","selectedlayers","values","visible","geojson_function","addGeoJSON","geojson_style","geojson","geoJson","prevState","loading","setTimeout","flyTo","animate","duration","basemap","baseMaps","getElementsByClassName","display","innerHTML","_container","removeClass","geojson_zoom","bounds","g","flyToBounds","invalidateSize","basemaps","tileLayer","attribution","zoomControl","setZoomIn","setZoomOut","preferCanvas","minZoom","maxZoom","colorpicker","colorPicker","passLocation","alt","NaN","attributionControl","setPrefix","updateLocation","_zoom","_lastCenter","getCenter","Fragment","module","exports","isNumeric","isFinite","formatDate","lang","months","shortMonths","year","month","hour","getMinutes","formatNumber","languageOptions","de","decimal","thousands","grouping","currency","dateTime","time","periods","days","shortDays","en","fr","es","it","scientificNotation","verifyString","string","verifyNumber","number","verifyBool","bool","verifyFunction","verifyDiv","div","select","_groups","Error","addPlottingArea","svg","append","attr","canvasWidth","canvasHeight","processData","processOptions","userOptions","defaultOptions","default","verify","getBoundingClientRect","dualaxis","yaxis","dualaxisColor","lineColor","xaxis","marginLeft","fontSize","marginRight","marginBottom","marginTop","xTime","yTime","getDomain","domain","minarr","maxarr","dataExtents","xdomarr","ydomarr","y2domarr","x2domarr","xext","yext","xDomain","yDomain","y2Domain","x2Domain","addSVG","addCanvas","addXAxis","axisObj","addBottonAxis","addTopAxis","ax","xrange","xAxisLabel","xLabel","xUnit","xReverse","scaleTime","range","xLog","scaleLog","xPadding","xd","scaleLinear","ref","copy","axisBottom","ticks","tickFormat","multiFormat","format","grid","tickSize","selectAll","text","x2Label","x2Unit","axisTop","addYAxis","addLeftAxis","addRightAxis","yrange","yAxisLabel","yLabel","yUnit","yReverse","yLog","yPadding","yd","axisLeft","y2Label","y2Unit","axisRight","addTitle","addLegend","legendblock","legendbackground","textAnchor","legendPosition","enter","legend_size","getBBox","addBorder","addTooltip","xAxis","yAxis","zoombox","tooltip","language","hoverX","layerX","offsetX","hoverY","layerY","offsetY","idx","idy","closest","xval","yval","xu","yu","hover","mousex","mousey","addBackground","backgroundColor","downloadGraph","str","XMLSerializer","serializeToString","canvasout","createElement","contextout","image","Image","onerror","alert","onload","drawImage","download","href","toDataURL","src","encodeURIComponent","plotLines","remove","plotConfidenceInterval","curve","curveLinear","curveBasis","datum","lineWeight","defined","upper","lower","confidenceAxis","area","x0","y0","plotScatter","context","px","py","arc","addInteractionBoxes","editTicks","addZoom","d3zoom","transform","zoomIdentity","rescaleX","rescaleY","lines","scatter","zoomx","zoomboxx","zoomy","zoomboxy","zoomy2","zoomboxy2","zoomx2","zoomboxx2","formatMillisecond","timeFormat","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","formatYear","timeSecond","timeMinute","timeHour","timeDay","timeMonth","timeWeek","timeYear","plotlinegraph","timeFormatDefaultLocale","border","setDownloadGraph","setDownloadGraphDiv","plot","legend","D3LineGraph","graphid","random","fullscreen","editFontSize","toggleDownload","toggleFullscreen","raw","removeErrorWarning","downloadCSV","normalparse","dateparse","day","minutes","seconds","xlabel","xunits","ylabel","yunits","x_units","y_units","x_parse","y_parse","csvContent","encodedUri","encodeURI","link","setAttribute","body","downloadJSON","removeCommaFromLabels","gX","labels","children","replace","setLanguage","x2label","x2units","y2label","y2units","xmax","xmin","ymax","ymin","xscale","yscale","bcolor","lcolor","lweight","confidence","simple","plotdots","box","CI_upper","CI_lower","removeEventListener","isEqual","header","SidebarLayout","innerWidth","resize","wide","sidebartitle","rightNoScroll","urlFromSsh","ssh","renku","group","repository","MapSelect","rectEnable","ctrlKey","rectangle","enable","plotMarkers","markers","Icon","IconSelect","ave","clickPoint","inIcon","toDateString","toLocaleTimeString","nc_name","selectPoints","mapToggle","layers","drawnItems","FeatureGroup","drawControl","Control","Draw","edit","draw","addControl","Rectangle","_latlngs","custom","position","classes","margin","padding","events","filters","Custom","version","datas","container","DomEvent","disableClickPropagation","ev","stopPropagation","disableScrollPropagation","TileLayer","ColorPicker","crossOrigin","getTileSize","project","_tileZoom","unscaleBy","scaleBy","tile","_tiles","_tileCoordsToKey","loaded","el","getImageData","GraphHeader","closeDownload","contains","exitFullscreen","toggleXgraph","toggleYgraph","toggleDisplay","fulllabel","fullicon","fullscreenIcon","shrinkIcon","displaylabel","displayicon","heatIcon","contourIcon","ygraphIcon","xgraphIcon","downloadIcon","fontsizeIcon","item","helpIcon","DepthSelector","plotLineGraph","zoomed","mouseover","mouseout","mousemove","dataAvailable","tooltiptext","mindepth","onChangeDepth","depthstring","layerstring","focus","invert","current","array","bars","gY","top","bottom","visheight","viswidth","scaleExtent","TimeModal","scrollHour","changeTime","deltaY","scrollMins","escFunction","keyCode","closeTime","hours","hstring","toString","mins","mstring","onWheel","DateModal","changeDate","toggleModal","onChangeDatetime","datetimeold","DepthModal","changeDepth","close","TimestepModal","changeTimestep","timestep","onChangeTimestep","lableTimestep","SelectorModal","interval","closeModal","modal","TimeSelector","instructions","updateDomain","zoomEnd","datestring","minute","DatetimeDepthSelector","play","skipForwards","unix","sl","concat","skipBackwards","moveOneTimestep","clearIntervalAsync","timer","togglePlay","setIntervalAsync","Number","isInteger","weeks","pauseicon","playicon","skipbackwardsicon","skipforwardsicon","depthicon","clockicon","SidebarDatetime","showDateModal","showTimeDepthModal","rowSpan","Group","clickOnGroup","setLayerGroup","img","LayerGroups","lgroups","groups","editlayers","drawing","selected","showLayers","RasterLegendItem","linearGradient","lineargradient","selectStyle","fixedColor","background","borderTop","borderBottom","MarkerLegendItem","EditSettings","onChangeInput","localOpacityChange","localColorChange","resetMin","datamin","resetMax","datamax","localMarkerFixedSizeChange","localVectorArrowColorChange","updateDisplay","onUpdate","displayGroup","variable","findIndex","removeSelected","displayProps","mapplot","yselectparam","vpe","checked","step","DragHandle","sortableHandle","LayerObject","defaultOpen","settings","toggleOpen","toggleSettings","parameter_name","allowSettings","toggleLayerView","settings_img","GroupDisplay","datasourcelink","datasource","rel","SortableItem","SortableElement","updateMapLayers","tabIndex","SortableList","SortableContainer","MapLayers","onSortEnd","oldIndex","newIndex","setSelected","arrayMove","useDragHandle","lockAxis","AddLayersInnerInner","getLake","lakes","parameters","datasets_ids","parameter","subdatasets","sd","lakes_id","AddLayersInner","subparameters","filterparam","pid","params","paramIndex","paramd","AddLayers","Legend","toggleLegend","legendmaplayers","realdatetime","realdepth","MiniMap","scrollWheelZoom","dragging","setView","onChangeBasemap","BasemapSelector","shuffle","indexOf","Modal","preventClose","hide","TimeDepth","onChangeTime","update","time_arr","setHours","setMinutes","componentDidUpdate","GIS","menu","screen","layersModal","dateModal","timeDepthModal","downloads","hidden","modaltext","modaldetail","togglePlotDataset","hideMenu","showMenu","hideTimeDepthModal","hideDateModal","hideLayersModal","showLayersModal","updateState","newState","fixedSelected","addNewLayer","getSliderParameters","updateVariable","unshift","idArr","idParse","h","updateBaseMap","simstratMinMax","filearray","filemax","getMax","filemin","getMin","remoteSensingMinMax","threeDmodelScalarMinMax","inarray","threeDmodelVectorMinMax","flat_u","flat_v","gitPlotMinMax","getMinMax","len","parseColor","colorname","colorparse","colorlist","parseBoolean","closestFile","timedistance","depthdistance","mintime","maxtime","layervisible","matlabToJavascriptDatetime","getInternalDatetimeAndDepth","getExternalDatetimeAndDepth","padStart","downloadFile","source","filelink","downloaded","axios","get","apiUrl","timeout","catch","message","optimisePoints","q","quantile","sorted","pos","rest","usedColors","datafile","plotproperties","unoptimisedcolors","findFileId","newMax","newMin","siderbarMinDatetime","setDefaults","defaults","Promise","all","server","hidelayerbutton","ColorRamp","gradients","closeEvent","targetClass","attributes","class","selectColorRamp","gradient","ColorTable","deleteRow","addRow","updateColors","reset","overflow","colSpan","ColorSlider","histogram","bins","bin_width","ceil","plotHistogram","histogramwidth","histogramheight","ColorSolid","ColorManipulation","manipulation","setManipulation","autoOptimise","asyncComponent","importComponent","component","C","textAlign","maxHeight","ErrorBoundary","errorInfo","location","Sentry","scope","setExtra","pathname","bug","Header","to","logo","activeClassName","map_2","data_2","api_2","about_2","home","about","Footer","eawag","sdsc","epfl","unil","geneve","carrtel","react","twitter","PartnerBanner","eawagc","sdscc","epflc","unilc","genevec","carrtelc","Home","parseSearch","search","scrollTo","ourdata","accessoptions","contact","rf","plus","offsetTop","behavior","React","createRef","insitu","simulation","rs","api","james","damien","NotFound","DatasetList","dropdown","onSelectDataset","datalistclass","getLabel","editUrl","connect","Dataset","getParameters","param_names","Set","lake","typeimg","typetext","monitor","calendar","PopupBox","symbol","fun","FilterBoxInner","capitalizeFirstLetter","checkbox","cat","readOnly","count","FilterBar","removeFilter","DataPortal","sortby","parameterDetails","getLabelInitial","setSelect","searchDatasets","clearUrl","selectDataset","clearSelected","checkboxAddFilter","category","set","mapAddFilter","Location","startTimeAddFilter","endTimeAddFilter","sortDownloads","filterList","exclude","distinct","namelabel","sortDatasets","filterDataSet","avoid","filterData","maxlat","apply","o","maxlng","minlat","minlng","tDatasets","filterCategory","filterParameters","focusSearchBar","match","history","new_search","replaceAll","location_search","serverlessUrl","status","details","characteristic","err","shouldSort","threshold","useExtendedSearch","fuse_datasets","fuse","Fuse","search_arr","fDatasets","fParams","dataP","dataL","dParams","dLake","dOrigin","sids","placeholder","CloneRepository","optionalid","toggleOptional","nextStep","preventDefault","ReactDOM","findDOMNode","refs","git","userMessage","htmlFor","handleChange","SelectDataset","prevStep","allFiles","folder","lastIndex","lastIndexOf","firstIndex","onSubmit","handleFolder","clearState","show","SelectCustom","AddDropdownItem","submit","post","modalValue","getDropdowns","setInitialSelectState","modalInfo","OrderArrows","up","down","ReviewData","handleDatasetIntercept","handleDataset","resetFileConnect","fileconnect","toggleLive","liveconnect","updateDataset","toggleConnect","listMatch","l1","l2","toLowerCase","dpfilter","handleCheck","handleSelect","moveParameterUp","moveParameterDown","sensors","errorids","temp_id","parseUnit","dims","axis_list","detail","sensors_id","included","Folder","outname","File","FileSelector","longestArray","updateArray","accompanyingdata","handleAccompanyingData","ad","getChildren","nameLength","uniqueChildren","tree","af","firstFolder","ReviewLineage","renkuResponse","selectedfiles","stdout","lineage","AddMetadata","persons","projects","organisations","licenses","qm","paddingLeft","Publish","getDropdownLabel","ProgressBar","setStep","allowedStep","AddDataset","fileInformation","citation","licenses_id","organisations_id","repositories_id","persons_id","projects_id","embargo","password","files_list","cloneRepository","response","new_dataset","clone","clonestatus_id","repeat","internalthis","clonepromise","resolve","reject","clonestatus","clone_data","repo_id","reqObj","gitclone_files","dl","filepromise","status_id","filestatus","setDatasetParameters","validateData","renkuData","parseAxis","updateAxis","convertFile","arr_mindatetime","arr_maxdatetime","arr_mindepth","arr_maxdepth","arr_longitude","arr_latitude","getAve","validateLineage","validateMetadata","noEmptyString","publish","put","variables","parseUrl","dir","branch","decodeURI","url_split","path","repo","pop","fuseSearch","maxPatternLength","minMatchCharLength","findUnits","defaultParameter","allEqual","every","setDisableAxis","disableAxis","defaultAxis","maxdim","confirm","addMaskLink","checkNested","obj","args","hasOwnProperty","parseSensor","variableAttributes","dimensions","handleParameter","handleParameterCheck","labelGap","latest","delay","borderColor","Monitor","now","timedif","LakeMorphologyGraph","morphology","xlabels","interpolated","getValues","csv","onChangeX","prepareGraph","toggleInterpolated","selectLake","lakename","LakeMorphology","sortDir","urlSafe","setText","setLocation","resetLocation","setLake","setSort","elevation","MapViewer","fixedEncodeURI","searchLocation","AsyncDataDetail","AsyncAPI","App","iframe","exact","render","dsn"],"mappings":"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,GAFFA,EAAM1D,WAAW0D,IACP,MAASA,EAAM,KAAQA,GAAO,KAASA,GAAO,KAChDA,EAAIC,cAAc,GAElBvb,KAAKkF,MAAY,IAANoW,GAAc,KAKtBkF,EAAkB,SAAC/Q,GAC9B,IAAIuQ,EAAO,CACTS,GAAI,CACFC,QAAS,IACTC,UAAW,IACXC,SAAU,CAAC,GACXC,SAAU,CAAC,SAAK,IAChBC,SAAU,iBACVnP,KAAM,WACNoP,KAAM,WACNC,QAAS,CAAC,KAAM,MAChBC,KAAM,CACJ,UACA,SACA,WACA,WACA,aACA,UACA,WAEFC,UAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDjB,OAAQ,CACN,SACA,UACA,UACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEFC,YAAa,CACX,MACA,MACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QAGJiB,GAAI,CACFT,QAAS,IACTC,UAAW,IACXC,SAAU,CAAC,GACXC,SAAU,CAAC,SAAK,IAChBC,SAAU,iBACVnP,KAAM,WACNoP,KAAM,WACNC,QAAS,CAAC,KAAM,MAChBC,KAAM,CACJ,SACA,SACA,UACA,YACA,WACA,SACA,YAEFC,UAAW,CAAC,MAAO,MAAO,OAAQ,OAAQ,QAAS,MAAO,OAC1DjB,OAAQ,CACN,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEFC,YAAa,CACX,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QAGJkB,GAAI,CACFV,QAAS,IACTC,UAAW,IACXC,SAAU,CAAC,GACXC,SAAU,CAAC,SAAK,IAChBC,SAAU,iBACVnP,KAAM,WACNoP,KAAM,WACNC,QAAS,CAAC,KAAM,MAChBC,KAAM,CACJ,WACA,QACA,QACA,WACA,QACA,WACA,UAEFC,UAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDjB,OAAQ,CACN,UACA,aACA,OACA,QACA,MACA,OACA,UACA,UACA,YACA,UACA,WACA,eAEFC,YAAa,CACX,OACA,UACA,OACA,MACA,MACA,OACA,OACA,UACA,OACA,MACA,MACA,WAGJmB,GAAI,CACFX,QAAS,IACTC,UAAW,IACXC,SAAU,CAAC,GACXC,SAAU,CAAC,SAAK,IAChBC,SAAU,iBACVnP,KAAM,WACNoP,KAAM,WACNC,QAAS,CAAC,KAAM,MAChBC,KAAM,CACJ,UACA,QACA,SACA,eACA,SACA,UACA,aAEFC,UAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDjB,OAAQ,CACN,QACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,aACA,UACA,YACA,aAEFC,YAAa,CACX,QACA,MACA,MACA,MACA,OACA,MACA,MACA,SACA,OACA,MACA,MACA,QAGJoB,GAAI,CACFZ,QAAS,IACTC,UAAW,IACXC,SAAU,CAAC,GACXC,SAAU,CAAC,SAAK,IAChBC,SAAU,iBACVnP,KAAM,WACNoP,KAAM,WACNC,QAAS,CAAC,KAAM,MAChBC,KAAM,CACJ,WACA,YACA,aACA,eACA,aACA,aACA,UAEFC,UAAW,CAAC,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,OACrDjB,OAAQ,CACN,UACA,WACA,QACA,SACA,SACA,SACA,SACA,SACA,YACA,UACA,WACA,YAEFC,YAAa,CACX,OACA,QACA,MACA,MACA,OACA,SACA,SACA,KACA,OACA,MACA,MACA,SAIN,OAAIzQ,KAAQuQ,EACHA,EAAKvQ,IAEZmF,QAAQqD,MAAM,aAAexI,EAAO,oBAC7BuQ,EAAI,KAIFuB,EAAqB,SAACjgB,EAAKD,GACtC,OAAQC,GAAO,MAAUD,EAAM,MAAYC,GAAO,KAASD,EAAM,KClUtDmgB,EAAe,SAACC,GAC3B,MAAyB,kBAAXA,GAGHC,EAAe,SAACC,GAC3B,MAAyB,kBAAXA,IAAwB1e,MAAM0e,IAGjCC,EAAa,SAACC,GACzB,MAAuB,mBAATA,GAGHC,EAAiB,SAAC/b,GAC7B,MAAoB,oBAANA,GAGHgc,EAAY,SAACC,GACxB,GAAwC,OAApCC,YAAO,IAAMD,GAAKE,QAAQ,GAAG,GAC/B,MAAM,IAAIC,MACR,gBAAkBH,EAAM,0CCyExBI,EAAkB,SAACJ,EAAKK,EAAK5nB,GAejC,OAdA4nB,EACGC,OAAO,QACPA,OAAO,gBACPC,KAAK,KAAM,QAAUP,GACrBM,OAAO,YACPC,KAAK,QAAS9nB,EAAQ+nB,aACtBD,KAAK,SAAU9nB,EAAQgoB,cACvBF,KAAK,IAAK,GACVA,KAAK,IAAK,GACFF,EACRC,OAAO,KACPC,KAAK,KAAM,QAAUP,GACrBO,KAAK,YAAa,aAAeP,EAAM,KACvChnB,MAAM,iBAAkB,SAIvB0nB,EAAc,SAAC7W,GACd7E,MAAMC,QAAQ4E,KAAOA,EAAO,CAACA,IAClC,IAAK,IAAItL,EAAI,EAAGA,EAAIsL,EAAK7R,OAAQuG,IAAK,CACpC,IAAIE,EAAIoL,EAAKtL,GACb,KAAM,MAAOE,GAAI,MAAM,IAAI0hB,MAAM,uCACjC,KAAM,MAAO1hB,GAAI,MAAM,IAAI0hB,MAAM,uCACjC,GAAI1hB,EAAEjG,EAAER,SAAWyG,EAAExB,EAAEjF,OACrB,MAAM,IAAImoB,MAAM,+BACZ,SAAU1hB,IAAIoL,EAAKtL,GAAL,uBAA6BA,EAAI,IAC/C,cAAeE,IAAIoL,EAAKtL,GAAL,UAAuB,WAC1C,eAAgBE,IAAIoL,EAAKtL,GAAL,WAAwB,GAC5C,UAAWE,IAAIoL,EAAKtL,GAAL,MAAmB,KAClC,UAAWE,IAAIoL,EAAKtL,GAAL,MAAmB,KACf,KAArBsL,EAAKtL,GAAL,YAAgD8a,IAArBxP,EAAKtL,GAAL,QAC7BsL,EAAKtL,GAAL,MAAmB,KACI,KAArBsL,EAAKtL,GAAL,YAAgD8a,IAArBxP,EAAKtL,GAAL,QAC7BsL,EAAKtL,GAAL,MAAmB,KAEvB,OAAOsL,GAGH8W,EAAiB,SAACX,EAAKnW,EAAM+W,GA+DjC,IA9DA,IAAIC,EAAiB,CACnB,CAAEpT,KAAM,WAAYqT,QAAS,KAAMC,OAAQvB,GAC3C,CAAE/R,KAAM,UAAWqT,SAAS,EAAMC,OAAQnB,GAC1C,CAAEnS,KAAM,WAAYqT,SAAS,EAAOC,OAAQnB,GAC5C,CAAEnS,KAAM,WAAYqT,SAAS,EAAOC,OAAQnB,GAC5C,CAAEnS,KAAM,SAAUqT,SAAS,EAAOC,OAAQvB,GAC1C,CAAE/R,KAAM,SAAUqT,SAAS,EAAOC,OAAQvB,GAC1C,CAAE/R,KAAM,UAAWqT,SAAS,EAAOC,OAAQvB,GAC3C,CAAE/R,KAAM,UAAWqT,SAAS,EAAOC,OAAQvB,GAC3C,CAAE/R,KAAM,QAASqT,SAAS,EAAOC,OAAQvB,GACzC,CAAE/R,KAAM,QAASqT,SAAS,EAAOC,OAAQvB,GACzC,CAAE/R,KAAM,SAAUqT,SAAS,EAAOC,OAAQvB,GAC1C,CAAE/R,KAAM,SAAUqT,SAAS,EAAOC,OAAQvB,GAC1C,CAAE/R,KAAM,OAAQqT,SAAS,EAAOC,OAAQrB,GACxC,CAAEjS,KAAM,OAAQqT,SAAS,EAAOC,OAAQrB,GACxC,CAAEjS,KAAM,OAAQqT,SAAS,EAAOC,OAAQrB,GACxC,CAAEjS,KAAM,OAAQqT,SAAS,EAAOC,OAAQrB,GACxC,CAAEjS,KAAM,OAAQqT,SAAS,EAAOC,OAAQnB,GACxC,CAAEnS,KAAM,OAAQqT,SAAS,EAAOC,OAAQnB,GACxC,CAAEnS,KAAM,UAAWqT,SAAS,EAAOC,OAAQnB,GAC3C,CAAEnS,KAAM,QAASqT,SAAS,EAAMC,OAAQnB,GACxC,CAAEnS,KAAM,OAAQqT,SAAS,EAAOC,OAAQnB,GACxC,CAAEnS,KAAM,SAAUqT,SAAS,EAAOC,OAAQnB,GAC1C,CAAEnS,KAAM,WAAYqT,SAAS,EAAOC,OAAQnB,GAC5C,CAAEnS,KAAM,WAAYqT,SAAS,EAAMC,OAAQnB,GAC3C,CAAEnS,KAAM,QAASqT,SAAS,EAAOC,OAAQvB,GACzC,CAAE/R,KAAM,WAAYqT,QAAS,GAAIC,OAAQrB,GACzC,CAAEjS,KAAM,YAAaqT,QAAS,GAAIC,OAAQrB,GAC1C,CAAEjS,KAAM,aAAcqT,QAAS,GAAIC,OAAQrB,GAC3C,CAAEjS,KAAM,eAAgBqT,QAAS,GAAIC,OAAQrB,GAC7C,CAAEjS,KAAM,cAAeqT,QAAS,GAAIC,OAAQrB,GAC5C,CAAEjS,KAAM,OAAQqT,SAAS,EAAMC,OAAQnB,GACvC,CAAEnS,KAAM,SAAUqT,SAAS,EAAMC,OAAQnB,GACzC,CAAEnS,KAAM,iBAAkBqT,QAAS,cAAeC,OAAQvB,GAC1D,CAAE/R,KAAM,mBAAoBqT,SAAS,EAAOC,OAAQjB,GACpD,CAAErS,KAAM,sBAAuBqT,SAAS,EAAOC,OAAQvB,GACvD,CAAE/R,KAAM,QAASqT,SAAS,EAAOC,OAAQjB,GACzC,CAAErS,KAAM,QAASqT,SAAS,EAAOC,OAAQnB,GACzC,CACEnS,KAAM,kBACNqT,SAAS,EACTC,OAAQ,WACN,OAAO,IAGX,CACEtT,KAAM,QACNqT,QAASb,YAAO,IAAMD,GACnB3V,OACA2W,wBAAwBhkB,MAC3B+jB,OAAQrB,GAEV,CACEjS,KAAM,SACNqT,QAASb,YAAO,IAAMD,GACnB3V,OACA2W,wBAAwBzpB,OAC3BwpB,OAAQrB,IAIRjnB,EAAU,GACL8F,EAAI,EAAGA,EAAIsiB,EAAe7oB,OAAQuG,IACrCsiB,EAAetiB,GAAGkP,QAAQmT,OACgBvH,IAAxCuH,EAAYC,EAAetiB,GAAGkP,MAChChV,EAAQooB,EAAetiB,GAAGkP,MAAQoT,EAAetiB,GAAGuiB,QAEpDD,EAAetiB,GAAGwiB,OAAOH,EAAYC,EAAetiB,GAAGkP,OAEvDhV,EAAQooB,EAAetiB,GAAGkP,MAAQmT,EAAYC,EAAetiB,GAAGkP,OAEhEmF,QAAQqD,MAAR,UACK2K,EAAYC,EAAetiB,GAAGkP,MADnC,qCAEIoT,EAAetiB,GAAGkP,OAGtBhV,EAAQooB,EAAetiB,GAAGkP,MAAQoT,EAAetiB,GAAGuiB,SAGtDroB,EAAQooB,EAAetiB,GAAGkP,MAAQoT,EAAetiB,GAAGuiB,QAIxDroB,EAAQwoB,UAAW,EApF8B,oBAqFnCpX,GArFmC,IAqFjD,2BAAoB,CAAC,IAAZpL,EAAW,QACF,OAAZA,EAAEyiB,QACJzoB,EAAQwoB,SAAW,KACnBxoB,EAAQ0oB,cAAgB1iB,EAAE2iB,WAEZ,OAAZ3iB,EAAE4iB,QACJ5oB,EAAQwoB,SAAW,KACnBxoB,EAAQ0oB,cAAgB1iB,EAAE2iB,YA5FmB,8BAkIjD,MAlCM,eAAgBR,IACpBnoB,EAAQ6oB,WAAgC,EAAnB7oB,EAAQ8oB,SAAe,IACxC,gBAAiBX,IACI,OAArBnoB,EAAQwoB,SACVxoB,EAAQ+oB,YAAiC,EAAnB/oB,EAAQ8oB,SAAe,GAE7C9oB,EAAQ+oB,YAAc,IAGpB,iBAAkBZ,IACtBnoB,EAAQgpB,aAAkC,EAAnBhpB,EAAQ8oB,SAAe,IAC1C,cAAeX,IACfnoB,EAAQqB,MACe,OAArBrB,EAAQwoB,SACVxoB,EAAQipB,UAA+B,EAAnBjpB,EAAQ8oB,SAAe,GAE3C9oB,EAAQipB,UAAYjpB,EAAQ8oB,SAAW,EAGzC9oB,EAAQipB,UAAY,IAIxBjpB,EAAQkpB,OAAQ,EAChBlpB,EAAQmpB,OAAQ,EACZ/X,EAAK,GAAGrR,EAAE,aAAcyW,OAAMxW,EAAQkpB,OAAQ,GAC9C9X,EAAK,GAAG5M,EAAE,aAAcgS,OAAMxW,EAAQmpB,OAAQ,GAElDnpB,EAAQ+nB,YAAcxiB,KAAKmE,MACzB1J,EAAQuE,MAAQvE,EAAQ6oB,WAAa7oB,EAAQ+oB,aAE/C/oB,EAAQgoB,aAAeziB,KAAKmE,MAC1B1J,EAAQlB,OAASkB,EAAQipB,UAAYjpB,EAAQgpB,cAExChpB,GAGHopB,EAAY,SAACC,GACjB,IAAIC,EAASD,EAAO3mB,KAAI,SAACsD,GAAD,OAAOA,EAAE,MAC7BujB,EAASF,EAAO3mB,KAAI,SAACsD,GAAD,OAAOA,EAAE,MAGjC,MAAO,CAFGwN,YAAO8V,GAAQ,GACf9V,YAAO+V,GAAQ,KAIrBC,EAAc,SAACpY,EAAMpR,GAKzB,IAJA,IAAIypB,EAAU,GACVC,EAAU,GACVC,EAAW,GACXC,EAAW,GACN9jB,EAAI,EAAGA,EAAIsL,EAAK7R,OAAQuG,IAAK,CACpC,IAAI+jB,EAAOrW,YAAOpC,EAAKtL,GAAG/F,GACtB+pB,EAAOtW,YAAOpC,EAAKtL,GAAGtB,GACJ,OAAlB4M,EAAKtL,GAAG2iB,MACVkB,EAAShqB,KAAKmqB,GAEdJ,EAAQ/pB,KAAKmqB,GAEO,OAAlB1Y,EAAKtL,GAAG8iB,MACVgB,EAASjqB,KAAKkqB,GAEdJ,EAAQ9pB,KAAKkqB,GAGjB,IAAIE,EAAUX,EAAUK,GACpBO,EAAUZ,EAAUM,GACpBO,EAAWb,EAAUO,GACrBO,EAAWd,EAAUQ,GAOzB,OALI5pB,EAAQ0b,OAAMqO,EAAQ,GAAK/pB,EAAQ0b,MACnC1b,EAAQ2b,OAAMoO,EAAQ,GAAK/pB,EAAQ2b,MACnC3b,EAAQ4b,OAAMoO,EAAQ,GAAKhqB,EAAQ4b,MACnC5b,EAAQ6b,OAAMmO,EAAQ,GAAKhqB,EAAQ6b,MAEhC,CAAEkO,UAASC,UAASE,WAAUD,aAGjCE,EAAS,SAAC5C,EAAKvnB,GACnB,OAAOwnB,YAAO,IAAMD,GACjBM,OAAO,OACPC,KAAK,KAAM,OAASP,GACpBO,KAAK,QAAS9nB,EAAQuE,OACtBhE,MAAM,UAAW,GACjBA,MAAM,WAAY,YAClBunB,KAAK,SAAU9nB,EAAQlB,QACvB+oB,OAAO,KACPC,KACC,YACA,aAAe9nB,EAAQ6oB,WAAa,IAAM7oB,EAAQipB,UAAY,MAI9DmB,EAAY,SAAC7C,EAAKvnB,GACtB,IAAIwX,EAAO,MAeX,OAdIxX,EAAQiZ,UAASzB,EAAO,OACbgQ,YAAO,IAAMD,GACzBM,OAAO,UACPC,KAAK,QAAS9nB,EAAQ+nB,aACtBD,KAAK,SAAU9nB,EAAQgoB,cACvBznB,MAAM,cAAeP,EAAQ6oB,WAAa,MAC1CtoB,MAAM,aAAcP,EAAQipB,UAAY,MACxC1oB,MAAM,iBAAkB,QACxBA,MAAM,UAAW,GACjBA,MAAM,WAAY,YAClBA,MAAM,OAAQiX,GACdjX,MAAM,SAAU,QAChBunB,KAAK,KAAM,UAAYP,GACvBO,KAAK,QAAS,eACHlW,OAAOhN,WAAW,OAG5BylB,EAAW,SAACzC,EAAKmC,EAASG,EAAUlqB,GACxC,IAAIsqB,EAAU,GAKd,OAJAA,EAAQvqB,EAAIwqB,EAAc3C,EAAKmC,EAAS/pB,GACf,OAArBA,EAAQwoB,WACV8B,EAAQvY,GAAKyY,EAAW5C,EAAKsC,EAAUlqB,IAElCsqB,GAGHC,EAAgB,SAAC3C,EAAKmC,EAAS/pB,GACnC,IAAIyqB,EACAC,EAAS,CAAC,EAAG1qB,EAAQ+nB,aACrB4C,GAED3qB,EAAQ4qB,OAAS5qB,EAAQ4qB,OAAS,KAClC5qB,EAAQ6qB,MAAQ,KAAO7qB,EAAQ6qB,MAAQ,IAAM,IAEhD,GADI7qB,EAAQ8qB,WAAUJ,EAAS,CAAC1qB,EAAQ+nB,YAAa,IACjD/nB,EAAQkpB,MACVyB,EAAa,GACbF,EAAKM,cAAYC,MAAMN,GAAQrB,OAAOU,QACjC,GAAI/pB,EAAQirB,KACjBR,EAAKS,cAAWF,MAAMN,GAAQrB,OAAOU,OAChC,CACL,GAAI/pB,EAAQmrB,SAAU,CACpB,IAAIC,EAAiC,IAA3BrB,EAAQ,GAAKA,EAAQ,IAC/BA,EAAU,CAACA,EAAQ,GAAKqB,EAAIrB,EAAQ,GAAKqB,GAE3CX,EAAKY,cAAcL,MAAMN,GAAQrB,OAAOU,GAE1C,IAAIuB,EAAMb,EAAGc,OACT1sB,EAAO4rB,EAAGc,OACV3O,EAAO4O,YAAWf,GAAIgB,MAAM,GAC5BzrB,EAAQkpB,MACVtM,EAAK8O,WAAWC,GACP7E,EAAmBiD,EAAQ,GAAIA,EAAQ,KAChDnN,EAAK8O,WAAWE,YAAO,QAGrB5rB,EAAQ6rB,MAAMjP,EAAKkP,UAAU9rB,EAAQgoB,cAEzC,IAAItE,EAAIkE,EACLC,OAAO,KACPC,KAAK,QAAS,UACdA,KAAK,KAAM,WACXA,KAAK,YAAa,eAAiB9nB,EAAQgoB,aAAe,KAC1DznB,MAAM,YALD,UAKiBP,EAAQ8oB,SALzB,OAML3W,KAAKyK,GA0BR,OAxBI5c,EAAQ6rB,MACVnI,EAAEqI,UAAU,cACTjE,KAAK,SAAU,QACfA,KAAK,mBAAoB,KAGX,KAAf6C,GACF/C,EACGC,OAAO,QACPC,KACC,YACA,aACE9nB,EAAQ+nB,YAAc,EACtB,MACC/nB,EAAQgoB,aAAehoB,EAAQgpB,aAAe,KAC/C,KAEHlB,KAAK,IAAK,GACVA,KAAK,KAXR,UAWiB9nB,EAAQ8oB,SAXzB,OAYGvoB,MAAM,YAZT,UAYyBP,EAAQ8oB,SAZjC,OAaGvoB,MAAM,cAAe,OACrByrB,KAAKrB,GAGH,CAAEF,KAAIa,MAAKzsB,OAAM+d,OAAM8G,MAG1B8G,EAAa,SAAC5C,EAAKsC,EAAUlqB,GACjC,IAAIyqB,EACAC,EAAS,CAAC,EAAG1qB,EAAQ+nB,aACrB4C,GAED3qB,EAAQisB,QAAUjsB,EAAQisB,QAAU,KACpCjsB,EAAQksB,OAAS,KAAOlsB,EAAQksB,OAAS,IAAM,IAElD,GADIlsB,EAAQ8qB,WAAUJ,EAAS,CAAC1qB,EAAQ+nB,YAAa,IACjD/nB,EAAQkpB,MACVyB,EAAa,GACbF,EAAKM,cAAYC,MAAMN,GAAQrB,OAAOa,QACjC,GAAIlqB,EAAQirB,KACjBR,EAAKS,cAAWF,MAAMN,GAAQrB,OAAOa,OAChC,CACL,GAAIlqB,EAAQmrB,SAAU,CACpB,IAAIC,EAAmC,IAA7BlB,EAAS,GAAKA,EAAS,IACjCA,EAAW,CAACA,EAAS,GAAKkB,EAAIlB,EAAS,GAAKkB,GAE9CX,EAAKY,cAAcL,MAAMN,GAAQrB,OAAOa,GAE1C,IAAIoB,EAAMb,EAAGc,OACT1sB,EAAO4rB,EAAGc,OACV3O,EAAOuP,YAAQ1B,GAAIgB,MAAM,GACzBzrB,EAAQkpB,MACVtM,EAAK8O,WAAWC,GACP7E,EAAmBoD,EAAS,GAAIA,EAAS,KAClDtN,EAAK8O,WAAWE,YAAO,QAGzB,IAAIlI,EAAIkE,EACLC,OAAO,KACPC,KAAK,QAAS,UACdA,KAAK,KAAM,YACXA,KAAK,YAAa,kBAClBvnB,MAAM,YALD,UAKiBP,EAAQ8oB,SALzB,OAML3W,KAAKyK,GAkBR,MAhBmB,KAAf+N,GACF/C,EACGC,OAAO,QACPC,KACC,YAHJ,oBAIiB9nB,EAAQ+nB,YAAc,EAJvC,YAKyB,EAAnB/nB,EAAQ8oB,SAAe9oB,EAAQipB,UALrC,MAQGnB,KAAK,IAAK,GACVA,KAAK,KATR,UASiB9nB,EAAQ8oB,SATzB,OAUGvoB,MAAM,YAVT,UAUyBP,EAAQ8oB,SAVjC,OAWGvoB,MAAM,cAAe,OACrByrB,KAAKrB,GAGH,CAAEF,KAAIa,MAAKzsB,OAAM+d,OAAM8G,MAG1B0I,EAAW,SAACxE,EAAKoC,EAASC,EAAUjqB,GACxC,IAAIsqB,EAAU,GAKd,OAJAA,EAAQ9lB,EAAI6nB,EAAYzE,EAAKoC,EAAShqB,GACb,OAArBA,EAAQwoB,WACV8B,EAAQtY,GAAKsa,EAAa1E,EAAKqC,EAAUjqB,IAEpCsqB,GAGH+B,EAAc,SAACzE,EAAKoC,EAAShqB,GACjC,IAAIyqB,EACA8B,EAAS,CAACvsB,EAAQgoB,aAAc,GAChCwE,GAEDxsB,EAAQysB,OAASzsB,EAAQysB,OAAS,KAClCzsB,EAAQ0sB,MAAQ,KAAO1sB,EAAQ0sB,MAAQ,IAAM,IAEhD,GADI1sB,EAAQ2sB,WAAUJ,EAAS,CAAC,EAAGvsB,EAAQgoB,eACvChoB,EAAQmpB,MACVqD,EAAa,GACb/B,EAAKM,cAAYC,MAAMuB,GAAQlD,OAAOW,QACjC,GAAIhqB,EAAQ4sB,KACjBnC,EAAKS,cAAWF,MAAMuB,GAAQlD,OAAOW,OAChC,CACL,GAAIhqB,EAAQ6sB,SAAU,CACpB,IAAIC,EAAiC,IAA3B9C,EAAQ,GAAKA,EAAQ,IAC/BA,EAAU,CAACA,EAAQ,GAAK8C,EAAI9C,EAAQ,GAAK8C,GAE3CrC,EAAKY,cAAcL,MAAMuB,GAAQlD,OAAOW,GAE1C,IAAIsB,EAAMb,EAAGc,OACT1sB,EAAO4rB,EAAGc,OACV3O,EAAOmQ,YAAStC,GAAIgB,MAAM,GAC1BzrB,EAAQmpB,MACVvM,EAAK8O,WAAWC,GACP7E,EAAmBkD,EAAQ,GAAIA,EAAQ,KAChDpN,EAAK8O,WAAWE,YAAO,QAGrB5rB,EAAQ6rB,MAAMjP,EAAKkP,UAAU9rB,EAAQ+nB,aAEzC,IAAIrE,EAAIkE,EACLC,OAAO,KACPC,KAAK,QAAS,UACdA,KAAK,KAAM,WACXvnB,MAAM,YAJD,UAIiBP,EAAQ8oB,SAJzB,OAKL3W,KAAKyK,GAmBR,OAjBI5c,EAAQ6rB,MACVnI,EAAEqI,UAAU,cACTjE,KAAK,SAAU,QACfA,KAAK,mBAAoB,KAGX,KAAf0E,GACF5E,EACGC,OAAO,QACPC,KAAK,YAAa,eAClBA,KAAK,IAAK,EAAI9nB,EAAQ6oB,YACtBf,KAAK,IAAK,EAAI9nB,EAAQgoB,aAAe,GACrCF,KAAK,KALR,UAKiB9nB,EAAQ8oB,SALzB,OAMGvoB,MAAM,YANT,UAMyBP,EAAQ8oB,SANjC,OAOGvoB,MAAM,cAAe,UACrByrB,KAAKQ,GAEH,CAAE/B,KAAIa,MAAKzsB,OAAM+d,OAAM8G,MAG1B4I,EAAe,SAAC1E,EAAKqC,EAAUjqB,GACnC,IAAIyqB,EACA8B,EAAS,CAACvsB,EAAQgoB,aAAc,GAChCwE,GAEDxsB,EAAQgtB,QAAUhtB,EAAQgtB,QAAU,KACpChtB,EAAQitB,OAAS,KAAOjtB,EAAQitB,OAAS,IAAM,IAElD,GADIjtB,EAAQ2sB,WAAUJ,EAAS,CAAC,EAAGvsB,EAAQgoB,eACvChoB,EAAQmpB,MACVqD,EAAa,GACb/B,EAAKM,cAAYC,MAAMuB,GAAQlD,OAAOY,QACjC,GAAIjqB,EAAQ4sB,KACjBnC,EAAKS,cAAWF,MAAMuB,GAAQlD,OAAOY,OAChC,CACL,GAAIjqB,EAAQ6sB,SAAU,CACpB,IAAIC,EAAmC,IAA7B7C,EAAS,GAAKA,EAAS,IACjCA,EAAW,CAACA,EAAS,GAAK6C,EAAI7C,EAAS,GAAK6C,GAE9CrC,EAAKY,cAAcL,MAAMuB,GAAQlD,OAAOY,GAE1C,IAAIqB,EAAMb,EAAGc,OACT1sB,EAAO4rB,EAAGc,OACV3O,EAAOsQ,YAAUzC,GAAIgB,MAAM,GAC3BzrB,EAAQmpB,MACVvM,EAAK8O,WAAWC,GACP7E,EAAmBmD,EAAS,GAAIA,EAAS,KAClDrN,EAAK8O,WAAWE,YAAO,QAGzB,IAAIlI,EAAIkE,EACLC,OAAO,KACPC,KAAK,QAAS,UACdA,KAAK,KAAM,YACXA,KAAK,YAJA,oBAI0B9nB,EAAQ+nB,YAJlC,QAKLxnB,MAAM,YALD,UAKiBP,EAAQ8oB,SALzB,OAML3W,KAAKyK,GAiBR,MAfmB,KAAf4P,GACF5E,EACGC,OAAO,QACPC,KAAK,YAAa,eAClBA,KACC,IACA9nB,EAAQ+nB,YAAc/nB,EAAQ+oB,YAAc/oB,EAAQ8oB,SAAW,GAEhEhB,KAAK,IAAK,EAAI9nB,EAAQgoB,aAAe,GACrCF,KAAK,KARR,UAQiB9nB,EAAQ8oB,SARzB,OASGvoB,MAAM,YATT,UASyBP,EAAQ8oB,SATjC,OAUGvoB,MAAM,OAAQP,EAAQ0oB,eACtBnoB,MAAM,cAAe,UACrByrB,KAAKQ,GAEH,CAAE/B,KAAIa,MAAKzsB,OAAM+d,OAAM8G,MAG1ByJ,EAAW,SAACvF,EAAKL,EAAKvnB,GAC1B4nB,EACGC,OAAO,QACPC,KAAK,IAAK9nB,EAAQ+nB,YAAc,GAChCD,KAAK,IAAK,EAAI9nB,EAAQipB,UAAY,GAClCnB,KAAK,KAAM,SAAWP,GACtBO,KAAK,cAAe,UACpBvnB,MAAM,UAAW,GACjBA,MAAM,YAPT,UAOyBP,EAAQ8oB,SAAW,EAP5C,OAQGvoB,MAAM,kBAAmB,aACzBA,MAAM,UAAW,KACjByrB,KAAKhsB,EAAQqB,QAGZ+rB,EAAY,SAACxF,EAAKL,EAAKnW,EAAMpR,GACjC,GAAKoR,EAAK7R,OAAS,IAAMS,EAAQwoB,UAAapX,EAAK7R,OAAS,EAAG,CAC7D,IAAI8tB,EAAczF,EACfC,OAAO,KACPC,KAAK,KAAM,UAAYP,GACvBO,KAAK,iBAAkB,QAEtBwF,EAAmBD,EACpBxF,OAAO,QACPtnB,MAAM,OAAQ,SACdA,MAAM,UAAW,IAEhBR,EAAIC,EAAQ+nB,YAAc,GAC1BwF,EAAa,MACbvtB,EAAQwtB,eAAevX,SAAS,UAClClW,EAAI,GACJwtB,EAAa,SAGf,IAAI/oB,EAAI,SAACsB,GACP,OAAO9F,EAAQgoB,aAAe,GAAKliB,GAAK9F,EAAQ8oB,SAAW,IAEzD9oB,EAAQwtB,eAAevX,SAAS,SAClCzR,EAAI,SAACsB,GACH,OAAO,EAAIA,GAAK9F,EAAQ8oB,SAAW,KAIvCuE,EACGtB,UAAU,cACV3a,KAAKA,GACLqc,QACA5F,OAAO,QACPC,KAAK,IAAK/nB,GACV+nB,KAAK,KAAK,SAAU9hB,EAAGF,GACtB,OAAOtB,EAAEsB,MAEVvF,MAAM,QAAQ,SAAUyF,GACvB,OAAOA,EAAE2iB,aAEVqD,MAAK,SAAUhmB,GACd,OAAOA,EAAEgP,QAEV8S,KAAK,cAAeyF,GACpBhtB,MAAM,YAhBT,UAgByBP,EAAQ8oB,SAhBjC,OAiBGvoB,MAAM,qBAAsB,UAE/B,IAAImtB,EAAclG,YAAO,WAAaD,GACnC3V,OACA+b,UAEHL,EACGxF,KAAK,IAAK4F,EAAY3tB,EAAI,GAC1B+nB,KAAK,IAAK4F,EAAYlpB,EAAI,GAC1BsjB,KAAK,QAAS4F,EAAYnpB,MAAQ,IAClCujB,KAAK,SAAU4F,EAAY5uB,OAAS,MAIrC8uB,EAAY,SAAChG,EAAK5nB,GACtB4nB,EACGC,OAAO,QACPC,KAAK,IAAK,GACVA,KAAK,IAAK,GACVA,KAAK,QAAS9nB,EAAQ+nB,aACtBD,KAAK,SAAU9nB,EAAQgoB,cACvBF,KAAK,SAAU,SACfA,KAAK,eAAgB,GACrBA,KAAK,OAAQ,SAGZ+F,EAAa,SAACzc,EAAMmW,EAAKuG,EAAOC,EAAO/tB,GAC3C,IAAIguB,EAAUxG,YAAO,aAAD,OAAcD,IAC9B0G,EAAUzG,YAAO,IAAMD,GACxBM,OAAO,OACPtnB,MAAM,UAAW,GACjBA,MAAM,UAAW,GACjBA,MAAM,iBAAkB,QACxBunB,KAAK,KAAM,WAAaP,GACxBO,KAAK,QAAS,WAEbvC,EAAOQ,EAAgB/lB,EAAQkuB,UAEnCF,EAAQ9qB,GAAG,aAAa,SAACqc,GACvB,IACE,IAAI4O,EACF5O,EAAM6O,OAASpuB,EAAQ6oB,YAActJ,EAAM8O,QAAUruB,EAAQ6oB,WAC3DyF,EACF/O,EAAMgP,OAASvuB,EAAQipB,WAAa1J,EAAMiP,QAAUxuB,EAAQipB,UAC1D,EFxrBa,SAAC7X,EAAM+c,EAAQG,EAAQR,EAAOC,GAInD,IAHA,IAAIU,EAAM,EACNC,EAAM,EACN5hB,EAAWJ,IACN5G,EAAI,EAAGA,EAAIsL,EAAK7R,OAAQuG,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIqL,EAAKtL,GAAG/F,EAAER,OAAQwG,IAAK,CACzC,IAAIC,EAAC,SACF,SAACmoB,EAASL,EAAM1c,EAAKtL,GAAG8iB,OAAO6B,GAAGrZ,EAAKtL,GAAG/F,EAAEgG,IAAQ,GAApD,SACEuoB,EAASP,EAAM3c,EAAKtL,GAAG2iB,OAAOgC,GAAGrZ,EAAKtL,GAAGtB,EAAEuB,IAAQ,GACtD,IACEC,EAAI8G,IACN2hB,EAAM3oB,EACN4oB,EAAM3oB,EACN+G,EAAW9G,GAIjB,MAAO,CAAEyoB,MAAKC,MAAK5hB,YEuqBc6hB,CAAQvd,EAAM+c,EAAQG,EAAQR,EAAOC,GAA5DU,EAAN,EAAMA,IAAKC,EAAX,EAAWA,IAAK5hB,EAAhB,EAAgBA,SAEhB,GAAIA,EAAW,GAAI,CACjB,IAAI8hB,EAAMC,EACNC,EAAK,GACLC,EAAK,GAEL/uB,EAAQkpB,MACV0F,EAAOtJ,EAAWlU,EAAKqd,GAAK1uB,EAAE2uB,GAAMnJ,IAEpCqJ,EAAO9I,EAAa1U,EAAKqd,GAAK1uB,EAAE2uB,IACH,kBAAlB1uB,EAAQ6qB,QAEfiE,EADsB,OAApB1d,EAAKqd,GAAK7F,MACP5oB,EAAQksB,OAERlsB,EAAQ6qB,QAKf7qB,EAAQmpB,MACV0F,EAAOvJ,EAAWlU,EAAKqd,GAAKjqB,EAAEkqB,GAAMnJ,IAEpCsJ,EAAO/I,EAAa1U,EAAKqd,GAAKjqB,EAAEkqB,IACH,kBAAlB1uB,EAAQ0sB,QAEfqC,EADsB,OAApB3d,EAAKqd,GAAKhG,MACPzoB,EAAQitB,OAERjtB,EAAQ0sB,QAKnB,IAAI/S,EACF,8BAAuBvI,EAAKqd,GAAK9F,UAAjC,2CACsBiG,EADtB,YAC8BE,EAD9B,2CAEsBD,EAFtB,YAE8BE,EAF9B,cAGA,mBAEEZ,EAASnuB,EAAQuE,MAAQ,EAC3B0pB,EACGtU,KAAKA,GACLpZ,MACC,QACAP,EAAQuE,MACNvE,EAAQ6oB,WACRiF,EAAM1c,EAAKqd,GAAK7F,OAAO6B,GAAGrZ,EAAKqd,GAAK1uB,EAAE2uB,IACtC,GACA,MAEHnuB,MAAM,OAAQ,QACdA,MACC,MACAwtB,EAAM3c,EAAKqd,GAAKhG,OAAOgC,GAAGrZ,EAAKqd,GAAKjqB,EAAEkqB,IACpC1uB,EAAQipB,UACRjpB,EAAQ8oB,SACR,EACA,MAEHhB,KAAK,QAAS,yBACdvnB,MAAM,UAAW,GAEpB0tB,EACGtU,KAAKA,GACLpZ,MACC,OACAutB,EAAM1c,EAAKqd,GAAK7F,OAAO6B,GAAGrZ,EAAKqd,GAAK1uB,EAAE2uB,IACpC1uB,EAAQ6oB,WACR,GACA,MAEHtoB,MAAM,QAAS,QACfA,MACC,MACAwtB,EAAM3c,EAAKqd,GAAKhG,OAAOgC,GAAGrZ,EAAKqd,GAAKjqB,EAAEkqB,IACpC1uB,EAAQipB,UACRjpB,EAAQ8oB,SACR,EACA,MAEHhB,KAAK,QAAS,wBACdvnB,MAAM,UAAW,GAGlBP,EAAQgvB,OAAOhvB,EAAQgvB,MAAM,CAAEP,MAAKC,aAC/B5hB,EAAW,MACpBmhB,EAAQ1tB,MAAM,UAAW,GACrBP,EAAQgvB,OAAOhvB,EAAQgvB,MAAM,CAAEC,QAAQ,EAAOC,QAAQ,KAE5D,MAAOtvB,GACPquB,EAAQ1tB,MAAM,UAAW,GACrBP,EAAQgvB,OAAOhvB,EAAQgvB,MAAM,CAAEC,QAAQ,EAAOC,QAAQ,QAI9DlB,EAAQ9qB,GAAG,YAAY,WACrB+qB,EAAQ1tB,MAAM,UAAW,GACrBP,EAAQgvB,OAAOhvB,EAAQgvB,MAAM,CAAEC,QAAQ,EAAOC,QAAQ,QAIxDC,EAAgB,SAAC5H,EAAKvnB,GAC1BwnB,YAAO,IAAMD,GACVM,OAAO,OACPC,KAAK,KAAM,cAAgBP,GAC3BO,KAAK,QAAS9nB,EAAQuE,OACtBhE,MAAM,UAAW,GACjBA,MAAM,WAAY,YAClBunB,KAAK,SAAU9nB,EAAQlB,QACvB+oB,OAAO,KACPA,OAAO,QACPC,KAAK,IAAK,GACVA,KAAK,QAAS9nB,EAAQuE,OACtBujB,KAAK,SAAU9nB,EAAQlB,QACvBgpB,KAAK,OAAQ9nB,EAAQovB,kBAGpBC,EAAgB,SAAC9H,EAAKvnB,GAC1B,IAAIqB,EAAQmmB,YAAO,UAAYD,GAC/BlmB,EAAMd,MAAM,UAAW,KACvB,IACI+uB,GADI,IAAIC,eACAC,kBAAkBpQ,SAASC,eAAe,OAASkI,IAE3DkI,EAAYrQ,SAASsQ,cAAc,UACrCC,EAAaF,EAAU7qB,WAAW,MAEpC6qB,EAAUlrB,MAAQvE,EAAQuE,MAC1BkrB,EAAU3wB,OAASkB,EAAQlB,OAE3B,IAAI8wB,EAAQ,IAAIC,MAChBD,EAAME,QAAU,WACdC,MAAM,8DAERH,EAAMI,OAAS,WACbL,EAAWM,UAAUL,EAAO,EAAG,GAC/BD,EAAWM,UACT7Q,SAASC,eAAe,UAAYkI,GACpCvnB,EAAQ6oB,WACR7oB,EAAQipB,WAEV,IAAI9e,EAAIiV,SAASsQ,cAAc,KAC/BvlB,EAAE+lB,SAAW,aAAe3I,EAAM,OAClCpd,EAAEgmB,KAAOV,EAAUW,UAAU,aAC7BjmB,EAAE+C,SAEJ0iB,EAAMS,IAAM,mCAAqCC,mBAAmBhB,GACpEjuB,EAAMd,MAAM,UAAW,MAGnBgwB,EAAY,SAAChJ,EAAK7D,EAAGtS,EAAM0c,EAAOC,EAAO/tB,GAC7C0jB,EAAEqI,UAAU,QAAQyE,SACpB,IAAK,IAAIzqB,EAAI,EAAGA,EAAIqL,EAAK7R,OAAQwG,IAC/B0qB,EACE/M,EACAtS,EAAKrL,GACL+nB,EAAM1c,EAAKrL,GAAG6iB,OACdmF,EAAM3c,EAAKrL,GAAG0iB,QAGlB,IAAIiI,EAAQC,IACR3wB,EAAQ0wB,QAAOA,EAAQE,KAC3B,IAZyD,eAYhD7qB,GACP2d,EAAEmE,OAAO,QACNgJ,MAAMzf,EAAKrL,GAAGhG,GACd+nB,KAAK,KAFR,eAEsB/hB,EAFtB,YAE2BwhB,IACxBO,KAAK,OAAQ,QACbA,KAAK,SAAU1W,EAAKrL,GAAG4iB,WACvBb,KAAK,eAAgB1W,EAAKrL,GAAG+qB,YAC7BhJ,KACC,IACA1G,cACGrhB,GAAE,SAAUiG,GACX,OAAO8nB,EAAM1c,EAAKrL,GAAG6iB,OAAO6B,GAAGzkB,MAEhCxB,GAAE,SAAUwB,EAAGF,GACd,OAAOioB,EAAM3c,EAAKrL,GAAG0iB,OAAOgC,GAAGrZ,EAAKrL,GAAGvB,EAAEsB,OAE1C4qB,MAAMA,GACNK,SAAQ,SAAU/qB,EAAGF,GACpB,SACEsf,EAAU0I,EAAM1c,EAAKrL,GAAG6iB,OAAO6B,GAAGzkB,MAClCof,EAAU2I,EAAM3c,EAAKrL,GAAG0iB,OAAOgC,GAAGrZ,EAAKrL,GAAGvB,EAAEsB,WApB/CC,EAAI,EAAGA,EAAIqL,EAAK7R,OAAQwG,IAAM,EAA9BA,IA+BL0qB,EAAyB,SAAC/M,EAAGtS,EAAM0c,EAAOC,GAC1C,UAAW3c,GAAQ,UAAWA,GAAQ,mBAAoBA,GAE1DA,EAAK4f,MAAMzxB,SAAW6R,EAAKrR,EAAER,QAC7B6R,EAAK6f,MAAM1xB,SAAW6R,EAAKrR,EAAER,SAED,MAAxB6R,EAAK8f,eACPxN,EAAEmE,OAAO,QACNgJ,MAAMzf,EAAK5M,GACXsjB,KAAK,OAAQ1W,EAAKuX,WAClBb,KAAK,SAAU,QACfA,KAAK,UAAW,KAChBA,KACC,IACAqJ,cACG3sB,GAAE,SAAUwB,GACX,OAAO+nB,EAAMtD,GAAGzkB,MAEjBorB,IAAG,SAAUprB,EAAGF,GACf,OAAOgoB,EAAMrD,GAAGrZ,EAAK6f,MAAMnrB,OAE5B+L,IAAG,SAAU7L,EAAGF,GACf,OAAOgoB,EAAMrD,GAAGrZ,EAAK4f,MAAMlrB,OAE5BirB,SAAQ,SAAU/qB,EAAGF,GACpB,SACEsf,EAAU2I,EAAMtD,GAAGzkB,KACnBof,EAAU0I,EAAMrD,GAAGrZ,EAAK6f,MAAMnrB,MAC9Bsf,EAAU0I,EAAMrD,GAAGrZ,EAAK4f,MAAMlrB,UAQP,MAAxBsL,EAAK8f,gBACdxN,EAAEmE,OAAO,QACNgJ,MAAMzf,EAAKrR,GACX+nB,KAAK,OAAQ1W,EAAKuX,WAClBb,KAAK,SAAU,QACfA,KAAK,UAAW,KAChBA,KACC,IACAqJ,cACGpxB,GAAE,SAAUiG,GACX,OAAO8nB,EAAMrD,GAAGzkB,MAEjBqrB,IAAG,SAAUrrB,EAAGF,GACf,OAAOioB,EAAMtD,GAAGrZ,EAAK6f,MAAMnrB,OAE5BgM,IAAG,SAAU9L,EAAGF,GACf,OAAOioB,EAAMtD,GAAGrZ,EAAK4f,MAAMlrB,OAE5BirB,SAAQ,SAAU/qB,EAAGF,GACpB,SACEsf,EAAU0I,EAAMrD,GAAGzkB,KACnBof,EAAU2I,EAAMtD,GAAGrZ,EAAK6f,MAAMnrB,MAC9Bsf,EAAU2I,EAAMtD,GAAGrZ,EAAK4f,MAAMlrB,YAa1CwrB,EAAc,SAACC,EAASngB,EAAM0c,EAAOC,EAAO/tB,GAChDuxB,EAAQhoB,UAAU,EAAG,EAAGvJ,EAAQ+nB,YAAa/nB,EAAQgoB,cACrD,IAAK,IAAIliB,EAAI,EAAGA,EAAIsL,EAAK7R,OAAQuG,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIqL,EAAKtL,GAAG/F,EAAER,OAAQwG,IAAK,CACzCwrB,EAAQxpB,YACRwpB,EAAQ7pB,YAAc0J,EAAKtL,GAAG6iB,UAC9B,IAAM6I,EAAK1D,EAAM1c,EAAKtL,GAAG8iB,OAAO6B,GAAGrZ,EAAKtL,GAAG/F,EAAEgG,IACvC0rB,EAAK1D,EAAM3c,EAAKtL,GAAG2iB,OAAOgC,GAAGrZ,EAAKtL,GAAGtB,EAAEuB,IAC7CwrB,EAAQG,IAAIF,EAAIC,EAAI,IAAK,EAAG,EAAIlsB,KAAKoC,IAAI,GACzC4pB,EAAQrpB,WAKRypB,EAAsB,SAAC/J,EAAKL,EAAKvnB,GACrC4nB,EACGC,OAAO,QACPC,KAAK,KAAM,YAAcP,GACzBO,KAAK,QAAS9nB,EAAQ+nB,aACtBD,KAAK,SAAU9nB,EAAQgoB,cACvBznB,MAAM,OAAQ,QACdA,MAAM,SAAU,WAChBunB,KAAK,iBAAkB,OAE1BF,EACGC,OAAO,QACPC,KAAK,KAAM,aAAeP,GAC1BO,KAAK,QAAS9nB,EAAQ+nB,aACtBD,KAAK,SAAU9nB,EAAQgpB,cACvBzoB,MAAM,OAAQ,QACdA,MAAM,SAAU,cAChBunB,KAAK,iBAAkB,OACvBA,KAAK,IAAK9nB,EAAQgoB,cAEI,OAArBhoB,EAAQwoB,UACVZ,EACGC,OAAO,QACPC,KAAK,KAAM,cAAgBP,GAC3BO,KAAK,QAAS9nB,EAAQ+nB,aACtBD,KAAK,SAAU9nB,EAAQipB,WACvB1oB,MAAM,OAAQ,QACdA,MAAM,SAAU,cAChBunB,KAAK,iBAAkB,OACvBA,KAAK,KAAM9nB,EAAQipB,WAGxBrB,EACGC,OAAO,QACPC,KAAK,KAAM,aAAeP,GAC1BO,KAAK,QAAS9nB,EAAQ6oB,YACtBf,KAAK,SAAU9nB,EAAQgoB,cACvBznB,MAAM,OAAQ,QACdA,MAAM,SAAU,cAChBunB,KAAK,iBAAkB,OACvBA,KAAK,KAAM9nB,EAAQ6oB,YAEG,OAArB7oB,EAAQwoB,UACVZ,EACGC,OAAO,QACPC,KAAK,KAAM,cAAgBP,GAC3BO,KAAK,QAAS9nB,EAAQ+oB,aACtBjB,KAAK,SAAU9nB,EAAQgoB,cACvBznB,MAAM,OAAQ,QACdA,MAAM,SAAU,cAChBunB,KAAK,iBAAkB,OACvBA,KAAK,IAAK9nB,EAAQ+nB,cAInB6J,EAAY,SAAC9D,EAAOC,GACxBD,EAAM/tB,EAAE2jB,EACLqI,UAAU,cACVjE,KAAK,SAAU,QACfA,KAAK,mBAAoB,KAC5BiG,EAAMvpB,EAAEkf,EACLqI,UAAU,cACVjE,KAAK,SAAU,QACfA,KAAK,mBAAoB,MAGxB+J,EAAU,SAACnO,EAAG6N,EAASngB,EAAMmW,EAAKuG,EAAOC,EAAO/tB,GACpD,IAAIyL,EAAOqmB,cACRte,OAAO,CACN,CAAC,EAAG,GACJ,CAACxT,EAAQ+nB,YAAa/nB,EAAQgoB,gBAE/B9kB,GAAG,QAwCN,SAAoBqc,GAClB,IAAIxS,EAAIwS,EAAMwS,UACVhlB,IAAMilB,MACRlE,EAAM/tB,EAAE0qB,GAAK1d,EAAEklB,SAASnE,EAAM/tB,EAAEurB,KAChCwC,EAAM/tB,EAAE6c,KAAKrR,MAAMuiB,EAAM/tB,EAAE0qB,IAC3BqD,EAAM/tB,EAAE2jB,EAAEvR,KAAK2b,EAAM/tB,EAAE6c,MACE,OAArB5c,EAAQwoB,WACVsF,EAAM/b,GAAG0Y,GAAK1d,EAAEklB,SAASnE,EAAM/b,GAAGuZ,KAClCwC,EAAM/b,GAAG6K,KAAKrR,MAAMuiB,EAAM/b,GAAG0Y,IAC7BqD,EAAM/b,GAAG2R,EAAEvR,KAAK2b,EAAM/b,GAAG6K,OAE3BmR,EAAMvpB,EAAEimB,GAAK1d,EAAEmlB,SAASnE,EAAMvpB,EAAE8mB,KAChCyC,EAAMvpB,EAAEoY,KAAKrR,MAAMwiB,EAAMvpB,EAAEimB,IAC3BsD,EAAMvpB,EAAEkf,EAAEvR,KAAK4b,EAAMvpB,EAAEoY,MACE,OAArB5c,EAAQwoB,WACVuF,EAAM/b,GAAGyY,GAAK1d,EAAEmlB,SAASnE,EAAM/b,GAAGsZ,KAClCyC,EAAM/b,GAAG4K,KAAKrR,MAAMwiB,EAAM/b,GAAGyY,IAC7BsD,EAAM/b,GAAG0R,EAAEvR,KAAK4b,EAAM/b,GAAG4K,OAEvB5c,EAAQmyB,OAAO5B,EAAUhJ,EAAK7D,EAAGtS,EAAM0c,EAAOC,EAAO/tB,GACrDA,EAAQoyB,SAASd,EAAYC,EAASngB,EAAM0c,EAAOC,EAAO/tB,GAC9D8tB,EAAM/tB,EAAEurB,IAAMwC,EAAM/tB,EAAE0qB,GACG,OAArBzqB,EAAQwoB,WAAmBsF,EAAM/b,GAAGuZ,IAAMwC,EAAM/b,GAAG0Y,IACvDsD,EAAMvpB,EAAE8mB,IAAMyC,EAAMvpB,EAAEimB,GACG,OAArBzqB,EAAQwoB,WAAmBuF,EAAM/b,GAAGsZ,IAAMyC,EAAM/b,GAAGyY,IACvDuD,EAAQ7b,KAAK1G,EAAKsmB,UAAWC,KACzBhyB,EAAQ6rB,MAAM+F,EAAU9D,EAAOC,OAhEnCsE,EAAQP,cACTte,OAAO,CACN,CAAC,EAAG,GACJ,CAACxT,EAAQ+nB,YAAa/nB,EAAQgoB,gBAE/B9kB,GAAG,QA+DN,SAAqBqc,GACnB,IAAIxS,EAAIwS,EAAMwS,UACVhlB,IAAMilB,MACRlE,EAAM/tB,EAAE0qB,GAAK1d,EAAEklB,SAASnE,EAAM/tB,EAAEurB,KAChCwC,EAAM/tB,EAAE6c,KAAKrR,MAAMuiB,EAAM/tB,EAAE0qB,IAC3BqD,EAAM/tB,EAAE2jB,EAAEvR,KAAK2b,EAAM/tB,EAAE6c,MACnB5c,EAAQmyB,OAAO5B,EAAUhJ,EAAK7D,EAAGtS,EAAM0c,EAAOC,EAAO/tB,GACrDA,EAAQoyB,SAASd,EAAYC,EAASngB,EAAM0c,EAAOC,EAAO/tB,GAC9D8tB,EAAM/tB,EAAEurB,IAAMwC,EAAM/tB,EAAE0qB,GACtB6H,EAASngB,KAAK1G,EAAKsmB,UAAWC,KAC1BhyB,EAAQ6rB,MAAM+F,EAAU9D,EAAOC,OAvEnCwE,EAAQT,cACTte,OAAO,CACN,CAAC,EAAG,GACJ,CAACxT,EAAQ+nB,YAAa/nB,EAAQgoB,gBAE/B9kB,GAAG,QAoFN,SAAqBqc,GACnB,IAAIxS,EAAIwS,EAAMwS,UACVhlB,IAAMilB,MACRjE,EAAMvpB,EAAEimB,GAAK1d,EAAEmlB,SAASnE,EAAMvpB,EAAE8mB,KAChCyC,EAAMvpB,EAAEoY,KAAKrR,MAAMwiB,EAAMvpB,EAAEimB,IAC3BsD,EAAMvpB,EAAEkf,EAAEvR,KAAK4b,EAAMvpB,EAAEoY,MACnB5c,EAAQmyB,OAAO5B,EAAUhJ,EAAK7D,EAAGtS,EAAM0c,EAAOC,EAAO/tB,GACrDA,EAAQoyB,SAASd,EAAYC,EAASngB,EAAM0c,EAAOC,EAAO/tB,GAC9D+tB,EAAMvpB,EAAE8mB,IAAMyC,EAAMvpB,EAAEimB,GACtB+H,EAASrgB,KAAK1G,EAAKsmB,UAAWC,KAC1BhyB,EAAQ6rB,MAAM+F,EAAU9D,EAAOC,OA5FvC,GAAyB,OAArB/tB,EAAQwoB,SACV,IAAIiK,EAASX,cACVte,OAAO,CACN,CAAC,EAAG,GACJ,CAACxT,EAAQ+nB,YAAa/nB,EAAQgoB,gBAE/B9kB,GAAG,QA0FR,SAAsBqc,GACpB,IAAIxS,EAAIwS,EAAMwS,UACVhlB,IAAMilB,MACRjE,EAAM/b,GAAGyY,GAAK1d,EAAEmlB,SAASnE,EAAM/b,GAAGsZ,KAClCyC,EAAM/b,GAAG4K,KAAKrR,MAAMwiB,EAAM/b,GAAGyY,IAC7BsD,EAAM/b,GAAG0R,EAAEvR,KAAK4b,EAAM/b,GAAG4K,MACrB5c,EAAQmyB,OAAO5B,EAAUhJ,EAAK7D,EAAGtS,EAAM0c,EAAOC,EAAO/tB,GACrDA,EAAQoyB,SAASd,EAAYC,EAASngB,EAAM0c,EAAOC,EAAO/tB,GAC9D+tB,EAAM/b,GAAGsZ,IAAMyC,EAAM/b,GAAGyY,GACxBiI,EAAUvgB,KAAK1G,EAAKsmB,UAAWC,KAC3BhyB,EAAQ6rB,MAAM+F,EAAU9D,EAAOC,OAnGjC2E,EAAYlL,YAAO,eAAD,OAAgBD,IAAOpV,KAAKsgB,GAGpD,GAAyB,OAArBzyB,EAAQwoB,SACV,IAAImK,EAASb,cACVte,OAAO,CACN,CAAC,EAAG,GACJ,CAACxT,EAAQ+nB,YAAa/nB,EAAQgoB,gBAE/B9kB,GAAG,QAoDR,SAAsBqc,GACpB,IAAIxS,EAAIwS,EAAMwS,UACVhlB,IAAMilB,MACRlE,EAAM/b,GAAG0Y,GAAK1d,EAAEklB,SAASnE,EAAM/b,GAAGuZ,KAClCwC,EAAM/b,GAAG6K,KAAKrR,MAAMuiB,EAAM/b,GAAG0Y,IAC7BqD,EAAM/b,GAAG2R,EAAEvR,KAAK2b,EAAM/b,GAAG6K,MACrB5c,EAAQmyB,OAAO5B,EAAUhJ,EAAK7D,EAAGtS,EAAM0c,EAAOC,EAAO/tB,GACrDA,EAAQoyB,SAASd,EAAYC,EAASngB,EAAM0c,EAAOC,EAAO/tB,GAC9D8tB,EAAM/b,GAAGuZ,IAAMwC,EAAM/b,GAAG0Y,GACxBmI,EAAUzgB,KAAK1G,EAAKsmB,UAAWC,KAC3BhyB,EAAQ6rB,MAAM+F,EAAU9D,EAAOC,OA7DjC6E,EAAYpL,YAAO,eAAD,OAAgBD,IAAOpV,KAAKwgB,GAGpD,IAAI3E,EAAUxG,YAAO,aAAD,OAAcD,IAAOpV,KAAK1G,GAC1C6mB,EAAW9K,YAAO,cAAD,OAAeD,IAAOpV,KAAKkgB,GAC5CG,EAAWhL,YAAO,cAAD,OAAeD,IAAOpV,KAAKogB,GAqHhD,OA7BAvE,EAAQ9qB,GAAG,gBAAiB,MAAMA,GAAG,YAAY,WAC/C4qB,EAAM/tB,EAAE0qB,GAAKqD,EAAM/tB,EAAElB,KACrBivB,EAAM/tB,EAAEurB,IAAMwC,EAAM/tB,EAAElB,KACtBivB,EAAM/tB,EAAE6c,KAAKrR,MAAMuiB,EAAM/tB,EAAElB,MAC3BivB,EAAM/tB,EAAE2jB,EAAEvR,KAAK2b,EAAM/tB,EAAE6c,MACE,OAArB5c,EAAQwoB,WACVsF,EAAM/b,GAAG0Y,GAAKqD,EAAM/b,GAAGlT,KACvBivB,EAAM/b,GAAGuZ,IAAMwC,EAAM/b,GAAGlT,KACxBivB,EAAM/b,GAAG6K,KAAKrR,MAAMuiB,EAAM/b,GAAGlT,MAC7BivB,EAAM/b,GAAG2R,EAAEvR,KAAK2b,EAAM/b,GAAG6K,OAE3BmR,EAAMvpB,EAAE8mB,IAAMyC,EAAMvpB,EAAE3F,KACtBkvB,EAAMvpB,EAAEimB,GAAKsD,EAAMvpB,EAAE3F,KACrBkvB,EAAMvpB,EAAEoY,KAAKrR,MAAMwiB,EAAMvpB,EAAE3F,MAC3BkvB,EAAMvpB,EAAEkf,EAAEvR,KAAK4b,EAAMvpB,EAAEoY,MACE,OAArB5c,EAAQwoB,WACVuF,EAAM/b,GAAGsZ,IAAMyC,EAAM/b,GAAGnT,KACxBkvB,EAAM/b,GAAGyY,GAAKsD,EAAM/b,GAAGnT,KACvBkvB,EAAM/b,GAAG4K,KAAKrR,MAAMwiB,EAAM/b,GAAGnT,MAC7BkvB,EAAM/b,GAAG0R,EAAEvR,KAAK4b,EAAM/b,GAAG4K,OAEvB5c,EAAQmyB,OAAO5B,EAAUhJ,EAAK7D,EAAGtS,EAAM0c,EAAOC,EAAO/tB,GACrDA,EAAQoyB,SAASd,EAAYC,EAASngB,EAAM0c,EAAOC,EAAO/tB,GAC1DA,EAAQ6rB,MAAM+F,EAAU9D,EAAOC,MAErCuE,EAASpvB,GAAG,gBAAiB,MAC7BsvB,EAAStvB,GAAG,gBAAiB,MACJ,OAArBlD,EAAQwoB,UAAmBoK,EAAU1vB,GAAG,gBAAiB,MACpC,OAArBlD,EAAQwoB,UAAmBkK,EAAUxvB,GAAG,gBAAiB,MACtD,CAAE8qB,YAGLrC,EAAc,SAACzU,GACnB,IAAI2b,EAAoBC,YAAW,OACjCC,EAAeD,YAAW,OAC1BE,EAAeF,YAAW,SAC1BG,EAAaH,YAAW,SACxBI,EAAYJ,YAAW,SACvBK,EAAaL,YAAW,SACxBM,EAAcN,YAAW,MACzBO,EAAaP,YAAW,MAC1B,OACEQ,YAAWpc,GAAQA,EACf2b,EACAU,YAAWrc,GAAQA,EACnB6b,EACAS,YAAStc,GAAQA,EACjB8b,EACAS,YAAQvc,GAAQA,EAChB+b,EACAS,YAAUxc,GAAQA,EAClByc,YAASzc,GAAQA,EACfgc,EACAC,EACFS,YAAS1c,GAAQA,EACjBkc,EACAC,GACJnc,IAGW2c,GAlqCO,SAACtM,EAAKnW,GAC1B,IADkD,IAAlBpR,EAAiB,uDAAP,GAC1C,MAAc,CAAC,MAAO,SAAU,UAAW,cAA3C,eAA0D,CAArD,IAAI0Q,EAAC,KACR,IACE8W,YAAO,IAAD,OAAK9W,EAAL,YAAU6W,IAAOiJ,SACvB,MAAO5wB,GACPua,QAAQC,IAAIxa,IAIhB,IAIE,GAHA0nB,EAAUC,IAEVnW,EAAO6W,EAAY7W,IACV7R,OAAS,EAAG,OACrBS,EAAUkoB,EAAeX,EAAKnW,EAAMpR,GAEpC,IAAI,EAA2CwpB,EAAYpY,EAAMpR,GAA3D+pB,EAAN,EAAMA,QAASC,EAAf,EAAeA,QAASE,EAAxB,EAAwBA,SAAUD,EAAlC,EAAkCA,SAE5BsH,EAAUnH,EAAU7C,EAAKvnB,GACzB4nB,EAAMuC,EAAO5C,EAAKvnB,GAExB8zB,YAAwB/N,EAAgB/lB,EAAQkuB,WAEhD,IAAIJ,EAAQzD,EAASzC,EAAKmC,EAASG,EAAUlqB,GACzC+tB,EAAQ3B,EAASxE,EAAKoC,EAASC,EAAUjqB,GAE7C2xB,EAAoB/J,EAAKL,EAAKvnB,GAE1BA,EAAQqB,OAAO8rB,EAASvF,EAAKL,EAAKvnB,GAClCA,EAAQ+zB,QAAQnG,EAAUhG,EAAK5nB,GAC/BA,EAAQovB,iBAAiBD,EAAc5H,EAAKvnB,GAC5CA,EAAQg0B,kBACVh0B,EAAQg0B,kBAAiB,kBAAM3E,EAAc9H,EAAKvnB,MAChDA,EAAQi0B,qBACVzM,YAAO,IAAMxnB,EAAQi0B,qBAAqB/wB,GAAG,SAAS,WACpDmsB,EAAc9H,EAAKvnB,MAGvB,IAAIk0B,EAAOvM,EAAgBJ,EAAKK,EAAK5nB,GACjCA,EAAQm0B,QAAQ/G,EAAUxF,EAAKL,EAAKnW,EAAMpR,GAC1CA,EAAQmyB,OAAO5B,EAAUhJ,EAAK2M,EAAM9iB,EAAM0c,EAAOC,EAAO/tB,GACxDA,EAAQoyB,SAASd,EAAYC,EAASngB,EAAM0c,EAAOC,EAAO/tB,GAC1DA,EAAQyL,MAAMomB,EAAQqC,EAAM3C,EAASngB,EAAMmW,EAAKuG,EAAOC,EAAO/tB,GAC9DA,EAAQiuB,SAASJ,EAAWzc,EAAMmW,EAAKuG,EAAOC,EAAO/tB,GACzD,MAAOJ,GACPua,QAAQqD,MAAM5d,KCnFZw0B,I,mNACJzzB,MAAQ,CACN0zB,QAAS9uB,KAAKkF,MAAsB,IAAhBlF,KAAK+uB,UACzBpE,UAAU,EACVqE,YAAY,EACZzL,SAAU,EAAKrqB,MAAMqqB,SAAW,EAAKrqB,MAAMqqB,SAAW,I,EAGxD0L,aAAe,SAAC1L,GACd,EAAKhoB,SAAS,CAAEgoB,c,EAGlB2L,eAAiB,WACf,EAAK3zB,SAAS,CAAEovB,UAAW,EAAKvvB,MAAMuvB,Y,EAGxCwE,iBAAmB,WACjB,EAAK5zB,SAAS,CAAEyzB,YAAa,EAAK5zB,MAAM4zB,aAAc,WACpDxzB,OAAOC,cAAc,IAAIC,MAAM,e,EAInCmoB,UAAY,SAACC,GACX,IAAIC,EAASD,EAAO3mB,KAAI,SAACsD,GAAD,OAAOA,EAAE,MAC7BujB,EAASF,EAAO3mB,KAAI,SAACsD,GAAD,OAAOA,EAAE,MAGjC,MAAO,CAFG6K,IAAUyY,GAAQ,GAClBzY,IAAU0Y,GAAQ,K,EAI9BjE,WAAa,SAACqP,GACZ,OAAO,IAAIne,KAAW,IAANme,I,EAGlBC,mBAAqB,SAAC70B,K,EAItB80B,YAAc,WACZ,SAASC,EAAY31B,GACnB,OAAOA,EAET,SAAS41B,EAAU7d,GACjB,IAAI8d,GAAO,IAAM9d,EAAK6I,WAAW9D,OAAO,GACpC0J,GAAS,KAAOzO,EAAK8I,WAAa,IAAI/D,OAAO,GAC7CyJ,EAAOxO,EAAK+I,cACZ2F,GAAQ,IAAM1O,EAAKgJ,YAAYjE,OAAO,GACtCgZ,GAAW,IAAM/d,EAAK2O,cAAc5J,OAAO,GAC3CiZ,EACFhe,EAAKiJ,aAAe,GAAK,IAAMjJ,EAAKiJ,aAAejJ,EAAKiJ,aAC1D,MAAM,GAAN,OAAUuF,EAAV,YAAkBC,EAAlB,YAA2BqP,EAA3B,YAAkCpP,EAAlC,YAA0CqP,EAA1C,YAAqDC,GAEvD,IACE,IAAI,EAAkD,EAAKz2B,MAArD2S,EAAN,EAAMA,KAAM+jB,EAAZ,EAAYA,OAAQC,EAApB,EAAoBA,OAAQC,EAA5B,EAA4BA,OAAQC,EAApC,EAAoCA,OAAQj0B,EAA5C,EAA4CA,MACxCk0B,EAAO,YAAQH,EAAR,KACPI,EAAO,YAAQF,EAAR,KACPG,EAAUX,EACVY,EAAUZ,EACC,SAAXK,IACFI,EAAU,GACVE,EAAUV,GAEG,SAAXM,IACFG,EAAU,GACVE,EAAUX,GAEZ,IAAIY,EAAa,GACjB,GAAKppB,MAAMC,QAAQ4E,IAAyB,IAAhBA,EAAK7R,OAS1B,CACLo2B,GAA0B,8BAE1B,IADA,IAAItV,GAAQ3T,IACH5G,EAAI,EAAGA,EAAIsL,EAAK7R,OAAQuG,IAC/B6vB,GAAuB,WAAOR,GAAP,OAAgBI,EAAhB,YAA2BF,GAA3B,OAAoCG,GAC3DnV,EAAO9a,KAAKqB,IAAIyZ,EAAMjP,EAAKtL,GAAG/F,EAAER,QAElCo2B,GAA0B,KAC1B,IAAK,IAAI5vB,EAAI,EAAGA,EAAIsa,EAAMta,IAAK,CAC7B4vB,GACY,UAAMF,EAAQrkB,EAAK,GAAGrR,EAAEgG,IAAxB,YAA+B2vB,EAAQtkB,EAAK,GAAG5M,EAAEuB,KAC7D,IAAK,IAAID,EAAI,EAAGA,EAAIsL,EAAK7R,OAAQuG,IAC/B6vB,GACY,WAAOF,EAAQrkB,EAAKtL,GAAG/F,EAAEgG,IAAzB,YAAgC2vB,EAAQtkB,EAAKtL,GAAGtB,EAAEuB,KAEhE4vB,GAA0B,UAxBiB,CACzCppB,MAAMC,QAAQ4E,KAAOA,EAAOA,EAAK,IACrCukB,GACY,sCACqBR,GADrB,OAC8BI,EAD9B,YACyCF,GADzC,OACkDG,EADlD,MAEZ,IAAK,IAAI1vB,EAAI,EAAGA,EAAIsL,EAAKrR,EAAER,OAAQuG,IACjC6vB,GACY,UAAMF,EAAQrkB,EAAKrR,EAAE+F,IAArB,YAA4B4vB,EAAQtkB,EAAK5M,EAAEsB,IAA3C,MAoBhB,IAAIkP,EAAO3T,EAAMme,MAAM,KAAKpC,KAAK,KAAO,OACpCwY,EAAaC,UAAUF,GACvBG,EAAO1W,SAASsQ,cAAc,KAClCoG,EAAKC,aAAa,OAAQH,GAC1BE,EAAKC,aAAa,WAAY/gB,GAC9BoK,SAAS4W,KAAKjzB,YAAY+yB,GAC1BA,EAAK5oB,QACL,EAAKpM,SAAS,CAAEovB,UAAU,IAC1B,MAAOtwB,GACPua,QAAQqD,MAAM5d,GACdmwB,MAAM,sE,EAIVkG,aAAe,WACb,IAAI,EAAkD,EAAKx3B,MAArD2S,EAAN,EAAMA,KAAM+jB,EAAZ,EAAYA,OAAQC,EAApB,EAAoBA,OAAQC,EAA5B,EAA4BA,OAAQC,EAApC,EAAoCA,OAAQj0B,EAA5C,EAA4CA,MACxC4I,EAAG,2BAAQ,CAAEkrB,SAAQC,SAAQC,SAAQC,SAAQj0B,UAAY+P,GACzD4D,EAAO3T,EAAMme,MAAM,KAAKpC,KAAK,KAAO,QACpCwY,EACF,gCAAkCtF,mBAAmBtd,KAAKE,UAAUjJ,IAClE6rB,EAAO1W,SAASsQ,cAAc,KAClCoG,EAAKC,aAAa,OAAQH,GAC1BE,EAAKC,aAAa,WAAY/gB,GAC9BoK,SAAS4W,KAAKjzB,YAAY+yB,GAC1BA,EAAK5oB,QACL,EAAKpM,SAAS,CAAEovB,UAAU,K,EAG5BgG,sBAAwB,SAACC,GAEvB,IADA,IAAIC,EAASD,EAAG1O,QAAQ,GAAG,GAAG4O,SACrBvwB,EAAI,EAAGA,EAAIswB,EAAO72B,OAAQuG,IAC7BswB,EAAOtwB,GAAGuwB,SAAS92B,OAAS,IAC9B62B,EAAOtwB,GAAGuwB,SAAS,GAAGhT,UAAY+S,EAChCtwB,GACAuwB,SAAS,GAAGhT,UAAUiT,QAAQ,IAAK,M,EAK3CC,YAAc,SAACvhB,GACb,IAAIuQ,EAAO,CACTS,GAAI,CACFC,QAAS,IACTC,UAAW,IACXC,SAAU,CAAC,GACXC,SAAU,CAAC,SAAK,IAChBC,SAAU,iBACVnP,KAAM,WACNoP,KAAM,WACNC,QAAS,CAAC,KAAM,MAChBC,KAAM,CACJ,UACA,SACA,WACA,WACA,aACA,UACA,WAEFC,UAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDjB,OAAQ,CACN,SACA,UACA,UACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEFC,YAAa,CACX,MACA,MACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,SAIFzQ,KAAQuQ,GACV1U,IAA2B0U,EAAKvQ,K,EAIpCkf,K,sBAAO,gGAAA/pB,EAAA,sDAkCL,IAlCK,EA+BD,EAAK1L,MA7BP2S,EAFG,EAEHA,KACA+jB,EAHG,EAGHA,OACAC,EAJG,EAIHA,OACAC,EALG,EAKHA,OACAC,EANG,EAMHA,OACAkB,EAPG,EAOHA,QACAC,EARG,EAQHA,QACAC,EATG,EASHA,QACAC,EAVG,EAUHA,QACAC,EAXG,EAWHA,KACAC,EAZG,EAYHA,KACAC,EAbG,EAaHA,KACAC,EAdG,EAcHA,KACAC,EAfG,EAeHA,OACAC,EAhBG,EAgBHA,OACAC,EAjBG,EAiBHA,OACAC,EAlBG,EAkBHA,OACAC,EAnBG,EAmBHA,QACA/1B,EApBG,EAoBHA,MACA8yB,EArBG,EAqBHA,OACAkD,EAtBG,EAsBHA,WACAC,EAvBG,EAuBHA,OACA3K,EAxBG,EAwBHA,SACA7B,EAzBG,EAyBHA,SACAyM,EA1BG,EA0BHA,SACAC,EA3BG,EA2BHA,IACA3L,EA5BG,EA4BHA,KACAqC,EA7BG,EA6BHA,SACAwC,EA9BG,EA8BHA,MA9BG,EAgCuB,EAAK/vB,MAA3B0zB,EAhCD,EAgCCA,QAASvL,EAhCV,EAgCUA,SAENhjB,EAAI,EAAGA,EAAIsL,EAAK7R,OAAQuG,IAC/BsL,EAAKtL,GAAL,UAAuBqxB,EAAOrxB,GAAKqxB,EAAOrxB,GAAK,QAC/CsL,EAAKtL,GAAL,WAAwBsxB,EAAQtxB,GAAKsxB,EAAQtxB,GAAK,EAClDsL,EAAKtL,GAAL,KAAkBquB,GAAUA,EAAOruB,GAAKquB,EAAOruB,GAAGkmB,KAAO,GACzD5a,EAAKtL,GAAL,MAAmBquB,GAAUA,EAAOruB,GAAKquB,EAAOruB,GAAG8iB,MAAQ,IAC3DxX,EAAKtL,GAAL,MAAmBquB,GAAUA,EAAOruB,GAAKquB,EAAOruB,GAAG2iB,MAAQ,IAC3DrX,EAAKtL,GAAL,MACEuxB,GAAcA,EAAWvxB,GAAKuxB,EAAWvxB,GAAG2xB,SAAW,GACzDrmB,EAAKtL,GAAL,MACEuxB,GAAcA,EAAWvxB,GAAKuxB,EAAWvxB,GAAG4xB,SAAW,GACzDtmB,EAAKtL,GAAL,eAA4BuxB,GAAcA,EAAWvxB,GAAK,IAAM,GAChEsL,EAAKtL,GAAL,eAA4BuxB,GAAcA,EAAWvxB,GAAK,IAAM,GAE9D9F,EAAU,CACZkuB,WACAkB,gBAAiB8H,EACjBjM,KAAiB,QAAX+L,EACNpK,KAAiB,QAAXqK,EACNlD,OAAQyD,EACR3L,OACAjB,OAAQuK,EACR1I,OAAQ4I,EACRxK,MAAOuK,EACP1I,MAAO4I,EACPrJ,QAASuK,EACTxJ,QAAS0J,EACTxK,OAAQuK,EACRxJ,OAAQ0J,EACRt1B,MAAOA,EACPoK,MAAO6rB,EACP3K,WACA7B,WACAhC,WACAsJ,QAASmF,EACTtJ,SAAUqJ,EACVrD,oBAAqB,MAAQI,GAE3BuC,IAAM52B,EAAO,KAAW42B,GACxBC,IAAM72B,EAAO,KAAW62B,GACxBC,IAAM92B,EAAO,KAAW82B,GACxBC,IAAM/2B,EAAO,KAAW+2B,GACxBrG,IAAO1wB,EAAO,MAAY0wB,GAC9BmD,GAAc,MAAQQ,EAASjjB,EAAMpR,GA5EhC,4C,uDA+EP,WACE,IAAMq0B,EAAYr1B,KAAK2B,MAAjB0zB,QACNr1B,KAAKk1B,OACLnzB,OAAOue,iBAAiB,SAAUtgB,KAAKk1B,MAAM,GAC7C9U,SACGC,eAAe,MAAQgV,GACvB/U,iBAAiB,SAAUtgB,KAAKk1B,MAAM,K,kCAG3C,WACE,IAAMG,EAAYr1B,KAAK2B,MAAjB0zB,QACNtzB,OAAO42B,oBAAoB,SAAU34B,KAAKk1B,MAAM,GAChD9U,SACGC,eAAe,MAAQgV,GACvBsD,oBAAoB,SAAU34B,KAAKk1B,MAAM,K,gCAG9C,SAAmB/yB,EAAWwhB,GACvBiV,IAAQz2B,EAAWnC,KAAKP,QAC3BO,KAAKk1B,OAEHvR,EAAUmG,WAAa9pB,KAAK2B,MAAMmoB,UACpC9pB,KAAKk1B,S,oBAIT,WACE,IAAI,EAA8Cl1B,KAAK2B,MAAjD0zB,EAAN,EAAMA,QAASnE,EAAf,EAAeA,SAAUqE,EAAzB,EAAyBA,WAAYzL,EAArC,EAAqCA,SACjC,EAAoB9pB,KAAKP,MAAvB4C,EAAN,EAAMA,MACN,OADA,EAAai2B,OAEX,yBAAKl5B,UAAU,kBAAkByX,GAAI,MAAQwe,IAE7C,yBAAKj2B,UAAWm2B,EAAa,gBAAkB,YAC7C,yBAAKn2B,UAAU,iBAAiByX,GAAG,OACV,IAAtB7W,KAAKP,MAAMo5B,QACV,yBAAKz5B,UAAU,oBACb,kBAAC,IAAD,CACEyX,GAAIwe,EACJhzB,MAAOA,EACP6uB,SAAUA,EACVqE,WAAYA,EACZzL,SAAUA,EACV2L,eAAgBz1B,KAAKy1B,eACrBC,iBAAkB11B,KAAK01B,iBACvBF,aAAcx1B,KAAKw1B,aACnByB,aAAcj3B,KAAKi3B,aACnBpB,YAAa71B,KAAK61B,eAIxB,yBACEz2B,WACwB,IAAtBY,KAAKP,MAAMo5B,OACP,kBACA,uBAENhiB,GAAI,MAAQwe,U,GApUEh2B,cA4UX+1B,Q,8EChVT0D,G,mNACJn3B,MAAQ,CACNC,KAAMG,OAAOg3B,WAAa,IAC1BC,QAAQ,G,EAGVn3B,OAAS,WACP,EAAKC,SAAS,CAAEk3B,QAAQ,IAAS,WAC/Bj3B,OAAOC,cAAc,IAAIC,MAAM,WAC/B,EAAKH,SAAS,CAAEk3B,QAAQ,OAE1B,EAAKl3B,SAAS,CAAEF,MAAO,EAAKD,MAAMC,Q,4CAGpC,WAAU,IAAD,OACCA,EAAS5B,KAAK2B,MAAdC,KACAq3B,EAASj5B,KAAKP,MAAdw5B,KACR,OACE,yBAAK75B,UAAW,iBAAmB65B,EAAO,QAAU,KAClD,yBAAK75B,UAAWwC,EAAO,gBAAkB,sBACtC5B,KAAKP,MAAM+Y,MAEd,yBAAKpZ,UAAWwC,EAAO,iBAAmB,uBACxC,yBACExC,UAAU,YACViD,MAAOT,EAAO,gBAAkB,eAChCH,QAAS,kBAAM,EAAKI,WAEpB,yBAAKzC,UAAU,gBAAgBY,KAAKP,MAAMy5B,cAAoB,IAC7Dt3B,EAAO,sCAAsB,8BAAO,MAEvC,yBAAKxC,UAAU,gBACZ,kBAAmBY,KAAKP,OAASO,KAAKP,MAAM05B,cAC5C,UAAWn5B,KAAKP,OACf,yBAAKL,UAAU,UAAUY,KAAKP,MAAMgZ,OAEtC,yBAAKrZ,UAAU,sB,GApCCC,cA4Cby5B,O,+BC/Cf,kCAAO,IAAMM,EAAa,SAACC,GAAwB,IAC7CrkB,EAD0BskB,EAAkB,wDAE5CC,EAAQF,EAAI/B,QAAQ,OAAQ,IAAI9W,MAAM,KAAK,GAAGA,MAAM,KAAK,GACzDgZ,EAAaH,EAAI/B,QAAQ,OAAQ,IAAI9W,MAAM,KAAK,GAAGA,MAAM,KAAK,GAelE,OAbI6Y,EAAIpiB,SAAS,mBAEbjC,EADEskB,EACC,uCAAmCC,EAAnC,YAA4CC,GAE5C,qCAAiCD,EAAjC,YAA0CC,GAEtCH,EAAIpiB,SAAS,0BACtBjC,EAAG,qCAAiCukB,EAAjC,YAA0CC,GACpCH,EAAIpiB,SAAS,cACtBjC,EAAG,6BAAyBukB,EAAzB,YAAkCC,GAC5BH,EAAIpiB,SAAS,gBACtBjC,EAAG,6BAAyBukB,EAAzB,YAAkCC,IAEhCxkB,I,mHCPHykB,G,oQACJC,WAAa,SAAC94B,GACRA,EAAE+4B,SACJ,EAAKC,UAAUC,U,EAkGnBC,YAAc,SAAC9a,GACb,IACE,EAAKtb,IAAIkd,YAAY,EAAKmZ,SAC1B,MAAOn5B,IAET,IAAK,IAICo5B,EAIAC,EAMAxV,EAGIxS,EAAUC,EAAW7P,EAAOwU,EAAIqjB,EAAKlX,EAjB3C,aACF,MAA8B,EAAKvjB,MAA3B06B,EAAR,EAAQA,WAAYlX,EAApB,EAAoBA,MACR,SACA,UACR+W,EAAOz3B,IAAEqc,QAAQ,CACnBxf,UAAW,aACXub,KAAK,eAAD,OAJM,SAIN,qCAHM,UAGN,gBAEFsf,EAAa13B,IAAEqc,QAAQ,CACzBxf,UAAW,aACXub,KAAK,eAAD,OARM,SAQN,8CAGN,EAAKof,QAAUx3B,IAAEod,qBACb8E,EAASliB,IAAEsH,eACf,IAAK,IAAI/C,EAAI,EAAGA,EAAIkY,EAASze,OAAQuG,IAAK,CACxC,IAAI8Y,EAAUZ,EAASlY,GAIvB,GAHMmL,EAAgD2N,EAAhD3N,SAAUC,EAAsC0N,EAAtC1N,UAAW7P,EAA2Bud,EAA3Bvd,MAAOwU,EAAoB+I,EAApB/I,GAAIqjB,EAAgBta,EAAhBsa,IAAKlX,EAAWpD,EAAXoD,OAC3C/Q,EAAWkM,WAAWlM,GACtBC,EAAYiM,WAAWjM,IACL,OAAdD,IAAqC,OAAfC,EAExB,GADAuS,EAAO9hB,OAAO,CAACsP,EAAUC,IACrB7P,GAASwU,EACX,EAAKkjB,QAAQh1B,SACX,IAAIxC,IAAEmc,OAAO,CAACzM,EAAUC,GAAY,CAClCyM,KAAMqb,IACLnkB,UAFH,8BAEoCgB,EAFpC,aAE2CxU,EAF3C,eAIG,GAAI63B,GAAOC,EAAY,CAC5B,IAAIC,EAASJ,EACThN,EAAO,cACP/J,EAAMhM,SAAS+L,KACjBoX,EAASH,EACTjN,EAAO,iBAET,IAAI7sB,EAAQ,IAAIqX,KAAK0iB,GACrB,EAAKH,QAAQh1B,SACX,IAAIxC,IAAEmc,OAAO,CAACzM,EAAUC,GAAY,CAClCyM,KAAMyb,EACNvjB,GAAImM,IAEH/M,YAJH,6CAK0C+W,EAL1C,0BAMM7sB,EAAMk6B,eAAiB,IAAMl6B,EAAMm6B,qBANzC,4CAOwC1a,EAAQ2a,QAPhD,WASGr2B,GAAG,SAAS,SAACtD,GACZu5B,EAAWv5B,YAIjB,EAAKm5B,QAAQh1B,SACX,IAAIxC,IAAEmc,OAAO,CAACzM,EAAUC,GAAY,CAClCyM,KAAMqb,KAOhB,OADA,EAAKt2B,IAAIqB,SAAS,EAAKg1B,SACjB,CAAN,EAAOtV,GA5DL,qCA6DF,MAAO7jB,GACPua,QAAQqD,MAAM5d,K,uDAjKlB,WACE,MAA8CZ,KAAKP,MAA3Cuf,EAAR,EAAQA,SAAUwb,EAAlB,EAAkBA,aAAcC,EAAhC,EAAgCA,UAqBhC,GAjBAz6B,KAAK0D,IAAMnB,IAAEmB,IAAI,YAAa,CAC5B0E,OAJW,CAAC,MAAO,MAKnBqE,KAJS,EAKT2Y,QAAS,EACTC,QAAS,GACTqV,OAAQ,CAENn4B,IAAEuiB,UACA,gNACA,CACEC,YACE,oKAMNyV,EAAc,CAChB,IAAIG,EAAa,IAAIp4B,IAAEq4B,aACvB56B,KAAK0D,IAAIqB,SAAS41B,GAClB,IAAIE,EAAc,IAAIt4B,IAAEu4B,QAAQC,KAAK,CACnCC,KAAM,CACJC,MAAM,EACN3gB,aAAcqgB,KAGlB36B,KAAK0D,IAAIw3B,WAAWL,GAEpB76B,KAAK45B,UAAY,IAAIr3B,IAAEw4B,KAAKI,UAC1Bn7B,KAAK0D,IACLm3B,EAAY75B,QAAQm6B,WAGtBn7B,KAAK0D,IAAIQ,GAAG,gBAAgB,SAAUtD,GACpC,IAAI+T,EAAQ/T,EAAE+T,MACd6lB,EAAa7lB,EAAMymB,SAAS,IAC5BT,EAAWrY,cACXqY,EAAW51B,SAAS4P,MAEtB3U,KAAK26B,WAAaA,EAClB54B,OAAOue,iBAAiB,UAAWtgB,KAAK05B,YAItCe,GACFl4B,IAAE3C,QACCy7B,OAAO,CACNC,SAAU,WACVl5B,QAAS,wDACTm5B,QAAS,WACTh6B,MAAO,CACLi6B,OAAQ,OACRC,QAAS,YACTj6B,OAAQ,WAEVk6B,OAAQ,CACNxtB,MAAO,SAAUkE,GACfqoB,QAIL31B,MAAM9E,KAAK0D,KAIhB,IAAI+gB,EAASzkB,KAAK85B,YAAY9a,GAC9B,IACEhf,KAAK0D,IAAI8W,UAAUiK,EAAQ,CAAEY,QAAS,KACtC,MAAOzkB,O,gCAGX,WACEZ,KAAK0D,IAAIkhB,iBACT,MAA8B5kB,KAAKP,MAA3Buf,EAAR,EAAQA,SAAU2c,EAAlB,EAAkBA,QAClB,GAAIA,KAAa,aAAcA,GAAU,CACvC37B,KAAK26B,WAAWrY,cAChB,IAAImC,EAASzkB,KAAK85B,YAAY9a,GAC9B,IACEhf,KAAK0D,IAAI8W,UAAUiK,EAAQ,CAAEY,QAAS,IACtC,MAAOzkB,UAETZ,KAAK85B,YAAY9a,K,kCAIrB,WACEjd,OAAO42B,oBAAoB,UAAW34B,KAAK05B,c,oBAyE7C,WACE,OACE,kBAAC,IAAMzT,SAAP,KACE,yBAAK7mB,UAAU,aACb,yBAAKyX,GAAG,oB,GA/KMxX,cAsLTo6B,O,6BCjMf,oBAIAl3B,IAAEu4B,QAAQc,OAASr5B,IAAEu4B,QAAQn4B,OAAO,CAClCk5B,QAAS,QACT76B,QAAS,CACPs6B,SAAU,WACVzkB,GAAI,GACJxU,MAAO,GACPk5B,QAAS,GACTn5B,QAAS,GACTb,MAAO,GACPu6B,MAAO,GACPJ,OAAQ,IAEVK,UAAW,KACXt4B,MAAO,SAASC,GAOd,IAAK,IAAIrC,KANTrB,KAAK+7B,UAAYx5B,IAAE0C,QAAQC,OAAO,OAClClF,KAAK+7B,UAAUllB,GAAK7W,KAAKgB,QAAQ6V,GACjC7W,KAAK+7B,UAAU15B,MAAQrC,KAAKgB,QAAQqB,MACpCrC,KAAK+7B,UAAU38B,UAAYY,KAAKgB,QAAQu6B,QACxCv7B,KAAK+7B,UAAU1X,UAAYrkB,KAAKgB,QAAQoB,QAErBpC,KAAKgB,QAAQO,MAC9BvB,KAAK+7B,UAAUx6B,MAAMF,GAAUrB,KAAKgB,QAAQO,MAAMF,GAGpD,IAAK,IAAI+Q,KAAQpS,KAAKgB,QAAQ86B,MAC5B97B,KAAK+7B,UAAUnc,QAAQxN,GAAQpS,KAAKgB,QAAQ86B,MAAM1pB,GAcpD,IAAK,IAAImO,KAVThe,IAAEy5B,SAASC,wBAAwBj8B,KAAK+7B,WAGxCx5B,IAAEy5B,SAAS93B,GAAGlE,KAAK+7B,UAAW,eAAe,SAASG,GACpD35B,IAAEy5B,SAASG,gBAAgBD,MAI7B35B,IAAEy5B,SAASI,yBAAyBp8B,KAAK+7B,WAEvB/7B,KAAKgB,QAAQ06B,OAC7Bn5B,IAAEy5B,SAAS93B,GACTlE,KAAK+7B,UACLxb,EACAvgB,KAAKgB,QAAQ06B,OAAOnb,GACpBvgB,KAAK+7B,WAIT,OAAO/7B,KAAK+7B,WAGdr3B,SAAU,SAAShB,GACjB,IAAK,IAAI6c,KAASvgB,KAAKgB,QAAQ06B,OAC7Bn5B,IAAEy5B,SAASn3B,IACT7E,KAAK+7B,UACLxb,EACAvgB,KAAKgB,QAAQ06B,OAAOnb,GACpBvgB,KAAK+7B,cAMbx5B,IAAE3C,QAAQy7B,OAAS,SAASr6B,GAC1B,OAAO,IAAIuB,IAAEu4B,QAAQc,OAAO56B,K,0ECpE9B,oBAEAuB,IAAE85B,UAAUC,YAAc/5B,IAAE85B,UAAU15B,OAAO,CAC3C3B,QAAS,CACPu7B,YAAa,aAEfhuB,SAAU,SAAUF,GAClB,IAAIhJ,EAAOrF,KAAKw8B,cACZrwB,EAAQnM,KAAKoD,KAAKq5B,QAAQpuB,EAAQrO,KAAK08B,WAAWhyB,QAClD4K,EAASnJ,EAAMwwB,UAAUt3B,GAAMqF,QAC/BgC,EAASP,EAAMU,SAASyI,EAAOsnB,QAAQv3B,IAC3CiQ,EAAO8D,EAAIpZ,KAAK08B,UAChB,IAAIG,EAAO78B,KAAK88B,OAAO98B,KAAK+8B,iBAAiBznB,IAC7C,IAAKunB,IAASA,EAAKG,OAAQ,OAAO,KAClC,IACE,IAAIh4B,EAASob,SAASsQ,cAAc,UACpC1rB,EAAOO,MAAQ,EACfP,EAAOlF,OAAS,EAChB,IAAIyyB,EAAUvtB,EAAOY,WAAW,MAEhC,OADA2sB,EAAQtB,UAAU4L,EAAKI,IAAKvwB,EAAO3L,GAAI2L,EAAOlH,EAAGH,EAAKtE,EAAGsE,EAAKG,GACvD+sB,EAAQ2K,aAAa,EAAG,EAAG,EAAG,GAAG9qB,KACxC,MAAOxR,GACP,OAAO,SAIb2B,IAAEuiB,UAAUS,YAAc,SAAUvQ,EAAKhU,GACvC,OAAO,IAAIuB,IAAE85B,UAAUC,YAAYtnB,EAAKhU,K,wPCfpCm8B,G,mNAWJC,cAAgB,SAACx8B,GACf,IAAI,EAAmB,EAAKnB,MAAtBoX,EAAN,EAAMA,GAAN,EAAUqa,WAGP9Q,SAASC,eAAe,gBAAkBxJ,GAAIwmB,SAASz8B,EAAEwO,SAE1D,EAAK3P,MAAMg2B,kB,EAIf6H,eAAiB,SAAC18B,GAChB,IAAI,EAAmC,EAAKnB,MAAtC81B,EAAN,EAAMA,WAAYG,EAAlB,EAAkBA,iBACJ,WAAV90B,EAAE+V,KAAoB4e,GACxBG,K,uDAvBJ,WACE3zB,OAAOue,iBAAiB,UAAWtgB,KAAKs9B,gBAAgB,GACxDv7B,OAAOue,iBAAiB,QAAStgB,KAAKo9B,eAAe,K,kCAGvD,WACEr7B,OAAO42B,oBAAoB,UAAW34B,KAAKs9B,gBAAgB,GAC3Dv7B,OAAO42B,oBAAoB,QAAS34B,KAAKo9B,eAAe,K,oBAoB1D,WACE,IAAI,EAeAp9B,KAAKP,MAdPoX,EADF,EACEA,GACAxU,EAFF,EAEEA,MACA6uB,EAHF,EAGEA,SACAqE,EAJF,EAIEA,WACAnR,EALF,EAKEA,QACA0F,EANF,EAMEA,SACA0L,EAPF,EAOEA,aACA+H,EARF,EAQEA,aACAC,EATF,EASEA,aACA/H,EAVF,EAUEA,eACAC,EAXF,EAWEA,iBACA+H,EAZF,EAYEA,cACAxG,EAbF,EAaEA,aACApB,EAdF,EAcEA,YAEE6H,EAAY,aACZC,EAAWC,IACXrI,IACFmI,EAAY,aACZC,EAAWE,KAEb,IAAIC,EAAe,mBACfC,EAAcC,IAKlB,MAJgB,YAAZ5Z,IACF0Z,EAAe,sBACfC,EAAcE,KAGd,kBAAC,IAAMhY,SAAP,KACE,yBAAK7mB,UAAU,cACb,2BAAOA,UAAU,iBACf,+BACE,4BACE,wBAAIA,UAAU,SAASiD,GACtBm7B,GACC,wBAAIj8B,MAAO,CAAEgE,MAAO,SAClB,yBACE8rB,IAAK6M,IACLzY,IAAI,SACJhkB,QAAS+7B,EACTn7B,MAAM,oBAIXk7B,GACC,wBAAIh8B,MAAO,CAAEgE,MAAO,SAClB,yBACE8rB,IAAK8M,IACL1Y,IAAI,SACJhkB,QAAS87B,EACTl7B,MAAM,oBAIX+hB,GACC,wBAAI7iB,MAAO,CAAEgE,MAAO,SAClB,yBACE8rB,IAAK0M,EACLtY,IAAI,UACJhkB,QAASg8B,EACTp7B,MAAOy7B,KAIb,wBAAIjnB,GAAI,gBAAkBA,EAAItV,MAAO,CAAEgE,MAAO,SAC5C,yBACE8rB,IAAK+M,IACL3Y,IAAI,WACJhkB,QAASg0B,EACTpzB,MAAM,aAER,yBACEjD,UAAW8xB,EAAW,cAAgB,oBAEtC,+CACA,4BAAQra,GAAI,MAAQA,EAAIxU,MAAM,gBAA9B,OAGA,4BACEjD,UAAU,OACVqC,QAASw1B,EACT50B,MAAM,oBAHR,QAOA,4BACEjD,UAAU,MACVqC,QAASo0B,EACTxzB,MAAM,mBAHR,SASHynB,GACC,wBAAI1qB,UAAU,WAAWmC,MAAO,CAAEgE,MAAO,SACvC,yBACE8rB,IAAKgN,IACL5Y,IAAI,YACJhkB,QAASg8B,EACTp7B,MAAM,mBAER,yBAAKjD,UAAU,qBACZ,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAIsE,KAAI,SAAC46B,GAAD,OACvC,yBACE3nB,IAAK,WAAa2nB,EAClBl/B,UAAW0qB,IAAawU,EAAO,MAAQ,GACvC78B,QAAS,kBAAM+zB,EAAa8I,KAE3BA,QAMX,wBAAI/8B,MAAO,CAAEgE,MAAO,SAClB,yBACE8rB,IAAKsM,EACLlY,IAAI,oBACJhkB,QAASi0B,EACTrzB,MAAOq7B,KAGX,wBAAIn8B,MAAO,CAAEgE,MAAO,SAClB,yBAAKlD,MAAM,OAAOjD,UAAU,gBAC1B,yBACEiyB,IAAKkN,IACL9Y,IAAI,YACJpjB,MAAO,0BAET,yBAAKjD,UAAU,aACb,+BACE,+BACE,4BACE,0CACA,iEAEF,4BACE,2CACA,8DAEF,4BACE,2CACA,8DAEF,4BACE,qCACA,wE,GAjLFC,cAiMX89B,O,kWC4BAqB,G,mNApObC,c,sBAAgB,+CA4CDC,EA5CC,MA8EDrpB,EA9EC,MAmJD5T,EAOAk9B,EAKAC,EAKAC,EAYAC,EASAC,EAzLC,SAAA5zB,EAAA,sDACd,IACE0G,IAAU,qBAAqB2f,SAC/B3f,IAAU,iBAAiB2f,SAC3B,MAAO5wB,IAQT,GAZc,EAWV,EAAKnB,MALP0jB,EANY,EAMZA,eACA5J,EAPY,EAOZA,MACAylB,EARY,EAQZA,SACAxhB,EATY,EASZA,SACAyhB,EAVY,EAUZA,cAEE9b,EAAe5iB,OAAS,IAAMiJ,MAAMw1B,KAAcx1B,MAAMgU,GAC1D,IA4KWuhB,EA5KP,SA4KmBxlB,GAKnB,IAJA,IAAI2lB,EAAW,qCACb34B,KAAKkF,MAAc,IAAR8N,GAAe,IADb,yBAGX4lB,EAAc,iBACTr4B,EAAI,EAAGA,EAAIqc,EAAe5iB,OAAQuG,IACzCq4B,EACEA,EAAW,kBACAhc,EAAerc,GAAGzE,MADlB,8BAC6C8gB,EAAerc,GAAG0B,MAD/D,kCAC8F2a,EAAerc,GAAGkP,KADhH,eAAX,2BAEoB8oB,EAClB3b,EAAerc,GAAGmc,MAClB1J,GAJF,uBAQJ,OAAO2lB,GADPC,GAA4B,qBAvBrBL,EAnKP,SAmKqB7b,EAAO1J,GAE5B,IADA,IAAI/Q,EAAQ,MACH1B,EAAI,EAAGA,EAAImc,EAAM1iB,OAAQuG,IAC5ByS,GAAS0J,EAAMnc,GAAGk4B,UAAYzlB,GAAS0J,EAAMnc,GAAG0W,WAClDhV,EAAQ,SAEZ,OAAOA,GAlBAq2B,EAvJP,SAuJiBte,GACjB,IACE6e,EAAMtW,KAAK,KAAMjX,IAAW0O,GAAO,IACnC,MAAO3f,IACT,IACEquB,EACG1tB,MAAM,MAAOsQ,IAAW0O,GAAO,GAAK,GAAK,MACzC5F,KAAKokB,EAAYv5B,EAAE65B,OAAOxtB,IAAW0O,GAAO,MAC5Chf,MAAM,OAAQ,QACjB,MAAOX,MAdFg+B,EAlJP,WAmJAQ,EAAM79B,MAAM,UAAW,GACvB0tB,EAAQ1tB,MAAM,aAAc,WAPrBo9B,EA7IP,WA8IAS,EAAM79B,MAAM,UAAW,GACvB0tB,EAAQ1tB,MAAM,aAAc,YATrBE,EAtIP,SAsIe8e,GACf,IAAIhH,EAAQ/T,EAAE65B,OAAOxtB,IAAW0O,GAAO,IACvChH,EAAQhT,KAAKkF,MAAc,IAAR8N,GAAe,IAClC+lB,EAAQxW,KAAK,KAAMjX,IAAW0O,GAAO,IACrC0e,EAAc1lB,IAzEPlE,EAjEP,WAmEA,IAAIkqB,EADJ1tB,IAAU,iBAAiBkb,UAAU,KAAKyE,SAE1C,IAHkB,eAGT1qB,GACPy4B,EAAQpc,EAAerc,GAAGmc,MAAMvf,KAAI,SAAC3C,GAAD,MAAQ,CAC1C8G,IAAK9G,EAAEi+B,SACPp3B,IAAK7G,EAAEyc,aAETgiB,EACGzS,UAAU,OACV3a,KAAKmtB,GACL9Q,QACA5F,OAAO,QACPC,KAAK,QAAS,GACdA,KAAK,UAAU,SAAU9hB,GACxB,OAAOT,KAAKqB,IAAI,EAAGpC,EAAEwB,EAAEY,KAAOpC,EAAEwB,EAAEa,SAEnCihB,KAAK,SAAU3F,EAAerc,GAAG0B,OACjCsgB,KAAK,OAAQ3F,EAAerc,GAAG0B,OAC/BsgB,KAAK,KAAK,SAAU9hB,GACnB,OAAOxB,EAAEwB,EAAEa,QAEZihB,KAAK,KAAK,SAAU9hB,GACnB,OAAW,EAAJF,EAAQ,MApBZA,EAAI,EAAGA,EAAIqc,EAAe5iB,OAAQuG,IAAM,EAAxCA,IArCF43B,EA/BP,SA+Bcne,GACd/a,EAAE6kB,OAAO9J,EAAMwS,UAAUG,SAAS/Z,GAAIkR,UACtChV,IACAiqB,EAAQxW,KAAK,KAAMtjB,EAAE+T,IACrBkmB,EAAGtsB,KAAK4b,IAjCNyM,EAAS,CAAEkE,IAAK,GAAIjnB,MAAO,GAAIknB,OAAQ,GAAInnB,KAAM,IACnDonB,EAAY/tB,IAAU,kBAAkBe,OAAO2W,wBAC5CzpB,OACH+/B,EAAWrE,EAAOhjB,KAAOgjB,EAAO/iB,MAAgC,EAAxB0K,EAAe5iB,OACvDgF,EAAQs6B,EAAWrE,EAAOhjB,KAAOgjB,EAAO/iB,MACxC3Y,EAAS8/B,EAAYpE,EAAOkE,IAAMlE,EAAOmE,OAGvCn6B,EAAIqM,MAELma,MAAM,CAAC,EAAGlsB,IACVuqB,OAAO,CAAC2U,EAAUxhB,IACjBrE,EAAKtH,MAENma,MAAM,CAAC,EAAGlsB,IACVuqB,OAAO,CAAC2U,EAAUxhB,IAGjBuR,EAAQld,IAAYrM,GAAGinB,MAAM,GAE7BhgB,EAAOoF,MAERiuB,YAAY,CAAC,EAAG,MAChBtrB,OAAO,CACN,CAAC,EAAG,GACJ,CAACjP,EAAOzF,KAEToE,GAAG,OAAQw6B,GAUV9V,EAAM/W,IACA,kBACPgX,OAAO,OACPC,KAAK,KAAM,oBACXA,KAAK,QAASvjB,EAAQi2B,EAAOhjB,KAAOgjB,EAAO/iB,OAC3CqQ,KAAK,SAAUhpB,EAAS07B,EAAOkE,IAAMlE,EAAOmE,QAC5C9W,OAAO,KACPC,KACC,YACA,aAAe0S,EAAOhjB,KAAO,IAAMgjB,EAAOkE,IAAM,KAEjDvsB,KAAK1G,GAGJgzB,EAAK7W,EACNC,OAAO,KACPC,KAAK,QAAS,SACdA,KAAK,KAAM,WACX3V,KAAK4b,GAGJyQ,EAAO5W,EACRC,OAAO,KACPC,KAAK,QAAS,QACdA,KAAK,KAAM,gBA8BdzT,IAGI+pB,EAAQxW,EACTC,OAAO,KACPA,OAAO,UACPtnB,MAAM,OAAQ,WACdunB,KAAK,SAAU,WACfA,KAAK,IAAK,GACVA,KAAK,KAAM,GACXvnB,MAAM,UAAW,GAGhB+9B,EAAU1W,EACXC,OAAO,KACPA,OAAO,UACPtnB,MAAM,OAAQ,OACdunB,KAAK,SAAU,OACfA,KAAK,IAAK,GACVA,KAAK,KAAM,GACXA,KAAK,KAAMtjB,EAAE+T,IAGZ0V,EAAUpd,IACJ,kBACPgX,OAAO,OACPC,KAAK,KAAM,gBACXA,KAAK,QAAS,gBAEjBF,EACGC,OAAO,QACPtnB,MAAM,OAAQ,QACdA,MAAM,iBAAkB,OACxBunB,KAAK,QAASvjB,EAAQi2B,EAAOhjB,KAAOgjB,EAAO/iB,OAC3CqQ,KAAK,SAAUhpB,GACfgpB,KAAK,YAAa,cAAgB0S,EAAOhjB,KAAvB,OAClBtU,GAAG,YAAay6B,GAChBz6B,GAAG,YAAa26B,GAChB36B,GAAG,WAAY06B,GACf16B,GAAG,QAASzC,GAyDf,MAAOb,GACPua,QAAQqD,MAAM,+BAAgC5d,GA3MpC,2C,uDA+MhB,WACEZ,KAAKy+B,gBACL18B,OAAOue,iBAAiB,SAAUtgB,KAAKy+B,eAAe,K,kCAGxD,WACE18B,OAAO42B,oBAAoB,SAAU34B,KAAKy+B,eAAe,K,gCAG3D,SAAmBt8B,EAAWwhB,GAC5B3jB,KAAKy+B,kB,oBAEP,WACE,OACE,yBAAKr/B,UAAU,iBACb,yBAAKyX,GAAG,uB,GA/NYxX,cCEtB0gC,E,4MACJC,WAAa,SAACzf,GACZ,IAAM0f,EAAe,EAAKxgC,MAApBwgC,WACF1f,EAAM2f,OAAS,EACjBD,EAAW,MACF1f,EAAM2f,OAAS,GACxBD,GAAY,O,EAGhBE,WAAa,SAAC5f,GACZ,IAAM0f,EAAe,EAAKxgC,MAApBwgC,WACF1f,EAAM2f,OAAS,EACjBD,EAAW,IACF1f,EAAM2f,OAAS,GACxBD,GAAY,K,EAGhBG,YAAc,SAAC7f,GACS,KAAlBA,EAAM8f,SACR,EAAK5gC,MAAM6gC,a,uDAGf,WACElgB,SAASE,iBAAiB,UAAWtgB,KAAKogC,aAAa,K,kCAEzD,WACEhgB,SAASuY,oBAAoB,UAAW34B,KAAKogC,aAAa,K,oBAE5D,WACE,IAAI,EAAsCpgC,KAAKP,MAAzC0X,EAAN,EAAMA,SAAU8oB,EAAhB,EAAgBA,WAAYK,EAA5B,EAA4BA,UACxBC,EAAQppB,EAAS+J,WACjBsf,EAAUD,EAAQ,GAAK,IAAMA,EAAQA,EAAME,WAC3CC,EAAOvpB,EAAS0P,aAChB8Z,EAAUD,EAAO,GAAK,IAAMA,EAAOA,EAAKD,WAC5C,OACE,yBAAKrhC,UAAU,eACb,yBAAKA,UAAU,aAAaqC,QAAS6+B,GACnC,yBAAKlhC,UAAU,QAAf,WAEF,yBAAKA,UAAU,eACb,+BACE,+BACE,4BACE,wBAAIA,UAAU,aAAaqC,QAAS,kBAAMw+B,EAAW,QAArD,UAGA,6BACA,wBAAI7gC,UAAU,aAAaqC,QAAS,kBAAMw+B,EAAW,MAArD,UAGA,8BAEF,4BACE,wBAAIW,QAAS5gC,KAAKggC,YAAaQ,GAC/B,iCACA,wBAAII,QAAS5gC,KAAKmgC,YAAaQ,GAC/B,4BAAKJ,EAAQ,GAAK,KAAO,OAE3B,4BACE,wBAAInhC,UAAU,aAAaqC,QAAS,kBAAMw+B,GAAY,QAAtD,UAGA,6BACA,wBAAI7gC,UAAU,aAAaqC,QAAS,kBAAMw+B,GAAY,MAAtD,UAGA,sC,GAlEQ5gC,aA4ElBwhC,E,4MACJC,WAAa,SAAC3pB,GACZ,IAAI,EAA2D,EAAK1X,MAA9DshC,EAAN,EAAMA,YAAaC,EAAnB,EAAmBA,iBAA4BC,EAA/C,EAAqC9pB,SACjCopB,EAAQU,EAAY/f,WACpBwf,EAAOO,EAAYpa,aACvB1P,EAAW,IAAIK,KAAKL,EAASG,UAAyC,KAApB,KAARipB,EAAsB,GAAPG,IACzDK,IACAC,EAAiB7pB,I,EAEnBipB,YAAc,SAAC7f,GACb,IAAMwgB,EAAgB,EAAKthC,MAArBshC,YACgB,KAAlBxgB,EAAM8f,SACRU,K,uDAGJ,WACE3gB,SAASE,iBAAiB,UAAWtgB,KAAKogC,aAAa,K,kCAEzD,WACEhgB,SAASuY,oBAAoB,UAAW34B,KAAKogC,aAAa,K,oBAE5D,WACE,IAAI,EAA4BpgC,KAAKP,MAA/B0X,EAAN,EAAMA,SAAU4pB,EAAhB,EAAgBA,YAChB,OACE,yBAAK3hC,UAAU,eACb,yBAAKA,UAAU,aAAaqC,QAASs/B,GACnC,yBAAK3hC,UAAU,QAAf,WAEF,yBAAKA,UAAU,eACb,kBAAC,IAAD,CAAU8B,SAAUlB,KAAK8gC,WAAY3gC,MAAOgX,U,GA7B9B9X,aAoClB6hC,E,4MACJC,YAAc,SAAC5nB,GACb,IAAI,EAAiC,EAAK9Z,MAApCshC,EAAN,EAAMA,YAAa9B,EAAnB,EAAmBA,cACnB8B,IACA9B,EAAc1lB,I,EAEhB6mB,YAAc,SAAC7f,GACS,KAAlBA,EAAM8f,SACR,EAAKe,S,uDAGT,WACEhhB,SAASE,iBAAiB,UAAWtgB,KAAKogC,aAAa,K,kCAEzD,WACEhgB,SAASuY,oBAAoB,UAAW34B,KAAKogC,aAAa,K,oBAE5D,WACE,IAAI,EAA6DpgC,KAAKP,MAAhE8Z,EAAN,EAAMA,MAAO4J,EAAb,EAAaA,eAAgB6b,EAA7B,EAA6BA,SAAUxhB,EAAvC,EAAuCA,SAAUujB,EAAjD,EAAiDA,YACjD,OACE,yBAAK3hC,UAAU,eACb,yBAAKA,UAAU,aAAaqC,QAASs/B,GACnC,yBAAK3hC,UAAU,QAAf,WAEF,yBAAKA,UAAU,gBACb,kBAAC,EAAD,CACEma,MAAOA,EACP0lB,cAAej/B,KAAKmhC,YACpBhe,eAAgBA,EAChB6b,SAAUA,EACVxhB,SAAUA,U,GA9BGne,aAsCnBgiC,E,4MACJC,eAAiB,SAACC,GAChB,IAAI,EAAoC,EAAK9hC,MAAvCshC,EAAN,EAAMA,YAAaS,EAAnB,EAAmBA,iBACnBT,IACAS,EAAiBD,I,EAGnBnB,YAAc,SAAC7f,GACS,KAAlBA,EAAM8f,SACR,EAAKe,S,uDAGT,WACEhhB,SAASE,iBAAiB,UAAWtgB,KAAKogC,aAAa,K,kCAEzD,WACEhgB,SAASuY,oBAAoB,UAAW34B,KAAKogC,aAAa,K,oBAE5D,WAAU,IAAD,OACH,EAA2CpgC,KAAKP,MAA9CgiC,EAAN,EAAMA,cAAeF,EAArB,EAAqBA,SAAUR,EAA/B,EAA+BA,YAe/B,OACE,yBAAK3hC,UAAU,eACb,yBAAKA,UAAU,aAAaqC,QAASs/B,GACnC,yBAAK3hC,UAAU,QAAf,WAEF,yBAAKA,UAAU,mBACb,yBAAKA,UAAU,gBApBL,CACd,OACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,MACA,OASiBsE,KAAI,SAACqK,GAAD,OACb,yBACE3O,UAAW2O,IAAMwzB,EAAW,gBAAkB,OAC9C5qB,IAAK5I,EACLtM,QAAS,kBAAM,EAAK6/B,eAAevzB,KAElC0zB,EAAc1zB,QARvB,2B,GAvCoB1O,aAiJbqiC,E,4MAtFb//B,MAAQ,CACNwV,SAAU,EAAK1X,MAAM0X,U,EAEvB8oB,WAAa,SAAC0B,GACZ,IAAMxqB,EAAa,EAAKxV,MAAlBwV,SACNA,EAAW,IAAIK,KAAKL,EAASG,UAAuB,IAAXqqB,GACzC,EAAK7/B,SAAS,CAAEqV,c,EAElByqB,WAAa,SAACrhB,GACZ,IAAI,EAAoC,EAAK9gB,MAAvCshC,EAAN,EAAMA,YAAaC,EAAnB,EAAmBA,iBACY,cAA3BzgB,EAAMnR,OAAOhQ,YACf2hC,IACI,EAAKp/B,MAAMwV,SAASG,YAAc,EAAK7X,MAAM0X,SAASG,WACxD0pB,EAAiB,EAAKr/B,MAAMwV,Y,EAIlCmpB,UAAY,WACV,IAAI,EAAoC,EAAK7gC,MAAvCshC,EAAN,EAAMA,YAAaC,EAAnB,EAAmBA,iBACnBD,IACAC,EAAiB,EAAKr/B,MAAMwV,W,4CAE9B,WACE,IAAI,EAaAnX,KAAKP,MAZP0X,EADF,EACEA,SACAoC,EAFF,EAEEA,MACAgoB,EAHF,EAGEA,SACAP,EAJF,EAIEA,iBACAQ,EALF,EAKEA,iBACAvC,EANF,EAMEA,cACA4C,EAPF,EAOEA,MACAd,EARF,EAQEA,YACAU,EATF,EASEA,cACAzC,EAVF,EAUEA,SACAxhB,EAXF,EAWEA,SACA2F,EAZF,EAYEA,eAEcmE,EAAStnB,KAAK2B,MAAxBwV,SACN,OACE,yBAAK/X,UAAU,gBAAgBqC,QAASzB,KAAK4hC,YAC3C,+BACE,+BACE,4BACE,wBAAIxiC,UAAU,aACD,SAAVyiC,GACC,kBAAC,EAAD,CACE1qB,SAAUmQ,EACVyZ,YAAaA,EACbd,WAAYjgC,KAAKigC,WACjBK,UAAWtgC,KAAKsgC,YAGT,SAAVuB,GACC,kBAAC,EAAD,CACE1qB,SAAUA,EACV4pB,YAAaA,EACbC,iBAAkBA,IAGX,UAAVa,GACC,kBAAC,EAAD,CACEtoB,MAAOA,EACPwnB,YAAaA,EACb9B,cAAeA,EACfD,SAAUA,EACVxhB,SAAUA,EACV2F,eAAgBA,IAGT,aAAV0e,GACC,kBAAC,EAAD,CACEN,SAAUA,EACVR,YAAaA,EACbS,iBAAkBA,EAClBC,cAAeA,a,GA3EPpiC,a,iBCsEbyiC,G,mNAtRbngC,MAAQ,CACN0oB,QAAQ,EACR0X,cAAc,G,EAEhBC,aAAe,SAAC3X,GACd,EAAKA,OAASA,G,EAEhB+W,MAAQ,WACN,EAAKt/B,SAAS,CAAEigC,cAAc,K,EAEhCtD,c,sBAAgB,qDAiDDwD,EAOAvD,EAxDC,MA0FDrpB,EA1FC,MAoKD5T,EAWAk9B,EAKAC,EAKAC,EAkBAE,EA3MC,SAAA5zB,EAAA,sDACd,IACE0G,IAAU,oBAAoB2f,SAC9B3f,IAAU,YAAY2f,SACtB,MAAO5wB,IAUT,GAdc,EAWV,EAAKnB,MALP0jB,EANY,EAMZA,eACAhM,EAPY,EAOZA,SACAtC,EARY,EAQZA,YACAmD,EATY,EASZA,YACAgpB,EAVY,EAUZA,iBAEIe,EAAiB,EAAKpgC,MAAtBogC,aACFX,EAAQ,EAAKA,MACbje,EAAe5iB,QAAUsU,GAAemD,EAC1C,IA4LW+mB,EA5LP,SA4LmB5nB,GA2BnB,IA1BA,IAgBI+qB,EAAU,qCAAiC/qB,EAASmjB,mBACtD,GACA,CACE1T,KAAM,UACNub,OAAQ,YAJE,YAMThrB,EAAS4J,UANA,YAhBD,CACX,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAWO5J,EAAS6J,YAPJ,YAQV7J,EAAS8J,cARC,UASVke,EAAc,iBACTr4B,EAAI,EAAGA,EAAIqc,EAAe5iB,OAAQuG,IACzCq4B,EACEA,EAAW,kBACAhc,EAAerc,GAAGzE,MADlB,8BAC6C8gB,EAAerc,GAAG0B,MAD/D,kCAC8F2a,EAAerc,GAAGkP,KADhH,eAAX,2BAEoBmN,EAAerc,GAAG0B,MAFtC,uBAKJ,IAAIwf,EAASka,GADb/C,GAA4B,oBACY,mBAExC,OADAnX,EAAS+Z,EAnBP,sHAmB6B/Z,EAASA,GArDjC6W,EA1KP,SA0KiBte,GACjB,IACE6e,EAAMtW,KAAK,KAAMjX,IAAW0O,GAAO,IACnC,MAAO3f,IACT,IACEquB,EACG1tB,MAAM,OAAQsQ,IAAW0O,GAAO,GAAK,GAAK,MAC1C5F,KAAKokB,EAAYh+B,EAAEs+B,OAAOxtB,IAAW0O,GAAO,MAC5Chf,MACC,MAJJ,WAMMsQ,IAAU,YAAYe,OAAO2W,wBAAwBzpB,QACpD,GAAmC,GAA7BqjB,EAAe5iB,OAAS,IAPrC,OAUA,MAAOK,MApBFg+B,EArKP,WAsKAQ,EAAM79B,MAAM,UAAW,GACvB0tB,EAAQ1tB,MAAM,aAAc,WAPrBo9B,EAhKP,WAiKAS,EAAM79B,MAAM,UAAW,GACvB0tB,EAAQ1tB,MAAM,aAAc,YAbrBE,EArJP,SAqJe8e,GACf0O,EAAQ1tB,MAAM,aAAc,UAC5B69B,EAAM79B,MAAM,UAAW,GACvB,IAAI2W,EAAOnX,EAAEs+B,OAAOxtB,IAAW0O,GAAO,IACT,oBAAlBrI,EAAK8I,WACdggB,EAAiB9oB,GACjBonB,EAAQxW,KAAK,KAAMjX,IAAW0O,GAAO,IACrC6e,EAAM79B,MAAM,UAAW,KAjFlB8T,EA3EP,WA6EA,IAAIkqB,EADJ1tB,IAAU,SAASkb,UAAU,KAAKyE,SAElC,IAHkB,eAGT1qB,GACPy4B,EAAQpc,EAAerc,GAAGmc,MAAMvf,KAAI,SAAC3C,GAAD,MAAQ,CAC1C8G,IAAK,IAAI2P,KAAKzW,EAAE8T,aAChBjN,IAAK,IAAI4P,KAAKzW,EAAEiX,iBAElBwnB,EACGzS,UAAU,OACV3a,KAAKmtB,GACL9Q,QACA5F,OAAO,QACPC,KAAK,SAAU,GACfA,KAAK,SAAS,SAAU9hB,GACvB,OAAOT,KAAKqB,IAAI,EAAG7G,EAAEiG,EAAEY,KAAO7G,EAAEiG,EAAEa,SAEnCihB,KAAK,SAAU3F,EAAerc,GAAG0B,OACjCsgB,KAAK,OAAQ3F,EAAerc,GAAG0B,OAC/BsgB,KAAK,KAAK,SAAU9hB,GACnB,OAAOjG,EAAEiG,EAAEa,QAEZihB,KAAK,KAAK,SAAU9hB,GACnB,OAAW,EAAJF,MApBJA,EAAI,EAAGA,EAAIqc,EAAe5iB,OAAQuG,IAAM,EAAxCA,IArCF43B,EAzCP,SAyCcne,GAEd,GADAlL,IACIkL,EAAO,CACT,IAAIvZ,EAAIuZ,EAAMwS,UAAUE,SAAS/Z,GAAImR,SACrCtpB,EAAEspB,OAAOrjB,GACTs4B,EAAQxW,KAAK,KAAM/nB,EAAEoW,IAEvBggB,EAAGhkB,KAAK2b,IAdDmT,EAlCP,SAkCe1hB,GACXA,IACFyhB,EAAazhB,EAAMwS,UAAUE,SAAS/Z,GAAImR,UACtC0X,GAAcX,MAnClB5F,EAAS,CAAEkE,IAAK,EAAGjnB,MAAO,GAAIknB,OAAQ,GAAInnB,KAAM,GAClDqnB,EAAWhuB,IACD,iBACPe,OACA2W,wBAAwBhkB,MAC3Bq6B,EAAYpE,EAAOmE,OAAiC,EAAxBxc,EAAe5iB,OAC3CgF,EAAQs6B,EAAWrE,EAAOhjB,KAAOgjB,EAAO/iB,MACxC3Y,EAAS8/B,EAAYpE,EAAOkE,IAAMlE,EAAOmE,OAGvC5+B,EAAI8Q,MAELma,MAAM,CAAC,EAAGzmB,IACV8kB,OAAO,CAACxV,EAAamD,IACpBkB,EAAKrH,MAENma,MAAM,CAAC,EAAGzmB,IACV8kB,OAAO,CAACxV,EAAamD,IAGpB8W,EAAQjd,IAAc9Q,GAAG0rB,MAAM,GAE/BuV,EAAe,EAAKA,aACpBv1B,EAAOoF,MAER2C,OAAO,CACN,CAAC,EAAG,GACJ,CAACjP,EAAOzF,KAEToE,GAAG,OAAQw6B,GACXx6B,GAAG,MAAO+9B,GAoBTrZ,EAAM/W,IACA,iBACPgX,OAAO,OACPC,KAAK,KAAM,mBACXA,KAAK,QAASvjB,EAAQi2B,EAAOhjB,KAAOgjB,EAAO/iB,OAC3CqQ,KAAK,SAAUhpB,EAAS07B,EAAOkE,IAAMlE,EAAOmE,QAC5C9W,OAAO,KACPC,KACC,YACA,aAAe0S,EAAOhjB,KAAO,IAAMgjB,EAAOkE,IAAM,KAEjDvsB,KAAK1G,GAGJ0qB,EAAKvO,EACNC,OAAO,KACPC,KAAK,QAAS,SACdA,KAAK,KAAM,WACXA,KAAK,YAAa,eAAiBhpB,EAAS,KAC5CqT,KAAK2b,GAGJ0Q,EAAO5W,EAAIC,OAAO,KAAKC,KAAK,QAAS,QAAQA,KAAK,KAAM,QA6B5DzT,IAEI,EAAKgV,SACPtpB,EAAEspB,OAAO,EAAKA,QACdnR,EAAGmR,OAAO,EAAKA,QACfqU,GAAO,IAILU,EAAQxW,EACTC,OAAO,KACPA,OAAO,UACPtnB,MAAM,OAAQ,WACdunB,KAAK,SAAU,WACfA,KAAK,IAAK,GACVA,KAAK,KAA8B,EAAxB3F,EAAe5iB,QAC1BgB,MAAM,UAAW,GAGhB+9B,EAAU1W,EACXC,OAAO,KACPA,OAAO,UACPtnB,MAAM,OAAQ,OACdunB,KAAK,SAAU,OACfA,KAAK,IAAK,GACVA,KAAK,KAA8B,EAAxB3F,EAAe5iB,QAC1BuoB,KAAK,KAAM/nB,EAAEoW,IAGZ8X,EAAUpd,IACJ,iBACPgX,OAAO,OACPC,KAAK,KAAM,WACXA,KAAK,QAAS,eAEjBF,EACGC,OAAO,QACPtnB,MAAM,OAAQ,QACdA,MAAM,iBAAkB,OACxBunB,KAAK,QAASvjB,GACdujB,KAAK,SAAUhpB,EAAS07B,EAAOmE,QAC/Bz7B,GAAG,YAAay6B,GAChBz6B,GAAG,YAAa26B,GAChB36B,GAAG,WAAY06B,GACf16B,GAAG,QAASzC,GA+Ef,MAAOb,GACPua,QAAQqD,MAAM,+BAAgC5d,GAlPpC,2C,uDAsPhB,WACEZ,KAAKqqB,QAAS,EACdrqB,KAAKy+B,gBACL18B,OAAOue,iBAAiB,SAAUtgB,KAAKy+B,eAAe,K,kCAGxD,WACE18B,OAAO42B,oBAAoB,SAAU34B,KAAKy+B,eAAe,K,gCAG3D,SAAmBt8B,EAAWwhB,GACvBiV,IAAQz2B,EAAWnC,KAAKP,QAAQO,KAAKy+B,kB,oBAE5C,WACE,OACE,yBAAKr/B,UAAU,gBACb,yBAAKyX,GAAG,sB,GAjRWxX,cC8NZ+iC,E,4MArNbzgC,MAAQ,CACNkgC,OAAO,EACPQ,MAAM,G,EAGRC,aAAe,WACb,IAAI,EAA2D,EAAK7iC,MAA9D0X,EAAN,EAAMA,SAAUoqB,EAAhB,EAAgBA,SAAUP,EAA1B,EAA0BA,iBAAkB7d,EAA5C,EAA4CA,eAC5C,GAAiB,SAAboe,EAAqB,CACvB,IADuB,EACnBte,EAAQ,GACRsf,EAAOprB,EAASG,UAFG,cAGR6L,GAHQ,IAGvB,2BAA+B,CAAC,IAAvBqf,EAAsB,QAC7Bvf,EAAQA,EAAMwf,OACZD,EAAGvf,MAAMvf,KAAI,SAAC4I,GAAD,OAAO,IAAIkL,KAAKlL,EAAEuI,aAAayC,eALzB,8BAYvB,IAJA2L,EAAQA,EAAM1Z,QAAO,SAAC+C,GAAD,OAAOA,EAAIi2B,MAC1B7uB,MAAK,SAAUvI,EAAGC,GACtB,OAAOD,EAAIC,KAET6X,EAAM1iB,OAAS,EACjB,OAEAygC,EAAiB,IAAIxpB,KAAKyL,EAAM,UAGlC+d,EAAiB,IAAIxpB,KAAKL,EAASG,UAAuB,GAAXiqB,EAAgB,O,EAInEmB,cAAgB,WACd,IAAI,EAA2D,EAAKjjC,MAA9D0X,EAAN,EAAMA,SAAUoqB,EAAhB,EAAgBA,SAAUP,EAA1B,EAA0BA,iBAAkB7d,EAA5C,EAA4CA,eAC5C,GAAiB,SAAboe,EAAqB,CACvB,IADuB,EACnBte,EAAQ,GACRsf,EAAOprB,EAASG,UAFG,cAGR6L,GAHQ,IAGvB,2BAA+B,CAAC,IAAvBqf,EAAsB,QAC7Bvf,EAAQA,EAAMwf,OACZD,EAAGvf,MAAMvf,KAAI,SAAC4I,GAAD,OAAO,IAAIkL,KAAKlL,EAAEuI,aAAayC,eALzB,8BAYvB,IAJA2L,EAAQA,EAAM1Z,QAAO,SAAC+C,GAAD,OAAOA,EAAIi2B,MAC1B7uB,MAAK,SAAUvI,EAAGC,GACtB,OAAOD,EAAIC,KAET6X,EAAM1iB,OAAS,EACjB,OAEAygC,EAAiB,IAAIxpB,KAAKyL,EAAMA,EAAM1iB,OAAS,UAGjDygC,EAAiB,IAAIxpB,KAAKL,EAASG,UAAuB,GAAXiqB,EAAgB,O,EAInEoB,gB,sBAAkB,sCAAAx3B,EAAA,2DAEd,EAAK1L,MADD0X,EADU,EACVA,SAAUoqB,EADA,EACAA,SAAUvpB,EADV,EACUA,YAAanD,EADvB,EACuBA,YAAamsB,EADpC,EACoCA,mBAGlD7pB,EAASG,WAAazC,EAAYyC,WAClCH,EAASG,WAAaU,EAAYV,WALpB,gCAOR0pB,EACJ,IAAIxpB,KAAKL,EAASG,UAAuB,GAAXiqB,EAAgB,MARlC,6BAWdqB,YAAmB,EAAKC,OACxB,EAAK/gC,SAAS,CAAEugC,MAAO,EAAK1gC,MAAM0gC,OAZpB,2C,EAgBlBS,WAAa,WACX,IAAMT,EAAS,EAAK1gC,MAAd0gC,KACDA,EAOHO,YAAmB,EAAKC,OALxB,EAAKA,MAAQE,YAAgB,sBAAC,sBAAA53B,EAAA,sEACtB,EAAKw3B,kBADiB,2CAE3B,MAKL,EAAK7gC,SAAS,CAAEugC,MAAOA,K,EAGzBtB,YAAc,SAACc,GACT,EAAKlgC,MAAMkgC,MACb,EAAK//B,SAAS,CAAE+/B,OAAO,IAEvB,EAAK//B,SAAS,CAAE+/B,W,EAIpBJ,cAAgB,SAACf,GACf,GAAIsC,OAAOC,UAAUvC,EAAI,OAAmB,CAC1C,IAAIwC,EAAQxC,EAAI,MAChB,OAAc,IAAVwC,EACK,SAEAA,EAAQ,SAEZ,GAAIF,OAAOC,UAAUvC,EAAI,MAAe,CAC7C,IAAIlZ,EAAOkZ,EAAI,KACf,OAAa,IAATlZ,EACK,QAEAA,EAAO,QAEX,GAAIwb,OAAOC,UAAUvC,EAAO,IAAK,CACtC,IAAIH,EAAQG,EAAO,GACnB,OAAc,IAAVH,EACK,SAEAA,EAAQ,SAEZ,OAAIyC,OAAOC,UAAUvC,GACnBA,EAAO,QAEPA,G,4CAIX,WAAU,IAAD,OACH,EAYA1gC,KAAKP,MAXP0X,EADF,EACEA,SACAoC,EAFF,EAEEA,MACAgoB,EAHF,EAGEA,SACAP,EAJF,EAIEA,iBACA/B,EALF,EAKEA,cACAuC,EANF,EAMEA,iBACA3sB,EAPF,EAOEA,YACAmD,EARF,EAQEA,YACAgnB,EATF,EASEA,SACAxhB,EAVF,EAUEA,SACA2F,EAXF,EAWEA,eAEE,EAAkBnjB,KAAK2B,MAArBkgC,EAAN,EAAMA,MAAOQ,EAAb,EAAaA,KACb,OACE,kBAAC,IAAMpc,SAAP,KACE,yBAAK7mB,UAAU,YACf,yBAAKA,UAAU,yBACb,yBAAKA,UAAU,oBACb,kBAAC,EAAD,CACE+X,SAAUA,EACV6pB,iBAAkBA,EAClB7d,eAAgBA,EAChBtO,YAAaA,EACbmD,YAAaA,KAGjB,yBAAK5Y,UAAU,cACb,yBAAKA,UAAU,YAAYiD,MAAOggC,EAAO,QAAU,QACjD,yBACEhR,IAAKgR,EAAOc,IAAYC,IACxB3hC,QAASzB,KAAK8iC,WACdrd,IAAI,wBAGR,yBACErmB,UAAU,OACViD,MAAM,iBACNZ,QAASzB,KAAK0iC,eAEd,yBAAKrR,IAAKgS,IAAmB5d,IAAI,2BAEnC,yBACErmB,UAAU,aACViD,MAAM,iDACNZ,QAASzB,KAAKsiC,cAEd,yBAAKjR,IAAKiS,IAAkB7d,IAAI,yBAChC,yBAAKrmB,UAAU,uBACZY,KAAKyhC,cAAcF,KAGxB,yBAAKniC,UAAU,iBACb,yBACEA,UAAU,aACViD,MAAM,aACNZ,QAAS,kBAAM,EAAKs/B,YAAY,WAEhC,yBAAK1P,IAAKkS,IAAW9d,IAAI,eAL3B,WAMOlM,EANP,MAQA,yBACEna,UAAU,gBACViD,MAAM,gBACNZ,QAAS,kBAAM,EAAKs/B,YAAY,cAEhC,yBAAK1P,IAAKmS,IAAW/d,IAAI,aAAarmB,UAAU,cAKvDyiC,GACC,kBAAC,EAAD,CACEA,MAAOA,EACPd,YAAa/gC,KAAK+gC,YAClB5pB,SAAUA,EACVoC,MAAOA,EACPylB,SAAUA,EACVxhB,SAAUA,EACV+jB,SAAUA,EACVpe,eAAgBA,EAChB6d,iBAAkBA,EAClB/B,cAAeA,EACfuC,iBAAkBA,EAClBC,cAAezhC,KAAKyhC,qB,GA9MIpiC,aCkCrBokC,G,mKA3Cb,WACE,IAAI,EAAyDzjC,KAAKP,MAA5D0X,EAAN,EAAMA,SAAUoC,EAAhB,EAAgBA,MAAOmqB,EAAvB,EAAuBA,cAAeC,EAAtC,EAAsCA,mBAetC,OACE,yBAAKvkC,UAAU,qBACb,2BAAOqC,QAASiiC,EAAerhC,MAAM,aACnC,+BACE,4BACE,wBAAIjD,UAAU,MAAMwkC,QAAS,GAC1BzsB,EAAS4J,WAEZ,wBAAI3hB,UAAU,SAtBX,CACX,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,QAUsC+X,EAAS6J,cAEzC,4BACE,wBAAI5hB,UAAU,QAAQ+X,EAAS8J,kBAIrC,yBAAK7hB,UAAU,OAAOqC,QAASkiC,EAAoBthC,MAAM,uBACtD8U,EAASmjB,mBAAmB,GAAI,CAC/B1T,KAAM,UACNub,OAAQ,YACN,IAJN,KAKK5oB,EALL,U,GAhCsBla,c,oCCGxBwkC,G,mNACJC,aAAe,WACb,IAAI,EAAyC,EAAKrkC,MAA5CskC,EAAN,EAAMA,cAAentB,EAArB,EAAqBA,WAAYnV,EAAjC,EAAiCA,QAC7BA,EACFA,IAGAsiC,EADentB,EAATxE,O,4CAIV,WACE,IAAI,EAAgBpS,KAAKP,MAAMmX,WAAzBZ,EAAN,EAAMA,KAAMguB,EAAZ,EAAYA,IACZ,OACE,yBAAK5kC,UAAU,mBAAmBqC,QAASzB,KAAK8jC,aAAczhC,MAAK,cACjE,yBAAKgvB,IAAK2S,EAAKve,IAAKzP,IACpB,6BAAMA,Q,GAfM3W,cA2DL4kC,E,4JArCb,WACE,IAAMF,EAAkB/jC,KAAKP,MAAvBskC,cACFG,EAAUlwB,KAAKC,MAAMD,KAAKE,UAAUiwB,MAQxC,OAPAD,EAAUA,EAAQxgC,KAAI,SAACghB,GAKrB,MAJI,aAAcA,EAAEtS,OAClBsS,EAAEtS,KAAK+E,SAAW,IAAIK,KAAuB,IAAlBkN,EAAEtS,KAAK+E,WAEpCuN,EAAEsf,IAAMI,IACD1f,KAGP,yBAAKtlB,UAAU,eACb,yBAAKA,UAAU,sBAAf,mFAIA,yBAAKA,UAAU,uBACb,kBAAC,EAAD,CACEuX,IAAK,aACLC,WAAY,CACVZ,KAAM,aACNF,YAAa,kCACbkuB,IAAKK,IACLjyB,KAAM,CAAEkyB,SAAU,KAEpBP,cAAeA,EACftiC,QAASzB,KAAKP,MAAM8kC,aAErBL,EAAQxgC,KAAI,SAACghB,GAAD,OACX,kBAAC,EAAD,CAAO/N,IAAK+N,EAAE1O,KAAMY,WAAY8N,EAAGqf,cAAeA,a,GA9BpC1kC,a,iBCuDXmlC,G,mNA9EbC,eAAiB,SAACt8B,GAChB,GAAIA,EAAQ,CAEV,IADA,IAAIu8B,EAAiB,GACZ59B,EAAI,EAAGA,EAAIqB,EAAO5H,OAAQuG,IACjC49B,EAAe/jC,KAAf,UAAuBwH,EAAOrB,GAAG0B,MAAjC,YAA4D,IAAlBL,EAAOrB,GAAGqF,MAApD,MAEF,MAAM,wBAAN,OAA+Bu4B,EAAetmB,KAAK,KAAnD,O,4CAGJ,WACE,IAAI,EAA6Bpe,KAAKP,MAAhCoI,EAAN,EAAMA,IAAKD,EAAX,EAAWA,IAAKkN,EAAhB,EAAgBA,KAAM3M,EAAtB,EAAsBA,OACV,OAARN,IAAcA,EAAM,GACZ,OAARD,IAAcA,EAAM,GACxBC,EAAMsW,WAAWtW,GACjBD,EAAMuW,WAAWvW,GACjB,IAEI+8B,EAFAlkC,EAAQ,GACRmkC,GAAa,EAsDjB,OApDsB,IAAlBz8B,EAAO5H,QAAgB4H,EAAO,GAAGK,QAAUL,EAAO,GAAGK,QACvDo8B,GAAa,GAEXA,GACFD,EAAc,CACZE,WAAY18B,EAAO,GAAGK,OAExB/H,EAAME,KACJ,wBAAIgW,IAAK,GACP,wBAAIvX,UAAU,yBAAyBmC,MAAOojC,IAC9C,+CAIJA,EAAc,CACZE,WAAY7kC,KAAKykC,eAAet8B,GAChC4sB,OAAQ,kBACR+P,UAAW,mBACXC,aAAc,oBAEhBtkC,EAAME,KACJ,wBAAIgW,IAAK,GACP,wBACEvX,UAAU,yBACVmC,MAAOojC,EACPf,QAAS,IAEX,wBAAIxkC,UAAU,qBAAd,UACA,4BAAKmH,KAAKkF,MAAM,GAAK7D,GAAO,IAC5B,4BAAKkN,KAGTrU,EAAME,KACJ,wBACEgW,IAAK,EACLpV,MAAO,CACLzB,OAAQ,SAGV,wBAAIV,UAAU,qBAAd,UACA,wBAAIA,UAAU,4BACXmH,KAAKkF,OAAa7D,EAAMC,GAAO,EAApB,IAA0B,MAI5CpH,EAAME,KACJ,wBAAIgW,IAAK,GACP,wBAAIvX,UAAU,qBAAd,UACA,4BAAKmH,KAAKkF,MAAM,GAAK5D,GAAO,OAKhC,2BAAOzI,UAAU,uBACf,+BAAQqB,Q,GAzEepB,cCwJhB2lC,G,4MAvJbP,eAAiB,SAACt8B,GAChB,GAAIA,EAAQ,CAEV,IADA,IAAIu8B,EAAiB,GACZ59B,EAAI,EAAGA,EAAIqB,EAAO5H,OAAQuG,IACjC49B,EAAe/jC,KAAf,UAAuBwH,EAAOrB,GAAG0B,MAAjC,YAA4D,IAAlBL,EAAOrB,GAAGqF,MAApD,MAEF,MAAM,wBAAN,OAA+Bu4B,EAAetmB,KAAK,KAAnD,O,4CAGJ,WACE,IAAI,EAOApe,KAAKP,MANPoI,EADF,EACEA,IACAD,EAFF,EAEEA,IACAkN,EAHF,EAGEA,KACA3M,EAJF,EAIEA,OACAmV,EALF,EAKEA,gBACAD,EANF,EAMEA,aAEU,OAARxV,GAAgBA,IAAQ6F,MAAU7F,EAAM,GAChC,OAARD,GAAgBA,KAAS8F,MAAU9F,EAAM,GAC7C,IAGEY,EACAshB,EAFArpB,EAAQ,GAINmkC,GAAa,EAKjB,GAJsB,IAAlBz8B,EAAO5H,QAAgB4H,EAAO,GAAGK,QAAUL,EAAO,GAAGK,QACvDo8B,GAAa,GAGXtnB,GAAmBsnB,EACrBnkC,EAAME,KACJ,4BACE,wBAAIvB,UAAU,wBACZ,yBACEA,UAAWie,EACX9b,MAAO,CACLzB,OAlBE,GAmBFyF,MAnBE,GAoBF6qB,gBAAiBjoB,EAAO,GAAGK,MAC3BgzB,OAAQ,WAId,2DAIJ,GAAIrzB,EAAO5H,OAAS,EAClB,IAAK,IAAIuG,EAAIqB,EAAO5H,OAAS,EAAGuG,GAAK,EAAGA,IAAK,CAC3C,IAAI3G,GAAS0H,GAAOD,EAAMC,GAAOM,EAAOrB,GAAGqF,OAAO2V,cAAc,GAMhE,GAJEgI,EADExM,EAhCI,MAmCsCxW,EAAIqB,EAAO5H,OAAlC,GAEnBqkC,EACFp8B,EAAQL,EAAO,GAAGK,UACb,CAEL,GAAI1B,EAAIqB,EAAO5H,OAAS,EACT4H,EAAOrB,GAAG0B,QACVL,EAAOrB,EAAI,GAAG0B,QAEzBrI,EACEA,EACA,OACC0H,GAAOD,EAAMC,GAAOM,EAAOrB,EAAI,GAAGqF,OAAO2V,cAAc,GAC1Dhb,KAGJ0B,EAAQL,EAAOrB,GAAG0B,MAGV,IAAN1B,GACEqB,EAAO,GAAGgE,MAAQ,OAIpBrF,IAAMqB,EAAO5H,OAAS,GACpB,EAAI4H,EAAOA,EAAO5H,OAAS,GAAG4L,MAAQ,MAI5C1L,EAAME,KACJ,wBAAIgW,IAAK7P,GACP,wBAAI1H,UAAU,wBACZ,yBACEA,UAAWie,EACX9b,MAAO,CACLzB,OAAQgqB,EACRvkB,MAAOukB,EACPsG,gBAAiB5nB,EACjBgzB,OAAQ,WAId,4BAAKr7B,GACL,4BAAW,IAAN2G,GAAWgO,UAIjB,CACL,IAAI6vB,EAAc,CAChBE,WAAY7kC,KAAKykC,eAAet8B,GAChC4sB,OAAQ,kBACR+P,UAAW,mBACXC,aAAc,oBAEhBtkC,EAAME,KACJ,wBAAIgW,IAAK,GACP,wBACEvX,UAAU,yBACVmC,MAAOojC,EACPf,QAAS,IAEX,wBAAIxkC,UAAU,qBAAd,UACA,4BAAKmH,KAAKkF,MAAM,IAAO7D,GAAO,KAC9B,4BAAKkN,KAGTrU,EAAME,KACJ,wBACEgW,IAAK,EACLpV,MAAO,CACLzB,OAAQ,SAGV,wBAAIV,UAAU,qBAAd,UACA,wBAAIA,UAAU,4BACXmH,KAAKkF,OAAe7D,EAAMC,GAAO,EAAtB,KAA4B,OAI9CpH,EAAME,KACJ,wBAAIgW,IAAK,GACP,wBAAIvX,UAAU,qBAAd,UACA,4BAAKmH,KAAKkF,MAAM,IAAO5D,GAAO,OAKtC,OACE,2BAAOzI,UAAU,uBACf,+BAAQqB,Q,GAlJepB,a,mBC8ahB4lC,G,4MA5abtjC,MAAQ,CACN8b,aAAc,EAAKhe,MAAM2kB,QAAQ3G,aACjCrH,QAAS,EAAK3W,MAAM2kB,QAAQhO,QAC5BjO,OAAQ,EAAK1I,MAAM2kB,QAAQjc,OAC3BN,IAAK,EAAKpI,MAAM2kB,QAAQvc,IACxBD,IAAK,EAAKnI,MAAM2kB,QAAQxc,IACxBwV,YAAa,EAAK3d,MAAM2kB,QAAQhH,YAChC+X,OAAQ,EAAK11B,MAAM2kB,QAAQ+Q,OAC3BhjB,cAAe,EAAK1S,MAAM2kB,QAAQjS,cAClCkL,aAAc,EAAK5d,MAAM2kB,QAAQ/G,aACjCC,gBAAiB,EAAK7d,MAAM2kB,QAAQ9G,gBACpCC,WAAY,EAAK9d,MAAM2kB,QAAQ7G,WAC/BrV,iBAAkB,EAAKzI,MAAM2kB,QAAQlc,iBACrC8R,gBAAiB,EAAKva,MAAM2kB,QAAQpK,gBACpCH,aAAc,EAAKpa,MAAM2kB,QAAQvK,aACjCE,WAAY,EAAKta,MAAM2kB,QAAQrK,WAC/BD,gBAAiB,EAAKra,MAAM2kB,QAAQtK,gBACpC/E,qBAAsB,EAAKtV,MAAM2kB,QAAQrP,qBACzCkF,QAAS,EAAKxa,MAAM2kB,QAAQnK,QAC5BC,WAAY,EAAKza,MAAM2kB,QAAQlK,Y,EAGjC6C,WAAa,SAACxR,GACZ,MAAiB,kBAANA,EAAuB,GAC3BA,EAAEG,OAAO,GAAGsR,cAAgBzR,EAAE0R,MAAM,I,EAE7CioB,cAAgB,SAAC3kB,EAAOvK,GACtB,EAAKlU,SAAL,gBAAiBkU,EAAOuK,EAAMnR,OAAOjP,S,EAEvC0B,OAAS,SAACmU,GACR,EAAKlU,SAAL,gBAAiBkU,GAAQ,EAAKrU,MAAMqU,M,EAEtCmvB,mBAAqB,SAAC5kB,GACpB,EAAKze,SAAS,CAAEsU,QAASmK,EAAMnR,OAAOjP,MAAQ,O,EAEhDilC,iBAAmB,SAACj9B,GAClB,EAAKrG,SAAS,CAAEqG,Y,EAElBk9B,SAAW,WACT,IAAMC,EAAY,EAAK7lC,MAAM2kB,QAAvBkhB,QACN,EAAKxjC,SAAS,CAAE+F,IAAKy9B,K,EAEvBC,SAAW,WACT,IAAMC,EAAY,EAAK/lC,MAAM2kB,QAAvBohB,QACN,EAAK1jC,SAAS,CAAE8F,IAAK49B,K,EAEvBC,2BAA6B,SAACllB,GAC5B,IAAIjD,GAAkB,EACK,SAAvBiD,EAAMnR,OAAOjP,QAAkBmd,GAAkB,GACrD,EAAKxb,SAAS,CAAEwb,qB,EAElBooB,4BAA8B,SAACnlB,GAC7B,IAAIrY,GAAmB,EACI,SAAvBqY,EAAMnR,OAAOjP,QAAkB+H,GAAmB,GACtD,EAAKpG,SAAS,CAAEoG,sB,EAElBy9B,cAAgB,WAwBd,IAvBA,IAqBI,EAAsC,EAAKlmC,MAAzC2kB,EAAN,EAAMA,QAASwhB,EAAf,EAAeA,SAAUC,EAAzB,EAAyBA,aAEzB,MAvBgB,CACd,eACA,UACA,SACA,MACA,MACA,cACA,SACA,gBACA,eACA,kBACA,aACA,mBACA,kBACA,eACA,aACA,kBACA,uBACA,UACA,cAIF,eAAgC,CAA3B,IAAIC,EAAQ,KACf1hB,EAAQ0hB,GAAY,EAAKnkC,MAAMmkC,GAGjC,IAAI55B,EAAQ25B,EAAaE,WAAU,SAAChlC,GAAD,OAAOA,EAAE8V,KAAOuN,EAAQvN,MAC3DgvB,EAAa35B,GAASkY,EACtBwhB,EAASC,I,4CAGX,WAAU,IAAD,OACH,EAoBA7lC,KAAK2B,MAnBP8b,EADF,EACEA,aACArH,EAFF,EAEEA,QACAjO,EAHF,EAGEA,OACAN,EAJF,EAIEA,IACAD,EALF,EAKEA,IACAwV,EANF,EAMEA,YACA+X,EAPF,EAOEA,OACAhjB,EARF,EAQEA,cACAkL,EATF,EASEA,aACAC,EAVF,EAUEA,gBACAC,EAXF,EAWEA,WACArV,EAZF,EAYEA,iBACA8R,EAbF,EAaEA,gBACAH,EAdF,EAcEA,aACAE,EAfF,EAeEA,WACAD,EAhBF,EAgBEA,gBACA/E,EAjBF,EAiBEA,qBACAkF,EAlBF,EAkBEA,QACAC,EAnBF,EAmBEA,WAEE,EAAgDla,KAAKP,MAAnDumC,EAAN,EAAMA,eAAgBnvB,EAAtB,EAAsBA,GAAaovB,EAAnC,EAA0B7hB,QACpB8hB,EAAqCD,EAArCC,QAAS/oB,EAA4B8oB,EAA5B9oB,kBAAmB/K,EAAS6zB,EAAT7zB,KACtB,OAARvK,IAAcA,EAAM,GACZ,OAARD,IAAcA,EAAM,GACxB,IAAM23B,EAAU0G,EAAV1G,MACF7nB,EAAOyF,EAAkBzZ,KAAI,SAACia,GAAD,OAAQA,EAAGC,KAAO,IAAMD,EAAGhG,iBACvD8F,IAAcA,EAAe,GAClC,IAAI0oB,EAAehpB,EAAkBrc,MAAK,SAAC6c,GAAD,MAAoB,MAAZA,EAAGC,QACjDwoB,EAAM,GAEV,MADI,QAASh0B,IAAMg0B,EAAMh0B,EAAKg0B,KAE5B,yBAAKhnC,UAAU,gBACb,6BACE,2BAAOA,UAAU,WACf,+BACE,4BACE,wBAAImC,MAAO,CAAEgE,MAAO,SAApB,QACA,4BACE,2BACEmS,KAAK,SACLvX,MAAO0H,EACP3G,SAAU,SAACN,GAAD,OAAO,EAAKskC,cAActkC,EAAG,WAG3C,wBAAIW,MAAO,CAAEgE,MAAO,SAClB,yBAAKnG,UAAU,uBACb,4BAAQsY,KAAK,SAASjW,QAASzB,KAAKqlC,UAApC,YAMN,4BACE,oCACA,4BACE,2BACE3tB,KAAK,SACLvX,MAAOyH,EACP1G,SAAU,SAACN,GAAD,OAAO,EAAKskC,cAActkC,EAAG,WAG3C,4BACE,yBAAKxB,UAAU,uBACb,4BAAQsY,KAAK,SAASjW,QAASzB,KAAKulC,UAApC,eASX7tB,EAAKT,SAAS,SACZS,EAAKT,SAAS,QACfS,EAAK0G,KAAK,KAAKnH,SAAS,OACtB,6BACGjX,KAAK+c,WAAWopB,EAAa5nB,gBAAkB,IAChD,4BACEpe,MAAOsd,EACPvc,SAAU,SAACN,GAAD,OAAO,EAAKskC,cAActkC,EAAG,kBAEtCwR,EAAK5M,EAAE9B,KAAI,SAACsD,EAAGkF,GAAJ,OACV,4BAAQ/L,MAAO+L,EAAOyK,IAAK3P,GACxBA,OAIN,IAAMm/B,EAAarxB,MAGzB,CAAC,SAAU,SAASmC,SAASivB,IACH,OAAzBnxB,GACE,yBAAK3V,UAAU,8BACb,yBAAKA,UAAU,sBAAf,kBACA,2BAAOA,UAAU,sBACf,+BACE,4BACE,8CACA,4BACE,2BACEsY,KAAK,WACL2uB,QAASpsB,EACT/Y,SAAU,kBAAM,EAAKW,OAAO,gBAIlC,4BACE,4CACA,4BACE,2BACE6V,KAAK,SACL7P,IAAK,GACLD,IAAK,IACL0+B,KAAM,EACNnmC,MAAO+Z,EACPhZ,SAAU,SAACN,GAAD,OAAO,EAAKskC,cAActkC,EAAG,sBAQtD,CAAC,SAAU,SAASqW,SAASivB,IAC5B,yBAAK9mC,UAAU,8BACb,yBAAKA,UAAU,sBAAf,kBACA,2BAAOA,UAAU,sBACf,+BACE,4BACE,sCACA,4BACE,4BACEe,MAAOkd,EACPnc,SAAU,SAACN,GAAD,OAAO,EAAKskC,cAActkC,EAAG,kBAEvC,4BAAQT,MAAM,UAAd,iBACA,4BAAQA,MAAM,UAAd,iBACA,4BAAQA,MAAM,YAAd,mBACA,4BAAQA,MAAM,SAAd,YAIN,4BACE,oCACA,4BACE,4BACEA,MAAOmd,EACPpc,SAAUlB,KAAKylC,4BAEf,4BAAQtlC,MAAM,QAAd,SACA,4BAAQA,MAAM,SAAd,cAGJ,4BACGmd,GACC,2BACE5F,KAAK,OACLvX,MAAOod,EACPrc,SAAU,SAACN,GAAD,OAAO,EAAKskC,cAActkC,EAAG,mBAK/C,4BACE,2CACA,4BACE,2BACE8W,KAAK,WACL2uB,QAASjpB,EACTlc,SAAU,kBAAM,EAAKW,OAAO,uBAQzC,CAAC,QAAS,SAASoV,SAASivB,IAC3B,yBAAK9mC,UAAU,6BACb,yBAAKA,UAAU,sBAAf,iBACA,+BACE,+BACE,4BACE,4BACE,2BACEsY,KAAK,WACL2uB,QAASvsB,EACT5Y,SAAU,kBAAM,EAAKW,OAAO,uBAGhC,iDAEF,4BACE,4BACE,2BACE6V,KAAK,WACL2uB,QAASxsB,EACT3Y,SAAU,kBAAM,EAAKW,OAAO,oBAGhC,kDACA,4BACE,4BACE1B,MAAO+H,EACPhH,SAAUlB,KAAK0lC,6BAEf,4BAAQvlC,MAAM,QAAd,cACA,4BAAQA,MAAM,SAAd,kBAIN,4BACE,4BACE,2BACEuX,KAAK,WACL2uB,QAAStsB,EACT7Y,SAAU,kBAAM,EAAKW,OAAO,kBAGhC,yCACA,4BACE,4BACE1B,MAAO6Z,EACP9Y,SAAU,SAACN,GAAD,OAAO,EAAKskC,cAActkC,EAAG,qBAEvC,4BAAQT,MAAM,SAAd,SACA,4BAAQA,MAAM,QAAd,cACA,4BAAQA,MAAM,SAAd,SACA,4BAAQA,MAAM,QAAd,WAIN,4BACE,uCACA,4BACE,2BACEuX,KAAK,SACLvX,MAAiB,IAAViW,EACPlV,SAAUlB,KAAKmlC,mBACft9B,IAAI,IACJD,IAAI,MACJ0+B,KAAK,OAPT,SAgBTn0B,GACC,6BACE,+BACE,+BACE,4BACE,8CACA,4BACE,4BACEhS,MAAOgS,EACPjR,SAAU,SAACN,GAAD,OAAO,EAAKskC,cAActkC,EAAG,mBAEvC,4BAAQT,MAAM,QAAd,QACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,KAAd,KACA,4BAAQA,MAAM,MAAd,YAQY,OAAzB4U,GACC,6BACE,+BACE,+BACE,4BACE,uDACA,4BACE,2BACE2C,KAAK,WACL2uB,QAAStxB,EACT7T,SAAU,kBAAM,EAAKW,OAAO,6BAIlC,4BACE,wBAAIN,MAAO,CAACuoB,SAAU,SAAUsc,OAM1C,yBAAKhnC,UAAU,sBAAf,iBACA,kBAAC,KAAD,CACE+I,OAAQA,EACRo3B,MAAOA,EACPr+B,SAAUlB,KAAKolC,mBAjRnB,iBAmRiB,IACf,2BACE1tB,KAAK,WACL2uB,QAASlR,EACTj0B,SAAU,kBAAM,EAAKW,OAAO,aAE9B,yBAAKzC,UAAU,uBACb,4BACEsY,KAAK,SACLrV,MAAM,0BACNjD,UAAU,cACVqC,QAASzB,KAAK2lC,eAJhB,eAQCK,GACC,4BACEtuB,KAAK,SACLrV,MAAM,eACNjD,UAAU,eACVqC,QAAS,kBAAMukC,EAAenvB,KAJhC,sB,GA9ZexX,a,qBCErBknC,GAAaC,aAAe,gBAAG/lC,EAAH,EAAGA,MAAH,OAChC,yBAAK4B,MAAM,2BAA2B5B,MA6GzBgmC,G,4MAzGb9kC,MAAQ,CACNC,KAAM,EAAKnC,MAAMinC,YACjBC,UAAU,G,EAEZC,WAAa,WACX,EAAK9kC,SAAS,CAAEF,MAAO,EAAKD,MAAMC,Q,EAEpCilC,eAAiB,WACf,EAAK/kC,SAAS,CAAE6kC,UAAW,EAAKhlC,MAAMglC,Y,4CAExC,WACE,IAAI,EAAqB3mC,KAAK2B,MAAxBC,EAAN,EAAMA,KAAM+kC,EAAZ,EAAYA,SACR,EAYA3mC,KAAKP,MAXPoX,EADF,EACEA,GACAxU,EAFF,EAEEA,MACAykC,EAHF,EAGEA,eACAt+B,EAJF,EAIEA,MACApG,EALF,EAKEA,QACA2kC,EANF,EAMEA,cACA3iB,EAPF,EAOEA,QACAyhB,EARF,EAQEA,aACAG,EATF,EASEA,eACAJ,EAVF,EAUEA,SACAoB,EAXF,EAWEA,gBAEF,OACE,yBAAK5nC,UAAU,sBACb,yBAAKA,UAAU,4BACb,+BACE,+BACE,wBAAIA,UAAU,4BACZ,wBACEA,UAAU,mBACVqC,QAASzB,KAAK4mC,WACdrlC,MAAO,CAAEgE,MAAO,QAChBlD,MAAOT,EAAO,oBAAsB,qBAEnCA,EAAO,SAAM,UAEhB,wBAAIxC,UAAU,mBACX,IACD,2BACEA,UAAU,qBACVsY,KAAK,WACLrV,MAAO+hB,EAAQf,QAAU,aAAe,aACxCniB,SAAU,kBAAM8lC,EAAgBnwB,IAChCwvB,QAASjiB,EAAQf,WAGrB,wBAAI9hB,MAAO,CAAEgE,MAAO,QAAU9D,QAASzB,KAAK4mC,YAC1C,kBAACL,GAAD,CAAY9lC,MAAO4B,IACnB,yBAAKjD,UAAU,sBAAsBmC,MAAO,CAAEiH,MAAOA,IAClDs+B,IAGJC,GACC,wBACEtlC,QAASzB,KAAK6mC,eACdtlC,MAAO,CAAEgE,MAAO,QAChBnG,UAAU,qBACViD,MAAM,0BAEN,yBACEgvB,IAAK4V,KACLxhB,IAAI,WACJrmB,UACEunC,EAAW,oBAAsB,qBAQ/C,yBACEvnC,UACEwC,EACI,6BACA,mCAGLQ,IAIL,yBACEhD,UACEunC,EACI,8BACA,oCAGN,kBAAC,GAAD,CACE9vB,GAAIA,EACJuN,QAASA,EACTyhB,aAAcA,EACdG,eAAgBA,EAChBJ,SAAUA,U,GAlGIvmC,a,UCEpB6nC,G,4MACJvlC,MAAQ,G,4CACR,WACE,IAAMyiB,EAAYpkB,KAAKP,MAAjB2kB,QAEJ8hB,EAYE9hB,EAZF8hB,QACAr+B,EAWEuc,EAXFvc,IACAD,EAUEwc,EAVFxc,IACAuV,EASEiH,EATFjH,kBACAgqB,EAQE/iB,EARF+iB,eACAC,EAOEhjB,EAPFgjB,WACAtxB,EAMEsO,EANFtO,YACA3N,EAKEic,EALFjc,OACAmV,EAIE8G,EAJF9G,gBACAD,EAGE+G,EAHF/G,aACA1F,EAEEyM,EAFFzM,cACA0hB,EACEjV,EADFiV,IAEE3b,EAAmBP,EAAkBrc,MACvC,SAAC6c,GAAD,OAAQA,EAAGhG,gBAAkBA,KAE3Bmf,EAAOqQ,OACCvlB,IAARyX,IAAmBvC,EAAOsC,aAAWC,IACzC,IAAMvkB,EAAS4I,EAAT5I,KACFrU,EAAQ,8BAoBZ,MAnBgB,WAAZylC,IACFzlC,EACE,kBAAC,GAAD,CACEoH,IAAKA,EACLD,IAAKA,EACLkN,KAAMA,EACN3M,OAAQA,EACRmV,gBAAiBA,EACjBD,aAAcA,KAGJ,WAAZ6oB,IACFzlC,EACE,kBAAC,EAAD,CAAkBoH,IAAKA,EAAKD,IAAKA,EAAKkN,KAAMA,EAAM3M,OAAQA,KAE9C,UAAZ+9B,IACFzlC,EACE,kBAAC,EAAD,CAAkBoH,IAAKA,EAAKD,IAAKA,EAAKkN,KAAMA,EAAM3M,OAAQA,KAG5D,6BACE,6BAAM2N,GACLrV,EAFH,UAGU,IACR,uBAAG0wB,KAAM2F,EAAM1nB,OAAO,SAASi4B,IAAI,uBAChCD,Q,GAlDgB/nC,aAyDrBioC,GAAeC,aAAgB,YAAuB,IAApB5yB,EAAmB,EAAnBA,MAAOlV,EAAY,EAAZA,MACvCoX,EAA2BlC,EAA3BkC,GAAIxU,EAAuBsS,EAAvBtS,MAAO2T,EAAgBrB,EAAhBqB,KAAMxN,EAAUmM,EAAVnM,MACjB2a,EACJ1jB,EADI0jB,eAAgB6iB,EACpBvmC,EADoBumC,eAAgBwB,EACpC/nC,EADoC+nC,gBAAiBR,EACrDvnC,EADqDunC,gBAEvD,OACE,wBAAIS,SAAU,GACZ,kBAAC,GAAD,CACE5wB,GAAIA,EACJF,IAAKE,EACLxU,MAAOA,EACPykC,eAAgB9wB,EAChBxN,MAAOA,EACPu+B,eAAe,EACf3iB,QAASzP,EACTkxB,aAAc1iB,EACd6iB,eAAgBA,EAChBJ,SAAU4B,EACVR,gBAAiBA,EACjB5kC,QAAS,kBAAC,GAAD,CAAcuU,IAAKE,EAAIuN,QAASzP,UAM3C+yB,GAAeC,aAAkB,YAAgB,IAAbloC,EAAY,EAAZA,MAClC0jB,EAAmB1jB,EAAnB0jB,eACN,OACE,wBAAI/jB,UAAU,kBACX+jB,EAAezf,KAAI,SAACiR,EAAOzI,GAAR,OAClB,kBAACo7B,GAAD,CACE3wB,IAAG,eAAUzK,GACbA,MAAOA,EACPyI,MAAOA,EACPlV,MAAOA,WA2BFmoC,G,4MAnBbC,UAAY,YAA6B,IAA1BC,EAAyB,EAAzBA,SAAUC,EAAe,EAAfA,SACnB,EAAkC,EAAKtoC,MAArC0jB,EAAN,EAAMA,gBAEN6kB,EAFA,EAAsBA,aACtB7kB,EAAiB8kB,YAAU9kB,EAAgB2kB,EAAUC,K,4CAIvD,WACE,OACE,kBAACL,GAAD,CACEjoC,MAAOO,KAAKP,MACZooC,UAAW7nC,KAAK6nC,UAChB/5B,SAAU,GACVo6B,eAAa,EACbC,SAAS,U,GAdO9oC,a,kBCzGlB+oC,G,4MACJzmC,MAAQ,CACNC,MAAM,G,EAERC,OAAS,WACP,EAAKC,SAAS,CAAEF,MAAO,EAAKD,MAAMC,Q,EAEpCymC,QAAU,SAACxxB,GAET,OADgB,EAAKpX,MAAf6oC,MACOxnC,MAAK,SAACkJ,GAAD,OAAOA,EAAE6M,KAAOA,KAAIb,M,EAExCsQ,WAAa,SAACnP,GACZ,IAAIhM,EAAI,IAAIqM,KAAKL,GACbuP,EAAOvb,EAAE8V,cACT0F,EAAQxb,EAAE6V,WAAa,EACvB9I,EAAO/M,EAAE4V,UACb,MAAM,GAAN,OAAU7I,EAAO,GAAK,IAAMA,EAAOA,EAAnC,YACEyO,EAAQ,GAAK,IAAMA,EAAQA,EAD7B,YAEInR,OAAOkR,GAAMzJ,OAAO,K,4CAE1B,WAAU,IAAD,OACDrb,EAAS5B,KAAK2B,MAAdC,KACF,EACF5B,KAAKP,MADDkY,EAAN,EAAMA,cAAe4wB,EAArB,EAAqBA,WAAYC,EAAjC,EAAiCA,aAAcxpB,EAA/C,EAA+CA,SAAUyB,EAAzD,EAAyDA,YAErDgoB,EAAYF,EAAWznC,MAAK,SAAC2S,GAAD,OAAOA,EAAEoD,KAAOc,KAC5C+wB,EAAc1pB,EAASzV,QAAO,SAACvC,GAAD,OAAOwhC,EAAavxB,SAASjQ,EAAE6P,OAEjE,OACE,yBAAKF,IAAKgB,EAAevY,UAAU,mBACjC,yBAAKA,UAAU,qBAAqBqC,QAASzB,KAAK6B,QAChD,yBAAKzC,UAAU,mBAAmBqpC,EAAUzyB,MAC5C,yBAAK5W,UAAU,mBAAmBiD,MAAM,yBACrCT,EAAO,IAAM,MAIjBA,GACC,yBAAKxC,UAAU,qBACZspC,EAAYhlC,KAAI,SAACilC,GAChB,OACE,yBACElnC,QAAS,kBACPgf,EAAY,CAAC,CAAExL,YAAa0zB,EAAG9xB,GAAIc,oBAErCvY,UAAU,mBACVuX,IAAKgyB,EAAG9xB,GACRxU,MAAM,aAEN,+BACE,+BACE,4BACE,4BAAKsmC,EAAGtmC,OACR,4BAAK,EAAKgmC,QAAQM,EAAGC,WACrB,4BACG,EAAKtiB,WAAWqiB,EAAG9zB,aADtB,KACsC,IACnC,EAAKyR,WAAWqiB,EAAG3wB,2B,GAvDZ3Y,aAsE5BwpC,G,4JACJ,WAAU,IAAD,OACH,EACF7oC,KAAKP,MADDuf,EAAN,EAAMA,SAAUupB,EAAhB,EAAgBA,WAAYprB,EAA5B,EAA4BA,kBAAmBsD,EAA/C,EAA+CA,YAAa/I,EAA5D,EAA4DA,KAIxDuI,EADcjB,EAASzV,QAAO,SAACvC,GAAD,OAAOA,EAAE8Y,SAAWpI,KAChChU,KAAI,SAAC6H,GAAD,OAAOA,EAAEsL,MAE/BiyB,EAAgB3rB,EAAkB5T,QACpC,SAACkK,GAAD,OACEwM,EAAIhJ,SAASxD,EAAEwB,eACd,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,IAAIgC,SAASxD,EAAEkE,kBAG7C,SAASoxB,EAAYC,EAAKC,GACxB,OAAOA,EAAO1/B,QAAO,SAACkK,GAAD,OAAOA,EAAEkE,gBAAkBqxB,KAGlD,SAASE,EAAWF,EAAKC,GACvB,OAAOA,EAAOlD,WAAU,SAACtyB,GAAD,OAAOA,EAAEkE,gBAAkBqxB,KAIrD,IADA,IAAIG,EAAS,GACJriC,EAAI,EAAGA,EAAIgiC,EAAcvoC,OAAQuG,IAAK,CAE7C,GAAkB,IADTiiC,EAAYD,EAAchiC,GAAG6Q,cAAewxB,GAC9C5oC,OACL4oC,EAAOxoC,KAAK,CACVgX,cAAemxB,EAAchiC,GAAG6Q,cAChCqH,SAAU,CAAC8pB,EAAchiC,GAAGmO,oBAI9Bk0B,EADYD,EAAWJ,EAAchiC,GAAG6Q,cAAewxB,IACzCnqB,SAASre,KAAKmoC,EAAchiC,GAAGmO,aAIjD,OACE,yBAAK7V,UAAU,iBACZ+pC,EAAOzlC,KAAI,SAAClD,GAAD,OACV,kBAAC,GAAD,CACEmW,IAAKnW,EAAMmX,cACXA,cAAenX,EAAMmX,cACrB6wB,aAAchoC,EAAMwe,SACpBupB,WAAYA,EACZvpB,SAAUA,EACVyB,YAAaA,EACb6nB,MAAO,EAAK7oC,MAAM6oC,gB,GA9CDjpC,aA2Gd+pC,G,4MApDbznC,MAAQ,G,4CACR,WACE,IAAI,EAA2D3B,KAAKP,MAA9Duf,EAAN,EAAMA,SAAUupB,EAAhB,EAAgBA,WAAYprB,EAA5B,EAA4BA,kBAAmBsD,EAA/C,EAA+CA,YAC/C,OACE,yBAAKrhB,UAAU,aACb,kBAAC,KAAD,CACEiD,MAAM,kBACN5B,MAAM,OACN2B,QACE,kBAAC,GAAD,CACE4c,SAAUA,EACVupB,WAAYA,EACZprB,kBAAmBA,EACnBsD,YAAaA,EACb6nB,MAAOtoC,KAAKP,MAAM6oC,MAClB5wB,KAAK,kBAIX,kBAAC,KAAD,CACErV,MAAM,iBACN5B,MAAM,OACN2B,QACE,kBAAC,GAAD,CACE4c,SAAUA,EACVupB,WAAYA,EACZprB,kBAAmBA,EACnBsD,YAAaA,EACb6nB,MAAOtoC,KAAKP,MAAM6oC,MAClB5wB,KAAK,gBAIX,kBAAC,KAAD,CACErV,MAAM,mBACN5B,MAAM,OACN2B,QACE,kBAAC,GAAD,CACE4c,SAAUA,EACVupB,WAAYA,EACZprB,kBAAmBA,EACnBsD,YAAaA,EACb6nB,MAAOtoC,KAAKP,MAAM6oC,MAClB5wB,KAAK,iB,GA5CKrY,aCjCTgqC,G,4JAzFb,WAKE,IAJA,IAGIr/B,EAHA,EAAyChK,KAAKP,MAA5C0jB,EAAN,EAAMA,eAAgBmmB,EAAtB,EAAsBA,aAAc1nC,EAApC,EAAoCA,KAChC2nC,EAAkBpmB,EAAe5Z,QAAO,SAACoL,GAAD,OAAWA,EAAMwgB,UACzD10B,EAAQ,GAEHqG,EAAI,EAAGA,EAAIyiC,EAAgBhpC,OAAQuG,IAExB,YADlBkD,EAAIu/B,EAAgBziC,IACdo/B,SACJzlC,EAAME,KACJ,yBAAKgW,IAAK7P,EAAG1H,UAAU,gBACpB4K,EAAE3H,MACH,6BAAM2H,EAAEgM,MACR,kBAAC,GAAD,CACEnO,IAAKmC,EAAEnC,IACPD,IAAKoC,EAAEpC,IACPkN,KAAM9K,EAAE8K,KACR3M,OAAQ6B,EAAE7B,OACVmV,gBAAiBtT,EAAEsT,gBACnBD,aAAcrT,EAAEqT,eAElB,6BAAMrT,EAAEw/B,aAAa/I,YACrB,uCAAal6B,KAAKkF,MAAoB,IAAdzB,EAAEy/B,WAAmB,IAA7C,KACA,uBAAGtY,KAAMnnB,EAAEm9B,eAAgB9kC,MAAM,eAC9B2H,EAAEo9B,cAKO,WAAdp9B,EAAEk8B,SACJzlC,EAAME,KACJ,yBAAKgW,IAAK7P,EAAG1H,UAAU,gBACpB4K,EAAE3H,MACH,6BAAM2H,EAAEgM,MACR,kBAAC,EAAD,CACEnO,IAAKmC,EAAEnC,IACPD,IAAKoC,EAAEpC,IACPkN,KAAM9K,EAAE8K,KACR3M,OAAQ6B,EAAE7B,SAEZ,6BAAM6B,EAAEw/B,aAAa/I,YACrB,uCAAal6B,KAAKkF,MAAoB,IAAdzB,EAAEy/B,WAAmB,IAA7C,KACA,uBAAGtY,KAAMnnB,EAAEm9B,eAAgB9kC,MAAM,eAC9B2H,EAAEo9B,cAKO,UAAdp9B,EAAEk8B,SACJzlC,EAAME,KACJ,yBAAKgW,IAAK7P,EAAG1H,UAAU,gBACpB4K,EAAE3H,MACH,6BAAM2H,EAAEgM,MACR,kBAAC,EAAD,CACEnO,IAAKmC,EAAEnC,IACPD,IAAKoC,EAAEpC,IACPkN,KAAM9K,EAAE8K,KACR3M,OAAQ6B,EAAE7B,SAEZ,6BAAM6B,EAAEw/B,aAAa/I,YACrB,uCAAal6B,KAAKkF,MAAoB,IAAdzB,EAAEy/B,WAAmB,IAA7C,KACA,uBAAGtY,KAAMnnB,EAAEm9B,eAAgB9kC,MAAM,eAC9B2H,EAAEo9B,cAMb,OAAI3mC,EAAMF,OAAS,EAEf,yBAAKnB,UAAWwC,EAAO,SAAW,eAChC,yBACExC,UAAU,eACVqC,QAAS6nC,EACTjnC,MAAOT,EAAO,cAAgB,eAE9B,yBAAKxC,UAAU,qBAAf,WAGF,yBAAKA,UAAWwC,EAAO,iBAAmB,uBACvCnB,IAKA,kC,GArFQpB,a,8CCyDNqqC,I,0NAxDb/nC,MAAQ,CACNkV,GAAItQ,KAAKkF,MAAsB,IAAhBlF,KAAK+uB,W,uDAEtB,WACE,IAAIltB,EAAS,CAAC,OAAQ,OAClB,WAAYpI,KAAKP,QACnB2I,EAASpI,KAAKP,MAAM2I,QAEtB,IAAIqE,EAAO,EAKX,GAJI,SAAUzM,KAAKP,QACjBgN,EAAOzM,KAAKP,MAAMgN,KAAO,GAGvB,YAAazM,KAAKP,MAAO,CAC3B,IAAI,EAAwBO,KAAKP,MAA3BwkB,EAAN,EAAMA,QAASY,EAAf,EAAeA,SACf7kB,KAAK2U,MAAQpS,KAAEuiB,UAAUD,EAASZ,GAASjP,IAAK,CAC9C+P,YAAaF,EAASZ,GAASc,cAMnC/kB,KAAK0D,IAAMnB,KAAEmB,IAAI,WAAa1D,KAAK2B,MAAMkV,GAAI,CAC3CsO,cAAc,EACdwkB,iBAAiB,EACjBC,UAAU,EACV5kB,aANgB,EAOhB5c,OAAQA,EACRqE,KAAMA,EACN2Y,QAAS,EACTC,QAAS,KAEXrlB,KAAK2U,MAAM7P,MAAM9E,KAAK0D,O,gCAGxB,WACE,IAAI,EAAmB1D,KAAKP,MAAtB2I,EAAN,EAAMA,OAAQqE,EAAd,EAAcA,KACdzM,KAAK0D,IAAImmC,QAAQzhC,EAAQqE,K,oBAG3B,WACE,IAAMoK,EAAO7W,KAAK2B,MAAZkV,GACF,EAA+B7W,KAAKP,MAAlCwkB,EAAN,EAAMA,QAAS6lB,EAAf,EAAeA,gBACf,OACE,kBAAC,IAAM7jB,SAAP,KACE,yBACEpP,GAAI,WAAaA,EACjBpV,QAAS,WACPqoC,EAAgB7lB,W,GAjDN5kB,cCiCP0qC,I,mNAjCbC,QAAU,SAAC/+B,EAAKgZ,GAGd,IAFA,IAAI3jB,EAAO,GACPmvB,EAAMxkB,EAAIg/B,QAAQhmB,GACbnd,EAAI2oB,EAAM,EAAG3oB,EAAImE,EAAI1K,OAAQuG,IAAKxG,EAAKK,KAAKsK,EAAInE,IACzD,IAAK,IAAIA,EAAI,EAAGA,EAAI2oB,EAAK3oB,IAAKxG,EAAKK,KAAKsK,EAAInE,IAC5C,OAAOxG,G,4CAET,WACE,IAAI,EAAuDN,KAAKP,MAA1D2I,EAAN,EAAMA,OAAQqE,EAAd,EAAcA,KAAMq9B,EAApB,EAAoBA,gBAAiBjlB,EAArC,EAAqCA,SAAUZ,EAA/C,EAA+CA,QAC3C3jB,EAAON,KAAKgqC,QAAQjzB,OAAOC,KAAK6N,GAAWZ,GAC/C,OACE,yBAAK7kB,UAAU,iBACZkB,EAAKoD,KAAI,SAAC0H,EAAGc,GAAJ,OACR,yBACEyK,IAAKvL,EACL/I,MAAOwiB,EAASzZ,GAAG/I,MACnBjD,UAAqB,IAAV8M,EAAc,eAAiB,WAE1C,kBAAC,GAAD,CACE9D,OAAQA,EACRqE,KAAMA,EACNwX,QAAS7Y,EACTyZ,SAAUA,EACVilB,gBAAiBA,IAEnB,yBAAK1qC,UAAU,gBAAgBylB,EAASzZ,GAAG/I,gB,GA1BzBhD,c,UCYxB6qC,G,4MACJvoC,MAAQ,G,EACRwoC,aAAe,SAAC5pB,GACdA,EAAM4b,mB,4CAER,WACE,IAAI,EAAoCn8B,KAAKP,MAAvC4C,EAAN,EAAMA,MAAOD,EAAb,EAAaA,QAASihB,EAAtB,EAAsBA,QAAS+mB,EAA/B,EAA+BA,KAC/B,OACE,yBAAKhrC,UAAWikB,EAAU,SAAW,cAAe5hB,QAAS2oC,GAC3D,yBAAKhrC,UAAU,gBACb,yBAAKA,UAAU,uBACZiD,EACD,yBAAKjD,UAAU,QAAQqC,QAAS2oC,GAAhC,SAIF,yBAAKhrC,UAAU,uBAAuBqC,QAASzB,KAAKmqC,cACjD/nC,S,GAjBO/C,aAyBdgrC,G,4MACJ1oC,MAAQ,CACN2lB,KAAK,GAAD,OAAK,EAAK7nB,MAAM0X,SAAS+J,WAAzB,YAAuC,EAAKzhB,MAAM0X,SAAS0P,cAC/DtN,MAAO,EAAK9Z,MAAM8Z,O,EAEpB+wB,aAAe,SAAC/pB,GACd,EAAKze,SAAS,CAAEwlB,KAAM/G,EAAMnR,OAAOjP,S,EAGrC8+B,cAAgB,SAAC1e,GACf,EAAKze,SAAS,CAAEyX,MAAOgH,EAAMnR,OAAOjP,S,EAGtCoqC,OAAS,WACP,IAAI,EAAkB,EAAK5oC,MAArB2lB,EAAN,EAAMA,KAAM/N,EAAZ,EAAYA,MACZ,EAAK9Z,MAAMw/B,cAAc1lB,GACzB,IAAIpC,EAAW,IAAIK,KAAK,EAAK/X,MAAM0X,SAASG,WACxCkzB,EAAWljB,EAAK9G,MAAM,KAC1BrJ,EAASszB,SAASD,EAAS,IAC3BrzB,EAASuzB,WAAWF,EAAS,IAC7B,EAAK/qC,MAAMuhC,iBAAiB7pB,I,EAG9BwzB,mBAAqB,SAACxoC,GAChBA,EAAUgV,WAAa,EAAK1X,MAAM0X,UACpC,EAAKrV,SAAS,CACZwlB,KAAK,GAAD,OAAK,EAAK7nB,MAAM0X,SAAS+J,WAAzB,YAAuC,EAAKzhB,MAAM0X,SAAS0P,gBAG/D1kB,EAAUoX,QAAU,EAAK9Z,MAAM8Z,OACjC,EAAKzX,SAAS,CACZyX,MAAO,EAAK9Z,MAAM8Z,S,4CAKxB,WACE,OACE,yBAAKna,UAAU,aACb,2BACEA,UAAU,aACVsY,KAAK,OACLvX,MAAOH,KAAK2B,MAAM2lB,KAClBpmB,SAAUlB,KAAKsqC,eAEjB,2BACElrC,UAAU,cACVsY,KAAK,SACLvX,MAAOH,KAAK2B,MAAM4X,MAClBrY,SAAUlB,KAAKi/B,gBAXnB,IAaG,4BAAQx9B,QAASzB,KAAKuqC,QAAtB,e,GAnDelrC,aAyDlBurC,G,4MACJjpC,MAAQ,CACNkpC,OAAM9oC,OAAO+oC,OAAOvlC,MAAQ,KAC5BwlC,aAAa,EACbC,WAAW,EACXC,gBAAgB,EAChB9nB,eAAgB,GAChBolB,WAAY,GACZvpB,SAAU,GACVksB,UAAW,GACX/tB,kBAAmB,GACnByG,SAAS,EACT0gB,SAAU,GACV6G,OAAQ,GACRh0B,SAAU,IAAIK,KACd+B,MAAO,EACPgoB,SAAU,IACVn5B,OAAQ,CAAC,MAAO,MAChBqE,KAAM,EACNwX,QAAS,eACT4d,OAAO,EACPuJ,UAAW,GACXC,YAAa,GACbn0B,UAAU,EACV6H,cAAc,EACdoW,QAAQ,G,EAGVmW,kBAAoB,WAClB,EAAKxpC,SAAS,CAAEid,cAAe,EAAKpd,MAAMod,gB,EAG5CwsB,SAAW,WACT,EAAKzpC,SAAS,CAAE+oC,MAAM,IAAS,WAC7B9oC,OAAOC,cAAc,IAAIC,MAAM,e,EAInCupC,SAAW,WACT,EAAK1pC,SAAS,CAAE+oC,MAAM,IAAQ,WAC5B9oC,OAAOC,cAAc,IAAIC,MAAM,e,EAInCqnC,aAAe,WACb,EAAKxnC,SAAS,CAAEqzB,QAAS,EAAKxzB,MAAMwzB,U,EAGtCsW,mBAAqB,WACnB,EAAK3pC,SAAS,CAAEmpC,gBAAgB,K,EAGlCtH,mBAAqB,WACnB,EAAK7hC,SAAS,CAAEmpC,gBAAgB,K,EAGlCS,cAAgB,WACd,EAAK5pC,SAAS,CAAEkpC,WAAW,K,EAG7BtH,cAAgB,WACd,EAAK5hC,SAAS,CAAEkpC,WAAW,K,EAG7BW,gBAAkB,WAChB,EAAK7pC,SAAS,CAAEipC,aAAa,K,EAG/Ba,gBAAkB,WAChB,EAAK9pC,SAAS,CAAEipC,aAAa,K,EAG/BnJ,WAAa,WACX,EAAK9/B,SAAS,CAAE+/B,OAAO,EAAOuJ,UAAW,M,EAG3CvlB,eAAiB,SAACpZ,EAAMrE,GAClBqE,IAAS,EAAK9K,MAAM8K,MAAQrE,IAAW,EAAKzG,MAAMyG,QACpD,EAAKtG,SAAS,CAAE2K,OAAMrE,Y,EAI1ByjC,Y,uCAAc,WAAOC,GAAP,SAAA3gC,EAAA,sDACZ,EAAKrJ,SAAS,CAAE8hB,SAAS,GAAzB,sBAAiC,kEAAAzY,EAAA,2DAC3B,aAAc2gC,GADa,mBAUzB,EAAKnqC,MAPPqd,EAH2B,EAG3BA,SACA7B,EAJ2B,EAI3BA,kBACAorB,EAL2B,EAK3BA,WACApxB,EAN2B,EAM3BA,SACAoC,EAP2B,EAO3BA,MACA4xB,EAR2B,EAQ3BA,OACAj0B,EAT2B,EAS3BA,SAEIotB,EAAawH,EAAbxH,SACF,aAAcwH,IAAU30B,EAAW20B,EAAS30B,UAC5CgM,EAAiB,GACjB4oB,EAAgB/3B,KAAKC,MAAMD,KAAKE,UAAUowB,IACrCx9B,EAAI,EAfgB,YAebA,EAAIilC,EAAcxrC,QAfL,wBAgBvB0U,EAAc82B,EAAcjlC,GAAG,GAC/B6Q,EAAgBo0B,EAAcjlC,GAAG,GAjBV,UAmBnB,EAAKklC,YACT1H,EACArvB,EACA0C,EACAqH,EACAmE,EACAhG,EACAorB,EACApxB,EACAoC,EACA4xB,EACAj0B,GA9BuB,iBAkBxBiM,EAlBwB,EAkBxBA,eAAgBnE,EAlBQ,EAkBRA,SAAUslB,EAlBF,EAkBEA,SAAUptB,EAlBZ,EAkBYA,SAlBZ,QAeapQ,IAfb,yBAkC3B,EAAKmlC,oBAAoB9oB,GADrBtO,EAjCuB,EAiCvBA,YAAamD,EAjCU,EAiCVA,YAAagnB,EAjCH,EAiCGA,SAAUxhB,EAjCb,EAiCaA,SAE1CsuB,EAAQ,eAAqB3oB,EAC7B2oB,EAAQ,SAAe9sB,EApCM,QAsC/B8sB,EAAQ,SAAc,EACtB,EAAKhqC,SAAS,CACZ+S,cACAmD,cACAgnB,WACAxhB,WACAtG,WACA6H,cAAc,IAEhB,EAAKjd,SAASgqC,GA/CiB,6CADrB,2C,wDAoDdtK,iBAAmB,SAACD,GACdA,IAAa,EAAK5/B,MAAM4/B,UAC1B,EAAKz/B,SAAS,CAAEy/B,c,EAIpBP,iB,uCAAmB,WAAO7pB,GAAP,eAAAhM,EAAA,yDACbgM,EAASG,YAAc,EAAK3V,MAAMwV,SAASG,UAD9B,uBAETiC,EAAU,EAAK5X,MAAf4X,MAFS,SAGT,EAAK2yB,eAAe/0B,EAAUoC,GAHrB,2C,wDAOnB0lB,c,uCAAgB,WAAO1lB,GAAP,eAAApO,EAAA,sDACVoO,IAAU,EAAK5X,MAAM4X,QACjBpC,EAAa,EAAKxV,MAAlBwV,SACN,EAAKrV,SAAS,CAAEyX,SAAhB,sBAAyB,sBAAApO,EAAA,sDACvB,EAAK+gC,eAAe/0B,EAAUoC,GADP,6CAHb,2C,wDAShBuwB,gBAAkB,SAAC7lB,GACjB,EAAKniB,SAAS,CAAEmiB,a,EAGlB+jB,YAAc,SAAC7kB,GACb,EAAKrhB,SAAS,CAAE8hB,SAAS,IAAQ,WAE/B,IADA,IAAI0gB,EAAW,GACNx9B,EAAI,EAAGA,EAAIqc,EAAe5iB,OAAQuG,IACzCw9B,EAAS3jC,KAAK,CACZwiB,EAAerc,GAAGmO,YAClBkO,EAAerc,GAAG6Q,gBAGtB,EAAK7V,SAAS,CAAEqhB,iBAAgBmhB,WAAU1gB,SAAS,Q,EAIvDnD,Y,uCAAc,WAAOR,GAAP,SAAA9U,EAAA,sDACZ,EAAKrJ,SAAS,CAAE8hB,SAAS,GAAzB,sBAAiC,kEAAAzY,EAAA,wDAW3B,EAAKxJ,MATPqd,EAF6B,EAE7BA,SACAslB,EAH6B,EAG7BA,SACAnhB,EAJ6B,EAI7BA,eACAhG,EAL6B,EAK7BA,kBACAorB,EAN6B,EAM7BA,WACApxB,EAP6B,EAO7BA,SACAoC,EAR6B,EAQ7BA,MACA4xB,EAT6B,EAS7BA,OACAj0B,EAV6B,EAU7BA,SAEOpQ,EAAI,EAZkB,YAYfA,EAAImZ,EAAI1f,QAZO,0BAaQ0f,EAAInZ,GAAnCmO,EAbuB,EAavBA,YAAa0C,EAbU,EAaVA,eAIV,IAFP3D,KAAKE,UAAUowB,GAAU2F,QACvBj2B,KAAKE,UAAU,CAACe,EAAa0C,MAG/B2sB,EAAS6H,QAAQ,CAACl3B,EAAa0C,IAnBJ,SAsBrB,EAAKq0B,YACT1H,EACArvB,EACA0C,EACAqH,EACAmE,EACAhG,EACAorB,EACApxB,EACAoC,EACA4xB,EACAj0B,GAjCyB,gBAqB1BiM,EArB0B,EAqB1BA,eAAgBnE,EArBU,EAqBVA,SAAUslB,EArBA,EAqBAA,SAAUptB,EArBV,EAqBUA,SArBV,QAYCpQ,IAZD,yBAqC7B,EAAKmlC,oBAAoB9oB,GADrBtO,EApCyB,EAoCzBA,YAAamD,EApCY,EAoCZA,YAAagnB,EApCD,EAoCCA,SAAUxhB,EApCX,EAoCWA,SAE1C,EAAK1b,SAAS,CACZqhB,iBACAmhB,WACAtlB,WACA4E,SAAS,EACT/O,cACAmD,cACAgnB,WACAxhB,WACAtG,aA/C6B,6CADrB,2C,wDAqDd8uB,eAAiB,SAACnvB,GAChB,IAAI8G,EAAK9G,EAAG2J,MAAM,KAClB,EAAK1e,SAAS,CAAE8hB,SAAS,IAAQ,WAC/B,IAAI,EAAuC,EAAKjiB,MAA1CwhB,EAAN,EAAMA,eAAgBmhB,EAAtB,EAAsBA,SAAU6G,EAAhC,EAAgCA,OAChChoB,EAAiBA,EAAe5Z,QAAO,SAACxI,GAAD,OAAOA,EAAE8V,KAAOA,KACvDytB,EAAWA,EAAS/6B,QAClB,SAACxI,GAAD,OACEyK,SAASzK,EAAE,MAAQyK,SAASmS,EAAG,KAC/BnS,SAASzK,EAAE,MAAQyK,SAASmS,EAAG,OAEnCwtB,EAASA,EAAO5hC,QACd,SAACxI,GAAD,OACEyK,SAASzK,EAAE,MAAQyK,SAASmS,EAAG,KAC/BnS,SAASzK,EAAE,MAAQyK,SAASmS,EAAG,OAEnC,EAAK7b,SAAS,CAAEqhB,iBAAgBmhB,WAAU6G,SAAQvnB,SAAS,Q,EAI/DojB,gBAAkB,SAACnwB,GACjB,EAAK/U,SAAS,CAAE8hB,SAAS,IAAQ,WAC/B,IAAI,EAA6B,EAAKjiB,MAAhCwhB,EAAN,EAAMA,eAAgBgoB,EAAtB,EAAsBA,OAClBj/B,EAAQiX,EAAe4iB,WAAU,SAAChlC,GAAD,OAAOA,EAAE8V,KAAOA,KACjDwM,GAAWF,EAAejX,GAAOmX,QACrCF,EAAejX,GAAOmX,QAAUA,EAChC,IAAI+oB,EAAQv1B,EAAG2J,MAAM,KACjB6rB,EAAU,CAAC7gC,SAAS4gC,EAAM,IAAK5gC,SAAS4gC,EAAM,KAC9C/oB,EACF8nB,EAASA,EAAO5hC,QACd,SAAC+iC,GAAD,OAAOA,EAAE,KAAOD,EAAQ,IAAMC,EAAE,KAAOD,EAAQ,MAGjDlB,EAAOxqC,KAAK0rC,GAEd,EAAKvqC,SAAS,CAAEqhB,iBAAgBgoB,SAAQvnB,SAAS,Q,EAIrD4jB,gBAAkB,SAACrkB,GACjB,EAAKrhB,SAAS,CAAE8hB,SAAS,IAAQ,WAC/B,EAAK9hB,SAAS,CAAEqhB,iBAAgBS,SAAS,Q,EAI7C2oB,cAAgB,SAAChsB,GACf,EAAKze,SAAS,CAAEmiB,QAAS1D,EAAMnR,OAAOjP,S,EAGxCqsC,eAAiB,SAACjN,EAAO5nB,GACvB,IAEI80B,EAFA/0B,EAAO,UAGX,GAFsB,KAAlBC,IAAsBD,EAAO,UAE7BX,OAAOC,KAAKuoB,GAAOtoB,SAAS,QAE9B,IAAK,IAAIN,KADT81B,EAAY,GACIlN,EACF,SAAR5oB,IACF81B,EAAYA,EAAUhK,OAAOlD,EAAM5oB,GAAKe,UAI5C+0B,EAAYlN,EAAM77B,KAAI,SAAC3C,GAAD,OAAOA,EAAEZ,SAEjC,IAAIusC,EAAU,EAAKC,OAAOF,GAE1B,MAAO,CAAEG,QADK,EAAKC,OAAOJ,GACRC,UAASD,c,EAG7BK,oBAAsB,SAACvN,GACrBA,EAAQA,EAAMnxB,EACd,IAAIxG,EAAM,EAAK+kC,OAAOpN,GAEtB,MAAO,CAAEqN,QADC,EAAKC,OAAOtN,GACCmN,QAAS9kC,EAAK6kC,UAAWlN,I,EAGlDwN,wBAA0B,SAACC,GACzB,IAAInlC,EAAM6F,IACN9F,GAAO8F,IACPpE,EAAO0jC,EAAO,UAAP,iBAA4C1jC,OAIvD,OAHAA,EAAOA,EAAKC,QAAO,SAAC+0B,GAAD,OAAmB,OAATA,KAGtB,CAAEsO,QAFT/kC,EAAMtB,KAAKsB,IAAIA,EAAK,EAAKglC,OAAOvjC,IAETojC,QADvB9kC,EAAMrB,KAAKqB,IAAIA,EAAK,EAAK+kC,OAAOrjC,IACKmjC,UAAWnjC,I,EAGlD2jC,wBAA0B,SAACD,GAMzB,IALA,IAAInlC,EAAM6F,IACN9F,GAAO8F,IACPw/B,EAASF,EAAO,UAAP,OAAkC1jC,OAC3C6jC,EAASH,EAAO,UAAP,OAAkC1jC,OAC3CA,EAAO,GACFxC,EAAI,EAAGA,EAAIomC,EAAO3sC,OAAQuG,IAClB,OAAXomC,GACF5jC,EAAK3I,KAAK4F,KAAKuE,IAAIvE,KAAKwE,KAAKxE,KAAKC,IAAI0mC,EAAOpmC,GAAI,GAAKP,KAAKC,IAAI2mC,EAAOrmC,GAAI,MAK9E,MAAO,CAAE8lC,QAFT/kC,EAAMtB,KAAKsB,IAAIA,EAAK,EAAKglC,OAAOvjC,IAETojC,QADvB9kC,EAAMrB,KAAKqB,IAAIA,EAAK,EAAK+kC,OAAOrjC,IACKmjC,UAAWnjC,I,EAGlD8jC,cAAgB,SAACh7B,EAAMuF,EAAewF,GACpC,IAGIoiB,EAAQntB,EAHW+K,EAAkBrc,MACvC,SAAC6c,GAAD,OAAQA,EAAGhG,gBAAkBA,KAEGiG,MAAMtU,OAGxC,MAAO,CAAEsjC,QAFC,EAAKC,OAAOtN,GAECmN,QADb,EAAKC,OAAOpN,GACekN,UAAWlN,I,EAGlD8N,UAAY,SAACj7B,EAAMuF,EAAewF,EAAmB0C,GACnD,IAGI+sB,EAASF,EAHT7kC,EAAM6F,IACN9F,GAAO8F,IACP6xB,EAAQ,GAERkN,EAAY,GAEhB,GAAwB,YAApB5sB,EAA+B,CAAC,IAAD,EACE,EAAKutB,cACtCh7B,EACAuF,EACAwF,GAHCyvB,EAD8B,EAC9BA,QAASF,EADqB,EACrBA,QAASD,EADY,EACZA,UAMvB,GAAwB,aAApB5sB,EAAgC,CAAC,IAAD,EACC,EAAK2sB,eACtCp6B,EACAuF,GAFCi1B,EAD+B,EAC/BA,QAASF,EADsB,EACtBA,QAASD,EADa,EACbA,UAKvB,GAAwB,kBAApB5sB,EAAqC,CAAC,IAAD,EACJ,EAAKitB,oBAAoB16B,GAAzDw6B,EADoC,EACpCA,QAASF,EAD2B,EAC3BA,QAASD,EADkB,EAClBA,UAEvB,GAAwB,eAApB5sB,GAAwD,cAApBA,EACtC,GAAsB,KAAlBlI,EAAsB,CAAC,IAAD,EACW,EAAKs1B,wBAAwB76B,GAA7Dw6B,EADqB,EACrBA,QAASF,EADY,EACZA,QAASD,EADG,EACHA,cAChB,CAAC,IAAD,EAC8B,EAAKM,wBAAwB36B,GAA7Dw6B,EADE,EACFA,QAASF,EADP,EACOA,QAASD,EADhB,EACgBA,UAOzB,OAHIG,EAAU/kC,IAAKA,EAAM+kC,GACrBF,EAAU9kC,IAAKA,EAAM8kC,GAElB,CAAE7kC,MAAKD,MAAK23B,MADnBA,EAAQA,EAAMkD,OAAOgK,K,EAIvBE,OAAS,SAAC1hC,GAIR,IAHA,IAAIqiC,EAAMriC,EAAI1K,OACVqH,GAAO8F,IAEJ4/B,KACL1lC,EAAMqD,EAAIqiC,GAAO1lC,EAAMqD,EAAIqiC,GAAO1lC,EAEpC,OAAOA,G,EAGTilC,OAAS,SAAC5hC,GAIR,IAHA,IAAIqiC,EAAMriC,EAAI1K,OACVsH,EAAM6F,IAEH4/B,KACLzlC,EAAMoD,EAAIqiC,GAAOzlC,EAAMoD,EAAIqiC,GAAOzlC,EAEpC,OAAOA,G,EAGT0lC,WAAa,SAACC,GACZ,IAIIC,EAAaC,GAAU5sC,MAAK,SAACwK,GAAD,OAAOA,EAAE0K,OAASw3B,KAClD,OAAIC,EACKA,EAAWr7B,KANA,CAClB,CAAE5J,MAAO,UAAW2D,MAAO,GAC3B,CAAE3D,MAAO,UAAW2D,MAAO,K,EAU/BwhC,aAAe,SAACvlB,GACd,MAAa,SAATA,G,EAONwlB,YAAc,SAACz2B,EAAUoC,EAAO0J,GAG9B,IAFA,IAAIqE,EAAO,IAAI9P,KAAKL,GAAUG,UAAY,IACtCioB,EAAQ,GACHz4B,EAAI,EAAGA,EAAImc,EAAM1iB,OAAQuG,IAAK,CACrC,IAKI+mC,EASAC,EAdA9qB,EAASC,EAAMnc,GAAG+P,GAClBk3B,EAAU,IAAIv2B,KAAKyL,EAAMnc,GAAG+N,aAAayC,UAAY,IACrD02B,EAAU,IAAIx2B,KAAKyL,EAAMnc,GAAGkR,aAAaV,UAAY,IACrD0nB,EAAW/b,EAAMnc,GAAGk4B,SACpBxhB,EAAWyF,EAAMnc,GAAG0W,SAGtBqwB,EADEvmB,EAAOymB,GAAWzmB,EAAO0mB,EACZ,EAEAznC,KAAKsB,IAClBtB,KAAKuE,IAAIijC,EAAUzmB,GACnB/gB,KAAKuE,IAAIkjC,EAAU1mB,IAKrBwmB,EADEv0B,EAAQylB,GAAYzlB,EAAQiE,EACd,EAEAjX,KAAKsB,IACnBtB,KAAKuE,IAAIk0B,EAAWzlB,GACpBhT,KAAKuE,IAAI0S,EAAWjE,IAGxBgmB,EAAM5+B,KAAK,CAAEqiB,SAAQ6qB,eAAcC,kBAerC,OAbAvO,EAAM7rB,MAAK,SAACvI,EAAGC,GACb,OAAID,EAAE0iC,aAAeziC,EAAEyiC,cAEZ1iC,EAAE0iC,eAAiBziC,EAAEyiC,cAC1B1iC,EAAE2iC,cAAgB1iC,EAAE0iC,cAFjB,GAQC,KAGLvO,EAAM,GAAGvc,Q,EAGlBirB,aAAe,SAACh5B,EAAa0C,EAAewzB,GAE1C,IADA,IAAI9nB,GAAU,EACLvc,EAAI,EAAGA,EAAIqkC,EAAO5qC,OAAQuG,IAC7BmO,IAAgBk2B,EAAOrkC,GAAG,IAAM6Q,IAAkBwzB,EAAOrkC,GAAG,KAC9Duc,GAAU,GAGd,OAAOA,G,EAGT4oB,oBAAsB,SAAC9oB,GAMrB,IALA,IAAIF,EAAQ,GACRpO,EAAcnH,IACdsK,GAAetK,IAEf8P,EAAW,IACN1W,EAAI,EAAGA,EAAIqc,EAAe5iB,OAAQuG,IACzC+N,EAAc,IAAI2C,KAChBjR,KAAKsB,IAAIgN,EAAa,IAAI2C,KAAK2L,EAAerc,GAAG+N,eAEnDmD,EAAc,IAAIR,KAChBjR,KAAKqB,IAAIoQ,EAAa,IAAIR,KAAK2L,EAAerc,GAAGkR,eAEnDwF,EAAWjX,KAAKqB,IAAI4V,EAAU2F,EAAerc,GAAG0W,UAEhDyF,EAAQA,EAAMwf,OAAOtf,EAAerc,GAAGmc,OAQzC,OANAzF,EAAWjX,KAAKsB,IAAI,IAAK2V,GACrB3I,IAAgBnH,MAClBmH,GAAc,IAAI2C,MAAOF,UAAY,SACnCU,KAAiBtK,MAAUsK,GAAc,IAAIR,MAAOF,WACxDU,EAAc,IAAIR,KAAKQ,GAEhB,CAAEiL,QAAO+b,SAnBD,EAmBWxhB,WAAU3I,YADpCA,EAAc,IAAI2C,KAAK3C,GAC0BmD,gB,EAGnDX,aAAe,SAACwK,EAAK5W,GAGnB,IAFA,IAAIiB,EAAQ,EACR6V,EAAOxb,KAAKuE,IAAI+W,EAAM5W,EAAI,IACrBsR,EAAM,EAAGA,EAAMtR,EAAI1K,OAAQgc,IAAO,CACzC,IAAIyF,EAAUzb,KAAKuE,IAAI+W,EAAM5W,EAAIsR,IAC7ByF,EAAUD,IACZA,EAAOC,EACP9V,EAAQqQ,GAGZ,OAAOrQ,G,EAGTgiC,2BAA6B,SAACh2B,GAC5B,OAAO,IAAIV,KAAuB,IAAjBU,EAAO,QAAe,GAAK,GAAK,M,EAGnDi2B,4BAA8B,SAC5B/7B,EACA+K,EACAhG,EACAoC,EACAiE,GAEA,IAKItR,EALAwL,EAAOyF,EACRzZ,KAAI,SAACia,GAAD,OAAQA,EAAGC,KAAO,IAAMD,EAAGhG,iBAC/ByG,KAAK,KACJorB,EAAeryB,EACfsyB,EAAYlwB,EAEhB,GAAI7B,EAAKT,SAAS,QAAUS,EAAKT,SAAS,OAAQ,CAEhD,IAAI+G,EAAMb,EAAkBrc,MAAK,SAAC6c,GAAD,OAA6B,IAArBA,EAAGhG,iBACxCsG,EAAMd,EAAkBrc,MAAK,SAAC6c,GAAD,OAA6B,IAArBA,EAAGhG,iBAC5CzL,EAAQ,EAAKmL,aAAakC,EAAOnH,EAAK5M,GACtCgkC,EAAe,IAAIhyB,KAA6B,IAAxBpF,EAAK4L,EAAIJ,MAAM1R,IACvCu9B,EAAYr3B,EAAK6L,EAAIL,MAAM1R,QACtB,GACLwL,EAAKT,SAAS,OACdS,EAAKT,SAAS,QACdS,EAAKT,SAAS,OACd,CAEA,IAAIoH,EAAS,EAAKhH,aAAaF,EAASG,UAAY,IAAMlF,EAAI,GAC1DkM,EAAS,EAAKjH,aAAakC,EAAOnH,EAAI,GAC1Co3B,EAAe,IAAIhyB,KAAyB,IAApBpF,EAAI,EAAMiM,IAClCorB,EAAYr3B,EAAI,EAAMkM,QAEtB5G,EAAKT,SAAS,QACdS,EAAKT,SAAS,QACbS,EAAKT,SAAS,QAGf/K,EAAQ,EAAKmL,aAAaF,EAASG,UAAY,IAAMlF,EAAI,GACzDo3B,EAAe,IAAIhyB,KAAwB,IAAnBpF,EAAI,EAAMlG,IAClCu9B,EAAYtrB,WAAWX,IAEzB,MAAO,CAAEgsB,eAAcC,c,EAGzB2E,4BAA8B,SAACh8B,EAAM+E,EAAUoC,EAAO6tB,EAAYxyB,GAChE,IAAI40B,EAAeryB,EACfsyB,EAAYlwB,EAChB,GAAmB,eAAf6tB,EACOoC,EAAmCp3B,EAAzCkV,KAA2BmiB,EAAcr3B,EAArBmH,MACvBkwB,EAAYljC,KAAKuE,IAAIsH,EAAI,MAAJ,MACrBo3B,EAAe,IAAIhyB,KAAKpF,EAAI,WACvB,GAAmB,aAAfg1B,EACTqC,EAAY,EACZD,EAAe,IAAIhyB,KAAK5C,EAAKC,kBACxB,GAAI,CAAC,aAAc,QAAQoC,SAASmwB,GAAa,CAEtDqC,EAAY,EACZD,EAAe,IAAIhyB,KAFP,IAEYjR,KAAKkF,MAAM0L,EAASG,UAFhC,MAId,MAAO,CAAEkyB,eAAcC,c,EAGzBnjB,WAAa,SAACpO,GACZ,IAAMwO,EAAOxO,EAAK+I,cACZ0F,EAAQnR,OAAO0C,EAAK8I,WAAa,GAAGqtB,SAAS,EAAG,KAChDrY,EAAMxgB,OAAO0C,EAAK6I,WAAWstB,SAAS,EAAG,KACzC9N,EAAQ/qB,OAAO0C,EAAKgJ,YAAYmtB,SAAS,EAAG,KAC5CpY,EAAUzgB,OAAO0C,EAAK2O,cAAcwnB,SAAS,EAAG,KACtD,MAAM,GAAN,OAAU3nB,GAAV,OAAiBC,GAAjB,OAAyBqP,GAAzB,OAA+BuK,GAA/B,OAAuCtK,I,EAGzCqY,a,uCAAe,WACbr5B,EACA+N,EACApO,EACA25B,EACAp3B,EACAoC,EACA4D,EACAyC,GARa,iCAAAzU,EAAA,yDAUPqjC,EAAa55B,EAAb45B,SACAtD,EAAc,EAAKvpC,MAAnBupC,YACFuD,EAAavD,EAAUpqC,MACzB,SAACkG,GAAD,OACEA,EAAEiO,cAAgBA,GAClBjO,EAAEgc,SAAWA,GACbhc,EAAEmQ,WAAaA,GACfnQ,EAAEuS,QAAUA,MAjBH,yCAqBJ,CACLnH,KAAMq8B,EAAWr8B,KACjBo3B,aAAciF,EAAWjF,aACzBC,UAAWgF,EAAWhF,YAxBb,UA4BI,aAAX8E,EA5BO,kCA6BSG,IAAMC,IAAIC,IAAS,UAAY5rB,EAAS,YA7BjD,iBA6BN5Q,EA7BM,EA6BNA,KA7BM,EA8BsB,EAAK+7B,4BAClC/7B,EACA+K,EACAhG,EACAoC,EACAqG,EAAQpC,UALPgsB,EA9BM,EA8BNA,aAAcC,EA9BR,EA8BQA,UA9BR,+BAuCT+E,GADAA,EAAWA,EAASlX,QAAQ,YAAa,EAAKhR,WAAWnP,KACrCmgB,QAAQ,SAAU/d,GAvC7B,UAwCSm1B,IACfC,IAAIH,EAAU,CAAEK,QAAS,MACzBC,OAAM,SAACtwB,GACNrD,QAAQqD,MAAMA,GACd,IAAI4sB,EAAS,2CAAuCxrB,EAAQwnB,WAA/C,8IACb,EAAKtlC,SAAS,CACZ8hB,SAAS,EACTie,OAAO,EACPuJ,YACAC,YAAa7sB,EAAMuwB,aAjDhB,iBAwCN38B,EAxCM,EAwCNA,KAxCM,EAoDsB,EAAKg8B,4BAClCh8B,EACA+E,EACAoC,EACAqG,EAAQwnB,WACRxyB,GALC40B,EApDM,EAoDNA,aAAcC,EApDR,EAoDQA,UApDR,eA4DXyB,EAAUvqC,KAAK,CACbyR,OACA+E,WACAoC,QACAtE,cACA+N,SACAwmB,eACAC,cAEF,EAAK3nC,SAAS,CAAEopC,cArEL,kBAsEJ,CAAE94B,OAAMo3B,eAAcC,cAtElB,4C,sEA0EfuF,eAAiB,SAACzP,EAAOp3B,GAIvB,IAHA,IAEI8mC,EAAQ9iC,EAFRtE,EAAMtB,KAAKsB,IAAL,MAAAtB,KAAI,YAAQg5B,IAClB33B,EAAMrB,KAAKqB,IAAL,MAAArB,KAAI,YAAQg5B,IAEbz4B,EAAI,EAAGA,EAAIqB,EAAO5H,OAAQuG,IACvB,IAANA,EAASqB,EAAOrB,GAAGqF,MAAQ,EACtBrF,IAAMqB,EAAO5H,OAAS,EAAG4H,EAAOrB,GAAGqF,MAAQ,GAElD8iC,EAAK,GAAK9mC,EAAO5H,OAAS,GAAMuG,EAEhCqF,GADM,EAAK+iC,SAAS3P,EAAO0P,GACZpnC,IAAQD,EAAMC,GAC7BM,EAAOrB,GAAGqF,MAAQA,GAGtB,OAAOhE,G,EAGT+mC,SAAW,SAACjkC,EAAKgkC,GACf,IAAME,EAASlkC,EAAIgS,MAAM,GAAGvJ,MAAK,SAACvI,EAAGC,GAAJ,OAAUD,EAAIC,KACzCgkC,GAAOD,EAAO5uC,OAAS,GAAK0uC,EAC5BpvC,EAAO0G,KAAKmE,MAAM0kC,GAClBC,EAAOD,EAAMvvC,EACnB,YAAyB+hB,IAArButB,EAAOtvC,EAAO,GACTsvC,EAAOtvC,GAAQwvC,GAAQF,EAAOtvC,EAAO,GAAKsvC,EAAOtvC,IAEjDsvC,EAAOtvC,I,EAIlB0O,SAAW,SAAC4U,GACV,IAAImsB,EAAansB,EAAezf,KAAI,SAAC6H,GAAD,OAAOA,EAAE/C,SAoC7C,MAnCa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEwBe,QAAO,SAAC+B,GAAD,OAAQgkC,EAAWr4B,SAAS3L,MACzC,I,EAGtB0gC,Y,uCAAc,WACZ1H,EACArvB,EACA0C,EACAqH,EACAmE,EACAhG,EACAorB,EACApxB,EACAoC,EACA4xB,EACAj0B,GAXY,mDAAA/L,EAAA,yDAkBG,IAHbgY,EAAe5Z,QACb,SAACi5B,GAAD,OACEA,EAAGvtB,cAAgBA,GAAeutB,EAAG7qB,gBAAkBA,KACzDpX,OAlBQ,oBAqBNqf,EAAUZ,EAASle,MAAK,SAACkG,GAAD,OAAOA,EAAE6P,KAAO5B,KACxCwzB,EAAYF,EAAWznC,MAAK,SAAC2S,GAAD,OAAOA,EAAEoD,KAAOc,MAE5CiI,IAAW6oB,EAxBL,iCA0BoBiG,IAAMC,IAChCC,IAAS,sBAAwB35B,EAAc,cA3BzC,uBA0BIgO,EA1BJ,EA0BF7Q,KAKF4Q,EAAS,EAAK4qB,YAAYz2B,EAAUoC,EAAO0J,GAC3CssB,EAAWtsB,EAAMniB,MAAK,SAACwL,GAAD,OAAOA,EAAEuK,KAAOmM,KAGtCrF,EAAKR,EAAkB5T,QAAO,SAACvC,GAAD,OAAOA,EAAEiO,cAAgBA,KAnCnD,UAqCsC,EAAKq5B,aACjDr5B,EACA+N,EACAusB,EACA3vB,EAAQwnB,WACRjwB,EACAoC,EACAoE,EACAiC,GA7CM,oBAqCFxN,EArCE,EAqCFA,KAAMo3B,EArCJ,EAqCIA,aAAcC,EArClB,EAqCkBA,WAYtB,CAAC,IAAIxyB,SAAShC,GAjDV,kCAkDsBy5B,IAAMC,IAChCC,IAAS,0BAnDL,iBAkDG13B,EAlDH,EAkDH9E,KAlDG,UAwDkB,EAAKi7B,UAC7Bj7B,EACAuF,EACAgG,EACAiC,EAAQC,iBAJJhY,EAxDE,EAwDFA,IAAKD,EAxDH,EAwDGA,IAAK23B,EAxDR,EAwDQA,MAQZzqB,EAAO6I,EAAG7c,MAAK,SAACkG,GAAD,OAAOA,EAAE2Q,gBAAkBA,KAAe7C,KAGzDH,EAnEI,uCAoEHX,KAAKC,MAAMD,KAAKE,UAAU0L,EAAQ4vB,kBAClCx7B,KAAKC,MAAMD,KAAKE,UAAUu0B,KAC1Bz0B,KAAKC,MAAMD,KAAKE,UAAU0L,KAIT,KAAlBjI,IACFhD,EAAK,QAAc,SAIW,kBAA5BiL,EAAQC,gBACVlL,EAAK,sBAA2B,EAEhCA,EAAK,qBAA2B,KAI9B86B,EAAoB,EAAKlC,WAAW54B,EAAMxM,QAI9CwM,EAAK,SAAc,EACnBA,EAAK,WAAiB,IACtBA,EAAK,MAAYsO,EACjBtO,EAAK,KAAWvC,EAChBuC,EAAK,IAAU9M,EACf8M,EAAK,IAAU/M,EACf+M,EAAK,QAAc9M,EACnB8M,EAAK,QAAc/M,EACnB+M,EAAK,KAAWG,EAChBH,EAAK,QAAc,EACnBA,EAAK,MAAY4qB,EACjB5qB,EAAK,OAAaqO,EAClBrO,EAAK,kBAAwBgJ,EAC7BhJ,EAAK,YAAkBM,EACvBN,EAAK,cAAoBgD,EACzBhD,EAAK,aAAmB60B,EACxB70B,EAAK,UAAgB80B,EACrB90B,EAAK,OAAa86B,EAClB96B,EAAK,MAAY,EAAKpG,SAAS4U,GAC/BxO,EAAK,GAASM,EAAYwrB,WAAa,IAAM9oB,EAAc8oB,WAC3D9rB,EAAK,QAAc,EAAKs5B,aACtBh5B,EACA0C,EACAwzB,GAGFhoB,EAAegpB,QAAQx3B,GApHf,wBAsHRoc,MAAM,+CACNuT,EAAWA,EAAS/6B,QAClB,SAACxI,GAAD,OACEyK,SAASzK,EAAE,MAAQyK,SAASyJ,IAC5BzJ,SAASzK,EAAE,MAAQyK,SAASmM,MA1HxB,iCA8HL,CAAEwL,iBAAgBnE,WAAUslB,WAAUptB,aA9HjC,4C,4EAiIdg1B,e,uCAAiB,WAAO/0B,EAAUoC,GAAjB,IACNm2B,EADM,SAAAvkC,EAAA,sDACNukC,EADM,SACKzsB,EAAOD,GACzB,OAAOC,EAAMniB,MAAK,SAACwL,GAAD,OAAOA,EAAEuK,KAAOmM,MAEpC,EAAKlhB,SAAS,CAAE8hB,SAAS,EAAMzM,WAAUoC,SAAzC,sBAAkD,0DAAApO,EAAA,wDACb,EAAKxJ,MAAlCwhB,EAD0C,EAC1CA,eAAgBnE,EAD0B,EAC1BA,SAEblY,EAAI,EAHmC,YAGhCA,EAAIqc,EAAe5iB,QAHa,wBAK1CyiB,EAAS,EAAK4qB,YAAYz2B,EAAUoC,EAAO4J,EAAerc,GAAGmc,OAC7DssB,EAAWG,EAAWvsB,EAAerc,GAAGmc,MAAOD,GANL,SASA,EAAKsrB,aACjDnrB,EAAerc,GAAGmO,YAClB+N,EACAusB,EACApsB,EAAerc,GAAGsgC,WAClBjwB,EACAoC,EACA4J,EAAerc,GAAGqW,kBAClBgG,EAAerc,IAjB6B,gBASxCsL,EATwC,EASxCA,KAAMo3B,EATkC,EASlCA,aAAcC,EAToB,EASpBA,UAToB,EAqBpB,EAAK4D,UAC7Bj7B,EACA+Q,EAAerc,GAAG6Q,cAClBwL,EAAerc,GAAGqW,kBAClBgG,EAAerc,GAAG+Y,iBAJdhY,EArBwC,EAqBxCA,IAAKD,EArBmC,EAqBnCA,IAAK23B,EArB8B,EAqB9BA,MAOZoQ,EAASppC,KAAKqB,IAAIA,EAAKub,EAAerc,GAAG0+B,SACzCoK,EAASrpC,KAAKsB,IAAIA,EAAKsb,EAAerc,GAAGw+B,SAC7CniB,EAAerc,GAAGsL,KAAOA,EACzB+Q,EAAerc,GAAGw+B,QAAUsK,EAC5BzsB,EAAerc,GAAG0+B,QAAUmK,EAC5BxsB,EAAerc,GAAGy4B,MAAQpc,EAAerc,GAAGy4B,MAAMkD,OAAOlD,GACzDpc,EAAerc,GAAGkc,OAASA,EAC3BG,EAAerc,GAAf,aAAoC0iC,EACpCrmB,EAAerc,GAAf,UAAiC2iC,EApCa,QAGL3iC,IAHK,uBAuChD,EAAKhF,SAAS,CACZkd,WACAmE,iBACAS,SAAS,IA1CqC,6CAJnC,2C,0DAmDjBqoB,oBAAsB,SAAC9oB,GAMrB,IALA,IAAIF,EAAQ,GACRpO,EAAcnH,IACdsK,GAAetK,IAEf8P,EAAW,IACN1W,EAAI,EAAGA,EAAIqc,EAAe5iB,OAAQuG,IACzC+N,EAAc,IAAI2C,KAChBjR,KAAKsB,IAAIgN,EAAa,IAAI2C,KAAK2L,EAAerc,GAAG+N,eAEnDmD,EAAc,IAAIR,KAChBjR,KAAKqB,IAAIoQ,EAAa,IAAIR,KAAK2L,EAAerc,GAAGkR,eAEnDwF,EAAWjX,KAAKqB,IAAI4V,EAAU2F,EAAerc,GAAG0W,UAEhDyF,EAAQA,EAAMwf,OAAOtf,EAAerc,GAAGmc,OAQzC,OANAzF,EAAWjX,KAAKsB,IAAI,IAAK2V,GACrB3I,IAAgBnH,MAClBmH,GAAc,IAAI2C,MAAOF,UAAY,SACnCU,KAAiBtK,MAAUsK,GAAc,IAAIR,MAAOF,WACxDU,EAAc,IAAIR,KAAKQ,GAEhB,CAAEiL,QAAO+b,SAnBD,EAmBWxhB,WAAU3I,YADpCA,EAAc,IAAI2C,KAAK3C,GAC0BmD,gB,EAGnD6N,eAAiB,SAACpZ,EAAMrE,GAClBqE,IAAS,EAAK9K,MAAM8K,MAAQrE,IAAW,EAAKzG,MAAMyG,QACpD,EAAKtG,SAAS,CAAE2K,OAAMrE,Y,EAI1BynC,oBAAsB,SAAC14B,GAerB,MAAM,GAAN,OAAUA,EAASmjB,mBAAmB,GAAI,CACxC1T,KAAM,UACNub,OAAQ,YAFV,YAGMhrB,EAAS4J,UAHf,YAda,CACX,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAMO5J,EAAS6J,YAJlB,YAKI7J,EAAS8J,gB,EAGf6uB,YAAc,WACZ,IAAI,EACF,EAAKnuC,MADD2iC,EAAN,EAAMA,SAAU6G,EAAhB,EAAgBA,OAAQh0B,EAAxB,EAAwBA,SAAUoC,EAAlC,EAAkCA,MAAO9M,EAAzC,EAAyCA,KAAMrE,EAA/C,EAA+CA,OAAQ6b,EAAvD,EAAuDA,QAASsd,EAAhE,EAAgEA,SAE1DwO,EAAa,EAAKtwC,MAAlBswC,SASN,MARI,aAAcA,IAAUzL,EAAWyL,EAASzL,UAC5C,WAAYyL,IAAU5E,EAAS4E,EAAS5E,QACxC,aAAc4E,IAAU54B,EAAW44B,EAAS54B,UAC5C,UAAW44B,IAAUx2B,EAAQw2B,EAASx2B,OACtC,SAAUw2B,IAAUtjC,EAAOsjC,EAAStjC,MACpC,WAAYsjC,IAAU3nC,EAAS2nC,EAAS3nC,QACxC,YAAa2nC,IAAU9rB,EAAU8rB,EAAS9rB,SAC1C,aAAc8rB,IAAUxO,EAAWwO,EAASxO,UACzC,CACL+C,WACA6G,SACAh0B,WACAoC,QACA9M,OACArE,SACA6b,UACAsd,a,wDAIJ,WACE,IAAMuO,EAAgB9vC,KAAKP,MAArBqwC,YACN,GAAIA,EAAa,CACf,IAAI,EASA9vC,KAAK2B,MAWTmuC,EAVe,CACbxL,SAXF,EACEA,SAWA6G,OAZF,EAEEA,OAWAh0B,SAbF,EAGEA,SAWAoC,MAdF,EAIEA,MAWA9M,KAfF,EAKEA,KAWArE,OAhBF,EAMEA,OAWA6b,QAjBF,EAOEA,QAWAsd,SAlBF,EAQEA,c,sEAgBN,oFAAAp2B,EAAA,+DAEiDnL,KAAK2B,MAA9CuV,EAFR,EAEQA,SAAU6H,EAFlB,EAEkBA,aAAc8rB,EAFhC,EAEgCA,KAAM1V,EAFtC,EAEsCA,OAC9B4a,EAAa/vC,KAAKP,MAAlBswC,SAHR,EAKI/vC,KAAK8vC,cADDxL,EAJR,EAIQA,SAAU6G,EAJlB,EAIkBA,OAAQh0B,EAJ1B,EAI0BA,SAAUoC,EAJpC,EAIoCA,MAAO9M,EAJ3C,EAI2CA,KAAMrE,EAJjD,EAIiDA,OAAQ6b,EAJzD,EAIyDA,QAASsd,EAJlE,EAIkEA,SAG5D,aAAcvhC,KAAKP,QAAO8hC,EAAWvhC,KAAKP,MAAM8hC,UAEhD,SAAUwO,IACZlF,EAAyB,YAAlBkF,EAASlF,MAGd,WAAYkF,IACd5a,EAA6B,YAApB4a,EAAS5a,QAdtB,kBAmBuB6a,QAAQC,IAAI,CAC7BvB,IAAMC,IAAIC,IAAS,+BACnBF,IAAMC,IAAIC,IAAS,aACnBF,IAAMC,IAAIC,IAAS,sBACnBF,IAAMC,IAAIC,IAAS,4BAvBzB,OAmBQsB,EAnBR,OAyBQ3H,EAAa2H,EAAO,GAAG99B,KACvB4M,EAAWkxB,EAAO,GAAG99B,MACrB+K,EAAoB+yB,EAAO,GAAG99B,MAEhB1O,KAAI,SAACia,GACrB,IAAInd,EAAQ+nC,EAAWznC,MAAK,SAAC2S,GAAD,OAAOA,EAAEoD,KAAO8G,EAAGhG,iBAE/C,OADAgG,EAAG3H,KAAOxV,EAAMwV,KACT2H,KAGLwF,EAAiB,GACZrc,EAAIw9B,EAAS/jC,OAAS,EApCnC,aAoCsCuG,GAAK,GApC3C,wBAqCUmO,EAAcqvB,EAASx9B,GAAG,GAC1B6Q,EAAgB2sB,EAASx9B,GAAG,GAtCtC,UAwCc9G,KAAKgsC,YACT1H,EACArvB,EACA0C,EACAqH,EACAmE,EACAhG,EACAorB,EACApxB,EACAoC,EACA4xB,EACAj0B,GAnDV,iBAuCSiM,EAvCT,EAuCSA,eAAgBnE,EAvCzB,EAuCyBA,SAAUslB,EAvCnC,EAuCmCA,SAAUptB,EAvC7C,EAuC6CA,SAvC7C,QAoC8CpQ,IApC9C,0BAwDM9G,KAAKisC,oBAAoB9oB,GADrBtO,EAvDV,EAuDUA,YAAamD,EAvDvB,EAuDuBA,YAAagnB,EAvDpC,EAuDoCA,SAAUxhB,EAvD9C,EAuD8CA,SAGZ,IAA1B2F,EAAe5iB,SAAcwe,GAAe,GAEhD/e,KAAK8B,SAAS,CACZqhB,iBACAolB,aACAvpB,WACA7B,oBACAyG,SAAS,EACT0gB,WACA6G,SACAh0B,WACAoC,QACA9M,OACArE,SACA6b,UACApP,cACAmD,cACAgnB,WACAxhB,WACAtG,WACAqqB,WACA+G,MAAO4H,EAAO,GAAG99B,KACjB2M,eACA8rB,OACA1V,WAlFN,kDAqFIha,QAAQqD,MAAR,MArFJ,iIAuFIxe,KAAK8B,SAAS,CACZ8hB,SAAS,EACTie,OAAO,EACPuJ,UA1FN,iIA2FMC,YAAa,KAAM0D,UA3FzB,0D,0EAgGA,WACE,IAAI,EAAmB/uC,KAAK2B,MAAtBkpC,EAAN,EAAMA,KAAM1V,EAAZ,EAAYA,OACRgb,GAAkB,EAEtB,OADInwC,KAAKP,MAAM0wC,kBAAiBA,GAAkB,GAEhD,yBAAK/wC,UAAU,OACb,yBACEA,UAAWyrC,EAAO,UAAY,cAC9BppC,QAAUopC,EAAuB,aAAhB7qC,KAAKwrC,UAEtB,yBAAKpsC,UAAU,aACf,yBACEA,UAAWyrC,EAAO,qBAAuB,gBACzCxoC,MAAM,uBAFR,SAKE,yBAAKjD,UAAU,UACZY,KAAK6vC,oBAAoB7vC,KAAK2B,MAAMwV,YAGzC,yBAAK/X,UAAWyrC,EAAO,gBAAkB,sBACvC,kBAAC,EAAD,CACE1zB,SAAUnX,KAAK2B,MAAMwV,SACrBoC,MAAOvZ,KAAK2B,MAAM4X,MAClBmqB,cAAe1jC,KAAK0jC,cACpBC,mBAAoB3jC,KAAK2jC,qBAEW,IAArC3jC,KAAK2B,MAAMwhB,eAAe5iB,OACzB,kBAAC,EAAD,CACEwjC,cAAe/jC,KAAK6rC,YACpBtH,WAAYvkC,KAAK4rC,kBAGnB,kBAAC,GAAD,CACEzoB,eAAgBnjB,KAAK2B,MAAMwhB,eAC3B6kB,YAAahoC,KAAKgoC,YAClBhC,eAAgBhmC,KAAKgmC,eACrBgB,gBAAiBhnC,KAAKgnC,gBACtBQ,gBAAiBxnC,KAAKwnC,mBAI5B,yBAAKpoC,UAAWyrC,EAAO,kBAAoB,wBACzC,4BAAQzrC,UAAU,WAAWqC,QAASzB,KAAKurC,UAA3C,cAGE4E,GACA,kBAAC,IAAMlqB,SAAP,KACE,4BAAQ7mB,UAAU,YAAYqC,QAASzB,KAAK4rC,iBAA5C,cAGA,yBAAKxsC,UAAU,cAAf,qBAEE,2BAAOA,UAAU,UACf,2BACEsY,KAAK,WACLxW,SAAUlB,KAAKsrC,kBACfjF,QAASrmC,KAAK2B,MAAMod,eAEtB,0BAAM3f,UAAU,sBAO5B,yBAAKA,UAAWyrC,EAAO,MAAQ,WAC7B,kBAAC,GAAD,CACE1nB,eAAgBnjB,KAAK2B,MAAMwhB,eAC3BvhB,KAAMuzB,EACNmU,aAActpC,KAAKspC,eAErB,kBAAC,IAAD,CACEnmB,eAAgBnjB,KAAK2B,MAAMwhB,eAC3Bc,QAASjkB,KAAK2B,MAAMsiB,QACpBL,QAAS5jB,KAAK2B,MAAMiiB,QACpB5E,SAAUhf,KAAK2B,MAAMqd,SACrB7B,kBAAmBnd,KAAK2B,MAAMwb,kBAC9B5D,MAAOvZ,KAAK2B,MAAM4X,MAClBpC,SAAUnX,KAAK2B,MAAMwV,SACrB/O,OAAQpI,KAAK2B,MAAMyG,OACnBqE,KAAMzM,KAAK2B,MAAM8K,KACjBoZ,eAAgB7lB,KAAK6lB,eACrB3O,SAAUlX,KAAK2B,MAAMuV,SACrB+N,UAAWjlB,KAAKilB,UAChBC,WAAYllB,KAAKklB,WACjBnG,aAAc/e,KAAK2B,MAAMod,aACzB0B,YAAazgB,KAAKygB,cAEpB,kBAAC,EAAD,CACE0C,eAAgBnjB,KAAK2B,MAAMwhB,eAC3BtO,YAAa7U,KAAK2B,MAAMkT,YACxBmD,YAAahY,KAAK2B,MAAMqW,YACxBgnB,SAAUh/B,KAAK2B,MAAMq9B,SACrBxhB,SAAUxd,KAAK2B,MAAM6b,SACrBrG,SAAUnX,KAAK2B,MAAMwV,SACrBoC,MAAOvZ,KAAK2B,MAAM4X,MAClBgoB,SAAUvhC,KAAK2B,MAAM4/B,SACrBP,iBAAkBhhC,KAAKghC,iBACvB/B,cAAej/B,KAAKi/B,cACpBuC,iBAAkBxhC,KAAKwhC,mBAEzB,kBAAC,GAAD,CACEp5B,OAAQpI,KAAK2B,MAAMyG,OACnBqE,KAAMzM,KAAK2B,MAAM8K,KACjBoY,SAAUA,IACVZ,QAASjkB,KAAK2B,MAAMsiB,QACpB6lB,gBAAiB9pC,KAAK8pC,kBAEvB9pC,KAAK2B,MAAMiiB,SACV,yBAAKxkB,UAAU,eACb,yBAAKA,UAAU,qBACb,kBAAC,KAAD,MADF,oBAON,kBAAC,GAAD,CACEiD,MAAM,gBACNghB,QAASrjB,KAAK2B,MAAMopC,YACpBX,KAAMpqC,KAAK2rC,gBACXvpC,QACE,kBAAC,GAAD,CACE4c,SAAUhf,KAAK2B,MAAMqd,SACrBspB,MAAOtoC,KAAK2B,MAAM2mC,MAClBC,WAAYvoC,KAAK2B,MAAM4mC,WACvBprB,kBAAmBnd,KAAK2B,MAAMwb,kBAC9BsD,YAAazgB,KAAKygB,gBAIxB,kBAAC,GAAD,CACEpe,MAAM,YACNghB,QAASrjB,KAAK2B,MAAMqpC,UACpBZ,KAAMpqC,KAAK0rC,cACXtpC,QACE,kBAAC,KAAD,CACElB,SAAUlB,KAAKghC,iBACf7gC,MAAOH,KAAK2B,MAAMwV,aAIxB,kBAAC,GAAD,CACE9U,MAAM,sBACNghB,QAASrjB,KAAK2B,MAAMspC,eACpBb,KAAMpqC,KAAKyrC,mBACXrpC,QACE,kBAAC,GAAD,CACE+U,SAAUnX,KAAK2B,MAAMwV,SACrBoC,MAAOvZ,KAAK2B,MAAM4X,MAClBynB,iBAAkBhhC,KAAKghC,iBACvB/B,cAAej/B,KAAKi/B,kBAI1B,kBAAC,GAAD,CACE58B,MAAOrC,KAAK2B,MAAM0pC,YAClBhoB,QAASrjB,KAAK2B,MAAMkgC,MACpBuI,KAAMpqC,KAAK4hC,WACXx/B,QAAS,6BAAMpC,KAAK2B,MAAMypC,kB,GAnvClB/rC,aA0vCHurC,Q,qGCtvCAwF,E,4MAjGbzuC,MAAQ,CACNC,MAAM,EACN0iC,SAAU,EACV+L,UAAW3C,G,EAEb7rC,OAAS,WACP,EAAKC,SAAS,CAAEF,MAAO,EAAKD,MAAMC,Q,EAGpC0uC,WAAa,SAAA/vB,GACX,IAAM3e,EAAS,EAAKD,MAAdC,KACF2uC,EAAc,kBAClB,IACEA,EAAchwB,EAAMnR,OAAOohC,WAAWC,MAAMtwC,MAC5C,MAAOS,KACK,CACZ,mBACA,qBACA,oBAEWqW,SAASs5B,IAAgB3uC,GACpC,EAAKE,SAAS,CAAEF,MAAM,K,EAI1B8uC,gBAAkB,SAAAxkC,GAEhB,GADA,EAAKpK,SAAS,CAAEwiC,SAAUp4B,EAAOtK,MAAM,IACnC,aAAc,EAAKnC,MAAO,CAC5B,IAAM4wC,EAAc,EAAK1uC,MAAnB0uC,WAGNnvC,EAFmB,EAAKzB,MAAlByB,UACK8S,KAAKC,MAAMD,KAAKE,UAAUm8B,EAAUnkC,GAAOkG,U,EAK1DqyB,eAAiB,SAAAt8B,GACf,GAAIA,EAAQ,CAEV,IADA,IAAIu8B,EAAiB,GACZ59B,EAAI,EAAGA,EAAIqB,EAAO5H,OAAQuG,IACjC49B,EAAe/jC,KAAf,UAAuBwH,EAAOrB,GAAG0B,MAAjC,YAA4D,IAAlBL,EAAOrB,GAAGqF,MAApD,MAEF,MAAM,yBAAN,OAAgCu4B,EAAetmB,KAAK,KAApD,O,uDAIJ,WACErc,OAAOue,iBAAiB,QAAStgB,KAAKswC,c,kCAGxC,WACEvuC,OAAO42B,oBAAoB,QAAS34B,KAAKswC,c,oBAG3C,WAAU,IAAD,OACH,EAAgCtwC,KAAK2B,MAAnC0uC,EAAN,EAAMA,UAAW/L,EAAjB,EAAiBA,SAAU1iC,EAA3B,EAA2BA,KACvB+iC,EAAc,CAChBE,WAAY7kC,KAAKykC,eAAe4L,EAAU/L,GAAUlyB,OAQtD,MANI,WAAYpS,KAAKP,QACnBklC,EAAc,CACZE,WAAY7kC,KAAKykC,eAAezkC,KAAKP,MAAM0I,UAK7C,yBAAK/I,UAAU,aACb,yBACEA,UAAU,mBACVqC,QAASzB,KAAK6B,OACdN,MAAOojC,GAEP,yBAAKvlC,UAAU,mBAAmBwC,EAAO,IAAM,MAEjD,yBACExC,UAAWwC,EAAO,qBAAuB,2BAExCyuC,EAAU3sC,KAAI,SAACitC,EAAUzkC,GACxB,IAAI3K,EAAQ,CACVsjC,WAAY,EAAKJ,eAAekM,EAASv+B,OAE3C,OACE,yBACEhT,UAAU,mBACVuX,IAAKg6B,EAAS36B,KACdzU,MAAOA,EACPE,QAAS,kBAAM,EAAKivC,gBAAgBxkC,KAEnCykC,EAAS36B,e,GAxFF3W,a,QC8ITuxC,G,mNA9IbC,UAAY,SAACjjC,GACX,IAAI,EAAuB,EAAKnO,MAA1B0I,EAAN,EAAMA,OAAQjH,EAAd,EAAcA,SACdiH,EAAOgN,OAAOvH,EAAK,GACnB1M,EAASiH,I,EAGX2oC,OAAS,WACP,IAAI,EAAuB,EAAKrxC,MAA1B0I,EAAN,EAAMA,OAAQjH,EAAd,EAAcA,SACdiH,EAAOxH,KAAK,CAAE6H,MAAO,UAAW2D,MAAO,IACvCjL,EAASiH,I,EAGX4oC,aAAe,SAACxwB,GACd,IAAI,EAAuB,EAAK9gB,MAA1B0I,EAAN,EAAMA,OAAQjH,EAAd,EAAcA,SAEdiH,EADYoY,EAAMnR,OAAOyH,IACXrO,MAAQ+X,EAAMnR,OAAOjP,MACnCe,EAASiH,I,EAGX+Z,YAAc,SAACtU,EAAK/F,EAAKD,GAAX,OAAmB,SAAC2Y,GAChC,IAAI,EAAuB,EAAK9gB,MAA1B0I,EAAN,EAAMA,OAAQjH,EAAd,EAAcA,SACdiH,EAAOyF,GAAKzB,OAASoU,EAAMnR,OAAOjP,MAAQ0H,IAAQD,EAAMC,GACxD3G,EAASiH,K,EAGX6mC,eAAiB,WACf,IAAI,EAA8B,EAAKvvC,MAAjC8/B,EAAN,EAAMA,MAAOr+B,EAAb,EAAaA,SAAUiH,EAAvB,EAAuBA,OACvB,GAAIo3B,EAAO,CAIT,IAHA,IAEI0P,EAAQ9iC,EAFRtE,EAAMtB,KAAKsB,IAAL,MAAAtB,KAAI,YAAQg5B,IAClB33B,EAAMrB,KAAKqB,IAAL,MAAArB,KAAI,YAAQg5B,IAEbz4B,EAAI,EAAGA,EAAIqB,EAAO5H,OAAQuG,IACvB,IAANA,EAASqB,EAAOrB,GAAGqF,MAAQ,EACtBrF,IAAMqB,EAAO5H,OAAS,EAAG4H,EAAOrB,GAAGqF,MAAQ,GAElD8iC,EAAK,GAAK9mC,EAAO5H,OAAS,GAAMuG,EAEhCqF,GADM,EAAK+iC,SAAS3P,EAAO0P,GACZpnC,IAAQD,EAAMC,GAC7BM,EAAOrB,GAAGqF,MAAQA,GAGtBjL,EAASiH,GACTiY,SAASC,eAAe,cAAc2wB,U,EAI1C9B,SAAW,SAACjkC,EAAKgkC,GACf,IAAME,EAASlkC,EAAIgS,MAAM,GAAGvJ,MAAK,SAACvI,EAAGC,GAAJ,OAAUD,EAAIC,KACzCgkC,GAAOD,EAAO5uC,OAAS,GAAK0uC,EAC5BpvC,EAAO0G,KAAKmE,MAAM0kC,GAClBC,EAAOD,EAAMvvC,EACnB,YAAyB+hB,IAArButB,EAAOtvC,EAAO,GACTsvC,EAAOtvC,GAAQwvC,GAAQF,EAAOtvC,EAAO,GAAKsvC,EAAOtvC,IAEjDsvC,EAAOtvC,I,4CAIlB,WAAU,IAAD,OACH,EAAoBG,KAAKP,MAAvB8/B,EAAN,EAAMA,MAAOp3B,EAAb,EAAaA,OACTP,EAAM,EACRC,EAAM,EAMR,OALI03B,GAASA,EAAMh/B,OAAS,IAC1BsH,EAAMtB,KAAKsB,IAAL,MAAAtB,KAAI,YAAQg5B,IAClB33B,EAAMrB,KAAKqB,IAAL,MAAArB,KAAI,YAAQg5B,KAIlB,yBAAKngC,UAAU,cACb,0BAAMyX,GAAG,cACP,+BACE,+BACG1O,EAAOzE,KAAI,SAAC8E,EAAO0D,GAClB,IAAI/L,EAAQ0H,EAAMW,EAAM2D,OAASvE,EAAMC,GACvC,OACE,wBAAI8O,IAAKzK,GACP,wBAAI3K,MAAO,CAAEgE,MAAO,QAClB,2BACEmS,KAAK,QACLb,GAAI3K,EACJ/L,MAAOqI,EAAMA,MACbtH,SAAU,EAAK6vC,gBAGnB,wBAAIxvC,MAAO,CAAEgE,MAAO,QACP,IAAV2G,GAAeA,IAAU/D,EAAO5H,OAAS,EACxC,yBAAKgB,MAAO,CAAEgE,MAAO,OAAQ0rC,SAAU,WACpC9wC,GAGH,2BACEuX,KAAK,OACLxX,aAAcC,EACde,SAAU,EAAKghB,YAAYhW,EAAOrE,EAAKD,GACvCrG,MAAO,CAAEgE,MAAO,WAItB,wBAAIhE,MAAO,CAAEgE,MAAO,QACjB2G,IAAU/D,EAAO5H,OAAS,GAAe,IAAV2L,GAC9B,yBACE9M,UAAU,uBACViD,MAAM,eACNZ,QAAS,kBAAM,EAAKovC,UAAU3kC,KAHhC,KAQDA,IAAU/D,EAAO5H,OAAS,GACzB,yBACEnB,UAAU,uBACViD,MAAM,kBACNZ,QAAS,EAAKqvC,QAHhB,UAYTvR,GACC,4BACE,wBAAI2R,QAAQ,KACV,4BACEx5B,KAAK,SACLrV,MAAM,8BACNZ,QAASzB,KAAKgvC,gBAHhB,6B,GA7HK3vC,c,+BC4IV8xC,G,mNA1IbxvC,MAAQ,G,EAGRyvC,UAAY,SAAC7R,EAAO8R,GAMlB,IALA,IAIItwC,EAJA8G,EAAMtB,KAAKsB,IAAL,MAAAtB,KAAI,YAAQg5B,IAElB+R,GADM/qC,KAAKqB,IAAL,MAAArB,KAAI,YAAQg5B,IACC13B,GAAOwpC,EAC1Bj/B,EAAO,GAEFtL,EAAI,EAAGA,EAAIuqC,EAAMvqC,IACxB/F,EAAI8G,EAAMf,EAAIwqC,EACdl/B,EAAKzR,KAAK,CAAEI,EAAGA,EAAGyE,EAAG,IAEvB,IAAKsB,EAAI,EAAGA,EAAIy4B,EAAMh/B,OAAQuG,IAE5BsL,EADQ7L,KAAKqB,IAAIrB,KAAKgrC,MAAMhS,EAAMz4B,GAAKe,GAAOypC,GAAa,EAAG,IAClD9rC,IAEd,MAAO,CAAE8rC,UAAWA,EAAWl/B,KAAMA,I,EAGvCo/B,c,sBAAgB,oDAAArmC,EAAA,sDACd,IACE0G,IAAU,iBAAiB2f,SAC3B,MAAO5wB,IAIT,GAPc,EAKU,EAAKnB,MAAvB8/B,EALQ,EAKRA,MAAOp3B,EALC,EAKDA,OAET,EAAK1I,MAAM8/B,MAAMh/B,OAAS,EAC5B,IACa,IADT,EAGwB,EAAK6wC,UAAU7R,EAF9B,KAEL+R,EAHJ,EAGIA,UAAWl/B,EAHf,EAGeA,KAGbq/B,EAAiB5/B,IACT,cACPe,OACA2W,wBAAwBhkB,MAC3BmsC,EAAkB7/B,IACR,cACPe,OACA2W,wBAAwBzpB,OAC3ByF,EAAQksC,EACR3xC,EAAS4xC,EAEP9oB,EAAM/W,IACA,cACPgX,OAAO,OACPC,KAAK,KAAM,gBACXA,KAAK,QAASvjB,GACdujB,KAAK,SAAUhpB,GACf+oB,OAAO,KAEN9nB,EAAI8Q,MAELma,MAAM,CAAC,EAAGzmB,IACV8kB,OAAO,CAAC9jB,KAAKsB,IAAL,MAAAtB,KAAI,YAAQg5B,IAAQh5B,KAAKqB,IAAL,MAAArB,KAAI,YAAQg5B,OAEvC/5B,EAAIqM,MAAiBma,MAAM,CAAClsB,EAAQ,KACtCuqB,OAAO,CACP,EACAxY,IAAOO,GAAM,SAASpL,GACpB,OAAOA,EAAExB,OAMbojB,EACGmE,UAAU,QACV3a,KAAKA,GACLqc,QACA5F,OAAO,QACPC,KAAK,KAAK,SAAS9hB,GAClB,OAAOjG,EAAEiG,EAAEjG,MAEZ+nB,KAAK,KAAK,SAAS9hB,GAClB,OAAOxB,EAAEwB,EAAExB,MAEZsjB,KAAK,QAAS/nB,EAAEuwC,IAChBxoB,KAAK,UAAU,SAAS9hB,GACvB,OAAOlH,EAAS0F,EAAEwB,EAAExB,MAErBjE,MAAM,OAAQ,QAINqnB,EAAIC,OAAO,QAEnBA,OAAO,kBACPC,KAAK,KAAM,eACXA,KAAK,KAAM,MACXA,KAAK,KAAM,MACXA,KAAK,KAAM,QACXA,KAAK,KAAM,MACXiE,UAAU,QACV3a,KAAKjK,GACLsmB,QACA5F,OAAO,QACPC,KAAK,UAAU,SAAS9hB,GACvB,OAAOA,EAAEmF,SAEV2c,KAAK,cAAc,SAAS9hB,GAC3B,OAAOA,EAAEwB,SAGbogB,EACGC,OAAO,KACPA,OAAO,QACPC,KAAK,QAASvjB,GACdujB,KAAK,SAAU,IACfA,KAAK,IAAK,GACVA,KAAK,IAAK,GACVA,KAAK,OAAQ,qBAEhB,MAAOloB,GACPua,QAAQqD,MAAM,2BAA4B5d,GAhGhC,2C,uDAqGhB,WACEZ,KAAKwxC,kB,gCAGP,WACExxC,KAAKwxC,kB,oBAGP,WACE,OACE,6BACE,yBAAK36B,GAAG,YAAYzX,UAAU,+B,GArIZC,cCuBXsyC,G,mNAvBbZ,aAAe,SAAAxwB,IAMbrf,EALmB,EAAKzB,MAAlByB,UACO,CACX,CAAEsH,MAAO+X,EAAMnR,OAAOjP,MAAOgM,MAAO,GACpC,CAAE3D,MAAO+X,EAAMnR,OAAOjP,MAAOgM,MAAO,M,4CAKxC,WACE,IAAMhE,EAAWnI,KAAKP,MAAhB0I,OACN,OACE,6BACE,2BACEuP,KAAK,QACLvX,MAAOgI,EAAO,GAAGK,MACjBtH,SAAUlB,KAAK+wC,oB,GAjBA1xC,cCInBuyC,E,4MACJjwC,MAAQ,CACNkwC,aAAc,OACd1pC,OAAQ,CACN,CAAEK,MAAO,UAAW2D,MAAO,GAC3B,CAAE3D,MAAO,UAAW2D,MAAO,kBAC3B,CAAE3D,MAAO,UAAW2D,MAAO,kBAC3B,CAAE3D,MAAO,UAAW2D,MAAO,kBAC3B,CAAE3D,MAAO,UAAW2D,MAAO,kBAC3B,CAAE3D,MAAO,UAAW2D,MAAO,kBAC3B,CAAE3D,MAAO,UAAW2D,MAAO,kBAC3B,CAAE3D,MAAO,UAAW2D,MAAO,K,EAI/B2lC,gBAAkB,SAACD,GACbA,IAAiB,EAAKlwC,MAAMkwC,cAC9B,EAAK/vC,SAAS,CAAE+vC,kB,4CAIpB,WAAU,IAAD,OACDA,EAAiB7xC,KAAK2B,MAAtBkwC,aACF,EAA8B7xC,KAAKP,MAAjCyB,EAAN,EAAMA,SAAUq+B,EAAhB,EAAgBA,MAAOp3B,EAAvB,EAAuBA,OACvB,OACE,yBAAK/I,UAAU,2BACb,yBAAKA,UAAU,+BACb,yBACEA,UACmB,UAAjByyC,EACI,yCACA,2BAENpwC,QAAS,kBAAM,EAAKqwC,gBAAgB,WANtC,SAUA,yBACE1yC,UACmB,SAAjByyC,EACI,yCACA,2BAENpwC,QAAS,kBAAM,EAAKqwC,gBAAgB,UANtC,QAUA,yBACE1yC,UACmB,UAAjByyC,EACI,yCACA,2BAENpwC,QAAS,kBAAM,EAAKqwC,gBAAgB,WANtC,UAWF,yBAAK1yC,UAAU,6BACK,UAAjByyC,GACC,kBAAC,EAAD,CAAY3wC,SAAUA,EAAUiH,OAAQA,IAExB,SAAjB0pC,GACC,kBAAC,EAAD,CAAW3wC,SAAUA,EAAUiH,OAAQA,IAEvB,UAAjB0pC,GACC,kBAAC,EAAD,CACE3wC,SAAUA,EACViH,OAAQA,EACRo3B,MAAOA,EACPwS,cAAc,IAGA,WAAjBF,GACC,kBAAC,EAAD,CAAa3wC,SAAUA,EAAUiH,OAAQA,EAAQo3B,MAAOA,U,GA1EpClgC,aAkFjBuyC,O,gBCzFf1rB,EAAOC,QAAU,IAA0B,iC,kBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,iC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,eCA3CD,EAAOC,QAAU,swC,cCAjBD,EAAOC,QAAU,0+P,cCAjBD,EAAOC,QAAU,k6X,cCAjBD,EAAOC,QAAU,soJ,cCAjBD,EAAOC,QAAU,sgK,cCAjBD,EAAOC,QAAU,ksK,cCAjBD,EAAOC,QAAU,sgC,cCAjBD,EAAOC,QAAU,0lI,cCAjBD,EAAOC,QAAU,kkN,cCAjBD,EAAOC,QAAU,swC,cCAjBD,EAAOC,QAAU,swC,cCAjBD,EAAOC,QAAU,0+P,cCAjBD,EAAOC,QAAU,kwV,cCAjBD,EAAOC,QAAU,ksK,cCAjBD,EAAOC,QAAU,00M,cCAjBD,EAAOC,QAAU,k6X,gBCAjBD,EAAOC,QAAU,IAA0B,qC,cCA3CD,EAAOC,QAAU,soJ,cCAjBD,EAAOC,QAAU,kmR,cCAjBD,EAAOC,QAAU,sgK,cCAjBD,EAAOC,QAAU,k5N,gBCAjBD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,iC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,iC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,iBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,2C,gBCA3CD,EAAOC,QAAU,IAA0B,0C,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,88BCG5B,SAAS6rB,EAAeC,GA6CrC,OA7CsD,4MAEpDtwC,MAAQ,CACNuwC,UAAW,MAHuC,8FAMpD,8BAAA/mC,EAAA,sEACuC8mC,IADvC,gBACmBC,EADnB,EACU7oB,QAERrpB,KAAK8B,SAAS,CACZowC,UAAWA,IAJf,gDANoD,0EAcpD,WACE,IAAMC,EAAInyC,KAAK2B,MAAMuwC,UAErB,OAAOC,EACL,kBAACA,EAAMnyC,KAAKP,OAEZ,2BACE8B,MAAO,CACLgE,MAAO,OACPzF,OAAQ,QACRsyC,UAAW,SACXhiB,gBAAiB,QACjBkL,SAAU,QACV9iB,KAAM,IACNknB,IAAK,IACL2S,UAAW,SAGb,+BACE,4BACE,4BACE,kBAAC,IAAD,MADF,uBAlC0C,GACzBhzC,a,+BC0ChBizC,G,mNAxCb3wC,MAAQ,CAAE6c,MAAO,KAAM+zB,UAAW,M,uDAElC,SAAkB/zB,EAAO+zB,GACvBvyC,KAAK8B,SAAS,CACZ0c,MAAOA,EACP+zB,UAAWA,IAEPxwC,OAAOywC,SAASrhB,KAAKla,SAAS,cAClCw7B,KAAiB,SAACC,GAChB37B,OAAOC,KAAKu7B,GAAW5xB,SAAQ,SAAChK,GAC9B+7B,EAAMC,SAASh8B,EAAK47B,EAAU57B,OAEhC87B,IAAwBj0B,Q,gCAK9B,SAAmBrc,GACbA,EAAUqwC,SAASI,WAAa5yC,KAAKP,MAAM+yC,SAASI,UACtD5yC,KAAK8B,SAAS,CAAE0c,MAAO,KAAM+zB,UAAW,S,oBAI5C,WACE,OAAIvyC,KAAK2B,MAAM4wC,UAEX,yBAAKnzC,UAAU,iBACb,yBAAKiyB,IAAKwhB,IAAKptB,IAAI,QADrB,mBAGE,yBAAKrmB,UAAU,eAAf,8EAOCY,KAAKP,MAAM43B,a,GArCMh4B,c,kKCoFbyzC,G,mNAzEbnxC,MAAQ,G,4CAER,WACE,OACE,4BAAQkV,GAAG,UACT,yBAAKzX,UAAU,UACb,yBAAKA,UAAU,gBACb,yBAAKA,UAAU,QACb,kBAAC,IAAD,CAAM2zC,GAAG,UACP,yBAAKttB,IAAI,iBAAiB4L,IAAK2hB,IAAM3wC,MAAM,qBAI/C,yBAAKjD,UAAU,eACb,yBAAKA,UAAU,kBACb,yBAAKA,UAAU,SACb,kBAAC,IAAD,CACE6zC,gBAAgB,SAChB7zC,UAAU,cACV2zC,GAAG,QAEH,yBAAKttB,IAAI,aAAa4L,IAAK6hB,MAL7B,cAQA,kBAAC,IAAD,CACED,gBAAgB,SAChB7zC,UAAU,cACV2zC,GAAG,SAEH,yBAAKttB,IAAI,cAAc4L,IAAK8hB,MAL9B,eAQA,kBAAC,IAAD,CACEF,gBAAgB,SAChB7zC,UAAU,cACV2zC,GAAG,QAEH,yBAAKttB,IAAI,MAAM4L,IAAK+hB,MALtB,OAQA,kBAAC,IAAD,CAAMh0C,UAAU,cAAc2zC,GAAG,WAC/B,yBAAKttB,IAAI,QAAQ4L,IAAKgiB,MADxB,YAQN,yBAAKj0C,UAAU,cACb,yBAAKA,UAAU,iBACb,yBAAKA,UAAU,eACb,kBAAC,IAAD,CAAS2zC,GAAG,UACV,yBAAKttB,IAAI,OAAO4L,IAAKiiB,OAEvB,kBAAC,IAAD,CAASL,gBAAgB,YAAYF,GAAG,QACtC,yBAAKttB,IAAI,aAAa4L,IAAK3tB,OAE7B,kBAAC,IAAD,CAASuvC,gBAAgB,YAAYF,GAAG,SACtC,yBAAKttB,IAAI,cAAc4L,IAAKjf,OAE9B,kBAAC,IAAD,CAAS2gC,GAAG,WACV,yBAAKttB,IAAI,QAAQ4L,IAAKkiB,iB,GA9DrBl0C,c,2KC2CNm0C,I,mKA7CX,WACK,OACG,gCACE,yBAAKp0C,UAAU,aACX,yBAAKA,UAAU,YACX,uBAAGA,UAAU,eAAeioC,IAAI,sBAAsBlW,KAAK,8DAA8D/hB,OAAO,SAAS/M,MAAM,8CAC3I,yBAAKojB,IAAI,aAAa4L,IAAKoiB,OAE/B,uBAAGr0C,UAAU,eAAeioC,IAAI,sBAAsBlW,KAAK,kGAAkG/hB,OAAO,SAAS/M,MAAM,6CAC/K,yBAAKojB,IAAI,YAAY4L,IAAKqiB,OAE9B,uBAAGt0C,UAAU,eAAeioC,IAAI,sBAAsBlW,KAAK,gEAAgE/hB,OAAO,SAAS/M,MAAM,0DAC7I,yBAAKojB,IAAI,YAAY4L,IAAKsiB,OAE9B,uBAAGv0C,UAAU,eAAeioC,IAAI,sBAAsBlW,KAAK,+BAA+B/hB,OAAO,SAAS/M,MAAM,0DAC5G,yBAAKojB,IAAI,YAAY4L,IAAKuiB,OAE9B,uBAAGx0C,UAAU,eAAeioC,IAAI,sBAAsBlW,KAAK,oGAAoG/hB,OAAO,SAAS/M,MAAM,wDACjL,yBAAKojB,IAAI,4BAA4B4L,IAAKwiB,OAE9C,uBAAGz0C,UAAU,eAAeioC,IAAI,sBAAsBlW,KAAK,sCAAsC/hB,OAAO,SAAS/M,MAAM,0DACnH,yBAAKojB,IAAI,eAAe4L,IAAKyiB,QAGrC,yBAAK10C,UAAU,aACX,0BAAMA,UAAU,WACb,uBAAG+xB,KAAK,mEAAmE9uB,MAAM,uDAAuDjD,UAAU,iBAC7I,yBAAKiyB,IAAK0iB,KAAOtuB,IAAI,WAEzB,uBAAG0L,KAAK,oEAAoE9uB,MAAM,kDAAkDjD,UAAU,iBAC1I,yBAAKiyB,IAAKze,KAAM6S,IAAI,YAExB,uBAAG0L,KAAK,iCAAiC9uB,MAAM,6BAA6BjD,UAAU,iBAClF,yBAAKiyB,IAAK2iB,KAASvuB,IAAI,cAG/B,yBAAKrmB,UAAU,UAAf,2CAAkE,yBAAKA,UAAU,UAAf,iC,GArCnEC,c,qWCSf40C,I,mNACJtyC,MAAQ,G,4CACR,WACE,OACE,kBAAC,IAAMskB,SAAP,KACE,yBAAK7mB,UAAU,gBAAgBiD,MAAM,gBACnC,uBACEjD,UAAU,eACVioC,IAAI,sBACJlW,KAAK,8DACL/hB,OAAO,SACP/M,MAAM,8CAEN,yBAAKojB,IAAI,aAAa4L,IAAKoiB,KAAOr0C,UAAU,UAC5C,yBAAKqmB,IAAI,aAAa4L,IAAK6iB,KAAQ90C,UAAU,WAE/C,uBACEA,UAAU,eACVioC,IAAI,sBACJlW,KAAK,kGACL/hB,OAAO,SACP/M,MAAM,6CAEN,yBAAKojB,IAAI,YAAY4L,IAAKqiB,KAAMt0C,UAAU,UAC1C,yBAAKqmB,IAAI,YAAY4L,IAAK8iB,KAAO/0C,UAAU,WAE7C,uBACEA,UAAU,eACVioC,IAAI,sBACJlW,KAAK,gEACL/hB,OAAO,SACP/M,MAAM,0DAEN,yBAAKojB,IAAI,YAAY4L,IAAKsiB,KAAMv0C,UAAU,UAC1C,yBAAKqmB,IAAI,YAAY4L,IAAK+iB,KAAOh1C,UAAU,WAE7C,uBACEA,UAAU,eACVioC,IAAI,sBACJlW,KAAK,+BACL/hB,OAAO,SACP/M,MAAM,0DAEN,yBAAKojB,IAAI,YAAY4L,IAAKuiB,KAAMx0C,UAAU,UAC1C,yBAAKqmB,IAAI,YAAY4L,IAAKgjB,KAAOj1C,UAAU,WAE7C,uBACEA,UAAU,eACVioC,IAAI,sBACJlW,KAAK,oGACL/hB,OAAO,SACP/M,MAAM,wDAEN,yBACEojB,IAAI,4BACJ4L,IAAKwiB,KACLz0C,UAAU,UAEZ,yBACEqmB,IAAI,4BACJ4L,IAAKijB,KACLl1C,UAAU,WAGd,uBACEA,UAAU,eACVioC,IAAI,sBACJlW,KAAK,8CACL/hB,OAAO,SACP/M,MAAM,0DAEN,yBAAKojB,IAAI,eAAe4L,IAAKyiB,KAAS10C,UAAU,UAChD,yBAAKqmB,IAAI,eAAe4L,IAAKkjB,KAAUn1C,UAAU,iB,GAxEjCC,cAqXbm1C,G,kDApSb,WAAY/0C,GAAQ,IAAD,8BACjB,cAAMA,IAiBRg1C,YAAc,WACZ,IACE,IAAMC,EAAW,EAAKj1C,MAAM+yC,SAAtBkC,OACFA,IACa,UAAXA,GAAoB,EAAKC,SAAS,EAAKrB,MAAO,IACnC,aAAXoB,GAAuB,EAAKC,SAAS,EAAKC,SAAU,IACzC,mBAAXF,GAA6B,EAAKC,SAAS,EAAKE,eAAgB,IACrD,WAAXH,GAAqB,EAAKC,SAAS,EAAKpB,OAAQ,KACrC,aAAXmB,GAAuB,EAAKC,SAAS,EAAKG,SAAU,KAE1D,MAAOl0C,GACPua,QAAQC,IAAIxa,KA7BG,EAiCnB+zC,SAAW,SAACI,EAAIC,GACdjzC,OAAO4yC,SAAS,CACdjV,IAAKqV,EAAGzV,QAAQ2V,UAAYD,EAC5BE,SAAU,YAlCZ,EAAK5B,KAAO6B,IAAMC,YAClB,EAAKR,QAAUO,IAAMC,YACrB,EAAKP,cAAgBM,IAAMC,YAC3B,EAAK7B,MAAQ4B,IAAMC,YACnB,EAAKN,QAAUK,IAAMC,YACrB,EAAKC,OAASF,IAAMC,YACpB,EAAKE,WAAaH,IAAMC,YACxB,EAAKG,GAAKJ,IAAMC,YATC,E,qDAWnB,WACEp1C,KAAKy0C,gB,gCAEP,WACEz0C,KAAKy0C,gB,oBAyBP,WAAU,IAAD,OAGP,OAFAr0B,SAAS/d,MACP,iEAEA,kBAAC,IAAM4jB,SAAP,KACE,yBAAK7mB,UAAU,OAAOktB,IAAKtsB,KAAKszC,MAC9B,yBAAKz8B,GAAG,cAAczX,UAAU,eAC9B,yBAAKA,UAAU,gBAAf,uDAIA,4BAAQqC,QAAS,kBAAM,EAAKkzC,SAAS,EAAKC,SAAU,MAApD,kBAKF,kBAAC,GAAD,MAEA,yBAAKx1C,UAAU,eAAektB,IAAKtsB,KAAK40C,SAAxC,mKAMA,yBAAKx1C,UAAU,kBACb,kBAAC,IAAD,CAAM2zC,GAAG,QACP,yBAAK3zC,UAAU,OACb,yBAAKA,UAAU,cAAf,cACA,yBAAKA,UAAU,WACb,yBAAKiyB,IAAK3tB,KAAK+hB,IAAI,SAErB,yBAAKrmB,UAAU,YAAf,uGAMJ,kBAAC,IAAD,CAAM2zC,GAAG,SACP,yBAAK3zC,UAAU,OACb,yBAAKA,UAAU,cAAf,eACA,yBAAKA,UAAU,WACb,yBAAKiyB,IAAKjf,KAAMqT,IAAI,UAEtB,yBAAKrmB,UAAU,YAAf,kHAMJ,kBAAC,IAAD,CAAM2zC,GAAG,QACP,yBAAK3zC,UAAU,OACb,yBAAKA,UAAU,cAAf,OACA,yBAAKA,UAAU,WACb,yBAAKiyB,IAAKmkB,KAAK/vB,IAAI,SAErB,yBAAKrmB,UAAU,YAAf,8EAQN,yBAAKA,UAAU,qBAAqBktB,IAAKtsB,KAAKq1C,QAC5C,yBAAKj2C,UAAU,OACb,yBAAKA,UAAU,SACb,yBAAKA,UAAU,SACb,+BACE,+BACE,4BACE,+GAGE,kBAAC,IAAD,CAAM2zC,GAAG,SACP,oEAWlB,yBAAK3zC,UAAU,eAAektB,IAAKtsB,KAAK60C,eAAxC,mGAGE,yBAAKz1C,UAAU,OACb,yBAAKA,UAAU,MACb,yBAAKA,UAAU,UAAf,KACA,yBAAKA,UAAU,QAAf,YAEF,yBAAKA,UAAU,MACb,yBAAKA,UAAU,UAAf,KACA,yBAAKA,UAAU,QAAf,cAEF,yBAAKA,UAAU,MACb,yBAAKA,UAAU,UAAf,KACA,yBAAKA,UAAU,QAAf,iBAEF,yBAAKA,UAAU,MACb,yBAAKA,UAAU,UAAf,KACA,yBAAKA,UAAU,QAAf,cAKN,yBAAKA,UAAU,aAAaktB,IAAKtsB,KAAKu1C,IACpC,yBAAKn2C,UAAU,OACb,yBAAKA,UAAU,SACb,yBAAKA,UAAU,SACb,+BACE,+BACE,4BACE,2HAGE,kBAAC,IAAD,CAAM2zC,GAAG,kBACP,8DAEF,kBAAC,IAAD,CAAMA,GAAG,kBACP,2DAEF,kBAAC,IAAD,CAAMA,GAAG,kBACP,iDAEF,kBAAC,IAAD,CAAMA,GAAG,kBACP,oDAWlB,yBAAK3zC,UAAU,gBAAgBktB,IAAKtsB,KAAKuzC,OACvC,+CACA,yBAAKn0C,UAAU,aACb,6BACE,mHAKF,wCACa,IACX,uBACE+xB,KAAK,2FACL/hB,OAAO,SACPi4B,IAAI,uBAHN,mBAQF,sDAC2B,IACzB,uBACElW,KAAK,4FACL/hB,OAAO,SACPi4B,IAAI,uBAHN,mBAMK,IARP,IASI,IACF,uBACElW,KAAK,wFACL/hB,OAAO,SACPi4B,IAAI,uBAHN,qBAQF,6CACkB,IAChB,uBACElW,KAAK,4FACL/hB,OAAO,SACPi4B,IAAI,uBAHN,oBAQF,qHAIA,ijBAWA,8vBAcA,gUAQF,yBAAKjoC,UAAU,YACb,yBAAKA,UAAU,WACb,yBAAKiyB,IAAKokB,KAAOhwB,IAAI,mBACrB,yBAAKrmB,UAAU,QAAf,0GAGE,2BACE,yDAIN,yBAAKA,UAAU,WACb,yBAAKiyB,IAAKqkB,KAAQjwB,IAAI,oBACtB,yBAAKrmB,UAAU,QAAf,gHAGE,2BACE,kE,GAzRDC,aCrFJs2C,I,mKAZX,WACI,IAAI3gC,EAAMjT,OAAOywC,SAASrhB,KAEzB,OADD/Q,SAAS/d,MAAQ,wBAEb,yBAAKjD,UAAU,YACX,yBAAKA,UAAU,gBAAf,OAAuC,iDACvC,iDAAsB,yBAAKA,UAAU,OAAO4V,GAA5C,uC,GAPO3V,c,+LCajBu2C,I,mKACJ,WACE,MAWI51C,KAAKP,MAVPo2C,EADF,EACEA,SACAv1C,EAFF,EAEEA,KACAioC,EAHF,EAGEA,WACAjE,EAJF,EAIEA,SACAwR,EALF,EAKEA,gBACAC,EANF,EAMEA,cACAC,EAPF,EAOEA,SACApyB,EARF,EAQEA,QACAqyB,EATF,EASEA,QACAC,EAVF,EAUEA,QAEF,OAAI51C,EAAKC,OAAS,EAEd,kBAAC,IAAM0lB,SAAP,KACE,yBAAKpP,GAAG,OAAOzX,UAAW22C,GACvBz1C,EAAKoD,KAAI,SAACkc,GAAD,OACR,kBAAC,GAAD,CACEjJ,IAAKiJ,EAAQ/I,GACbytB,SAAUA,EACVwR,gBAAiBA,EACjBl2B,QAASA,EACTi2B,SAAUA,EACVtN,WAAYA,EACZyN,SAAUA,EACVC,QAASA,SAOfryB,EAEA,yBAAKxkB,UAAU,sBACb,kBAAC,IAAD,MADF,oBAKQ82C,EAUR,yBAAK92C,UAAU,sBAAf,4FARA,yBAAKA,UAAU,sBAAf,0EAEU,6BAFV,+D,GA3CgBC,cA6DpB82C,G,4MACJC,cAAgB,SAACv/B,GAEf,OADuB,EAAKpX,MAApB8oC,WACUh/B,QAAO,SAACxI,GAAD,OAAOA,EAAEkU,cAAgB4B,M,EAGpDgK,UAAY,SAACC,GACX,IAcI5I,EAAO,IAAIV,KAAKsJ,GACpB,MAfa,CACX,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,QAGY5I,EAAK8I,YAAc9I,EAAK+I,e,4CAGxC,WACE,IAEIjM,EAFJ,EACEhV,KAAKP,MADCmgB,EAAR,EAAQA,QAAS0kB,EAAjB,EAAiBA,SAAUwR,EAA3B,EAA2BA,gBAAiBE,EAA5C,EAA4CA,SAAUC,EAAtD,EAAsDA,QAIpDjhC,EADiB,IAAf4K,EAAQ/I,GACJ,kBAEA,eAAiB+I,EAAQ/I,GAEjC,IAAIoyB,EAASjpC,KAAKo2C,cAAcx2B,EAAQ/I,IAIpCw/B,GAHJpN,EAASA,EAAO1/B,QACd,SAACxI,GAAD,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,IAAIkW,SAASlW,EAAE4W,mBAEzBjU,KAAI,SAAC+P,GAAD,OAAOA,EAAEuC,QACtCqgC,EAAW,aAAO,IAAIC,IAAID,IAC1B,IAAIE,EAAOP,EAAS,QAASp2B,EAAQgpB,UACxB,aAAT2N,IACFA,EAAO,eAET,IAAIC,EAAUh3B,KACVi3B,EAAW,gBAQf,MAPuB,gBAAnB72B,EAAQE,QACV02B,EAAUp3B,KACVq3B,EAAW,gBACiB,cAAnB72B,EAAQE,SACjB02B,EAAU92B,KACV+2B,EAAW,kBAGX,2BAAOr3C,UAAU,WACf,+BACE,4BACE,wBAAIA,UAAU,eACZ,yBAAKA,UAAU,iBAAiBwgB,EAAQvd,OACvC2gC,OAAOC,UAAUrjB,EAAQ82B,UACxB,yBAAKt3C,UAAU,gBAAf,QAEF,6BAAMwgB,EAAQ9J,aACd,yBAAK1W,UAAU,WACb,kBAAC,IAAD,CACE2zC,GAAI/9B,EACJ2B,IAAKiJ,EAAQ/I,GACbxU,MAAM,0DACNjD,UAAU,OACVqC,QAASw0C,GAET,yBAAK72C,UAAU,eAAf,iBAEmB,UAApBwgB,EAAQsmB,SACP,yBACE9mC,UACEklC,EAASrtB,SAAS2I,GACd,kBACA,aAENne,QAAS,kBAAMq0C,EAAgBl2B,KAE9B0kB,EAASrtB,SAAS2I,GAAW,WAAa,YAKnD,wBAAIgkB,QAAS,EAAGxkC,UAAU,iBACvBi3C,EAAY3yC,KAAI,SAAClD,GAAD,OACf,yBAAKpB,UAAU,SAASuX,IAAKnW,GAC1BA,QAKT,4BACE,wBAAIpB,UAAU,kBACZ,yBAAKA,UAAU,kBACb,yBAAKA,UAAU,OAAOiyB,IAAKmhB,KAAU/sB,IAAI,aAD3C,IAC0D8wB,GAE1D,yBAAKn3C,UAAU,kBACb,yBAAKA,UAAU,OAAOiyB,IAAKslB,KAAUlxB,IAAI,aACxCzlB,KAAK6gB,UAAUjB,EAAQ/K,aAF1B,MAE2C,IACxC7U,KAAK6gB,UAAUjB,EAAQ5H,cAE1B,yBACE5Y,UAAU,OACVqmB,IAAKgxB,EACLp0C,MAAOo0C,EACPplB,IAAKmlB,Y,GA7GCn3C,aAuHhBu3C,G,4JACJ,WACE,IACIC,EADJ,EAA8B72C,KAAKP,MAA3B4C,EAAR,EAAQA,MAAOy0C,EAAf,EAAeA,IAOf,OAJED,EAHF,EAAoBl1C,MAGT,IAEA,IAGT,yBAAKvC,UAAU,aACb,yBAAKA,UAAU,SAASqC,QAASq1C,GAC/B,yBAAK13C,UAAU,SAASiD,GACxB,0BAAMjD,UAAU,UAAUy3C,S,GAbbx3C,aAoBjB03C,G,4MACJC,sBAAwB,SAAChvB,GACvB,OAAIA,GAAUA,EAAOznB,OAAS,EACrBynB,EAAOtc,OAAO,GAAGsR,cAAgBgL,EAAO/K,MAAM,GAE9C+K,G,EAGXrmB,MAAQ,G,4CACR,WAAU,IAAD,OACH,EAA4C3B,KAAKP,MAA/CwpC,EAAN,EAAMA,OAAQgO,EAAd,EAAcA,SAAUC,EAAxB,EAAwBA,IAAKvb,EAA7B,EAA6BA,QAASn8B,EAAtC,EAAsCA,MAMtC,OADAypC,GAJAA,EAASA,EAAOvlC,KAAI,SAAC+P,GAEnB,MADe,aAAXA,EAAEuC,OAAqBvC,EAAEuC,KAAO,kBAC7BvC,MAEOlK,QAAO,SAACkK,GAAD,MAAkB,UAAXA,EAAEuC,QAE9B,kBAAC,IAAMiQ,SAAP,KACE,yBAAKpP,GAAG,iBAAiBzX,UAAU,IAChC6pC,EAAOvlC,KAAI,SAAClD,GAAD,OACV,yBACEmW,IAAKnW,EAAMqW,GAAK,IAAMrW,EAAMwV,KAC5BvU,QAAS,kBAAMw1C,EAASz2C,EAAMqW,GAAIrW,EAAMwV,KAAMkhC,EAAK13C,IACnDJ,UAAU,kBAEV,2BACEsY,KAAK,WACLtY,UAAU,iBACVinC,QAAS7lC,EAAMwV,QAAQ2lB,EACvBwb,UAAQ,IAET,EAAKH,sBAAsBx2C,EAAMwV,MAAQ,IAX5C,IAWkDxV,EAAM42C,MAXxD,c,GApBiB/3C,aAwCvBg4C,G,4JACJ,WACE,MAAkCr3C,KAAKP,MAA/Bk8B,EAAR,EAAQA,QAAS2b,EAAjB,EAAiBA,aACjB,OACE,yBAAKl4C,UAAU,aACZ2X,OAAOC,KAAK2kB,GAASj4B,KAAI,SAAC6F,GAAD,OACxB,yBACEoN,IAAKpN,EACLnK,UAAU,iBACVqC,QAAS,kBAAM61C,EAAa/tC,IAC5BlH,MAAM,iBAEN,yBAAKjD,UAAU,kBAAkBmK,GACjC,yBAAKnK,UAAU,eAAf,mB,GAbYC,aAioBTk4C,G,4MA3mBb51C,MAAQ,CACNg6B,QAAS,GACT+Y,OAAQ,GACR11B,SAAU,GACVupB,WAAY,GACZjE,SAAU,GACVkT,OAAQ,SACRtmB,UAAU,EACVxtB,KAAK,EACLkgB,SAAS,EACTsyB,SAAS,G,EAGXuB,iBAAmB,SAAC5B,EAAUtN,EAAYxnC,GACxC,OAAO80C,EAAStN,WAAWznC,MACzB,SAACw9B,GAAD,OAAUA,EAAKznB,KAAO0xB,EAAWxnC,GAAG4W,kB,EAIxCq+B,SAAW,SAACl1B,EAAOjK,GACjB,IAAQg/B,EAAa,EAAKl0C,MAAlBk0C,SACR,IACE,OAAOA,EAAS/0B,GAAOhgB,MAAK,SAACC,GAAD,OAAOA,EAAE8V,KAAOA,KAAIb,KAChD,MAAOpV,GAEP,OADAua,QAAQC,IAAIxa,GACL,O,EAIX82C,gBAAkB,SAAC52B,EAAOjK,EAAIg/B,GAC5B,IACE,OAAOA,EAAS/0B,GAAOhgB,MAAK,SAACC,GAAD,OAAOA,EAAE8V,KAAOA,KAAIb,KAChD,MAAOpV,GAEP,OADAua,QAAQC,IAAIxa,GACL,O,EAIX+2C,UAAY,SAACp3B,GACX,EAAKze,SAAS,CAAE01C,OAAQj3B,EAAMnR,OAAOjP,S,EAGvC+wB,SAAW,WACT,EAAKpvB,SAAS,CAAEovB,UAAW,EAAKvvB,MAAMuvB,Y,EAGxCuJ,UAAY,WACV,EAAK34B,SAAS,CAAE4B,KAAM,EAAK/B,MAAM+B,O,EAGnCk0C,eAAiB,SAACr3B,GACW,KAAvBA,EAAMnR,OAAOjP,OAAc,EAAK03C,WACpC,EAAK/1C,SAAS,CAAE4yC,OAAQn0B,EAAMnR,OAAOjP,S,EAGvC23C,cAAgB,SAACl4B,GACf,GAAI,EAAKje,MAAM2iC,SAASrtB,SAAS2I,GAAU,CACzC,IAAM0kB,EAAW,EAAK3iC,MAAM2iC,SAAS/6B,QAAO,SAAC+B,GAAD,OAAOA,IAAMsU,KACzD,EAAK9d,SAAS,CAAEwiC,SAAUA,QACrB,CACL,IAAMA,EAAW,EAAK3iC,MAAM2iC,SAC5BA,EAAS3jC,KAAKif,GACd,EAAK9d,SAAS,CAAEwiC,SAAUA,M,EAI9ByT,cAAgB,WACd,EAAKj2C,SAAS,CAAEwiC,SAAU,M,EAG5BgT,aAAe,SAAC/tC,GACd,IAAMoyB,EAAY,EAAKh6B,MAAjBg6B,QACFpyB,KAAUoyB,UACLA,EAAQpyB,GAEjB,EAAKzH,SAAS,CAAE65B,a,EAGlBqc,kBAAoB,SAACnhC,EAAIb,EAAMkhC,EAAK13C,GAClC,IAAMm8B,EAAY,EAAKh6B,MAAjBg6B,QACF3lB,KAAQ2lB,SACHA,EAAQ3lB,GAEf2lB,EAAQ3lB,GAAQ,CAAEa,GAAIA,EAAIohC,SAAUf,EAAKgB,IAAK14C,GAEhD,EAAKsC,SAAS,CAAE65B,a,EAGlBwc,aAAe,SAAC9pC,GACd,IAAMstB,EAAY,EAAKh6B,MAAjBg6B,QACNA,EAAQyc,SAAW,CAAEvhC,GAAIxI,EAAQ4pC,SAAU,WAAYC,IAAK,YAC5D,EAAKp2C,SAAS,CAAE65B,a,EAGlB0c,mBAAqB,SAACz3C,GACpB,IAAM+6B,EAAY,EAAKh6B,MAAjBg6B,QACFzjB,EAAOtX,EAAEwO,OAAOjP,MAChBmM,EAAIyK,OAAOqM,OAAOuY,GAASpyB,QAAO,SAAC+C,GAAD,MAAiB,eAAVA,EAAE4rC,OAC3C5rC,EAAE/L,OAAS,UACNo7B,EAAQ,SAAWrvB,EAAE,GAAGuK,IAEpB,KAATqB,IACFyjB,EAAQ,SAAWzjB,GAAQ,CACzBrB,GAAIqB,EACJ+/B,SAAU,cACVC,IAAK,eAGT,EAAKp2C,SAAS,CAAE65B,a,EAGlB2c,iBAAmB,SAAC13C,GAClB,IAAM+6B,EAAY,EAAKh6B,MAAjBg6B,QACFzjB,EAAOtX,EAAEwO,OAAOjP,MAChBmM,EAAIyK,OAAOqM,OAAOuY,GAASpyB,QAAO,SAAC+C,GAAD,MAAiB,aAAVA,EAAE4rC,OAC3C5rC,EAAE/L,OAAS,UACNo7B,EAAQ,UAAYrvB,EAAE,GAAGuK,IAErB,KAATqB,IACFyjB,EAAQ,UAAYzjB,GAAQ,CAC1BrB,GAAIqB,EACJ+/B,SAAU,cACVC,IAAK,aAGT,EAAKp2C,SAAS,CAAE65B,a,EAGlByb,MAAQ,SAACt2B,EAAO9K,EAAMuyB,GACpB,OAAOA,EAAWh/B,QAAO,SAACxI,GAAD,OAAOA,EAAE+f,KAAW9K,KAAMzV,Q,EAGrDg4C,cAAgB,SAAC34B,GACf,OAAOA,G,EAGT44B,WAAa,SAACvP,EAAQjzB,EAAM5V,GAAyB,IAAD,EAAjBq4C,EAAiB,uDAAP,GACvCC,EAAW,GACX/6B,EAAE,aAAO,IAAI24B,IAAIrN,EAAOvlC,KAAI,SAAC3C,GAAD,OAAOA,EAAEiV,QAFS,eAGpC2H,GAHoC,IAGlD,2BAAkB,CAAC,IAAVlK,EAAS,QAChB,GAAIA,IAAMglC,EAAS,CACjB,IAAIE,EAAYllC,EACZuC,EAAKiB,SAAS,QAAO0hC,EAAY,EAAK3C,SAAS51C,EAAOqT,IAC1DilC,EAAS/3C,KAAK,CACZkW,GAAIpD,EACJuC,KAAM2iC,EACNvB,MAAO,EAAKA,MAAMphC,EAAMvC,EAAGw1B,OAViB,8BAuBlD,OATAyP,EAAShlC,MAAK,SAACvI,EAAGC,GAChB,OAAID,EAAE6K,KAAO5K,EAAE4K,MACL,EAEN7K,EAAE6K,KAAO5K,EAAE4K,KACN,EAEF,KAEF0iC,G,EAGTE,aAAe,SAACh5B,EAAS43B,GAcvB,MAbe,OAAXA,EACF53B,EAAQlM,MAAK,SAACvI,EAAGC,GACf,OAAOD,EAAE9I,MAAQ+I,EAAE/I,SAED,cAAXm1C,EACT53B,EAAQlM,MAAK,SAACvI,EAAGC,GACf,OAAOA,EAAE8/B,UAAY//B,EAAE+/B,aAEL,WAAXsM,GACT53B,EAAQlM,MAAK,SAACvI,EAAGC,GACf,OAAO,IAAIoM,KAAKpM,EAAE4M,aAAe,IAAIR,KAAKrM,EAAE6M,gBAGzC4H,G,EAGTi5B,cAAgB,SAACj5B,EAAS+b,EAAS4M,GAA4B,IAAhBuQ,EAAe,uDAAP,GAC/CC,EAAa,SAAC3mC,EAAM7I,EAAQg/B,GAChC,GAAmB,aAAfh/B,EAAO2uC,IACT,OAAO9lC,EAAK7I,QAAO,SAAC+0B,GAAD,OAAUA,EAAK/0B,EAAO0uC,YAAc1uC,EAAOsN,MACzD,GAAmB,eAAftN,EAAO2uC,IAChB,OAAO9lC,EAAK7I,QACV,SAAC+0B,GAAD,OACEiK,EAAWh/B,QACT,SAACxI,GAAD,OACEA,EAAEwI,EAAO0uC,YAAc1uC,EAAOsN,IAAM9V,EAAEkU,cAAgBqpB,EAAKznB,MAC7DtW,OAAS,KAEV,GAAmB,aAAfgJ,EAAO2uC,IAAoB,CACpC,IAAI7pC,EAAS9E,EAAOsN,GAChBmiC,EAASzyC,KAAKqB,IAAIqxC,MACpB1yC,KACA8H,EAAO3K,KAAI,SAAUw1C,GACnB,OAAOA,EAAE5yC,QAGT6yC,EAAS5yC,KAAKqB,IAAIqxC,MACpB1yC,KACA8H,EAAO3K,KAAI,SAAUw1C,GACnB,OAAOA,EAAEzyC,QAGT2yC,EAAS7yC,KAAKsB,IAAIoxC,MACpB1yC,KACA8H,EAAO3K,KAAI,SAAUw1C,GACnB,OAAOA,EAAE5yC,QAGT+yC,EAAS9yC,KAAKsB,IAAIoxC,MACpB1yC,KACA8H,EAAO3K,KAAI,SAAUw1C,GACnB,OAAOA,EAAEzyC,QAGb,OAAO2L,EAAK7I,QACV,SAAC+0B,GAAD,OACEA,EAAI,SAAe8a,GACnB9a,EAAI,SAAe0a,GACnB1a,EAAI,UAAgB+a,GACpB/a,EAAI,UAAgB6a,KAEnB,MAAmB,eAAf5vC,EAAO2uC,IACT9lC,EAAK7I,QACV,SAAC+0B,GAAD,OACE,IAAI9mB,KAAK8mB,EAAI,aAAiBhnB,UAC9B,IAAIE,KAAKjO,EAAOsN,IAAIS,aAEA,aAAf/N,EAAO2uC,IACT9lC,EAAK7I,QACV,SAAC+0B,GAAD,OACE,IAAI9mB,KAAK8mB,EAAI,aAAiBhnB,UAC9B,IAAIE,KAAKjO,EAAOsN,IAAIS,aAGjBlF,GAIX,GAAI2E,OAAOC,KAAK2kB,GAASp7B,OAAS,EAAG,CACnC,IAAI+4C,EAD+B,EAE/BrB,EAAW,aACV,IAAI3B,IAAIv/B,OAAOqM,OAAOuY,GAASj4B,KAAI,SAAC6F,GAAD,OAAYA,EAAO0uC,cACzD1uC,QAAO,SAAC2tC,GAAD,OAASA,IAAQ4B,KAJS,eAKrBb,GALqB,IAKnC,2BAAwB,CAAC,IAAhBjuC,EAAe,QACtBsvC,EAAY,GADU,qBAER,EAAKC,eAAe5d,EAAS3xB,IAFrB,IAEtB,2BAA+C,CAAC,IAAvCsC,EAAsC,QAC7CgtC,EAAYA,EAAU7W,OAAOsW,EAAWn5B,EAAStT,EAAGi8B,KAHhC,8BAKtB3oB,EAAO,aAAO,IAAI02B,IAAIgD,KAVW,+BAarC,OAAO15B,G,EAGT25B,eAAiB,SAAC5d,EAAS3xB,GACzB,OAAO+M,OAAOqM,OAAOuY,GAASpyB,QAAO,SAACA,GAAD,OAAYA,EAAO0uC,WAAajuC,M,EAGvEwvC,iBAAmB,SAAC55B,EAASqpB,GAC3B,OAAOA,EAAO1/B,QACZ,SAAC/I,GAAD,OACEof,EAAQrW,QAAO,SAAC6I,GAAD,OAAUA,EAAKyE,KAAOrW,EAAMyU,eAAa1U,OAAS,GACzC,IAAxBC,EAAMmX,kB,EAIZ8hC,eAAiB,SAAC74C,GAChB,IACuB,IAAjBA,EAAE+V,IAAIpW,QAAgBK,EAAE+V,IAAI+iC,MAAM,WACpCt5B,SAASC,eAAe,uBAAuB+e,QAEjD,MAAOx+B,M,EAGXq1C,QAAU,WACR,GAA0B,KAAtB,EAAKt0C,MAAM+yC,OAAe,CAC5B,IAAM9B,EAAa,EAAKnzC,MAAM+yC,SAAxBI,SACN,EAAKnzC,MAAMk6C,QAAQh5C,KAAK,CACtBiyC,SAAUA,EACV8B,OAAQ,SAEL,CACL,IAAIkF,EAAa,WAAa,EAAKj4C,MAAM+yC,OAAOmF,WAAW,IAAK,KAChE,EAA2B,EAAKp6C,MAAM+yC,SAAhCkC,EAAN,EAAMA,OAAQ9B,EAAd,EAAcA,SACVgH,IAAelF,GACjB,EAAKj1C,MAAMk6C,QAAQh5C,KAAK,CACtBiyC,SAAUA,EACV8B,OAAQkF,M,EAMhB/B,SAAW,WACT,IAAMjF,EAAa,EAAKnzC,MAAM+yC,SAAxBI,SACN,EAAKnzC,MAAMk6C,QAAQh5C,KAAK,CACtBiyC,SAAUA,EACV8B,OAAQ,M,8FAIZ,8DAAAvpC,EAAA,6DACEpJ,OAAOue,iBAAiB,UAAWtgB,KAAKy5C,gBAC1BK,EAAoB95C,KAAKP,MAAM+yC,SAAvCkC,OAFR,EAG4B10C,KAAK2B,MAAzB+yC,EAHR,EAGQA,OAAQwB,EAHhB,EAGgBA,QACE,IAJlB,kBAOmBlG,QAAQC,IAAI,CACzBvB,KAAMC,IAAIC,KAAS,mBAAoB,CAAEC,QAJ7B,MAKZH,KAAMC,IAAIC,KAAS,YAAa,CAAEC,QALtB,MAMZH,KAAMC,IAAIC,KAAS,qBAAsB,CAAEC,QAN/B,QAJlB,OAOIqB,EAPJ,0EAcM/0B,QAAQqD,MAAM,gDAdpB,UAeqBwxB,QAAQC,IAAI,CACzBvB,KAAMC,IAAIoL,KAAgB,oBAC1BrL,KAAMC,IAAIoL,KAAgB,aAC1BrL,KAAMC,IAAIoL,KAAgB,wBAlBlC,QAeM7J,EAfN,0DAqBM/0B,QAAQqD,MAAM,wBACd0xB,EAAS,CAAC,EAAG,EAAG,GAtBtB,QA4BE,GAHM2F,EAAW3F,EAAO,GAAG99B,KACvB4M,EAAWkxB,EAAO,GAAG99B,KACrBm2B,EAAa2H,EAAO,GAAG99B,KACF,MAArB89B,EAAO,GAAG8J,QAAuC,MAArB9J,EAAO,GAAG8J,OACxCh7B,EAAW,GACXupB,EAAa,GACb2N,GAAU,OAKV,IAASn1C,KADL0a,EAAO,GACG8sB,EACZ,IACE0R,EAAUj6C,KAAKy3C,iBAAiB5B,EAAUtN,EAAYxnC,GACtDwnC,EAAWxnC,GAAX,KAAwBk5C,EAAQjkC,KAChCuyB,EAAWxnC,GAAX,eAAkCk5C,EAAQC,eACtC3R,EAAWxnC,GAAX,eAAgC0a,EAClCA,EAAK8sB,EAAWxnC,GAAX,aAA8BJ,KAAKs5C,EAAQjkC,MAEhDyF,EAAK8sB,EAAWxnC,GAAX,aAAgC,CAACk5C,EAAQjkC,MAEhD,MAAOmkC,GACP5R,EAAWxnC,GAAX,KAAwB,KACxBwnC,EAAWxnC,GAAX,eAAkC,KAhD1C,eAoDsBie,GApDtB,IAoDE,4BAASY,EAAqB,SACrB,WAAiBnE,EAAKmE,EAAO,IACpCA,EAAO,UAAgB5f,KAAK03C,gBAC1B,QACA93B,EAAO,SACPi2B,GAzDN,8BA4DQ70C,EAAU,CACdo5C,YAAY,EACZC,UAAW,GACXC,mBAAmB,EACnBtjC,KAAM,CAAC,QAAS,cAAe,aAAc,cAE3CujC,EAAgBvmC,KAAKC,MAAMD,KAAKE,UAAU8K,IACxCw7B,EAAO,IAAIC,KAAKF,EAAev5C,GAKX,KAJtB05C,EAAaZ,EACdxiB,QAAQ,IAAK,IACb9W,MAAM,KACNjX,QAAO,SAACgC,GAAD,OAAOA,EAAE0L,SAAS,cACb1W,SACbm0C,EAASgG,EAAW,GAAGl6B,MAAM,KAAK,GAAGq5B,WAAW,IAAK,MACvD75C,KAAK8B,SAAS,CACZkd,WACAupB,aACAsN,WACA2E,OACA9F,SACA9wB,SAAS,EACTsyB,YAjFJ,kE,wFAqFA,WACEn0C,OAAO42B,oBAAoB,UAAW34B,KAAKy5C,kB,oBAG7C,WACEr5B,SAAS/d,MAAQ,0BACjB,MAaIrC,KAAK2B,MAZP64C,EADF,EACEA,KACA9F,EAFF,EAEEA,OACA/Y,EAHF,EAGEA,QACA3c,EAJF,EAIEA,SACAslB,EALF,EAKEA,SACAuR,EANF,EAMEA,SACAtN,EAPF,EAOEA,WACAiP,EARF,EAQEA,OACAtmB,EATF,EASEA,SACAxtB,EAVF,EAUEA,IACAkgB,EAXF,EAWEA,QACAsyB,EAZF,EAYEA,QAIEyE,EAAY36C,KAAK64C,cAAc75B,EAAU2c,EAAS4M,GAGvC,KAAXmM,QAA4B9yB,IAAX8yB,GAAyB9wB,IAC5C+2B,EAAYH,EAAK9F,OAAOA,GAAQhxC,KAAI,SAAC4I,GAAD,OAAOA,EAAEgyB,SAI/C,IAAIsc,EAAU56C,KAAKw5C,iBAAiBmB,EAAWpS,GACzCsS,EAAQ76C,KAAKw5C,iBACjBx5C,KAAK64C,cAAc75B,EAAU2c,EAAS4M,EAAY,iBAClDA,GAEIuS,EAAQ96C,KAAK64C,cAAc75B,EAAU2c,EAAS4M,EAAY,YAE5DwS,EAAU/6C,KAAKw4C,WAAWqC,EAAO,gBAAiB,aAAc,GAChEG,EAAQh7C,KAAKw4C,WAAWsC,EAAO,WAAY,SAC3CG,EAAUj7C,KAAKw4C,WAAWx5B,EAAU,SAAU,MAGnC,KAAX01B,IACFiG,EAAY36C,KAAK44C,aAAa+B,EAAWnD,IAI3C,IAAI0D,EAAO5W,EAAS5gC,KAAI,SAAC3C,GAAD,OAAOA,EAAE8V,MAC7BpD,EAAIO,KAAKC,MAAMD,KAAKE,UAAUq0B,IAGlC90B,GADAA,GADAA,EAAIA,EAAElK,QAAO,SAACxI,GAAD,OAAOm6C,EAAKjkC,SAASlW,EAAEkU,iBAC9B1L,QAAO,SAACxI,GAAD,OAAQ,CAAC,EAAG,EAAG,EAAG,GAAGkW,SAASlW,EAAE4W,mBACvCjU,KAAI,SAAC3C,GAAD,MAAO,CAACA,EAAEkU,YAAalU,EAAE4W,kBACnC,IAAImf,EAAO,iBAAmB9iB,KAAKE,UAAUT,GAE7C,OACE,kBAAC,IAAMwS,SAAP,KACE,2CACA,yBAAK7mB,UAAU,UACb,2BACEyX,GAAG,sBACH3V,SAAUlB,KAAK43C,eACfx4C,UAAU,YACV+7C,YAAY,uDACZzjC,KAAK,SACL4U,IAAI,SACJnsB,MAAOu0C,KAGX,kBAAC,KAAD,CACExb,aAAa,UACb1gB,KACE,kBAAC,IAAMyN,SAAP,KACE,yBAAK7mB,UAAU,WACb,2BAAOA,UAAU,iBACf,+BACE,4BACE,4BACE,yBACEiD,MAAM,6BACNZ,QAASzB,KAAKkxB,UAEboT,EAAS/jC,OAJZ,gBAIiCo6C,EAAUp6C,OAAQ,IAJnD,aAQF,4BACE,yBACE8B,MAAM,0BACNZ,QAASzB,KAAK+3C,eAFhB,cAUI,KAAXrD,GACC,4BACEryC,MAAM,UACNnB,SAAUlB,KAAK23C,UACfz3C,aAAcs3C,GAEd,4BAAQr3C,MAAM,MAAd,OACA,4BAAQA,MAAM,UAAd,UACA,4BAAQA,MAAM,aAAd,eAIN,kBAAC,GAAD,CAAWw7B,QAASA,EAAS2b,aAAct3C,KAAKs3C,eAEhD,yBAAKl4C,UAAW8xB,EAAW,QAAU,aACnC,yBAAK9xB,UAAU,kBACb,iDACCklC,EAAS/jC,OAAS,EACjB,6BACE,yBAAKnB,UAAU,qBACZklC,EAAS5gC,KAAI,SAAC6H,GACb,OACE,yBAAKoL,IAAKpL,EAAElJ,MAAOjD,UAAU,iBAC1BmM,EAAElJ,WAKX,kBAAC,IAAD,CAAM0wC,GAAIjc,GACR,4BAAQz0B,MAAM,2BAAd,qCAMJ,uDAKN,yBACEjD,UAAWsE,EAAM,QAAU,YAC3BrB,MAAM,4DAEN,yBAAKjD,UAAU,kBAAf,qDAGA,kBAAC,KAAD,CACE4f,SAAU27B,EACVngB,aAAcx6B,KAAKm4C,aACnBxc,QAASA,EACTlB,UAAWz6B,KAAKy6B,aAGpB,kBAAC,GAAD,CACE6J,SAAUtkC,KAAK2B,MAAM2iC,SACrBhkC,KAAMq6C,EACNpS,WAAYqS,EACZ9E,gBAAiB91C,KAAK83C,cACtB/B,cAAe,gBACfF,SAAUA,EACVG,SAAUh2C,KAAKg2C,SACfpyB,QAASA,EACTqyB,QAASj2C,KAAKi2C,QACdC,QAASA,KAIf/c,cACE,kBAAC,IAAMlT,SAAP,KACE,2BAAO7mB,UAAU,iBACf,+BACE,4BACE,oCACA,sCAEF,4BACE,4BACE,2BAAOsY,KAAK,OAAOxW,SAAUlB,KAAKq4C,sBAEpC,4BACE,2BAAO3gC,KAAK,OAAOxW,SAAUlB,KAAKs4C,uBAK1C,kBAAC,GAAD,CAAUj2C,MAAM,WAAWy0C,IAAK92C,KAAKy6B,UAAW94B,MAAO+B,IACvD,kBAAC,KAAD,CACErB,MAAM,SACND,QACE,kBAAC,GAAD,CACE60C,SAAUj3C,KAAKg4C,kBACfd,IAAI,SACJjO,OAAQgS,EACRtf,QAASA,EACTn8B,MAAM,aAGV0C,QAAQ,SAEV,kBAAC,KAAD,CACEG,MAAM,OACND,QACE,kBAAC,GAAD,CACE60C,SAAUj3C,KAAKg4C,kBACfd,IAAI,WACJjO,OAAQ+R,EACRrf,QAASA,EACTn8B,MAAM,aAGV0C,QAAQ,SAEV,kBAAC,KAAD,CACEG,MAAM,aACND,QACE,kBAAC,GAAD,CACE60C,SAAUj3C,KAAKg4C,kBACfd,IAAI,gBACJjO,OAAQ8R,EACRpf,QAASA,EACTn8B,MAAM,eAGV0C,QAAQ,iB,GAlmBC7C,a,SCzKV+7C,I,mNAvGbz5C,MAAQ,CACNotC,QAAS,GACTnrB,SAAS,EACTy3B,YAAY,G,EAGdC,eAAiB,WACf,EAAKx5C,SAAS,CAAEu5C,YAAa,EAAK15C,MAAM05C,c,EAG1CE,S,uCAAW,WAAO36C,GAAP,eAAAuK,EAAA,sDACTvK,EAAE46C,iBACgB,EAAK75C,MAAjBiiB,QAoBJzI,QAAQqD,MAAM,uBAlBd,EAAK1c,SAAS,CACZ8hB,SAAS,EACTmrB,QACE,sFAEAl4B,GAAK,EACmC,KAAxCuJ,SAASC,eAAe,MAAMlgB,QAChC0W,EAAKuJ,SAASC,eAAe,MAAMlgB,OAErC,EAAKV,MAAM87C,SAAS1kC,GAAIi4B,OAAM,SAACtwB,GAC7BrD,QAAQqD,MAAMA,EAAMuwB,SACpB5zB,QAAQC,IAAIoD,GACZ,EAAK1c,SAAS,CACZitC,QAASvwB,EAAMuwB,QACfnrB,SAAS,QAlBN,2C,6GA0BX,WAEE63B,IAASC,YAAY17C,KAAK27C,KAAKC,KAAKxc,QACpCqc,IAASC,YAAY17C,KAAK27C,KAAKC,KAAKpzB,W,oBAGtC,WACE,IAAQ5I,EAAY5f,KAAKP,MAAjBmgB,QACJ,EAAuB5f,KAAK2B,MAA1BotC,EAAN,EAAMA,QAASnrB,EAAf,EAAeA,QAEf,GAAgB,KAAZmrB,EACF,IAAI8M,EACF,yBAAKz8C,UAAU,WACZwkB,GAAW,kBAAC,IAAD,MACZ,yBAAK/M,GAAG,mBAAmBk4B,IAKjC,OACE,kBAAC,IAAM9oB,SAAP,KACE,yBAAK7mB,UAAU,mBACb,yBAAKA,UAAU,gBACb,oFADF,uOAOA,yBAAKA,UAAU,cACb,2BAAO08C,QAAQ,OAAf,kBACA,2BACEjlC,GAAG,MACHa,KAAK,OACL4U,IAAI,MACJ6uB,YAAY,mDACZj6C,SAAUlB,KAAKP,MAAMs8C,aAAa,OAClC77C,aAAc0f,EAAQyZ,MAExB,2BACEj6B,UAAU,cACV08C,QAAQ,KACRr6C,QAASzB,KAAKs7C,gBAHhB,4CAOA,2BACEzkC,GAAG,KACHzX,UACEY,KAAK2B,MAAM05C,WAAa,cAAgB,mBAE1C/uB,IAAI,KACJ5U,KAAK,SACL7P,IAAI,IACJy+B,KAAK,OAGT,yBAAKlnC,UAAU,iBAAiBy8C,GAChC,yBAAKz8C,UAAU,aACb,4BAAQqC,QAASzB,KAAKu7C,UAAtB,kB,GAhGkBl8C,c,SCuFf28C,G,4MAtFbr6C,MAAQ,CACNotC,QAAS,GACTnrB,SAAS,G,EAGX23B,S,uCAAW,WAAO36C,GAAP,SAAAuK,EAAA,sDACTvK,EAAE46C,iBACgB,EAAK75C,MAAjBiiB,QAgBJzI,QAAQqD,MAAM,uBAdd,EAAK1c,SAAS,CACZ8hB,SAAS,EACTmrB,QACE,qFAEJ,EAAKtvC,MAAM87C,WAAWzM,OAAM,SAACtwB,GAC3BrD,QAAQqD,MAAMA,EAAMuwB,SACpB5zB,QAAQC,IAAIoD,GACZ,EAAK1c,SAAS,CACZitC,QAASvwB,EAAMuwB,QACfnrB,SAAS,QAdN,2C,wDAsBXq4B,SAAW,SAACr7C,GACVA,EAAE46C,iBACF,EAAK/7C,MAAMw8C,Y,4CAGb,WACE,IAAI,EAAwBj8C,KAAKP,MAA3BmgB,EAAN,EAAMA,QAASs8B,EAAf,EAAeA,SACX,EAAuBl8C,KAAK2B,MAA1BotC,EAAN,EAAMA,QAASnrB,EAAf,EAAeA,QACTu4B,EAAWv8B,EAAXu8B,OAmBN,GAjBAD,EAASxoC,MAAK,SAAUvI,EAAGC,GACzB,OAAOA,EAAEoV,MAAM,KAAKjgB,OAAS4K,EAAEqV,MAAM,KAAKjgB,UAG5C27C,GADAA,EAAWA,EAAS3yC,QAAO,SAAC+C,GAAD,MAAuB,QAAhBA,EAAE2Q,OAAO,OACvBvZ,KAAI,SAAC4I,GACvB,IAAI8vC,EAAY9vC,EAAE+vC,YAAY,KAC9B,OAAO/vC,EAAE2Q,MAAM,EAAGm/B,MAGpBF,GADAA,EAAQ,aAAO,IAAI5F,IAAI4F,KACHx4C,KAAI,SAAC4I,GACvB,IAAIgwC,EAAahwC,EAAEkU,MAAM,IAAK,GAAGpC,KAAK,KAAK7d,OAC3C,MAAO,CACLJ,MAAOmM,EACPlM,MAAOkM,EAAE2Q,MAAMq/B,EAAYhwC,EAAE/L,YAIjB,KAAZwuC,EACF,IAAI8M,EACF,yBAAKz8C,UAAU,WACZwkB,GAAW,kBAAC,IAAD,MACZ,yBAAK/M,GAAG,mBAAmBk4B,IAKjC,OACE,kBAAC,IAAM9oB,SAAP,KACE,0BAAM7mB,UAAU,kBAAkBm9C,SAAUv8C,KAAKu7C,UAC/C,yBAAKn8C,UAAU,gBAAf,uHAGA,kBAAC,KAAD,CACE4B,QAASk7C,EACTh8C,aAAci8C,EACdj7C,SAAUlB,KAAKP,MAAM+8C,eAGvB,yBAAKp9C,UAAU,iBAAiBy8C,GAChC,yBAAKz8C,UAAU,aACb,4BAAQqC,QAASzB,KAAKi8C,UAAtB,QACA,4BAAQx6C,QAASzB,KAAKu7C,UAAtB,gB,GA/EgBl8C,a,SCsBb6qC,I,mNAtBbE,KAAO,WACL,EAAK3qC,MAAMC,YACX,EAAKD,MAAMg9C,c,4CAEb,WACE,MAAwBz8C,KAAKP,MAArBi9C,EAAR,EAAQA,KAAMv8C,EAAd,EAAcA,MACd,OAAKu8C,EAIH,kBAAC,IAAMz2B,SAAP,KACE,yBAAK7mB,UAAU,SACb,yBAAKA,UAAU,iBACb,0BAAMqC,QAASzB,KAAKoqC,KAAMhrC,UAAU,SAApC,QACCe,KAPA,S,GAROd,cCEds9C,G,4JACJ,WACE,IADO,EACP,EAA2B38C,KAAKP,MAAxBa,EAAR,EAAQA,KAAMY,EAAd,EAAcA,SACVF,EAAU,GAFP,eAGUV,GAHV,IAGP,2BAAuB,CAAC,IAAfg+B,EAAc,QACrBt9B,EAAQL,KACN,4BAAQgW,IAAK2nB,EAAKtoB,KAAM7V,MAAOm+B,EAAKznB,IACjCynB,EAAKtoB,QANL,8BAUP,OAAO,4BAAQ9U,SAAUA,GAAWF,O,GAXb3B,aAqIZu9C,G,4MArHbj7C,MAAQ,CACNyhB,OAAQ,I,EAGVq5B,WAAa,WACX,EAAK36C,SAAS,CAAEshB,OAAQ,M,EAG1B24B,aAAe,SAAAj7B,GAAK,OAAI,SAAAP,GACtB,IAAI6C,EAAS,EAAKzhB,MAAMyhB,OACxBA,EAAOtC,GAASP,EAAMnR,OAAOjP,MAC7B,EAAK2B,SAAS,CAAEshB,a,EAGlBy5B,O,uCAAS,WAAMj8C,GAAN,SAAAuK,EAAA,6DACPvK,EAAE46C,iBADK,SAED9M,KAAMoO,KAAKlO,KAAS,mBAAoB,CAC5CpvC,MAAO,EAAKC,MAAMs9C,WAClB3qC,KAAM,EAAKzQ,MAAMyhB,SAJZ,OAMP,EAAK3jB,MAAMC,YACX,EAAK+8C,aACL,EAAKh9C,MAAMu9C,eARJ,2C,wDAeTC,sBAAwB,WACtB,MAAkC,EAAKx9C,MAA/Bs9C,EAAR,EAAQA,WAAYG,EAApB,EAAoBA,UACd95B,EAAW,EAAKzhB,MAAhByhB,OACFpM,EAAO,GAEX,QAAmB4K,IAAfm7B,EACF,IACE/lC,EAAOD,OAAOC,KAAKkmC,EAAUH,GAAY,IACzC,MAAOn8C,IAGX,GAAI2M,MAAMC,QAAQwJ,GAAO,CAAC,IAAD,iBACLA,GADK,IACvB,2BAAwB,CAAC,IAAhB5W,EAAe,QAClBA,EAAM6W,SAAS,SACb7W,KAASgjB,IAEXA,EAAOhjB,GAAS88C,EAAU98C,EAAMogB,MAAM,KAAK,IAAI,GAAG3J,GAClD,EAAK/U,SAAS,CAAEshB,cANC,iC,wDAf3B,WACEpjB,KAAKi9C,0B,oBA2BP,WACE,MAAmDj9C,KAAKP,MAAhDi9C,EAAR,EAAQA,KAAMh9C,EAAd,EAAcA,UAAWq9C,EAAzB,EAAyBA,WAAYG,EAArC,EAAqCA,UACjClmC,EAAO,GACPxX,EAAQ,GAEZ,QAAmBoiB,IAAfm7B,EACF,IACE/lC,EAAOD,OAAOC,KAAKkmC,EAAUH,GAAY,IACzC,MAAOn8C,IAGX,GAAI2M,MAAMC,QAAQwJ,GAAO,CAAC,IAAD,iBACLA,GADK,IACvB,2BAAwB,CAAC,IAAhB5W,EAAe,QACR,OAAVA,IACOA,EAAM6W,SAAS,OACxBzX,EAAMmB,KACJ,wBAAIgW,IAAKvW,GACP,4BAAKA,GACL,4BACE,kBAAC,GAAD,CACEE,KAAM48C,EAAU98C,EAAMogB,MAAM,KAAK,IACjCtf,SAAUlB,KAAK+7C,aAAa37C,QAMpCZ,EAAMmB,KACJ,wBAAIgW,IAAKvW,GACP,4BAAKA,GACL,4BACE,2BAAOsX,KAAK,OAAOxW,SAAUlB,KAAK+7C,aAAa37C,UApBlC,+BA4BzB,IAAID,EACF,0BAAMf,UAAU,eACd,mCAAS29C,GACT,wEACA,2BAAO39C,UAAU,qBACf,+BAAQI,IAEV,yBAAKJ,UAAU,aACb,4BAAQqC,QAASzB,KAAK68C,QAAtB,YAIN,OACE,kBAAC,IAAM52B,SAAP,KACE,kBAAC,GAAD,CACEy2B,KAAMA,EACNv8C,MAAOA,EACPT,UAAWA,EACX+8C,WAAYz8C,KAAKy8C,kB,GA/GGp9C,aCfxB89C,G,4MACJx7C,MAAQ,G,4CACR,WACE,IAAI,EAAyB3B,KAAKP,MAA5B29C,EAAN,EAAMA,GAAIC,EAAV,EAAUA,KAAM7K,EAAhB,EAAgBA,SAChB,OACE,yBAAKpzC,UAAU,eACC,QAAbozC,GAAsB,yBAAK/wC,QAAS27C,GAAd,UACT,WAAb5K,GAAyB,yBAAK/wC,QAAS47C,GAAd,e,GAPRh+C,aAgSXi+C,G,4MAlRb37C,MAAQ,CACNkgC,OAAO,EACPkb,WAAY,GACZn5B,SAAS,G,EAIXlkB,UAAY,SAACS,GACX,EAAK2B,SAAS,CACZ+/B,OAAQ,EAAKlgC,MAAMkgC,MACnBkb,WAAY58C,K,EAIhBo7C,SAAW,SAAC36C,GACVA,EAAE46C,iBACgB,EAAK75C,MAAjBiiB,QAgBJzI,QAAQqD,MAAM,uBAdd,EAAK1c,SAAS,CACZitC,QACE,wEACFnrB,SAAS,IAGX,EAAKnkB,MAAM87C,WAAWzM,OAAM,SAACtwB,GAC3BrD,QAAQqD,MAAMA,EAAOA,EAAMuwB,SAC3B,EAAKjtC,SAAS,CACZitC,QAASvwB,EAAMuwB,QACfnrB,SAAS,S,EAQjB25B,uBAAyB,SAACz8B,GACxB,IAAI,EAAmD,EAAKrhB,MAAtD+9C,EAAN,EAAMA,cAAeC,EAArB,EAAqBA,iBACD,OADpB,EAAuCC,aAErCD,IAEFD,EAAc18B,I,EAGhB68B,WAAa,WACX,IAAIx9C,EAAQ,QAC2B,UAAnC,EAAKV,MAAMmgB,QAAQg+B,cAAyBz9C,EAAQ,QACxD,EAAKV,MAAMo+C,cAAc,cAAe19C,I,EAG1C29C,cAAgB,WACd,IAAI39C,EAAQ,OAC2B,SAAnC,EAAKV,MAAMmgB,QAAQ89B,cAAwBv9C,EAAQ,MACvD,EAAKV,MAAMo+C,cAAc,cAAe19C,I,EAG1C87C,SAAW,SAACr7C,GACVA,EAAE46C,iBACF,EAAK/7C,MAAMw8C,Y,EAGb8B,UAAY,SAACC,EAAIC,GAAQ,IAAD,iBACRD,GADQ,IACtB,2BAAkB,CAAC,IAAVl3C,EAAS,QAChB,GAAIm3C,EAAGhnC,SAASnQ,EAAEo3C,eAChB,OAAOp3C,GAHW,8BAMtB,OAAO,G,EAGTq3C,SAAW,SAAChhC,EAAmB6rB,GAC7B,OAAO7rB,EAAkB5T,QAAO,SAACoU,GAAD,OAAQA,EAAGhG,gBAAkBqxB,M,4CAG/D,WAAU,IAAD,SACP,EAWIhpC,KAAKP,MAVPo2C,EADF,EACEA,SACAmH,EAFF,EAEEA,aACA7/B,EAHF,EAGEA,kBACA4+B,EAJF,EAIEA,aACAqC,EALF,EAKEA,YACAC,EANF,EAMEA,aACAT,EAPF,EAOEA,YACAF,EARF,EAQEA,YACAY,EATF,EASEA,gBACAC,EAVF,EAUEA,kBAEMhW,EAAwBsN,EAAxBtN,WAAYiW,EAAY3I,EAAZ2I,QAChB,EAA0Cx+C,KAAK2B,MAA7CkgC,EAAN,EAAMA,MAAOkb,EAAb,EAAaA,WAAYhO,EAAzB,EAAyBA,QAASnrB,EAAlC,EAAkCA,QAG9B66B,EAAW,CAAC,GAAI,GAAI,GAAI,IACxBp9B,EAAO,GACPva,EAAI,EAnBD,eAoBSqW,GApBT,qBAoBEvP,EApBF,QAqBDkpB,EAAO,8BACP2nB,EAASxnC,SAASrJ,EAAI+J,iBACpBsI,EAAM,EAAKk+B,SAAShhC,EAAmBvP,EAAI+J,eAC3CrX,EAAO2f,EAAIvc,KAAI,SAACoD,GAClB,MAAO,CAAE+P,GAAI/P,EAAE+P,GAAIb,KAAMlP,EAAE+P,OAE7BigB,EACE,kBAAC,KAAD,CACEt3B,MAAM,aACNW,MAAM,KACNC,MAAM,OACNF,aAAc0N,EAAIkpB,KAClB72B,SAAUK,EACVY,SAAUm9C,EAAav3C,EAAG,WAI5B0rC,EAAW,GACL,IAAN1rC,IAAS0rC,EAAW,OACpB1rC,IAAMqW,EAAkB5c,OAAS,IAAGiyC,EAAW,UACnD,IAAIkM,EAAU53C,EACdua,EAAK1gB,KACH,wBAAIgW,IAAK,MAAQ7P,GACf,4BACE,kBAAC,GAAD,CACEs2C,GAAI,kBAAMkB,EAAgBI,IAC1BrB,KAAM,kBAAMkB,EAAkBG,IAC9BlM,SAAUA,KAGd,4BAAK5kC,EAAIiJ,IACT,4BAAKjJ,EAAI2Q,gBACT,4BAAK3Q,EAAI+wC,WACT,4BAAK,IAAM/wC,EAAIgxC,KAAKl7C,KAAI,SAACsD,GAAD,OAAOA,EAAEgP,QAAMoI,KAAK,MAAQ,KACpD,4BACE,kBAAC,KAAD,CACE5e,MAAM,aACNW,MAAM,KACNC,MAAM,OACNH,SAAUsoC,EACVroC,aAAc0N,EAAI+J,cAClBzW,SAAUm9C,EAAav3C,EAAG,iBAC1BpH,UAAW,EAAKA,aAGpB,4BACE,kBAAC,KAAD,CACES,MAAM,OACNC,MAAM,OACNH,SAAU2N,EAAIixC,UACd3+C,aAAc0N,EAAIgQ,KAClB1c,SAAUm9C,EAAav3C,EAAG,WAG9B,4BAAKgwB,GACL,4BACE,2BACE32B,MAAOyN,EAAIkxC,OACXpnC,KAAK,OACLxW,SAAU66C,EAAaj1C,EAAG,aAG9B,4BACE,2BACE4Q,KAAK,OACL1B,KAAK,OACL7V,MAAOyN,EAAIkH,KACX5T,SAAU66C,EAAaj1C,EAAG,WAG9B,4BACE,kBAAC,KAAD,CACEtH,MAAM,UACNW,MAAM,KACNC,MAAM,OACNH,SAAUu+C,EACVt+C,aAAc0N,EAAImxC,WAClB79C,SAAUm9C,EAAav3C,EAAG,cAC1BpH,UAAW,EAAKA,aAGpB,4BACE,2BACEgY,KAAK,WACL2uB,QAASz4B,EAAIoxC,SACb99C,SAAUk9C,EAAYt3C,EAAG,iBAKjCA,KA3FF,2BAAmC,CAAC,IAA3B8G,EACHkpB,EAEE7W,EACA3f,EAcFkyC,EAlB6B,KApB5B,8BAmHP,IAAM0K,EAAY,CAAE3U,WAAYA,EAAYiW,QAASA,GAGrD,GAAgB,KAAZzP,EACF,IAAI8M,EACF,yBAAKz8C,UAAU,WACZwkB,GAAW,kBAAC,IAAD,MACZ,yBAAK/M,GAAG,sBAAsBk4B,IAKpC,OACE,kBAAC,IAAM9oB,SAAP,KACE,0BAAM7mB,UAAU,kBAAkBm9C,SAAUv8C,KAAKu7C,UAC/C,yBAAKn8C,UAAU,gBAAf,sFAIA,yBAAKA,UAAU,mBACb,2BAAOA,UAAU,UACf,2BACEsY,KAAK,WACLxW,SAAUlB,KAAK89C,cACfzX,QAAyB,SAAhBqX,IAEX,0BAAMt+C,UAAU,kBAPpB,sCAWA,yBAAKA,UAAU,mBACb,2BAAOA,UAAU,UACf,2BACEsY,KAAK,WACLxW,SAAUlB,KAAK29C,WACftX,QAAyB,SAAhBuX,IAEX,0BAAMx+C,UAAU,kBAPpB,mBAWA,2BAAOA,UAAU,cACf,+BACE,4BACE,6BACA,wBAAI8xC,QAAQ,KAAZ,kBACA,wBAAIA,QAAQ,KAAZ,gCAEF,4BACE,wBAAI3vC,MAAO,CAAEgE,MAAO,UACpB,wBAAIhE,MAAO,CAAEgE,MAAO,SAApB,MACA,wBAAIhE,MAAO,CAAEgE,MAAO,UAApB,YACA,wBAAIhE,MAAO,CAAEgE,MAAO,UAApB,SACA,wBAAIhE,MAAO,CAAEgE,MAAO,UAApB,cACA,wBAAIhE,MAAO,CAAEgE,MAAO,wBAApB,aACA,wBAAIhE,MAAO,CAAEgE,MAAO,SAApB,QACA,wBAAIhE,MAAO,CAAEgE,MAAO,SAApB,QACA,6CACA,qCACA,sCACA,wBAAIhE,MAAO,CAAEgE,MAAO,SAClB,yBAAKlD,MAAM,sBAAX,WAGHgf,IAGL,yBAAKjiB,UAAU,iBAAiBy8C,GAChC,yBAAKz8C,UAAU,aACb,4BAAQqC,QAASzB,KAAKi8C,UAAtB,QACA,4BAAQx6C,QAASzB,KAAKu7C,UAAtB,iBAGJ,kBAAC,GAAD,CACEmB,KAAM7a,EACNniC,UAAWM,KAAKN,UAChBq9C,WAAYA,EACZG,UAAWA,EACXF,aAAcA,S,GA5QC39C,a,0CCbnB4/C,I,mNACJt9C,MAAQ,CACNC,OAAM,EAAKnC,MAAMmC,M,EAGnBC,OAAS,WACP,EAAKC,SAAS,CAAEF,MAAO,EAAKD,MAAMC,Q,4CAEpC,WACE,IAAI,EAAqB5B,KAAKP,MAAxBuW,EAAN,EAAMA,KAAMqhB,EAAZ,EAAYA,SACNz1B,EAAS5B,KAAK2B,MAAdC,KACF4e,EAAQxK,EAAKwK,MAAM,KACnB0+B,EAAU1+B,EAAMA,EAAMjgB,OAAS,GACnC,OACE,yBAAKnB,UAAU,UACb,6BACE,yBAAKA,UAAU,WAAWqC,QAASzB,KAAK6B,QACrCD,EAAO,SAAW,UAErB,yBAAKyvB,IAAK8qB,KAAQ12B,IAAI,WACrBy5B,GAEFt9C,GAAQ,6BAAMy1B,Q,GAtBFh4B,cA4Bf8/C,G,4MACJx9C,MAAQ,G,4CACR,WACE,IAAI,EAA2B3B,KAAKP,MAA9BuW,EAAN,EAAMA,KAAM5D,EAAZ,EAAYA,KAAMlR,EAAlB,EAAkBA,SACdsf,EAAQxK,EAAKwK,MAAM,KACnB0+B,EAAU1+B,EAAMA,EAAMjgB,OAAS,GAC/B8lC,EAAUj0B,EAAK6E,SAASjB,GAC5B,OACE,yBAAK5W,UAAU,QACb,2BACEsY,KAAK,WACLtY,UAAU,gBACVyX,GAAIb,EACJ3T,MAAOgkC,EAAU,cAAgB,eACjCnlC,SAAUA,EACVmlC,QAASA,IAEX,yBAAKhV,IAAKzc,KAAM6Q,IAAI,SACnBy5B,O,GAlBU7/C,aA8GJ+/C,G,4MArFbz9C,MAAQ,G,EAER09C,aAAe,SAACp0C,GAEd,IADA,IAAIqiC,EAAM,EACDxmC,EAAI,EAAGA,EAAImE,EAAI1K,OAAQuG,IAC1BmE,EAAInE,GAAGvG,OAAS+sC,IAAKA,EAAMriC,EAAInE,GAAGvG,QAExC,OAAO+sC,G,EAGTgS,YAAc,SAAC/+B,GACb,IAAI,EAA+C,EAAK9gB,MAAlD8/C,EAAN,EAAMA,iBAAkBC,EAAxB,EAAwBA,uBACpB3oC,EAAK0J,EAAMnR,OAAOyH,GAClB0oC,EAAiBtoC,SAASJ,GAC5B0oC,EAAmBA,EAAiBh2C,QAAO,SAACk2C,GAAD,OAAQA,IAAO5oC,KAE1D0oC,EAAiB5+C,KAAKkW,GAExB2oC,EAAuBD,I,EAGzBG,YAAc,SAAC1pC,EAAMiN,GAenB,IAdA,IAAMs8B,EAAqB,EAAK9/C,MAA1B8/C,iBACFI,EAAa3pC,EAAKwK,MAAM,KAAKjgB,OAS7B82B,EARapU,EAAMvf,KAAI,SAAC4I,GAC1B,IAAIkU,EAAQlU,EAAEkU,MAAM,KAChB9I,EAAO,SAIX,OAHI8I,EAAMjgB,SAAWo/C,EAAa,IAChCjoC,EAAO,QAEF,CAAC8I,EAAMvD,MAAM,EAAG0iC,EAAa,GAAGvhC,KAAK,KAAM1G,MAE1BnO,QAAO,SAAC+C,GAAD,OAAOA,EAAE,GAAG2K,SAASjB,EAAO,QACzDkiC,EAAM,IAAI5B,IAAIjf,EAAS3zB,IAAIsQ,KAAKE,YAChC0rC,EAAiBryC,MAAMgU,KAAK22B,GAAKx0C,IAAIsQ,KAAKC,OAC1CkE,EAAM,GACDrR,EAAI,EAAGA,EAAI84C,EAAer/C,OAAQuG,IACZ,SAAzB84C,EAAe94C,GAAG,GACpBqR,EAAIxX,KACF,kBAAC,GAAD,CACEgW,IAAKipC,EAAe94C,GAAG,GACvBkP,KAAM4pC,EAAe94C,GAAG,GACxBsL,KAAMmtC,EACNr+C,SAAU,EAAKo+C,eAInBnnC,EAAIxX,KACF,kBAAC,GAAD,CACEgW,IAAKipC,EAAe94C,GAAG,GACvBkP,KAAM4pC,EAAe94C,GAAG,GACxBuwB,SAAU,EAAKqoB,YAAYE,EAAe94C,GAAG,GAAImc,MAKzD,OAAO9K,G,4CAGT,WACE,IAGI0nC,EAHE3D,EAAal8C,KAAKP,MAAlBy8C,SAEFj5B,GADJi5B,EAAWloC,KAAKC,MAAMD,KAAKE,UAAUgoC,KAChBx4C,KAAI,SAACo8C,GAAD,OAAQA,EAAGt/B,MAAM,QAE1C,GAAIyC,EAAM1iB,OAAS,EAAG,CACpB,IAAIw/C,EAAc98B,EAAM,GAAGhG,MAAM,EAAG,GAAGmB,KAAK,KAC5CyhC,EACE,kBAAC,GAAD,CACE7pC,KAAM+pC,EACN1oB,SAAUr3B,KAAK0/C,YAAYK,EAAa7D,GACxCt6C,MAAM,SAIVi+C,EAAO,KAGT,OACE,yBAAKzgD,UAAU,eAAeiD,MAAM,gBACjCw9C,O,GAhFkBxgD,aC2BZ2gD,G,4MAhFbr+C,MAAQ,CACNotC,QAAS,I,EAGXwM,SAAW,SAAC36C,GACVA,EAAE46C,iBACF,EAAK/7C,MAAM87C,WAAWzM,OAAM,SAACtwB,GAC3BrD,QAAQqD,MAAMA,EAAMuwB,SACpB,EAAKjtC,SAAS,CACZitC,QAASvwB,EAAMuwB,c,EAKrBkN,SAAW,SAACr7C,GACVA,EAAE46C,iBACF,EAAK/7C,MAAMw8C,Y,4CAGb,WACE,MAKIj8C,KAAKP,MAJPmgB,EADF,EACEA,QACAqgC,EAFF,EAEEA,cACA/D,EAHF,EAGEA,SACAsD,EAJF,EAIEA,uBAEID,EAAqB3/B,EAArB2/B,iBACExQ,EAAY/uC,KAAK2B,MAAjBotC,QAERmN,EAASxoC,MAAK,SAASvI,EAAGC,GACxB,OAAOA,EAAEoV,MAAM,KAAKjgB,OAAS4K,EAAEqV,MAAM,KAAKjgB,UAE5C,IAAI2/C,EAAgBX,EACjB77C,KAAI,SAAC+7C,GACJ,IAAIx0C,EAAMw0C,EAAGj/B,MAAM,KACnB,OAAOvV,EAAIA,EAAI1K,OAAS,MAEzB6d,KAAK,MACJkb,EAAQ,GAKZ,OAJ6B,IAAzB2mB,EAAcE,QAAmD,OAAnCF,EAAc7kC,IAAIhJ,KAAKguC,UACvD9mB,EAAQ,uCAIR,kBAAC,IAAMrT,SAAP,KACE,0BAAM7mB,UAAU,kBAAkBm9C,SAAUv8C,KAAKu7C,UAC/C,yBAAKn8C,UAAU,gBACb,6IAGK,IACL,uDACA,4BACE,0DACA,sDACA,iFAEF,sIAIA,2BAAIk6B,IAEN,kBAAC,GAAD,CACE4iB,SAAUA,EACVqD,iBAAkBA,EAClBC,uBAAwBA,IAE1B,yBAAKpgD,UAAU,iBAAgB,wCAA/B,IAAiD8gD,GACjD,yBAAK9gD,UAAU,iBAAiB2vC,GAChC,yBAAK3vC,UAAU,aACb,4BAAQqC,QAASzB,KAAKi8C,UAAtB,QACA,4BAAQx6C,QAASzB,KAAKu7C,UAAtB,gB,GAzEgBl8C,a,qBC4VbghD,G,4MAzVb1+C,MAAQ,CACNkgC,OAAO,EACPkb,WAAY,GACZhO,QAAS,I,EAIXrvC,UAAY,SAACS,GACX,EAAK2B,SAAS,CACZ+/B,OAAQ,EAAKlgC,MAAMkgC,MACnBkb,WAAY58C,K,EAIhBo7C,SAAW,SAAC36C,GACVA,EAAE46C,iBACF,EAAK/7C,MAAM87C,WAAWzM,OAAM,SAACtwB,GAC3BrD,QAAQqD,MAAMA,EAAMuwB,SACpB,EAAKjtC,SAAS,CACZitC,QAASvwB,EAAMuwB,c,EAKrBkN,SAAW,SAACr7C,GACVA,EAAE46C,iBACF,EAAK/7C,MAAMw8C,Y,4CAGb,WACE,MACEj8C,KAAKP,MADCo2C,EAAR,EAAQA,SAAUmH,EAAlB,EAAkBA,aAAcp9B,EAAhC,EAAgCA,QAASm8B,EAAzC,EAAyCA,aAAcsC,EAAvD,EAAuDA,aAE/C/V,EAAsDuN,EAAtDvN,MAAOgY,EAA+CzK,EAA/CyK,QAASC,EAAsC1K,EAAtC0K,SAAUC,EAA4B3K,EAA5B2K,cAAeC,EAAa5K,EAAb4K,SAC3CvD,EAAY,CAChBoD,QAASA,EACTC,SAAUA,EACVjY,MAAOA,EACPkY,cAAeA,EACfC,SAAUA,GAEZ,EAAuCzgD,KAAK2B,MAApCkgC,EAAR,EAAQA,MAAOkb,EAAf,EAAeA,WAAYhO,EAA3B,EAA2BA,QAC3B,OACE,kBAAC,IAAM9oB,SAAP,KACE,0BAAM7mB,UAAU,kBAAkBm9C,SAAUv8C,KAAKu7C,UAC/C,2BAAOn8C,UAAU,eACf,+BACE,4BACE,+CAEE,uBACE+xB,KAAK,iCACLkW,IAAI,sBACJj4B,OAAO,UAEP,yBACEiiB,IAAKqvB,KACLn/C,MAAO,CAAEo/C,YAAa,MAAO7gD,OAAQ,QACrC2lB,IAAI,+BAIV,4BAEI,kBAAC,IAAMQ,SAAP,KACE,2BACEvO,KAAK,SACL1B,KAAK,cACLmlC,YAAY,oCACZj6C,SAAU66C,EAAa,eACvB57C,OAC8B,OAA5Byf,EAAO,YACHA,EAAO,YACP,KAGR,6BACG,IAAIpI,KAA8B,IAAzBoI,EAAO,aAAwB6gB,eAMnD,4BACE,+CAEE,uBACEtP,KAAK,iCACLkW,IAAI,sBACJj4B,OAAO,UAEP,yBACEiiB,IAAKqvB,KACLn/C,MAAO,CAAEo/C,YAAa,MAAO7gD,OAAQ,QACrC2lB,IAAI,+BAIV,4BAEI,kBAAC,IAAMQ,SAAP,KACE,2BACEvO,KAAK,SACL1B,KAAK,cACLmlC,YAAY,oCACZj6C,SAAU66C,EAAa,eACvB57C,OAC8B,OAA5Byf,EAAO,YACHA,EAAO,YACP,KAGR,6BACG,IAAIpI,KAA8B,IAAzBoI,EAAO,aAAwB6gB,eAMnD,4BACE,wCACA,4BAEI,2BACE/oB,KAAK,SACL1B,KAAK,WACLzU,MAAO,CAAEgE,MAAO,kBAAmBwkB,YAAa,OAChDoxB,YAAY,WACZj6C,SAAU66C,EAAa,YACvB57C,OAC2B,OAAzByf,EAAO,SAAyBA,EAAO,SAAe,KAK1D,2BACElI,KAAK,SACL1B,KAAK,YACLzU,MAAO,CAAEgE,MAAO,kBAAmBskB,WAAY,OAC/CsxB,YAAY,YACZj6C,SAAU66C,EAAa,aACvB57C,OAC4B,OAA1Byf,EAAO,UACHA,EAAO,UACP,OAMd,4BACE,iDACA,4BAEI,2BACElI,KAAK,SACL1B,KAAK,WACLmlC,YAAY,4BACZj6C,SAAU66C,EAAa,YACvB57C,MAC0B,IAAxByf,EAAO,SAAqBA,EAAO,SAAe,OAM5D,4BACE,iDACA,4BAEI,2BACElI,KAAK,SACL1B,KAAK,WACLmlC,YAAY,4BACZj6C,SAAU66C,EAAa,YACvB57C,MAC0B,IAAxByf,EAAO,SAAqBA,EAAO,SAAe,OAM5D,4BACE,oCACA,4BACE,kBAAC,KAAD,CACEpgB,MAAM,QACNW,MAAM,KACNC,MAAM,OACNH,SAAUqoC,EACVpoC,aAAc0f,EAAO,SACrB1e,SAAUm9C,EAAa,YACvB3+C,UAAWM,KAAKN,cAItB,4BACE,qCACA,4BACE,2BACEgY,KAAK,OACL1B,KAAK,QACL9V,aAAc0f,EAAO,MACrBu7B,YAAY,yCACZj6C,SAAU66C,EAAa,aAI7B,4BACE,2CACA,4BACE,2BACErkC,KAAK,OACL1B,KAAK,cACL9V,aAAc0f,EAAO,YACrBu7B,YAAY,mCACZj6C,SAAU66C,EAAa,mBAI7B,4BACE,uCACA,4BACE,kBAAC,KAAD,CACEv8C,MAAM,WACNW,MAAM,KACNC,MAAM,OACNH,SAAUsgD,EACVrgD,aAAc0f,EAAO,YACrB1e,SAAUm9C,EAAa,eACvB3+C,UAAWM,KAAKN,cAKtB,4BACE,sCACA,4BACE,kBAAC,KAAD,CACEF,MAAM,UACNW,MAAM,KACNC,MAAM,OACNH,SAAUqgD,EACVpgD,aAAc0f,EAAO,WACrB1e,SAAUm9C,EAAa,cACvB3+C,UAAWM,KAAKN,cAItB,4BACE,4CACA,4BACE,kBAAC,KAAD,CACEF,MAAM,gBACNW,MAAM,KACNC,MAAM,OACNH,SAAUugD,EACVtgD,aAAc0f,EAAO,iBACrB1e,SAAUm9C,EAAa,oBACvB3+C,UAAWM,KAAKN,cAItB,4BACE,sCAEE,uBACEyxB,KAAK,uCACLkW,IAAI,sBACJj4B,OAAO,UAEP,yBACEiiB,IAAKqvB,KACLn/C,MAAO,CAAEo/C,YAAa,MAAO7gD,OAAQ,QACrC2lB,IAAI,8BAIV,4BACE,kBAAC,KAAD,CACEjmB,MAAM,WACNW,MAAM,KACNC,MAAM,OACNH,SAAUwgD,EACVvgD,aAAc0f,EAAO,YACrB1e,SAAUm9C,EAAa,eACvB3+C,UAAWM,KAAKN,cAItB,4BACE,wCACA,4BACE,2BACEgY,KAAK,OACL1B,KAAK,WACL9V,aAAc0f,EAAO,SACrBu7B,YAAY,wCACZj6C,SAAU66C,EAAa,gBAI7B,4BACE,yDACA,4BACE,2BACErkC,KAAK,OACL1B,KAAK,UACL9V,aAAc0f,EAAO,QACrBu7B,YAAY,6CACZj6C,SAAU66C,EAAa,eAI7B,4BACE,iDACA,4BACE,2BACErkC,KAAK,OACL1B,KAAK,WACL9V,aAAc0f,EAAO,SACrBu7B,YAAY,WACZj6C,SAAU66C,EAAa,kBAMjC,yBAAK38C,UAAU,iBAAiB2vC,GAChC,yBAAK3vC,UAAU,aACb,4BAAQqC,QAASzB,KAAKi8C,UAAtB,QACA,4BAAQx6C,QAASzB,KAAKu7C,UAAtB,WAGJ,kBAAC,GAAD,CACEmB,KAAM7a,EACNniC,UAAWM,KAAKN,UAChBq9C,WAAYA,EACZG,UAAWA,EACXF,aAAcA,S,GAnVE39C,aCkLXuhD,G,4MAnLbj/C,MAAQ,CACNotC,QAAS,GACTnrB,SAAS,G,EAGX23B,SAAW,SAAA36C,GACT,EAAKkB,SAAS,CACZ8hB,SAAS,EACTmrB,QAAS,wBAEXnuC,EAAE46C,iBACF,EAAK/7C,MAAM87C,WAAWzM,OAAM,SAAAtwB,GAC1BrD,QAAQqD,MAAMA,EAAMuwB,SACpB,EAAKjtC,SAAS,CACZitC,QAASvwB,EAAMuwB,QACfnrB,SAAS,Q,EAKfq4B,SAAW,SAAAr7C,GACTA,EAAE46C,iBACF,EAAK/7C,MAAMw8C,Y,EAGb4E,iBAAmB,SAAC//B,EAAOjK,GACzB,IAEE,OADqB,EAAKpX,MAAlBo2C,SACQ/0B,GAAOhgB,MAAK,SAAAC,GAAC,OAAIA,EAAE8V,KAAOA,KAAIb,KAC9C,MAAOpV,GACPua,QAAQqD,MAAMsC,EAAOjK,EAAIjW,EAAEmuC,W,4CAI/B,WACE,MAAuC/uC,KAAKP,MAApC0d,EAAR,EAAQA,kBAAmByC,EAA3B,EAA2BA,QACvB,EAAuB5f,KAAK2B,MAA1BotC,EAAN,EAAMA,QAASnrB,EAAf,EAAeA,QAEf,GAAgB,KAAZmrB,EACF,IAAI8M,EACF,yBAAKz8C,UAAU,WACZwkB,GAAW,kBAAC,IAAD,MACXmrB,GAMP,IAdO,EAcH1tB,EAAO,GACPva,EAAI,EAfD,eAgBSqW,GAhBT,IAgBP,2BAAmC,CAAC,IAA3BvP,EAA0B,QAC7BA,EAAIoxC,WACN39B,EAAK1gB,KACH,wBAAIgW,IAAK,MAAQ7P,GACf,4BAAK9G,KAAK6gD,iBAAiB,aAAcjzC,EAAI+J,gBAC7C,4BAAK/J,EAAIgQ,MACT,4BAAKhQ,EAAIkxC,QACT,4BAAKlxC,EAAIkH,MACT,4BAAK9U,KAAK6gD,iBAAiB,UAAWjzC,EAAImxC,eAG9Cj4C,MA3BG,8BAgCP,IAAIwyB,EAAQ,GAOZ,OALEA,EADuB,IAArB1Z,EAAO,MACD,gCAEA,YAIR,yBAAKxgB,UAAU,WACb,kDACA,2BAAOA,UAAU,aACf,+BACE,4BACE,yCACA,oCACA,4CACA,qCACA,uCAEDiiB,IAGL,gDACA,2BAAOjiB,UAAU,YACf,+BACE,4BACE,yCACA,4BAAKwgB,EAAO,iBAEd,4BACE,4CACA,4BAAK,IAAIpI,KAAKoI,EAAO,aAAiB6gB,aAExC,4BACE,4CACA,4BAAK,IAAIjpB,KAAKoI,EAAO,aAAiB6gB,aAExC,4BACE,wCACA,4BACG7gB,EAAO,SADV,IACyBA,EAAO,YAGlC,4BACE,6CACA,4BAAKA,EAAO,SAAZ,MAEF,4BACE,6CACA,4BAAKA,EAAO,SAAZ,MAEF,4BACE,oCACA,4BAAK5f,KAAK6gD,iBAAiB,QAASjhC,EAAO,YAE7C,4BACE,qCACA,4BAAKA,EAAO,QAEd,4BACE,2CACA,4BAAKA,EAAO,QAEd,4BACE,uCACA,4BACG5f,KAAK6gD,iBAAiB,WAAYjhC,EAAO,eAI9C,4BACE,sCACA,4BAAK5f,KAAK6gD,iBAAiB,UAAWjhC,EAAO,cAE/C,4BACE,4CACA,4BACG5f,KAAK6gD,iBACJ,gBACAjhC,EAAO,oBAIb,4BACE,uCACA,4BACG5f,KAAK6gD,iBAAiB,WAAYjhC,EAAO,eAG9C,4BACE,wCACA,4BAAKA,EAAO,WAEd,4BACE,qCACA,4BAAK0Z,IAEP,4BACE,+CACA,4BAAK1Z,EAAO,gBAIlB,yBAAKxgB,UAAU,iBAAiBy8C,GAChC,yBAAKz8C,UAAU,aACb,4BAAQqC,QAASzB,KAAKi8C,UAAtB,QACA,4BAAQx6C,QAASzB,KAAKu7C,UAAtB,kB,GA7KYl8C,aCkCPyhD,G,4MAlCbn/C,MAAQ,G,4CACR,WACE,MAAuC3B,KAAKP,MAApC6mC,EAAR,EAAQA,KAAMya,EAAd,EAAcA,QAASC,EAAvB,EAAuBA,YACnBzlB,EAAU,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAEnC,OADAA,EAAQ+K,EAAO,GAAK,YAElB,kBAAC,IAAMrgB,SAAP,KACE,yBAAK7mB,UAAU,mBACb,wBAAIA,UAAU,6BACZ,wBAAIqC,QAAS,kBAAMs/C,EAAQC,EAAY,KAAK5hD,UAAWm8B,EAAQ,IAA/D,cAGA,wBAAI95B,QAAS,kBAAMs/C,EAAQC,EAAY,KAAK5hD,UAAWm8B,EAAQ,IAA/D,SAGA,wBAAI95B,QAAS,kBAAMs/C,EAAQC,EAAY,KAAK5hD,UAAWm8B,EAAQ,IAA/D,eAGA,wBAAI95B,QAAS,kBAAMs/C,EAAQC,EAAY,KAAK5hD,UAAWm8B,EAAQ,IAA/D,WAGA,wBAAI95B,QAAS,kBAAMs/C,EAAQC,EAAY,KAAK5hD,UAAWm8B,EAAQ,IAA/D,YAGA,wBAAI95B,QAAS,kBAAMs/C,EAAQC,EAAY,KAAK5hD,UAAWm8B,EAAQ,IAA/D,kB,GAzBcl8B,aCk8BX4hD,G,4MAt7Bbt/C,MAAQ,CACN2kC,KAAM,EACN0a,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7B9E,SAAU,GACVgF,gBAAiB,GACjBjB,cAAe,GACfpK,SAAU,GACVj2B,QAAS,CACP/I,GAAI,GACJwiB,IAAK,GACLh3B,MAAO,GACPyT,YAAa,GACbgK,OAAQ,cACRomB,QAAS,SACTrmB,gBAAiB,UACjBunB,WAAY,WACZD,eAAgB,GAChBqI,eAAgB,CACdrnC,OAAQ,UACRiV,aAAa,EACbC,aAAc,SACdC,iBAAiB,EACjBC,WAAY,GACZzD,iBAAiB,EACjBD,cAAc,EACdE,YAAY,EACZ7R,kBAAkB,EAClB8R,iBAAiB,EACjBmb,QAAQ,GAEVgsB,SAAU,GACVjW,UAAW,EACXwS,YAAa,OACbE,YAAa,OACbtkB,MAAO,GACP6iB,OAAQ,GACRoD,iBAAkB,GAClB1qC,YAAa,GACbmD,YAAa,GACb/F,SAAU,GACVC,UAAW,GACXkvC,YAAa,GACbC,iBAAkB,GAClBC,gBAAiB,GACjB1Y,SAAU,GACV2Y,WAAY,GACZC,YAAa,GACbC,QAAS,EACTC,SAAU,QAEZvkC,kBAAmB,GACnBwkC,WAAY,GACZ/sC,KAAM,I,EAKRgtC,gB,uCAAkB,WAAO/qC,GAAP,yCAAA1L,EAAA,+DACQ,EAAKxJ,MAAvBie,EADU,EACVA,QAAS0mB,EADC,EACDA,KACXwW,EAAO,GACPjmC,IAAIimC,EAAO,CAAEjmC,OAHD,SAMkB63B,KAC/BoO,KAAKlO,KAAS,YAAakO,GAC3BhO,OAAM,SAACtwB,GAGN,MAFArD,QAAQqD,MAAMA,GACd,EAAK1c,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KACvC,IAAIt4B,MAAMlK,EAAMqjC,SAASzvC,KAAK28B,YAXxB,uBAMJ+S,EANI,EAMV1vC,KANU,SAeYs8B,KACzBoO,KAAKlO,KAAS,YAAa,CAAEvV,IAAKzZ,EAAQyZ,MAC1CyV,OAAM,SAACtwB,GAGN,MAFArD,QAAQqD,MAAMA,EAAMuwB,SACpB,EAAKjtC,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KACvC,IAAIt4B,MAAM,mDApBJ,uBAeJq5B,EAfI,EAeV3vC,KAQF4vC,EAAiBD,EAAMC,eACvBhI,EAAS,aACTjL,EAAU,iBACVkT,EAAS,EAEI,IACbC,EA7BY,gBA+BVC,EAAe,IAAInS,SAAQ,SAACoS,EAASC,GACzCx+B,WAAU,uCAAC,gCAAA1Y,EAAA,+EAEiBujC,KACrBC,IAAIC,KAAS,oBAAsBoT,GACnClT,OAAM,SAACtwB,GAEN,GADArD,QAAQqD,MAAMA,EAAMuwB,SACL,IAAXkT,EACF,MAAM,IAAIv5B,MAAM,gDAEhBu5B,GAAkB,EAClBp+B,WAAW6yB,EAAS,QAVnB,YAEH4L,EAFG,8BAckBA,EAAYlwC,KAAhC4nC,EAdE,EAcFA,OAAQjL,EAdN,EAcMA,QAEI,WAAXiL,EAhBC,uBAiBHkI,EAAapgD,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KAC/C,IAAIt4B,MAAMqmB,GAlBb,WAmBiB,cAAXiL,EAnBN,wBAoBCuI,EAAavuC,KAAKC,MAAM86B,GAC5BnvB,EAAO,GAASkiC,EAAYjrC,GAC5B+I,EAAO,gBAAsB2iC,EAAWC,QACxCN,EAAapgD,SAAS,CACpBk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7B1a,KAAMA,EAAO,EACb1mB,UACAs8B,SAAUqG,EAAWrG,WA3BpB,2BA+BH97B,SAASC,eAAe,mBAAmBgE,UAAY0qB,EACvDlrB,WAAW6yB,EApCJ,KAIJ,0DAoCP2L,EAAO,EAAD,IApCC,0DAAD,SAAgB3L,IAAhB,sCAAgBA,EAAhB,GAJK,QA5BD,UAyEVyL,EAAarT,OAAM,SAACtwB,GAExB,MADArD,QAAQC,IAAIoD,GACN,IAAIkK,MAAMlK,MA3EF,4C,wDA+ElBs5B,c,sBAAgB,8DAAA3sC,EAAA,2DAC8B,EAAKxJ,MAA3Cie,EADQ,EACRA,QAAS0mB,EADD,EACCA,KAAMuP,EADP,EACOA,SAAUqG,EADjB,EACiBA,SACL,KAAtBt8B,EAAO,OAFG,sBAGN,IAAI8I,MAAM,8BAHJ,cAMV+5B,EAAS,CACX5rC,GAAI+I,EAAQ/I,GACZslC,OAAQv8B,EAAQu8B,OAAOh8C,MACvBk5B,IAAKzZ,EAAQyZ,KATD,SAYuBqV,KAClCoO,KAAKlO,KAAS,kBAAmB6T,GACjC3T,OAAM,SAACtwB,GAGN,MAFArD,QAAQqD,MAAMA,EAAMuwB,SACpB,EAAKjtC,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KACvC,IAAIt4B,MAAM,gDAjBN,mBAYFg6B,EAZE,EAYRtwC,KAQAwC,EAAgB8tC,EAAhB9tC,KAAMqO,EAAUy/B,EAAVz/B,MACR0/B,EAAK/tC,EAAK45B,SAAShuB,MAAM,KAC7BZ,EAAO,eAAqB+iC,EAAG1lC,MAAM,EAAG0lC,EAAGpiD,QAAQ6d,KAAK,OAEpD,cAAeskC,GAxBL,wBAyBR1I,EAAS,aACTjL,EAAU,mBAEG,IACbmT,EA7BQ,gBA+BNU,EAAc,IAAI5S,SAAQ,SAACoS,EAASC,GACxCx+B,WAAU,uCAAC,qCAAA1Y,EAAA,+EAE0BujC,KAC9BC,IAAIC,KAAS,oBAAsB8T,EAAeG,WAClD/T,OAAM,SAACtwB,GAGN,MAFArD,QAAQqD,MAAMA,EAAMuwB,SACpB,EAAKjtC,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KACvC,IAAIt4B,MAAM,gDAPb,mBAEKo6B,EAFL,EAED1wC,KAOH4nC,EAAoB8I,EAApB9I,OAAQjL,EAAY+T,EAAZ/T,QAEI,WAAXiL,EAXG,uBAYLkI,EAAapgD,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KAC/C,IAAIt4B,MAAMqmB,GAbX,QAce,cAAXiL,EACToI,KAEAhiC,SAASC,eAAe,mBAAmBgE,UAAY0qB,EACvDlrB,WAAW6yB,EAtBF,MAIJ,0DAqBP2L,EAAO,EAAD,IArBC,0DAAD,SAAgB3L,IAAhB,sCAAgBA,EAAhB,GAJK,QA5BL,UA0DNkM,EAAY9T,OAAM,SAACtwB,GACvB,MAAM,IAAIkK,MAAMlK,MA3DN,yBA+DwBkwB,KACnCC,IAAIC,KAAS,UAAYh6B,EAAKiC,GAAK,iBACnCi4B,OAAM,SAACtwB,GAGN,MAFArD,QAAQqD,MAAMA,EAAMuwB,SACpB,EAAKjtC,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KACvC,IAAIt4B,MACR,0EArEQ,wBA+DFw4B,EA/DE,EA+DR9uC,KAUN8pC,EAAWA,EAASzZ,OAAOxf,EAAMvf,KAAI,SAAC4I,GAAD,OAAOA,EAAEkiC,aAG1CrxB,EAAoB,EAAK4lC,qBAC3B7B,EACArL,GAGF,EAAK/zC,SAAS,CACZk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7BE,gBAAiBA,EACjB5a,KAAMA,EAAO,EACb4V,WACAt8B,UACAzC,oBACAwkC,WAAY1+B,EACZrO,SAzFY,+D,EA+FhBouC,a,sBAAe,oFAAA73C,EAAA,+DACgD,EAAKxJ,MAA5D2kC,EADO,EACPA,KAAMnpB,EADC,EACDA,kBAAmByC,EADlB,EACkBA,QAAShL,EAD3B,EAC2BA,KAAM+sC,EADjC,EACiCA,WADjC,SAIPjT,KAAMC,IAAIC,KAAS,gBAAkBhvB,EAAQ/I,IAAIi4B,OAAM,SAACtwB,GAC5DrD,QAAQqD,MAAMA,EAAMuwB,YALT,cASbnvB,EAAO,MAAY,EACnB0mB,GAAc,EAVD,SAWmBoI,KAC7BC,IAAIC,KAAS,UAAYtd,mBAAmB1R,EAAQunB,iBACpD2H,OAAM,SAACtwB,GACNrD,QAAQqD,MAAMA,EAAMuwB,YAdX,iBAWDkU,EAXC,EAWP7wC,OAKW,SAAU6wC,GACM,OAA3BA,EAAU7wC,KAAKguC,UACjBxgC,EAAO,MAAY,GAKnBhC,EAAO,GAIX,IAAS9W,EAAI,EAAGA,EAAIqW,EAAkB5c,OAAQuG,IAC5C,GAAIqW,EAAkBrW,GAAlB,SAAkC,CAIpC,IAHAo8C,EAAY/lC,EAAkBrW,GAAlB,KACZq8C,EAAaD,EACbn8C,EAAI,EACG6W,EAAK3G,SAASksC,IACnBA,EAAaD,EAAYn8C,EACzBA,IAEF6W,EAAKjd,KAAKwiD,GACVhmC,EAAkBrW,GAAlB,MAAgCq8C,EArCvB,GA0Ce,OAAxBvjC,EAAQ89B,aAAgD,QAAxB99B,EAAQ89B,YA1C/B,wBA2CH7mC,EAAOjC,EAAPiC,GA3CG,UA4CM,EAAKusC,YACpBxU,KACA/3B,EACAsG,EACAyC,EAAQ89B,aAhDC,QA4CPtrC,EA5CO,OAmDTyC,GAnDS,EAyDPzC,GANFyC,YACAmD,EApDS,EAoDTA,YACAgnB,EArDS,EAqDTA,SACAxhB,EAtDS,EAsDTA,SACAtL,EAvDS,EAuDTA,UACAD,EAxDS,EAwDTA,SAxDS,wBA2DPoxC,EAAkB,GAClBC,EAAkB,GAClBC,EAAe,GACfC,EAAe,GACfC,EAAgB,GAChBC,EAAe,GACV35C,EAAI,EAjEF,aAiEKA,EAAI43C,EAAWphD,QAjEpB,wBAkET6f,SAASC,eAAe,sBAAsBgE,UAC5C,mBAAqBta,EAAI,OAAS43C,EAAWphD,OAnEtC,UAoEI,EAAK6iD,YAChBxU,KACA+S,EAAW53C,GAAG8M,GACdsG,EACAyC,EAAQ89B,aAxED,QAoETtrC,EApES,OA0ETixC,EAAgB1iD,KAAKyR,EAAKyC,aAC1ByuC,EAAgB3iD,KAAKyR,EAAK4F,aACtB5F,EAAK4sB,UAAY,GAAGukB,EAAa5iD,KAAKyR,EAAK4sB,UAC3C5sB,EAAK4sB,SAAW,KAAKwkB,EAAa7iD,KAAKyR,EAAKoL,UAChDimC,EAAc9iD,KAAKyR,EAAKF,WACxBwxC,EAAa/iD,KAAKyR,EAAKH,UA/Ed,QAiE4BlI,IAjE5B,wBAiFX8K,EAAc,EAAKg4B,OAAOwW,GAC1BrrC,EAAc,EAAK20B,OAAO2W,GAC1BtkB,EAAW,EAAK6N,OAAO0W,GACvB/lC,EAAW,EAAKmvB,OAAO6W,GACvBtxC,EAAY,EAAKyxC,OAAOF,GACxBxxC,EAAW,EAAK0xC,OAAOD,GAtFZ,eA0Fb9jC,EAAO,YAAkB/K,EACzB+K,EAAO,YAAkB5H,EACzB4H,EAAO,SAAeof,EACtBpf,EAAO,SAAepC,EACtBoC,EAAO,UAAgB1N,EACvB0N,EAAO,SAAe3N,EACtB,EAAKnQ,SAAS,CACZm+C,cAAegD,EACf9lC,oBACAyC,UACAohC,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7B1a,SArGW,+D,EA0Gfsd,gB,sBAAkB,gCAAAz4C,EAAA,2DACU,EAAKxJ,MAAvBie,EADQ,EACRA,QAAS0mB,EADD,EACCA,OACb1mB,EAAO,iBAAqBrf,OAAS,GAFzB,gBAGd,EAAKuB,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI1a,KAAMA,EAAO,IAHhD,4BAKR,IAAI5d,MAAM,0BALF,4E,EAUlBm7B,iB,sBAAmB,gCAAA14C,EAAA,2DACS,EAAKxJ,MAAvBie,EADS,EACTA,QAAS0mB,EADA,EACAA,MACb,EAAKwd,cAAclkC,GAFN,gBAGf,EAAK9d,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI1a,KAAMA,EAAO,IAH/C,4BAKT,IAAI5d,MAAM,mCALD,2C,EASnBq7B,Q,sBAAU,gCAAA54C,EAAA,+DAC+B,EAAKxJ,MAApCie,EADA,EACAA,QAASzC,EADT,EACSA,kBADT,SAEFuxB,KACHoO,KAAKlO,KAAS,qBAAsB,CACnC/3B,GAAI+I,EAAQ/I,GACZsG,kBAAmBA,IAEpB2xB,OAAM,SAACtwB,GACN,MAAM,IAAIkK,MAAM,0CARZ,uBAUFgmB,KAAMsV,IAAIpV,KAAS,YAAahvB,GAASkvB,OAAM,SAACtwB,GACpD,MAAM,IAAIkK,MAAM,0CAXV,OAaR3mB,OAAOywC,SAASrhB,KAAO,eAAiBvR,EAAQ/I,GAbxC,2C,EAgBVusC,Y,uCAAc,WAAOxU,EAAQ/3B,EAAIsG,EAAmBugC,GAAtC,iBAAAvyC,EAAA,sEACSujC,KAClBoO,KAAKlO,EAAS,WAAY,CACzB/3B,GAAIA,EACJotC,UAAW9mC,EACXugC,YAAaA,IAEd5O,OAAM,SAACtwB,GAGN,MAFArD,QAAQqD,MAAMA,EAAMuwB,SACpB,EAAKjtC,SAAS,CAAEk/C,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KACvC,IAAIt4B,MACR,2EAXM,uBACNtW,EADM,EACNA,KADM,kBAcLA,GAdK,2C,8DAmBd6pC,SAAW,WACT,IAAQ3V,EAAS,EAAK3kC,MAAd2kC,KACR,EAAKxkC,SAAS,CACZwkC,KAAMA,EAAO,K,EAIjBya,QAAU,SAACza,GACI,IAATA,GACF,EAAKxkC,SAAS,CAAEwkC,U,EAKpBwd,cAAgB,SAACroC,GAEf,IADA,IAAItD,GAAM,EACV,MAAgBpB,OAAOC,KAAKyE,GAA5B,eAAmC,CACf,KAAdA,EADM,QAERtD,GAAM,GAGV,OAAOA,G,EAIT+rC,SAAW,SAAClvC,GAEV,IAAIqkB,EACA8qB,EACAC,EACAxvC,EAEJ,IANAI,EAAMqvC,UAAUrvC,IAMRiC,SAAS,YAAa,CAC5B,IAAIqtC,EAAYtvC,EAAIsiB,QAAQ,MAAO,KAAK9W,MAAM,UAC1C+jC,EAAOD,EAAU,GAAG9jC,MAAM,KAC1BvU,EAAMq4C,EAAU,GAAG9jC,MAAM,KACzBgkC,EAAOv4C,EAAIA,EAAI1L,OAAS,GAC5B6jD,EAASG,EAAK,IACdJ,EAAMI,EAAKtnC,MAAM,EAAGsnC,EAAKhkD,OAAS,IAC9B4rC,QAAQqY,GACZL,EAAMA,EAAI/lC,KAAK,KACfxJ,EAAO2vC,EAAKA,EAAKhkD,OAAS,GACtByU,EAAIiC,SAAS,sBACfoiB,EACE,mBACArkB,EAAIwL,MAAM,UAAU,GAAGA,MAAM,uBAAuBikC,MACpD,OACOzvC,EAAIiC,SAAS,sBACtBoiB,EACE,0BACAirB,EAAU,GAAG9jC,MAAM,uBAAuBikC,MAC1C,OACOzvC,EAAIiC,SAAS,cACtBoiB,EACE,kBAAoBirB,EAAU,GAAG9jC,MAAM,eAAeikC,MAAQ,OACvDzvC,EAAIiC,SAAS,gBACtBoiB,EACE,kBAAoBirB,EAAU,GAAG9jC,MAAM,eAAeikC,MAAQ,aAGlE1zB,MAAM,mCAGR,MAAO,CACLsI,IAAKA,EACL8qB,IAAKA,EACLC,OAAQA,EACRxvC,KAAMA,I,EAIV8vC,WAAa,SAAC1tC,EAAM1W,EAAMQ,GACxB,IAAIE,EAAU,CACZgW,KAAMA,EACNojC,YAAY,EACZC,UAAW,GACX7H,SAAU,EACV1kC,SAAU,IACV62C,iBAAkB,GAClBC,mBAAoB,GAElB1kD,EAAe,EACnB,QAAa0hB,IAAT9gB,EAAoB,CACtB,IAAI05C,EAAO,IAAIC,KAAKn6C,EAAMU,GACtB04C,EAAQ54C,EAAK0f,MAAM,KAAKpC,KAAK,KAC7Bs2B,EAAS8F,EAAK9F,OAAOgF,GAEH,IAAlBhF,EAAOn0C,SACTL,EAAew0C,EAAO,GAAGpW,KAAKznB,IAGX,KAAjB3W,GAAwBY,EAAKo9C,cAAcjnC,SAAS,OAE5B,IAAjB/W,GAAuBY,EAAKo9C,cAAcjnC,SAAS,QAElC,KAAjB/W,GAAwBY,EAAKo9C,cAAcjnC,SAAS,YAEnC,IAAjB/W,GAAuBY,EAAKo9C,cAAcjnC,SAAS,UAElC,KAAjB/W,GAAuBY,EAAKo9C,cAAcjnC,SAAS,QAC5D/W,EAAe,IAJfA,EAAew0C,EAAO,GAAG79B,GAFzB3W,EAAe,EAFfA,EAAe,GAYnB,OAAOA,G,EAGT2kD,UAAY,SAACtc,EAAYuc,GACvB,OAAOvc,EAAWznC,MAAK,SAACC,GAAD,OAAOA,EAAE8V,KAAOiuC,KAAkBhwC,M,EAG3D63B,OAAS,SAAC1hC,GAIR,IAHA,IAAIqiC,EAAMriC,EAAI1K,OACVqH,GAAO8F,IAEJ4/B,KACL1lC,EAAMqD,EAAIqiC,GAAO1lC,EAAMqD,EAAIqiC,GAAO1lC,EAEpC,OAAOA,G,EAGTilC,OAAS,SAAC5hC,GAIR,IAHA,IAAIqiC,EAAMriC,EAAI1K,OACVsH,EAAM6F,IAEH4/B,KACLzlC,EAAMoD,EAAIqiC,GAAOzlC,EAAMoD,EAAIqiC,GAAOzlC,EAEpC,OAAOA,G,EAGT87C,OAAS,SAAC14C,GAER,OADYA,EAAIC,QAAO,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,IAAG,GAC3BH,EAAI1K,QAAU,G,EAG7BwkD,SAAW,SAAC95C,GACV,IACE,OAAOA,EAAI+5C,OAAM,SAAC52C,GAAD,OAAOA,IAAMnD,EAAI,MAClC,MAAOrK,GACP,MAAO,K,EAIXqkD,eAAiB,SAACpG,EAAWjhC,GAC3B,IAAK,IAAI7W,EAAI,EAAGA,EAAI83C,EAAUt+C,OAAQwG,IACpC83C,EAAU93C,GAAGrG,YAAa,EAE5B,IAAK,IAAIoG,EAAI,EAAGA,EAAI+3C,EAAUt+C,OAAQuG,IAChC8W,EAAK3G,SAAS4nC,EAAU/3C,GAAGkP,QAC7B6oC,EAAU/3C,GAAGpG,YAAa,GAG9B,OAAOm+C,G,EAGTqG,YAAc,SAACvnC,GACb,IAAK,IAAI7W,EAAI,EAAGA,EAAI6W,EAAGpd,OAAQuG,IACzB6W,EAAG7W,GAAG83C,KAAKr+C,OAAS,EACtBod,EAAG7W,GAAG+3C,UAAY,EAAKoG,eAAetnC,EAAG7W,GAAG+3C,UAAW,CAAC,IAAK,IAAK,MACjC,IAAxBlhC,EAAG7W,GAAG6Q,cACfgG,EAAG7W,GAAG+3C,UAAY,EAAKoG,eAAetnC,EAAG7W,GAAG+3C,UAAW,CAAC,MAExDlhC,EAAG7W,GAAG+3C,UAAY,EAAKoG,eAAetnC,EAAG7W,GAAG+3C,UAAW,CAAC,IAAK,MAG5DlhC,EAAG7W,GAAG+3C,UACJt1C,QAAO,SAAC4B,GAAD,OAAQA,EAAEzK,cACjBgD,KAAI,SAACyH,GAAD,OAAOA,EAAE6K,QACbiB,SAAS0G,EAAG7W,GAAG8W,QAElBD,EAAG7W,GAAG8W,KAAOD,EAAG7W,GAAG+3C,UAAUt1C,QAAO,SAAC4B,GAAD,OAAQA,EAAEzK,cAAY,GAAGsV,MAGjE,OAAO2H,G,EAGTwnC,YAAc,SAACxnC,GACb,IAAIynC,EAAS7+C,KAAKqB,IAAL,MAAArB,KAAI,aAAQoX,EAAGja,KAAI,SAACsD,GAAD,OAAOA,EAAE43C,KAAKr+C,YAC1C0oC,EAAStrB,EAAGja,KAAI,SAACsD,GAAD,OAAOA,EAAE2Q,iBACzBD,EAAO,UACX,GAAe,IAAX0tC,EACF1tC,EAAO,UACF,GACM,IAAX0tC,GACAnc,EAAOhyB,SAAS,KACfgyB,EAAOhyB,SAAS,IAAMgyB,EAAOhyB,SAAS,KACvC,CACsBlV,OAAOsjD,QAC3B,iHAEmB3tC,EAAO,WAE9B,IAAK,IAAI5Q,EAAI,EAAGA,EAAI6W,EAAGpd,OAAQuG,IAAK,CAClC,IAAIq+C,EAAc,IACL,OAATztC,EACEiG,EAAG7W,GAAG83C,KAAKr+C,OAAS,EACtB4kD,EAAc,IACmB,IAAxBxnC,EAAG7W,GAAG6Q,gBACfwtC,EAAc,KAEE,YAATztC,EACmB,IAAxBiG,EAAG7W,GAAG6Q,cACRwtC,EAAc,IACJ,CAAC,EAAG,IAAIluC,SAAS0G,EAAG7W,GAAG6Q,iBACjCwtC,EAAc,KAGY,IAAxBxnC,EAAG7W,GAAG6Q,gBACRwtC,EAAc,KAGlBxnC,EAAG7W,GAAG8W,KAAOunC,EAEf,OAAOxnC,G,EAGT2nC,YAAc,SAAC3nC,GACb,IAAK,IAAI7W,EAAI,EAAGA,EAAI6W,EAAGpd,OAAQuG,IACzB6W,EAAG7W,GAAGyX,eAAetH,SAAS,UAAW,WAC3C,IAAIjB,EAAO2H,EAAG7W,GAAGyX,eAAeiC,MAAM,SAAS,GAC3Ck5B,EAAQ/7B,EAAG7c,MAAK,SAACkG,GAAD,OAAOA,EAAEuX,iBAAmBvI,KAC5C0jC,IACF/7B,EAAG7W,GAAGgwB,KAAO4iB,EAAM7iC,IAJsB,GAQ/C,OAAO8G,G,EAGT4nC,YAAc,SAACC,EAAKC,GAClB,IAAK,IAAI3+C,EAAI,EAAGA,EAAI2+C,EAAKllD,OAAQuG,IAAK,CACpC,IAAK0+C,IAAQA,EAAIE,eAAeD,EAAK3+C,IACnC,OAAO,EAET0+C,EAAMA,EAAIC,EAAK3+C,IAEjB,OAAO,G,EAGTi8C,qBAAuB,SAAC7B,EAAiBrL,GACvC,IAAQtN,EAAesN,EAAftN,WACA0b,EAA0B/C,EAA1B+C,UAAWzT,EAAe0Q,EAAf1Q,WAGfjyB,EAAiB,GACjBogC,EAAY,GACZgH,EAAc,GACdC,EAAqB,GACrB9f,EAAW,GACX3oB,EAAoB,GAGpBjR,EAAQ,EACZ,IAAK,IAAIyK,KAAOstC,EAAW,CACzB1lC,EAAiB5H,EACjBgoC,EAAY,KACZgH,EAAc,KACdC,EAAqB3B,EAAUttC,GAAK65B,WAGhC,EAAK+U,YAAYK,EAAoB,CAAC,QAAS,YACjDjH,EAAYiH,EAAkB,MAAUzlD,OAEtC,EAAKolD,YAAYK,EAAoB,CAAC,gBAAiB,YACzDrnC,EAAiBqnC,EAAkB,cAAkBzlD,OAEnD,EAAKolD,YAAYK,EAAoB,CAAC,YAAa,YACrDrnC,EAAiBqnC,EAAkB,UAAczlD,OAE/C,EAAKolD,YAAY/U,EAAY,CAAC,SAAU,YAC1CmV,EAAcnV,EAAU,OAAWrwC,OAIrC,IAAI2kD,EAAmB,EAAKJ,WAC1B,CAAC,QACDnc,EACAhqB,IAIAA,EAAetH,SAAS,UACV,kDAAd0nC,KAEAmG,EAAmB,IAcrBhf,EAAW,CACTjvB,GAAI3K,EACJqS,eAAgB5H,EAChBgoC,UAAWA,EACXgH,YAAaA,EACbhuC,cAAemtC,EACfhwC,KAbgB,OAAd6pC,EACY,EAAKkG,UAAUtc,EAAYuc,GAE3BnG,EAWd/gC,KAAM,IACNkZ,MAAO,EACPgoB,OAAQ,OACRC,WArBkB,EAsBlBC,UAAU,EACVJ,KAAMqF,EAAUttC,GAAKkvC,WACrBhH,UAAW,CACT,CAAE7oC,KAAM,IAAKtV,YAAY,GACzB,CAAEsV,KAAM,IAAKtV,YAAY,GACzB,CAAEsV,KAAM,IAAKtV,YAAY,GACzB,CAAEsV,KAAM,IAAKtV,YAAY,KAG7Byc,EAAkBxc,KAAKmlC,GACvB55B,IASF,OANAiR,EAAoB,EAAKgoC,YAAYhoC,GAErCA,EAAoB,EAAK+nC,YAAY/nC,GAErCA,EAAoB,EAAKmoC,YAAYnoC,I,EAOvCqiC,uBAAyB,SAACD,GACxB,IAAM3/B,EAAY,EAAKje,MAAjBie,QACNA,EAAQ2/B,iBAAmBA,EAC3B,EAAKz9C,SAAS,CAAE8d,a,EAGlBm8B,aAAe,SAACj7B,GAAD,OAAW,SAACP,GACzB,IAAI6C,EAAS,EAAKzhB,MAAMyhB,OACxBA,EAAOtC,GAASP,EAAMnR,OAAOjP,MAC7B,EAAK2B,SAAS,CAAEshB,a,EAGlBo6B,cAAgB,SAAC18B,GAAD,OAAW,SAACP,GAC1B,IAAIX,EAAU,EAAKje,MAAMie,QACzBA,EAAQkB,GAASkiB,OAAOC,UAAU1iB,EAAMpgB,OACpCogB,EAAMpgB,MACNogB,EAAMnR,OAAOjP,MACjB,EAAK2B,SAAS,CAAE8d,c,EAGlBi+B,cAAgB,SAACpV,EAAWtoC,GAC1B,IAAIyf,EAAU,EAAKje,MAAMie,QACzBA,EAAQ6oB,GAAatoC,EACrB,EAAK2B,SAAS,CAAE8d,a,EAGlB48B,aAAe,SAACj8B,GACd,IAAMX,EAAY,EAAKje,MAAjBie,QACNA,EAAQu8B,OAAS57B,EACjB,EAAKze,SAAS,CAAE8d,a,EAGlBkmC,gBAAkB,SAAC36C,EAAGC,GAAJ,OAAU,SAACmV,GAC3B,IAAIpD,EAAoB,EAAKxb,MAAMwb,kBACnCA,EAAkBhS,GAAGC,GAAKmV,EAAMnR,OAASmR,EAAMnR,OAAOjP,MAAQogB,EAAMpgB,MAC1D,kBAANiL,IAAuB+R,EAAkBhS,GAAlB,MAAgC,GAC3DgS,EAAoB,EAAK+nC,YAAY/nC,GACrC,EAAKrb,SAAS,CAAEqb,wB,EAGlB4oC,qBAAuB,SAAC56C,EAAGC,GAAJ,OAAU,SAACmV,GAChC,IAAI,EAAiC,EAAK5e,MAApCwb,EAAN,EAAMA,kBAAmByC,EAAzB,EAAyBA,QACzBzC,EAAkBhS,GAAGC,IAAM+R,EAAkBhS,GAAGC,GAEhD,EAAKtJ,SAAS,CAAEqb,oBAAmByC,c,EAGrC0+B,gBAAkB,SAACx3C,GACjB,GAAIA,EAAI,EAAG,CACT,IAAMqW,EAAsB,EAAKxb,MAA3Bwb,kBACNA,EAAkBhI,OAAOrO,EAAI,EAAG,EAAGqW,EAAkBhI,OAAOrO,EAAG,GAAG,IAClE,EAAKhF,SAAS,CAAEqb,wB,EAIpBohC,kBAAoB,SAACz3C,GACnB,IAAMqW,EAAsB,EAAKxb,MAA3Bwb,kBACFrW,EAAIqW,EAAkB5c,OAAS,IACjC4c,EAAkBhI,OAAOrO,EAAI,EAAG,EAAGqW,EAAkBhI,OAAOrO,EAAG,GAAG,IAClE,EAAKhF,SAAS,CAAEqb,wB,EAIpB6/B,a,sBAAe,8BAAA7xC,EAAA,sEACoBujC,KAAMC,IAAIC,KAAS,oBADvC,gBACCiH,EADD,EACLzjC,KACR,EAAKtQ,SAAS,CACZ+zC,aAHW,2C,uDAOf,WACE71C,KAAKg9C,iB,oBAGP,WACE58B,SAAS/d,MAAQ,0BACjB,MAUIrC,KAAK2B,MATP2kC,EADF,EACEA,KACA0a,EAFF,EAEEA,YACA9E,EAHF,EAGEA,SACAgF,EAJF,EAIEA,gBACAjB,EALF,EAKEA,cACApK,EANF,EAMEA,SACAj2B,EAPF,EAOEA,QACAzC,EARF,EAQEA,kBACAwkC,EATF,EASEA,WAGF,OAAQrb,GACN,QAeA,KAAK,EACH,OACE,kBAAC,IAAMrgB,SAAP,KACE,kBAAC,GAAD,CACEqgB,KAAMA,EACNya,QAAS/gD,KAAK+gD,QACdC,YAAaA,IAEf,kBAAC,GAAD,CACEzF,SAAUv7C,KAAK4hD,gBACf7F,aAAc/7C,KAAKw9C,cACnB59B,QAASA,KAIjB,KAAK,EACH,OACE,kBAAC,IAAMqG,SAAP,KACE,kBAAC,GAAD,CACEqgB,KAAMA,EACNya,QAAS/gD,KAAK+gD,QACdC,YAAaA,IAEf,kBAAC,GAAD,CACEphC,QAASA,EACTs8B,SAAUA,EACVM,aAAcx8C,KAAKw8C,aACnBjB,SAAUv7C,KAAK83C,cACfmE,SAAUj8C,KAAKi8C,YAIvB,KAAK,EACH,OACE,kBAAC,IAAMh2B,SAAP,KACE,kBAAC,GAAD,CACEqgB,KAAMA,EACNya,QAAS/gD,KAAK+gD,QACdC,YAAaA,IAEf,kBAAC,GAAD,CACEphC,QAASA,EACTzC,kBAAmBA,EACnB04B,SAAUA,EACV6H,YAAa99B,EAAQ89B,YACrBE,YAAah+B,EAAQg+B,YACrBsD,gBAAiBA,EACjBS,WAAYA,EACZpG,SAAUv7C,KAAKgjD,aACf/G,SAAUj8C,KAAKi8C,SACf4B,cAAe79C,KAAK69C,cACpBQ,aAAcr+C,KAAK8lD,gBACnB/J,aAAc/7C,KAAK8lD,gBACnBtI,cAAex9C,KAAKw9C,cACpBY,YAAap+C,KAAK+lD,qBAClB/I,aAAch9C,KAAKg9C,aACnBsB,gBAAiBt+C,KAAKs+C,gBACtBC,kBAAmBv+C,KAAKu+C,qBAIhC,KAAK,EACH,OACE,kBAAC,IAAMt4B,SAAP,KACE,kBAAC,GAAD,CACEqgB,KAAMA,EACNya,QAAS/gD,KAAK+gD,QACdC,YAAaA,IAEf,kBAAC,GAAD,CACEphC,QAASA,EACTs8B,SAAUA,EACV+D,cAAeA,EACfT,uBAAwBx/C,KAAKw/C,uBAC7BjE,SAAUv7C,KAAK4jD,gBACf3H,SAAUj8C,KAAKi8C,SACfF,aAAc/7C,KAAKw9C,iBAI3B,KAAK,EACH,OACE,kBAAC,IAAMv3B,SAAP,KACE,kBAAC,GAAD,CACEqgB,KAAMA,EACNya,QAAS/gD,KAAK+gD,QACdC,YAAaA,IAEf,kBAAC,GAAD,CACEphC,QAASA,EACTi2B,SAAUA,EACV14B,kBAAmBA,EACnBo+B,SAAUv7C,KAAK6jD,iBACf5H,SAAUj8C,KAAKi8C,SACfF,aAAc/7C,KAAKw9C,cACnBa,aAAcr+C,KAAKw9C,cACnBR,aAAch9C,KAAKg9C,gBAI3B,KAAK,EACH,OACE,kBAAC,IAAM/2B,SAAP,KACE,kBAAC,GAAD,CACEqgB,KAAMA,EACNya,QAAS/gD,KAAK+gD,QACdC,YAAaA,IAEf,kBAAC,GAAD,CACEzF,SAAUv7C,KAAK+jD,QACf9H,SAAUj8C,KAAKi8C,SACf9+B,kBAAmBA,EACnByC,QAASA,EACTi2B,SAAUA,U,GA/6BCx2C,aCPnB82C,I,mNACJ6P,SAAW,SAAC9vB,GACV,OAAI3vB,KAAKuE,IAAIorB,GAAW,GAChB,GAAN,OAAU3vB,KAAKkF,MAAMyqB,GAArB,MACS3vB,KAAKuE,IAAIorB,GAAW,KACvB,GAAN,OAAU3vB,KAAKkF,MAAMyqB,EAAU,IAA/B,SACS3vB,KAAKuE,IAAIorB,GAAW,MACvB,GAAN,OAAU3vB,KAAKkF,MAAMyqB,EAAO,MAA5B,QACS3vB,KAAKuE,IAAIorB,GAAW,OACvB,GAAN,OAAU3vB,KAAKkF,MAAOyqB,EAAO,MAAqB,IAAM,GAAxD,SAEM,GAAN,OAAU3vB,KAAKkF,MAAOyqB,EAAO,OAAyB,IAAM,GAA5D,W,4CAGJ,WACE,IAAI,EAAsCl2B,KAAKP,MAAzCoX,EAAN,EAAMA,GAAIrO,EAAV,EAAUA,MAAOnG,EAAjB,EAAiBA,MAAO4jD,EAAxB,EAAwBA,OAAQC,EAAhC,EAAgCA,MAEhC,OADID,EAAS,IAAGA,EAAS,GAEvB,kBAAC,IAAD,CAAMlT,GAAI,eAAiBl8B,GACzB,yBAAKzX,UAAU,UAAUmC,MAAO,CAAE4kD,YAAa39C,IAC7C,yBAAKpJ,UAAU,SAASiD,GACxB,yBAAKjD,UAAU,SACZ8mD,EAAQ,EAAR,kBACclmD,KAAKgmD,SAASC,GAD5B,kCAEqBjmD,KAAKgmD,SAASC,GAFnC,Y,GAtBS5mD,cA+HP+mD,G,4MA9FbzkD,MAAQ,CACN+0C,QAAS,I,8FAGX,gCAAAvrC,EAAA,sEACuBujC,KAAMC,IAAIC,KAAS,YAAYE,OAAM,SAACtwB,GACzDrD,QAAQqD,MAAMA,MAFlB,gBACQpM,EADR,EACQA,KAGFi0C,GAAM,IAAI7uC,MAAOF,UACrBlF,EAAK1O,KAAI,SAACsD,GACRA,EAAEgR,YAAc,IAAIR,KAAKxQ,EAAEgR,aAC3BhR,EAAEi/C,QAAUI,EAAMr/C,EAAEgR,YAAYV,WAAa,IAC7CtQ,EAAEs/C,SAAWD,EAAkB,IAAZr/C,EAAE0vC,QAAiB1vC,EAAEgR,YAAYV,WAAa,IACjE,IAAI9O,EAAQ,UAQZ,OAPIxB,EAAEs/C,QAAU,IACd99C,EAAQ,WAENxB,EAAEs/C,QAAU//C,KAAKuE,IAAgB,EAAZ9D,EAAE0vC,WACzBluC,EAAQ,WAEVxB,EAAEwB,MAAQA,EACHxB,KAEToL,EAAOA,EAAKsB,MAAK,SAACvI,EAAGC,GAAJ,OAAUA,EAAEk7C,QAAUn7C,EAAEm7C,WAEzCtmD,KAAK8B,SAAS,CAAE40C,QAAStkC,IArB3B,gD,0EAuBA,WACEgO,SAAS/d,MAAQ,sBACjB,IAAMq0C,EAAY12C,KAAK2B,MAAjB+0C,QACN,OACE,yBAAKt3C,UAAU,WACb,2CACCs3C,EAAQhzC,KAAI,SAACkN,GACZ,OACE,kBAAC,GAAD,CACE+F,IAAK/F,EAAEiG,GACPA,GAAIjG,EAAEiG,GACNrO,MAAOoI,EAAEpI,MACTnG,MAAOuO,EAAEvO,MACT6jD,MAAOt1C,EAAE01C,QACTL,OAAQr1C,EAAEq1C,YAKhB,yBAAK7mD,UAAU,aACb,yCACA,kOAKA,4BACE,uDACA,kDACA,kDACA,iDAEF,+HAIA,4BACE,2ZAQA,iWAQA,6T,GAjFUC,a,6BC9BhBknD,G,4MACJ5kD,MAAQ,CACN6kD,WAAY,GACZp0C,KAAM,GACN+jB,OAAQ,GACRswB,QAAS,GACTpwB,OAAQ,GACRD,OAAQ,GACRE,OAAQ,GACRowB,cAAc,G,EAGhBx1B,SAAW,WACT,SAASy1B,EAAU3vC,EAAMka,GACvB,OAAOla,EAAKtT,KAAI,SAACsD,GAAD,OAAOkqB,EAASlqB,GAAGoc,OAAOtc,MAE5C,IAAM0/C,EAAe,EAAK7kD,MAApB6kD,WACAjQ,EAAS,EAAK92C,MAAd82C,KACFrlB,EAAWld,KAAKC,MAAMD,KAAKE,UAAUsyC,WAClCt1B,EAASra,GAKhB,IAJA,IAAIG,EAAOD,OAAOC,KAAKka,GAAU3nB,QAAO,SAACQ,GAAD,MAAa,WAANA,KAC3C68C,EAAG,sCAAkC5vC,EACtCtT,KAAI,SAACsD,GAAD,gBAAUA,EAAV,aAAgBkqB,EAASlqB,GAAG8N,KAA5B,QACJsJ,KAAK,KAFD,MAGEtX,EAAI,EAAGA,EAAIoqB,EAAQ,MAAU9N,OAAO7iB,OAAQuG,IACnD8/C,GAAS,UAAMD,EAAU3vC,EAAMka,GAAU9S,KAAK,KAArC,MAEX,IAAIpI,EAAOugC,EAAKvgC,KAAKwK,MAAM,KAAKpC,KAAK,KAAO,kBACxCwY,EAAaC,UAAU+vB,GACvB9vB,EAAO1W,SAASsQ,cAAc,KAClCoG,EAAKC,aAAa,OAAQH,GAC1BE,EAAKC,aAAa,WAAY/gB,GAC9BoK,SAAS4W,KAAKjzB,YAAY+yB,GAC1BA,EAAK5oB,S,EAGP24C,UAAY,SAACtmC,GACX,IAAI,EAAuC,EAAK5e,MAA1C00B,EAAN,EAAMA,OAAQmwB,EAAd,EAAcA,WAAYE,EAA1B,EAA0BA,aACtBvwB,EAAS5V,EAAMnR,OAAOjP,MACtB,EAAmB,EAAK2mD,aAC1B3wB,EACAE,EACAmwB,EACAE,GAJIt0C,EAAN,EAAMA,KAAMgkB,EAAZ,EAAYA,OAMZ,EAAKt0B,SAAS,CAAEsQ,OAAMgkB,SAAQD,Y,EAGhC4wB,mBAAqB,WACnB,IAAI,EAA+C,EAAKplD,MAAlDw0B,EAAN,EAAMA,OAAQE,EAAd,EAAcA,OAAQmwB,EAAtB,EAAsBA,WAAYE,EAAlC,EAAkCA,aAClCA,GAAgBA,EAChB,IAAMt0C,EAAS,EAAK00C,aAAa3wB,EAAQE,EAAQmwB,EAAYE,GAAvDt0C,KACN,EAAKtQ,SAAS,CAAE4kD,eAAct0C,U,EAGhC00C,aAAe,SAAC3wB,EAAQE,EAAQmwB,EAAYE,GAC1C,IAAIt0C,EACJ,GAAIs0C,EACFt0C,EAAO,CACL5M,EAAGghD,EAAWnwB,GAAQjT,OACtBriB,EAAGylD,EAAWrwB,GAAQ/S,YAEnB,CAGL,IAFA,IAAIriB,EAAI,GACJyE,EAAI,GACCsB,EAAI,EAAGA,EAAI0/C,EAAU,aAAiBpjC,OAAO7iB,OAAQuG,IAEzD0/C,EAAU,aAAiBpjC,OAAOtc,IACM,UAAzC0/C,EAAU,aAAiBpjC,OAAOtc,KAElC/F,EAAEJ,KAAK6lD,EAAWrwB,GAAQ/S,OAAOtc,IACjCtB,EAAE7E,KAAK6lD,EAAWnwB,GAAQjT,OAAOtc,KAGrCsL,EAAO,CAAErR,IAAGyE,KAId,MAAO,CAAE4M,OAAMgkB,OAFFowB,EAAWrwB,GAAQrhB,KAETwhB,OADVkwB,EAAWnwB,GAAQvhB,O,EAIlCkyC,W,sBAAa,oDAAA77C,EAAA,yDACLorC,EAAS,EAAK92C,MAAd82C,KACAmQ,EAAiB,EAAK/kD,MAAtB+kD,cACFnQ,EAAKiQ,WAHE,iCAIwB9X,KAAMC,IAAN,UAC5BC,KAD4B,oCACM2H,EAAK1/B,KALnC,OAOT,IAPS,SAIG2vC,EAJH,EAIHp0C,KAGN,MAAgB2E,OAAOC,KAAKwvC,GAA5B,eAAS7vC,EAAgC,KAClC,CAAC,KAAM,eAAgB,UAAUM,SAASN,EAAIunC,iBACjDsI,EAAW7vC,GAAKyM,OAASojC,EAAW7vC,GAAKyM,OAAO1f,KAAI,SAACsD,GAAD,OAClDmX,WAAWnX,OAIJ,QAETy/C,EAAU1vC,OAAOC,KAAKwvC,GAAYj9C,QACpC,SAACqH,GAAD,OACG,CAAC,KAAM,QAAS,eAAgB,UAAUqG,SAASrG,EAAEstC,kBAGtD/nB,EAASswB,EAAQ,GACjBA,EAAQxvC,SAAS,UAASkf,EAAS,QAtB9B,EAwBsB,EAAK2wB,aAClC3wB,EAXW,QAaXqwB,EACAE,GAJIt0C,EAxBG,EAwBHA,KAAMgkB,EAxBH,EAwBGA,OAAQE,EAxBX,EAwBWA,OAOpB,EAAKx0B,SAAS,CACZ0kD,aACAp0C,OACA+jB,SACAswB,UACApwB,OAtBW,QAuBXD,SACAE,WAtCO,4C,+FA2Cb,WAAyBn0B,GAAzB,eAAAgJ,EAAA,sDACQ87C,EAAajnD,KAAKP,MAAlBwnD,SACF9kD,EAAU8kD,WAAaA,GACzBjnD,KAAKgnD,aAHT,gD,6HAOA,sBAAA77C,EAAA,sDACEnL,KAAKgnD,aADP,gD,0EAIA,WACE,IAAI,EASAhnD,KAAK2B,MARPyQ,EADF,EACEA,KACA+jB,EAFF,EAEEA,OACAswB,EAHF,EAGEA,QACApwB,EAJF,EAIEA,OACAD,EALF,EAKEA,OACAE,EANF,EAMEA,OACAowB,EAPF,EAOEA,aACAF,EARF,EAQEA,WAEIxV,EAAUhxC,KAAKP,MAAfuxC,MAEN,OACE,kBAAC,IAAM/qB,SAAP,KACE,yBAAK7mB,UAAU,WACb,yBAAKA,UAAU,QAAf,oBACA,4BAAQ8B,SAAUlB,KAAK6mD,UAAW1mD,MAAOg2B,GACtCswB,EAAQ/iD,KAAI,SAAC3C,GAAD,OACX,4BAAQ4V,IAAK5V,EAAGZ,MAAOY,GACpBA,OAIP,4BAAQU,QAASzB,KAAKkxB,UAAtB,wBAEF,yBAAK9xB,UAAU,QAAQiD,MAAM,gBAAgBZ,QAASuvC,GAAtD,QAGA,yBAAK5xC,UAAU,qBACb,kBAAC,KAAD,CACEgT,KAAMA,EACN+jB,OAAQA,EACRE,OAAQA,EACRD,OAAQA,EACRE,OAAQA,EACR6B,OAAQ,CAAC,SACTC,QAAS,CAAC,KACVF,OAAQ,QACRF,OAAQ,SACRC,OAAQ,SACRtK,UAAU,EACV7B,UAAU,KAGd,yBAAK1sB,UAAU,gBAAf,2BAC2B,IACzB,2BACEsY,KAAK,WACL2uB,QAASqgB,EACTxlD,SAAUlB,KAAK+mD,sBAInB,yBAAK3nD,UAAU,aACZ,WAAYonD,EACTA,EAAU,OACV,2CAA4C,IAHlD,8G,GA7L0BnnD,aAqanB6nD,G,4MA3NbvlD,MAAQ,CACN2mC,MAAO,GACP7kB,SAAS,EACT/P,KAAM,OACNyzC,SAAS,EACTn6B,KAAM,GACNpJ,SAAS,G,EAEXwjC,QAAU,SAAC92B,GAsBT,IAAK,IAAI0K,IArBG,CACV,CAAE5vB,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,KACb,CAAEC,EAAG,OAAKD,EAAG,MAGbmlB,EAAMA,EAAIgH,QAAQ0D,EAAK5vB,EAAG4vB,EAAK7vB,GAGjC,OAAOmlB,EAAIgH,QAAQ,aAAc,IAAI4mB,e,EAGvCmJ,QAAU,SAAC9mC,GACT,EAAKze,SAAS,CAAEkrB,KAAMzM,EAAMnR,OAAOjP,S,EAGrCmnD,YAAc,SAACtxC,EAAMa,GACnB,IAAM+7B,EAAW,EAAKnzC,MAAM+yC,SAASI,SACrC,EAAKnzC,MAAMk6C,QAAQh5C,KAAK,CACtBiyC,SAAUA,EACV8B,OAAQ,EAAK0S,QAAQpxC,GAAQ,IAAMa,K,EAIvC0wC,cAAgB,WACd,IAAM3U,EAAW,EAAKnzC,MAAM+yC,SAASI,SACrC,EAAKnzC,MAAMk6C,QAAQh5C,KAAK,CACtBiyC,SAAUA,EACV8B,OAAQ,M,EAIZ8S,QAAU,SAAChuC,GACT,EAAK8tC,YAAY9tC,EAAQ5C,WAAWiB,KAAM2B,EAAQ5C,WAAWC,K,EAG/DnD,KAAO,SAACA,EAAM8yC,GACZ,GAAI,CAAC,OAAQ,YAAa,SAASvvC,SAASvD,GAAO,CACjD,IAAI3S,EAAI,EAAKY,MAAMwlD,QAAU,GAAK,EAClCX,EAAW9yC,MAAK,SAACvI,EAAGC,GAAJ,OACdD,EAAEuI,GAAQtI,EAAEsI,GAAQ3S,EAAIqK,EAAEsI,GAAQvI,EAAEuI,IAAS3S,EAAI,O,EAKvDwI,OAAS,SAACyjB,EAAMw5B,GACd,MAAa,KAATx5B,EACKw5B,EAAWj9C,QAAO,SAACqH,GAAD,OACvBA,EAAEoF,KAAKkoC,cAAcjnC,SAAS+V,EAAKkxB,kBAG9BlqC,KAAKC,MAAMD,KAAKE,UAAUsyC,K,EAIrCiB,QAAU,SAAC/zC,GACT,EAAK5R,SAAS,CAAE4R,OAAMyzC,SAAU,EAAKxlD,MAAMwlD,W,8FAG7C,kCAAAh8C,EAAA,sEACqB6kC,QAAQC,IAAI,CAC7BvB,KAAMC,IAAIC,KAAS,0BACnBF,KAAMC,IAAIC,KAAS,4BAClBE,OAAM,SAACtwB,GACRrD,QAAQqD,MAAMA,MALlB,OACM0xB,EADN,OAOM5H,EAAQ4H,EAAO,GAAG99B,KAClBqR,EAAUysB,EAAO,GAAG99B,KAMxBk2B,GALAA,EAAQA,EAAM5kC,KAAI,SAACsG,GAGjB,OAFAA,EAAEuP,MAAQ4E,WAAWnU,EAAEuP,OACvBvP,EAAE09C,UAAYvpC,WAAWnU,EAAE09C,WACpB19C,MAEKT,QAAO,SAACS,GAAD,OAAOA,EAAEw8C,cAC1BvmC,EAAMqoB,EAAM5kC,KAAI,SAACsG,GAAD,OAAOA,EAAE6M,MAC7B4M,EAAQ/M,SAAW+M,EAAQ/M,SAASnN,QAAO,SAAC+C,GAAD,OACzC2T,EAAIhJ,SAAS3K,EAAEsK,WAAWC,OAE5B7W,KAAK8B,SAAS,CAAEwmC,QAAO7kB,UAASG,SAAS,IAnB3C,iD,0EAqBA,WAAU,IAAD,OACPxD,SAAS/d,MAAQ,8BACjB,IAKIk0C,EACA1/B,EANE69B,EAAW10C,KAAKP,MAAM+yC,SAAtBkC,OACF,EAA0C10C,KAAK2B,MAA7C2mC,EAAN,EAAMA,MAAO7kB,EAAb,EAAaA,QAAS/P,EAAtB,EAAsBA,KAAMsZ,EAA5B,EAA4BA,KAAMpJ,EAAlC,EAAkCA,QAC9BtjB,EAAON,KAAKuJ,OAAOyjB,EAAMsb,GAY7B,OAXAtoC,KAAK0T,KAAKA,EAAMpT,GAKdo0C,GACApM,EAAM5kC,KAAI,SAACsG,GAAD,OAAOA,EAAE6M,MAAII,SAASzL,SAASkpC,EAAOl0B,MAAM,KAAK,OAG3D3J,GADA0/B,EAAOjO,EAAMxnC,MAAK,SAACkJ,GAAD,OAAOA,EAAE6M,KAAOrL,SAASkpC,EAAOl0B,MAAM,KAAK,QACnD3J,IAGV,kBAAC,IAAMoP,SAAP,KACGswB,EAAO,4BAAKA,EAAKvgC,MAAa,+CAC/B,yBAAK5W,UAAU,cACb,yBAAKA,UAAU,QACZm3C,EACC,yBAAKn3C,UAAU,mBACb,kBAAC,GAAD,CACEm3C,KAAMA,EACN0Q,SAAU1Q,EAAKvgC,KACfyN,QAASA,EACTutB,MAAOhxC,KAAKunD,iBAIhB,yBAAKnoD,UAAU,yBACb,yBAAKA,UAAU,UAAf,uDAKJ,yBAAKA,UAAWm3C,EAAO,YAAc,kBAClC3yB,GACC,yBAAKxkB,UAAU,sBACb,kBAAC,IAAD,OAGJ,kBAAC,KAAD,CACE6kB,QAAQ,eACRR,QAASA,EACTH,iBAAkBtjB,KAAKwnD,QACvBhjC,aAAc3N,MAIpB,yBAAKzX,UAAU,SACb,yBAAKA,UAAU,oBACb,2BACE+7C,YAAW,sBAAiB76C,EAAKC,OAAtB,oBACXJ,MAAO6sB,EACP9rB,SAAUlB,KAAKqnD,QACf3vC,KAAK,WAEP,+BACE,+BACE,4BACE,wBACEjW,QAAS,kBAAM,EAAKgmD,QAAQ,SAC5BplD,MAAM,wBACNd,MAAO,CAAEgE,MAAO,UAHlB,QAOA,wBACE9D,QAAS,kBAAM,EAAKgmD,QAAQ,UAC5BplD,MAAM,yBACNd,MAAO,CAAEgE,MAAO,SAHlB,aAOA,wBACE9D,QAAS,kBAAM,EAAKgmD,QAAQ,cAC5BplD,MAAM,6BACNd,MAAO,CAAEgE,MAAO,SAHlB,wBAWR,yBAAKnG,UAAU,kBACb,+BACE,+BACGkB,EAAKoD,KAAI,SAACsG,GAAD,OACR,wBACE2M,IAAK3M,EAAE6M,GACPpV,QAAS,kBAAM,EAAK6lD,YAAYt9C,EAAEgM,KAAMhM,EAAE6M,MAE1C,wBAAItV,MAAO,CAAEgE,MAAO,UAAYyE,EAAEgM,MAClC,wBAAIzU,MAAO,CAAEgE,MAAO,QAAUnG,UAAU,UACrC4K,EAAEuP,OAEL,wBAAIhY,MAAO,CAAEgE,MAAO,QAAUnG,UAAU,UACrC4K,EAAE09C,yB,GA9MEroD,a,UCjIdsoD,I,mNA3EblT,YAAc,SAACC,GACbA,EAASA,EAAOpd,QAAQ,IAAK,IAAI9W,MAAM,KAEvC,IADA,IAAIrI,EAAM,GACDrR,EAAI,EAAGA,EAAI4tC,EAAOn0C,OAAQuG,IACjC,IACE,IAAI0Z,EAAQk0B,EAAO5tC,GAAG0Z,MAAM,KACxB,CAAC,WAAY,SAAU,UAAUvJ,SAASuJ,EAAM,IAClDrI,EAAIqI,EAAM,IAAMxM,KAAKC,MAAMuM,EAAM,IACX,aAAbA,EAAM,GACfrI,EAAIqI,EAAM,IAAM,IAAIhJ,KAAgB,IAAXgJ,EAAM,IACtB,CAAC,QAAS,QAAQvJ,SAASuJ,EAAM,IAC1CrI,EAAIqI,EAAM,IAAMrC,WAAWqC,EAAM,IACxB,CAAC,UAAW,OAAQ,UAAUvJ,SAASuJ,EAAM,MACtDrI,EAAIqI,EAAM,IAAMA,EAAM,IAExB,MAAO5f,GACPua,QAAQqD,MAAM,iBAAmBgC,EAAM,GAAK,YAGhD,OAAOrI,G,EAGTyvC,eAAiB,SAACt3B,GAChB,OAAOA,EACJgH,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,M,EAGrBuwB,eAAiB,SAAC9X,GAChB,IAAMzL,EAA6DyL,EAA7DzL,SAAU6G,EAAmD4E,EAAnD5E,OAAQh0B,EAA2C44B,EAA3C54B,SAAUoC,EAAiCw2B,EAAjCx2B,MAAO9M,EAA0BsjC,EAA1BtjC,KAAMrE,EAAoB2nC,EAApB3nC,OAAQ6b,EAAY8rB,EAAZ9rB,QACvD,MAAO,CACL,IACA,YACAjQ,KAAKE,UAAUowB,GACf,WACAtwB,KAAKE,UAAUi3B,GACf,aACA5kC,KAAKkF,MAAM0L,EAASG,UAAY,KAChC,UACAiC,EACA,SACAvF,KAAKE,UAAUzH,GACf,WACAuH,KAAKE,UAAU9L,GACf,YACA6b,GACA7F,KAAK,K,EAGT0xB,YAAc,SAACC,GACb,IAAI6J,EAAa,EAAKiO,eAAe9X,GACrC,EAA2B,EAAKtwC,MAAM+yC,SAAhCkC,EAAN,EAAMA,OAAQ9B,EAAd,EAAcA,SACVgH,IAAelF,GACjB,EAAKj1C,MAAMk6C,QAAQriB,QAAQ,CACzBsb,SAAUA,EACV8B,OAAQkF,K,4CAKd,WACEx5B,SAAS/d,MAAQ,yBACjB,IAAMqyC,EAAW10C,KAAKP,MAAM+yC,SAAtBkC,OACNA,EAAS10C,KAAK4nD,eAAelT,GAC7B,IAAI3E,EAAW/vC,KAAKy0C,YAAYC,GAChC,OACE,yBAAKt1C,UAAU,aACb,kBAAC,KAAD,CAAK2wC,SAAUA,EAAUD,YAAa9vC,KAAK8vC,mB,GAtE3BzwC,cCWlByoD,I,OAAkB9V,GAAe,kBACrC,gEAEI+V,GAAW/V,GAAe,kBAAM,wDAoGvBgW,G,4JAjGb,WACE,IAAIC,EAASlmD,OAAOywC,SAASrhB,KAAKla,SAAS,WAC3C,OACE,kBAAC,IAAD,MACIgxC,GAAU,kBAAC,EAAD,MACZ,8BACE,kBAAC,IAAD,KACE,kBAAC,IAAD,CACE1D,KAAK,OACL2D,OAAK,EACLC,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAAC,GAAcA,OAKrB,kBAAC,IAAD,CACE8kD,KAAK,QACL4D,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAAC,GAAeA,OAKtB,kBAAC,IAAD,CACE8kD,KAAK,cACL4D,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAACqoD,GAAoBroD,OAK3B,kBAAC,IAAD,CACE8kD,KAAK,kBACL4D,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAAC,GAAmBA,OAK1B,kBAAC,IAAD,CACE8kD,KAAK,OACL4D,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAACsoD,GAAatoD,OAKpB,kBAAC,IAAD,CACE8kD,KAAK,cACL4D,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAAC,GAAeA,OAKtB,kBAAC,IAAD,CACE8kD,KAAK,WACL4D,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAAC,GAAYA,OAKnB,kBAAC,IAAD,CACE8kD,KAAK,IACL4D,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAAC,GAASA,KAGdyoD,OAAK,IAGP,kBAAC,IAAD,CACE3D,KAAK,IACL4D,OAAQ,SAAC1oD,GAAD,OACN,kBAAC,EAAkBA,EACjB,kBAAC,GAAaA,UAMtBwoD,GAAU,kBAAC,GAAD,W,GA5FF5oD,aCdlBozC,IAAY,CACV2V,IAAK,+EAGP3M,IAAS0M,OAAO,kBAAC,GAAD,MAAS/nC,SAASC,eAAe,W","file":"static/js/main.45db0157.chunk.js","sourcesContent":["import React, { Component } from \"react\";\nimport \"./loading.css\";\n\nclass Loading extends Component {\n render() {\n return
;\n }\n}\n\nexport default Loading;\n","import React, { Component } from \"react\";\nimport Select from \"react-select\";\nimport \"./dataselect.css\";\n\nclass DataSelect extends Component {\n addNew = (table) => {\n this.props.showModal(table);\n };\n\n render() {\n const customStyles = {\n control: (base) => ({\n ...base,\n height: 30,\n minHeight: 30,\n }),\n };\n var { dataList, defaultValue, value, label, disabled } = this.props;\n var list = [];\n try {\n if (dataList.length > 0) {\n for (var param of dataList) {\n let inner = {\n value: param[value],\n label: param[label],\n isDisabled: false,\n };\n if (\"isDisabled\" in param) {\n inner[\"isDisabled\"] = param[\"isDisabled\"];\n }\n list.push(inner);\n }\n }\n } catch (e) {}\n var dValue = list.find((x) => x.value === defaultValue);\n var isDisabled = false;\n if (disabled) isDisabled = disabled;\n return (\n
\n option.isDisabled}\n noOptionsMessage={\n this.props.showModal\n ? () => (\n this.addNew(this.props.table)}\n >\n Add new\n
\n )\n : () =>
No options
\n }\n />\n \n );\n }\n}\n\nexport default DataSelect;\n","import React, { Component } from \"react\";\nimport \"./filterbox.css\";\n\nclass FilterBox extends Component {\n state = {\n open: false,\n };\n toggle = () => {\n this.setState({ open: !this.state.open }, () => {\n if (this.state.open) {\n window.dispatchEvent(new Event(\"resize\"));\n }\n });\n };\n\n componentDidMount() {\n if (this.props.preopen === \"true\" || this.props.preopen === true) {\n this.toggle();\n }\n }\n componentDidUpdate(prevProps) {\n if (prevProps.preopen !== this.props.preopen) {\n this.toggle();\n }\n }\n\n render() {\n const { content, title, inner, newFeature } = this.props;\n const { open } = this.state;\n\n return (\n
\n
\n
\n {title} {newFeature === \"true\" &&
NEW!
}\n
\n {open ? \"-\" : \"+\"}\n
\n
{content}
\n
\n );\n }\n}\n\nexport default FilterBox;\n","import L from \"leaflet\";\n\nL.VectorField = (L.Layer ? L.Layer : L.Class).extend({\n initialize: function (inputdata, options) {\n this._inputdata = inputdata;\n L.setOptions(this, options);\n },\n\n setInputData: function (inputdata) {\n this._inputdata = inputdata;\n return this.redraw();\n },\n\n addInputData: function (inputdata) {\n this._inputdata.push(inputdata);\n return this.redraw();\n },\n\n setOptions: function (options) {\n L.setOptions(this, options);\n return this.redraw();\n },\n\n redraw: function () {\n if (!this._frame && this._map && !this._map._animating) {\n this._frame = L.Util.requestAnimFrame(this._redraw, this);\n }\n return this;\n },\n\n onAdd: function (map) {\n this._map = map;\n\n if (!this._canvas) {\n this._initCanvas();\n }\n\n if (this.options.pane) {\n this.getPane().appendChild(this._canvas);\n } else {\n map._panes.overlayPane.appendChild(this._canvas);\n }\n map.on(\"click\", this._onClick, this);\n map.on(\"moveend\", this._reset, this);\n map.on(\"mousemove\", this._onMousemove, this);\n\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on(\"zoomanim\", this._animateZoom, this);\n }\n\n this._reset();\n },\n\n onRemove: function (map) {\n if (this.options.pane) {\n this.getPane().removeChild(this._canvas);\n } else {\n map.getPanes().overlayPane.removeChild(this._canvas);\n }\n map.off(\"click\", this._onClick, this);\n map.off(\"moveend\", this._reset, this);\n map.off(\"mousemove\", this._onMousemove, this);\n\n if (map.options.zoomAnimation) {\n map.off(\"zoomanim\", this._animateZoom, this);\n }\n },\n\n addTo: function (map) {\n map.addLayer(this);\n return this;\n },\n\n _initCanvas: function () {\n var canvas = (this._canvas = L.DomUtil.create(\n \"canvas\",\n \"leaflet-vectorfield-layer leaflet-layer\"\n ));\n\n var originProp = L.DomUtil.testProp([\n \"transformOrigin\",\n \"WebkitTransformOrigin\",\n \"msTransformOrigin\",\n ]);\n canvas.style[originProp] = \"50% 50%\";\n\n var size = this._map.getSize();\n canvas.width = size.x;\n canvas.height = size.y;\n\n var animated = this._map.options.zoomAnimation && L.Browser.any3d;\n L.DomUtil.addClass(\n canvas,\n \"leaflet-zoom-\" + (animated ? \"animated\" : \"hide\")\n );\n\n this._canvas = canvas;\n this._ctx = canvas.getContext(\"2d\");\n this._width = canvas.width;\n this._height = canvas.height;\n },\n\n _reset: function () {\n var topLeft = this._map.containerPointToLayerPoint([0, 0]);\n var size = this._map.getSize();\n this._canvas.width = size.x;\n this._canvas.height = size.y;\n this._width = size.x;\n this._height = size.y;\n L.DomUtil.setPosition(this._canvas, topLeft);\n this._redraw();\n },\n\n _CHtolatlng: function (yx) {\n var y_aux = (yx[0] - 600000) / 1000000;\n var x_aux = (yx[1] - 200000) / 1000000;\n var lat =\n 16.9023892 +\n 3.238272 * x_aux -\n 0.270978 * Math.pow(y_aux, 2) -\n 0.002528 * Math.pow(x_aux, 2) -\n 0.0447 * Math.pow(y_aux, 2) * x_aux -\n 0.014 * Math.pow(x_aux, 3);\n var lng =\n 2.6779094 +\n 4.728982 * y_aux +\n 0.791484 * y_aux * x_aux +\n 0.1306 * y_aux * Math.pow(x_aux, 2) -\n 0.0436 * Math.pow(y_aux, 3);\n lat = (lat * 100) / 36;\n lng = (lng * 100) / 36;\n\n return [lat, lng];\n },\n _WGSlatlngtoCH: function (lat, lng) {\n lat = lat * 3600;\n lng = lng * 3600;\n var lat_aux = (lat - 169028.66) / 10000;\n var lng_aux = (lng - 26782.5) / 10000;\n var y =\n 2600072.37 +\n 211455.93 * lng_aux -\n 10938.51 * lng_aux * lat_aux -\n 0.36 * lng_aux * lat_aux ** 2 -\n 44.54 * lng_aux ** 3 -\n 2000000;\n var x =\n 1200147.07 +\n 308807.95 * lat_aux +\n 3745.25 * lng_aux ** 2 +\n 76.63 * lat_aux ** 2 -\n 194.56 * lng_aux ** 2 * lat_aux +\n 119.79 * lat_aux ** 3 -\n 1000000;\n return { x, y };\n },\n _pixelSize: function () {\n var d = this._inputdata;\n var nRows = this._inputdata[\"lat\"].length;\n var nCols = this._inputdata[\"lat\"][0].length;\n var i, j;\n var abort = false;\n\n for (i = 0; i < nRows - 1 && !abort; i++) {\n for (j = 0; j < nCols - 1 && !abort; j++) {\n if (\n d[\"lat\"][i][j] !== null &&\n d[\"lat\"][i + 1][j] !== null &&\n d[\"lat\"][i][j + 1] !== null &&\n d[\"lat\"][i + 1][j + 1] !== null\n ) {\n abort = true;\n break;\n }\n }\n }\n var i0j0 = this._map.latLngToContainerPoint([\n d[\"lat\"][i][j],\n d[\"lng\"][i][j],\n ]);\n var i1j0 = this._map.latLngToContainerPoint([\n d[\"lat\"][i + 1][j],\n d[\"lng\"][i + 1][j],\n ]);\n var i0j1 = this._map.latLngToContainerPoint([\n d[\"lat\"][i][j + 1],\n d[\"lng\"][i][j + 1],\n ]);\n var i1j1 = this._map.latLngToContainerPoint([\n d[\"lat\"][i + 1][j + 1],\n d[\"lng\"][i + 1][j + 1],\n ]);\n var apixelx = [i0j0.x, i1j0.x, i0j1.x, i1j1.x];\n var apixely = [i0j0.x, i1j0.x, i0j1.x, i1j1.x];\n\n var pixelx = Math.max(...apixelx) - Math.min(...apixelx);\n var pixely = Math.max(...apixely) - Math.min(...apixely);\n\n return Math.max(pixelx, pixely);\n },\n\n _drawArrow: function (cell, ctx, size) {\n var { min, max, vectorArrowColor, colors } = this.options;\n var { center, value, rotation } = cell;\n\n // Arrow Center\n ctx.save();\n ctx.translate(center.x, center.y);\n\n // Arrow Color\n var color = \"#000000\";\n if (vectorArrowColor) {\n color = this._getColor(value, min, max, colors);\n }\n ctx.strokeStyle = color;\n\n // Arrow Rotation\n if (value === 0) rotation = Math.PI / 4;\n ctx.rotate(rotation); // Rotation in rads\n\n // Set other properties\n ctx.globalAlpha = 1;\n ctx.lineWidth = 1;\n\n // Draw Path\n if (value === 0) {\n ctx.beginPath();\n ctx.moveTo(-size / 4, 0);\n ctx.lineTo(+size / 4, 0);\n ctx.moveTo(0, -size / 4);\n ctx.lineTo(0, +size / 4);\n ctx.stroke();\n ctx.restore();\n } else {\n ctx.beginPath();\n ctx.moveTo(-size / 2, 0);\n ctx.lineTo(+size / 2, 0);\n ctx.moveTo(size * 0.25, -size * 0.25);\n ctx.lineTo(+size / 2, 0);\n ctx.lineTo(size * 0.25, size * 0.25);\n ctx.stroke();\n ctx.restore();\n }\n },\n\n getBounds: function () {\n var noNan = this._inputdata.flat().filter((i) => isNaN(i));\n var lat = noNan.map((n) => n[0]);\n var lng = noNan.map((n) => n[1]);\n var southWest = L.latLng([Math.min(...lat), Math.min(...lng)]);\n var northEast = L.latLng([Math.max(...lat), Math.max(...lng)]);\n return L.latLngBounds(southWest, northEast);\n },\n\n _drawArrows: function () {\n var ctx = this._ctx;\n ctx.clearRect(0, 0, this._width, this._height);\n\n var i, j, k, l, p, value, rotation, cell;\n var lat, lng, vx, vy, alat, alng, avx, avy;\n\n var nRows = this._inputdata[\"lat\"].length;\n var nCols = this._inputdata[\"lat\"][0].length;\n var size = this.options.size;\n\n var pixelSize = this._pixelSize();\n\n var stride = Math.max(1, Math.floor((1.2 * size) / pixelSize));\n\n if (stride === 1) {\n size = pixelSize * 0.9;\n }\n\n var maxRow = (Math.floor(nRows / stride) - 1) * stride + 1;\n var maxCol = (Math.floor(nCols / stride) - 1) * stride + 1;\n\n for (i = 0; i < maxRow; i += stride) {\n for (j = 0; j < maxCol; j += stride) {\n alat = [];\n alng = [];\n avx = [];\n avy = [];\n for (k = 0; k < stride; k++) {\n for (l = 0; l < stride; l++) {\n if (this._inputdata[\"lat\"][i + k][j + l] !== null) {\n alat.push(this._inputdata[\"lat\"][i + k][j + l]);\n alng.push(this._inputdata[\"lng\"][i + k][j + l]);\n avx.push(this._inputdata[\"variables\"][\"u\"][\"data\"][i + k][j + l]);\n avy.push(this._inputdata[\"variables\"][\"v\"][\"data\"][i + k][j + l]);\n }\n }\n }\n\n if (alat.length > 0) {\n lat = this._getAve(alat);\n lng = this._getAve(alng);\n vx = this._getAve(avx);\n vy = this._getAve(avy);\n\n p = this._map.latLngToContainerPoint([lat, lng]);\n\n value = Math.abs(Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2)));\n\n rotation = Math.atan2(vx, vy) - Math.PI / 2;\n\n cell = { center: p, value: value, rotation: rotation };\n this._drawArrow(cell, ctx, size);\n }\n }\n }\n },\n\n _getAve: function (arr) {\n const sum = arr.reduce((a, b) => a + b, 0);\n return sum / arr.length || 0;\n },\n\n _hex: function (c) {\n var s = \"0123456789abcdef\";\n var i = parseInt(c, 10);\n if (i === 0 || isNaN(c)) return \"00\";\n i = Math.round(Math.min(Math.max(0, i), 255));\n return s.charAt((i - (i % 16)) / 16) + s.charAt(i % 16);\n },\n\n _trim: function (s) {\n return s.charAt(0) === \"#\" ? s.substring(1, 7) : s;\n },\n\n _convertToRGB: function (hex) {\n var color = [];\n color[0] = parseInt(this._trim(hex).substring(0, 2), 16);\n color[1] = parseInt(this._trim(hex).substring(2, 4), 16);\n color[2] = parseInt(this._trim(hex).substring(4, 6), 16);\n return color;\n },\n\n _convertToHex: function (rgb) {\n return this._hex(rgb[0]) + this._hex(rgb[1]) + this._hex(rgb[2]);\n },\n\n _getColor: function (value, min, max, colors) {\n var loc = (value - min) / (max - min);\n if (loc < 0 || loc > 1) {\n return \"#fff\";\n } else {\n var index = 0;\n for (var i = 0; i < colors.length - 1; i++) {\n if (loc >= colors[i].point && loc <= colors[i + 1].point) {\n index = i;\n }\n }\n var color1 = this._convertToRGB(colors[index].color);\n var color2 = this._convertToRGB(colors[index + 1].color);\n\n var f =\n (loc - colors[index].point) /\n (colors[index + 1].point - colors[index].point);\n var rgb = [\n color1[0] + (color2[0] - color1[0]) * f,\n color1[1] + (color2[1] - color1[1]) * f,\n color1[2] + (color2[2] - color1[2]) * f,\n ];\n\n return `#${this._convertToHex(rgb)}`;\n }\n },\n\n _redraw: function () {\n if (!this._map) {\n return;\n }\n this._drawArrows();\n },\n\n _animateZoom: function (e) {\n var scale = this._map.getZoomScale(e.zoom),\n offset = this._map\n ._getCenterOffset(e.center)\n ._multiplyBy(-scale)\n .subtract(this._map._getMapPanePos());\n\n if (L.DomUtil.setTransform) {\n L.DomUtil.setTransform(this._canvas, offset, scale);\n } else {\n this._canvas.style[L.DomUtil.TRANSFORM] =\n L.DomUtil.getTranslateString(offset) + \" scale(\" + scale + \")\";\n }\n },\n\n _getClosestLocation: function (latArray, lngArray, targetLat, targetLng) {\n if (\n !Array.isArray(latArray) ||\n !Array.isArray(lngArray) ||\n latArray.length === 0 ||\n lngArray.length === 0\n ) {\n return null;\n }\n\n let minDistance = Infinity;\n let closestIndex = { row: -1, col: -1 }; // Store the indices of the closest point\n\n // Loop through the 2D arrays\n for (let i = 0; i < latArray.length; i++) {\n for (let j = 0; j < latArray[i].length; j++) {\n const lat = latArray[i][j];\n const lng = lngArray[i][j];\n\n // Calculate Euclidean distance\n const distance = Math.sqrt(\n Math.pow(targetLat - lat, 2) + Math.pow(targetLng - lng, 2)\n );\n\n // Update closest point and its indices if a shorter distance is found\n if (distance < minDistance) {\n minDistance = distance;\n closestIndex = { row: i, col: j }; // Update the row and column index\n }\n }\n }\n\n // Return the indices and the distance\n return { index: closestIndex, distance: minDistance };\n },\n\n _onMousemove: function (t) {\n var e = this._queryValue(t);\n this.fire(\"mousemove\", e);\n },\n\n _onClick: function (t) {\n var e = this._queryValue(t);\n this.fire(\"click\", e);\n },\n _queryValue: function (click) {\n let u = null;\n let v = null;\n var { index, distance } = this._getClosestLocation(this._inputdata[\"lat\"], this._inputdata[\"lng\"], click.latlng.lat, click.latlng.lng)\n if (distance < 0.002) {\n u = this._inputdata[\"variables\"][\"u\"][\"data\"][index.row][index.col]\n v = this._inputdata[\"variables\"][\"v\"][\"data\"][index.row][index.col];\n }\n click[\"value\"] = { u, v };\n return click;\n },\n});\n\nL.vectorField = function (inputdata, options) {\n return new L.VectorField(inputdata, options);\n};\n","export const generateColorHEX = (colorStart, colorEnd, colorCount) => {\n function hex(c) {\n var s = \"0123456789abcdef\";\n var i = parseInt(c, 10);\n if (i === 0 || isNaN(c)) return \"00\";\n i = Math.round(Math.min(Math.max(0, i), 255));\n return s.charAt((i - (i % 16)) / 16) + s.charAt(i % 16);\n }\n\n /* Convert an RGB triplet to a hex string */\n function convertToHex(rgb) {\n return hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);\n }\n\n /* Remove '#' in color hex string */\n function trim(s) {\n return s.charAt(0) === \"#\" ? s.substring(1, 7) : s;\n }\n\n /* Convert a hex string to an RGB triplet */\n function convertToRGB(hex) {\n var color = [];\n color[0] = parseInt(trim(hex).substring(0, 2), 16);\n color[1] = parseInt(trim(hex).substring(2, 4), 16);\n color[2] = parseInt(trim(hex).substring(4, 6), 16);\n return color;\n }\n\n // The beginning of your gradient\n var start = convertToRGB(colorStart);\n\n // The end of your gradient\n var end = convertToRGB(colorEnd);\n\n // The number of colors to compute\n var len = colorCount - 2;\n\n //Alpha blending amount\n var alpha = 0.0;\n\n var saida = [colorStart];\n\n for (var i = 0; i < len; i++) {\n var c = [];\n alpha += 1.0 / len;\n\n c[0] = end[0] * alpha + (1 - alpha) * start[0];\n c[1] = end[1] * alpha + (1 - alpha) * start[1];\n c[2] = end[2] * alpha + (1 - alpha) * start[2];\n\n saida.push(convertToHex(c));\n }\n saida.push(colorEnd);\n\n return saida;\n};\n\nexport const generateColorRGB = (colorStart, colorEnd, colorCount) => {\n /* Remove '#' in color hex string */\n function trim(s) {\n return s.charAt(0) === \"#\" ? s.substring(1, 7) : s;\n }\n\n /* Convert a hex string to an RGB triplet */\n function convertToRGB(hex) {\n var color = [];\n color[0] = parseInt(trim(hex).substring(0, 2), 16);\n color[1] = parseInt(trim(hex).substring(2, 4), 16);\n color[2] = parseInt(trim(hex).substring(4, 6), 16);\n return color;\n }\n\n // The beginning of your gradient\n var start = convertToRGB(colorStart);\n\n // The end of your gradient\n var end = convertToRGB(colorEnd);\n\n // The number of colors to compute\n var len = colorCount - 2;\n\n //Alpha blending amount\n var alpha = 0.0;\n\n var saida = [\"rgb(\" + start[0] + \",\" + start[1] + \",\" + start[2] + \")\"];\n\n for (var i = 0; i < len; i++) {\n var c = [];\n alpha += 1.0 / len;\n\n c[0] = end[0] * alpha + (1 - alpha) * start[0];\n c[1] = end[1] * alpha + (1 - alpha) * start[1];\n c[2] = end[2] * alpha + (1 - alpha) * start[2];\n\n var rgb = \"rgb(\" + c[0] + \",\" + c[1] + \",\" + c[2] + \")\";\n\n saida.push(rgb);\n }\n saida.push(\"rgb(\" + end[0] + \",\" + end[1] + \",\" + end[2] + \")\");\n\n return saida;\n};\n\nexport const getColor = (value, min, max, colors) => {\n function hex(c) {\n var s = \"0123456789abcdef\";\n var i = parseInt(c, 10);\n if (i === 0 || isNaN(c)) return \"00\";\n i = Math.round(Math.min(Math.max(0, i), 255));\n return s.charAt((i - (i % 16)) / 16) + s.charAt(i % 16);\n }\n function trim(s) {\n return s.charAt(0) === \"#\" ? s.substring(1, 7) : s;\n }\n function convertToRGB(hex) {\n var color = [];\n color[0] = parseInt(trim(hex).substring(0, 2), 16);\n color[1] = parseInt(trim(hex).substring(2, 4), 16);\n color[2] = parseInt(trim(hex).substring(4, 6), 16);\n return color;\n }\n function convertToHex(rgb) {\n return hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);\n }\n\n if (value === null || isNaN(value)) {\n return \"#ffffff\";\n }\n if (value > max) {\n return colors[colors.length - 1].color;\n }\n if (value < min) {\n return colors[0].color;\n }\n var loc = (value - min) / (max - min);\n if (loc < 0 || loc > 1) {\n return \"#fff\";\n } else {\n var index = 0;\n for (var i = 0; i < colors.length - 1; i++) {\n if (loc >= colors[i].point && loc <= colors[i + 1].point) {\n index = i;\n }\n }\n var color1 = convertToRGB(colors[index].color);\n var color2 = convertToRGB(colors[index + 1].color);\n\n var f =\n (loc - colors[index].point) /\n (colors[index + 1].point - colors[index].point);\n var rgb = [\n color1[0] + (color2[0] - color1[0]) * f,\n color1[1] + (color2[1] - color1[1]) * f,\n color1[2] + (color2[2] - color1[2]) * f,\n ];\n\n return `#${convertToHex(rgb)}`;\n }\n};\n\nexport const convertToRGB = (hex) => {\n function trim(s) {\n return s.charAt(0) === \"#\" ? s.substring(1, 7) : s;\n }\n var color = [];\n color[0] = parseInt(trim(hex).substring(0, 2), 16);\n color[1] = parseInt(trim(hex).substring(2, 4), 16);\n color[2] = parseInt(trim(hex).substring(4, 6), 16);\n color[3] = 255;\n return color;\n};\n\nexport const getRGBAColor = (value, min, max, colors) => {\n if (value === null || isNaN(value)) {\n return [255, 255, 255, 0];\n }\n if (value > max) {\n return [0, 0, 0, 0];\n }\n if (value < min) {\n return [0, 0, 0, 0];\n }\n var loc = (value - min) / (max - min);\n if (loc < 0 || loc > 1) {\n return [255, 255, 255, 0];\n } else {\n var index = 0;\n for (var i = 0; i < colors.length - 1; i++) {\n if (loc >= colors[i].point && loc <= colors[i + 1].point) {\n index = i;\n break;\n }\n }\n var color1 = colors[index].rgba;\n var color2 = colors[index + 1].rgba;\n\n var f =\n (loc - colors[index].point) /\n (colors[index + 1].point - colors[index].point);\n var rgb = [\n color1[0] + (color2[0] - color1[0]) * f,\n color1[1] + (color2[1] - color1[1]) * f,\n color1[2] + (color2[2] - color1[2]) * f,\n 255,\n ];\n\n return rgb;\n }\n};\n\nexport const getHexColor = (value, min, max, colors) => {\n function trim(s) {\n return s.charAt(0) === \"#\" ? s.substring(1, 7) : s;\n }\n function hex(c) {\n var s = \"0123456789abcdef\";\n var i = parseInt(c, 10);\n if (i === 0 || isNaN(c)) return \"00\";\n i = Math.round(Math.min(Math.max(0, i), 255));\n return s.charAt((i - (i % 16)) / 16) + s.charAt(i % 16);\n }\n function convertToRGB(hex) {\n var color = [];\n color[0] = parseInt(trim(hex).substring(0, 2), 16);\n color[1] = parseInt(trim(hex).substring(2, 4), 16);\n color[2] = parseInt(trim(hex).substring(4, 6), 16);\n color[3] = 255;\n return color;\n }\n\n function convertToHex(rgb) {\n return \"#\" + hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);\n }\n\n if (value === null || isNaN(value)) {\n return [255, 255, 255, 0];\n }\n if (value > max) {\n return convertToRGB(colors[colors.length - 1].color);\n }\n if (value < min) {\n return convertToRGB(colors[0].color);\n }\n var loc = (value - min) / (max - min);\n if (loc < 0 || loc > 1) {\n return [255, 255, 255, 0];\n } else {\n var index = 0;\n for (var i = 0; i < colors.length - 1; i++) {\n if (loc >= colors[i].point && loc <= colors[i + 1].point) {\n index = i;\n }\n }\n var color1 = convertToRGB(colors[index].color);\n var color2 = convertToRGB(colors[index + 1].color);\n\n var f =\n (loc - colors[index].point) /\n (colors[index + 1].point - colors[index].point);\n var rgb = [\n color1[0] + (color2[0] - color1[0]) * f,\n color1[1] + (color2[1] - color1[1]) * f,\n color1[2] + (color2[2] - color1[2]) * f,\n 255,\n ];\n\n return convertToHex(rgb);\n }\n};\n\nexport const getBinaryColor = (value, min, max, colors) => {\n function trim(s) {\n return s.charAt(0) === \"#\" ? s.substring(1, 7) : s;\n }\n function convertToRGB(hex) {\n var color = [];\n color[0] = parseInt(trim(hex).substring(0, 2), 16);\n color[1] = parseInt(trim(hex).substring(2, 4), 16);\n color[2] = parseInt(trim(hex).substring(4, 6), 16);\n color[3] = 255;\n return color;\n }\n if (value === null || isNaN(value)) {\n return [255, 255, 255, 0];\n }\n if (value > max) {\n return convertToRGB(colors[colors.length - 1].color);\n }\n if (value < min) {\n return convertToRGB(colors[0].color);\n }\n var loc = (value - min) / (max - min);\n if (loc < 0 || loc > 1) {\n return [255, 255, 255, 0];\n } else {\n var index = 0;\n for (var i = 0; i < colors.length - 1; i++) {\n if (loc >= colors[i].point && loc <= colors[i + 1].point) {\n index = i;\n }\n }\n var color1 = convertToRGB(colors[index].color);\n var color2 = convertToRGB(colors[index + 1].color);\n\n var f =\n (loc - colors[index].point) /\n (colors[index + 1].point - colors[index].point);\n var rgb = [\n (color1[0] + (color2[0] - color1[0]) * f) / 255,\n (color1[1] + (color2[1] - color1[1]) * f) / 255,\n (color1[2] + (color2[2] - color1[2]) * f) / 255,\n 1,\n ];\n\n return rgb;\n }\n};\n","import React, { Component } from \"react\";\nimport L from \"leaflet\";\nimport * as d3 from \"d3\";\nimport \"leaflet-draw\";\nimport \"leaflet-contour\";\nimport \"leaflet-streamlines\";\nimport \"./leaflet_vectorField\";\nimport \"./leaflet_customcontrol\";\nimport \"./leaflet_colorpicker\";\nimport \"leaflet.markercluster\";\nimport \"./css/markercluster.css\";\nimport \"./css/markerclusterdefault.css\";\nimport { basemaps } from \"../../config.json\";\nimport { getColor } from \"../../components/gradients/gradients\";\nimport \"./css/leaflet.css\";\nimport measurement from \"../../img/measurement.svg\";\nimport model from \"../../img/model.svg\";\nimport satellite from \"../../img/satellite.svg\";\n\nclass Basemap extends Component {\n isInt = (value) => {\n if (/^[-+]?(\\d+|Infinity)$/.test(value)) {\n return true;\n } else {\n return false;\n }\n };\n\n zoomIn = () => {\n this.map.setZoom(this.map.getZoom() + 1);\n };\n\n zoomOut = () => {\n this.map.setZoom(this.map.getZoom() - 1);\n };\n\n hoverOver = (e) => {\n this.props.hoverFunc(e.target, \"over\");\n };\n\n hoverOut = (e) => {\n this.props.hoverFunc(e.target, \"out\");\n };\n\n CHtoWGSlatlng = (yx) => {\n var y_aux = (yx[0] - 600000) / 1000000;\n var x_aux = (yx[1] - 200000) / 1000000;\n var lat =\n 16.9023892 +\n 3.238272 * x_aux -\n 0.270978 * Math.pow(y_aux, 2) -\n 0.002528 * Math.pow(x_aux, 2) -\n 0.0447 * Math.pow(y_aux, 2) * x_aux -\n 0.014 * Math.pow(x_aux, 3);\n var lng =\n 2.6779094 +\n 4.728982 * y_aux +\n 0.791484 * y_aux * x_aux +\n 0.1306 * y_aux * Math.pow(x_aux, 2) -\n 0.0436 * Math.pow(y_aux, 3);\n lat = (lat * 100) / 36;\n lng = (lng * 100) / 36;\n\n return [lat, lng];\n };\n\n UTMtoWGSlatlng = (yx, zoneNum = 32) => {\n const easting = yx[0];\n const northing = yx[1];\n var K0 = 0.9996;\n\n var E = 0.00669438;\n var E2 = Math.pow(E, 2);\n var E3 = Math.pow(E, 3);\n var E_P2 = E / (1 - E);\n\n var SQRT_E = Math.sqrt(1 - E);\n var _E = (1 - SQRT_E) / (1 + SQRT_E);\n var _E2 = Math.pow(_E, 2);\n var _E3 = Math.pow(_E, 3);\n var _E4 = Math.pow(_E, 4);\n var _E5 = Math.pow(_E, 5);\n\n var M1 = 1 - E / 4 - (3 * E2) / 64 - (5 * E3) / 256;\n // var M2 = (3 * E) / 8 + (3 * E2) / 32 + (45 * E3) / 1024;\n // var M3 = (15 * E2) / 256 + (45 * E3) / 1024;\n // var M4 = (35 * E3) / 3072;\n\n var P2 = (3 / 2) * _E - (27 / 32) * _E3 + (269 / 512) * _E5;\n var P3 = (21 / 16) * _E2 - (55 / 32) * _E4;\n var P4 = (151 / 96) * _E3 - (417 / 128) * _E5;\n var P5 = (1097 / 512) * _E4;\n\n var R = 6378137;\n var x = easting - 500000;\n var y = northing;\n\n var m = y / K0;\n var mu = m / (R * M1);\n\n var pRad =\n mu +\n P2 * Math.sin(2 * mu) +\n P3 * Math.sin(4 * mu) +\n P4 * Math.sin(6 * mu) +\n P5 * Math.sin(8 * mu);\n\n var pSin = Math.sin(pRad);\n var pSin2 = Math.pow(pSin, 2);\n\n var pCos = Math.cos(pRad);\n\n var pTan = Math.tan(pRad);\n var pTan2 = Math.pow(pTan, 2);\n var pTan4 = Math.pow(pTan, 4);\n\n var epSin = 1 - E * pSin2;\n var epSinSqrt = Math.sqrt(epSin);\n\n var n = R / epSinSqrt;\n var r = (1 - E) / epSin;\n\n var c = _E * pCos * pCos;\n var c2 = c * c;\n\n var d = x / (n * K0);\n var d2 = Math.pow(d, 2);\n var d3 = Math.pow(d, 3);\n var d4 = Math.pow(d, 4);\n var d5 = Math.pow(d, 5);\n var d6 = Math.pow(d, 6);\n\n var latitude =\n pRad -\n (pTan / r) *\n (d2 / 2 - (d4 / 24) * (5 + 3 * pTan2 + 10 * c - 4 * c2 - 9 * E_P2)) +\n (d6 / 720) *\n (61 + 90 * pTan2 + 298 * c + 45 * pTan4 - 252 * E_P2 - 3 * c2);\n var longitude =\n (d -\n (d3 / 6) * (1 + 2 * pTan2 + c) +\n (d5 / 120) *\n (5 - 2 * c + 28 * pTan2 - 3 * c2 + 8 * E_P2 + 24 * pTan4)) /\n pCos;\n\n return [\n (latitude / Math.PI) * 180,\n (longitude / Math.PI) * 180 + (zoneNum - 1) * 6 - 180 + 3,\n ];\n };\n\n movingAverage = (data, size) => {\n function pointsInRadius(quadtree, x, y, radius) {\n const result = [];\n var filter;\n const radius2 = radius * radius;\n const accept = filter\n ? (d) => filter(d) && result.push(d)\n : (d) => result.push(d);\n quadtree.visit(function (node, x1, y1, x2, y2) {\n if (node.length) {\n return (\n x1 >= x + radius ||\n y1 >= y + radius ||\n x2 < x - radius ||\n y2 < y - radius\n );\n }\n const dx = +quadtree._x.call(null, node.data) - x,\n dy = +quadtree._y.call(null, node.data) - y;\n if (dx * dx + dy * dy < radius2) {\n do {\n accept(node.data);\n } while ((node = node.next));\n }\n });\n return result;\n }\n\n function medianofpoints(points) {\n var arr = points.map((p) => p[2]);\n arr.sort(function (a, b) {\n return a - b;\n });\n var half = Math.floor(arr.length / 2);\n if (arr.length % 2) return arr[half];\n return (arr[half - 1] + arr[half]) / 2.0;\n }\n\n var { lon, lat, lonres, latres, v } = data;\n var radius = Math.max(lonres, latres) * size;\n var outdata = JSON.parse(JSON.stringify(v));\n\n let quadtreedata = [];\n for (var j = 0; j < v.length; j++) {\n quadtreedata.push([lat[j], lon[j], v[j]]);\n }\n\n let min_x = Math.min(...lat);\n let min_y = Math.min(...lon);\n let max_x = Math.max(...lat);\n let max_y = Math.max(...lon);\n\n let quadtree = d3\n .quadtree()\n .extent([\n [min_x, min_y],\n [max_x, max_y],\n ])\n .addAll(quadtreedata);\n\n for (var i = 0; i < outdata.length; i++) {\n outdata[i] = medianofpoints(\n pointsInRadius(quadtree, lat[i], lon[i], radius)\n );\n }\n\n return outdata;\n };\n\n remoteSensing = async (layer, file) => {\n var { mindatetime } = file;\n var { min, max, unit, data, movingAverage, validpixelexpression, colors } =\n layer;\n var url = \"https://www.datalakes-eawag.ch/datadetail/\" + layer.datasets_id;\n data = JSON.parse(JSON.stringify(data));\n if (\"vp\" in data && validpixelexpression) {\n for (let i = data.vp.length - 1; i >= 0; i--) {\n if (data.vp[i] === 1) {\n data.v.splice(i, 1);\n data.lon.splice(i, 1);\n data.lat.splice(i, 1);\n }\n }\n }\n var polygons = [];\n var coords;\n var x = data.lonres / 2;\n var y = data.latres / 2;\n var plotdata;\n if (this.isInt(movingAverage)) {\n plotdata = this.movingAverage(data, movingAverage);\n } else {\n plotdata = data.v;\n }\n for (let i = 0; i < data.lon.length; i++) {\n coords = [\n [data.lat[i] - y, data.lon[i] - x],\n [data.lat[i] + y, data.lon[i] - x],\n [data.lat[i] + y, data.lon[i] + x],\n [data.lat[i] - y, data.lon[i] + x],\n ];\n var value = Math.round(plotdata[i] * 1000) / 1000;\n var valuestring = String(value) + String(unit);\n var pixelcolor = getColor(plotdata[i], min, max, colors);\n polygons.push(\n L.polygon(coords, {\n color: pixelcolor,\n fillColor: pixelcolor,\n fillOpacity: 1,\n title: valuestring,\n })\n .bindPopup(\n `
${\n layer.title\n }
${\n layer.description\n }
${this.parseDatetime(\n mindatetime\n )}
${\n data.lat[i]\n }, ${\n data.lon[i]\n }
${value}
${unit}
${\n layer.name\n }
`,\n { className: \"datasetsPopup\" }\n )\n .bindTooltip(valuestring, {\n permanent: false,\n direction: \"top\",\n className: \"basic-tooltip\",\n opacity: 1,\n })\n );\n }\n this.raster.push(L.layerGroup(polygons).addTo(this.map));\n };\n\n swapCoord = (arr) => {\n var newArr = [];\n for (var i = 0; i < arr.length; i++) {\n newArr.push([arr[i][1], arr[i][0]]);\n }\n return newArr;\n };\n\n findFeature = (features, key) => {\n return features.find((f) => parseInt(f.properties.id) === parseInt(key));\n };\n\n simstrat = async (layer, file) => {\n var { min, max, data } = layer;\n var layerData, outdate;\n var url = \"https://www.datalakes-eawag.ch/datadetail/\" + layer.datasets_id;\n if (Object.keys(data).includes(\"time\")) {\n var { lakejson, datetime } = this.props;\n var di = this.indexClosest(datetime.getTime() / 1000, data[\"time\"]);\n outdate = new Date(data[\"time\"][di] * 1000);\n var value, name, latlng;\n layerData = [];\n var type = \"surface\";\n if (layer.parameters_id === 56) {\n type = \"bottom\";\n }\n for (var key in data) {\n var lakefeature = this.findFeature(lakejson.features, key);\n if (typeof lakefeature !== \"undefined\") {\n value = data[key][type][di];\n name = lakefeature.properties.Name;\n latlng = this.swapCoord(lakefeature.geometry.coordinates[0]);\n layerData.push({ value, name, latlng });\n }\n }\n } else {\n layerData = JSON.parse(JSON.stringify(data));\n outdate = file.maxdatetime;\n }\n var polygons = [];\n for (var i = 0; i < layerData.length; i++) {\n var pixelcolor = getColor(layerData[i].value, min, max, layer.colors);\n var valuestring = String(layerData[i].value) + \"°C\";\n polygons.push(\n L.polygon(layerData[i].latlng, {\n color: pixelcolor,\n fillColor: pixelcolor,\n fillOpacity: 0.8,\n title: layerData[i].value,\n })\n .bindPopup(\n `
${\n layer.title\n }
${\n layer.description\n }
${this.parseDatetime(\n outdate\n )}
${\n layerData[i].name\n }
${\n layerData[i].value\n }
°C
${\n layer.name\n }
`,\n { className: \"datasetsPopup\" }\n )\n .bindTooltip(valuestring, {\n permanent: false,\n direction: \"top\",\n className: \"basic-tooltip\",\n opacity: 1,\n })\n );\n }\n this.raster.push(L.layerGroup(polygons).addTo(this.map));\n };\n\n delft3dToJavascriptDatetime = (date) => {\n const out = new Date(2008, 2, 1, 0, 0, 0);\n out.setTime(out.getTime() + date * 1000);\n return out;\n };\n\n getCellCorners = (data, i, j) => {\n function cellCorner(center, opposite, left, right) {\n if (\n center[0] !== null &&\n opposite[0] !== null &&\n left[0] !== null &&\n right[0] !== null\n ) {\n let x = (opposite[0] + left[0] + right[0] + center[0]) / 4;\n let y = (opposite[1] + left[1] + right[1] + center[1]) / 4;\n return [x, y];\n } else {\n return false;\n }\n }\n\n function oppositePoint(center, corner) {\n let x = center[0] + center[0] - corner[0];\n let y = center[1] + center[1] - corner[1];\n return [x, y];\n }\n // TopLeft\n var tl = cellCorner(\n [data[\"lng\"][i][j], data[\"lat\"][i][j]],\n [data[\"lng\"][i - 1][j - 1], data[\"lat\"][i - 1][j - 1]],\n [data[\"lng\"][i][j - 1], data[\"lat\"][i][j - 1]],\n [data[\"lng\"][i - 1][j], data[\"lat\"][i - 1][j]]\n );\n // BottomLeft\n var bl = cellCorner(\n [data[\"lng\"][i][j], data[\"lat\"][i][j]],\n [data[\"lng\"][i + 1][j - 1], data[\"lat\"][i + 1][j - 1]],\n [data[\"lng\"][i + 1][j], data[\"lat\"][i + 1][j]],\n [data[\"lng\"][i][j - 1], data[\"lat\"][i][j - 1]]\n );\n // BottomRight\n var br = cellCorner(\n [data[\"lng\"][i][j], data[\"lat\"][i][j]],\n [data[\"lng\"][i + 1][j + 1], data[\"lat\"][i + 1][j + 1]],\n [data[\"lng\"][i][j + 1], data[\"lat\"][i][j + 1]],\n [data[\"lng\"][i + 1][j], data[\"lat\"][i + 1][j]]\n );\n // TopRight\n var tr = cellCorner(\n [data[\"lng\"][i][j], data[\"lat\"][i][j]],\n [data[\"lng\"][i - 1][j + 1], data[\"lat\"][i - 1][j + 1]],\n [data[\"lng\"][i - 1][j], data[\"lat\"][i - 1][j]],\n [data[\"lng\"][i][j + 1], data[\"lat\"][i][j + 1]]\n );\n\n let op = [data[\"lng\"][i][j], data[\"lat\"][i][j]];\n\n if (!tl && br) tl = oppositePoint(op, br);\n if (!bl && tr) bl = oppositePoint(op, tr);\n if (!br && tl) br = oppositePoint(op, tl);\n if (!tr && bl) tr = oppositePoint(op, bl);\n if (tl && bl && br && tr) {\n return [\n [tl[1], tl[0]],\n [bl[1], bl[0]],\n [br[1], br[0]],\n [tr[1], tr[0]],\n ];\n } else {\n return false;\n }\n };\n\n prepareContourData = (data) => {\n var x = [];\n var y = [];\n for (let i = 0; i < data[\"variables\"][\"temperature\"][\"data\"].length; i++) {\n var xx = [];\n var yy = [];\n for (\n let j = 0;\n j < data[\"variables\"][\"temperature\"][\"data\"][0].length;\n j++\n ) {\n if (data[\"variables\"][\"temperature\"][\"data\"][i][j]) {\n let latlng = [data[\"lng\"][i][j], data[\"lat\"][i][j]];\n xx.push(latlng[0]);\n yy.push(latlng[1]);\n } else {\n xx.push(null);\n yy.push(null);\n }\n }\n x.push(xx);\n y.push(yy);\n }\n return { x, y, z: data[\"variables\"][\"temperature\"][\"data\"] };\n };\n\n onEachContour = (info, datetime, depth, url) => {\n var parseDatetime = this.parseDatetime;\n return function onEachFeature(feature, layer) {\n layer.bindPopup(\n `
${\n info.title\n }
${\n info.description\n }
${parseDatetime(\n datetime\n )}
${String(\n feature.value.toFixed(2)\n )}
${String(\n info.unit\n )}
Water Temperature @ ${depth}m
`,\n { className: \"datasetsPopup\" }\n );\n //layer.bindTooltip(feature.value + info.unit);\n };\n };\n\n threeDmodel = async (layer, file, timeformat) => {\n var { parameters_id, data, id } = layer;\n var datetime = new Date(data[\"time\"]);\n var depth = Math.abs(data[\"depth\"][\"data\"]).toFixed(2);\n var parseDatetime = this.parseDatetime;\n var {\n vectorArrows,\n vectorMagnitude,\n vectorFlow,\n vectorFlowColor,\n vectorArrowColor,\n contour,\n thresholds,\n min,\n max,\n colors,\n unit,\n datasets_id,\n opacity,\n } = layer;\n var url = \"https://www.datalakes-eawag.ch/datadetail/\" + datasets_id;\n var polygons, i, j, coords, value, valuestring, pixelcolor;\n var map = this.map;\n if (parameters_id === 5) {\n // Temperature plot\n if (contour) {\n var contourData = this.prepareContourData(data);\n var contours = L.contour(contourData, {\n thresholds: thresholds,\n style: (feature) => {\n return {\n color: getColor(feature.geometry.value, min, max, colors),\n opacity: 0,\n fillOpacity: 1,\n };\n },\n onEachFeature: this.onEachContour(layer, datetime, depth, url),\n });\n this.raster.push(contours.addTo(this.map));\n } else {\n polygons = [];\n for (i = 1; i < data[\"lat\"].length - 1; i++) {\n for (j = 1; j < data[\"lat\"][0].length - 1; j++) {\n if (data[\"variables\"][\"temperature\"][\"data\"][i][j] !== null) {\n coords = this.getCellCorners(data, i, j);\n if (coords) {\n value =\n Math.round(\n data[\"variables\"][\"temperature\"][\"data\"][i][j] * 1000\n ) / 1000;\n valuestring = String(value) + String(unit);\n pixelcolor = getColor(\n data[\"variables\"][\"temperature\"][\"data\"][i][j],\n min,\n max,\n colors\n );\n let lat = Math.round(coords[0][0] * 1000) / 1000;\n let lng = Math.round(coords[0][1] * 1000) / 1000;\n polygons.push(\n L.polygon(coords, {\n color: pixelcolor,\n fillColor: pixelcolor,\n fillOpacity: 1,\n title: value,\n })\n .bindPopup(\n `
${\n layer.title\n }
${\n layer.description\n }
${parseDatetime(\n datetime\n )}
${lat}, ${lng}
${String(\n value\n )}
${String(\n unit\n )}
Water Temperature @ ${depth}m
`,\n { className: \"datasetsPopup\" }\n )\n .bindTooltip(valuestring, {\n permanent: false,\n direction: \"top\",\n className: \"basic-tooltip\",\n opacity: 1,\n })\n );\n }\n }\n }\n }\n this.raster.push(L.featureGroup(polygons).addTo(this.map));\n }\n if (\n !(\"center\" in this.props) &&\n !(\"zoom\" in this.props) &&\n !this.zoomedtolayer\n ) {\n this.map.fitBounds(this.raster[0].getBounds());\n this.zoomedtolayer = true;\n }\n } else if (parameters_id === 25) {\n // Velocity plot\n if (vectorMagnitude) {\n polygons = [];\n for (i = 1; i < data[\"lng\"].length - 1; i++) {\n for (j = 1; j < data[\"lng\"][0].length - 1; j++) {\n if (data[\"variables\"][\"u\"][\"data\"][i][j] !== null) {\n coords = this.getCellCorners(data, i, j);\n if (coords) {\n let u = data[\"variables\"][\"u\"][\"data\"][i][j];\n let v = data[\"variables\"][\"v\"][\"data\"][i][j];\n var magnitude = Math.abs(\n Math.sqrt(Math.pow(u, 2) + Math.pow(v, 2))\n );\n let deg = Math.round(\n (Math.atan2(u / magnitude, v / magnitude) * 180) / Math.PI\n );\n if (deg < 0) deg = 360 + deg;\n value = Math.round(magnitude * 1000) / 1000;\n let html = `${value}m/s ${deg}°`;\n valuestring = String(value) + String(unit);\n pixelcolor = getColor(magnitude, min, max, colors);\n let lat = Math.round(coords[0][0] * 1000) / 1000;\n let lng = Math.round(coords[0][1] * 1000) / 1000;\n polygons.push(\n L.polygon(coords, {\n color: pixelcolor,\n fillColor: pixelcolor,\n fillOpacity: 1,\n title: magnitude,\n })\n .bindPopup(\n `
${\n layer.title\n }
${\n layer.description\n }
${parseDatetime(\n datetime\n )}
${lat}, ${lng}
${String(\n html\n )}
Water Velocity @ ${depth}m
`,\n { className: \"datasetsPopup\" }\n )\n .bindTooltip(html, {\n permanent: false,\n direction: \"top\",\n className: \"basic-tooltip\",\n opacity: 1,\n })\n );\n }\n }\n }\n }\n this.raster.push(L.layerGroup(polygons).addTo(this.map));\n }\n if (vectorArrows) {\n var arrows = L.vectorField(data, {\n vectorArrowColor,\n colors,\n min,\n max,\n size: 15,\n }).addTo(this.map);\n var arrowtooltip = arrows.bindTooltip(\"my tooltip text\", {\n permanent: false,\n direction: \"top\",\n className: \"basic-tooltip\",\n opacity: 1,\n });\n arrows.on(\"mousemove\", function (e) {\n let { u, v } = e.value;\n if (u && v) {\n let mag = Math.round(Math.sqrt(u ** 2 + v ** 2) * 1000) / 1000;\n let deg = Math.round(\n (Math.atan2(u / mag, v / mag) * 180) / Math.PI\n );\n if (deg < 0) deg = 360 + deg;\n let html = `${mag}m/s ${deg}°`;\n arrowtooltip._tooltip._content = html;\n arrowtooltip.openTooltip(e.latlng);\n } else {\n arrowtooltip.closeTooltip();\n }\n });\n arrows.on(\"click\", function (e) {\n console.log(\"Firing\", e);\n if (e.value !== null && e.value.u !== null) {\n let { u, v } = e.value;\n let { lat, lng } = e.latlng;\n lat = Math.round(lat * 1000) / 1000;\n lng = Math.round(lng * 1000) / 1000;\n let mag = Math.round(Math.sqrt(u ** 2 + v ** 2) * 1000) / 1000;\n let deg = Math.round(\n (Math.atan2(u / mag, v / mag) * 180) / Math.PI\n );\n if (deg < 0) deg = 360 + deg;\n value = Math.round(mag * 1000) / 1000;\n let inner = `${value}m/s ${deg}°`;\n let html = `
${\n layer.title\n }
${\n layer.description\n }
${parseDatetime(\n datetime\n )}
${lat}, ${lng}
${String(\n inner\n )}
Water Veloctiy @ ${depth}m
`;\n console.log(e.latlng);\n L.popup({ className: \"datasetsPopup\" })\n .setLatLng(e.latlng)\n .setContent(html)\n .openOn(map);\n }\n });\n this.raster.push(arrows);\n }\n if (vectorFlow) {\n var dict = {\n 2: 0.0005,\n 14: 0.004,\n 5: 0.001,\n 6: 0.001,\n 8: 0.001,\n 10: 0.001,\n 15: 0.001,\n };\n var radius =\n String(datasets_id) in dict ? dict[String(datasets_id)] : 0.002;\n var vectordata = this.parseVectorData(data, radius);\n var vectors;\n if (Object.keys(this.vectorfieldanim).includes(id)) {\n this.vectorfieldanim[id].updateData(vectordata.data);\n this.vectorfieldtime = this.props.datetime;\n vectors = this.vectorfieldanim[id];\n } else {\n function getLineColor(val) {\n return getColor(val, min, max, colors);\n }\n var color = \"white\";\n if (vectorFlowColor === \"true\") {\n color = getLineColor;\n } else if ([\"white\", \"grey\", \"black\"].includes(vectorFlowColor)) {\n color = vectorFlowColor;\n }\n vectors = L.streamlines(vectordata.data, {\n paths: 5000,\n color,\n opacity,\n xMin: vectordata.xMin,\n xMax: vectordata.xMax,\n yMin: vectordata.yMin,\n yMax: vectordata.yMax,\n }).addTo(this.map);\n this.vectorfieldtime = this.props.datetime;\n this.vectorfieldanim[id] = vectors;\n }\n\n try {\n this.flowtooltip.closeTooltip();\n } catch (e) {}\n\n this.flowtooltip = vectors.bindTooltip(\"\", {\n permanent: false,\n direction: \"top\",\n className: \"basic-tooltip\",\n opacity: 1,\n });\n var flowtooltip = this.flowtooltip;\n vectors.on(\"mousemove\", function (e) {\n let { u, v } = e.value;\n if (u && v) {\n let mag = Math.round(Math.sqrt(u ** 2 + v ** 2) * 1000) / 1000;\n let deg = Math.round(\n (Math.atan2(u / mag, v / mag) * 180) / Math.PI\n );\n if (deg < 0) deg = 360 + deg;\n let html = `${mag}m/s ${deg}°`;\n flowtooltip._tooltip._content = html;\n flowtooltip.openTooltip(e.latlng);\n } else {\n flowtooltip.closeTooltip();\n }\n });\n vectors.on(\"click\", function (e) {\n if (e.value !== null && e.value.u !== null) {\n let { u, v } = e.value;\n let { lat, lng } = e.latlng;\n lat = Math.round(lat * 1000) / 1000;\n lng = Math.round(lng * 1000) / 1000;\n let mag = Math.round(Math.sqrt(u ** 2 + v ** 2) * 1000) / 1000;\n let deg = Math.round(\n (Math.atan2(u / mag, v / mag) * 180) / Math.PI\n );\n if (deg < 0) deg = 360 + deg;\n value = Math.round(mag * 1000) / 1000;\n let inner = `${value}m/s ${deg}°`;\n let html = `
${\n layer.title\n }
${\n layer.description\n }
${parseDatetime(\n datetime\n )}
${lat}, ${lng}
${String(\n inner\n )}
Water Veloctiy @ ${depth}m
`;\n L.popup({ className: \"datasetsPopup\" })\n .setLatLng(e.latlng)\n .setContent(html)\n .openOn(map);\n }\n });\n }\n }\n };\n\n capitalize = (s) => {\n if (typeof s !== \"string\") return \"\";\n return s.charAt(0).toUpperCase() + s.slice(1);\n };\n\n gitPlot = async (layer, file) => {\n var {\n datasetparameters,\n parameters_id,\n datasets_id,\n markerLabel,\n min,\n max,\n colors,\n markerSymbol,\n markerFixedSize,\n markerSize,\n latitude,\n longitude,\n unit,\n maxdepth,\n data,\n yselectindex,\n } = layer;\n var datasetparameter = datasetparameters.find(\n (dp) => dp.parameters_id === parameters_id\n );\n var { datetime, depth } = this.props;\n var type = datasetparameters.map((dp) => dp.axis + \"&\" + dp.parameters_id);\n var index, indexx, indexy, size, marker;\n var minSize = 5;\n var maxSize = 30;\n var markerGroup = L.layerGroup().addTo(this.map);\n var dt = datetime;\n var dd = Math.round(depth * 100) / 100;\n var value = \"NA\";\n\n if (file.latitude !== \"-9999\" && file.longitude !== \"-9999\") {\n latitude = file.latitude;\n longitude = file.longitude;\n }\n\n if (type.includes(\"M&1\") && type.includes(\"y&2\")) {\n // Profiler vs depth\n let dp2 = datasetparameters.find((dp) => dp.parameters_id === 1);\n let dp3 = datasetparameters.find((dp) => dp.parameters_id === 2);\n index = this.indexClosest(depth, data.y);\n value = this.numberformat(parseFloat(data[datasetparameter.axis][index]));\n dt = new Date(data[dp2.axis][index] * 1000);\n dd = Math.round(data[dp3.axis][index] * 100) / 100 + \"m\";\n } else if (type.includes(\"M&1\") && type.includes(\"y&18\")) {\n // Profiler vs pressure\n let dp2 = datasetparameters.find((dp) => dp.parameters_id === 1);\n let dp3 = datasetparameters.find((dp) => dp.parameters_id === 18);\n index = this.indexClosest(depth, data.y);\n value = this.numberformat(parseFloat(data[datasetparameter.axis][index]));\n dt = new Date(data[dp2.axis][index] * 1000);\n dd = Math.round(data[dp3.axis][index] * 100) / 100 + \"m\";\n } else if (\n type.join(\",\").includes(\"z&\") &&\n type.includes(\"x&1\") &&\n type.includes(\"y&2\")\n ) {\n // 2D Depth Time Dataset\n indexx = this.indexClosest(datetime.getTime() / 1000, data[\"x\"]);\n indexy = this.indexClosest(depth, data[\"y\"]);\n if (Array.isArray(data[datasetparameter.axis][0])) {\n value = this.numberformat(data[datasetparameter.axis][indexy][indexx]);\n dd = Math.round(data[\"y\"][indexy] * 100) / 100 + \"m\";\n } else {\n value = this.numberformat(data[datasetparameter.axis][indexx]);\n dd = \"\";\n }\n dt = new Date(data[\"x\"][indexx] * 1000);\n } else if (\n type.includes(\"x&1\") &&\n !type.includes(\"y&2\") &&\n type.join(\",\").includes(\"z&\")\n ) {\n // 2D Non-Depth Time Dataset\n var param = datasetparameters.find((dp) => dp.axis === \"y\");\n indexx = this.indexClosest(datetime.getTime() / 1000, data[\"x\"]);\n if (yselectindex) {\n value = this.numberformat(\n data[datasetparameter.axis][yselectindex][indexx]\n );\n dt = new Date(data[\"x\"][indexx] * 1000);\n dd = `${this.capitalize(\n param.parseparameter\n )}${\n Math.round(data[\"y\"][yselectindex] * 100) / 100\n } ${param.unit}`;\n } else {\n value = this.numberformat(data[datasetparameter.axis][0][indexx]);\n dt = new Date(data[\"x\"][indexx] * 1000);\n dd = `${Math.round(data[\"y\"][0] * 100) / 100} ${param.unit}`;\n }\n } else if (type.includes(\"x&1\") && type.join(\",\").includes(\"y&\")) {\n // 1D Parameter Time Dataset\n index = this.indexClosest(datetime.getTime() / 1000, data[\"x\"]);\n value = this.numberformat(data[datasetparameter.axis][index]);\n dt = new Date(data[\"x\"][index] * 1000);\n dd = Math.round(maxdepth * 100) / 100 + \"m\";\n } else {\n console.error(\"No plotting function defined\");\n }\n var color = getColor(value, min, max, colors);\n var shape = markerSymbol;\n if (markerFixedSize) {\n size = markerSize;\n } else {\n size = ((value - min) / (max - min)) * (maxSize - minSize) + minSize;\n }\n let url = \"https://www.datalakes-eawag.ch/datadetail/\" + datasets_id;\n marker = new L.marker([latitude, longitude], {\n icon: L.divIcon({\n className: \"map-marker\",\n popupAnchor: [-(size / 2 + 19), 0],\n tooltipAnchor: [-size / 2, -size],\n html:\n `
` +\n `
` +\n `
`,\n }),\n })\n .bindTooltip(\n `
${this.parseDatetime(\n dt\n )}
${value}
${unit}
${\n datasetparameter.name\n } ${dd !== \"\" ? \"@\" : \"\"} ${dd}
`,\n {\n permanent: markerLabel,\n direction: \"top\",\n className: \"gitTooltip\",\n }\n )\n .addTo(markerGroup);\n marker.bindPopup(\n `
${\n layer.title\n }
${\n layer.description\n }
${this.parseDatetime(\n dt\n )}
${latitude}, ${longitude}
${String(\n value\n )}
${String(\n unit\n )}
${datasetparameter.name} ${\n dd !== \"\" ? \"@\" : \"\"\n } ${dd}
`,\n { className: \"datasetsPopup\" }\n );\n\n this.marker.push(markerGroup);\n };\n\n plotDatasets = () => {\n var { datasets, datasetparameters } = this.props;\n var addSelectedLayer = this.addSelectedLayer;\n var measurementIcon = L.icon({\n iconUrl: measurement,\n iconSize: [38, 38],\n iconAnchor: [19, 19],\n popupAnchor: [0, -24],\n className: \"leaflet-custom-icon\",\n });\n var modelIcon = L.icon({\n iconUrl: model,\n iconSize: [38, 38],\n iconAnchor: [19, 19],\n popupAnchor: [0, -24],\n className: \"leaflet-custom-icon\",\n });\n var satelliteIcon = L.icon({\n iconUrl: satellite,\n iconSize: [38, 38],\n iconAnchor: [19, 19],\n popupAnchor: [0, -24],\n className: \"leaflet-custom-icon\",\n });\n var markerGroup = L.markerClusterGroup().addTo(this.map);\n var marker;\n var id;\n for (var dataset of datasets) {\n if (\n [\"gitPlot\", \"meteolakes\", \"remoteSensing\"].includes(\n dataset.mapplotfunction\n )\n ) {\n var icon = measurementIcon;\n if (dataset.origin === \"model\") {\n icon = modelIcon;\n } else if (dataset.origin === \"satellite\") {\n icon = satelliteIcon;\n }\n marker = new L.marker([dataset.latitude, dataset.longitude], {\n icon: icon,\n })\n .bindTooltip(dataset.title, {\n direction: \"bottom\",\n offset: [0, 25],\n opacity: 1,\n className: \"basic-tooltip\",\n })\n .addTo(markerGroup);\n let buttons = \"\";\n let d_id = dataset.id;\n let ids = [];\n for (var dp of datasetparameters.filter(\n (dp) =>\n dp.datasets_id === d_id &&\n ![1, 2, 3, 4, 27, 28, 29, 30].includes(dp.parameters_id)\n )) {\n id = `${dataset.id}_${dp.parameters_id}`;\n ids.push({\n id,\n datasets_id: dataset.id,\n parameters_id: dp.parameters_id,\n });\n buttons = buttons + ``;\n }\n let url = \"https://www.datalakes-eawag.ch/datadetail/\" + dataset.id;\n marker\n .bindPopup(\n `
${\n dataset.title\n }
${\n dataset.description\n }
${this.parseMonth(\n dataset.mindatetime\n )} to ${this.parseMonth(\n dataset.maxdatetime\n )}
Add parameter to map
${buttons}
`,\n { className: \"datasetsPopup\" }\n )\n .on(\"popupopen\", function (popup) {\n for (var select_id of ids) {\n document\n .getElementById(select_id.id)\n .addEventListener(\"click\", addSelectedLayer);\n }\n });\n }\n }\n this.datasets.push(markerGroup);\n };\n\n addSelectedLayer = (event) => {\n var ids = event.target.id.split(\"_\");\n document.getElementById(\"map\").click();\n this.props.addSelected([\n { datasets_id: parseInt(ids[0]), parameters_id: parseInt(ids[1]) },\n ]);\n };\n\n removeDatasets = () => {\n this.datasets.forEach((layer) => {\n this.map.removeLayer(layer);\n });\n this.datasets = [];\n };\n\n parseDate = (input) => {\n var date = new Date(input);\n let day = (\"0\" + date.getDate()).slice(-2);\n let month = (\"0\" + (date.getMonth() + 1)).slice(-2);\n let year = date.getFullYear();\n return day + \"/\" + month + \"/\" + year;\n };\n\n parseDatetime = (input) => {\n var months = [\n \"Jan \",\n \"Feb \",\n \"Mar \",\n \"Apr \",\n \"May \",\n \"Jun \",\n \"Jul \",\n \"Aug \",\n \"Sept \",\n \"Oct \",\n \"Nov \",\n \"Dec \",\n ];\n var date = new Date(input);\n return `${(\"0\" + date.getHours()).slice(-2)}:${(\n \"0\" + date.getSeconds()\n ).slice(-2)} ${date.getDate()} ${\n months[date.getMonth()]\n } ${date.getFullYear()}`;\n };\n\n parseMonth = (input) => {\n var months = [\n \"Jan \",\n \"Feb \",\n \"Mar \",\n \"Apr \",\n \"May \",\n \"Jun \",\n \"Jul \",\n \"Aug \",\n \"Sept \",\n \"Oct \",\n \"Nov \",\n \"Dec \",\n ];\n var date = new Date(input);\n return months[date.getMonth()] + date.getFullYear();\n };\n\n parseVectorData = (data, radius) => {\n function createAndFillTwoDArray({ rows, columns, defaultValue }) {\n return Array.from({ length: rows }, () =>\n Array.from({ length: columns }, () => defaultValue)\n );\n }\n var nCols = 200;\n var nRows = 200;\n var quadtreedata = [];\n var x_array = [];\n var y_array = [];\n for (let i = 0; i < data[\"variables\"][\"u\"][\"data\"].length; i++) {\n for (let j = 0; j < data[\"variables\"][\"u\"][\"data\"][0].length; j++) {\n if (data[\"variables\"][\"u\"][\"data\"][i][j] !== null) {\n quadtreedata.push([\n data[\"lng\"][i][j],\n data[\"lat\"][i][j],\n data[\"variables\"][\"u\"][\"data\"][i][j],\n data[\"variables\"][\"v\"][\"data\"][i][j],\n ]);\n x_array.push(data[\"lng\"][i][j]);\n y_array.push(data[\"lat\"][i][j]);\n }\n }\n }\n\n let xMin = Math.min(...x_array);\n let yMin = Math.min(...y_array);\n let xMax = Math.max(...x_array);\n let yMax = Math.max(...y_array);\n\n let xSize = (xMax - xMin) / nCols;\n let ySize = (yMax - yMin) / nRows;\n\n let quadtree = d3\n .quadtree()\n .extent([\n [xMin, yMin],\n [xMax, yMax],\n ])\n .addAll(quadtreedata);\n\n var u = createAndFillTwoDArray({\n rows: nRows + 1,\n columns: nCols + 1,\n defaultValue: null,\n });\n var v = createAndFillTwoDArray({\n rows: nRows + 1,\n columns: nCols + 1,\n defaultValue: null,\n });\n var x, y;\n for (var i = 0; i < nRows + 1; i++) {\n y = yMax - i * ySize;\n for (var j = 0; j < nCols + 1; j++) {\n x = xMin + j * xSize;\n if (quadtree.find(x, y, radius) !== undefined) {\n u[i][j] = parseFloat(JSON.stringify(quadtree.find(x, y, radius)[2]));\n v[i][j] = parseFloat(JSON.stringify(quadtree.find(x, y, radius)[3]));\n }\n }\n }\n return {\n nCols,\n nRows,\n xSize,\n ySize,\n xMin,\n xMax,\n yMin,\n yMax,\n data: { u, v },\n };\n };\n\n numberformat = (num) => {\n num = parseFloat(num);\n if (num > 9999 || (num < 0.01 && num > -0.01) || num < -9999) {\n num = num.toExponential(3);\n } else {\n num = Math.round(num * 10000) / 10000;\n }\n return num;\n };\n\n indexClosest = (num, arr) => {\n var index = 0;\n var diff = Infinity;\n for (var val = 0; val < arr.length; val++) {\n if (arr[val] !== null) {\n var newdiff = Math.abs(num - arr[val]);\n if (newdiff < diff) {\n diff = newdiff;\n index = val;\n }\n }\n }\n return index;\n };\n\n addPoint = (e) => {\n this.map.removeLayer(this.point);\n var lat = Math.round(e.latlng.lat * 100) / 100;\n var lng = Math.round(e.latlng.lng * 100) / 100;\n this.point = new L.marker(e.latlng, {\n icon: L.divIcon({\n className: \"map-marker\",\n html:\n `
` +\n `
` +\n `
`,\n }),\n })\n .bindTooltip(`(${lat},${lng})`, {\n direction: \"top\",\n className: \"basic-tooltip\",\n opacity: 1,\n })\n .addTo(this.map);\n this.props.updatePoint(e.latlng);\n };\n\n addLine = (e) => {\n if (Object.keys(this.line._layers).length > 1) {\n this.line.clearLayers();\n this.props.updateLine([]);\n }\n var lat = Math.round(e.latlng.lat * 100) / 100;\n var lng = Math.round(e.latlng.lng * 100) / 100;\n new L.marker(e.latlng, {\n icon: L.divIcon({\n className: \"map-marker\",\n html:\n `
` +\n `
` +\n `
`,\n }),\n })\n .bindTooltip(`(${lat},${lng})`, {\n direction: \"top\",\n className: \"basic-tooltip\",\n opacity: 1,\n })\n .addTo(this.line);\n if (Object.keys(this.line._layers).length === 2) {\n var pointList = [];\n for (var key in this.line._layers) {\n pointList.push(this.line._layers[key][\"_latlng\"]);\n }\n new L.Polyline(pointList, {\n color: \"red\",\n weight: 2,\n smoothFactor: 1,\n dashArray: \"20, 10\",\n dashOffset: \"0\",\n }).addTo(this.line);\n this.props.updateLine(pointList);\n }\n };\n\n arraysEqual = (a, b) => {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n for (var i = 0; i < a.length; ++i) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n };\n\n findDataset = (fileid, files) => {\n return files.find((x) => x.id === fileid);\n };\n\n updatePlot = (prevProps) => {\n var { selectedlayers, datetime } = this.props;\n\n // Remove old layers\n this.marker.forEach((layer) => {\n this.map.removeLayer(layer);\n });\n this.raster.forEach((layer) => {\n this.map.removeLayer(layer);\n });\n this.raster.length = 0;\n\n if (this.vectorfieldtime === datetime) {\n Object.values(this.vectorfieldanim).forEach((layer) => {\n this.map.removeLayer(layer);\n });\n this.vectorfieldanim = {};\n }\n\n // Add new layers\n for (var i = selectedlayers.length - 1; i > -1; i--) {\n var layer = selectedlayers[i];\n if (layer.visible) {\n var { fileid, files, mapplotfunction } = layer;\n var file = this.findDataset(fileid, files);\n mapplotfunction === \"gitPlot\" && this.gitPlot(layer, file);\n mapplotfunction === \"remoteSensing\" && this.remoteSensing(layer, file);\n mapplotfunction === \"simstrat\" && this.simstrat(layer, file);\n mapplotfunction === \"meteolakes\" &&\n this.threeDmodel(layer, file, \"delft3d\");\n mapplotfunction === \"datalakes\" &&\n this.threeDmodel(layer, file, \"unix\");\n }\n }\n };\n\n onEachFeature = (feature, layer) => {\n if (this.props.geojson_function) {\n layer.on(\"click\", () => {\n this.props.geojson_function(feature);\n });\n }\n if (feature.properties.Name) {\n layer.bindTooltip(feature.properties.Name);\n }\n };\n\n addGeoJSON = () => {\n var style = {\n color: \"red\",\n weight: 2,\n opacity: 1,\n fillOpacity: 0,\n };\n if (this.props.geojson_style) {\n style = this.props.geojson_style;\n }\n this.geojson = L.geoJson(this.props.geojson, {\n style: style,\n onEachFeature: this.onEachFeature,\n }).addTo(this.map);\n };\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.loading && !this.props.loading) {\n var updatePlot = this.updatePlot;\n window.setTimeout(() => {\n updatePlot(prevProps);\n if (prevProps.zoom !== this.props.zoom) {\n window.setTimeout(() => {\n this.map.flyTo(this.props.center, this.props.zoom, {\n animate: true,\n duration: 1,\n });\n }, 500);\n }\n }, 0);\n }\n\n if (\n !this.props.loading &&\n this.props.plotDatasets &&\n this.datasets.length === 0\n ) {\n this.plotDatasets();\n } else if (!this.props.plotDatasets) {\n this.removeDatasets();\n }\n\n if (prevProps.basemap !== this.props.basemap) {\n this.map.removeLayer(this.layer);\n this.layer = this.baseMaps[this.props.basemap];\n this.map.addLayer(this.layer);\n }\n if (prevProps.point !== this.props.point) {\n var { addPoint } = this;\n if (this.props.point) {\n this.map.on(\"click\", addPoint);\n document.getElementsByClassName(\"leaflet-popup-pane\")[0].style.display =\n \"none\";\n document.getElementsByClassName(\"leaflet-popup-pane\")[0].innerHTML = \"\";\n L.DomUtil.addClass(this.map._container, \"crosshair-cursor-enabled\");\n } else {\n this.map.off(\"click\", addPoint);\n this.map.removeLayer(this.point);\n this.props.updatePoint({});\n if (!this.props.point && !this.props.line) {\n document.getElementsByClassName(\n \"leaflet-popup-pane\"\n )[0].style.display = \"block\";\n L.DomUtil.removeClass(\n this.map._container,\n \"crosshair-cursor-enabled\"\n );\n }\n }\n }\n if (prevProps.line !== this.props.line) {\n var { addLine } = this;\n if (this.props.line) {\n this.map.on(\"click\", addLine);\n document.getElementsByClassName(\"leaflet-popup-pane\")[0].style.display =\n \"none\";\n document.getElementsByClassName(\"leaflet-popup-pane\")[0].innerHTML = \"\";\n L.DomUtil.addClass(this.map._container, \"crosshair-cursor-enabled\");\n } else {\n this.map.off(\"click\", addLine);\n this.line.clearLayers();\n this.props.updateLine([]);\n if (!this.props.point && !this.props.line) {\n document.getElementsByClassName(\n \"leaflet-popup-pane\"\n )[0].style.display = \"block\";\n L.DomUtil.removeClass(\n this.map._container,\n \"crosshair-cursor-enabled\"\n );\n }\n }\n }\n if (prevProps.geojson !== this.props.geojson) {\n if (this.geojson) this.map.removeLayer(this.geojson);\n this.addGeoJSON();\n }\n if (\n this.props.geojson_zoom &&\n prevProps.geojson_zoom !== this.props.geojson_zoom\n ) {\n var bounds = Object.values(this.geojson[\"_layers\"]).find(\n (g) => g.feature.properties.id === this.props.geojson_zoom\n );\n if (bounds) {\n this.map.flyToBounds(bounds[\"_bounds\"]);\n }\n }\n\n this.map.invalidateSize();\n }\n\n componentDidMount() {\n var center = [46.85, 7.55];\n if (\"center\" in this.props) {\n center = this.props.center;\n }\n var zoom = 8;\n if (\"zoom\" in this.props) {\n zoom = this.props.zoom;\n }\n\n this.baseMaps = {};\n for (var layer of Object.keys(basemaps)) {\n this.baseMaps[layer] = L.tileLayer(basemaps[layer][\"url\"], {\n attribution: basemaps[layer][\"attribution\"],\n });\n }\n\n var topolink =\n \"https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}.pngraw?access_token=pk.eyJ1IjoiamFtZXNydW5uYWxscyIsImEiOiJjazk0ZG9zd2kwM3M5M2hvYmk3YW0wdW9yIn0.uIJUZoDgaC2LfdGtgMz0cQ\";\n\n this.layer = this.baseMaps[\"datalakesmap\"];\n if (\"basemap\" in this.props) {\n this.layer = this.baseMaps[this.props.basemap];\n }\n\n var zoomControl = true;\n var { setZoomIn, setZoomOut } = this.props;\n if (setZoomIn && setZoomOut) {\n setZoomIn(this.zoomIn);\n setZoomOut(this.zoomOut);\n zoomControl = false;\n }\n\n this.map = L.map(\"map\", {\n preferCanvas: true,\n zoomControl,\n center: center,\n zoom: zoom,\n minZoom: 7,\n maxZoom: 15,\n });\n\n var colorpicker = L.tileLayer\n .colorPicker(topolink, {\n opacity: 0,\n })\n .addTo(this.map);\n\n this.layer.addTo(this.map);\n\n // Draw\n this.point = {};\n this.line = L.layerGroup().addTo(this.map);\n\n var map = this.map;\n var passLocation = this.props.passLocation;\n this.map.on(\"mousemove\", function (e) {\n var lat = Math.round(1000 * e.latlng.lat) / 1000;\n var lng = Math.round(1000 * e.latlng.lng) / 1000;\n var a = colorpicker.getColor(e.latlng);\n var alt = NaN;\n if (a !== null) {\n alt =\n Math.round(\n 10 * (-10000 + (a[0] * 256 * 256 + a[1] * 256 + a[2]) * 0.1)\n ) / 10;\n }\n map.attributionControl.setPrefix(\n \"(\" + lat + \",\" + lng + \") \" + alt + \"m\"\n );\n if (passLocation) {\n passLocation({ lat, lng, alt });\n }\n });\n\n // GeoJSON\n if (\"geojson\" in this.props && this.props.geojson) {\n this.addGeoJSON();\n }\n\n if (\"updateLocation\" in this.props) {\n var { updateLocation } = this.props;\n this.map.on(\"zoomend\", function (e) {\n let zoom = e.target._zoom;\n let latlng = e.target._lastCenter;\n let lat = Math.round(latlng.lat * 1000) / 1000;\n let lng = Math.round(latlng.lng * 1000) / 1000;\n updateLocation(zoom, [lat, lng]);\n });\n this.map.on(\"dragend\", function (e) {\n let zoom = e.target._zoom;\n let latlng = map.getCenter();\n let lat = Math.round(latlng.lat * 1000) / 1000;\n let lng = Math.round(latlng.lng * 1000) / 1000;\n updateLocation(zoom, [lat, lng]);\n });\n }\n\n this.marker = [];\n this.raster = [];\n this.datasets = [];\n this.vectorfieldanim = {};\n this.vectorfieldtime = this.props.datetime;\n this.zoomedtolayer = false;\n }\n\n render() {\n return (\n \n
\n
\n );\n }\n}\n\nexport default Basemap;\n","module.exports = __webpack_public_path__ + \"static/media/qm.9858d6aa.svg\";","export const closest = (data, hoverX, hoverY, xAxis, yAxis) => {\n var idx = 0;\n var idy = 0;\n var distance = Infinity;\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].x.length; j++) {\n let d =\n ((hoverX - xAxis[data[i].xaxis].ax(data[i].x[j])) ** 2 +\n (hoverY - yAxis[data[i].yaxis].ax(data[i].y[j])) ** 2) **\n 0.5;\n if (d < distance) {\n idx = i;\n idy = j;\n distance = d;\n }\n }\n }\n return { idx, idy, distance };\n};\n\nexport const isNumeric = (n) => {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\nexport const indexOfClosest = (num, arr) => {\n if (!isNumeric(num)) {\n return false;\n }\n arr = arr.filter((a) => isNumeric(a));\n var index = 0;\n var diff = Math.abs(num - arr[0]);\n for (var val = 0; val < arr.length; val++) {\n var newdiff = Math.abs(num - arr[val]);\n if (newdiff < diff) {\n diff = newdiff;\n index = val;\n }\n }\n return index;\n};\n\nexport const getFileIndex = (scales, p) => {\n for (var i = 0; i < scales.length; i++) {\n if (p >= Math.min(...scales[i]) && p <= Math.max(...scales[i])) {\n return i;\n }\n }\n return NaN;\n};\n\nexport const formatDate = (a, lang) => {\n var months = lang.shortMonths;\n var year = a.getFullYear();\n var month = months[a.getMonth()];\n var date = a.getDate();\n var hour = a.getHours();\n var min = a.getMinutes();\n return `${hour < 10 ? \"0\" + hour : hour}:${\n min < 10 ? \"0\" + min : min\n } ${date} ${month} ${String(year).slice(-2)}`;\n};\n\nexport const formatNumber = (num) => {\n num = parseFloat(num);\n if (num > 9999 || (num < 0.01 && num > -0.01) || num < -9999) {\n num = num.toExponential(3);\n } else {\n num = Math.round(num * 1000) / 1000;\n }\n return num;\n};\n\nexport const languageOptions = (name) => {\n var lang = {\n de: {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\n \"Sonntag\",\n \"Montag\",\n \"Dienstag\",\n \"Mittwoch\",\n \"Donnerstag\",\n \"Freitag\",\n \"Samstag\",\n ],\n shortDays: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n months: [\n \"Januar\",\n \"Februar\",\n \"März\",\n \"April\",\n \"Mai\",\n \"Juni\",\n \"Juli\",\n \"August\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Dezember\",\n ],\n shortMonths: [\n \"Jan\",\n \"Feb\",\n \"Mär\",\n \"Apr\",\n \"Mai\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Okt\",\n \"Nov\",\n \"Dez\",\n ],\n },\n en: {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n shortDays: [\"Sun\", \"Mon\", \"Tues\", \"Weds\", \"Thurs\", \"Fri\", \"Sat\"],\n months: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n shortMonths: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n },\n fr: {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\n \"Dimanche\",\n \"Lundi\",\n \"Mardi\",\n \"Mercredi\",\n \"Jeudi\",\n \"Vendredi\",\n \"Samedi\",\n ],\n shortDays: [\"Di\", \"Lu\", \"Ma\", \"Me\", \"Je\", \"Ve\", \"Sa\"],\n months: [\n \"Janvier\",\n \"Février\",\n \"Mars\",\n \"Avril\",\n \"Mai\",\n \"Juin\",\n \"Juillet\",\n \"Août\",\n \"Septembre\",\n \"Octobre\",\n \"Novembre\",\n \"Décembre\",\n ],\n shortMonths: [\n \"Janv\",\n \"Févr\",\n \"Mars\",\n \"Avr\",\n \"Mai\",\n \"Juin\",\n \"Juil\",\n \"Août\",\n \"Sept\",\n \"Oct\",\n \"Nov\",\n \"Déc\",\n ],\n },\n es: {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\n \"Domingo\",\n \"Lunes\",\n \"Martes\",\n \"Miércoles\",\n \"Jueves\",\n \"Viernes\",\n \"Sábado\",\n ],\n shortDays: [\"Do\", \"Lu\", \"Ma\", \"Mi\", \"Ju\", \"Vi\", \"Sa\"],\n months: [\n \"Enero\",\n \"Febrero\",\n \"Marzo\",\n \"Abril\",\n \"Mayo\",\n \"Junio\",\n \"Julio\",\n \"Agosto\",\n \"Septiembre\",\n \"Octubre\",\n \"Noviembre\",\n \"Diciembre\",\n ],\n shortMonths: [\n \"Enero\",\n \"Feb\",\n \"Mar\",\n \"Abr\",\n \"Mayo\",\n \"Jun\",\n \"Jul\",\n \"Agosto\",\n \"Sept\",\n \"Oct\",\n \"Nov\",\n \"Dic\",\n ],\n },\n it: {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\n \"Domenica\",\n \"Lunedì\",\n \"Martedì\",\n \"Mercoledì\",\n \"Giovedì\",\n \"Venerdì\",\n \"Sabato\",\n ],\n shortDays: [\"Do\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"],\n months: [\n \"Gennaio\",\n \"Febbraio\",\n \"Marzo\",\n \"Aprile\",\n \"Maggio\",\n \"Giugno\",\n \"Luglio\",\n \"Agosto\",\n \"Settembre\",\n \"Ottobre\",\n \"Novembre\",\n \"Dicembre\",\n ],\n shortMonths: [\n \"Genn\",\n \"Febbr\",\n \"Mar\",\n \"Apr\",\n \"Magg\",\n \"Giugno\",\n \"Luglio\",\n \"Ag\",\n \"Sett\",\n \"Ott\",\n \"Nov\",\n \"Dic\",\n ],\n },\n };\n if (name in lang) {\n return lang[name];\n } else {\n console.error(\"Language: \" + name + \" not recognised.\");\n return lang[\"en\"];\n }\n};\n\nexport const scientificNotation = (min, max) => {\n return (min > -0.0001 && max < 0.0001) || (min < -10000 || max > 10000)\n};\n","import { select } from \"d3\";\n\nexport const verifyString = (string) => {\n return typeof string === \"string\";\n};\n\nexport const verifyNumber = (number) => {\n return typeof number === \"number\" && !isNaN(number);\n};\n\nexport const verifyBool = (bool) => {\n return typeof bool === \"boolean\";\n};\n\nexport const verifyFunction = (f) => {\n return typeof f === \"function\";\n};\n\nexport const verifyDiv = (div) => {\n if (select(\"#\" + div)._groups[0][0] === null) {\n throw new Error(\n \"Div with ID: \" + div + \" not found, graph could not be added.\"\n );\n }\n};\n","import {\n select,\n area,\n extent,\n scaleTime,\n scaleLog,\n scaleLinear,\n timeFormat,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeMonth,\n timeYear,\n timeWeek,\n axisBottom,\n axisLeft,\n axisRight,\n axisTop,\n line,\n zoomIdentity,\n zoom as d3zoom,\n format,\n timeFormatDefaultLocale,\n curveBasis,\n curveLinear,\n} from \"d3\";\n\nimport {\n closest,\n formatDate,\n formatNumber,\n isNumeric,\n languageOptions,\n scientificNotation,\n} from \"./functions\";\n\nimport {\n verifyString,\n verifyBool,\n verifyNumber,\n verifyDiv,\n verifyFunction,\n} from \"./verify\";\n\nconst plotlinegraph = (div, data, options = {}) => {\n for (var r of [\"svg\", \"canvas\", \"tooltip\", \"background\"]) {\n try {\n select(`#${r}_${div}`).remove();\n } catch (e) {\n console.log(e);\n }\n }\n\n try {\n verifyDiv(div);\n\n data = processData(data);\n if (data.length < 1) return;\n options = processOptions(div, data, options);\n\n var { xDomain, yDomain, x2Domain, y2Domain } = dataExtents(data, options);\n\n const context = addCanvas(div, options);\n const svg = addSVG(div, options);\n\n timeFormatDefaultLocale(languageOptions(options.language));\n\n var xAxis = addXAxis(svg, xDomain, x2Domain, options);\n var yAxis = addYAxis(svg, yDomain, y2Domain, options);\n\n addInteractionBoxes(svg, div, options);\n\n if (options.title) addTitle(svg, div, options);\n if (options.border) addBorder(svg, options);\n if (options.backgroundColor) addBackground(div, options);\n if (options.setDownloadGraph)\n options.setDownloadGraph(() => downloadGraph(div, options));\n if (options.setDownloadGraphDiv)\n select(\"#\" + options.setDownloadGraphDiv).on(\"click\", function () {\n downloadGraph(div, options);\n });\n\n var plot = addPlottingArea(div, svg, options);\n if (options.legend) addLegend(svg, div, data, options);\n if (options.lines) plotLines(div, plot, data, xAxis, yAxis, options);\n if (options.scatter) plotScatter(context, data, xAxis, yAxis, options);\n if (options.zoom) addZoom(plot, context, data, div, xAxis, yAxis, options);\n if (options.tooltip) addTooltip(data, div, xAxis, yAxis, options);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst addPlottingArea = (div, svg, options) => {\n svg\n .append(\"defs\")\n .append(\"svg:clipPath\")\n .attr(\"id\", \"clip_\" + div)\n .append(\"svg:rect\")\n .attr(\"width\", options.canvasWidth)\n .attr(\"height\", options.canvasHeight)\n .attr(\"x\", 0)\n .attr(\"y\", 0);\n var plot = svg\n .append(\"g\")\n .attr(\"id\", \"plot_\" + div)\n .attr(\"clip-path\", \"url(#clip_\" + div + \")\")\n .style(\"pointer-events\", \"none\");\n return plot;\n};\n\nconst processData = (data) => {\n if (!Array.isArray(data)) data = [data];\n for (var i = 0; i < data.length; i++) {\n var d = data[i];\n if (!(\"x\" in d)) throw new Error(\"Array of data for x-axis not found.\");\n if (!(\"y\" in d)) throw new Error(\"Array of data for y-axis not found.\");\n if (d.x.length !== d.y.length)\n throw new Error(\"Axis have different lengths\");\n if (!(\"name\" in d)) data[i][\"name\"] = `Dataset ${i + 1}`;\n if (!(\"lineColor\" in d)) data[i][\"lineColor\"] = \"#000000\";\n if (!(\"lineWeight\" in d)) data[i][\"lineWeight\"] = 1;\n if (!(\"xaxis\" in d)) data[i][\"xaxis\"] = \"x\";\n if (!(\"yaxis\" in d)) data[i][\"yaxis\"] = \"y\";\n if (data[i][\"xaxis\"] === \"\" || data[i][\"xaxis\"] === undefined)\n data[i][\"xaxis\"] = \"x\";\n if (data[i][\"yaxis\"] === \"\" || data[i][\"yaxis\"] === undefined)\n data[i][\"yaxis\"] = \"y\";\n }\n return data;\n};\n\nconst processOptions = (div, data, userOptions) => {\n var defaultOptions = [\n { name: \"language\", default: \"en\", verify: verifyString },\n { name: \"tooltip\", default: true, verify: verifyBool },\n { name: \"yReverse\", default: false, verify: verifyBool },\n { name: \"xReverse\", default: false, verify: verifyBool },\n { name: \"xLabel\", default: false, verify: verifyString },\n { name: \"yLabel\", default: false, verify: verifyString },\n { name: \"x2Label\", default: false, verify: verifyString },\n { name: \"y2Label\", default: false, verify: verifyString },\n { name: \"xUnit\", default: false, verify: verifyString },\n { name: \"yUnit\", default: false, verify: verifyString },\n { name: \"x2Unit\", default: false, verify: verifyString },\n { name: \"y2Unit\", default: false, verify: verifyString },\n { name: \"xMax\", default: false, verify: verifyNumber },\n { name: \"yMax\", default: false, verify: verifyNumber },\n { name: \"xMin\", default: false, verify: verifyNumber },\n { name: \"yMin\", default: false, verify: verifyNumber },\n { name: \"xLog\", default: false, verify: verifyBool },\n { name: \"yLog\", default: false, verify: verifyBool },\n { name: \"scatter\", default: false, verify: verifyBool },\n { name: \"lines\", default: true, verify: verifyBool },\n { name: \"grid\", default: false, verify: verifyBool },\n { name: \"border\", default: false, verify: verifyBool },\n { name: \"xPadding\", default: false, verify: verifyBool },\n { name: \"yPadding\", default: true, verify: verifyBool },\n { name: \"title\", default: false, verify: verifyString },\n { name: \"fontSize\", default: 12, verify: verifyNumber },\n { name: \"marginTop\", default: 10, verify: verifyNumber },\n { name: \"marginLeft\", default: 46, verify: verifyNumber },\n { name: \"marginBottom\", default: 46, verify: verifyNumber },\n { name: \"marginRight\", default: 70, verify: verifyNumber },\n { name: \"zoom\", default: true, verify: verifyBool },\n { name: \"legend\", default: true, verify: verifyBool },\n { name: \"legendPosition\", default: \"bottomRight\", verify: verifyString },\n { name: \"setDownloadGraph\", default: false, verify: verifyFunction },\n { name: \"setDownloadGraphDiv\", default: false, verify: verifyString },\n { name: \"hover\", default: false, verify: verifyFunction },\n { name: \"curve\", default: false, verify: verifyBool },\n {\n name: \"backgroundColor\",\n default: false,\n verify: () => {\n return true;\n },\n },\n {\n name: \"width\",\n default: select(\"#\" + div)\n .node()\n .getBoundingClientRect().width,\n verify: verifyNumber,\n },\n {\n name: \"height\",\n default: select(\"#\" + div)\n .node()\n .getBoundingClientRect().height,\n verify: verifyNumber,\n },\n ];\n\n var options = {};\n for (let i = 0; i < defaultOptions.length; i++) {\n if (defaultOptions[i].name in userOptions) {\n if (userOptions[defaultOptions[i].name] === undefined) {\n options[defaultOptions[i].name] = defaultOptions[i].default;\n } else if (\n defaultOptions[i].verify(userOptions[defaultOptions[i].name])\n ) {\n options[defaultOptions[i].name] = userOptions[defaultOptions[i].name];\n } else {\n console.error(\n `${userOptions[defaultOptions[i].name]} is not a valid input for ${\n defaultOptions[i].name\n }`\n );\n options[defaultOptions[i].name] = defaultOptions[i].default;\n }\n } else {\n options[defaultOptions[i].name] = defaultOptions[i].default;\n }\n }\n\n options.dualaxis = false;\n for (let d of data) {\n if (d.yaxis === \"y2\") {\n options.dualaxis = \"y2\";\n options.dualaxisColor = d.lineColor;\n }\n if (d.xaxis === \"x2\") {\n options.dualaxis = \"x2\";\n options.dualaxisColor = d.lineColor;\n }\n }\n\n if (!(\"marginLeft\" in userOptions))\n options.marginLeft = options.fontSize * 3 + 10;\n if (!(\"marginRight\" in userOptions)) {\n if (options.dualaxis === \"y2\") {\n options.marginRight = options.fontSize * 3 + 10;\n } else {\n options.marginRight = 10;\n }\n }\n if (!(\"marginBottom\" in userOptions))\n options.marginBottom = options.fontSize * 3 + 10;\n if (!(\"marginTop\" in userOptions)) {\n if (options.title) {\n if (options.dualaxis === \"x2\") {\n options.marginTop = options.fontSize * 3 + 10;\n } else {\n options.marginTop = options.fontSize + 2;\n }\n } else {\n options.marginTop = 10;\n }\n }\n\n options.xTime = false;\n options.yTime = false;\n if (data[0].x[0] instanceof Date) options.xTime = true;\n if (data[0].y[0] instanceof Date) options.yTime = true;\n\n options.canvasWidth = Math.floor(\n options.width - options.marginLeft - options.marginRight\n );\n options.canvasHeight = Math.floor(\n options.height - options.marginTop - options.marginBottom\n );\n return options;\n};\n\nconst getDomain = (domain) => {\n var minarr = domain.map((d) => d[0]);\n var maxarr = domain.map((d) => d[1]);\n var min = extent(minarr)[0];\n var max = extent(maxarr)[1];\n return [min, max];\n};\n\nconst dataExtents = (data, options) => {\n var xdomarr = [];\n var ydomarr = [];\n var y2domarr = [];\n var x2domarr = [];\n for (var i = 0; i < data.length; i++) {\n let xext = extent(data[i].x);\n let yext = extent(data[i].y);\n if (data[i].yaxis === \"y2\") {\n y2domarr.push(yext);\n } else {\n ydomarr.push(yext);\n }\n if (data[i].xaxis === \"x2\") {\n x2domarr.push(xext);\n } else {\n xdomarr.push(xext);\n }\n }\n var xDomain = getDomain(xdomarr);\n var yDomain = getDomain(ydomarr);\n var y2Domain = getDomain(y2domarr);\n var x2Domain = getDomain(x2domarr);\n\n if (options.xMin) xDomain[0] = options.xMin;\n if (options.xMax) xDomain[1] = options.xMax;\n if (options.yMin) yDomain[0] = options.yMin;\n if (options.yMax) yDomain[1] = options.yMax;\n\n return { xDomain, yDomain, x2Domain, y2Domain };\n};\n\nconst addSVG = (div, options) => {\n return select(\"#\" + div)\n .append(\"svg\")\n .attr(\"id\", \"svg_\" + div)\n .attr(\"width\", options.width)\n .style(\"z-index\", 2)\n .style(\"position\", \"absolute\")\n .attr(\"height\", options.height)\n .append(\"g\")\n .attr(\n \"transform\",\n \"translate(\" + options.marginLeft + \",\" + options.marginTop + \")\"\n );\n};\n\nconst addCanvas = (div, options) => {\n var left = \"0px\";\n if (options.contour) left = \"1px\";\n const canvas = select(\"#\" + div)\n .append(\"canvas\")\n .attr(\"width\", options.canvasWidth)\n .attr(\"height\", options.canvasHeight)\n .style(\"margin-left\", options.marginLeft + \"px\")\n .style(\"margin-top\", options.marginTop + \"px\")\n .style(\"pointer-events\", \"none\")\n .style(\"z-index\", 1)\n .style(\"position\", \"absolute\")\n .style(\"left\", left)\n .style(\"cursor\", \"grab\")\n .attr(\"id\", \"canvas_\" + div)\n .attr(\"class\", \"canvas-plot\");\n return canvas.node().getContext(\"2d\");\n};\n\nconst addXAxis = (svg, xDomain, x2Domain, options) => {\n var axisObj = {};\n axisObj.x = addBottonAxis(svg, xDomain, options);\n if (options.dualaxis === \"x2\") {\n axisObj.x2 = addTopAxis(svg, x2Domain, options);\n }\n return axisObj;\n};\n\nconst addBottonAxis = (svg, xDomain, options) => {\n var ax;\n var xrange = [0, options.canvasWidth];\n var xAxisLabel =\n \"\" +\n (options.xLabel ? options.xLabel : \"\") +\n (options.xUnit ? \" (\" + options.xUnit + \")\" : \"\");\n if (options.xReverse) xrange = [options.canvasWidth, 0];\n if (options.xTime) {\n xAxisLabel = \"\";\n ax = scaleTime().range(xrange).domain(xDomain);\n } else if (options.xLog) {\n ax = scaleLog().range(xrange).domain(xDomain);\n } else {\n if (options.xPadding) {\n var xd = (xDomain[1] - xDomain[0]) * 0.1;\n xDomain = [xDomain[0] - xd, xDomain[1] + xd];\n }\n ax = scaleLinear().range(xrange).domain(xDomain);\n }\n var ref = ax.copy();\n var base = ax.copy();\n var axis = axisBottom(ax).ticks(5);\n if (options.xTime) {\n axis.tickFormat(multiFormat);\n } else if (scientificNotation(xDomain[0], xDomain[1])) {\n axis.tickFormat(format(\".1e\"));\n }\n\n if (options.grid) axis.tickSize(-options.canvasHeight);\n\n var g = svg\n .append(\"g\")\n .attr(\"class\", \"x axis\")\n .attr(\"id\", \"axis--x\")\n .attr(\"transform\", \"translate(0,\" + options.canvasHeight + \")\")\n .style(\"font-size\", `${options.fontSize}px`)\n .call(axis);\n\n if (options.grid) {\n g.selectAll(\".tick line\")\n .attr(\"stroke\", \"grey\")\n .attr(\"stroke-dasharray\", \"4\");\n }\n\n if (xAxisLabel !== \"\") {\n svg\n .append(\"text\")\n .attr(\n \"transform\",\n \"translate(\" +\n options.canvasWidth / 2 +\n \" ,\" +\n (options.canvasHeight + options.marginBottom / 1.5) +\n \")\"\n )\n .attr(\"x\", 6)\n .attr(\"dx\", `${options.fontSize}px`)\n .style(\"font-size\", `${options.fontSize}px`)\n .style(\"text-anchor\", \"end\")\n .text(xAxisLabel);\n }\n\n return { ax, ref, base, axis, g };\n};\n\nconst addTopAxis = (svg, x2Domain, options) => {\n var ax;\n var xrange = [0, options.canvasWidth];\n var xAxisLabel =\n \"\" +\n (options.x2Label ? options.x2Label : \"\") +\n (options.x2Unit ? \" (\" + options.x2Unit + \")\" : \"\");\n if (options.xReverse) xrange = [options.canvasWidth, 0];\n if (options.xTime) {\n xAxisLabel = \"\";\n ax = scaleTime().range(xrange).domain(x2Domain);\n } else if (options.xLog) {\n ax = scaleLog().range(xrange).domain(x2Domain);\n } else {\n if (options.xPadding) {\n var xd = (x2Domain[1] - x2Domain[0]) * 0.1;\n x2Domain = [x2Domain[0] - xd, x2Domain[1] + xd];\n }\n ax = scaleLinear().range(xrange).domain(x2Domain);\n }\n var ref = ax.copy();\n var base = ax.copy();\n var axis = axisTop(ax).ticks(5);\n if (options.xTime) {\n axis.tickFormat(multiFormat);\n } else if (scientificNotation(x2Domain[0], x2Domain[1])) {\n axis.tickFormat(format(\".1e\"));\n }\n\n var g = svg\n .append(\"g\")\n .attr(\"class\", \"x axis\")\n .attr(\"id\", \"axis--x2\")\n .attr(\"transform\", \"translate(0,0)\")\n .style(\"font-size\", `${options.fontSize}px`)\n .call(axis);\n\n if (xAxisLabel !== \"\") {\n svg\n .append(\"text\")\n .attr(\n \"transform\",\n `translate(${options.canvasWidth / 2},${\n options.fontSize * 2 - options.marginTop\n })`\n )\n .attr(\"x\", 6)\n .attr(\"dx\", `${options.fontSize}px`)\n .style(\"font-size\", `${options.fontSize}px`)\n .style(\"text-anchor\", \"end\")\n .text(xAxisLabel);\n }\n\n return { ax, ref, base, axis, g };\n};\n\nconst addYAxis = (svg, yDomain, y2Domain, options) => {\n var axisObj = {};\n axisObj.y = addLeftAxis(svg, yDomain, options);\n if (options.dualaxis === \"y2\") {\n axisObj.y2 = addRightAxis(svg, y2Domain, options);\n }\n return axisObj;\n};\n\nconst addLeftAxis = (svg, yDomain, options) => {\n var ax;\n var yrange = [options.canvasHeight, 0];\n var yAxisLabel =\n \"\" +\n (options.yLabel ? options.yLabel : \"\") +\n (options.yUnit ? \" (\" + options.yUnit + \")\" : \"\");\n if (options.yReverse) yrange = [0, options.canvasHeight];\n if (options.yTime) {\n yAxisLabel = \"\";\n ax = scaleTime().range(yrange).domain(yDomain);\n } else if (options.yLog) {\n ax = scaleLog().range(yrange).domain(yDomain);\n } else {\n if (options.yPadding) {\n var yd = (yDomain[1] - yDomain[0]) * 0.1;\n yDomain = [yDomain[0] - yd, yDomain[1] + yd];\n }\n ax = scaleLinear().range(yrange).domain(yDomain);\n }\n var ref = ax.copy();\n var base = ax.copy();\n var axis = axisLeft(ax).ticks(5);\n if (options.yTime) {\n axis.tickFormat(multiFormat);\n } else if (scientificNotation(yDomain[0], yDomain[1])) {\n axis.tickFormat(format(\".1e\"));\n }\n\n if (options.grid) axis.tickSize(-options.canvasWidth);\n\n var g = svg\n .append(\"g\")\n .attr(\"class\", \"y axis\")\n .attr(\"id\", \"axis--y\")\n .style(\"font-size\", `${options.fontSize}px`)\n .call(axis);\n\n if (options.grid) {\n g.selectAll(\".tick line\")\n .attr(\"stroke\", \"grey\")\n .attr(\"stroke-dasharray\", \"4\");\n }\n\n if (yAxisLabel !== \"\") {\n svg\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"y\", 0 - options.marginLeft)\n .attr(\"x\", 0 - options.canvasHeight / 2)\n .attr(\"dy\", `${options.fontSize}px`)\n .style(\"font-size\", `${options.fontSize}px`)\n .style(\"text-anchor\", \"middle\")\n .text(yAxisLabel);\n }\n return { ax, ref, base, axis, g };\n};\n\nconst addRightAxis = (svg, y2Domain, options) => {\n var ax;\n var yrange = [options.canvasHeight, 0];\n var yAxisLabel =\n \"\" +\n (options.y2Label ? options.y2Label : \"\") +\n (options.y2Unit ? \" (\" + options.y2Unit + \")\" : \"\");\n if (options.yReverse) yrange = [0, options.canvasHeight];\n if (options.yTime) {\n yAxisLabel = \"\";\n ax = scaleTime().range(yrange).domain(y2Domain);\n } else if (options.yLog) {\n ax = scaleLog().range(yrange).domain(y2Domain);\n } else {\n if (options.yPadding) {\n var yd = (y2Domain[1] - y2Domain[0]) * 0.1;\n y2Domain = [y2Domain[0] - yd, y2Domain[1] + yd];\n }\n ax = scaleLinear().range(yrange).domain(y2Domain);\n }\n var ref = ax.copy();\n var base = ax.copy();\n var axis = axisRight(ax).ticks(5);\n if (options.yTime) {\n axis.tickFormat(multiFormat);\n } else if (scientificNotation(y2Domain[0], y2Domain[1])) {\n axis.tickFormat(format(\".1e\"));\n }\n\n var g = svg\n .append(\"g\")\n .attr(\"class\", \"y axis\")\n .attr(\"id\", \"axis--y2\")\n .attr(\"transform\", `translate(${options.canvasWidth},0)`)\n .style(\"font-size\", `${options.fontSize}px`)\n .call(axis);\n\n if (yAxisLabel !== \"\") {\n svg\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\n \"y\",\n options.canvasWidth + options.marginRight - options.fontSize - 5\n )\n .attr(\"x\", 0 - options.canvasHeight / 2)\n .attr(\"dy\", `${options.fontSize}px`)\n .style(\"font-size\", `${options.fontSize}px`)\n .style(\"fill\", options.dualaxisColor)\n .style(\"text-anchor\", \"middle\")\n .text(yAxisLabel);\n }\n return { ax, ref, base, axis, g };\n};\n\nconst addTitle = (svg, div, options) => {\n svg\n .append(\"text\")\n .attr(\"x\", options.canvasWidth / 2)\n .attr(\"y\", 2 - options.marginTop / 2)\n .attr(\"id\", \"title_\" + div)\n .attr(\"text-anchor\", \"middle\")\n .style(\"z-index\", 3)\n .style(\"font-size\", `${options.fontSize + 2}px`)\n .style(\"text-decoration\", \"underline\")\n .style(\"opacity\", \"0\")\n .text(options.title);\n};\n\nconst addLegend = (svg, div, data, options) => {\n if ((data.length > 1 && !options.dualaxis) || data.length > 2) {\n var legendblock = svg\n .append(\"g\")\n .attr(\"id\", \"legend_\" + div)\n .attr(\"pointer-events\", \"none\");\n\n var legendbackground = legendblock\n .append(\"rect\")\n .style(\"fill\", \"white\")\n .style(\"opacity\", 0.6);\n\n var x = options.canvasWidth - 10;\n var textAnchor = \"end\";\n if (options.legendPosition.includes(\"Left\")) {\n x = 10;\n textAnchor = \"start\";\n }\n\n var y = (i) => {\n return options.canvasHeight - 20 - i * (options.fontSize + 6);\n };\n if (options.legendPosition.includes(\"top\")) {\n y = (i) => {\n return 5 + i * (options.fontSize + 6);\n };\n }\n\n legendblock\n .selectAll(\"legendtext\")\n .data(data)\n .enter()\n .append(\"text\")\n .attr(\"x\", x)\n .attr(\"y\", function (d, i) {\n return y(i);\n })\n .style(\"fill\", function (d) {\n return d.lineColor;\n })\n .text(function (d) {\n return d.name;\n })\n .attr(\"text-anchor\", textAnchor)\n .style(\"font-size\", `${options.fontSize}px`)\n .style(\"alignment-baseline\", \"middle\");\n\n var legend_size = select(\"#legend_\" + div)\n .node()\n .getBBox();\n\n legendbackground\n .attr(\"x\", legend_size.x - 5)\n .attr(\"y\", legend_size.y - 5)\n .attr(\"width\", legend_size.width + 10)\n .attr(\"height\", legend_size.height + 10);\n }\n};\n\nconst addBorder = (svg, options) => {\n svg\n .append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", options.canvasWidth)\n .attr(\"height\", options.canvasHeight)\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 2)\n .attr(\"fill\", \"none\");\n};\n\nconst addTooltip = (data, div, xAxis, yAxis, options) => {\n var zoombox = select(`#interact_${div}`);\n var tooltip = select(\"#\" + div)\n .append(\"div\")\n .style(\"opacity\", 0)\n .style(\"z-index\", 2)\n .style(\"pointer-events\", \"none\")\n .attr(\"id\", \"tooltip_\" + div)\n .attr(\"class\", \"tooltip\");\n\n var lang = languageOptions(options.language);\n\n zoombox.on(\"mousemove\", (event) => {\n try {\n var hoverX =\n event.layerX - options.marginLeft || event.offsetX - options.marginLeft;\n var hoverY =\n event.layerY - options.marginTop || event.offsetY - options.marginTop;\n var { idx, idy, distance } = closest(data, hoverX, hoverY, xAxis, yAxis);\n\n if (distance < 60) {\n var xval, yval;\n var xu = \"\";\n var yu = \"\";\n\n if (options.xTime) {\n xval = formatDate(data[idx].x[idy], lang);\n } else {\n xval = formatNumber(data[idx].x[idy]);\n if (typeof options.xUnit === \"string\") {\n if (data[idx].xaxis === \"x2\") {\n xu = options.x2Unit;\n } else {\n xu = options.xUnit;\n }\n }\n }\n\n if (options.yTime) {\n yval = formatDate(data[idx].y[idy], lang);\n } else {\n yval = formatNumber(data[idx].y[idy]);\n if (typeof options.yUnit === \"string\") {\n if (data[idx].yaxis === \"y2\") {\n yu = options.y2Unit;\n } else {\n yu = options.yUnit;\n }\n }\n }\n\n var html =\n `` +\n `` +\n `` +\n \"
x:${xval} ${xu}
y:${yval} ${yu}
\";\n\n if (hoverX > options.width / 2) {\n tooltip\n .html(html)\n .style(\n \"right\",\n options.width -\n options.marginLeft -\n xAxis[data[idx].xaxis].ax(data[idx].x[idy]) +\n 10 +\n \"px\"\n )\n .style(\"left\", \"auto\")\n .style(\n \"top\",\n yAxis[data[idx].yaxis].ax(data[idx].y[idy]) +\n options.marginTop -\n options.fontSize -\n 6 +\n \"px\"\n )\n .attr(\"class\", \"tooltip tooltip-right\")\n .style(\"opacity\", 1);\n } else {\n tooltip\n .html(html)\n .style(\n \"left\",\n xAxis[data[idx].xaxis].ax(data[idx].x[idy]) +\n options.marginLeft +\n 10 +\n \"px\"\n )\n .style(\"right\", \"auto\")\n .style(\n \"top\",\n yAxis[data[idx].yaxis].ax(data[idx].y[idy]) +\n options.marginTop -\n options.fontSize -\n 6 +\n \"px\"\n )\n .attr(\"class\", \"tooltip tooltip-left\")\n .style(\"opacity\", 1);\n }\n\n if (options.hover) options.hover({ idx, idy });\n } else if (distance > 200) {\n tooltip.style(\"opacity\", 0);\n if (options.hover) options.hover({ mousex: false, mousey: false });\n }\n } catch (e) {\n tooltip.style(\"opacity\", 0);\n if (options.hover) options.hover({ mousex: false, mousey: false });\n }\n });\n\n zoombox.on(\"mouseout\", () => {\n tooltip.style(\"opacity\", 0);\n if (options.hover) options.hover({ mousex: false, mousey: false });\n });\n};\n\nconst addBackground = (div, options) => {\n select(\"#\" + div)\n .append(\"svg\")\n .attr(\"id\", \"background_\" + div)\n .attr(\"width\", options.width)\n .style(\"z-index\", 0)\n .style(\"position\", \"absolute\")\n .attr(\"height\", options.height)\n .append(\"g\")\n .append(\"rect\")\n .attr(\"x\", 1)\n .attr(\"width\", options.width)\n .attr(\"height\", options.height)\n .attr(\"fill\", options.backgroundColor);\n};\n\nconst downloadGraph = (div, options) => {\n var title = select(\"#title_\" + div);\n title.style(\"opacity\", \"1\");\n var s = new XMLSerializer();\n var str = s.serializeToString(document.getElementById(\"svg_\" + div));\n\n var canvasout = document.createElement(\"canvas\"),\n contextout = canvasout.getContext(\"2d\");\n\n canvasout.width = options.width;\n canvasout.height = options.height;\n\n var image = new Image();\n image.onerror = function () {\n alert(\"Appologies .png download failed. Please download as .svg.\");\n };\n image.onload = function () {\n contextout.drawImage(image, 0, 0);\n contextout.drawImage(\n document.getElementById(\"canvas_\" + div),\n options.marginLeft,\n options.marginTop\n );\n var a = document.createElement(\"a\");\n a.download = \"linegraph_\" + div + \".png\";\n a.href = canvasout.toDataURL(\"image/png\");\n a.click();\n };\n image.src = \"data:image/svg+xml;charset=utf8,\" + encodeURIComponent(str);\n title.style(\"opacity\", \"0\");\n};\n\nconst plotLines = (div, g, data, xAxis, yAxis, options) => {\n g.selectAll(\"path\").remove();\n for (let j = 0; j < data.length; j++) {\n plotConfidenceInterval(\n g,\n data[j],\n xAxis[data[j].xaxis],\n yAxis[data[j].yaxis]\n );\n }\n var curve = curveLinear;\n if (options.curve) curve = curveBasis;\n for (let j = 0; j < data.length; j++) {\n g.append(\"path\")\n .datum(data[j].x)\n .attr(\"id\", `line_${j}_${div}`)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", data[j].lineColor)\n .attr(\"stroke-width\", data[j].lineWeight)\n .attr(\n \"d\",\n line()\n .x(function (d) {\n return xAxis[data[j].xaxis].ax(d);\n })\n .y(function (d, i) {\n return yAxis[data[j].yaxis].ax(data[j].y[i]);\n })\n .curve(curve)\n .defined(function (d, i) {\n if (\n isNumeric(xAxis[data[j].xaxis].ax(d)) &&\n isNumeric(yAxis[data[j].yaxis].ax(data[j].y[i]))\n ) {\n return true;\n } else {\n return false;\n }\n })\n );\n }\n};\n\nconst plotConfidenceInterval = (g, data, xAxis, yAxis) => {\n if (\"upper\" in data && \"lower\" in data && \"confidenceAxis\" in data) {\n if (\n data.upper.length === data.x.length &&\n data.lower.length === data.x.length\n ) {\n if (data.confidenceAxis === \"x\") {\n g.append(\"path\")\n .datum(data.y)\n .attr(\"fill\", data.lineColor)\n .attr(\"stroke\", \"none\")\n .attr(\"opacity\", 0.15)\n .attr(\n \"d\",\n area()\n .y(function (d) {\n return yAxis.ax(d);\n })\n .x0(function (d, i) {\n return xAxis.ax(data.lower[i]);\n })\n .x1(function (d, i) {\n return xAxis.ax(data.upper[i]);\n })\n .defined(function (d, i) {\n if (\n isNumeric(yAxis.ax(d)) &&\n isNumeric(xAxis.ax(data.lower[i])) &&\n isNumeric(xAxis.ax(data.upper[i]))\n ) {\n return true;\n } else {\n return false;\n }\n })\n );\n } else if (data.confidenceAxis === \"y\") {\n g.append(\"path\")\n .datum(data.x)\n .attr(\"fill\", data.lineColor)\n .attr(\"stroke\", \"none\")\n .attr(\"opacity\", 0.15)\n .attr(\n \"d\",\n area()\n .x(function (d) {\n return xAxis.ax(d);\n })\n .y0(function (d, i) {\n return yAxis.ax(data.lower[i]);\n })\n .y1(function (d, i) {\n return yAxis.ax(data.upper[i]);\n })\n .defined(function (d, i) {\n if (\n isNumeric(xAxis.ax(d)) &&\n isNumeric(yAxis.ax(data.lower[i])) &&\n isNumeric(yAxis.ax(data.upper[i]))\n ) {\n return true;\n } else {\n return false;\n }\n })\n );\n }\n }\n }\n};\n\nconst plotScatter = (context, data, xAxis, yAxis, options) => {\n context.clearRect(0, 0, options.canvasWidth, options.canvasHeight);\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].x.length; j++) {\n context.beginPath();\n context.strokeStyle = data[i].lineColor;\n const px = xAxis[data[i].xaxis].ax(data[i].x[j]);\n const py = yAxis[data[i].yaxis].ax(data[i].y[j]);\n context.arc(px, py, 2.5, 0, 2 * Math.PI, true);\n context.stroke();\n }\n }\n};\n\nconst addInteractionBoxes = (svg, div, options) => {\n svg\n .append(\"rect\")\n .attr(\"id\", \"interact_\" + div)\n .attr(\"width\", options.canvasWidth)\n .attr(\"height\", options.canvasHeight)\n .style(\"fill\", \"none\")\n .style(\"cursor\", \"pointer\")\n .attr(\"pointer-events\", \"all\");\n\n svg\n .append(\"rect\")\n .attr(\"id\", \"interactx_\" + div)\n .attr(\"width\", options.canvasWidth)\n .attr(\"height\", options.marginBottom)\n .style(\"fill\", \"none\")\n .style(\"cursor\", \"col-resize\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"y\", options.canvasHeight);\n\n if (options.dualaxis === \"x2\") {\n svg\n .append(\"rect\")\n .attr(\"id\", \"interactx2_\" + div)\n .attr(\"width\", options.canvasWidth)\n .attr(\"height\", options.marginTop)\n .style(\"fill\", \"none\")\n .style(\"cursor\", \"col-resize\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"y\", -options.marginTop);\n }\n\n svg\n .append(\"rect\")\n .attr(\"id\", \"interacty_\" + div)\n .attr(\"width\", options.marginLeft)\n .attr(\"height\", options.canvasHeight)\n .style(\"fill\", \"none\")\n .style(\"cursor\", \"row-resize\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"x\", -options.marginLeft);\n\n if (options.dualaxis === \"y2\") {\n svg\n .append(\"rect\")\n .attr(\"id\", \"interacty2_\" + div)\n .attr(\"width\", options.marginRight)\n .attr(\"height\", options.canvasHeight)\n .style(\"fill\", \"none\")\n .style(\"cursor\", \"row-resize\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"x\", options.canvasWidth);\n }\n};\n\nconst editTicks = (xAxis, yAxis) => {\n xAxis.x.g\n .selectAll(\".tick line\")\n .attr(\"stroke\", \"grey\")\n .attr(\"stroke-dasharray\", \"4\");\n yAxis.y.g\n .selectAll(\".tick line\")\n .attr(\"stroke\", \"grey\")\n .attr(\"stroke-dasharray\", \"4\");\n};\n\nconst addZoom = (g, context, data, div, xAxis, yAxis, options) => {\n var zoom = d3zoom()\n .extent([\n [0, 0],\n [options.canvasWidth, options.canvasHeight],\n ])\n .on(\"zoom\", normalzoom);\n\n var zoomx = d3zoom()\n .extent([\n [0, 0],\n [options.canvasWidth, options.canvasHeight],\n ])\n .on(\"zoom\", normalzoomx);\n\n var zoomy = d3zoom()\n .extent([\n [0, 0],\n [options.canvasWidth, options.canvasHeight],\n ])\n .on(\"zoom\", normalzoomy);\n\n if (options.dualaxis === \"y2\") {\n var zoomy2 = d3zoom()\n .extent([\n [0, 0],\n [options.canvasWidth, options.canvasHeight],\n ])\n .on(\"zoom\", normalzoomy2);\n var zoomboxy2 = select(`#interacty2_${div}`).call(zoomy2);\n }\n\n if (options.dualaxis === \"x2\") {\n var zoomx2 = d3zoom()\n .extent([\n [0, 0],\n [options.canvasWidth, options.canvasHeight],\n ])\n .on(\"zoom\", normalzoomx2);\n var zoomboxx2 = select(`#interactx2_${div}`).call(zoomx2);\n }\n\n var zoombox = select(`#interact_${div}`).call(zoom);\n var zoomboxx = select(`#interactx_${div}`).call(zoomx);\n var zoomboxy = select(`#interacty_${div}`).call(zoomy);\n\n function normalzoom(event) {\n let t = event.transform;\n if (t !== zoomIdentity) {\n xAxis.x.ax = t.rescaleX(xAxis.x.ref);\n xAxis.x.axis.scale(xAxis.x.ax);\n xAxis.x.g.call(xAxis.x.axis);\n if (options.dualaxis === \"x2\") {\n xAxis.x2.ax = t.rescaleX(xAxis.x2.ref);\n xAxis.x2.axis.scale(xAxis.x2.ax);\n xAxis.x2.g.call(xAxis.x2.axis);\n }\n yAxis.y.ax = t.rescaleY(yAxis.y.ref);\n yAxis.y.axis.scale(yAxis.y.ax);\n yAxis.y.g.call(yAxis.y.axis);\n if (options.dualaxis === \"y2\") {\n yAxis.y2.ax = t.rescaleY(yAxis.y2.ref);\n yAxis.y2.axis.scale(yAxis.y2.ax);\n yAxis.y2.g.call(yAxis.y2.axis);\n }\n if (options.lines) plotLines(div, g, data, xAxis, yAxis, options);\n if (options.scatter) plotScatter(context, data, xAxis, yAxis, options);\n xAxis.x.ref = xAxis.x.ax;\n if (options.dualaxis === \"x2\") xAxis.x2.ref = xAxis.x2.ax;\n yAxis.y.ref = yAxis.y.ax;\n if (options.dualaxis === \"y2\") yAxis.y2.ref = yAxis.y2.ax;\n zoombox.call(zoom.transform, zoomIdentity);\n if (options.grid) editTicks(xAxis, yAxis);\n }\n }\n\n function normalzoomx(event) {\n let t = event.transform;\n if (t !== zoomIdentity) {\n xAxis.x.ax = t.rescaleX(xAxis.x.ref);\n xAxis.x.axis.scale(xAxis.x.ax);\n xAxis.x.g.call(xAxis.x.axis);\n if (options.lines) plotLines(div, g, data, xAxis, yAxis, options);\n if (options.scatter) plotScatter(context, data, xAxis, yAxis, options);\n xAxis.x.ref = xAxis.x.ax;\n zoomboxx.call(zoom.transform, zoomIdentity);\n if (options.grid) editTicks(xAxis, yAxis);\n }\n }\n\n function normalzoomx2(event) {\n let t = event.transform;\n if (t !== zoomIdentity) {\n xAxis.x2.ax = t.rescaleX(xAxis.x2.ref);\n xAxis.x2.axis.scale(xAxis.x2.ax);\n xAxis.x2.g.call(xAxis.x2.axis);\n if (options.lines) plotLines(div, g, data, xAxis, yAxis, options);\n if (options.scatter) plotScatter(context, data, xAxis, yAxis, options);\n xAxis.x2.ref = xAxis.x2.ax;\n zoomboxx2.call(zoom.transform, zoomIdentity);\n if (options.grid) editTicks(xAxis, yAxis);\n }\n }\n\n function normalzoomy(event) {\n let t = event.transform;\n if (t !== zoomIdentity) {\n yAxis.y.ax = t.rescaleY(yAxis.y.ref);\n yAxis.y.axis.scale(yAxis.y.ax);\n yAxis.y.g.call(yAxis.y.axis);\n if (options.lines) plotLines(div, g, data, xAxis, yAxis, options);\n if (options.scatter) plotScatter(context, data, xAxis, yAxis, options);\n yAxis.y.ref = yAxis.y.ax;\n zoomboxy.call(zoom.transform, zoomIdentity);\n if (options.grid) editTicks(xAxis, yAxis);\n }\n }\n\n function normalzoomy2(event) {\n let t = event.transform;\n if (t !== zoomIdentity) {\n yAxis.y2.ax = t.rescaleY(yAxis.y2.ref);\n yAxis.y2.axis.scale(yAxis.y2.ax);\n yAxis.y2.g.call(yAxis.y2.axis);\n if (options.lines) plotLines(div, g, data, xAxis, yAxis, options);\n if (options.scatter) plotScatter(context, data, xAxis, yAxis, options);\n yAxis.y2.ref = yAxis.y2.ax;\n zoomboxy2.call(zoom.transform, zoomIdentity);\n if (options.grid) editTicks(xAxis, yAxis);\n }\n }\n\n zoombox.on(\"dblclick.zoom\", null).on(\"dblclick\", () => {\n xAxis.x.ax = xAxis.x.base;\n xAxis.x.ref = xAxis.x.base;\n xAxis.x.axis.scale(xAxis.x.base);\n xAxis.x.g.call(xAxis.x.axis);\n if (options.dualaxis === \"x2\") {\n xAxis.x2.ax = xAxis.x2.base;\n xAxis.x2.ref = xAxis.x2.base;\n xAxis.x2.axis.scale(xAxis.x2.base);\n xAxis.x2.g.call(xAxis.x2.axis);\n }\n yAxis.y.ref = yAxis.y.base;\n yAxis.y.ax = yAxis.y.base;\n yAxis.y.axis.scale(yAxis.y.base);\n yAxis.y.g.call(yAxis.y.axis);\n if (options.dualaxis === \"y2\") {\n yAxis.y2.ref = yAxis.y2.base;\n yAxis.y2.ax = yAxis.y2.base;\n yAxis.y2.axis.scale(yAxis.y2.base);\n yAxis.y2.g.call(yAxis.y2.axis);\n }\n if (options.lines) plotLines(div, g, data, xAxis, yAxis, options);\n if (options.scatter) plotScatter(context, data, xAxis, yAxis, options);\n if (options.grid) editTicks(xAxis, yAxis);\n });\n zoomboxx.on(\"dblclick.zoom\", null);\n zoomboxy.on(\"dblclick.zoom\", null);\n if (options.dualaxis === \"x2\") zoomboxx2.on(\"dblclick.zoom\", null);\n if (options.dualaxis === \"y2\") zoomboxy2.on(\"dblclick.zoom\", null);\n return { zoombox };\n};\n\nconst multiFormat = (date) => {\n var formatMillisecond = timeFormat(\".%L\"),\n formatSecond = timeFormat(\":%S\"),\n formatMinute = timeFormat(\"%H:%M\"),\n formatHour = timeFormat(\"%H:%M\"),\n formatDay = timeFormat(\"%d.%m\"),\n formatWeek = timeFormat(\"%d.%m\"),\n formatMonth = timeFormat(\"%B\"),\n formatYear = timeFormat(\"%Y\");\n return (\n timeSecond(date) < date\n ? formatMillisecond\n : timeMinute(date) < date\n ? formatSecond\n : timeHour(date) < date\n ? formatMinute\n : timeDay(date) < date\n ? formatHour\n : timeMonth(date) < date\n ? timeWeek(date) < date\n ? formatDay\n : formatWeek\n : timeYear(date) < date\n ? formatMonth\n : formatYear\n )(date);\n};\n\nexport default plotlinegraph;\n","import React, { Component } from \"react\";\nimport * as d3 from \"d3\";\nimport isEqual from \"lodash/isEqual\";\nimport GraphHeader from \"../graphheader/graphheader\";\nimport plotlinegraph from \"./plotlinegraph\";\nimport \"./linegraph.css\";\n\nclass D3LineGraph extends Component {\n state = {\n graphid: Math.round(Math.random() * 100000),\n download: false,\n fullscreen: false,\n fontSize: this.props.fontSize ? this.props.fontSize : 12,\n };\n\n editFontSize = (fontSize) => {\n this.setState({ fontSize });\n };\n\n toggleDownload = () => {\n this.setState({ download: !this.state.download });\n };\n\n toggleFullscreen = () => {\n this.setState({ fullscreen: !this.state.fullscreen }, () => {\n window.dispatchEvent(new Event(\"resize\"));\n });\n };\n\n getDomain = (domain) => {\n var minarr = domain.map((d) => d[0]);\n var maxarr = domain.map((d) => d[1]);\n var min = d3.extent(minarr)[0];\n var max = d3.extent(maxarr)[1];\n return [min, max];\n };\n\n formatDate = (raw) => {\n return new Date(raw * 1000);\n };\n\n removeErrorWarning = (x) => {\n return;\n };\n\n downloadCSV = () => {\n function normalparse(value) {\n return value;\n }\n function dateparse(date) {\n let day = (\"0\" + date.getDate()).slice(-2);\n let month = (\"0\" + (date.getMonth() + 1)).slice(-2);\n let year = date.getFullYear();\n let hour = (\"0\" + date.getHours()).slice(-2);\n let minutes = (\"0\" + date.getMinutes()).slice(-2);\n let seconds =\n date.getSeconds() < 10 ? \"0\" + date.getSeconds() : date.getSeconds();\n return `${year}-${month}-${day} ${hour}:${minutes}:${seconds}`;\n }\n try {\n var { data, xlabel, xunits, ylabel, yunits, title } = this.props;\n var x_units = ` (${xunits})`;\n var y_units = ` (${yunits})`;\n var x_parse = normalparse;\n var y_parse = normalparse;\n if (xlabel === \"Time\") {\n x_units = \"\";\n x_parse = dateparse;\n }\n if (ylabel === \"Time\") {\n y_units = \"\";\n y_parse = dateparse;\n }\n var csvContent = \"\";\n if (!Array.isArray(data) || data.length === 1) {\n if (Array.isArray(data)) data = data[0];\n csvContent =\n csvContent +\n `data:text/csv;charset=utf-8,${xlabel}${x_units},${ylabel}${y_units}\\n`;\n for (var i = 0; i < data.x.length; i++) {\n csvContent =\n csvContent + `${x_parse(data.x[i])},${y_parse(data.y[i])}\\n`;\n }\n } else {\n csvContent = csvContent + \"data:text/csv;charset=utf-8\";\n var rows = -Infinity;\n for (let i = 0; i < data.length; i++) {\n csvContent = csvContent + `,${xlabel}${x_units},${ylabel}${y_units}`;\n rows = Math.max(rows, data[i].x.length);\n }\n csvContent = csvContent + \"\\n\";\n for (let j = 0; j < rows; j++) {\n csvContent =\n csvContent + `${x_parse(data[0].x[j])},${y_parse(data[0].y[j])}`;\n for (let i = 1; i < data.length; i++) {\n csvContent =\n csvContent + `,${x_parse(data[i].x[j])},${y_parse(data[i].y[j])}`;\n }\n csvContent = csvContent + \"\\n\";\n }\n }\n var name = title.split(\" \").join(\"_\") + \".csv\";\n var encodedUri = encodeURI(csvContent);\n var link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodedUri);\n link.setAttribute(\"download\", name);\n document.body.appendChild(link);\n link.click();\n this.setState({ download: false });\n } catch (e) {\n console.error(e);\n alert(\"Failed to convert data to .csv, please download in .json format.\");\n }\n };\n\n downloadJSON = () => {\n var { data, xlabel, xunits, ylabel, yunits, title } = this.props;\n var arr = { ...{ xlabel, xunits, ylabel, yunits, title }, ...data };\n var name = title.split(\" \").join(\"_\") + \".json\";\n var encodedUri =\n \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(arr));\n var link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodedUri);\n link.setAttribute(\"download\", name);\n document.body.appendChild(link);\n link.click();\n this.setState({ download: false });\n };\n\n removeCommaFromLabels = (gX) => {\n var labels = gX._groups[0][0].children;\n for (var i = 0; i < labels.length; i++) {\n if (labels[i].children.length > 1) {\n labels[i].children[1].innerHTML = labels[\n i\n ].children[1].innerHTML.replace(\",\", \"\");\n }\n }\n };\n\n setLanguage = (name) => {\n var lang = {\n de: {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\n \"Sonntag\",\n \"Montag\",\n \"Dienstag\",\n \"Mittwoch\",\n \"Donnerstag\",\n \"Freitag\",\n \"Samstag\",\n ],\n shortDays: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n months: [\n \"Januar\",\n \"Februar\",\n \"März\",\n \"April\",\n \"Mai\",\n \"Juni\",\n \"Juli\",\n \"August\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Dezember\",\n ],\n shortMonths: [\n \"Jan\",\n \"Feb\",\n \"Mär\",\n \"Apr\",\n \"Mai\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Okt\",\n \"Nov\",\n \"Dez\",\n ],\n },\n };\n if (name in lang) {\n d3.timeFormatDefaultLocale(lang[name]);\n }\n };\n\n plot = async () => {\n var {\n data,\n xlabel,\n xunits,\n ylabel,\n yunits,\n x2label,\n x2units,\n y2label,\n y2units,\n xmax,\n xmin,\n ymax,\n ymin,\n xscale,\n yscale,\n bcolor,\n lcolor,\n lweight,\n title,\n legend,\n confidence,\n simple,\n yReverse,\n xReverse,\n plotdots,\n box,\n grid,\n language,\n curve,\n } = this.props;\n var { graphid, fontSize } = this.state;\n\n for (var i = 0; i < data.length; i++) {\n data[i][\"lineColor\"] = lcolor[i] ? lcolor[i] : \"black\";\n data[i][\"lineWeight\"] = lweight[i] ? lweight[i] : 1;\n data[i][\"name\"] = legend && legend[i] ? legend[i].text : \"\";\n data[i][\"xaxis\"] = legend && legend[i] ? legend[i].xaxis : \"x\";\n data[i][\"yaxis\"] = legend && legend[i] ? legend[i].yaxis : \"y\";\n data[i][\"upper\"] =\n confidence && confidence[i] ? confidence[i].CI_upper : \"\";\n data[i][\"lower\"] =\n confidence && confidence[i] ? confidence[i].CI_lower : \"\";\n data[i][\"confidenceAxis\"] = confidence && confidence[i] ? \"y\" : \"\";\n data[i][\"confidenceAxis\"] = confidence && confidence[i] ? \"y\" : \"\";\n }\n var options = {\n language,\n backgroundColor: bcolor,\n xLog: xscale === \"Log\",\n yLog: yscale === \"Log\",\n border: box,\n grid,\n xLabel: xlabel,\n yLabel: ylabel,\n xUnit: xunits,\n yUnit: yunits,\n x2Label: x2label,\n y2Label: y2label,\n x2Unit: x2units,\n y2Unit: y2units,\n title: title,\n zoom: !simple,\n yReverse,\n xReverse,\n fontSize,\n scatter: plotdots,\n tooltip: !simple,\n setDownloadGraphDiv: \"png\" + graphid,\n };\n if (xmax) options[\"xMax\"] = xmax;\n if (xmin) options[\"xMin\"] = xmin;\n if (ymax) options[\"yMax\"] = ymax;\n if (ymin) options[\"yMin\"] = ymin;\n if (curve) options[\"curve\"] = curve;\n plotlinegraph(\"vis\" + graphid, data, options);\n };\n\n componentDidMount() {\n var { graphid } = this.state;\n this.plot();\n window.addEventListener(\"resize\", this.plot, false);\n document\n .getElementById(\"vis\" + graphid)\n .addEventListener(\"resize\", this.plot, false);\n }\n\n componentWillUnmount() {\n var { graphid } = this.state;\n window.removeEventListener(\"resize\", this.plot, false);\n document\n .getElementById(\"vis\" + graphid)\n .removeEventListener(\"resize\", this.plot, false);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (!isEqual(prevProps, this.props)) {\n this.plot();\n }\n if (prevState.fontSize !== this.state.fontSize) {\n this.plot();\n }\n }\n\n render() {\n var { graphid, download, fullscreen, fontSize } = this.state;\n var { title, simple } = this.props;\n return simple ? (\n
\n ) : (\n
\n
\n {this.props.header !== false && (\n
\n \n
\n )}\n \n
\n
\n );\n }\n}\n\nexport default D3LineGraph;\n","import React, { Component } from \"react\";\nimport \"./sidebarlayout.css\";\n\nclass SidebarLayout extends Component {\n state = {\n open: window.innerWidth > 960,\n resize: true,\n };\n\n toggle = () => {\n this.setState({ resize: false }, () => {\n window.dispatchEvent(new Event(\"resize\"));\n this.setState({ resize: true });\n });\n this.setState({ open: !this.state.open });\n };\n\n render() {\n const { open } = this.state;\n const { wide } = this.props;\n return (\n
\n
\n {this.props.left}\n
\n
\n this.toggle()}\n >\n
{this.props.sidebartitle}
{\" \"}\n {open ? × : {\">\"}}\n
\n
\n {\"rightNoScroll\" in this.props && this.props.rightNoScroll}\n {\"right\" in this.props && (\n
{this.props.right}
\n )}\n
\n
\n
\n
\n );\n }\n}\n\nexport default SidebarLayout;\n","export const urlFromSsh = (ssh, renku = false) => {\n var url;\n var group = ssh.replace(\".git\", \"\").split(\":\")[1].split(\"/\")[0];\n var repository = ssh.replace(\".git\", \"\").split(\":\")[1].split(\"/\")[1];\n\n if (ssh.includes(\"git@renkulab.io\")) {\n if (renku) {\n url = `https://renkulab.io/projects/${group}/${repository}`;\n } else {\n url = `https://renkulab.io/gitlab/${group}/${repository}`;\n }\n } else if (ssh.includes(\"git@gitlab.renkulab.io\")) {\n url = `https://gitlab.renkulab.io/${group}/${repository}`;\n } else if (ssh.includes(\"github.com\")) {\n url = `https://github.com/${group}/${repository}`;\n } else if (ssh.includes(\"gitlab.com\")) {\n url = `https://gitlab.com/${group}/${repository}`;\n }\n return url;\n};\n","import React, { Component } from \"react\";\nimport L from \"leaflet\";\nimport \"./leaflet_customcontrol\";\nimport \"leaflet.markercluster\";\nimport \"leaflet-draw\";\nimport \"./css/leaflet.css\";\nimport \"./css/markercluster.css\";\nimport \"./css/markerclusterdefault.css\";\nimport \"./css/marker.css\";\nimport \"./css/mapselect.css\";\n\nclass MapSelect extends Component {\n rectEnable = (e) => {\n if (e.ctrlKey) {\n this.rectangle.enable();\n }\n };\n\n componentDidMount() {\n const { datasets, selectPoints, mapToggle } = this.props;\n var center = [46.85, 7.55];\n var zoom = 8;\n\n this.map = L.map(\"mapselect\", {\n center: center,\n zoom: zoom,\n minZoom: 2,\n maxZoom: 18,\n layers: [\n //L.tileLayer('https://wmts20.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-grau/default/current/3857/{z}/{x}/{y}.jpeg', {attribution: 'swisstopo'})\n L.tileLayer(\n \"https://api.mapbox.com/styles/v1/jamesrunnalls/ckfs3ngtw0fx519o5oinhc5mh/tiles/256/{z}/{x}/{y}?access_token=pk.eyJ1IjoiamFtZXNydW5uYWxscyIsImEiOiJjazk0ZG9zd2kwM3M5M2hvYmk3YW0wdW9yIn0.uIJUZoDgaC2LfdGtgMz0cQ\",\n {\n attribution:\n 'swisstopo DV 5704 000 000 | © OpenStreetMap | © mapbox',\n }\n ),\n ],\n });\n\n if (selectPoints) {\n var drawnItems = new L.FeatureGroup();\n this.map.addLayer(drawnItems);\n var drawControl = new L.Control.Draw({\n edit: {\n draw: true,\n featureGroup: drawnItems,\n },\n });\n this.map.addControl(drawControl);\n\n this.rectangle = new L.Draw.Rectangle(\n this.map,\n drawControl.options.Rectangle\n );\n\n this.map.on(\"draw:created\", function (e) {\n var layer = e.layer;\n selectPoints(layer._latlngs[0]);\n drawnItems.clearLayers();\n drawnItems.addLayer(layer);\n });\n this.drawnItems = drawnItems;\n window.addEventListener(\"keydown\", this.rectEnable);\n }\n\n // Close button\n if (mapToggle) {\n L.control\n .custom({\n position: \"topright\",\n content: '
',\n classes: \"closemap\",\n style: {\n margin: \"10px\",\n padding: \"0px 0 0 0\",\n cursor: \"pointer\",\n },\n events: {\n click: function (data) {\n mapToggle();\n },\n },\n })\n .addTo(this.map);\n }\n\n // Plot markers\n var bounds = this.plotMarkers(datasets);\n try {\n this.map.fitBounds(bounds, { maxZoom: 12 });\n } catch (e) {}\n }\n\n componentDidUpdate() {\n this.map.invalidateSize();\n const { datasets, filters } = this.props;\n if (filters && !(\"Location\" in filters)) {\n this.drawnItems.clearLayers();\n var bounds = this.plotMarkers(datasets);\n try {\n this.map.fitBounds(bounds, { maxZoom: 8 });\n } catch (e) {}\n } else {\n this.plotMarkers(datasets);\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"keydown\", this.rectEnable);\n }\n\n plotMarkers = (datasets) => {\n try {\n this.map.removeLayer(this.markers);\n } catch (e) {}\n\n try {\n const { clickPoint, files } = this.props;\n var shape = \"marker\";\n var color = \"#38bec9\";\n var Icon = L.divIcon({\n className: \"map-marker\",\n html: `
`,\n });\n var IconSelect = L.divIcon({\n className: \"map-marker\",\n html: `
`,\n });\n\n this.markers = L.markerClusterGroup();\n var bounds = L.latLngBounds();\n for (let i = 0; i < datasets.length; i++) {\n let dataset = datasets[i];\n var { latitude, longitude, title, id, ave, fileid } = dataset;\n latitude = parseFloat(latitude);\n longitude = parseFloat(longitude);\n if (latitude !== -9999 && longitude !== -9999) {\n bounds.extend([latitude, longitude]);\n if (title && id) {\n this.markers.addLayer(\n new L.marker([latitude, longitude], {\n icon: Icon,\n }).bindPopup(`${title}`)\n );\n } else if (ave && clickPoint) {\n let inIcon = Icon;\n let text = \"Select file\";\n if (files.includes(fileid)) {\n inIcon = IconSelect;\n text = \"Selected file\";\n }\n let value = new Date(ave);\n this.markers.addLayer(\n new L.marker([latitude, longitude], {\n icon: inIcon,\n id: fileid,\n })\n .bindTooltip(\n `
${text}
${\n value.toDateString() + \" \" + value.toLocaleTimeString()\n }
${dataset.nc_name}
`\n )\n .on(\"click\", (e) => {\n clickPoint(e);\n })\n );\n } else {\n this.markers.addLayer(\n new L.marker([latitude, longitude], {\n icon: Icon,\n })\n );\n }\n }\n }\n this.map.addLayer(this.markers);\n return bounds;\n } catch (e) {\n console.error(e);\n }\n };\n render() {\n return (\n \n
\n
\n
\n
\n );\n }\n}\n\nexport default MapSelect;\n","import L from \"leaflet\";\n\n// https://github.com/yigityuce/Leaflet.Control.Custom\n\nL.Control.Custom = L.Control.extend({\n version: \"1.0.1\",\n options: {\n position: \"topright\",\n id: \"\",\n title: \"\",\n classes: \"\",\n content: \"\",\n style: {},\n datas: {},\n events: {}\n },\n container: null,\n onAdd: function(map) {\n this.container = L.DomUtil.create(\"div\");\n this.container.id = this.options.id;\n this.container.title = this.options.title;\n this.container.className = this.options.classes;\n this.container.innerHTML = this.options.content;\n\n for (var option in this.options.style) {\n this.container.style[option] = this.options.style[option];\n }\n\n for (var data in this.options.datas) {\n this.container.dataset[data] = this.options.datas[data];\n }\n\n /* Prevent click events propagation to map */\n L.DomEvent.disableClickPropagation(this.container);\n\n /* Prevent right click event propagation to map */\n L.DomEvent.on(this.container, \"contextmenu\", function(ev) {\n L.DomEvent.stopPropagation(ev);\n });\n\n /* Prevent scroll events propagation to map when cursor on the div */\n L.DomEvent.disableScrollPropagation(this.container);\n\n for (var event in this.options.events) {\n L.DomEvent.on(\n this.container,\n event,\n this.options.events[event],\n this.container\n );\n }\n\n return this.container;\n },\n\n onRemove: function(map) {\n for (var event in this.options.events) {\n L.DomEvent.off(\n this.container,\n event,\n this.options.events[event],\n this.container\n );\n }\n }\n});\n\nL.control.custom = function(options) {\n return new L.Control.Custom(options);\n};\n","import L from \"leaflet\";\n\nL.TileLayer.ColorPicker = L.TileLayer.extend({\n options: {\n crossOrigin: \"anonymous\",\n },\n getColor: function (latlng) {\n var size = this.getTileSize();\n var point = this._map.project(latlng, this._tileZoom).floor();\n var coords = point.unscaleBy(size).floor();\n var offset = point.subtract(coords.scaleBy(size));\n coords.z = this._tileZoom;\n var tile = this._tiles[this._tileCoordsToKey(coords)];\n if (!tile || !tile.loaded) return null;\n try {\n var canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n var context = canvas.getContext(\"2d\");\n context.drawImage(tile.el, -offset.x, -offset.y, size.x, size.y);\n return context.getImageData(0, 0, 1, 1).data;\n } catch (e) {\n return null;\n }\n },\n});\nL.tileLayer.colorPicker = function (url, options) {\n return new L.TileLayer.ColorPicker(url, options);\n};\n","import React, { Component } from \"react\";\nimport downloadIcon from \"./img/download.svg\";\nimport heatIcon from \"./img/heat.svg\";\nimport contourIcon from \"./img/contour.svg\";\nimport helpIcon from \"./img/info.svg\";\nimport shrinkIcon from \"./img/shrink.svg\";\nimport fullscreenIcon from \"./img/fullscreen.svg\";\nimport fontsizeIcon from \"./img/fontsize.svg\";\nimport xgraphIcon from \"./img/xgraph.svg\";\nimport ygraphIcon from \"./img/ygraph.svg\";\nimport \"./graphheader.css\";\n\nclass GraphHeader extends Component {\n componentDidMount() {\n window.addEventListener(\"keydown\", this.exitFullscreen, false);\n window.addEventListener(\"click\", this.closeDownload, false);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"keydown\", this.exitFullscreen, false);\n window.removeEventListener(\"click\", this.closeDownload, false);\n }\n\n closeDownload = (e) => {\n var { id, download } = this.props;\n if (\n download &&\n !document.getElementById(\"graphdownload\" + id).contains(e.target)\n ) {\n this.props.toggleDownload();\n }\n };\n\n exitFullscreen = (e) => {\n var { fullscreen, toggleFullscreen } = this.props;\n if (e.key === \"Escape\" && fullscreen) {\n toggleFullscreen();\n }\n };\n\n render() {\n var {\n id,\n title,\n download,\n fullscreen,\n display,\n fontSize,\n editFontSize,\n toggleXgraph,\n toggleYgraph,\n toggleDownload,\n toggleFullscreen,\n toggleDisplay,\n downloadJSON,\n downloadCSV,\n } = this.props;\n var fulllabel = \"Fullscreen\";\n var fullicon = fullscreenIcon;\n if (fullscreen) {\n fulllabel = \"Shrink Map\";\n fullicon = shrinkIcon;\n }\n var displaylabel = \"View as heat map\";\n var displayicon = heatIcon;\n if (display === \"heatmap\") {\n displaylabel = \"View as contour map\";\n displayicon = contourIcon;\n }\n return (\n \n
\n \n \n \n \n {toggleYgraph && (\n \n )}\n {toggleXgraph && (\n \n )}\n {display && (\n \n )}\n \n {fontSize && (\n \n )}\n \n \n \n \n
{title}\n \n \n \n \n \n \n \n \n
Download Graph
\n \n \n JSON\n \n \n CSV\n \n \n
\n \n
\n {[8, 10, 12, 14, 16, 18, 20, 22, 24].map((item) => (\n editFontSize(item)}\n >\n {item}\n
\n ))}\n \n
\n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Zoom X & YScroll with mouse over plot area
Zoom X axisScroll with mouse over X axis
Zoom Y axisScroll with mouse over Y axis
ResetDouble click on plot area
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default GraphHeader;\n","import React, { Component } from \"react\";\nimport * as d3 from \"d3\";\nimport \"./depthselector.css\";\n\nclass DepthSelector extends Component {\n plotLineGraph = async () => {\n try {\n d3.select(\"#depthselectorsvg\").remove();\n d3.select(\"#tooltipdepth\").remove();\n } catch (e) {}\n var {\n selectedlayers,\n depth,\n mindepth,\n maxdepth,\n onChangeDepth,\n } = this.props;\n if (selectedlayers.length > 0 && !isNaN(mindepth) && !isNaN(maxdepth)) {\n try {\n // Set graph size\n var margin = { top: 10, right: 40, bottom: 10, left: 40 },\n visheight = d3.select(\"#depthselector\").node().getBoundingClientRect()\n .height,\n viswidth = margin.left + margin.right + selectedlayers.length * 5,\n width = viswidth - margin.left - margin.right,\n height = visheight - margin.top - margin.bottom;\n\n // Format Y-axis\n var y = d3\n .scaleLinear()\n .range([0, height])\n .domain([mindepth, maxdepth]);\n var yy = d3\n .scaleLinear()\n .range([0, height])\n .domain([mindepth, maxdepth]);\n\n // Define the axes\n var yAxis = d3.axisLeft(y).ticks(5);\n\n var zoom = d3\n .zoom()\n .scaleExtent([1, 100000000])\n .extent([\n [0, 0],\n [width, height],\n ])\n .on(\"zoom\", zoomed);\n\n function zoomed(event) {\n y.domain(event.transform.rescaleY(yy).domain());\n plotdata();\n current.attr(\"cy\", y(depth));\n gY.call(yAxis);\n }\n\n // Adds the svg canvas\n var svg = d3\n .select(\"#depthselector\")\n .append(\"svg\")\n .attr(\"id\", \"depthselectorsvg\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\n \"transform\",\n \"translate(\" + margin.left + \",\" + margin.top + \")\"\n )\n .call(zoom);\n\n // Add the Y Axis\n var gY = svg\n .append(\"g\")\n .attr(\"class\", \"yaxis\")\n .attr(\"id\", \"axis--y\")\n .call(yAxis);\n\n // Add the availability data\n var bars = svg\n .append(\"g\")\n .attr(\"class\", \"bars\")\n .attr(\"id\", \"verticalbars\");\n\n function plotdata() {\n d3.select(\"#verticalbars\").selectAll(\"*\").remove();\n var array;\n for (let i = 0; i < selectedlayers.length; i++) {\n array = selectedlayers[i].files.map((x) => ({\n min: x.mindepth,\n max: x.maxdepth,\n }));\n bars\n .selectAll(\"dot\")\n .data(array)\n .enter()\n .append(\"rect\")\n .attr(\"width\", 4)\n .attr(\"height\", function (d) {\n return Math.max(1, y(d.max) - y(d.min));\n })\n .attr(\"stroke\", selectedlayers[i].color)\n .attr(\"fill\", selectedlayers[i].color)\n .attr(\"y\", function (d) {\n return y(d.min);\n })\n .attr(\"x\", function (d) {\n return i * 5 + 2;\n });\n }\n }\n\n plotdata();\n\n // Add Focus\n var focus = svg\n .append(\"g\")\n .append(\"circle\")\n .style(\"fill\", \"#F83F3F\")\n .attr(\"stroke\", \"#F83F3F\")\n .attr(\"r\", 5)\n .attr(\"cx\", 0)\n .style(\"opacity\", 0);\n\n // Add the current value\n var current = svg\n .append(\"g\")\n .append(\"circle\")\n .style(\"fill\", \"red\")\n .attr(\"stroke\", \"red\")\n .attr(\"r\", 6)\n .attr(\"cx\", 0)\n .attr(\"cy\", y(depth));\n\n // Add tooltip\n var tooltip = d3\n .select(\"#depthselector\")\n .append(\"div\")\n .attr(\"id\", \"tooltipdepth\")\n .attr(\"class\", \"tooltipdepth\");\n\n svg\n .append(\"rect\")\n .style(\"fill\", \"none\")\n .style(\"pointer-events\", \"all\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height)\n .attr(\"transform\", \"translate(-\" + margin.left + \",\" + 0 + \")\")\n .on(\"mouseover\", mouseover)\n .on(\"mousemove\", mousemove)\n .on(\"mouseout\", mouseout)\n .on(\"click\", onClick);\n\n function onClick(event) {\n var depth = y.invert(d3.pointer(event)[1]);\n depth = Math.round(depth * 100) / 100;\n current.attr(\"cy\", d3.pointer(event)[1]);\n onChangeDepth(depth);\n }\n\n function mouseover() {\n focus.style(\"opacity\", 1);\n tooltip.style(\"visibility\", \"visible\");\n }\n\n function mouseout() {\n focus.style(\"opacity\", 0);\n tooltip.style(\"visibility\", \"hidden\");\n }\n\n function mousemove(event) {\n try {\n focus.attr(\"cy\", d3.pointer(event)[1]);\n } catch (e) {}\n try {\n tooltip\n .style(\"top\", d3.pointer(event)[1] - 30 + \"px\")\n .html(tooltiptext(y.invert(d3.pointer(event)[1])))\n .style(\"left\", \"75px\");\n } catch (e) {}\n }\n\n function dataAvailable(files, depth) {\n var color = \"red\";\n for (var i = 0; i < files.length; i++) {\n if (depth >= files[i].mindepth && depth <= files[i].maxdepth)\n color = \"green\";\n }\n return color;\n }\n\n function tooltiptext(depth) {\n var depthstring = `
${\n Math.round(depth * 100) / 100\n }m below surface
`;\n var layerstring = \"\";\n for (var i = 0; i < selectedlayers.length; i++) {\n layerstring =\n layerstring +\n `` +\n ``;\n }\n layerstring = layerstring + \"
${selectedlayers[i].title}
${selectedlayers[i].name}
\";\n return depthstring + layerstring;\n }\n } catch (e) {\n console.error(\"Error plotting time selector\", e);\n }\n }\n };\n componentDidMount() {\n this.plotLineGraph();\n window.addEventListener(\"resize\", this.plotLineGraph, false);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.plotLineGraph, false);\n }\n\n componentDidUpdate(prevProps, prevState) {\n this.plotLineGraph();\n }\n render() {\n return (\n
\n
\n
\n );\n }\n}\n\nexport default DepthSelector;\n","import React, { Component } from \"react\";\nimport Calendar from \"react-calendar\";\nimport 'react-calendar/dist/Calendar.css';\nimport \"./datetimedepthselector.css\";\nimport DepthSelector from \"./depthselector\";\n\nclass TimeModal extends Component {\n scrollHour = (event) => {\n var { changeTime } = this.props;\n if (event.deltaY < 0) {\n changeTime(3600);\n } else if (event.deltaY > 0) {\n changeTime(-3600);\n }\n };\n scrollMins = (event) => {\n var { changeTime } = this.props;\n if (event.deltaY < 0) {\n changeTime(60);\n } else if (event.deltaY > 0) {\n changeTime(-60);\n }\n };\n escFunction = (event) => {\n if (event.keyCode === 27) {\n this.props.closeTime();\n }\n };\n componentDidMount() {\n document.addEventListener(\"keydown\", this.escFunction, false);\n }\n componentWillUnmount() {\n document.removeEventListener(\"keydown\", this.escFunction, false);\n }\n render() {\n var { datetime, changeTime, closeTime } = this.props;\n var hours = datetime.getHours();\n var hstring = hours < 10 ? \"0\" + hours : hours.toString();\n var mins = datetime.getMinutes();\n var mstring = mins < 10 ? \"0\" + mins : mins.toString();\n return (\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
changeTime(3600)}>\n ▲\n changeTime(60)}>\n ▲\n
{hstring}:{mstring}{hours < 12 ? \"AM\" : \"PM\"}
changeTime(-3600)}>\n ▼\n changeTime(-60)}>\n ▼\n
\n
\n
\n );\n }\n}\n\nclass DateModal extends Component {\n changeDate = (datetime) => {\n var { toggleModal, onChangeDatetime, datetime: datetimeold } = this.props;\n var hours = datetimeold.getHours();\n var mins = datetimeold.getMinutes();\n datetime = new Date(datetime.getTime() + (hours * 3600 + mins * 60) * 1000);\n toggleModal();\n onChangeDatetime(datetime);\n };\n escFunction = (event) => {\n var { toggleModal } = this.props;\n if (event.keyCode === 27) {\n toggleModal();\n }\n };\n componentDidMount() {\n document.addEventListener(\"keydown\", this.escFunction, false);\n }\n componentWillUnmount() {\n document.removeEventListener(\"keydown\", this.escFunction, false);\n }\n render() {\n var { datetime, toggleModal } = this.props;\n return (\n
\n
\n
\n
\n
\n \n
\n
\n );\n }\n}\n\nclass DepthModal extends Component {\n changeDepth = (depth) => {\n var { toggleModal, onChangeDepth } = this.props;\n toggleModal();\n onChangeDepth(depth);\n };\n escFunction = (event) => {\n if (event.keyCode === 27) {\n this.close();\n }\n };\n componentDidMount() {\n document.addEventListener(\"keydown\", this.escFunction, false);\n }\n componentWillUnmount() {\n document.removeEventListener(\"keydown\", this.escFunction, false);\n }\n render() {\n var { depth, selectedlayers, mindepth, maxdepth, toggleModal } = this.props;\n return (\n
\n
\n
\n
\n
\n \n
\n
\n );\n }\n}\n\nclass TimestepModal extends Component {\n changeTimestep = (timestep) => {\n var { toggleModal, onChangeTimestep } = this.props;\n toggleModal();\n onChangeTimestep(timestep);\n };\n\n escFunction = (event) => {\n if (event.keyCode === 27) {\n this.close();\n }\n };\n componentDidMount() {\n document.addEventListener(\"keydown\", this.escFunction, false);\n }\n componentWillUnmount() {\n document.removeEventListener(\"keydown\", this.escFunction, false);\n }\n render() {\n var { lableTimestep, timestep, toggleModal } = this.props;\n var timesteps = [\n \"Next\",\n 10,\n 20,\n 30,\n 60,\n 3 * 60,\n 6 * 60,\n 12 * 60,\n 24 * 60,\n 2 * 24 * 60,\n 7 * 24 * 60,\n 4 * 7 * 24 * 60,\n ];\n return (\n
\n
\n
\n
\n
\n
\n {timesteps.map((t) => (\n this.changeTimestep(t)}\n >\n {lableTimestep(t)}\n
\n ))}\n
\n Animation Timestep\n
\n
\n );\n }\n}\n\nclass SelectorModal extends Component {\n state = {\n datetime: this.props.datetime,\n };\n changeTime = (interval) => {\n var { datetime } = this.state;\n datetime = new Date(datetime.getTime() + interval * 1000);\n this.setState({ datetime });\n };\n closeModal = (event) => {\n var { toggleModal, onChangeDatetime } = this.props;\n if (event.target.className === \"modalfull\") {\n toggleModal();\n if (this.state.datetime.getTime() !== this.props.datetime.getTime()) {\n onChangeDatetime(this.state.datetime);\n }\n }\n };\n closeTime = () => {\n var { toggleModal, onChangeDatetime } = this.props;\n toggleModal();\n onChangeDatetime(this.state.datetime);\n };\n render() {\n var {\n datetime,\n depth,\n timestep,\n onChangeDatetime,\n onChangeTimestep,\n onChangeDepth,\n modal,\n toggleModal,\n lableTimestep,\n mindepth,\n maxdepth,\n selectedlayers,\n } = this.props;\n var { datetime: time } = this.state;\n return (\n
\n \n \n \n \n \n \n
\n {modal === \"time\" && (\n \n )}\n {modal === \"date\" && (\n \n )}\n {modal === \"depth\" && (\n \n )}\n {modal === \"timestep\" && (\n \n )}\n
\n
\n );\n }\n}\n\nexport default SelectorModal;\n","import React, { Component } from \"react\";\nimport isEqual from \"lodash/isEqual\";\nimport * as d3 from \"d3\";\nimport \"./timeselector.css\";\n\nclass TimeSelector extends Component {\n state = {\n domain: false,\n instructions: true,\n };\n updateDomain = (domain) => {\n this.domain = domain;\n };\n close = () => {\n this.setState({ instructions: false });\n };\n plotLineGraph = async () => {\n try {\n d3.select(\"#timeselectorsvg\").remove();\n d3.select(\"#tooltip\").remove();\n } catch (e) {}\n var {\n selectedlayers,\n datetime,\n mindatetime,\n maxdatetime,\n onChangeDatetime,\n } = this.props;\n var { instructions } = this.state;\n var close = this.close;\n if (selectedlayers.length && mindatetime && maxdatetime) {\n try {\n // Set graph size\n var margin = { top: 0, right: 10, bottom: 20, left: 0 },\n viswidth = d3\n .select(\"#timeselector\")\n .node()\n .getBoundingClientRect().width,\n visheight = margin.bottom + selectedlayers.length * 5,\n width = viswidth - margin.left - margin.right,\n height = visheight - margin.top - margin.bottom;\n\n // Format X-axis\n var x = d3\n .scaleTime()\n .range([0, width])\n .domain([mindatetime, maxdatetime]);\n var xx = d3\n .scaleTime()\n .range([0, width])\n .domain([mindatetime, maxdatetime]);\n\n // Define the axes\n var xAxis = d3.axisBottom(x).ticks(5);\n\n var updateDomain = this.updateDomain;\n var zoom = d3\n .zoom()\n .extent([\n [0, 0],\n [width, height],\n ])\n .on(\"zoom\", zoomed)\n .on(\"end\", zoomEnd);\n\n function zoomEnd(event) {\n if (event) {\n updateDomain(event.transform.rescaleX(xx).domain());\n if (instructions) close();\n }\n }\n\n function zoomed(event) {\n plotdata();\n if (event) {\n let d = event.transform.rescaleX(xx).domain();\n x.domain(d);\n current.attr(\"cx\", x(datetime));\n }\n gX.call(xAxis);\n }\n\n // Adds the svg canvas\n var svg = d3\n .select(\"#timeselector\")\n .append(\"svg\")\n .attr(\"id\", \"timeselectorsvg\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\n \"transform\",\n \"translate(\" + margin.left + \",\" + margin.top + \")\"\n )\n .call(zoom);\n\n // Add the X Axis\n var gX = svg\n .append(\"g\")\n .attr(\"class\", \"xaxis\")\n .attr(\"id\", \"axis--x\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis);\n\n // Add the availability data\n var bars = svg.append(\"g\").attr(\"class\", \"bars\").attr(\"id\", \"bars\");\n function plotdata() {\n d3.select(\"#bars\").selectAll(\"*\").remove();\n var array;\n for (let i = 0; i < selectedlayers.length; i++) {\n array = selectedlayers[i].files.map((x) => ({\n min: new Date(x.mindatetime),\n max: new Date(x.maxdatetime),\n }));\n bars\n .selectAll(\"dot\")\n .data(array)\n .enter()\n .append(\"rect\")\n .attr(\"height\", 4)\n .attr(\"width\", function (d) {\n return Math.max(2, x(d.max) - x(d.min));\n })\n .attr(\"stroke\", selectedlayers[i].color)\n .attr(\"fill\", selectedlayers[i].color)\n .attr(\"x\", function (d) {\n return x(d.min);\n })\n .attr(\"y\", function (d) {\n return i * 5;\n });\n }\n }\n\n plotdata();\n\n if (this.domain) {\n x.domain(this.domain);\n xx.domain(this.domain);\n zoomed(false);\n }\n\n // Add Focus\n var focus = svg\n .append(\"g\")\n .append(\"circle\")\n .style(\"fill\", \"#F83F3F\")\n .attr(\"stroke\", \"#F83F3F\")\n .attr(\"r\", 5)\n .attr(\"cy\", selectedlayers.length * 5)\n .style(\"opacity\", 0);\n\n // Add the current value\n var current = svg\n .append(\"g\")\n .append(\"circle\")\n .style(\"fill\", \"red\")\n .attr(\"stroke\", \"red\")\n .attr(\"r\", 6)\n .attr(\"cy\", selectedlayers.length * 5)\n .attr(\"cx\", x(datetime));\n\n // Add tooltip\n var tooltip = d3\n .select(\"#timeselector\")\n .append(\"div\")\n .attr(\"id\", \"tooltip\")\n .attr(\"class\", \"timetooltip\");\n\n svg\n .append(\"rect\")\n .style(\"fill\", \"none\")\n .style(\"pointer-events\", \"all\")\n .attr(\"width\", width)\n .attr(\"height\", height + margin.bottom)\n .on(\"mouseover\", mouseover)\n .on(\"mousemove\", mousemove)\n .on(\"mouseout\", mouseout)\n .on(\"click\", onClick);\n\n function onClick(event) {\n tooltip.style(\"visibility\", \"hidden\");\n focus.style(\"opacity\", 0);\n var date = x.invert(d3.pointer(event)[0]);\n if (typeof date.getMonth === \"function\") {\n onChangeDatetime(date);\n current.attr(\"cx\", d3.pointer(event)[0]);\n focus.style(\"opacity\", 0);\n }\n }\n\n function mouseover() {\n focus.style(\"opacity\", 1);\n tooltip.style(\"visibility\", \"visible\");\n }\n\n function mouseout() {\n focus.style(\"opacity\", 0);\n tooltip.style(\"visibility\", \"hidden\");\n }\n\n function mousemove(event) {\n try {\n focus.attr(\"cx\", d3.pointer(event)[0]);\n } catch (e) {}\n try {\n tooltip\n .style(\"left\", d3.pointer(event)[0] - 75 + \"px\")\n .html(tooltiptext(x.invert(d3.pointer(event)[0])))\n .style(\n \"top\",\n `-${\n d3.select(\"#tooltip\").node().getBoundingClientRect().height +\n (30 - (selectedlayers.length - 1) * 5)\n }px`\n );\n } catch (e) {}\n }\n\n function tooltiptext(datetime) {\n var months = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n var info =\n '
Hint!
Scroll in on the slider to zoom in and select a specific date time.
';\n var datestring = `
${datetime.toLocaleTimeString(\n [],\n {\n hour: \"2-digit\",\n minute: \"2-digit\",\n }\n )} ${datetime.getDate()}-${\n months[datetime.getMonth()]\n } ${datetime.getFullYear()}
`;\n var layerstring = \"\";\n for (var i = 0; i < selectedlayers.length; i++) {\n layerstring =\n layerstring +\n `` +\n ``;\n }\n layerstring = layerstring + \"
${selectedlayers[i].title}
${selectedlayers[i].name}
\";\n var string = datestring + layerstring + \"\";\n string = instructions ? info + string : string;\n return string;\n }\n } catch (e) {\n console.error(\"Error plotting time selector\", e);\n }\n }\n };\n componentDidMount() {\n this.domain = false;\n this.plotLineGraph();\n window.addEventListener(\"resize\", this.plotLineGraph, false);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.plotLineGraph, false);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (!isEqual(prevProps, this.props)) this.plotLineGraph();\n }\n render() {\n return (\n
\n
\n
\n );\n }\n}\n\nexport default TimeSelector;\n","import React, { Component } from \"react\";\nimport { setIntervalAsync } from \"set-interval-async/dynamic\";\nimport { clearIntervalAsync } from \"set-interval-async\";\nimport \"./datetimedepthselector.css\";\nimport pauseicon from \"./img/pause.svg\";\nimport playicon from \"./img/play.svg\";\nimport skipbackwardsicon from \"./img/skipbackwards.svg\";\nimport skipforwardsicon from \"./img/skipforwards.svg\";\nimport clockicon from \"./img/clock.svg\";\nimport depthicon from \"./img/depth.svg\";\nimport SelectorModal from \"./selectormodal\";\nimport TimeSelector from \"./timeselector\";\n\nclass DatetimeDepthSelector extends Component {\n state = {\n modal: false,\n play: false,\n };\n\n skipForwards = () => {\n var { datetime, timestep, onChangeDatetime, selectedlayers } = this.props;\n if (timestep === \"Next\") {\n var files = [];\n var unix = datetime.getTime();\n for (let sl of selectedlayers) {\n files = files.concat(\n sl.files.map((f) => new Date(f.mindatetime).getTime())\n );\n }\n files = files.filter((f) => f > unix);\n files.sort(function (a, b) {\n return a - b;\n });\n if (files.length < 1) {\n return;\n } else {\n onChangeDatetime(new Date(files[0]));\n }\n } else {\n onChangeDatetime(new Date(datetime.getTime() + timestep * 60 * 1000));\n }\n };\n\n skipBackwards = () => {\n var { datetime, timestep, onChangeDatetime, selectedlayers } = this.props;\n if (timestep === \"Next\") {\n var files = [];\n var unix = datetime.getTime();\n for (let sl of selectedlayers) {\n files = files.concat(\n sl.files.map((f) => new Date(f.mindatetime).getTime())\n );\n }\n files = files.filter((f) => f < unix);\n files.sort(function (a, b) {\n return a - b;\n });\n if (files.length < 1) {\n return;\n } else {\n onChangeDatetime(new Date(files[files.length - 1]));\n }\n } else {\n onChangeDatetime(new Date(datetime.getTime() - timestep * 60 * 1000));\n }\n };\n\n moveOneTimestep = async () => {\n var { datetime, timestep, maxdatetime, mindatetime, onChangeDatetime } =\n this.props;\n if (\n datetime.getTime() >= mindatetime.getTime() &&\n datetime.getTime() <= maxdatetime.getTime()\n ) {\n await onChangeDatetime(\n new Date(datetime.getTime() + timestep * 60 * 1000)\n );\n } else {\n clearIntervalAsync(this.timer);\n this.setState({ play: !this.state.play });\n }\n };\n\n togglePlay = () => {\n var { play } = this.state;\n if (!play) {\n //this.timer = d3.interval(this.moveOneTimestep, 3000);\n this.timer = setIntervalAsync(async () => {\n await this.moveOneTimestep();\n }, 1500);\n } else {\n //this.timer.stop();\n clearIntervalAsync(this.timer);\n }\n this.setState({ play: !play });\n };\n\n toggleModal = (modal) => {\n if (this.state.modal) {\n this.setState({ modal: false });\n } else {\n this.setState({ modal });\n }\n };\n\n lableTimestep = (mins) => {\n if (Number.isInteger(mins / (60 * 24 * 7))) {\n var weeks = mins / (60 * 24 * 7);\n if (weeks === 1) {\n return \"1 week\";\n } else {\n return weeks + \" weeks\";\n }\n } else if (Number.isInteger(mins / (60 * 24))) {\n var days = mins / (60 * 24);\n if (days === 1) {\n return \"1 day\";\n } else {\n return days + \" days\";\n }\n } else if (Number.isInteger(mins / 60)) {\n var hours = mins / 60;\n if (hours === 1) {\n return \"1 hour\";\n } else {\n return hours + \" hours\";\n }\n } else if (Number.isInteger(mins)) {\n return mins + \" mins\";\n } else {\n return mins;\n }\n };\n\n render() {\n var {\n datetime,\n depth,\n timestep,\n onChangeDatetime,\n onChangeDepth,\n onChangeTimestep,\n mindatetime,\n maxdatetime,\n mindepth,\n maxdepth,\n selectedlayers,\n } = this.props;\n var { modal, play } = this.state;\n return (\n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n \"Skip\n
\n \n \"Skip\n
\n {this.lableTimestep(timestep)}\n
\n
\n
\n this.toggleModal(\"depth\")}\n >\n \"depth\n {` ${depth}m`}\n
\n this.toggleModal(\"timestep\")}\n >\n \"clock\n
\n
\n
\n
\n {modal && (\n \n )}\n \n );\n }\n}\n\nexport default DatetimeDepthSelector;\n","import React, { Component } from \"react\";\nimport \"./sidebardatetime.css\";\n\nclass SidebarDatetime extends Component {\n render() {\n var { datetime, depth, showDateModal, showTimeDepthModal } = this.props;\n var months = [\n \"Jan \",\n \"Feb \",\n \"Mar \",\n \"Apr \",\n \"May \",\n \"Jun \",\n \"Jul \",\n \"Aug \",\n \"Sept \",\n \"Oct \",\n \"Nov \",\n \"Dec \",\n ];\n return (\n
\n \n \n \n \n \n \n \n \n \n \n
\n {datetime.getDate()}\n {months[datetime.getMonth()]}
{datetime.getFullYear()}
\n
\n {datetime.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}{\" \"}\n @ {depth}m\n
\n
\n );\n }\n}\n\nexport default SidebarDatetime;\n","import React, { Component } from \"react\";\nimport editlayers from \"./img/editlayers.svg\";\nimport { groups } from \"../../config.json\";\nimport drawing from \"./img/drawing.svg\";\nimport \"./layergroups.css\";\n\nclass Group extends Component {\n clickOnGroup = () => {\n var { setLayerGroup, properties, onClick } = this.props;\n if (onClick) {\n onClick();\n } else {\n var { data } = properties;\n setLayerGroup(data);\n }\n };\n render() {\n var { name, img } = this.props.properties;\n return (\n
\n {name}\n
{name}
\n
\n );\n }\n}\n\nclass LayerGroups extends Component {\n render() {\n var { setLayerGroup } = this.props;\n var lgroups = JSON.parse(JSON.stringify(groups));\n lgroups = lgroups.map((g) => {\n if (\"datetime\" in g.data) {\n g.data.datetime = new Date(g.data.datetime * 1000);\n }\n g.img = editlayers;\n return g;\n });\n return (\n
\n
\n Select an example package or add a layer to start building your own\n custom map.\n
\n
\n \n {lgroups.map((g) => (\n \n ))}\n
\n
\n );\n }\n}\n\nexport default LayerGroups;\n","import React, { Component } from \"react\";\nimport \"./legend.css\";\n\nclass RasterLegendItem extends Component {\n linearGradient = (colors) => {\n if (colors) {\n var lineargradient = [];\n for (var i = 0; i < colors.length; i++) {\n lineargradient.push(`${colors[i].color} ${colors[i].point * 100}%`);\n }\n return `linear-gradient(0deg,${lineargradient.join(\",\")})`;\n }\n };\n render() {\n var { min, max, unit, colors } = this.props;\n if (min === null) min = 0;\n if (max === null) max = 0;\n min = parseFloat(min);\n max = parseFloat(max);\n var inner = [];\n var fixedColor = false;\n var selectStyle;\n if (colors.length === 2 && colors[0].color === colors[1].color) {\n fixedColor = true;\n }\n if (fixedColor) {\n selectStyle = {\n background: colors[0].color,\n };\n inner.push(\n \n \n Fixed color\n \n );\n } else {\n selectStyle = {\n background: this.linearGradient(colors),\n border: \"1px solid black\",\n borderTop: \"22px solid white\",\n borderBottom: \"22px solid white\",\n };\n inner.push(\n \n \n ─\n {Math.round(10 * max) / 10}\n {unit}\n \n );\n inner.push(\n \n ─\n \n {Math.round(10 * ((max + min) / 2)) / 10}\n \n \n );\n inner.push(\n \n ─\n {Math.round(10 * min) / 10}\n \n );\n }\n return (\n \n {inner}\n
\n );\n }\n}\n\nexport default RasterLegendItem;\n","import React, { Component } from \"react\";\nimport \"./legend.css\";\n\nclass MarkerLegendItem extends Component {\n linearGradient = (colors) => {\n if (colors) {\n var lineargradient = [];\n for (var i = 0; i < colors.length; i++) {\n lineargradient.push(`${colors[i].color} ${colors[i].point * 100}%`);\n }\n return `linear-gradient(0deg,${lineargradient.join(\",\")})`;\n }\n };\n render() {\n var {\n min,\n max,\n unit,\n colors,\n markerFixedSize,\n markerSymbol,\n } = this.props;\n if (min === null || min === Infinity) min = 0;\n if (max === null || max === -Infinity) max = 0;\n var minSize = 10,\n maxSize = 40,\n inner = [],\n color,\n fontSize;\n\n var fixedColor = false;\n if (colors.length === 2 && colors[0].color === colors[1].color) {\n fixedColor = true;\n }\n\n if (markerFixedSize && fixedColor) {\n inner.push(\n \n \n
\n \n Fixed size and color\n \n );\n } else {\n if (colors.length < 7) {\n for (var i = colors.length - 1; i > -1; i--) {\n var value = (min + (max - min) * colors[i].point).toExponential(3);\n if (markerFixedSize) {\n fontSize = minSize;\n } else {\n fontSize = minSize + (maxSize - minSize) * (i / colors.length);\n }\n if (fixedColor) {\n color = colors[0].color;\n } else {\n // Check possibility of color bars\n if (i < colors.length - 1) {\n var color1 = colors[i].color;\n var color2 = colors[i + 1].color;\n if (color1 === color2) {\n value =\n value +\n \" - \" +\n (min + (max - min) * colors[i + 1].point).toExponential(3);\n i++;\n }\n }\n color = colors[i].color;\n }\n // Check possibility of tiny change\n if (i === 0) {\n if (colors[1].point < 0.0001) {\n continue;\n }\n }\n if (i === colors.length - 1) {\n if (1 - colors[colors.length - 2].point < 0.0001) {\n continue;\n }\n }\n inner.push(\n \n \n
\n \n {value}\n {i === 0 && unit}\n \n );\n }\n } else {\n var selectStyle = {\n background: this.linearGradient(colors),\n border: \"1px solid black\",\n borderTop: \"22px solid white\",\n borderBottom: \"22px solid white\",\n };\n inner.push(\n \n \n ─\n {Math.round(1000 * max) / 1000}\n {unit}\n \n );\n inner.push(\n \n ─\n \n {Math.round(1000 * ((max + min) / 2)) / 1000}\n \n \n );\n inner.push(\n \n ─\n {Math.round(1000 * min) / 1000}\n \n );\n }\n }\n return (\n \n {inner}\n
\n );\n }\n}\n\nexport default MarkerLegendItem;\n","import React, { Component } from \"react\";\nimport ColorManipulation from \"../colormanipulation/colormanipulation\";\nimport \"./maplayers.css\";\n\nclass EditSettings extends Component {\n state = {\n yselectindex: this.props.display.yselectindex,\n opacity: this.props.display.opacity,\n colors: this.props.display.colors,\n min: this.props.display.min,\n max: this.props.display.max,\n markerLabel: this.props.display.markerLabel,\n legend: this.props.display.legend,\n movingAverage: this.props.display.movingAverage,\n markerSymbol: this.props.display.markerSymbol,\n markerFixedSize: this.props.display.markerFixedSize,\n markerSize: this.props.display.markerSize,\n vectorArrowColor: this.props.display.vectorArrowColor,\n vectorFlowColor: this.props.display.vectorFlowColor,\n vectorArrows: this.props.display.vectorArrows,\n vectorFlow: this.props.display.vectorFlow,\n vectorMagnitude: this.props.display.vectorMagnitude,\n validpixelexpression: this.props.display.validpixelexpression,\n contour: this.props.display.contour,\n thresholds: this.props.display.thresholds,\n };\n\n capitalize = (s) => {\n if (typeof s !== \"string\") return \"\";\n return s.charAt(0).toUpperCase() + s.slice(1);\n };\n onChangeInput = (event, name) => {\n this.setState({ [name]: event.target.value });\n };\n toggle = (name) => {\n this.setState({ [name]: !this.state[name] });\n };\n localOpacityChange = (event) => {\n this.setState({ opacity: event.target.value / 100 });\n };\n localColorChange = (colors) => {\n this.setState({ colors });\n };\n resetMin = () => {\n var { datamin } = this.props.display;\n this.setState({ min: datamin });\n };\n resetMax = () => {\n var { datamax } = this.props.display;\n this.setState({ max: datamax });\n };\n localMarkerFixedSizeChange = (event) => {\n var markerFixedSize = false;\n if (event.target.value === \"true\") markerFixedSize = true;\n this.setState({ markerFixedSize });\n };\n localVectorArrowColorChange = (event) => {\n var vectorArrowColor = false;\n if (event.target.value === \"true\") vectorArrowColor = true;\n this.setState({ vectorArrowColor });\n };\n updateDisplay = () => {\n var variables = [\n \"yselectindex\",\n \"opacity\",\n \"colors\",\n \"min\",\n \"max\",\n \"markerLabel\",\n \"legend\",\n \"movingAverage\",\n \"markerSymbol\",\n \"markerFixedSize\",\n \"markerSize\",\n \"vectorArrowColor\",\n \"vectorFlowColor\",\n \"vectorArrows\",\n \"vectorFlow\",\n \"vectorMagnitude\",\n \"validpixelexpression\",\n \"contour\",\n \"thresholds\",\n ];\n var { display, onUpdate, displayGroup } = this.props;\n\n for (let variable of variables) {\n display[variable] = this.state[variable];\n }\n\n var index = displayGroup.findIndex((x) => x.id === display.id);\n displayGroup[index] = display;\n onUpdate(displayGroup);\n };\n\n render() {\n var {\n yselectindex,\n opacity,\n colors,\n min,\n max,\n markerLabel,\n legend,\n movingAverage,\n markerSymbol,\n markerFixedSize,\n markerSize,\n vectorArrowColor,\n vectorFlowColor,\n vectorArrows,\n vectorFlow,\n vectorMagnitude,\n validpixelexpression,\n contour,\n thresholds,\n } = this.state;\n var { removeSelected, id, display: displayProps } = this.props;\n var { mapplot, datasetparameters, data } = displayProps;\n if (min === null) min = 0;\n if (max === null) max = 0;\n var { array } = displayProps;\n var type = datasetparameters.map((dp) => dp.axis + \"&\" + dp.parameters_id);\n if (!yselectindex) yselectindex = 0;\n var yselectparam = datasetparameters.find((dp) => dp.axis === \"y\");\n var vpe = \"\";\n if (\"vpe\" in data) vpe = data.vpe;\n return (\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
Min:\n this.onChangeInput(e, \"min\")}\n />\n \n
\n \n
\n
Max:\n this.onChangeInput(e, \"max\")}\n />\n \n
\n \n
\n
\n
\n {type.includes(\"x&1\") &&\n !type.includes(\"y&2\") &&\n type.join(\",\").includes(\"z&\") && (\n
\n {this.capitalize(yselectparam.parseparameter) + \" \"}\n this.onChangeInput(e, \"yselectindex\")}\n >\n {data.y.map((d, index) => (\n \n ))}\n \n {\" \" + yselectparam.unit}\n
\n )}\n {[\"raster\", \"group\"].includes(mapplot) &&\n validpixelexpression === \"NA\" && (\n
\n
Raster Options
\n \n \n \n \n \n \n \n \n \n \n \n
Contour (Beta)\n this.toggle(\"contour\")}\n />\n
No. Contours\n this.onChangeInput(e, \"thresholds\")}\n />\n
\n
\n )}\n {[\"marker\", \"group\"].includes(mapplot) && (\n
\n
Marker Options
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Symbol\n this.onChangeInput(e, \"markerSymbol\")}\n >\n \n \n \n \n \n
Size\n \n \n \n \n \n {markerFixedSize && (\n this.onChangeInput(e, \"markerSize\")}\n />\n )}\n
Show Labels\n this.toggle(\"markerLabel\")}\n >\n
\n
\n )}\n {[\"field\", \"group\"].includes(mapplot) && (\n
\n
Field Options
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n this.toggle(\"vectorMagnitude\")}\n >\n Magnitude Raster
\n this.toggle(\"vectorArrows\")}\n >\n Directional Arrows\n \n \n \n \n
\n this.toggle(\"vectorFlow\")}\n >\n Flow Path\n this.onChangeInput(e, \"vectorFlowColor\")}\n >\n \n \n \n \n \n
Opacity\n \n %\n
\n
\n )}\n {movingAverage && (\n
\n \n \n \n \n \n \n \n
Moving Averge:\n this.onChangeInput(e, \"movingAverage\")}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n )}\n {validpixelexpression !== \"NA\" && (\n
\n \n \n \n \n \n \n \n \n \n \n
Valid Pixel Expression:\n this.toggle(\"validpixelexpression\")}\n />\n
{vpe}
\n
\n )}\n
Color Options
\n \n Show in Legend{\" \"}\n this.toggle(\"legend\")}\n >\n
\n \n Update Plot\n \n {removeSelected && (\n removeSelected(id)}\n >\n Delete Layer\n \n )}\n
\n
\n );\n }\n}\n\nexport default EditSettings;\n","import React, { Component } from \"react\";\nimport EditSettings from \"./editsettings\";\nimport { sortableHandle } from \"react-sortable-hoc\";\nimport settings_img from \"./img/settings.svg\";\nimport \"./maplayers.css\";\n\nconst DragHandle = sortableHandle(({ inner }) => (\n
{inner}
\n));\n\nclass LayerObject extends Component {\n state = {\n open: this.props.defaultOpen,\n settings: false,\n };\n toggleOpen = () => {\n this.setState({ open: !this.state.open });\n };\n toggleSettings = () => {\n this.setState({ settings: !this.state.settings });\n };\n render() {\n var { open, settings } = this.state;\n var {\n id,\n title,\n parameter_name,\n color,\n content,\n allowSettings,\n display,\n displayGroup,\n removeSelected,\n onUpdate,\n toggleLayerView,\n } = this.props;\n return (\n
\n
\n \n \n \n \n {open ? \"▿\" : \"▹\"}\n \n \n \n {allowSettings && (\n \n \n \n )}\n \n \n
\n {\" \"}\n toggleLayerView(id)}\n checked={display.visible}\n />\n \n \n
\n {parameter_name}\n
\n
\n \n {content}\n
\n
\n\n \n \n
\n
\n );\n }\n}\n\nexport default LayerObject;\n","import React, { Component } from \"react\";\nimport \"./maplayers.css\";\nimport {\n SortableContainer,\n SortableElement,\n arrayMove,\n} from \"react-sortable-hoc\";\nimport RasterLegendItem from \"../legend/rasterlegenditem\";\nimport MarkerLegendItem from \"../legend/markerlegenditem\";\nimport LayerObject from \"./layerobject\";\nimport { urlFromSsh } from \"../../functions\";\n\nclass GroupDisplay extends Component {\n state = {};\n render() {\n var { display } = this.props;\n var {\n mapplot,\n min,\n max,\n datasetparameters,\n datasourcelink,\n datasource,\n description,\n colors,\n markerFixedSize,\n markerSymbol,\n parameters_id,\n ssh,\n } = display;\n var datasetparameter = datasetparameters.find(\n (dp) => dp.parameters_id === parameters_id\n );\n var link = datasourcelink;\n if (ssh !== undefined) link = urlFromSsh(ssh);\n var { unit } = datasetparameter;\n var inner =
;\n if (mapplot === \"marker\")\n inner = (\n \n );\n if (mapplot === \"raster\")\n inner = (\n \n );\n if (mapplot === \"field\")\n inner = (\n \n );\n return (\n
\n
{description}
\n {inner}\n Source:{\" \"}\n \n {datasource}\n \n
\n );\n }\n}\n\nconst SortableItem = SortableElement(({ layer, props }) => {\n var { id, title, name, color } = layer;\n var { selectedlayers, removeSelected, updateMapLayers, toggleLayerView } =\n props;\n return (\n
  • \n }\n />\n
  • \n );\n});\n\nconst SortableList = SortableContainer(({ props }) => {\n var { selectedlayers } = props;\n return (\n
      \n {selectedlayers.map((layer, index) => (\n \n ))}\n
    \n );\n});\n\nclass MapLayers extends Component {\n onSortEnd = ({ oldIndex, newIndex }) => {\n var { selectedlayers, setSelected } = this.props;\n selectedlayers = arrayMove(selectedlayers, oldIndex, newIndex);\n setSelected(selectedlayers);\n };\n\n render() {\n return (\n \n );\n }\n}\n\nexport default MapLayers;\n","import React, { Component } from \"react\";\nimport \"./addlayers.css\";\nimport FilterBox from \"../filterbox/filterbox\";\n\nclass AddLayersInnerInner extends Component {\n state = {\n open: false,\n };\n toggle = () => {\n this.setState({ open: !this.state.open });\n };\n getLake = (id) => {\n var { lakes } = this.props;\n return lakes.find((l) => l.id === id).name;\n };\n formatDate = (datetime) => {\n var a = new Date(datetime);\n var year = a.getFullYear();\n var month = a.getMonth() + 1;\n var date = a.getDate();\n return `${date < 10 ? \"0\" + date : date}.${\n month < 10 ? \"0\" + month : month\n }.${String(year).slice(-2)}`;\n };\n render() {\n var { open } = this.state;\n var { parameters_id, parameters, datasets_ids, datasets, addSelected } =\n this.props;\n var parameter = parameters.find((p) => p.id === parameters_id);\n var subdatasets = datasets.filter((d) => datasets_ids.includes(d.id));\n\n return (\n
    \n
    \n
    {parameter.name}
    \n
    \n {open ? \"-\" : \"+\"}\n
    \n
    \n\n {open && (\n
    \n {subdatasets.map((sd) => {\n return (\n \n addSelected([{ datasets_id: sd.id, parameters_id }])\n }\n className=\"addlayers-detail\"\n key={sd.id}\n title=\"Add layer\"\n >\n \n \n \n \n \n \n \n \n
    {sd.title}{this.getLake(sd.lakes_id)}\n {this.formatDate(sd.mindatetime)} :{\" \"}\n {this.formatDate(sd.maxdatetime)}\n
    \n
    \n );\n })}\n
    \n )}\n
    \n );\n }\n}\n\nclass AddLayersInner extends Component {\n render() {\n var { datasets, parameters, datasetparameters, addSelected, type } =\n this.props;\n\n var subdatasets = datasets.filter((d) => d.origin === type);\n var ids = subdatasets.map((s) => s.id);\n\n var subparameters = datasetparameters.filter(\n (p) =>\n ids.includes(p.datasets_id) &&\n ![1, 2, 3, 4, 27, 28, 29, 30].includes(p.parameters_id)\n );\n\n function filterparam(pid, params) {\n return params.filter((p) => p.parameters_id === pid);\n }\n\n function paramIndex(pid, params) {\n return params.findIndex((p) => p.parameters_id === pid);\n }\n\n var paramd = [];\n for (var i = 0; i < subparameters.length; i++) {\n var pd = filterparam(subparameters[i].parameters_id, paramd);\n if (pd.length === 0) {\n paramd.push({\n parameters_id: subparameters[i].parameters_id,\n datasets: [subparameters[i].datasets_id],\n });\n } else {\n var index = paramIndex(subparameters[i].parameters_id, paramd);\n paramd[index].datasets.push(subparameters[i].datasets_id);\n }\n }\n\n return (\n
    \n {paramd.map((param) => (\n \n ))}\n
    \n );\n }\n}\n\nclass AddLayers extends Component {\n state = {};\n render() {\n var { datasets, parameters, datasetparameters, addSelected } = this.props;\n return (\n
    \n \n }\n />\n \n }\n />\n \n }\n />\n
    \n );\n }\n}\n\nexport default AddLayers;\n","import React, { Component } from \"react\";\nimport \"./legend.css\";\nimport MarkerLegendItem from \"./markerlegenditem\";\nimport RasterLegendItem from \"./rasterlegenditem\";\n\nclass Legend extends Component {\n render() {\n var { selectedlayers, toggleLegend, open } = this.props;\n var legendmaplayers = selectedlayers.filter((layer) => layer.legend);\n var inner = [];\n var l;\n for (var i = 0; i < legendmaplayers.length; i++) {\n l = legendmaplayers[i];\n if (l.mapplot === \"marker\") {\n inner.push(\n
    \n {l.title}\n
    {l.name}
    \n \n
    {l.realdatetime.toString()}
    \n
    Depth: {Math.round(l.realdepth * 100) / 100}m
    \n \n {l.datasource}\n \n
    \n );\n }\n if (l.mapplot === \"raster\") {\n inner.push(\n
    \n {l.title}\n
    {l.name}
    \n \n
    {l.realdatetime.toString()}
    \n
    Depth: {Math.round(l.realdepth * 100) / 100}m
    \n \n {l.datasource}\n \n
    \n );\n }\n if (l.mapplot === \"field\") {\n inner.push(\n
    \n {l.title}\n
    {l.name}
    \n \n
    {l.realdatetime.toString()}
    \n
    Depth: {Math.round(l.realdepth * 100) / 100}m
    \n \n {l.datasource}\n \n
    \n );\n }\n }\n if (inner.length > 0) {\n return (\n
    \n \n
    Legend
    \n
    \n\n
    \n {inner}\n
    \n
    \n );\n } else {\n return
    ;\n }\n }\n}\n\nexport default Legend;\n","import React, { Component } from \"react\";\nimport L from \"leaflet\";\nimport \"./leaflet_colorpicker\";\nimport \"./css/leaflet.css\";\n\nclass MiniMap extends Component {\n state = {\n id: Math.round(Math.random() * 100000),\n };\n componentDidMount() {\n var center = [46.501, 7.992];\n if (\"center\" in this.props) {\n center = this.props.center;\n }\n var zoom = 6;\n if (\"zoom\" in this.props) {\n zoom = this.props.zoom - 4;\n }\n\n if (\"basemap\" in this.props) {\n var { basemap, basemaps } = this.props;\n this.layer = L.tileLayer(basemaps[basemap].url, {\n attribution: basemaps[basemap].attribution,\n });\n }\n\n var zoomControl = false;\n\n this.map = L.map(\"minimap_\" + this.state.id, {\n preferCanvas: true,\n scrollWheelZoom: false,\n dragging: false,\n zoomControl,\n center: center,\n zoom: zoom,\n minZoom: 4,\n maxZoom: 15,\n });\n this.layer.addTo(this.map);\n }\n\n componentDidUpdate() {\n var { center, zoom } = this.props;\n this.map.setView(center, zoom);\n }\n\n render() {\n var { id } = this.state;\n var { basemap, onChangeBasemap } = this.props;\n return (\n \n {\n onChangeBasemap(basemap);\n }}\n >
    \n \n );\n }\n}\n\nexport default MiniMap;","import React, { Component } from \"react\";\nimport MiniMap from \"../../graphs/leaflet/minimap\";\nimport \"./basemapselector.css\";\n\nclass BasemapSelector extends Component {\n shuffle = (arr, basemap) => {\n var list = [];\n var idx = arr.indexOf(basemap);\n for (let i = idx + 1; i < arr.length; i++) list.push(arr[i]);\n for (let i = 0; i < idx; i++) list.push(arr[i]);\n return list;\n };\n render() {\n var { center, zoom, onChangeBasemap, basemaps, basemap } = this.props;\n var list = this.shuffle(Object.keys(basemaps), basemap);\n return (\n
    \n {list.map((b, index) => (\n \n \n
    {basemaps[b].title}
    \n
    \n ))}\n
    \n );\n }\n}\n\nexport default BasemapSelector;\n","import React, { Component } from \"react\";\nimport axios from \"axios\";\nimport { apiUrl, basemaps } from \"../../config.json\";\nimport Basemap from \"./basemap\";\nimport DatetimeDepthSelector from \"../../components/datetimedepthselector/datetimedepthselector\";\nimport SidebarDatetime from \"../../components/sidebardatetime/sidebardatetime\";\nimport LayerGroups from \"../../components/layergroups/layergroups\";\nimport MapLayers from \"../../components/maplayers/maplayers\";\nimport AddLayers from \"../../components/addlayers/addlayers\";\nimport Legend from \"../../components/legend/legend\";\nimport colorlist from \"../../components/colorramp/colors\";\nimport \"./css/gis.css\";\nimport Loading from \"../../components/loading/loading\";\nimport BasemapSelector from \"../../components/basemapselector/basemapselector\";\nimport { Calendar } from \"react-calendar\";\n\nclass Modal extends Component {\n state = {};\n preventClose = (event) => {\n event.stopPropagation();\n };\n render() {\n var { title, content, visible, hide } = this.props;\n return (\n
    \n
    \n
    \n {title}\n
    \n ×\n
    \n
    \n
    \n {content}\n
    \n
    \n
    \n );\n }\n}\n\nclass TimeDepth extends Component {\n state = {\n time: `${this.props.datetime.getHours()}:${this.props.datetime.getMinutes()}`,\n depth: this.props.depth,\n };\n onChangeTime = (event) => {\n this.setState({ time: event.target.value });\n };\n\n onChangeDepth = (event) => {\n this.setState({ depth: event.target.value });\n };\n\n update = () => {\n var { time, depth } = this.state;\n this.props.onChangeDepth(depth);\n var datetime = new Date(this.props.datetime.getTime());\n var time_arr = time.split(\":\");\n datetime.setHours(time_arr[0]);\n datetime.setMinutes(time_arr[1]);\n this.props.onChangeDatetime(datetime);\n };\n\n componentDidUpdate = (prevProps) => {\n if (prevProps.datetime !== this.props.datetime) {\n this.setState({\n time: `${this.props.datetime.getHours()}:${this.props.datetime.getMinutes()}`,\n });\n }\n if (prevProps.depth !== this.props.depth) {\n this.setState({\n depth: this.props.depth,\n });\n }\n };\n\n render() {\n return (\n
    \n \n \n m\n
    \n );\n }\n}\n\nclass GIS extends Component {\n state = {\n menu: window.screen.width < 900 ? false : true,\n layersModal: false,\n dateModal: false,\n timeDepthModal: false,\n selectedlayers: [],\n parameters: [],\n datasets: [],\n downloads: [],\n datasetparameters: [],\n loading: true,\n selected: [],\n hidden: [],\n datetime: new Date(),\n depth: 1,\n timestep: 180,\n center: [46.85, 7.55],\n zoom: 9,\n basemap: \"datalakesmap\",\n modal: false,\n modaltext: \"\",\n modaldetail: \"\",\n lakejson: false,\n plotDatasets: false,\n legend: false,\n };\n\n togglePlotDataset = () => {\n this.setState({ plotDatasets: !this.state.plotDatasets });\n };\n\n hideMenu = () => {\n this.setState({ menu: false }, () => {\n window.dispatchEvent(new Event(\"resize\"));\n });\n };\n\n showMenu = () => {\n this.setState({ menu: true }, () => {\n window.dispatchEvent(new Event(\"resize\"));\n });\n };\n\n toggleLegend = () => {\n this.setState({ legend: !this.state.legend });\n };\n\n hideTimeDepthModal = () => {\n this.setState({ timeDepthModal: false });\n };\n\n showTimeDepthModal = () => {\n this.setState({ timeDepthModal: true });\n };\n\n hideDateModal = () => {\n this.setState({ dateModal: false });\n };\n\n showDateModal = () => {\n this.setState({ dateModal: true });\n };\n\n hideLayersModal = () => {\n this.setState({ layersModal: false });\n };\n\n showLayersModal = () => {\n this.setState({ layersModal: true });\n };\n\n closeModal = () => {\n this.setState({ modal: false, modaltext: \"\" });\n };\n\n updateLocation = (zoom, center) => {\n if (zoom !== this.state.zoom || center !== this.state.center) {\n this.setState({ zoom, center });\n }\n };\n\n updateState = async (newState) => {\n this.setState({ loading: true }, async () => {\n if (\"selected\" in newState) {\n var {\n datasets,\n datasetparameters,\n parameters,\n datetime,\n depth,\n hidden,\n lakejson,\n } = this.state;\n var { selected } = newState;\n if (\"datetime\" in newState) datetime = newState.datetime;\n var selectedlayers = [];\n var fixedSelected = JSON.parse(JSON.stringify(selected));\n for (var i = 0; i < fixedSelected.length; i++) {\n var datasets_id = fixedSelected[i][0];\n var parameters_id = fixedSelected[i][1];\n ({ selectedlayers, datasets, selected, lakejson } =\n await this.addNewLayer(\n selected,\n datasets_id,\n parameters_id,\n datasets,\n selectedlayers,\n datasetparameters,\n parameters,\n datetime,\n depth,\n hidden,\n lakejson\n ));\n }\n var { mindatetime, maxdatetime, mindepth, maxdepth } =\n this.getSliderParameters(selectedlayers);\n newState[\"selectedlayers\"] = selectedlayers;\n newState[\"datasets\"] = datasets;\n }\n newState[\"loading\"] = false;\n this.setState({\n mindatetime,\n maxdatetime,\n mindepth,\n maxdepth,\n lakejson,\n plotDatasets: false,\n });\n this.setState(newState);\n });\n };\n\n onChangeTimestep = (timestep) => {\n if (timestep !== this.state.timestep) {\n this.setState({ timestep });\n }\n };\n\n onChangeDatetime = async (datetime) => {\n if (datetime.getTime() !== this.state.datetime.getTime()) {\n var { depth } = this.state;\n await this.updateVariable(datetime, depth);\n }\n };\n\n onChangeDepth = async (depth) => {\n if (depth !== this.state.depth) {\n var { datetime } = this.state;\n this.setState({ depth }, async () => {\n this.updateVariable(datetime, depth);\n });\n }\n };\n\n onChangeBasemap = (basemap) => {\n this.setState({ basemap });\n };\n\n setSelected = (selectedlayers) => {\n this.setState({ loading: true }, () => {\n var selected = [];\n for (var i = 0; i < selectedlayers.length; i++) {\n selected.push([\n selectedlayers[i].datasets_id,\n selectedlayers[i].parameters_id,\n ]);\n }\n this.setState({ selectedlayers, selected, loading: false });\n });\n };\n\n addSelected = async (ids) => {\n this.setState({ loading: true }, async () => {\n var {\n datasets,\n selected,\n selectedlayers,\n datasetparameters,\n parameters,\n datetime,\n depth,\n hidden,\n lakejson,\n } = this.state;\n for (var i = 0; i < ids.length; i++) {\n var { datasets_id, parameters_id } = ids[i];\n if (\n JSON.stringify(selected).indexOf(\n JSON.stringify([datasets_id, parameters_id])\n ) === -1\n ) {\n selected.unshift([datasets_id, parameters_id]);\n }\n ({ selectedlayers, datasets, selected, lakejson } =\n await this.addNewLayer(\n selected,\n datasets_id,\n parameters_id,\n datasets,\n selectedlayers,\n datasetparameters,\n parameters,\n datetime,\n depth,\n hidden,\n lakejson\n ));\n }\n var { mindatetime, maxdatetime, mindepth, maxdepth } =\n this.getSliderParameters(selectedlayers);\n this.setState({\n selectedlayers,\n selected,\n datasets,\n loading: false,\n mindatetime,\n maxdatetime,\n mindepth,\n maxdepth,\n lakejson,\n });\n });\n };\n\n removeSelected = (id) => {\n var dp = id.split(\"&\");\n this.setState({ loading: true }, () => {\n var { selectedlayers, selected, hidden } = this.state;\n selectedlayers = selectedlayers.filter((x) => x.id !== id);\n selected = selected.filter(\n (x) =>\n parseInt(x[0]) !== parseInt(dp[0]) ||\n parseInt(x[1]) !== parseInt(dp[1])\n );\n hidden = hidden.filter(\n (x) =>\n parseInt(x[0]) !== parseInt(dp[0]) ||\n parseInt(x[1]) !== parseInt(dp[1])\n );\n this.setState({ selectedlayers, selected, hidden, loading: false });\n });\n };\n\n toggleLayerView = (id) => {\n this.setState({ loading: true }, () => {\n var { selectedlayers, hidden } = this.state;\n var index = selectedlayers.findIndex((x) => x.id === id);\n var visible = !selectedlayers[index].visible;\n selectedlayers[index].visible = visible;\n var idArr = id.split(\"&\");\n var idParse = [parseInt(idArr[0]), parseInt(idArr[1])];\n if (visible) {\n hidden = hidden.filter(\n (h) => h[0] !== idParse[0] && h[1] !== idParse[1]\n );\n } else {\n hidden.push(idParse);\n }\n this.setState({ selectedlayers, hidden, loading: false });\n });\n };\n\n updateMapLayers = (selectedlayers) => {\n this.setState({ loading: true }, () => {\n this.setState({ selectedlayers, loading: false });\n });\n };\n\n updateBaseMap = (event) => {\n this.setState({ basemap: event.target.value });\n };\n\n simstratMinMax = (array, parameters_id) => {\n var type = \"surface\";\n if (parameters_id === 56) type = \"bottom\";\n var filearray;\n if (Object.keys(array).includes(\"time\")) {\n filearray = [];\n for (var key in array) {\n if (key !== \"time\") {\n filearray = filearray.concat(array[key][type]);\n }\n }\n } else {\n filearray = array.map((x) => x.value);\n }\n var filemax = this.getMax(filearray);\n var filemin = this.getMin(filearray);\n return { filemin, filemax, filearray };\n };\n\n remoteSensingMinMax = (array) => {\n array = array.v;\n var max = this.getMax(array);\n var min = this.getMin(array);\n return { filemin: min, filemax: max, filearray: array };\n };\n\n threeDmodelScalarMinMax = (inarray) => {\n var min = Infinity;\n var max = -Infinity;\n var flat = inarray[\"variables\"][\"temperature\"][\"data\"].flat();\n flat = flat.filter((item) => item !== null);\n min = Math.min(min, this.getMin(flat));\n max = Math.max(max, this.getMax(flat));\n return { filemin: min, filemax: max, filearray: flat };\n };\n\n threeDmodelVectorMinMax = (inarray) => {\n var min = Infinity;\n var max = -Infinity;\n var flat_u = inarray[\"variables\"][\"u\"][\"data\"].flat();\n var flat_v = inarray[\"variables\"][\"u\"][\"data\"].flat();\n var flat = []\n for (let i = 0; i < flat_u.length; i++){\n if (flat_u !== null){\n flat.push(Math.abs(Math.sqrt(Math.pow(flat_u[i], 2) + Math.pow(flat_v[i], 2))))\n }\n }\n min = Math.min(min, this.getMin(flat));\n max = Math.max(max, this.getMax(flat));\n return { filemin: min, filemax: max, filearray: flat };\n };\n\n gitPlotMinMax = (data, parameters_id, datasetparameters) => {\n var datasetparameter = datasetparameters.find(\n (dp) => dp.parameters_id === parameters_id\n );\n var array = data[datasetparameter.axis].flat();\n var min = this.getMin(array);\n var max = this.getMax(array);\n return { filemin: min, filemax: max, filearray: array };\n };\n\n getMinMax = (data, parameters_id, datasetparameters, mapplotfunction) => {\n var min = Infinity;\n var max = -Infinity;\n var array = [];\n var filemin, filemax;\n var filearray = [];\n\n if (mapplotfunction === \"gitPlot\") {\n ({ filemin, filemax, filearray } = this.gitPlotMinMax(\n data,\n parameters_id,\n datasetparameters\n ));\n }\n if (mapplotfunction === \"simstrat\") {\n ({ filemin, filemax, filearray } = this.simstratMinMax(\n data,\n parameters_id\n ));\n }\n if (mapplotfunction === \"remoteSensing\") {\n ({ filemin, filemax, filearray } = this.remoteSensingMinMax(data));\n }\n if (mapplotfunction === \"meteolakes\" || mapplotfunction === \"datalakes\") {\n if (parameters_id === 25) {\n ({ filemin, filemax, filearray } = this.threeDmodelVectorMinMax(data));\n } else {\n ({ filemin, filemax, filearray } = this.threeDmodelScalarMinMax(data));\n }\n }\n\n if (filemin < min) min = filemin;\n if (filemax > max) max = filemax;\n array = array.concat(filearray);\n return { min, max, array };\n };\n\n getMax = (arr) => {\n let len = arr.length;\n let max = -Infinity;\n\n while (len--) {\n max = arr[len] > max ? arr[len] : max;\n }\n return max;\n };\n\n getMin = (arr) => {\n let len = arr.length;\n let min = Infinity;\n\n while (len--) {\n min = arr[len] < min ? arr[len] : min;\n }\n return min;\n };\n\n parseColor = (colorname) => {\n var defaultColors = [\n { color: \"#0000ff\", point: 0 },\n { color: \"#ff0000\", point: 1 },\n ];\n var colorparse = colorlist.find((c) => c.name === colorname);\n if (colorparse) {\n return colorparse.data;\n } else {\n return defaultColors;\n }\n };\n\n parseBoolean = (bool) => {\n if (bool === \"true\") {\n return true;\n } else {\n return false;\n }\n };\n\n closestFile = (datetime, depth, files) => {\n var time = new Date(datetime).getTime() / 1000;\n var array = [];\n for (var i = 0; i < files.length; i++) {\n var fileid = files[i].id;\n var mintime = new Date(files[i].mindatetime).getTime() / 1000;\n var maxtime = new Date(files[i].maxdatetime).getTime() / 1000;\n var mindepth = files[i].mindepth;\n var maxdepth = files[i].maxdepth;\n var timedistance;\n if (time > mintime && time < maxtime) {\n timedistance = 0;\n } else {\n timedistance = Math.min(\n Math.abs(mintime - time),\n Math.abs(maxtime - time)\n );\n }\n var depthdistance;\n if (depth > mindepth && depth < maxdepth) {\n depthdistance = 0;\n } else {\n depthdistance = Math.min(\n Math.abs(mindepth - depth),\n Math.abs(maxdepth - depth)\n );\n }\n array.push({ fileid, timedistance, depthdistance });\n }\n array.sort((a, b) => {\n if (a.timedistance > b.timedistance) {\n return 1;\n } else if (a.timedistance === b.timedistance) {\n if (a.depthdistance > b.depthdistance) {\n return 1;\n } else {\n return -1;\n }\n } else {\n return -1;\n }\n });\n return array[0].fileid;\n };\n\n layervisible = (datasets_id, parameters_id, hidden) => {\n var visible = true;\n for (var i = 0; i < hidden.length; i++) {\n if (datasets_id === hidden[i][0] && parameters_id === hidden[i][1]) {\n visible = false;\n }\n }\n return visible;\n };\n\n getSliderParameters = (selectedlayers) => {\n var files = [];\n var mindatetime = Infinity;\n var maxdatetime = -Infinity;\n var mindepth = 0;\n var maxdepth = 100;\n for (var i = 0; i < selectedlayers.length; i++) {\n mindatetime = new Date(\n Math.min(mindatetime, new Date(selectedlayers[i].mindatetime))\n );\n maxdatetime = new Date(\n Math.max(maxdatetime, new Date(selectedlayers[i].maxdatetime))\n );\n maxdepth = Math.max(maxdepth, selectedlayers[i].maxdepth);\n\n files = files.concat(selectedlayers[i].files);\n }\n maxdepth = Math.min(370, maxdepth);\n if (mindatetime === Infinity)\n mindatetime = new Date().getTime() - 1209600000;\n if (maxdatetime === -Infinity) maxdatetime = new Date().getTime();\n maxdatetime = new Date(maxdatetime);\n mindatetime = new Date(mindatetime);\n return { files, mindepth, maxdepth, mindatetime, maxdatetime };\n };\n\n indexClosest = (num, arr) => {\n var index = 0;\n var diff = Math.abs(num - arr[0]);\n for (var val = 0; val < arr.length; val++) {\n var newdiff = Math.abs(num - arr[val]);\n if (newdiff < diff) {\n diff = newdiff;\n index = val;\n }\n }\n return index;\n };\n\n matlabToJavascriptDatetime = (date) => {\n return new Date((date - 719529) * 24 * 60 * 60 * 1000);\n };\n\n getInternalDatetimeAndDepth = (\n data,\n datasetparameters,\n datetime,\n depth,\n maxdepth\n ) => {\n var type = datasetparameters\n .map((dp) => dp.axis + \"&\" + dp.parameters_id)\n .join(\",\");\n var realdatetime = datetime;\n var realdepth = depth;\n var index;\n if (type.includes(\"M&1\") && type.includes(\"y&2\")) {\n // Profiler\n var dp2 = datasetparameters.find((dp) => dp.parameters_id === 1);\n var dp3 = datasetparameters.find((dp) => dp.parameters_id === 2);\n index = this.indexClosest(depth, data.y);\n realdatetime = new Date(data[dp2.axis][index] * 1000);\n realdepth = data[dp3.axis][index];\n } else if (\n type.includes(\"z&\") &&\n type.includes(\"x&1\") &&\n type.includes(\"y&2\")\n ) {\n // 2D Depth Time Dataset\n var indexx = this.indexClosest(datetime.getTime() / 1000, data[\"x\"]);\n var indexy = this.indexClosest(depth, data[\"y\"]);\n realdatetime = new Date(data[\"x\"][indexx] * 1000);\n realdepth = data[\"y\"][indexy];\n } else if (\n type.includes(\"x&1\") &&\n type.includes(\"y&\") &&\n !type.includes(\"z&\")\n ) {\n // 1D Parameter Time Dataset\n index = this.indexClosest(datetime.getTime() / 1000, data[\"x\"]);\n realdatetime = new Date(data[\"x\"][index] * 1000);\n realdepth = parseFloat(maxdepth);\n }\n return { realdatetime, realdepth };\n };\n\n getExternalDatetimeAndDepth = (data, datetime, depth, datasource, file) => {\n var realdatetime = datetime;\n var realdepth = depth;\n if (datasource === \"Meteolakes\") {\n ({ time: realdatetime, depth: realdepth } = data);\n realdepth = Math.abs(data[\"depth\"][\"data\"]);\n realdatetime = new Date(data[\"time\"])\n } else if (datasource === \"Eawag RS\") {\n realdepth = 0;\n realdatetime = new Date(file.mindatetime);\n } else if ([\"MeteoSwiss\", \"FOEN\"].includes(datasource)) {\n var coeff = 1000 * 60 * 10;\n realdepth = 0;\n realdatetime = new Date(Math.round(datetime.getTime() / coeff) * coeff);\n }\n return { realdatetime, realdepth };\n };\n\n formatDate = (date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are 0-based\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${year}${month}${day}${hours}${minutes}`;\n };\n\n downloadFile = async (\n datasets_id,\n fileid,\n file,\n source,\n datetime,\n depth,\n datasetparameters,\n dataset\n ) => {\n var { filelink } = file;\n var { downloads } = this.state;\n var downloaded = downloads.find(\n (d) =>\n d.datasets_id === datasets_id &&\n d.fileid === fileid &&\n d.datetime === datetime &&\n d.depth === depth\n );\n\n if (downloaded) {\n return {\n data: downloaded.data,\n realdatetime: downloaded.realdatetime,\n realdepth: downloaded.realdepth,\n };\n } else {\n var data, realdatetime, realdepth;\n if (source === \"internal\") {\n ({ data } = await axios.get(apiUrl + \"/files/\" + fileid + \"?get=raw\"));\n ({ realdatetime, realdepth } = this.getInternalDatetimeAndDepth(\n data,\n datasetparameters,\n datetime,\n depth,\n dataset.maxdepth\n ));\n } else {\n filelink = filelink.replace(\":datetime\", this.formatDate(datetime));\n filelink = filelink.replace(\":depth\", depth);\n ({ data } = await axios\n .get(filelink, { timeout: 5000 })\n .catch((error) => {\n console.error(error);\n let modaltext = `Failed to retrieve data from the ${dataset.datasource} API. Datalakes has no control over the availability of data from external API's, please try again later to see if the API is back online.`;\n this.setState({\n loading: false,\n modal: true,\n modaltext,\n modaldetail: error.message,\n });\n }));\n ({ realdatetime, realdepth } = this.getExternalDatetimeAndDepth(\n data,\n datetime,\n depth,\n dataset.datasource,\n file\n ));\n }\n downloads.push({\n data,\n datetime,\n depth,\n datasets_id,\n fileid,\n realdatetime,\n realdepth,\n });\n this.setState({ downloads });\n return { data, realdatetime, realdepth };\n }\n };\n\n optimisePoints = (array, colors) => {\n var min = Math.min(...array);\n var max = Math.max(...array);\n var q, val, point;\n for (var i = 0; i < colors.length; i++) {\n if (i === 0) colors[i].point = 0;\n else if (i === colors.length - 1) colors[i].point = 1;\n else {\n q = (1 / (colors.length - 1)) * i;\n val = this.quantile(array, q);\n point = (val - min) / (max - min);\n colors[i].point = point;\n }\n }\n return colors;\n };\n\n quantile = (arr, q) => {\n const sorted = arr.slice(0).sort((a, b) => a - b);\n const pos = (sorted.length - 1) * q;\n const base = Math.floor(pos);\n const rest = pos - base;\n if (sorted[base + 1] !== undefined) {\n return sorted[base] + rest * (sorted[base + 1] - sorted[base]);\n } else {\n return sorted[base];\n }\n };\n\n getColor = (selectedlayers) => {\n var usedColors = selectedlayers.map((s) => s.color);\n var colors = [\n \"#28B5F5\",\n \"#FB0000\",\n \"#0B3954\",\n \"#8F0000\",\n \"#8AD6F9\",\n \"#FF4747\",\n \"#f0a3ff\",\n \"#0075dc\",\n \"#993f00\",\n \"#4c005c\",\n \"#191919\",\n \"#005c31\",\n \"#2bce48\",\n \"#ffcc99\",\n \"#808080\",\n \"#94ffb5\",\n \"#8f7c00\",\n \"#9dcc00\",\n \"#c20088\",\n \"#003380\",\n \"#ffa405\",\n \"#ffa8bb\",\n \"#426600\",\n \"#ff0010\",\n \"#5ef1f2\",\n \"#00998f\",\n \"#e0ff66\",\n \"#740aff\",\n \"#990000\",\n \"#ffff80\",\n \"#ffff00\",\n \"#ff5005\",\n ];\n var unusedColors = colors.filter((c) => !usedColors.includes(c));\n return unusedColors[0];\n };\n\n addNewLayer = async (\n selected,\n datasets_id,\n parameters_id,\n datasets,\n selectedlayers,\n datasetparameters,\n parameters,\n datetime,\n depth,\n hidden,\n lakejson\n ) => {\n // Check layer not already loaded\n if (\n selectedlayers.filter(\n (sl) =>\n sl.datasets_id === datasets_id && sl.parameters_id === parameters_id\n ).length === 0\n ) {\n // Find index of datasets and parameters\n var dataset = datasets.find((d) => d.id === datasets_id);\n var parameter = parameters.find((p) => p.id === parameters_id);\n\n if (dataset && parameter) {\n // Get file list for dataset\n var { data: files } = await axios.get(\n apiUrl + \"/files?datasets_id=\" + datasets_id + \"&type=json\"\n );\n\n // Find closest file to datetime and depth\n var fileid = this.closestFile(datetime, depth, files);\n var datafile = files.find((f) => f.id === fileid);\n\n // Get the dataset parameter\n var dp = datasetparameters.filter((d) => d.datasets_id === datasets_id);\n\n var { data, realdatetime, realdepth } = await this.downloadFile(\n datasets_id,\n fileid,\n datafile,\n dataset.datasource,\n datetime,\n depth,\n dp,\n dataset\n );\n\n // Special case download lakejson\n if ([23].includes(datasets_id)) {\n ({ data: lakejson } = await axios.get(\n apiUrl + \"/externaldata/lakejson\"\n ));\n }\n\n // Update the parameter min and max value\n var { min, max, array } = this.getMinMax(\n data,\n parameters_id,\n dp,\n dataset.mapplotfunction\n );\n\n // Get unit\n var unit = dp.find((d) => d.parameters_id === parameters_id).unit;\n\n // Merge Plot properties, dataset and parameter\n let layer = {\n ...JSON.parse(JSON.stringify(dataset.plotproperties)),\n ...JSON.parse(JSON.stringify(parameter)),\n ...JSON.parse(JSON.stringify(dataset)),\n };\n\n // Meteolakes hack\n if (parameters_id === 25) {\n layer[\"mapplot\"] = \"field\";\n }\n\n // Moving Average for Remote Sensing\n if (dataset.mapplotfunction === \"remoteSensing\") {\n layer[\"validpixelexpression\"] = true;\n } else {\n layer[\"validpixelexpression\"] = \"NA\";\n }\n\n // Optimise colors\n var unoptimisedcolors = this.parseColor(layer.colors);\n //var optimisedcolors = this.optimisePoints(array, unoptimisedcolors);\n\n // Add Additional Parameters\n layer[\"contour\"] = false;\n layer[\"thresholds\"] = 200;\n layer[\"files\"] = files;\n layer[\"data\"] = data;\n layer[\"min\"] = min;\n layer[\"max\"] = max;\n layer[\"datamin\"] = min;\n layer[\"datamax\"] = max;\n layer[\"unit\"] = unit;\n layer[\"opacity\"] = 1;\n layer[\"array\"] = array;\n layer[\"fileid\"] = fileid;\n layer[\"datasetparameters\"] = dp;\n layer[\"datasets_id\"] = datasets_id;\n layer[\"parameters_id\"] = parameters_id;\n layer[\"realdatetime\"] = realdatetime;\n layer[\"realdepth\"] = realdepth;\n layer[\"colors\"] = unoptimisedcolors;\n layer[\"color\"] = this.getColor(selectedlayers);\n layer[\"id\"] = datasets_id.toString() + \"&\" + parameters_id.toString();\n layer[\"visible\"] = this.layervisible(\n datasets_id,\n parameters_id,\n hidden\n );\n\n selectedlayers.unshift(layer);\n } else {\n alert(\"Failed to add layer, not found in database.\");\n selected = selected.filter(\n (x) =>\n parseInt(x[0]) !== parseInt(datasets_id) ||\n parseInt(x[1]) !== parseInt(parameters_id)\n );\n }\n }\n return { selectedlayers, datasets, selected, lakejson };\n };\n\n updateVariable = async (datetime, depth) => {\n function findFileId(files, fileid) {\n return files.find((f) => f.id === fileid);\n }\n this.setState({ loading: true, datetime, depth }, async () => {\n var { selectedlayers, datasets } = this.state;\n\n for (var i = 0; i < selectedlayers.length; i++) {\n // Find closest file to datetime and depth\n var fileid = this.closestFile(datetime, depth, selectedlayers[i].files);\n var datafile = findFileId(selectedlayers[i].files, fileid);\n\n // Add data from file closes to datetime and depth\n var { data, realdatetime, realdepth } = await this.downloadFile(\n selectedlayers[i].datasets_id,\n fileid,\n datafile,\n selectedlayers[i].datasource,\n datetime,\n depth,\n selectedlayers[i].datasetparameters,\n selectedlayers[i]\n );\n\n // Update the min and max value\n var { min, max, array } = this.getMinMax(\n data,\n selectedlayers[i].parameters_id,\n selectedlayers[i].datasetparameters,\n selectedlayers[i].mapplotfunction\n );\n\n var newMax = Math.max(max, selectedlayers[i].datamax);\n var newMin = Math.min(min, selectedlayers[i].datamin);\n selectedlayers[i].data = data;\n selectedlayers[i].datamin = newMin;\n selectedlayers[i].datamax = newMax;\n selectedlayers[i].array = selectedlayers[i].array.concat(array);\n selectedlayers[i].fileid = fileid;\n selectedlayers[i][\"realdatetime\"] = realdatetime;\n selectedlayers[i][\"realdepth\"] = realdepth;\n }\n\n this.setState({\n datasets,\n selectedlayers,\n loading: false,\n });\n });\n };\n\n getSliderParameters = (selectedlayers) => {\n var files = [];\n var mindatetime = Infinity;\n var maxdatetime = -Infinity;\n var mindepth = 0;\n var maxdepth = 100;\n for (var i = 0; i < selectedlayers.length; i++) {\n mindatetime = new Date(\n Math.min(mindatetime, new Date(selectedlayers[i].mindatetime))\n );\n maxdatetime = new Date(\n Math.max(maxdatetime, new Date(selectedlayers[i].maxdatetime))\n );\n maxdepth = Math.max(maxdepth, selectedlayers[i].maxdepth);\n\n files = files.concat(selectedlayers[i].files);\n }\n maxdepth = Math.min(370, maxdepth);\n if (mindatetime === Infinity)\n mindatetime = new Date().getTime() - 1209600000;\n if (maxdatetime === -Infinity) maxdatetime = new Date().getTime();\n maxdatetime = new Date(maxdatetime);\n mindatetime = new Date(mindatetime);\n return { files, mindepth, maxdepth, mindatetime, maxdatetime };\n };\n\n updateLocation = (zoom, center) => {\n if (zoom !== this.state.zoom || center !== this.state.center) {\n this.setState({ zoom, center });\n }\n };\n\n siderbarMinDatetime = (datetime) => {\n var months = [\n \"January\",\n \"Feburary\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n return `${datetime.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })} ${datetime.getDate()} ${\n months[datetime.getMonth()]\n } ${datetime.getFullYear()}`;\n };\n\n setDefaults = () => {\n var { selected, hidden, datetime, depth, zoom, center, basemap, timestep } =\n this.state;\n var { defaults } = this.props;\n if (\"selected\" in defaults) selected = defaults.selected;\n if (\"hidden\" in defaults) hidden = defaults.hidden;\n if (\"datetime\" in defaults) datetime = defaults.datetime;\n if (\"depth\" in defaults) depth = defaults.depth;\n if (\"zoom\" in defaults) zoom = defaults.zoom;\n if (\"center\" in defaults) center = defaults.center;\n if (\"basemap\" in defaults) basemap = defaults.basemap;\n if (\"timestep\" in defaults) timestep = defaults.timestep;\n return {\n selected,\n hidden,\n datetime,\n depth,\n zoom,\n center,\n basemap,\n timestep,\n };\n };\n\n componentDidUpdate() {\n var { setDefaults } = this.props;\n if (setDefaults) {\n var {\n selected,\n hidden,\n datetime,\n depth,\n zoom,\n center,\n basemap,\n timestep,\n } = this.state;\n var defaults = {\n selected,\n hidden,\n datetime,\n depth,\n zoom,\n center,\n basemap,\n timestep,\n };\n setDefaults(defaults);\n }\n }\n\n async componentDidMount() {\n // Defaults\n var { lakejson, plotDatasets, menu, legend } = this.state;\n var { defaults } = this.props;\n var { selected, hidden, datetime, depth, zoom, center, basemap, timestep } =\n this.setDefaults();\n\n if (\"timestep\" in this.props) timestep = this.props.timestep;\n\n if (\"menu\" in defaults) {\n menu = defaults.menu === \"visible\";\n }\n\n if (\"legend\" in defaults) {\n legend = defaults.legend === \"visible\";\n }\n\n // Get data\n try {\n let server = await Promise.all([\n axios.get(apiUrl + \"/selectiontables/parameters\"),\n axios.get(apiUrl + \"/datasets\"),\n axios.get(apiUrl + \"/datasetparameters\"),\n axios.get(apiUrl + \"/selectiontables/lakes\"),\n ]);\n var parameters = server[0].data;\n var datasets = server[1].data;\n var datasetparameters = server[2].data;\n\n datasetparameters.map((dp) => {\n let param = parameters.find((p) => p.id === dp.parameters_id);\n dp.name = param.name;\n return dp;\n });\n\n var selectedlayers = [];\n for (var i = selected.length - 1; i > -1; i--) {\n var datasets_id = selected[i][0];\n var parameters_id = selected[i][1];\n ({ selectedlayers, datasets, selected, lakejson } =\n await this.addNewLayer(\n selected,\n datasets_id,\n parameters_id,\n datasets,\n selectedlayers,\n datasetparameters,\n parameters,\n datetime,\n depth,\n hidden,\n lakejson\n ));\n }\n\n var { mindatetime, maxdatetime, mindepth, maxdepth } =\n this.getSliderParameters(selectedlayers);\n\n if (selectedlayers.length === 0) plotDatasets = true;\n\n this.setState({\n selectedlayers,\n parameters,\n datasets,\n datasetparameters,\n loading: false,\n selected,\n hidden,\n datetime,\n depth,\n zoom,\n center,\n basemap,\n mindatetime,\n maxdatetime,\n mindepth,\n maxdepth,\n lakejson,\n timestep,\n lakes: server[3].data,\n plotDatasets,\n menu,\n legend,\n });\n } catch (error) {\n console.error(error);\n let modaltext = `Appologies the Datalakes API is experiencing some connectivity issues. Please wait a few minutes then try refreshing the page.`;\n this.setState({\n loading: false,\n modal: true,\n modaltext,\n modaldetail: error.message,\n });\n }\n }\n\n render() {\n var { menu, legend } = this.state;\n var hidelayerbutton = false;\n if (this.props.hidelayerbutton) hidelayerbutton = true;\n return (\n
    \n {}}\n >\n
    \n \n ☰\n
    \n {this.siderbarMinDatetime(this.state.datetime)}\n
    \n
    \n
    \n \n {this.state.selectedlayers.length === 0 ? (\n \n ) : (\n \n )}\n
    \n
    \n \n {!hidelayerbutton && (\n \n \n
    \n Available Datasets\n \n
    \n
    \n )}\n
    \n
    \n
    \n \n \n \n \n {this.state.loading && (\n
    \n
    \n \n Loading Layers\n
    \n
    \n )}\n
    \n \n }\n />\n \n }\n />\n \n }\n />\n {this.state.modaltext}
    }\n />\n
    \n );\n }\n}\n\nexport default GIS;\n","import React, { Component } from \"react\";\nimport \"./colorramp.css\";\nimport colorlist from \"./colors\";\n\nclass ColorRamp extends Component {\n state = {\n open: false,\n selected: 0,\n gradients: colorlist\n };\n toggle = () => {\n this.setState({ open: !this.state.open });\n };\n\n closeEvent = event => {\n var { open } = this.state;\n var targetClass = \"noclassselected\";\n try {\n targetClass = event.target.attributes.class.value;\n } catch (e) {}\n var classes = [\n \"colorramp-select\",\n \"colorramp-dropdown\",\n \"colorramp-option\"\n ];\n if (!classes.includes(targetClass) && open) {\n this.setState({ open: false });\n }\n };\n\n selectColorRamp = index => {\n this.setState({ selected: index, open: false });\n if (\"onChange\" in this.props) {\n var { gradients } = this.state;\n var { onChange } = this.props;\n var ramp = JSON.parse(JSON.stringify(gradients[index].data));\n onChange(ramp);\n }\n };\n\n linearGradient = colors => {\n if (colors) {\n var lineargradient = [];\n for (var i = 0; i < colors.length; i++) {\n lineargradient.push(`${colors[i].color} ${colors[i].point * 100}%`);\n }\n return `linear-gradient(90deg,${lineargradient.join(\",\")})`;\n }\n };\n\n componentDidMount() {\n window.addEventListener(\"click\", this.closeEvent);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"click\", this.closeEvent);\n }\n\n render() {\n var { gradients, selected, open } = this.state;\n var selectStyle = {\n background: this.linearGradient(gradients[selected].data)\n };\n if (\"colors\" in this.props) {\n selectStyle = {\n background: this.linearGradient(this.props.colors)\n };\n }\n\n return (\n
    \n \n
    {open ? \"<\" : \">\"}
    \n
    \n \n {gradients.map((gradient, index) => {\n var style = {\n background: this.linearGradient(gradient.data)\n };\n return (\n this.selectColorRamp(index)}\n >\n {gradient.name}\n
    \n );\n })}\n
    \n
    \n );\n }\n}\n\nexport default ColorRamp;\n","import React, { Component } from \"react\";\nimport \"./colortable.css\";\n\nclass ColorTable extends Component {\n deleteRow = (row) => {\n var { colors, onChange } = this.props;\n colors.splice(row, 1);\n onChange(colors);\n };\n\n addRow = () => {\n var { colors, onChange } = this.props;\n colors.push({ color: \"#000000\", point: 1 });\n onChange(colors);\n };\n\n updateColors = (event) => {\n var { colors, onChange } = this.props;\n var index = event.target.id;\n colors[index].color = event.target.value;\n onChange(colors);\n };\n\n updatePoint = (row, min, max) => (event) => {\n var { colors, onChange } = this.props;\n colors[row].point = (event.target.value - min) / (max - min);\n onChange(colors);\n };\n\n optimisePoints = () => {\n var { array, onChange, colors } = this.props;\n if (array) {\n var min = Math.min(...array);\n var max = Math.max(...array);\n var q, val, point;\n for (var i = 0; i < colors.length; i++) {\n if (i === 0) colors[i].point = 0;\n else if (i === colors.length - 1) colors[i].point = 1;\n else {\n q = (1 / (colors.length - 1)) * i;\n val = this.quantile(array, q);\n point = (val - min) / (max - min);\n colors[i].point = point;\n }\n }\n onChange(colors);\n document.getElementById(\"colortable\").reset();\n }\n };\n\n quantile = (arr, q) => {\n const sorted = arr.slice(0).sort((a, b) => a - b);\n const pos = (sorted.length - 1) * q;\n const base = Math.floor(pos);\n const rest = pos - base;\n if (sorted[base + 1] !== undefined) {\n return sorted[base] + rest * (sorted[base + 1] - sorted[base]);\n } else {\n return sorted[base];\n }\n };\n\n render() {\n var { array, colors } = this.props;\n var max = 1,\n min = 0;\n if (array && array.length > 0) {\n min = Math.min(...array);\n max = Math.max(...array);\n }\n\n return (\n
    \n
    \n \n \n {colors.map((color, index) => {\n var value = min + color.point * (max - min);\n return (\n \n \n \n \n \n );\n })}\n {array && (\n \n \n \n )}\n \n
    \n \n \n {index === 0 || index === colors.length - 1 ? (\n
    \n {value}\n
    \n ) : (\n \n )}\n
    \n {index !== colors.length - 1 && index !== 0 && (\n this.deleteRow(index)}\n >\n -\n \n )}\n {index === colors.length - 1 && (\n \n +\n \n )}\n
    \n \n Optimise Points\n \n
    \n
    \n
    \n );\n }\n}\n\nexport default ColorTable;\n","import React, { Component } from \"react\";\nimport * as d3 from \"d3\";\nimport \"./colorslider.css\";\n\nclass ColorSlider extends Component {\n state = {\n };\n\n histogram = (array, bins) => {\n var min = Math.min(...array);\n var max = Math.max(...array);\n var bin_width = (max - min) / bins;\n var data = [];\n var x, index;\n for (var i = 0; i < bins; i++) {\n x = min + i * bin_width;\n data.push({ x: x, y: 0 });\n }\n for (i = 0; i < array.length; i++) {\n index = Math.max(Math.ceil((array[i] - min) / bin_width) - 1, 0);\n data[index].y++;\n }\n return { bin_width: bin_width, data: data };\n };\n\n plotHistogram = async () => {\n try {\n d3.select(\"#histogramsvg\").remove();\n } catch (e) {}\n\n var { array, colors } = this.props;\n\n if (this.props.array.length > 0) {\n try {\n var bins = 500;\n\n var { bin_width, data } = this.histogram(array, bins);\n\n // Set graph size\n var histogramwidth = d3\n .select(\"#histogram\")\n .node()\n .getBoundingClientRect().width,\n histogramheight = d3\n .select(\"#histogram\")\n .node()\n .getBoundingClientRect().height,\n width = histogramwidth,\n height = histogramheight;\n\n var svg = d3\n .select(\"#histogram\")\n .append(\"svg\")\n .attr(\"id\", \"histogramsvg\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .append(\"g\");\n\n var x = d3\n .scaleLinear()\n .range([0, width])\n .domain([Math.min(...array), Math.max(...array)]);\n\n var y = d3.scaleLinear().range([height, 0]);\n y.domain([\n 0,\n d3.max(data, function(d) {\n return d.y;\n })\n ]);\n\n \n\n svg\n .selectAll(\"rect\")\n .data(data)\n .enter()\n .append(\"rect\")\n .attr(\"x\", function(d) {\n return x(d.x);\n })\n .attr(\"y\", function(d) {\n return y(d.y);\n })\n .attr(\"width\", x(bin_width))\n .attr(\"height\", function(d) {\n return height - y(d.y);\n })\n .style(\"fill\", \"#fff\");\n\n // Create gradients\n\n var defs = svg.append(\"defs\");\n defs\n .append(\"linearGradient\")\n .attr(\"id\", \"svgGradient\")\n .attr(\"x1\", \"0%\")\n .attr(\"y1\", \"0%\")\n .attr(\"x2\", \"100%\")\n .attr(\"y2\", \"0%\")\n .selectAll(\"stop\")\n .data(colors)\n .enter()\n .append(\"stop\")\n .attr(\"offset\", function(d) {\n return d.point;\n })\n .attr(\"stop-color\", function(d) {\n return d.color;\n });\n\n svg\n .append(\"g\")\n .append(\"rect\")\n .attr(\"width\", width)\n .attr(\"height\", 20)\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"fill\", \"url(#svgGradient)\");\n\n } catch (e) {\n console.error(\"Error plotting histogram\", e);\n }\n }\n };\n\n componentDidMount() {\n this.plotHistogram();\n }\n\n componentDidUpdate() {\n this.plotHistogram();\n }\n\n render() {\n return (\n
    \n
    \n
    \n );\n }\n}\n\nexport default ColorSlider;\n","import React, { Component } from \"react\";\nimport \"./colorsolid.css\";\n\nclass ColorSolid extends Component {\n updateColors = event => {\n var { onChange } = this.props;\n var colors = [\n { color: event.target.value, point: 0 },\n { color: event.target.value, point: 1 }\n ];\n onChange(colors);\n };\n\n render() {\n var { colors } = this.props;\n return (\n
    \n \n
    \n );\n }\n}\n\nexport default ColorSolid;\n","import React, { Component } from \"react\";\nimport \"./colormanipulation.css\";\nimport ColorRamp from \"../colorramp/colorramp\";\nimport ColorTable from \"../colortable/colortable\";\nimport ColorSlider from \"../colorslider/colorslider\";\nimport ColorSolid from \"../colorsolid/colorsolid\";\n\nclass ColorManipulation extends Component {\n state = {\n manipulation: \"ramp\",\n colors: [\n { color: \"#000080\", point: 0 },\n { color: \"#3366FF\", point: 0.142857142857143 },\n { color: \"#00B0DC\", point: 0.285714285714286 },\n { color: \"#009933\", point: 0.428571428571429 },\n { color: \"#FFFF5B\", point: 0.571428571428571 },\n { color: \"#E63300\", point: 0.714285714285714 },\n { color: \"#CC0000\", point: 0.857142857142857 },\n { color: \"#800000\", point: 1 },\n ],\n };\n\n setManipulation = (manipulation) => {\n if (manipulation !== this.state.manipulation) {\n this.setState({ manipulation });\n }\n };\n\n render() {\n var { manipulation } = this.state;\n var { onChange, array, colors } = this.props;\n return (\n
    \n
    \n this.setManipulation(\"solid\")}\n >\n Solid\n
    \n this.setManipulation(\"ramp\")}\n >\n Ramp\n
    \n this.setManipulation(\"table\")}\n >\n Table\n
    \n
    \n
    \n {manipulation === \"solid\" && (\n \n )}\n {manipulation === \"ramp\" && (\n \n )}\n {manipulation === \"table\" && (\n \n )}\n {manipulation === \"slider\" && (\n \n )}\n
    \n \n );\n }\n}\n\nexport default ColorManipulation;\n","module.exports = __webpack_public_path__ + \"static/media/bug.b3e48329.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo.795e5675.svg\";","module.exports = __webpack_public_path__ + \"static/media/map.243c9ff9.svg\";","module.exports = __webpack_public_path__ + \"static/media/data.ff97ade0.svg\";","module.exports = __webpack_public_path__ + \"static/media/home.77178950.svg\";","module.exports = __webpack_public_path__ + \"static/media/about.b32dda23.svg\";","module.exports = __webpack_public_path__ + \"static/media/map_2.1af6147d.svg\";","module.exports = __webpack_public_path__ + \"static/media/data_2.c4fe1dcb.svg\";","module.exports = __webpack_public_path__ + \"static/media/api_2.abd0d9d3.svg\";","module.exports = __webpack_public_path__ + \"static/media/about_2.cee26c1a.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALYAAAA1CAMAAADbCuFAAAABRFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8NAl4NAAAAanRSTlMAAQIDBQYHCQoLDBASGBkaGx4fISQnKy43ODs+QkRHVVZZW1xdX2BiY2RmaGtvcHN0dnd4e4GChoiJjZCSlJibnKCmp6m1vr/Dx8jLzM3O0dPW29zd3+Lk5ebn6+zu7/Hy8/T29/j7/P3+ntUVnQAAAAFiS0dEa1JlpZgAAAGlSURBVGje7drXUgIxFAbgiL1jb4uKHbAA9o4FG5bFggWwLajk/R9AnFlMkASC7O5wNP9lztmc7y6ZyaInoQygTO7jnETV4JrTjnJyKDRgRu9WqLV2xA8WivLdr+XtS516m34MCAkN8Ondg9Rah2XsdF6X6iGyMb7qA8nGyRGQbJwaA8nGyR6QbHxmA8nGo5axH8Lc9LLYsetMbp9zHOcM9iN/wOTv2R4kEIo9Sy1XtDhWI1nuzlx2oPD2FrO/Uj3/Tu3mhsJGaIrabQ8OG52QaggQ20eqEUBsJ6lqgNgeUo0CYm+TahgO254g1QMw7GaV2m0ZCLvVG6dPSYep7ADJtIudCQ57353J3OL6rvqRdba/1OofLJABfs4AV2PRbCpbnNuZxmHnzSZjgIvX3F0ubK0NJNuPILKDNojsowYEkL1Tg+Cx74Z5A8qYfeOtQ8DYieOV/so8AwxkG3JKpjM+pHRVsQaYc0oae3FlBMJ9W7IlW7IlW7Il+4+yi31NMJt9yeVclPJ2YzabnzfJlmzJluz/yy7hXymhU5X+V2qjcLcixIl9Atz3BOWZQt20AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAX0AAABSCAQAAAAS/cyNAAAAAmJLR0QA/4ePzL8AABeVSURBVHja7Z15gM/l9sdfM2OMJTQUiUumtLh1S1Q3IYW0WUoLRYimKCp104qSXxMV1a2bSov2ESWyDUkqS25RWcJMlH0Z+zrLc//4fmb6rOezfD8zv/H1Pc8/fOc5z/P5nOf9eZZzznMOlCSVoyndGcbrZDKFT/mQl3mQTtQJoe3KNKYD/RnJB3xGFt+xmMUsJovPeZNh9KI5VYh1ikhhQLEUvi9xKVTlUtJ5krfIZBIzyeRDXuB+ruYk4gQcR0++ZA/KoWTzIhcEaDeFS3mYj1lJvmPbf5V8ljCCi0lwbbcPY3yUvrYgdKr9vG2P9/vor3YpSUGiBC7lOZZRKPS0gcmu73JCLMO+NqPZ62FIFAu51ofoBzGD/Z7aNZdl9Kac2PpHvtqbaNNCZ6F+I5v6s3z0d1YpScF5InuINYH6tJa0WIV9Mk9wwJcoplLfU8tJUYp8qbjKRA/9cUL9R0KDfslKwY4S6cvWkGAfw9A/jR8DCGMnV5QC9BWH6Fli0C/HdqH+/DIDfVkKVqrD3BBhH7PQbyUOv1TyuLUUoK8o4LYSgn5rl35PKjPQl6RgpqZsDBn4MQn91hyMQiB5dCoF6CsO0bhEoP+SC0efMgR9ZykYqTE7Qgd+DEK/qceDrXPZw+mlAH3FIltNR7TQ/92F44syBX0nKeipbqg7/JiFfg3WhjIciaUAfUXH0KHfxJXjAJXLFPTtpaA/3M4rEeDHHPQnhiSWu0oF+lNDh/5THng6lTHoTxNHNL2EgB9j0G/v4YUPs50811obqVAK0M+jWsjQ/9kDz1tlDPp2UiiiCh6Ot4Vs4Gd+Y/exC/1yrBZfdTdPakOXyAW8whGxdrpP6K9lIkO5i5u5ghvoztPM8PCJWQ1pJ3M9wxnPLy6c7zGYziZHjDRPQ76VJANXPW5kCOMFjl3MZgz9uZhkFymsCySF9oJtW+b8ie6cWGxk+zvD2XksQr+7y/7dbIRvRq5Qf4Ev6BdQyabmya4bsCcEk9wukdPOAvGAx0FvbsPbTaj/kEcpFHJcICkMdpSCrMsfbvqIAf7GDwLHEXKLyymxA31psf/FdlCuFQV7mg/o5zjWnSb2MU54nwki50gbjm88Qn+EzzPGWR6lsDagFN5z4DtB9NMZ5cB1IuscefbbunIc5dRE3E06vfBMgetuH9CfEui5FJOFN7rdxRHAqt3K9wj91Tbv5GwEXONZCl86vsv54vM4Sa+TwLPJoqn6i24T+D6IPeiPFl73XUeuWwSuT31Af6RjDwmiZXme8EY1KRAPd7V9fSrGcoaJt4VQ94VQpLBN6OFbB67BAs9oQXIVBO+tHVH6jZZBkvz5LnPkaiBw/e4D+r2EJ1si9PGz+E4/iPDtbqo9yQf0zbv3DN/S8yuFn8TtqD29LfDcJErue4EzNbaAf6rwqvsFB9kEQf9QSFUHniaWUlV4tu+EZ8sW32qoj3NCJV8OxOZ59ldBu5McihS+FZ7G6aT0eaDpDOAzgfPk2IK+tLtbInJKbg//COXZvg0M/QtE+G4yLN2dfOm08w0XNeoJNT8KaYTmBYD+DIHnGrE3ibNabEH/edF0ny0UaT99ZeDnqUYaTWhFB24Vt2Iy9BPYIAJY/2m+4dOg00XH20+od0sUo6KXwuoA0Jfm7gFiz9mOfAdFJ5WjkGaUiKnb37BXpBX9eZXZPhxss13afEvkfkD3kaz3+W7v6HqZIujGqvsciSBScIL+OwHdH84S+JbH2iF3ZYlAv7fH3uszkLkcCtCDG/Q7e/R+aeyoPHXfLkn6kK99jEFwKThB/wlRw9XE8Uk+OpaUm3tLBPp3ufabRGdmiYaX6KBflcPiAT5Fq/e4g+3ycoH7PI1XqjPQk/SjlYIT9DuKXGuoZct1d0AHlaOSypeQb5/bHaLrWBZlD9mu7yY7l12q1ZrvcB0xRZiFB2m8w4T2T/cg/eil4AT96i7+Pxu4zrRzr8UYF1e5WrEF/WolBP3OQp8nheIg7Q79gSL/MNGOOxJY4Mg7x1UDtdL16cKRQk7ADz8iwdcZQDd68hiTXbdbn8XadqdWCUHf+ZL6JWwJpQd36J8u8s8XFZsdRCv3ISoAxwkerCNdni0sKThD//pQx1M6HxyldEIJQf8ch/46iTvwcKEPq8QFvDLwgsNA1wC6CtwtgCs8bKdKWgrO0E/0dAPBa3mDmKPjSgj6NWx7axVIixEc+qPEFtoAiwVTXl2B91EkP5kdYpioMKWQI/TzT89OeW5lFcfHHvSTRO3CDi36o9+ywNbR6QSP+urdLOdrspgmOm55gX4bsZ8hpDhsWYZr/MvEC5JTfbsShy+FHPH9B4UC/K2cSUyS5B05KdSe3nUR8QIeopXBWD4vSuiXFyKGKrJo6vCXZq6rxm6SBEjeVGpSyInCVu+trI9FP/0ILRVee2GI/TQSl9/ZtqeDH6OEvnzZfh99Hda6ohtMVwvcNwj3mY4vNSnkuErg7qhiK02jJjFLU8S4OuVD60cK8PSqgyf4pqih31sc2GUuVsvKwq7c+QbwrIBS+E8AKeR4kME/xOukkuv5zcQ0PSO+/mUh9ZIoDOAyB7eoBlEfc6F2AEupPoBiVgDI3BtICssdpJAW+JgboSt9+ygpCviaWwJGdD6K6GZRCOND6uXMAFC5LwToO+lwJKdkvXaqfwDonxZICvc58NwfFfT7+fr081jJe/SmLscE1XMxZVwSSi+3+HZwTnaJBucV+k/6BK7x4mMd36vGrwGlcFUgKeS42A8KBYf0AbTlRu4gnT7cSCvOKvZrOmZIjluzmVN9KUvtrzP8yzf0h4ag1we40Cd0H45y1XhGeJZ/+Ya+mxQk6FcXtXd9iZPLbl+xnrae2kljGH86eCwO8wmW9q7hl7xCP1E8JrrboZ/wCf1mwrP4lUIHVynkBB7XtDjw4XTXRb2QT7jU8T5+RdqSwWKtlRd9bzt2m0wmCfR1ie+mUPxhGx/Ijt72Adw/LG95jk/zT1LAzVcwKfzpKIVEFy+hdnHgA8z2aNyYyKP0pjNtuJFeDGAEk/jNNED2ZjD5uLiDvtqN11S6iTEBzPE9v2YsQ7mDa4SMjjf4gO5/bPhX+eB/W5RzSUlhro0UznXh2sx9XCjERz1GqEWI3js/2fbQxQPndtH26laedny7qj6cxexS4vmxiF4vyrk0pXCjZ61OLhtNt67/y3Q+YBjtPa+sRzF9ERr0d9q2f0oJucl5gb7XVU1x0Db+Z0vPz3DIJb9taUqhVyjtHWQCl8c29OuEmHjGXseTHaitQ6FAf6DHNqY67Jo3e+Sf7irn0pNCxxA/qK9sY4fGDHWO4oaolxg8zwZqa3Qo0D/DYxtOsULHRskfrRReDCCFeqGuJge4PZbB3y8kMdmnkK4VIEnyMpqFAn1c8gcUFScLRgePz3CKq4xLUwoLQ95MPRTL4B8ohpXyWu5xaP0p36eG07kmJOiP9gQxHNW3+zzwL/EkY79S2MUZLiHdnaRwbcjQL/SQHvYopo4h7PlHOlp6Z/gCfgugR0jQb+uhhREC/wQP/MM82rv9SaEl0DOgFF4PGfx7Y9sQdpKnYZbKvx3bThUDyOrLas2q2ick6Jf3oDKU7tPe5uEJLvQoYf9SuCOgFJJ8B1V0K58R43QRXwba+qxiGGeLLSfzkutx+giji5WMd4YEfTkKZWRjkSxwV3d1KdjsIyKlXyncFYUUbgrtCnxk03NO7Gv66/E4CzxebP6Tj+jvObryeWQ6fli5/Jv6urp3O96w2shKFjGD9xnFw/R0vUbXQ5cLyq6848I/2YX/3z7l60cK9wSWQiPxFl6Q8sqxYuetzlUMYhxz+Y1cbf7YxzayWcIkRtGfq/lbgHZPphtjWcw69qHYRQ7TyeBKy8ybQiqp1CWNNNJoQCqpMZTgICKFH0pMCueLV9qDlY2xl1slTrF3alsfOvAV1pRKcYpTmaIEvhLg+xT/pI2pXEs3hotJnNzjTcQpTv/v1COgGheuc8k73D8u3DiVXUrhT0EP5+aqLBsSn4qLN05ll9IF6HoJMbJIDB0TpziVWXL239nm6fK5FC9oVFy8wWkIk5jEDXFBeKIJZDkkn3YiKXZPpqcWXhRjlcYpMM0ojlYcJ3fajuIbXxxS9vehnlr4wmOIrjgJVIXz49AvZei/KgD3Xx74y7FTaOHc+JB4oU85aBPB7Sya0Uy4SB6n6KAvBdl93AN/O/HucGJ8SLzQ/hCDF8ah75WmCtB93QO/FGn0o/iAxKFfdqH/sQDdpa7crUWtfnsX7pq0pCMXU9Hjgbwt13Kup5XkJFrSkYusVomq3MsM1rGd35hAD4c4ueczkilMZCRNgUpkkGHStDQngwxT6ss7ybCNDnY+r/ITW9jAYkbxd8PfrmYMY8hDkcMYxhiOV80YznAbt7dkuvM5K1jDNPpR2ZPwHieDvkAV7uRVXjdxVeEBpvMrK8jiGYM3ZBGlcDsTWMoK5vGczbkE4FRGMo/fWMpk+jkE6GjHeyxjO38wjyepbfn7ZWSQQR2gJc8yhg6GvybSiU9YTjZf8ZApz3oR9GsziM+Zw8ekuwDrWdHtWA4keRw5ovOanCppTrE36n7epYFQN4leuiDvW3jaIZxBhNoyr7jlvYylnv7rWaN1uEGr8KOlqXK8YvASf0sLjvGaodZ9NrG55qIosDxO0XXGTdr1vXxDzOTHLUG0zX1cbGqvPv81cXi5E5SDYiGNi6Mm6D0aLzEl7zlCd8uss8IEjDEWz8T7TUG2/rDcSUjQLq7nsUHzbt1viW4WeefmfGijIqxuSvW5nsYW6F/PbkPAQclvvps4b78rcCaL+RYUDzpyJtp8cPsck8hWY7pNPP9zHD6Sl2xi1RXfAJ+GIo/bSAKOZyQKxcumJl7QzNj30I4uvEMeM1EoXgoE/b9TgOIHbQ5pwgoUBTQs/ntj0knnMIr/kk66wenJDvpVWI5iHw9yBvW4l0MolorXRyL0M4olGu8q1ukymjRkD4o/6EodqtKaH1EU8E8DZH9CsY/7OJsGXKXlL+lqaD8Sz2Y+rTmeWtxOLop1prUlkmvxE2oASVxNLoodprQckftmH6Io5A9W8YBuSpqLIo9hnMPJ9GAXivW699iOYgMH+ZV7uYZ0ba6UbgLL8aEL6eHAV5nxIvC3CCtxhpZwoysnkkQDHmQbinzbYMLJzEGhmEIbjiOF8xjNYRRbbC/2v6hN5TdRg3KcyiPkojhCK4AK5KP4VDekv1lCkZ5JAYolVC3+5XpNQKMDQf8hbRYroqtQKAZ42uvbQX+IKXpZJDRrJ1foL0CRz366Wz6TCSh26pbGGmxHkaWrcaFJ59EIhTJcWqnCFhRzdMt85D0fMPT0AYrDum3KYygULW0+j3zGWzRbvUzx9e8wOYlF4iVPLv6UjtfWsoaCVBa63AAbbJMv5wLTCmgtPR37u0Qzl+ktxXVZjmKLTViuQTYrSHP22makidyqHmcY3QasQfEnFaEibWhjSGkwFcUuQxMjbAKFfBwF9M+gDW10Amxoa+nzCv0ENpli05/r6dohzHfwJqxJoSV+8VgUebqNYCSt8kDd0ppOuiHd9W2mDxwS2GA5djahDS10/78JhaKjoU4XbRNn3SsvQrFDN7Sppm3JdhR5nKzj+I/rXeLeHtIFjeAy0qhEeRrQnbmuHF8Ll1Smo1huOYCewWGbICYp5JommAh1R6Es+Ry+QfGjZVo7l3xz7I9ynEAaNZmMYodldjxsWrA6RAF9/cGoDvU521Zr7BX6Z1scoxJJJdU2EKAd9E+0/N4ZheIaw28DTP021sK89nYMGPgGinwTXKc7hleEatSnrpZC4lob6FujNqSSj2KK6bdU3WF6O4qVhr9HLix2EKRSPmCcN+eSa6skKFqHjqDoZfOXcSgWmH670iHmUQJrUDxv+K0WBQ43BCag+Cryz/N403Q232KoutEiwKIYkEGhn0wf5rDX0OeggNDv4JKFSob+QZvfI8EGVxry+UYylFxtowE/zDcMpYVlGzATRb4pK3DE0plogvwgFpkugLezgf4dluc8D2UZcKtyc4HNnC77QN0SKvDzHBKAFG2VFMr20+iBYq/NyKx1nGimGX65FIXS4k8bqV8Rwu/WtBA7mcdMZpGLYr2h6l4Uv1jmqODQP5FvtJRjq8lipra7fCAg9HsFzvQxH8Vmm9+dY9nrzw8VeMoQh34bAw3LurPzrn5X20iL7naEpWQxk+UoFK1toH+zgxb9GV96fS/Qh89DjMPQ24MlwE452QFFoWnVHOJ4SB+B4nvDL+1RKFuFalcUh6AthSi+pWnxH760fFkbbSBSyyP059lA/0sUeTxRrExsaDtve4X+rSgUj4QI/Yhy9QLtCre+lLfsPa8kg/nF4Ub0eWG+Q7HWpo1U3QdSiVUodtKzeK97o81e3An6LVx94INCP9VXZgAJ+G6r8dmOvj33othq+q0v+tzEehqPYqLhlwsdE/M9GkH4bBRbdbqbyJCtNlT9AUW+ae/cyBH6V1oUiAU2y/QIy6J3d0DoX2HjCW7c8fqF/p2uR0HrjnUohaYp43MUB1z4IlcBu+h+Sbc5sDlB/ywUigmm1ThVN5pBoQ8NQ7iYfphurv2UY7uDSuI7C5iL8tRcYSP/3ZZ9Qwp7bKfEiFr6fdiHYqbhiLgVxQpD5VE2ZuiuNtCPDFt3g8HlsAX6d1oOkREzSnpA6NegAMUiwy9u5hcZ+k1tVqH+ZJGlOxJfTwYZhlSZK1EU6jYzg1EoU6qfcWQZPGFeQaEM9ttIMoqLPEE/iZ0oNujODgns+esIFxX04TTN1Bm0rDO9hRO9hGKPJVbDrQ4K6p9QLLWoMF5DcdBi438TRa5F359e9PnsRvGnbsAi85AR+udrqTETdCKebQP9lpqx4a/P6ANtT2810DymO/IucoT+LE96/a9MM2VEi9ErMPQTyUaRrdNplWc1iq06CTxteuZkNpsWaKumv5Hlk3zZlAGxJlttEsp1cbwc+I5p1YiEiR0cCvShOtMCb3TeM+QQlqgWO1Cso4lBMXzQQSXamgIUczhJN7s/h0Lxf5a6f2M3ijU6S2+CZiqdBkVB9SZSD6jGAA6w0+YU/ZEWPSsChoqaddcM/SRWasmir6M1d7KIA9ohLtEwmxSg2EsvUoBzma7pPcyJj7NR5PEwzSO2NwH6l5CPYiNXUY5kerIPRbaHXE9O0C9ah77W/JFO1KwYgww7yUIUudxKBRKor4HwOYu5SvGCZl09j+Uo8gy+Ptdp7g1XkEgSl/EruRZNkgT9huxDsZuupJBIe7aiyNWtTdFBHxLooz2Rn7KEy3yduVpzCEUBn9GPLgzSpsK1Onjr6WHNG+d1etGN4ZrubYbtgfYajqDIYzx30YVHNJv76oje58ziVzukNTEKxT5TE1W1MKf7+Y7v2IPS/LpHW9RtmwxqrZs1h4dKNoZrRSGHUOTTiTyb/d7bPnx4emhPn1fsG+QllKEz9P9Kn7mOVZoG7H3T8WqEJXPJQpPto5qmyTrCCm3nfMSk70goVpHmkY9ilwbzWzxCH67Swn8UaE+525DEJ1roR85Nw8XrJ8Yyn44BYqxdzO+mdmY7AD/yDsYAwAW8YmNhLlJxmuNLTPtL4Xkqn2hOZNsYRgrtyCTTYgOrwKPF7m3r6W+r148skoOYymK+52UaAg+TSabFf6MnP2vgX0Rz4CUy6WMxdw3he9bwC+MMKqsv+MImitfZjNXglc1z1PQk8OFk8objXy9nsiaXA8ywdaa6jllaYPV9LOBeG5/IZPqyUIs+uo13bT7I8jzGOg38X3IaFcgk05RtuBmZZDpm1T2FFzWrzAZeM+1sx5LJk6a3yiTT4I3khSrTm5li8NlCfuVp08nGD6VwF7PYxGHW8bHJnGilmgzhB3I5wEpecbn7VZF7mMNmDrOW961H5GTqUlfM2xqZo9JowikkAPUdoO+dqpCmc7QKhyp4cFrzR9Vd96yVXO3G5ajlUucE0jx6qTvbYFMoaapKOwbzId+TzTZy2Uw2C/mEYdxELY4Zih76cYpTHPpxilMc+nGKUxmn2ixmsXDzJk5xKtP0P6nvS2y6wonIAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAoCAYAAABXRRJPAAACt0lEQVRYR92ZO2gVQRSGv4gSMYKCQU0RwVcjmioWNoIgEkhhYamtkFJEbRU7QQmSIk3KpLMSRTTE0s5G7aJYKPgMCL5fKCfsxsne3TlnZmfvXpwm5M5/zvn/eZydM9NHu+0GcKJA4TxwNYRWXwg4IfaPwdcXYMCDuwcck/6iiJ/AOkOAWEjZyGu+1gPfHdA7YDD7f5l/UUQ+Qk3M0DxwVGMc0L/C0SV7Eph1nKQUsgV4H0BQgw4DL3OQS/QDsKlgnUqIZQ9oxPP+IeA1sAb4DOx1SVYFkj3yyxqhBHcEuF/D3jUVji7nh8CoRYQ4uQaciySSchZcCl+BDcWN/RHYqBCVKQwlFYq3jJUsoxWu7kyczUZccyKkRIy1pRYxB5xyg1elWCtByddLCji1iI5kU/zhd+Ao5/y/AQeBJyWCui5COKQKKnvsOTBinVYjTp0J8bMfeGx02AbMK8I9N40Bd9pgaIjpFZFqGRl4REM6MlPxO/EM2BXtvjuG+ZFjVbS6KbY71P9FKT3L/Zci5BQrp9lebKuOGr4vtvT9aLi6ix0gKVWlZO1oVfVCL2aqytrGV/RcAi7GDltiu5vA8SqflsrtEXAgMalQd16eVZ3yuxQd8hVfC8iNQ1vtBbDDF9ynsFf2hbpafAAp/SSttdlmgNMaAU3lA+CQ5qTBfo3fcmgLaBHY0yDROknHLEKA48CtLgqRm8IFazzLTLi+LgBXrM4jcVKQBVWDoSJcXhPAdCTRKjPtJrzULlZEE+n3LbAtZlBCRbwCtscEUmyuA2di/VpEbAXexAYw2PVnJ2cDtBwiIuThY2d2wyF/D0d7CzOUS+okDzruTHxSnpfCKPrRlhVgjlfm7Cmw2+whDBhzIa1G8I3I5uwxQ9ZsnSYX1ZN1HGi2IdO6D7hc8mTrxrgLTAG3tcAp+/8CyO5dRQsQPfMAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANQAAADtCAMAAADwdatPAAAAh1BMVEX///8AAADg4ODHx8e0tLSUlJSNjY38/Pzz8/Pu7u6BgYHp6en5+fl9fX3b29vx8fEXFxerq6swMDA7Ozu5ubmampq/v7/Ly8udnZ1eXl7c3NxkZGSjo6OAgIDl5eXR0dFVVVVGRkYqKipycnIjIyNOTk5zc3MZGRkPDw9AQEA1NTUsLCxaWlrVpBEKAAALY0lEQVR4nO2d6XayOhSGVawiIv2oU1utSB2rvf/rO9LZZA9JCElc6zw/W0vzCiR7Snar5YAs35/aFx42y8zF/2ue+G7b/sOhN/A9ovr02hIvqe9B1WMiS6rIfY+rBlkJa7q8XYXvsRkSbzBJFU9D3+Mz4ZGSVNHr+x6iLtGW03Sh63uUWqx2CpIunG5n2UoTNUkVm3vfo1Wjqy6pYup7vAoUD3qa2u3jzPeYGQYLXUkVu47vcVPcmUiqGAVrOU2OppouLH2PHiR7Iwd9XOZj8gOvc98KJAakTfQ1xzG3ch2Y5TSlJf2sRoAj8pckIMtp9o8c6viP3cBNj6FYTp2SHOZRGGdBv1pBOCXpnv7qAVs8p/9i4d3fX9IDhL2mPvNq3blWcQXjYDygs/TqnZY1caniemRremRkJGJOfx/rlSsVV3AOxgs3PTNPro+YE/O2rxVs1HREX8N1zIlxMA6R2mWY1eDscnofPtFf8aP6pWb0q+Uu5sRMyJtY62qMhdVrSMQ1jLf+ph1LoeODLiynjDZyjkYLDB7J/WDcbMwpZsxR42cFibl/s9B7orVgHv9aRhsTCWgq5jSjXbxxzfl3SD8FjcScmCXFxuvMLH6l7ZhTzCz+loL9jJkysvpqGTkYJnAGpb2YU3Qg/5FdX3VIm/5bRQOMoZaDYcL8lfx/7/Wdkv4LLakRB4F52uvGnDgHoyFXrkmnhJljLT3fIEy892T6Hg/sORgmMIbzk4n5wkV89g2aY18wI9BfG5nvqXSSrGUsJ82YU3YiL2bmYJhQ0APRcEqUMhiuYOZf1UQ44wS4jgpzlpPKVzyjL1HXwTCBsZxYpyRjqjo8ZVqYcC6ZCDfIYLiCsZzwRDhTIuW37ouznGCnhLnF/vPMHfrVgMK5zJMXRC0lE84dCR+PaR8mmKpX+g05XZluMRkoCqnKhg7nHv58+X3qtm4Dq4ciw7kPv5+j7MaGHQwTqHDuRuFDDhwMEwhL7vu5Qj/gxsEwgagx+fwAagf7S5ErgIYaPhcfZObzW8ygAOLHHqvfFeCv/Jed8CARh8qygH4TRIGQAkOoxqRKkgEWVSilXArM5Vdrd7mHstKAiu4UkOe5fisVfxTsNI5xL+Yv0tZQ+Ilo6t4A4r0atDrCT4KfyWUiQULnf1GBEpaodNh5zrKssxoO6nihQYjqD6PlaCEFlF8XSR6tDNR5F5UWd2u6HqNMJpqpPOui4t5L8gvj98ddJn/8zaGnY6fZFiUu3dR3XDB5B4GecpjRtijR/Mf/ekbnOyGeFG9X06KwMjLA7lRBLY7lRxRXUUeQhCpqbizpwj/+ZvkQxVQJsrDenQdRTLZCAS5X6F6U3jwOw1SxOhelsTmbgA4TuxbF5NaVIZNjjkWtLGlqt6nwt2NRdBG7DotgRBGZh7fR42SerQZpxaCTzWd5b0OZ78QD6FYUUqZaPmIRq7iYloiobSCi4DqTR6bwZoUUj+G5P6eioGx6ouLZgrLGQYgaACNTrFtYQcVjaJTVpSgg1aIe/QXuMmqwuxQlG0g6xRjyanAIQZTkF77qXDmWRLWf/YuSR6W3p0F+erG/dyhKzDxU/0wL6QHErAqHomR/V08TsMz5FyX+K21RcoYdWbYdilL+olGkEhBkRbipO5WJF0CiFV7fKe3KTvECSLDCoahnSZR2IaS4fCOxCoeiZNPvqCtKHC2yC8ihKLmWof2mm3zqPvz75YDdaZdmEpQRaKTsxKUoODr2aL8Q3KUoeU7/5KEX2T1+0anni4j6ELaZRtb2MzoVxZS6Xzz00TKy8DQ6FSVeGqFc9PL5sEbNgdsQGbNT85rtOnk0eyTdipJdKp7zfjnXLLF2HHZmj0JG2K51Tot3nfXQegAFdtNQs/OK5yFjjFR0uc8k1lTV3k7ZN+wmc757Zi3zkZ1n9qOqQEfgvdRRpMyZFipQByp4KuMZ1s/REwXLvmqTWsPr7h4GrMMTdaGoOWWgqnyKupAtFasYQTbIVT2LutBfTRLTtQsJUvgX9cmwyHtP9DZcCHgdDkXUF4NV0V0mT6XqQevwFBiYqB/6nShPFKxf8FaFKuqLOOuOyCoZsPIqcFEfpPNeiYk63aqoikGO6IJs21sRdeEZrCaGtunekCh4Xyv0D9yJykd/MDzNIpVXsrVPUYKdh1k4DHI4CqpQciVK2r5puBdasoGPwNZWV6KkyhDD3dByjhXwgb2JMnyr5OcPsCm8PX6GL5WcjvQoqi+2L9HO934Rkig5N2q20VvOhnt8p+RjY8yWZWn9hYr+nImSt+IYHTMgZRhKn6LkhK/RUYdSLS004TgTdS+JMll/ZesPWhrc2X5yvfKbvqhSugg037gTBRzIR+3XAAEqMaCPuRMFVaWv9SYL4MinF7+iWtCZMkeNQwJjKA4DrnYORcFHF+0UZaVguhjeGuHS80UizNspX1eQIbv+4E0sLkXhtSHbfV5gSc9BsUS3Oj/Af+I0RsFssjwtkru8O5nMonk0m026+TSRD6m4wn9hcAvYGFEPbAdL+BUvOGAg072oervmRVAzy3Xcj2nsowO+U8R5MNNCvQGnyUOEVtoGYMSJMvE9hJ3TuoU8F/bkILzE0mtvoGdOwvWTILhnq2kp2DOYfWU9uL4POAoHmvtL5QzuTNqCv6gU1XrNT0WaT2HZVSuB9p10y9AN/yJPXeVtBr5FXUizfE/P8uNRrrXRNABRn8RFlPdGi9349TfqflqMennU0Y56BiPqmjS1e2ihGPWhF2+RRhPZqognPQzkTJJWp6wQREk2cwpsEV5obJTxL0puIV6lwoCgj/rQvIsC4iDrFnL+mereQc+iwCPTq/QKHMlS7F7kVRTScetjjUNiPguVFd2jKKwNwfnjt6jHrZAmE10lZ0fz9tGGEV8lWWh4ju/dJi4RrkRNUJP/+9AoIozANcEQjTg37d6eS3zEP3MB1ZBwT71a0srtovlRTHkwf6K4UC7pB+LEQCld2GDjzm/ILYG7v58sqU+ineDkIpvG+x9FYinNFUJkmo4hIIfcynttGu7JwPQWfhc/z7WnBnwD2RZBD6GyAtdbGJh675k9TtJRTMD0oue3aMJ87WP4AKyCOQ1yOuQ+3GDLIKa3MGGt4mvaJ6fp/CNm1VnC+hvrVjVktkzQDVaYxqM0O+rKNeB6C7MeINcilqKhHjtMb+GtShUD2QmOpJEJPWPedFUjZkaucChNWLPcnKx0BucXRseBN3CjmHHs9M6voJssgtifz2f0ZGzQIp6y7yGebEtiGqhqHuz4zQw58RfkYLk9KdfqdmO8Jmqc/GHtwKBPmKbEtTo4xqq7qO36HBGzJ71uO9SOSmLzZNU+4l4mG0tHh00AWg2McS3ZN5Y6ON6TFuGb1UePcTBONjs4RlgY491q7+w5s/XctnU5XMrm//vS6sF29RwMU567vdFisTufx+tRb2I5ysI5GH5bxJvBOBhn7y3i9bHlYAQE0Uj5g9FttUP9gIkh+G8Rv0x0zTLGwTg4CGUrDFCrBTrn4XhvEV98G23Krg6ZwdD9fpog+vOdn9WsGc7BwLoOuCIXDByFzuGMg8HnMZsFPLyKySoyGQxHSUmMIeYrHIl5i3MwlGoDmoPyFd4xc41xMN58N+qmxwf6j1wGw/PLVMFEZ6R4Autg+BAhwdRnC1ZO3QyGMwraYU1+7VHGwbDqrdeGWUa/3PBbczDu6Wewms+4+LxOBsMVzJxWMvPD2nKM1xY1tt8YZDBckZrmVs0yGK7I9FthB+BgsDCTtox3B0OFvtZ5s2g1V2h0SmVNzupTLaC4v1fBkwwKxsSrUCwTDwnOsw3OJlKDDOglNxh0/QQNvd5iBuMH2CEM2CZSYy5vyAjbJlIjupoxzsubfZmuiSfJbntsH08LtDu2Vf4DqF6wLTyRioUAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALYAAAA1CAMAAADbCuFAAAABRFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8NAl4NAAAAanRSTlMAAQIDBQYHCQoLDBASGBkaGx4fISQnKy43ODs+QkRHVVZZW1xdX2BiY2RmaGtvcHN0dnd4e4GChoiJjZCSlJibnKCmp6m1vr/Dx8jLzM3O0dPW29zd3+Lk5ebn6+zu7/Hy8/T29/j7/P3+ntUVnQAAAAFiS0dEa1JlpZgAAAGlSURBVGje7drXUgIxFAbgiL1jb4uKHbAA9o4FG5bFggWwLajk/R9AnFlMkASC7O5wNP9lztmc7y6ZyaInoQygTO7jnETV4JrTjnJyKDRgRu9WqLV2xA8WivLdr+XtS516m34MCAkN8Ondg9Rah2XsdF6X6iGyMb7qA8nGyRGQbJwaA8nGyR6QbHxmA8nGo5axH8Lc9LLYsetMbp9zHOcM9iN/wOTv2R4kEIo9Sy1XtDhWI1nuzlx2oPD2FrO/Uj3/Tu3mhsJGaIrabQ8OG52QaggQ20eqEUBsJ6lqgNgeUo0CYm+TahgO254g1QMw7GaV2m0ZCLvVG6dPSYep7ADJtIudCQ57353J3OL6rvqRdba/1OofLJABfs4AV2PRbCpbnNuZxmHnzSZjgIvX3F0ubK0NJNuPILKDNojsowYEkL1Tg+Cx74Z5A8qYfeOtQ8DYieOV/so8AwxkG3JKpjM+pHRVsQaYc0oae3FlBMJ9W7IlW7IlW7Il+4+yi31NMJt9yeVclPJ2YzabnzfJlmzJluz/yy7hXymhU5X+V2qjcLcixIl9Atz3BOWZQt20AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALYAAAA1CAMAAADbCuFAAAABRFBMVEUAAAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD///9+W6oPAAAAanRSTlMAAQIDBQYHCQoLDBASGBkaGx4fISQnKy43ODs+QkRHVVZZW1xdX2BiY2RmaGtvcHN0dnd4e4GChoiJjZCSlJibnKCmp6m1vr/Dx8jLzM3O0dPW29zd3+Lk5ebn6+zu7/Hy8/T29/j7/P3+ntUVnQAAAAFiS0dEa1JlpZgAAAGlSURBVGje7drXUgIxFAbgiL1jb4uKHbAA9o4FG5bFggWwLajk/R9AnFlMkASC7O5wNP9lztmc7y6ZyaInoQygTO7jnETV4JrTjnJyKDRgRu9WqLV2xA8WivLdr+XtS516m34MCAkN8Ondg9Rah2XsdF6X6iGyMb7qA8nGyRGQbJwaA8nGyR6QbHxmA8nGo5axH8Lc9LLYsetMbp9zHOcM9iN/wOTv2R4kEIo9Sy1XtDhWI1nuzlx2oPD2FrO/Uj3/Tu3mhsJGaIrabQ8OG52QaggQ20eqEUBsJ6lqgNgeUo0CYm+TahgO254g1QMw7GaV2m0ZCLvVG6dPSYep7ADJtIudCQ57353J3OL6rvqRdba/1OofLJABfs4AV2PRbCpbnNuZxmHnzSZjgIvX3F0ubK0NJNuPILKDNojsowYEkL1Tg+Cx74Z5A8qYfeOtQ8DYieOV/so8AwxkG3JKpjM+pHRVsQaYc0oae3FlBMJ9W7IlW7IlW7Il+4+yi31NMJt9yeVclPJ2YzabnzfJlmzJluz/yy7hXymhU5X+V2qjcLcixIl9Atz3BOWZQt20AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAX0AAABSCAQAAAAS/cyNAAAAAmJLR0QA/4ePzL8AABeVSURBVHja7Z15gM/l9sdfM2OMJTQUiUumtLh1S1Q3IYW0WUoLRYimKCp104qSXxMV1a2bSov2ESWyDUkqS25RWcJMlH0Z+zrLc//4fmb6rOezfD8zv/H1Pc8/fOc5z/P5nOf9eZZzznMOlCSVoyndGcbrZDKFT/mQl3mQTtQJoe3KNKYD/RnJB3xGFt+xmMUsJovPeZNh9KI5VYh1ikhhQLEUvi9xKVTlUtJ5krfIZBIzyeRDXuB+ruYk4gQcR0++ZA/KoWTzIhcEaDeFS3mYj1lJvmPbf5V8ljCCi0lwbbcPY3yUvrYgdKr9vG2P9/vor3YpSUGiBC7lOZZRKPS0gcmu73JCLMO+NqPZ62FIFAu51ofoBzGD/Z7aNZdl9Kac2PpHvtqbaNNCZ6F+I5v6s3z0d1YpScF5InuINYH6tJa0WIV9Mk9wwJcoplLfU8tJUYp8qbjKRA/9cUL9R0KDfslKwY4S6cvWkGAfw9A/jR8DCGMnV5QC9BWH6Fli0C/HdqH+/DIDfVkKVqrD3BBhH7PQbyUOv1TyuLUUoK8o4LYSgn5rl35PKjPQl6RgpqZsDBn4MQn91hyMQiB5dCoF6CsO0bhEoP+SC0efMgR9ZykYqTE7Qgd+DEK/qceDrXPZw+mlAH3FIltNR7TQ/92F44syBX0nKeipbqg7/JiFfg3WhjIciaUAfUXH0KHfxJXjAJXLFPTtpaA/3M4rEeDHHPQnhiSWu0oF+lNDh/5THng6lTHoTxNHNL2EgB9j0G/v4YUPs50811obqVAK0M+jWsjQ/9kDz1tlDPp2UiiiCh6Ot4Vs4Gd+Y/exC/1yrBZfdTdPakOXyAW8whGxdrpP6K9lIkO5i5u5ghvoztPM8PCJWQ1pJ3M9wxnPLy6c7zGYziZHjDRPQ76VJANXPW5kCOMFjl3MZgz9uZhkFymsCySF9oJtW+b8ie6cWGxk+zvD2XksQr+7y/7dbIRvRq5Qf4Ev6BdQyabmya4bsCcEk9wukdPOAvGAx0FvbsPbTaj/kEcpFHJcICkMdpSCrMsfbvqIAf7GDwLHEXKLyymxA31psf/FdlCuFQV7mg/o5zjWnSb2MU54nwki50gbjm88Qn+EzzPGWR6lsDagFN5z4DtB9NMZ5cB1IuscefbbunIc5dRE3E06vfBMgetuH9CfEui5FJOFN7rdxRHAqt3K9wj91Tbv5GwEXONZCl86vsv54vM4Sa+TwLPJoqn6i24T+D6IPeiPFl73XUeuWwSuT31Af6RjDwmiZXme8EY1KRAPd7V9fSrGcoaJt4VQ94VQpLBN6OFbB67BAs9oQXIVBO+tHVH6jZZBkvz5LnPkaiBw/e4D+r2EJ1si9PGz+E4/iPDtbqo9yQf0zbv3DN/S8yuFn8TtqD29LfDcJErue4EzNbaAf6rwqvsFB9kEQf9QSFUHniaWUlV4tu+EZ8sW32qoj3NCJV8OxOZ59ldBu5McihS+FZ7G6aT0eaDpDOAzgfPk2IK+tLtbInJKbg//COXZvg0M/QtE+G4yLN2dfOm08w0XNeoJNT8KaYTmBYD+DIHnGrE3ibNabEH/edF0ny0UaT99ZeDnqUYaTWhFB24Vt2Iy9BPYIAJY/2m+4dOg00XH20+od0sUo6KXwuoA0Jfm7gFiz9mOfAdFJ5WjkGaUiKnb37BXpBX9eZXZPhxss13afEvkfkD3kaz3+W7v6HqZIujGqvsciSBScIL+OwHdH84S+JbH2iF3ZYlAv7fH3uszkLkcCtCDG/Q7e/R+aeyoPHXfLkn6kK99jEFwKThB/wlRw9XE8Uk+OpaUm3tLBPp3ufabRGdmiYaX6KBflcPiAT5Fq/e4g+3ycoH7PI1XqjPQk/SjlYIT9DuKXGuoZct1d0AHlaOSypeQb5/bHaLrWBZlD9mu7yY7l12q1ZrvcB0xRZiFB2m8w4T2T/cg/eil4AT96i7+Pxu4zrRzr8UYF1e5WrEF/WolBP3OQp8nheIg7Q79gSL/MNGOOxJY4Mg7x1UDtdL16cKRQk7ADz8iwdcZQDd68hiTXbdbn8XadqdWCUHf+ZL6JWwJpQd36J8u8s8XFZsdRCv3ISoAxwkerCNdni0sKThD//pQx1M6HxyldEIJQf8ch/46iTvwcKEPq8QFvDLwgsNA1wC6CtwtgCs8bKdKWgrO0E/0dAPBa3mDmKPjSgj6NWx7axVIixEc+qPEFtoAiwVTXl2B91EkP5kdYpioMKWQI/TzT89OeW5lFcfHHvSTRO3CDi36o9+ywNbR6QSP+urdLOdrspgmOm55gX4bsZ8hpDhsWYZr/MvEC5JTfbsShy+FHPH9B4UC/K2cSUyS5B05KdSe3nUR8QIeopXBWD4vSuiXFyKGKrJo6vCXZq6rxm6SBEjeVGpSyInCVu+trI9FP/0ILRVee2GI/TQSl9/ZtqeDH6OEvnzZfh99Hda6ohtMVwvcNwj3mY4vNSnkuErg7qhiK02jJjFLU8S4OuVD60cK8PSqgyf4pqih31sc2GUuVsvKwq7c+QbwrIBS+E8AKeR4kME/xOukkuv5zcQ0PSO+/mUh9ZIoDOAyB7eoBlEfc6F2AEupPoBiVgDI3BtICssdpJAW+JgboSt9+ygpCviaWwJGdD6K6GZRCOND6uXMAFC5LwToO+lwJKdkvXaqfwDonxZICvc58NwfFfT7+fr081jJe/SmLscE1XMxZVwSSi+3+HZwTnaJBucV+k/6BK7x4mMd36vGrwGlcFUgKeS42A8KBYf0AbTlRu4gnT7cSCvOKvZrOmZIjluzmVN9KUvtrzP8yzf0h4ag1we40Cd0H45y1XhGeJZ/+Ya+mxQk6FcXtXd9iZPLbl+xnrae2kljGH86eCwO8wmW9q7hl7xCP1E8JrrboZ/wCf1mwrP4lUIHVynkBB7XtDjw4XTXRb2QT7jU8T5+RdqSwWKtlRd9bzt2m0wmCfR1ie+mUPxhGx/Ijt72Adw/LG95jk/zT1LAzVcwKfzpKIVEFy+hdnHgA8z2aNyYyKP0pjNtuJFeDGAEk/jNNED2ZjD5uLiDvtqN11S6iTEBzPE9v2YsQ7mDa4SMjjf4gO5/bPhX+eB/W5RzSUlhro0UznXh2sx9XCjERz1GqEWI3js/2fbQxQPndtH26laedny7qj6cxexS4vmxiF4vyrk0pXCjZ61OLhtNt67/y3Q+YBjtPa+sRzF9ERr0d9q2f0oJucl5gb7XVU1x0Db+Z0vPz3DIJb9taUqhVyjtHWQCl8c29OuEmHjGXseTHaitQ6FAf6DHNqY67Jo3e+Sf7irn0pNCxxA/qK9sY4fGDHWO4oaolxg8zwZqa3Qo0D/DYxtOsULHRskfrRReDCCFeqGuJge4PZbB3y8kMdmnkK4VIEnyMpqFAn1c8gcUFScLRgePz3CKq4xLUwoLQ95MPRTL4B8ohpXyWu5xaP0p36eG07kmJOiP9gQxHNW3+zzwL/EkY79S2MUZLiHdnaRwbcjQL/SQHvYopo4h7PlHOlp6Z/gCfgugR0jQb+uhhREC/wQP/MM82rv9SaEl0DOgFF4PGfx7Y9sQdpKnYZbKvx3bThUDyOrLas2q2ick6Jf3oDKU7tPe5uEJLvQoYf9SuCOgFJJ8B1V0K58R43QRXwba+qxiGGeLLSfzkutx+giji5WMd4YEfTkKZWRjkSxwV3d1KdjsIyKlXyncFYUUbgrtCnxk03NO7Gv66/E4CzxebP6Tj+jvObryeWQ6fli5/Jv6urp3O96w2shKFjGD9xnFw/R0vUbXQ5cLyq6848I/2YX/3z7l60cK9wSWQiPxFl6Q8sqxYuetzlUMYhxz+Y1cbf7YxzayWcIkRtGfq/lbgHZPphtjWcw69qHYRQ7TyeBKy8ybQiqp1CWNNNJoQCqpMZTgICKFH0pMCueLV9qDlY2xl1slTrF3alsfOvAV1pRKcYpTmaIEvhLg+xT/pI2pXEs3hotJnNzjTcQpTv/v1COgGheuc8k73D8u3DiVXUrhT0EP5+aqLBsSn4qLN05ll9IF6HoJMbJIDB0TpziVWXL239nm6fK5FC9oVFy8wWkIk5jEDXFBeKIJZDkkn3YiKXZPpqcWXhRjlcYpMM0ojlYcJ3fajuIbXxxS9vehnlr4wmOIrjgJVIXz49AvZei/KgD3Xx74y7FTaOHc+JB4oU85aBPB7Sya0Uy4SB6n6KAvBdl93AN/O/HucGJ8SLzQ/hCDF8ah75WmCtB93QO/FGn0o/iAxKFfdqH/sQDdpa7crUWtfnsX7pq0pCMXU9Hjgbwt13Kup5XkJFrSkYusVomq3MsM1rGd35hAD4c4ueczkilMZCRNgUpkkGHStDQngwxT6ss7ybCNDnY+r/ITW9jAYkbxd8PfrmYMY8hDkcMYxhiOV80YznAbt7dkuvM5K1jDNPpR2ZPwHieDvkAV7uRVXjdxVeEBpvMrK8jiGYM3ZBGlcDsTWMoK5vGczbkE4FRGMo/fWMpk+jkE6GjHeyxjO38wjyepbfn7ZWSQQR2gJc8yhg6GvybSiU9YTjZf8ZApz3oR9GsziM+Zw8ekuwDrWdHtWA4keRw5ovOanCppTrE36n7epYFQN4leuiDvW3jaIZxBhNoyr7jlvYylnv7rWaN1uEGr8KOlqXK8YvASf0sLjvGaodZ9NrG55qIosDxO0XXGTdr1vXxDzOTHLUG0zX1cbGqvPv81cXi5E5SDYiGNi6Mm6D0aLzEl7zlCd8uss8IEjDEWz8T7TUG2/rDcSUjQLq7nsUHzbt1viW4WeefmfGijIqxuSvW5nsYW6F/PbkPAQclvvps4b78rcCaL+RYUDzpyJtp8cPsck8hWY7pNPP9zHD6Sl2xi1RXfAJ+GIo/bSAKOZyQKxcumJl7QzNj30I4uvEMeM1EoXgoE/b9TgOIHbQ5pwgoUBTQs/ntj0knnMIr/kk66wenJDvpVWI5iHw9yBvW4l0MolorXRyL0M4olGu8q1ukymjRkD4o/6EodqtKaH1EU8E8DZH9CsY/7OJsGXKXlL+lqaD8Sz2Y+rTmeWtxOLop1prUlkmvxE2oASVxNLoodprQckftmH6Io5A9W8YBuSpqLIo9hnMPJ9GAXivW699iOYgMH+ZV7uYZ0ba6UbgLL8aEL6eHAV5nxIvC3CCtxhpZwoysnkkQDHmQbinzbYMLJzEGhmEIbjiOF8xjNYRRbbC/2v6hN5TdRg3KcyiPkojhCK4AK5KP4VDekv1lCkZ5JAYolVC3+5XpNQKMDQf8hbRYroqtQKAZ42uvbQX+IKXpZJDRrJ1foL0CRz366Wz6TCSh26pbGGmxHkaWrcaFJ59EIhTJcWqnCFhRzdMt85D0fMPT0AYrDum3KYygULW0+j3zGWzRbvUzx9e8wOYlF4iVPLv6UjtfWsoaCVBa63AAbbJMv5wLTCmgtPR37u0Qzl+ktxXVZjmKLTViuQTYrSHP22makidyqHmcY3QasQfEnFaEibWhjSGkwFcUuQxMjbAKFfBwF9M+gDW10Amxoa+nzCv0ENpli05/r6dohzHfwJqxJoSV+8VgUebqNYCSt8kDd0ppOuiHd9W2mDxwS2GA5djahDS10/78JhaKjoU4XbRNn3SsvQrFDN7Sppm3JdhR5nKzj+I/rXeLeHtIFjeAy0qhEeRrQnbmuHF8Ll1Smo1huOYCewWGbICYp5JommAh1R6Es+Ry+QfGjZVo7l3xz7I9ynEAaNZmMYodldjxsWrA6RAF9/cGoDvU521Zr7BX6Z1scoxJJJdU2EKAd9E+0/N4ZheIaw28DTP021sK89nYMGPgGinwTXKc7hleEatSnrpZC4lob6FujNqSSj2KK6bdU3WF6O4qVhr9HLix2EKRSPmCcN+eSa6skKFqHjqDoZfOXcSgWmH670iHmUQJrUDxv+K0WBQ43BCag+Cryz/N403Q232KoutEiwKIYkEGhn0wf5rDX0OeggNDv4JKFSob+QZvfI8EGVxry+UYylFxtowE/zDcMpYVlGzATRb4pK3DE0plogvwgFpkugLezgf4dluc8D2UZcKtyc4HNnC77QN0SKvDzHBKAFG2VFMr20+iBYq/NyKx1nGimGX65FIXS4k8bqV8Rwu/WtBA7mcdMZpGLYr2h6l4Uv1jmqODQP5FvtJRjq8lipra7fCAg9HsFzvQxH8Vmm9+dY9nrzw8VeMoQh34bAw3LurPzrn5X20iL7naEpWQxk+UoFK1toH+zgxb9GV96fS/Qh89DjMPQ24MlwE452QFFoWnVHOJ4SB+B4nvDL+1RKFuFalcUh6AthSi+pWnxH760fFkbbSBSyyP059lA/0sUeTxRrExsaDtve4X+rSgUj4QI/Yhy9QLtCre+lLfsPa8kg/nF4Ub0eWG+Q7HWpo1U3QdSiVUodtKzeK97o81e3An6LVx94INCP9VXZgAJ+G6r8dmOvj33othq+q0v+tzEehqPYqLhlwsdE/M9GkH4bBRbdbqbyJCtNlT9AUW+ae/cyBH6V1oUiAU2y/QIy6J3d0DoX2HjCW7c8fqF/p2uR0HrjnUohaYp43MUB1z4IlcBu+h+Sbc5sDlB/ywUigmm1ThVN5pBoQ8NQ7iYfphurv2UY7uDSuI7C5iL8tRcYSP/3ZZ9Qwp7bKfEiFr6fdiHYqbhiLgVxQpD5VE2ZuiuNtCPDFt3g8HlsAX6d1oOkREzSnpA6NegAMUiwy9u5hcZ+k1tVqH+ZJGlOxJfTwYZhlSZK1EU6jYzg1EoU6qfcWQZPGFeQaEM9ttIMoqLPEE/iZ0oNujODgns+esIFxX04TTN1Bm0rDO9hRO9hGKPJVbDrQ4K6p9QLLWoMF5DcdBi438TRa5F359e9PnsRvGnbsAi85AR+udrqTETdCKebQP9lpqx4a/P6ANtT2810DymO/IucoT+LE96/a9MM2VEi9ErMPQTyUaRrdNplWc1iq06CTxteuZkNpsWaKumv5Hlk3zZlAGxJlttEsp1cbwc+I5p1YiEiR0cCvShOtMCb3TeM+QQlqgWO1Cso4lBMXzQQSXamgIUczhJN7s/h0Lxf5a6f2M3ijU6S2+CZiqdBkVB9SZSD6jGAA6w0+YU/ZEWPSsChoqaddcM/SRWasmir6M1d7KIA9ohLtEwmxSg2EsvUoBzma7pPcyJj7NR5PEwzSO2NwH6l5CPYiNXUY5kerIPRbaHXE9O0C9ah77W/JFO1KwYgww7yUIUudxKBRKor4HwOYu5SvGCZl09j+Uo8gy+Ptdp7g1XkEgSl/EruRZNkgT9huxDsZuupJBIe7aiyNWtTdFBHxLooz2Rn7KEy3yduVpzCEUBn9GPLgzSpsK1Onjr6WHNG+d1etGN4ZrubYbtgfYajqDIYzx30YVHNJv76oje58ziVzukNTEKxT5TE1W1MKf7+Y7v2IPS/LpHW9RtmwxqrZs1h4dKNoZrRSGHUOTTiTyb/d7bPnx4emhPn1fsG+QllKEz9P9Kn7mOVZoG7H3T8WqEJXPJQpPto5qmyTrCCm3nfMSk70goVpHmkY9ilwbzWzxCH67Swn8UaE+525DEJ1roR85Nw8XrJ8Yyn44BYqxdzO+mdmY7AD/yDsYAwAW8YmNhLlJxmuNLTPtL4Xkqn2hOZNsYRgrtyCTTYgOrwKPF7m3r6W+r148skoOYymK+52UaAg+TSabFf6MnP2vgX0Rz4CUy6WMxdw3he9bwC+MMKqsv+MImitfZjNXglc1z1PQk8OFk8objXy9nsiaXA8ywdaa6jllaYPV9LOBeG5/IZPqyUIs+uo13bT7I8jzGOg38X3IaFcgk05RtuBmZZDpm1T2FFzWrzAZeM+1sx5LJk6a3yiTT4I3khSrTm5li8NlCfuVp08nGD6VwF7PYxGHW8bHJnGilmgzhB3I5wEpecbn7VZF7mMNmDrOW961H5GTqUlfM2xqZo9JowikkAPUdoO+dqpCmc7QKhyp4cFrzR9Vd96yVXO3G5ajlUucE0jx6qTvbYFMoaapKOwbzId+TzTZy2Uw2C/mEYdxELY4Zih76cYpTHPpxilMc+nGKUxmn2ixmsXDzJk5xKtP0P6nvS2y6wonIAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/genevec.ae3959d3.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/james.56dc49ab.png\";","module.exports = __webpack_public_path__ + \"static/media/damien.be272bba.jpg\";","module.exports = __webpack_public_path__ + \"static/media/map.4dec4d8a.png\";","module.exports = __webpack_public_path__ + \"static/media/data.4b15b896.png\";","module.exports = __webpack_public_path__ + \"static/media/api.66b8f085.png\";","module.exports = __webpack_public_path__ + \"static/media/calendar.bac84002.svg\";","module.exports = __webpack_public_path__ + \"static/media/location.c36bc45b.svg\";","module.exports = __webpack_public_path__ + \"static/media/model.175ce4b4.svg\";","module.exports = __webpack_public_path__ + \"static/media/satellite.413ec2df.svg\";","module.exports = __webpack_public_path__ + \"static/media/measurement.00a11f4b.svg\";","module.exports = __webpack_public_path__ + \"static/media/file.c121f6d3.svg\";","module.exports = __webpack_public_path__ + \"static/media/folder.dda39cfb.svg\";","module.exports = __webpack_public_path__ + \"static/media/measurement.e80db994.svg\";","module.exports = __webpack_public_path__ + \"static/media/model.e27f6dc3.svg\";","module.exports = __webpack_public_path__ + \"static/media/satellite.e750235b.svg\";","module.exports = __webpack_public_path__ + \"static/media/download.d9a6c870.svg\";","module.exports = __webpack_public_path__ + \"static/media/heat.1e11ab42.svg\";","module.exports = __webpack_public_path__ + \"static/media/contour.ae56b11e.svg\";","module.exports = __webpack_public_path__ + \"static/media/info.b956ed53.svg\";","module.exports = __webpack_public_path__ + \"static/media/shrink.79afc189.svg\";","module.exports = __webpack_public_path__ + \"static/media/fullscreen.0b868e0e.svg\";","module.exports = __webpack_public_path__ + \"static/media/fontsize.fad3fd1a.svg\";","module.exports = __webpack_public_path__ + \"static/media/xgraph.a939699c.svg\";","module.exports = __webpack_public_path__ + \"static/media/ygraph.18861b37.svg\";","module.exports = __webpack_public_path__ + \"static/media/pause.4c5ea594.svg\";","module.exports = __webpack_public_path__ + \"static/media/play.e24f9bf9.svg\";","module.exports = __webpack_public_path__ + \"static/media/skipbackwards.8180f32e.svg\";","module.exports = __webpack_public_path__ + \"static/media/skipforwards.bf64e955.svg\";","module.exports = __webpack_public_path__ + \"static/media/clock.a7246b87.svg\";","module.exports = __webpack_public_path__ + \"static/media/depth.adb6bf96.svg\";","module.exports = __webpack_public_path__ + \"static/media/editlayers.9c9c482b.svg\";","module.exports = __webpack_public_path__ + \"static/media/drawing.27e1eb81.svg\";","module.exports = __webpack_public_path__ + \"static/media/settings.e6832ba0.svg\";","import React, { Component } from \"react\";\nimport Loading from \"../loading/loading\";\n\nexport default function asyncComponent(importComponent) {\n class AsyncComponent extends Component {\n state = {\n component: null,\n };\n\n async componentDidMount() {\n const { default: component } = await importComponent();\n\n this.setState({\n component: component,\n });\n }\n\n render() {\n const C = this.state.component;\n\n return C ? (\n \n ) : (\n \n \n \n \n \n Loading Data\n \n \n \n \n );\n }\n }\n\n return AsyncComponent;\n}\n","import React, { Component } from \"react\";\nimport * as Sentry from \"@sentry/browser\";\nimport bug from \"./img/bug.svg\";\nimport \"./errorboundary.css\";\n\nclass ErrorBoundary extends Component {\n state = { error: null, errorInfo: null };\n\n componentDidCatch(error, errorInfo) {\n this.setState({\n error: error,\n errorInfo: errorInfo,\n });\n if (!(window.location.href.includes(\"localhost\"))) {\n Sentry.withScope((scope) => {\n Object.keys(errorInfo).forEach((key) => {\n scope.setExtra(key, errorInfo[key]);\n });\n Sentry.captureException(error);\n });\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.location.pathname !== this.props.location.pathname) {\n this.setState({ error: null, errorInfo: null });\n }\n }\n\n render() {\n if (this.state.errorInfo) {\n return (\n
    \n \"bug\"\n You found a bug!\n
    \n The developer has been notified. In the meantime try refreshing the\n page.\n
    \n
    \n );\n }\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import React, { Component } from \"react\";\nimport { Link, NavLink } from \"react-router-dom\";\nimport logo from \"./img/logo.svg\";\nimport map from \"./img/map.svg\";\nimport data from \"./img/data.svg\";\nimport home from \"./img/home.svg\";\nimport about from \"./img/about.svg\";\n\nimport map_2 from \"./img/map_2.svg\";\nimport data_2 from \"./img/data_2.svg\";\nimport api_2 from \"./img/api_2.svg\";\nimport about_2 from \"./img/about_2.svg\";\n\nimport \"./header.css\";\n\nclass Header extends Component {\n state = {};\n\n render() {\n return (\n
    \n
    \n
    \n
    \n \n \"Datalakes\n \n
    \n\n
    \n
    \n
    \n \n \"Map\n Map Viewer\n \n \n \"Data\n Data Portal\n \n \n \"API\"\n API\n \n \n \"About\"\n About\n \n
    \n
    \n
    \n\n
    \n
    \n
    \n \n \"Home\"\n \n \n \"Map\n \n \n \"Data\n \n \n \"About\"\n \n
    \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default Header;\n","import React, { Component } from 'react';\nimport epfl from './img/epfl.png';\nimport eawag from './img/eawag.png';\nimport geneve from './img/geneve.png';\nimport carrtel from './img/carrtel.png';\nimport sdsc from './img/sdsc.png';\nimport unil from './img/unil.png';\nimport twitter from './img/twitter.png';\nimport node from './img/node.png';\nimport react from './img/react.png'\nimport './footer.css';\n\nclass Footer extends Component {\n render() { \n return ( \n \n );\n }\n}\n \nexport default Footer;","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport epfl from \"../../img/epfl.png\";\nimport epflc from \"../../img/epflc.png\";\nimport eawag from \"../../img/eawag.png\";\nimport eawagc from \"../../img/eawagc.png\";\nimport unil from \"../../img/unil.png\";\nimport unilc from \"../../img/unilc.png\";\nimport geneve from \"../../img/geneve.png\";\nimport genevec from \"../../img/genevec.png\";\nimport carrtel from \"../../img/carrtel.png\";\nimport carrtelc from \"../../img/carrtelc.png\";\nimport sdsc from \"../../img/sdsc.png\";\nimport sdscc from \"../../img/sdscc.png\";\nimport james from \"../../img/james.png\";\nimport damien from \"../../img/damien.jpg\";\nimport map from \"../../img/map.png\";\nimport data from \"../../img/data.png\";\nimport api from \"../../img/api.png\";\nimport \"./home.css\";\n\nclass PartnerBanner extends Component {\n state = {};\n render() {\n return (\n \n
    \n \n \"Eawag\n \"Eawag\n \n \n \"SDSC\n \"SDSC\n \n \n \"EPFL\n \"EPFL\n \n \n \"UNIL\n \"UNIL\n \n \n \n \n \n \n \"Carrtel\n \"Carrtel\n \n
    \n
    \n );\n }\n}\n\nclass Home extends Component {\n constructor(props) {\n super(props);\n this.home = React.createRef();\n this.ourdata = React.createRef();\n this.accessoptions = React.createRef();\n this.about = React.createRef();\n this.contact = React.createRef();\n this.insitu = React.createRef();\n this.simulation = React.createRef();\n this.rs = React.createRef();\n }\n componentDidMount() {\n this.parseSearch();\n }\n componentDidUpdate() {\n this.parseSearch();\n }\n\n parseSearch = () => {\n try {\n var { search } = this.props.location;\n if (search) {\n if (search === \"?home\") this.scrollTo(this.home, -50);\n if (search === \"?ourdata\") this.scrollTo(this.ourdata, -50);\n if (search === \"?accessoptions\") this.scrollTo(this.accessoptions, -50);\n if (search === \"?about\") this.scrollTo(this.about, -100);\n if (search === \"?contact\") this.scrollTo(this.contact, -50);\n }\n } catch (e) {\n console.log(e);\n }\n };\n\n scrollTo = (rf, plus) => {\n window.scrollTo({\n top: rf.current.offsetTop + plus,\n behavior: \"smooth\",\n });\n };\n\n render() {\n document.title =\n \"Datalakes - Search, visualise and download data on Swiss lakes\";\n return (\n \n
    \n
    \n
    \n Search, visualise and download data on Swiss lakes.\n
    \n\n \n
    \n\n \n\n
    \n Datalakes is a collaboration between a number of Swiss institutions\n to facilitate the visualisation and dissemination of reproducible\n datasets for Swiss lakes.\n
    \n\n
    \n \n
    \n
    Map Viewer
    \n
    \n \"map\"\n
    \n
    \n Build multi-layered maps of insitu-data, remote sensing and 3d\n models in our Web-GIS application.\n
    \n
    \n \n \n
    \n
    Data Portal
    \n
    \n \"data\"\n
    \n
    \n Find interesting datasets, visualise the data, download and\n access each datasets reproducable data pipeline.\n
    \n
    \n \n \n
    \n
    API
    \n
    \n \"api\"\n
    \n
    \n Build automated applications that connect to Datalakes through\n our API.\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    \n \n \n \n \n \n \n
    \n Discover years of sampling and insitu data\n measurements from across Switzerland.\n \n \n \n
    \n
    \n
    \n
    \n
    \n\n
    \n Datalakes is helping drive limnology into the digital era with a\n step change in reproducability.\n
    \n
    \n
    F
    \n
    indable
    \n
    \n
    \n
    A
    \n
    ccessible
    \n
    \n
    \n
    I
    \n
    nteroperable
    \n
    \n
    \n
    R
    \n
    eusable
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    \n \n \n \n \n \n \n
    \n Access years of remotely sensed water quality\n parameters for water bodies across Switerland.\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n\n
    \n

    About Datalakes

    \n
    \n
    \n \n Heterogeneous data platform for operational modeling and\n forecasting of Swiss lakes\n \n
    \n

    \n Developer:{\" \"}\n \n James Runnalls\n \n

    \n

    \n Principle Investigators:{\" \"}\n \n Damien Bouffard\n {\" \"}\n &{\" \"}\n \n Jonas Šukys\n \n

    \n

    \n Remote Sensing:{\" \"}\n \n Daniel Odermatt\n \n

    \n

    \n This project is a collaboration between Eawag and the Swiss Data\n Science Center (SDSC)\n

    \n

    \n Predicting the evolution of freshwater systems is the impetus of\n many limnologists. Technological developments have opened\n countless ways to investigate these systems, with the drawback\n that scientists are today overwhelmed by data. Efficiently\n utilizing the benefits of present-day data and technology\n requires optimizing the way data is shared and reused. The means\n of acquisition and computational processing of third-party data\n are often non transparent, and hence irreproducible after the\n end of the project’s timeframe.\n

    \n

    \n With the recent development of an operational interdisciplinary\n in-situ floating laboratory (LéXPLORE, https://lexplore.info/)\n on Lake Geneva, we identified the need for a user-friendly web\n based open access data platform to foster scientific data\n exchange: https://www.datalakes-eawag.ch/. The main objective\n was to provide a fully open access sensor-to-front end platform\n for scientific data in Swiss lakes. The Datalakes platform\n incorporates continuous in-situ acquisition, storage, curation,\n patching, visualization, and extraction frameworks of\n environmental data and model output, together with an accessible\n online interface for visualization of historical data, future\n predictions, and user-friendly online data extraction.\n

    \n

    \n We invite interested scientists to use Datalakes, and to\n visualize and download our initial datasets. We also welcome\n feedback and the inclusion of new data, products or models that\n will be of use to the Swiss freshwater community via this newly\n developed open access data infrastructure.\n

    \n
    \n
    \n
    \n \"Portrait\n
    \n For all queries regarding the functioning of the Datalakes web\n application please email James Runnalls.\n

    \n James.Runnalls@eawag.ch\n

    \n
    \n
    \n
    \n \"Portrait\n
    \n For all queries regarding the Datalakes project and for\n possible collaborations please email Damien Bouffard.\n

    \n Damien.Bouffard@eawag.ch\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default Home;\n","import React, { Component } from 'react';\nimport './notfound.css';\n\nclass NotFound extends Component {\n render() { \n var url = window.location.href;\n document.title = \"Not Found - Datalakes\";\n return ( \n
    \n
    404

    Not Found Error.

    \n

    The requested URL
    {url}
    was not found on this server.

    \n
    \n );\n }\n}\n \nexport default NotFound;","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport axios from \"axios\";\nimport Fuse from \"fuse.js\";\nimport { serverlessUrl, apiUrl } from \"../../../src/config.json\";\nimport SidebarLayout from \"../../format/sidebarlayout/sidebarlayout\";\nimport FilterBox from \"../../components/filterbox/filterbox\";\nimport MapSelect from \"../../graphs/leaflet/mapselect.jsx\";\nimport Loading from \"../../components/loading/loading.jsx\";\nimport calendar from \"./img/calendar.svg\";\nimport location from \"./img/location.svg\";\nimport model from \"./img/model.svg\";\nimport satellite from \"./img/satellite.svg\";\nimport measurement from \"./img/measurement.svg\";\nimport \"./dataportal.css\";\n\nclass DatasetList extends Component {\n render() {\n const {\n dropdown,\n list,\n parameters,\n selected,\n onSelectDataset,\n datalistclass,\n getLabel,\n loading,\n editUrl,\n connect,\n } = this.props;\n if (list.length > 0) {\n return (\n \n
    \n {list.map((dataset) => (\n \n ))}\n
    \n
    \n );\n } else {\n if (loading) {\n return (\n
    \n \n Loading Datasets\n
    \n );\n } else if (!connect) {\n return (\n
    \n Appologies the Datalakes API is experiencing some connectivity\n issues.
    \n Please wait a few minutes then try refreshing the page.\n
    \n );\n } else {\n return (\n
    \n Sorry no datasets match your search. Please adjust your search\n parameters and try again.\n
    \n );\n }\n }\n }\n}\n\nclass Dataset extends Component {\n getParameters = (id) => {\n const { parameters } = this.props;\n return parameters.filter((x) => x.datasets_id === id);\n };\n\n parseDate = (input) => {\n var months = [\n \"Jan \",\n \"Feb \",\n \"Mar \",\n \"Apr \",\n \"May \",\n \"Jun \",\n \"Jul \",\n \"Aug \",\n \"Sept \",\n \"Oct \",\n \"Nov \",\n \"Dec \",\n ];\n var date = new Date(input);\n return months[date.getMonth()] + date.getFullYear();\n };\n\n render() {\n const { dataset, selected, onSelectDataset, getLabel, editUrl } =\n this.props;\n var url;\n if (dataset.id === 1) {\n url = \"/lakemorphology\";\n } else {\n url = \"/datadetail/\" + dataset.id;\n }\n var params = this.getParameters(dataset.id);\n params = params.filter(\n (x) => ![1, 2, 3, 4, 27, 28, 29, 30].includes(x.parameters_id)\n );\n var param_names = params.map((p) => p.name);\n param_names = [...new Set(param_names)];\n var lake = getLabel(\"lakes\", dataset.lakes_id);\n if (lake === \"Multiple\") {\n lake = \"Switzerland\";\n }\n var typeimg = model;\n var typetext = \"Model Results\";\n if (dataset.origin === \"measurement\") {\n typeimg = measurement;\n typetext = \"Measurements\";\n } else if (dataset.origin === \"satellite\") {\n typeimg = satellite;\n typetext = \"Satellite Data\";\n }\n return (\n \n \n \n \n \n \n \n \n \n \n
    \n
    {dataset.title}
    \n {Number.isInteger(dataset.monitor) && (\n
    LIVE
    \n )}\n
    {dataset.description}
    \n
    \n \n
    View Dataset
    \n \n {dataset.mapplot !== \"other\" && (\n onSelectDataset(dataset)}\n >\n {selected.includes(dataset) ? \"Deselect\" : \"Select\"}\n
    \n )}\n \n
    \n {param_names.map((param) => (\n
    \n {param}\n
    \n ))}\n
    \n
    \n \"location\" {lake}\n
    \n
    \n \"calendar\"\n {this.parseDate(dataset.mindatetime)} to{\" \"}\n {this.parseDate(dataset.maxdatetime)}\n
    \n \n
    \n );\n }\n}\n\nclass PopupBox extends Component {\n render() {\n const { title, fun, state } = this.props;\n var symbol;\n if (state) {\n symbol = \"-\";\n } else {\n symbol = \"+\";\n }\n return (\n
    \n
    \n
    {title}
    \n {symbol}\n
    \n
    \n );\n }\n}\n\nclass FilterBoxInner extends Component {\n capitalizeFirstLetter = (string) => {\n if (string && string.length > 2) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n } else {\n return string;\n }\n };\n state = {};\n render() {\n var { params, checkbox, cat, filters, table } = this.props;\n params = params.map((p) => {\n if (p.name === \"internal\") p.name = \"Git Repository\";\n return p;\n });\n params = params.filter((p) => p.name !== \"Error\");\n return (\n \n
    \n {params.map((param) => (\n checkbox(param.id, param.name, cat, table)}\n className=\"filterboxinner\"\n >\n \n {this.capitalizeFirstLetter(param.name) + \" \"}({param.count})\n
    \n ))}\n \n
    \n );\n }\n}\n\nclass FilterBar extends Component {\n render() {\n const { filters, removeFilter } = this.props;\n return (\n
    \n {Object.keys(filters).map((filter) => (\n removeFilter(filter)}\n title=\"Remove filter\"\n >\n
    {filter}
    \n
    \n
    \n ))}\n \n );\n }\n}\n\nclass DataPortal extends Component {\n state = {\n filters: {},\n search: \"\",\n datasets: [],\n parameters: [],\n selected: [],\n sortby: \"recent\",\n download: false,\n map: false,\n loading: true,\n connect: true,\n };\n\n parameterDetails = (dropdown, parameters, x) => {\n return dropdown.parameters.find(\n (item) => item.id === parameters[x].parameters_id\n );\n };\n\n getLabel = (input, id) => {\n const { dropdown } = this.state;\n try {\n return dropdown[input].find((x) => x.id === id).name;\n } catch (e) {\n console.log(e);\n return \"NA\";\n }\n };\n\n getLabelInitial = (input, id, dropdown) => {\n try {\n return dropdown[input].find((x) => x.id === id).name;\n } catch (e) {\n console.log(e);\n return \"NA\";\n }\n };\n\n setSelect = (event) => {\n this.setState({ sortby: event.target.value });\n };\n\n download = () => {\n this.setState({ download: !this.state.download });\n };\n\n mapToggle = () => {\n this.setState({ map: !this.state.map });\n };\n\n searchDatasets = (event) => {\n if (event.target.value === \"\") this.clearUrl();\n this.setState({ search: event.target.value });\n };\n\n selectDataset = (dataset) => {\n if (this.state.selected.includes(dataset)) {\n const selected = this.state.selected.filter((c) => c !== dataset);\n this.setState({ selected: selected });\n } else {\n const selected = this.state.selected;\n selected.push(dataset);\n this.setState({ selected: selected });\n }\n };\n\n clearSelected = () => {\n this.setState({ selected: [] });\n };\n\n removeFilter = (filter) => {\n var { filters } = this.state;\n if (filter in filters) {\n delete filters[filter];\n }\n this.setState({ filters });\n };\n\n checkboxAddFilter = (id, name, cat, table) => {\n var { filters } = this.state;\n if (name in filters) {\n delete filters[name];\n } else {\n filters[name] = { id: id, category: cat, set: table };\n }\n this.setState({ filters });\n };\n\n mapAddFilter = (latlng) => {\n var { filters } = this.state;\n filters.Location = { id: latlng, category: \"Location\", set: \"Location\" };\n this.setState({ filters });\n };\n\n startTimeAddFilter = (e) => {\n var { filters } = this.state;\n var date = e.target.value;\n var f = Object.values(filters).filter((f) => f.set === \"Start Date\");\n if (f.length > 0) {\n delete filters[\"After \" + f[0].id];\n }\n if (date !== \"\") {\n filters[\"After \" + date] = {\n id: date,\n category: \"mindatetime\",\n set: \"Start Date\",\n };\n }\n this.setState({ filters });\n };\n\n endTimeAddFilter = (e) => {\n var { filters } = this.state;\n var date = e.target.value;\n var f = Object.values(filters).filter((f) => f.set === \"End Date\");\n if (f.length > 0) {\n delete filters[\"Before \" + f[0].id];\n }\n if (date !== \"\") {\n filters[\"Before \" + date] = {\n id: date,\n category: \"maxdatetime\",\n set: \"End Date\",\n };\n }\n this.setState({ filters });\n };\n\n count = (input, name, parameters) => {\n return parameters.filter((x) => x[input] === name).length;\n };\n\n sortDownloads = (dataset) => {\n return dataset;\n };\n\n filterList = (params, name, label, exclude = \"\") => {\n var distinct = [];\n var dp = [...new Set(params.map((x) => x[name]))];\n for (var p of dp) {\n if (p !== exclude) {\n var namelabel = p;\n if (name.includes(\"id\")) namelabel = this.getLabel(label, p);\n distinct.push({\n id: p,\n name: namelabel,\n count: this.count(name, p, params),\n });\n }\n }\n distinct.sort((a, b) => {\n if (a.name < b.name) {\n return -1;\n }\n if (a.name > b.name) {\n return 1;\n }\n return 0;\n });\n return distinct;\n };\n\n sortDatasets = (dataset, sortby) => {\n if (sortby === \"az\") {\n dataset.sort((a, b) => {\n return a.title - b.title;\n });\n } else if (sortby === \"downloads\") {\n dataset.sort((a, b) => {\n return b.downloads - a.downloads;\n });\n } else if (sortby === \"recent\") {\n dataset.sort((a, b) => {\n return new Date(b.maxdatetime) - new Date(a.maxdatetime);\n });\n }\n return dataset;\n };\n\n filterDataSet = (dataset, filters, parameters, avoid = \"\") => {\n const filterData = (data, filter, parameters) => {\n if (filter.set === \"datasets\") {\n return data.filter((item) => item[filter.category] === filter.id);\n } else if (filter.set === \"parameters\") {\n return data.filter(\n (item) =>\n parameters.filter(\n (x) =>\n x[filter.category] === filter.id && x.datasets_id === item.id\n ).length > 0\n );\n } else if (filter.set === \"Location\") {\n var latlng = filter.id;\n var maxlat = Math.max.apply(\n Math,\n latlng.map(function (o) {\n return o.lat;\n })\n );\n var maxlng = Math.max.apply(\n Math,\n latlng.map(function (o) {\n return o.lng;\n })\n );\n var minlat = Math.min.apply(\n Math,\n latlng.map(function (o) {\n return o.lat;\n })\n );\n var minlng = Math.min.apply(\n Math,\n latlng.map(function (o) {\n return o.lng;\n })\n );\n return data.filter(\n (item) =>\n item[\"latitude\"] > minlat &&\n item[\"latitude\"] < maxlat &&\n item[\"longitude\"] > minlng &&\n item[\"longitude\"] < maxlng\n );\n } else if (filter.set === \"Start Date\") {\n return data.filter(\n (item) =>\n new Date(item[\"maxdatetime\"]).getTime() >\n new Date(filter.id).getTime()\n );\n } else if (filter.set === \"End Date\") {\n return data.filter(\n (item) =>\n new Date(item[\"mindatetime\"]).getTime() <\n new Date(filter.id).getTime()\n );\n } else {\n return data;\n }\n };\n\n if (Object.keys(filters).length > 0) {\n var tDatasets;\n var category = [\n ...new Set(Object.values(filters).map((filter) => filter.category)),\n ].filter((cat) => cat !== avoid); // List of catagories in filters\n for (var l of category) {\n tDatasets = [];\n for (var f of this.filterCategory(filters, l)) {\n tDatasets = tDatasets.concat(filterData(dataset, f, parameters));\n }\n dataset = [...new Set(tDatasets)];\n }\n }\n return dataset;\n };\n\n filterCategory = (filters, l) => {\n return Object.values(filters).filter((filter) => filter.category === l);\n };\n\n filterParameters = (dataset, params) => {\n return params.filter(\n (param) =>\n dataset.filter((data) => data.id === param.datasets_id).length > 0 &&\n param.parameters_id !== 1\n );\n };\n\n focusSearchBar = (e) => {\n try {\n if (e.key.length === 1 && e.key.match(/[a-z]/i)) {\n document.getElementById(\"dataportalsearchbar\").focus();\n }\n } catch (e) {}\n };\n\n editUrl = () => {\n if (this.state.search === \"\") {\n let { pathname } = this.props.location;\n this.props.history.push({\n pathname: pathname,\n search: \"\",\n });\n } else {\n var new_search = \"?search=\" + this.state.search.replaceAll(\" \", \"+\");\n let { search, pathname } = this.props.location;\n if (new_search !== search) {\n this.props.history.push({\n pathname: pathname,\n search: new_search,\n });\n }\n }\n };\n\n clearUrl = () => {\n let { pathname } = this.props.location;\n this.props.history.push({\n pathname: pathname,\n search: \"\",\n });\n };\n\n async componentDidMount() {\n window.addEventListener(\"keydown\", this.focusSearchBar);\n var { search: location_search } = this.props.location;\n var { search, connect } = this.state;\n const timeout = 1000;\n var server;\n try {\n server = await Promise.all([\n axios.get(apiUrl + \"/selectiontables\", { timeout: timeout }),\n axios.get(apiUrl + \"/datasets\", { timeout: timeout }),\n axios.get(apiUrl + \"/datasetparameters\", { timeout: timeout }),\n ]);\n } catch (error) {\n try {\n console.error(\"NodeJS API error switching to serverless API\");\n server = await Promise.all([\n axios.get(serverlessUrl + \"/selectiontables\"),\n axios.get(serverlessUrl + \"/datasets\"),\n axios.get(serverlessUrl + \"/datasetparameters\"),\n ]);\n } catch (error) {\n console.error(\"Serverless API error\");\n server = [0, 0, 0];\n }\n }\n const dropdown = server[0].data;\n var datasets = server[1].data;\n var parameters = server[2].data;\n if (server[1].status !== 200 || server[2].status !== 200) {\n datasets = [];\n parameters = [];\n connect = false;\n } else {\n // Add parameter details\n var details;\n var dict = {};\n for (var x in parameters) {\n try {\n details = this.parameterDetails(dropdown, parameters, x);\n parameters[x][\"name\"] = details.name;\n parameters[x][\"characteristic\"] = details.characteristic;\n if (parameters[x][\"datasets_id\"] in dict) {\n dict[parameters[x][\"datasets_id\"]].push(details.name);\n } else {\n dict[parameters[x][\"datasets_id\"]] = [details.name];\n }\n } catch (err) {\n parameters[x][\"name\"] = null;\n parameters[x][\"characteristic\"] = null;\n }\n }\n }\n for (var dataset of datasets) {\n dataset[\"parameters\"] = dict[dataset[\"id\"]];\n dataset[\"lake_name\"] = this.getLabelInitial(\n \"lakes\",\n dataset[\"lakes_id\"],\n dropdown\n );\n }\n const options = {\n shouldSort: true,\n threshold: 0.6,\n useExtendedSearch: true,\n keys: [\"title\", \"description\", \"parameters\", \"lake_name\"],\n };\n var fuse_datasets = JSON.parse(JSON.stringify(datasets));\n const fuse = new Fuse(fuse_datasets, options);\n var search_arr = location_search\n .replace(\"?\", \"\")\n .split(\"&\")\n .filter((s) => s.includes(\"search\"));\n if (search_arr.length === 1)\n search = search_arr[0].split(\"=\")[1].replaceAll(\"+\", \" \");\n this.setState({\n datasets,\n parameters,\n dropdown,\n fuse,\n search,\n loading: false,\n connect,\n });\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"keydown\", this.focusSearchBar);\n }\n\n render() {\n document.title = \"Data Portal - Datalakes\";\n const {\n fuse,\n search,\n filters,\n datasets,\n selected,\n dropdown,\n parameters,\n sortby,\n download,\n map,\n loading,\n connect,\n } = this.state;\n\n // Filter by filters\n var fDatasets = this.filterDataSet(datasets, filters, parameters);\n\n // Filter by search\n if (search !== \"\" && search !== undefined && !loading) {\n fDatasets = fuse.search(search).map((f) => f.item);\n }\n\n // Parameter filtering\n var fParams = this.filterParameters(fDatasets, parameters);\n const dataP = this.filterParameters(\n this.filterDataSet(datasets, filters, parameters, \"parameters_id\"),\n parameters\n );\n const dataL = this.filterDataSet(datasets, filters, parameters, \"lakes_id\");\n\n var dParams = this.filterList(dataP, \"parameters_id\", \"parameters\", 1);\n var dLake = this.filterList(dataL, \"lakes_id\", \"lakes\");\n var dOrigin = this.filterList(datasets, \"origin\", \"NA\");\n\n // Sort by\n if (search === \"\") {\n fDatasets = this.sortDatasets(fDatasets, sortby);\n }\n\n // Selected link\n var sids = selected.map((x) => x.id);\n var p = JSON.parse(JSON.stringify(parameters));\n p = p.filter((x) => sids.includes(x.datasets_id));\n p = p.filter((x) => ![1, 2, 3, 4].includes(x.parameters_id));\n p = p.map((x) => [x.datasets_id, x.parameters_id]);\n var link = \"/map?selected=\" + JSON.stringify(p);\n\n return (\n \n

    Data Portal

    \n
    \n \n
    \n \n
    \n \n \n \n \n \n \n \n
    \n \n {selected.length} selected of {fDatasets.length}{\" \"}\n datasets\n \n \n \n ✕\n \n
    \n {search === \"\" && (\n \n \n \n \n \n )}\n
    \n \n\n
    \n
    \n

    Selected Datasets

    \n {selected.length > 0 ? (\n
    \n
    \n {selected.map((s) => {\n return (\n
    \n {s.title}\n
    \n );\n })}\n
    \n \n \n \n
    \n ) : (\n
    No datasets selected
    \n )}\n
    \n
    \n\n \n
    \n Hold ctrl, click and drag to select a custom area\n
    \n \n \n \n
    \n }\n rightNoScroll={\n \n \n \n \n \n \n \n \n \n \n \n \n
    FromUntil
    \n \n \n \n
    \n \n \n }\n preopen=\"true\"\n />\n \n }\n preopen=\"true\"\n />\n \n }\n preopen=\"true\"\n />\n
    \n }\n />\n \n );\n }\n}\n\nexport default DataPortal;\n","import React, { Component } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport Loading from \"../../../components/loading/loading\";\n\nclass CloneRepository extends Component {\n state = {\n message: \"\",\n loading: false,\n optionalid: false,\n };\n\n toggleOptional = () => {\n this.setState({ optionalid: !this.state.optionalid });\n };\n\n nextStep = async (e) => {\n e.preventDefault();\n var { loading } = this.state;\n if (!loading) {\n this.setState({\n loading: true,\n message:\n \"Cloning repository. This might take a while for repositories with large datasets.\",\n });\n var id = false;\n if (document.getElementById(\"id\").value !== \"\") {\n id = document.getElementById(\"id\").value;\n }\n this.props.nextStep(id).catch((error) => {\n console.error(error.message);\n console.log(error);\n this.setState({\n message: error.message,\n loading: false,\n });\n });\n } else {\n console.error(\"Processing Running\");\n }\n };\n\n componentDidMount() {\n // Put cursor in input box.\n ReactDOM.findDOMNode(this.refs.git).focus();\n ReactDOM.findDOMNode(this.refs.git).select();\n }\n\n render() {\n const { dataset } = this.props;\n var { message, loading } = this.state;\n\n if (message !== \"\") {\n var userMessage = (\n
    \n {loading && }\n
    {message}
    \n
    \n );\n }\n\n return (\n \n
    \n
    \n

    Welcome to the Datalakes UI for adding new datasets.

    \n Datalakes is a reproducible data portal. As such all datasets should\n be saved in a git repository. Please provide a link to your\n repository below. Links must be in the \"ssh\" format as if you were\n going to clone your repository.\n
    \n
    \n \n \n \n Specify id for dataset (not recommended)\n \n \n
    \n
    {userMessage}
    \n
    \n \n
    \n
    \n
    \n );\n }\n}\n\nexport default CloneRepository;\n","import React, { Component } from \"react\";\nimport Select from \"react-select\";\nimport Loading from \"../../../components/loading/loading\";\n\nclass SelectDataset extends Component {\n state = {\n message: \"\",\n loading: false,\n };\n\n nextStep = async (e) => {\n e.preventDefault();\n var { loading } = this.state;\n if (!loading) {\n this.setState({\n loading: true,\n message:\n \"Accessing files. This might take a while for repositories with external storage.\",\n });\n this.props.nextStep().catch((error) => {\n console.error(error.message);\n console.log(error);\n this.setState({\n message: error.message,\n loading: false,\n });\n });\n } else {\n console.error(\"Processing Running\");\n }\n };\n\n prevStep = (e) => {\n e.preventDefault();\n this.props.prevStep();\n };\n\n render() {\n var { dataset, allFiles } = this.props;\n var { message, loading } = this.state;\n var { folder } = dataset;\n\n allFiles.sort(function (a, b) {\n return b.split(\"/\").length - a.split(\"/\").length;\n });\n allFiles = allFiles.filter((f) => f.slice(-3) === \".nc\");\n allFiles = allFiles.map((f) => {\n let lastIndex = f.lastIndexOf(\"/\");\n return f.slice(0, lastIndex);\n });\n allFiles = [...new Set(allFiles)];\n allFiles = allFiles.map((f) => {\n let firstIndex = f.split(\"/\", 3).join(\"/\").length;\n return {\n value: f,\n label: f.slice(firstIndex, f.length),\n };\n });\n\n if (message !== \"\") {\n var userMessage = (\n
    \n {loading && }\n
    {message}
    \n
    \n );\n }\n\n return (\n \n
    \n
    \n Select the folder from the dropdown that contains your dataset. Only folders containing NetCDF files are displayed.\n
    \n \n\n
    {userMessage}
    \n
    \n \n \n
    \n \n
    \n );\n }\n}\n\nexport default SelectDataset;\n","import React, { Component } from \"react\";\nimport \"./modal.css\";\n\nclass Modal extends Component {\n hide = () => {\n this.props.showModal();\n this.props.clearState();\n }\n render() {\n const { show, value } = this.props;\n if (!show) {\n return null;\n }\n return (\n \n
    \n
    \n ×\n {value}\n
    \n
    \n
    \n );\n }\n}\n\nexport default Modal;\n","import React, { Component } from \"react\";\nimport axios from \"axios\";\nimport Modal from \"../../components/modal/modal\";\nimport { apiUrl } from \"../../../src/config.json\";\n\nclass SelectCustom extends Component {\n render() {\n const { list, onChange } = this.props;\n var options = [];\n for (var item of list) {\n options.push(\n \n );\n }\n return ;\n }\n}\n\nclass AddDropdownItem extends Component {\n state = {\n values: {}\n };\n\n clearState = () => {\n this.setState({ values: {} });\n };\n\n handleChange = input => event => {\n var values = this.state.values;\n values[input] = event.target.value;\n this.setState({ values });\n };\n\n submit = async e => {\n e.preventDefault();\n await axios.post(apiUrl + \"/selectiontables\", {\n table: this.props.modalValue,\n data: this.state.values\n });\n this.props.showModal();\n this.clearState();\n this.props.getDropdowns();\n };\n\n componentDidUpdate() {\n this.setInitialSelectState();\n }\n\n setInitialSelectState = () => {\n const { modalValue, modalInfo } = this.props;\n var { values } = this.state;\n var keys = \"\";\n\n if (modalValue !== undefined) {\n try {\n keys = Object.keys(modalInfo[modalValue][0]);\n } catch (e) {}\n }\n\n if (Array.isArray(keys)) {\n for (var label of keys) {\n if (label.includes(\"_id\")) {\n if (label in values) {\n } else {\n values[label] = modalInfo[label.split(\"_\")[0]][0].id;\n this.setState({ values });\n }\n }\n }\n }\n };\n\n render() {\n const { show, showModal, modalValue, modalInfo } = this.props;\n var keys = \"\";\n var table = [];\n\n if (modalValue !== undefined) {\n try {\n keys = Object.keys(modalInfo[modalValue][0]);\n } catch (e) {}\n }\n\n if (Array.isArray(keys)) {\n for (var label of keys) {\n if (label === \"id\") {\n } else if (label.includes(\"_id\")) {\n table.push(\n \n {label}\n \n \n \n \n );\n } else {\n table.push(\n \n {label}\n \n \n \n \n );\n }\n }\n }\n\n var value = (\n
    \n

    Add {modalValue}

    \n

    Do not add duplicate values to the list.

    \n \n {table}\n
    \n
    \n \n
    \n
    \n );\n return (\n \n \n \n );\n }\n}\n\nexport default AddDropdownItem;\n","import React, { Component } from \"react\";\nimport DataSelect from \"../../../components/dataselect/dataselect\";\nimport AddDropdownItem from \"../adddropdownitem\";\nimport Loading from \"../../../components/loading/loading\";\n\nclass OrderArrows extends Component {\n state = {};\n render() {\n var { up, down, location } = this.props;\n return (\n
    \n {location !== \"top\" &&
    }\n {location !== \"bottom\" &&
    }\n
    \n );\n }\n}\n\nclass ReviewData extends Component {\n state = {\n modal: false,\n modalValue: \"\",\n loading: false,\n };\n\n // Modal for adding to dropdown lists\n showModal = (value) => {\n this.setState({\n modal: !this.state.modal,\n modalValue: value,\n });\n };\n\n nextStep = (e) => {\n e.preventDefault();\n var { loading } = this.state;\n if (!loading) {\n this.setState({\n message:\n \"Parsing data to JSON format. This might take a while for large files.\",\n loading: true,\n });\n\n this.props.nextStep().catch((error) => {\n console.error(error, error.message);\n this.setState({\n message: error.message,\n loading: false,\n });\n });\n } else {\n console.error(\"Processing Running\");\n }\n };\n\n handleDatasetIntercept = (input) => {\n var { handleDataset, resetFileConnect, fileconnect } = this.props;\n if (fileconnect !== \"no\") {\n resetFileConnect();\n }\n handleDataset(input);\n };\n\n toggleLive = () => {\n var value = \"false\";\n if (this.props.dataset.liveconnect === \"false\") value = \"true\";\n this.props.updateDataset(\"liveconnect\", value);\n };\n\n toggleConnect = () => {\n var value = \"time\";\n if (this.props.dataset.fileconnect === \"time\") value = \"no\";\n this.props.updateDataset(\"fileconnect\", value);\n };\n\n prevStep = (e) => {\n e.preventDefault();\n this.props.prevStep();\n };\n\n listMatch = (l1, l2) => {\n for (let i of l1) {\n if (l2.includes(i.toLowerCase())) {\n return i;\n }\n }\n return false;\n };\n\n dpfilter = (datasetparameters, pid) => {\n return datasetparameters.filter((dp) => dp.parameters_id !== pid);\n };\n\n render() {\n const {\n dropdown,\n getDropdowns,\n datasetparameters,\n handleChange,\n handleCheck,\n handleSelect,\n liveconnect,\n fileconnect,\n moveParameterUp,\n moveParameterDown,\n } = this.props;\n const { parameters, sensors } = dropdown;\n var { modal, modalValue, message, loading } = this.state;\n\n // Create dynamic table\n var errorids = [27, 28, 29, 30];\n var rows = [];\n var i = 0;\n for (var row of datasetparameters) {\n var link =
    ;\n if (errorids.includes(row.parameters_id)) {\n var ids = this.dpfilter(datasetparameters, row.parameters_id);\n var list = ids.map((i) => {\n return { id: i.id, name: i.id };\n });\n link = (\n \n );\n }\n var location = \"\";\n if (i === 0) location = \"top\";\n if (i === datasetparameters.length - 1) location = \"bottom\";\n let temp_id = i;\n rows.push(\n \n \n moveParameterUp(temp_id)}\n down={() => moveParameterDown(temp_id)}\n location={location}\n />\n \n {row.id}\n {row.parseparameter}\n {row.parseUnit}\n {\"[\" + row.dims.map((d) => d.name).join(\", \") + \"]\"}\n \n \n \n \n \n \n {link}\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n i++;\n }\n\n // Modal data\n const modalInfo = { parameters: parameters, sensors: sensors };\n\n // Loading message when parsing data\n if (message !== \"\") {\n var userMessage = (\n
    \n {loading && }\n
    {message}
    \n
    \n );\n }\n\n return (\n \n
    \n
    \n Review the file autoparse to ensure that the file axis and\n parameters are correct.\n
    \n
    \n \n Connect files along the time axis.\n
    \n
    \n \n Live connection\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {rows}\n \n
    Read from fileCheck and adjust auto-parse
    IDVariableUnitsDimensionsParameterAxisLinkExtra DetailsUnitsSensor\n
    Incl.
    \n
    \n
    {userMessage}
    \n
    \n \n \n
    \n
    \n \n
    \n );\n }\n}\n\nexport default ReviewData;\n","import React, { Component } from \"react\";\nimport file from \"./img/file.svg\";\nimport folder from \"./img/folder.svg\";\nimport \"./fileselector.css\";\n\nclass Folder extends Component {\n state = {\n open: this.props.open ? true : false,\n };\n\n toggle = () => {\n this.setState({ open: !this.state.open });\n };\n render() {\n var { name, children } = this.props;\n var { open } = this.state;\n var split = name.split(\"/\");\n var outname = split[split.length - 1];\n return (\n
    \n
    \n
    \n {open ? \"\\u25BC\" : \"\\u25BA\"}\n
    \n \"folder\"\n {outname}\n
    \n {open &&
    {children}
    }\n
    \n );\n }\n}\n\nclass File extends Component {\n state = {};\n render() {\n var { name, data, onChange } = this.props;\n var split = name.split(\"/\");\n var outname = split[split.length - 1];\n var checked = data.includes(name);\n return (\n
    \n \n \"file\"\n {outname}\n
    \n );\n }\n}\n\nclass FileSelector extends Component {\n state = {};\n\n longestArray = (arr) => {\n var len = 0;\n for (var i = 0; i < arr.length; i++) {\n if (arr[i].length > len) len = arr[i].length;\n }\n return len;\n };\n\n updateArray = (event) => {\n var { accompanyingdata, handleAccompanyingData } = this.props;\n var id = event.target.id;\n if (accompanyingdata.includes(id)) {\n accompanyingdata = accompanyingdata.filter((ad) => ad !== id);\n } else {\n accompanyingdata.push(id);\n }\n handleAccompanyingData(accompanyingdata);\n };\n\n getChildren = (name, files) => {\n var { accompanyingdata } = this.props;\n var nameLength = name.split(\"/\").length;\n var shortFiles = files.map((f) => {\n var split = f.split(\"/\");\n var type = \"folder\";\n if (split.length === nameLength + 1) {\n type = \"file\";\n }\n return [split.slice(0, nameLength + 1).join(\"/\"), type];\n });\n var children = shortFiles.filter((f) => f[0].includes(name + \"/\"));\n var set = new Set(children.map(JSON.stringify));\n var uniqueChildren = Array.from(set).map(JSON.parse);\n var out = [];\n for (var i = 0; i < uniqueChildren.length; i++) {\n if (uniqueChildren[i][1] === \"file\") {\n out.push(\n \n );\n } else {\n out.push(\n \n );\n }\n }\n return out;\n };\n\n render() {\n var { allFiles } = this.props;\n allFiles = JSON.parse(JSON.stringify(allFiles));\n var files = allFiles.map((af) => af.split(\"/\"));\n var tree;\n if (files.length > 0) {\n var firstFolder = files[0].slice(0, 3).join(\"/\");\n tree = (\n \n );\n } else {\n tree = null;\n }\n\n return (\n
    \n {tree}\n
    \n );\n }\n}\n\nexport default FileSelector;\n","import React, { Component } from \"react\";\nimport FileSelector from \"../../../components/fileselector/fileselector\";\n\nclass ReviewLineage extends Component {\n state = {\n message: \"\",\n };\n\n nextStep = (e) => {\n e.preventDefault();\n this.props.nextStep().catch((error) => {\n console.error(error.message);\n this.setState({\n message: error.message,\n });\n });\n };\n\n prevStep = (e) => {\n e.preventDefault();\n this.props.prevStep();\n };\n\n render() {\n const {\n dataset,\n renkuResponse,\n allFiles,\n handleAccompanyingData,\n } = this.props;\n var { accompanyingdata } = dataset;\n const { message } = this.state;\n\n allFiles.sort(function(a, b){\n return b.split(\"/\").length - a.split(\"/\").length;\n })\n var selectedfiles = accompanyingdata\n .map((ad) => {\n var arr = ad.split(\"/\");\n return arr[arr.length - 1];\n })\n .join(\", \");\n var renku = \"\";\n if (renkuResponse.stdout === 0 && renkuResponse.log.data.lineage !== null) {\n renku = \"Renku lineage information detected.\";\n }\n\n return (\n \n
    \n
    \n

    \n Reproducability is key for open science. Please attach all files\n needed to reproduce a subset of this dataset.\n

    {\" \"}\n

    This typically includes:

    \n
      \n
    1. An example of the raw data
    2. \n
    3. Any processing scripts
    4. \n
    5. Environment information such as requirements.txt
    6. \n
    \n

    \n This is also a good place to add custom calibration files or any\n other information related to the data.\n

    \n

    {renku}

    \n
    \n \n
    Selected: {selectedfiles}
    \n
    {message}
    \n
    \n \n \n
    \n \n
    \n );\n }\n}\n\nexport default ReviewLineage;\n","import React, { Component } from \"react\";\nimport DataSelect from \"../../../components/dataselect/dataselect\";\nimport AddDropdownItem from \"../adddropdownitem\";\nimport qm from \"../../../img/qm.svg\";\n\nclass AddMetadata extends Component {\n state = {\n modal: false,\n modalValue: \"\",\n message: \"\",\n };\n\n // Modal for adding to dropdown lists\n showModal = (value) => {\n this.setState({\n modal: !this.state.modal,\n modalValue: value,\n });\n };\n\n nextStep = (e) => {\n e.preventDefault();\n this.props.nextStep().catch((error) => {\n console.error(error.message);\n this.setState({\n message: error.message,\n });\n });\n };\n\n prevStep = (e) => {\n e.preventDefault();\n this.props.prevStep();\n };\n\n render() {\n const { dropdown, getDropdowns, dataset, handleChange, handleSelect } =\n this.props;\n const { lakes, persons, projects, organisations, licenses } = dropdown;\n const modalInfo = {\n persons: persons,\n projects: projects,\n lakes: lakes,\n organisations: organisations,\n licenses: licenses,\n };\n const { modal, modalValue, message } = this.state;\n return (\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n Minimum Datetime\n \n \n \n \n {\n \n \n
    \n {new Date(dataset[\"mindatetime\"] * 1000).toString()}\n
    \n
    \n }\n
    \n Maximum Datetime\n \n \n \n \n {\n \n \n
    \n {new Date(dataset[\"maxdatetime\"] * 1000).toString()}\n
    \n
    \n }\n
    Location\n {\n \n }\n {\n \n }\n
    Minimum Depth (m)\n {\n \n }\n
    Maximum Depth (m)\n {\n \n }\n
    Lake\n \n
    Title\n \n
    Description\n \n
    Project\n \n
    Person\n \n
    Organisation\n \n
    \n License\n \n \n \n \n \n
    Citation\n \n
    Download Embargo (Months)\n \n
    Download Password\n \n
    \n
    {message}
    \n
    \n \n \n
    \n
    \n \n
    \n );\n }\n}\n\nexport default AddMetadata;\n","import React, { Component } from \"react\";\nimport Loading from \"../../../components/loading/loading\";\n\nclass Publish extends Component {\n state = {\n message: \"\",\n loading: true\n };\n\n nextStep = e => {\n this.setState({\n loading: true,\n message: \"Publishing Dataset.\"\n });\n e.preventDefault();\n this.props.nextStep().catch(error => {\n console.error(error.message);\n this.setState({\n message: error.message,\n loading: false\n });\n });\n };\n\n prevStep = e => {\n e.preventDefault();\n this.props.prevStep();\n };\n\n getDropdownLabel = (input, id) => {\n try {\n const { dropdown } = this.props;\n return dropdown[input].find(x => x.id === id).name;\n } catch (e) {\n console.error(input, id, e.message);\n }\n };\n\n render() {\n const { datasetparameters, dataset } = this.props;\n var { message, loading } = this.state;\n\n if (message !== \"\") {\n var userMessage = (\n
    \n {loading && }\n {message}\n
    \n );\n }\n\n // Parameter Table\n var rows = [];\n var i = 0;\n for (var row of datasetparameters) {\n if (row.included) {\n rows.push(\n \n {this.getDropdownLabel(\"parameters\", row.parameters_id)}\n {row.axis}\n {row.detail}\n {row.unit}\n {this.getDropdownLabel(\"sensors\", row.sensors_id)}\n \n );\n i++;\n }\n }\n\n // Renku\n var renku = \"\";\n if (dataset[\"renku\"] === 0) {\n renku = \"Lineage managed through Renku\";\n } else {\n renku = \"Not used.\";\n }\n\n return (\n
    \n

    Dataset Parameters

    \n \n \n \n \n \n \n \n \n \n {rows}\n \n
    ParameterAxisExtra DetailUnitsSensor
    \n

    Dataset Metadata

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    File path{dataset[\"datasourcelink\"]}
    Min Datetime{new Date(dataset[\"mindatetime\"]).toString()}
    Max Datetime{new Date(dataset[\"maxdatetime\"]).toString()}
    Location\n {dataset[\"latitude\"]},{dataset[\"longitude\"]}\n
    Minimum Depth{dataset[\"mindepth\"]}m
    Maximum Depth{dataset[\"maxdepth\"]}m
    Lake{this.getDropdownLabel(\"lakes\", dataset[\"lakes_id\"])}
    Title{dataset[\"title\"]}
    Description{dataset[\"title\"]}
    Project\n {this.getDropdownLabel(\"projects\", dataset[\"projects_id\"])}\n
    Person{this.getDropdownLabel(\"persons\", dataset[\"persons_id\"])}
    Organisation\n {this.getDropdownLabel(\n \"organisations\",\n dataset[\"organisations_id\"]\n )}\n
    License\n {this.getDropdownLabel(\"licenses\", dataset[\"licenses_id\"])}\n
    Citation{dataset[\"citation\"]}
    Renku{renku}
    Live Connection{dataset[\"liveconnect\"]}
    \n
    {userMessage}
    \n
    \n \n \n
    \n
    \n );\n }\n}\n\nexport default Publish;\n","import React, { Component } from \"react\";\n\nclass ProgressBar extends Component {\n state = {};\n render() {\n const { step, setStep, allowedStep } = this.props;\n var classes = [\"\", \"\", \"\", \"\", \"\", \"\"];\n classes[step - 1] = \"is-active\";\n return (\n \n
    \n
      \n
    • setStep(allowedStep[0])} className={classes[0]}>\n Repository\n
    • \n
    • setStep(allowedStep[1])} className={classes[1]}>\n Files\n
    • \n
    • setStep(allowedStep[2])} className={classes[2]}>\n Data Review\n
    • \n
    • setStep(allowedStep[3])} className={classes[3]}>\n Lineage\n
    • \n
    • setStep(allowedStep[4])} className={classes[4]}>\n Metadata\n
    • \n
    • setStep(allowedStep[5])} className={classes[5]}>\n Publish\n
    • \n
    \n
    \n
    \n );\n }\n}\n\nexport default ProgressBar;","import React, { Component } from \"react\";\nimport \"./adddataset.css\";\nimport axios from \"axios\";\nimport Fuse from \"fuse.js\";\nimport { apiUrl } from \"../../../src/config.json\";\nimport CloneRepository from \"./steps/clonerepository\";\nimport SelectDataset from \"./steps/selectdataset\";\nimport ReviewData from \"./steps/reviewdata\";\nimport ReviewLineage from \"./steps/reviewlineage\";\nimport AddMetadata from \"./steps/addmetadata\";\nimport Publish from \"./steps/publish\";\nimport ProgressBar from \"./progressbar\";\n\nclass AddDataset extends Component {\n state = {\n step: 1,\n allowedStep: [1, 1, 1, 1, 1, 1],\n allFiles: [],\n fileInformation: \"\",\n renkuResponse: \"\",\n dropdown: {},\n dataset: {\n id: \"\",\n ssh: \"\",\n title: \"\",\n description: \"\",\n origin: \"measurement\",\n mapplot: \"marker\",\n mapplotfunction: \"gitPlot\",\n datasource: \"internal\",\n datasourcelink: \"\",\n plotproperties: {\n colors: \"Rainbow\",\n markerLabel: true,\n markerSymbol: \"circle\",\n markerFixedSize: true,\n markerSize: 20,\n vectorMagnitude: false,\n vectorArrows: false,\n vectorFlow: false,\n vectorArrowColor: false,\n vectorFlowColor: false,\n legend: false,\n },\n citation: \"\",\n downloads: 0,\n fileconnect: \"time\",\n liveconnect: \"true\",\n renku: \"\",\n folder: \"\",\n accompanyingdata: [],\n mindatetime: \"\",\n maxdatetime: \"\",\n latitude: \"\",\n longitude: \"\",\n licenses_id: \"\",\n organisations_id: \"\",\n repositories_id: \"\",\n lakes_id: \"\",\n persons_id: \"\",\n projects_id: \"\",\n embargo: 0,\n password: \"none\",\n },\n datasetparameters: [],\n files_list: [],\n file: {},\n };\n\n // Next step functions\n\n cloneRepository = async (id) => {\n var { dataset, step } = this.state;\n var post = {};\n if (id) post = { id };\n\n // Add blank row to datasets table\n var { data: new_dataset } = await axios\n .post(apiUrl + \"/datasets\", post)\n .catch((error) => {\n console.error(error);\n this.setState({ allowedStep: [1, 0, 0, 0, 0, 0] });\n throw new Error(error.response.data.message);\n });\n\n // Clone git repo\n var { data: clone } = await axios\n .post(apiUrl + \"/gitclone\", { ssh: dataset.ssh })\n .catch((error) => {\n console.error(error.message);\n this.setState({ allowedStep: [1, 0, 0, 0, 0, 0] });\n throw new Error(\"Unable to clone repository please try again.\");\n });\n\n var clonestatus_id = clone.clonestatus_id;\n var status = \"inprogress\";\n var message = \"Starting clone\";\n var repeat = 5;\n\n var repeattime = 500;\n var internalthis = this;\n\n const clonepromise = new Promise((resolve, reject) => {\n setTimeout(async function monitor() {\n try {\n var clonestatus = await axios\n .get(apiUrl + \"/gitclone/status/\" + clonestatus_id)\n .catch((error) => {\n console.error(error.message);\n if (repeat === 0) {\n throw new Error(\"Unable to clone repository please try again.\");\n } else {\n repeat = repeat - 1;\n setTimeout(monitor, 1000);\n }\n });\n if (clonestatus) {\n ({ status, message } = clonestatus.data);\n\n if (status === \"failed\") {\n internalthis.setState({ allowedStep: [1, 0, 0, 0, 0, 0] });\n throw new Error(message);\n } else if (status === \"succeeded\") {\n var clone_data = JSON.parse(message);\n dataset[\"id\"] = new_dataset.id;\n dataset[\"repositories_id\"] = clone_data.repo_id;\n internalthis.setState({\n allowedStep: [1, 2, 0, 0, 0, 0],\n step: step + 1,\n dataset,\n allFiles: clone_data.allFiles,\n });\n return;\n } else {\n document.getElementById(\"adddata-message\").innerHTML = message;\n setTimeout(monitor, repeattime);\n }\n }\n } catch (e) {\n reject(e);\n }\n }, repeattime);\n });\n\n await clonepromise.catch((error) => {\n console.log(error);\n throw new Error(error);\n });\n };\n\n selectDataset = async () => {\n var { dataset, step, dropdown, allFiles } = this.state;\n if (dataset[\"folder\"] === \"\") {\n throw new Error(\"A folder must be selected.\");\n }\n\n var reqObj = {\n id: dataset.id,\n folder: dataset.folder.value,\n ssh: dataset.ssh,\n };\n\n var { data: gitclone_files } = await axios\n .post(apiUrl + \"/gitclone/files\", reqObj)\n .catch((error) => {\n console.error(error.message);\n this.setState({ allowedStep: [1, 2, 0, 0, 0, 0] });\n throw new Error(\"Unable to collect files please try again.\");\n });\n\n var { file, files } = gitclone_files;\n var dl = file.filelink.split(\"/\");\n dataset[\"datasourcelink\"] = dl.slice(2, dl.length).join(\"/\");\n\n if (\"status_id\" in gitclone_files) {\n var status = \"inprogress\";\n var message = \"Retrieving files\";\n\n var repeattime = 500;\n var internalthis = this;\n\n const filepromise = new Promise((resolve, reject) => {\n setTimeout(async function monitor() {\n try {\n var { data: filestatus } = await axios\n .get(apiUrl + \"/gitclone/status/\" + gitclone_files.status_id)\n .catch((error) => {\n console.error(error.message);\n this.setState({ allowedStep: [1, 2, 0, 0, 0, 0] });\n throw new Error(\"Unable to collect files please try again.\");\n });\n ({ status, message } = filestatus);\n\n if (status === \"failed\") {\n internalthis.setState({ allowedStep: [1, 2, 0, 0, 0, 0] });\n throw new Error(message);\n } else if (status === \"succeeded\") {\n resolve();\n } else {\n document.getElementById(\"adddata-message\").innerHTML = message;\n setTimeout(monitor, repeattime);\n }\n } catch (e) {\n reject(e);\n }\n }, repeattime);\n });\n\n await filepromise.catch((error) => {\n throw new Error(error);\n });\n }\n\n var { data: fileInformation } = await axios\n .get(apiUrl + \"/files/\" + file.id + \"?get=metadata\")\n .catch((error) => {\n console.error(error.message);\n this.setState({ allowedStep: [1, 2, 0, 0, 0, 0] });\n throw new Error(\n \"Failed to parse file please check the file structure and try again.\"\n );\n });\n\n allFiles = allFiles.concat(files.map((f) => f.filelink));\n\n // Set initial dataset parameters\n var datasetparameters = this.setDatasetParameters(\n fileInformation,\n dropdown\n );\n\n this.setState({\n allowedStep: [1, 2, 3, 0, 0, 0],\n fileInformation: fileInformation,\n step: step + 1,\n allFiles,\n dataset,\n datasetparameters,\n files_list: files,\n file,\n });\n\n return;\n };\n\n validateData = async () => {\n var { step, datasetparameters, dataset, file, files_list } = this.state;\n\n // Clean folder\n await axios.get(apiUrl + \"/files/clean/\" + dataset.id).catch((error) => {\n console.error(error.message);\n });\n\n // Lineage from Renku\n dataset[\"renku\"] = 1;\n step = step + 1;\n var { data: renkuData } = await axios\n .get(apiUrl + \"/renku/\" + encodeURIComponent(dataset.datasourcelink))\n .catch((error) => {\n console.error(error.message);\n });\n if (renkuData && \"data\" in renkuData) {\n if (renkuData.data.lineage !== null) {\n dataset[\"renku\"] = 0;\n }\n }\n\n // Set real axis values\n var axis = [];\n var parseAxis;\n var updateAxis;\n var j;\n for (var i = 0; i < datasetparameters.length; i++) {\n if (datasetparameters[i][\"included\"]) {\n parseAxis = datasetparameters[i][\"axis\"];\n updateAxis = parseAxis;\n j = 1;\n while (axis.includes(updateAxis)) {\n updateAxis = parseAxis + j;\n j++;\n }\n axis.push(updateAxis);\n datasetparameters[i][\"rAxis\"] = updateAxis;\n }\n }\n\n // Convert single or multiple files\n if (dataset.fileconnect === \"no\" || dataset.fileconnect === \"mix\") {\n const { id } = file;\n var data = await this.convertFile(\n apiUrl,\n id,\n datasetparameters,\n dataset.fileconnect\n );\n var {\n mindatetime,\n maxdatetime,\n mindepth,\n maxdepth,\n longitude,\n latitude,\n } = data;\n } else {\n var arr_mindatetime = [];\n var arr_maxdatetime = [];\n var arr_mindepth = [];\n var arr_maxdepth = [];\n var arr_longitude = [];\n var arr_latitude = [];\n for (var k = 0; k < files_list.length; k++) {\n document.getElementById(\"reviewdata-message\").innerHTML =\n \"Processing file \" + k + \" of \" + files_list.length;\n data = await this.convertFile(\n apiUrl,\n files_list[k].id,\n datasetparameters,\n dataset.fileconnect\n );\n arr_mindatetime.push(data.mindatetime);\n arr_maxdatetime.push(data.maxdatetime);\n if (data.mindepth < -2) arr_mindepth.push(data.mindepth);\n if (data.mindepth > 200) arr_maxdepth.push(data.maxdepth);\n arr_longitude.push(data.longitude);\n arr_latitude.push(data.latitude);\n }\n mindatetime = this.getMin(arr_mindatetime);\n maxdatetime = this.getMax(arr_maxdatetime);\n mindepth = this.getMin(arr_mindepth);\n maxdepth = this.getMax(arr_maxdepth);\n longitude = this.getAve(arr_longitude);\n latitude = this.getAve(arr_latitude);\n }\n\n // Logic for continuing to next step\n dataset[\"mindatetime\"] = mindatetime;\n dataset[\"maxdatetime\"] = maxdatetime;\n dataset[\"mindepth\"] = mindepth;\n dataset[\"maxdepth\"] = maxdepth;\n dataset[\"longitude\"] = longitude;\n dataset[\"latitude\"] = latitude;\n this.setState({\n renkuResponse: renkuData,\n datasetparameters,\n dataset,\n allowedStep: [1, 2, 3, 4, 0, 0],\n step,\n });\n return;\n };\n\n validateLineage = async () => {\n const { dataset, step } = this.state;\n if (dataset[\"accompanyingdata\"].length > 0) {\n this.setState({ allowedStep: [1, 2, 3, 4, 5, 0], step: step + 1 });\n } else {\n throw new Error(\"Please add some files.\");\n }\n return;\n };\n\n validateMetadata = async () => {\n const { dataset, step } = this.state;\n if (this.noEmptyString(dataset)) {\n this.setState({ allowedStep: [1, 2, 3, 4, 5, 6], step: step + 1 });\n } else {\n throw new Error(\"Please complete all the fields.\");\n }\n };\n\n publish = async () => {\n const { dataset, datasetparameters } = this.state;\n await axios\n .post(apiUrl + \"/datasetparameters\", {\n id: dataset.id,\n datasetparameters: datasetparameters,\n })\n .catch((error) => {\n throw new Error(\"Failed to publish please try again.\");\n });\n await axios.put(apiUrl + \"/datasets\", dataset).catch((error) => {\n throw new Error(\"Failed to publish please try again.\");\n });\n window.location.href = \"/datadetail/\" + dataset.id;\n };\n\n convertFile = async (apiUrl, id, datasetparameters, fileconnect) => {\n var { data } = await axios\n .post(apiUrl + \"/convert\", {\n id: id,\n variables: datasetparameters,\n fileconnect: fileconnect,\n })\n .catch((error) => {\n console.error(error.message);\n this.setState({ allowedStep: [1, 2, 3, 0, 0, 0] });\n throw new Error(\n \"Unable to convert file to JSON format. Please contact the developer.\"\n );\n });\n return data;\n };\n\n // Progress Bar\n\n prevStep = () => {\n const { step } = this.state;\n this.setState({\n step: step - 1,\n });\n };\n\n setStep = (step) => {\n if (step !== 0) {\n this.setState({ step });\n }\n };\n\n // Check nothing in dictionary is empty string\n noEmptyString = (dict) => {\n var out = true;\n for (var key of Object.keys(dict)) {\n if (dict[key] === \"\") {\n out = false;\n }\n }\n return out;\n };\n\n // Parse url\n parseUrl = (url) => {\n url = decodeURI(url);\n var ssh;\n var dir;\n var branch;\n var file;\n \n if (url.includes(\"https://\")) {\n var url_split = url.replace(\"/-/\", \"/\").split(\"/blob/\");\n var path = url_split[1].split(\"/\");\n var loc = url_split[0].split(\"/\");\n var repo = loc[loc.length - 1];\n branch = path[0];\n dir = path.slice(1, path.length - 1);\n dir.unshift(repo);\n dir = dir.join(\"/\");\n file = path[path.length - 1];\n if (url.includes(\"renkulab.io/gitlab\")) {\n ssh =\n \"git@renkulab.io:\" +\n url.split(\"/blob/\")[0].split(\"renkulab.io/gitlab/\").pop() +\n \".git\";\n } else if (url.includes(\"gitlab.renkulab.io\")) {\n ssh =\n \"git@gitlab.renkulab.io:\" +\n url_split[0].split(\"gitlab.renkulab.io/\").pop() +\n \".git\";\n } else if (url.includes(\"github.com\")) {\n ssh =\n \"git@github.com:\" + url_split[0].split(\"github.com/\").pop() + \".git\";\n } else if (url.includes(\"gitlab.com\")) {\n ssh =\n \"git@gitlab.com:\" + url_split[0].split(\"gitlab.com/\").pop() + \".git\";\n }\n } else {\n alert(\"Repository type not recognised.\");\n }\n \n return {\n ssh: ssh,\n dir: dir,\n branch: branch,\n file: file,\n };\n };\n\n fuseSearch = (keys, list, find) => {\n var options = {\n keys: keys,\n shouldSort: true,\n threshold: 0.9,\n location: 0,\n distance: 100,\n maxPatternLength: 32,\n minMatchCharLength: 1,\n };\n var defaultValue = 5;\n if (find !== undefined) {\n var fuse = new Fuse(list, options);\n var match = find.split(\"_\").join(\" \");\n var search = fuse.search(match);\n\n if (search.length !== 0) {\n defaultValue = search[0].item.id;\n }\n // Fix common match errors of pressure and temperature\n if (defaultValue === 10 && !find.toLowerCase().includes(\"air\")) {\n defaultValue = 18;\n } else if (defaultValue === 6 && !find.toLowerCase().includes(\"air\")) {\n defaultValue = 5;\n } else if (defaultValue === 18 && !find.toLowerCase().includes(\"press\")) {\n defaultValue = search[1].id;\n } else if (defaultValue === 2 && !find.toLowerCase().includes(\"depth\")) {\n defaultValue = search[1].id;\n } else if (defaultValue === 22 && find.toLowerCase().includes(\"do\")) {\n defaultValue = 12;\n }\n }\n\n return defaultValue;\n };\n\n findUnits = (parameters, defaultParameter) => {\n return parameters.find((x) => x.id === defaultParameter).unit;\n };\n\n getMax = (arr) => {\n let len = arr.length;\n let max = -Infinity;\n\n while (len--) {\n max = arr[len] > max ? arr[len] : max;\n }\n return max;\n };\n\n getMin = (arr) => {\n let len = arr.length;\n let min = Infinity;\n\n while (len--) {\n min = arr[len] < min ? arr[len] : min;\n }\n return min;\n };\n\n getAve = (arr) => {\n const sum = arr.reduce((a, b) => a + b, 0);\n return sum / arr.length || 0;\n };\n\n allEqual = (arr) => {\n try {\n return arr.every((v) => v === arr[0]);\n } catch (e) {\n return \"\";\n }\n };\n\n setDisableAxis = (axis_list, axis) => {\n for (var j = 0; j < axis_list.length; j++) {\n axis_list[j].isDisabled = false;\n }\n for (var i = 0; i < axis_list.length; i++) {\n if (axis.includes(axis_list[i].name)) {\n axis_list[i].isDisabled = true;\n }\n }\n return axis_list;\n };\n\n disableAxis = (dp) => {\n for (var i = 0; i < dp.length; i++) {\n if (dp[i].dims.length > 1) {\n dp[i].axis_list = this.setDisableAxis(dp[i].axis_list, [\"M\", \"x\", \"y\"]);\n } else if (dp[i].parameters_id === 1) {\n dp[i].axis_list = this.setDisableAxis(dp[i].axis_list, [\"z\"]);\n } else {\n dp[i].axis_list = this.setDisableAxis(dp[i].axis_list, [\"M\", \"z\"]);\n }\n if (\n !dp[i].axis_list\n .filter((a) => !a.isDisabled)\n .map((a) => a.name)\n .includes(dp[i].axis)\n ) {\n dp[i].axis = dp[i].axis_list.filter((a) => !a.isDisabled)[0].name;\n }\n }\n return dp;\n };\n\n defaultAxis = (dp) => {\n var maxdim = Math.max(...dp.map((d) => d.dims.length));\n var params = dp.map((d) => d.parameters_id);\n var type = \"unknown\";\n if (maxdim === 2) {\n type = \"2D\";\n } else if (\n maxdim === 1 &&\n params.includes(1) &&\n (params.includes(2) || params.includes(18))\n ) {\n let confirm_profile = window.confirm(\n \"Autoparse thinks this dataset is made up of profiles where each file represents a profile, is this correct?\"\n );\n if (confirm_profile) type = \"profile\";\n }\n for (var i = 0; i < dp.length; i++) {\n let defaultAxis = \"y\";\n if (type === \"2D\") {\n if (dp[i].dims.length > 1) {\n defaultAxis = \"z\";\n } else if (dp[i].parameters_id === 1) {\n defaultAxis = \"x\";\n }\n } else if (type === \"profile\") {\n if (dp[i].parameters_id === 1) {\n defaultAxis = \"M\";\n } else if (![2, 18].includes(dp[i].parameters_id)) {\n defaultAxis = \"x\";\n }\n } else {\n if (dp[i].parameters_id === 1) {\n defaultAxis = \"x\";\n }\n }\n dp[i].axis = defaultAxis;\n }\n return dp;\n };\n\n addMaskLink = (dp) => {\n for (var i = 0; i < dp.length; i++) {\n if (dp[i].parseparameter.includes(\"_qual\")) {\n let name = dp[i].parseparameter.split(\"_qual\")[0];\n let match = dp.find((d) => d.parseparameter === name);\n if (match) {\n dp[i].link = match.id;\n }\n }\n }\n return dp;\n };\n\n checkNested = (obj, args) => {\n for (var i = 0; i < args.length; i++) {\n if (!obj || !obj.hasOwnProperty(args[i])) {\n return false;\n }\n obj = obj[args[i]];\n }\n return true;\n };\n\n setDatasetParameters = (fileInformation, dropdown) => {\n const { parameters } = dropdown;\n const { variables, attributes } = fileInformation;\n\n // Initial data parse and auto field matching\n var parseparameter = \"\";\n var parseUnit = \"\";\n var parseSensor = \"\";\n var variableAttributes = \"\";\n var variable = {};\n var datasetparameters = [];\n\n // Loop over variables in nc file\n let index = 0;\n for (var key in variables) {\n parseparameter = key;\n parseUnit = \"NA\";\n parseSensor = \"NA\";\n variableAttributes = variables[key].attributes;\n\n // Look for names in nc file.\n if (this.checkNested(variableAttributes, [\"units\", \"value\"])) {\n parseUnit = variableAttributes[\"units\"].value;\n }\n if (this.checkNested(variableAttributes, [\"standard_name\", \"value\"])) {\n parseparameter = variableAttributes[\"standard_name\"].value;\n }\n if (this.checkNested(variableAttributes, [\"long_name\", \"value\"])) {\n parseparameter = variableAttributes[\"long_name\"].value;\n }\n if (this.checkNested(attributes, [\"sensor\", \"value\"])) {\n parseSensor = attributes[\"sensor\"].value;\n }\n\n // Search for matching names in database to define default values\n var defaultParameter = this.fuseSearch(\n [\"name\"],\n parameters,\n parseparameter\n );\n // Detect error mask layers\n if (\n parseparameter.includes(\"_qual\") ||\n parseUnit === \"0 = nothing to report, 1 = more investigation\"\n ) {\n defaultParameter = 27;\n }\n\n var defaultSensor = 1;\n\n // Fallback to parameter units if none provided in nc file\n var defaultUnit;\n if (parseUnit === \"NA\") {\n defaultUnit = this.findUnits(parameters, defaultParameter);\n } else {\n defaultUnit = parseUnit;\n }\n\n // Summarise data\n variable = {\n id: index,\n parseparameter: key,\n parseUnit: parseUnit,\n parseSensor: parseSensor,\n parameters_id: defaultParameter,\n unit: defaultUnit,\n axis: \"y\",\n link: -1,\n detail: \"none\",\n sensors_id: defaultSensor,\n included: true,\n dims: variables[key].dimensions,\n axis_list: [\n { name: \"M\", isDisabled: false },\n { name: \"x\", isDisabled: false },\n { name: \"y\", isDisabled: false },\n { name: \"z\", isDisabled: false },\n ],\n };\n datasetparameters.push(variable);\n index++;\n }\n\n datasetparameters = this.defaultAxis(datasetparameters);\n\n datasetparameters = this.disableAxis(datasetparameters);\n\n datasetparameters = this.addMaskLink(datasetparameters);\n\n return datasetparameters;\n };\n\n // Handle changes to inputs\n\n handleAccompanyingData = (accompanyingdata) => {\n var { dataset } = this.state;\n dataset.accompanyingdata = accompanyingdata;\n this.setState({ dataset });\n };\n\n handleChange = (input) => (event) => {\n var values = this.state.values;\n values[input] = event.target.value;\n this.setState({ values });\n };\n\n handleDataset = (input) => (event) => {\n var dataset = this.state.dataset;\n dataset[input] = Number.isInteger(event.value)\n ? event.value\n : event.target.value;\n this.setState({ dataset });\n };\n\n updateDataset = (parameter, value) => {\n var dataset = this.state.dataset;\n dataset[parameter] = value;\n this.setState({ dataset });\n };\n\n handleFolder = (event) => {\n var { dataset } = this.state;\n dataset.folder = event;\n this.setState({ dataset });\n };\n\n handleParameter = (a, b) => (event) => {\n var datasetparameters = this.state.datasetparameters;\n datasetparameters[a][b] = event.target ? event.target.value : event.value;\n if (b === \"parameters_id\") datasetparameters[a][\"link\"] = -1;\n datasetparameters = this.disableAxis(datasetparameters);\n this.setState({ datasetparameters });\n };\n\n handleParameterCheck = (a, b) => (event) => {\n var { datasetparameters, dataset } = this.state;\n datasetparameters[a][b] = !datasetparameters[a][b];\n //dataset.fileconnect = \"no\";\n this.setState({ datasetparameters, dataset });\n };\n\n moveParameterUp = (i) => {\n if (i > 0) {\n var { datasetparameters } = this.state;\n datasetparameters.splice(i - 1, 0, datasetparameters.splice(i, 1)[0]);\n this.setState({ datasetparameters });\n }\n };\n\n moveParameterDown = (i) => {\n var { datasetparameters } = this.state;\n if (i < datasetparameters.length - 1) {\n datasetparameters.splice(i + 1, 0, datasetparameters.splice(i, 1)[0]);\n this.setState({ datasetparameters });\n }\n };\n\n getDropdowns = async () => {\n const { data: dropdown } = await axios.get(apiUrl + \"/selectiontables\");\n this.setState({\n dropdown,\n });\n };\n\n componentDidMount() {\n this.getDropdowns();\n }\n\n render() {\n document.title = \"Add Dataset - Datalakes\";\n const {\n step,\n allowedStep,\n allFiles,\n fileInformation,\n renkuResponse,\n dropdown,\n dataset,\n datasetparameters,\n files_list,\n } = this.state;\n\n switch (step) {\n default:\n return (\n \n \n \n \n );\n case 1:\n return (\n \n \n \n \n );\n case 2:\n return (\n \n \n \n \n );\n case 3:\n return (\n \n \n \n \n );\n case 4:\n return (\n \n \n \n \n );\n case 5:\n return (\n \n \n \n \n );\n case 6:\n return (\n \n \n \n \n );\n }\n }\n}\n\nexport default AddDataset;\n","import React, { Component } from \"react\";\nimport axios from \"axios\";\nimport { Link } from \"react-router-dom\";\nimport { apiUrl } from \"../../config.json\";\nimport \"./monitor.css\";\n\nclass Dataset extends Component {\n labelGap = (seconds) => {\n if (Math.abs(seconds) < 60) {\n return `${Math.round(seconds)} s`;\n } else if (Math.abs(seconds) < 60 * 60) {\n return `${Math.round(seconds / 60)} mins`;\n } else if (Math.abs(seconds) < 60 * 60 * 24) {\n return `${Math.round(seconds / (60 * 60))} hrs`;\n } else if (Math.abs(seconds) < 60 * 60 * 24 * 7) {\n return `${Math.round((seconds / (60 * 60 * 24)) * 10) / 10} days`;\n } else {\n return `${Math.round((seconds / (60 * 60 * 24 * 7)) * 10) / 10} weeks`;\n }\n };\n render() {\n var { id, color, title, latest, delay } = this.props;\n if (latest < 0) latest = 0;\n return (\n \n
    \n
    {title}
    \n
    \n {delay < 0\n ? `Updated ${this.labelGap(latest)} ago.`\n : `Out of date by ${this.labelGap(latest)}.`}\n
    \n
    \n \n );\n }\n}\n\nclass Monitor extends Component {\n state = {\n monitor: [],\n };\n\n async componentDidMount() {\n var { data } = await axios.get(apiUrl + \"/monitor\").catch((error) => {\n console.error(error);\n });\n var now = new Date().getTime();\n data.map((d) => {\n d.maxdatetime = new Date(d.maxdatetime);\n d.latest = (now - d.maxdatetime.getTime()) / 1000;\n d.timedif = (now + d.monitor * 1000 - d.maxdatetime.getTime()) / 1000;\n let color = \"#d4f6d4\";\n if (d.timedif > 0) {\n color = \"#eec77f\";\n }\n if (d.timedif > Math.abs(d.monitor * 5)) {\n color = \"#ef7979\";\n }\n d.color = color;\n return d;\n });\n data = data.sort((a, b) => b.timedif - a.timedif);\n\n this.setState({ monitor: data });\n }\n render() {\n document.title = \"Monitor - Datalakes\";\n var { monitor } = this.state;\n return (\n
    \n

    Live Status

    \n {monitor.map((m) => {\n return (\n \n );\n })}\n\n
    \n

    Debugging

    \n

    \n There are a number of sections of the data pipeline that can break\n down, listed here are common fixes that can help to restart a broken\n pipeline. The main sections of the pipeline are as follows:\n

    \n
      \n
    • Transfer from intrument
    • \n
    • Processing of data
    • \n
    • Upload to renkulab
    • \n
    • Datalakes update
    • \n
    \n

    \n In order to detect which section of the process is broken the\n following process can be followed.\n

    \n
      \n
    1. \n Login to renkulab and check when was the last time data was\n uploaded to the repository, if this is recent then this could be\n an issue with the connection between Renkulab and Datalakes. This\n can likely only be fixed by James Runnalls. Otherwise it is likely\n to be an issue with the data processing so check that the format\n of recently produced files is consistent with old files.\n
    2. \n
    3. \n If data has not been uploaded to renkulab recently the next thing\n to try is to login to the Lexplore machine, navigate to the\n repository in git bash and check the git status of the repo.\n Sometime the git push can fail and you will see local is x commits\n ahead of remote. Here the git push command should fix the\n pipeline.\n
    4. \n
    5. \n If there are no commits then it means that either the processing\n step has failed or the instrument has stopped sending data (or is\n sending data to a new location). Look to see if new data has\n arrived in the expected folders, if not then its likely a problem\n with the instrument.\n
    6. \n
    \n
    \n
    \n );\n }\n}\n\nexport default Monitor;\n","import React, { Component } from \"react\";\nimport Basemap from \"../../graphs/leaflet/basemap\";\nimport axios from \"axios\";\nimport { apiUrl } from \"../../config.json\";\nimport \"./lakemorphology.css\";\nimport D3LineGraph from \"../../graphs/d3/linegraph/linegraph\";\nimport Loading from \"../../components/loading/loading\";\n\nclass LakeMorphologyGraph extends Component {\n state = {\n morphology: {},\n data: [],\n xlabel: \"\",\n xlabels: [],\n ylabel: \"\",\n xunits: \"\",\n yunits: \"\",\n interpolated: true,\n };\n\n download = () => {\n function getValues(keys, download) {\n return keys.map((d) => download[d].values[i]);\n }\n var { morphology } = this.state;\n var { lake } = this.props;\n var download = JSON.parse(JSON.stringify(morphology));\n delete download.id;\n var keys = Object.keys(download).filter((k) => k !== \"Source\");\n var csv = `data:text/csv;charset=utf-8,${keys\n .map((d) => `${d} (${download[d].unit})`)\n .join(\",\")}\\n`;\n for (var i = 0; i < download[\"Depth\"].values.length; i++) {\n csv = csv + `${getValues(keys, download).join(\",\")}\\n`;\n }\n var name = lake.name.split(\" \").join(\"_\") + \"_Morphology.csv\";\n var encodedUri = encodeURI(csv);\n var link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodedUri);\n link.setAttribute(\"download\", name);\n document.body.appendChild(link);\n link.click();\n };\n\n onChangeX = (event) => {\n var { ylabel, morphology, interpolated } = this.state;\n var xlabel = event.target.value;\n var { data, xunits } = this.prepareGraph(\n xlabel,\n ylabel,\n morphology,\n interpolated\n );\n this.setState({ data, xunits, xlabel });\n };\n\n toggleInterpolated = () => {\n var { xlabel, ylabel, morphology, interpolated } = this.state;\n interpolated = !interpolated;\n var { data } = this.prepareGraph(xlabel, ylabel, morphology, interpolated);\n this.setState({ interpolated, data });\n };\n\n prepareGraph = (xlabel, ylabel, morphology, interpolated) => {\n var data;\n if (interpolated) {\n data = {\n y: morphology[ylabel].values,\n x: morphology[xlabel].values,\n };\n } else {\n var x = [];\n var y = [];\n for (var i = 0; i < morphology[\"Interpolated\"].values.length; i++) {\n if (\n !morphology[\"Interpolated\"].values[i] ||\n morphology[\"Interpolated\"].values[i] === \"false\"\n ) {\n x.push(morphology[xlabel].values[i]);\n y.push(morphology[ylabel].values[i]);\n }\n }\n data = { x, y };\n }\n var xunits = morphology[xlabel].unit;\n var yunits = morphology[ylabel].unit;\n return { data, xunits, yunits };\n };\n\n selectLake = async () => {\n var { lake } = this.props;\n var { interpolated } = this.state;\n if (lake.morphology) {\n var { data: morphology } = await axios.get(\n `${apiUrl}/externaldata/morphology/${lake.id}`\n );\n for (var key of Object.keys(morphology)) {\n if (![\"id\", \"interpolated\", \"source\"].includes(key.toLowerCase())) {\n morphology[key].values = morphology[key].values.map((d) =>\n parseFloat(d)\n );\n }\n }\n var ylabel = \"Depth\";\n\n var xlabels = Object.keys(morphology).filter(\n (m) =>\n ![\"id\", \"depth\", \"interpolated\", \"source\"].includes(m.toLowerCase())\n );\n\n var xlabel = xlabels[0];\n if (xlabels.includes(\"Area\")) xlabel = \"Area\";\n\n var { data, xunits, yunits } = this.prepareGraph(\n xlabel,\n ylabel,\n morphology,\n interpolated\n );\n\n this.setState({\n morphology,\n data,\n xlabel,\n xlabels,\n ylabel,\n xunits,\n yunits,\n });\n }\n };\n\n async componentDidUpdate(prevProps) {\n var { lakename } = this.props;\n if (prevProps.lakename !== lakename) {\n this.selectLake();\n }\n }\n\n async componentDidMount() {\n this.selectLake();\n }\n\n render() {\n var {\n data,\n xlabel,\n xlabels,\n ylabel,\n xunits,\n yunits,\n interpolated,\n morphology,\n } = this.state;\n var { reset } = this.props;\n\n return (\n \n
    \n
    Plot Parameter:
    \n \n \n
    \n
    \n ×\n
    \n
    \n \n
    \n
    \n Show interpolated values{\" \"}\n \n
    \n\n
    \n {\"Source\" in morphology\n ? morphology[\"Source\"]\n : \"Data sourced from Isabel Kiefer at EPFL.\"}{\" \"}\n Please contact Fabian Bärenbold (fabian.baerenbold@eawag.ch) for more\n information on this dataset.\n
    \n
    \n );\n }\n}\n\nclass LakeMorphology extends Component {\n state = {\n lakes: [],\n geojson: false,\n sort: \"name\",\n sortDir: true,\n text: \"\",\n loading: true,\n };\n urlSafe = (str) => {\n var clean = [\n { b: \"ä\", a: \"a\" },\n { b: \"ö\", a: \"o\" },\n { b: \"ü\", a: \"u\" },\n { b: \"è\", a: \"e\" },\n { b: \"é\", a: \"e\" },\n { b: \"à\", a: \"a\" },\n { b: \"ù\", a: \"u\" },\n { b: \"â\", a: \"a\" },\n { b: \"ê\", a: \"e\" },\n { b: \"î\", a: \"i\" },\n { b: \"ô\", a: \"o\" },\n { b: \"û\", a: \"u\" },\n { b: \"ç\", a: \"c\" },\n { b: \"ë\", a: \"e\" },\n { b: \"ï\", a: \"i\" },\n { b: \"ü\", a: \"u\" },\n { b: \"ì\", a: \"i\" },\n { b: \"ò\", a: \"o\" },\n { b: \"ó\", a: \"o\" },\n ];\n for (let edit in clean) {\n str = str.replace(edit.b, edit.a);\n }\n\n return str.replace(/[^a-zA-Z]/g, \"\").toLowerCase();\n };\n\n setText = (event) => {\n this.setState({ text: event.target.value });\n };\n\n setLocation = (name, id) => {\n const pathname = this.props.location.pathname;\n this.props.history.push({\n pathname: pathname,\n search: this.urlSafe(name) + \"_\" + id,\n });\n };\n\n resetLocation = () => {\n const pathname = this.props.location.pathname;\n this.props.history.push({\n pathname: pathname,\n search: \"\",\n });\n };\n\n setLake = (feature) => {\n this.setLocation(feature.properties.Name, feature.properties.id);\n };\n\n sort = (sort, morphology) => {\n if ([\"name\", \"elevation\", \"depth\"].includes(sort)) {\n var x = this.state.sortDir ? 1 : -1;\n morphology.sort((a, b) =>\n a[sort] > b[sort] ? x : b[sort] > a[sort] ? -x : 0\n );\n }\n };\n\n filter = (text, morphology) => {\n if (text !== \"\") {\n return morphology.filter((m) =>\n m.name.toLowerCase().includes(text.toLowerCase())\n );\n } else {\n return JSON.parse(JSON.stringify(morphology));\n }\n };\n\n setSort = (sort) => {\n this.setState({ sort, sortDir: !this.state.sortDir });\n };\n\n async componentDidMount() {\n let server = await Promise.all([\n axios.get(apiUrl + \"/selectiontables/lakes\"),\n axios.get(apiUrl + \"/externaldata/lakejson\"),\n ]).catch((error) => {\n console.error(error);\n });\n var lakes = server[0].data;\n var geojson = server[1].data;\n lakes = lakes.map((l) => {\n l.depth = parseFloat(l.depth);\n l.elevation = parseFloat(l.elevation);\n return l;\n });\n lakes = lakes.filter((l) => l.morphology);\n var ids = lakes.map((l) => l.id);\n geojson.features = geojson.features.filter((f) =>\n ids.includes(f.properties.id)\n );\n this.setState({ lakes, geojson, loading: false });\n }\n render() {\n document.title = \"Lake Morphology - Datalakes\";\n let { search } = this.props.location;\n var { lakes, geojson, sort, text, loading } = this.state;\n var list = this.filter(text, lakes);\n this.sort(sort, list);\n\n var lake;\n var id;\n if (\n search &&\n lakes.map((l) => l.id).includes(parseInt(search.split(\"_\")[1]))\n ) {\n lake = lakes.find((l) => l.id === parseInt(search.split(\"_\")[1]));\n id = lake.id;\n }\n return (\n \n {lake ?

    {lake.name}

    :

    Lake Morphology

    }\n
    \n
    \n {lake ? (\n
    \n \n
    \n ) : (\n
    \n
    \n Select a lake to view and download its morphology.\n
    \n
    \n )}\n
    \n {loading && (\n
    \n \n
    \n )}\n \n
    \n
    \n
    \n
    \n \n \n \n \n this.setSort(\"name\")}\n title=\"Click to sort by name\"\n style={{ width: \"220px\" }}\n >\n Lake\n \n this.setSort(\"depth\")}\n title=\"Click to sort by depth\"\n style={{ width: \"60px\" }}\n >\n Depth (m)\n \n this.setSort(\"elevation\")}\n title=\"Click to sort by elevation\"\n style={{ width: \"60px\" }}\n >\n Elevation (mAOD)\n \n \n \n
    \n
    \n
    \n \n \n {list.map((l) => (\n this.setLocation(l.name, l.id)}\n >\n \n \n \n \n ))}\n \n
    {l.name}\n {l.depth}\n \n {l.elevation}\n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default LakeMorphology;\n","import React, { Component } from \"react\";\nimport GIS from \"../../graphs/leaflet/gis\";\nimport \"./mapviewer.css\";\n\nclass MapViewer extends Component {\n parseSearch = (search) => {\n search = search.replace(\"?\", \"\").split(\"&\");\n var out = {};\n for (var i = 0; i < search.length; i++) {\n try {\n var split = search[i].split(\"=\");\n if ([\"selected\", \"hidden\", \"center\"].includes(split[0])) {\n out[split[0]] = JSON.parse(split[1]);\n } else if (split[0] === \"datetime\") {\n out[split[0]] = new Date(split[1] * 1000);\n } else if ([\"depth\", \"zoom\"].includes(split[0])) {\n out[split[0]] = parseFloat(split[1]);\n } else if ([\"basemap\", \"menu\", \"legend\"].includes(split[0])) {\n out[split[0]] = split[1];\n }\n } catch (e) {\n console.error(\"Parsing query \" + split[0] + \" failed.\");\n }\n }\n return out;\n };\n\n fixedEncodeURI = (str) => {\n return str\n .replace(/%5b/g, \"[\")\n .replace(/%5d/g, \"]\")\n .replace(/%5B/g, \"[\")\n .replace(/%5D/g, \"]\");\n };\n\n searchLocation = (defaults) => {\n var { selected, hidden, datetime, depth, zoom, center, basemap } = defaults;\n return [\n \"?\",\n \"selected=\",\n JSON.stringify(selected),\n \"&hidden=\",\n JSON.stringify(hidden),\n \"&datetime=\",\n Math.round(datetime.getTime() / 1000),\n \"&depth=\",\n depth,\n \"&zoom=\",\n JSON.stringify(zoom),\n \"¢er=\",\n JSON.stringify(center),\n \"&basemap=\",\n basemap,\n ].join(\"\");\n };\n\n setDefaults = (defaults) => {\n var new_search = this.searchLocation(defaults);\n let { search, pathname } = this.props.location;\n if (new_search !== search) {\n this.props.history.replace({\n pathname: pathname,\n search: new_search,\n });\n }\n };\n\n render() {\n document.title = \"Map Viewer - Datalakes\";\n var { search } = this.props.location;\n search = this.fixedEncodeURI(search);\n var defaults = this.parseSearch(search);\n return (\n
    \n \n
    \n );\n }\n}\n\nexport default MapViewer;\n","import React, { Component } from \"react\";\nimport { BrowserRouter, Route, Switch } from \"react-router-dom\";\nimport asyncComponent from \"./components/asynccomponent/asynccomponent\";\nimport ErrorBoundary from \"./errorboundary/errorboundary\";\nimport Header from \"./format/header/header\";\nimport Footer from \"./format/footer/footer\";\nimport Home from \"./pages/home/home\";\nimport NotFound from \"./pages/notfound/notfound\";\nimport DataPortal from \"./pages/dataportal/dataportal\";\nimport AddDataset from \"./pages/adddataset/adddataset\";\nimport Monitor from \"./pages/monitor/monitor\";\nimport LakeMorphology from \"./pages/lakemorphology/lakemorphology\";\nimport MapViewer from \"./pages/mapviewer/mapviewer\";\nimport \"./index.css\";\n\nconst AsyncDataDetail = asyncComponent(() =>\n import(\"./pages/datadetail/datadetail\")\n);\nconst AsyncAPI = asyncComponent(() => import(\"./pages/api/api\"));\n\nclass App extends Component {\n render() {\n var iframe = window.location.href.includes(\"?iframe\");\n return (\n \n {!iframe &&
    }\n
    \n \n (\n \n \n \n )}\n />\n\n (\n \n \n \n )}\n />\n \n (\n \n \n \n )}\n />\n\n (\n \n \n \n )}\n />\n\n (\n \n \n \n )}\n />\n\n (\n \n \n \n )}\n />\n\n (\n \n \n \n )}\n />\n\n (\n \n \n \n )}\n exact\n />\n\n (\n \n \n \n )}\n />\n \n
    \n {!iframe &&