{"version":3,"sources":["images/logo.png","images/towingcar_round.png","fonts/fonts.ts","components/api-clients/index.ts","components/api-authorization/ApiAuthorizationConstants.js","components/Cases/CasesContext.tsx","components/Cases/types.ts","utils/styles.tsx","components/Cases/case-definition.ts","components/Loader.tsx","utils/useBasicData.tsx","components/Cases/CaseComponent.tsx","components/Cases/styles.ts","components/Cases/CaseListComponent.tsx","components/Cases/CaseFilterComponent.tsx","components/Cases/SearchComponent.tsx","components/Cases/PaginationComponent.tsx","components/Cases/index.tsx","components/api-authorization/LoginMenu.js","components/NavMenu.tsx","components/Layout.tsx","components/GoogleMaps/utils/GoogleMapsUtils.tsx","components/GoogleMaps/GoogleMapsApiContext.tsx","components/IncidentsMap/IncidentsMapContext.tsx","components/IncidentsMap/IncidentsButtons.tsx","components/GoogleMaps/GoogleMapsContext.tsx","components/IncidentsMap/IncidentsMapControl.tsx","components/IncidentsMap/index.tsx","components/styled/index.ts","components/GoogleMaps/hooks/useMapMarkers.tsx","components/GoogleMaps/Map.tsx","components/GoogleMaps/hooks/useGoogleMap.tsx","components/VehicleHistory/VehicleHistoryBox.tsx","components/VehicleHistory/index.tsx","components/Modal/ImageModal.tsx","components/Carousel/Carousel.tsx","components/ZebraList/ZebraList.tsx","components/Cases/Investigation/emptyData.ts","components/NoLicense/index.tsx","components/Modal/index.tsx","components/Modal/useModalStack.tsx","components/Cases/Investigation/InvestigationCheck.tsx","components/Cases/Investigation/InvestigationComponent.tsx","components/Cases/Processing/ProcessingComponent.tsx","components/Cases/Processing/emptyData.ts","components/Cases/CustomerVehicle/utils.ts","components/Cases/CustomerVehicle/CustomerVehicleComponent.tsx","components/Cases/CustomerVehicle/emptyData.ts","components/Cases/RepairShop/emptyData.ts","components/Cases/RepairShop/RepairShopComponent.tsx","components/Cases/CaseDetailed.tsx","components/DoesNotExists/index.tsx","components/Cases/CarfaxReport/index.tsx","components/NotFound/index.tsx","Routes.tsx","App.tsx","index.tsx"],"names":["module","exports","AssistConcept","GlobalFonts","createGlobalStyle","LogoutActions","LoginActions","prefix","ApplicationPaths","ApiClientBase","baseApiUrl","options","headers","Promise","resolve","url","response","processor","status","window","location","pathname","href","console","log","defaultUrl","baseUrl","this","BasicDataClient","http","jsonParseReviver","undefined","signal","url_","replace","options_","method","transformOptions","then","transformedOptions_","fetch","_response","transformResult","processGetBasicData","_headers","forEach","v","k","text","_responseText","resultData200","JSON","parse","BasicDataModel","fromJS","result401","resultData401","ProblemDetails","throwException","companyId","Error","encodeURIComponent","processUpdateUser","CasesClient","getCounts","pageIndex","pageSize","from","to","filter","sort","orderBy","searchInput","toJSON","processGetCases","GetCasesResponse","caseId","processGetShellCases","CaseDTO","processGetRepairshopCases","processGetProcessingDetails","GetProcessingDetailsResponse","processGetInvestigationDetails","GetInvestigationDetailsResponse","processGetRepairShopDetails","GetRepairShopDetailsResponse","resultData204","processGetCustomerVehicleDetails","GetCustomerVehicleDetailsResponse","id","latitude","longitude","doGeocode","streetAddress","city","processGetStreetAddress","GetStreetAddressResponse","request","body","stringify","processToggleUserFlag","assignmentId","processGetMapCaseInfo","MapCase","processGetCarfaxReport","CarfaxResponse","check","processUpdateInvestigationCheck","GoogleConfigurationClient","processGetGoogleMapsApiKey","ApiKeyModel","IncidentsMapClient","processGetCompanies","result200","Array","isArray","item","push","CompanyDTO","processGetIncidentLocations","WaystarLocationSearch","LogClient","processLog","data","currentUser","companies","property","hasOwnProperty","_data","UserModel","result","init","name","companyID","roles","assistConceptId","FlagEnum","type","title","detail","instance","cases","waystarScore","favored","unread","numberOfCases","filteredNumber","internalFlaggedCase","created","crashDate","caseFlags","userFlags","incidentTypeId","incidentType","brand","registrationNumber","imageIds","isInvestigationCase","internalWaystarScore","Date","toString","CaseFlag","UserFlag","toISOString","BaseEntity","updated","flagId","IncidentType","CasesFilter","CasesSort","CasesOrderBy","userId","LocationType","responseCreated","incidentLocation","drivePath","priceUnit","priceDriveDistance","totalDistanceInKm","invoices","IncidentLocationResponse","DrivePathPoint","InvoiceResponse","locationTypeId","locationType","locationDescription","locationTime","reportLocationId","descriptiveTitle","descriptiveContent","isLocationRepairShop","invoiceLines","invoiceAmount","taxAmount","InvoiceLineResponse","axItemName","qty","salesUnit","price","lineAmount","vehicleYearModel","insuranceType","assignmentStartedAt","assignmentEndedAt","towDriverName","towDriverPhone","customIncidentTypeDescription","helpType","customHelpTypeDescription","repairShopName","actualDropOffLocation","callerContactInfo","callerContactPhone","ownerContactInfo","ownerContactPhone","ownerContactMobilePhone","driverContactInfo","driverContactPhone","driverContactMobilePhone","vehicleLegalOwners","vehicleLastOwnerChangeDate","enabledCarfaxFlags","zipCode","phoneNumbers","assignmentCreated","caseSource","incidentDescription","helpTypeDescription","actualDropOffLocationCity","firstRegistrationDate","mileage","mileageDate","lastOwnerChangeDate","legalOwners","curbWeight","hasCargoOrTrailer","cargoOrTrailerWeight","vehicleType","color","customVehicleTypeDescription","chassisNumber","countryOfOrigin","odometerReading","insuranceCompany","vehicleDamageInsuranceCompany","assistPackage","ownerFullName","orgOrSocialSecurityNumber","ownerPhone","ownerMobilePhone","ownerStreetAddress","ownerZipCode","ownerCity","ownerCountry","ToggleUserFlagRequest","flagType","success","htmlData","apiResponse","apiError","CarfaxAPIResponse","CarfaxAPIErrorResponse","vehicleData","VehicleData","riskAlertStolen","riskAlertStolenInPast","riskAlertInsuranceClaim","riskAlertTotalLoss","riskAlertJunk","riskAlertSalvage","riskAlertFlood","riskAlertRecall","riskAlertLemon","riskAlertScrapped","riskAlertAccident","riskAlertDamage","riskAlertAirbagDeployed","riskAlertMileageInconsistency","riskAlertPotentialRollback","riskAlertDifferentReadingUnitsOrInconsistency","riskAlertRental","riskAlertTaxi","riskAlertImport","riskAlertUsImport","riskAlertChassisModification","vin","make","model","modelYear","manufacturingDate","vehicleYear","engineSize","enginePowerHp","enginePowerKw","engineCodes","co2EmissionMixedDriving","fuelConsumptionMixedDriving","numberOfCylinders","numberOfDoors","numberOfPassengers","numberOfSeats","grossVehicleWeight","maxPayload","fuel","bodyType","gearbox","driveWheels","euVehicleCategory","firstRegistrationYear","firstRegistrationDateInCountry","dateOfDeregistration","lastOdometerReading","lastOdometerReadingDate","error_Code","msg","apiKey","customerId","insuranceCompanyId","lat","lng","IncidentLocationData","assignmentIds","incidentTypes","ne","sw","Bounds","LogMeRequest","action","ApiException","message","isApiException","obj","SearchDropdownOptionType","CaseComponentColumnType","CaseDetailedActiveTab","initialContext","loading","numCases","getSearchInput","setTo","Function","setFrom","setPageIndex","setCurrentFilter","setCurrentSort","setSearchInput","getCases","repairShopsForCaseId","getTo","getFrom","getPageIndex","getPageSize","getCurrentFilter","ALL","getCurrentOrderBy","CREATED","getCurrentSort","DESCENDING","update","setLoading","setCurrentOrderBy","saveSettings","loadSettings","setDefaultSettings","CasesContext","createContext","CasesProvider","props","useState","setCases","setNumCases","setFilteredNumber","setWaystarScore","setFavored","setUnread","fetching","setFetching","fromInput","useRef","setFullYear","getFullYear","toInput","currentFilter","currentSort","currentOrderBy","setTriggerGetCases","newTriggerGetCases","newSearchInput","trigger","current","newPageIndex","setPageSize","newPageSize","newFilter","newSort","newOrderBy","isInRepairShop","settings","a","client","getRepairshopCases","useEffect","Provider","value","index","input","remove","map","c","find","uf","Unread","Starred","children","Colors","FontSize","FirstColumnWidth","Margins","DATETIME","caseComponentDefinition","SPAN","flex","STAR","SCORE","FLAG","IMAGE","DATE","style","textAlign","spinnerKeyframes","keyframes","Container","styled","div","CenterContainer","Spinner","Loader","center","UserRole","RouteContent","user","updateUser","routeContent","SpinnerContainer","BasicDataContext","BasicDataProvider","basicData","setBasicData","fetchBasicData","getBasicData","resp","viewContent","role","Investigator","SystemAdmin","CaseWorker","f","ViewContent","ApiUser","ApiContent","reload","setBackground","Div","bold","override","css","ImgContainer","src","CaseComponent","_case","openWindow","useContext","systemAdmin","isUnread","isFavorite","score","handleClick","toggleUserFlag","defintions","cd","key","onClick","prop","internalScore","isNaN","parseFloat","toFixed","NUM_2","scores","length","dayjs","format","generateContentType","SubContainer","Divider","Spacer","Row","Column","Title","span","clickable","Border","Overlay","CaseListComponent","history","useHistory","mapDate","hidden","WAYSTARSCORE","ASCENDING","verticalAlign","marginLeft","marginBottom","cursor","addBorder","getDate","Option","Selected","Separator","MarginRow","filterNames","CaseFilterComponent","filterList","Object","values","num","SearchBox","ComponentWrapper","SearchInput","SelectContainer","CustomInput","ref","border","backgroundColor","outline","width","height","fontSize","zIndex","SearchComponent","searchInputTimeout","clearTimeout","spellCheck","placeholder","onChange","e","currentTarget","setTimeout","marginRight","maxDate","now","disabled","selected","date","peekNextMonth","showMonthDropdown","showYearDropdown","dropdownMode","customInput","React","createElement","forwardRef","Span","PaginationComponent","H1","h1","FilterWrapper","CaseContainer","TabType","LogoutBox","StyledNavLink","LoginMenu","isAuthenticated","logoutPath","className","authenticatedView","state","local","MiddleSection","UserBox","SupportBox","Logo","img","ButtonSection","LineDiv","ButtonDiv","ActiveButtonDiv","InfoContainer","AdminSelector","NavMenu","activeTab","setActiveTab","fullName","CASES","INCIDENTS_MAP","unRegister","listen","_","logo","alt","target","tab","redirect","Wrapper","Layout","carBase64_64x23","truckBase64_64x_64","wrenchBase64_64x64","incidentTypeOther","incidentTypeFire","incidentTypeGame","incidentTypeTheft","incidentTypeCol","getIncidentMarkerSvg","iconSizeFactor","iconProps","Fire","icon","GameAccident","SingleVehicleAccident","Theft","AttemptedTheft","getIncidentMarkerIconProps","factor","template","join","scaledSize","google","maps","Size","origin","Point","anchor","reportLocationLabels","base64Encoded","reportLocationMarkerIcons","BeginsAssignment","AssignmentCompleted","ReportedIncident","ArrivingAtIncident","LeavingIncident","DeliveringVehicle","DeliveringCargo","ResumingAssignment","PausingAssignment","Returning","loadMapApi","mapsURL","scripts","document","getElementsByTagName","i","indexOf","googleMapScript","async","defer","appendChild","getReportLocationMarker","getReportLocationMarkerSvg","isActualRepairShop","getMarkerIconProps","InfoTitle","h4","InfoContent","centerInfoWindow","latLng","scale","Math","pow","getZoom","worldCoordinateCenter","getProjection","fromLatLngToPoint","pixelOffset","worldCoordinateNewCenter","x","y","fromPointToLatLng","GoogleMapsApiContext","scriptLoaded","mapsApiKey","useGoogleMapsApi","GoogleMapsApiProvider","setScriptLoaded","setMapsApiKey","controller","AbortController","initializeGoogleMapsApi","getGoogleMapsApiKey","abort","addEventListener","removeEventListener","uuidv4","require","v4","company","startDate","setStartDate","endDate","setEndDate","setIncidentType","selectedCompany","setSelectedCompany","stopListening","setIncidentTypes","IncidentsMapContext","IncidentsMapProvider","None","setCompany","GoogleMapsContext","markers","locations","addMarkers","addLocations","clearMarkers","getCompany","timer","dragendListener","dragListener","zoomListener","getCompanies","activeKey","makeAPICall","ajax","getBounds","getNorthEast","getSouthWest","getIncidentLocations","event","addListener","removeListener","ButtonEnums","Button","isActive","ButtonName","ButtonIcon","incidentIdMapping","EngineFailure","PowerTransmitionFailure","DitchDriving","CollisionWithOtherVehicle","Flat","GovernmentSalvageTechnical","Brakefault","FaultyAlarm","WheelReplacement","GovermentSalvageLongDistance","GovermentSalvageShortDistance","NoPower","LostWheels","FaultyIgnition","TransferTransport","GovernmentSalvageSeizure","GovernmentSalvageTBL7","Other","Jumpstart","LostKeyOrKeyLockedInside","ElectricalFailure","WrongFuelType","Stuck","Vandalized","FuelShortage","Consignment","TransportationRelocation","MunicipalRelocation","excludedInOther","IncidentDict","incidents","Collision","Game","keys","valueOf","IncidentsButtons","activeButtons","setActiveButton","activeIncidents","setActiveIncidents","Number","reduce","acc","curr","dict","split","_key","setMap","addCenterMarker","unloadMap","GoogleMapsProvider","setLocations","_setMarkers","centerMarker","setCenterMarker","setIcon","setMarkers","_markers","marker","infoWindow","setInfoWindow","InfoWindow","disableAutoPan","clearInstanceListeners","createInfoWindow","extraData","regNumber","getMapCaseInfo","close","setContent","renderInfoWindow","setPosition","getPosition","open","ReactDOMServer","renderToString","newLoc","m","newArr","l","Marker","position","LatLng","addArr","cur","getCenter","Dropdown","label","select","IncidentsMapControl","display","justifyContent","alignItems","minWidth","defaultValue","companyStr","ControlContainer","MapContainer","MapDiv","SettingOverlay","IncidentsContainer","startMap","Map","zoom","mapTypeControl","streetViewControl","rotateControl","scaleControl","fullscreenControl","panControl","zoomControl","scrollwheel","gestureHandling","mapTypeId","MapTypeId","ROADMAP","draggableCursor","H2","h2","useMapMarkers","h3","addIndex","mapMarkers","setMapMarkers","indexedMarker","setIndexedMarker","mark","listener","posList","prev","b","markerList","info","pos","posIndex","setZIndex","bounds","LatLngBounds","extend","fitBounds","setCenter","openInnerInfoWindow","time","onClickFromOutside","useZoomControl","setMarkerClickFunction","mapRef","createMap","useGoogleMap","maxBoxHeight","BOX_HEIGHT","BOX_GAP","TOP_MARGIN","top","percent","Modal","attrs","showModal","ModalDialog","ModalContent","ModalBody","ModalFooter","FooterCloseButton","button","ImageModal","closeModal","modalRef","handleClickOutside","contains","tabIndex","aria-hidden","data-dismiss","RootContainer","CarouselContainer","StyledImg","LargeModalImageContainer","LargeImageContainer","ThumbContainer","ThumbsWrapper","ThumbnailWrapper","ThumbRow","LazyImage","spinnerClassName","handleThumbnailLoaded","isLoading","imageSrc","setImageSrc","imgRef","seenImages","loadImage","imgsrc","onload","onerror","Image","concat","ImageCarousel","ids","mainIndex","setMainIndex","modalIndex","setModalIndex","setShowModal","thumbnailsLoaded","setThumbnailsLoaded","scrollRef","thumbSrc","resetHorizontalScroll","scrollLeft","loaded","thumbnails","imageComponent","prevState","syncThumbs","marginTop","usePointer","Col","alignRight","Gap","ColRow","h5","Filler","ZebraList","list","startWithWhite","columns","showListIndex","firstColumnWidth","start","subTitleRow","tr","tIndex","paddingLeft","jsx","stop","nrFillers","createColumns","createSimpleColumns","initialIncidentInfo","initialCallerContactInformation","initialCarOwnerContactInformation","initialCarDriverContactInformation","initialRepairShopInformation","initialAssignmentDurationInformation","initialCarfaxInformation","TextBox","NoLicense","popup","TheModal","ChildWrap","noPadding","ButtonsWrap","MyButton","buttons","modalStack","useModalStack","dontPopAfterClick","pop","ModalStackContext","stack","ModalProvider","setStack","newStack","component","Header","ButtonWrapper","active","InvestigationCheck","updateInvestigationCheck","shellCase","buttonList","dayJsUtcModule","InvestigationContainer","MediaSubContainer","InformationContainer","InformationColumn","ImageContainer","ImageMapRow","WaystarScoreTitle","FlagContent","Text","link","TowDriverComment","TowDriverInformation","TowDriverImage","TowDriverContact","FlagRowContainer","FlagWrapper","Link","FakeLink","FlagComponent","useDivider","size","InvestigationComponent","setData","setIncidentLocation","carBrand","carfaxFlags","carfaxInformation","incidentInformation","callerContactInformation","carOwnerContactInformation","carDriverContactInformation","repairShopInformation","assignmentDurationInformation","getInvestigationDetails","processInvestigationDetailsResponse","processIncidentLocation","catch","error","endTime","startTime","ended","started","minutesItTook","diff","getAssignmentDuration","utc","flag","TowDriverIcon","optimized","ProcessingContainer","ListDivider","ProcessingComponent","drivePaths","priceBaseValues","drivenPaths","numResponseDrivePaths","markerClickFunc","pointsOfInterest","setPointsOfInterest","fetchAddresses","setFetchAddresses","getDrivePathAddress","getStreetAddress","dpProps","newFetchArr","newItem","drivePathIndex","getProcessingDetails","processProcessingDetailsResponse","processReportLocations","splice","fetchArr","dp","addLoader","sum","invoice","invoiceIndex","line","_price","emptyPriceLine","numberOfColumns","flexes","arr","emptyZebraListItem","reportLocations","pointsOfInterestToSkip","validPointsOfInterest","includes","val","onMarkerClick","processCustomerVehicleDetailsResponse","baseInformation","damageInformation","locationInformation","transportInformation","registerInformation","vehicleInformation","insuranceInformation","ownerInformation","CustomerVehicleContainer","SpaceDivider","SubTitle","CustomerVehicleComponent","getCustomerVehicleDetails","processResponseObj","resetData","RepairShopContainer","PreviousVisitsTitle","CaseListWrapper","RepairShopComponent","getRepairShopDetails","processRepairShopDetailsResponse","existsAlready","phone","ButtonContainer","BackLink","rightBorder","IncidentTitle","CaseDetailed","param","useParams","setCaseId","setInit","setShellCase","setRole","logClient","logRequest","removeUnreadFlag","INVESTIGATION","PROCESSING","initializeCaseDetails","getShellCases","_getShellCase","checkValue","_shellCase","CUSTOMER_AND_VEHICLE","WORKSHOP_INFO","FrameReport","embed","FrameWrapper","HtmlWrapper","CarfaxReport","report","setReport","fetchReport","filterReport","getCarfaxReport","uls","ul","parent","parentElement","innerHTML","DoesNotExists","dangerouslySetInnerHTML","__html","NotFound","Routes","routes","exact","path","App","getAttribute","rootElement","getElementById","ReactDOM","render","basename"],"mappings":"mFAAAA,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,6C,yjBCMpC,ICu4CKC,EDv4CCC,EAAcC,YAAH,K,2GECXC,EACK,kBADLA,EAGA,aAGAC,EAEI,iBAFJA,EAGE,eAHFA,EAIF,UAJEA,EAKD,WAGNC,EAAS,kBAEFC,GAG4B,mBAAD,OA1BT,SA4BjB,GAAD,OAAKD,EAAL,YAAeD,GACpB,0BANKE,GAOG,GAAD,OAAKD,EAAL,YAAeD,GACnB,GAAD,OAAKC,EAAL,YAAeD,GACf,GAAD,OAAKC,EAAL,YAAeD,GACf,4BDtBIG,GCuBD,GAAD,OAAKF,EAAL,YAAeF,GACT,GAAD,OAAKE,EAAL,YAAeF,GDxB/B,iDACEK,WAAqB,GADvB,sGAGmCC,GAHnC,wEAKIA,EAAQC,QAAR,eAAuBD,EAAQC,SALnC,kBAMWC,QAAQC,QAAQH,IAN3B,wIAUII,EACAC,EACAC,GAEA,GAAwB,MAApBD,EAASE,OAEqB,KAA5BC,OAAOC,SAASC,SAClBF,OAAOC,SAASE,KAAOd,EAEvBW,OAAOC,SAASE,KACdd,EAAA,qBAAwCW,OAAOC,SAASC,cAEvD,IAAwB,MAApBL,EAASE,OAUlB,OAAOD,EAAUD,GATjBO,QAAQC,IAAI,qCACZD,QAAQC,IAAIL,OAAOC,SAASE,MACI,KAA5BH,OAAOC,SAASC,SAClBF,OAAOC,SAASE,KAAOd,EAEvBW,OAAOC,SAASE,KACdd,EAAA,qBAAuCW,OAAOC,SAASC,aA7BjE,iCAoCuBI,EAAoBC,GACvC,OAAOC,KAAKjB,eArChB,MAyCakB,EAAb,kDAKI,WAAYF,EAAkBG,GAA4E,IAAD,8BACrG,gBALIA,UAIiG,IAHjGH,aAGiG,IAF/FI,sBAAmEC,EAIzE,EAAKF,KAAOA,GAAmBV,OAC/B,EAAKO,aAAsBK,IAAZL,GAAqC,OAAZA,EAAmBA,EAAU,GAHgC,EAL7G,yDAWiBM,GAA4D,IAAD,OAChEC,EAAON,KAAKD,QAAU,iBAC1BO,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKE,oBAAoBF,WA1B3G,0CA8BkCzB,GAA8C,IAAD,OACjEE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYuB,EAAeC,OAAOJ,MAGhB,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA6B,QAxDpD,iCA2De6C,EAA+B3B,GAA4D,IAAD,OAC7FC,EAAON,KAAKD,QAAU,yBAC1B,GAAkB,OAAdiC,EACA,MAAM,IAAIC,MAAM,kDACG7B,IAAd4B,IACL1B,GAAQ,aAAe4B,mBAAmB,GAAKF,GAAa,KAChE1B,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,OACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKqB,kBAAkBrB,WA9EzG,wCAkFgCzB,GAA8C,IAAD,OAC/DE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYuB,EAAeC,OAAOJ,MAGhB,MAAXhC,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA6B,UAjGpD,GAAqCL,GAqGxBsD,EAAb,kDAKI,WAAYrC,EAAkBG,GAA4E,IAAD,8BACrG,gBALIA,UAIiG,IAHjGH,aAGiG,IAF/FI,sBAAmEC,EAIzE,EAAKF,KAAOA,GAAmBV,OAC/B,EAAKO,aAAsBK,IAAZL,GAAqC,OAAZA,EAAmBA,EAAU,GAHgC,EAL7G,qDAWasC,EAAgCC,EAA+BC,EAA8BC,EAAwBC,EAAsBC,EAAiCC,EAA6BC,EAAmCC,EAAwCxC,GAA8D,IAAD,OAClVC,EAAON,KAAKD,QAAU,mBAC1B,GAAkB,OAAdsC,EACA,MAAM,IAAIJ,MAAM,6CAGpB,QAFuB7B,IAAdiC,IACL/B,GAAQ,aAAe4B,mBAAmB,GAAKG,GAAa,KAC9C,OAAdC,EACA,MAAM,IAAIL,MAAM,6CAGpB,QAFuB7B,IAAdkC,IACLhC,GAAQ,aAAe4B,mBAAmB,GAAKI,GAAa,KAC/C,OAAbC,EACA,MAAM,IAAIN,MAAM,4CAGpB,QAFsB7B,IAAbmC,IACLjC,GAAQ,YAAc4B,mBAAmB,GAAKK,GAAY,KACjD,OAATC,EACA,MAAM,IAAIP,MAAM,wCAGpB,QAFkB7B,IAAToC,IACLlC,GAAQ,QAAU4B,mBAAmBM,EAAO,GAAKA,EAAKM,SAAW,IAAM,KAChE,OAAPL,EACA,MAAM,IAAIR,MAAM,sCAGpB,QAFgB7B,IAAPqC,IACLnC,GAAQ,MAAQ4B,mBAAmBO,EAAK,GAAKA,EAAGK,SAAW,IAAM,KACtD,OAAXJ,EACA,MAAM,IAAIT,MAAM,0CAGpB,QAFoB7B,IAAXsC,IACLpC,GAAQ,UAAY4B,mBAAmB,GAAKQ,GAAU,KAC7C,OAATC,EACA,MAAM,IAAIV,MAAM,wCAGpB,QAFkB7B,IAATuC,IACLrC,GAAQ,QAAU4B,mBAAmB,GAAKS,GAAQ,KACtC,OAAZC,EACA,MAAM,IAAIX,MAAM,gDACC7B,IAAZwC,IACLtC,GAAQ,WAAa4B,mBAAmB,GAAKU,GAAW,UACxCxC,IAAhByC,GAA6C,OAAhBA,IAC7BvC,GAAQ,eAAiB4B,mBAAmB,GAAKW,GAAe,KACpEvC,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKiC,gBAAgBjC,WA5DvG,sCAgE8BzB,GAAgD,IAAD,OAC/DE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADY6C,EAAiBrB,OAAOJ,MAGlB,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA+B,QA1FtD,oCA6FkB8D,EAA4B5C,GAAqD,IAAD,OACtFC,EAAON,KAAKD,QAAU,wBAC1B,GAAe,OAAXkD,EACA,MAAM,IAAIhB,MAAM,+CACA7B,IAAX6C,IACL3C,GAAQ,UAAY4B,mBAAmB,GAAKe,GAAU,KAC1D3C,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKoC,qBAAqBpC,WAhH5G,2CAoHmCzB,GAAuC,IAAD,OAC3DE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYgD,EAAQxB,OAAOJ,MAGT,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAAsB,QA9I7C,yCAiJuBkD,EAAgCC,EAA+BC,EAA8BC,EAAwBC,EAAsBC,EAAiCC,EAA6BC,EAAmCC,EAAwCI,EAA4B5C,GAA8D,IAAD,OACxXC,EAAON,KAAKD,QAAU,6BAC1B,GAAkB,OAAdsC,EACA,MAAM,IAAIJ,MAAM,6CAGpB,QAFuB7B,IAAdiC,IACL/B,GAAQ,aAAe4B,mBAAmB,GAAKG,GAAa,KAC9C,OAAdC,EACA,MAAM,IAAIL,MAAM,6CAGpB,QAFuB7B,IAAdkC,IACLhC,GAAQ,aAAe4B,mBAAmB,GAAKI,GAAa,KAC/C,OAAbC,EACA,MAAM,IAAIN,MAAM,4CAGpB,QAFsB7B,IAAbmC,IACLjC,GAAQ,YAAc4B,mBAAmB,GAAKK,GAAY,KACjD,OAATC,EACA,MAAM,IAAIP,MAAM,wCAGpB,QAFkB7B,IAAToC,IACLlC,GAAQ,QAAU4B,mBAAmBM,EAAO,GAAKA,EAAKM,SAAW,IAAM,KAChE,OAAPL,EACA,MAAM,IAAIR,MAAM,sCAGpB,QAFgB7B,IAAPqC,IACLnC,GAAQ,MAAQ4B,mBAAmBO,EAAK,GAAKA,EAAGK,SAAW,IAAM,KACtD,OAAXJ,EACA,MAAM,IAAIT,MAAM,0CAGpB,QAFoB7B,IAAXsC,IACLpC,GAAQ,UAAY4B,mBAAmB,GAAKQ,GAAU,KAC7C,OAATC,EACA,MAAM,IAAIV,MAAM,wCAGpB,QAFkB7B,IAATuC,IACLrC,GAAQ,QAAU4B,mBAAmB,GAAKS,GAAQ,KACtC,OAAZC,EACA,MAAM,IAAIX,MAAM,2CAKpB,QAJqB7B,IAAZwC,IACLtC,GAAQ,WAAa4B,mBAAmB,GAAKU,GAAW,UACxCxC,IAAhByC,GAA6C,OAAhBA,IAC7BvC,GAAQ,eAAiB4B,mBAAmB,GAAKW,GAAe,KACrD,OAAXI,EACA,MAAM,IAAIhB,MAAM,+CACA7B,IAAX6C,IACL3C,GAAQ,UAAY4B,mBAAmB,GAAKe,GAAU,KAC1D3C,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKsC,0BAA0BtC,WAtMjH,gDA0MwCzB,GAAgD,IAAD,OACzEE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADY6C,EAAiBrB,OAAOJ,MAGlB,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA+B,QApOtD,2CAuOyB8D,EAAgB5C,GAA0E,IAAD,OACtGC,EAAON,KAAKD,QAAU,uCAC1B,QAAeK,IAAX6C,GAAmC,OAAXA,EACxB,MAAM,IAAIhB,MAAM,2CAEpB3B,GADAA,EAAOA,EAAKC,QAAQ,WAAY2B,mBAAmB,GAAKe,KAC5C1C,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKuC,4BAA4BvC,WAzPnH,kDA6P0CzB,GAA4D,IAAD,OACvFE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYmD,GAA6B3B,OAAOJ,MAG9B,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA2C,QAvRlE,8CA0R4B8D,EAAgB5C,GAA6E,IAAD,OAC5GC,EAAON,KAAKD,QAAU,0CAC1B,QAAeK,IAAX6C,GAAmC,OAAXA,EACxB,MAAM,IAAIhB,MAAM,2CAEpB3B,GADAA,EAAOA,EAAKC,QAAQ,WAAY2B,mBAAmB,GAAKe,KAC5C1C,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKyC,+BAA+BzC,WA5StH,qDAgT6CzB,GAA+D,IAAD,OAC7FE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYqD,GAAgC7B,OAAOJ,MAGjC,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA8C,QA1UrE,2CA6UyB8D,EAAgB5C,GAA0E,IAAD,OACtGC,EAAON,KAAKD,QAAU,uCAC1B,QAAeK,IAAX6C,GAAmC,OAAXA,EACxB,MAAM,IAAIhB,MAAM,2CAEpB3B,GADAA,EAAOA,EAAKC,QAAQ,WAAY2B,mBAAmB,GAAKe,KAC5C1C,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAK2C,4BAA4B3C,WA/VnH,kDAmW0CzB,GAA4D,IAAD,OACvFE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYuD,GAA6B/B,OAAOJ,MAG9B,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIqC,EAAkC,KAAlBrC,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYuD,GAA6B/B,OAAOgC,MAG9B,MAAXpE,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA2C,QAhYlE,gDAmY8B8D,EAA4B5C,GAA+E,IAAD,OAC5HC,EAAON,KAAKD,QAAU,2CAC1B,GAAe,OAAXkD,EACA,MAAM,IAAIhB,MAAM,+CACA7B,IAAX6C,IACL3C,GAAQ,UAAY4B,mBAAmB,GAAKe,GAAU,KAC1D3C,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAK8C,iCAAiC9C,WAtZxH,uDA0Z+CzB,GAAiE,IAAD,OACjGE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADY0D,GAAkClC,OAAOJ,MAGnC,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAAgD,QApbvE,uCAubqB2E,EAAwBC,EAA8BC,EAA+BC,EAAgCC,EAA0CC,EAAiC9D,GAAsE,IAAD,OAC9QC,EAAON,KAAKD,QAAU,2BAC1B,GAAW,OAAP+D,EACA,MAAM,IAAI7B,MAAM,sCAGpB,QAFgB7B,IAAP0D,IACLxD,GAAQ,MAAQ4B,mBAAmB,GAAK4B,GAAM,KACjC,OAAbC,EACA,MAAM,IAAI9B,MAAM,4CAGpB,QAFsB7B,IAAb2D,IACLzD,GAAQ,YAAc4B,mBAAmB,GAAK6B,GAAY,KAC5C,OAAdC,EACA,MAAM,IAAI/B,MAAM,6CAGpB,QAFuB7B,IAAd4D,IACL1D,GAAQ,aAAe4B,mBAAmB,GAAK8B,GAAa,KAC9C,OAAdC,EACA,MAAM,IAAIhC,MAAM,kDACG7B,IAAd6D,IACL3D,GAAQ,aAAe4B,mBAAmB,GAAK+B,GAAa,UAC1C7D,IAAlB8D,GAAiD,OAAlBA,IAC/B5D,GAAQ,iBAAmB4B,mBAAmB,GAAKgC,GAAiB,UAC3D9D,IAAT+D,GAA+B,OAATA,IACtB7D,GAAQ,QAAU4B,mBAAmB,GAAKiC,GAAQ,KACtD7D,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKsD,wBAAwBtD,WA1d/G,8CA8dsCzB,GAAwD,IAAD,OAC/EE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYkE,GAAyB1C,OAAOJ,MAG1B,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAAuC,QAjf9D,qCAofmBmF,EAAgCjE,GAAqD,IAAD,OAC3FC,EAAON,KAAKD,QAAU,wBAC1BO,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAEIC,EAAwB,CACxB+D,KAHa/C,KAAKgD,UAAUF,GAI5B7D,OAAQ,OACRJ,SACApB,QAAS,CACL,eAAgB,mBAChB,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAK2D,sBAAsB3D,WAvgB7G,4CA2gBoCzB,GAAuC,IAAD,OAC5DE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,YAD8BC,IAAlBmB,EAA8BA,EAAqB,QAG7C,MAAXhC,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAAsB,QA1hB7C,qCA6hBmBuF,EAAsBrE,GAAqD,IAAD,OACjFC,EAAON,KAAKD,QAAU,+CAC1B,QAAqBK,IAAjBsE,GAA+C,OAAjBA,EAC9B,MAAM,IAAIzC,MAAM,iDAEpB3B,GADAA,EAAOA,EAAKC,QAAQ,iBAAkB2B,mBAAmB,GAAKwC,KAClDnE,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAK6D,sBAAsB7D,WA/iB7G,4CAmjBoCzB,GAAuC,IAAD,OAC5DE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYyE,GAAQjD,OAAOJ,MAGT,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAAsB,QAtkB7C,sCAykBoB8D,EAAgB5C,GAA4D,IAAD,OACnFC,EAAON,KAAKD,QAAU,+CAC1B,QAAeK,IAAX6C,GAAmC,OAAXA,EACxB,MAAM,IAAIhB,MAAM,2CAEpB3B,GADAA,EAAOA,EAAKC,QAAQ,WAAY2B,mBAAmB,GAAKe,KAC5C1C,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAK+D,uBAAuB/D,WA3lB9G,6CA+lBqCzB,GAA8C,IAAD,OACpEE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADY2E,GAAenD,OAAOJ,MAGhB,MAAXhC,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAE5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA6B,QAlnBpD,+CAqnB6B8D,EAAgB8B,EAAsB1E,GAA4D,IAAD,OAClHC,EAAON,KAAKD,QAAU,yEAC1B,QAAeK,IAAX6C,GAAmC,OAAXA,EACxB,MAAM,IAAIhB,MAAM,2CAEpB,GADA3B,EAAOA,EAAKC,QAAQ,WAAY2B,mBAAmB,GAAKe,SAC1C7C,IAAV2E,GAAiC,OAAVA,EACvB,MAAM,IAAI9C,MAAM,0CAEpB3B,GADAA,EAAOA,EAAKC,QAAQ,UAAW2B,mBAAmB,GAAK6C,KAC3CxE,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,OACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKkE,gCAAgClE,WA1oBvH,sDA8oB8CzB,GAA8C,IAAD,OAC7EE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,YAD8BC,IAAlBmB,EAA8BA,EAAqB,QAG7C,MAAXhC,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA6B,UA7pBpD,GAAiCL,GAiqBpBmG,EAAb,kDAKI,WAAYlF,EAAkBG,GAA4E,IAAD,8BACrG,gBALIA,UAIiG,IAHjGH,aAGiG,IAF/FI,sBAAmEC,EAIzE,EAAKF,KAAOA,GAAmBV,OAC/B,EAAKO,aAAsBK,IAAZL,GAAqC,OAAZA,EAAmBA,EAAU,GAHgC,EAL7G,gEAWwBM,GAAyD,IAAD,OACpEC,EAAON,KAAKD,QAAU,eAC1BO,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,OACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKoE,2BAA2BpE,WA1BlH,iDA8ByCzB,GAA2C,IAAD,OACrEE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IACIC,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADYgF,GAAYxD,OAAOJ,MAGb,MAAXhC,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA0B,UA7CjD,GAA+CL,GAyKlCsG,EAAb,kDAKI,WAAYrF,EAAkBG,GAA4E,IAAD,8BACrG,gBALIA,UAIiG,IAHjGH,aAGiG,IAF/FI,sBAAmEC,EAIzE,EAAKF,KAAOA,GAAmBV,OAC/B,EAAKO,aAAsBK,IAAZL,GAAqC,OAAZA,EAAmBA,EAAU,GAHgC,EAL7G,yDAWiBM,GAA0D,IAAD,OAC9DC,EAAON,KAAKD,QAAU,6BAC1BO,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAAIC,EAAwB,CACxBC,OAAQ,MACRJ,SACApB,QAAS,CACL,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKuE,oBAAoBvE,WA1B3G,0CA8BkCzB,GAA4C,IAAD,OAC/DE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIgE,EAAiB,KACjB/D,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBACjF,GAAIoF,MAAMC,QAAQjE,GAAgB,CAC9B+D,EAAY,GADkB,oBAEb/D,GAFa,IAE9B,gCAASkE,EAAT,QACIH,EAAWI,KAAKC,EAAWhE,OAAO8D,KAHR,+BAKlC,OAAOH,KAEW,MAAX/F,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,GAIW,MAAXA,EAHAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAM5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAA2B,QAhElD,2CAmEyBmF,EAA+BjE,GAAqE,IAAD,OAChHC,EAAON,KAAKD,QAAU,qCAC1BO,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAEIC,EAAwB,CACxB+D,KAHa/C,KAAKgD,UAAUF,GAI5B7D,OAAQ,OACRJ,SACApB,QAAS,CACL,eAAgB,mBAChB,OAAU,qBAIlB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAK8E,4BAA4B9E,WAtFnH,kDA0F0CzB,GAAuD,IAAD,OAClFE,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIgE,EAAiB,KACjB/D,EAAkC,KAAlBD,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBACjF,GAAIoF,MAAMC,QAAQjE,GAAgB,CAC9B+D,EAAY,GADkB,oBAEb/D,GAFa,IAE9B,gCAASkE,EAAT,QACIH,EAAWI,KAAKG,GAAsBlE,OAAO8D,KAHnB,+BAKlC,OAAOH,KAEW,MAAX/F,EACAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,IAAIM,EACAC,EAAkC,KAAlBP,EAAuB,KAAOE,KAAKC,MAAMH,EAAe,EAAKnB,kBAEjF,OADAyB,EAAYE,EAAeH,OAAOE,GAC3BE,GAAe,gCAAiCxC,EAAQ+B,EAAeL,EAAUW,MAEtE,MAAXrC,GAIW,MAAXA,EAHAF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,gCAAiCxC,EAAQ+B,EAAeL,MAM5D,MAAX1B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAAsC,UA5H7D,GAAwCL,GAgI3BgH,EAAb,kDAKI,WAAY/F,EAAkBG,GAA4E,IAAD,8BACrG,gBALIA,UAIiG,IAHjGH,aAGiG,IAF/FI,sBAAmEC,EAIzE,EAAKF,KAAOA,GAAmBV,OAC/B,EAAKO,aAAsBK,IAAZL,GAAqC,OAAZA,EAAmBA,EAAU,GAHgC,EAL7G,gDAWQuE,EAAuBjE,GAAkD,IAAD,OACpEC,EAAON,KAAKD,QAAU,OAC1BO,EAAOA,EAAKC,QAAQ,QAAS,IAE7B,IAEIC,EAAwB,CACxB+D,KAHa/C,KAAKgD,UAAUF,GAI5B7D,OAAQ,OACRJ,SACApB,QAAS,CACL,eAAgB,qBAIxB,OAAOe,KAAKU,iBAAiBF,GAAUG,MAAK,SAAAC,GACxC,OAAO,EAAKV,KAAKW,MAAMP,EAAMM,MAC9BD,MAAK,SAACG,GACL,OAAO,EAAKC,gBAAgBT,EAAMQ,GAAW,SAACA,GAAD,OAAyB,EAAKiF,WAAWjF,WA7BlG,iCAiCyBzB,GACjB,IAAME,EAASF,EAASE,OACpB0B,EAAgB,GACpB,OAD4B5B,EAASJ,SAAWI,EAASJ,QAAQiC,SAAW7B,EAASJ,QAAQiC,SAAQ,SAACC,EAAQC,GAAT,OAAoBH,EAASG,GAAKD,KACxH,MAAX5B,EACOF,EAASgC,OAAOV,MAAK,SAACW,OAGX,MAAX/B,GAA6B,MAAXA,EAClBF,EAASgC,OAAOV,MAAK,SAACW,GAC7B,OAAOS,GAAe,uCAAwCxC,EAAQ+B,EAAeL,MAGlF/B,QAAQC,QAAmB,UA7C1C,GAA+BL,GA0JlB4C,EAAb,WAII,WAAYsE,GACR,GADiC,yBAHrCC,iBAGoC,OAFpCC,eAEoC,EAC5BF,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IARxD,iDAaSE,GACD,GAAIA,IACArG,KAAKiG,YAAcI,EAAK,YAAkBC,EAAU3E,OAAO0E,EAAK,kBAAwBjG,EACpFmF,MAAMC,QAAQa,EAAK,YAAgB,CACnCrG,KAAKkG,UAAY,GADkB,oBAElBG,EAAK,WAFa,IAEnC,gCAASZ,EAAT,QACIzF,KAAKkG,UAAWR,KAAKC,EAAWhE,OAAO8D,KAHR,kCAhBnD,6BA+BWO,GAGH,IAFAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,YAAkBhG,KAAKiG,YAAcjG,KAAKiG,YAAYnD,cAAgB1C,EACtEmF,MAAMC,QAAQxF,KAAKkG,WAAY,CAC/BF,EAAI,UAAgB,GADW,oBAEdhG,KAAKkG,WAFS,IAE/B,gCAAST,EAAT,QACIO,EAAI,UAAcN,KAAKD,EAAK3C,WAHD,+BAKnC,OAAOkD,KAvCf,8BAwBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAI7E,EAEjB,OADA6E,EAAOC,KAAKR,GACLO,MA5Bf,KAgDaD,EAAb,WAKI,WAAYN,GACR,GAD4B,yBAJhCS,UAI+B,OAH/BC,eAG+B,OAF/BC,WAE+B,EACvBX,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IATxD,iDAcSE,GACD,GAAIA,IACArG,KAAKyG,KAAOJ,EAAK,KACjBrG,KAAK0G,UAAYL,EAAK,UAClBd,MAAMC,QAAQa,EAAK,QAAY,CAC/BrG,KAAK2G,MAAQ,GADkB,oBAEdN,EAAK,OAFS,IAE/B,gCAASZ,EAAT,QACIzF,KAAK2G,MAAOjB,KAAKD,IAHU,kCAlB/C,6BAiCWO,GAIH,IAHAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,KAAWhG,KAAKyG,KACpBT,EAAI,UAAgBhG,KAAK0G,UACrBnB,MAAMC,QAAQxF,KAAK2G,OAAQ,CAC3BX,EAAI,MAAY,GADW,oBAEVhG,KAAK2G,OAFK,IAE3B,gCAASlB,EAAT,QACIO,EAAI,MAAUN,KAAKD,IAHI,+BAK/B,OAAOO,KA1Cf,8BA0BkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAID,EAEjB,OADAC,EAAOC,KAAKR,GACLO,MA9Bf,KAoDaZ,EAAb,WAKI,WAAYK,GACR,GAD6B,yBAJjClC,QAIgC,OAHhC2C,UAGgC,OAFhCG,qBAEgC,EACxBZ,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IATxD,iDAcSE,GACGA,IACArG,KAAK8D,GAAKuC,EAAK,GACfrG,KAAKyG,KAAOJ,EAAK,KACjBrG,KAAK4G,gBAAkBP,EAAK,mBAlBxC,6BA6BWL,GAKH,OAJAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,GAAShG,KAAK8D,GAClBkC,EAAI,KAAWhG,KAAKyG,KACpBT,EAAI,gBAAsBhG,KAAK4G,gBACxBZ,KAlCf,8BAsBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIZ,EAEjB,OADAY,EAAOC,KAAKR,GACLO,MA1Bf,M,SA4CYhI,O,mCAAAA,I,iBAAAA,I,mCAAAA,I,uBAAAA,I,iCAAAA,I,yCAAAA,I,qCAAAA,I,6BAAAA,I,2BAAAA,I,+BAAAA,I,iCAAAA,I,+BAAAA,I,6BAAAA,I,+BAAAA,I,6BAAAA,I,2BAAAA,I,0CAAAA,I,wBAAAA,I,8BAAAA,I,mCAAAA,M,KAuBL,IAmUKsI,EAnUC/E,EAAb,WAOI,WAAYkE,GACR,GADiC,yBANrCc,UAMoC,OALpCC,WAKoC,OAJpCxH,YAIoC,OAHpCyH,YAGoC,OAFpCC,cAEoC,EAC5BjB,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAXxD,iDAgBSE,GACGA,IACArG,KAAK8G,KAAOT,EAAK,KACjBrG,KAAK+G,MAAQV,EAAK,MAClBrG,KAAKT,OAAS8G,EAAK,OACnBrG,KAAKgH,OAASX,EAAK,OACnBrG,KAAKiH,SAAWZ,EAAK,YAtBjC,6BAiCWL,GAOH,OANAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,KAAWhG,KAAK8G,KACpBd,EAAI,MAAYhG,KAAK+G,MACrBf,EAAI,OAAahG,KAAKT,OACtByG,EAAI,OAAahG,KAAKgH,OACtBhB,EAAI,SAAehG,KAAKiH,SACjBjB,KAxCf,8BA0BkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIzE,EAEjB,OADAyE,EAAOC,KAAKR,GACLO,MA9Bf,KAoDavD,EAAb,WASI,WAAYgD,GACR,GADmC,yBARvCkB,WAQsC,OAPtC5E,eAOsC,OANtC6E,kBAMsC,OALtCC,aAKsC,OAJtCC,YAIsC,OAHtCC,mBAGsC,OAFtCC,oBAEsC,EAC9BvB,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAbxD,iDAkBSE,GACD,GAAIA,EAAO,CACP,GAAId,MAAMC,QAAQa,EAAK,OAAY,CAC/BrG,KAAKkH,MAAQ,GADkB,oBAEdb,EAAK,OAFS,IAE/B,gCAASZ,EAAT,QACIzF,KAAKkH,MAAOxB,KAAKvC,EAAQxB,OAAO8D,KAHL,+BAKnCzF,KAAKsC,UAAY+D,EAAK,UACtBrG,KAAKmH,aAAed,EAAK,aACzBrG,KAAKoH,QAAUf,EAAK,QACpBrG,KAAKqH,OAAShB,EAAK,OACnBrG,KAAKsH,cAAgBjB,EAAK,cAC1BrG,KAAKuH,eAAiBlB,EAAK,kBA9BvC,6BAyCWL,GAEH,GADAA,EAAuB,kBAATA,EAAoBA,EAAO,GACrCT,MAAMC,QAAQxF,KAAKkH,OAAQ,CAC3BlB,EAAI,MAAY,GADW,oBAEVhG,KAAKkH,OAFK,IAE3B,gCAASzB,EAAT,QACIO,EAAI,MAAUN,KAAKD,EAAK3C,WAHD,+BAW/B,OANAkD,EAAI,UAAgBhG,KAAKsC,UACzB0D,EAAI,aAAmBhG,KAAKmH,aAC5BnB,EAAI,QAAchG,KAAKoH,QACvBpB,EAAI,OAAahG,KAAKqH,OACtBrB,EAAI,cAAoBhG,KAAKsH,cAC7BtB,EAAI,eAAqBhG,KAAKuH,eACvBvB,KAtDf,8BAkCkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIvD,EAEjB,OADAuD,EAAOC,KAAKR,GACLO,MAtCf,KAoEapD,EAAb,WAmBI,WAAY6C,GACR,GAD0B,yBAlB9BwB,yBAkB6B,OAjB7B1D,QAiB6B,OAhB7B2D,aAgB6B,OAf7BC,eAe6B,OAd7BP,kBAc6B,OAb7BQ,eAa6B,OAZ7BC,eAY6B,OAX7BC,oBAW6B,OAV7BC,kBAU6B,OAT7B/D,cAS6B,OAR7BC,eAQ6B,OAP7BE,mBAO6B,OAN7B6D,WAM6B,OAL7BC,wBAK6B,OAJ7BC,cAI6B,OAH7BC,yBAG6B,OAF7BC,0BAE6B,EACrBnC,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAvBxD,iDA4BSE,GACD,GAAIA,EAAO,CAMP,GALArG,KAAKwH,oBAAsBnB,EAAK,oBAChCrG,KAAK8D,GAAKuC,EAAK,GACfrG,KAAKyH,QAAUpB,EAAK,QAAc,IAAI+B,KAAK/B,EAAK,QAAYgC,iBAAmBjI,EAC/EJ,KAAK0H,UAAYrB,EAAK,UAAgB,IAAI+B,KAAK/B,EAAK,UAAcgC,iBAAmBjI,EACrFJ,KAAKmH,aAAed,EAAK,aACrBd,MAAMC,QAAQa,EAAK,WAAgB,CACnCrG,KAAK2H,UAAY,GADkB,oBAElBtB,EAAK,WAFa,IAEnC,gCAASZ,EAAT,QACIzF,KAAK2H,UAAWjC,KAAK4C,EAAS3G,OAAO8D,KAHN,+BAKvC,GAAIF,MAAMC,QAAQa,EAAK,WAAgB,CACnCrG,KAAK4H,UAAY,GADkB,oBAElBvB,EAAK,WAFa,IAEnC,gCAASZ,EAAT,QACIzF,KAAK4H,UAAWlC,KAAK6C,GAAS5G,OAAO8D,KAHN,+BAYvC,GAPAzF,KAAK6H,eAAiBxB,EAAK,eAC3BrG,KAAK8H,aAAezB,EAAK,aACzBrG,KAAK+D,SAAWsC,EAAK,SACrBrG,KAAKgE,UAAYqC,EAAK,UACtBrG,KAAKkE,cAAgBmC,EAAK,cAC1BrG,KAAK+H,MAAQ1B,EAAK,MAClBrG,KAAKgI,mBAAqB3B,EAAK,mBAC3Bd,MAAMC,QAAQa,EAAK,UAAe,CAClCrG,KAAKiI,SAAW,GADkB,oBAEjB5B,EAAK,UAFY,IAElC,gCAASZ,EAAT,QACIzF,KAAKiI,SAAUvC,KAAKD,IAHU,+BAKtCzF,KAAKkI,oBAAsB7B,EAAK,oBAChCrG,KAAKmI,qBAAuB9B,EAAK,wBA1D7C,6BAqEWL,GAOH,IANAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,oBAA0BhG,KAAKwH,oBACnCxB,EAAI,GAAShG,KAAK8D,GAClBkC,EAAI,QAAchG,KAAKyH,QAAUzH,KAAKyH,QAAQe,mBAAqBpI,EACnE4F,EAAI,UAAgBhG,KAAK0H,UAAY1H,KAAK0H,UAAUc,mBAAqBpI,EACzE4F,EAAI,aAAmBhG,KAAKmH,aACxB5B,MAAMC,QAAQxF,KAAK2H,WAAY,CAC/B3B,EAAI,UAAgB,GADW,oBAEdhG,KAAK2H,WAFS,IAE/B,gCAASlC,EAAT,QACIO,EAAI,UAAcN,KAAKD,EAAK3C,WAHD,+BAKnC,GAAIyC,MAAMC,QAAQxF,KAAK4H,WAAY,CAC/B5B,EAAI,UAAgB,GADW,oBAEdhG,KAAK4H,WAFS,IAE/B,gCAASnC,EAAT,QACIO,EAAI,UAAcN,KAAKD,EAAK3C,WAHD,+BAYnC,GAPAkD,EAAI,eAAqBhG,KAAK6H,eAC9B7B,EAAI,aAAmBhG,KAAK8H,aAC5B9B,EAAI,SAAehG,KAAK+D,SACxBiC,EAAI,UAAgBhG,KAAKgE,UACzBgC,EAAI,cAAoBhG,KAAKkE,cAC7B8B,EAAI,MAAYhG,KAAK+H,MACrB/B,EAAI,mBAAyBhG,KAAKgI,mBAC9BzC,MAAMC,QAAQxF,KAAKiI,UAAW,CAC9BjC,EAAI,SAAe,GADW,oBAEbhG,KAAKiI,UAFQ,IAE9B,gCAASxC,EAAT,QACIO,EAAI,SAAaN,KAAKD,IAHI,+BAOlC,OAFAO,EAAI,oBAA0BhG,KAAKkI,oBACnClC,EAAI,qBAA2BhG,KAAKmI,qBAC7BnC,KApGf,8BA8DkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIpD,EAEjB,OADAoD,EAAOC,KAAKR,GACLO,MAlEf,KA4HsBkC,EAAtB,WAKI,WAAYzC,GACR,GAD6B,yBAJjClC,QAIgC,OAHhC2D,aAGgC,OAFhCiB,aAEgC,EACxB1C,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IATxD,iDAcSE,GACGA,IACArG,KAAK8D,GAAKuC,EAAK,GACfrG,KAAKyH,QAAUpB,EAAK,QAAc,IAAI+B,KAAK/B,EAAK,QAAYgC,iBAAmBjI,EAC/EJ,KAAK0I,QAAUrC,EAAK,QAAc,IAAI+B,KAAK/B,EAAK,QAAYgC,iBAAmBjI,KAlB3F,6BA2BW4F,GAKH,OAJAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,GAAShG,KAAK8D,GAClBkC,EAAI,QAAchG,KAAKyH,QAAUzH,KAAKyH,QAAQe,mBAAqBpI,EACnE4F,EAAI,QAAchG,KAAK0I,QAAU1I,KAAK0I,QAAQF,mBAAqBpI,EAC5D4F,KAhCf,8BAsBkBA,GAEV,MADAA,EAAuB,kBAATA,EAAoBA,EAAO,GACnC,IAAI/D,MAAM,+DAxBxB,KA0CaqG,EAAb,kDAII,WAAYtC,GAAmB,IAAD,8BAC1B,cAAMA,IAJV/C,YAG8B,IAF9B0F,YAE8B,IAJlC,iDAQStC,GACD,4DAAWA,GACPA,IACArG,KAAKiD,OAASoD,EAAK,OACnBrG,KAAK2I,OAAStC,EAAK,UAZ/B,6BAuBWL,GAKH,OAJAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,OAAahG,KAAKiD,OACtB+C,EAAI,OAAahG,KAAK2I,OACtB,8DAAa3C,GACNA,KA5Bf,8BAgBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAI+B,EAEjB,OADA/B,EAAOC,KAAKR,GACLO,MApBf,GAA8BkC,I,SAqClB5B,O,qBAAAA,I,mBAAAA,I,uCAAAA,I,uCAAAA,I,+CAAAA,I,wCAAAA,M,KASL,IAyCK+B,EAqCAC,EAOAC,EAKAC,EA1FCR,GAAb,kDAKI,WAAYvC,GAAmB,IAAD,8BAC1B,cAAMA,IALVgD,YAI8B,IAH9BL,YAG8B,IAF9B1F,YAE8B,IALlC,iDASSoD,GACD,4DAAWA,GACPA,IACArG,KAAKgJ,OAAS3C,EAAK,OACnBrG,KAAK2I,OAAStC,EAAK,OACnBrG,KAAKiD,OAASoD,EAAK,UAd/B,6BAyBWL,GAMH,OALAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,OAAahG,KAAKgJ,OACtBhD,EAAI,OAAahG,KAAK2I,OACtB3C,EAAI,OAAahG,KAAKiD,OACtB,8DAAa+C,GACNA,KA/Bf,8BAkBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIgC,EAEjB,OADAhC,EAAOC,KAAKR,GACLO,MAtBf,GAA8BkC,I,SAyClBG,O,eAAAA,I,iCAAAA,I,qDAAAA,I,+BAAAA,I,yDAAAA,I,iDAAAA,I,+BAAAA,I,iBAAAA,I,eAAAA,I,eAAAA,I,4DAAAA,I,4BAAAA,I,8BAAAA,I,wCAAAA,I,gEAAAA,I,kEAAAA,I,sBAAAA,I,oCAAAA,I,4BAAAA,I,oCAAAA,I,0CAAAA,I,wDAAAA,I,kDAAAA,I,kBAAAA,I,0BAAAA,I,wDAAAA,I,0CAAAA,I,kCAAAA,I,kBAAAA,I,4BAAAA,I,gCAAAA,I,8BAAAA,I,wDAAAA,I,+CAAAA,M,cAqCAC,O,aAAAA,I,+BAAAA,I,qBAAAA,I,oBAAAA,M,cAOAC,O,yBAAAA,I,4BAAAA,M,cAKAC,O,+BAAAA,I,uBAAAA,I,sBAAAA,M,KAML,IA4IKE,GA5IC3F,GAAb,WASI,WAAY0C,GACR,GAD+C,yBARnDkD,qBAQkD,OAPlDC,sBAOkD,OANlDC,eAMkD,OALlDC,eAKkD,OAJlDC,wBAIkD,OAHlDC,uBAGkD,OAFlDC,cAEkD,EAC1CxD,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAbxD,iDAkBSE,GACD,GAAIA,EAAO,CAGP,GAFArG,KAAKkJ,gBAAkB7C,EAAK,gBAAsB,IAAI+B,KAAK/B,EAAK,gBAAoBgC,iBAAmBjI,EACvGJ,KAAKmJ,iBAAmB9C,EAAK,iBAAuBoD,GAAyB9H,OAAO0E,EAAK,uBAA6BjG,EAClHmF,MAAMC,QAAQa,EAAK,WAAgB,CACnCrG,KAAKoJ,UAAY,GADkB,oBAElB/C,EAAK,WAFa,IAEnC,gCAASZ,EAAT,QACIzF,KAAKoJ,UAAW1D,KAAKgE,GAAe/H,OAAO8D,KAHZ,+BAQvC,GAHAzF,KAAKqJ,UAAYhD,EAAK,UACtBrG,KAAKsJ,mBAAqBjD,EAAK,mBAC/BrG,KAAKuJ,kBAAoBlD,EAAK,kBAC1Bd,MAAMC,QAAQa,EAAK,UAAe,CAClCrG,KAAKwJ,SAAW,GADkB,oBAEjBnD,EAAK,UAFY,IAElC,gCAASZ,EAAT,QACIzF,KAAKwJ,SAAU9D,KAAKiE,GAAgBhI,OAAO8D,KAHb,mCA9BlD,6BA6CWO,GAIH,IAHAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,gBAAsBhG,KAAKkJ,gBAAkBlJ,KAAKkJ,gBAAgBV,mBAAqBpI,EAC3F4F,EAAI,iBAAuBhG,KAAKmJ,iBAAmBnJ,KAAKmJ,iBAAiBrG,cAAgB1C,EACrFmF,MAAMC,QAAQxF,KAAKoJ,WAAY,CAC/BpD,EAAI,UAAgB,GADW,oBAEdhG,KAAKoJ,WAFS,IAE/B,gCAAS3D,EAAT,QACIO,EAAI,UAAcN,KAAKD,EAAK3C,WAHD,+BAQnC,GAHAkD,EAAI,UAAgBhG,KAAKqJ,UACzBrD,EAAI,mBAAyBhG,KAAKsJ,mBAClCtD,EAAI,kBAAwBhG,KAAKuJ,kBAC7BhE,MAAMC,QAAQxF,KAAKwJ,UAAW,CAC9BxD,EAAI,SAAe,GADW,oBAEbhG,KAAKwJ,UAFQ,IAE9B,gCAAS/D,EAAT,QACIO,EAAI,SAAaN,KAAKD,EAAK3C,WAHD,+BAKlC,OAAOkD,KA9Df,8BAsCkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIjD,EAEjB,OADAiD,EAAOC,KAAKR,GACLO,MA1Cf,KA4EakD,GAAb,WAUI,WAAYzD,GACR,GAD2C,yBAT/C4D,oBAS8C,OAR9CC,kBAQ8C,OAP9C1F,UAO8C,OAN9CD,mBAM8C,OAL9CH,cAK8C,OAJ9CC,eAI8C,OAH9C8F,yBAG8C,OAF9CC,kBAE8C,EACtC/D,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAdxD,iDAmBSE,GACGA,IACArG,KAAK4J,eAAiBvD,EAAK,eAC3BrG,KAAK6J,aAAexD,EAAK,aACzBrG,KAAKmE,KAAOkC,EAAK,KACjBrG,KAAKkE,cAAgBmC,EAAK,cAC1BrG,KAAK+D,SAAWsC,EAAK,SACrBrG,KAAKgE,UAAYqC,EAAK,UACtBrG,KAAK8J,oBAAsBzD,EAAK,oBAChCrG,KAAK+J,aAAe1D,EAAK,aAAmB,IAAI+B,KAAK/B,EAAK,aAAiBgC,iBAAmBjI,KA5B1G,6BAuCW4F,GAUH,OATAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,eAAqBhG,KAAK4J,eAC9B5D,EAAI,aAAmBhG,KAAK6J,aAC5B7D,EAAI,KAAWhG,KAAKmE,KACpB6B,EAAI,cAAoBhG,KAAKkE,cAC7B8B,EAAI,SAAehG,KAAK+D,SACxBiC,EAAI,UAAgBhG,KAAKgE,UACzBgC,EAAI,oBAA0BhG,KAAK8J,oBACnC9D,EAAI,aAAmBhG,KAAK+J,aAAe/J,KAAK+J,aAAavB,mBAAqBpI,EAC3E4F,KAjDf,8BAgCkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIkD,EAEjB,OADAlD,EAAOC,KAAKR,GACLO,MApCf,M,SAgEY0C,O,eAAAA,I,uCAAAA,I,uCAAAA,I,2CAAAA,I,yCAAAA,I,qCAAAA,I,yCAAAA,I,2CAAAA,I,6CAAAA,I,yBAAAA,I,uCAAAA,Q,KAcL,IAAMS,GAAb,WAaI,WAAY1D,GACR,GADiC,yBAZrClC,QAYoC,OAXpCkG,sBAWoC,OAVpCC,sBAUoC,OATpCC,wBASoC,OARpCC,0BAQoC,OAPpCjG,mBAOoC,OANpC0F,oBAMoC,OALpCC,kBAKoC,OAJpCE,kBAIoC,OAHpChG,cAGoC,OAFpCC,eAEoC,EAC5BgC,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAjBxD,iDAsBSE,GACGA,IACArG,KAAK8D,GAAKuC,EAAK,GACfrG,KAAKgK,iBAAmB3D,EAAK,iBAC7BrG,KAAKiK,iBAAmB5D,EAAK,iBAC7BrG,KAAKkK,mBAAqB7D,EAAK,mBAC/BrG,KAAKmK,qBAAuB9D,EAAK,qBACjCrG,KAAKkE,cAAgBmC,EAAK,cAC1BrG,KAAK4J,eAAiBvD,EAAK,eAC3BrG,KAAK6J,aAAexD,EAAK,aACzBrG,KAAK+J,aAAe1D,EAAK,aAAmB,IAAI+B,KAAK/B,EAAK,aAAiBgC,iBAAmBjI,EAC9FJ,KAAK+D,SAAWsC,EAAK,SACrBrG,KAAKgE,UAAYqC,EAAK,aAlClC,6BA6CWL,GAaH,OAZAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,GAAShG,KAAK8D,GAClBkC,EAAI,iBAAuBhG,KAAKgK,iBAChChE,EAAI,iBAAuBhG,KAAKiK,iBAChCjE,EAAI,mBAAyBhG,KAAKkK,mBAClClE,EAAI,qBAA2BhG,KAAKmK,qBACpCnE,EAAI,cAAoBhG,KAAKkE,cAC7B8B,EAAI,eAAqBhG,KAAK4J,eAC9B5D,EAAI,aAAmBhG,KAAK6J,aAC5B7D,EAAI,aAAmBhG,KAAK+J,aAAe/J,KAAK+J,aAAavB,mBAAqBpI,EAClF4F,EAAI,SAAehG,KAAK+D,SACxBiC,EAAI,UAAgBhG,KAAKgE,UAClBgC,KA1Df,8BAsCkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAImD,EAEjB,OADAnD,EAAOC,KAAKR,GACLO,MA1Cf,KA4EaoD,GAAb,WAKI,WAAY3D,GACR,GADkC,yBAJtCoE,kBAIqC,OAHrCC,mBAGqC,OAFrCC,eAEqC,EAC7BtE,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IATxD,iDAcSE,GACD,GAAIA,EAAO,CACP,GAAId,MAAMC,QAAQa,EAAK,cAAmB,CACtCrG,KAAKoK,aAAe,GADkB,oBAErB/D,EAAK,cAFgB,IAEtC,gCAASZ,EAAT,QACIzF,KAAKoK,aAAc1E,KAAK6E,GAAoB5I,OAAO8D,KAHjB,+BAK1CzF,KAAKqK,cAAgBhE,EAAK,cAC1BrG,KAAKsK,UAAYjE,EAAK,aAtBlC,6BAiCWL,GAEH,GADAA,EAAuB,kBAATA,EAAoBA,EAAO,GACrCT,MAAMC,QAAQxF,KAAKoK,cAAe,CAClCpE,EAAI,aAAmB,GADW,oBAEjBhG,KAAKoK,cAFY,IAElC,gCAAS3E,EAAT,QACIO,EAAI,aAAiBN,KAAKD,EAAK3C,WAHD,+BAOtC,OAFAkD,EAAI,cAAoBhG,KAAKqK,cAC7BrE,EAAI,UAAgBhG,KAAKsK,UAClBtE,KA1Cf,8BA0BkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIoD,EAEjB,OADApD,EAAOC,KAAKR,GACLO,MA9Bf,KAoDagE,GAAb,WAOI,WAAYvE,GACR,GADsC,yBAN1CwE,gBAMyC,OALzCC,SAKyC,OAJzCC,eAIyC,OAHzCC,WAGyC,OAFzCC,gBAEyC,EACjC5E,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAXxD,iDAgBSE,GACGA,IACArG,KAAKwK,WAAanE,EAAK,WACvBrG,KAAKyK,IAAMpE,EAAK,IAChBrG,KAAK0K,UAAYrE,EAAK,UACtBrG,KAAK2K,MAAQtE,EAAK,MAClBrG,KAAK4K,WAAavE,EAAK,cAtBnC,6BAiCWL,GAOH,OANAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,WAAiBhG,KAAKwK,WAC1BxE,EAAI,IAAUhG,KAAKyK,IACnBzE,EAAI,UAAgBhG,KAAK0K,UACzB1E,EAAI,MAAYhG,KAAK2K,MACrB3E,EAAI,WAAiBhG,KAAK4K,WACnB5E,KAxCf,8BA0BkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIgE,EAEjB,OADAhE,EAAOC,KAAKR,GACLO,MA9Bf,KAoDa/C,GAAb,WAqCI,WAAYwC,GACR,GADkD,yBApCtDiC,cAoCqD,OAnCrDd,kBAmCqD,OAlCrDa,wBAkCqD,OAjCrDD,WAiCqD,OAhCrD8C,sBAgCqD,OA/BrDC,mBA+BqD,OA9BrDC,yBA8BqD,OA7BrDC,uBA6BqD,OA5BrDC,mBA4BqD,OA3BrDC,oBA2BqD,OA1BrDpD,kBA0BqD,OAzBrDqD,mCAyBqD,OAxBrDC,cAwBqD,OAvBrDC,+BAuBqD,OAtBrDC,oBAsBqD,OArBrDC,2BAqBqD,OApBrDC,uBAoBqD,OAnBrDC,wBAmBqD,OAlBrDC,sBAkBqD,OAjBrDC,uBAiBqD,OAhBrDC,6BAgBqD,OAfrDC,uBAeqD,OAdrDC,wBAcqD,OAbrDC,8BAaqD,OAZrD7H,mBAYqD,OAXrD0F,oBAWqD,OAVrDC,kBAUqD,OATrDE,kBASqD,OARrD/F,eAQqD,OAPrDD,cAOqD,OANrDiI,wBAMqD,OALrDC,gCAKqD,OAJrDC,wBAIqD,OAHrDzE,aAGqD,OAFrDzF,eAEqD,EAC7CgE,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAzCxD,iDA8CSE,GACD,GAAIA,EAAO,CACP,GAAId,MAAMC,QAAQa,EAAK,UAAe,CAClCrG,KAAKiI,SAAW,GADkB,oBAEjB5B,EAAK,UAFY,IAElC,gCAASZ,EAAT,QACIzF,KAAKiI,SAAUvC,KAAKD,IAHU,+BAoCtC,GA/BAzF,KAAKmH,aAAed,EAAK,aACzBrG,KAAKgI,mBAAqB3B,EAAK,mBAC/BrG,KAAK+H,MAAQ1B,EAAK,MAClBrG,KAAK6K,iBAAmBxE,EAAK,iBAC7BrG,KAAK8K,cAAgBzE,EAAK,cAC1BrG,KAAK+K,oBAAsB1E,EAAK,oBAA0B,IAAI+B,KAAK/B,EAAK,oBAAwBgC,iBAAmBjI,EACnHJ,KAAKgL,kBAAoB3E,EAAK,kBAAwB,IAAI+B,KAAK/B,EAAK,kBAAsBgC,iBAAmBjI,EAC7GJ,KAAKiL,cAAgB5E,EAAK,cAC1BrG,KAAKkL,eAAiB7E,EAAK,eAC3BrG,KAAK8H,aAAezB,EAAK,aACzBrG,KAAKmL,8BAAgC9E,EAAK,8BAC1CrG,KAAKoL,SAAW/E,EAAK,SACrBrG,KAAKqL,0BAA4BhF,EAAK,0BACtCrG,KAAKsL,eAAiBjF,EAAK,eAC3BrG,KAAKuL,sBAAwBlF,EAAK,sBAClCrG,KAAKwL,kBAAoBnF,EAAK,kBAC9BrG,KAAKyL,mBAAqBpF,EAAK,mBAC/BrG,KAAK0L,iBAAmBrF,EAAK,iBAC7BrG,KAAK2L,kBAAoBtF,EAAK,kBAC9BrG,KAAK4L,wBAA0BvF,EAAK,wBACpCrG,KAAK6L,kBAAoBxF,EAAK,kBAC9BrG,KAAK8L,mBAAqBzF,EAAK,mBAC/BrG,KAAK+L,yBAA2B1F,EAAK,yBACrCrG,KAAKkE,cAAgBmC,EAAK,cAC1BrG,KAAK4J,eAAiBvD,EAAK,eAC3BrG,KAAK6J,aAAexD,EAAK,aACzBrG,KAAK+J,aAAe1D,EAAK,aAAmB,IAAI+B,KAAK/B,EAAK,aAAiBgC,iBAAmBjI,EAC9FJ,KAAKgE,UAAYqC,EAAK,UACtBrG,KAAK+D,SAAWsC,EAAK,SACrBrG,KAAKgM,mBAAqB3F,EAAK,mBAC/BrG,KAAKiM,2BAA6B5F,EAAK,2BAAiC,IAAI+B,KAAK/B,EAAK,2BAA+BgC,iBAAmBjI,EACpImF,MAAMC,QAAQa,EAAK,oBAAyB,CAC5CrG,KAAKkM,mBAAqB,GADkB,oBAE3B7F,EAAK,oBAFsB,IAE5C,gCAASZ,EAAT,QACIzF,KAAKkM,mBAAoBxG,KAAKD,IAHU,+BAKhDzF,KAAKyH,QAAUpB,EAAK,QAAc,IAAI+B,KAAK/B,EAAK,QAAYgC,iBAAmBjI,EAC/EJ,KAAKgC,UAAYqE,EAAK,aA1FlC,6BAqGWL,GAEH,GADAA,EAAuB,kBAATA,EAAoBA,EAAO,GACrCT,MAAMC,QAAQxF,KAAKiI,UAAW,CAC9BjC,EAAI,SAAe,GADW,oBAEbhG,KAAKiI,UAFQ,IAE9B,gCAASxC,EAAT,QACIO,EAAI,SAAaN,KAAKD,IAHI,+BAoClC,GA/BAO,EAAI,aAAmBhG,KAAKmH,aAC5BnB,EAAI,mBAAyBhG,KAAKgI,mBAClChC,EAAI,MAAYhG,KAAK+H,MACrB/B,EAAI,iBAAuBhG,KAAK6K,iBAChC7E,EAAI,cAAoBhG,KAAK8K,cAC7B9E,EAAI,oBAA0BhG,KAAK+K,oBAAsB/K,KAAK+K,oBAAoBvC,mBAAqBpI,EACvG4F,EAAI,kBAAwBhG,KAAKgL,kBAAoBhL,KAAKgL,kBAAkBxC,mBAAqBpI,EACjG4F,EAAI,cAAoBhG,KAAKiL,cAC7BjF,EAAI,eAAqBhG,KAAKkL,eAC9BlF,EAAI,aAAmBhG,KAAK8H,aAC5B9B,EAAI,8BAAoChG,KAAKmL,8BAC7CnF,EAAI,SAAehG,KAAKoL,SACxBpF,EAAI,0BAAgChG,KAAKqL,0BACzCrF,EAAI,eAAqBhG,KAAKsL,eAC9BtF,EAAI,sBAA4BhG,KAAKuL,sBACrCvF,EAAI,kBAAwBhG,KAAKwL,kBACjCxF,EAAI,mBAAyBhG,KAAKyL,mBAClCzF,EAAI,iBAAuBhG,KAAK0L,iBAChC1F,EAAI,kBAAwBhG,KAAK2L,kBACjC3F,EAAI,wBAA8BhG,KAAK4L,wBACvC5F,EAAI,kBAAwBhG,KAAK6L,kBACjC7F,EAAI,mBAAyBhG,KAAK8L,mBAClC9F,EAAI,yBAA+BhG,KAAK+L,yBACxC/F,EAAI,cAAoBhG,KAAKkE,cAC7B8B,EAAI,eAAqBhG,KAAK4J,eAC9B5D,EAAI,aAAmBhG,KAAK6J,aAC5B7D,EAAI,aAAmBhG,KAAK+J,aAAe/J,KAAK+J,aAAavB,mBAAqBpI,EAClF4F,EAAI,UAAgBhG,KAAKgE,UACzBgC,EAAI,SAAehG,KAAK+D,SACxBiC,EAAI,mBAAyBhG,KAAKgM,mBAClChG,EAAI,2BAAiChG,KAAKiM,2BAA6BjM,KAAKiM,2BAA2BzD,mBAAqBpI,EACxHmF,MAAMC,QAAQxF,KAAKkM,oBAAqB,CACxClG,EAAI,mBAAyB,GADW,oBAEvBhG,KAAKkM,oBAFkB,IAExC,gCAASzG,EAAT,QACIO,EAAI,mBAAuBN,KAAKD,IAHI,+BAO5C,OAFAO,EAAI,QAAchG,KAAKyH,QAAUzH,KAAKyH,QAAQe,mBAAqBpI,EACnE4F,EAAI,UAAgBhG,KAAKgC,UAClBgE,KAlJf,8BA8FkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAI/C,EAEjB,OADA+C,EAAOC,KAAKR,GACLO,MAlGf,KA4La7C,GAAb,WAOI,WAAYsC,GACR,GAD+C,yBANnDS,UAMkD,OALlDvC,mBAKkD,OAJlDC,UAIkD,OAHlDgI,aAGkD,OAFlDC,kBAEkD,EAC1CpG,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAXxD,iDAgBSE,GACD,GAAIA,IACArG,KAAKyG,KAAOJ,EAAK,KACjBrG,KAAKkE,cAAgBmC,EAAK,cAC1BrG,KAAKmE,KAAOkC,EAAK,KACjBrG,KAAKmM,QAAU9F,EAAK,QAChBd,MAAMC,QAAQa,EAAK,eAAmB,CACtCrG,KAAKoM,aAAe,GADkB,oBAErB/F,EAAK,cAFgB,IAEtC,gCAASZ,EAAT,QACIzF,KAAKoM,aAAc1G,KAAKD,IAHU,kCAtBtD,6BAqCWO,GAMH,IALAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,KAAWhG,KAAKyG,KACpBT,EAAI,cAAoBhG,KAAKkE,cAC7B8B,EAAI,KAAWhG,KAAKmE,KACpB6B,EAAI,QAAchG,KAAKmM,QACnB5G,MAAMC,QAAQxF,KAAKoM,cAAe,CAClCpG,EAAI,aAAmB,GADW,oBAEjBhG,KAAKoM,cAFY,IAElC,gCAAS3G,EAAT,QACIO,EAAI,aAAiBN,KAAKD,IAHI,+BAKtC,OAAOO,KAhDf,8BA8BkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAI7C,EAEjB,OADA6C,EAAOC,KAAKR,GACLO,MAlCf,KA4Da1C,GAAb,WAkDI,WAAYmC,GACR,GADoD,yBAjDxDkD,qBAiDuD,OAhDvDjG,YAgDuD,OA/CvDoJ,uBA+CuD,OA9CvDC,gBA8CuD,OA7CvDxE,kBA6CuD,OA5CvDyE,yBA4CuD,OA3CvDnB,cA2CuD,OA1CvDoB,yBA0CuD,OAzCvDtI,mBAyCuD,OAxCvDC,UAwCuD,OAvCvDyF,oBAuCuD,OAtCvDC,kBAsCuD,OArCvDE,kBAqCuD,OApCvD/F,eAoCuD,OAnCvDD,cAmCuD,OAlCvD+F,yBAkCuD,OAjCvD2B,wBAiCuD,OAhCvDD,uBAgCuD,OA/BvDD,2BA+BuD,OA9BvDkB,+BA8BuD,OA7BvDC,2BA6BuD,OA5BvDC,aA4BuD,OA3BvDC,iBA2BuD,OA1BvDC,yBA0BuD,OAzBvDC,iBAyBuD,OAxBvD9E,wBAwBuD,OAvBvD+E,gBAuBuD,OAtBvDC,uBAsBuD,OArBvDC,0BAqBuD,OApBvDC,iBAoBuD,OAnBvDC,WAmBuD,OAlBvDC,kCAkBuD,OAjBvDC,mBAiBuD,OAhBvDC,qBAgBuD,OAfvDC,qBAeuD,OAdvDxF,WAcuD,OAbvDyF,sBAauD,OAZvDC,mCAYuD,OAXvDC,mBAWuD,OAVvDC,mBAUuD,OATvDC,+BASuD,OARvDC,gBAQuD,OAPvDC,sBAOuD,OANvDC,wBAMuD,OALvDC,kBAKuD,OAJvDC,eAIuD,OAHvDC,kBAGuD,OAFvDxJ,kBAEuD,EAC/CsB,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAtDxD,iDA2DSE,GACGA,IACArG,KAAKkJ,gBAAkB7C,EAAK,gBAAsB,IAAI+B,KAAK/B,EAAK,gBAAoBgC,iBAAmBjI,EACvGJ,KAAKiD,OAASoD,EAAK,OACnBrG,KAAKqM,kBAAoBhG,EAAK,kBAAwB,IAAI+B,KAAK/B,EAAK,kBAAsBgC,iBAAmBjI,EAC7GJ,KAAKsM,WAAajG,EAAK,WACvBrG,KAAK8H,aAAezB,EAAK,aACzBrG,KAAKuM,oBAAsBlG,EAAK,oBAChCrG,KAAKoL,SAAW/E,EAAK,SACrBrG,KAAKwM,oBAAsBnG,EAAK,oBAChCrG,KAAKkE,cAAgBmC,EAAK,cAC1BrG,KAAKmE,KAAOkC,EAAK,KACjBrG,KAAK4J,eAAiBvD,EAAK,eAC3BrG,KAAK6J,aAAexD,EAAK,aACzBrG,KAAK+J,aAAe1D,EAAK,aAAmB,IAAI+B,KAAK/B,EAAK,aAAiBgC,iBAAmBjI,EAC9FJ,KAAKgE,UAAYqC,EAAK,UACtBrG,KAAK+D,SAAWsC,EAAK,SACrBrG,KAAK8J,oBAAsBzD,EAAK,oBAChCrG,KAAKyL,mBAAqBpF,EAAK,mBAC/BrG,KAAKwL,kBAAoBnF,EAAK,kBAC9BrG,KAAKuL,sBAAwBlF,EAAK,sBAClCrG,KAAKyM,0BAA4BpG,EAAK,0BACtCrG,KAAK0M,sBAAwBrG,EAAK,sBAA4B,IAAI+B,KAAK/B,EAAK,sBAA0BgC,iBAAmBjI,EACzHJ,KAAK2M,QAAUtG,EAAK,QACpBrG,KAAK4M,YAAcvG,EAAK,YAAkB,IAAI+B,KAAK/B,EAAK,YAAgBgC,iBAAmBjI,EAC3FJ,KAAK6M,oBAAsBxG,EAAK,oBAA0B,IAAI+B,KAAK/B,EAAK,oBAAwBgC,iBAAmBjI,EACnHJ,KAAK8M,YAAczG,EAAK,YACxBrG,KAAKgI,mBAAqB3B,EAAK,mBAC/BrG,KAAK+M,WAAa1G,EAAK,WACvBrG,KAAKgN,kBAAoB3G,EAAK,kBAC9BrG,KAAKiN,qBAAuB5G,EAAK,qBACjCrG,KAAKkN,YAAc7G,EAAK,YACxBrG,KAAKmN,MAAQ9G,EAAK,MAClBrG,KAAKoN,6BAA+B/G,EAAK,6BACzCrG,KAAKqN,cAAgBhH,EAAK,cAC1BrG,KAAKsN,gBAAkBjH,EAAK,gBAC5BrG,KAAKuN,gBAAkBlH,EAAK,gBAC5BrG,KAAK+H,MAAQ1B,EAAK,MAClBrG,KAAKwN,iBAAmBnH,EAAK,iBAC7BrG,KAAKyN,8BAAgCpH,EAAK,8BAC1CrG,KAAK0N,cAAgBrH,EAAK,cAC1BrG,KAAK2N,cAAgBtH,EAAK,cAC1BrG,KAAK4N,0BAA4BvH,EAAK,0BACtCrG,KAAK6N,WAAaxH,EAAK,WACvBrG,KAAK8N,iBAAmBzH,EAAK,iBAC7BrG,KAAK+N,mBAAqB1H,EAAK,mBAC/BrG,KAAKgO,aAAe3H,EAAK,aACzBrG,KAAKiO,UAAY5H,EAAK,UACtBrG,KAAKkO,aAAe7H,EAAK,aACzBrG,KAAK0E,aAAe2B,EAAK,gBA5GrC,6BAuHWL,GAkDH,OAjDAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,gBAAsBhG,KAAKkJ,gBAAkBlJ,KAAKkJ,gBAAgBV,mBAAqBpI,EAC3F4F,EAAI,OAAahG,KAAKiD,OACtB+C,EAAI,kBAAwBhG,KAAKqM,kBAAoBrM,KAAKqM,kBAAkB7D,mBAAqBpI,EACjG4F,EAAI,WAAiBhG,KAAKsM,WAC1BtG,EAAI,aAAmBhG,KAAK8H,aAC5B9B,EAAI,oBAA0BhG,KAAKuM,oBACnCvG,EAAI,SAAehG,KAAKoL,SACxBpF,EAAI,oBAA0BhG,KAAKwM,oBACnCxG,EAAI,cAAoBhG,KAAKkE,cAC7B8B,EAAI,KAAWhG,KAAKmE,KACpB6B,EAAI,eAAqBhG,KAAK4J,eAC9B5D,EAAI,aAAmBhG,KAAK6J,aAC5B7D,EAAI,aAAmBhG,KAAK+J,aAAe/J,KAAK+J,aAAavB,mBAAqBpI,EAClF4F,EAAI,UAAgBhG,KAAKgE,UACzBgC,EAAI,SAAehG,KAAK+D,SACxBiC,EAAI,oBAA0BhG,KAAK8J,oBACnC9D,EAAI,mBAAyBhG,KAAKyL,mBAClCzF,EAAI,kBAAwBhG,KAAKwL,kBACjCxF,EAAI,sBAA4BhG,KAAKuL,sBACrCvF,EAAI,0BAAgChG,KAAKyM,0BACzCzG,EAAI,sBAA4BhG,KAAK0M,sBAAwB1M,KAAK0M,sBAAsBlE,mBAAqBpI,EAC7G4F,EAAI,QAAchG,KAAK2M,QACvB3G,EAAI,YAAkBhG,KAAK4M,YAAc5M,KAAK4M,YAAYpE,mBAAqBpI,EAC/E4F,EAAI,oBAA0BhG,KAAK6M,oBAAsB7M,KAAK6M,oBAAoBrE,mBAAqBpI,EACvG4F,EAAI,YAAkBhG,KAAK8M,YAC3B9G,EAAI,mBAAyBhG,KAAKgI,mBAClChC,EAAI,WAAiBhG,KAAK+M,WAC1B/G,EAAI,kBAAwBhG,KAAKgN,kBACjChH,EAAI,qBAA2BhG,KAAKiN,qBACpCjH,EAAI,YAAkBhG,KAAKkN,YAC3BlH,EAAI,MAAYhG,KAAKmN,MACrBnH,EAAI,6BAAmChG,KAAKoN,6BAC5CpH,EAAI,cAAoBhG,KAAKqN,cAC7BrH,EAAI,gBAAsBhG,KAAKsN,gBAC/BtH,EAAI,gBAAsBhG,KAAKuN,gBAC/BvH,EAAI,MAAYhG,KAAK+H,MACrB/B,EAAI,iBAAuBhG,KAAKwN,iBAChCxH,EAAI,8BAAoChG,KAAKyN,8BAC7CzH,EAAI,cAAoBhG,KAAK0N,cAC7B1H,EAAI,cAAoBhG,KAAK2N,cAC7B3H,EAAI,0BAAgChG,KAAK4N,0BACzC5H,EAAI,WAAiBhG,KAAK6N,WAC1B7H,EAAI,iBAAuBhG,KAAK8N,iBAChC9H,EAAI,mBAAyBhG,KAAK+N,mBAClC/H,EAAI,aAAmBhG,KAAKgO,aAC5BhI,EAAI,UAAgBhG,KAAKiO,UACzBjI,EAAI,aAAmBhG,KAAKkO,aAC5BlI,EAAI,aAAmBhG,KAAK0E,aACrBsB,KAzKf,8BAgHkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAI1C,EAEjB,OADA0C,EAAOC,KAAKR,GACLO,MApHf,KAgOalC,GAAb,WAII,WAAY2B,GACR,GAD2C,yBAH/C9B,mBAG8C,OAF9CC,UAE8C,EACtC6B,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IARxD,iDAaSE,GACGA,IACArG,KAAKkE,cAAgBmC,EAAK,cAC1BrG,KAAKmE,KAAOkC,EAAK,QAhB7B,6BA2BWL,GAIH,OAHAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,cAAoBhG,KAAKkE,cAC7B8B,EAAI,KAAWhG,KAAKmE,KACb6B,KA/Bf,8BAoBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIlC,EAEjB,OADAkC,EAAOC,KAAKR,GACLO,MAxBf,KAwCa4H,GAAb,WAII,WAAYnI,GACR,GADwC,yBAH5C/C,YAG2C,OAF3CmL,cAE2C,EACnCpI,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IARxD,iDAaSE,GACGA,IACArG,KAAKiD,OAASoD,EAAK,OACnBrG,KAAKoO,SAAW/H,EAAK,YAhBjC,6BA2BWL,GAIH,OAHAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,OAAahG,KAAKiD,OACtB+C,EAAI,SAAehG,KAAKoO,SACjBpI,KA/Bf,8BAoBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAI4H,EAEjB,OADA5H,EAAOC,KAAKR,GACLO,MAxBf,KAwCa3B,GAAb,WAII,WAAYoB,GACR,GAD0B,yBAH9BmB,kBAG6B,OAF7BlE,YAE6B,EACrB+C,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IARxD,iDAaSE,GACGA,IACArG,KAAKmH,aAAed,EAAK,aACzBrG,KAAKiD,OAASoD,EAAK,UAhB/B,6BA2BWL,GAIH,OAHAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,aAAmBhG,KAAKmH,aAC5BnB,EAAI,OAAahG,KAAKiD,OACf+C,KA/Bf,8BAoBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAI3B,EAEjB,OADA2B,EAAOC,KAAKR,GACLO,MAxBf,KAwCazB,GAAb,WAMI,WAAYkB,GACR,GADiC,yBALrCqI,aAKoC,OAJpCC,cAIoC,OAHpCC,iBAGoC,OAFpCC,cAEoC,EAC5BxI,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAVxD,iDAeSE,GACGA,IACArG,KAAKqO,QAAUhI,EAAK,QACpBrG,KAAKsO,SAAWjI,EAAK,SACrBrG,KAAKuO,YAAclI,EAAK,YAAkBoI,GAAkB9M,OAAO0E,EAAK,kBAAwBjG,EAChGJ,KAAKwO,SAAWnI,EAAK,SAAeqI,GAAuB/M,OAAO0E,EAAK,eAAqBjG,KApBxG,6BA+BW4F,GAMH,OALAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,QAAchG,KAAKqO,QACvBrI,EAAI,SAAehG,KAAKsO,SACxBtI,EAAI,YAAkBhG,KAAKuO,YAAcvO,KAAKuO,YAAYzL,cAAgB1C,EAC1E4F,EAAI,SAAehG,KAAKwO,SAAWxO,KAAKwO,SAAS1L,cAAgB1C,EAC1D4F,KArCf,8BAwBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIzB,EAEjB,OADAyB,EAAOC,KAAKR,GACLO,MA5Bf,KAgDakI,GAAb,WAGI,WAAYzI,GACR,GADoC,yBAFxC2I,iBAEuC,EAC/B3I,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAPxD,iDAYSE,GACGA,IACArG,KAAK2O,YAActI,EAAK,YAAkBuI,GAAYjN,OAAO0E,EAAK,kBAAwBjG,KAdtG,6BAyBW4F,GAGH,OAFAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,YAAkBhG,KAAK2O,YAAc3O,KAAK2O,YAAY7L,cAAgB1C,EACnE4F,KA5Bf,8BAkBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIkI,EAEjB,OADAlI,EAAOC,KAAKR,GACLO,MAtBf,KAoCaqI,GAAb,WAuDI,WAAY5I,GACR,GAD8B,yBAtDlC6I,qBAsDiC,OArDjCC,2BAqDiC,OApDjCC,6BAoDiC,OAnDjCC,wBAmDiC,OAlDjCC,mBAkDiC,OAjDjCC,sBAiDiC,OAhDjCC,oBAgDiC,OA/CjCC,qBA+CiC,OA9CjCC,oBA8CiC,OA7CjCC,uBA6CiC,OA5CjCC,uBA4CiC,OA3CjCC,qBA2CiC,OA1CjCC,6BA0CiC,OAzCjCC,mCAyCiC,OAxCjCC,gCAwCiC,OAvCjCC,mDAuCiC,OAtCjCC,qBAsCiC,OArCjCC,mBAqCiC,OApCjCC,qBAoCiC,OAnCjCC,uBAmCiC,OAlCjCC,kCAkCiC,OAjCjCC,SAiCiC,OAhCjCC,UAgCiC,OA/BjCC,WA+BiC,OA9BjCC,eA8BiC,OA7BjCC,uBA6BiC,OA5BjCC,iBA4BiC,OA3BjCC,gBA2BiC,OA1BjCC,mBA0BiC,OAzBjCC,mBAyBiC,OAxBjCC,iBAwBiC,OAvBjCC,6BAuBiC,OAtBjCC,iCAsBiC,OArBjCC,uBAqBiC,OApBjCC,mBAoBiC,OAnBjCC,wBAmBiC,OAlBjCC,mBAkBiC,OAjBjClE,gBAiBiC,OAhBjCmE,wBAgBiC,OAfjCC,gBAeiC,OAdjCC,UAciC,OAbjCC,cAaiC,OAZjCC,aAYiC,OAXjCC,iBAWiC,OAVjCC,uBAUiC,OATjC9E,2BASiC,OARjC+E,2BAQiC,OAPjCC,oCAOiC,OANjCC,0BAMiC,OALjCC,yBAKiC,OAJjCC,6BAIiC,OAHjChF,yBAGiC,OAFjCC,iBAEiC,EACzB9G,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IA3DxD,iDAgESE,GACD,GAAIA,EAAO,CA+BP,GA9BArG,KAAK6O,gBAAkBxI,EAAK,gBAC5BrG,KAAK8O,sBAAwBzI,EAAK,sBAClCrG,KAAK+O,wBAA0B1I,EAAK,wBACpCrG,KAAKgP,mBAAqB3I,EAAK,mBAC/BrG,KAAKiP,cAAgB5I,EAAK,cAC1BrG,KAAKkP,iBAAmB7I,EAAK,iBAC7BrG,KAAKmP,eAAiB9I,EAAK,eAC3BrG,KAAKoP,gBAAkB/I,EAAK,gBAC5BrG,KAAKqP,eAAiBhJ,EAAK,eAC3BrG,KAAKsP,kBAAoBjJ,EAAK,kBAC9BrG,KAAKuP,kBAAoBlJ,EAAK,kBAC9BrG,KAAKwP,gBAAkBnJ,EAAK,gBAC5BrG,KAAKyP,wBAA0BpJ,EAAK,wBACpCrG,KAAK0P,8BAAgCrJ,EAAK,8BAC1CrG,KAAK2P,2BAA6BtJ,EAAK,2BACvCrG,KAAK4P,8CAAgDvJ,EAAK,8CAC1DrG,KAAK6P,gBAAkBxJ,EAAK,gBAC5BrG,KAAK8P,cAAgBzJ,EAAK,cAC1BrG,KAAK+P,gBAAkB1J,EAAK,gBAC5BrG,KAAKgQ,kBAAoB3J,EAAK,kBAC9BrG,KAAKiQ,6BAA+B5J,EAAK,6BACzCrG,KAAKkQ,IAAM7J,EAAK,IAChBrG,KAAKmQ,KAAO9J,EAAK,KACjBrG,KAAKoQ,MAAQ/J,EAAK,MAClBrG,KAAKqQ,UAAYhK,EAAK,UACtBrG,KAAKsQ,kBAAoBjK,EAAK,kBAC9BrG,KAAKuQ,YAAclK,EAAK,YACxBrG,KAAKwQ,WAAanK,EAAK,WACvBrG,KAAKyQ,cAAgBpK,EAAK,cAC1BrG,KAAK0Q,cAAgBrK,EAAK,cACtBd,MAAMC,QAAQa,EAAK,aAAkB,CACrCrG,KAAK2Q,YAAc,GADkB,oBAEpBtK,EAAK,aAFe,IAErC,gCAASZ,EAAT,QACIzF,KAAK2Q,YAAajL,KAAKD,IAHU,+BAKzCzF,KAAK4Q,wBAA0BvK,EAAK,wBACpCrG,KAAK6Q,4BAA8BxK,EAAK,4BACxCrG,KAAK8Q,kBAAoBzK,EAAK,kBAC9BrG,KAAK+Q,cAAgB1K,EAAK,cAC1BrG,KAAKgR,mBAAqB3K,EAAK,mBAC/BrG,KAAKiR,cAAgB5K,EAAK,cAC1BrG,KAAK+M,WAAa1G,EAAK,WACvBrG,KAAKkR,mBAAqB7K,EAAK,mBAC/BrG,KAAKmR,WAAa9K,EAAK,WACvBrG,KAAKoR,KAAO/K,EAAK,KACjBrG,KAAKqR,SAAWhL,EAAK,SACrBrG,KAAKsR,QAAUjL,EAAK,QACpBrG,KAAKuR,YAAclL,EAAK,YACxBrG,KAAKwR,kBAAoBnL,EAAK,kBAC9BrG,KAAK0M,sBAAwBrG,EAAK,sBAA4B,IAAI+B,KAAK/B,EAAK,sBAA0BgC,iBAAmBjI,EACzHJ,KAAKyR,sBAAwBpL,EAAK,sBAClCrG,KAAK0R,+BAAiCrL,EAAK,+BAAqC,IAAI+B,KAAK/B,EAAK,+BAAmCgC,iBAAmBjI,EACpJJ,KAAK2R,qBAAuBtL,EAAK,qBAA2B,IAAI+B,KAAK/B,EAAK,qBAAyBgC,iBAAmBjI,EACtHJ,KAAK4R,oBAAsBvL,EAAK,oBAChCrG,KAAK6R,wBAA0BxL,EAAK,wBAA8B,IAAI+B,KAAK/B,EAAK,wBAA4BgC,iBAAmBjI,EAC/HJ,KAAK6M,oBAAsBxG,EAAK,oBAA0B,IAAI+B,KAAK/B,EAAK,oBAAwBgC,iBAAmBjI,EACnHJ,KAAK8M,YAAczG,EAAK,eA1HpC,6BAqIWL,GAgCH,IA/BAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,gBAAsBhG,KAAK6O,gBAC/B7I,EAAI,sBAA4BhG,KAAK8O,sBACrC9I,EAAI,wBAA8BhG,KAAK+O,wBACvC/I,EAAI,mBAAyBhG,KAAKgP,mBAClChJ,EAAI,cAAoBhG,KAAKiP,cAC7BjJ,EAAI,iBAAuBhG,KAAKkP,iBAChClJ,EAAI,eAAqBhG,KAAKmP,eAC9BnJ,EAAI,gBAAsBhG,KAAKoP,gBAC/BpJ,EAAI,eAAqBhG,KAAKqP,eAC9BrJ,EAAI,kBAAwBhG,KAAKsP,kBACjCtJ,EAAI,kBAAwBhG,KAAKuP,kBACjCvJ,EAAI,gBAAsBhG,KAAKwP,gBAC/BxJ,EAAI,wBAA8BhG,KAAKyP,wBACvCzJ,EAAI,8BAAoChG,KAAK0P,8BAC7C1J,EAAI,2BAAiChG,KAAK2P,2BAC1C3J,EAAI,8CAAoDhG,KAAK4P,8CAC7D5J,EAAI,gBAAsBhG,KAAK6P,gBAC/B7J,EAAI,cAAoBhG,KAAK8P,cAC7B9J,EAAI,gBAAsBhG,KAAK+P,gBAC/B/J,EAAI,kBAAwBhG,KAAKgQ,kBACjChK,EAAI,6BAAmChG,KAAKiQ,6BAC5CjK,EAAI,IAAUhG,KAAKkQ,IACnBlK,EAAI,KAAWhG,KAAKmQ,KACpBnK,EAAI,MAAYhG,KAAKoQ,MACrBpK,EAAI,UAAgBhG,KAAKqQ,UACzBrK,EAAI,kBAAwBhG,KAAKsQ,kBACjCtK,EAAI,YAAkBhG,KAAKuQ,YAC3BvK,EAAI,WAAiBhG,KAAKwQ,WAC1BxK,EAAI,cAAoBhG,KAAKyQ,cAC7BzK,EAAI,cAAoBhG,KAAK0Q,cACzBnL,MAAMC,QAAQxF,KAAK2Q,aAAc,CACjC3K,EAAI,YAAkB,GADW,oBAEhBhG,KAAK2Q,aAFW,IAEjC,gCAASlL,EAAT,QACIO,EAAI,YAAgBN,KAAKD,IAHI,+BA2BrC,OAtBAO,EAAI,wBAA8BhG,KAAK4Q,wBACvC5K,EAAI,4BAAkChG,KAAK6Q,4BAC3C7K,EAAI,kBAAwBhG,KAAK8Q,kBACjC9K,EAAI,cAAoBhG,KAAK+Q,cAC7B/K,EAAI,mBAAyBhG,KAAKgR,mBAClChL,EAAI,cAAoBhG,KAAKiR,cAC7BjL,EAAI,WAAiBhG,KAAK+M,WAC1B/G,EAAI,mBAAyBhG,KAAKkR,mBAClClL,EAAI,WAAiBhG,KAAKmR,WAC1BnL,EAAI,KAAWhG,KAAKoR,KACpBpL,EAAI,SAAehG,KAAKqR,SACxBrL,EAAI,QAAchG,KAAKsR,QACvBtL,EAAI,YAAkBhG,KAAKuR,YAC3BvL,EAAI,kBAAwBhG,KAAKwR,kBACjCxL,EAAI,sBAA4BhG,KAAK0M,sBAAwB1M,KAAK0M,sBAAsBlE,mBAAqBpI,EAC7G4F,EAAI,sBAA4BhG,KAAKyR,sBACrCzL,EAAI,+BAAqChG,KAAK0R,+BAAiC1R,KAAK0R,+BAA+BlJ,mBAAqBpI,EACxI4F,EAAI,qBAA2BhG,KAAK2R,qBAAuB3R,KAAK2R,qBAAqBnJ,mBAAqBpI,EAC1G4F,EAAI,oBAA0BhG,KAAK4R,oBACnC5L,EAAI,wBAA8BhG,KAAK6R,wBAA0B7R,KAAK6R,wBAAwBrJ,mBAAqBpI,EACnH4F,EAAI,oBAA0BhG,KAAK6M,oBAAsB7M,KAAK6M,oBAAoBrE,mBAAqBpI,EACvG4F,EAAI,YAAkBhG,KAAK8M,YACpB9G,KAhMf,8BA8HkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIqI,EAEjB,OADArI,EAAOC,KAAKR,GACLO,MAlIf,KA4PamI,GAAb,WAII,WAAY1I,GACR,GADyC,yBAH7C8L,gBAG4C,OAF5CC,SAE4C,EACpC/L,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IARxD,iDAaSE,GACGA,IACArG,KAAK8R,WAAazL,EAAK,WACvBrG,KAAK+R,IAAM1L,EAAK,OAhB5B,6BA2BWL,GAIH,OAHAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,WAAiBhG,KAAK8R,WAC1B9L,EAAI,IAAUhG,KAAK+R,IACZ/L,KA/Bf,8BAoBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAImI,EAEjB,OADAnI,EAAOC,KAAKR,GACLO,MAxBf,KAwCapB,GAAb,WAGI,WAAYa,GACR,GAD8B,yBAFlCgM,YAEiC,EACzBhM,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAPxD,iDAYSE,GACGA,IACArG,KAAKgS,OAAS3L,EAAK,UAd/B,6BAyBWL,GAGH,OAFAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,OAAahG,KAAKgS,OACfhM,KA5Bf,8BAkBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIpB,EAEjB,OADAoB,EAAOC,KAAKR,GACLO,MAtBf,KAoCaV,GAAb,WAYI,WAAYG,GACR,GADwC,yBAX5CtB,kBAW2C,OAV3CqD,WAU2C,OAT3CN,aAS2C,OAR3C4D,+BAQ2C,OAP3C4G,gBAO2C,OAN3CpK,oBAM2C,OAL3CqK,wBAK2C,OAJ3CC,SAI2C,OAH3CC,SAG2C,OAF3CpK,wBAE2C,EACnChC,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAhBxD,iDAqBSE,GACGA,IACArG,KAAK0E,aAAe2B,EAAK,aACzBrG,KAAK+H,MAAQ1B,EAAK,MAClBrG,KAAKyH,QAAUpB,EAAK,QAAc,IAAI+B,KAAK/B,EAAK,QAAYgC,iBAAmBjI,EAC/EJ,KAAKqL,0BAA4BhF,EAAK,0BACtCrG,KAAKiS,WAAa5L,EAAK,WACvBrG,KAAK6H,eAAiBxB,EAAK,eAC3BrG,KAAKkS,mBAAqB7L,EAAK,mBAC/BrG,KAAKmS,IAAM9L,EAAK,IAChBrG,KAAKoS,IAAM/L,EAAK,IAChBrG,KAAKgI,mBAAqB3B,EAAK,sBAhC3C,6BA2CWL,GAYH,OAXAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,aAAmBhG,KAAK0E,aAC5BsB,EAAI,MAAYhG,KAAK+H,MACrB/B,EAAI,QAAchG,KAAKyH,QAAUzH,KAAKyH,QAAQe,mBAAqBpI,EACnE4F,EAAI,0BAAgChG,KAAKqL,0BACzCrF,EAAI,WAAiBhG,KAAKiS,WAC1BjM,EAAI,eAAqBhG,KAAK6H,eAC9B7B,EAAI,mBAAyBhG,KAAKkS,mBAClClM,EAAI,IAAUhG,KAAKmS,IACnBnM,EAAI,IAAUhG,KAAKoS,IACnBpM,EAAI,mBAAyBhG,KAAKgI,mBAC3BhC,KAvDf,8BAoCkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIV,EAEjB,OADAU,EAAOC,KAAKR,GACLO,MAxCf,KAwEa8L,GAAb,WAWI,WAAYrM,GACR,GADuC,yBAV3CsM,mBAU0C,OAT1CL,gBAS0C,OAR1CzP,UAQ0C,OAP1CqF,oBAO0C,OAN1C0K,mBAM0C,OAL1CL,wBAK0C,OAJ1CM,QAI0C,OAH1CC,QAG0C,OAF1ChQ,QAE0C,EAClCuD,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IAfxD,iDAoBSE,GACD,GAAIA,EAAO,CACP,GAAId,MAAMC,QAAQa,EAAK,eAAoB,CACvCrG,KAAKsS,cAAgB,GADkB,oBAEtBjM,EAAK,eAFiB,IAEvC,gCAASZ,EAAT,QACIzF,KAAKsS,cAAe5M,KAAKD,IAHU,+BAK3CzF,KAAKiS,WAAa5L,EAAK,WACvBrG,KAAKwC,KAAO6D,EAAK,KAAW,IAAI+B,KAAK/B,EAAK,KAASgC,iBAAmBjI,EACtEJ,KAAK6H,eAAiBxB,EAAK,eAC3BrG,KAAKuS,cAAgBlM,EAAK,cAC1BrG,KAAKkS,mBAAqB7L,EAAK,mBAC/BrG,KAAKwS,GAAKnM,EAAK,GAASqM,GAAO/Q,OAAO0E,EAAK,SAAejG,EAC1DJ,KAAKyS,GAAKpM,EAAK,GAASqM,GAAO/Q,OAAO0E,EAAK,SAAejG,EAC1DJ,KAAKyC,GAAK4D,EAAK,GAAS,IAAI+B,KAAK/B,EAAK,GAAOgC,iBAAmBjI,KAlC5E,6BA6CW4F,GAEH,GADAA,EAAuB,kBAATA,EAAoBA,EAAO,GACrCT,MAAMC,QAAQxF,KAAKsS,eAAgB,CACnCtM,EAAI,cAAoB,GADW,oBAElBhG,KAAKsS,eAFa,IAEnC,gCAAS7M,EAAT,QACIO,EAAI,cAAkBN,KAAKD,IAHI,+BAavC,OARAO,EAAI,WAAiBhG,KAAKiS,WAC1BjM,EAAI,KAAWhG,KAAKwC,KAAOxC,KAAKwC,KAAKgG,mBAAqBpI,EAC1D4F,EAAI,eAAqBhG,KAAK6H,eAC9B7B,EAAI,cAAoBhG,KAAKuS,cAC7BvM,EAAI,mBAAyBhG,KAAKkS,mBAClClM,EAAI,GAAShG,KAAKwS,GAAKxS,KAAKwS,GAAG1P,cAAgB1C,EAC/C4F,EAAI,GAAShG,KAAKyS,GAAKzS,KAAKyS,GAAG3P,cAAgB1C,EAC/C4F,EAAI,GAAShG,KAAKyC,GAAKzC,KAAKyC,GAAG+F,mBAAqBpI,EAC7C4F,KA5Df,8BAsCkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAI8L,EAEjB,OADA9L,EAAOC,KAAKR,GACLO,MA1Cf,KA4EamM,GAAb,WAII,WAAY1M,GACR,GADyB,yBAH7BmM,SAG4B,OAF5BC,SAE4B,EACpBpM,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IARxD,iDAaSE,GACGA,IACArG,KAAKmS,IAAM9L,EAAK,IAChBrG,KAAKoS,IAAM/L,EAAK,OAhB5B,6BA2BWL,GAIH,OAHAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,IAAUhG,KAAKmS,IACnBnM,EAAI,IAAUhG,KAAKoS,IACZpM,KA/Bf,8BAoBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAImM,EAEjB,OADAnM,EAAOC,KAAKR,GACLO,MAxBf,KAwCaoM,GAAb,WAII,WAAY3M,GACR,GAD+B,yBAHnC/C,YAGkC,OAFlC2P,YAEkC,EAC1B5M,EACA,IAAK,IAAIG,KAAYH,EACbA,EAAKI,eAAeD,KACdnG,KAAMmG,GAAkBH,EAAMG,IARxD,iDAaSE,GACGA,IACArG,KAAKiD,OAASoD,EAAK,OACnBrG,KAAK4S,OAASvM,EAAK,UAhB/B,6BA2BWL,GAIH,OAHAA,EAAuB,kBAATA,EAAoBA,EAAO,IACrC,OAAahG,KAAKiD,OACtB+C,EAAI,OAAahG,KAAK4S,OACf5M,KA/Bf,8BAoBkBA,GACVA,EAAuB,kBAATA,EAAoBA,EAAO,GACzC,IAAIO,EAAS,IAAIoM,EAEjB,OADApM,EAAOC,KAAKR,GACLO,MAxBf,KA+JasM,GAAb,kDAOI,WAAYC,EAAiBvT,EAAgBF,EAAkBJ,EAAkCsH,GAAc,IAAD,8BAC1G,gBAPJuM,aAM8G,IAL9GvT,YAK8G,IAJ9GF,cAI8G,IAH9GJ,aAG8G,IAF9GsH,YAE8G,IAUpGwM,gBAAiB,EAPvB,EAAKD,QAAUA,EACf,EAAKvT,OAASA,EACd,EAAKF,SAAWA,EAChB,EAAKJ,QAAUA,EACf,EAAKsH,OAASA,EAP4F,EAPlH,gEAmB0ByM,GAClB,OAA8B,IAAvBA,EAAID,mBApBnB,eAAkC9Q,QAwBlC,SAASF,GAAe+Q,EAAiBvT,EAAgBF,EAAkBJ,EAAkCsH,GACzG,MAAe,OAAXA,QAA8BnG,IAAXmG,EACbA,EAEA,IAAIsM,GAAaC,EAASvT,EAAQF,EAAUJ,EAAS,MEr9G5D,IC1CKgU,GAOAC,GAWAC,GDwBCC,GAA+B,CAC1ClM,MAAO,GACPmM,SAAS,EACTC,SAAU,EACV/L,eAAgB,EAChBJ,aAAc,EACdC,QAAS,EACTC,OAAQ,EACRkM,eAAgB,iBAAM,IACtBC,MAAO,kBAAMC,UACbC,QAAS,kBAAMD,UACfE,aAAc,kBAAMF,UACpBG,iBAAkB,kBAAMH,UACxBI,eAAgB,kBAAMJ,UACtBK,eAAgB,kBAAML,UACtBM,SAAU,SAACC,GAAD,OAAmCP,UAC7CQ,MAAO,kBAAM,IAAI7L,MACjB8L,QAAS,kBAAM,IAAI9L,MACnB+L,aAAc,kBAAM,GACpBC,YAAa,kBAAM,GACnBC,iBAAkB,kBAAMxL,EAAYyL,KACpCC,kBAAmB,kBAAMxL,EAAayL,SACtCC,eAAgB,kBAAM3L,EAAU4L,YAChCC,OAAQ,kBAAMlB,UACdmB,WAAY,kBAAMnB,UAClBoB,kBAAmB,kBAAMpB,UACzBqB,aAAc,kBAAMrB,UACpBsB,aAAc,kBAAMtB,UACpBuB,mBAAoB,kBAAMvB,WAGfwB,GAAeC,wBAA4B9B,IA8VzC+B,GA5ViB,SAACC,GAAW,IAAD,EACXC,oBAAkB,GADP,mBAClChC,EADkC,KACzBuB,EADyB,OAEfS,mBAAoB,IAFL,mBAElCnO,EAFkC,KAE3BoO,EAF2B,OAITD,mBAAiB,GAJR,mBAIlC/B,EAJkC,KAIxBiC,EAJwB,OAKGF,mBAAiB,GALpB,mBAKlC9N,EALkC,KAKlBiO,EALkB,OAMDH,mBAAiB,GANhB,mBAMlClO,EANkC,KAMpBsO,EANoB,OAOXJ,mBAAiB,GAPN,mBAOlCjO,EAPkC,KAOzBsO,EAPyB,OAQbL,mBAAiB,GARJ,mBAQlChO,EARkC,KAQ1BsO,EAR0B,OASTN,oBAAkB,GATT,mBASlCO,EATkC,KASxBC,EATwB,KAWnCC,EAAYC,iBAChB,IAAI3N,MAAK,IAAIA,MAAO4N,aAAY,IAAI5N,MAAO6N,cAAgB,KAEvDC,EAAUH,iBAAa,IAAI3N,MAC3B9F,EAAYyT,iBAAe,GAC3BxT,EAAWwT,iBAAe,IAC1BI,EAAgBJ,iBAAoBlN,EAAYyL,KAChD8B,EAAcL,iBAAkBjN,EAAU4L,YAC1C2B,EAAiBN,iBAAqBhN,EAAayL,SACnD3R,EAAckT,iBAAe,IAG7BO,EAAqB,SAACC,GAC1BV,GAAY,IAGR/B,EAAiB,SAAC0C,GAA4C,IAApBC,IAAmB,yDACjE5T,EAAY6T,QAAUF,EACtB7C,GAAa,GAAG,GAEZ8C,GACFH,KAIE9C,EAAQ,SAAC/Q,GAA8B,IAApBgU,IAAmB,yDAC1CP,EAAQQ,QAAUjU,EAClBkR,GAAa,GAAG,GAEZ8C,GACFH,KAIE5C,GAAU,SAAClR,GAAgC,IAApBiU,IAAmB,yDAC9CX,EAAUY,QAAUlU,EACpBmR,GAAa,GAAG,GAEZ8C,GACFH,KAIE3C,GAAe,SAACgD,GAA0C,IAApBF,IAAmB,yDAC7DnU,EAAUoU,QAAUC,EAEhBF,GACFH,KAIEM,GAAc,SAACC,GAAyC,IAApBJ,IAAmB,yDAC3DlU,EAASmU,QAAUG,EAEfJ,GACFH,KAIE1C,GAAmB,SAACkD,GAA4C,IAApBL,IAAmB,yDACnEN,EAAcO,QAAUI,EACxBnD,GAAa,GAAG,GAEZ8C,GACFH,KAIEzC,GAAiB,SAACkD,GAAwC,IAApBN,IAAmB,yDAC7DL,EAAYM,QAAUK,EAElBN,GACFH,KAIEzB,GAAoB,SAACmC,GAA8C,IAApBP,IAAmB,yDACtEJ,EAAeK,QAAUM,EAErBP,GACFH,KAoCEW,GAAiBlB,sBAA2B3V,GAE5C8W,GAAWnB,sBAAyC3V,GA0BpD0U,GAAe,WACnBoC,GAASR,QAAU,CACjBpU,UAAWA,EAAUoU,QACrBnU,SAAUA,EAASmU,QACnBhU,OAAQyT,EAAcO,QACtB/T,KAAMyT,EAAYM,QAClB9T,QAASyT,EAAeK,QACxB7T,YAAaA,EAAY6T,QACzBlU,KAAMsT,EAAUY,QAChBjU,GAAIyT,EAAQQ,SAEdO,GAAeP,aAAUtW,GAiBrB2T,GAAQ,uCAAG,WAAOC,GAAP,iBAAAmD,EAAA,yDACfvC,GAAW,GACXiB,GAAY,GACZjW,QAAQC,IAAI,YAENuX,EAAS,IAAIhV,OAEQhC,IAAzB4T,QAC2B5T,IAA3B6W,GAAeP,QARF,6BAUgBtW,IAAzB4T,IACFiD,GAAeP,QAAU1C,GAXd,SAcIoD,EAAOC,oBACtB,EACA/U,EAAUoU,QACVnU,EAASmU,QACTZ,EAAUY,QACVR,EAAQQ,QACRP,EAAcO,QACdN,EAAYM,QACZL,EAAeK,QACf7T,EAAY6T,QACZO,GAAeP,SAxBJ,OAcbrX,EAda,gDA2BI+X,EAAOrD,UACtB,EACAzR,EAAUoU,QACVnU,EAASmU,QACTZ,EAAUY,QACVR,EAAQQ,QACRP,EAAcO,QACdN,EAAYM,QACZL,EAAeK,QACf7T,EAAY6T,SApCD,QA2BbrX,EA3Ba,eAwCXA,SAC6Be,IAA3Bf,EAASiI,eACXiO,EAAYlW,EAASiI,oBAGOlH,IAA1Bf,EAAS8H,cACXsO,EAAgBpW,EAAS8H,mBAGF/G,IAArBf,EAAS+H,SACXsO,EAAWrW,EAAS+H,cAGEhH,IAApBf,EAASgI,QACXsO,EAAUtW,EAASgI,aAGWjH,IAA5Bf,EAASkI,gBACXiO,EAAkBnW,EAASkI,gBAG7B+N,EAASjW,EAAS6H,QAGpB0N,GAAW,GAhEI,4CAAH,sDA6Hd,OAXA0C,qBAAU,WACRxC,OACC,IAEHwC,qBAAU,WACR1X,QAAQC,IAAI,qBACR+V,GACF7B,OAED,CAAC6B,IAGF,kBAACX,GAAasC,SAAd,CACEC,MAAO,CACLrD,aAAc,kBA3MX7R,EAAUoU,SA4MbtC,YAAa,kBAxMV7R,EAASmU,SAyMZxP,QACAuN,eAAgB,kBAlMb2B,EAAYM,SAmMfnC,kBAAmB,kBA/LhB8B,EAAeK,SAgMlBrD,UACAgB,iBAAkB,kBAzMf8B,EAAcO,SA0MjBtP,UACAC,SACAiM,WACA/L,iBACAJ,eACAoM,eAAgB,kBAnOb1Q,EAAY6T,SAoOfzC,MAAO,kBAhOJiC,EAAQQ,SAiOXxC,QAAS,kBA7NN4B,EAAUY,SA8NblD,MAAO,SAAC/Q,GAAD,OAAc+Q,EAAM/Q,IAC3BiR,QAAS,SAAClR,GAAD,OAAgBkR,GAAQlR,IACjCmR,aAAc,SAAC8D,GAAD,OAAmB9D,GAAa8D,IAC9C7D,iBAAkB,SAAClR,GAAD,OAAyBkR,GAAiBlR,IAC5DmR,eAAgB,SAAClR,GAAD,OAAqBkR,GAAelR,IACpDmR,eAAgB,SAAC4D,GAAD,OAAmB5D,EAAe4D,IAClD3D,SAAU,SAACC,GAAD,OACRD,GAASC,IACXW,OAAQ,SAAC1R,EAAgB6D,GAAjB,OApFC,SAAC7D,EAAgB6D,GAC9B,IAAI6Q,EA6BJ,OA3BArC,EACEpO,EAAM0Q,KAAI,SAACC,GAsBT,OArBIA,EAAE/T,KAAOb,GACP4U,EAAEjQ,YACAiQ,EAAEjQ,UAAUkQ,MAAK,SAACC,GAAD,OAAQA,EAAGpP,SAAW7B,MACzC+Q,EAAEjQ,UAAYiQ,EAAEjQ,UAAUlF,QAAO,SAACqV,GAAD,QAAUA,EAAGpP,SAAW7B,MACzD6Q,GAAS,IAEL7Q,IAASD,EAASmR,QACpBH,EAAEjQ,UAAUlC,KAAK,CACfiD,OAAQ7B,EACR7D,OAAQ4U,EAAE/T,GACVA,IAAK,EACL2D,QAAS,IAAIW,KACbM,QAAS,IAAIN,OAIjBuP,GAAS,IAKRE,MAIH/Q,GACN,KAAKD,EAASoR,SACG,IAAXN,EACFjC,EAAWtO,EAAU,IACD,IAAXuQ,GACTjC,EAAWtO,EAAU,GAEvB,MAEF,KAAKP,EAASmR,QACG,IAAXL,GACFhC,EAAUtO,EAAS,IA2CuBsN,CAAO1R,EAAQ6D,IAC3D8N,WAAY,SAACvB,GAAD,OAAsBuB,EAAWvB,IAC7CwB,kBAAmB,SAACjS,GAAD,OACjBiS,GAAkBjS,IACpBkS,aAAc,kBAAMA,MACpBC,aAAc,kBA/MlBnV,QAAQC,IAAIqX,GAASR,mBAEQtW,IAA3B6W,GAAeP,cACMtW,IAArB8W,GAASR,UAETO,GAAeP,aAAUtW,EACzBR,QAAQC,IAAI,SAAUqX,GAASR,QAAQhU,aACdtC,IAArB8W,GAASR,UACX9C,GAAiBsD,GAASR,QAAQhU,QAAQ,GAC1CmR,GAAeqD,GAASR,QAAQ/T,MAAM,GACtCkS,GAAkBqC,GAASR,QAAQ9T,SAAS,GAC5CkR,EAAeoD,GAASR,QAAQ7T,aAAa,GAC7C6Q,GAAQwD,GAASR,QAAQlU,MAAM,GAC/BgR,EAAM0D,GAASR,QAAQjU,IAAI,GAC3BkR,GAAauD,GAASR,QAAQpU,WAAW,GACzCsU,GAAYM,GAASR,QAAQnU,UAAU,GACvC2U,GAASR,aAAUtW,EAEnB2T,SA8LAiB,mBAAoB,kBA1KxBrB,GAAa,GAAG,GAChBiD,GAAY,IAAI,GAChBhD,GAAiB/K,EAAYyL,KAAK,GAClCT,GAAe/K,EAAU4L,YAAY,GACrCG,GAAkB9L,EAAayL,SAAS,GACxCV,EAAe,IAAI,GACnBJ,GACE,IAAItL,MAAK,IAAIA,MAAO4N,aAAY,IAAI5N,MAAO6N,cAAgB,KAC3D,QAEFzC,EAAM,IAAIpL,MAAQ,MAmKfgN,EAAM8C,W,SEpaAC,GACN,UADMA,GAEJ,UAFIA,GAGC,UAHDA,GAIE,UAJFA,GAKA,UALAA,GAMD,UANCA,GAOO,UAPPA,GAQJ,UARIA,GASA,UATAA,GAUH,UAVGA,GAWJ,UAXIA,GAaC,QAGDC,GACJ,OADIA,GAEH,OAFGA,GAGC,OAHDA,GAIJ,OAJIA,GAMP,OANOA,GAOP,OAPOA,GAQP,OAGOC,GACF,IADEA,GAEJ,IAKIC,GACJ,OADIA,GAEH,OAFGA,GAGJ,OAHIA,GAIC,OAJDA,GAKH,O,mBDrCErF,K,8BAAAA,E,iCAAAA,E,gCAAAA,E,iCAAAA,Q,cAOAC,K,YAAAA,E,YAAAA,E,YAAAA,E,cAAAA,E,YAAAA,E,YAAAA,E,cAAAA,E,eAAAA,Q,cAWAC,K,0BAAAA,E,6BAAAA,E,qCAAAA,E,+BAAAA,Q,KAwDFtK,EAAYyL,IACdxL,EAAU4L,WACP3L,EAAawP,SAOX,IAAInQ,MAAK,IAAIA,MAAO4N,aAAY,IAAI5N,MAAO6N,cAAgB,IAC7D,IAAI7N,KAnDR,IEhCMoQ,GAA0B,CACrC,CAAE1R,KAAMoM,GAAwBuF,KAAMC,KAAM,GAC5C,CAAE5R,KAAMoM,GAAwByF,KAAMD,KAAM,GAC5C,CACE5R,KAAMoM,GAAwB0F,MAC9BF,KAAM,EACNvS,SAAU,gBAEZ,CAAEW,KAAMoM,GAAwB2F,KAAMH,KAAM,GAC5C,CAAE5R,KAAMoM,GAAwB4F,MAAOJ,KAAM,EAAGvS,SAAU,gBAC1D,CACEW,KAAMoM,GAAwBuF,KAC9BC,KAAM,EACNvS,SAAU,sBAEZ,CAAEW,KAAMoM,GAAwBuF,KAAMC,KAAM,GAAIvS,SAAU,SAC1D,CAAEW,KAAMoM,GAAwBuF,KAAMC,KAAM,GAAIvS,SAAU,iBAC1D,CACEW,KAAMoM,GAAwBuF,KAC9BC,KAAM,EACNvS,SAAU,gBAEZ,CACEW,KAAMoM,GAAwB6F,KAC9BL,KAAM,EACNvS,SAAU,YACV6S,MAAO,CACLC,UAAW,UAGf,CACEnS,KAAMoM,GAAwB6F,KAC9BL,KAAM,EACNvS,SAAU,UACV6S,MAAO,CACLC,UAAW,UAGf,CAAEnS,KAAMoM,GAAwBuF,KAAMC,KAAM,I,y/DCrC9C,IAAMQ,GAAmBC,YAAH,MAKhBC,GAAYC,IAAOC,IAAV,MAOTC,GAAkBF,IAAOC,IAAV,MAQfE,GAAUH,IAAOC,IAAV,KAMSJ,GAcJf,IAmGHsB,GA3CiB,SAAC,GAAgB,IAAdC,EAAa,EAAbA,OACjC,OACE,oCACGA,GACC,kBAACH,GAAD,KACE,kBAACC,GAAD,KACE,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,iCAIJE,GACA,kBAACN,GAAD,KACE,kBAACI,GAAD,KACE,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,kC,4UCtHZ,IAuBYG,GAOAC,GA9BNxG,GAAiB,CACrByG,UAAMzZ,EACN8F,eAAW9F,EACX0Z,WAAY,aACZC,aAAc,IAGVC,GAAmBX,IAAOC,IAAV,O,SAgBVK,K,4BAAAA,E,0BAAAA,E,kBAAAA,E,yBAAAA,Q,cAOAC,O,6BAAAA,I,4BAAAA,Q,KAKL,IAAMK,GAAmB/E,wBAAqB9B,IAiEtC8G,GA/DqB,SAAC,GAAkB,IAAhBhC,EAAe,EAAfA,SAAe,EAClB7C,wBAChCjV,GAFkD,mBAC7C+Z,EAD6C,KAClCC,EADkC,KAK9CC,EAAc,uCAAG,8BAAAlD,EAAA,6DACfC,EAAS,IAAInX,EADE,SAEJmX,EAAOkD,eAFH,OAEjBC,EAFiB,OAGrBH,EAAaG,GAHQ,2CAAH,qDAUpB,GAJAjD,qBAAU,WACR+C,MACC,KAEEF,EACH,OACE,kBAACH,GAAD,KACE,kBAAC,GAAD,OAKN,IAC6B,EADvBQ,EAA8B,GAC9BL,EAAUlU,cACd,UAAAkU,EAAUlU,YAAYU,aAAtB,SAA6BzF,SAAQ,SAACuZ,GACpC7a,QAAQC,IAAI4a,EAAMd,GAASe,aAAcD,GAAQd,GAASe,cAExDD,GAAQd,GAASe,cACjBD,IAASd,GAASgB,aAClBF,IAASd,GAASiB,YAEbJ,EAAY1C,MAAK,SAAC+C,GAAD,OAAOA,GAAKjB,GAAakB,gBAC7CN,EAAY9U,KAAKkU,GAAakB,aAE9BL,GAAQd,GAASoB,UACdP,EAAY1C,MAAK,SAAC+C,GAAD,OAAOA,GAAKjB,GAAaoB,eAC7CR,EAAY9U,KAAKkU,GAAaoB,iBAKtC,IAAMlB,EAAU,uCAAG,WAAO9X,GAAP,iBAAAmV,EAAA,6DACXC,EAAS,IAAInX,EADF,SAEAmX,EAAO0C,WAAW9X,GAFlB,OAEbuY,EAFa,OAGjBH,EAAaG,GACb/a,OAAOC,SAASwb,SAJC,2CAAH,sDAOhB,OACE,kBAAChB,GAAiB1C,SAAlB,CACEC,MAAO,CACLqC,KAAMM,EAAWlU,YACjBC,UAAWiU,EAAWjU,UACtB4T,aACAC,aAAcS,IAGfL,GAAajC,I,u+BC1FpB,IAAMkB,GAAYC,IAAOC,IAAV,MAKO,SAAClE,GAAD,OAClBA,EAAM8F,cAAgB/C,GAAoB,KAGtBA,IAIlBgD,GAAM9B,IAAOC,IAAV,MAQQ,SAAClE,GAAD,OAAYA,EAAMgG,KAAO,OAAS,YACzC,SAAChG,GAAD,OAAWA,EAAMsD,QAUvB,qBAAG2C,UAEHC,YADQ,SAMNC,GAAelC,IAAOC,IAAV,MAWI,SAAClE,GAAD,oBAAkBA,EAAMoG,IAAxB,QA8JPC,GAlJwB,SAAC,GAIjC,IAAD,EAHJC,EAGI,EAHJA,MACAR,EAEI,EAFJA,cACAS,EACI,EADJA,WAEQhH,EAAWiH,qBAAW3G,IAAtBN,OACAkF,EAAS+B,qBAAW3B,IAApBJ,KAEFgC,KAAe,OAAChC,QAAD,IAACA,GAAD,UAACA,EAAMlT,aAAP,aAAC,EAAamR,MAAK,SAAC+C,GAAD,OAAOA,GAAKlB,GAASgB,gBACvDmB,OAC6D1b,IAAjEsb,EAAM9T,UAAWkQ,MAAK,SAACC,GAAD,OAAQA,EAAGpP,SAAW9B,EAASmR,UACnD+D,OACgE3b,IAAlEsb,EAAM9T,UAAWkQ,MAAK,SAACC,GAAD,OAAQA,EAAGpP,SAAW9B,EAASoR,WACjD+D,EAAQN,EAAMvU,aACd8U,EAAc,SAACnV,GACf4U,EAAM5X,KACR6Q,EAAO+G,EAAM5X,GAAIgD,GACjBoV,EAAepV,KAIboV,EAAc,uCAAG,WAAOpV,GAAP,eAAAqQ,EAAA,6DACfC,EAAS,IAAIhV,EADE,SAEfgV,EAAO8E,eACX,IAAI/N,GAAsB,CACxBC,SAAUtH,EACV7D,OAAQyY,EAAM5X,MALG,2CAAH,sDA0FhBqY,EAAa3D,GAajB,OAZIqD,IACFM,EAAaA,EAAWvE,KAAI,SAACiD,GAO3B,OANIA,EAAE/T,OAASoM,GAAwB2F,OACrCgC,EAAEnC,KAAO,KAEPmC,EAAE/T,OAASoM,GAAwB0F,QACrCiC,EAAEnC,KAAO,KAEJmC,MAKT,kBAAC,GAAD,CAAWK,cAAeA,GACvBiB,EAAWvE,KAAI,SAACwE,EAAI3E,GAAL,OACd,kBAAC0D,GAAD,CACEE,SAAUQ,GAAeO,EAAGtV,OAASoM,GAAwB0F,MAC7DI,MAAOoD,EAAGpD,MACVqD,IAAK5E,EACL2D,KAAMU,EACNpD,KAAM0D,EAAG1D,KACT4D,QACEF,EAAGtV,OAASoM,GAAwByF,KAChC,kBAAMgD,UACNvb,GAzGc,SAC1Bsb,EACAU,GAEA,OAAQA,EAAGtV,MACT,KAAKoM,GAAwBuF,KAC3B,OAAO2D,EAAGjW,SACNuV,EAAMU,EAAGjW,UACPuV,EAAMU,EAAGjW,UACT,IACF,GAEN,KAAK+M,GAAwByF,KAC3B,OAAOoD,EACL,kBAAC,KAAD,CACE5O,MAAOgL,GACPmE,QAAS,kBAAML,EAAYpV,EAASoR,YAGtC,kBAAC,KAAD,CACE9K,MAAOgL,GACPmE,QAAS,kBAAML,EAAYpV,EAASoR,YAG1C,KAAK/E,GAAwB0F,MAC3B,IAAI2D,EAAYb,EAAMvU,aAEtB,GAAI0U,GAA6C,MAA9BH,EAAMvT,qBAA8B,CACrD,IAAIqU,EAAqBd,EAAMvT,qBAC/B,IAAKsU,MAAMF,KAAUE,MAAMD,GACzB,MAAM,GAAN,OAAUE,WAAWH,GAAMI,QAAQ,GAAnC,aAA0CD,WACxCF,GACAG,QAAQ,GAFV,KAKJ,IAAKF,MAAMF,GACT,OAAOG,WAAWH,GAAMI,QAAQ,GAElC,MACF,KAAKzJ,GAAwB0J,MACvBL,EAAYH,EAAGjW,SACfuV,EAAMU,EAAGjW,UACPuV,EAAMU,EAAGjW,UACT,IACF,GAEJ,IAAKsW,MAAMF,GACT,OAAOG,WAAWH,GAAMI,QAAQ,GAElC,MACF,KAAKzJ,GAAwB2F,KAC3B,IAAIgE,EAAS,GAYb,OAXIb,IACEA,ELpIkB,KKqIpBa,EAAOnX,KAAK,kBAAC,KAAD,CAAYyH,MAAOgL,GAAYkE,IAAK,KAE9CL,ELtIkB,IKuIpBa,EAAOnX,KAAK,kBAAC,KAAD,CAAYyH,MAAOgL,GAAYkE,IAAK,KAE9CL,ELxImB,KKyIrBa,EAAOnX,KAAK,kBAAC,KAAD,CAAYyH,MAAOgL,GAAYkE,IAAK,MAG7CQ,EAET,KAAK3J,GAAwB4F,MAC3B,IAAM0C,EACJE,EAAMzT,UAAYyT,EAAMzT,SAAS6U,OAAS,EAA1C,0BACuBpB,EAAMzT,SAAS,IAClC,GACN,OAAO,kBAACsT,GAAD,CAAcC,IAAKA,IAG5B,KAAKtI,GAAwB6F,KAC3B,OAAOgE,KAAMrB,EAAMU,EAAGjW,WAAoC6W,OACxD,wBAiCCC,CAAoBvB,EAAOU,S,qiBC5N/B,IAAMhD,GAAYC,IAAOC,IAAV,MAMT4D,GAAe7D,IAAOC,IAAV,MAOZ6D,GAAU9D,IAAOC,IAAV,KACSnB,IAIhBiF,GAAS/D,IAAOC,IAAV,KAEPhB,I,0yBCXZ,IAAM+E,GAAMhE,IAAOC,IAAV,MAMHgE,GAASjE,IAAOC,IAAV,MAONiE,GAAQlE,IAAOmE,KAAV,MAMD,SAACpI,GAAD,OAAWA,EAAMsD,QAIX,SAACtD,GAAD,OAAYA,EAAM6D,UAAY7D,EAAM6D,UAAY,UACpD,SAAC7D,GAAD,OAAYA,EAAMqI,UAAY,UAAY,MAGhDC,GAASrE,IAAOC,IAAV,KACiBnB,IAGvBwF,GAAUtE,IAAOC,IAAV,MA2LEsE,GAnLqB,WAAO,IAAD,EAWpChC,qBAAW3G,IATb5B,EAFsC,EAEtCA,QACAuB,EAHsC,EAGtCA,WACA1N,EAJsC,EAItCA,MACAuN,EALsC,EAKtCA,eACAZ,EANsC,EAMtCA,eACAU,EAPsC,EAOtCA,kBACAM,EARsC,EAQtCA,kBACAC,EATsC,EAStCA,aAGI+I,GAZkC,EAUtC7I,mBAEc8I,gBASZC,EAAU,EAEd,OACE,kBAACT,GAAD,KACE,kBAACK,GAAD,CAASK,QAAS3K,GAChB,kBAAC+J,GAAD,MACA,kBAACA,GAAD,MACA,kBAAC,GAAD,OAEF,kBAACC,GAAD,KACE,kBAACE,GAAD,CAAO7E,KAAM,IACb,kBAAC6E,GAAD,CAAO7E,KAAM,GACX,kBAAC,KAAD,CAAYvL,MAAM,cAEpB,kBAACoQ,GAAD,CACE7E,KAAM,EACN+E,WAAW,EACXnB,QAAS,WACH/H,MAAwBxL,EAAakV,cACvCpJ,EAAkB9L,EAAakV,cAE7BxJ,MAAqB3L,EAAU4L,WACjCb,EAAe/K,EAAUoV,WAEzBrK,EAAe/K,EAAU4L,YAE3BE,GAAW,KAZf,gBAgBGL,MAAwBxL,EAAakV,aACpCxJ,MAAqB3L,EAAU4L,WAC7B,kBAAC,KAAD,CACEsE,MAAO,CACLmF,cAAe,SACfC,WAAY,MACZC,aAAc,MACdC,OAAQ,aAIZ,kBAAC,KAAD,CACEtF,MAAO,CACLmF,cAAe,SACfC,WAAY,MACZC,aAAc,MACdC,OAAQ,aAIZ,MAEN,kBAACf,GAAD,CAAO7E,KAAM,GAAb,UACA,kBAAC6E,GAAD,CAAO7E,KAAM,GAAb,UACA,kBAAC6E,GAAD,CAAO7E,KAAM,IAAb,UACA,kBAAC6E,GAAD,CAAO7E,KAAM,IAAb,UACA,kBAAC6E,GAAD,CAAO7E,KAAM,GAAb,YACA,kBAAC6E,GAAD,CACE7E,KAAM,EACN+E,WAAW,EACXxE,UAAW,QACXqD,QAAS,WACH/H,MAAwBxL,EAAayL,SACvCK,EAAkB9L,EAAayL,SAE7BC,MAAqB3L,EAAU4L,WACjCb,EAAe/K,EAAUoV,WAEzBrK,EAAe/K,EAAU4L,YAE3BE,GAAW,KAbf,aAiBGL,MAAwBxL,EAAayL,QACpCC,MAAqB3L,EAAU4L,WAC7B,kBAAC,KAAD,CACEsE,MAAO,CACLmF,cAAe,SACfC,WAAY,MACZC,aAAc,MACdC,OAAQ,aAIZ,kBAAC,KAAD,CACEtF,MAAO,CACLmF,cAAe,SACfC,WAAY,MACZC,aAAc,MACdC,OAAQ,aAIZ,MAEN,kBAACf,GAAD,CACE7E,KAAM,EACN+E,WAAW,EACXxE,UAAW,QACXqD,QAAS,WACH/H,MAAwBxL,EAAawP,UACvC1D,EAAkB9L,EAAawP,UAE7B9D,MAAqB3L,EAAU4L,WACjCb,EAAe/K,EAAUoV,WAEzBrK,EAAe/K,EAAU4L,YAE3BE,GAAW,KAbf,YAiBGL,MAAwBxL,EAAawP,SACpC9D,MAAqB3L,EAAU4L,WAC7B,kBAAC,KAAD,CACEsE,MAAO,CACLmF,cAAe,SACfC,WAAY,MACZC,aAAc,MACdC,OAAQ,aAIZ,kBAAC,KAAD,CACEtF,MAAO,CACLmF,cAAe,SACfC,WAAY,MACZC,aAAc,MACdC,OAAQ,aAIZ,MAEN,kBAACf,GAAD,CAAO7E,KAAM,KAEf,kBAACgF,GAAD,MACCxW,EAAM0Q,KAAI,SAAC8D,EAAOjE,GAAW,IAAD,EACrB8G,GAAY,UAAA7C,EAAMhU,iBAAN,eAAiB8W,aAAcT,EAGjD,OAFAA,EAAUrC,EAAMhU,UAAW8W,UAGzB,kBAAClB,GAAD,CAAQjB,IAAK5E,GACV8G,GAAuB,IAAV9G,GAAe,kBAACiG,GAAD,MAC7B,kBAAC,GAAD,CACEhC,MAAOA,EACPR,cAAezD,EAAQ,IAAM,EAC7BkE,WAAY,kBA3JC7X,EA2JqB4X,EAAM5X,GA1JlDlE,QAAQC,IAAI,mBACZiV,SAEA+I,EAAQnY,KAAR,gBAAsB5B,IAJA,IAACA,SAgKrB,kBAAC4Z,GAAD,Q,8rBC3NN,IAAMe,GAASpF,IAAOC,IAAV,KAIDnB,IAGLuG,GAAWrF,IAAOC,IAAV,KAGHnB,IAGLwG,GAAYtF,IAAOC,IAAV,KAKJnB,IAGLyG,GAAYvF,IAAOC,IAAV,MAKT+D,GAAMhE,IAAOC,IAAV,MAKHuF,GAAc,CAAC,OAAQ,gBAAiB,YAAa,YAAU,OAyCtDC,GAvCuB,WAAO,IAAD,EAQtClD,qBAAW3G,IANbZ,EAFwC,EAExCA,iBAKAT,GAPwC,EAGxCN,SAHwC,EAIxCnM,aAJwC,EAKxCC,QALwC,EAMxCC,OANwC,EAOxCuM,kBAEImL,EAAaC,OAAOC,OAAOpW,GAAanG,QAC5C,SAACmY,GAAD,MAAoB,kBAANA,GAAwB,IAANA,KAE5BqE,EAAMH,EAAWjC,OAAS,EAChC,OACE,kBAAC8B,GAAD,KACE,kBAAC,GAAD,KACGG,EAAWnH,KAAI,SAAClV,EAAQ+U,GACvB,OACE,kBAAC,GAAD,CAAK4E,IAAK5E,GACPpD,MAAuB3R,EACtB,kBAACgc,GAAD,eAAcG,GAAYnc,KAE1B,kBAAC+b,GAAD,CACEnC,QAAS,WACP1I,EAAiBlR,KAFrB,UAKMmc,GAAYnc,KAGnB+U,EAAQyH,GAAO,kBAACP,GAAD,mB,6wBCzD9B,IAAMQ,GAAY9F,IAAOC,IAAV,KAMOnB,IAGhBiH,GAAmB/F,IAAOC,IAAV,MAKhB+F,GAAchG,IAAO3B,MAAV,KAEFU,IAQTkH,GAAkBjG,IAAOC,IAAV,KAGCnB,IAOhBoH,GAAc,SAClBnK,EACAoK,GAFkB,OAIlB,yCACExG,MAAO,CACLyG,OAAQ,EACRC,gBAAiB,cACjBC,QAAS,OACTC,MAAO,QACPC,OAAQ,OACRC,SAAS,GAAD,OAAK1H,IACb2H,OAAQ,EACRzB,OAAQ,YAENlJ,KAmFO4K,GA/EmB,WAAO,IAAD,EASlCpE,qBAAW3G,IAPb5B,EAFoC,EAEpCA,QACAa,EAHoC,EAGpCA,QACAD,EAJoC,EAIpCA,MACAP,EALoC,EAKpCA,QACAF,EANoC,EAMpCA,MACAD,EAPoC,EAOpCA,eACAO,EARoC,EAQpCA,eAGImM,EAAqBlK,sBAAmC3V,GAqB9D,OARAkX,qBAAU,WACR,OAAO,gBAC8BlX,IAA/B6f,EAAmBvJ,SACrBwJ,aAAaD,EAAmBvJ,YAGnC,IAGD,kBAAC0I,GAAD,KACE,kBAACD,GAAD,KACE,kBAACE,GAAD,CACEc,WAAW,QACXC,YAAY,SACZC,SAAU,SAACC,GAAD,OAzBS9J,EAyBgB8J,EAAEC,cAAc/I,MAxBrDyI,EAAmBvJ,SACrBwJ,aAAaD,EAAmBvJ,cAE9BnD,MAAqBiD,IACvByJ,EAAmBvJ,QAAU8J,YAAW,WACtC1M,EAAe0C,KACd,OAPmB,IAACA,KA2BrB,kBAAC,KAAD,CACEwC,MAAO,CACLmF,cAAe,MACf2B,SAAU,OACVW,YAAa,MACbtT,MAAOgL,OAIb,kBAACmH,GAAD,KACE,kBAAC,KAAD,CACEoB,QAAS,IAAItY,KAAKA,KAAKuY,OACvBC,WAAUvN,EACVwN,SAAU3M,IACVmM,SAAU,SAACS,GAAD,OAAgBpN,EAAQoN,IAClCC,eAAa,EACbC,mBAAiB,EACjBC,kBAAgB,EAChBC,aAAa,SACbC,YAAaC,IAAMC,cAAcD,IAAME,WAAW/B,QAGtD,kBAACD,GAAD,KACE,kBAAC,KAAD,CACEoB,QAAS,IAAItY,KAAKA,KAAKuY,OACvBC,WAAUvN,EACVwN,SAAU5M,IACVoM,SAAU,SAACS,GAAD,OAAgBtN,EAAMsN,IAChCC,eAAa,EACbC,mBAAiB,EACjBC,kBAAgB,EAChBC,aAAa,SACbC,YAAaC,IAAMC,cAAcD,IAAME,WAAW/B,U,yPCnI5D,IAAMgC,GAAOlI,IAAOmE,KAAV,MAIJpE,GAAYC,IAAOC,IAAV,MAiDAkI,GA3CuB,WAAO,IAAD,EAMtC5F,qBAAW3G,IAJbd,EAFwC,EAExCA,aACAC,EAHwC,EAGxCA,YACA7M,EAJwC,EAIxCA,eACAoM,EALwC,EAKxCA,aAGF,OACE,kBAAC,GAAD,KACE,kBAAC4N,GAAD,KAAOpN,IAAiBC,IAAgB,EAAxC,WACED,IAAiB,GAAKC,IAAgB7M,EACtC,kBAACga,GAAD,KAAOha,GAEP,kBAACga,GAAD,MAAQpN,IAAiB,GAAKC,KAEhC,kBAACmN,GAAD,eAAgBha,GACf4M,IAAiB,EAChB,kBAAC,KAAD,CACE6E,MAAO,CAAE7L,MAAOgL,GAAcmG,OAAQ,WACtChC,QAAS,WACP3I,EAAaQ,IAAiB,MAIlC,kBAAC,KAAD,CAAe6E,MAAO,CAAE7L,MAAOgL,GAAkBmG,OAAQ,cAEzDnK,IAAiB,GAAKC,IAAgB7M,EACtC,kBAAC,KAAD,CACEyR,MAAO,CAAE7L,MAAOgL,GAAcmG,OAAQ,WACtChC,QAAS,WACP3I,EAAaQ,IAAiB,MAIlC,kBAAC,KAAD,CACE6E,MAAO,CAAE7L,MAAOgL,GAAkBmG,OAAQ,e,0uBCzCpD,IAAMjB,GAAMhE,IAAOC,IAAV,MAQHgE,GAASjE,IAAOC,IAAV,MAKNF,GAAYC,IAAOC,IAAV,MAETmI,GAAKpI,IAAOqI,GAAV,MASFC,GAAgBtI,IAAOC,IAAV,MA2BJsI,GApBiB,WAC9B,OACE,kBAAC,GAAD,KACE,kBAAC,GAAD,KACE,kBAACH,GAAD,mBACA,kBAAC,GAAD,OAEF,kBAAC,GAAD,KACE,kBAACE,GAAD,KACE,kBAAC,GAAD,MACA,kBAAC,GAAD,OAEF,kBAAC,GAAD,MACA,kBAACvE,GAAD,MACA,kBAAC,GAAD,S,ufC/CR,ICCKyE,GDDCC,GAAYzI,IAAOC,IAAV,KAGAlB,IAUT2J,GAAgB1I,IAAOmE,KAAV,KAERrF,IAwCI6J,GA/BG,SAAC5M,GAAW,IACpByE,EAAS+B,qBAAW3B,IAApBJ,KADmB,EAGoBxE,qBAAWwE,GAH/B,mBAGpBoI,EAHoB,aAIK5M,mBAASwE,EAAOA,EAAKpT,KAAO,OAJjC,6BAoB3B,OAAIwb,EAfsB,SAACC,GACzB,OACE,kBAAC,WAAD,KACE,kBAACJ,GAAD,KACE,kBAACC,GAAD,CACEzF,QAAS,kBAAO9c,OAAOC,SAASE,KAAOuiB,EAAWxiB,UAClDyiB,UAAU,aAFZ,YAgBCC,CAJY,CACjB1iB,SAAS,GAAD,OAAKb,GACbwjB,MAAO,CAAEC,OAAO,KAIX,M,2nFClDNT,K,mBAAAA,E,uBAAAA,Q,KAKL,IAAMzI,GAAYC,IAAOC,IAAV,KAIWnB,IAMpBoK,GAAgBlJ,IAAOC,IAAV,KAMQnB,IAGrBqK,GAAUnJ,IAAOC,IAAV,KAIFnB,GACIC,IAMTqK,GAAapJ,IAAOC,IAAV,KAKLnB,GACWA,IAOhBuK,GAAOrJ,IAAOsJ,IAAV,MAUJC,GAAgBvJ,IAAOC,IAAV,MAKbuJ,GAAUxJ,IAAOC,IAAV,KAMgBnB,IAGvB2K,GAAYzJ,IAAOC,IAAV,KAIAlB,GAEJD,GAOEA,IAIP4K,GAAkB1J,IAAOC,IAAV,KAINlB,GAEJD,GAaiBA,IAItB6K,GAAgB3J,IAAOC,IAAV,MAQb2J,GAAgB5J,IAAOC,IAAV,MAKN4J,GAAoB,WAAO,IAAD,EACH7N,wBAA8BjV,GAD3B,mBAC9B+iB,EAD8B,KACnBC,EADmB,OAEL/N,mBAAiB,IAFZ,mBAE9BgO,EAF8B,aAGiBzH,qBACpD3B,KADMJ,EAH6B,EAG7BA,KAAM3T,EAHuB,EAGvBA,UAAW4T,EAHY,EAGZA,WAAYC,EAHA,EAGAA,aAG/B8D,EAAUC,eAER/I,EAAiB6G,qBAAW3G,IAA5BF,aAMRuC,qBAAU,WAUR,MALgC,KAA5B9X,OAAOC,SAASC,SAClB0jB,EAAavB,GAAQyB,OACgB,cAA5B9jB,OAAOC,SAASC,UACzB0jB,EAAavB,GAAQ0B,eAEhB,eAGN,IAEHjM,qBAAU,WACR,IAAMkM,EAAa3F,EAAQ4F,QAAO,SAAChkB,EAAUikB,GAC3C,OAAQjkB,EAASC,UACf,IAAK,IACHqV,IACAqO,EAAavB,GAAQyB,OACrB,MACF,IAAK,aACHF,EAAavB,GAAQ0B,eACrB,MACF,QACEH,OAAahjB,OAKnB,OAAQyd,EAAQpe,SAASC,UACvB,IAAK,IACHqV,IACAqO,EAAavB,GAAQyB,OACrB,MAEF,IAAK,aACHF,EAAavB,GAAQ0B,eAIzB,OAAO,kBAAMC,OAEZ,CAAC3F,IAkBJ,OACE,gCACE,kBAAC,GAAD,KACE,kBAAC0E,GAAD,KACE,kBAACM,GAAD,KACE,kBAACH,GAAD,CACElH,IAAKmI,KACLrH,QAAS,WAEHvC,EAAajC,MAAK,SAAC+C,GAAD,OAAOA,IAAMjB,GAAakB,gBAEb,MAA7Btb,OAAOC,SAASC,UAClBme,EAAQnY,KAAK,MAInBke,IAAI,SAEN,kBAACZ,GAAD,KACE,kBAACR,GAAD,KAAUa,GACTxJ,GAAQA,EAAKlT,MAAOmR,MAAK,SAAC+C,GAAD,MAAa,gBAANA,MAC/B,kBAACoI,GAAD,KACE,4BAAQzL,MAAOqC,EAAKnT,UAAW2Z,SAxFrB,SAACC,GACzBxG,EAAWwG,EAAEuD,OAAOrM,SAuFN,OACGtR,QADH,IACGA,OADH,EACGA,EAAW0R,KAAI,SAACiD,GAAD,OACd,4BAAQrD,MAAOqD,EAAE/W,IAAK+W,EAAEpU,WAKhC,kBAAC,GAAD,QAGJ,kBAACgc,GAAD,KACE,yCACA,sDACA,qDAGD1I,EAAajC,MAAK,SAAC+C,GAAD,OAAOA,IAAMjB,GAAakB,gBAC7C,kBAAC8H,GAAD,KACG5D,OAAOC,OAAO4C,IAASjK,KAAI,SAACkM,EAAKrM,GAChC,OAAI0L,IAAcW,EAEd,kBAACf,GAAD,CAAiB1G,IAAK5E,GACnBqM,EAAIzb,YAKP,kBAACya,GAAD,CAAWzG,IAAK5E,EAAO6E,QAAS,kBAjE/B,SAACwH,GAEhB,IAAID,EACJ,OAFAT,EAAaU,GAELA,GACN,KAAKjC,GAAQyB,MACXO,EAAS,IACT,MAEF,KAAKhC,GAAQ0B,cACXM,EAAS,aAIbhG,EAAQnY,KAAKme,GAoDuCE,CAASD,KAC5CA,EAAIzb,mB,kGCjQzB,I,GAAM2b,GAAU3K,IAAOC,IAAV,MAaE2K,GATU,SAAC,GAAkB,IAAhB/L,EAAe,EAAfA,SAC1B,OACE,kBAAC8L,GAAD,KACE,kBAAC,GAAD,MACA,6BAAM9L,K,yYCNZ,IAOMgM,GACJ,i4DAEIC,GACJ,yuCAEIC,GACJ,66CAmCWC,GACX,ygIACWC,GACX,qihBACWC,GACX,ipjEACWC,GACX,qspBACWC,GACX,qyYAEK,SAASC,GACd5c,EACA6c,GAEA,IAAMC,EA8IR,SAAoC9c,GAClC,OAAQA,GACN,KAAKc,EAAaic,KAChB,MAAO,CACL1X,MAAO,UACP2X,KAAMR,IAEV,KAAK1b,EAAamc,aAChB,MAAO,CACL5X,MAAO,UACP2X,KAAMP,IAEV,KAAK3b,EAAaoc,sBAChB,MAAO,CACL7X,MAAO,UACP2X,KAAML,IAEV,KAAK7b,EAAaqc,MAClB,KAAKrc,EAAasc,eAChB,MAAO,CACL/X,MAAO,UACP2X,KAAMN,IAEV,QACE,MAAO,CACLrX,MAAO,UACP2X,KAAMT,KAxKMc,CAA2Brd,GAC7C,GAAK8c,EAAL,CACA,IAAMQ,EAAST,GAAkB,GAE7BU,EAAW,CACb,eArEqB,GAsEAD,EACnB,aAtEoB,IAuEAA,EAHtB,yGASA,SACA,sEACER,EAAUzX,MACV,+BACF,UACA,+HACA,iDACA,oJACEyX,EAAUE,KACV,MACF,UACAQ,KAAK,MAEP,MAAO,CACLlmB,IAAK,oCAAsC8C,mBAAmBmjB,GAC9DE,WAAY,IAAIC,OAAOC,KAAKC,KA7FP,GA8FAN,EA7FC,IA8FAA,GAEtBO,OAAQ,IAAIH,OAAOC,KAAKG,MAAM,EAAG,GACjCC,OAAQ,IAAIL,OAAOC,KAAKG,MAlGH,GAmGAR,EA/FQ,IAHP,IAmGAA,EA/FQ,OAwGlC,IAAMU,GAAuB,CAC3B,CAAEC,cA7FF,0iBA8FA,CAAEA,cA5FF,kSA6FA,CAAEA,cA3FF,smBA4FA,CAAEA,cA1FF,kpBA2FA,CAAEA,cAzFF,0lBA0FA,CAAEA,cAxFF,siBAyFA,CAAEA,cAvFF,8qBAwFA,CAAEA,cAtFF,0dAuFA,CAAEA,cArFF,0lBAsFA,CAAEA,cApFF,8qBAqFA,CAAEA,cAnFF,8qBAoFA,CAAEA,cAlFF,0XAmFA,CAAEA,cAjFF,szBAkFA,CAAEA,cAhFF,80BAiFA,CAAEA,cA/EF,8pBAgFA,CAAEA,cA9EF,urBAiFIC,IAAyB,sBAC5B/c,GAAagd,iBAAmB,CAC/BF,cAAe5B,KAFY,gBAI5Blb,GAAaid,oBAAsB,CAClCH,cAAe5B,KALY,gBAO5Blb,GAAakd,iBAAmB,CAC/BJ,cAAe7B,KARY,gBAU5Bjb,GAAamd,mBAAqB,CACjCL,cAAe7B,KAXY,gBAa5Bjb,GAAaod,gBAAkB,CAC9BN,cAAe7B,KAdY,gBAgB5Bjb,GAAaqd,kBAAoB,CAChCP,cAAe3B,KAjBY,gBAmB5Bnb,GAAasd,gBAAkB,CAC9BR,cAAe3B,KApBY,gBAsB5Bnb,GAAaud,mBAAqB,CACjCT,cAAe5B,KAvBY,gBAyB5Blb,GAAawd,kBAAoB,CAChCV,cAAe5B,KA1BY,gBA4B5Blb,GAAayd,UAAY,CACxBX,cAAe5B,KA7BY,IAiClBwC,GAAa,SAAC3U,GAIzB,IAHA,IAAM4U,EAAO,sDAAkD5U,EAAlD,gBACP6U,EAAUC,SAASC,qBAAqB,UAErCC,EAAI,EAAGA,EAAIH,EAAQ/J,OAAQkK,IAClC,GAAwC,IAApCH,EAAQG,GAAGxL,IAAIyL,QAAQL,GACzB,OAAOC,EAAQG,GAInB,IAAME,EAAkBJ,SAASzF,cAAc,UAM/C,OALA6F,EAAgB1L,IAAMoL,EACtBM,EAAgBC,OAAQ,EACxBD,EAAgBE,OAAQ,EACxB5nB,OAAOsnB,SAASviB,KAAK8iB,YAAYH,GAE1BA,GA2DF,SAASI,GACd7P,EACAkN,GAEA,IAAMC,EAAYkB,GAAqBrO,GACvC,GAAKmN,EAAL,CAEA,IAAMQ,EAAST,GAAkB,GAE7BU,EAAW,CACb,eAtPqB,GAuPAD,EACnB,aAvPoB,IAwPAA,EAHtB,yGASA,SACA,yGACA,UACA,+HACA,iDACA,iJACER,EAAUmB,cACV,MACF,UACAT,KAAK,MAEP,MAAO,CACLlmB,IAAK,oCAAsC8C,mBAAmBmjB,GAC9DE,WAAY,IAAIC,OAAOC,KAAKC,KA5QP,GA6QAN,EA5QC,IA6QAA,GAEtBO,OAAQ,IAAIH,OAAOC,KAAKG,MAAM,EAAG,GACjCC,OAAQ,IAAIL,OAAOC,KAAKG,MAjRH,GAkRAR,EA9QQ,IAHP,IAkRAA,EA9QQ,OA2R3B,SAASmC,GACd3d,EACA4d,EACA7C,GAEA,IAAMC,EA5GR,SACEhb,EACA4d,GAGA,IAAM5C,EAAYoB,GAA0Bpc,GAC5C,GAAIgb,EASF,OAPGhb,IAAmBX,GAAaqd,mBAC/B1c,IAAmBX,GAAasd,iBACjCiB,IAGD5C,EAAUmB,cAAgB5B,IAErBS,EA6FS6C,CAAmB7d,EAAgB4d,GACrD,GAAK5C,EAAL,CACA,IAAMQ,EAAST,GAAkB,GAE7BU,EAAW,CACb,eA1SqB,GA2SAD,EACnB,aA3SoB,IA4SAA,EAHtB,yGASA,SACA,yGACA,UACA,+HACA,iDACA,oJACER,EAAUmB,cACV,MACF,UACAT,KAAK,MAEP,MAAO,CACLlmB,IAAK,oCAAsC8C,mBAAmBmjB,GAC9DE,WAAY,IAAIC,OAAOC,KAAKC,KAhUP,GAiUAN,EAhUC,IAiUAA,GAEtBO,OAAQ,IAAIH,OAAOC,KAAKG,MAAM,EAAG,GACjCC,OAAQ,IAAIL,OAAOC,KAAKG,MArUH,GAsUAR,EAlUQ,IAHP,IAsUAA,EAlUQ,OA+U3B,I,MAAMpC,GAAgB3J,IAAOC,IAAV,MAIboO,GAAYrO,IAAOsO,GAAV,KAEPvP,IAIFwP,GAAcvO,IAAOmE,KAAV,KACTpF,IAsBFyP,GAAmB,SAC9BjQ,EACAkQ,GAEA,IAAIC,EAAQC,KAAKC,IAAI,EAAGrQ,EAAKsQ,WAIzBC,EAAwBvQ,EAAKwQ,gBAAiBC,kBAAkBP,GAChEQ,EAAc,IAAI9C,OAAOC,KAAKG,MAJpB,EAKFmC,GAAS,GAJN,GAKHA,GAAS,GAGjBQ,EAA2B,IAAI/C,OAAOC,KAAKG,MAC7CuC,EAAsBK,EAAIF,EAAYE,EACtCL,EAAsBM,EAAIH,EAAYG,GAOxC,OAJqB7Q,EAClBwQ,gBACAM,kBAAkBH,IC5XjBI,GAAuBzT,wBALqB,CAChD0T,cAAc,EACdC,WAAY,KAODC,GAAmB,WAC9B,OAAOlN,qBAAW+M,KA4DLI,GAzDyB,SAAC3T,GAAW,IAAD,EACTC,oBAAkB,GADT,mBAC1CuT,EAD0C,KAC5BI,EAD4B,OAEb3T,mBAAiB,IAFJ,mBAE1CwT,EAF0C,KAE9BI,EAF8B,KAK3CjX,EAAS+D,iBAAe,IAwC9B,OAtCAuB,qBAAU,WACR,IAAM4R,EAAa,IAAIC,gBAEjBC,EAAuB,uCAAG,8BAAAjS,EAAA,6DACxBC,EAAS,IAAInS,EADW,SAEPmS,EAAOiS,oBAAoBH,EAAW7oB,QAF/B,QAExBhB,EAFwB,QAGjB2S,SACXpS,QAAQC,IAAIR,EAAS2S,QACrBA,EAAO0E,QAAUrX,EAAS2S,OAC1BiX,EAAc5pB,EAAS2S,SANK,2CAAH,qDAY7B,YAHuB5R,IAAnB4R,EAAO0E,SAA4C,KAAnB1E,EAAO0E,SACzC0S,IAEK,WACLF,EAAWI,QACXtX,EAAO0E,QAAU,GACjBuS,EAAc,OAEf,IACHrpB,QAAQC,IAAImS,GAEZsF,qBAAU,WACR,QAAuBlX,IAAnB4R,EAAO0E,SAA4C,KAAnB1E,EAAO0E,QAAgB,CACzD,IAAMwQ,EAAkBP,GAAW3U,EAAO0E,SAK1C,OAJAwQ,EAAgBqC,iBAAiB,QAAQ,WACvCP,GAAgB,MAGX,WACL9B,EAAgBsC,oBAAoB,QAAQ,WAC1CR,GAAgB,UAIrB,CAAChX,EAAO0E,UAGT,kBAACiS,GAAqBpR,SAAtB,CACEC,MAAO,CACLoR,eACAC,eAGDzT,EAAM8C,WChEDuR,GAAWC,EAAQ,KAAvBC,GAkBFvW,GAA+B,CACnCwW,aAASxpB,EACTiT,SAAS,EACTwW,UAAW,IAAIzhB,KAAKA,KAAKuY,MAAQ,SACjCmJ,aAAc,kBAAMrW,UACpBsW,QAAS,IAAI3hB,KAAKA,KAAKuY,OACvBqJ,WAAY,kBAAMvW,UAClB3L,aAAcc,EAAamc,aAC3BkF,gBAAiB,kBAAMxW,UACvByW,qBAAiB9pB,EACjB+pB,mBAAoB,kBAAM1W,UAC1B2W,cAAe,kBAAM3W,UACrBlB,cAAe,GACf8X,iBAAkB,kBAAM5W,WAGb6W,GAAsBpV,wBAA4B9B,IA4KhDmX,GA1KwB,SAACnV,GAAW,IAAD,EACdC,mBAChC,IAAIjN,KAAKA,KAAKuY,MAAQ,YAFwB,mBACzCkJ,EADyC,KAC9BC,EAD8B,OAIlBzU,mBAAe,IAAIjN,KAAKA,KAAKuY,QAJX,mBAIzCoJ,EAJyC,KAIhCC,EAJgC,OAKR3U,mBACtCzM,EAAa4hB,MANiC,mBAKzC1iB,EALyC,KAK3BmiB,EAL2B,OAQN5U,mBAAiB,IARX,mBAQzC9C,EARyC,KAQ1B8X,EAR0B,OASlBhV,qBATkB,mBASzCuU,EATyC,KAShCa,EATgC,OAUFpV,wBAE5CjV,GAZ8C,mBAUzC8pB,EAVyC,KAUxBC,EAVwB,OAsB5CvO,qBAAW8O,IAPb9B,EAf8C,EAe9CA,aACAhR,EAhB8C,EAgB9CA,IAEA+S,GAlB8C,EAiB9CC,UAjB8C,EAkB9CD,SAEAE,GApB8C,EAmB9CC,aAnB8C,EAoB9CD,YACAE,EArB8C,EAqB9CA,aArB8C,EAuBlB1V,oBAAkB,GAvBA,mBAuBzChC,EAvByC,KAuBhCuB,EAvBgC,KAyBxCiF,EAAS+B,qBAAW3B,IAApBJ,KAERvC,qBAAU,WAOR,OAJA0T,IAIO,eAGN,IAEH,IAQIC,EACAC,EACAC,EACAC,EAXEJ,EAAU,uCAAG,8BAAA7T,EAAA,6DACXC,EAAS,IAAIhS,EADF,SAEMgS,EAAOiU,eAFb,OAEXhsB,EAFW,OAIjBorB,EAAWprB,EAASyY,MAAK,SAAC+C,GAAD,OAAOA,EAAE/W,MAAF,OAAS+V,QAAT,IAASA,OAAT,EAASA,EAAMnT,eAC/CkO,GAAW,GALM,2CAAH,qDAaZ0W,EAAiB,GAEfC,EAAW,uCAAG,4BAAApU,EAAA,sDACZkF,EAAMoN,KACZ7pB,QAAQC,IAAIwc,GACZiP,EAAYjP,EACZmP,EAAKnP,GAJa,2CAAH,qDAMXmP,EAAI,uCAAG,WAAOnP,GAAP,yBAAAlF,EAAA,yDACXvX,QAAQC,IAAIwc,IACRzE,EAFO,oBAGHR,EAAS,IAAIhS,EACboN,EAJG,UAIEoF,EAAI6T,mBAJN,aAIE,EAAiBC,eACtBjZ,EALG,UAKEmF,EAAI6T,mBALN,aAKE,EAAiBE,eAEvBnZ,GAAOC,EAPH,gBAQP7S,QAAQC,IAAI,uBARL,wCAUgBuX,EAAOwU,qBAC5B,IAAIvZ,GAAqB,CACvBG,GAAI,IAAIE,GAAO,CAAEP,IAAKK,EAAIL,MAAOC,IAAKI,EAAIJ,QAC1CK,GAAI,IAAIC,GAAO,CAAEP,IAAKM,EAAIN,MAAOC,IAAKK,EAAIL,QAC1CE,cAAe,GACf9P,KAAMqnB,EACNpnB,GAAIsnB,EAEJxX,cAAeA,EACfN,WAAU,OAAE2X,QAAF,IAAEA,OAAF,EAAEA,EAAShjB,gBACrBsL,mBAAoBgY,EAChBA,EAAgBtjB,qBAChBxG,KAtBD,SAUDf,EAVC,SAyBSgd,GAAOiP,GAErBP,IACAF,EAAWxrB,EAAUkT,IAErB3S,QAAQC,IAAI,gBA9BP,QAmCX+U,GAAW,GAnCA,4CAAH,sDAsCV0C,qBAAU,WAgBR,OAfIsR,GAAgBhR,IAClBsT,EAAkB1F,OAAOC,KAAKoG,MAAMC,YAAYlU,EAAK,WAAW,WAC9DqT,EAAQzK,YAAW,WACK,KAAlBjO,GACFqC,GAAW,KAEZ,QAELuW,EAAe3F,OAAOC,KAAKoG,MAAMC,YAAYlU,EAAK,QAAQ,WACxDsI,aAAa+K,MAEfG,EAAe5F,OAAOC,KAAKoG,MAAMC,YAAYlU,EAAK,gBAAgB,WAChE2T,QAGG,WACD3C,IACFpD,OAAOC,KAAKoG,MAAME,eAAeb,GACjC1F,OAAOC,KAAKoG,MAAME,eAAeZ,GACjC3F,OAAOC,KAAKoG,MAAME,eAAeX,OAGpC,CAACxT,EAAKgR,EAAc+B,EAASpY,EAAec,IAE/CiE,qBAAU,WACc,KAAlB/E,EACFqC,GAAW,GAEXmW,MAED,CAACxY,EAAesX,EAAWE,EAASG,IAEvC5S,qBAAU,WACJjE,GAEFkY,MAED,CAAClY,IAEJ,IAAM+W,EAAgB,WACpB5E,OAAOC,KAAKoG,MAAME,eAAeb,GACjC1F,OAAOC,KAAKoG,MAAME,eAAeZ,GACjC3F,OAAOC,KAAKoG,MAAME,eAAeX,IAGnC,OACE,kBAACd,GAAoB/S,SAArB,CACEC,MAAO,CACLoS,UACAvW,UACAwW,YACAC,aAAc,SAAChJ,GAAD,OAAgBgJ,EAAahJ,IAC3CiJ,UACAC,WAAY,SAAClJ,GAAD,OAAgBkJ,EAAWlJ,IACvChZ,eACAmiB,gBAAiB,SAACnjB,GAAD,OAAwBmjB,EAAgBnjB,IACzDojB,kBACAC,mBAAoB,SAACP,GACnBmB,IACAZ,EAAmBP,IAErBQ,cAAe,kBAAMA,GACrBC,mBACA9X,kBAGD6C,EAAM8C,W,gjCC1Mb,IA0FK8T,GA1FChI,GAAU3K,IAAOC,IAAV,MAMPiE,GAAQlE,IAAOC,IAAV,KACIlB,IAIT6T,GAAS5S,IAAOC,IAAV,KACGlB,GAEOD,IASlB,SAAC/C,GAAD,OACAA,EAAM8W,UACN5Q,YADA,KAEsBlG,EAAMjI,UAK1Bgf,GAAa9S,IAAOC,IAAV,MACV8S,GAAa/S,IAAOC,IAAV,MAiBH+S,IAAiB,sBAC3BzjB,EAAa4hB,KAAO,SADO,gBAE3B5hB,EAAa0jB,cAAgB,YAFF,gBAG3B1jB,EAAa2jB,wBAA0B,mCAHZ,gBAI3B3jB,EAAa4jB,aAAe,mBAJD,gBAK3B5jB,EAAa6jB,0BAA4B,8BALd,gBAM3B7jB,EAAaoc,sBAAwB,2BANV,gBAO3Bpc,EAAamc,aAAe,cAPD,gBAQ3Bnc,EAAaqc,MAAQ,YARM,gBAS3Brc,EAAaic,KAAO,SATO,gBAU3Bjc,EAAa8jB,KAAO,cAVO,gBAW3B9jB,EAAa+jB,2BACZ,oDAZ0B,gBAa3B/jB,EAAagkB,WAAa,YAbC,gBAc3BhkB,EAAaikB,YAAc,WAdA,gBAe3BjkB,EAAakkB,iBAAmB,gBAfL,gBAgB3BlkB,EAAamkB,6BACZ,yCAjB0B,gBAkB3BnkB,EAAaokB,8BACZ,sCAnB0B,gBAoB3BpkB,EAAaqkB,QAAU,kBApBI,gBAqB3BrkB,EAAasc,eAAiB,wBArBH,gBAsB3Btc,EAAaskB,WAAa,eAtBC,gBAuB3BtkB,EAAaukB,eAAiB,oBAvBH,gBAwB3BvkB,EAAaskB,WAAa,eAxBC,gBAyB3BtkB,EAAawkB,kBAAoB,8BAzBN,gBA0B3BxkB,EAAaykB,yBAA2B,kCA1Bb,gBA2B3BzkB,EAAa0kB,sBAAwB,iCA3BV,gBA4B3B1kB,EAAa2kB,MAAQ,SA5BM,gBA6B3B3kB,EAAa4kB,UAAY,eA7BE,gBA8B3B5kB,EAAa6kB,yBAA2B,+BA9Bb,gBA+B3B7kB,EAAa8kB,kBAAoB,SA/BN,gBAgC3B9kB,EAAa+kB,cAAgB,aAhCF,gBAiC3B/kB,EAAaglB,MAAQ,kBAjCM,gBAkC3BhlB,EAAailB,WAAa,mBAlCC,gBAmC3BjlB,EAAaklB,aAAe,mBAnCD,gBAoC3BllB,EAAamlB,YAAc,kBApCA,gBAqC3BnlB,EAAaolB,yBAA2B,oBArCb,gBAsC3BplB,EAAaqlB,oBAAsB,eAtCR,K,SAyCzBjC,O,eAAAA,I,yBAAAA,I,iBAAAA,I,eAAAA,I,kBAAAA,Q,KAQL,IAAMkC,GAAkB,CACtBtlB,EAAa4hB,KACb5hB,EAAaic,KACbjc,EAAaoc,sBACbpc,EAAasc,eACbtc,EAAaqc,MACbrc,EAAamc,cAEToJ,IAAY,sBACfnC,GAAYnH,KAAO,CAClBxI,IAAK,EACL+R,UAAW,CAACxlB,EAAaic,MACzBpe,KAAM4lB,GAAkBzjB,EAAaic,MACrCC,KAAMR,GACNnX,MAAO,YANO,gBAQf6e,GAAYqC,UAAY,CACvBhS,IAAK,EACL+R,UAAW,CAACxlB,EAAaoc,uBACzBve,KAAM,YACNqe,KAAML,GACNtX,MAAO,YAbO,gBAef6e,GAAY/G,MAAQ,CACnB5I,IAAK,EACL+R,UAAW,CAACxlB,EAAasc,eAAgBtc,EAAaqc,OACtDxe,KAAM,WACNqe,KAAMN,GACNrX,MAAO,YApBO,gBAsBf6e,GAAYsC,KAAO,CAClBjS,IAAK,EACL+R,UAAW,CAACxlB,EAAamc,cACzBte,KAAM,aACNqe,KAAMP,GACNpX,MAAO,YA3BO,gBA6Bf6e,GAAYuB,MAAQ,CACnBlR,IAAK,EACL+R,UAAU,aACLpP,OAAOuP,KAAK3lB,GACZgP,KAAI,SAACiD,GACJ,OACIqT,GAAgBpW,MAChB,SAAC0Q,GAAD,OAAOA,IAAM5f,EAAaiS,MAGrB,KAEFjS,EAAaiS,GAAgC2T,aAErD9rB,QAAO,SAACmY,GACP,OAAa,OAANA,IAAe4B,MAAM5B,IAAY,IAANA,MAGxCpU,KAAM,YACNqe,KAAMT,GACNlX,MAAO,YAjDO,IAiHHshB,GA5DwB,WAAO,IAAD,EACFpZ,mBAAmB,IADjB,mBACpCqZ,EADoC,KACrBC,EADqB,OAEGtZ,mBAAiB,IAFpB,mBAEpCuZ,EAFoC,KAEnBC,EAFmB,OAIGjT,qBAAW0O,IAAjDL,EAJmC,EAInCA,gBAAiBI,EAJkB,EAIlBA,iBA2BzB,OAzBA/S,qBAAU,WACR,IAAI8W,EAAYpP,OAAOuP,KAAKJ,IACzBvW,KAAI,SAACiD,GAAD,OAAOiU,OAAOjU,MAClBkU,QAAuB,SAACC,EAAKC,GAC5B,IAAIC,EAAOf,GAAac,GACxB,OAAMP,EAAc5W,MAAK,SAAC+C,GAAD,OAAOA,IAAMqU,EAAK7S,OACnC,GAAN,oBAAW2S,GAAX,aAAoBE,EAAKd,YAEpBY,IACN,IACLpvB,QAAQC,IAAIuuB,GACZS,EAAmBT,EAAU9I,KAAK,QACjC,CAACoJ,IAEJpX,qBAAU,WACR1X,QAAQC,IAAI+uB,GACW,IAAnBA,GACFvE,EAAiBuE,GACjB3E,EAAgB6E,OAAOF,EAAgBO,MAAM,KAAK,OAElDlF,EAAgBrhB,EAAa4hB,MAC7BH,EAAiB,OAElB,CAACuE,IAGF,kBAAC,GAAD,KACE,kBAAC,GAAD,wBACC5P,OAAOuP,KAAKJ,IAAcvW,KAAI,SAACwX,GAC9B,IAAIF,EAAOf,GAAaW,OAAOM,IAC/B,OACE,kBAACnD,GAAD,CACE5P,IAAK6S,EAAK7S,IACVlP,MAAO+hB,EAAK/hB,MACZ+e,WAAYwC,EAAc5W,MAAK,SAAC+C,GAAD,OAAOA,IAAMqU,EAAK7S,OACjDC,QAAS,WACDoS,EAAc5W,MAAK,SAAC+C,GAAD,OAAOA,IAAMqU,EAAK7S,OACzCsS,EAAgBD,EAAchsB,QAAO,SAACmY,GAAD,OAAOA,IAAMqU,EAAK7S,QAEvDsS,EAAgB,GAAD,oBAAKD,GAAL,CAAoBQ,EAAK7S,SAI5C,kBAAC+P,GAAD,KACE,yBAAK5Q,IAAK0T,EAAKpK,QAEjB,kBAACqH,GAAD,KAAa+C,EAAKzoB,YC9LxB2M,GAA+B,CACnCwV,cAAc,EACdhR,SAAKxX,EACLuqB,QAAS,GACTC,UAAW,GACXyE,OAAQ,kBAAM5b,UACdoX,WAAY,kBAAMpX,UAClB6b,gBAAiB,kBAAM7b,UACvBqX,aAAc,kBAAMrX,UACpB8b,UAAW,kBAAM9b,UACjBsX,aAAc,kBAAMtX,WAGTiX,GAAoBxV,wBAA4B9B,IA2Q9Coc,GAzQsB,SAACpa,GAAW,IAAD,EACT0T,KAA7BF,EADsC,EACtCA,aAAcC,EADwB,EACxBA,WADwB,EAGxBxT,wBAAsCjV,GAHd,mBAGvCwX,EAHuC,KAGlCyX,EAHkC,OAIZha,mBAAkC,IAJtB,mBAIvCuV,EAJuC,KAI5B6E,EAJ4B,OAKfpa,mBAA4B,IALb,mBAKvCsV,EALuC,KAK9B+E,EAL8B,OAMNra,wBAEtCjV,GAR4C,mBAMvCuvB,EANuC,KAMzBC,EANyB,OAStBva,wBACtBjV,GAV4C,mBASjCyvB,GATiC,WAaxCC,EAAa,SAACC,GACdpF,EAAQ7N,OAAS,GACnB6N,EAAQzpB,SAAQ,SAAC2Z,GACfA,EAAEmV,OAAOX,OAAO,SAGpBK,EAAYK,IAnBgC,EAsBlBnU,qBAAW3B,IAA/BJ,EAtBsC,EAsBtCA,KAAM3T,EAtBgC,EAsBhCA,UAtBgC,EAuBVmP,wBAElCjV,GAzB4C,mBAuBvC6vB,EAvBuC,KAuB3BC,EAvB2B,KA2B9C5Y,qBAAU,WACR,GAAMuR,GAAcD,EAAc,CAChC,IAAM1B,EAAkBP,GAAWkC,GAYnC,OAXA3B,EAAgBqC,iBAAiB,QAAQ,WACvCsG,EAAQ,CACNzwB,IACE,mEACFmmB,WAAY,IAAIC,OAAOC,KAAKC,KAAK,GAAI,IACrCC,OAAQ,IAAIH,OAAOC,KAAKG,MAAM,EAAG,QAIrCsK,EAAc,IAAI1K,OAAOC,KAAK0K,WAAW,CAAEC,gBAAgB,KAEpD,WACLlJ,EAAgBsC,oBAAoB,QAAQ,WAC1CqG,EAAQ,CACNzwB,IACE,mEACFmmB,WAAY,IAAIC,OAAOC,KAAKC,KAAK,GAAI,IACrCC,OAAQ,IAAIH,OAAOC,KAAKG,MAAM,EAAG,YAKxC,CAACiD,EAAYD,IAEhBtR,qBAAU,WACR,OAAO,WACD2Y,GAAYzK,OAAOC,KAAKoG,MAAMwE,uBAAuBJ,GACzDC,OAAc9vB,MAEf,IAEH,IAAMkwB,EAAgB,uCAAG,WAAON,GAAP,qBAAA7Y,EAAA,0DACnBS,IAAOqY,EADY,oBAEf7Y,EAAS,IAAIhV,EACfmuB,EAIA,CACFttB,YAAQ7C,EACR+G,kBAAc/G,EACdowB,eAAWpwB,GAETwpB,EAZiB,OAYP1jB,QAZO,IAYPA,OAZO,EAYPA,EAAW4R,MAAK,SAAC+C,GAAD,OAAOA,EAAE/W,MAAF,OAAS+V,QAAT,IAASA,OAAT,EAASA,EAAMnT,cAChDspB,EAAO/d,cAAP,OAAsB2X,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAShjB,iBAbd,gCAcFwQ,EAAOqZ,eAAeT,EAAOtrB,cAd3B,QAcf6V,EAde,UAiBjBgW,EAAUttB,OAASsX,EAAKtX,OACxBstB,EAAUppB,aAAeoT,EAAKpT,cAlBb,OAqBrB8oB,EAAYS,QACZT,EAAWU,WAAWC,EAAiBZ,EAAQO,IAC/CN,EAAYY,YACVhJ,GAAiBjQ,EAAKoY,EAAOA,OAAOc,gBAEtCb,EAAYc,KAAKnZ,GA1BI,4CAAH,sDA8BhBgZ,EAAmB,SACvBZ,EACAhqB,GAEA,OAAOgrB,KAAeC,eACpB,kBAAC,GAAD,KACGjrB,EAAKwqB,WACJ,kBAAC5I,GAAD,mBAAyB5hB,EAAKwqB,WAE/BxqB,EAAKmB,cACJ,kBAACygB,GAAD,sBACiB5hB,EAAKmB,aAAawV,QAAQ,IAG5CqT,EAAOvoB,SACN,kBAACmgB,GAAD,gBACW7K,KAAMiT,EAAOvoB,SAASuV,OAAO,wBAG1C,kBAAC4K,GAAD,kBACayE,GAAkB2D,EAAOnoB,iBAErC7B,EAAK/C,QACJ,kBAAC2kB,GAAD,KACE,uBAAGjoB,KAAI,gBAAWqG,EAAK/C,QAAW4gB,OAAO,UAAzC,oBA+HV,OACE,kBAAC6G,GAAkBnT,SAAnB,CACEC,MAAO,CACLoR,eACAhR,MACA+S,UACAC,YACAE,aAAc,SAACoG,GAAD,OA7HC,SAACA,GACpBzB,EAAa,GAAD,oBAAK7E,GAAL,aAAmBsG,KA4HwBpG,CAAaoG,IAChE7B,OAAQ,SAACzX,GAAD,OAA0ByX,EAAOzX,IACzCiT,WAAY,SACVD,EACArY,GAFU,OArGC,SACjB2e,EACA3e,GAEA,GAAIqF,EACF,GAAI+S,EAAQ7N,OAAS,EAAG,CAAC,IAAD,IAGtB6N,EAAQzpB,SAAQ,SAACiwB,GACfA,EAAEnB,OAAOX,OAAO,SAGlB,IAAI+B,EAA4B,GAEhCF,EAAOhwB,SAAQ,SAACmwB,GACdD,EAAM,uBACDA,GADC,CAEJ,CACE3pB,QAAS4pB,EAAE5pB,QACXwK,WAAYof,EAAEpf,WACdvN,aAAc2sB,EAAE3sB,aAChBmD,eAAgBwpB,EAAExpB,eAClBqK,mBAAoBmf,EAAEnf,mBACtB8d,OAAQ,IAAIxK,OAAOC,KAAK6L,OAAO,CAC7BC,SAAU,IAAI/L,OAAOC,KAAK+L,OAAOH,EAAElf,IAAMkf,EAAEjf,KAC3CwF,IAAKA,EACLkN,KAAMJ,GAAqB2M,EAAExpB,wBAMrC,IAAM2K,EAAE,UAAGoF,EAAI6T,mBAAP,aAAG,EAAiBC,eACtBjZ,EAAE,UAAGmF,EAAI6T,mBAAP,aAAG,EAAiBE,eAEvBnZ,GAAOC,GAGV2e,EAAOlwB,SAAQ,SAAC2Z,GACdA,EAAEmV,OAAOlE,YAAY,SAAS,WAC5BwE,EAAiBzV,SAIrBiV,EAAWsB,IARXxxB,QAAQC,IAAI,wCAUT,CAEL8qB,EAAQzpB,SAAQ,SAACiwB,GACfA,EAAEnB,OAAOX,OAAO,SAGlB,IAAMoC,EAASP,EAAOnC,QAAO,SAACC,EAAK0C,GACjC,MAAM,GAAN,oBACK1C,GADL,CAEE,CACEvnB,QAASiqB,EAAIjqB,QACbwK,WAAYyf,EAAIzf,WAChBvN,aAAcgtB,EAAIhtB,aAClBmD,eAAgB6pB,EAAI7pB,eACpBqK,mBAAoBwf,EAAIxf,mBACxB8d,OAAQ,IAAIxK,OAAOC,KAAK6L,OAAO,CAC7BC,SAAU,IAAI/L,OAAOC,KAAK+L,OAAOE,EAAIvf,IAAMuf,EAAItf,KAC/CwF,IAAKA,EACLkN,KAAMJ,GAAqBgN,EAAI7pB,uBAIpC,IAEH4pB,EAAOvwB,SAAQ,SAAC2Z,GACdA,EAAEmV,OAAOlE,YAAY,SAAS,WAC5BwE,EAAiBzV,SAGrBiV,EAAW2B,QAGb7xB,QAAQC,IAAI,0BA0BLgrB,CAAWD,IAChB0E,gBAtHkB,WAClBK,GAAgB/X,EAClB+X,EAAakB,YAAYjZ,EAAI+Z,aACpB/Z,GACTgY,EACE,IAAIpK,OAAOC,KAAK6L,OAAO,CACrBC,SAAU3Z,EAAI+Z,YACd/Z,IAAKA,MAgHP2X,UAhIY,WAChB5E,EAAQzpB,SAAQ,SAAC8uB,GACfA,EAAOA,OAAOX,OAAO,SAEvBS,EAAW,IACXT,OAAOjvB,GACPwvB,OAAgBxvB,IA2HZ2qB,aAzBe,WACfnC,IACF+B,EAAQzpB,SAAQ,SAAC2Z,GACfA,EAAEmV,OAAOX,OAAO,SAElBI,EAAa,IACbK,EAAW,QAsBV1a,EAAM8C,W,qnCC5Sb,IAAMkB,GAAYC,IAAOC,IAAV,MAeTgG,IANUjG,IAAOC,IAAV,MAMWD,IAAOC,IAAV,KAGCnB,KAehByZ,IATavY,IAAOwY,MAAV,KAIDzZ,IAKEiB,IAAOyY,OAAV,KAGC1Z,KAOTmF,GAAQlE,IAAOqI,GAAV,MAiGIqQ,GAxFuB,WAAO,IAAD,EAUtCnW,qBAAW0O,IARbjX,EAFwC,EAExCA,QACAuW,EAHwC,EAGxCA,QACAC,EAJwC,EAIxCA,UACAC,EALwC,EAKxCA,aACAC,EANwC,EAMxCA,QACAC,EAPwC,EAOxCA,WACAE,EARwC,EAQxCA,gBACAC,EATwC,EASxCA,mBAKI5K,GAFW3D,qBAAW3B,IAApBJ,KAEY,SAClBzE,EACAoK,GAFkB,OAIlB,yCACExG,MAAO,CACLyG,OAAQ,EACRC,gBAAiB,cACjBC,QAAS,OACTC,MAAO,QACPoS,QAAS,OACTC,eAAgB,aAChBC,WAAY,SACZpS,SAAS,GAAD,OAAK1H,IACb2H,OAAQ,EACRF,OAAQ,SAENzK,MAYR,OACE,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,sBACA,kBAAC,GAAD,KACE,kBAAC,KAAD,CACEwL,WAAUvN,EACVwN,SAAUgJ,EACVnJ,QAASqJ,EACT1J,SAAU,SAACS,GAAD,OAAgBgJ,EAAahJ,IACvCC,eAAa,EACbC,mBAAiB,EACjBC,kBAAgB,EAChBC,aAAa,SACbC,YAAaC,IAAMC,cAAcD,IAAME,WAAW/B,OAGtD,kBAAC,GAAD,KACE,kBAAC,KAAD,CACEmB,QAAS,IAAItY,KAAKA,KAAKuY,OACvBC,WAAUvN,EACVwN,SAAUkJ,EACV1J,SAAU,SAACS,GAAD,OAAgBkJ,EAAWlJ,IACrCC,eAAa,EACbC,mBAAiB,EACjBC,kBAAgB,EAChBC,aAAa,SACbC,YAAaC,IAAMC,cAAcD,IAAME,WAAW/B,OAGtD,kBAAC,GAAD,CAAiBvG,MAAO,CAAEmZ,SAAU,UAClC,kBAACP,GAAD,CACEhR,WAAUvN,EACV+e,aAAclI,EAAkBA,EAAgBzjB,KAAO,aACvD4Z,SAAU,SAACC,GAAD,OA1CkB+R,EA0CkB/R,EAAEuD,OAAOrM,WAxC7D2S,EADiB,eAAfkI,OACiBjyB,EAEAwpB,GAJc,IAACyI,IA4C5B,8CACCzI,GAAW,4BAAQvN,IAAKuN,EAAQ9lB,IAAK8lB,EAAQnjB,W,ywBCvI1D,IAAM6rB,GAAmBjZ,IAAOC,IAAV,MAShBiZ,GAAelZ,IAAOC,IAAV,MAUZkZ,GAASnZ,IAAOC,IAAV,MAKNmZ,GAAiBpZ,IAAOC,IAAV,MAuELoZ,GA3DsB,SAAC,GAAkB,IAAhBxa,EAAe,EAAfA,SAAe,EACJ0D,qBAC/C8O,IADM9B,EAD6C,EAC7CA,aAAchR,EAD+B,EAC/BA,IAAKyX,EAD0B,EAC1BA,OAAQE,EADkB,EAClBA,UAG3Blc,EAAYuI,qBAAW0O,IAAvBjX,QACFmM,EAAMzJ,iBAAuB,MAEnCuB,qBAAU,WACR,OAAO,WACLiY,OAED,IAEHjY,qBAAU,YACHM,GAAOgR,GACV+J,MAED,CAAC/a,EAAKgR,IAET,IAAM+J,EAAW,WACXnT,EAAI9I,SACN2Y,EACE,IAAI7J,OAAOC,KAAKmN,IAAIpT,EAAI9I,QAAU,CAChCmc,KAAM,EACNnZ,OAAQ,IAAI8L,OAAOC,KAAK+L,OAAO,UAAW,WAC1CsB,gBAAgB,EAChBC,mBAAmB,EACnBC,eAAe,EACfC,cAAc,EACdC,mBAAmB,EACnBC,YAAY,EACZC,aAAa,EACbC,aAAa,EACbC,gBAAiB,SACjBC,UAAW/N,OAAOC,KAAK+N,UAAUC,QACjCC,gBAAiB,cAKzB,OACE,oCACE,kBAACpB,GAAD,KACE,kBAAC,GAAD,MACA,kBAAC,GAAD,MACCjf,GACC,kBAACof,GAAD,KACE,kBAAC,GAAD,QAIN,kBAACF,GAAD,KACG3J,GAAgB,kBAAC4J,GAAD,CAAQhT,IAAKA,GAAMtH,KACjC0Q,IAAiBhR,IAAQ,kBAAC,GAAD,CAAQ8B,QAAQ,O,gUC9F7C,IAAM+H,GAAKpI,IAAOqI,GAAV,KACAtJ,IAGFub,GAAKta,IAAOua,GAAV,KACAxb,ICkBFyb,IDdKxa,IAAOya,GAAV,KACA1b,ICac,SAAC,GAKV,IAJlBR,EAIiB,EAJjBA,IACA+S,EAGiB,EAHjBA,QACAsF,EAEiB,EAFjBA,WACA8D,EACiB,EADjBA,SACiB,EACmB1e,mBAA2B,IAD9C,mBACV2e,EADU,KACEC,EADF,OAEyB5e,mBACxC,MAHe,mBAEV6e,EAFU,KAEKC,EAFL,KAMjB7c,qBAAU,WAQR,OAAO,WANL0c,EAAW9yB,SAAQ,SAAC8uB,GAClBA,EAAOX,OAAO,MACd7J,OAAOC,KAAKoG,MAAMwE,uBAAuBL,MAM3CiE,EAAc,OAGf,IAEH3c,qBAAU,WAMR,OALA0c,EAAW9yB,SAAQ,SAACkzB,GAClBA,EAAKtI,YAAY,SAAS,WACxBxP,EAAQ8X,GAAM,SAGX,WACLJ,EAAW9yB,SAAQ,SAACkzB,GAAU,IAAD,EAC3B,UAAAA,EAAKC,gBAAL,SAAe1c,eAIlB,CAACqc,EAAYE,IAEhB5c,qBAAU,WACR,GAAIM,GAA6B,IAAtBoc,EAAWlX,OAAc,CAClC,IAAMwX,EAAUtV,OAAOuP,KAAK5D,GACzBoE,QAAO,SAACwF,EAAMtF,GAAU,IAAD,EAEhB9c,EAAG,UADUwY,EAAQsE,GAAMe,OACVc,qBAAd,aAAG,EAA0B3e,MACtC,YAAY/R,IAAR+R,EACKoiB,EAED,GAAN,oBAAWA,GAAX,CAAiBpiB,MAElB,IACFxP,MAAK,SAACwU,EAAGqd,GAAJ,OAAUA,EAAIrd,KAElBsd,EAAazV,OAAOuP,KAAK5D,GAAS/S,KAAI,SAACiD,EAAGpD,GAC5C,IAAI2c,EAAOzJ,EAAQ9P,GAAGmV,OAClBrF,EAAQ9P,GAAG6Z,OACbN,EAAKM,KAAO/J,EAAQ9P,GAAG6Z,KACvBN,EAAKM,KAAMjd,MAAQA,EAAQ,GAAR,OAAasc,QAAb,IAAaA,IAAY,IAE9CK,EAAK/E,OAAOzX,GAEZ,IAAI+c,EAAMP,EAAKtD,cAUf,OAREsD,EAAKQ,cADKx0B,IAARu0B,GAA6B,OAARA,EACPL,EAAQrN,QAAQmN,EAAKtD,cAAe3e,OAAS,GAE7C,GAGlBiiB,EAAKS,UAAUT,EAAKQ,UACpBR,EAAKtwB,GAAK+W,EAEHuZ,KAOT,GAAIK,EAAW3X,OAAS,EAAG,CAEzB,IADA,IAAIgY,EAAS,IAAItP,OAAOC,KAAKsP,aACpB/N,EAAI,EAAGA,EAAIyN,EAAW3X,OAAQkK,IACrC8N,EAAOE,OAAOP,EAAWzN,GAAG8J,eAE9BlZ,EAAIqd,UAAUH,QAEdld,EAAIsd,UAAUT,EAAW,GAAG3D,eAG9BmD,EAAcQ,MAEf,CAACV,EAAUnc,EAAKoc,EAAYrJ,IAE/B,IAAIwK,EAAsB,SAACnF,GRmPA,IAAC0E,EQlPtB9c,GAAOqY,GAAcD,EAAO0E,OAC9BzE,EAAYS,QACZT,EAAYU,YRgPY+D,EQhPa1E,EAAO0E,KRiPzC1D,KAAeC,eACpB,kBAAC,GAAD,KACE,kBAACvJ,GAAD,KACGgN,EAAKjd,MADR,KACiBid,EAAK3tB,OAEtB,kBAAC6gB,GAAD,aAAmB8M,EAAKU,QACrBV,EAAKzqB,kBACN,kBAAC2d,GAAD,YAAc8M,QAAd,IAAcA,OAAd,EAAcA,EAAMzqB,qBAEpB,OAACyqB,QAAD,IAACA,OAAD,EAACA,EAAMxqB,qBACP,kBAAC0d,GAAD,YAAc8M,QAAd,IAAcA,OAAd,EAAcA,EAAMxqB,uBQ3P6B7B,YACnD4nB,EAAYY,YAAYhJ,GAAiBjQ,EAAKoY,EAAOc,gBACrDb,EAAYc,KAAKnZ,KAWf0E,EAAU,SAAC0T,EAAwBtW,GACnCwa,GACFA,EAAcW,UAAUX,EAAcU,UAEpClb,IACC,OAAH9B,QAAG,IAAHA,KAAKsd,UAAUlF,EAAOc,gBAExBd,EAAO6E,UAAU,KAEjBV,EAAiBnE,GACjBmF,EAAoBnF,IAGtB,MAAO,CAAEgE,aAAYC,gBAAeoB,mBApBT,SAACvxB,GAC1B,IAAIksB,EAASgE,EAAWlc,MAAK,SAAC+C,GAAD,OAAOA,EAAE/W,KAAOA,UAC9B1D,IAAX4vB,GACF1T,EAAQ0T,GAAQ,O,0GC5GtB,IAAMuC,GAAelZ,IAAOC,IAAV,MA6CHsZ,GAxCc,SAAC,GAQvB,IAPLjI,EAOI,EAPJA,QACAjR,EAMI,EANJA,OACAmZ,EAKI,EALJA,KACAyC,EAII,EAJJA,eACAjC,EAGI,EAHJA,YACAU,EAEI,EAFJA,SACAwB,EACI,EADJA,uBAEM/V,EAAMzJ,iBAAuB,MAC3B6S,EAAiBE,KAAjBF,aAFJ,EC1BsB,SAAC,GAMN,IALrB4M,EAKoB,EALpBA,OACA3C,EAIoB,EAJpBA,KACAQ,EAGoB,EAHpBA,YAGoB,IAFpBiC,sBAEoB,SADpB5b,EACoB,EADpBA,OACoB,EACErE,wBACpBjV,GAFkB,mBACbwX,EADa,KACRyX,EADQ,OAIgBha,mBAElC,IAAImQ,OAAOC,KAAK0K,WAAW,CAAEC,gBAAgB,KAN3B,mBAIbH,EAJa,KAIDC,EAJC,KAsCpB,OA9BA5Y,qBAAU,WAuBR,OAFA+X,EApBkB,WAChB,GAAImG,EAAO9e,QACT,OAAO,IAAI8O,OAAOC,KAAKmN,IAAI4C,EAAO9e,QAAS,CACzCmc,KAAMA,EACNnZ,OAAQA,EACRoZ,gBAAgB,EAChBC,mBAAmB,EACnBC,eAAe,EACfC,cAAc,EACdC,mBAAmB,EACnBC,YAAY,EACZC,YAAakC,EACbjC,YAAaA,EACbC,gBAAiB,SACjBC,UAAW/N,OAAOC,KAAK+N,UAAUC,QACjCC,gBAAiB,YAKhB+B,IAEA,WACDxF,GAAYzK,OAAOC,KAAKoG,MAAMwE,uBAAuBJ,GACzDC,OAAc9vB,GACdivB,OAAOjvB,MAER,IAEI,CAAEwX,MAAKqY,cDfcyF,CAAa,CACvCF,OAAQhW,EACRqT,KAAI,OAAEA,QAAF,IAAEA,IAAQ,GACdyC,iBACA5b,OAAQA,EACR2Z,YAAW,OAAEA,QAAF,IAAEA,OALPzb,EAHJ,EAGIA,IAAKqY,EAHT,EAGSA,WAQLoF,EAAuBxB,GAAc,CAC3Cjc,IAAKA,EACL+S,QAAO,OAAEA,QAAF,IAAEA,IAAW,GACpBsF,WAAYA,EACZ8D,SAAUA,IAJJsB,mBAaR,OANME,GACJA,GAAuB,SAAC9d,GACtB4d,EAAmB5d,MAKrB,qCACImR,GAAgB,kBAAC,GAAD,MACjBA,GAAgB,kBAAC,GAAD,CAAcpJ,IAAKA,M,8/BE1DxBnG,IAAOC,IAAV,MAKX,SAAClE,GAAD,OACAA,EAAMugB,cACNra,YADA,KAEYlG,EAAMugB,aAAeC,GAAaC,GAAUC,OAI/Czc,IAAOC,IAAV,MAME,SAAClE,GAAD,OAAWA,EAAM2gB,OAGnB,SAAC3gB,GAAD,OAAWA,EAAM4gB,WAIf3c,IAAOC,IAAV,MAQa,SAAClE,GAAD,OAAWA,EAAMjI,SAC9B,SAACiI,GAAD,OAAWA,EAAM2gB,OACX,SAAC3gB,GAAD,OAAWA,EAAM4gB,UAGV7d,IAGLkB,IAAOqI,GAAV,KACCtJ,IAIEiB,IAAOqI,GAAV,KACCtJ,IA/Cf,IAyDMwd,GAAa,GACbC,GAAU,GACVC,GAAa,G,gXC/CDzc,IAAOC,IAAV,MAKDD,YAAOoI,GAAPpI,CAAH,MAEIA,IAAOC,IAAV,M,46CChBZ,IAAM2c,GAAQ5c,IAAOC,IAAI4c,OAAM,SAAC9gB,GAAD,MAAY,CACzCtR,GAAIsR,EAAMtR,MADEuV,CAAH,MAIE,SAACjE,GAAD,OAAYA,EAAM+gB,UAAY,OAAS,UAY9CC,GAAc/c,IAAOC,IAAV,MAQX+c,GAAehd,IAAOC,IAAV,MAWZgd,GAAYjd,IAAOC,IAAV,MAMTid,GAAcld,IAAOC,IAAV,MAMXkd,GAAoBnd,IAAOod,OAAV,MAkFRC,GAtD8B,SAAC,GAKvC,IAJLxe,EAII,EAJJA,SAEAie,GAEI,EAHJhU,UAGI,EAFJgU,WACAQ,EACI,EADJA,WAEMC,EAAW7gB,iBAAuB,MAqBxC,OAnBAuB,qBAAU,WACR,IAAMuf,EAAqB,SAAChL,GAEtB+K,EAASlgB,UAAYkgB,EAASlgB,QAAQogB,SAASjL,EAAMhI,UACnD8S,EACFA,IAEA/2B,QAAQC,IAAI,wCAMlB,OADAinB,SAASyC,iBAAiB,YAAasN,GAChC,WAEL/P,SAAS0C,oBAAoB,YAAaqN,MAE3C,CAACF,EAAYC,IAGd,kBAAC,GAAD,CACE9yB,GAAI,QACJqe,UAAW,OACX4U,UAAW,EACXtc,KAAM,SACN0b,UAAWA,EACXa,cAAab,EAAY,OAAS,SAElC,kBAACC,GAAD,CAAa5W,IAAKoX,GAChB,kBAACP,GAAD,KACE,kBAACC,GAAD,KAAYpe,GACZ,kBAACqe,GAAD,KACE,kBAACC,GAAD,CACE1vB,KAAM,SACNmwB,eAAc,QACd3a,QAAS,kBAAMqa,GAAcA,MAH/B,iB,6uDCtHZ,IAAMO,GAAgB7d,IAAOC,IAAV,MAIb6d,GAAoB9d,IAAOC,IAAV,MAKjBU,GAAmBX,IAAOC,IAAV,MAehB8d,GAAY/d,IAAOsJ,IAAV,MAgBT0U,GAA2Bhe,IAAOC,IAAV,MAIxBge,GAAsBje,YAAOge,GAAPhe,CAAH,MAKnBke,GAAiBle,IAAOC,IAAV,MAIdke,GAAgBne,IAAOC,IAAV,MAabme,GAAmBpe,IAAOC,IAAV,MAMhBoe,GAAWre,IAAOC,IAAV,KAMVme,IAoHEE,GAAY,SAAC,GAOI,IANrBnc,EAMoB,EANpBA,IACAoI,EAKoB,EALpBA,IACAzB,EAIoB,EAJpBA,UACAyV,EAGoB,EAHpBA,iBACAtb,EAEoB,EAFpBA,QACAub,EACoB,EADpBA,sBACoB,EACYxiB,oBAAS,GADrB,mBACbyiB,EADa,KACFljB,EADE,OAEYS,mBAASmG,GAFrB,mBAEbuc,EAFa,KAEHC,EAFG,KAIdC,EAASliB,sBAAqC3V,GAC9C83B,EAAaniB,iBAAiB,CAACyF,IAErC,SAAS2c,EAAUC,GACbH,EAAOvhB,UACTuhB,EAAOvhB,QAAQ8E,IAAM4c,EACrBH,EAAOvhB,QAAQ2hB,OAAS,WACtBzjB,GAAW,GACO,oBAAduN,GACF0V,GAAyBA,KAG7BI,EAAOvhB,QAAQ4hB,QAAU,WACvB1jB,GAAW,KAkCjB,OA7BA0C,qBAAU,WAIR,OAHA2gB,EAAOvhB,QAAU,IAAI6hB,MACrBJ,EAAUJ,GAEH,WACLG,EAAWxhB,QAAU,GAChBuhB,EAAOvhB,UAGVuhB,EAAOvhB,QAAQ2hB,OAAS,aACxBJ,EAAOvhB,aAAUtW,MAGpB,IAEHkX,qBAAU,WAIJygB,IAAavc,KAC2B,IAAtC0c,EAAWxhB,QAASuQ,QAAQzL,KAC9B5G,GAAW,GACXsjB,EAAWxhB,QAAUwhB,EAAWxhB,QAAS8hB,OAAOhd,IAElDwc,EAAYxc,GACZ2c,EAAU3c,MAEX,CAACuc,EAAUvc,IAEPsc,EACL,kBAAC,GAAD,CAAkB3V,UAAWyV,GAC3B,kBAAC,GAAD,OAGF,kBAACR,GAAD,CACEjV,UAAWA,EACX3G,IAAKuc,EACLnU,IAAKA,EACLtH,QAASA,KAKAmc,GAnLwB,SAAC,GAAa,IAAXC,EAAU,EAAVA,IAAU,EAChBrjB,mBAAiB,GADD,mBAC3CsjB,EAD2C,KAChCC,EADgC,OAEdvjB,mBAAiB,GAFH,mBAE3CwjB,EAF2C,KAE/BC,EAF+B,OAGhBzjB,oBAAkB,GAHF,mBAG3C8gB,EAH2C,KAGhC4C,EAHgC,OAIF1jB,mBAAiB,GAJf,mBAI3C2jB,EAJ2C,KAIzBC,EAJyB,KAK9CC,EAAYnjB,iBAAuB,MAEjCojB,EAAW,eAACr1B,EAAD,uDAAM,GAAN,gCAAgCA,IAKjDwT,qBAAU,WACJ0hB,IAAkC,EAAbN,EAAI5b,QAC3Bsc,MAED,CAACJ,EAAkBN,IAEtB,IAAMU,EAAwB,WACxBF,EAAUxiB,UACZwiB,EAAUxiB,QAAQ2iB,WAAa,IApBe,EA4B7BhkB,mBACnBqjB,EAAI9gB,KAAI,SAAC9T,GAAD,OACN,kBAAC,GAAD,CACEuY,IAAKvY,EAAGuE,WACR8Z,UAAW,kBACXyB,IAAK,uDACLpI,IAAK2d,EAASr1B,EAAGuE,YACjBwvB,sBAAuB,WACrBoB,GAAoB,SAACK,GAAD,OAAaA,EAAU,YAR5CC,EA5B2C,oBA0ClD,OACE,kBAACrC,GAAD,KACE,kBAAC,GAAD,CAAYf,UAAWA,EAAWQ,WAAY,kBAAMoC,GAAa,KAC/D,kBAAC1B,GAAD,KACE,kBAAC,GAAD,CACElV,UAAW,cACXyV,iBAAkB,QAClBpc,IAAG,sBAAiBkd,EAAIG,IACxBjV,IAAK,0DAGT,kBAAC4T,GAAD,CAAerV,UAAW,SACxB,kBAACuV,GAAD,KACG6B,EAAW3hB,KAAI,SAAC4hB,EAAgB/hB,GAAjB,OACd,kBAACggB,GAAD,CACEpb,IAAKqc,EAAIjhB,GAAOpP,WAChBiU,QAAS,kBAAMwc,EAAcrhB,KAE5B+hB,SAMX,kBAACrC,GAAD,KACE,kBAACG,GAAD,KACE,kBAAC,GAAD,CACE9b,IAAK2d,EAAST,EAAIC,GAAWtwB,YAC7Bub,IAAK,uDACLgU,iBAAkB,WAClBtb,QAAS,WACPyc,GAAa,SAACU,GAAD,OAAgBA,KAC7BX,EAAcH,OAIpB,kBAACpB,GAAD,KACE,kBAACC,GAAD,CAAehY,IAAK0Z,GAClB,kBAACxB,GAAD,KACG6B,EAAW3hB,KAAI,SAAC4hB,EAAgB/hB,GAAjB,OACd,kBAACggB,GAAD,CACEpb,IAAKqc,EAAIjhB,GAAOpP,WAChBiU,QAAS,kBA5DN,SAAC7E,GAClBmhB,EAAanhB,GA2DgBiiB,CAAWjiB,KAEzB+hB,Y,uvCC7KnB,IAAMpgB,GAAYC,IAAOC,IAAV,MAKC,SAAClE,GAAD,OAAYA,EAAMukB,UAAN,UAAqBvkB,EAAMukB,UAA3B,MAA2C,MAGjEtc,GAAMhE,IAAOC,IAAV,MAMa,SAAClE,GAAD,OAClBA,EAAM8F,cAAgB/C,GAAoBA,MAElC,SAAC/C,GAAD,OAAYA,EAAMwkB,WAAa,UAAY,aAGjDC,GAAMxgB,IAAOC,IAAV,MAOE,SAAClE,GAAD,OAAYA,EAAMwK,MAAN,UAAiBxK,EAAMwK,MAAvB,MAAmC,UAChD,SAACxK,GAAD,OAAYA,EAAMsD,KAAOtD,EAAMsD,KAAO,MAChC,SAACtD,GAAD,OAAYA,EAAM0kB,WAAa,QAAU,UAOnDC,GAAM1gB,IAAOC,IAAV,KAGanB,GACXA,IAKL6hB,GAAS3gB,IAAOC,IAAV,MAKF,SAAClE,GAAD,OAAWA,EAAMsD,QAGrB6E,GAAQlE,IAAO4gB,GAAV,KAEI7hB,IAOT8hB,GAAS7gB,IAAOmE,KAAV,MA+OG2c,GArN6B,SAAC/kB,GAAW,IAEpDrO,EAQEqO,EARFrO,MACAqzB,EAOEhlB,EAPFglB,KACAT,EAMEvkB,EANFukB,UACAU,EAKEjlB,EALFilB,eACAC,EAIEllB,EAJFklB,QACAC,EAGEnlB,EAHFmlB,cACAC,EAEEplB,EAFFolB,iBACAle,EACElH,EADFkH,QAEIme,EAAQJ,EAAiB,EAAI,EAC/BK,EAIE,GACN,GAAIJ,GAAWF,EAAK,GAAGrzB,MACrB,IAAK,IAAIigB,EAAI,EAAGA,EAAIsT,EAAStT,IACvBoT,EAAKpT,GAAGjgB,OAASqzB,EAAKpT,GAAGtO,MAC3BgiB,EAAYh1B,KAAK,CACfqB,MAAOqzB,EAAKpT,GAAGjgB,MACf2R,KAAM0hB,EAAKpT,GAAGtO,KACdohB,WAAYM,EAAKpT,GAAG8S,aAsG5B,OACE,kBAAC,GAAD,CAAWH,UAAWA,GACnB5yB,GAAS,kBAAC,GAAD,KAAQA,GACjB2zB,EAAY5d,OAAS,GACpB,kBAAC,GAAD,CAAK5B,cAAyB,IAAVuf,GACjBC,EAAY9iB,KAAI,SAAC+iB,EAAIC,GAAL,OACf,kBAACf,GAAD,CAAKxd,IAAKue,EAAQliB,KAAMiiB,EAAGjiB,KAAMohB,WAAYa,EAAGb,YAC7Ca,EAAG5zB,aAKTuzB,GAAuB,IAAZA,KACXE,GACDJ,EAAKxiB,KAAI,SAACnS,EAAMgS,GAAP,OACP,kBAAC,GAAD,CACEyD,cAAezD,EAAQ,IAAMgjB,EAC7Bpe,IAAK5E,EACLmiB,gBAAwBx5B,IAAZkc,EACZA,QAAS,kBAAMA,GAAWA,EAAQ7W,KAElC,kBAACo0B,GAAD,CAAKnhB,KAAM,EAAGmiB,YAAa,IACxBp1B,EAAKgB,MAER,kBAACozB,GAAD,CAAKnhB,KAAM,GAAIjT,EAAK+R,aAGvB8iB,GAAuB,IAAZA,IACZE,GACAJ,EAAKxiB,KAAI,SAACnS,EAAMgS,GAAP,OACP,kBAAC,GAAD,CACEyD,cAAezD,EAAQ,IAAMgjB,EAC7Bpe,IAAK5E,EACLmiB,gBAAwBx5B,IAAZkc,EACZA,QAAS,kBAAMA,GAAWA,EAAQ7W,KAElC,kBAACo0B,GAAD,CAAKja,MAAO4a,EAAkBK,YAAa,IACxCp1B,EAAKgB,MAER,kBAACozB,GAAD,CAAKnhB,KAAM,GAAIjT,EAAK+R,WAGzB8iB,GACwB,IAAvBI,EAAY5d,QACZwd,EAAU,GACVF,EAAKxiB,KAAI,SAACnS,EAAMgS,GACd,OAAKA,EAAQ,GAAK6iB,IAAY,EAE1B,kBAAC,GAAD,CACEpf,cAAgBzD,EAAQ6iB,EAAW,IAAMG,EACzCpe,IAAK5E,EACLmiB,gBAAwBx5B,IAAZkc,EACZA,QAAS,kBAAMA,GAAWA,EAAQ7W,KAhG1B,SAACgS,GACrB,IAAIqjB,EAAqB,GAEnBC,EAAOtjB,EAAQ6iB,EACjBU,EAAY,EACZvjB,EAAQ6iB,EAAW,EAAIF,EAAKtd,SAC9Bke,GAAavjB,EAAQ6iB,EAAW,GAAKA,GAGvC,IAAK,IAAItT,EAAIvP,EAAOuP,EAAI+T,EAAM/T,IACxBA,EAAIoT,EAAKtd,SACPkK,IAAMvP,GAAS+iB,EACjBM,EAAIp1B,KACF,kBAACs0B,GAAD,CAAQthB,KAAM0hB,EAAKpT,GAAGtO,KAAO2D,IAAK,IAAM2K,GACtC,kBAAC6S,GAAD,CAAKja,MAAO4a,EAAkBK,YAAa7T,IAAMvP,EAAQ,EAAI,IAC1D2iB,EAAKpT,GAAGvgB,MAEX,kBAACozB,GAAD,CAAKnhB,KAAM,GAAI0hB,EAAKpT,GAAGxP,SAI3BsjB,EAAIp1B,KACF,kBAACs0B,GAAD,CAAQthB,KAAM0hB,EAAKpT,GAAGtO,KAAO2D,IAAK,IAAM2K,GACtC,kBAAC6S,GAAD,CAAKnhB,KAAM,EAAGmiB,YAAa7T,IAAMvP,EAAQ,EAAI,IAC1C2iB,EAAKpT,GAAGvgB,MAEX,kBAACozB,GAAD,CAAKnhB,KAAM,GAAI0hB,EAAKpT,GAAGxP,UAM3BwP,EAAI+T,EAAO,GACbD,EAAIp1B,KAAK,kBAACq0B,GAAD,CAAK1d,IAAK,OAAS2K,GAAnB,MAIb,IAAK,IAAIA,EAAIgU,EAAWhU,EAAI,EAAGA,IAC7B8T,EAAIp1B,KAAK,kBAACs0B,GAAD,CAAQthB,KAAM0hB,EAAK,EAAIpT,GAAGtO,KAAO2D,IAAK,UAAY2K,KAG7D,OAAO8T,EAyDMG,CAAcxjB,IAId,QAEV6iB,GACCI,EAAY5d,OAAS,GACrBwd,EAAU,GACVF,EAAKxiB,KAAI,SAACnS,EAAMgS,GACd,OAAKhS,EAAKsB,QACH0Q,EAAQ,GAAK6iB,IAAY,EAiBzB,KAfD,kBAAC,GAAD,CACEpf,cAAgBzD,EAAQ6iB,EAAW,IAAMG,EACzCpe,IAAK5E,EACLmiB,gBAAwBx5B,IAAZkc,EACZA,QAAS,WACDA,GACJA,EAAQ7W,KAzKA,SAACgS,EAAe8iB,GAI1C,IAHA,IAAIO,EAAqB,GACnBC,EAAOtjB,EAAQ6iB,EAEZtT,EAAIvP,EAAOuP,EAAI+T,EAAM/T,IACxBA,EAAIoT,EAAKtd,SACPkK,IAAMvP,GAAS+iB,GACjB56B,QAAQC,IAAIu6B,EAAKpT,GAAGxP,OACpBsjB,EAAIp1B,KACF,kBAACm0B,GAAD,CACExd,IAAK,IAAM2K,EACX8S,WAAYM,EAAKpT,GAAG8S,WACpBla,MAAO4a,GAEND,GAAiBvT,IAAMvP,EACtB,8BACGA,EAAQ6iB,EADX,KACuBF,EAAKpT,GAAGxP,OAEX,KAAlB4iB,EAAKpT,GAAGxP,MACV,kBAAC0iB,GAAD,UAEAE,EAAKpT,GAAGxP,SAKdsjB,EAAIp1B,KACF,kBAACm0B,GAAD,CACEnhB,KAAM0hB,EAAKpT,GAAGtO,KACd2D,IAAK,IAAM2K,EACX8S,WAAYM,EAAKpT,GAAG8S,YAEpB,6BACGS,GAAiBvT,IAAMvP,EACtB,8BACGA,EAAQ6iB,EADX,KACuBF,EAAKpT,GAAGxP,OAEX,KAAlB4iB,EAAKpT,GAAGxP,MACV,kBAAC0iB,GAAD,UAEAE,EAAKpT,GAAGxP,UAStB,OAAOsjB,EA4HQI,CAAoBzjB,EAAO8iB,SCvSjCY,GAAsB,CACjCp0B,MAAO,QACPqzB,KAAM,CACJ,CAAE3zB,KAAM,WAAY+Q,MAAO,IAC3B,CAAE/Q,KAAM,cAAY+Q,MAAO,MAIlB4jB,GAAkC,CAC7Cr0B,MAAO,cACPqzB,KAAM,CACJ,CAAE3zB,KAAM,OAAQ+Q,MAAO,IACvB,CAAE/Q,KAAM,UAAW+Q,MAAO,MAIjB6jB,GAAoC,CAC/Ct0B,MAAO,cACPqzB,KAAM,CACJ,CAAE3zB,KAAM,OAAQ+Q,MAAO,IACvB,CAAE/Q,KAAM,UAAW+Q,MAAO,IAC1B,CAAE/Q,KAAM,QAAS+Q,MAAO,MAIf8jB,GAAqC,CAChDv0B,MAAO,YACPqzB,KAAM,CACJ,CAAE3zB,KAAM,OAAQ+Q,MAAO,IACvB,CAAE/Q,KAAM,UAAW+Q,MAAO,IAC1B,CAAE/Q,KAAM,QAAS+Q,MAAO,MAIf+jB,GAA+B,CAC1Cx0B,MAAO,uBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,OAAQ+Q,MAAO,IACvB,CAAE/Q,KAAM,oBAAkB+Q,MAAO,MAIxBgkB,GAAuC,CAClDz0B,MAAO,YACPqzB,KAAM,CAAC,CAAE3zB,KAAM,0BAAqB+Q,MAAO,MAGhCikB,GAA2B,CACtC10B,MAAO,SACPqzB,KAAM,CACJ,CAAE3zB,KAAM,iBAAe+Q,MAAO,IAC9B,CAAE/Q,KAAM,sBAAoB+Q,MAAO,M,2hBC7CvC,IAAMwM,GAAU3K,IAAOC,IAAV,MAaPoiB,GAAUriB,IAAOC,IAAV,KAKSnB,IA6BPwjB,GApBoB,SAACvmB,GAAW,IAAD,EAClBA,EAAlBwmB,aADoC,SAEtCv6B,EACJ,qGACwD,IACtD,uBAAG1B,KAAK,0BAAR,mBAFF,4BAMF,OAAIi8B,EACK,kBAACF,GAAD,KAAUr6B,GAIjB,kBAAC,GAAD,KACE,kBAACq6B,GAAD,KAAUr6B,K,k2CC3ChB,IAAMsc,GAAUtE,IAAOC,IAAV,MAkBPuiB,GAAWxiB,IAAOC,IAAV,MAaRiE,GAAQlE,IAAOC,IAAV,MAYLwiB,GAAYziB,IAAOC,IAAV,MAKX,qBAAGyiB,UAKCzgB,YAJJ,MACIA,YADJ,SASE0gB,GAAc3iB,IAAOC,IAAV,MAOX2iB,GAAW5iB,IAAOod,OAAV,MAkFCR,GA7DyB,SAAC,GAOlC,IANL/d,EAMI,EANJA,SACAgkB,EAKI,EALJA,QACAn1B,EAII,EAJJA,MACAg1B,EAGI,EAHJA,UACA5Z,EAEI,EAFJA,UACAwU,EACI,EADJA,WAEMwF,EAAaC,KACbxF,EAAW7gB,iBAAuB,MAElC8gB,EAAqB,SAAChL,GACtB+K,EAASlgB,UAAYkgB,EAASlgB,QAAQogB,SAASjL,EAAMhI,UACnD8S,EACFA,IAEA/2B,QAAQC,IAAI,wCAalB,OARAyX,qBAAU,WAER,OADAwP,SAASyC,iBAAiB,YAAasN,GAChC,WAEL/P,SAAS0C,oBAAoB,YAAaqN,MAE3C,CAACD,IAGF,kBAAC,GAAD,KACE,kBAACiF,GAAD,CAAUrc,IAAKoX,GACZ7vB,GAAS,kBAAC,GAAD,KAAQA,GAElB,kBAAC+0B,GAAD,CAAWC,UAAWA,EAAW5Z,UAAWA,GACzCjK,GAGFgkB,GACC,kBAACF,GAAD,KACGE,EAAQtkB,KAAI,SAAC6e,EAAQhf,GAAT,OACX,kBAACwkB,GAAD,CACE5f,IAAK5E,EACL6E,QAAS,WACPma,EAAOna,SAAWma,EAAOna,UACpBma,EAAO4F,mBACVF,EAAWG,OAGf1b,SAAU6V,EAAO7V,UAEhB6V,EAAO5E,c,8PCpIjB,IAAM0K,GAAoBnb,IAAMlM,cAA0B,CAC/DsnB,MAAO,GACP92B,KAAM,aACN42B,IAAK,eAeMG,IAZGpjB,IAAOC,IAAV,MAYyC,SAAC,GAAkB,IAAhBpB,EAAe,EAAfA,SAAe,EAC5C7C,mBAA6B,IADe,mBAC/DmnB,EAD+D,KACxDE,EADwD,KAOhEJ,EAAM,WACVI,GAAS,SAACF,GACR,IAAMG,EAAQ,aAAOH,GAErB,OADAG,EAASL,MACFK,MAIX,OACE,kBAACJ,GAAkBhlB,SAAnB,CAA4BC,MAAO,CAAEglB,QAAO92B,KAbjC,SAACk3B,GACZF,GAAS,SAACF,GAAD,6BAAeA,GAAf,CAAsBI,QAYmBN,QAC/CE,EAAM1f,OAAS,GAAK0f,EAAMA,EAAM1f,OAAS,IACxC,kBAAC,GAAD,CAAO6Z,WAAY2F,GAAME,EAAM,IAEhCtkB,KAUQkkB,GALO,WAEpB,OADgBxgB,qBAAW2gB,K,osBCjD7B,IAAMvY,GAAU3K,IAAOC,IAAV,MAMPujB,GAASxjB,IAAOC,IAAV,MAENwjB,GAAgBzjB,IAAOC,IAAV,MAMb2S,GAAS5S,IAAOC,IAAV,KAIUnB,IAGlB,SAAC/C,GAAD,OACAA,EAAM2nB,QACNzhB,YADA,SA8CW0hB,GAlC6B,SAAC,GAGtC,IAFLC,EAEI,EAFJA,yBACAC,EACI,EADJA,UAEIC,EAAa,CACf,CACEp2B,MAAO,MACPyQ,OAAO,GAET,CACEzQ,MAAO,aACPyQ,WAAOpX,GAET,CAAE2G,MAAO,OAAQyQ,OAAO,IAE1B,OACE,kBAAC,GAAD,KACE,kBAACqlB,GAAD,sDACA,kBAACC,GAAD,KACGK,EAAWvlB,KAAI,SAACiD,GAAD,OACd,kBAAC,GAAD,CACEkiB,OAAQliB,EAAErD,OAAS0lB,EAAUh1B,oBAC7BoU,QAAS,WACP2gB,EAAyBpiB,EAAErD,SAG5BqD,EAAE9T,a,0vGCrBfgW,KAAMiY,OAAOoI,MAEb,IAAMC,GAAyBhkB,YAAOD,GAAPC,CAAH,KACLf,IAGjBglB,GAAoBjkB,IAAOC,IAAV,MAMjBikB,GAAuBlkB,IAAOC,IAAV,KAGVhB,GACAA,IAIVklB,GAAoBnkB,IAAOC,IAAV,MAOjBiZ,GAAelZ,YAAOmkB,GAAPnkB,CAAH,MAOZokB,GAAiBpkB,YAAOmkB,GAAPnkB,CAAH,MAEdqkB,GAAcrkB,YAAOkkB,GAAPlkB,CAAH,KAELf,IAGNqlB,GAAoBtkB,YAAOoI,GAAPpI,CAAH,KACJf,IAGbslB,GAAcvkB,IAAOC,IAAV,MAQXoO,GAAYrO,YAAOsa,GAAPta,CAAH,MAITwkB,GAAOxkB,IAAOmE,KAAV,MAIO,SAACpI,GAAD,OAAYA,EAAMgG,KAAO,OAAS,YACxC,SAAChG,GAAD,OAAYA,EAAM0oB,KAAO3lB,GAAaA,MACrC,SAAC/C,GAAD,OAAYA,EAAM0oB,KAAO,UAAY,MAG3CC,GAAmB1kB,IAAOC,IAAI4c,OAAM,SAAC9gB,GAAD,MAAY,CACpD+M,UAAW/M,EAAM+M,aADM9I,CAAH,KAQTf,GAOMA,GAOAA,GACCA,GACFA,GACGA,GAENA,IAIT0lB,GAAuB3kB,IAAOC,IAAV,KAKVhB,GACGA,IAGb2lB,GAAiB5kB,IAAOsJ,IAAV,MASdub,GAAmB7kB,IAAOC,IAAV,KAKHhB,IAGb6lB,GAAmB9kB,IAAOC,IAAV,MAMhB8kB,GAAc/kB,IAAOC,IAAV,MAOX+kB,GAAOhlB,IAAOlC,EAAV,MAMJmnB,GAAWjlB,IAAOmE,KAAV,MA0BR+gB,GAAgB,SAAC,GAAsC,IAApC1M,EAAmC,EAAnCA,MAAO2M,EAA4B,EAA5BA,WAC9B,OACE,oCACE,kBAACL,GAAD,KACE,kBAACC,GAAD,KACE,kBAAC,KAAD,CAAYK,KAAM,GAAItxB,MAAOgL,MAE/B,kBAAC0lB,GAAD,KAAOhM,IAER2M,GAAc,kBAACrhB,GAAD,QA0XNuhB,GArXiC,SAAC,GAI1C,IAAD,EAHJz7B,EAGI,EAHJA,OACAi6B,EAEI,EAFJA,UACAD,EACI,EADJA,yBAEQrU,EAAiBhN,qBAAW8O,IAA5B9B,aADJ,EAGoBvT,wBACtBjV,GAJE,mBAGG4F,EAHH,KAGS24B,EAHT,OAO4CtpB,wBAE9CjV,GATE,mBAOG+I,EAPH,KAOqBy1B,EAPrB,KAWEz3B,EAAe4O,iBAAe,GAC9B/N,EAAqB+N,iBAAe,IACpC8oB,EAAW9oB,iBAAe,IAC1B1F,EAAY0F,iBAAe,IAC3BjL,EAAgBiL,iBAAe,IAE/B+oB,EAAc/oB,sBAA6B3V,GAE3C2+B,EAAoBhpB,iBAAuB0lB,IAE3CuD,EAAsBjpB,iBAAuBolB,IAE7C8D,EAA2BlpB,iBAC/BqlB,IAGI8D,EAA6BnpB,iBACjCslB,IAGI8D,EAA8BppB,iBAClCulB,IAGI8D,EAAwBrpB,iBAC5BwlB,IAGI8D,EAAgCtpB,iBACpCylB,IAGFlkB,qBAAU,WACR,IAAMgoB,EAAuB,uCAAG,WAAOpW,GAAP,SAAA/R,EAAA,uDACf,IAAI/U,GAEhBk9B,wBAAwBr8B,EAAQimB,EAAW7oB,QAC3CM,MAAK,SAACtB,GACLkgC,EAAoClgC,GACpCmgC,EAAwBngC,GACxBs/B,EAAQt/B,MAETogC,OAAM,SAACC,GAAD,OAAW9/B,QAAQC,IAAI6/B,MATF,2CAAH,sDAYvBxW,EAAa,IAAIC,gBAIvB,OAFAmW,EAAwBpW,GAEjB,kBAAMA,EAAWI,WACvB,CAACrmB,IAEJ,IAAMs8B,EAAsC,SAC1ClgC,GACI,IAAD,8BACH8H,EAAauP,SAAkB,OAARrX,QAAQ,IAARA,OAAA,EAAAA,EAAU8H,cAAe9H,EAAS8H,aAAe,EACxEa,EAAmB0O,QAAnB,UAA6BrX,EAAS2I,0BAAtC,QAA4D,GAC5D62B,EAASnoB,QAAT,UAAmBrX,EAAS0I,aAA5B,QAAqC,GACrCsI,EAAUqG,QAAV,UAAoBrX,EAASwL,wBAA7B,QAAiD,GACjDC,EAAc4L,QAAd,UAAwBrX,EAASyL,qBAAjC,QAAkD,GAElDm0B,EAAyBvoB,QAAQ0jB,KAAK,GAAG5iB,MAAzC,UACEnY,EAASmM,yBADX,QACgC,GAChCyzB,EAAyBvoB,QAAQ0jB,KAAK,GAAG5iB,MAAzC,UACEnY,EAASoM,0BADX,QACiC,GAEjCyzB,EAA2BxoB,QAAQ0jB,KAAK,GAAG5iB,MAA3C,UACEnY,EAASqM,wBADX,QAC+B,GAC/BwzB,EAA2BxoB,QAAQ0jB,KAAK,GAAG5iB,MAA3C,UACEnY,EAASsM,yBADX,QACgC,GAChCuzB,EAA2BxoB,QAAQ0jB,KAAK,GAAG5iB,MAA3C,UACEnY,EAASuM,+BADX,QACsC,GAEtCozB,EAAoBtoB,QAAQ0jB,KAAK,GAAG5iB,MAApC,UAA4CnY,EAASyI,oBAArD,QAAqE,GACrEk3B,EAAoBtoB,QAAQ0jB,KAAK,GAAG5iB,MAApC,UAA4CnY,EAAS+L,gBAArD,QAAiE,GAEjEg0B,EAAsB1oB,QAAQ0jB,KAAK,GAAG5iB,MAAtC,UACEnY,EAASiM,sBADX,QAC6B,8BAE7B8zB,EAAsB1oB,QAAQ0jB,KAAK,GAAG5iB,MAAtC,UACEnY,EAASkM,6BADX,QACoC,GAEpC8zB,EAA8B3oB,QAAQ0jB,KAAK,GAAG5iB,MA7HpB,SAACmoB,EAAgBC,GAC7C,IAAKD,IAAYC,EAAW,MAAO,GAEnC,IAAIC,EAAQ9iB,KAAM4iB,GACdG,EAAU/iB,KAAM6iB,GAChBG,EAAgBF,EAAMG,KAAKF,EAAS,KACxC,MAAM,GAAN,OAAUC,EAAV,QAuHwDE,CACpD5gC,EAAS2L,kBACT3L,EAAS0L,qBAGX+zB,EAAYpoB,QAAUrX,EAAS6M,mBAE/B6yB,EAAkBroB,QAAQ0jB,KAAK,GAAG5iB,MAAlC,oBACEnY,EAAS2M,0BADX,aACE,EAA6B3D,kBAD/B,QAC6C,GAC7C02B,EAAkBroB,QAAQ0jB,KAAK,GAAG5iB,MAAQnY,EAAS4M,2BAC/C8Q,KAAM1d,EAAS4M,4BAA4Bi0B,MAAMljB,OAAO,cACxD,IAGAwiB,EAA0B,SAC9BngC,GAEA,IAAMI,EAAW,CACfyE,cAAe7E,EAAS6E,cACxB0F,eAAgBvK,EAASuK,eACzBC,aAAcxK,EAASwK,aACvBE,aAAc1K,EAAS0K,aACvBhG,SAAU1E,EAAS0E,SACnBC,UAAW3E,EAAS2E,WAGtB46B,EAAoBn/B,IAGhB08B,EAAaC,KAGnB,OACE,kBAACiB,GAAD,UACYj9B,IAAT4F,GAAsB,kBAAC,GAAD,CAAQ0T,QAAQ,IACtC1T,GACC,oCACE,kBAACkX,GAAD,KACE,kBAACygB,GAAD,uBACkBx2B,EAAauP,QAAQiG,QAAQ,GAC7C,kBAACihB,GAAD,KACGz2B,EAAauP,QpCtUG,KoCuUf,kBAAC,KAAD,CAAYvJ,MAAOgL,KAEpBhR,EAAauP,QpC1UE,IoC2Ud,kBAAC,KAAD,CAAYvJ,MAAOgL,KAEpBhR,EAAauP,QpC9UE,KoC+Ud,kBAAC,KAAD,CAAYvJ,MAAOgL,OAIzB,kBAACgF,GAAD,MACA,kBAACogB,GAAD,KACE,kBAACC,GAAD,KACE,kBAACK,GAAD,CAAMziB,MAAM,GAAZ,UAA0BpT,EAAmB0O,SAC7C,kBAACmnB,GAAD,mBACcgB,EAASnoB,QADvB,IACiCrG,EAAUqG,SAE3C,kBAACmnB,GAAD,0BAAmB/yB,EAAc4L,SACjC,kBAACmnB,GAAD,iBACY,IACV,kBAACQ,GAAD,CACExa,OAAO,SACPlkB,KAAI,qDAAgDqI,EAAmB0O,QAAQnW,QAC7E,IACA,MAJJ,kBASM,IACR,kBAACs9B,GAAD,iBACY,IACV,kBAACQ,GAAD,CACE1+B,KAAI,0CAAkCu/B,EAA2BxoB,QAAQ0jB,KAAK,GAAG5iB,OACjFqM,OAAO,UAFT,kBAOF,kBAACga,GAAD,mBACc,IACZ,kBAACQ,GAAD,CACE1+B,KAAI,wCAAmCu/B,EAA2BxoB,QAAQ0jB,KAAK,GAAG5iB,OAClFqM,OAAO,UAFT,mBAOD,EAQD,kBAACga,GAAD,uBACkB,IAChB,kBAACS,GAAD,CACEhiB,QAAS,WACP6f,EAAWz2B,KAAK,kBAAC,GAAD,CAAWk2B,OAAO,OAFtC,kBAOC,GAOH,kBAACze,GAAD,CAASnE,MAAO,CAAE2gB,UAAWrhB,MA5D/B,UA6DGwmB,EAAYpoB,eA7Df,aA6DG,EAAqBkB,KAAI,SAACuoB,EAAM1oB,GAC/B,IAAI+mB,GAAsB,EAQ1B,OANEM,EAAYpoB,SACZe,IAAUqnB,EAAYpoB,QAAQoG,OAAS,IAEvC0hB,GAAa,GAIb,kBAAC,GAAD,CACEniB,IAAK8jB,EACLtO,MAAOsO,EACP3B,WAAYA,QAKpB,kBAAChB,GAAD,KACE,kBAAC,GAAD,CACEP,yBAA0BA,EAC1BC,UAAWA,MAEP,OAAJl3B,QAAI,IAAJA,OAAA,EAAAA,EAAMmF,iCAAN,OACAnF,QADA,IACAA,OADA,EACAA,EAAMqF,6BACN,kBAAC0yB,GAAD,CAAkB5b,UAAW,wBAC3B,uCACI,OAACnc,QAAD,IAACA,OAAD,EAACA,EAAMmF,gCACP,kBAAC0yB,GAAD,CAAMziB,MAAI,GAAV,OAAYpV,QAAZ,IAAYA,OAAZ,EAAYA,EAAMmF,kCAElB,OAACnF,QAAD,IAACA,OAAD,EAACA,EAAMqF,4BACP,kBAACwyB,GAAD,CAAMziB,MAAI,GAAV,OAAYpV,QAAZ,IAAYA,OAAZ,EAAYA,EAAMqF,6BAK1B,kBAAC2yB,GAAD,KACE,kBAACC,GAAD,CACEpe,OAAQ,GACRD,MAAO,GACPpE,IAAK4kB,KACLxc,IAAI,qDAEN,kBAACsa,GAAD,KACE,kBAACL,GAAD,CAAMziB,MAAM,GAAZ,OAAmBpV,QAAnB,IAAmBA,OAAnB,EAAmBA,EAAMiF,eACzB,kBAAC4yB,GAAD,YAAO73B,QAAP,IAAOA,OAAP,EAAOA,EAAMkF,gBACb,kBAAC2yB,GAAD,WAMV,kBAACP,GAAD,KACE,kBAACI,GAAD,UACwBt9B,IAArB+I,GAC8B,MAA7BA,EAAiBpF,UACa,MAA9BoF,EAAiBnF,WACf,kBAAC,GAAD,KACG4kB,GACC,kBAAC,GAAD,CACElP,OAAQ,CACNvH,IAAKhJ,EAAiBpF,SACtBqO,IAAKjJ,EAAiBnF,WAExB6uB,KAAM,EACNlI,QAAO,gBACJxhB,EAAiBa,iBAAoB,CACpCgmB,OAAQ,IAAIxK,OAAOC,KAAK6L,OAAO,CAC7BC,SAAU,IAAI/L,OAAOC,KAAK+L,OACxBroB,EAAiBpF,SACjBoF,EAAiBnF,WAEnB+b,OAAQ,EACRsgB,WAAW,EACXvb,KAAMyC,GACJpe,EAAiBS,eACjBT,EAAiBgB,6BASnC,kBAACszB,GAAD,UACsBr9B,KAAf,OAAJ4F,QAAI,IAAJA,OAAA,EAAAA,EAAMiC,YAA8B,OAAJjC,QAAI,IAAJA,OAAA,EAAAA,EAAMiC,SAAS6U,QAAS,GACvD,kBAAC,GAAD,CAAe4b,IAAG,OAAE1yB,QAAF,IAAEA,OAAF,EAAEA,EAAMiC,cAKlC,kBAACiV,GAAD,KACE,kBAACC,GAAD,MACA,kBAACogB,GAAD,CAAsBvkB,MAAO,CAAE2gB,UAAW,IACxC,kBAAC6D,GAAD,KACE,kBAAC,GAAD,0BAEF,kBAACA,GAAD,KACE,kBAAC,GAAD,iBAGJ,kBAACD,GAAD,CAAsBvkB,MAAO,CAAE2gB,UAAW,IACxC,kBAAC6D,GAAD,KACE,kBAAC,GAAD,CACEz2B,MAAOk4B,EAAyBvoB,QAAQ3P,MACxCqzB,KAAM6E,EAAyBvoB,QAAQ0jB,KACvCI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOm4B,EAA2BxoB,QAAQ3P,MAC1CqzB,KAAM8E,EAA2BxoB,QAAQ0jB,KACzCI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOo4B,EAA4BzoB,QAAQ3P,MAC3CqzB,KAAM+E,EAA4BzoB,QAAQ0jB,KAC1CI,iBAAkBniB,MAGtB,kBAACmlB,GAAD,KACE,kBAAC,GAAD,CACEz2B,MAAOi4B,EAAoBtoB,QAAQ3P,MACnCqzB,KAAM4E,EAAoBtoB,QAAQ0jB,KAClCI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOq4B,EAAsB1oB,QAAQ3P,MACrCqzB,KAAMgF,EAAsB1oB,QAAQ0jB,KACpCI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOg4B,EAAkBroB,QAAQ3P,MACjCqzB,KAAM2E,EAAkBroB,QAAQ0jB,KAChCI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOs4B,EAA8B3oB,QAAQ3P,MAC7CqzB,KAAMiF,EAA8B3oB,QAAQ0jB,KAC5CI,iBAAkBniB,SAKzB,K,8cC7hBX,IAAMioB,GAAsBjnB,YAAOD,GAAPC,CAAH,MAInBkZ,GAAelZ,IAAOC,IAAV,KACKhB,GAEPA,IAGViF,GAAQlE,YAAOoI,GAAPpI,CAAH,KACKf,IAIVioB,GAAclnB,YAAO8D,GAAP9D,CAAH,MAocFmnB,GA/b8B,SAAC,GAAgB,IAAdv9B,EAAa,EAAbA,OACtC2lB,EAAiBE,KAAjBF,aACF6X,EAAa1qB,iBCjEZ,CACLhP,MAAO,GACPuzB,QAAS,EACTC,eAAe,EACfH,KAAM,CACJ,CAAE3zB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,UACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,mBACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,aAAc+yB,YAAY,MD2D/D4G,EAAkB3qB,iBCrDjB,CACLhP,MAAO,iBACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,aAAc+Q,MAAO,GAAIkB,KAAM,GACvC,CAAEjS,KAAM,yBAAuB+Q,MAAO,GAAIkB,KAAM,GAChD,CAAEjS,KAAM,sBAAoB+Q,MAAO,GAAIkB,KAAM,MDgD3CioB,EAAc5qB,iBC1Cb,CACLhP,MAAO,uBACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,yBAAoB+Q,MAAO,GAAIkB,KAAM,GAC7C,CAAEjS,KAAM,kBAAgB+Q,MAAO,GAAIkB,KAAM,MDsCvC/N,EAAQoL,iBCnBP,CACLhP,MAAO,OACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,iBACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,SACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,SACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,UACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,YAAa+yB,YAAY,GAChE,CAAErzB,KAAM,GAAI+Q,MAAO,aAAckB,KAAM,GACvC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,aAAckB,KAAM,GACvC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,WAAYkB,KAAM,GACrC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,QAASkB,KAAM,GAClC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,eAAakB,KAAM,GACtC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,MDvB1C8G,EAAwB7qB,iBAAe,GAEzC8qB,EAAkB,SAAC/8B,KARoC,EAUXuR,wBAE9CjV,GAZyD,mBAUpD+I,EAVoD,KAUlCy1B,EAVkC,OAcXvpB,wBAE9CjV,GAhByD,mBAcpD0gC,EAdoD,KAclCC,EAdkC,OAkBf1rB,mBAE1C,IApByD,mBAkBpD2rB,EAlBoD,KAkBpCC,EAlBoC,KAsB3D3pB,qBAAU,WACR,IAAM4pB,EAAmB,uCAAG,WAAOhY,GAAP,SAAA/R,EAAA,uDACX,IAAI/U,GAEhB++B,iBACCH,EAAe,GAAGl9B,GAClBk9B,EAAe,GAAGj9B,SAClBi9B,EAAe,GAAGh9B,UAClBg9B,EAAe,GAAG/8B,UAClB+8B,EAAe,GAAG98B,cAClB88B,EAAe,GAAG78B,KAClB+kB,EAAW7oB,QAEZM,MAAK,SAACtB,GACL,GAAIA,GAAYA,EAAS6E,cAAe,CACtC,IAAIk9B,EAAUX,EAAW/pB,QAErB2qB,EAAcL,EAAeppB,KAAI,SAACnS,GACpC,GACEA,EAAK1B,WAAai9B,EAAe,GAAGj9B,UACpC0B,EAAKzB,YAAcg9B,EAAe,GAAGh9B,UACrC,CACA,IAAIs9B,EAAU77B,EASd,OARA67B,EAAQr9B,WAAY,EACpBq9B,EAAQp9B,cAAgB7E,EAAS6E,cACjCo9B,EAAQn9B,KAAO9E,EAAS8E,KACxBi9B,EAAQhH,KAAK30B,EAAK87B,gBAAgB96B,KAAO,GACzC26B,EAAQhH,KACN30B,EAAK87B,gBACL/pB,MAAQnY,EAAS6E,cAEZ,KAGT,OAAOuB,KAGTg7B,EAAW/pB,QAAU0qB,EACrBH,EACEI,EAAYtS,QACV,SAACC,EAAKC,GACJ,OAAY,MAARA,EACKD,EAEH,GAAN,oBAAWA,GAAX,CAAgBC,MAElB,SAKPwQ,OAAM,SAACC,GAAD,OAAW9/B,QAAQC,IAAI6/B,MAlDN,2CAAH,sDAqDnBxW,EAAa,IAAIC,gBAOvB,OANAvpB,QAAQC,IAAImhC,GAERA,EAAelkB,OAAS,GAC1BokB,EAAoBhY,GAGf,kBAAMA,EAAWI,WACvB,CAAC0X,IAEJ1pB,qBAAU,WACR,IAAMkqB,EAAoB,uCAAG,WAAOtY,GAAP,SAAA/R,EAAA,uDACZ,IAAI/U,GAEhBo/B,qBAAqBv+B,EAAQimB,EAAW7oB,QACxCM,MAAK,SAACtB,GACLoiC,EAAiCpiC,GACjCmgC,EAAwBngC,EAAS8J,kBACjCu4B,EAAuBriC,EAAS+J,cAEjCq2B,OAAM,SAACC,GAAD,OAAW9/B,QAAQC,IAAI6/B,MATL,2CAAH,sDAYpBxW,EAAa,IAAIC,gBAIvB,OAFAqY,EAAqBtY,GAEd,WACLA,EAAWI,QACXmX,EAAW/pB,QCxKR,CACL3P,MAAO,GACPuzB,QAAS,EACTC,eAAe,EACfH,KAAM,CACJ,CAAE3zB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,UACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,mBACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,aAAc+yB,YAAY,KDkKjE4G,EAAgBhqB,QC5Jb,CACL3P,MAAO,iBACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,aAAc+Q,MAAO,GAAIkB,KAAM,GACvC,CAAEjS,KAAM,yBAAuB+Q,MAAO,GAAIkB,KAAM,GAChD,CAAEjS,KAAM,sBAAoB+Q,MAAO,GAAIkB,KAAM,KDuJ7CioB,EAAYjqB,QCjJT,CACL3P,MAAO,uBACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,yBAAoB+Q,MAAO,GAAIkB,KAAM,GAC7C,CAAEjS,KAAM,kBAAgB+Q,MAAO,GAAIkB,KAAM,KD6IzC/N,EAAM+L,QC1HH,CACL3P,MAAO,OACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,iBACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,SACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,SACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,UACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,YAAa+yB,YAAY,GAChE,CAAErzB,KAAM,GAAI+Q,MAAO,aAAckB,KAAM,GACvC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,aAAckB,KAAM,GACvC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,WAAYkB,KAAM,GACrC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,QAASkB,KAAM,GAClC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,GAC5C,CAAErzB,KAAM,GAAI+Q,MAAO,eAAakB,KAAM,GACtC,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,GAC7B,CAAEjS,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAGohB,YAAY,KDgF5C8E,OAAoBx+B,GACpB2gC,OAAoB3gC,GACpB6gC,EAAkB,OAEnB,CAACh+B,IAEJ,IAAMw+B,EAAmC,SACvCpiC,GACI,IAAD,MACHohC,EAAW/pB,QAAQ0jB,KAAOqG,EAAW/pB,QAAQ0jB,KAAKuH,OAAO,EAAG,GAC5Df,EAAsBlqB,QAAUrX,EAAS+J,UACrC/J,EAAS+J,UAAU0T,OACnB,EAGJ,UAAAzd,EAAS+J,iBAAT,SAAoBzG,MAAK,SAAUwU,EAAGqd,GACpC,OAAIrd,EAAEpN,aAAgByqB,EAAEzqB,aAAsB,EAC1CoN,EAAEpN,aAAgByqB,EAAEzqB,cAAuB,EACxC,KAGT,IAAI63B,EAAsC,GAE1C,UAAAviC,EAAS+J,iBAAT,SAAoBwO,KAAI,SAACiqB,EAAIpqB,GAAW,IAAD,IACjCqqB,GAAY,IAEZD,EAAG39B,eAAiB29B,EAAG99B,UAAY89B,EAAG79B,WAClB,WAArB69B,EAAG39B,eAA8B29B,EAAG99B,UAAY89B,EAAG79B,aAEpD89B,GAAY,EACZF,EAASl8B,KAAK,CACZ5B,GAAI+9B,EAAG/9B,GACPC,SAAU89B,EAAG99B,SACbC,UAAW69B,EAAG79B,UACdu9B,eAA8B,GAAb9pB,EAAQ,GACzBxT,WAAW,KAIf,IAAMC,EAAa,UAAG29B,EAAG39B,qBAAN,QAAuB,GAEtC49B,EACFrB,EAAW/pB,QAAQ0jB,KAAK10B,KAAK,CAC3Be,KAAM,SACN+Q,MACE,0BAAMwB,MAAO,CAAE7L,MAAO,YACnB00B,EAAG99B,SADN,KACkB89B,EAAG79B,WAGvB0U,KAAM+nB,EAAW/pB,QAAQ0jB,KAAK,GAAG1hB,KACjCjB,MAAOoqB,EAAG73B,mBAGZy2B,EAAW/pB,QAAQ0jB,KAAK10B,KAAK,CAC3Be,KAAM,GACN+Q,MAAOtT,EACPwU,KAAM+nB,EAAW/pB,QAAQ0jB,KAAK,GAAG1hB,KACjCjB,MAAOoqB,EAAG73B,mBAIdy2B,EAAW/pB,QAAQ0jB,KAAK10B,KAAK,CAC3Be,KAAM,GACN+Q,MAAK,UAAEqqB,EAAGh4B,oBAAL,QAAqB,GAC1B6O,KAAM+nB,EAAW/pB,QAAQ0jB,KAAK,GAAG1hB,KACjCjB,MAAOoqB,EAAG73B,mBAEZy2B,EAAW/pB,QAAQ0jB,KAAK10B,KAAK,CAC3Be,KAAM,GACN+Q,MAAM,GAAD,OAAKuF,KAAM8kB,EAAG93B,cAAciT,OAAO,wBACxCtE,KAAM+nB,EAAW/pB,QAAQ0jB,KAAK,GAAG1hB,KACjCohB,YAAY,EACZriB,MAAOoqB,EAAG73B,sBAIV3K,EAASmK,WACXmB,EAAM+L,QAAU,CACd3P,MAAO,OACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,6CACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,qCACvC,CAAEN,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,EAAG3R,MAAO,qCACvC,CACEN,KAAM,GACN+Q,MAAO,GACPkB,KAAM,EACN3R,MAAO,qCACP+yB,YAAY,GAEd,CACErzB,KAAM,GACN+Q,MAAO,GACPkB,KAAM,EACN3R,MAAO,oCACP+yB,YAAY,MAKpB,IAAIiI,EAAM,EACV,UAAA1iC,EAASmK,gBAAT,SAAmBtI,SAAQ,SAAC8gC,EAASC,GAAkB,IAAD,IACpD,UAAAD,EAAQ53B,oBAAR,SAAsBlJ,SAAQ,SAACghC,GAAU,IAAD,MACtCv3B,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CACtBe,KAAM,GACN+Q,MAAK,UAAE0qB,EAAK13B,kBAAP,QAAqB,GAC1BkO,KAAM,IAER/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAK,UAAE0qB,EAAKz3B,WAAP,QAAc,GAAIiO,KAAM,IACjE/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CACtBe,KAAM,GACN+Q,MAAK,UAAE0qB,EAAKx3B,iBAAP,QAAoB,GACzBgO,KAAM,IAER/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CACtBe,KAAM,GACN+Q,MAAO0qB,EAAKv3B,MAAQu3B,EAAKv3B,MAAMgS,QAAQ,GAAK,GAC5CjE,KAAM,EACNohB,YAAY,IAEdnvB,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CACtBe,KAAM,GACN+Q,MAAO0qB,EAAKt3B,WAAas3B,EAAKt3B,WAAW+R,QAAQ,GAAK,GACtDjE,KAAM,EACNohB,YAAY,IAEd,IAAIqI,EAAiBD,EAAKv3B,MACtB+R,WAAWwlB,EAAKv3B,MAAOgS,QAAQ,IAC/B,EACJolB,GAAYI,KAGd,IAAMC,EC9QsB,SAChCC,EACAC,GAIA,IAFA,IAAMC,EAAuB,GAEpBvb,EAAI,EAAGA,EAAIqb,EAAiBrb,IAAK,CAAC,IAAD,EACxCub,EAAI78B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,GAAIkB,KAAI,UAAE4pB,EAAOtb,UAAT,QAAe,IAGrD,OAAOub,EDoQoBC,CAAmB,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,IAC1D73B,EAAM+L,QAAQ0jB,KAAd,uBAAyBzvB,EAAM+L,QAAQ0jB,MAAvC,aAAgDgI,IAEhDz3B,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,oCAAckB,KAAM,IAC/D/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,KAC3C7M,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,IACrD/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,IACrD/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CACtBe,KAAM,GACN+Q,MAAOuqB,EAAIplB,QAAQ,GACnBjE,KAAM,EACNohB,YAAY,IAEdnvB,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,mCAAakB,KAAM,IAC9D/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,KAC3C7M,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,IACrD/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,IACrD/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CACtBe,KAAM,GACN+Q,MAAOwqB,EAAQ13B,UAAY03B,EAAQ13B,UAAUqS,QAAQ,GAAK,GAC1DjE,KAAM,EACNohB,YAAY,IAGdnvB,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,oCAAckB,KAAM,IAC/D/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,IACrD/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,IACrD/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CAAEe,KAAM,GAAI+Q,MAAO,GAAIkB,KAAM,IACrD/N,EAAM+L,QAAQ0jB,KAAK10B,KAAK,CACtBe,KAAM,GACN+Q,MAAOwqB,EAAQ33B,cAAgB23B,EAAQ33B,cAAcsS,QAAQ,GAAK,GAClEjE,KAAM,EACNohB,YAAY,IAIZz6B,EAASmK,WACT,UAAAnK,EAASmK,gBAAT,eAAmBsT,QAAS,GAC5BmlB,EAAe,IAAM5iC,EAASmK,SAASsT,SAEvCnS,EAAM+L,QAAQ0jB,KAAd,uBACKzvB,EAAM+L,QAAQ0jB,MADnB,aAEKgI,GAFL,aAGKA,GAHL,aAIKA,QAKTnB,EAAkBW,IAGdpC,EAA0B,SAC9Br2B,QAEyB/I,IAArB+I,GACFy1B,EAAoBz1B,IAIlBu4B,EAAyB,SAC7Be,GAEA,GAAIA,EAAiB,CACnB,IAAMC,EAAyB,CAC7Bz5B,GAAaud,mBACbvd,GAAawd,kBACbxd,GAAayd,WAIXic,EAAqB,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAiB//B,QAC3C,SAACmY,GAAD,OAAQ6nB,EAAuBE,SAAS/nB,EAAEjR,mBAI5C+4B,EAAwBA,EAAsBjgC,QAC5C,SAACmY,GAAD,YAAsBza,IAAfya,EAAE9W,eAA0C3D,IAAhBya,EAAE7W,aAGvC+8B,EAAoB4B,KAQxB,OACE,kBAACrC,GAAD,UACwBlgC,IAArB+I,GAAkC,kBAAC,GAAD,CAAQuQ,QAAQ,IAClDvQ,GACC,oCACE,kBAAC,GAAD,yBACA,kBAAC+T,GAAD,KACE,kBAAC,GAAD,CACEnW,MAAO05B,EAAW/pB,QAAQ3P,MAC1BuzB,QAASmG,EAAW/pB,QAAQ4jB,QAC5BF,KAAMqG,EAAW/pB,QAAQ0jB,KACzBG,cAAekG,EAAW/pB,QAAQ6jB,cAElCje,SACG,OAACnT,QAAD,IAACA,OAAD,EAACA,EAAkBpF,YAAa,OAACoF,QAAD,IAACA,OAAD,EAACA,EAAkBnF,WAlB3C,SAACyB,GACtBo7B,EAAgBp7B,EAAKgS,MAAOpP,kBAmBZjI,UAIYA,IAArB+I,KACGA,EAAiBpF,YACjBoF,EAAiBnF,WACW,IAA9BmF,EAAiBpF,UACc,IAA/BoF,EAAiBnF,gBACI5D,IAArB0gC,GACE,kBAAC,GAAD,KACGlY,GACC,kBAAC,GAAD,CACElP,OACE,IAAI8L,OAAOC,KAAK+L,OACdroB,EAAiBpF,SACjBoF,EAAiBnF,WAGrB+vB,SACE6M,EAAsBlqB,QACtBoqB,EAAiB/R,QAAO,SAACgT,EAAKc,GAC5B,OACIA,EAAI9+B,UACJ8+B,EAAI7+B,WACW,IAAjB6+B,EAAI9+B,UACc,IAAlB8+B,EAAI7+B,UAEG+9B,EAAM,EAENA,IAER,GAELpX,QAASmW,EAAiB/R,QACxB,SAACC,EAAKC,EAAMxX,GACV,GACIwX,EAAKlrB,UACLkrB,EAAKjrB,WACW,IAAlBirB,EAAKlrB,UACc,IAAnBkrB,EAAKjrB,UACL,CAAC,IAAD,IACIgC,EAAO,GAIXA,EAAK0uB,KAAO,CACV3tB,MAAOkoB,EAAKplB,aACZurB,KAAMnG,EAAKllB,aACPgT,KAAMkS,EAAKllB,cAAciT,OACvB,uBAEF,GACJ/S,iBAAgB,UAAEglB,EAAKhlB,wBAAP,QAA2B,KAC3CC,mBAAkB,UAAE+kB,EAAK/kB,0BAAP,QAA6B,MAGjDlE,EAAKgqB,OAAS,IAAIxK,OAAOC,KAAK6L,OAAO,CACnCC,SAAU,IAAI/L,OAAOC,KAAK+L,OACxBvC,EAAKlrB,SACLkrB,EAAKjrB,WAEP+b,OAAQ,EACRsgB,WAAW,EACXvb,KAAMwC,GAAwB7P,EAAQ,KAExCuX,EAAIC,EAAKjlB,kBAAqBhE,EAEhC,OAAOgpB,IAET,IAOFuG,uBAAwB,SAACuN,GACvBjC,EAAkBiC,GAEpBjQ,KAAM,MAKhB,kBAAC,GAAD,aACA,kBAAC0N,GAAD,MACA,kBAACrjB,GAAD,KACE,kBAAC,GAAD,CACEyc,UAAW,GACX5yB,MAAO4D,EAAM+L,QAAQ3P,MACrBuzB,QAAS3vB,EAAM+L,QAAQ4jB,QACvBF,KAAMzvB,EAAM+L,QAAQ0jB,WEhfrB2I,GAAwC,SACnD1jC,GACiD,IAAD,kFA8KhD,MAAO,CACL2jC,gBA9KoB,CACpBj8B,MAAO,+BACPqzB,KAAM,CACJ,CAAE3zB,KAAM,iBAAkB+Q,MAAM,GAAD,iBAAKnY,EAASqF,oBAAd,QAA8B,KAC7D,CACE+B,KAAM,WACN+Q,MAAM,GAAD,iBACHuF,KAAM1d,EAASgN,mBAAmB2Q,OAAO,8BADtC,QACgE,KAGvE,CAAEvW,KAAM,WAAS+Q,MAAM,GAAD,iBAAKnY,EAASiN,kBAAd,QAA4B,OAqKpD22B,kBAjKsB,CACtBl8B,MAAO,mBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,aAAc+Q,MAAM,GAAD,iBAAKnY,EAASyI,oBAAd,QAA8B,KACzD,CACErB,KAAM,yBACN+Q,MAAM,GAAD,iBAAKnY,EAASkN,2BAAd,QAAqC,KAE5C,CAAE9F,KAAM,cAAY+Q,MAAM,GAAD,iBAAKnY,EAAS+L,gBAAd,QAA0B,KACnD,CACE3E,KAAM,0BACN+Q,MAAM,GAAD,iBAAKnY,EAASmN,2BAAd,QAAqC,OAuJ9C02B,oBAlJwB,CACxBn8B,MAAO,GACPqzB,KAAM,CACJ,CAAE3zB,KAAM,aAAc+Q,MAAM,GAAD,iBAAKnY,EAAS6E,qBAAd,QAA+B,KAC1D,CAAEuC,KAAM,MAAO+Q,MAAM,GAAD,iBAAKnY,EAAS8E,YAAd,QAAsB,KAC1C,CAAEsC,KAAM,WAAS+Q,MAAM,GAAD,iBAAKnY,EAASwK,oBAAd,QAA8B,KACpD,CAAEpD,KAAM,WAAY+Q,MAAM,GAAD,iBAAKnY,EAAS2E,iBAAd,QAA2B,KACpD,CAAEyC,KAAM,UAAW+Q,MAAM,GAAD,iBAAKnY,EAAS0E,gBAAd,QAA0B,KAClD,CAAE0C,KAAM,aAAc+Q,MAAM,GAAD,iBAAKnY,EAASyK,2BAAd,QAAqC,KAChE,CACErD,KAAM,2BACN+Q,MAAM,GAAD,iBAAKnY,EAASoM,0BAAd,QAAoC,KAE3C,CACEhF,KAAM,4BACN+Q,MAAM,GAAD,iBAAKnY,EAASmM,yBAAd,QAAmC,OAoI5C23B,qBA/HyB,CACzBp8B,MAAO,uBACPqzB,KAAM,CACJ,CACE3zB,KAAM,6BACN+Q,MAAM,GAAD,iBAAKnY,EAASkM,6BAAd,QAAuC,KAE9C,CACE9E,KAAM,0CACN+Q,MAAM,GAAD,iBAAKnY,EAASoN,iCAAd,QAA2C,OAuHpD22B,oBAlHwB,CACxBr8B,MAAO,2BACPqzB,KAAM,CACJ,CACE3zB,KAAM,+BACN+Q,MAAOnY,EAASqN,sBAAT,UACAqQ,KAAM1d,EAASqN,uBACfwzB,MACAljB,OAAO,eACV,IAEN,CAAEvW,KAAM,6BAAqB+Q,MAAM,GAAD,iBAAKnY,EAASsN,eAAd,QAAyB,KAC3D,CACElG,KAAM,gDACN+Q,MAAOnY,EAASuN,YAAT,UACAmQ,KAAM1d,EAASuN,aAAaszB,MAAMljB,OAAO,eAC5C,IAEN,CACEvW,KAAM,oBACN+Q,MAAOnY,EAASwN,oBAAT,UACAkQ,KAAM1d,EAASwN,qBAAqBqzB,MAAMljB,OAAO,eACpD,IAEN,CAAEvW,KAAM,qBAAmB+Q,MAAM,GAAD,iBAAKnY,EAASyN,mBAAd,QAA6B,OA2F/Du2B,mBAvFuB,CACvBt8B,MAAO,qBACPuzB,QAAS,EACTF,KAAM,CACJ,CACE3zB,KAAM,sBACN+Q,MAAM,GAAD,iBAAKnY,EAAS2I,0BAAd,QAAoC,IACzC0Q,KAAM,GAER,CAAEjS,KAAM,WAAY+Q,MAAM,GAAD,iBAAKnY,EAAS0N,kBAAd,QAA4B,IAAM2L,KAAM,GACjE,CAAEjS,KAAM,aAAc+Q,MAAM,GAAD,iBAAKnY,EAAS6N,mBAAd,QAA6B,IAAMwL,KAAM,GACpE,CAAEjS,KAAM,YAAU+Q,MAAM,GAAD,iBAAKnY,EAAS8N,aAAd,QAAuB,IAAMuL,KAAM,GAC1D,CACEjS,KAAM,qBACN+Q,MAAM,GAAD,iBAAKnY,EAAS+N,oCAAd,QAA8C,IACnDsL,KAAM,GAER,CACEjS,KAAM,eACN+Q,MAAM,GAAD,iBAAKnY,EAASgO,qBAAd,QAA+B,IACpCqL,KAAM,GAER,CACEjS,KAAM,mBACN+Q,MAAM,GAAD,iBAAMnY,EAAS2N,kBAAoB,KAAO,aAA1C,QAAoD,IACzD0L,KAAM,GAER,CACEjS,KAAM,eACN+Q,MAAM,GAAD,iBAAKnY,EAASiO,uBAAd,QAAiC,IACtCoL,KAAM,GAER,CACEjS,KAAM,yBACN+Q,MAAM,GAAD,iBAAKnY,EAAS4N,4BAAd,QAAsC,IAC3CyL,KAAM,GAER,CACEjS,KAAM,uBACN+Q,MAAM,GAAD,iBAAKnY,EAASkO,uBAAd,QAAiC,IACtCmL,KAAM,GAER,CAAEjS,KAAM,WAAS+Q,MAAM,GAAD,iBAAKnY,EAAS0I,aAAd,QAAuB,IAAM2Q,KAAM,KA8C3D4qB,qBA1CyB,CACzBv8B,MAAO,+BACPqzB,KAAM,CACJ,CACE3zB,KAAM,yBACN+Q,MAAM,GAAD,iBAAKnY,EAASmO,wBAAd,QAAkC,KAEzC,CACE/G,KAAM,wBACN+Q,MAAM,GAAD,iBAAKnY,EAASoO,qCAAd,QAA+C,KAEtD,CAAEhH,KAAM,iBAAkB+Q,MAAM,GAAD,iBAAKnY,EAASqO,qBAAd,QAA+B,OAgChE61B,iBA5BqB,CACrBx8B,MAAO,qBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,OAAQ+Q,MAAM,GAAD,iBAAKnY,EAASsO,qBAAd,QAA+B,KACpD,CACElH,KAAM,oBACN+Q,MAAM,GAAD,iBAAKnY,EAASuO,iCAAd,QAA2C,KAElD,CAAEnH,KAAM,gBAAiB+Q,MAAM,GAAD,iBAAKnY,EAASwO,kBAAd,QAA4B,KAC1D,CACEpH,KAAM,qBACN+Q,MAAM,GAAD,iBAAKnY,EAASyO,wBAAd,QAAkC,KAEzC,CAAErH,KAAM,SAAU+Q,MAAM,GAAD,iBAAKnY,EAAS0O,0BAAd,QAAoC,KAC3D,CAAEtH,KAAM,aAAc+Q,MAAM,GAAD,iBAAKnY,EAAS2O,oBAAd,QAA8B,KACzD,CAAEvH,KAAM,UAAW+Q,MAAM,GAAD,iBAAKnY,EAAS4O,iBAAd,QAA2B,KACnD,CAAExH,KAAM,OAAQ+Q,MAAM,GAAD,iBAAKnY,EAAS6O,oBAAd,QAA8B,SAgB5CsxB,GAA0B,SACrCngC,GAEA,MAAO,CACL6E,cAAe7E,EAAS6E,cACxB0F,eAAgBvK,EAASuK,eACzBC,aAAcxK,EAASwK,aACvBE,aAAc1K,EAAS0K,aACvBhG,SAAU1E,EAAS0E,SACnBC,UAAW3E,EAAS2E,Y,mrBCxKxB+Y,KAAMiY,OAAOoI,MAEb,IAAMoG,GAA2BnqB,YAAOD,GAAPC,CAAH,MAIxBkE,GAAQlE,YAAOoI,GAAPpI,CAAH,KACKf,GACGA,IAGbmrB,GAAepqB,YAAO8D,GAAP9D,CAAH,MAIZqqB,GAAWrqB,IAAO4gB,GAAV,KAEC7hB,GAECE,GACGA,IAIbia,GAAelZ,IAAOC,IAAV,KACKhB,IA2LRqrB,GAjLmC,SAAC,GAAgB,IAAd1gC,EAAa,EAAbA,OAC3C2lB,EAAiBhN,qBAAW8O,IAA5B9B,aADwD,EAGxCvT,wBAEtBjV,GAL8D,mBAGzD4F,EAHyD,KAGnD24B,EAHmD,KAO1DqE,EAAkBjtB,iBC9EjB,CACLhP,MAAO,+BACPqzB,KAAM,CACJ,CAAE3zB,KAAM,iBAAkB+Q,MAAO,IACjC,CAAE/Q,KAAM,WAAY+Q,MAAO,IAC3B,CAAE/Q,KAAM,WAAS+Q,MAAO,OD0EtByrB,EAAoBltB,iBCpEnB,CACLhP,MAAO,mBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,aAAc+Q,MAAO,IAC7B,CAAE/Q,KAAM,yBAA0B+Q,MAAO,IACzC,CAAE/Q,KAAM,cAAY+Q,MAAO,IAC3B,CAAE/Q,KAAM,0BAAwB+Q,MAAO,OD+DrC0rB,EAAsBntB,iBCzDrB,CACLhP,MAAO,GACPqzB,KAAM,CACJ,CAAE3zB,KAAM,aAAc+Q,MAAO,IAC7B,CAAE/Q,KAAM,MAAO+Q,MAAO,IACtB,CAAE/Q,KAAM,WAAS+Q,MAAO,IACxB,CAAE/Q,KAAM,WAAY+Q,MAAO,cAC3B,CAAE/Q,KAAM,UAAW+Q,MAAO,aAC1B,CAAE/Q,KAAM,aAAc+Q,MAAO,IAC7B,CAAE/Q,KAAM,2BAAyB+Q,MAAO,IACxC,CAAE/Q,KAAM,4BAA0B+Q,MAAO,ODkDvC2rB,EAAuBptB,iBC5CtB,CACLhP,MAAO,uBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,6BAA2B+Q,MAAO,IAC1C,CAAE/Q,KAAM,0CAAqC+Q,MAAO,OD2ClD4rB,EAAsBrtB,iBCrCrB,CACLhP,MAAO,2BACPqzB,KAAM,CACJ,CAAE3zB,KAAM,+BAA6B+Q,MAAO,IAC5C,CAAE/Q,KAAM,6BAAqB+Q,MAAO,IACpC,CAAE/Q,KAAM,gDAAqC+Q,MAAO,IACpD,CAAE/Q,KAAM,oBAAkB+Q,MAAO,IACjC,CAAE/Q,KAAM,qBAAmB+Q,MAAO,ODiChC6rB,EAAqBttB,iBC3BpB,CACLhP,MAAO,qBACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,sBAAuB+Q,MAAO,GAAIkB,KAAM,GAChD,CAAEjS,KAAM,WAAY+Q,MAAO,GAAIkB,KAAM,GACrC,CAAEjS,KAAM,aAAc+Q,MAAO,GAAIkB,KAAM,GACvC,CAAEjS,KAAM,YAAU+Q,MAAO,GAAIkB,KAAM,GACnC,CAAEjS,KAAM,qBAAsB+Q,MAAO,GAAIkB,KAAM,GAC/C,CAAEjS,KAAM,eAAgB+Q,MAAO,GAAIkB,KAAM,GACzC,CAAEjS,KAAM,mBAAiB+Q,MAAO,GAAIkB,KAAM,GAC1C,CAAEjS,KAAM,eAAgB+Q,MAAO,GAAIkB,KAAM,GACzC,CAAEjS,KAAM,yBAAuB+Q,MAAO,GAAIkB,KAAM,GAChD,CAAEjS,KAAM,uBAAkB+Q,MAAO,GAAIkB,KAAM,GAC3C,CAAEjS,KAAM,WAAS+Q,MAAO,GAAIkB,KAAM,MDgBhC4qB,EAAuBvtB,iBCVtB,CACLhP,MAAO,+BACPqzB,KAAM,CACJ,CAAE3zB,KAAM,yBAAoB+Q,MAAO,IACnC,CAAE/Q,KAAM,wBAAyB+Q,MAAO,IACxC,CAAE/Q,KAAM,iBAAkB+Q,MAAO,ODQ/B+rB,EAAmBxtB,iBCFlB,CACLhP,MAAO,qBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,OAAQ+Q,MAAO,IACvB,CAAE/Q,KAAM,oBAAqB+Q,MAAO,OD1BwB,EA0BhBnC,wBAE9CjV,GA5B8D,mBA0BzD+I,EA1ByD,KA0BvCy1B,EA1BuC,KA8BhEtnB,qBAAU,WACR,IAAMssB,EAAyB,uCAAG,WAAO1a,GAAP,SAAA/R,EAAA,uDACjB,IAAI/U,GAEhBwhC,0BAA0B3gC,EAAQimB,EAAW7oB,QAC7CM,MAAK,SAACtB,GACL,IAAMwkC,EAAqBd,GACzB1jC,GAEF2jC,EAAgBtsB,QAAUmtB,EAAmBb,gBAC7CC,EAAkBvsB,QAAUmtB,EAAmBZ,kBAC/CC,EAAoBxsB,QAAUmtB,EAAmBX,oBACjDC,EAAqBzsB,QACnBmtB,EAAmBV,qBACrBC,EAAoB1sB,QAAUmtB,EAAmBT,oBACjDC,EAAmB3sB,QAAUmtB,EAAmBR,mBAChDC,EAAqB5sB,QACnBmtB,EAAmBP,qBACrBC,EAAiB7sB,QAAUmtB,EAAmBN,iBAC9C3E,EAAoBY,GAAwBngC,IAC5Cs/B,EAAQt/B,MAETogC,OAAM,SAACC,GAAD,OAAW9/B,QAAQC,IAAI6/B,MArBA,2CAAH,sDAwBzBxW,EAAa,IAAIC,gBAKvB,OAHA2a,IACAF,EAA0B1a,GAEnB,kBAAMA,EAAWI,WACvB,CAACrmB,IAEJ,IAAM6gC,EAAY,WAChBd,EAAgBtsB,QCvIX,CACL3P,MAAO,+BACPqzB,KAAM,CACJ,CAAE3zB,KAAM,iBAAkB+Q,MAAO,IACjC,CAAE/Q,KAAM,WAAY+Q,MAAO,IAC3B,CAAE/Q,KAAM,WAAS+Q,MAAO,MDmI1ByrB,EAAkBvsB,QC7Hb,CACL3P,MAAO,mBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,aAAc+Q,MAAO,IAC7B,CAAE/Q,KAAM,yBAA0B+Q,MAAO,IACzC,CAAE/Q,KAAM,cAAY+Q,MAAO,IAC3B,CAAE/Q,KAAM,0BAAwB+Q,MAAO,MDwHzC0rB,EAAoBxsB,QClHf,CACL3P,MAAO,GACPqzB,KAAM,CACJ,CAAE3zB,KAAM,aAAc+Q,MAAO,IAC7B,CAAE/Q,KAAM,MAAO+Q,MAAO,IACtB,CAAE/Q,KAAM,WAAS+Q,MAAO,IACxB,CAAE/Q,KAAM,WAAY+Q,MAAO,cAC3B,CAAE/Q,KAAM,UAAW+Q,MAAO,aAC1B,CAAE/Q,KAAM,aAAc+Q,MAAO,IAC7B,CAAE/Q,KAAM,2BAAyB+Q,MAAO,IACxC,CAAE/Q,KAAM,4BAA0B+Q,MAAO,MDyG3C2rB,EAAqBzsB,QCnGhB,CACL3P,MAAO,uBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,6BAA2B+Q,MAAO,IAC1C,CAAE/Q,KAAM,0CAAqC+Q,MAAO,MDgGtD4rB,EAAoB1sB,QC1Ff,CACL3P,MAAO,2BACPqzB,KAAM,CACJ,CAAE3zB,KAAM,+BAA6B+Q,MAAO,IAC5C,CAAE/Q,KAAM,6BAAqB+Q,MAAO,IACpC,CAAE/Q,KAAM,gDAAqC+Q,MAAO,IACpD,CAAE/Q,KAAM,oBAAkB+Q,MAAO,IACjC,CAAE/Q,KAAM,qBAAmB+Q,MAAO,MDoFpC6rB,EAAmB3sB,QC9Ed,CACL3P,MAAO,qBACPuzB,QAAS,EACTF,KAAM,CACJ,CAAE3zB,KAAM,sBAAuB+Q,MAAO,GAAIkB,KAAM,GAChD,CAAEjS,KAAM,WAAY+Q,MAAO,GAAIkB,KAAM,GACrC,CAAEjS,KAAM,aAAc+Q,MAAO,GAAIkB,KAAM,GACvC,CAAEjS,KAAM,YAAU+Q,MAAO,GAAIkB,KAAM,GACnC,CAAEjS,KAAM,qBAAsB+Q,MAAO,GAAIkB,KAAM,GAC/C,CAAEjS,KAAM,eAAgB+Q,MAAO,GAAIkB,KAAM,GACzC,CAAEjS,KAAM,mBAAiB+Q,MAAO,GAAIkB,KAAM,GAC1C,CAAEjS,KAAM,eAAgB+Q,MAAO,GAAIkB,KAAM,GACzC,CAAEjS,KAAM,yBAAuB+Q,MAAO,GAAIkB,KAAM,GAChD,CAAEjS,KAAM,uBAAkB+Q,MAAO,GAAIkB,KAAM,GAC3C,CAAEjS,KAAM,WAAS+Q,MAAO,GAAIkB,KAAM,KDiEpC4qB,EAAqB5sB,QC3DhB,CACL3P,MAAO,+BACPqzB,KAAM,CACJ,CAAE3zB,KAAM,yBAAoB+Q,MAAO,IACnC,CAAE/Q,KAAM,wBAAyB+Q,MAAO,IACxC,CAAE/Q,KAAM,iBAAkB+Q,MAAO,MDuDnC+rB,EAAiB7sB,QCjDZ,CACL3P,MAAO,qBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,OAAQ+Q,MAAO,IACvB,CAAE/Q,KAAM,oBAAqB+Q,MAAO,ODgDxC,OACE,kBAACgsB,GAAD,UACYpjC,IAAT4F,GAAsB,kBAAC,GAAD,CAAQ0T,QAAQ,IACtC1T,GACC,oCACE,kBAACkX,GAAD,KACE,kBAAC,GAAD,oBACA,kBAACumB,GAAD,MACA,kBAAC,GAAD,CACE18B,MAAOi8B,EAAgBtsB,QAAQ3P,MAC/BqzB,KAAM4I,EAAgBtsB,QAAQ0jB,KAC9BI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOk8B,EAAkBvsB,QAAQ3P,MACjCqzB,KAAM6I,EAAkBvsB,QAAQ0jB,KAChCI,iBAAkBniB,UAEEjY,IAArB+I,GAC8B,MAA7BA,EAAiBpF,UACa,MAA9BoF,EAAiBnF,WACf,oCACE,kBAAC0/B,GAAD,yBACA,kBAAC,GAAD,KACG9a,GACC,kBAAC,GAAD,CACEiK,KAAM,EACNQ,aAAW,EACX3Z,OACE,IAAI8L,OAAOC,KAAK+L,OACdroB,EAAiBpF,SACjBoF,EAAiBnF,WAGrB2mB,QAAO,gBACJxhB,EAAiBa,iBAAoB,CACpCgmB,OAAQ,IAAIxK,OAAOC,KAAK6L,OAAO,CAC7BC,SAAU,IAAI/L,OAAOC,KAAK+L,OACxBroB,EAAiBpF,SACjBoF,EAAiBnF,WAEnB+b,OAAQ,EACRsgB,WAAW,EACXvb,KAAMyC,GACJpe,EAAiBS,eACjBT,EAAiBgB,8BAUrC,kBAAC,GAAD,CACEwvB,UAAW,GACX5yB,MAAOm8B,EAAoBxsB,QAAQ3P,MACnCszB,gBAAgB,EAChBD,KAAM8I,EAAoBxsB,QAAQ0jB,KAClCI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOo8B,EAAqBzsB,QAAQ3P,MACpCqzB,KAAM+I,EAAqBzsB,QAAQ0jB,KACnCI,iBAAkBniB,KAEpB,kBAAC,GAAD,eACA,kBAAC8E,GAAD,MACA,kBAAC,GAAD,CACEwc,UAAW,GACX5yB,MAAOq8B,EAAoB1sB,QAAQ3P,MACnCqzB,KAAMgJ,EAAoB1sB,QAAQ0jB,KAClCI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOs8B,EAAmB3sB,QAAQ3P,MAClCqzB,KAAMiJ,EAAmB3sB,QAAQ0jB,KACjCI,iBAAkBniB,GAClBiiB,QAAS,IAEX,kBAAC,GAAD,CACEX,UAAW,GACX5yB,MAAOu8B,EAAqB5sB,QAAQ3P,MACpCqzB,KAAMkJ,EAAqB5sB,QAAQ0jB,KACnCI,iBAAkBniB,KAEpB,kBAAC,GAAD,CACEshB,UAAW,GACX5yB,MAAOw8B,EAAiB7sB,QAAQ3P,MAChCqzB,KAAMmJ,EAAiB7sB,QAAQ0jB,KAC/BI,iBAAkBniB,SEhPnBkjB,GAA+B,CAC1Cx0B,MAAO,uBACPqzB,KAAM,CACJ,CAAE3zB,KAAM,OAAQ+Q,MAAO,IACvB,CAAE/Q,KAAM,SAAU+Q,MAAO,IACzB,CAAE/Q,KAAM,aAAc+Q,MAAO,M,8tBCSjC,IAAMusB,GAAsB1qB,YAAOD,GAAPC,CAAH,MAInBkE,GAAQlE,YAAOoI,GAAPpI,CAAH,KACKf,GACGA,IAGb0rB,GAAsB3qB,YAAOoI,GAAPpI,CAAH,KACTf,GACGA,IAEbmrB,GAAepqB,YAAO8D,GAAP9D,CAAH,MAIZ4qB,GAAkB5qB,IAAOC,IAAV,KAGHhB,IAGZqJ,GAAgBtI,IAAOC,IAAV,MAkHJ4qB,GAvG8B,SAAC,GAAgB,IAAdjhC,EAAa,EAAbA,OACxCm8B,EAAwBrpB,iBAC5BwlB,IAFyD,EAKjB3f,qBAAW3G,IAA7C5B,EALmD,EAKnDA,QAASuB,EAL0C,EAK1CA,WAAYb,EAL8B,EAK9BA,SAL8B,EAOnCsB,wBACtBjV,GARyD,mBAOpD4F,EAPoD,KAO9C24B,EAP8C,KAW3DrnB,qBAAU,WACR1C,GAAW,GAEX,IAAMuvB,EAAoB,uCAAG,WAAOjb,GAAP,SAAA/R,EAAA,uDACZ,IAAI/U,GAEhB+hC,qBAAqBlhC,EAAQimB,EAAW7oB,QACxCM,MAAK,SAACtB,GACLs/B,EAAQt/B,MAETogC,OAAM,SAACC,GAAD,OAAW9/B,QAAQC,IAAI6/B,MAPL,2CAAH,sDAUpBxW,EAAa,IAAIC,gBAKvB,OAHAgb,EAAqBjb,GACrBnV,EAAS9Q,GAEF,WACLimB,EAAWI,QACXqV,OAAQv+B,GACRg/B,EAAsB1oB,QAAU6kB,MAEjC,CAACt4B,IAEJqU,qBAAU,WACR8sB,EAAiCp+B,KAChC,CAACA,IAEJ,IAAMo+B,EAAmC,SACvC/kC,GAEe,IAAD,MAAd,GAAIA,IACF+/B,EAAsB1oB,QAAQ0jB,KAAK,GAAG5iB,MAAtC,UAA8CnY,EAAS8E,YAAvD,QAA+D,GAC/Di7B,EAAsB1oB,QAAQ0jB,KAAK,GAAG5iB,MAAtC,UACEnY,EAAS6E,qBADX,QAC4B,GAC5Bk7B,EAAsB1oB,QAAQ0jB,KAAK,GAAG5iB,MAAtC,UAA8CnY,EAAS8M,eAAvD,QAAkE,GAE9D9M,EAAS+M,cAAc,CACzB,IAAMi4B,EAAgBjF,EAAsB1oB,QAAQ0jB,KAAK13B,QACvD,SAACmY,GAAD,MAAkB,kBAAXA,EAAEpU,aAEWrG,IAAlBikC,GAAwD,IAAzBA,EAAcvnB,QAC/Czd,EAAS+M,aAAalL,SAAQ,SAACojC,GAC7BlF,EAAsB1oB,QAAQ0jB,KAAK10B,KAAK,CACtCe,KAAM,gBACN+Q,MAAO8sB,SAQnB,OACE,kBAACP,GAAD,UACY3jC,IAAT4F,GAAsB,kBAAC,GAAD,CAAQ0T,QAAQ,IACtC1T,GACC,oCACE,kBAACkX,GAAD,KACE,kBAAC,GAAD,MAAS,OAAClX,QAAD,IAACA,OAAD,EAACA,EAAMS,MAAR,OAAeT,QAAf,IAAeA,OAAf,EAAeA,EAAMS,KAAO,+BACpC,kBAAC,GAAD,MACA,kBAAC,GAAD,CACEM,MAAOq4B,EAAsB1oB,QAAQ3P,MACrCqzB,KAAMgF,EAAsB1oB,QAAQ0jB,KACpCI,iBAAkBniB,WAIPjY,IAAd4F,EAAKS,MACJ,kBAACu9B,GAAD,mDAIa5jC,IAAd4F,EAAKS,MACJ,kBAACw9B,GAAD,KACE,kBAAC,GAAD,KACE,kBAAC,GAAD,MACA,kBAAC,GAAD,QAEA5wB,GAAW,kBAAC,GAAD,MACZA,GAAW,kBAAC,GAAD,CAAQqG,QAAQ,IAC5B,kBAAC0D,GAAD,OACE/J,GAAW,kBAAC,GAAD,U,y2CCtH3B,IAAM+F,GAAYC,IAAOC,IAAV,MAQTirB,GAAkBlrB,IAAOC,IAAV,MAUfkrB,GAAWnrB,IAAOod,OAAV,KACCre,GACJD,IAgBL8T,GAAS5S,IAAOod,OAAV,KAKUte,IACJ,SAAC/C,GAAD,OACdA,EAAMqvB,YAAN,oBAAiCtsB,IAAqB,UACzC,SAAC/C,GAAD,OAAYA,EAAM8W,SAAW,OAAS,WACxC9T,IAKH,SAAChD,GAAD,OAAYA,EAAM8W,SAAW,UAAY,aAM/CxO,GAASrE,IAAOC,IAAV,KAEcnB,IAIpBusB,GAAgBrrB,YAAOoI,GAAPpI,CAAH,MAgNJsrB,GAzMgB,WAC7B/kC,QAAQC,IAAIL,OAAOC,SAASC,UAC5B,IAAMklC,EAAQC,eAFqB,EAGPxvB,mBAAiByZ,OAAO8V,EAAK,KAHtB,mBAG5B3hC,EAH4B,KAGpB6hC,EAHoB,OAIDzvB,wBAChCjV,GALiC,mBAI5B+iB,EAJ4B,KAIjBC,EAJiB,OAOX/N,oBAAkB,GAPP,mBAO5B7O,EAP4B,KAOtBu+B,EAPsB,OAQD1vB,mBAAyB,MARxB,mBAQ5B6nB,EAR4B,KAQjB8H,EARiB,OASX3vB,mBAAiB,IATN,mBAS5BoF,EAT4B,KAStBwqB,EATsB,KAU7BpnB,EAAUC,eAVmB,EAYTlC,qBAAW3G,IAAtBN,GAZoB,EAY3BzN,MAZ2B,EAYpByN,QAEPkF,EAAS+B,qBAAW3B,IAApBJ,KAERvC,qBAAU,WACJrU,GAAU6rB,OAAO8V,EAAM9gC,KACzBghC,EAAUhW,OAAO8V,EAAM9gC,OAExB,CAAC8gC,IAEJttB,qBAAU,WACR,GAAiB,MAAb4lB,EAAmB,CACrB,IAAMgI,EAAY,IAAIp/B,EAChBojB,EAAa,IAAIC,gBACjBzN,EAAQwhB,EAERiI,EAAU,uCAAG,WAAOvyB,GAAP,SAAAuE,EAAA,0DACbuE,EADa,gCAETwpB,EAAUrlC,IACd,IAAI8S,GAAa,CACf1P,OAAQA,EACR2P,OAAQA,IAEVsW,EAAW7oB,QAPE,2CAAH,sDAYV+kC,EAAmB,WACX,IAAD,EAAP1pB,KACW,UAAGA,EAAM9T,iBAAT,aAAG,EAAiBkQ,MAC/B,SAACC,GAAD,OAAQA,EAAGpP,SAAW9B,EAASmR,cAIhB,IAAI5V,GACZ8Z,eACL,IAAI/N,GAAsB,CACxBC,SAAUvH,EAASmR,OACnB/U,OAAQA,KAIZ0R,EAAO1R,EAAQ4D,EAASmR,WA+B9B,OA1B2B,uCAAG,sBAAAb,EAAA,sDAC5BiuB,IAIIvrB,IACEA,EAAKlT,MAAOmR,MAAK,SAAC+C,GAAD,OAAOA,IAAMlB,GAASe,gBACpClU,GACH4c,EAAajQ,GAAsBkyB,eAGhC7+B,GAAM4c,EAAajQ,GAAsBmyB,YAGhDL,EAAQprB,EAAKlT,MAAO,IAEpBw+B,EAAW,6CAhBe,2CAAH,oDAwB3BI,GACAR,GAAQ,GACD,gBAKR,CAAC7H,IAEJ5lB,qBAAU,WACS,MAAb4lB,GAAqBA,EAAUp5B,KAAOb,GACrB,uCAAG,8BAAAkU,EAAA,6DACdC,EAAS,IAAIhV,EADC,SAECgV,EAAOouB,cAAcviC,GAFtB,OAEhB5D,EAFgB,OAGpB2lC,EAAa3lC,GAHO,2CAAH,oDAMnBomC,KAED,CAACxiC,IAEJ,IAAMg6B,EAAwB,uCAAG,WAAOyI,GAAP,mBAAAvuB,EAAA,6DACzBC,EAAS,IAAIhV,EADY,SAEdgV,EAAO6lB,yBACtBh6B,OACc7C,GAAdslC,EAA0B,OAASA,EAAWr9B,YAJjB,OAE3BkS,EAF2B,OAM3BorB,EAN2B,eAO1BzI,EAP0B,CAQ7Bh1B,oBAA6B,MAARqS,OAAena,EAAYma,IAGlDyqB,EAAaW,GAXkB,2CAAH,sDAkB9B,YAAkBvlC,IAAd+iB,EAAgC,KAElC,kBAAC,GAAD,KACE,kBAACuhB,GAAD,KACGxH,GAAS,UACLA,EAAUl1B,mBADL,aAC4Bk1B,EAAUp1B,aADtC,aACuDiV,KAC7DmgB,EAAUx1B,WACVsV,OAAO,yBAEb,kBAACwnB,GAAD,CAAUloB,QAAS,WAZrBuB,EAAQnY,KAAK,OAYX,iBACA,kBAAC6+B,GAAD,KACY,eAAT9pB,GACC,kBAAC,GAAD,CACEyR,SAAU/I,IAAchQ,GAAsBkyB,cAC9C/oB,QACE6G,IAAchQ,GAAsBkyB,mBAChCjlC,EACA,kBAAMgjB,EAAajQ,GAAsBkyB,iBALjD,aAqBF,kBAAC,GAAD,CACEnZ,SAAU/I,IAAchQ,GAAsByyB,qBAC9CtpB,QACE6G,IAAchQ,GAAsByyB,0BAChCxlC,EACA,kBAAMgjB,EAAajQ,GAAsByyB,wBALjD,gBAQgB,KAEhB,kBAAC,GAAD,CACE1Z,SAAU/I,IAAchQ,GAAsB0yB,cAC9CvpB,QACE6G,IAAchQ,GAAsB0yB,mBAChCzlC,EACA,kBAAMgjB,EAAajQ,GAAsB0yB,gBAE/CpB,aAAa,GAPf,kBAYF,kBAAC,GAAD,MAECthB,IAAchQ,GAAsBkyB,eAC1B,eAAT5qB,GACE,kBAAC,GAAD,CACExX,OAAQA,EACRi6B,UAAWA,EACXD,yBAA0BA,IAG/B9Z,IAAchQ,GAAsBmyB,YACnC,kBAAC,GAAD,CAAqBriC,OAAQ6rB,OAAO7rB,KAErCkgB,IAAchQ,GAAsByyB,sBACnC,kBAAC,GAAD,CAA0B3iC,OAAQA,IAEnCkgB,IAAchQ,GAAsB0yB,eACnC,kBAAC,GAAD,CAAqB5iC,OAAQA,M,sgBC1RrC,IAAM+gB,GAAU3K,IAAOC,IAAV,MAaPoiB,GAAUriB,IAAOC,IAAV,KAKSnB,IAwBPwjB,GAfoB,SAACvmB,GAAW,IAAD,EAClBA,EAAlBwmB,aADoC,SAEtCv6B,EAAO,2FAEb,OAAIu6B,EACK,kBAAC,GAAD,KAAUv6B,GAIjB,kBAAC,GAAD,KACE,kBAAC,GAAD,KAAUA,K,ueChChB,IAAMykC,GAAczsB,IAAO0sB,MAAV,MAKXC,GAAe3sB,IAAOC,IAAV,MAMZ0K,GAAU3K,IAAOC,IAAV,MAKP2sB,GAAc5sB,IAAOC,IAAV,MA+DF4sB,GA3DuB,WACpC,IAAMtB,EAAQC,eAD4B,EAEdxvB,mBAAiByZ,OAAO8V,EAAK,KAFf,mBAEnC3hC,EAFmC,aAGdoS,wBAAqCjV,IAHvB,mBAGnC+lC,EAHmC,KAG3BC,EAH2B,KAK1C9uB,qBAAU,WACR+uB,MACC,IAEH/uB,qBAAU,YACR,OAAI6uB,QAAJ,IAAIA,OAAJ,EAAIA,EAAQ93B,UACVmS,YAAW,WACT8lB,MACC,KAEJ,CAACH,IAEJ,IAAME,EAAW,uCAAG,8BAAAlvB,EAAA,6DACdC,EAAS,IAAIhV,EADC,SAEDgV,EAAOmvB,gBAAgBtjC,GAFtB,OAEdsX,EAFc,OAGlB6rB,EAAU7rB,GAHQ,2CAAH,qDAMjB,QAAena,IAAX+lC,EACF,OAAO,kBAAC,GAAD,MAGT,IAAMG,EAAe,WAInB,IAHA,IAAIE,EAAM1f,SAASC,qBACjB,MAEOC,EAAI,EAAGA,EAAIwf,EAAI1pB,OAAQkK,IAAK,CACnC,IAAIyf,EAAKD,EAAIxf,GACb,GAAqB,SAAjByf,EAAGtkB,UAAsB,CAC3B,IAAIukB,EAASD,EAAGE,cACVD,IACJA,EAAQE,UAAY,OAM5B,OACE,kBAAC,GAAD,MACIT,EAAO93B,SACP,oCACE,kBAACw4B,GAAD,MACA,kBAACb,GAAD,KACE,kBAACF,GAAD,CAAatqB,IAAG,UAAK2qB,EAAL,6BAIrBA,EAAO93B,SACN,kBAAC43B,GAAD,CAAaa,wBAAyB,CAAEC,OAAQZ,EAAO73B,cC7EhD04B,GALY,WAEzB,OADApnC,QAAQC,IAAI,aACL,MC0CMonC,GAlCU,WAAO,IAAD,EACErrB,qBAAW3B,IAAlCJ,EADqB,EACrBA,KAAME,EADe,EACfA,aAEdna,QAAQC,IAAIga,GAEZja,QAAQC,IAAIka,GAEZ,IAAImtB,EAAwB,GAiB5B,OAhBMntB,EAAajC,MAAK,SAAC+C,GAAD,OAAOA,IAAMjB,GAAakB,iBAChDosB,EAAM,uBACDA,GADC,CAEJ,kBAAC,KAAD,CAAOC,OAAK,EAACC,KAAK,IAAIxK,UAAWhb,KACjC,kBAAC,KAAD,CAAOulB,OAAK,EAACC,KAAK,gBAAgBxK,UAAWsJ,KAC7C,kBAAC,KAAD,CAAOiB,OAAK,EAACC,KAAK,YAAYxK,UAAW+H,KACzC,kBAAC,KAAD,CAAOwC,OAAK,EAACC,KAAK,aAAaxK,UAAWlK,QAGxC3Y,EAAajC,MAAK,SAAC+C,GAAD,OAAOA,IAAMjB,GAAaoB,gBAChDksB,EAAM,uBACDA,GADC,CAEJ,kBAAC,KAAD,CAAOC,OAAK,EAACC,KAAK,iBAAiBxK,UAAW+H,QAKhD,kBAAC,GAAD,KACE,kBAAC,KAAD,KACGuC,EACD,kBAAC,KAAD,CAAOtK,UAAWoK,QCPXK,GArBO,WACpB,OACE,oCACE,kBAAC7oC,EAAD,MACA,kBAAC,GAAD,KACE,kBAAC,GAAD,KACE,kBAAC,GAAD,KACE,kBAAC,GAAD,KACE,kBAAC,GAAD,KACE,kBAAC,GAAD,KACE,kBAAC,GAAD,cCjBZuB,GAAU+mB,SAASC,qBAAqB,QAAQ,GAAGugB,aAAa,QAChEC,GAAczgB,SAAS0gB,eAAe,QAE5CC,IAASC,OACP,kBAAC,IAAD,CAAeC,SAAU5nC,IACvB,kBAAC,GAAD,OAEFwnC,M","file":"static/js/main.4774244c.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo.5b4c36c1.png\";","module.exports = __webpack_public_path__ + \"static/media/towingcar_round.52652456.png\";","//import BlenderProBook from './335787aa6f57d71cabe8eb5dc89c6d6b.woff';\r\n//import BlenderProBook2 from './335787aa6f57d71cabe8eb5dc89c6d6b.woff2';\r\n//import BlenderProBold from './a082fd3df68a0b54e0d4d794bc38d268.woff';\r\n//import BlenderProBold2 from './a082fd3df68a0b54e0d4d794bc38d268.woff2';\r\nimport { createGlobalStyle } from 'styled-components';\r\n\r\nexport const GlobalFonts = createGlobalStyle`\r\n \r\n body,\r\n html,\r\n #root {\r\n height: 100%;\r\n width: 100%;\r\n }\r\n\r\n body {\r\n padding: 0;\r\n margin: 0;\r\n font-family: 'Blender Pro';\r\n overflow-y: scroll;\r\n }\r\n\r\n button {\r\n font-family: 'Blender Pro'\r\n }\r\n\r\n input, select {\r\n \r\n font-family: 'Blender Pro' !important;\r\n }\r\n`;\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n//----------------------\r\n// \r\n// Generated using the NSwag toolchain v13.10.3.0 (NJsonSchema v10.3.6.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)\r\n// \r\n//----------------------\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { RiWindowsFill } from 'react-icons/ri';\r\nimport { ApplicationPaths } from '../api-authorization/ApiAuthorizationConstants';\r\nexport class ApiClientBase {\r\n baseApiUrl: string = '';\r\n\r\n protected async transformOptions(options: RequestInit): Promise {\r\n // const token = await authService.getAccessToken();\r\n options.headers = { ...options.headers };\r\n return Promise.resolve(options);\r\n }\r\n\r\n protected transformResult(\r\n url: string,\r\n response: Response,\r\n processor: (response: Response) => any\r\n ) {\r\n if (response.status === 401) {\r\n // authService.signOut('/');\r\n if (window.location.pathname == '/') {\r\n window.location.href = ApplicationPaths.LogOut;\r\n } else {\r\n window.location.href =\r\n ApplicationPaths.LogOut + `?returnUrl=${window.location.pathname}`;\r\n }\r\n } else if (response.status === 403) {\r\n console.log('Error handling returning to login');\r\n console.log(window.location.href);\r\n if (window.location.pathname == '/') {\r\n window.location.href = ApplicationPaths.Login;\r\n } else {\r\n window.location.href =\r\n ApplicationPaths.Login + `?returnUrl=${window.location.pathname}`;\r\n }\r\n } else {\r\n return processor(response);\r\n }\r\n }\r\n\r\n protected getBaseUrl(defaultUrl: string, baseUrl?: string) {\r\n return this.baseApiUrl;\r\n }\r\n}\r\n\r\nexport class BasicDataClient extends ApiClientBase {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super();\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getBasicData(signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/BasicData/get\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetBasicData(_response));\r\n });\r\n }\r\n\r\n protected processGetBasicData(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = BasicDataModel.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n updateUser(companyId: number | undefined, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/BasicData/updateUser?\";\r\n if (companyId === null)\r\n throw new Error(\"The parameter 'companyId' cannot be null.\");\r\n else if (companyId !== undefined)\r\n url_ += \"companyId=\" + encodeURIComponent(\"\" + companyId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdateUser(_response));\r\n });\r\n }\r\n\r\n protected processUpdateUser(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = BasicDataModel.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class CasesClient extends ApiClientBase {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super();\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getCases(getCounts: boolean | undefined, pageIndex: number | undefined, pageSize: number | undefined, from: Date | undefined, to: Date | undefined, filter: CasesFilter | undefined, sort: CasesSort | undefined, orderBy: CasesOrderBy | undefined, searchInput: string | null | undefined, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetCases?\";\r\n if (getCounts === null)\r\n throw new Error(\"The parameter 'getCounts' cannot be null.\");\r\n else if (getCounts !== undefined)\r\n url_ += \"GetCounts=\" + encodeURIComponent(\"\" + getCounts) + \"&\";\r\n if (pageIndex === null)\r\n throw new Error(\"The parameter 'pageIndex' cannot be null.\");\r\n else if (pageIndex !== undefined)\r\n url_ += \"PageIndex=\" + encodeURIComponent(\"\" + pageIndex) + \"&\";\r\n if (pageSize === null)\r\n throw new Error(\"The parameter 'pageSize' cannot be null.\");\r\n else if (pageSize !== undefined)\r\n url_ += \"PageSize=\" + encodeURIComponent(\"\" + pageSize) + \"&\";\r\n if (from === null)\r\n throw new Error(\"The parameter 'from' cannot be null.\");\r\n else if (from !== undefined)\r\n url_ += \"From=\" + encodeURIComponent(from ? \"\" + from.toJSON() : \"\") + \"&\";\r\n if (to === null)\r\n throw new Error(\"The parameter 'to' cannot be null.\");\r\n else if (to !== undefined)\r\n url_ += \"To=\" + encodeURIComponent(to ? \"\" + to.toJSON() : \"\") + \"&\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (sort === null)\r\n throw new Error(\"The parameter 'sort' cannot be null.\");\r\n else if (sort !== undefined)\r\n url_ += \"Sort=\" + encodeURIComponent(\"\" + sort) + \"&\";\r\n if (orderBy === null)\r\n throw new Error(\"The parameter 'orderBy' cannot be null.\");\r\n else if (orderBy !== undefined)\r\n url_ += \"OrderBy=\" + encodeURIComponent(\"\" + orderBy) + \"&\";\r\n if (searchInput !== undefined && searchInput !== null)\r\n url_ += \"SearchInput=\" + encodeURIComponent(\"\" + searchInput) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCases(_response));\r\n });\r\n }\r\n\r\n protected processGetCases(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetCasesResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getShellCases(caseId: number | undefined, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetShellCases?\";\r\n if (caseId === null)\r\n throw new Error(\"The parameter 'caseId' cannot be null.\");\r\n else if (caseId !== undefined)\r\n url_ += \"caseId=\" + encodeURIComponent(\"\" + caseId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetShellCases(_response));\r\n });\r\n }\r\n\r\n protected processGetShellCases(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CaseDTO.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getRepairshopCases(getCounts: boolean | undefined, pageIndex: number | undefined, pageSize: number | undefined, from: Date | undefined, to: Date | undefined, filter: CasesFilter | undefined, sort: CasesSort | undefined, orderBy: CasesOrderBy | undefined, searchInput: string | null | undefined, caseId: number | undefined, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetRepairshopCases?\";\r\n if (getCounts === null)\r\n throw new Error(\"The parameter 'getCounts' cannot be null.\");\r\n else if (getCounts !== undefined)\r\n url_ += \"GetCounts=\" + encodeURIComponent(\"\" + getCounts) + \"&\";\r\n if (pageIndex === null)\r\n throw new Error(\"The parameter 'pageIndex' cannot be null.\");\r\n else if (pageIndex !== undefined)\r\n url_ += \"PageIndex=\" + encodeURIComponent(\"\" + pageIndex) + \"&\";\r\n if (pageSize === null)\r\n throw new Error(\"The parameter 'pageSize' cannot be null.\");\r\n else if (pageSize !== undefined)\r\n url_ += \"PageSize=\" + encodeURIComponent(\"\" + pageSize) + \"&\";\r\n if (from === null)\r\n throw new Error(\"The parameter 'from' cannot be null.\");\r\n else if (from !== undefined)\r\n url_ += \"From=\" + encodeURIComponent(from ? \"\" + from.toJSON() : \"\") + \"&\";\r\n if (to === null)\r\n throw new Error(\"The parameter 'to' cannot be null.\");\r\n else if (to !== undefined)\r\n url_ += \"To=\" + encodeURIComponent(to ? \"\" + to.toJSON() : \"\") + \"&\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (sort === null)\r\n throw new Error(\"The parameter 'sort' cannot be null.\");\r\n else if (sort !== undefined)\r\n url_ += \"Sort=\" + encodeURIComponent(\"\" + sort) + \"&\";\r\n if (orderBy === null)\r\n throw new Error(\"The parameter 'orderBy' cannot be null.\");\r\n else if (orderBy !== undefined)\r\n url_ += \"OrderBy=\" + encodeURIComponent(\"\" + orderBy) + \"&\";\r\n if (searchInput !== undefined && searchInput !== null)\r\n url_ += \"SearchInput=\" + encodeURIComponent(\"\" + searchInput) + \"&\";\r\n if (caseId === null)\r\n throw new Error(\"The parameter 'caseId' cannot be null.\");\r\n else if (caseId !== undefined)\r\n url_ += \"caseId=\" + encodeURIComponent(\"\" + caseId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetRepairshopCases(_response));\r\n });\r\n }\r\n\r\n protected processGetRepairshopCases(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetCasesResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getProcessingDetails(caseId: number, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetProcessingDetails/{caseId}\";\r\n if (caseId === undefined || caseId === null)\r\n throw new Error(\"The parameter 'caseId' must be defined.\");\r\n url_ = url_.replace(\"{caseId}\", encodeURIComponent(\"\" + caseId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetProcessingDetails(_response));\r\n });\r\n }\r\n\r\n protected processGetProcessingDetails(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProcessingDetailsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getInvestigationDetails(caseId: number, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetInvestigationDetails/{caseId}\";\r\n if (caseId === undefined || caseId === null)\r\n throw new Error(\"The parameter 'caseId' must be defined.\");\r\n url_ = url_.replace(\"{caseId}\", encodeURIComponent(\"\" + caseId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetInvestigationDetails(_response));\r\n });\r\n }\r\n\r\n protected processGetInvestigationDetails(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetInvestigationDetailsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getRepairShopDetails(caseId: number, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetRepairShopDetails/{caseId}\";\r\n if (caseId === undefined || caseId === null)\r\n throw new Error(\"The parameter 'caseId' must be defined.\");\r\n url_ = url_.replace(\"{caseId}\", encodeURIComponent(\"\" + caseId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetRepairShopDetails(_response));\r\n });\r\n }\r\n\r\n protected processGetRepairShopDetails(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetRepairShopDetailsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n let result204: any = null;\r\n let resultData204 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result204 = GetRepairShopDetailsResponse.fromJS(resultData204);\r\n return result204;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getCustomerVehicleDetails(caseId: number | undefined, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetCustomerVehicleDetails/caseId?\";\r\n if (caseId === null)\r\n throw new Error(\"The parameter 'caseId' cannot be null.\");\r\n else if (caseId !== undefined)\r\n url_ += \"caseId=\" + encodeURIComponent(\"\" + caseId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCustomerVehicleDetails(_response));\r\n });\r\n }\r\n\r\n protected processGetCustomerVehicleDetails(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetCustomerVehicleDetailsResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getStreetAddress(id: number | undefined, latitude: number | undefined, longitude: number | undefined, doGeocode: boolean | undefined, streetAddress: string | null | undefined, city: string | null | undefined, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetStreetAddress?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n if (latitude === null)\r\n throw new Error(\"The parameter 'latitude' cannot be null.\");\r\n else if (latitude !== undefined)\r\n url_ += \"Latitude=\" + encodeURIComponent(\"\" + latitude) + \"&\";\r\n if (longitude === null)\r\n throw new Error(\"The parameter 'longitude' cannot be null.\");\r\n else if (longitude !== undefined)\r\n url_ += \"Longitude=\" + encodeURIComponent(\"\" + longitude) + \"&\";\r\n if (doGeocode === null)\r\n throw new Error(\"The parameter 'doGeocode' cannot be null.\");\r\n else if (doGeocode !== undefined)\r\n url_ += \"DoGeocode=\" + encodeURIComponent(\"\" + doGeocode) + \"&\";\r\n if (streetAddress !== undefined && streetAddress !== null)\r\n url_ += \"StreetAddress=\" + encodeURIComponent(\"\" + streetAddress) + \"&\";\r\n if (city !== undefined && city !== null)\r\n url_ += \"City=\" + encodeURIComponent(\"\" + city) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetStreetAddress(_response));\r\n });\r\n }\r\n\r\n protected processGetStreetAddress(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetStreetAddressResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n toggleUserFlag(request: ToggleUserFlagRequest, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/ToggleUserFlag\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n signal,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processToggleUserFlag(_response));\r\n });\r\n }\r\n\r\n protected processToggleUserFlag(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getMapCaseInfo(assignmentId: number, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetMapCaseInfo/mapInfo/{assignmentId}\";\r\n if (assignmentId === undefined || assignmentId === null)\r\n throw new Error(\"The parameter 'assignmentId' must be defined.\");\r\n url_ = url_.replace(\"{assignmentId}\", encodeURIComponent(\"\" + assignmentId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMapCaseInfo(_response));\r\n });\r\n }\r\n\r\n protected processGetMapCaseInfo(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = MapCase.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getCarfaxReport(caseId: number, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/GetCarfaxReport/carfaxReport/{caseId}\";\r\n if (caseId === undefined || caseId === null)\r\n throw new Error(\"The parameter 'caseId' must be defined.\");\r\n url_ = url_.replace(\"{caseId}\", encodeURIComponent(\"\" + caseId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCarfaxReport(_response));\r\n });\r\n }\r\n\r\n protected processGetCarfaxReport(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CarfaxResponse.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n updateInvestigationCheck(caseId: number, check: string | null, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Cases/UpdateInvestigationCheck/setInvestigationCheck/{caseId}/{check}\";\r\n if (caseId === undefined || caseId === null)\r\n throw new Error(\"The parameter 'caseId' must be defined.\");\r\n url_ = url_.replace(\"{caseId}\", encodeURIComponent(\"\" + caseId));\r\n if (check === undefined || check === null)\r\n throw new Error(\"The parameter 'check' must be defined.\");\r\n url_ = url_.replace(\"{check}\", encodeURIComponent(\"\" + check));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdateInvestigationCheck(_response));\r\n });\r\n }\r\n\r\n protected processUpdateInvestigationCheck(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class GoogleConfigurationClient extends ApiClientBase {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super();\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getGoogleMapsApiKey(signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/_googleMaps\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetGoogleMapsApiKey(_response));\r\n });\r\n }\r\n\r\n protected processGetGoogleMapsApiKey(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ApiKeyModel.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class ImageContentClient extends ApiClientBase {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super();\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getImage(imageId: number, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Case/Image/{imageId}\";\r\n if (imageId === undefined || imageId === null)\r\n throw new Error(\"The parameter 'imageId' must be defined.\");\r\n url_ = url_.replace(\"{imageId}\", encodeURIComponent(\"\" + imageId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/octet-stream\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetImage(_response));\r\n });\r\n }\r\n\r\n protected processGetImage(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200 || status === 206) {\r\n const contentDisposition = response.headers ? response.headers.get(\"content-disposition\") : undefined;\r\n const fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\r\n const fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\r\n return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n let result204: any = null;\r\n let resultData204 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result204 = resultData204 !== undefined ? resultData204 : null;\r\n return result204;\r\n });\r\n } else if (status === 500) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getThumbnail(imageId: number, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Case/Thumbnail/{imageId}\";\r\n if (imageId === undefined || imageId === null)\r\n throw new Error(\"The parameter 'imageId' must be defined.\");\r\n url_ = url_.replace(\"{imageId}\", encodeURIComponent(\"\" + imageId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/octet-stream\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetThumbnail(_response));\r\n });\r\n }\r\n\r\n protected processGetThumbnail(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200 || status === 206) {\r\n const contentDisposition = response.headers ? response.headers.get(\"content-disposition\") : undefined;\r\n const fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\r\n const fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\r\n return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n let result204: any = null;\r\n let resultData204 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result204 = resultData204 !== undefined ? resultData204 : null;\r\n return result204;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class IncidentsMapClient extends ApiClientBase {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super();\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getCompanies(signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/IncidentsMap/GetCompanies\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCompanies(_response));\r\n });\r\n }\r\n\r\n protected processGetCompanies(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(CompanyDTO.fromJS(item));\r\n }\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status === 500) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n getIncidentLocations(request: IncidentLocationData, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/IncidentsMap/GetIncidentLocations\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n signal,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetIncidentLocations(_response));\r\n });\r\n }\r\n\r\n protected processGetIncidentLocations(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(WaystarLocationSearch.fromJS(item));\r\n }\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n let result401: any = null;\r\n let resultData401 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result401 = ProblemDetails.fromJS(resultData401);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result401);\r\n });\r\n } else if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status === 500) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class LogClient extends ApiClientBase {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super();\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n log(request: LogMeRequest, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/Log\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(request);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n signal,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processLog(_response));\r\n });\r\n }\r\n\r\n protected processLog(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class OidcConfigurationClient extends ApiClientBase {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super();\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getClientRequestParameters(clientId: string | null, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/_configuration/{clientId}\";\r\n if (clientId === undefined || clientId === null)\r\n throw new Error(\"The parameter 'clientId' must be defined.\");\r\n url_ = url_.replace(\"{clientId}\", encodeURIComponent(\"\" + clientId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/octet-stream\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetClientRequestParameters(_response));\r\n });\r\n }\r\n\r\n protected processGetClientRequestParameters(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200 || status === 206) {\r\n const contentDisposition = response.headers ? response.headers.get(\"content-disposition\") : undefined;\r\n const fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\r\n const fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\r\n return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class VehicleInformationClient extends ApiClientBase {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super();\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n getHistory(caseId: number | undefined, registrationNr: string | null | undefined, signal?: AbortSignal | undefined): Promise {\r\n let url_ = this.baseUrl + \"/VehicleInformation/gethistory?\";\r\n if (caseId === null)\r\n throw new Error(\"The parameter 'caseId' cannot be null.\");\r\n else if (caseId !== undefined)\r\n url_ += \"caseId=\" + encodeURIComponent(\"\" + caseId) + \"&\";\r\n if (registrationNr !== undefined && registrationNr !== null)\r\n url_ += \"registrationNr=\" + encodeURIComponent(\"\" + registrationNr) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n signal,\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetHistory(_response));\r\n });\r\n }\r\n\r\n protected processGetHistory(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = VehicleHistoryDTO.fromJS(resultData200);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport class BasicDataModel implements IBasicDataModel {\r\n currentUser?: UserModel | undefined;\r\n companies?: CompanyDTO[] | undefined;\r\n\r\n constructor(data?: IBasicDataModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.currentUser = _data[\"currentUser\"] ? UserModel.fromJS(_data[\"currentUser\"]) : undefined;\r\n if (Array.isArray(_data[\"companies\"])) {\r\n this.companies = [] as any;\r\n for (let item of _data[\"companies\"])\r\n this.companies!.push(CompanyDTO.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): BasicDataModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new BasicDataModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"currentUser\"] = this.currentUser ? this.currentUser.toJSON() : undefined;\r\n if (Array.isArray(this.companies)) {\r\n data[\"companies\"] = [];\r\n for (let item of this.companies)\r\n data[\"companies\"].push(item.toJSON());\r\n }\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IBasicDataModel {\r\n currentUser?: UserModel | undefined;\r\n companies?: CompanyDTO[] | undefined;\r\n}\r\n\r\nexport class UserModel implements IUserModel {\r\n name?: string | undefined;\r\n companyID?: number;\r\n roles?: string[] | undefined;\r\n\r\n constructor(data?: IUserModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.companyID = _data[\"companyID\"];\r\n if (Array.isArray(_data[\"roles\"])) {\r\n this.roles = [] as any;\r\n for (let item of _data[\"roles\"])\r\n this.roles!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"companyID\"] = this.companyID;\r\n if (Array.isArray(this.roles)) {\r\n data[\"roles\"] = [];\r\n for (let item of this.roles)\r\n data[\"roles\"].push(item);\r\n }\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IUserModel {\r\n name?: string | undefined;\r\n companyID?: number;\r\n roles?: string[] | undefined;\r\n}\r\n\r\nexport class CompanyDTO implements ICompanyDTO {\r\n id?: number;\r\n name?: string | undefined;\r\n assistConceptId?: AssistConcept;\r\n\r\n constructor(data?: ICompanyDTO) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n this.assistConceptId = _data[\"assistConceptId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CompanyDTO {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CompanyDTO();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n data[\"assistConceptId\"] = this.assistConceptId;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface ICompanyDTO {\r\n id?: number;\r\n name?: string | undefined;\r\n assistConceptId?: AssistConcept;\r\n}\r\n\r\nexport enum AssistConcept {\r\n TestCompanyOne = 1,\r\n Bitio = 2,\r\n TestCompanyTwo = 3,\r\n LFSkane = 263,\r\n LFBergslagen = 275,\r\n LFVasternorrland = 282,\r\n LFVasterbotten = 283,\r\n LFVarmland = 286,\r\n LFUppsala = 287,\r\n LFStockholm = 289,\r\n LFNorrbotten = 295,\r\n LFKronoberg = 299,\r\n LFJamtland = 308,\r\n LFGalveborg = 343,\r\n LFAlvsborg = 384,\r\n LFDalarna = 395,\r\n DinaForsakringar = 1779,\r\n Folksam = 1804,\r\n Gjensidige = 2567,\r\n Watercircles = 3586,\r\n}\r\n\r\nexport class ProblemDetails implements IProblemDetails {\r\n type?: string | undefined;\r\n title?: string | undefined;\r\n status?: number | undefined;\r\n detail?: string | undefined;\r\n instance?: string | undefined;\r\n\r\n constructor(data?: IProblemDetails) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.type = _data[\"type\"];\r\n this.title = _data[\"title\"];\r\n this.status = _data[\"status\"];\r\n this.detail = _data[\"detail\"];\r\n this.instance = _data[\"instance\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ProblemDetails {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ProblemDetails();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"type\"] = this.type;\r\n data[\"title\"] = this.title;\r\n data[\"status\"] = this.status;\r\n data[\"detail\"] = this.detail;\r\n data[\"instance\"] = this.instance;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IProblemDetails {\r\n type?: string | undefined;\r\n title?: string | undefined;\r\n status?: number | undefined;\r\n detail?: string | undefined;\r\n instance?: string | undefined;\r\n}\r\n\r\nexport class GetCasesResponse implements IGetCasesResponse {\r\n cases?: CaseDTO[] | undefined;\r\n pageIndex?: number;\r\n waystarScore?: number | undefined;\r\n favored?: number | undefined;\r\n unread?: number | undefined;\r\n numberOfCases?: number | undefined;\r\n filteredNumber?: number | undefined;\r\n\r\n constructor(data?: IGetCasesResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"cases\"])) {\r\n this.cases = [] as any;\r\n for (let item of _data[\"cases\"])\r\n this.cases!.push(CaseDTO.fromJS(item));\r\n }\r\n this.pageIndex = _data[\"pageIndex\"];\r\n this.waystarScore = _data[\"waystarScore\"];\r\n this.favored = _data[\"favored\"];\r\n this.unread = _data[\"unread\"];\r\n this.numberOfCases = _data[\"numberOfCases\"];\r\n this.filteredNumber = _data[\"filteredNumber\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetCasesResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetCasesResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.cases)) {\r\n data[\"cases\"] = [];\r\n for (let item of this.cases)\r\n data[\"cases\"].push(item.toJSON());\r\n }\r\n data[\"pageIndex\"] = this.pageIndex;\r\n data[\"waystarScore\"] = this.waystarScore;\r\n data[\"favored\"] = this.favored;\r\n data[\"unread\"] = this.unread;\r\n data[\"numberOfCases\"] = this.numberOfCases;\r\n data[\"filteredNumber\"] = this.filteredNumber;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IGetCasesResponse {\r\n cases?: CaseDTO[] | undefined;\r\n pageIndex?: number;\r\n waystarScore?: number | undefined;\r\n favored?: number | undefined;\r\n unread?: number | undefined;\r\n numberOfCases?: number | undefined;\r\n filteredNumber?: number | undefined;\r\n}\r\n\r\nexport class CaseDTO implements ICaseDTO {\r\n internalFlaggedCase?: boolean | undefined;\r\n id?: number;\r\n created?: Date;\r\n crashDate?: Date;\r\n waystarScore?: number;\r\n caseFlags?: CaseFlag[] | undefined;\r\n userFlags?: UserFlag[] | undefined;\r\n incidentTypeId?: IncidentType;\r\n incidentType?: string | undefined;\r\n latitude?: number | undefined;\r\n longitude?: number | undefined;\r\n streetAddress?: string | undefined;\r\n brand?: string | undefined;\r\n registrationNumber?: string | undefined;\r\n imageIds?: number[] | undefined;\r\n isInvestigationCase?: boolean | undefined;\r\n internalWaystarScore?: number | undefined;\r\n\r\n constructor(data?: ICaseDTO) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.internalFlaggedCase = _data[\"internalFlaggedCase\"];\r\n this.id = _data[\"id\"];\r\n this.created = _data[\"created\"] ? new Date(_data[\"created\"].toString()) : undefined;\r\n this.crashDate = _data[\"crashDate\"] ? new Date(_data[\"crashDate\"].toString()) : undefined;\r\n this.waystarScore = _data[\"waystarScore\"];\r\n if (Array.isArray(_data[\"caseFlags\"])) {\r\n this.caseFlags = [] as any;\r\n for (let item of _data[\"caseFlags\"])\r\n this.caseFlags!.push(CaseFlag.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"userFlags\"])) {\r\n this.userFlags = [] as any;\r\n for (let item of _data[\"userFlags\"])\r\n this.userFlags!.push(UserFlag.fromJS(item));\r\n }\r\n this.incidentTypeId = _data[\"incidentTypeId\"];\r\n this.incidentType = _data[\"incidentType\"];\r\n this.latitude = _data[\"latitude\"];\r\n this.longitude = _data[\"longitude\"];\r\n this.streetAddress = _data[\"streetAddress\"];\r\n this.brand = _data[\"brand\"];\r\n this.registrationNumber = _data[\"registrationNumber\"];\r\n if (Array.isArray(_data[\"imageIds\"])) {\r\n this.imageIds = [] as any;\r\n for (let item of _data[\"imageIds\"])\r\n this.imageIds!.push(item);\r\n }\r\n this.isInvestigationCase = _data[\"isInvestigationCase\"];\r\n this.internalWaystarScore = _data[\"internalWaystarScore\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CaseDTO {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CaseDTO();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"internalFlaggedCase\"] = this.internalFlaggedCase;\r\n data[\"id\"] = this.id;\r\n data[\"created\"] = this.created ? this.created.toISOString() : undefined;\r\n data[\"crashDate\"] = this.crashDate ? this.crashDate.toISOString() : undefined;\r\n data[\"waystarScore\"] = this.waystarScore;\r\n if (Array.isArray(this.caseFlags)) {\r\n data[\"caseFlags\"] = [];\r\n for (let item of this.caseFlags)\r\n data[\"caseFlags\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.userFlags)) {\r\n data[\"userFlags\"] = [];\r\n for (let item of this.userFlags)\r\n data[\"userFlags\"].push(item.toJSON());\r\n }\r\n data[\"incidentTypeId\"] = this.incidentTypeId;\r\n data[\"incidentType\"] = this.incidentType;\r\n data[\"latitude\"] = this.latitude;\r\n data[\"longitude\"] = this.longitude;\r\n data[\"streetAddress\"] = this.streetAddress;\r\n data[\"brand\"] = this.brand;\r\n data[\"registrationNumber\"] = this.registrationNumber;\r\n if (Array.isArray(this.imageIds)) {\r\n data[\"imageIds\"] = [];\r\n for (let item of this.imageIds)\r\n data[\"imageIds\"].push(item);\r\n }\r\n data[\"isInvestigationCase\"] = this.isInvestigationCase;\r\n data[\"internalWaystarScore\"] = this.internalWaystarScore;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface ICaseDTO {\r\n internalFlaggedCase?: boolean | undefined;\r\n id?: number;\r\n created?: Date;\r\n crashDate?: Date;\r\n waystarScore?: number;\r\n caseFlags?: CaseFlag[] | undefined;\r\n userFlags?: UserFlag[] | undefined;\r\n incidentTypeId?: IncidentType;\r\n incidentType?: string | undefined;\r\n latitude?: number | undefined;\r\n longitude?: number | undefined;\r\n streetAddress?: string | undefined;\r\n brand?: string | undefined;\r\n registrationNumber?: string | undefined;\r\n imageIds?: number[] | undefined;\r\n isInvestigationCase?: boolean | undefined;\r\n internalWaystarScore?: number | undefined;\r\n}\r\n\r\nexport abstract class BaseEntity implements IBaseEntity {\r\n id?: number;\r\n created?: Date;\r\n updated?: Date;\r\n\r\n constructor(data?: IBaseEntity) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.created = _data[\"created\"] ? new Date(_data[\"created\"].toString()) : undefined;\r\n this.updated = _data[\"updated\"] ? new Date(_data[\"updated\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): BaseEntity {\r\n data = typeof data === 'object' ? data : {};\r\n throw new Error(\"The abstract class 'BaseEntity' cannot be instantiated.\");\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"created\"] = this.created ? this.created.toISOString() : undefined;\r\n data[\"updated\"] = this.updated ? this.updated.toISOString() : undefined;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IBaseEntity {\r\n id?: number;\r\n created?: Date;\r\n updated?: Date;\r\n}\r\n\r\nexport class CaseFlag extends BaseEntity implements ICaseFlag {\r\n caseId?: number;\r\n flagId?: FlagEnum;\r\n\r\n constructor(data?: ICaseFlag) {\r\n super(data);\r\n }\r\n\r\n init(_data?: any) {\r\n super.init(_data);\r\n if (_data) {\r\n this.caseId = _data[\"caseId\"];\r\n this.flagId = _data[\"flagId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CaseFlag {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CaseFlag();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"caseId\"] = this.caseId;\r\n data[\"flagId\"] = this.flagId;\r\n super.toJSON(data);\r\n return data; \r\n }\r\n}\r\n\r\nexport interface ICaseFlag extends IBaseEntity {\r\n caseId?: number;\r\n flagId?: FlagEnum;\r\n}\r\n\r\nexport enum FlagEnum {\r\n Starred = 1,\r\n Unread = 2,\r\n HighWaystarScore = 3,\r\n TowDriverComment = 4,\r\n DifferentOwnerDriver = 5,\r\n PersonAtLocation = 6,\r\n}\r\n\r\nexport class UserFlag extends BaseEntity implements IUserFlag {\r\n userId?: string | undefined;\r\n flagId?: FlagEnum;\r\n caseId?: number;\r\n\r\n constructor(data?: IUserFlag) {\r\n super(data);\r\n }\r\n\r\n init(_data?: any) {\r\n super.init(_data);\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.flagId = _data[\"flagId\"];\r\n this.caseId = _data[\"caseId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserFlag {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserFlag();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"flagId\"] = this.flagId;\r\n data[\"caseId\"] = this.caseId;\r\n super.toJSON(data);\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IUserFlag extends IBaseEntity {\r\n userId?: string | undefined;\r\n flagId?: FlagEnum;\r\n caseId?: number;\r\n}\r\n\r\nexport enum IncidentType {\r\n None = 0,\r\n EngineFailure = 1,\r\n PowerTransmitionFailure = 2,\r\n DitchDriving = 3,\r\n CollisionWithOtherVehicle = 4,\r\n SingleVehicleAccident = 5,\r\n GameAccident = 6,\r\n Theft = 7,\r\n Fire = 8,\r\n Flat = 9,\r\n GovernmentSalvageTechnical = 10,\r\n Brakefault = 11,\r\n FaultyAlarm = 12,\r\n WheelReplacement = 14,\r\n GovermentSalvageLongDistance = 15,\r\n GovermentSalvageShortDistance = 16,\r\n NoPower = 17,\r\n AttemptedTheft = 18,\r\n LostWheels = 19,\r\n FaultyIgnition = 20,\r\n TransferTransport = 21,\r\n GovernmentSalvageSeizure = 22,\r\n GovernmentSalvageTBL7 = 23,\r\n Other = 24,\r\n Jumpstart = 25,\r\n LostKeyOrKeyLockedInside = 26,\r\n ElectricalFailure = 27,\r\n WrongFuelType = 29,\r\n Stuck = 30,\r\n Vandalized = 31,\r\n FuelShortage = 32,\r\n Consignment = 33,\r\n TransportationRelocation = 34,\r\n MunicipalRelocation = 35,\r\n}\r\n\r\nexport enum CasesFilter {\r\n ALL = 0,\r\n WAYSTARSCORE = 1,\r\n FAVORED = 2,\r\n UNREAD = 3,\r\n}\r\n\r\nexport enum CasesSort {\r\n ASCENDING = 0,\r\n DESCENDING = 1,\r\n}\r\n\r\nexport enum CasesOrderBy {\r\n WAYSTARSCORE = 0,\r\n DATETIME = 1,\r\n CREATED = 2,\r\n}\r\n\r\nexport class GetProcessingDetailsResponse implements IGetProcessingDetailsResponse {\r\n responseCreated?: Date;\r\n incidentLocation?: IncidentLocationResponse | undefined;\r\n drivePath?: DrivePathPoint[] | undefined;\r\n priceUnit?: number;\r\n priceDriveDistance?: number;\r\n totalDistanceInKm?: number;\r\n invoices?: InvoiceResponse[] | undefined;\r\n\r\n constructor(data?: IGetProcessingDetailsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.responseCreated = _data[\"responseCreated\"] ? new Date(_data[\"responseCreated\"].toString()) : undefined;\r\n this.incidentLocation = _data[\"incidentLocation\"] ? IncidentLocationResponse.fromJS(_data[\"incidentLocation\"]) : undefined;\r\n if (Array.isArray(_data[\"drivePath\"])) {\r\n this.drivePath = [] as any;\r\n for (let item of _data[\"drivePath\"])\r\n this.drivePath!.push(DrivePathPoint.fromJS(item));\r\n }\r\n this.priceUnit = _data[\"priceUnit\"];\r\n this.priceDriveDistance = _data[\"priceDriveDistance\"];\r\n this.totalDistanceInKm = _data[\"totalDistanceInKm\"];\r\n if (Array.isArray(_data[\"invoices\"])) {\r\n this.invoices = [] as any;\r\n for (let item of _data[\"invoices\"])\r\n this.invoices!.push(InvoiceResponse.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetProcessingDetailsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetProcessingDetailsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"responseCreated\"] = this.responseCreated ? this.responseCreated.toISOString() : undefined;\r\n data[\"incidentLocation\"] = this.incidentLocation ? this.incidentLocation.toJSON() : undefined;\r\n if (Array.isArray(this.drivePath)) {\r\n data[\"drivePath\"] = [];\r\n for (let item of this.drivePath)\r\n data[\"drivePath\"].push(item.toJSON());\r\n }\r\n data[\"priceUnit\"] = this.priceUnit;\r\n data[\"priceDriveDistance\"] = this.priceDriveDistance;\r\n data[\"totalDistanceInKm\"] = this.totalDistanceInKm;\r\n if (Array.isArray(this.invoices)) {\r\n data[\"invoices\"] = [];\r\n for (let item of this.invoices)\r\n data[\"invoices\"].push(item.toJSON());\r\n }\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IGetProcessingDetailsResponse {\r\n responseCreated?: Date;\r\n incidentLocation?: IncidentLocationResponse | undefined;\r\n drivePath?: DrivePathPoint[] | undefined;\r\n priceUnit?: number;\r\n priceDriveDistance?: number;\r\n totalDistanceInKm?: number;\r\n invoices?: InvoiceResponse[] | undefined;\r\n}\r\n\r\nexport class IncidentLocationResponse implements IIncidentLocationResponse {\r\n locationTypeId?: LocationType;\r\n locationType?: string | undefined;\r\n city?: string | undefined;\r\n streetAddress?: string | undefined;\r\n latitude?: number | undefined;\r\n longitude?: number | undefined;\r\n locationDescription?: string | undefined;\r\n locationTime?: Date;\r\n\r\n constructor(data?: IIncidentLocationResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.locationTypeId = _data[\"locationTypeId\"];\r\n this.locationType = _data[\"locationType\"];\r\n this.city = _data[\"city\"];\r\n this.streetAddress = _data[\"streetAddress\"];\r\n this.latitude = _data[\"latitude\"];\r\n this.longitude = _data[\"longitude\"];\r\n this.locationDescription = _data[\"locationDescription\"];\r\n this.locationTime = _data[\"locationTime\"] ? new Date(_data[\"locationTime\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): IncidentLocationResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new IncidentLocationResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"locationTypeId\"] = this.locationTypeId;\r\n data[\"locationType\"] = this.locationType;\r\n data[\"city\"] = this.city;\r\n data[\"streetAddress\"] = this.streetAddress;\r\n data[\"latitude\"] = this.latitude;\r\n data[\"longitude\"] = this.longitude;\r\n data[\"locationDescription\"] = this.locationDescription;\r\n data[\"locationTime\"] = this.locationTime ? this.locationTime.toISOString() : undefined;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IIncidentLocationResponse {\r\n locationTypeId?: LocationType;\r\n locationType?: string | undefined;\r\n city?: string | undefined;\r\n streetAddress?: string | undefined;\r\n latitude?: number | undefined;\r\n longitude?: number | undefined;\r\n locationDescription?: string | undefined;\r\n locationTime?: Date;\r\n}\r\n\r\nexport enum LocationType {\r\n None = 0,\r\n ReportedIncident = 1,\r\n BeginsAssignment = 2,\r\n ArrivingAtIncident = 3,\r\n DeliveringVehicle = 4,\r\n DeliveringCargo = 5,\r\n PausingAssignment = 6,\r\n ResumingAssignment = 7,\r\n AssignmentCompleted = 8,\r\n Returning = 9,\r\n LeavingIncident = 10,\r\n}\r\n\r\nexport class DrivePathPoint implements IDrivePathPoint {\r\n id?: number;\r\n reportLocationId?: number;\r\n descriptiveTitle?: string | undefined;\r\n descriptiveContent?: string | undefined;\r\n isLocationRepairShop?: boolean;\r\n streetAddress?: string | undefined;\r\n locationTypeId?: LocationType;\r\n locationType?: string | undefined;\r\n locationTime?: Date | undefined;\r\n latitude?: number | undefined;\r\n longitude?: number | undefined;\r\n\r\n constructor(data?: IDrivePathPoint) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.reportLocationId = _data[\"reportLocationId\"];\r\n this.descriptiveTitle = _data[\"descriptiveTitle\"];\r\n this.descriptiveContent = _data[\"descriptiveContent\"];\r\n this.isLocationRepairShop = _data[\"isLocationRepairShop\"];\r\n this.streetAddress = _data[\"streetAddress\"];\r\n this.locationTypeId = _data[\"locationTypeId\"];\r\n this.locationType = _data[\"locationType\"];\r\n this.locationTime = _data[\"locationTime\"] ? new Date(_data[\"locationTime\"].toString()) : undefined;\r\n this.latitude = _data[\"latitude\"];\r\n this.longitude = _data[\"longitude\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): DrivePathPoint {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DrivePathPoint();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"reportLocationId\"] = this.reportLocationId;\r\n data[\"descriptiveTitle\"] = this.descriptiveTitle;\r\n data[\"descriptiveContent\"] = this.descriptiveContent;\r\n data[\"isLocationRepairShop\"] = this.isLocationRepairShop;\r\n data[\"streetAddress\"] = this.streetAddress;\r\n data[\"locationTypeId\"] = this.locationTypeId;\r\n data[\"locationType\"] = this.locationType;\r\n data[\"locationTime\"] = this.locationTime ? this.locationTime.toISOString() : undefined;\r\n data[\"latitude\"] = this.latitude;\r\n data[\"longitude\"] = this.longitude;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IDrivePathPoint {\r\n id?: number;\r\n reportLocationId?: number;\r\n descriptiveTitle?: string | undefined;\r\n descriptiveContent?: string | undefined;\r\n isLocationRepairShop?: boolean;\r\n streetAddress?: string | undefined;\r\n locationTypeId?: LocationType;\r\n locationType?: string | undefined;\r\n locationTime?: Date | undefined;\r\n latitude?: number | undefined;\r\n longitude?: number | undefined;\r\n}\r\n\r\nexport class InvoiceResponse implements IInvoiceResponse {\r\n invoiceLines?: InvoiceLineResponse[] | undefined;\r\n invoiceAmount?: number;\r\n taxAmount?: number;\r\n\r\n constructor(data?: IInvoiceResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"invoiceLines\"])) {\r\n this.invoiceLines = [] as any;\r\n for (let item of _data[\"invoiceLines\"])\r\n this.invoiceLines!.push(InvoiceLineResponse.fromJS(item));\r\n }\r\n this.invoiceAmount = _data[\"invoiceAmount\"];\r\n this.taxAmount = _data[\"taxAmount\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): InvoiceResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InvoiceResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.invoiceLines)) {\r\n data[\"invoiceLines\"] = [];\r\n for (let item of this.invoiceLines)\r\n data[\"invoiceLines\"].push(item.toJSON());\r\n }\r\n data[\"invoiceAmount\"] = this.invoiceAmount;\r\n data[\"taxAmount\"] = this.taxAmount;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IInvoiceResponse {\r\n invoiceLines?: InvoiceLineResponse[] | undefined;\r\n invoiceAmount?: number;\r\n taxAmount?: number;\r\n}\r\n\r\nexport class InvoiceLineResponse implements IInvoiceLineResponse {\r\n axItemName?: string | undefined;\r\n qty?: number;\r\n salesUnit?: string | undefined;\r\n price?: number;\r\n lineAmount?: number;\r\n\r\n constructor(data?: IInvoiceLineResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.axItemName = _data[\"axItemName\"];\r\n this.qty = _data[\"qty\"];\r\n this.salesUnit = _data[\"salesUnit\"];\r\n this.price = _data[\"price\"];\r\n this.lineAmount = _data[\"lineAmount\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): InvoiceLineResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InvoiceLineResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"axItemName\"] = this.axItemName;\r\n data[\"qty\"] = this.qty;\r\n data[\"salesUnit\"] = this.salesUnit;\r\n data[\"price\"] = this.price;\r\n data[\"lineAmount\"] = this.lineAmount;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IInvoiceLineResponse {\r\n axItemName?: string | undefined;\r\n qty?: number;\r\n salesUnit?: string | undefined;\r\n price?: number;\r\n lineAmount?: number;\r\n}\r\n\r\nexport class GetInvestigationDetailsResponse implements IGetInvestigationDetailsResponse {\r\n imageIds?: number[] | undefined;\r\n waystarScore?: number;\r\n registrationNumber?: string | undefined;\r\n brand?: string | undefined;\r\n vehicleYearModel?: string | undefined;\r\n insuranceType?: string | undefined;\r\n assignmentStartedAt?: Date | undefined;\r\n assignmentEndedAt?: Date | undefined;\r\n towDriverName?: string | undefined;\r\n towDriverPhone?: string | undefined;\r\n incidentType?: string | undefined;\r\n customIncidentTypeDescription?: string | undefined;\r\n helpType?: string | undefined;\r\n customHelpTypeDescription?: string | undefined;\r\n repairShopName?: string | undefined;\r\n actualDropOffLocation?: string | undefined;\r\n callerContactInfo?: string | undefined;\r\n callerContactPhone?: string | undefined;\r\n ownerContactInfo?: string | undefined;\r\n ownerContactPhone?: string | undefined;\r\n ownerContactMobilePhone?: string | undefined;\r\n driverContactInfo?: string | undefined;\r\n driverContactPhone?: string | undefined;\r\n driverContactMobilePhone?: string | undefined;\r\n streetAddress?: string | undefined;\r\n locationTypeId?: LocationType;\r\n locationType?: string | undefined;\r\n locationTime?: Date;\r\n longitude?: number | undefined;\r\n latitude?: number | undefined;\r\n vehicleLegalOwners?: number | undefined;\r\n vehicleLastOwnerChangeDate?: Date | undefined;\r\n enabledCarfaxFlags?: string[] | undefined;\r\n created?: Date;\r\n companyId?: number;\r\n\r\n constructor(data?: IGetInvestigationDetailsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"imageIds\"])) {\r\n this.imageIds = [] as any;\r\n for (let item of _data[\"imageIds\"])\r\n this.imageIds!.push(item);\r\n }\r\n this.waystarScore = _data[\"waystarScore\"];\r\n this.registrationNumber = _data[\"registrationNumber\"];\r\n this.brand = _data[\"brand\"];\r\n this.vehicleYearModel = _data[\"vehicleYearModel\"];\r\n this.insuranceType = _data[\"insuranceType\"];\r\n this.assignmentStartedAt = _data[\"assignmentStartedAt\"] ? new Date(_data[\"assignmentStartedAt\"].toString()) : undefined;\r\n this.assignmentEndedAt = _data[\"assignmentEndedAt\"] ? new Date(_data[\"assignmentEndedAt\"].toString()) : undefined;\r\n this.towDriverName = _data[\"towDriverName\"];\r\n this.towDriverPhone = _data[\"towDriverPhone\"];\r\n this.incidentType = _data[\"incidentType\"];\r\n this.customIncidentTypeDescription = _data[\"customIncidentTypeDescription\"];\r\n this.helpType = _data[\"helpType\"];\r\n this.customHelpTypeDescription = _data[\"customHelpTypeDescription\"];\r\n this.repairShopName = _data[\"repairShopName\"];\r\n this.actualDropOffLocation = _data[\"actualDropOffLocation\"];\r\n this.callerContactInfo = _data[\"callerContactInfo\"];\r\n this.callerContactPhone = _data[\"callerContactPhone\"];\r\n this.ownerContactInfo = _data[\"ownerContactInfo\"];\r\n this.ownerContactPhone = _data[\"ownerContactPhone\"];\r\n this.ownerContactMobilePhone = _data[\"ownerContactMobilePhone\"];\r\n this.driverContactInfo = _data[\"driverContactInfo\"];\r\n this.driverContactPhone = _data[\"driverContactPhone\"];\r\n this.driverContactMobilePhone = _data[\"driverContactMobilePhone\"];\r\n this.streetAddress = _data[\"streetAddress\"];\r\n this.locationTypeId = _data[\"locationTypeId\"];\r\n this.locationType = _data[\"locationType\"];\r\n this.locationTime = _data[\"locationTime\"] ? new Date(_data[\"locationTime\"].toString()) : undefined;\r\n this.longitude = _data[\"longitude\"];\r\n this.latitude = _data[\"latitude\"];\r\n this.vehicleLegalOwners = _data[\"vehicleLegalOwners\"];\r\n this.vehicleLastOwnerChangeDate = _data[\"vehicleLastOwnerChangeDate\"] ? new Date(_data[\"vehicleLastOwnerChangeDate\"].toString()) : undefined;\r\n if (Array.isArray(_data[\"enabledCarfaxFlags\"])) {\r\n this.enabledCarfaxFlags = [] as any;\r\n for (let item of _data[\"enabledCarfaxFlags\"])\r\n this.enabledCarfaxFlags!.push(item);\r\n }\r\n this.created = _data[\"created\"] ? new Date(_data[\"created\"].toString()) : undefined;\r\n this.companyId = _data[\"companyId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetInvestigationDetailsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetInvestigationDetailsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.imageIds)) {\r\n data[\"imageIds\"] = [];\r\n for (let item of this.imageIds)\r\n data[\"imageIds\"].push(item);\r\n }\r\n data[\"waystarScore\"] = this.waystarScore;\r\n data[\"registrationNumber\"] = this.registrationNumber;\r\n data[\"brand\"] = this.brand;\r\n data[\"vehicleYearModel\"] = this.vehicleYearModel;\r\n data[\"insuranceType\"] = this.insuranceType;\r\n data[\"assignmentStartedAt\"] = this.assignmentStartedAt ? this.assignmentStartedAt.toISOString() : undefined;\r\n data[\"assignmentEndedAt\"] = this.assignmentEndedAt ? this.assignmentEndedAt.toISOString() : undefined;\r\n data[\"towDriverName\"] = this.towDriverName;\r\n data[\"towDriverPhone\"] = this.towDriverPhone;\r\n data[\"incidentType\"] = this.incidentType;\r\n data[\"customIncidentTypeDescription\"] = this.customIncidentTypeDescription;\r\n data[\"helpType\"] = this.helpType;\r\n data[\"customHelpTypeDescription\"] = this.customHelpTypeDescription;\r\n data[\"repairShopName\"] = this.repairShopName;\r\n data[\"actualDropOffLocation\"] = this.actualDropOffLocation;\r\n data[\"callerContactInfo\"] = this.callerContactInfo;\r\n data[\"callerContactPhone\"] = this.callerContactPhone;\r\n data[\"ownerContactInfo\"] = this.ownerContactInfo;\r\n data[\"ownerContactPhone\"] = this.ownerContactPhone;\r\n data[\"ownerContactMobilePhone\"] = this.ownerContactMobilePhone;\r\n data[\"driverContactInfo\"] = this.driverContactInfo;\r\n data[\"driverContactPhone\"] = this.driverContactPhone;\r\n data[\"driverContactMobilePhone\"] = this.driverContactMobilePhone;\r\n data[\"streetAddress\"] = this.streetAddress;\r\n data[\"locationTypeId\"] = this.locationTypeId;\r\n data[\"locationType\"] = this.locationType;\r\n data[\"locationTime\"] = this.locationTime ? this.locationTime.toISOString() : undefined;\r\n data[\"longitude\"] = this.longitude;\r\n data[\"latitude\"] = this.latitude;\r\n data[\"vehicleLegalOwners\"] = this.vehicleLegalOwners;\r\n data[\"vehicleLastOwnerChangeDate\"] = this.vehicleLastOwnerChangeDate ? this.vehicleLastOwnerChangeDate.toISOString() : undefined;\r\n if (Array.isArray(this.enabledCarfaxFlags)) {\r\n data[\"enabledCarfaxFlags\"] = [];\r\n for (let item of this.enabledCarfaxFlags)\r\n data[\"enabledCarfaxFlags\"].push(item);\r\n }\r\n data[\"created\"] = this.created ? this.created.toISOString() : undefined;\r\n data[\"companyId\"] = this.companyId;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IGetInvestigationDetailsResponse {\r\n imageIds?: number[] | undefined;\r\n waystarScore?: number;\r\n registrationNumber?: string | undefined;\r\n brand?: string | undefined;\r\n vehicleYearModel?: string | undefined;\r\n insuranceType?: string | undefined;\r\n assignmentStartedAt?: Date | undefined;\r\n assignmentEndedAt?: Date | undefined;\r\n towDriverName?: string | undefined;\r\n towDriverPhone?: string | undefined;\r\n incidentType?: string | undefined;\r\n customIncidentTypeDescription?: string | undefined;\r\n helpType?: string | undefined;\r\n customHelpTypeDescription?: string | undefined;\r\n repairShopName?: string | undefined;\r\n actualDropOffLocation?: string | undefined;\r\n callerContactInfo?: string | undefined;\r\n callerContactPhone?: string | undefined;\r\n ownerContactInfo?: string | undefined;\r\n ownerContactPhone?: string | undefined;\r\n ownerContactMobilePhone?: string | undefined;\r\n driverContactInfo?: string | undefined;\r\n driverContactPhone?: string | undefined;\r\n driverContactMobilePhone?: string | undefined;\r\n streetAddress?: string | undefined;\r\n locationTypeId?: LocationType;\r\n locationType?: string | undefined;\r\n locationTime?: Date;\r\n longitude?: number | undefined;\r\n latitude?: number | undefined;\r\n vehicleLegalOwners?: number | undefined;\r\n vehicleLastOwnerChangeDate?: Date | undefined;\r\n enabledCarfaxFlags?: string[] | undefined;\r\n created?: Date;\r\n companyId?: number;\r\n}\r\n\r\nexport class GetRepairShopDetailsResponse implements IGetRepairShopDetailsResponse {\r\n name?: string | undefined;\r\n streetAddress?: string | undefined;\r\n city?: string | undefined;\r\n zipCode?: string | undefined;\r\n phoneNumbers?: string[] | undefined;\r\n\r\n constructor(data?: IGetRepairShopDetailsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.streetAddress = _data[\"streetAddress\"];\r\n this.city = _data[\"city\"];\r\n this.zipCode = _data[\"zipCode\"];\r\n if (Array.isArray(_data[\"phoneNumbers\"])) {\r\n this.phoneNumbers = [] as any;\r\n for (let item of _data[\"phoneNumbers\"])\r\n this.phoneNumbers!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetRepairShopDetailsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetRepairShopDetailsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"streetAddress\"] = this.streetAddress;\r\n data[\"city\"] = this.city;\r\n data[\"zipCode\"] = this.zipCode;\r\n if (Array.isArray(this.phoneNumbers)) {\r\n data[\"phoneNumbers\"] = [];\r\n for (let item of this.phoneNumbers)\r\n data[\"phoneNumbers\"].push(item);\r\n }\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IGetRepairShopDetailsResponse {\r\n name?: string | undefined;\r\n streetAddress?: string | undefined;\r\n city?: string | undefined;\r\n zipCode?: string | undefined;\r\n phoneNumbers?: string[] | undefined;\r\n}\r\n\r\nexport class GetCustomerVehicleDetailsResponse implements IGetCustomerVehicleDetailsResponse {\r\n responseCreated?: Date;\r\n caseId?: number;\r\n assignmentCreated?: Date;\r\n caseSource?: string | undefined;\r\n incidentType?: string | undefined;\r\n incidentDescription?: string | undefined;\r\n helpType?: string | undefined;\r\n helpTypeDescription?: string | undefined;\r\n streetAddress?: string | undefined;\r\n city?: string | undefined;\r\n locationTypeId?: LocationType;\r\n locationType?: string | undefined;\r\n locationTime?: Date;\r\n longitude?: number | undefined;\r\n latitude?: number | undefined;\r\n locationDescription?: string | undefined;\r\n callerContactPhone?: string | undefined;\r\n callerContactInfo?: string | undefined;\r\n actualDropOffLocation?: string | undefined;\r\n actualDropOffLocationCity?: string | undefined;\r\n firstRegistrationDate?: Date | undefined;\r\n mileage?: number | undefined;\r\n mileageDate?: Date | undefined;\r\n lastOwnerChangeDate?: Date | undefined;\r\n legalOwners?: number | undefined;\r\n registrationNumber?: string | undefined;\r\n curbWeight?: number | undefined;\r\n hasCargoOrTrailer?: boolean | undefined;\r\n cargoOrTrailerWeight?: number | undefined;\r\n vehicleType?: string | undefined;\r\n color?: string | undefined;\r\n customVehicleTypeDescription?: string | undefined;\r\n chassisNumber?: string | undefined;\r\n countryOfOrigin?: string | undefined;\r\n odometerReading?: number | undefined;\r\n brand?: string | undefined;\r\n insuranceCompany?: string | undefined;\r\n vehicleDamageInsuranceCompany?: string | undefined;\r\n assistPackage?: string | undefined;\r\n ownerFullName?: string | undefined;\r\n orgOrSocialSecurityNumber?: string | undefined;\r\n ownerPhone?: string | undefined;\r\n ownerMobilePhone?: string | undefined;\r\n ownerStreetAddress?: string | undefined;\r\n ownerZipCode?: string | undefined;\r\n ownerCity?: string | undefined;\r\n ownerCountry?: string | undefined;\r\n assignmentId?: number;\r\n\r\n constructor(data?: IGetCustomerVehicleDetailsResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.responseCreated = _data[\"responseCreated\"] ? new Date(_data[\"responseCreated\"].toString()) : undefined;\r\n this.caseId = _data[\"caseId\"];\r\n this.assignmentCreated = _data[\"assignmentCreated\"] ? new Date(_data[\"assignmentCreated\"].toString()) : undefined;\r\n this.caseSource = _data[\"caseSource\"];\r\n this.incidentType = _data[\"incidentType\"];\r\n this.incidentDescription = _data[\"incidentDescription\"];\r\n this.helpType = _data[\"helpType\"];\r\n this.helpTypeDescription = _data[\"helpTypeDescription\"];\r\n this.streetAddress = _data[\"streetAddress\"];\r\n this.city = _data[\"city\"];\r\n this.locationTypeId = _data[\"locationTypeId\"];\r\n this.locationType = _data[\"locationType\"];\r\n this.locationTime = _data[\"locationTime\"] ? new Date(_data[\"locationTime\"].toString()) : undefined;\r\n this.longitude = _data[\"longitude\"];\r\n this.latitude = _data[\"latitude\"];\r\n this.locationDescription = _data[\"locationDescription\"];\r\n this.callerContactPhone = _data[\"callerContactPhone\"];\r\n this.callerContactInfo = _data[\"callerContactInfo\"];\r\n this.actualDropOffLocation = _data[\"actualDropOffLocation\"];\r\n this.actualDropOffLocationCity = _data[\"actualDropOffLocationCity\"];\r\n this.firstRegistrationDate = _data[\"firstRegistrationDate\"] ? new Date(_data[\"firstRegistrationDate\"].toString()) : undefined;\r\n this.mileage = _data[\"mileage\"];\r\n this.mileageDate = _data[\"mileageDate\"] ? new Date(_data[\"mileageDate\"].toString()) : undefined;\r\n this.lastOwnerChangeDate = _data[\"lastOwnerChangeDate\"] ? new Date(_data[\"lastOwnerChangeDate\"].toString()) : undefined;\r\n this.legalOwners = _data[\"legalOwners\"];\r\n this.registrationNumber = _data[\"registrationNumber\"];\r\n this.curbWeight = _data[\"curbWeight\"];\r\n this.hasCargoOrTrailer = _data[\"hasCargoOrTrailer\"];\r\n this.cargoOrTrailerWeight = _data[\"cargoOrTrailerWeight\"];\r\n this.vehicleType = _data[\"vehicleType\"];\r\n this.color = _data[\"color\"];\r\n this.customVehicleTypeDescription = _data[\"customVehicleTypeDescription\"];\r\n this.chassisNumber = _data[\"chassisNumber\"];\r\n this.countryOfOrigin = _data[\"countryOfOrigin\"];\r\n this.odometerReading = _data[\"odometerReading\"];\r\n this.brand = _data[\"brand\"];\r\n this.insuranceCompany = _data[\"insuranceCompany\"];\r\n this.vehicleDamageInsuranceCompany = _data[\"vehicleDamageInsuranceCompany\"];\r\n this.assistPackage = _data[\"assistPackage\"];\r\n this.ownerFullName = _data[\"ownerFullName\"];\r\n this.orgOrSocialSecurityNumber = _data[\"orgOrSocialSecurityNumber\"];\r\n this.ownerPhone = _data[\"ownerPhone\"];\r\n this.ownerMobilePhone = _data[\"ownerMobilePhone\"];\r\n this.ownerStreetAddress = _data[\"ownerStreetAddress\"];\r\n this.ownerZipCode = _data[\"ownerZipCode\"];\r\n this.ownerCity = _data[\"ownerCity\"];\r\n this.ownerCountry = _data[\"ownerCountry\"];\r\n this.assignmentId = _data[\"assignmentId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetCustomerVehicleDetailsResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetCustomerVehicleDetailsResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"responseCreated\"] = this.responseCreated ? this.responseCreated.toISOString() : undefined;\r\n data[\"caseId\"] = this.caseId;\r\n data[\"assignmentCreated\"] = this.assignmentCreated ? this.assignmentCreated.toISOString() : undefined;\r\n data[\"caseSource\"] = this.caseSource;\r\n data[\"incidentType\"] = this.incidentType;\r\n data[\"incidentDescription\"] = this.incidentDescription;\r\n data[\"helpType\"] = this.helpType;\r\n data[\"helpTypeDescription\"] = this.helpTypeDescription;\r\n data[\"streetAddress\"] = this.streetAddress;\r\n data[\"city\"] = this.city;\r\n data[\"locationTypeId\"] = this.locationTypeId;\r\n data[\"locationType\"] = this.locationType;\r\n data[\"locationTime\"] = this.locationTime ? this.locationTime.toISOString() : undefined;\r\n data[\"longitude\"] = this.longitude;\r\n data[\"latitude\"] = this.latitude;\r\n data[\"locationDescription\"] = this.locationDescription;\r\n data[\"callerContactPhone\"] = this.callerContactPhone;\r\n data[\"callerContactInfo\"] = this.callerContactInfo;\r\n data[\"actualDropOffLocation\"] = this.actualDropOffLocation;\r\n data[\"actualDropOffLocationCity\"] = this.actualDropOffLocationCity;\r\n data[\"firstRegistrationDate\"] = this.firstRegistrationDate ? this.firstRegistrationDate.toISOString() : undefined;\r\n data[\"mileage\"] = this.mileage;\r\n data[\"mileageDate\"] = this.mileageDate ? this.mileageDate.toISOString() : undefined;\r\n data[\"lastOwnerChangeDate\"] = this.lastOwnerChangeDate ? this.lastOwnerChangeDate.toISOString() : undefined;\r\n data[\"legalOwners\"] = this.legalOwners;\r\n data[\"registrationNumber\"] = this.registrationNumber;\r\n data[\"curbWeight\"] = this.curbWeight;\r\n data[\"hasCargoOrTrailer\"] = this.hasCargoOrTrailer;\r\n data[\"cargoOrTrailerWeight\"] = this.cargoOrTrailerWeight;\r\n data[\"vehicleType\"] = this.vehicleType;\r\n data[\"color\"] = this.color;\r\n data[\"customVehicleTypeDescription\"] = this.customVehicleTypeDescription;\r\n data[\"chassisNumber\"] = this.chassisNumber;\r\n data[\"countryOfOrigin\"] = this.countryOfOrigin;\r\n data[\"odometerReading\"] = this.odometerReading;\r\n data[\"brand\"] = this.brand;\r\n data[\"insuranceCompany\"] = this.insuranceCompany;\r\n data[\"vehicleDamageInsuranceCompany\"] = this.vehicleDamageInsuranceCompany;\r\n data[\"assistPackage\"] = this.assistPackage;\r\n data[\"ownerFullName\"] = this.ownerFullName;\r\n data[\"orgOrSocialSecurityNumber\"] = this.orgOrSocialSecurityNumber;\r\n data[\"ownerPhone\"] = this.ownerPhone;\r\n data[\"ownerMobilePhone\"] = this.ownerMobilePhone;\r\n data[\"ownerStreetAddress\"] = this.ownerStreetAddress;\r\n data[\"ownerZipCode\"] = this.ownerZipCode;\r\n data[\"ownerCity\"] = this.ownerCity;\r\n data[\"ownerCountry\"] = this.ownerCountry;\r\n data[\"assignmentId\"] = this.assignmentId;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IGetCustomerVehicleDetailsResponse {\r\n responseCreated?: Date;\r\n caseId?: number;\r\n assignmentCreated?: Date;\r\n caseSource?: string | undefined;\r\n incidentType?: string | undefined;\r\n incidentDescription?: string | undefined;\r\n helpType?: string | undefined;\r\n helpTypeDescription?: string | undefined;\r\n streetAddress?: string | undefined;\r\n city?: string | undefined;\r\n locationTypeId?: LocationType;\r\n locationType?: string | undefined;\r\n locationTime?: Date;\r\n longitude?: number | undefined;\r\n latitude?: number | undefined;\r\n locationDescription?: string | undefined;\r\n callerContactPhone?: string | undefined;\r\n callerContactInfo?: string | undefined;\r\n actualDropOffLocation?: string | undefined;\r\n actualDropOffLocationCity?: string | undefined;\r\n firstRegistrationDate?: Date | undefined;\r\n mileage?: number | undefined;\r\n mileageDate?: Date | undefined;\r\n lastOwnerChangeDate?: Date | undefined;\r\n legalOwners?: number | undefined;\r\n registrationNumber?: string | undefined;\r\n curbWeight?: number | undefined;\r\n hasCargoOrTrailer?: boolean | undefined;\r\n cargoOrTrailerWeight?: number | undefined;\r\n vehicleType?: string | undefined;\r\n color?: string | undefined;\r\n customVehicleTypeDescription?: string | undefined;\r\n chassisNumber?: string | undefined;\r\n countryOfOrigin?: string | undefined;\r\n odometerReading?: number | undefined;\r\n brand?: string | undefined;\r\n insuranceCompany?: string | undefined;\r\n vehicleDamageInsuranceCompany?: string | undefined;\r\n assistPackage?: string | undefined;\r\n ownerFullName?: string | undefined;\r\n orgOrSocialSecurityNumber?: string | undefined;\r\n ownerPhone?: string | undefined;\r\n ownerMobilePhone?: string | undefined;\r\n ownerStreetAddress?: string | undefined;\r\n ownerZipCode?: string | undefined;\r\n ownerCity?: string | undefined;\r\n ownerCountry?: string | undefined;\r\n assignmentId?: number;\r\n}\r\n\r\nexport class GetStreetAddressResponse implements IGetStreetAddressResponse {\r\n streetAddress?: string | undefined;\r\n city?: string | undefined;\r\n\r\n constructor(data?: IGetStreetAddressResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.streetAddress = _data[\"streetAddress\"];\r\n this.city = _data[\"city\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetStreetAddressResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetStreetAddressResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"streetAddress\"] = this.streetAddress;\r\n data[\"city\"] = this.city;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IGetStreetAddressResponse {\r\n streetAddress?: string | undefined;\r\n city?: string | undefined;\r\n}\r\n\r\nexport class ToggleUserFlagRequest implements IToggleUserFlagRequest {\r\n caseId?: number;\r\n flagType?: FlagEnum;\r\n\r\n constructor(data?: IToggleUserFlagRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.caseId = _data[\"caseId\"];\r\n this.flagType = _data[\"flagType\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ToggleUserFlagRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ToggleUserFlagRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"caseId\"] = this.caseId;\r\n data[\"flagType\"] = this.flagType;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IToggleUserFlagRequest {\r\n caseId?: number;\r\n flagType?: FlagEnum;\r\n}\r\n\r\nexport class MapCase implements IMapCase {\r\n waystarScore?: number;\r\n caseId?: number;\r\n\r\n constructor(data?: IMapCase) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.waystarScore = _data[\"waystarScore\"];\r\n this.caseId = _data[\"caseId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): MapCase {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MapCase();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"waystarScore\"] = this.waystarScore;\r\n data[\"caseId\"] = this.caseId;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IMapCase {\r\n waystarScore?: number;\r\n caseId?: number;\r\n}\r\n\r\nexport class CarfaxResponse implements ICarfaxResponse {\r\n success?: boolean;\r\n htmlData?: string | undefined;\r\n apiResponse?: CarfaxAPIResponse | undefined;\r\n apiError?: CarfaxAPIErrorResponse | undefined;\r\n\r\n constructor(data?: ICarfaxResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.success = _data[\"success\"];\r\n this.htmlData = _data[\"htmlData\"];\r\n this.apiResponse = _data[\"apiResponse\"] ? CarfaxAPIResponse.fromJS(_data[\"apiResponse\"]) : undefined;\r\n this.apiError = _data[\"apiError\"] ? CarfaxAPIErrorResponse.fromJS(_data[\"apiError\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CarfaxResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CarfaxResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"success\"] = this.success;\r\n data[\"htmlData\"] = this.htmlData;\r\n data[\"apiResponse\"] = this.apiResponse ? this.apiResponse.toJSON() : undefined;\r\n data[\"apiError\"] = this.apiError ? this.apiError.toJSON() : undefined;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface ICarfaxResponse {\r\n success?: boolean;\r\n htmlData?: string | undefined;\r\n apiResponse?: CarfaxAPIResponse | undefined;\r\n apiError?: CarfaxAPIErrorResponse | undefined;\r\n}\r\n\r\nexport class CarfaxAPIResponse implements ICarfaxAPIResponse {\r\n vehicleData?: VehicleData | undefined;\r\n\r\n constructor(data?: ICarfaxAPIResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.vehicleData = _data[\"vehicleData\"] ? VehicleData.fromJS(_data[\"vehicleData\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CarfaxAPIResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CarfaxAPIResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"vehicleData\"] = this.vehicleData ? this.vehicleData.toJSON() : undefined;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface ICarfaxAPIResponse {\r\n vehicleData?: VehicleData | undefined;\r\n}\r\n\r\nexport class VehicleData implements IVehicleData {\r\n riskAlertStolen?: boolean;\r\n riskAlertStolenInPast?: boolean;\r\n riskAlertInsuranceClaim?: boolean;\r\n riskAlertTotalLoss?: boolean;\r\n riskAlertJunk?: boolean;\r\n riskAlertSalvage?: boolean;\r\n riskAlertFlood?: boolean;\r\n riskAlertRecall?: boolean;\r\n riskAlertLemon?: boolean;\r\n riskAlertScrapped?: boolean;\r\n riskAlertAccident?: boolean;\r\n riskAlertDamage?: boolean;\r\n riskAlertAirbagDeployed?: boolean;\r\n riskAlertMileageInconsistency?: boolean;\r\n riskAlertPotentialRollback?: boolean;\r\n riskAlertDifferentReadingUnitsOrInconsistency?: boolean;\r\n riskAlertRental?: boolean;\r\n riskAlertTaxi?: boolean;\r\n riskAlertImport?: boolean;\r\n riskAlertUsImport?: boolean;\r\n riskAlertChassisModification?: boolean;\r\n vin?: string | undefined;\r\n make?: string | undefined;\r\n model?: string | undefined;\r\n modelYear?: number | undefined;\r\n manufacturingDate?: string | undefined;\r\n vehicleYear?: string | undefined;\r\n engineSize?: number | undefined;\r\n enginePowerHp?: number | undefined;\r\n enginePowerKw?: number | undefined;\r\n engineCodes?: string[] | undefined;\r\n co2EmissionMixedDriving?: number | undefined;\r\n fuelConsumptionMixedDriving?: number | undefined;\r\n numberOfCylinders?: number | undefined;\r\n numberOfDoors?: number | undefined;\r\n numberOfPassengers?: number | undefined;\r\n numberOfSeats?: number | undefined;\r\n curbWeight?: number | undefined;\r\n grossVehicleWeight?: number | undefined;\r\n maxPayload?: number | undefined;\r\n fuel?: string | undefined;\r\n bodyType?: string | undefined;\r\n gearbox?: string | undefined;\r\n driveWheels?: string | undefined;\r\n euVehicleCategory?: string | undefined;\r\n firstRegistrationDate?: Date;\r\n firstRegistrationYear?: number;\r\n firstRegistrationDateInCountry?: Date | undefined;\r\n dateOfDeregistration?: Date | undefined;\r\n lastOdometerReading?: number | undefined;\r\n lastOdometerReadingDate?: Date | undefined;\r\n lastOwnerChangeDate?: Date;\r\n legalOwners?: number;\r\n\r\n constructor(data?: IVehicleData) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.riskAlertStolen = _data[\"riskAlertStolen\"];\r\n this.riskAlertStolenInPast = _data[\"riskAlertStolenInPast\"];\r\n this.riskAlertInsuranceClaim = _data[\"riskAlertInsuranceClaim\"];\r\n this.riskAlertTotalLoss = _data[\"riskAlertTotalLoss\"];\r\n this.riskAlertJunk = _data[\"riskAlertJunk\"];\r\n this.riskAlertSalvage = _data[\"riskAlertSalvage\"];\r\n this.riskAlertFlood = _data[\"riskAlertFlood\"];\r\n this.riskAlertRecall = _data[\"riskAlertRecall\"];\r\n this.riskAlertLemon = _data[\"riskAlertLemon\"];\r\n this.riskAlertScrapped = _data[\"riskAlertScrapped\"];\r\n this.riskAlertAccident = _data[\"riskAlertAccident\"];\r\n this.riskAlertDamage = _data[\"riskAlertDamage\"];\r\n this.riskAlertAirbagDeployed = _data[\"riskAlertAirbagDeployed\"];\r\n this.riskAlertMileageInconsistency = _data[\"riskAlertMileageInconsistency\"];\r\n this.riskAlertPotentialRollback = _data[\"riskAlertPotentialRollback\"];\r\n this.riskAlertDifferentReadingUnitsOrInconsistency = _data[\"riskAlertDifferentReadingUnitsOrInconsistency\"];\r\n this.riskAlertRental = _data[\"riskAlertRental\"];\r\n this.riskAlertTaxi = _data[\"riskAlertTaxi\"];\r\n this.riskAlertImport = _data[\"riskAlertImport\"];\r\n this.riskAlertUsImport = _data[\"riskAlertUsImport\"];\r\n this.riskAlertChassisModification = _data[\"riskAlertChassisModification\"];\r\n this.vin = _data[\"vin\"];\r\n this.make = _data[\"make\"];\r\n this.model = _data[\"model\"];\r\n this.modelYear = _data[\"modelYear\"];\r\n this.manufacturingDate = _data[\"manufacturingDate\"];\r\n this.vehicleYear = _data[\"vehicleYear\"];\r\n this.engineSize = _data[\"engineSize\"];\r\n this.enginePowerHp = _data[\"enginePowerHp\"];\r\n this.enginePowerKw = _data[\"enginePowerKw\"];\r\n if (Array.isArray(_data[\"engineCodes\"])) {\r\n this.engineCodes = [] as any;\r\n for (let item of _data[\"engineCodes\"])\r\n this.engineCodes!.push(item);\r\n }\r\n this.co2EmissionMixedDriving = _data[\"co2EmissionMixedDriving\"];\r\n this.fuelConsumptionMixedDriving = _data[\"fuelConsumptionMixedDriving\"];\r\n this.numberOfCylinders = _data[\"numberOfCylinders\"];\r\n this.numberOfDoors = _data[\"numberOfDoors\"];\r\n this.numberOfPassengers = _data[\"numberOfPassengers\"];\r\n this.numberOfSeats = _data[\"numberOfSeats\"];\r\n this.curbWeight = _data[\"curbWeight\"];\r\n this.grossVehicleWeight = _data[\"grossVehicleWeight\"];\r\n this.maxPayload = _data[\"maxPayload\"];\r\n this.fuel = _data[\"fuel\"];\r\n this.bodyType = _data[\"bodyType\"];\r\n this.gearbox = _data[\"gearbox\"];\r\n this.driveWheels = _data[\"driveWheels\"];\r\n this.euVehicleCategory = _data[\"euVehicleCategory\"];\r\n this.firstRegistrationDate = _data[\"firstRegistrationDate\"] ? new Date(_data[\"firstRegistrationDate\"].toString()) : undefined;\r\n this.firstRegistrationYear = _data[\"firstRegistrationYear\"];\r\n this.firstRegistrationDateInCountry = _data[\"firstRegistrationDateInCountry\"] ? new Date(_data[\"firstRegistrationDateInCountry\"].toString()) : undefined;\r\n this.dateOfDeregistration = _data[\"dateOfDeregistration\"] ? new Date(_data[\"dateOfDeregistration\"].toString()) : undefined;\r\n this.lastOdometerReading = _data[\"lastOdometerReading\"];\r\n this.lastOdometerReadingDate = _data[\"lastOdometerReadingDate\"] ? new Date(_data[\"lastOdometerReadingDate\"].toString()) : undefined;\r\n this.lastOwnerChangeDate = _data[\"lastOwnerChangeDate\"] ? new Date(_data[\"lastOwnerChangeDate\"].toString()) : undefined;\r\n this.legalOwners = _data[\"legalOwners\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): VehicleData {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new VehicleData();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"riskAlertStolen\"] = this.riskAlertStolen;\r\n data[\"riskAlertStolenInPast\"] = this.riskAlertStolenInPast;\r\n data[\"riskAlertInsuranceClaim\"] = this.riskAlertInsuranceClaim;\r\n data[\"riskAlertTotalLoss\"] = this.riskAlertTotalLoss;\r\n data[\"riskAlertJunk\"] = this.riskAlertJunk;\r\n data[\"riskAlertSalvage\"] = this.riskAlertSalvage;\r\n data[\"riskAlertFlood\"] = this.riskAlertFlood;\r\n data[\"riskAlertRecall\"] = this.riskAlertRecall;\r\n data[\"riskAlertLemon\"] = this.riskAlertLemon;\r\n data[\"riskAlertScrapped\"] = this.riskAlertScrapped;\r\n data[\"riskAlertAccident\"] = this.riskAlertAccident;\r\n data[\"riskAlertDamage\"] = this.riskAlertDamage;\r\n data[\"riskAlertAirbagDeployed\"] = this.riskAlertAirbagDeployed;\r\n data[\"riskAlertMileageInconsistency\"] = this.riskAlertMileageInconsistency;\r\n data[\"riskAlertPotentialRollback\"] = this.riskAlertPotentialRollback;\r\n data[\"riskAlertDifferentReadingUnitsOrInconsistency\"] = this.riskAlertDifferentReadingUnitsOrInconsistency;\r\n data[\"riskAlertRental\"] = this.riskAlertRental;\r\n data[\"riskAlertTaxi\"] = this.riskAlertTaxi;\r\n data[\"riskAlertImport\"] = this.riskAlertImport;\r\n data[\"riskAlertUsImport\"] = this.riskAlertUsImport;\r\n data[\"riskAlertChassisModification\"] = this.riskAlertChassisModification;\r\n data[\"vin\"] = this.vin;\r\n data[\"make\"] = this.make;\r\n data[\"model\"] = this.model;\r\n data[\"modelYear\"] = this.modelYear;\r\n data[\"manufacturingDate\"] = this.manufacturingDate;\r\n data[\"vehicleYear\"] = this.vehicleYear;\r\n data[\"engineSize\"] = this.engineSize;\r\n data[\"enginePowerHp\"] = this.enginePowerHp;\r\n data[\"enginePowerKw\"] = this.enginePowerKw;\r\n if (Array.isArray(this.engineCodes)) {\r\n data[\"engineCodes\"] = [];\r\n for (let item of this.engineCodes)\r\n data[\"engineCodes\"].push(item);\r\n }\r\n data[\"co2EmissionMixedDriving\"] = this.co2EmissionMixedDriving;\r\n data[\"fuelConsumptionMixedDriving\"] = this.fuelConsumptionMixedDriving;\r\n data[\"numberOfCylinders\"] = this.numberOfCylinders;\r\n data[\"numberOfDoors\"] = this.numberOfDoors;\r\n data[\"numberOfPassengers\"] = this.numberOfPassengers;\r\n data[\"numberOfSeats\"] = this.numberOfSeats;\r\n data[\"curbWeight\"] = this.curbWeight;\r\n data[\"grossVehicleWeight\"] = this.grossVehicleWeight;\r\n data[\"maxPayload\"] = this.maxPayload;\r\n data[\"fuel\"] = this.fuel;\r\n data[\"bodyType\"] = this.bodyType;\r\n data[\"gearbox\"] = this.gearbox;\r\n data[\"driveWheels\"] = this.driveWheels;\r\n data[\"euVehicleCategory\"] = this.euVehicleCategory;\r\n data[\"firstRegistrationDate\"] = this.firstRegistrationDate ? this.firstRegistrationDate.toISOString() : undefined;\r\n data[\"firstRegistrationYear\"] = this.firstRegistrationYear;\r\n data[\"firstRegistrationDateInCountry\"] = this.firstRegistrationDateInCountry ? this.firstRegistrationDateInCountry.toISOString() : undefined;\r\n data[\"dateOfDeregistration\"] = this.dateOfDeregistration ? this.dateOfDeregistration.toISOString() : undefined;\r\n data[\"lastOdometerReading\"] = this.lastOdometerReading;\r\n data[\"lastOdometerReadingDate\"] = this.lastOdometerReadingDate ? this.lastOdometerReadingDate.toISOString() : undefined;\r\n data[\"lastOwnerChangeDate\"] = this.lastOwnerChangeDate ? this.lastOwnerChangeDate.toISOString() : undefined;\r\n data[\"legalOwners\"] = this.legalOwners;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IVehicleData {\r\n riskAlertStolen?: boolean;\r\n riskAlertStolenInPast?: boolean;\r\n riskAlertInsuranceClaim?: boolean;\r\n riskAlertTotalLoss?: boolean;\r\n riskAlertJunk?: boolean;\r\n riskAlertSalvage?: boolean;\r\n riskAlertFlood?: boolean;\r\n riskAlertRecall?: boolean;\r\n riskAlertLemon?: boolean;\r\n riskAlertScrapped?: boolean;\r\n riskAlertAccident?: boolean;\r\n riskAlertDamage?: boolean;\r\n riskAlertAirbagDeployed?: boolean;\r\n riskAlertMileageInconsistency?: boolean;\r\n riskAlertPotentialRollback?: boolean;\r\n riskAlertDifferentReadingUnitsOrInconsistency?: boolean;\r\n riskAlertRental?: boolean;\r\n riskAlertTaxi?: boolean;\r\n riskAlertImport?: boolean;\r\n riskAlertUsImport?: boolean;\r\n riskAlertChassisModification?: boolean;\r\n vin?: string | undefined;\r\n make?: string | undefined;\r\n model?: string | undefined;\r\n modelYear?: number | undefined;\r\n manufacturingDate?: string | undefined;\r\n vehicleYear?: string | undefined;\r\n engineSize?: number | undefined;\r\n enginePowerHp?: number | undefined;\r\n enginePowerKw?: number | undefined;\r\n engineCodes?: string[] | undefined;\r\n co2EmissionMixedDriving?: number | undefined;\r\n fuelConsumptionMixedDriving?: number | undefined;\r\n numberOfCylinders?: number | undefined;\r\n numberOfDoors?: number | undefined;\r\n numberOfPassengers?: number | undefined;\r\n numberOfSeats?: number | undefined;\r\n curbWeight?: number | undefined;\r\n grossVehicleWeight?: number | undefined;\r\n maxPayload?: number | undefined;\r\n fuel?: string | undefined;\r\n bodyType?: string | undefined;\r\n gearbox?: string | undefined;\r\n driveWheels?: string | undefined;\r\n euVehicleCategory?: string | undefined;\r\n firstRegistrationDate?: Date;\r\n firstRegistrationYear?: number;\r\n firstRegistrationDateInCountry?: Date | undefined;\r\n dateOfDeregistration?: Date | undefined;\r\n lastOdometerReading?: number | undefined;\r\n lastOdometerReadingDate?: Date | undefined;\r\n lastOwnerChangeDate?: Date;\r\n legalOwners?: number;\r\n}\r\n\r\nexport class CarfaxAPIErrorResponse implements ICarfaxAPIErrorResponse {\r\n error_Code?: string | undefined;\r\n msg?: string | undefined;\r\n\r\n constructor(data?: ICarfaxAPIErrorResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.error_Code = _data[\"error_Code\"];\r\n this.msg = _data[\"msg\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CarfaxAPIErrorResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CarfaxAPIErrorResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"error_Code\"] = this.error_Code;\r\n data[\"msg\"] = this.msg;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface ICarfaxAPIErrorResponse {\r\n error_Code?: string | undefined;\r\n msg?: string | undefined;\r\n}\r\n\r\nexport class ApiKeyModel implements IApiKeyModel {\r\n apiKey?: string | undefined;\r\n\r\n constructor(data?: IApiKeyModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.apiKey = _data[\"apiKey\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ApiKeyModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ApiKeyModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"apiKey\"] = this.apiKey;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IApiKeyModel {\r\n apiKey?: string | undefined;\r\n}\r\n\r\nexport class WaystarLocationSearch implements IWaystarLocationSearch {\r\n assignmentId?: number;\r\n brand?: string | undefined;\r\n created?: Date;\r\n customHelpTypeDescription?: string | undefined;\r\n customerId?: number | undefined;\r\n incidentTypeId?: number;\r\n insuranceCompanyId?: number | undefined;\r\n lat?: number;\r\n lng?: number;\r\n registrationNumber?: string | undefined;\r\n\r\n constructor(data?: IWaystarLocationSearch) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.assignmentId = _data[\"assignmentId\"];\r\n this.brand = _data[\"brand\"];\r\n this.created = _data[\"created\"] ? new Date(_data[\"created\"].toString()) : undefined;\r\n this.customHelpTypeDescription = _data[\"customHelpTypeDescription\"];\r\n this.customerId = _data[\"customerId\"];\r\n this.incidentTypeId = _data[\"incidentTypeId\"];\r\n this.insuranceCompanyId = _data[\"insuranceCompanyId\"];\r\n this.lat = _data[\"lat\"];\r\n this.lng = _data[\"lng\"];\r\n this.registrationNumber = _data[\"registrationNumber\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): WaystarLocationSearch {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new WaystarLocationSearch();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"assignmentId\"] = this.assignmentId;\r\n data[\"brand\"] = this.brand;\r\n data[\"created\"] = this.created ? this.created.toISOString() : undefined;\r\n data[\"customHelpTypeDescription\"] = this.customHelpTypeDescription;\r\n data[\"customerId\"] = this.customerId;\r\n data[\"incidentTypeId\"] = this.incidentTypeId;\r\n data[\"insuranceCompanyId\"] = this.insuranceCompanyId;\r\n data[\"lat\"] = this.lat;\r\n data[\"lng\"] = this.lng;\r\n data[\"registrationNumber\"] = this.registrationNumber;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IWaystarLocationSearch {\r\n assignmentId?: number;\r\n brand?: string | undefined;\r\n created?: Date;\r\n customHelpTypeDescription?: string | undefined;\r\n customerId?: number | undefined;\r\n incidentTypeId?: number;\r\n insuranceCompanyId?: number | undefined;\r\n lat?: number;\r\n lng?: number;\r\n registrationNumber?: string | undefined;\r\n}\r\n\r\nexport class IncidentLocationData implements IIncidentLocationData {\r\n assignmentIds?: number[] | undefined;\r\n customerId?: number;\r\n from?: Date;\r\n incidentTypeId?: number;\r\n incidentTypes?: string | undefined;\r\n insuranceCompanyId?: number | undefined;\r\n ne?: Bounds | undefined;\r\n sw?: Bounds | undefined;\r\n to?: Date;\r\n\r\n constructor(data?: IIncidentLocationData) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"assignmentIds\"])) {\r\n this.assignmentIds = [] as any;\r\n for (let item of _data[\"assignmentIds\"])\r\n this.assignmentIds!.push(item);\r\n }\r\n this.customerId = _data[\"customerId\"];\r\n this.from = _data[\"from\"] ? new Date(_data[\"from\"].toString()) : undefined;\r\n this.incidentTypeId = _data[\"incidentTypeId\"];\r\n this.incidentTypes = _data[\"incidentTypes\"];\r\n this.insuranceCompanyId = _data[\"insuranceCompanyId\"];\r\n this.ne = _data[\"ne\"] ? Bounds.fromJS(_data[\"ne\"]) : undefined;\r\n this.sw = _data[\"sw\"] ? Bounds.fromJS(_data[\"sw\"]) : undefined;\r\n this.to = _data[\"to\"] ? new Date(_data[\"to\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): IncidentLocationData {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new IncidentLocationData();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.assignmentIds)) {\r\n data[\"assignmentIds\"] = [];\r\n for (let item of this.assignmentIds)\r\n data[\"assignmentIds\"].push(item);\r\n }\r\n data[\"customerId\"] = this.customerId;\r\n data[\"from\"] = this.from ? this.from.toISOString() : undefined;\r\n data[\"incidentTypeId\"] = this.incidentTypeId;\r\n data[\"incidentTypes\"] = this.incidentTypes;\r\n data[\"insuranceCompanyId\"] = this.insuranceCompanyId;\r\n data[\"ne\"] = this.ne ? this.ne.toJSON() : undefined;\r\n data[\"sw\"] = this.sw ? this.sw.toJSON() : undefined;\r\n data[\"to\"] = this.to ? this.to.toISOString() : undefined;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IIncidentLocationData {\r\n assignmentIds?: number[] | undefined;\r\n customerId?: number;\r\n from?: Date;\r\n incidentTypeId?: number;\r\n incidentTypes?: string | undefined;\r\n insuranceCompanyId?: number | undefined;\r\n ne?: Bounds | undefined;\r\n sw?: Bounds | undefined;\r\n to?: Date;\r\n}\r\n\r\nexport class Bounds implements IBounds {\r\n lat?: number;\r\n lng?: number;\r\n\r\n constructor(data?: IBounds) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.lat = _data[\"lat\"];\r\n this.lng = _data[\"lng\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): Bounds {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Bounds();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"lat\"] = this.lat;\r\n data[\"lng\"] = this.lng;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IBounds {\r\n lat?: number;\r\n lng?: number;\r\n}\r\n\r\nexport class LogMeRequest implements ILogMeRequest {\r\n caseId?: number;\r\n action?: string | undefined;\r\n\r\n constructor(data?: ILogMeRequest) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.caseId = _data[\"caseId\"];\r\n this.action = _data[\"action\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): LogMeRequest {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LogMeRequest();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"caseId\"] = this.caseId;\r\n data[\"action\"] = this.action;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface ILogMeRequest {\r\n caseId?: number;\r\n action?: string | undefined;\r\n}\r\n\r\nexport class VehicleHistoryDTO implements IVehicleHistoryDTO {\r\n firstYearTimestamp?: number;\r\n lastYearTimestamp?: number;\r\n highestMileage?: number;\r\n lowesetMileage?: number;\r\n timeline?: VehicleHistoryTimelineDTO[] | undefined;\r\n\r\n constructor(data?: IVehicleHistoryDTO) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.firstYearTimestamp = _data[\"firstYearTimestamp\"];\r\n this.lastYearTimestamp = _data[\"lastYearTimestamp\"];\r\n this.highestMileage = _data[\"highestMileage\"];\r\n this.lowesetMileage = _data[\"lowesetMileage\"];\r\n if (Array.isArray(_data[\"timeline\"])) {\r\n this.timeline = [] as any;\r\n for (let item of _data[\"timeline\"])\r\n this.timeline!.push(VehicleHistoryTimelineDTO.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): VehicleHistoryDTO {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new VehicleHistoryDTO();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"firstYearTimestamp\"] = this.firstYearTimestamp;\r\n data[\"lastYearTimestamp\"] = this.lastYearTimestamp;\r\n data[\"highestMileage\"] = this.highestMileage;\r\n data[\"lowesetMileage\"] = this.lowesetMileage;\r\n if (Array.isArray(this.timeline)) {\r\n data[\"timeline\"] = [];\r\n for (let item of this.timeline)\r\n data[\"timeline\"].push(item.toJSON());\r\n }\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IVehicleHistoryDTO {\r\n firstYearTimestamp?: number;\r\n lastYearTimestamp?: number;\r\n highestMileage?: number;\r\n lowesetMileage?: number;\r\n timeline?: VehicleHistoryTimelineDTO[] | undefined;\r\n}\r\n\r\nexport class VehicleHistoryTimelineDTO implements IVehicleHistoryTimelineDTO {\r\n event?: string | undefined;\r\n timestamp?: number;\r\n mileage?: number | undefined;\r\n noTick?: boolean;\r\n ownerName?: string | undefined;\r\n\r\n constructor(data?: IVehicleHistoryTimelineDTO) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.event = _data[\"event\"];\r\n this.timestamp = _data[\"timestamp\"];\r\n this.mileage = _data[\"mileage\"];\r\n this.noTick = _data[\"noTick\"];\r\n this.ownerName = _data[\"ownerName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): VehicleHistoryTimelineDTO {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new VehicleHistoryTimelineDTO();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"event\"] = this.event;\r\n data[\"timestamp\"] = this.timestamp;\r\n data[\"mileage\"] = this.mileage;\r\n data[\"noTick\"] = this.noTick;\r\n data[\"ownerName\"] = this.ownerName;\r\n return data; \r\n }\r\n}\r\n\r\nexport interface IVehicleHistoryTimelineDTO {\r\n event?: string | undefined;\r\n timestamp?: number;\r\n mileage?: number | undefined;\r\n noTick?: boolean;\r\n ownerName?: string | undefined;\r\n}\r\n\r\nexport interface FileResponse {\r\n data: Blob;\r\n status: number;\r\n fileName?: string;\r\n headers?: { [name: string]: any };\r\n}\r\n\r\nexport class ApiException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isApiException = true;\r\n\r\n static isApiException(obj: any): obj is ApiException {\r\n return obj.isApiException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any {\r\n if (result !== null && result !== undefined)\r\n throw result;\r\n else\r\n throw new ApiException(message, status, response, headers, null);\r\n}","export const ApplicationName = 'WebUI';\r\n\r\nexport const QueryParameterNames = {\r\n ReturnUrl: 'returnUrl',\r\n Message: 'message',\r\n};\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: 'logout-callback',\r\n Logout: 'logout',\r\n LoggedOut: 'logged-out',\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: 'login',\r\n LoginCallback: 'login-callback',\r\n LoginFailed: 'login-failed',\r\n Profile: 'profile',\r\n Register: 'register',\r\n};\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: '/',\r\n DefaultLoggedOutPath: '/',\r\n ApiAuthorizationClientConfigurationUrl: `/_configuration/${ApplicationName}`,\r\n ApiAuthorizationPrefix: prefix,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n Login: `Identity/Account/Login`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n Register: `${prefix}/${LoginActions.Register}`,\r\n Profile: `${prefix}/${LoginActions.Profile}`,\r\n LogOut: `/Identity/Account/Logout`,\r\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n IdentityRegisterPath: '/Identity/Account/Register',\r\n IdentityManagePath: '/Identity/Account/Manage',\r\n};\r\n\r\nexport const ManualRoutes = {\r\n logoutPage: () => ApplicationPaths.LogOut,\r\n loginPage: () => ApplicationPaths.Login,\r\n};\r\n","import {\r\n CaseDTO,\r\n CasesClient,\r\n CasesFilter,\r\n CasesOrderBy,\r\n CasesSort,\r\n FlagEnum,\r\n GetCasesResponse,\r\n UserFlag,\r\n} from '../api-clients/index';\r\nimport React, { createContext, useEffect, useRef, useState } from 'react';\r\nimport { CasesContextSettings } from './types';\r\n\r\nexport interface ContextProps {\r\n cases: CaseDTO[];\r\n loading: boolean;\r\n numCases: number;\r\n filteredNumber: number;\r\n waystarScore: number;\r\n favored: number;\r\n unread: number;\r\n setTo: (to: Date) => void;\r\n setFrom: (from: Date) => void;\r\n setPageIndex: (index: number) => void;\r\n setCurrentFilter: (filter: CasesFilter) => void;\r\n setCurrentSort: (by: CasesSort) => void;\r\n setSearchInput: (input: string) => void;\r\n getCases: (repairShopsForCaseId?: number) => void;\r\n getTo: () => Date;\r\n getFrom: () => Date;\r\n getPageIndex: () => number;\r\n getPageSize: () => number;\r\n getCurrentFilter: () => CasesFilter;\r\n getCurrentSort: () => CasesSort;\r\n getCurrentOrderBy: () => CasesOrderBy;\r\n getSearchInput: () => string;\r\n update: (caseId: number, type: FlagEnum) => void;\r\n setLoading: (loading: boolean) => void;\r\n setCurrentOrderBy: (orderBy: CasesOrderBy) => void;\r\n saveSettings: () => void;\r\n loadSettings: () => void;\r\n setDefaultSettings: () => void;\r\n}\r\n\r\nexport const initialContext: ContextProps = {\r\n cases: [],\r\n loading: true,\r\n numCases: 0,\r\n filteredNumber: 0,\r\n waystarScore: 0,\r\n favored: 0,\r\n unread: 0,\r\n getSearchInput: () => '',\r\n setTo: () => Function,\r\n setFrom: () => Function,\r\n setPageIndex: () => Function,\r\n setCurrentFilter: () => Function,\r\n setCurrentSort: () => Function,\r\n setSearchInput: () => Function,\r\n getCases: (repairShopsForCaseId?: number) => Function,\r\n getTo: () => new Date(),\r\n getFrom: () => new Date(),\r\n getPageIndex: () => 0,\r\n getPageSize: () => 0,\r\n getCurrentFilter: () => CasesFilter.ALL,\r\n getCurrentOrderBy: () => CasesOrderBy.CREATED,\r\n getCurrentSort: () => CasesSort.DESCENDING,\r\n update: () => Function,\r\n setLoading: () => Function,\r\n setCurrentOrderBy: () => Function,\r\n saveSettings: () => Function,\r\n loadSettings: () => Function,\r\n setDefaultSettings: () => Function,\r\n};\r\n\r\nexport const CasesContext = createContext(initialContext);\r\n\r\nconst CasesProvider: React.FC = (props) => {\r\n const [loading, setLoading] = useState(true);\r\n const [cases, setCases] = useState([]);\r\n\r\n const [numCases, setNumCases] = useState(0);\r\n const [filteredNumber, setFilteredNumber] = useState(0);\r\n const [waystarScore, setWaystarScore] = useState(0);\r\n const [favored, setFavored] = useState(0);\r\n const [unread, setUnread] = useState(0);\r\n const [fetching, setFetching] = useState(true);\r\n\r\n const fromInput = useRef(\r\n new Date(new Date().setFullYear(new Date().getFullYear() - 1))\r\n );\r\n const toInput = useRef(new Date());\r\n const pageIndex = useRef(0);\r\n const pageSize = useRef(50);\r\n const currentFilter = useRef(CasesFilter.ALL);\r\n const currentSort = useRef(CasesSort.DESCENDING);\r\n const currentOrderBy = useRef(CasesOrderBy.CREATED);\r\n const searchInput = useRef('');\r\n // const triggerGetCases = useRef(true);\r\n\r\n const setTriggerGetCases = (newTriggerGetCases: boolean) => {\r\n setFetching(true);\r\n };\r\n\r\n const setSearchInput = (newSearchInput: string, trigger = true) => {\r\n searchInput.current = newSearchInput;\r\n setPageIndex(0, false);\r\n\r\n if (trigger) {\r\n setTriggerGetCases(true);\r\n }\r\n };\r\n\r\n const setTo = (to: Date, trigger = true) => {\r\n toInput.current = to;\r\n setPageIndex(0, false);\r\n\r\n if (trigger) {\r\n setTriggerGetCases(true);\r\n }\r\n };\r\n\r\n const setFrom = (from: Date, trigger = true) => {\r\n fromInput.current = from;\r\n setPageIndex(0, false);\r\n\r\n if (trigger) {\r\n setTriggerGetCases(true);\r\n }\r\n };\r\n\r\n const setPageIndex = (newPageIndex: number, trigger = true) => {\r\n pageIndex.current = newPageIndex;\r\n\r\n if (trigger) {\r\n setTriggerGetCases(true);\r\n }\r\n };\r\n\r\n const setPageSize = (newPageSize: number, trigger = true) => {\r\n pageSize.current = newPageSize;\r\n\r\n if (trigger) {\r\n setTriggerGetCases(true);\r\n }\r\n };\r\n\r\n const setCurrentFilter = (newFilter: CasesFilter, trigger = true) => {\r\n currentFilter.current = newFilter;\r\n setPageIndex(0, false);\r\n\r\n if (trigger) {\r\n setTriggerGetCases(true);\r\n }\r\n };\r\n\r\n const setCurrentSort = (newSort: CasesSort, trigger = true) => {\r\n currentSort.current = newSort;\r\n\r\n if (trigger) {\r\n setTriggerGetCases(true);\r\n }\r\n };\r\n\r\n const setCurrentOrderBy = (newOrderBy: CasesOrderBy, trigger = true) => {\r\n currentOrderBy.current = newOrderBy;\r\n\r\n if (trigger) {\r\n setTriggerGetCases(true);\r\n }\r\n };\r\n\r\n const getSearchInput = (): string => {\r\n return searchInput.current;\r\n };\r\n\r\n const getTo = (): Date => {\r\n return toInput.current;\r\n };\r\n\r\n const getFrom = (): Date => {\r\n return fromInput.current;\r\n };\r\n\r\n const getPageIndex = (): number => {\r\n return pageIndex.current;\r\n };\r\n\r\n const getPageSize = (): number => {\r\n return pageSize.current;\r\n };\r\n\r\n const getCurrentFilter = (): CasesFilter => {\r\n return currentFilter.current;\r\n };\r\n\r\n const getCurrentSort = (): CasesSort => {\r\n return currentSort.current;\r\n };\r\n\r\n const getCurrentOrderBy = (): CasesOrderBy => {\r\n return currentOrderBy.current;\r\n };\r\n\r\n const isInRepairShop = useRef(undefined);\r\n\r\n const settings = useRef(undefined);\r\n\r\n const loadSettings = () => {\r\n console.log(settings.current);\r\n if (\r\n isInRepairShop.current !== undefined &&\r\n settings.current !== undefined\r\n ) {\r\n isInRepairShop.current = undefined;\r\n console.log('Filtre', settings.current.filter);\r\n if (settings.current !== undefined) {\r\n setCurrentFilter(settings.current.filter, false);\r\n setCurrentSort(settings.current.sort, false);\r\n setCurrentOrderBy(settings.current.orderBy, false);\r\n setSearchInput(settings.current.searchInput, false);\r\n setFrom(settings.current.from, false);\r\n setTo(settings.current.to, false);\r\n setPageIndex(settings.current.pageIndex, false);\r\n setPageSize(settings.current.pageSize, false);\r\n settings.current = undefined;\r\n\r\n getCases();\r\n }\r\n }\r\n };\r\n\r\n const saveSettings = () => {\r\n settings.current = {\r\n pageIndex: pageIndex.current,\r\n pageSize: pageSize.current,\r\n filter: currentFilter.current,\r\n sort: currentSort.current,\r\n orderBy: currentOrderBy.current,\r\n searchInput: searchInput.current,\r\n from: fromInput.current,\r\n to: toInput.current,\r\n };\r\n isInRepairShop.current = undefined;\r\n };\r\n\r\n const setDefaultSettings = () => {\r\n setPageIndex(0, false);\r\n setPageSize(50, false);\r\n setCurrentFilter(CasesFilter.ALL, false);\r\n setCurrentSort(CasesSort.DESCENDING, false);\r\n setCurrentOrderBy(CasesOrderBy.CREATED, false);\r\n setSearchInput('', false);\r\n setFrom(\r\n new Date(new Date().setFullYear(new Date().getFullYear() - 1)),\r\n false\r\n );\r\n setTo(new Date(), false);\r\n };\r\n\r\n const getCases = async (repairShopsForCaseId?: number) => {\r\n setLoading(true);\r\n setFetching(false);\r\n console.log('getCases');\r\n let response: GetCasesResponse;\r\n const client = new CasesClient();\r\n if (\r\n repairShopsForCaseId !== undefined ||\r\n isInRepairShop.current !== undefined\r\n ) {\r\n if (repairShopsForCaseId !== undefined) {\r\n isInRepairShop.current = repairShopsForCaseId!;\r\n }\r\n\r\n response = await client.getRepairshopCases(\r\n true,\r\n pageIndex.current,\r\n pageSize.current,\r\n fromInput.current,\r\n toInput.current,\r\n currentFilter.current,\r\n currentSort.current,\r\n currentOrderBy.current,\r\n searchInput.current,\r\n isInRepairShop.current\r\n );\r\n } else {\r\n response = await client.getCases(\r\n true,\r\n pageIndex.current,\r\n pageSize.current,\r\n fromInput.current,\r\n toInput.current,\r\n currentFilter.current,\r\n currentSort.current,\r\n currentOrderBy.current,\r\n searchInput.current\r\n );\r\n }\r\n\r\n if (response) {\r\n if (response.numberOfCases !== undefined) {\r\n setNumCases(response.numberOfCases);\r\n }\r\n\r\n if (response.waystarScore !== undefined) {\r\n setWaystarScore(response.waystarScore);\r\n }\r\n\r\n if (response.favored !== undefined) {\r\n setFavored(response.favored);\r\n }\r\n\r\n if (response.unread !== undefined) {\r\n setUnread(response.unread);\r\n }\r\n\r\n if (response.filteredNumber !== undefined) {\r\n setFilteredNumber(response.filteredNumber);\r\n }\r\n\r\n setCases(response.cases!);\r\n }\r\n\r\n setLoading(false);\r\n };\r\n\r\n const update = (caseId: number, type: FlagEnum) => {\r\n let remove: boolean | undefined;\r\n\r\n setCases(\r\n cases.map((c) => {\r\n if (c.id === caseId) {\r\n if (c.userFlags) {\r\n if (c.userFlags.find((uf) => uf.flagId === type)) {\r\n c.userFlags = c.userFlags.filter((uf) => !(uf.flagId === type));\r\n remove = true;\r\n } else {\r\n if (type !== FlagEnum.Unread) {\r\n c.userFlags.push({\r\n flagId: type,\r\n caseId: c.id,\r\n id: -1,\r\n created: new Date(),\r\n updated: new Date(),\r\n } as UserFlag);\r\n }\r\n\r\n remove = false;\r\n }\r\n }\r\n }\r\n\r\n return c;\r\n })\r\n );\r\n\r\n switch (type) {\r\n case FlagEnum.Starred:\r\n if (remove === true) {\r\n setFavored(favored - 1);\r\n } else if (remove === false) {\r\n setFavored(favored + 1);\r\n }\r\n break;\r\n\r\n case FlagEnum.Unread:\r\n if (remove === true) {\r\n setUnread(unread - 1);\r\n }\r\n break;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n saveSettings();\r\n }, []);\r\n\r\n useEffect(() => {\r\n console.log('loading useeffect');\r\n if (fetching) {\r\n getCases();\r\n }\r\n }, [fetching]);\r\n\r\n return (\r\n getPageIndex(),\r\n getPageSize: (): number => getPageSize(),\r\n cases,\r\n getCurrentSort: (): CasesSort => getCurrentSort(),\r\n getCurrentOrderBy: (): CasesOrderBy => getCurrentOrderBy(),\r\n loading,\r\n getCurrentFilter: (): CasesFilter => getCurrentFilter(),\r\n favored,\r\n unread,\r\n numCases,\r\n filteredNumber,\r\n waystarScore,\r\n getSearchInput: (): string => getSearchInput(),\r\n getTo: (): Date => getTo(),\r\n getFrom: (): Date => getFrom(),\r\n setTo: (to: Date) => setTo(to),\r\n setFrom: (from: Date) => setFrom(from),\r\n setPageIndex: (index: number) => setPageIndex(index),\r\n setCurrentFilter: (filter: CasesFilter) => setCurrentFilter(filter),\r\n setCurrentSort: (sort: CasesSort) => setCurrentSort(sort),\r\n setSearchInput: (input: string) => setSearchInput(input),\r\n getCases: (repairShopsForCaseId?: number) =>\r\n getCases(repairShopsForCaseId),\r\n update: (caseId: number, type: FlagEnum) => update(caseId, type),\r\n setLoading: (loading: boolean) => setLoading(loading),\r\n setCurrentOrderBy: (orderBy: CasesOrderBy) =>\r\n setCurrentOrderBy(orderBy),\r\n saveSettings: () => saveSettings(),\r\n loadSettings: () => loadSettings(),\r\n setDefaultSettings: () => setDefaultSettings(),\r\n }}\r\n >\r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default CasesProvider;\r\n","import { CaseDTO, CasesFilter, CasesOrderBy, CasesSort } from '../api-clients';\r\n\r\nexport enum SearchDropdownOptionType {\r\n LAST_YEAR = 'Senaste 12 mån',\r\n LAST_HALFYEAR = 'Senaste 6 mån',\r\n LAST_QUARTER = 'Senaste 3 mån',\r\n LAST_MONTH = 'Senaste månaden',\r\n}\r\n\r\nexport enum CaseComponentColumnType {\r\n SPAN = 'SPAN',\r\n STAR = 'STAR',\r\n FLAG = 'FLAG',\r\n IMAGE = 'IMAGE',\r\n DATE = 'DATE',\r\n ENUM = 'ENUM',\r\n NUM_2 = 'NUM_2',\r\n SCORE = 'SCORE',\r\n}\r\n\r\nexport enum CaseDetailedActiveTab {\r\n INVESTIGATION = 'UTREDNING',\r\n PROCESSING = 'HANDLÄGGNING',\r\n CUSTOMER_AND_VEHICLE = 'KUND & FORDON',\r\n WORKSHOP_INFO = 'VERKSTADSINFO',\r\n}\r\n\r\nexport interface ICaseComponentColumnDefinition {\r\n type: CaseComponentColumnType;\r\n flex: number;\r\n style?: React.CSSProperties;\r\n property?: string;\r\n enum?: string;\r\n}\r\n\r\nexport const INSIG_WAYSTARSCORE = 0;\r\nexport const LOW_WAYSTARSCORE = 0.25;\r\nexport const MED_WAYSTARSCORE = 0.5;\r\nexport const HIGH_WAYSTARSCORE = 0.75;\r\n\r\nexport interface CasesContextSettings {\r\n pageIndex: number;\r\n pageSize: number;\r\n filter: CasesFilter;\r\n sort: CasesSort;\r\n orderBy: CasesOrderBy;\r\n searchInput: string;\r\n from: Date;\r\n to: Date;\r\n}\r\n\r\nexport interface CasesContextState {\r\n loading: boolean;\r\n cases: CaseDTO[];\r\n pageIndex: number;\r\n pageSize: number;\r\n filter: CasesFilter;\r\n sort: CasesSort;\r\n orderBy: CasesOrderBy;\r\n numberOfCases: number;\r\n numberOfFilteredCases: number;\r\n numberOfCasesWithHighWaystarScore: number;\r\n numberOfStarMarkedCases: number;\r\n numberOfUnreadCases: number;\r\n searchInput: string;\r\n fromInput: Date;\r\n toInput: Date;\r\n isInRepairShopId: number | undefined;\r\n settings: CasesContextSettings | undefined;\r\n}\r\n\r\nexport const initialCasesContextState: CasesContextState = {\r\n loading: true,\r\n cases: [],\r\n pageIndex: 0,\r\n pageSize: 50,\r\n filter: CasesFilter.ALL,\r\n sort: CasesSort.DESCENDING,\r\n orderBy: CasesOrderBy.DATETIME,\r\n numberOfCases: 0,\r\n numberOfFilteredCases: 0,\r\n numberOfCasesWithHighWaystarScore: 0,\r\n numberOfStarMarkedCases: 0,\r\n numberOfUnreadCases: 0,\r\n searchInput: '',\r\n fromInput: new Date(new Date().setFullYear(new Date().getFullYear() - 1)),\r\n toInput: new Date(),\r\n isInRepairShopId: undefined,\r\n settings: undefined,\r\n};\r\n","export const Colors = {\r\n Red: '#e30514',\r\n White: '#ffffff',\r\n WhiteShade: '#f6f6f6',\r\n DividerGrey: '#EBEBEB',\r\n LightGrey: '#d0d0d0',\r\n DarkGrey: '#828282',\r\n DarkGreyContrast: '#595959',\r\n Black: '#000000',\r\n NearBlack: '#0b0b0b',\r\n Golden: '#F7B500',\r\n Hover: '#fef6e1',\r\n Green: 'green',\r\n Background: 'white',\r\n};\r\n\r\nexport const FontSize = {\r\n Small: '12px',\r\n Medium: '14px',\r\n ZebraTitle: '16px',\r\n Large: '18px',\r\n Title: '24px',\r\n H1: '30px',\r\n H2: '24px',\r\n H3: '18px',\r\n};\r\n\r\nexport const FirstColumnWidth = {\r\n Default: 240,\r\n Small: 140,\r\n};\r\n\r\nexport const FontFamily = {};\r\n\r\nexport const Margins = {\r\n Small: '10px',\r\n Medium: '20px',\r\n Large: '30px',\r\n ExtraLarge: '35px',\r\n Double: '40px',\r\n};\r\n","import { CSSProperties } from 'react';\r\nimport { CaseComponentColumnType } from './types';\r\n\r\nexport const caseComponentDefinition = [\r\n { type: CaseComponentColumnType.SPAN, flex: 1 },\r\n { type: CaseComponentColumnType.STAR, flex: 1 },\r\n {\r\n type: CaseComponentColumnType.SCORE,\r\n flex: 2,\r\n property: 'waystarScore',\r\n },\r\n { type: CaseComponentColumnType.FLAG, flex: 3 },\r\n { type: CaseComponentColumnType.IMAGE, flex: 3, property: 'imageURIs[0]' },\r\n {\r\n type: CaseComponentColumnType.SPAN,\r\n flex: 4,\r\n property: 'registrationNumber',\r\n },\r\n { type: CaseComponentColumnType.SPAN, flex: 10, property: 'brand' },\r\n { type: CaseComponentColumnType.SPAN, flex: 12, property: 'streetAddress' },\r\n {\r\n type: CaseComponentColumnType.SPAN,\r\n flex: 9,\r\n property: 'incidentType',\r\n },\r\n {\r\n type: CaseComponentColumnType.DATE,\r\n flex: 7,\r\n property: 'crashDate', // SHOULD BE UPDATED\r\n style: {\r\n textAlign: 'right',\r\n } as CSSProperties,\r\n },\r\n {\r\n type: CaseComponentColumnType.DATE,\r\n flex: 7,\r\n property: 'created', // SHOULD BE UPDATED\r\n style: {\r\n textAlign: 'right',\r\n } as CSSProperties,\r\n },\r\n { type: CaseComponentColumnType.SPAN, flex: 1 },\r\n];\r\n","import React from 'react';\r\nimport styled, { keyframes } from 'styled-components';\r\nimport { Colors } from '../utils/styles';\r\n\r\nconst spinnerKeyframes = keyframes`\r\n 0% { opacity: 1; }\r\n 100% { opacity: 0; }\r\n`;\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n`;\r\n\r\nconst CenterContainer = styled.div`\r\n display: block;\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n`;\r\n\r\nconst Spinner = styled.div`\r\n display: inline-block;\r\n position: relative;\r\n width: 80px;\r\n height: 80px;\r\n div {\r\n animation-name: ${spinnerKeyframes};\r\n animation-duration: 1.2s;\r\n animation-iteration-count: infinite;\r\n transform-origin: 40px 40px;\r\n }\r\n div::after {\r\n content: ' ';\r\n display: block;\r\n position: absolute;\r\n top: 3px;\r\n left: 37px;\r\n width: 6px;\r\n height: 18px;\r\n border-radius: 20%;\r\n background: ${Colors.LightGrey};\r\n }\r\n div:nth-child(1) {\r\n transform: rotate(0deg);\r\n animation-delay: -1.1s;\r\n }\r\n div:nth-child(2) {\r\n transform: rotate(30deg);\r\n animation-delay: -1s;\r\n }\r\n div:nth-child(3) {\r\n transform: rotate(60deg);\r\n animation-delay: -0.9s;\r\n }\r\n div:nth-child(4) {\r\n transform: rotate(90deg);\r\n animation-delay: -0.8s;\r\n }\r\n div:nth-child(5) {\r\n transform: rotate(120deg);\r\n animation-delay: -0.7s;\r\n }\r\n div:nth-child(6) {\r\n transform: rotate(150deg);\r\n animation-delay: -0.6s;\r\n }\r\n div:nth-child(7) {\r\n transform: rotate(180deg);\r\n animation-delay: -0.5s;\r\n }\r\n div:nth-child(8) {\r\n transform: rotate(210deg);\r\n animation-delay: -0.4s;\r\n }\r\n div:nth-child(9) {\r\n transform: rotate(240deg);\r\n animation-delay: -0.3s;\r\n }\r\n div:nth-child(10) {\r\n transform: rotate(270deg);\r\n animation-delay: -0.2s;\r\n }\r\n div:nth-child(11) {\r\n transform: rotate(300deg);\r\n animation-delay: -0.1s;\r\n }\r\n div:nth-child(12) {\r\n transform: rotate(330deg);\r\n animation-delay: -0s;\r\n }\r\n`;\r\n\r\ninterface Props {\r\n center?: boolean;\r\n}\r\n\r\nconst Loader: React.FC = ({ center }) => {\r\n return (\r\n <>\r\n {center && (\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n {!center && (\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Loader;\r\n","import React, { createContext, useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport {\r\n BasicDataClient,\r\n BasicDataModel,\r\n CompanyDTO,\r\n UserModel,\r\n} from '../components/api-clients';\r\nimport Loader from '../components/Loader';\r\n\r\ninterface Props {\r\n user?: UserModel;\r\n companies?: CompanyDTO[];\r\n updateUser: (companyId: number) => void;\r\n routeContent: RouteContent[];\r\n}\r\n\r\nconst initialContext = {\r\n user: undefined,\r\n companies: undefined,\r\n updateUser: () => {},\r\n routeContent: [],\r\n};\r\n\r\nconst SpinnerContainer = styled.div`\r\n display: flex;\r\n width: 100%;\r\n height: 100%;\r\n justify-content: center;\r\n align-content: center;\r\n position: relative;\r\n &.centered {\r\n width: 450px;\r\n height: 470px;\r\n }\r\n &.modal {\r\n height: calc(100vh - 300px);\r\n width: 470px;\r\n }\r\n`;\r\nexport enum UserRole {\r\n Investigator = 'Investigator',\r\n SystemAdmin = 'SystemAdmin',\r\n ApiUser = 'ApiUser',\r\n CaseWorker = 'CaseWorker',\r\n}\r\n\r\nexport enum RouteContent {\r\n ViewContent = 1,\r\n ApiContent = 2,\r\n}\r\n\r\nexport const BasicDataContext = createContext(initialContext);\r\n\r\nconst BasicDataProvider: React.FC = ({ children }) => {\r\n const [basicData, setBasicData] = useState(\r\n undefined\r\n );\r\n\r\n const fetchBasicData = async () => {\r\n const client = new BasicDataClient();\r\n var resp = await client.getBasicData();\r\n setBasicData(resp);\r\n };\r\n\r\n useEffect(() => {\r\n fetchBasicData();\r\n }, []);\r\n\r\n if (!basicData) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const viewContent: RouteContent[] = [];\r\n if (!!basicData.currentUser) {\r\n basicData.currentUser.roles?.forEach((role) => {\r\n console.log(role, UserRole.Investigator, role == UserRole.Investigator);\r\n if (\r\n role == UserRole.Investigator ||\r\n role === UserRole.SystemAdmin ||\r\n role === UserRole.CaseWorker\r\n ) {\r\n if (!viewContent.find((f) => f == RouteContent.ViewContent))\r\n viewContent.push(RouteContent.ViewContent);\r\n }\r\n if (role == UserRole.ApiUser) {\r\n if (!viewContent.find((f) => f == RouteContent.ApiContent))\r\n viewContent.push(RouteContent.ApiContent);\r\n }\r\n });\r\n }\r\n\r\n const updateUser = async (companyId: number) => {\r\n const client = new BasicDataClient();\r\n var resp = await client.updateUser(companyId);\r\n setBasicData(resp);\r\n window.location.reload();\r\n };\r\n\r\n return (\r\n \r\n {basicData && children}\r\n \r\n );\r\n};\r\n\r\nexport default BasicDataProvider;\r\n","import React, { useContext } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { Colors, FontFamily } from '../../utils/styles';\r\nimport { BsStar, BsStarFill, BsFlagFill } from 'react-icons/bs';\r\nimport { caseComponentDefinition } from './case-definition';\r\nimport {\r\n CaseDTO,\r\n CasesClient,\r\n FlagEnum,\r\n ToggleUserFlagRequest,\r\n} from '../api-clients/index';\r\nimport {\r\n CaseComponentColumnType,\r\n MED_WAYSTARSCORE,\r\n ICaseComponentColumnDefinition,\r\n HIGH_WAYSTARSCORE,\r\n LOW_WAYSTARSCORE,\r\n} from './types';\r\nimport { CasesContext } from './CasesContext';\r\nimport dayjs from 'dayjs';\r\nimport { BasicDataContext, UserRole } from '../../utils/useBasicData';\r\n\r\nconst Container = styled.div<{ setBackground: boolean }>`\r\n display: inline-flex;\r\n flex-direction: row;\r\n align-items: center;\r\n cursor: pointer;\r\n background-color: ${(props) =>\r\n props.setBackground ? Colors.WhiteShade : ''};\r\n user-select: none;\r\n &:hover {\r\n background-color: ${Colors.Hover};\r\n }\r\n`;\r\n\r\nconst Div = styled.div<{\r\n flex: number;\r\n bold?: boolean;\r\n textAlign?: string;\r\n override: boolean;\r\n}>`\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n font-weight: ${(props) => (props.bold ? 'bold' : 'normal')};\r\n flex: ${(props) => props.flex};\r\n white-space: nowrap;\r\n width: 100%;\r\n height: 30px;\r\n line-height: 30px;\r\n\r\n svg {\r\n margin-right: -3px;\r\n }\r\n\r\n ${({ override }) =>\r\n override &&\r\n css`\r\n overflow: visible;\r\n `}\r\n`;\r\n\r\nconst ImgContainer = styled.div<{\r\n src: string;\r\n}>`\r\n display: inline-flex;\r\n min-width: min-content;\r\n white-space: nowrap;\r\n padding: 0;\r\n margin: 0;\r\n margin-bottom: -5px;\r\n height: 30px;\r\n width: 42px;\r\n background-image: ${(props) => `url(${props.src})`};\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: top;\r\n`;\r\n\r\ninterface Props {\r\n _case: CaseDTO;\r\n setBackground: boolean;\r\n openWindow: () => void;\r\n}\r\n\r\nconst CaseComponent: React.FC = ({\r\n _case,\r\n setBackground,\r\n openWindow,\r\n}) => {\r\n const { update } = useContext(CasesContext);\r\n const { user } = useContext(BasicDataContext);\r\n\r\n const systemAdmin = !!user?.roles?.find((f) => f == UserRole.SystemAdmin);\r\n const isUnread =\r\n _case.userFlags!.find((uf) => uf.flagId === FlagEnum.Unread) !== undefined;\r\n let isFavorite =\r\n _case.userFlags!.find((uf) => uf.flagId === FlagEnum.Starred) !== undefined;\r\n const score = _case.waystarScore;\r\n const handleClick = (type: FlagEnum) => {\r\n if (_case.id) {\r\n update(_case.id, type);\r\n toggleUserFlag(type);\r\n }\r\n };\r\n\r\n const toggleUserFlag = async (type: FlagEnum) => {\r\n const client = new CasesClient();\r\n await client.toggleUserFlag(\r\n new ToggleUserFlagRequest({\r\n flagType: type,\r\n caseId: _case.id,\r\n })\r\n );\r\n };\r\n\r\n const generateContentType = (\r\n _case: CaseDTO,\r\n cd: ICaseComponentColumnDefinition\r\n ) => {\r\n switch (cd.type) {\r\n case CaseComponentColumnType.SPAN:\r\n return cd.property\r\n ? _case[cd.property as keyof CaseDTO]\r\n ? _case[cd.property as keyof CaseDTO]\r\n : '-'\r\n : '';\r\n\r\n case CaseComponentColumnType.STAR:\r\n return isFavorite ? (\r\n handleClick(FlagEnum.Starred)}\r\n />\r\n ) : (\r\n handleClick(FlagEnum.Starred)}\r\n />\r\n );\r\n case CaseComponentColumnType.SCORE:\r\n var prop: any = _case.waystarScore;\r\n\r\n if (systemAdmin && _case.internalWaystarScore != null) {\r\n var internalScore: any = _case.internalWaystarScore;\r\n if (!isNaN(prop) && !isNaN(internalScore)) {\r\n return `${parseFloat(prop).toFixed(2)} (${parseFloat(\r\n internalScore\r\n ).toFixed(2)})`;\r\n }\r\n }\r\n if (!isNaN(prop)) {\r\n return parseFloat(prop).toFixed(2);\r\n }\r\n break;\r\n case CaseComponentColumnType.NUM_2:\r\n var prop: any = cd.property\r\n ? _case[cd.property as keyof CaseDTO]\r\n ? _case[cd.property as keyof CaseDTO]\r\n : '-'\r\n : '';\r\n\r\n if (!isNaN(prop)) {\r\n return parseFloat(prop).toFixed(2);\r\n }\r\n break;\r\n case CaseComponentColumnType.FLAG:\r\n var scores = [];\r\n if (score) {\r\n if (score > LOW_WAYSTARSCORE) {\r\n scores.push();\r\n }\r\n if (score > MED_WAYSTARSCORE) {\r\n scores.push();\r\n }\r\n if (score > HIGH_WAYSTARSCORE) {\r\n scores.push();\r\n }\r\n }\r\n return scores;\r\n\r\n case CaseComponentColumnType.IMAGE: {\r\n const src =\r\n _case.imageIds && _case.imageIds.length > 0\r\n ? `/Case/Thumbnail/${_case.imageIds[0]}`\r\n : '';\r\n return ;\r\n }\r\n\r\n case CaseComponentColumnType.DATE:\r\n return dayjs(_case[cd.property as keyof CaseDTO] as Date).format(\r\n 'YYYY-MM-DD HH:mm:ss'\r\n );\r\n }\r\n };\r\n\r\n var defintions = caseComponentDefinition;\r\n if (systemAdmin) {\r\n defintions = defintions.map((f) => {\r\n if (f.type === CaseComponentColumnType.FLAG) {\r\n f.flex = 1.5;\r\n }\r\n if (f.type === CaseComponentColumnType.SCORE) {\r\n f.flex = 3.5;\r\n }\r\n return f;\r\n });\r\n }\r\n\r\n return (\r\n \r\n {defintions.map((cd, index) => (\r\n openWindow()\r\n : undefined\r\n }\r\n >\r\n {generateContentType(_case, cd)}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default CaseComponent;\r\n","import styled from 'styled-components';\r\nimport { Colors, Margins } from '../../utils/styles';\r\n\r\nexport const Container = styled.div`\r\n display: inline-flex;\r\n flex-direction: column;\r\n width: 100%;\r\n`;\r\n\r\nexport const SubContainer = styled.div`\r\n display: inline-flex;\r\n flex-direction: column;\r\n width: 60%;\r\n min-width: 550px;\r\n`;\r\n\r\nexport const Divider = styled.div`\r\n border-bottom: 1px solid ${Colors.DividerGrey};\r\n width: 100%;\r\n`;\r\n\r\nexport const Spacer = styled.div`\r\n width: '100%';\r\n height: ${Margins.Medium};\r\n`;","import React, { useContext } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontFamily } from '../../utils/styles';\r\nimport CaseComponent from './CaseComponent';\r\nimport { BsStarFill } from 'react-icons/bs';\r\nimport { RiArrowDownSLine, RiArrowUpSLine } from 'react-icons/ri';\r\nimport { CasesContext } from './CasesContext';\r\nimport { useHistory } from 'react-router';\r\nimport { CasesOrderBy, CasesSort } from '../api-clients';\r\nimport Loader from '../Loader';\r\nimport { Spacer } from './styles';\r\n\r\nconst Row = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst Column = styled.div`\r\n display: flex;\r\n width: 100%;\r\n flex-direction: column;\r\n flex-wrap: nowrap;\r\n`;\r\n\r\nconst Title = styled.span<{\r\n flex: number;\r\n textAlign?: string;\r\n clickable?: boolean;\r\n}>`\r\n font-weight: bold;\r\n flex: ${(props) => props.flex};\r\n user-select: none;\r\n min-width: min-content;\r\n white-space: nowrap;\r\n text-align: ${(props) => (props.textAlign ? props.textAlign : 'left')};\r\n cursor: ${(props) => (props.clickable ? 'pointer' : '')};\r\n`;\r\n\r\nconst Border = styled.div`\r\n border-bottom: 1px solid ${Colors.LightGrey};\r\n`;\r\n\r\nconst Overlay = styled.div`\r\n position: absolute;\r\n z-index: 10;\r\n height: 100vh;\r\n width: 99vw;\r\n background-color: rgb(255, 255, 255, 0.4);\r\n`;\r\n\r\nconst CaseListComponent: React.FC = () => {\r\n const {\r\n loading,\r\n setLoading,\r\n cases,\r\n getCurrentSort,\r\n setCurrentSort,\r\n getCurrentOrderBy,\r\n setCurrentOrderBy,\r\n saveSettings,\r\n setDefaultSettings,\r\n } = useContext(CasesContext);\r\n const history = useHistory();\r\n\r\n const gotoCaseDetails = (id: number) => {\r\n console.log('gotoCaseDetails');\r\n saveSettings();\r\n // setDefaultSettings();\r\n history.push(`/case/${id}`);\r\n };\r\n\r\n let mapDate = 0;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n <BsStarFill color='darkgrey' />\r\n \r\n {\r\n if (getCurrentOrderBy() !== CasesOrderBy.WAYSTARSCORE) {\r\n setCurrentOrderBy(CasesOrderBy.WAYSTARSCORE);\r\n }\r\n if (getCurrentSort() === CasesSort.DESCENDING) {\r\n setCurrentSort(CasesSort.ASCENDING);\r\n } else {\r\n setCurrentSort(CasesSort.DESCENDING);\r\n }\r\n setLoading(true);\r\n }}\r\n >\r\n WayStar Score\r\n {getCurrentOrderBy() === CasesOrderBy.WAYSTARSCORE ? (\r\n getCurrentSort() === CasesSort.DESCENDING ? (\r\n \r\n ) : (\r\n \r\n )\r\n ) : null}\r\n \r\n Bilder\r\n Reg.Nr\r\n Fordon\r\n Adress\r\n Skadetyp\r\n {\r\n if (getCurrentOrderBy() !== CasesOrderBy.CREATED) {\r\n setCurrentOrderBy(CasesOrderBy.CREATED);\r\n }\r\n if (getCurrentSort() === CasesSort.DESCENDING) {\r\n setCurrentSort(CasesSort.ASCENDING);\r\n } else {\r\n setCurrentSort(CasesSort.DESCENDING);\r\n }\r\n setLoading(true);\r\n }}\r\n >\r\n Skadedatum\r\n {getCurrentOrderBy() === CasesOrderBy.CREATED ? (\r\n getCurrentSort() === CasesSort.DESCENDING ? (\r\n \r\n ) : (\r\n \r\n )\r\n ) : null}\r\n \r\n {\r\n if (getCurrentOrderBy() !== CasesOrderBy.DATETIME) {\r\n setCurrentOrderBy(CasesOrderBy.DATETIME);\r\n }\r\n if (getCurrentSort() === CasesSort.DESCENDING) {\r\n setCurrentSort(CasesSort.ASCENDING);\r\n } else {\r\n setCurrentSort(CasesSort.DESCENDING);\r\n }\r\n setLoading(true);\r\n }}\r\n >\r\n Inläst\r\n {getCurrentOrderBy() === CasesOrderBy.DATETIME ? (\r\n getCurrentSort() === CasesSort.DESCENDING ? (\r\n \r\n ) : (\r\n \r\n )\r\n ) : null}\r\n \r\n \r\n \r\n \r\n {cases.map((_case, index) => {\r\n const addBorder = _case.crashDate?.getDate() !== mapDate;\r\n mapDate = _case.crashDate!.getDate();\r\n\r\n return (\r\n \r\n {addBorder && index !== 0 && }\r\n gotoCaseDetails(_case.id!)}\r\n />\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CaseListComponent;\r\n","import React, { useContext } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontFamily } from '../../utils/styles';\r\nimport { CasesFilter } from '../api-clients';\r\nimport { CasesContext } from './CasesContext';\r\n\r\nconst Option = styled.div`\r\n user-select: none;\r\n font-weight: normal;\r\n cursor: pointer;\r\n color: ${Colors.Red};\r\n`;\r\n\r\nconst Selected = styled.div`\r\n user-select: none;\r\n font-weight: bold;\r\n color: ${Colors.Black};\r\n`;\r\n\r\nconst Separator = styled.div`\r\n user-select: none;\r\n font-weight: normal;\r\n padding-left: 8px;\r\n padding-right: 8px;\r\n color: ${Colors.Black};\r\n`;\r\n\r\nconst MarginRow = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n\r\nconst Row = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n`;\r\n\r\nconst filterNames = ['Alla', 'WayStar Score', 'Favoriter', 'Olästa', 'Tid'];\r\n\r\nconst CaseFilterComponent: React.FC = () => {\r\n const {\r\n getCurrentFilter,\r\n numCases,\r\n waystarScore,\r\n favored,\r\n unread,\r\n setCurrentFilter,\r\n } = useContext(CasesContext);\r\n const filterList = Object.values(CasesFilter).filter(\r\n (f) => typeof f === 'number' && f !== 3\r\n );\r\n const num = filterList.length - 1;\r\n return (\r\n \r\n \r\n {filterList.map((filter, index: number) => {\r\n return (\r\n \r\n {getCurrentFilter() === filter ? (\r\n {`${filterNames[filter]}`}\r\n ) : (\r\n {\r\n setCurrentFilter(filter as CasesFilter);\r\n }}\r\n >\r\n {`${filterNames[filter as CasesFilter]}`}\r\n \r\n )}\r\n {index < num && {` | `}}\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CaseFilterComponent;\r\n","import React, { useContext, useEffect, useRef } from 'react';\r\nimport { BsSearch } from 'react-icons/bs';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontFamily, FontSize } from '../../utils/styles';\r\nimport DatePicker from 'react-datepicker';\r\nimport { CasesContext } from './CasesContext';\r\n\r\n// interface Props {\r\n// setSearchInput: (input: string) => void;\r\n// setTimespan: (timespan: SearchDropdownOptionType) => void;\r\n// }\r\n\r\nconst SearchBox = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-right: 20px;\r\n height: 29px;\r\n border: 1px solid ${Colors.LightGrey};\r\n`;\r\n\r\nconst ComponentWrapper = styled.div`\r\n display: flex;\r\n align-items: flex-start;\r\n`;\r\n\r\nconst SearchInput = styled.input`\r\n display: inline-flex;\r\n font-size: ${FontSize.ZebraTitle};\r\n border: 0;\r\n padding: 5px 0 5px 10px;\r\n &:focus {\r\n outline: none;\r\n }\r\n`;\r\n\r\nconst SelectContainer = styled.div`\r\n display: inline-flex;\r\n position: relative;\r\n border: 1px solid ${Colors.LightGrey};\r\n height: 29px;\r\n width: 137px;\r\n /* margin-bottom: 6px; */\r\n margin-right: 20px;\r\n`;\r\n\r\nconst CustomInput = (\r\n props: React.HTMLProps,\r\n ref: React.Ref\r\n) => (\r\n \r\n);\r\n\r\nconst SearchComponent: React.FC = () => {\r\n const {\r\n loading,\r\n getFrom,\r\n getTo,\r\n setFrom,\r\n setTo,\r\n getSearchInput,\r\n setSearchInput,\r\n } = useContext(CasesContext);\r\n\r\n const searchInputTimeout = useRef(undefined);\r\n\r\n const changeSearchInput = (newSearchInput: string) => {\r\n if (searchInputTimeout.current) {\r\n clearTimeout(searchInputTimeout.current!);\r\n }\r\n if (getSearchInput() !== newSearchInput) {\r\n searchInputTimeout.current = setTimeout(() => {\r\n setSearchInput(newSearchInput);\r\n }, 400);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (searchInputTimeout.current !== undefined) {\r\n clearTimeout(searchInputTimeout.current);\r\n }\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n changeSearchInput(e.currentTarget.value)}\r\n />\r\n \r\n \r\n \r\n setFrom(date)}\r\n peekNextMonth\r\n showMonthDropdown\r\n showYearDropdown\r\n dropdownMode='select'\r\n customInput={React.createElement(React.forwardRef(CustomInput))}\r\n />\r\n \r\n \r\n setTo(date)}\r\n peekNextMonth\r\n showMonthDropdown\r\n showYearDropdown\r\n dropdownMode='select'\r\n customInput={React.createElement(React.forwardRef(CustomInput))}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SearchComponent;\r\n","import React, { useContext } from 'react';\r\nimport { GoChevronRight, GoChevronLeft } from 'react-icons/go';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontFamily } from '../../utils/styles';\r\nimport { CasesContext } from './CasesContext';\r\n\r\nconst Span = styled.span`\r\n font-weight: normal;\r\n`;\r\n\r\nconst Container = styled.div`\r\n display: inline-flex;\r\n margin-left: auto;\r\n margin-right: 35px;\r\n`;\r\n\r\nconst PaginationComponent: React.FC = () => {\r\n const {\r\n getPageIndex,\r\n getPageSize,\r\n filteredNumber,\r\n setPageIndex,\r\n } = useContext(CasesContext);\r\n\r\n return (\r\n \r\n {getPageIndex() * getPageSize() + 1} - \r\n {(getPageIndex() + 1) * getPageSize() > filteredNumber ? (\r\n {filteredNumber}\r\n ) : (\r\n {(getPageIndex() + 1) * getPageSize()}\r\n )}\r\n  av {filteredNumber}\r\n {getPageIndex() > 0 ? (\r\n {\r\n setPageIndex(getPageIndex() - 1);\r\n }}\r\n />\r\n ) : (\r\n \r\n )}\r\n {(getPageIndex() + 1) * getPageSize() < filteredNumber ? (\r\n {\r\n setPageIndex(getPageIndex() + 1);\r\n }}\r\n />\r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default PaginationComponent;\r\n","import Loader from '../Loader';\r\nimport React, { useContext, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { FontFamily } from '../../utils/styles';\r\nimport CaseListComponent from './CaseListComponent';\r\nimport { CasesContext } from './CasesContext';\r\nimport CaseFilterComponent from './CaseFilterComponent';\r\nimport SearchComponent from './SearchComponent';\r\nimport PaginationComponent from './PaginationComponent';\r\nimport { Spacer } from './styles';\r\n\r\nconst Row = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-bottom: 15px;\r\n padding-top: 40px;\r\n`;\r\n\r\nconst Column = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Container = styled.div``;\r\n\r\nconst H1 = styled.h1`\r\n font-weight: normal;\r\n font-size: 3em;\r\n margin-left: 35px;\r\n margin-right: 20px;\r\n margin-bottom: 0px;\r\n margin-top: 0px;\r\n`;\r\n\r\nconst FilterWrapper = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n margin-left: 35px;\r\n margin-bottom: 22px;\r\n`;\r\n\r\nconst CaseContainer: React.FC = () => {\r\n return (\r\n \r\n \r\n

ÄRENDEN

\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default CaseContainer;\r\n","import React, { Fragment, useContext, useState } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport { ApplicationPaths } from './ApiAuthorizationConstants';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontSize } from '../../utils/styles';\r\nimport { BasicDataContext } from '../../utils/useBasicData';\r\n\r\nconst LogoutBox = styled.div`\r\n background: transparent;\r\n font-weight: normal;\r\n font-size: ${FontSize.Medium};\r\n text-transform: uppercase;\r\n border: none;\r\n margin-right: 40px;\r\n cursor: pointer;\r\n &:focus {\r\n outline: none;\r\n }\r\n`;\r\n\r\nconst StyledNavLink = styled.span`\r\n text-decoration: none;\r\n color: ${Colors.DarkGreyContrast};\r\n &:focus,\r\n &:hover,\r\n &:visited,\r\n &:link,\r\n &:active {\r\n text-decoration: none;\r\n }\r\n`;\r\nconst LoginMenu = (props) => {\r\n const { user } = useContext(BasicDataContext);\r\n\r\n const [isAuthenticated, setIsAuthenticiated] = useState(!!user);\r\n const [userName, setUserName] = useState(user ? user.name : null);\r\n const authenticatedView = (logoutPath) => {\r\n return (\r\n \r\n \r\n (window.location.href = logoutPath.pathname)}\r\n className='text-dark'\r\n >\r\n Logout\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n if (isAuthenticated) {\r\n const logoutPath = {\r\n pathname: `${ApplicationPaths.LogOut}`,\r\n state: { local: true },\r\n };\r\n return authenticatedView(logoutPath);\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\nexport default LoginMenu;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontFamily, FontSize } from '../utils/styles';\r\nimport logo from '../images/logo.png';\r\nimport LoginMenu from './api-authorization/LoginMenu';\r\n// import authService from './api-authorization/AuthorizeService';\r\nimport { CasesContext } from './Cases/CasesContext';\r\nimport { BasicDataContext, RouteContent } from '../utils/useBasicData';\r\n\r\nenum TabType {\r\n CASES = 'ÄRENDEN',\r\n INCIDENTS_MAP = 'KARTA',\r\n}\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n border-top: 5px solid ${Colors.Red};\r\n margin-bottom: 0;\r\n padding-bottom: 0;\r\n margin-top: -2px;\r\n`;\r\n\r\nconst MiddleSection = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n margin-top: 0;\r\n padding-top: 0;\r\n padding-bottom: 20px;\r\n border-left: 2px solid ${Colors.LightGrey};\r\n`;\r\n\r\nconst UserBox = styled.div`\r\n display: inline-flex;\r\n margin-left: auto;\r\n padding-right: 40px;\r\n color: ${Colors.Black};\r\n font-size: ${FontSize.Large};\r\n text-align: center;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst SupportBox = styled.div`\r\n display: inline-flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n text-align: right;\r\n color: ${Colors.White};\r\n background-color: ${Colors.Red};\r\n font-weight: bold;\r\n padding-right: 26px;\r\n width: 240px;\r\n height: 85px;\r\n`;\r\n\r\nconst Logo = styled.img`\r\n width: 100%;\r\n height: auto;\r\n max-width: 200px;\r\n object-fit: cover;\r\n overflow: hidden;\r\n align-self: center;\r\n padding-right: 24px;\r\n`;\r\n\r\nconst ButtonSection = styled.div`\r\n display: inline-flex;\r\n padding-left: 35px;\r\n`;\r\n\r\nconst LineDiv = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n height: auto;\r\n width: 100%;\r\n margin-left: 30px;\r\n border-bottom: 2px solid ${Colors.LightGrey};\r\n`;\r\n\r\nconst ButtonDiv = styled.div<{ active?: boolean }>`\r\n align-items: center;\r\n justify-content: center;\r\n margin-right: 40px;\r\n font-size: ${FontSize.Medium};\r\n font-weight: normal;\r\n color: ${Colors.DarkGreyContrast};\r\n text-transform: uppercase;\r\n position: relative;\r\n z-index: 1;\r\n user-select: none;\r\n cursor: pointer;\r\n &:hover {\r\n color: ${Colors.Black};\r\n }\r\n`;\r\n\r\nconst ActiveButtonDiv = styled.div`\r\n align-items: center;\r\n justify-content: center;\r\n margin-right: 40px;\r\n font-size: ${FontSize.Medium};\r\n font-weight: bold;\r\n color: ${Colors.Black};\r\n text-transform: uppercase;\r\n position: relative;\r\n z-index: 1;\r\n user-select: none;\r\n &:before {\r\n position: absolute;\r\n content: '';\r\n left: -3px;\r\n bottom: 16px;\r\n z-index: 0;\r\n height: 20px;\r\n width: 40px;\r\n border-top: 4px solid ${Colors.Red};\r\n }\r\n`;\r\n\r\nconst InfoContainer = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: auto;\r\n`;\r\n\r\nconst AdminSelector = styled.div`\r\n flex: 1;\r\n margin-right: 20px;\r\n`;\r\n\r\nexport const NavMenu: React.FC = () => {\r\n const [activeTab, setActiveTab] = useState(undefined);\r\n const [fullName, setFullName] = useState('');\r\n const { user, companies, updateUser, routeContent } = useContext(\r\n BasicDataContext\r\n );\r\n const history = useHistory();\r\n\r\n const { loadSettings } = useContext(CasesContext);\r\n\r\n const changeUserCompany = (e: any) => {\r\n updateUser(e.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n // const subscription = authService.subscribe(() => {\r\n // getUser();\r\n // });\r\n\r\n if (window.location.pathname == '/') {\r\n setActiveTab(TabType.CASES);\r\n } else if (window.location.pathname == '/incidents') {\r\n setActiveTab(TabType.INCIDENTS_MAP);\r\n }\r\n return () => {\r\n // authService.unsubscribe(subscription);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n const unRegister = history.listen((location, _) => {\r\n switch (location.pathname) {\r\n case '/':\r\n loadSettings();\r\n setActiveTab(TabType.CASES);\r\n break;\r\n case '/incidents':\r\n setActiveTab(TabType.INCIDENTS_MAP);\r\n break;\r\n default:\r\n setActiveTab(undefined);\r\n break;\r\n }\r\n });\r\n\r\n switch (history.location.pathname) {\r\n case '/':\r\n loadSettings();\r\n setActiveTab(TabType.CASES);\r\n break;\r\n\r\n case '/incidents':\r\n setActiveTab(TabType.INCIDENTS_MAP);\r\n break;\r\n }\r\n\r\n return () => unRegister();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [history]);\r\n\r\n const redirect = (tab: TabType) => {\r\n setActiveTab(tab);\r\n let target;\r\n switch (tab) {\r\n case TabType.CASES:\r\n target = '/';\r\n break;\r\n\r\n case TabType.INCIDENTS_MAP:\r\n target = '/incidents';\r\n break;\r\n }\r\n\r\n history.push(target);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {\r\n if (\r\n !!routeContent.find((f) => f === RouteContent.ViewContent)\r\n ) {\r\n if (window.location.pathname !== '/') {\r\n history.push('/');\r\n }\r\n }\r\n }}\r\n alt='logo'\r\n />\r\n \r\n {fullName}\r\n {user && user.roles!.find((f) => f === 'SystemAdmin') && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n SUPPORT\r\n 070 – 311 14 59\r\n info@waystar.ai\r\n \r\n \r\n {!!routeContent.find((f) => f === RouteContent.ViewContent) && (\r\n \r\n {Object.values(TabType).map((tab, index) => {\r\n if (activeTab === tab) {\r\n return (\r\n \r\n {tab.toString()}\r\n \r\n );\r\n } else {\r\n return (\r\n redirect(tab)}>\r\n {tab.toString()}\r\n \r\n );\r\n }\r\n })}\r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nconst Wrapper = styled.div`\r\n padding-bottom: 30px;\r\n`;\r\n\r\nconst Layout: React.FC = ({ children }) => {\r\n return (\r\n \r\n \r\n
{children}
\r\n
\r\n );\r\n};\r\n\r\nexport default Layout;\r\n","import React from 'react';\r\nimport ReactDOMServer from 'react-dom/server';\r\nimport styled from 'styled-components';\r\nimport { FontFamily, FontSize } from '../../../utils/styles';\r\nimport { IncidentType, LocationType } from '../../api-clients';\r\n\r\nconst DefaultIconWidth = 90;\r\nconst DefaultIconHeight = 121;\r\n\r\n// offset for icon arrow\r\nconst DefaultAnchorWidthFactor = 0.41;\r\nconst DefaultAnchorHeightFactor = 0.95;\r\n\r\nconst carBase64_64x23 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAXCAYAAAC74kmRAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAUjSURBVFhH5VhbSKNHFP6TxksumhgT75eozYpXVEjV9VKRTbFF1K4QqFss2BZKC2sXuxb0xYKUloWUwj4ugu5CLw8WpEvZfejWNi1lH4qtxca2wsJGjS3BpCZYE2P6neRPmsSJ103W0g8+ZuacmczMmTNnzh8Bd0q0t7errVbreZvNRnwmNTVVnJKSkuH1egVCoVDmdrvFu7u7/r4CgYCDbg+lA/RA9yfaqyKRyIL6ulwun7NYLPf9nc8y2tra1K2trZfy8/Nn0dwEfdFMSkpypqWlPRCLxd/DKKbMzMwfwvSbJEtOTjbl5eU9DJP7MjIy7Eql8npfX99TaJ8d+Hy+JBQdWq32JjblJFE4sRknTvVebW3tG9hcHd8/AtjsbRS+4uLiSwFJANQXntSuVqvHsrKyfiYRMT09/afc3NwR1m8lDB0dHerCwsIxbDC0sChuYkPvdXV1PYn6gYAX3EDho98LSNgYHh7WwRCfoBqaB0a/Do/TkD4RUNTX1/diEXdQZ7o4kYxyHFcNGqCgoODHgORgwFA6jKE1hObMycn5eHR0VEv6RwbaLCYbwIavYsJ5iUSyz8WjKZPJlslrUT8yggag+EBxJCA9HFKp9CqKiPnJI8xmczrqpwei7zKKiAkOI+6zHuWxoFKpPkLhH19VVfWiX3hEdHd3X4AhIg4GB/U3Du5l0p8U/meQDOBwOM75JUcEDDC9t7e3iOp2QPIv8PxxiOYel8vlD15YqMtut0u3trbeAVUkwwtxHwHuQ3oOcZX+whgKou7t7W0Hnk0KgFxzc/OewWCwwdPc0HH9/f0XZ2dnb9L4cMAb/8AcK06ncx3l7+BDGGtxaWnpO/p9vltsnMQDEklcmRBZ+oMIQ97By/UWXhIJ2mycdQM8CiLhcsIQV1Dfj/+DAYKk4K3X65tRD0GBxMWCkjngv0bceaY8nPAGT1NT07Oocxyyr4h3lkX+R+9VV1e/0NnZqUXwk+t0Oj2ezTEEHAoy+8YkkpSFIrcw1tTUnB8cHFTPzc1lIzkbwAvxOas/kcZoNBodReOYiQ6R3uy6urrLmEBXUlLyKTZsofuEurm8vHwcwUUOQ3zFGpsIYi0mrEOH+z1CiRltDIHPSTlHY2OjlnIcyFyssfD8W3T/mcogcdJXMMGrqDMNBQMumkwmOU3O0seTuM+/IqGqRIr8LUuPp9UHwzwHT6CcZZ8exrOQB2ywlMTs7OwvBwYGKskLWPog4W4zRqOR8gimPl7E6RrgmTMsXZC09tLSUk30twURnuISwgrTaDCBU70xPz//isfjkfIiJqxWqwH9NhUKhZkXxR1w8bWGhoaVjY2Ni7yICVo7Ythrvb2913hRCIhldLAchzvehh+cjj5pZGCVsNLdcFksIs3V40NliqWLB3F1v66oqKDNM/XhpGQIAU8RLadrK0SFW1hY+MZms70Ea8lwis/jWryNzdxeXV314B7RwEMBK0swnm/FH5jLvb6+/gTfPBBIr5NXVlboNSOvdmF/v+HAZ/CqvXvoX2K4Ih/s7Oy8yTeZEIlEXFFR0TnQjlfhWF+IpwECoGtycvIB34wJfLcY19bWRoaGhoqnpqYcENkDmiNgfHycvr0jXCea8JpbKB8LENw+Q8FcFxEn7uzp6alE/eRoaWm5jII5gVKpXIZl81B/LJiYmFDhAJipPMU0nP7rqJ8ecLen8Sx+AYv631dkkL8geF477p8i8YDX65WUlZW9j8TGn6ugdGKNlLleCPSIBY77B7kur535SCzsAAAAAElFTkSuQmCC';\r\n\r\nconst truckBase64_64x_64 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMxSURBVHhe7Zk5iNVAGMef9wFeeKEWitjYiOLdqKAWHnihnWIjNuIqaCsIiiAWWll7gYg2Fh6FdoJX4QWCiIiINp6Iggcev3+SWWazk/eSdd9LePv94EcmL5Pd+b4kM5lJzTAMwzAMwzAMwzD6HgOSbTsxGtfHxdq7ZNtnUPCX8W/iRuwzpIOXR7CydOBNnBjt/R+h4D/hHKxLv2Tb2wzChTgs2gtzGBfgQbyOd7EnKPjTuC7ai/mMW/BGtFcCJ9C/GnlcgkXJuvIrsDT2od+gvK7CIlQy+B34E/1GfcfXAf06skgCKhn8BtSz5zdKHsAQ59GvlzcBlQx+LqoRfqPkSczqaHuSgEoGPxU/oN8oeQlHYhZFE1DJ4NWoZ+g3Sj5EHatHkQRUNvgr6DdKvsc8Lzd5E1DJ4IfjWfQb5dRIMCOHF9A/L5SApgef1UENQb2lqXObgv3RZxpuiou9xmq8FhcjFHwpb3hL8Qn6WW+F7g44hQpQ/Yh/vCW3/WbUP/L/cat0CXiM6WMtCV63XFnBy3oJWIlNwX+2d6GSUEWUlKIoluVxMRs/AWuTbbtwCNWXrIn2MlACjuMjbLh40GQ0NM7E9Igj9HtRJ6OYj9ofF+0FSM/e2tmt2I1QxXZWI10XQpXSfkXN60PHqqTa+C31W0i3bB4RquDUsLgHR6BQr/oWQ3XLVEHvRTeKzcN7GKrr1JtnROigU0NjGr0eh+qW6TFMo2T8wlB9Z/Ry9dv7wfcHjsIQjbLbaqdjiIsYqu/8qMmQOgUtYYvxuD0uRtkbHBe7oSVsTZbEVXwaF1vK/mQrNDl7FRe7cAa3xcXaLbwTFzt5nmw70SzQz5A72WcSfkFXZxGWgb+wqil4Gj0CWptwddyFbYiy5k7S9NMPULearr47rg6x3sePZqL1RtcOPcb+d8Ax6K9XqDMfi7mYhe5E5wu8j+khZieWha5wemh+g7cxvTp9FAuhJW7/D4TU15+yWYZ/MNQ+5zl0w3ghFmNoavoSd2NVmI3qiNPt1POvd4OhmEmej6N67jVK6DlT8EqKhsiqMQF1RwxEdZAPUG+whmEYhmEYhmEYhmH41Gr/AFE80Rxg7yY+AAAAAElFTkSuQmCC';\r\n\r\nconst wrenchBase64_64x64 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPESURBVHhe7dtZqE1RHMfxax4zz8k8JSJEhrzgQVEiHjx7UjxIKaTIPL0YixAPpIjEg6TkyZDhQRJCmWWOMvv+zt23Ttt/77P3vg/WWvf+6tO5t6jz2+fsvddea92q+tTxNIhefU0HdIw0xEu8whcEm+aYhjN4iO/4E/mNNziIuQguI3ACX1FTOs0R6FsSRGbgLayiSS5gErzPZLyHVdJyF/PQEt6nK57BKhp3D0vQDsFkN6yy5XT1X4XWCCpd8BFW6Ron0Q2Fonuny5mFNtU/JuYG9A0oFNcPwNjoNS0/otdCcf0A9Ite06KBUJY0wRSsKf0WxfUDkGUQk+UbMBxHcRpz0BiluH4AspQbiRbVP/6TzjiAy1DxVvgGDZm9yClYV/6459iO/lDaYzFeI/5v9S3wJvsRL5BGn6zuCmkDp2XwJudglShKj8q6HniRMfgAq0hRuhC6ft0rpS+uwypR1AsMhPNR+SuwShT1C4vgfFT+KqwSRelWuhCN4HS6Q4+zVomidDfQ6M/5874HrsEqUcQdbEAnpMaFWWGN9zU4GVb6rXI09r+JQ3gCPS1qxKcueiq8jQfwYrSnr32ec16ToRraBjHVpU/+EqyiFpXXcLcZvI/K5z3n16HOlt+KYMrrYcUqmWQlgiivC959WCWTBPPJ90TeT34ngiivSQoNTKySFl3tNyGIaISX56lO5fchmE9ec3FWUYvKb0MQ5Qcg7/P8WtTZ8psRTPlbsEomWY4gyutWpy0rVskkutr/1/J5Hoc1qaCRXC9oGfoTNMvaFKOgsboGO1mzA0uRdWnrv0QHaCg24imsTzEv7eDSwXI+bbEan2EVKULl90LfGqejjQnHYZUoSuU1tne+vNbVzsMqURtalna+vM55rZ39hFWiKF1DnC+v6GqeZztaFtq16c19fg+sErWheXkvonv7Y1glRGvwRU6NPvAimpfXXHr5m9eamoa22nWp64MWF3WNeITyf5dmMLzITJS/ca2makFR20ri0cHQlhNtNyn/P5ap8CLzoTes7eYroLF9pWgoHC8cNxteZBy03DSo9Fvl6FvwDlbpctPhTfKsomrfXZYdHFnX/LyLtqZV2ser64jT6/K1WTefAP35SlqOQXeSoDIE2sJe6SlRDz+jEUw02aGnORWzCpfTeCKYuX3t19Xgx9p1meQiKp0ezkcbihcgz6qOzvez6I0gsh7x4XESDYq2IJg/U6vJeOyC9Zisg6OZ4MOYCA2OvEqeN6xzWhOkmhnW84HuAiqvyVL9PV996uNdqqr+AgtEBe/XQWUIAAAAAElFTkSuQmCC';\r\n\r\nconst label0 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAeCAYAAADD0FVVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAEfSURBVEhL7ZaxccMwDEXhzKLSE2ADZwCPgJSu3LlM54ZpNUIGoCeIJ/ClCLkLAsiwTEmkT1Z0qfTucAdK4hOlgp8rFqBPPMHH8R0+LzYusN4eYL/bQGXjFpWmeEJ9yROF7IJNNjpST7lJY6orbqXThbe6i69ST5mHphSxv0oDO8w9gEy+97NaQvHLSKzAwTEWbj6msBiZ+CLNEHSw31hfpILdgazvkpf+kUU6P4t0fhbp/Pyj9PwNwdpHxJ9C3EqWsOyKw80WnWzDZUIhglCCqsn909sKXmu5NACBaG19ygXq+mx9CoILX6JukNVmc+q50lUqbUQXf8PIugmVRKpMW3EqVHpSReN35NEHiV0mxvMHNCPGaF2GqhoezBoAfgGVifQUc/JT5wAAAABJRU5ErkJggg==';\r\nconst label1 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAdCAYAAACe/43ZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABbSURBVDhPY/y/Le2/dcsVBmKATthCBgaQBiCbKGw14fZ/JiCDJEB7DYz/geDOnTtQLgLc3hrP4FVwDMqDAKAfgD7BAW5PsBoqnh7VQAwY1UAMGNVADCBRAwMDAHiTQonu5YuuAAAAAElFTkSuQmCC';\r\nconst label2 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAFMSURBVEhLzZQxdoMwDEBFz8LrxAl0g+QAOYLXTt06dsvitd2yZq9zg56gm7iLK2ETMMhgaIf89/ReTPBHT7JVeQYSWmhvX3B+v8JPfKLRnN7g9eUAdVzfEeEdst4gyAcKA71xFDcHBqEzHtVN6zGWBiFntlfWh3GdSYTOG+WF7WHYxEKyqPwJHvmTaXUGcnskS86QPDlpxuilPv8FnEllEmhp1JQIUT6zMVqWInziHwl1rZytDcyEf2WfsL3B+fodFxNiScrg+lqjd1huDZdw3hSVRVEMtF0zV4TEx2NF1EU41EJGGEQl1xFNyKxnImSRLRwSyFkpB3YQlg6ITpQ/+kFYImOR1VKawELydmmoFop6IJsdD4vpNC4BZFLPZWnntqBfveZ594B4kOGwQCU1rI6fcTmAyK3aRAOnywd3QGvKrgjT5vFr+M9CgF84KXwz0qjVlgAAAABJRU5ErkJggg==';\r\nconst label3 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAeCAYAAADD0FVVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAFuSURBVEhL1ZY9coMwEIUfOQvpfAJxAi7gNp0oceMupTs3chl3adNHnCCcwJ18F2U1CFnAQoAhmck3szPASI9lf7QklkCHO+7VJ86nD9z8E54d9q9HlHnq7yOcaMAoKwXcS+abUNb47S0PUS2t4DbNMSGt9jKORpQ8XC3YWuQxiWoruUUrTKhGFkYJfoHUg1gFzIgj3lu4BUpRPOMEkeCPcCELoj2MnvAwhs1Dk7AnuumQ5jmYylvEQHQLfkV0ENN5UPa5zvOJYnq/pUKRndj+r+vaX3WhOsVXSRlxojwLmyLqqI1iKqDey1A1G4nWOLxc6NBs+OuYTmGsmsj+SlFiSZtuwb8TdRP0gqLIkCQJiqp5uhot+8F2JqyfDKOw+0LvUxaz5wOVbx9BQ3JH053hdsWVK1WpYd9ykifG5tQye3xdqFM+DHNN2HisRcVvSHiNx11Bx6CjjF7w6+P+TJiEThwoVGbtscOQpmPjEfgGfGFOkssxpdcAAAAASUVORK5CYII=';\r\nconst label4 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAdCAYAAACuc5z4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAFESURBVEhL7ZUxboQwEEX/5iybJuIEzgnCNqnS0plyt9kbbJfGlNBxiJgb5ATb4buQYTGEgA1jkhSR8iSkGQRP1sd4dg2BEKoUj5erbT6JXkrkx73tiFbMRzeSXmlfm15C1faZjju6yaZKYxS2XoMvpghirpVgiiukIVaCJQ6JoGddHBhBz4rYILtssBKLYpMlOL3bZkBCKWFrP36xyZDMrZA6x8HWS3jEFEFywnyxGvmTrVdwin0RaK6VmIsXIuBrZ2JPBELhHGIlvojdEQio8ojRucViJK7w6ohAqBLj05DLIHb+thRBucVKdGLnb7stgh6aILpJd67VCsgoss2Ea4FimpqQ9HxXPjyf6ejX0jkRvnO102Sy3X6Ovye+jX9jjG151G8J4smeF0qjPNx3zZ720m1WB1Ir4fxgY/4/3sAviYEPqJUDu4jAgM4AAAAASUVORK5CYII=';\r\nconst label5 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAeCAYAAADD0FVVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAEcSURBVEhL7ZXBcYMwEEU/qQVurkCqwFXktlwpIEVIR7uEFIArCBX4JvUirwBPpGTJOAj74PGb2RnBwB9Y/b+qAgNv0b5/4owCdh/4OuyndRQNzgTFy3i5uqgfpSJvfGNznkFUGTjeQ27RbXXdJObV0+15sOjQoakqVIul0doT/Px4BtuhLKaKgmHvpZSLjqUy4Y16OqBrNOzci3WjbxhYRoD6KVnj9/4bF3qS2kAhDsCVv19jf+hB89VPnsH8BdxX1PsTrG2hNUdQWzl+t7KUJpWcjhLOqF/vXC3F5nfB6gad5GZFoN28zjjjeBReyMy/xbmf5P87UYXCKpkoeUxXCqeCESH7LhiSNkEoYZZGpim1gPd/GKuueQJIABeJmOMY1X18dQAAAABJRU5ErkJggg==';\r\nconst label6 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAeCAYAAADD0FVVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAGCSURBVEhL7ZYxcsIwEEU/mRzFaTKcQDmBSUOVIygladKlpKMRZTgCVRrkE4QTeFJEvouyi2Ww5RXBQLq8mR2kQX6SpZWlkScQURVLLOZrlKEuMn7C2+sMeRbqbVh6wHmjwJ2cHEpbeqpLSzpcuI9IHKQXCJsgccNO6oySGw6MxkvS1CiVN/FkNTjjVa89h/bsJan1uvfnEWFDJFZKe2PruU1I6x5/w1njrdD5DUnOJsvlPL1ImuI2/MpUFYrNAh9fod7ifjrF412OTN5R8pwaoxMr3A2lTSfxmYR0aNDCtsxXknIcMuaKC7XC5GGJikrHpUrDOgfXCwvahX22a2zYmnx91V+ALvJzvP8TI6URfs4gZcuBHFOySvxJ8v9LJUp8c2qcSUK6xcuiCOUE1RLzVShH7M794nmEidCAvuYYj0OlQ4lytaWuYygV/TtlK5M8c4aFCmdQLWXsaZ+6ZMRH9J4zxXxLadOVMo729MkXC0V7vf+FEC9oNRWfJkfI5KMEwA+9xcZc64o7LAAAAABJRU5ErkJggg==';\r\nconst label7 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAdCAYAAACuc5z4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAADkSURBVEhL1ZSxDcMgEEUv2SVNlAnIPmSJlBmANot4A2+QzsNc7ksusH2G40yKPAkhg/T0hAUn5oEf9xd9qBc3eo5vIoijTLLSaUQxMp/l4yf8kThc6YJZjsOJ/m8iDlhwi6cUNlIKiad53yku1wKXuFYLHGK9NqRc6xCrtfOlyGkU22pBk9haCxrE9lpgFrfUAqO4rRaYxHpt4ILXItZrKb9mClWxpxZUxBOnsJbKqNSCsniIW6mhFhTE/lqwLz5QC3bEx2qBLlZrlw95DUW8U7t6yGtsxR1qwUrcpxYsxZ1qmZm/HEbWXrcXrhoAAAAASUVORK5CYII=';\r\nconst label8 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAeCAYAAADD0FVVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAFDSURBVEhL7ZaxccMwDEXhzCI3OU+ATOAMkBGY0m7SpUyXhi6jETIAPUE0gTtqFwQSQYmSwAtjVfHl3eGO1JFfIMjP44YYmNDC+fQOb58X6efZPb3Cy2EPlfQHOtEB78ggdD8pDzTkvMwXRlFvCbVJRYFkE2ER5QzVwb8JzjiIBVFntEFXhAmyLJrJEi3NSpXgyaq1D9mCXstxKXm0ZEJt77izBO9hK81r0EVX8ndEs7uP6WlW8BYXc+IG994/P2/gsebPcxCBT4ZCA00jzRTjgD72LN+xyqIxRquKTRlnlIHlkZZLRG/W+3zv/ns/yw14X05HFq+aZfC+p9PDFo6Kl9EY2El7ygXqWptgwX8dWL5jpUVjxNWJTXNXWXko3g/odfo55nfvRLSHHVb89OEnz0yvR3mgRVpoW2lqVNXyYdYD8A3+EBXP6SJmdQAAAABJRU5ErkJggg==';\r\nconst label9 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAeCAYAAADD0FVVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAGDSURBVEhL7ZYxcoMwEEU/OQs0Hp9AnMCT3keQS6dJlzJdGlHGXVr3hhPgE7iT7qKsLNnIsGIwTLq8mZ0RsvS1XlbLZpbAAwamOeHr84hLmOFZY/vxjtdNjjzM3HGid3RtpYA7ZLoJaWsd9gc6USfIbZpkwqpIOIguEbwZeezFvGgtuUUzTHpZEk14SQt6oYrQVrGx997CamVF4sdxOGd8bF/oYYhYoQjDNAVW5A0HL7qQf9GZmBOO5zDuM5anSdg0dOZTiqqUtlVZ4I09VUAM0uaMc8pDWq90S/KjJz9rcfLne7RUABK5/DTdi9p8o9VqujDFZRgaz+Pbdx5bjVqR16kdhJA1dPuDbXgecI3pLLhKNVZQFvK3osY0qKodyjJDlu3QhPlZJG+UUCOVnyJay+Ge7kZZa6oSBXulBKRch3HMBYcDs14oyoo9yV9JfXOes1u5iFKKwrBAWLj/Hejl6TyPY0EHk/za0o2aVmCo5VH9nodgGrQIQ81aGA7ImcbsCvALUHmrAkXKYEwAAAAASUVORK5CYII=';\r\nconst label10 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAYAAAC16ufeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAGESURBVFhH7ZgxcsIwEEW/cxaTIsMJ5BOYA3AEuYSGjpIujVxClzYHkE+AT8CkiHQXRQKRYCQRG49c6c3ssDvMer9tyePvTHGqit0JfZgvP7Bf5bZ6Atmgft/h859x8+UWm1UJZ5IRa376BGFCPQunxHvMcBB1P+5F/xGdpsqwOLS26kuL9axALW2piS72ItQWg+kKjiu2qUYIvWIEV2hMataCEMIJztw1NmzNCsVIt/8SRFEeOo6eS3090D1KncX6EGPFCqbIXb8JM/QxgZPUjZNssF8Iw6a0eZAcqy21eZdpxY4kiY1FEhuLJDYWSWwskthYJLGxSGKDtF8QNn2E/Pbb33hi81fMbfrHAYuixo0HdJDaCs3WrrkkbzNk5t3c1h1kXThN2ingOOC7QdgsElDqngpwwsHrggmYOGq/EGC0rTnDFfX6sGFxnRt5zZbYHzn8JqUft3dzgg2mBSstWLvHodwvu4meBuYKC/C+igkF4+7+CG6wmEj54HmQ5+4HuTPAD/e9GtrdAFC0AAAAAElFTkSuQmCC';\r\nconst label11 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAdCAYAAAAtt6XDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAACdSURBVFhHY/y/Le2/dcsVBmKATthChpn5KlAeCWB7OgMpdjCAHAVkE4WtJtz+TxYg0Q4mIGPQgVFHEQsYQVF+584dKBcBbm+NZ/AqOAblQQAwvhmOkpPQgYAUOxjACRELuD3BCmsipCbAZcdomiIWjDqKWDDqKGLBqKOIBaOOIhaMOopYMOooYsGoo4gFo44iFow6ilgw6ijiAAMDAGvs6QE2VW+KAAAAAElFTkSuQmCC';\r\nconst label12 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAdCAYAAAAzfpVwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAHpSURBVFhH7ZgxcoMwEEU/OQukyHACcQJIzxFEiZt0Kd25wSV0bt0bTkBOkEkj7qKsYpyBIDAQROyZvJkdg212v5fVarElcy697TvG4IYHpLFdn82hQlWcsNseMRTRDV/xEvvoRFJi1csYY4mQsxGJ5EzvV29M8rwdbx2xFINp/I2xpuAHesMs1R5ekOGtPp1KFjiIivOxYbEFImczW+iFLIjIE6HSK4ToWJ6wzi2ZWgZC4+PLD89ln6e+a+gSqtkedBdNr1n64blaWA1fKuoVct6Oq0zFNlwGNmw/RlqWKikQIodI/fqzfpwnWo4azC+wBrat6Z0TWFXsb7k9sVWB3VHfP25HLIncRx4sJ0DW0coQPts3ILYhctNVeYaFIK3UE3pYpnUNQb2c63tq27i8NLs/yGyFgjLpWQ6CvkzWMJ5AyBTfza4W3WH5zKpdceRAwyibmlDriKXxcLzI/hjmy0BNXdeGGcaR5AKypFtuD2wbtegOS80GydDATZkkkfV3r2M2s9UJ2v7OGM0z50zG/vgN2KxY8dG9/YxWOA026QSRF9ZvXe7j7GHmD/rsfO5KrKVWWX3cotp7cDbtiqNugHLK/wZFBIseFn/CaIFNw0V4SKl/9LBI65rwmD9sTKrQ/zVrijsSC3wC4piKWiJz05EAAAAASUVORK5CYII=';\r\nconst label13 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAYAAAC16ufeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAH7SURBVFhH7Zi/doIwFMY/+iy49PgE4Qlod1c3GHHp1tGtSxh1c+1efAJ8Ak+X8C7pDX+syEUBCe3g75x7KGhuPsPNl6SOTgLtrY/ownyxwyZyy7u+ZMj2X/hYf+J6b3Ms3t8Q+Uw/Rqy5dAkhlR6EkjoQfM7WEFJf9mZfLOUXTK5OIQKdlGkMdsXSiA4WWsXZCD/RA0vsEc5WOJR3gzmssIyz4m+jWCnViESKxq/sM7KKaZ/nCJJGLZ5QiQ6YNtXo5mI5uM56lQF1LCXV6/nEIqE34UqnFGuvDFwfUbRBmuYDApUkUBu//LAnh28oulis2Tqu72OoQ1dMJnYMHmKHQ3a3ZOxOPGNGlz8QS4I8Dx4TjvOCLWPMYvFa1HtuFwx3W1crLV7aFtOsYGMgIHfRyUX+udgDVsuYNpcFfyOWljXBBMvl3oDDXs1eQ2nJ7XutL7eDcBHtJFXqBVMvt2PwEGsLy2LNiTZGGJrVyUG4Lx8PpZiFTe5zAzppBPW2RQh9KwXbrnQDx3yBHjTIYg+zVX2hJrFIu/7fIIvhsWcw8tRgjnl5V+O4ZfcGdMKANht3I5ZjDJ/lcvSP37dhtWbdKAW91jsQNKgpqpdp3Q38jSLBLUvpVQqh58e2CazLJcEpHRglOmsWARJVF2ponWD2IDurtlEMrts2gYEf/8RwTf7yDh8AAAAASUVORK5CYII=';\r\nconst label14 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAdCAYAAAAzfpVwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAF4SURBVFhH7ZcxboMwFIZ/cpZkqXIC5wQhS6eubGZMltwgWxczwsYhak7QniAbvgt9JG6kggmGYtOBT7LyHBG9T352/Agqyavd5Qobtm850uNazyakiGFyaOWrZesPm8FEWU2PrLghlynfir6clSIOkem4j3llqfyhrSkxo2yBeIgpscI+RVmWrSEF04+4YUj5H+i926IUrHfDj8byUP+DA6aQXAav6Q3vsiqJcPrSkwccwmLb+ZVVCaK2KbhMcdDxMzzKUvmjE9qLKpHuddyDN9mu8ktbU8KP7JPy26t6ke0oPxM4DzElnMuay88g8iOG9m+OZQu8G8rPRI4xnaZTWeOVSuXPR/bE7mSNHdW48v8Q1Heujn+hkh02jRLSXY1Pq1WhjiowrSoD3271pME1Q9bcMYzT8/fw5fVM3UIHf2pkBrx92I46t4e/rulYZF3h6IDR75XSkR3lR4SwlU8iP2zukzXlvR0IA07fFAzY5Fv2rCsWWTcA3zb+Xi4O5IvoAAAAAElFTkSuQmCC';\r\nconst label15 =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAYAAAC16ufeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAGJSURBVFhH7ZjPbcMgFMY/Zxb7lglggnSAXnvDx3iAHjsAHONbrh3AmSBMkBvsQiHGkv/gCivFciX/pKdA4sAn++PxcGYaZujXAzEc36+4nHPfi0ALlB/fiBt9huMn7pdT23Zi3UdMEK7MIhQ3JDDOomCNH8yYg/3i37CLTcUBpwuUUpNouHVbCgiHdT6sBeOiW1yW553N83wSxfPnbbF7NhW72FSsL1ZWKLIM2WxQlOIG7S/vs8E7K1FXbyhoCTFSvF0byBpVQQeCN+5ZORCc2V3CVTcTtKAoKul7Lbbqwj1liSillReANe1O5sSGUJxMyrXFJeJilK1Yh3O2wYwrFDdmg9yWKg2Y743ZuGeH7GJTsYvto/UNQpSg1G6lVAS30WjalDHl5dQ1c7IlvdNqiNC8XepKuCloCFpgNEQLYWBH3x7wQF0H/rDKpvAX7w1ATDdtWs/mZ9wVxytHT8Kv6B5m+mzwguCx7dZJXU6wUeAsUrL1tH30k/Uxu8BSovUvCcy9CvDNIcAPfFFk/oGh8NkAAAAASUVORK5CYII=';\r\n\r\nexport const incidentTypeOther =\r\n 'data:image/png;base64,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';\r\nexport const incidentTypeFire =\r\n 'data:image/png;base64,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';\r\nexport const incidentTypeGame =\r\n 'data:image/png;base64,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';\r\nexport const incidentTypeTheft =\r\n 'data:image/png;base64,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';\r\nexport const incidentTypeCol =\r\n 'data:image/png;base64,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';\r\n\r\nexport function getIncidentMarkerSvg(\r\n incidentType: IncidentType,\r\n iconSizeFactor?: number\r\n): google.maps.ReadonlyIcon | undefined {\r\n const iconProps = getIncidentMarkerIconProps(incidentType);\r\n if (!iconProps) return undefined;\r\n const factor = iconSizeFactor || 0.5;\r\n\r\n var template = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ].join('\\n');\r\n\r\n return {\r\n url: 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(template),\r\n scaledSize: new google.maps.Size(\r\n DefaultIconWidth * factor,\r\n DefaultIconHeight * factor\r\n ),\r\n origin: new google.maps.Point(0, 0),\r\n anchor: new google.maps.Point(\r\n DefaultIconWidth * factor * DefaultAnchorWidthFactor,\r\n DefaultIconHeight * factor * DefaultAnchorHeightFactor\r\n ),\r\n };\r\n}\r\n\r\ninterface ReportLocationMarkerIconProps {\r\n base64Encoded: string;\r\n}\r\n\r\nconst reportLocationLabels = [\r\n { base64Encoded: label0 },\r\n { base64Encoded: label1 },\r\n { base64Encoded: label2 },\r\n { base64Encoded: label3 },\r\n { base64Encoded: label4 },\r\n { base64Encoded: label5 },\r\n { base64Encoded: label6 },\r\n { base64Encoded: label7 },\r\n { base64Encoded: label8 },\r\n { base64Encoded: label9 },\r\n { base64Encoded: label10 },\r\n { base64Encoded: label11 },\r\n { base64Encoded: label12 },\r\n { base64Encoded: label13 },\r\n { base64Encoded: label14 },\r\n { base64Encoded: label15 },\r\n];\r\n\r\nconst reportLocationMarkerIcons = {\r\n [LocationType.BeginsAssignment]: {\r\n base64Encoded: truckBase64_64x_64,\r\n },\r\n [LocationType.AssignmentCompleted]: {\r\n base64Encoded: truckBase64_64x_64,\r\n },\r\n [LocationType.ReportedIncident]: {\r\n base64Encoded: carBase64_64x23,\r\n },\r\n [LocationType.ArrivingAtIncident]: {\r\n base64Encoded: carBase64_64x23,\r\n },\r\n [LocationType.LeavingIncident]: {\r\n base64Encoded: carBase64_64x23,\r\n },\r\n [LocationType.DeliveringVehicle]: {\r\n base64Encoded: wrenchBase64_64x64,\r\n },\r\n [LocationType.DeliveringCargo]: {\r\n base64Encoded: wrenchBase64_64x64,\r\n },\r\n [LocationType.ResumingAssignment]: {\r\n base64Encoded: truckBase64_64x_64,\r\n },\r\n [LocationType.PausingAssignment]: {\r\n base64Encoded: truckBase64_64x_64,\r\n },\r\n [LocationType.Returning]: {\r\n base64Encoded: truckBase64_64x_64,\r\n },\r\n} as { [key: string]: ReportLocationMarkerIconProps };\r\n\r\nexport const loadMapApi = (apiKey: string) => {\r\n const mapsURL = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&v=quarterly`;\r\n const scripts = document.getElementsByTagName('script');\r\n // Go through existing script tags, and return google maps api tag when found.\r\n for (let i = 0; i < scripts.length; i++) {\r\n if (scripts[i].src.indexOf(mapsURL) === 0) {\r\n return scripts[i];\r\n }\r\n }\r\n\r\n const googleMapScript = document.createElement('script');\r\n googleMapScript.src = mapsURL;\r\n googleMapScript.async = true;\r\n googleMapScript.defer = true;\r\n window.document.body.appendChild(googleMapScript);\r\n\r\n return googleMapScript;\r\n};\r\n\r\nexport function hasValidCoordinates(latitude?: number, longitude?: number) {\r\n if (latitude === undefined || longitude === undefined) return false;\r\n return true;\r\n}\r\n\r\nfunction getMarkerIconProps(\r\n locationTypeId: LocationType,\r\n isActualRepairShop?: boolean\r\n): ReportLocationMarkerIconProps | undefined {\r\n // Delivering a vehicle/cargo doesnt always mean its going to a repair shop, it could be elsewhere\r\n const iconProps = reportLocationMarkerIcons[locationTypeId];\r\n if (iconProps) {\r\n if (\r\n (locationTypeId === LocationType.DeliveringVehicle ||\r\n locationTypeId === LocationType.DeliveringCargo) &&\r\n !isActualRepairShop\r\n ) {\r\n // Override icon.\r\n iconProps.base64Encoded = truckBase64_64x_64;\r\n }\r\n return iconProps;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction getIncidentMarkerIconProps(incidentType: IncidentType) {\r\n switch (incidentType) {\r\n case IncidentType.Fire:\r\n return {\r\n color: '#d02e25',\r\n icon: incidentTypeFire,\r\n };\r\n case IncidentType.GameAccident:\r\n return {\r\n color: '#702407',\r\n icon: incidentTypeGame,\r\n };\r\n case IncidentType.SingleVehicleAccident:\r\n return {\r\n color: '#e39704',\r\n icon: incidentTypeCol,\r\n };\r\n case IncidentType.Theft:\r\n case IncidentType.AttemptedTheft:\r\n return {\r\n color: '#000000',\r\n icon: incidentTypeTheft,\r\n };\r\n default:\r\n return {\r\n color: '#676767',\r\n icon: incidentTypeOther,\r\n };\r\n }\r\n}\r\nexport function getReportLocationMarker(\r\n index: number,\r\n iconSizeFactor?: number\r\n): google.maps.ReadonlyIcon | undefined {\r\n const iconProps = reportLocationLabels[index];\r\n if (!iconProps) return undefined;\r\n\r\n const factor = iconSizeFactor || 0.5;\r\n\r\n var template = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ].join('\\n');\r\n\r\n return {\r\n url: 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(template),\r\n scaledSize: new google.maps.Size(\r\n DefaultIconWidth * factor,\r\n DefaultIconHeight * factor\r\n ),\r\n origin: new google.maps.Point(0, 0),\r\n anchor: new google.maps.Point(\r\n DefaultIconWidth * factor * DefaultAnchorWidthFactor,\r\n DefaultIconHeight * factor * DefaultAnchorHeightFactor\r\n ),\r\n };\r\n}\r\n\r\nexport interface InfoWindowContent {\r\n index: number;\r\n title: string;\r\n time: string;\r\n descriptiveTitle: string;\r\n descriptiveContent: string;\r\n}\r\n\r\nexport function getReportLocationMarkerSvg(\r\n locationTypeId: LocationType,\r\n isActualRepairShop?: boolean,\r\n iconSizeFactor?: number\r\n): google.maps.ReadonlyIcon | undefined {\r\n const iconProps = getMarkerIconProps(locationTypeId, isActualRepairShop);\r\n if (!iconProps) return undefined;\r\n const factor = iconSizeFactor || 0.5;\r\n\r\n var template = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ].join('\\n');\r\n\r\n return {\r\n url: 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(template),\r\n scaledSize: new google.maps.Size(\r\n DefaultIconWidth * factor,\r\n DefaultIconHeight * factor\r\n ),\r\n origin: new google.maps.Point(0, 0),\r\n anchor: new google.maps.Point(\r\n DefaultIconWidth * factor * DefaultAnchorWidthFactor,\r\n DefaultIconHeight * factor * DefaultAnchorHeightFactor\r\n ),\r\n };\r\n}\r\n\r\nexport interface InfoWindowContent {\r\n index: number;\r\n title: string;\r\n time: string;\r\n descriptiveTitle: string;\r\n descriptiveContent: string;\r\n}\r\n\r\nexport const InfoContainer = styled.div`\r\n padding: 0 0 0 8px;\r\n`;\r\n\r\nexport const InfoTitle = styled.h4`\r\n font-weight: bold;\r\n font-size: ${FontSize.Large};\r\n margin: 4px 0;\r\n`;\r\n\r\nexport const InfoContent = styled.span`\r\n font-size: ${FontSize.Medium};\r\n font-weight: normal;\r\n display: block;\r\n`;\r\n\r\nexport const RenderContent = (info: InfoWindowContent) => {\r\n return ReactDOMServer.renderToString(\r\n \r\n \r\n {info.index}. {info.title}\r\n \r\n Tid: {info.time}\r\n {!!info.descriptiveTitle && (\r\n {info?.descriptiveTitle}\r\n )}\r\n {!!info?.descriptiveContent && (\r\n {info?.descriptiveContent}\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport const centerInfoWindow = (\r\n map: google.maps.Map,\r\n latLng: google.maps.LatLng\r\n) => {\r\n var scale = Math.pow(2, map!.getZoom());\r\n var offsetx = 0;\r\n var offsety = -50;\r\n\r\n var worldCoordinateCenter = map!.getProjection()!.fromLatLngToPoint(latLng);\r\n var pixelOffset = new google.maps.Point(\r\n offsetx / scale || 0,\r\n offsety / scale || 0\r\n );\r\n\r\n var worldCoordinateNewCenter = new google.maps.Point(\r\n worldCoordinateCenter.x - pixelOffset.x,\r\n worldCoordinateCenter.y + pixelOffset.y\r\n );\r\n\r\n var latLngPosition = map!\r\n .getProjection()!\r\n .fromPointToLatLng(worldCoordinateNewCenter);\r\n\r\n return latLngPosition;\r\n};\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { GoogleConfigurationClient } from '../api-clients';\r\nimport { loadMapApi } from './utils/GoogleMapsUtils';\r\n\r\ninterface GoogleMapsApiContextProps {\r\n scriptLoaded: boolean;\r\n mapsApiKey: string;\r\n}\r\n\r\nconst initialContext: GoogleMapsApiContextProps = {\r\n scriptLoaded: false,\r\n mapsApiKey: '',\r\n};\r\n\r\nconst GoogleMapsApiContext = createContext(\r\n initialContext\r\n);\r\n\r\nexport const useGoogleMapsApi = () => {\r\n return useContext(GoogleMapsApiContext);\r\n};\r\n\r\nconst GoogleMapsApiProvider: React.FC = (props) => {\r\n const [scriptLoaded, setScriptLoaded] = useState(false);\r\n const [mapsApiKey, setMapsApiKey] = useState('');\r\n // the state change in the useEffect meant we couldn't check the key right after fetching\r\n // so a ref holds the key, but we expose the state from the context.\r\n const apiKey = useRef('');\r\n\r\n useEffect(() => {\r\n const controller = new AbortController();\r\n\r\n const initializeGoogleMapsApi = async () => {\r\n const client = new GoogleConfigurationClient();\r\n const response = await client.getGoogleMapsApiKey(controller.signal);\r\n if (response.apiKey) {\r\n console.log(response.apiKey);\r\n apiKey.current = response.apiKey;\r\n setMapsApiKey(response.apiKey);\r\n }\r\n };\r\n if (apiKey.current === undefined || apiKey.current === '')\r\n initializeGoogleMapsApi();\r\n\r\n return () => {\r\n controller.abort();\r\n apiKey.current = '';\r\n setMapsApiKey('');\r\n };\r\n }, []);\r\n console.log(apiKey);\r\n\r\n useEffect(() => {\r\n if (apiKey.current !== undefined && apiKey.current !== '') {\r\n const googleMapScript = loadMapApi(apiKey.current);\r\n googleMapScript.addEventListener('load', () => {\r\n setScriptLoaded(true);\r\n });\r\n\r\n return () => {\r\n googleMapScript.removeEventListener('load', () => {\r\n setScriptLoaded(false);\r\n });\r\n };\r\n }\r\n }, [apiKey.current]);\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default GoogleMapsApiProvider;\r\n","import {\r\n Bounds,\r\n CompanyDTO,\r\n IncidentLocationData,\r\n IncidentsMapClient,\r\n IncidentType,\r\n} from '../api-clients/index';\r\nimport { GoogleMapsContext } from '../GoogleMaps/GoogleMapsContext';\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useState,\r\n useCallback,\r\n} from 'react';\r\nimport { BasicDataContext } from '../../utils/useBasicData';\r\nconst { v4: uuidv4 } = require('uuid');\r\n\r\ninterface ContextProps {\r\n company?: CompanyDTO;\r\n loading: boolean;\r\n startDate: Date;\r\n setStartDate: (date: Date) => void;\r\n endDate: Date;\r\n setEndDate: (date: Date) => void;\r\n incidentType: IncidentType;\r\n setIncidentType: (type: IncidentType) => void;\r\n selectedCompany: CompanyDTO | undefined;\r\n setSelectedCompany: (company: CompanyDTO | undefined) => void;\r\n stopListening: () => void;\r\n setIncidentTypes: (types: string) => void;\r\n incidentTypes: string;\r\n}\r\n\r\nconst initialContext: ContextProps = {\r\n company: undefined,\r\n loading: false,\r\n startDate: new Date(Date.now() - 31536000),\r\n setStartDate: () => Function,\r\n endDate: new Date(Date.now()),\r\n setEndDate: () => Function,\r\n incidentType: IncidentType.GameAccident,\r\n setIncidentType: () => Function,\r\n selectedCompany: undefined,\r\n setSelectedCompany: () => Function,\r\n stopListening: () => Function,\r\n incidentTypes: '',\r\n setIncidentTypes: () => Function,\r\n};\r\n\r\nexport const IncidentsMapContext = createContext(initialContext);\r\n\r\nconst IncidentsMapProvider: React.FC = (props) => {\r\n const [startDate, setStartDate] = useState(\r\n new Date(Date.now() - 2629746000)\r\n );\r\n const [endDate, setEndDate] = useState(new Date(Date.now()));\r\n const [incidentType, setIncidentType] = useState(\r\n IncidentType.None\r\n );\r\n const [incidentTypes, setIncidentTypes] = useState('');\r\n const [company, setCompany] = useState();\r\n const [selectedCompany, setSelectedCompany] = useState<\r\n CompanyDTO | undefined\r\n >(undefined);\r\n\r\n const {\r\n scriptLoaded,\r\n map,\r\n locations,\r\n markers,\r\n addLocations,\r\n addMarkers,\r\n clearMarkers,\r\n } = useContext(GoogleMapsContext);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const { user } = useContext(BasicDataContext);\r\n\r\n useEffect(() => {\r\n // const _subscription = authService.subscribe(() => {\r\n // if (authService._isAuthenticated && loading) {\r\n getCompany();\r\n // }\r\n // });\r\n\r\n return () => {\r\n // authService.unsubscribe(_subscription);\r\n };\r\n }, []);\r\n\r\n const getCompany = async () => {\r\n const client = new IncidentsMapClient();\r\n const response = await client.getCompanies();\r\n\r\n setCompany(response.find((f) => f.id === user?.companyID));\r\n setLoading(false);\r\n };\r\n\r\n let timer: NodeJS.Timeout;\r\n let dragendListener: google.maps.MapsEventListener;\r\n let dragListener: google.maps.MapsEventListener;\r\n let zoomListener: google.maps.MapsEventListener;\r\n\r\n var activeKey: any = '';\r\n\r\n const makeAPICall = async () => {\r\n const key = uuidv4();\r\n console.log(key);\r\n activeKey = key;\r\n ajax(key);\r\n };\r\n const ajax = async (key: any) => {\r\n console.log(key);\r\n if (map) {\r\n const client = new IncidentsMapClient();\r\n const ne = map.getBounds()?.getNorthEast();\r\n const sw = map.getBounds()?.getSouthWest();\r\n\r\n if (!ne || !sw) {\r\n console.log('ERROR IN MAP BOUNDS');\r\n } else {\r\n const response = await client.getIncidentLocations(\r\n new IncidentLocationData({\r\n ne: new Bounds({ lat: ne!.lat(), lng: ne!.lng() }),\r\n sw: new Bounds({ lat: sw!.lat(), lng: sw!.lng() }),\r\n assignmentIds: [],\r\n from: startDate,\r\n to: endDate,\r\n // incidentTypeId: incidentType,\r\n incidentTypes: incidentTypes,\r\n customerId: company?.assistConceptId,\r\n insuranceCompanyId: selectedCompany\r\n ? selectedCompany.assistConceptId\r\n : undefined,\r\n })\r\n );\r\n if (response && key == activeKey) {\r\n // addLocations(response);\r\n clearMarkers();\r\n addMarkers(response, incidentTypes);\r\n } else {\r\n console.log('No response!');\r\n }\r\n }\r\n }\r\n\r\n setLoading(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (scriptLoaded && map) {\r\n dragendListener = google.maps.event.addListener(map, 'dragend', () => {\r\n timer = setTimeout(() => {\r\n if (incidentTypes !== '') {\r\n setLoading(true);\r\n }\r\n }, 500);\r\n });\r\n dragListener = google.maps.event.addListener(map, 'drag', () => {\r\n clearTimeout(timer);\r\n });\r\n zoomListener = google.maps.event.addListener(map, 'zoom_changed', () => {\r\n makeAPICall();\r\n });\r\n }\r\n return () => {\r\n if (scriptLoaded) {\r\n google.maps.event.removeListener(dragendListener);\r\n google.maps.event.removeListener(dragListener);\r\n google.maps.event.removeListener(zoomListener);\r\n }\r\n };\r\n }, [map, scriptLoaded, markers, incidentTypes, loading]);\r\n\r\n useEffect(() => {\r\n if (incidentTypes !== '') {\r\n setLoading(true);\r\n } else {\r\n clearMarkers();\r\n }\r\n }, [incidentTypes, startDate, endDate, selectedCompany]);\r\n\r\n useEffect(() => {\r\n if (loading) {\r\n // clearMarkers();\r\n makeAPICall();\r\n }\r\n }, [loading]);\r\n\r\n const stopListening = () => {\r\n google.maps.event.removeListener(dragendListener);\r\n google.maps.event.removeListener(dragListener);\r\n google.maps.event.removeListener(zoomListener);\r\n };\r\n\r\n return (\r\n setStartDate(date),\r\n endDate,\r\n setEndDate: (date: Date) => setEndDate(date),\r\n incidentType,\r\n setIncidentType: (type: IncidentType) => setIncidentType(type),\r\n selectedCompany,\r\n setSelectedCompany: (company: CompanyDTO | undefined) => {\r\n clearMarkers();\r\n setSelectedCompany(company);\r\n },\r\n stopListening: () => stopListening,\r\n setIncidentTypes,\r\n incidentTypes,\r\n }}\r\n >\r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default IncidentsMapProvider;\r\n","import React, { useState } from 'react';\r\nimport { useContext } from 'react';\r\nimport { useEffect } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { Colors, FontSize } from '../../utils/styles';\r\nimport { IncidentType } from '../api-clients';\r\nimport {\r\n incidentTypeCol,\r\n incidentTypeFire,\r\n incidentTypeGame,\r\n incidentTypeOther,\r\n incidentTypeTheft,\r\n} from '../GoogleMaps/utils/GoogleMapsUtils';\r\nimport { IncidentsMapContext } from './IncidentsMapContext';\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n margin-left: 35px;\r\n align-items: center;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-size: ${FontSize.ZebraTitle};\r\n font-weight: bold;\r\n`;\r\n\r\nconst Button = styled.div<{ color: string; isActive: boolean }>`\r\n font-size: ${FontSize.ZebraTitle};\r\n padding: 2px 10px;\r\n border: 1px solid ${Colors.LightGrey};\r\n border-radius: 3px;\r\n margin: 0 5px;\r\n height: 30px;\r\n cursor: pointer;\r\n font-weight: bold;\r\n display: flex;\r\n align-items: center;\r\n\r\n ${(props) =>\r\n props.isActive &&\r\n css`\r\n background-color: ${props.color};\r\n color: white;\r\n `}\r\n`;\r\n\r\nconst ButtonName = styled.div``;\r\nconst ButtonIcon = styled.div`\r\n margin-right: 10px;\r\n height: 22px;\r\n width: 22px;\r\n border-radius: 50%;\r\n background-color: white;\r\n border: 1px solid black;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n img {\r\n width: 14px;\r\n height: 14px;\r\n }\r\n`;\r\n\r\nexport const incidentIdMapping = {\r\n [IncidentType.None]: 'Ingen',\r\n [IncidentType.EngineFailure]: 'Motorfel',\r\n [IncidentType.PowerTransmitionFailure]: 'Fel på kraftöverföring',\r\n [IncidentType.DitchDriving]: 'Dikeskörning',\r\n [IncidentType.CollisionWithOtherVehicle]: 'Kollision med annat fordon',\r\n [IncidentType.SingleVehicleAccident]: 'Kollision, singelolycka',\r\n [IncidentType.GameAccident]: 'Viltolycka',\r\n [IncidentType.Theft]: 'Stöld',\r\n [IncidentType.Fire]: 'Brand',\r\n [IncidentType.Flat]: 'Punktering',\r\n [IncidentType.GovernmentSalvageTechnical]:\r\n 'Myndighetsbärgning - Teknisk undersökning\"',\r\n [IncidentType.Brakefault]: 'Bromsfel',\r\n [IncidentType.FaultyAlarm]: 'Larmfel',\r\n [IncidentType.WheelReplacement]: 'Byte av hjul',\r\n [IncidentType.GovermentSalvageLongDistance]:\r\n 'Myndighetsbärgning - Lång flytt',\r\n [IncidentType.GovermentSalvageShortDistance]:\r\n 'Myndighetsbärgning - Kort flytt',\r\n [IncidentType.NoPower]: 'Strömlös',\r\n [IncidentType.AttemptedTheft]: 'Stöldförsök',\r\n [IncidentType.LostWheels]: 'Tappat hjul',\r\n [IncidentType.FaultyIgnition]: 'Tändlåsfel',\r\n [IncidentType.LostWheels]: 'Tappat hjul',\r\n [IncidentType.TransferTransport]: 'Överföringstransport',\r\n [IncidentType.GovernmentSalvageSeizure]: 'Myndighetsbärgning - Beslag',\r\n [IncidentType.GovernmentSalvageTBL7]: 'Myndighetsbärgning - TBL 7',\r\n [IncidentType.Other]: 'Annan',\r\n [IncidentType.Jumpstart]: 'Tappat hjul',\r\n [IncidentType.LostKeyOrKeyLockedInside]: 'Inlåst/Borttappad nyckel',\r\n [IncidentType.ElectricalFailure]: 'Elfel',\r\n [IncidentType.WrongFuelType]: 'Feltankat',\r\n [IncidentType.Stuck]: 'Fastkörning',\r\n [IncidentType.Vandalized]: 'Skadegörelse',\r\n [IncidentType.FuelShortage]: 'Bränslebrist',\r\n [IncidentType.Consignment]: 'Framkörning',\r\n [IncidentType.TransportationRelocation]: 'Trafikverksflytt',\r\n [IncidentType.MunicipalRelocation]: 'Kommunflytt',\r\n} as { [key: number]: string };\r\n\r\nenum ButtonEnums {\r\n Fire,\r\n Collision,\r\n Theft,\r\n Game,\r\n Other,\r\n}\r\n\r\nconst excludedInOther = [\r\n IncidentType.None,\r\n IncidentType.Fire,\r\n IncidentType.SingleVehicleAccident,\r\n IncidentType.AttemptedTheft,\r\n IncidentType.Theft,\r\n IncidentType.GameAccident,\r\n];\r\nconst IncidentDict = {\r\n [ButtonEnums.Fire]: {\r\n key: 1,\r\n incidents: [IncidentType.Fire],\r\n name: incidentIdMapping[IncidentType.Fire],\r\n icon: incidentTypeFire,\r\n color: '#d02e25',\r\n },\r\n [ButtonEnums.Collision]: {\r\n key: 2,\r\n incidents: [IncidentType.SingleVehicleAccident],\r\n name: 'Kollision',\r\n icon: incidentTypeCol,\r\n color: '#e39704',\r\n },\r\n [ButtonEnums.Theft]: {\r\n key: 3,\r\n incidents: [IncidentType.AttemptedTheft, IncidentType.Theft],\r\n name: 'Stöld',\r\n icon: incidentTypeTheft,\r\n color: '#000000',\r\n },\r\n [ButtonEnums.Game]: {\r\n key: 4,\r\n incidents: [IncidentType.GameAccident],\r\n name: 'Viltolycka',\r\n icon: incidentTypeGame,\r\n color: '#702407',\r\n },\r\n [ButtonEnums.Other]: {\r\n key: 5,\r\n incidents: [\r\n ...Object.keys(IncidentType)\r\n .map((f) => {\r\n if (\r\n !!excludedInOther.find(\r\n (x) => x === IncidentType[f as keyof typeof IncidentType]\r\n )\r\n ) {\r\n return null;\r\n }\r\n return IncidentType[f as keyof typeof IncidentType].valueOf();\r\n })\r\n .filter((f) => {\r\n return f !== null && !isNaN(f) && f !== 0;\r\n }),\r\n ],\r\n name: 'Övrigt',\r\n icon: incidentTypeOther,\r\n color: '#676767',\r\n },\r\n};\r\n\r\nconst IncidentsButtons: React.FC<{}> = () => {\r\n const [activeButtons, setActiveButton] = useState([]);\r\n const [activeIncidents, setActiveIncidents] = useState('');\r\n\r\n const { setIncidentType, setIncidentTypes } = useContext(IncidentsMapContext);\r\n\r\n useEffect(() => {\r\n var incidents = Object.keys(IncidentDict)\r\n .map((f) => Number(f) as ButtonEnums)\r\n .reduce((acc, curr: ButtonEnums) => {\r\n var dict = IncidentDict[curr];\r\n if (!!activeButtons.find((f) => f === dict.key)) {\r\n return [...acc, ...(dict.incidents as IncidentType[])];\r\n }\r\n return acc;\r\n }, []);\r\n console.log(incidents);\r\n setActiveIncidents(incidents.join(','));\r\n }, [activeButtons]);\r\n\r\n useEffect(() => {\r\n console.log(activeIncidents);\r\n if (activeIncidents != '') {\r\n setIncidentTypes(activeIncidents);\r\n setIncidentType(Number(activeIncidents.split(',')[0]));\r\n } else {\r\n setIncidentType(IncidentType.None);\r\n setIncidentTypes('');\r\n }\r\n }, [activeIncidents]);\r\n\r\n return (\r\n \r\n Visa olyckstyp:\r\n {Object.keys(IncidentDict).map((_key: string) => {\r\n var dict = IncidentDict[Number(_key) as ButtonEnums];\r\n return (\r\n f === dict.key)}\r\n onClick={() => {\r\n if (!!activeButtons.find((f) => f === dict.key)) {\r\n setActiveButton(activeButtons.filter((f) => f !== dict.key));\r\n } else {\r\n setActiveButton([...activeButtons, dict.key]);\r\n }\r\n }}\r\n >\r\n \r\n \r\n \r\n {dict.name}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default IncidentsButtons;\r\n","import {\r\n CasesClient,\r\n IncidentType,\r\n WaystarLocationSearch,\r\n} from '../api-clients/index';\r\nimport React, { createContext, useContext, useEffect, useState } from 'react';\r\nimport { IMarkerLocation } from './types';\r\nimport {\r\n centerInfoWindow,\r\n getIncidentMarkerSvg,\r\n InfoContainer,\r\n InfoContent,\r\n loadMapApi,\r\n} from './utils/GoogleMapsUtils';\r\nimport { useGoogleMapsApi } from './GoogleMapsApiContext';\r\nimport { incidentIdMapping } from '../IncidentsMap/IncidentsButtons';\r\nimport ReactDOMServer from 'react-dom/server';\r\nimport dayjs from 'dayjs';\r\nimport { BasicDataContext } from '../../utils/useBasicData';\r\n\r\ninterface ContextProps {\r\n scriptLoaded: boolean;\r\n map: google.maps.Map | undefined;\r\n markers: IMarkerLocation[];\r\n locations: WaystarLocationSearch[];\r\n setMap: (map: google.maps.Map) => void;\r\n addMarkers: (\r\n locations: WaystarLocationSearch[],\r\n incidentTypes: string\r\n ) => void;\r\n addCenterMarker: () => void;\r\n addLocations: (newLoc: WaystarLocationSearch[]) => void;\r\n unloadMap: () => void;\r\n clearMarkers: () => void;\r\n}\r\n\r\nconst initialContext: ContextProps = {\r\n scriptLoaded: false,\r\n map: undefined,\r\n markers: [],\r\n locations: [],\r\n setMap: () => Function,\r\n addMarkers: () => Function,\r\n addCenterMarker: () => Function,\r\n addLocations: () => Function,\r\n unloadMap: () => Function,\r\n clearMarkers: () => Function,\r\n};\r\n\r\nexport const GoogleMapsContext = createContext(initialContext);\r\n\r\nconst GoogleMapsProvider: React.FC = (props) => {\r\n const { scriptLoaded, mapsApiKey } = useGoogleMapsApi();\r\n\r\n const [map, setMap] = useState(undefined);\r\n const [locations, setLocations] = useState([]);\r\n const [markers, _setMarkers] = useState([]);\r\n const [centerMarker, setCenterMarker] = useState<\r\n google.maps.Marker | undefined\r\n >(undefined);\r\n const [icon, setIcon] = useState(\r\n undefined\r\n );\r\n\r\n const setMarkers = (_markers: IMarkerLocation[]) => {\r\n if (markers.length > 0) {\r\n markers.forEach((f) => {\r\n f.marker.setMap(null);\r\n });\r\n }\r\n _setMarkers(_markers);\r\n };\r\n\r\n const { user, companies } = useContext(BasicDataContext);\r\n const [infoWindow, setInfoWindow] = useState<\r\n google.maps.InfoWindow | undefined\r\n >(undefined);\r\n\r\n useEffect(() => {\r\n if (!!mapsApiKey && scriptLoaded) {\r\n const googleMapScript = loadMapApi(mapsApiKey);\r\n googleMapScript.addEventListener('load', () => {\r\n setIcon({\r\n url:\r\n 'https://maps.gstatic.com/mapfiles/api-3/images/spotlight-poi.png',\r\n scaledSize: new google.maps.Size(15, 33),\r\n origin: new google.maps.Point(0, 0),\r\n });\r\n });\r\n\r\n setInfoWindow(new google.maps.InfoWindow({ disableAutoPan: true }));\r\n\r\n return () => {\r\n googleMapScript.removeEventListener('load', () => {\r\n setIcon({\r\n url:\r\n 'https://maps.gstatic.com/mapfiles/api-3/images/spotlight-poi.png',\r\n scaledSize: new google.maps.Size(15, 33),\r\n origin: new google.maps.Point(0, 0),\r\n });\r\n });\r\n };\r\n }\r\n }, [mapsApiKey, scriptLoaded]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (infoWindow) google.maps.event.clearInstanceListeners(infoWindow);\r\n setInfoWindow(undefined);\r\n };\r\n }, []);\r\n\r\n const createInfoWindow = async (marker: IMarkerLocation) => {\r\n if (map && infoWindow) {\r\n const client = new CasesClient();\r\n var extraData: {\r\n caseId?: Number;\r\n waystarScore?: Number;\r\n regNumber?: string;\r\n } = {\r\n caseId: undefined,\r\n waystarScore: undefined,\r\n regNumber: undefined,\r\n };\r\n var company = companies?.find((f) => f.id === user?.companyID);\r\n if (marker.customerId === company?.assistConceptId) {\r\n var resp = await client.getMapCaseInfo(marker.assignmentId);\r\n // extraData.regNumber = 'ABC123';\r\n if (resp) {\r\n extraData.caseId = resp.caseId;\r\n extraData.waystarScore = resp.waystarScore;\r\n }\r\n }\r\n infoWindow!.close();\r\n infoWindow.setContent(renderInfoWindow(marker, extraData));\r\n infoWindow!.setPosition(\r\n centerInfoWindow(map, marker.marker.getPosition()!)\r\n );\r\n infoWindow!.open(map);\r\n }\r\n };\r\n\r\n const renderInfoWindow = (\r\n marker: IMarkerLocation,\r\n data: { caseId?: Number; waystarScore?: Number; regNumber?: string }\r\n ) => {\r\n return ReactDOMServer.renderToString(\r\n \r\n {data.regNumber && (\r\n Regnummer: {data.regNumber}\r\n )}\r\n {data.waystarScore && (\r\n \r\n WaystarScore: {data.waystarScore.toFixed(2)}\r\n \r\n )}\r\n {marker.created && (\r\n \r\n Skapad: {dayjs(marker.created).format('YYYY-MM-DD HH:mm:ss')}\r\n \r\n )}\r\n \r\n Skadetyp: {incidentIdMapping[marker.incidentTypeId]}\r\n \r\n {data.caseId && (\r\n \r\n \r\n Se uppdraget\r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const addLocations = (newLoc: WaystarLocationSearch[]) => {\r\n setLocations([...locations, ...newLoc]);\r\n };\r\n\r\n const unloadMap = () => {\r\n markers.forEach((marker) => {\r\n marker.marker.setMap(null);\r\n });\r\n setMarkers([]);\r\n setMap(undefined);\r\n setCenterMarker(undefined);\r\n };\r\n\r\n const addCenterMarker = () => {\r\n if (centerMarker && map) {\r\n centerMarker.setPosition(map.getCenter());\r\n } else if (map) {\r\n setCenterMarker(\r\n new google.maps.Marker({\r\n position: map.getCenter(),\r\n map: map,\r\n })\r\n );\r\n }\r\n };\r\n\r\n const addMarkers = (\r\n newLoc: WaystarLocationSearch[],\r\n incidentTypes: string\r\n ) => {\r\n if (map) {\r\n if (markers.length > 0) {\r\n // INCIDENTTYPE CHANGED\r\n\r\n markers.forEach((m) => {\r\n m.marker.setMap(null);\r\n });\r\n\r\n let newArr: IMarkerLocation[] = [];\r\n\r\n newLoc.forEach((l) => {\r\n newArr = [\r\n ...newArr,\r\n {\r\n created: l.created,\r\n customerId: l.customerId,\r\n assignmentId: l.assignmentId!,\r\n incidentTypeId: l.incidentTypeId!,\r\n insuranceCompanyId: l.insuranceCompanyId,\r\n marker: new google.maps.Marker({\r\n position: new google.maps.LatLng(l.lat!, l.lng!),\r\n map: map,\r\n icon: getIncidentMarkerSvg(l.incidentTypeId! as IncidentType),\r\n }),\r\n },\r\n ];\r\n });\r\n\r\n const ne = map.getBounds()?.getNorthEast();\r\n const sw = map.getBounds()?.getSouthWest();\r\n\r\n if (!ne || !sw) {\r\n console.log('ERROR IN BOUNDS GoogleMapContext');\r\n } else {\r\n newArr.forEach((f) => {\r\n f.marker.addListener('click', () => {\r\n createInfoWindow(f);\r\n });\r\n });\r\n\r\n setMarkers(newArr);\r\n }\r\n } else {\r\n // ADD ALL\r\n markers.forEach((m) => {\r\n m.marker.setMap(null);\r\n });\r\n\r\n const addArr = newLoc.reduce((acc, cur) => {\r\n return [\r\n ...acc,\r\n {\r\n created: cur.created,\r\n customerId: cur.customerId,\r\n assignmentId: cur.assignmentId!,\r\n incidentTypeId: cur.incidentTypeId!,\r\n insuranceCompanyId: cur.insuranceCompanyId,\r\n marker: new google.maps.Marker({\r\n position: new google.maps.LatLng(cur.lat!, cur.lng!),\r\n map: map,\r\n icon: getIncidentMarkerSvg(cur.incidentTypeId as IncidentType),\r\n }),\r\n },\r\n ];\r\n }, [] as IMarkerLocation[]);\r\n\r\n addArr.forEach((f) => {\r\n f.marker.addListener('click', () => {\r\n createInfoWindow(f);\r\n });\r\n });\r\n setMarkers(addArr);\r\n }\r\n } else {\r\n console.log('NO MAP INITIALIZED!!!!');\r\n }\r\n };\r\n\r\n const clearMarkers = () => {\r\n if (scriptLoaded) {\r\n markers.forEach((f: IMarkerLocation) => {\r\n f.marker.setMap(null);\r\n });\r\n setLocations([]);\r\n setMarkers([]);\r\n }\r\n };\r\n\r\n return (\r\n addLocations(newLoc),\r\n setMap: (map: google.maps.Map) => setMap(map),\r\n addMarkers: (\r\n locations: WaystarLocationSearch[],\r\n incidentTypes: string\r\n ) => addMarkers(locations, incidentTypes),\r\n addCenterMarker: addCenterMarker,\r\n unloadMap: unloadMap,\r\n clearMarkers,\r\n }}\r\n >\r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default GoogleMapsProvider;\r\n","import { IncidentType } from '../api-clients/index';\r\nimport React, { useContext } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontFamily, FontSize } from '../../utils/styles';\r\nimport DatePicker from 'react-datepicker';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\nimport './IncidentsMap.css';\r\nimport { IncidentsMapContext } from './IncidentsMapContext';\r\nimport Loader from '../Loader';\r\nimport { BasicDataContext } from '../../utils/useBasicData';\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n background-color: white;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n padding-bottom: 10px;\r\n align-items: center;\r\n`;\r\n\r\nconst Overlay = styled.div`\r\n height: 80px;\r\n width: 80px;\r\n z-index: 0;\r\n`;\r\n\r\nconst SelectContainer = styled.div`\r\n display: inline-flex;\r\n position: relative;\r\n border: 1px solid ${Colors.LightGrey};\r\n height: 29px;\r\n width: 137px;\r\n margin: 0 10px;\r\n`;\r\n\r\nconst InputLabel = styled.label`\r\n top: 3px;\r\n left: 8px;\r\n font-weight: bold;\r\n font-size: ${FontSize.Small};\r\n background-color: transparent;\r\n z-index: 0;\r\n`;\r\n\r\nconst Dropdown = styled.select`\r\n border: 0;\r\n outline: none;\r\n font-size: ${FontSize.ZebraTitle};\r\n background-color: transparent;\r\n width: 100%;\r\n padding-left: 5px;\r\n z-index: 0;\r\n`;\r\n\r\nconst Title = styled.h1`\r\n font-size: 3em;\r\n font-weight: normal;\r\n margin: 0;\r\n padding: 0;\r\n margin-right: 20px;\r\n margin-left: 25px;\r\n`;\r\n\r\nconst IncidentsMapControl: React.FC = () => {\r\n const {\r\n loading,\r\n company,\r\n startDate,\r\n setStartDate,\r\n endDate,\r\n setEndDate,\r\n selectedCompany,\r\n setSelectedCompany,\r\n } = useContext(IncidentsMapContext);\r\n\r\n const { user } = useContext(BasicDataContext);\r\n\r\n const CustomInput = (\r\n props: React.HTMLProps,\r\n ref: React.Ref\r\n ) => (\r\n \r\n );\r\n\r\n const handleSelectedCompanyChanged = (companyStr: string) => {\r\n if (companyStr === 'Alla bolag') {\r\n setSelectedCompany(undefined);\r\n } else {\r\n setSelectedCompany(company);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n Vägolyckor\r\n \r\n setStartDate(date)}\r\n peekNextMonth\r\n showMonthDropdown\r\n showYearDropdown\r\n dropdownMode='select'\r\n customInput={React.createElement(React.forwardRef(CustomInput))}\r\n />\r\n \r\n \r\n setEndDate(date)}\r\n peekNextMonth\r\n showMonthDropdown\r\n showYearDropdown\r\n dropdownMode='select'\r\n customInput={React.createElement(React.forwardRef(CustomInput))}\r\n />\r\n \r\n \r\n handleSelectedCompanyChanged(e.target.value)}\r\n >\r\n \r\n {company && }\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IncidentsMapControl;\r\n","import { GoogleMapsContext } from '../GoogleMaps/GoogleMapsContext';\r\nimport Loader from '../Loader';\r\nimport React, { useContext, useEffect, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport IncidentsMapControl from './IncidentsMapControl';\r\nimport IncidentsButtons from './IncidentsButtons';\r\nimport { IncidentsMapContext } from './IncidentsMapContext';\r\n\r\nconst ControlContainer = styled.div`\r\n display: flex;\r\n z-index: 10;\r\n width: 100%;\r\n padding-top: 40px;\r\n position: relative;\r\n flex-direction: column;\r\n`;\r\n\r\nconst MapContainer = styled.div`\r\n display: flex;\r\n position: relative;\r\n z-index: 9;\r\n width: calc(100% - 70px);\r\n height: 800px;\r\n margin-top: 40px;\r\n margin-left: 35px;\r\n`;\r\n\r\nconst MapDiv = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n`;\r\n\r\nconst SettingOverlay = styled.div`\r\n background: rgba(255, 255, 255, 0.7);\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n left: 0;\r\n bottom: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n`;\r\n\r\nconst IncidentsContainer: React.FC = ({ children }) => {\r\n const { scriptLoaded, map, setMap, unloadMap } = useContext(\r\n GoogleMapsContext\r\n );\r\n const { loading } = useContext(IncidentsMapContext);\r\n const ref = useRef(null);\r\n\r\n useEffect(() => {\r\n return () => {\r\n unloadMap();\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!map && scriptLoaded) {\r\n startMap();\r\n }\r\n }, [map, scriptLoaded]);\r\n\r\n const startMap = (): void => {\r\n if (ref.current) {\r\n setMap(\r\n new google.maps.Map(ref.current!, {\r\n zoom: 8,\r\n center: new google.maps.LatLng(59.326879, 18.070369),\r\n mapTypeControl: false,\r\n streetViewControl: false,\r\n rotateControl: false,\r\n scaleControl: true,\r\n fullscreenControl: false,\r\n panControl: false,\r\n zoomControl: true,\r\n scrollwheel: false,\r\n gestureHandling: 'greedy',\r\n mapTypeId: google.maps.MapTypeId.ROADMAP,\r\n draggableCursor: 'pointer',\r\n })\r\n );\r\n }\r\n };\r\n return (\r\n <>\r\n \r\n \r\n \r\n {loading && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {scriptLoaded && {children}}\r\n {(!scriptLoaded || !map) && }\r\n \r\n \r\n );\r\n};\r\n\r\nexport default IncidentsContainer;\r\n","import styled from 'styled-components';\r\nimport { FontFamily, FontSize } from '../../utils/styles';\r\n\r\nexport const H1 = styled.h1`\r\n font-size: ${FontSize.H1};\r\n`;\r\n\r\nexport const H2 = styled.h2`\r\n font-size: ${FontSize.H2};\r\n font-weight: bold;\r\n`;\r\n\r\nexport const H3 = styled.h3`\r\n font-size: ${FontSize.H3};\r\n font-weight: bold;\r\n`;\r\n","import { useEffect, useState } from 'react';\r\nimport {\r\n centerInfoWindow,\r\n InfoWindowContent,\r\n RenderContent,\r\n} from '../utils/GoogleMapsUtils';\r\n\r\ninterface MarkerProps {\r\n map: google.maps.Map | undefined;\r\n markers: {\r\n [key: string]: {\r\n marker: google.maps.Marker;\r\n info?: InfoWindowContent;\r\n };\r\n };\r\n infoWindow?: google.maps.InfoWindow;\r\n addIndex?: number;\r\n}\r\n\r\nexport interface ExtendedMarker extends google.maps.Marker {\r\n info?: InfoWindowContent;\r\n id: string;\r\n posIndex?: number;\r\n listener?: google.maps.MapsEventListener;\r\n}\r\n\r\nexport const useMapMarkers = ({\r\n map,\r\n markers,\r\n infoWindow,\r\n addIndex,\r\n}: MarkerProps) => {\r\n const [mapMarkers, setMapMarkers] = useState([]);\r\n const [indexedMarker, setIndexedMarker] = useState(\r\n null\r\n );\r\n\r\n useEffect(() => {\r\n const unloadMarkers = () => {\r\n mapMarkers.forEach((marker) => {\r\n marker.setMap(null);\r\n google.maps.event.clearInstanceListeners(marker);\r\n });\r\n };\r\n\r\n return () => {\r\n unloadMarkers();\r\n setMapMarkers([]);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n mapMarkers.forEach((mark) => {\r\n mark.addListener('click', () => {\r\n onClick(mark, false);\r\n });\r\n });\r\n return () => {\r\n mapMarkers.forEach((mark) => {\r\n mark.listener?.remove();\r\n });\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [mapMarkers, indexedMarker]);\r\n\r\n useEffect(() => {\r\n if (map && mapMarkers.length === 0) {\r\n const posList = Object.keys(markers)\r\n .reduce((prev, curr) => {\r\n const tempMarker = markers[curr].marker as ExtendedMarker;\r\n const lat = tempMarker.getPosition()?.lat();\r\n if (lat === undefined) {\r\n return prev;\r\n } else {\r\n return [...prev, lat];\r\n }\r\n }, [] as number[])\r\n .sort((a, b) => b - a);\r\n\r\n var markerList = Object.keys(markers).map((f, index) => {\r\n var mark = markers[f].marker as ExtendedMarker;\r\n if (markers[f].info) {\r\n mark.info = markers[f].info;\r\n mark.info!.index = index + 1 + (addIndex ?? 0);\r\n }\r\n mark.setMap(map);\r\n\r\n let pos = mark.getPosition();\r\n if (pos !== undefined && pos !== null) {\r\n mark.posIndex = posList.indexOf(mark.getPosition()!.lat()) + 10;\r\n } else {\r\n mark.posIndex = 10;\r\n }\r\n\r\n mark.setZIndex(mark.posIndex!);\r\n mark.id = f;\r\n\r\n return mark;\r\n });\r\n\r\n /*\r\n With more than one marker, try to fit all of them within the maps bounds\r\n else just center the map around the one marker.\r\n */\r\n if (markerList.length > 1) {\r\n let bounds = new google.maps.LatLngBounds();\r\n for (let i = 0; i < markerList.length; i++) {\r\n bounds.extend(markerList[i].getPosition()!);\r\n }\r\n map.fitBounds(bounds);\r\n } else {\r\n map.setCenter(markerList[0].getPosition()!);\r\n }\r\n\r\n setMapMarkers(markerList);\r\n }\r\n }, [addIndex, map, mapMarkers, markers]);\r\n\r\n var openInnerInfoWindow = (marker: ExtendedMarker) => {\r\n if (map && infoWindow && marker.info) {\r\n infoWindow!.close();\r\n infoWindow!.setContent(RenderContent(marker.info!).toString());\r\n infoWindow!.setPosition(centerInfoWindow(map, marker.getPosition()!));\r\n infoWindow!.open(map);\r\n }\r\n };\r\n\r\n const onClickFromOutside = (id: string) => {\r\n var marker = mapMarkers.find((f) => f.id === id);\r\n if (marker !== undefined) {\r\n onClick(marker, true);\r\n }\r\n };\r\n\r\n const onClick = (marker: ExtendedMarker, center: boolean) => {\r\n if (indexedMarker) {\r\n indexedMarker.setZIndex(indexedMarker.posIndex!);\r\n }\r\n if (center) {\r\n map?.setCenter(marker.getPosition()!);\r\n }\r\n marker.setZIndex(181);\r\n\r\n setIndexedMarker(marker);\r\n openInnerInfoWindow(marker!);\r\n };\r\n\r\n return { mapMarkers, setMapMarkers, onClickFromOutside };\r\n};\r\n","import Loader from '../Loader';\r\nimport React, { useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport { useGoogleMapsApi } from './GoogleMapsApiContext';\r\nimport { useGoogleMap } from './hooks/useGoogleMap';\r\nimport { useMapMarkers } from './hooks/useMapMarkers';\r\nimport { InfoWindowContent } from './utils/GoogleMapsUtils';\r\n\r\ninterface Props {\r\n markers: {\r\n [key: string]: {\r\n marker: google.maps.Marker;\r\n info?: InfoWindowContent;\r\n };\r\n };\r\n center: google.maps.LatLng | google.maps.LatLngLiteral;\r\n zoom?: number;\r\n useZoomControl?: boolean;\r\n scrollwheel?: boolean;\r\n addIndex?: number;\r\n setMarkerClickFunction?: (fn: (id: string) => void) => void;\r\n}\r\n\r\nconst MapContainer = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n`;\r\n\r\nconst Map: React.FC = ({\r\n markers,\r\n center,\r\n zoom,\r\n useZoomControl,\r\n scrollwheel,\r\n addIndex,\r\n setMarkerClickFunction,\r\n}) => {\r\n const ref = useRef(null);\r\n const { scriptLoaded } = useGoogleMapsApi();\r\n const { map, infoWindow } = useGoogleMap({\r\n mapRef: ref,\r\n zoom: zoom ?? 16,\r\n useZoomControl,\r\n center: center,\r\n scrollwheel: scrollwheel ?? false,\r\n });\r\n\r\n const { onClickFromOutside } = useMapMarkers({\r\n map: map,\r\n markers: markers ?? {},\r\n infoWindow: infoWindow,\r\n addIndex: addIndex,\r\n });\r\n\r\n if (!!setMarkerClickFunction) {\r\n setMarkerClickFunction((index: string) => {\r\n onClickFromOutside(index);\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n {!scriptLoaded && }\r\n {scriptLoaded && }\r\n \r\n );\r\n};\r\n\r\nexport default Map;\r\n","import { RefObject, useEffect, useState } from 'react';\r\n\r\ntype GoogleMapProps = {\r\n mapRef: RefObject;\r\n zoom: number;\r\n useZoomControl?: boolean;\r\n scrollwheel: boolean;\r\n center: google.maps.LatLng | google.maps.LatLngLiteral | undefined;\r\n};\r\n\r\nexport const useGoogleMap = ({\r\n mapRef,\r\n zoom,\r\n scrollwheel,\r\n useZoomControl = true,\r\n center,\r\n}: GoogleMapProps) => {\r\n const [map, setMap] = useState | undefined>(\r\n undefined\r\n );\r\n const [infoWindow, setInfoWindow] = useState<\r\n google.maps.InfoWindow | undefined\r\n >(new google.maps.InfoWindow({ disableAutoPan: true }));\r\n\r\n useEffect(() => {\r\n const createMap = () => {\r\n if (mapRef.current) {\r\n return new google.maps.Map(mapRef.current, {\r\n zoom: zoom,\r\n center: center,\r\n mapTypeControl: false,\r\n streetViewControl: false,\r\n rotateControl: false,\r\n scaleControl: true,\r\n fullscreenControl: false,\r\n panControl: false,\r\n zoomControl: useZoomControl,\r\n scrollwheel: scrollwheel,\r\n gestureHandling: 'greedy',\r\n mapTypeId: google.maps.MapTypeId.ROADMAP,\r\n draggableCursor: 'pointer',\r\n });\r\n }\r\n };\r\n\r\n setMap(createMap());\r\n\r\n return () => {\r\n if (infoWindow) google.maps.event.clearInstanceListeners(infoWindow);\r\n setInfoWindow(undefined);\r\n setMap(undefined);\r\n };\r\n }, []);\r\n\r\n return { map, infoWindow };\r\n};\r\n","import { VehicleHistoryTimelineDTO } from '../api-clients/index';\r\nimport React from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { Colors, FontFamily, FontSize } from '../../utils/styles';\r\n\r\nconst Container = styled.div<{ nrOfBoxes: number; maxBoxHeight: number }>`\r\n display: block;\r\n position: relative;\r\n margin-left: 64px;\r\n margin-right: 5px;\r\n ${(props) =>\r\n props.maxBoxHeight &&\r\n css`\r\n height: ${props.maxBoxHeight + BOX_HEIGHT + BOX_GAP + TOP_MARGIN}px;\r\n `}\r\n`;\r\n\r\nconst Line = styled.div<{\r\n percent: number;\r\n top: number;\r\n}>`\r\n position: absolute;\r\n width: 3px;\r\n height: ${(props) => props.top}px;\r\n background-color: transparent;\r\n top: -12px;\r\n left: ${(props) => props.percent}%;\r\n z-index: 1;\r\n`;\r\n\r\nconst Box = styled.div<{\r\n top: number;\r\n percent: number;\r\n color: string;\r\n}>`\r\n position: absolute;\r\n width: 124px;\r\n height: 80px;\r\n background-color: ${(props) => props.color};\r\n top: ${(props) => props.top}px;\r\n left: calc(${(props) => props.percent}% - 62px);\r\n text-align: center;\r\n z-index: 2;\r\n border: 1px solid ${Colors.DarkGrey};\r\n`;\r\n\r\nconst BoxTitle = styled.h1`\r\n font-size: ${FontSize.Medium};\r\n font-weight: bold;\r\n`;\r\n\r\nconst BoxEvent = styled.h1`\r\n font-size: ${FontSize.Medium};\r\n font-weight: normal;\r\n`;\r\n\r\ninterface VehicleHistoryBoxProps {\r\n lines: number[];\r\n fullYearLines: number[];\r\n yearsArr: number[];\r\n timeline: VehicleHistoryTimelineDTO[];\r\n}\r\nconst BOX_HEIGHT = 80;\r\nconst BOX_GAP = 12;\r\nconst TOP_MARGIN = 20;\r\n\r\nconst VehicleHistoryBox: React.FC = ({\r\n lines,\r\n fullYearLines,\r\n yearsArr,\r\n timeline,\r\n}) => {\r\n let top = TOP_MARGIN;\r\n let lastRenderedYear = 1969;\r\n let nrBoxesLastYear = 0;\r\n let nrBoxesThisYear = 0;\r\n let nrBoxesNextYear = 0;\r\n let thisYearsTop = 0;\r\n let maxNrOfBoxes = 0;\r\n let maxBoxHeight = TOP_MARGIN;\r\n\r\n const renderBox = (tl: VehicleHistoryTimelineDTO, index: number) => {\r\n const date = new Date(tl.timestamp! * 1000);\r\n const thisYear = date.getFullYear();\r\n\r\n if (thisYear === lastRenderedYear) {\r\n top += BOX_HEIGHT + BOX_GAP;\r\n } else if (thisYear >= lastRenderedYear + 1 || lastRenderedYear === 1969) {\r\n nrBoxesNextYear = 0;\r\n\r\n if (thisYear !== lastRenderedYear + 1) {\r\n nrBoxesLastYear = 0;\r\n } else {\r\n nrBoxesLastYear = nrBoxesThisYear;\r\n }\r\n\r\n nrBoxesThisYear = 1;\r\n if (nrBoxesThisYear > maxNrOfBoxes) {\r\n maxNrOfBoxes = nrBoxesThisYear;\r\n }\r\n let countBoxesThisYear = true;\r\n let i = 1;\r\n\r\n while (countBoxesThisYear) {\r\n if (thisYear === yearsArr[index + i]) {\r\n nrBoxesThisYear++;\r\n if (nrBoxesThisYear > maxNrOfBoxes) {\r\n maxNrOfBoxes = nrBoxesThisYear;\r\n }\r\n i++;\r\n } else {\r\n countBoxesThisYear = false;\r\n }\r\n }\r\n\r\n i = 1;\r\n let stop = false;\r\n\r\n while (!stop) {\r\n if (thisYear + 1 === yearsArr[index + i]) {\r\n nrBoxesNextYear++;\r\n i++;\r\n } else if (thisYear + 1 > yearsArr[index + i]) {\r\n i++;\r\n } else {\r\n stop = true;\r\n }\r\n }\r\n\r\n if (nrBoxesLastYear > 0) {\r\n if (\r\n nrBoxesThisYear * (BOX_HEIGHT + BOX_GAP) <=\r\n top - BOX_HEIGHT + BOX_GAP\r\n ) {\r\n top = TOP_MARGIN;\r\n } else {\r\n top = top + BOX_HEIGHT + BOX_GAP;\r\n }\r\n } else {\r\n top = TOP_MARGIN;\r\n }\r\n\r\n thisYearsTop = top;\r\n if (thisYearsTop > maxBoxHeight) {\r\n maxBoxHeight = thisYearsTop;\r\n }\r\n } else {\r\n top = TOP_MARGIN;\r\n\r\n nrBoxesLastYear = 0;\r\n }\r\n\r\n lastRenderedYear = thisYear;\r\n const line = renderLine(index, lines[index], thisYearsTop, top);\r\n\r\n console.log('RENDER! 2');\r\n return (\r\n \r\n {line}\r\n \r\n {`${thisYear}-${\r\n date.getMonth() + 1\r\n }-${date.getDate()}`}\r\n {tl.event}\r\n \r\n \r\n );\r\n };\r\n\r\n const renderLine = (\r\n index: number,\r\n percent: number,\r\n top: number,\r\n boxTop: number\r\n ) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n var boxes = timeline.map((tl, index) => renderBox(tl, index));\r\n return (\r\n \r\n {boxes.map((f) => f)}\r\n \r\n );\r\n};\r\n\r\nexport default VehicleHistoryBox;\r\n","import {\r\n VehicleHistoryDTO,\r\n VehicleInformationClient,\r\n} from '../api-clients/index';\r\nimport Loader from '../Loader';\r\nimport VehicleHistoryChart from '../VehicleHistory/VehicleHistoryChart';\r\nimport React, { ReactText, useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport {\r\n calculateFullYearLines,\r\n calculateLines,\r\n calculateTicks,\r\n convertToYearsArr,\r\n} from './utils/utils';\r\nimport VehicleHistoryBox from './VehicleHistoryBox';\r\nimport { H1 } from '../styled';\r\n\r\nconst Container = styled.div`\r\n margin-top: 40px;\r\n width: calc(100% - 35px);\r\n`;\r\n\r\nconst Title = styled(H1)``;\r\n\r\nconst Column = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n //margin-left: 48px;\r\n`;\r\n\r\nexport interface VehicleHistoryContainerProps {\r\n registrationNumber: string;\r\n caseId: number;\r\n}\r\n\r\nconst VehicleHistoryContainer: React.FC = ({\r\n registrationNumber,\r\n caseId,\r\n}) => {\r\n const [vehicleHistory, setVehicleHistory] = useState<\r\n VehicleHistoryDTO | undefined\r\n >(undefined);\r\n const [xTicksArr, setXTicksArr] = useState([]);\r\n const [yTicksArr, setYTicksArr] = useState([]);\r\n const [linesArr, setLinesArr] = useState([]);\r\n const [fullYearLinesArr, setFullYearLinesArr] = useState([]);\r\n const [yearsArr, setYearsArr] = useState([]);\r\n\r\n useEffect(() => {\r\n const apiCall = async (\r\n caseId: number,\r\n reg: string,\r\n controller: AbortController\r\n ) => {\r\n const client = new VehicleInformationClient();\r\n client\r\n .getHistory(caseId, reg, controller.signal)\r\n .then((response) => {\r\n const ticks = calculateTicks(response);\r\n const lines = calculateLines(\r\n Number(ticks.x[ticks.x.length - 1]) - Number(ticks.x[0]),\r\n Number(ticks.x[0]),\r\n response.timeline!\r\n );\r\n const fullYearLines = calculateFullYearLines(\r\n Number(ticks.x[ticks.x.length - 1]) - Number(ticks.x[0]),\r\n Number(ticks.x[0]),\r\n response.timeline!\r\n );\r\n const years = convertToYearsArr(response.timeline!);\r\n\r\n setLinesArr(lines);\r\n setXTicksArr(ticks.x);\r\n setYTicksArr(ticks.y);\r\n setVehicleHistory(response);\r\n setFullYearLinesArr(fullYearLines);\r\n setYearsArr(years);\r\n })\r\n .catch((error) => console.log(error));\r\n };\r\n\r\n let controller: AbortController | undefined = undefined;\r\n\r\n if (registrationNumber && caseId) {\r\n controller = new AbortController();\r\n\r\n apiCall(caseId, registrationNumber, controller);\r\n }\r\n\r\n return () => {\r\n if (controller) {\r\n controller.abort();\r\n }\r\n };\r\n }, [caseId, registrationNumber]);\r\n\r\n return (\r\n \r\n FORDONSHISTORIK\r\n {vehicleHistory && vehicleHistory.timeline && (\r\n \r\n \r\n \r\n \r\n )}\r\n {!vehicleHistory && }\r\n \r\n );\r\n};\r\n\r\nexport default VehicleHistoryContainer;\r\n","import React, { FunctionComponent, useEffect, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport { FontFamily } from '../../utils/styles';\r\n\r\ninterface ModalProps {\r\n showModal: boolean;\r\n}\r\n\r\nconst Modal = styled.div.attrs((props) => ({\r\n id: props.id,\r\n}))`\r\n position: fixed;\r\n display: ${(props) => (props.showModal ? 'flex' : 'none')};\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n outline: 0;\r\n z-index: 1050;\r\n background-color: rgba(0, 0, 0, 0.3);\r\n text-align: center;\r\n box-sizing: border-box;\r\n`;\r\n\r\nconst ModalDialog = styled.div`\r\n position: relative;\r\n display: inline-block;\r\n width: auto;\r\n margin: 30px auto;\r\n box-sizing: inherit;\r\n`;\r\n\r\nconst ModalContent = styled.div`\r\n position: relative;\r\n box-sizing: inherit;\r\n background-color: #fff;\r\n background-clip: padding-box;\r\n outline: 0;\r\n border: 1px solid rgba(0, 0, 0, 0.2);\r\n border-radius: 6px;\r\n box-shadow: 0 0 3px rgb(0 0 0 / 10%);\r\n`;\r\n\r\nconst ModalBody = styled.div`\r\n box-sizing: inherit;\r\n position: relative;\r\n padding: 25px 20px 20px 20px;\r\n`;\r\n\r\nconst ModalFooter = styled.div`\r\n box-sizing: inherit;\r\n padding: 0px 20px 20px;\r\n text-align: right;\r\n`;\r\n\r\nconst FooterCloseButton = styled.button`\r\n box-sizing: inherit;\r\n display: inline-block;\r\n padding: 6px 12px;\r\n margin-bottom: 0px;\r\n font-size: 14px;\r\n font-weight: normal;\r\n text-align: center;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n cursor: pointer;\r\n user-select: none;\r\n border: 1px solid transparent;\r\n border-radius: 4px;\r\n`;\r\n\r\ninterface ModalButton {\r\n /** if left undefined it defaults to closing the modal */\r\n onClick?(): void;\r\n}\r\n\r\ninterface Props {\r\n buttons?: ModalButton[];\r\n className?: string;\r\n showModal: boolean;\r\n closeModal?: () => void;\r\n}\r\n\r\nconst ImageModal: FunctionComponent = ({\r\n children,\r\n className,\r\n showModal,\r\n closeModal,\r\n}) => {\r\n const modalRef = useRef(null);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: any) => {\r\n // TODO: This triggers even if modal is not showing.\r\n if (modalRef.current && !modalRef.current.contains(event.target)) {\r\n if (closeModal) {\r\n closeModal();\r\n } else {\r\n console.log('No closeModal callback registered!');\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => {\r\n // Unbind the event listener on clean up\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n }, [closeModal, modalRef]);\r\n\r\n return (\r\n \r\n \r\n \r\n {children}\r\n \r\n closeModal && closeModal()}\r\n >\r\n Stäng\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ImageModal;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport Loader from '../Loader';\r\nimport ImageModal from '../Modal/ImageModal';\r\n\r\nconst RootContainer = styled.div`\r\n box-sizing: border-box;\r\n`;\r\n\r\nconst CarouselContainer = styled.div`\r\n box-sizing: inherit;\r\n height: 100%;\r\n`;\r\n\r\nconst SpinnerContainer = styled.div`\r\n display: inline-flex;\r\n justify-content: center;\r\n align-content: center;\r\n position: relative;\r\n &.centered {\r\n width: 450px;\r\n height: 470px;\r\n }\r\n &.modal {\r\n height: calc(100vh - 300px);\r\n width: 470px;\r\n }\r\n`;\r\n\r\nconst StyledImg = styled.img`\r\n object-fit: contain;\r\n height: 100%;\r\n cursor: pointer;\r\n box-sizing: inherit;\r\n\r\n &.modal-image {\r\n max-height: calc(100vh - 300px);\r\n }\r\n\r\n &.thumbnail-image {\r\n scroll-snap-align: start;\r\n scroll-snap-stop: always;\r\n }\r\n`;\r\n\r\nconst LargeModalImageContainer = styled.div`\r\n margin-bottom: 20px;\r\n`;\r\n\r\nconst LargeImageContainer = styled(LargeModalImageContainer)`\r\n height: 470px;\r\n box-sizing: inherit;\r\n`;\r\n\r\nconst ThumbContainer = styled.div`\r\n display: flex;\r\n`;\r\n\r\nconst ThumbsWrapper = styled.div`\r\n display: inline-flex;\r\n height: 125px;\r\n width: 100%;\r\n &.modal {\r\n max-width: 600px;\r\n }\r\n scroll-snap-type: x mandatory;\r\n white-space: nowrap;\r\n box-sizing: inherit;\r\n overflow-x: auto;\r\n`;\r\n\r\nconst ThumbnailWrapper = styled.div`\r\n display: flex;\r\n height: inherit;\r\n box-sizing: inherit;\r\n`;\r\n\r\nconst ThumbRow = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n flex: 1;\r\n height: 100px;\r\n box-sizing: inherit;\r\n ${ThumbnailWrapper}:not(:last-child) {\r\n margin-right: 20px;\r\n }\r\n`;\r\n\r\ninterface Props {\r\n ids: number[];\r\n}\r\n\r\nconst ImageCarousel: React.FC = ({ ids }) => {\r\n const [mainIndex, setMainIndex] = useState(0);\r\n const [modalIndex, setModalIndex] = useState(0);\r\n const [showModal, setShowModal] = useState(false);\r\n const [thumbnailsLoaded, setThumbnailsLoaded] = useState(0);\r\n let scrollRef = useRef(null);\r\n\r\n const thumbSrc = (id = '') => `/case/Thumbnail/${id}`;\r\n\r\n // HACK: the thumbnails are loaded twice, the first being for the modal and\r\n // the second time for the row under the main image in the investigation view.\r\n // This second row needs to fully load before we adjust the scrollbar.\r\n useEffect(() => {\r\n if (thumbnailsLoaded === ids.length * 2) {\r\n resetHorizontalScroll();\r\n }\r\n }, [thumbnailsLoaded, ids]);\r\n\r\n const resetHorizontalScroll = () => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollLeft = 0;\r\n }\r\n };\r\n\r\n const syncThumbs = (index: number) => {\r\n setMainIndex(index);\r\n };\r\n\r\n const [thumbnails] = useState(\r\n ids.map((id) => (\r\n {\r\n setThumbnailsLoaded((loaded) => (loaded += 1));\r\n }}\r\n />\r\n ))\r\n );\r\n\r\n return (\r\n \r\n setShowModal(false)}>\r\n \r\n \r\n \r\n \r\n \r\n {thumbnails.map((imageComponent, index) => (\r\n setModalIndex(index)}\r\n >\r\n {imageComponent}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n {\r\n setShowModal((prevState) => !prevState);\r\n setModalIndex(mainIndex);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {thumbnails.map((imageComponent, index) => (\r\n syncThumbs(index)}\r\n >\r\n {imageComponent}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\ntype LazyImageProps = {\r\n className?: string;\r\n spinnerClassName?: string;\r\n centerLoadingSpinner?: boolean;\r\n src: string;\r\n alt: string;\r\n onClick?: () => void;\r\n handleThumbnailLoaded?: () => void;\r\n};\r\n\r\nconst LazyImage = ({\r\n src,\r\n alt,\r\n className,\r\n spinnerClassName,\r\n onClick,\r\n handleThumbnailLoaded,\r\n}: LazyImageProps) => {\r\n const [isLoading, setLoading] = useState(true);\r\n const [imageSrc, setImageSrc] = useState(src);\r\n\r\n const imgRef = useRef(undefined);\r\n const seenImages = useRef([src]);\r\n\r\n function loadImage(imgsrc: string) {\r\n if (imgRef.current) {\r\n imgRef.current.src = imgsrc;\r\n imgRef.current.onload = () => {\r\n setLoading(false);\r\n if (className === 'thumbnail-image') {\r\n handleThumbnailLoaded && handleThumbnailLoaded();\r\n }\r\n };\r\n imgRef.current.onerror = () => {\r\n setLoading(false);\r\n };\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n imgRef.current = new Image();\r\n loadImage(imageSrc);\r\n\r\n return () => {\r\n seenImages.current = [];\r\n if (!imgRef.current) {\r\n return;\r\n } else {\r\n imgRef.current.onload = function () {};\r\n imgRef.current = undefined;\r\n }\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n // NOTE: If the image component should load some other image than the image it was first assigned to\r\n // Also track the ones we have already seen once so that the loading spinner isnt showing for those\r\n // times the image can be instantly loaded from disk/memory cache (preventing spinner flicker)\r\n if (imageSrc !== src) {\r\n if (seenImages.current!.indexOf(src) === -1) {\r\n setLoading(true);\r\n seenImages.current = seenImages.current!.concat(src);\r\n }\r\n setImageSrc(src);\r\n loadImage(src);\r\n }\r\n }, [imageSrc, src]);\r\n\r\n return isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n );\r\n};\r\n\r\nexport default ImageCarousel;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontFamily, FontSize } from '../../utils/styles';\r\nimport LineLoader from '../LineLoader';\r\n\r\nconst Container = styled.div<{\r\n marginTop?: number;\r\n}>`\r\n display: inline-flex;\r\n flex-direction: column;\r\n margin-top: ${(props) => (props.marginTop ? `${props.marginTop}px` : '')};\r\n`;\r\n\r\nconst Row = styled.div<{\r\n setBackground: boolean;\r\n usePointer?: boolean;\r\n}>`\r\n display: inline-flex;\r\n flex-direction: row;\r\n background-color: ${(props) =>\r\n props.setBackground ? Colors.WhiteShade : Colors.Background};\r\n width: calc(100% - 10px);\r\n cursor: ${(props) => (props.usePointer ? 'pointer' : 'initial')};\r\n`;\r\n\r\nconst Col = styled.div<{\r\n width?: number;\r\n flex?: number;\r\n paddingLeft?: number;\r\n paddingRight?: number;\r\n alignRight?: boolean;\r\n}>`\r\n width: ${(props) => (props.width ? `${props.width}px` : '100%')};\r\n flex: ${(props) => (props.flex ? props.flex : '')};\r\n text-align: ${(props) => (props.alignRight ? 'right' : 'left')};\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n padding-top: 8px;\r\n padding-bottom: 4px;\r\n`;\r\n\r\nconst Gap = styled.div`\r\n height: inherit;\r\n width: 20px;\r\n background-color: ${Colors.Background};\r\n color: ${Colors.Background};\r\n padding-top: 8px;\r\n padding-bottom: 4px;\r\n`;\r\n\r\nconst ColRow = styled.div<{\r\n flex: number;\r\n}>`\r\n display: inline-flex;\r\n flex-direction: row;\r\n flex: ${(props) => props.flex};\r\n`;\r\n\r\nconst Title = styled.h5`\r\n font-weight: bold;\r\n font-size: ${FontSize.ZebraTitle};\r\n text-transform: uppercase;\r\n margin-top: 10px;\r\n margin-bottom: 10px;\r\n letter-spacing: 0.5px;\r\n`;\r\n\r\nconst Filler = styled.span`\r\n user-select: none;\r\n color: transparent;\r\n background-color: transparent;\r\n`;\r\n\r\nexport interface ZebraListProps {\r\n marginTop?: number;\r\n startWithWhite?: boolean;\r\n columns?: number;\r\n showListIndex?: boolean;\r\n title: string;\r\n list: ZebraListItem[];\r\n firstColumnWidth?: number;\r\n onClick?: (item: ZebraListItem) => void;\r\n}\r\n\r\nexport interface ZebraListItem {\r\n name: string;\r\n value: React.ReactText | JSX.Element;\r\n flex?: number;\r\n title?: string | JSX.Element;\r\n alignRight?: boolean;\r\n index?: string | number;\r\n}\r\n\r\nconst ZebraList: React.FC = (props) => {\r\n const {\r\n title,\r\n list,\r\n marginTop,\r\n startWithWhite,\r\n columns,\r\n showListIndex,\r\n firstColumnWidth,\r\n onClick,\r\n } = props;\r\n const start = startWithWhite ? 1 : 0;\r\n let subTitleRow: {\r\n title: string | JSX.Element;\r\n flex: number;\r\n alignRight?: boolean;\r\n }[] = [];\r\n if (columns && list[0].title) {\r\n for (let i = 0; i < columns; i++) {\r\n if (list[i].title && list[i].flex) {\r\n subTitleRow.push({\r\n title: list[i].title!,\r\n flex: list[i].flex!,\r\n alignRight: list[i].alignRight,\r\n });\r\n }\r\n }\r\n }\r\n\r\n const createSimpleColumns = (index: number, showListIndex?: boolean) => {\r\n let jsx: JSX.Element[] = [];\r\n const stop = index + columns!;\r\n\r\n for (let i = index; i < stop; i++) {\r\n if (i < list.length) {\r\n if (i === index && firstColumnWidth) {\r\n console.log(list[i].value);\r\n jsx.push(\r\n \r\n {showListIndex && i === index ? (\r\n \r\n {index / columns!}. {list[i].value}\r\n \r\n ) : list[i].value === '' ? (\r\n -\r\n ) : (\r\n list[i].value\r\n )}\r\n \r\n );\r\n } else {\r\n jsx.push(\r\n \r\n
\r\n {showListIndex && i === index ? (\r\n \r\n {index / columns!}. {list[i].value}\r\n \r\n ) : list[i].value === '' ? (\r\n -\r\n ) : (\r\n list[i].value\r\n )}\r\n
\r\n \r\n );\r\n }\r\n }\r\n }\r\n\r\n return jsx;\r\n };\r\n\r\n const createColumns = (index: number) => {\r\n let jsx: JSX.Element[] = [];\r\n\r\n const stop = index + columns!;\r\n let nrFillers = 0;\r\n if (index + columns! + 1 > list.length) {\r\n nrFillers = (index + columns! + 1) % columns!;\r\n }\r\n\r\n for (let i = index; i < stop; i++) {\r\n if (i < list.length) {\r\n if (i === index && firstColumnWidth) {\r\n jsx.push(\r\n \r\n \r\n {list[i].name}\r\n \r\n {list[i].value}\r\n \r\n );\r\n } else {\r\n jsx.push(\r\n \r\n \r\n {list[i].name}\r\n \r\n {list[i].value}\r\n \r\n );\r\n }\r\n }\r\n\r\n if (i < stop - 1) {\r\n jsx.push( );\r\n }\r\n }\r\n\r\n for (let i = nrFillers; i > 0; i--) {\r\n jsx.push();\r\n }\r\n\r\n return jsx;\r\n };\r\n\r\n return (\r\n \r\n {title && {title}}\r\n {subTitleRow.length > 0 && (\r\n \r\n {subTitleRow.map((tr, tIndex) => (\r\n \r\n {tr.title}\r\n \r\n ))}\r\n \r\n )}\r\n {(!columns || columns === 1) &&\r\n !firstColumnWidth &&\r\n list.map((item, index) => (\r\n onClick && onClick(item)}\r\n >\r\n \r\n {item.name}\r\n \r\n {item.value}\r\n \r\n ))}\r\n {(!columns || columns === 1) &&\r\n firstColumnWidth &&\r\n list.map((item, index) => (\r\n onClick && onClick(item)}\r\n >\r\n \r\n {item.name}\r\n \r\n {item.value}\r\n \r\n ))}\r\n {columns &&\r\n subTitleRow.length === 0 &&\r\n columns > 1 &&\r\n list.map((item, index) => {\r\n if ((index + 1) % columns === 1) {\r\n return (\r\n onClick && onClick(item)}\r\n >\r\n {createColumns(index)}\r\n \r\n );\r\n }\r\n return null;\r\n })}\r\n {columns &&\r\n subTitleRow.length > 0 &&\r\n columns > 1 &&\r\n list.map((item, index) => {\r\n if (!item.title) {\r\n if ((index + 1) % columns === 1) {\r\n return (\r\n {\r\n if (!!onClick) {\r\n onClick(item);\r\n }\r\n }}\r\n >\r\n {createSimpleColumns(index, showListIndex)}\r\n \r\n );\r\n }\r\n }\r\n return null;\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default ZebraList;\r\n","export const initialIncidentInfo = {\r\n title: 'Skada',\r\n list: [\r\n { name: 'Skadetyp', value: '' },\r\n { name: 'Hjälptyp', value: '' },\r\n ],\r\n};\r\n\r\nexport const initialCallerContactInformation = {\r\n title: 'Anmälare',\r\n list: [\r\n { name: 'Namn', value: '' },\r\n { name: 'Telefon', value: '' },\r\n ],\r\n};\r\n\r\nexport const initialCarOwnerContactInformation = {\r\n title: 'Bilägare',\r\n list: [\r\n { name: 'Namn', value: '' },\r\n { name: 'Telefon', value: '' },\r\n { name: 'Mobil', value: '' },\r\n ],\r\n};\r\n\r\nexport const initialCarDriverContactInformation = {\r\n title: 'Förare',\r\n list: [\r\n { name: 'Namn', value: '' },\r\n { name: 'Telefon', value: '' },\r\n { name: 'Mobil', value: '' },\r\n ],\r\n};\r\n\r\nexport const initialRepairShopInformation = {\r\n title: 'Verkstadsinformation',\r\n list: [\r\n { name: 'Namn', value: '' },\r\n { name: 'Avlämingsplats', value: '' },\r\n ],\r\n};\r\n\r\nexport const initialAssignmentDurationInformation = {\r\n title: 'Övrigt',\r\n list: [{ name: 'Anlände - Lämnade', value: '' }],\r\n};\r\n\r\nexport const initialCarfaxInformation = {\r\n title: 'Fordon',\r\n list: [\r\n { name: 'Antal ägare', value: '' },\r\n { name: 'Senaste ägarbyte', value: '' },\r\n ],\r\n};\r\n","import React from 'react';\r\nimport { useContext } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Colors } from '../../utils/styles';\r\nimport { ModalStackContext } from '../Modal/useModalStack';\r\n\r\nconst Wrapper = styled.div`\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n left: 0;\r\n bottom: 0;\r\n background: rgba(255, 255, 255, 0.8);\r\n backdrop-filter: blur(10px);\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst TextBox = styled.div`\r\n margin-bottom: 30px;\r\n background: white;\r\n border-radius: 10px;\r\n padding: 60px;\r\n border: 2px solid ${Colors.DividerGrey};\r\n font-size: 20px;\r\n font-weight: bold;\r\n`;\r\n\r\ninterface Props {\r\n popup?: boolean;\r\n}\r\n\r\nconst NoLicense: React.FC = (props) => {\r\n const { popup = false } = props;\r\n const text = (\r\n \r\n Innehållet är tillfälligt avstängt. Vänligen kontakta{' '}\r\n info@waystar.ai för mer information.\r\n \r\n );\r\n\r\n if (popup) {\r\n return {text};\r\n }\r\n\r\n return (\r\n \r\n {text}\r\n \r\n );\r\n};\r\n\r\nexport default NoLicense;\r\n","import React, { FunctionComponent, useEffect, useRef } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { FontFamily } from '../../utils/styles';\r\nimport useModalStack from './useModalStack';\r\n\r\nconst Overlay = styled.div`\r\n position: fixed;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 98;\r\n\r\n height: 100%;\r\n width: 100%;\r\n\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n background-color: rgba(255, 255, 255, 0.7);\r\n`;\r\n\r\nconst TheModal = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n min-width: 400px;\r\n min-height: 200px;\r\n max-width: 95vw;\r\n max-height: 95vh;\r\n overflow: hidden;\r\n z-index: 99;\r\n`;\r\n/* background: ${Color.background.mainBackground};\r\n box-shadow: ${Color.boxShadow.main.down}; */\r\n\r\nconst Title = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n padding: 0 20px;\r\n padding-top: 20px;\r\n font-weight: 600;\r\n`;\r\n/* font-size: ${Size.font.large}; */\r\n/* color: ${Color.foreground.mainBackground}; */\r\n\r\n/* font-size: ${Size.font.small}; */\r\nconst ChildWrap = styled.div<{ noPadding?: boolean }>`\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1;\r\n\r\n ${({ noPadding }) =>\r\n !noPadding\r\n ? css`\r\n padding: 10px 20px;\r\n `\r\n : css`\r\n padding: 0;\r\n `}\r\n`;\r\n\r\nconst ButtonsWrap = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n padding: 20px;\r\n padding-right: 10px;\r\n`;\r\n\r\nconst MyButton = styled.button`\r\n margin-right: 10px;\r\n`;\r\n\r\nexport interface ModalButton {\r\n label: React.ReactChild;\r\n /** if left undefined it defaults to closing the modal */\r\n onClick?(): void;\r\n dontPopAfterClick?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface Props {\r\n buttons?: ModalButton[];\r\n title?: string;\r\n /** prevent padding on child container */\r\n noPadding?: boolean;\r\n className?: string;\r\n closeModal?: () => void;\r\n}\r\n\r\nconst Modal: FunctionComponent = ({\r\n children,\r\n buttons,\r\n title,\r\n noPadding,\r\n className,\r\n closeModal,\r\n}) => {\r\n const modalStack = useModalStack();\r\n const modalRef = useRef(null);\r\n\r\n const handleClickOutside = (event: any) => {\r\n if (modalRef.current && !modalRef.current.contains(event.target)) {\r\n if (closeModal) {\r\n closeModal();\r\n } else {\r\n console.log('No closeModal callback registered!');\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => {\r\n // Unbind the event listener on clean up\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n }, [modalRef]);\r\n\r\n return (\r\n \r\n \r\n {title && {title}}\r\n\r\n \r\n {children}\r\n \r\n\r\n {buttons && (\r\n \r\n {buttons.map((button, index) => (\r\n {\r\n button.onClick && button.onClick();\r\n if (!button.dontPopAfterClick) {\r\n modalStack.pop();\r\n }\r\n }}\r\n disabled={button.disabled}\r\n >\r\n {button.label}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useContext, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport Modal from '.';\r\n\r\ninterface ModalStack {\r\n readonly stack: React.ReactChild[];\r\n push: (child: React.ReactChild) => void;\r\n pop: () => void;\r\n}\r\n\r\nexport const ModalStackContext = React.createContext({\r\n stack: [],\r\n push: () => {},\r\n pop: () => {},\r\n});\r\n\r\nconst Wrapper = styled.div`\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background: rgba(255, 255, 255, 0.7);\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nexport const ModalProvider: React.FunctionComponent = ({ children }) => {\r\n const [stack, setStack] = useState([]);\r\n\r\n const push = (component: React.ReactChild) => {\r\n setStack((stack) => [...stack, component]);\r\n };\r\n\r\n const pop = () => {\r\n setStack((stack) => {\r\n const newStack = [...stack];\r\n newStack.pop();\r\n return newStack;\r\n });\r\n };\r\n\r\n return (\r\n \r\n {stack.length > 0 && stack[stack.length - 1] && (\r\n {stack[0]}\r\n )}\r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst useModalStack = () => {\r\n const context = useContext(ModalStackContext);\r\n return context;\r\n};\r\n\r\nexport default useModalStack;\r\n","import React from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { Colors } from '../../../utils/styles';\r\nimport { CaseDTO } from '../../api-clients';\r\n\r\nconst Wrapper = styled.div`\r\n text-align: center;\r\n margin-bottom: 20px;\r\n max-width: 400px;\r\n`;\r\n\r\nconst Header = styled.div``;\r\n\r\nconst ButtonWrapper = styled.div`\r\n display: flex;\r\n margin-top: 10px;\r\n justify-content: space-between;\r\n`;\r\n\r\nconst Button = styled.div<{ active: boolean }>`\r\n flex: 1;\r\n padding: 4px;\r\n max-width: 29%;\r\n border: 1px solid ${Colors.LightGrey};\r\n cursor: pointer;\r\n border-radius: 3px;\r\n ${(props) =>\r\n props.active &&\r\n css`\r\n background: #e39704;\r\n color: white;\r\n font-weight: bold;\r\n `}\r\n`;\r\n\r\ninterface Props {\r\n updateInvestigationCheck: (checkValue: boolean | undefined) => void;\r\n shellCase: CaseDTO;\r\n}\r\nconst InvestigationCheck: React.FC = ({\r\n updateInvestigationCheck,\r\n shellCase,\r\n}) => {\r\n var buttonList = [\r\n {\r\n title: 'Ja!',\r\n value: true,\r\n },\r\n {\r\n title: 'Inget valt',\r\n value: undefined,\r\n },\r\n { title: 'Nej.', value: false },\r\n ];\r\n return (\r\n \r\n
Är ärendet intressant för utredning?
\r\n \r\n {buttonList.map((f) => (\r\n {\r\n updateInvestigationCheck(f.value);\r\n }}\r\n >\r\n {f.title}\r\n \r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default InvestigationCheck;\r\n","import React, { useContext, useEffect, useRef, useState } from 'react';\r\nimport { BsFlagFill } from 'react-icons/bs';\r\nimport styled from 'styled-components';\r\nimport {\r\n Colors,\r\n FirstColumnWidth,\r\n FontFamily,\r\n Margins,\r\n} from '../../../utils/styles';\r\nimport { GoogleMapsContext } from '../../GoogleMaps/GoogleMapsContext';\r\nimport Map from '../../GoogleMaps/Map';\r\nimport { H1, H2 } from '../../styled';\r\nimport VehicleHistoryContainer from '../../VehicleHistory';\r\nimport {\r\n HIGH_WAYSTARSCORE,\r\n LOW_WAYSTARSCORE,\r\n MED_WAYSTARSCORE,\r\n} from '../types';\r\nimport {\r\n CaseDTO,\r\n CasesClient,\r\n DrivePathPoint,\r\n GetInvestigationDetailsResponse,\r\n} from '../../api-clients';\r\nimport ImageCarousel from '../../Carousel/Carousel';\r\nimport { getReportLocationMarkerSvg } from '../../GoogleMaps/utils/GoogleMapsUtils';\r\nimport TowDriverIcon from '../../../images/towingcar_round.png';\r\nimport { Container, Divider, SubContainer } from '../styles';\r\nimport ZebraList, { ZebraListProps } from '../../ZebraList/ZebraList';\r\nimport {\r\n initialCallerContactInformation,\r\n initialCarOwnerContactInformation,\r\n initialCarDriverContactInformation,\r\n initialRepairShopInformation,\r\n initialIncidentInfo,\r\n initialAssignmentDurationInformation,\r\n initialCarfaxInformation,\r\n} from './emptyData';\r\nimport dayjs from 'dayjs';\r\nimport dayJsUtcModule from 'dayjs/plugin/utc';\r\nimport Loader from '../../Loader';\r\nimport NoLicense from '../../NoLicense';\r\nimport useModalStack from '../../Modal/useModalStack';\r\nimport InvestigationCheck from './InvestigationCheck';\r\ndayjs.extend(dayJsUtcModule);\r\n\r\nconst InvestigationContainer = styled(Container)`\r\n width: calc(100% - ${Margins.ExtraLarge});\r\n`;\r\n\r\nconst MediaSubContainer = styled.div`\r\n display: inline-flex;\r\n flex: 1;\r\n max-width: 60%;\r\n`;\r\n\r\nconst InformationContainer = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n column-gap: ${Margins.Medium};\r\n margin-top: ${Margins.Medium};\r\n width: 100%;\r\n`;\r\n\r\nconst InformationColumn = styled.div`\r\n display: inline-flex;\r\n flex-direction: column;\r\n flex: 1;\r\n width: 50%;\r\n`;\r\n\r\nconst MapContainer = styled(InformationColumn)`\r\n flex: 1 1;\r\n width: 50%;\r\n min-width: 500px;\r\n height: 590px;\r\n`;\r\n\r\nconst ImageContainer = styled(InformationColumn)``;\r\n\r\nconst ImageMapRow = styled(InformationContainer)`\r\n /* flex-wrap: wrap; */\r\n margin: ${Margins.Medium} 0px;\r\n`;\r\n\r\nconst WaystarScoreTitle = styled(H1)`\r\n margin-bottom: ${Margins.Small};\r\n`;\r\n\r\nconst FlagContent = styled.div`\r\n font-size: 18px;\r\n display: inline-block;\r\n margin-left: 5px;\r\n svg {\r\n margin-right: -3px;\r\n }\r\n`;\r\nconst InfoTitle = styled(H2)`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst Text = styled.span<{\r\n bold?: boolean;\r\n link?: boolean;\r\n}>`\r\n font-weight: ${(props) => (props.bold ? 'bold' : 'normal')};\r\n color: ${(props) => (props.link ? Colors.Red : Colors.Black)};\r\n cursor: ${(props) => (props.link ? 'pointer' : '')};\r\n`;\r\n\r\nconst TowDriverComment = styled.div.attrs((props) => ({\r\n className: props.className,\r\n}))`\r\n display: flex;\r\n flex-direction: column;\r\n flex-shrink: 1;\r\n max-width: 400px;\r\n min-height: 98px;\r\n padding: ${Margins.Medium};\r\n text-align: left;\r\n position: relative;\r\n background-color: #ebebeb;\r\n -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */\r\n -moz-box-sizing: border-box; /* Firefox, other Gecko */\r\n box-sizing: border-box; /* Opera/IE 8+ */\r\n margin-bottom: ${Margins.Medium};\r\n\r\n &.speechbubble:before {\r\n content: '';\r\n width: 0px;\r\n height: 0px;\r\n position: absolute;\r\n border-left: ${Margins.Small} solid transparent;\r\n border-right: ${Margins.Small} solid transparent;\r\n border-top: ${Margins.Small} solid #ebebeb;\r\n border-bottom: ${Margins.Small} solid transparent;\r\n left: 10%;\r\n bottom: -${Margins.Medium};\r\n }\r\n`;\r\n\r\nconst TowDriverInformation = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: flex-start;\r\n flex-grow: 1;\r\n column-gap: ${Margins.Medium};\r\n margin-bottom: ${Margins.Medium};\r\n`;\r\n\r\nconst TowDriverImage = styled.img`\r\n width: 100%;\r\n height: auto;\r\n max-width: 100px;\r\n object-fit: cover;\r\n overflow: hidden;\r\n align-self: center;\r\n`;\r\n\r\nconst TowDriverContact = styled.div`\r\n display: inline-flex;\r\n flex-direction: column;\r\n margin-top: 25px;\r\n flex: 1;\r\n margin-bottom: ${Margins.Medium};\r\n`;\r\n\r\nconst FlagRowContainer = styled.div<{ useDivider?: boolean }>`\r\n display: inline-flex;\r\n flex-direction: row;\r\n margin: 15px 0px;\r\n`;\r\n\r\nconst FlagWrapper = styled.div`\r\n display: flex;\r\n padding-top: 2px;\r\n padding-left: 5px;\r\n padding-right: 10px;\r\n`;\r\n\r\nconst Link = styled.a`\r\n color: black;\r\n text-decoration: underline;\r\n cursor: pointer;\r\n`;\r\n\r\nconst FakeLink = styled.span`\r\n color: black;\r\n text-decoration: underline;\r\n cursor: pointer;\r\n`;\r\n\r\ninterface Props {\r\n caseId: number;\r\n shellCase: CaseDTO;\r\n updateInvestigationCheck: (checkValue: boolean | undefined) => void;\r\n}\r\n\r\nconst getAssignmentDuration = (endTime?: Date, startTime?: Date) => {\r\n if (!endTime || !startTime) return '';\r\n\r\n let ended = dayjs(endTime);\r\n let started = dayjs(startTime);\r\n let minutesItTook = ended.diff(started, 'm');\r\n return `${minutesItTook} min`;\r\n};\r\n\r\ntype FlagProps = {\r\n label: string;\r\n useDivider?: boolean;\r\n};\r\n\r\nconst FlagComponent = ({ label, useDivider }: FlagProps) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {label}\r\n \r\n {useDivider && }\r\n \r\n );\r\n};\r\n\r\nconst InvestigationComponent: React.FC = ({\r\n caseId,\r\n shellCase,\r\n updateInvestigationCheck,\r\n}) => {\r\n const { scriptLoaded } = useContext(GoogleMapsContext);\r\n\r\n const [data, setData] = useState(\r\n undefined\r\n );\r\n\r\n const [incidentLocation, setIncidentLocation] = useState<\r\n DrivePathPoint | undefined\r\n >(undefined);\r\n\r\n const waystarScore = useRef(0);\r\n const registrationNumber = useRef('');\r\n const carBrand = useRef('');\r\n const modelYear = useRef('');\r\n const insuranceType = useRef('');\r\n\r\n const carfaxFlags = useRef(undefined);\r\n\r\n const carfaxInformation = useRef(initialCarfaxInformation);\r\n\r\n const incidentInformation = useRef(initialIncidentInfo);\r\n\r\n const callerContactInformation = useRef(\r\n initialCallerContactInformation\r\n );\r\n\r\n const carOwnerContactInformation = useRef(\r\n initialCarOwnerContactInformation\r\n );\r\n\r\n const carDriverContactInformation = useRef(\r\n initialCarDriverContactInformation\r\n );\r\n\r\n const repairShopInformation = useRef(\r\n initialRepairShopInformation\r\n );\r\n\r\n const assignmentDurationInformation = useRef(\r\n initialAssignmentDurationInformation\r\n );\r\n\r\n useEffect(() => {\r\n const getInvestigationDetails = async (controller: AbortController) => {\r\n const client = new CasesClient();\r\n client\r\n .getInvestigationDetails(caseId, controller.signal)\r\n .then((response) => {\r\n processInvestigationDetailsResponse(response);\r\n processIncidentLocation(response);\r\n setData(response);\r\n })\r\n .catch((error) => console.log(error));\r\n };\r\n\r\n const controller = new AbortController();\r\n\r\n getInvestigationDetails(controller);\r\n\r\n return () => controller.abort();\r\n }, [caseId]);\r\n\r\n const processInvestigationDetailsResponse = (\r\n response: GetInvestigationDetailsResponse\r\n ) => {\r\n waystarScore.current = response?.waystarScore ? response.waystarScore : 0;\r\n registrationNumber.current = response.registrationNumber ?? '';\r\n carBrand.current = response.brand ?? '';\r\n modelYear.current = response.vehicleYearModel ?? '';\r\n insuranceType.current = response.insuranceType ?? '';\r\n\r\n callerContactInformation.current.list[0].value =\r\n response.callerContactInfo ?? '';\r\n callerContactInformation.current.list[1].value =\r\n response.callerContactPhone ?? '';\r\n\r\n carOwnerContactInformation.current.list[0].value =\r\n response.ownerContactInfo ?? '';\r\n carOwnerContactInformation.current.list[1].value =\r\n response.ownerContactPhone ?? '';\r\n carOwnerContactInformation.current.list[2].value =\r\n response.ownerContactMobilePhone ?? '';\r\n\r\n incidentInformation.current.list[0].value = response.incidentType ?? '';\r\n incidentInformation.current.list[1].value = response.helpType ?? '';\r\n\r\n repairShopInformation.current.list[0].value =\r\n response.repairShopName ?? 'Ej lämnad på verkstad';\r\n\r\n repairShopInformation.current.list[1].value =\r\n response.actualDropOffLocation ?? '';\r\n\r\n assignmentDurationInformation.current.list[0].value = getAssignmentDuration(\r\n response.assignmentEndedAt,\r\n response.assignmentStartedAt\r\n );\r\n\r\n carfaxFlags.current = response.enabledCarfaxFlags;\r\n\r\n carfaxInformation.current.list[0].value =\r\n response.vehicleLegalOwners?.toString() ?? '';\r\n carfaxInformation.current.list[1].value = response.vehicleLastOwnerChangeDate\r\n ? dayjs(response.vehicleLastOwnerChangeDate).utc().format('YYYY-MM-DD')\r\n : '';\r\n };\r\n\r\n const processIncidentLocation = (\r\n response: GetInvestigationDetailsResponse\r\n ) => {\r\n const location = {\r\n streetAddress: response.streetAddress,\r\n locationTypeId: response.locationTypeId,\r\n locationType: response.locationType,\r\n locationTime: response.locationTime,\r\n latitude: response.latitude,\r\n longitude: response.longitude,\r\n } as DrivePathPoint;\r\n\r\n setIncidentLocation(location);\r\n };\r\n\r\n const modalStack = useModalStack();\r\n\r\n // console.log('SPACE');\r\n return (\r\n \r\n {data === undefined && }\r\n {data && (\r\n <>\r\n \r\n \r\n WayStar Score: {waystarScore.current.toFixed(2)}\r\n \r\n {waystarScore.current > HIGH_WAYSTARSCORE && (\r\n \r\n )}\r\n {waystarScore.current > MED_WAYSTARSCORE && (\r\n \r\n )}\r\n {waystarScore.current > LOW_WAYSTARSCORE && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Regnr: {registrationNumber.current}\r\n \r\n Bilmodell: {carBrand.current} {modelYear.current}\r\n \r\n Försäkring: {insuranceType.current}\r\n \r\n Car.info:{' '}\r\n \r\n Klicka här\r\n \r\n {' '}\r\n \r\n Hitta.se:{' '}\r\n \r\n Klicka här\r\n \r\n \r\n \r\n Alla bolag:{' '}\r\n \r\n Klicka här\r\n \r\n \r\n {false && (\r\n \r\n Carfax rapport:{' '}\r\n \r\n Klicka här\r\n \r\n \r\n )}\r\n \r\n Annonshistorik:{' '}\r\n {\r\n modalStack.push();\r\n }}\r\n >\r\n Klicka Här\r\n \r\n {false && (\r\n \r\n Klicka här\r\n \r\n )}\r\n \r\n {/* Mer uppgifter om fordonet */}\r\n \r\n {carfaxFlags.current?.map((flag, index) => {\r\n let useDivider: boolean = false;\r\n if (\r\n carfaxFlags.current &&\r\n index !== carfaxFlags.current.length - 1\r\n ) {\r\n useDivider = true;\r\n }\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n {(data?.customIncidentTypeDescription ||\r\n data?.customHelpTypeDescription) && (\r\n \r\n <>\r\n {!!data?.customIncidentTypeDescription && (\r\n {data?.customIncidentTypeDescription}\r\n )}\r\n {!!data?.customHelpTypeDescription && (\r\n {data?.customHelpTypeDescription}\r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {data?.towDriverName}\r\n {data?.towDriverPhone}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {incidentLocation !== undefined &&\r\n incidentLocation.latitude != null &&\r\n incidentLocation.longitude != null && (\r\n \r\n {scriptLoaded && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n {data?.imageIds !== undefined && data?.imageIds.length > 0 && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Kontaktuppgifter\r\n \r\n \r\n Olycka\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {false && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default InvestigationComponent;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { FirstColumnWidth, Margins } from '../../../utils/styles';\r\nimport {\r\n CasesClient,\r\n DrivePathPoint,\r\n GetProcessingDetailsResponse,\r\n IncidentLocationResponse,\r\n LocationType,\r\n} from '../../api-clients';\r\nimport Map from '../../GoogleMaps/Map';\r\nimport ZebraList, {\r\n ZebraListItem,\r\n ZebraListProps,\r\n} from '../../ZebraList/ZebraList';\r\nimport {\r\n emptyZebraListItem,\r\n initialDrivenPaths,\r\n initialDrivePaths,\r\n initialPrice,\r\n initialPriceBaseValues,\r\n} from './emptyData';\r\nimport {\r\n getReportLocationMarker,\r\n InfoWindowContent,\r\n} from '../../GoogleMaps/utils/GoogleMapsUtils';\r\nimport { Container, Divider, SubContainer } from '../styles';\r\nimport { H1 } from '../../styled';\r\nimport { useGoogleMapsApi } from '../../GoogleMaps/GoogleMapsApiContext';\r\nimport dayjs from 'dayjs';\r\nimport Loader from '../../Loader';\r\n\r\ninterface Props {\r\n caseId: number;\r\n}\r\n\r\ninterface GetStreetAddressRequest {\r\n id: number;\r\n latitude: number;\r\n longitude: number;\r\n drivePathIndex: number;\r\n doGeocode: boolean;\r\n streetAddress?: string;\r\n city?: string;\r\n}\r\n\r\nconst ProcessingContainer = styled(Container)`\r\n padding-bottom: 60px;\r\n`;\r\n\r\nconst MapContainer = styled.div`\r\n width: calc(100% - ${Margins.ExtraLarge});\r\n height: 60vh;\r\n margin-top: ${Margins.Large};\r\n`;\r\n\r\nconst Title = styled(H1)`\r\n margin-top: ${Margins.Double};\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst ListDivider = styled(Divider)`\r\n width: 60%;\r\n min-width: 550px;\r\n`;\r\n\r\nconst ProcessingComponent: React.FC = ({ caseId }) => {\r\n const { scriptLoaded } = useGoogleMapsApi();\r\n const drivePaths = useRef(initialDrivePaths());\r\n const priceBaseValues = useRef(initialPriceBaseValues());\r\n const drivenPaths = useRef(initialDrivenPaths());\r\n const price = useRef(initialPrice());\r\n const numResponseDrivePaths = useRef(0);\r\n\r\n var markerClickFunc = (id: string) => {};\r\n\r\n const [incidentLocation, setIncidentLocation] = useState<\r\n IncidentLocationResponse | undefined\r\n >(undefined);\r\n\r\n const [pointsOfInterest, setPointsOfInterest] = useState<\r\n DrivePathPoint[] | undefined\r\n >(undefined);\r\n\r\n const [fetchAddresses, setFetchAddresses] = useState<\r\n GetStreetAddressRequest[]\r\n >([]);\r\n\r\n useEffect(() => {\r\n const getDrivePathAddress = async (controller: AbortController) => {\r\n const client = new CasesClient();\r\n client\r\n .getStreetAddress(\r\n fetchAddresses[0].id,\r\n fetchAddresses[0].latitude,\r\n fetchAddresses[0].longitude,\r\n fetchAddresses[0].doGeocode,\r\n fetchAddresses[0].streetAddress,\r\n fetchAddresses[0].city,\r\n controller.signal\r\n )\r\n .then((response) => {\r\n if (response && response.streetAddress) {\r\n let dpProps = drivePaths.current;\r\n\r\n var newFetchArr = fetchAddresses.map((item) => {\r\n if (\r\n item.latitude === fetchAddresses[0].latitude &&\r\n item.longitude === fetchAddresses[0].longitude\r\n ) {\r\n let newItem = item;\r\n newItem.doGeocode = false;\r\n newItem.streetAddress = response.streetAddress;\r\n newItem.city = response.city;\r\n dpProps.list[item.drivePathIndex].name = '';\r\n dpProps.list[\r\n item.drivePathIndex\r\n ].value = response.streetAddress!;\r\n\r\n return null;\r\n }\r\n\r\n return item;\r\n });\r\n\r\n drivePaths.current = dpProps;\r\n setFetchAddresses(\r\n newFetchArr.reduce(\r\n (acc, curr: GetStreetAddressRequest | null) => {\r\n if (curr == null) {\r\n return acc;\r\n }\r\n return [...acc, curr];\r\n },\r\n [] as GetStreetAddressRequest[]\r\n )\r\n );\r\n }\r\n })\r\n .catch((error) => console.log(error));\r\n };\r\n\r\n const controller = new AbortController();\r\n console.log(fetchAddresses);\r\n\r\n if (fetchAddresses.length > 0) {\r\n getDrivePathAddress(controller);\r\n }\r\n\r\n return () => controller.abort();\r\n }, [fetchAddresses]);\r\n\r\n useEffect(() => {\r\n const getProcessingDetails = async (controller: AbortController) => {\r\n const client = new CasesClient();\r\n client\r\n .getProcessingDetails(caseId, controller.signal)\r\n .then((response) => {\r\n processProcessingDetailsResponse(response);\r\n processIncidentLocation(response.incidentLocation);\r\n processReportLocations(response.drivePath);\r\n })\r\n .catch((error) => console.log(error));\r\n };\r\n\r\n const controller = new AbortController();\r\n\r\n getProcessingDetails(controller);\r\n\r\n return () => {\r\n controller.abort();\r\n drivePaths.current = initialDrivePaths();\r\n priceBaseValues.current = initialPriceBaseValues();\r\n drivenPaths.current = initialDrivenPaths();\r\n price.current = initialPrice();\r\n setIncidentLocation(undefined);\r\n setPointsOfInterest(undefined);\r\n setFetchAddresses([]);\r\n };\r\n }, [caseId]);\r\n\r\n const processProcessingDetailsResponse = (\r\n response: GetProcessingDetailsResponse\r\n ) => {\r\n drivePaths.current.list = drivePaths.current.list.splice(0, 3);\r\n numResponseDrivePaths.current = response.drivePath\r\n ? response.drivePath.length\r\n : 0;\r\n\r\n // Sort in place the drivePaths by date ascending\r\n response.drivePath?.sort(function (a, b) {\r\n if (a.locationTime! > b.locationTime!) return 1;\r\n if (a.locationTime! < b.locationTime!) return -1;\r\n return 0;\r\n });\r\n\r\n let fetchArr: GetStreetAddressRequest[] = [];\r\n\r\n response.drivePath?.map((dp, index) => {\r\n let addLoader = false;\r\n if (\r\n (!dp.streetAddress && dp.latitude && dp.longitude) ||\r\n (dp.streetAddress === 'Saknas' && dp.latitude && dp.longitude)\r\n ) {\r\n addLoader = true;\r\n fetchArr.push({\r\n id: dp.id!,\r\n latitude: dp.latitude,\r\n longitude: dp.longitude,\r\n drivePathIndex: (index + 1) * 3,\r\n doGeocode: true,\r\n });\r\n }\r\n\r\n const streetAddress = dp.streetAddress ?? '';\r\n\r\n if (addLoader) {\r\n drivePaths.current.list.push({\r\n name: 'LOADER',\r\n value: (\r\n \r\n {dp.latitude}, {dp.longitude}\r\n \r\n ),\r\n flex: drivePaths.current.list[0].flex,\r\n index: dp.reportLocationId,\r\n });\r\n } else {\r\n drivePaths.current.list.push({\r\n name: '',\r\n value: streetAddress,\r\n flex: drivePaths.current.list[0].flex,\r\n index: dp.reportLocationId,\r\n });\r\n }\r\n\r\n drivePaths.current.list.push({\r\n name: '',\r\n value: dp.locationType ?? '',\r\n flex: drivePaths.current.list[1].flex,\r\n index: dp.reportLocationId,\r\n });\r\n drivePaths.current.list.push({\r\n name: '',\r\n value: `${dayjs(dp.locationTime).format('YYYY-MM-DD HH:mm:ss')}`,\r\n flex: drivePaths.current.list[2].flex,\r\n alignRight: true,\r\n index: dp.reportLocationId,\r\n });\r\n });\r\n\r\n if (response.invoices)\r\n price.current = {\r\n title: 'Pris',\r\n columns: 5,\r\n list: [\r\n { name: '', value: '', flex: 4, title: Specifikation },\r\n { name: '', value: '', flex: 1, title: Antal },\r\n { name: '', value: '', flex: 2, title: Enhet },\r\n {\r\n name: '',\r\n value: '',\r\n flex: 2,\r\n title: a-pris,\r\n alignRight: true,\r\n },\r\n {\r\n name: '',\r\n value: '',\r\n flex: 2,\r\n title: Summa,\r\n alignRight: true,\r\n },\r\n ],\r\n } as ZebraListProps;\r\n\r\n let sum = 0;\r\n response.invoices?.forEach((invoice, invoiceIndex) => {\r\n invoice.invoiceLines?.forEach((line) => {\r\n price.current.list.push({\r\n name: '',\r\n value: line.axItemName ?? '',\r\n flex: 4,\r\n });\r\n price.current.list.push({ name: '', value: line.qty ?? '', flex: 1 });\r\n price.current.list.push({\r\n name: '',\r\n value: line.salesUnit ?? '',\r\n flex: 2,\r\n });\r\n price.current.list.push({\r\n name: '',\r\n value: line.price ? line.price.toFixed(2) : '',\r\n flex: 2,\r\n alignRight: true,\r\n });\r\n price.current.list.push({\r\n name: '',\r\n value: line.lineAmount ? line.lineAmount.toFixed(2) : '',\r\n flex: 2,\r\n alignRight: true,\r\n });\r\n var _price: number = line.price\r\n ? parseFloat(line.price!.toFixed(2))\r\n : 0;\r\n sum = sum + _price;\r\n });\r\n\r\n const emptyPriceLine = emptyZebraListItem(5, [4, 1, 2, 2, 2]);\r\n price.current.list = [...price.current.list, ...emptyPriceLine];\r\n\r\n price.current.list.push({ name: '', value: Summa, flex: 4 });\r\n price.current.list.push({ name: '', value: '' });\r\n price.current.list.push({ name: '', value: '', flex: 2 });\r\n price.current.list.push({ name: '', value: '', flex: 2 });\r\n price.current.list.push({\r\n name: '',\r\n value: sum.toFixed(2),\r\n flex: 2,\r\n alignRight: true,\r\n });\r\n price.current.list.push({ name: '', value: Moms, flex: 4 });\r\n price.current.list.push({ name: '', value: '' });\r\n price.current.list.push({ name: '', value: '', flex: 2 });\r\n price.current.list.push({ name: '', value: '', flex: 2 });\r\n price.current.list.push({\r\n name: '',\r\n value: invoice.taxAmount ? invoice.taxAmount.toFixed(2) : '',\r\n flex: 2,\r\n alignRight: true,\r\n });\r\n\r\n price.current.list.push({ name: '', value: Total, flex: 4 });\r\n price.current.list.push({ name: '', value: '', flex: 1 });\r\n price.current.list.push({ name: '', value: '', flex: 2 });\r\n price.current.list.push({ name: '', value: '', flex: 2 });\r\n price.current.list.push({\r\n name: '',\r\n value: invoice.invoiceAmount ? invoice.invoiceAmount.toFixed(2) : '',\r\n flex: 2,\r\n alignRight: true,\r\n });\r\n\r\n if (\r\n response.invoices &&\r\n response.invoices?.length > 1 &&\r\n invoiceIndex + 1 !== response.invoices.length\r\n ) {\r\n price.current.list = [\r\n ...price.current.list,\r\n ...emptyPriceLine,\r\n ...emptyPriceLine,\r\n ...emptyPriceLine,\r\n ];\r\n }\r\n });\r\n\r\n setFetchAddresses(fetchArr);\r\n };\r\n\r\n const processIncidentLocation = (\r\n incidentLocation: IncidentLocationResponse | undefined\r\n ) => {\r\n if (incidentLocation !== undefined) {\r\n setIncidentLocation(incidentLocation);\r\n }\r\n };\r\n\r\n const processReportLocations = (\r\n reportLocations: DrivePathPoint[] | undefined\r\n ) => {\r\n if (reportLocations) {\r\n const pointsOfInterestToSkip = [\r\n LocationType.ResumingAssignment,\r\n LocationType.PausingAssignment,\r\n LocationType.Returning,\r\n ];\r\n\r\n // Take out report locations we arent interested in creating markers for.\r\n let validPointsOfInterest = reportLocations?.filter(\r\n (f) => !pointsOfInterestToSkip.includes(f.locationTypeId!)\r\n );\r\n\r\n // Take only the report locations that have coordinates we can plot.\r\n validPointsOfInterest = validPointsOfInterest.filter(\r\n (f) => f.latitude !== undefined && f.longitude !== undefined\r\n );\r\n\r\n setPointsOfInterest(validPointsOfInterest);\r\n }\r\n };\r\n\r\n var onZebraListClick = (item: ZebraListItem) => {\r\n markerClickFunc(item.index!.toString());\r\n };\r\n\r\n return (\r\n \r\n {incidentLocation === undefined && }\r\n {incidentLocation && (\r\n <>\r\n Körsträcka\r\n \r\n \r\n \r\n {incidentLocation !== undefined &&\r\n !!incidentLocation.latitude &&\r\n !!incidentLocation.longitude &&\r\n incidentLocation.latitude !== 0 &&\r\n incidentLocation.longitude !== 0 &&\r\n pointsOfInterest !== undefined && (\r\n \r\n {scriptLoaded && (\r\n {\r\n if (\r\n !!val.latitude &&\r\n !!val.longitude &&\r\n val.latitude !== 0 &&\r\n val.longitude !== 0\r\n ) {\r\n return sum + 1;\r\n } else {\r\n return sum;\r\n }\r\n }, 0)\r\n }\r\n markers={pointsOfInterest.reduce(\r\n (acc, curr, index) => {\r\n if (\r\n !!curr.latitude &&\r\n !!curr.longitude &&\r\n curr.latitude !== 0 &&\r\n curr.longitude !== 0\r\n ) {\r\n var data = {} as {\r\n info: InfoWindowContent;\r\n marker: google.maps.Marker;\r\n };\r\n data.info = {\r\n title: curr.locationType!,\r\n time: curr.locationTime\r\n ? dayjs(curr.locationTime).format(\r\n 'YYYY-MM-DD HH:mm:ss'\r\n )\r\n : '',\r\n descriptiveTitle: curr.descriptiveTitle ?? null,\r\n descriptiveContent: curr.descriptiveContent ?? null,\r\n } as InfoWindowContent;\r\n\r\n data.marker = new google.maps.Marker({\r\n position: new google.maps.LatLng(\r\n curr.latitude!,\r\n curr.longitude!\r\n ),\r\n zIndex: 0,\r\n optimized: false,\r\n icon: getReportLocationMarker(index + 1),\r\n });\r\n acc[curr.reportLocationId!] = data;\r\n }\r\n return acc;\r\n },\r\n {} as {\r\n [key: string]: {\r\n marker: google.maps.Marker;\r\n info: InfoWindowContent;\r\n };\r\n }\r\n )}\r\n setMarkerClickFunction={(onMarkerClick) => {\r\n markerClickFunc = onMarkerClick;\r\n }}\r\n zoom={11}\r\n />\r\n )}\r\n \r\n )}\r\n Pris\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ProcessingComponent;\r\n","import { ZebraListItem } from '../../ZebraList/ZebraList';\r\n\r\nexport const initialDrivePaths = () => {\r\n return {\r\n title: '',\r\n columns: 3,\r\n showListIndex: true,\r\n list: [\r\n { name: '', value: '', flex: 4, title: 'Adress' },\r\n { name: '', value: '', flex: 2, title: 'Destinationstyp' },\r\n { name: '', value: '', flex: 2, title: 'Ankomsttid', alignRight: true },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialPriceBaseValues = () => {\r\n return {\r\n title: 'Grundvärden',\r\n columns: 2,\r\n list: [\r\n { name: 'Enhetstaxa', value: '', flex: 3 },\r\n { name: \"A'pris extrakörning\", value: '', flex: 2 },\r\n { name: 'Kilometertillägg', value: '', flex: 3 },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialDrivenPaths = () => {\r\n return {\r\n title: 'Körda sträckor',\r\n columns: 2,\r\n list: [\r\n { name: 'Total körsträcka', value: '', flex: 3 },\r\n { name: 'Extrakörning', value: '', flex: 2 },\r\n ],\r\n };\r\n};\r\n\r\nexport const emptyZebraListItem = (\r\n numberOfColumns: number,\r\n flexes: number[]\r\n): ZebraListItem[] => {\r\n const arr: ZebraListItem[] = [];\r\n\r\n for (let i = 0; i < numberOfColumns; i++) {\r\n arr.push({ name: '', value: '', flex: flexes[i] ?? 1 });\r\n }\r\n\r\n return arr;\r\n};\r\n\r\nexport const initialPrice = () => {\r\n return {\r\n title: 'Pris',\r\n columns: 5,\r\n list: [\r\n { name: '', value: '', flex: 4, title: 'Specifikation' },\r\n { name: '', value: '', flex: 1, title: 'Antal' },\r\n { name: '', value: '', flex: 2, title: 'Enhet' },\r\n { name: '', value: '', flex: 2, title: 'a-pris' },\r\n { name: '', value: '', flex: 2, title: 'Summa(kr)', alignRight: true },\r\n { name: '', value: 'Enhetstaxa', flex: 4 },\r\n { name: '', value: '', flex: 1 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2, alignRight: true },\r\n { name: '', value: '', flex: 4 },\r\n { name: '', value: '', flex: 1 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2, alignRight: true },\r\n { name: '', value: 'Delsumma 1', flex: 4 },\r\n { name: '', value: '', flex: 1 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2, alignRight: true },\r\n { name: '', value: 'Moms 25%', flex: 4 },\r\n { name: '', value: '', flex: 1 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2, alignRight: true },\r\n { name: '', value: 'Total', flex: 4 },\r\n { name: '', value: '', flex: 1 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2, alignRight: true },\r\n { name: '', value: '', flex: 4 },\r\n { name: '', value: '', flex: 1 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2, alignRight: true },\r\n { name: '', value: 'Självrisk', flex: 4 },\r\n { name: '', value: '', flex: 1 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2 },\r\n { name: '', value: '', flex: 2, alignRight: true },\r\n ],\r\n };\r\n};\r\n","import dayjs from 'dayjs';\r\nimport {\r\n DrivePathPoint,\r\n GetCustomerVehicleDetailsResponse,\r\n} from '../../api-clients';\r\nimport { ZebraListProps } from '../../ZebraList/ZebraList';\r\nimport { ProcessCustomerVehicleDetailsResponseObject } from './types';\r\n\r\nexport const processCustomerVehicleDetailsResponse = (\r\n response: GetCustomerVehicleDetailsResponse\r\n): ProcessCustomerVehicleDetailsResponseObject => {\r\n let baseInformation = {\r\n title: 'Grundläggande information',\r\n list: [\r\n { name: 'Uppdragsnummer', value: `${response.assignmentId ?? ''}` },\r\n {\r\n name: 'Starttid',\r\n value: `${\r\n dayjs(response.assignmentCreated).format('YYYY-MM-DD HH:mm:ss') ?? ''\r\n }`,\r\n },\r\n { name: 'Källa', value: `${response.caseSource ?? ''}` },\r\n ],\r\n } as ZebraListProps;\r\n\r\n let damageInformation = {\r\n title: 'Skadeinformation',\r\n list: [\r\n { name: 'Skadeorsak', value: `${response.incidentType ?? ''}` },\r\n {\r\n name: 'Skadeorsaksbeskrivning',\r\n value: `${response.incidentDescription ?? ''}`,\r\n },\r\n { name: 'Hjälptyp', value: `${response.helpType ?? ''}` },\r\n {\r\n name: 'Hjälptypsbeskrivning',\r\n value: `${response.helpTypeDescription ?? ''}`,\r\n },\r\n ],\r\n } as ZebraListProps;\r\n\r\n let locationInformation = {\r\n title: '',\r\n list: [\r\n { name: 'Gatuadress', value: `${response.streetAddress ?? ''}` },\r\n { name: 'Ort', value: `${response.city ?? ''}` },\r\n { name: 'Källa', value: `${response.locationType ?? ''}` },\r\n { name: 'Longitud', value: `${response.longitude ?? ''}` },\r\n { name: 'Latitud', value: `${response.latitude ?? ''}` },\r\n { name: 'Skadeplats', value: `${response.locationDescription ?? ''}` },\r\n {\r\n name: 'Person på plats, tel.',\r\n value: `${response.callerContactPhone ?? ''}`,\r\n },\r\n {\r\n name: 'Person på plats, info.',\r\n value: `${response.callerContactInfo ?? ''}`,\r\n },\r\n ],\r\n } as ZebraListProps;\r\n\r\n let transportInformation = {\r\n title: 'Transportinformation',\r\n list: [\r\n {\r\n name: 'Faktisk avlämningsplats',\r\n value: `${response.actualDropOffLocation ?? ''}`,\r\n },\r\n {\r\n name: 'Stad för faktiskt avlämningsplats',\r\n value: `${response.actualDropOffLocationCity ?? ''}`,\r\n },\r\n ],\r\n } as ZebraListProps;\r\n\r\n let registerInformation = {\r\n title: 'Registreringsinformation',\r\n list: [\r\n {\r\n name: 'Första registreringsdatum',\r\n value: response.firstRegistrationDate\r\n ? `${dayjs(response.firstRegistrationDate)\r\n .utc()\r\n .format('YYYY-MM-DD')}`\r\n : '',\r\n },\r\n { name: 'Vägmätarställning', value: `${response.mileage ?? ''}` },\r\n {\r\n name: 'Avläsningsdatum vägmätarställning',\r\n value: response.mileageDate\r\n ? `${dayjs(response.mileageDate).utc().format('YYYY-MM-DD')}`\r\n : '',\r\n },\r\n {\r\n name: 'Sista ägarbyte',\r\n value: response.lastOwnerChangeDate\r\n ? `${dayjs(response.lastOwnerChangeDate).utc().format('YYYY-MM-DD')}`\r\n : '',\r\n },\r\n { name: 'Antal ägarbyten', value: `${response.legalOwners ?? ''}` },\r\n ],\r\n } as ZebraListProps;\r\n\r\n let vehicleInformation = {\r\n title: 'Fordonsinformation',\r\n columns: 2,\r\n list: [\r\n {\r\n name: 'Registreringsnummer',\r\n value: `${response.registrationNumber ?? ''}`,\r\n flex: 3,\r\n },\r\n { name: 'Vikt(kg)', value: `${response.curbWeight ?? ''}`, flex: 2 },\r\n { name: 'Fordonstyp', value: `${response.vehicleType ?? ''}`, flex: 3 },\r\n { name: 'Färg M', value: `${response.color ?? ''}`, flex: 2 },\r\n {\r\n name: 'Fordonsbeskrivning',\r\n value: `${response.customVehicleTypeDescription ?? ''}`,\r\n flex: 3,\r\n },\r\n {\r\n name: 'Chassinummer',\r\n value: `${response.chassisNumber ?? ''}`,\r\n flex: 2,\r\n },\r\n {\r\n name: 'Har släp/last',\r\n value: `${(response.hasCargoOrTrailer ? 'Ja' : 'Nej') ?? ''}`,\r\n flex: 3,\r\n },\r\n {\r\n name: 'Nationalitet',\r\n value: `${response.countryOfOrigin ?? ''}`,\r\n flex: 2,\r\n },\r\n {\r\n name: 'Vikt (kg) släp/last',\r\n value: `${response.cargoOrTrailerWeight ?? ''}`,\r\n flex: 3,\r\n },\r\n {\r\n name: 'Mätarställning',\r\n value: `${response.odometerReading ?? ''}`,\r\n flex: 2,\r\n },\r\n { name: 'Märke', value: `${response.brand ?? ''}`, flex: 3 },\r\n ],\r\n } as ZebraListProps;\r\n\r\n let insuranceInformation = {\r\n title: 'Försäkringsinformation',\r\n list: [\r\n {\r\n name: 'Försäkringsbolag',\r\n value: `${response.insuranceCompany ?? ''}`,\r\n },\r\n {\r\n name: 'Vagnskadegarantibolag',\r\n value: `${response.vehicleDamageInsuranceCompany ?? ''}`,\r\n },\r\n { name: 'Assistanspaket', value: `${response.assistPackage ?? ''}` },\r\n ],\r\n } as ZebraListProps;\r\n\r\n let ownerInformation = {\r\n title: 'Ägarinformation',\r\n list: [\r\n { name: 'Namn', value: `${response.ownerFullName ?? ''}` },\r\n {\r\n name: 'Org-/Personnummer',\r\n value: `${response.orgOrSocialSecurityNumber ?? ''}`,\r\n },\r\n { name: 'Telefonnummer', value: `${response.ownerPhone ?? ''}` },\r\n {\r\n name: 'Mobiltelefonnummer',\r\n value: `${response.ownerMobilePhone ?? ''}`,\r\n },\r\n { name: 'Adress', value: `${response.ownerStreetAddress ?? ''}` },\r\n { name: 'Postnummer', value: `${response.ownerZipCode ?? ''}` },\r\n { name: 'Postort', value: `${response.ownerCity ?? ''}` },\r\n { name: 'Land', value: `${response.ownerCountry ?? ''}` },\r\n ],\r\n };\r\n\r\n return {\r\n baseInformation: baseInformation,\r\n damageInformation: damageInformation,\r\n locationInformation: locationInformation,\r\n transportInformation: transportInformation,\r\n registerInformation: registerInformation,\r\n vehicleInformation: vehicleInformation,\r\n insuranceInformation: insuranceInformation,\r\n ownerInformation: ownerInformation,\r\n };\r\n};\r\n\r\nexport const processIncidentLocation = (\r\n response: GetCustomerVehicleDetailsResponse\r\n): DrivePathPoint => {\r\n return {\r\n streetAddress: response.streetAddress,\r\n locationTypeId: response.locationTypeId,\r\n locationType: response.locationType,\r\n locationTime: response.locationTime,\r\n latitude: response.latitude,\r\n longitude: response.longitude,\r\n } as DrivePathPoint;\r\n};\r\n","import React, { useContext, useEffect, useRef, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport {\r\n FirstColumnWidth,\r\n FontFamily,\r\n FontSize,\r\n Margins,\r\n} from '../../../utils/styles';\r\nimport {\r\n CasesClient,\r\n DrivePathPoint,\r\n GetCustomerVehicleDetailsResponse,\r\n} from '../../api-clients';\r\nimport { GoogleMapsContext } from '../../GoogleMaps/GoogleMapsContext';\r\nimport Map from '../../GoogleMaps/Map';\r\nimport { getReportLocationMarkerSvg } from '../../GoogleMaps/utils/GoogleMapsUtils';\r\nimport { H1 } from '../../styled';\r\nimport ZebraList, { ZebraListProps } from '../../ZebraList/ZebraList';\r\nimport { Container, Divider, SubContainer } from '../styles';\r\nimport {\r\n initialBaseInformation,\r\n initialDamageInformation,\r\n initialInsuranceInformation,\r\n initialLocationInformation,\r\n initialOwnerInformation,\r\n initialRegisterInformation,\r\n initialTransportInformation,\r\n initialVehicleInformation,\r\n} from './emptyData';\r\n\r\nimport dayjs from 'dayjs';\r\nimport dayJsUtcModule from 'dayjs/plugin/utc';\r\nimport Loader from '../../Loader';\r\nimport {\r\n processCustomerVehicleDetailsResponse,\r\n processIncidentLocation,\r\n} from './utils';\r\ndayjs.extend(dayJsUtcModule);\r\n\r\nconst CustomerVehicleContainer = styled(Container)`\r\n padding-bottom: 60px;\r\n`;\r\n\r\nconst Title = styled(H1)`\r\n margin-top: ${Margins.Double};\r\n margin-bottom: ${Margins.Small};\r\n`;\r\n\r\nconst SpaceDivider = styled(Divider)`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst SubTitle = styled.h5`\r\n font-weight: bold;\r\n font-size: ${FontSize.ZebraTitle};\r\n text-transform: uppercase;\r\n margin-top: ${Margins.Double};\r\n margin-bottom: ${Margins.Small};\r\n letter-spacing: 0.5px;\r\n`;\r\n\r\nconst MapContainer = styled.div`\r\n width: calc(100% - ${Margins.Small});\r\n height: 500px;\r\n min-height: 550px;\r\n /* min-width: 550px; */\r\n`;\r\n\r\ninterface Props {\r\n caseId: number;\r\n}\r\n\r\nconst CustomerVehicleComponent: React.FC = ({ caseId }) => {\r\n const { scriptLoaded } = useContext(GoogleMapsContext);\r\n\r\n const [data, setData] = useState<\r\n GetCustomerVehicleDetailsResponse | undefined\r\n >(undefined);\r\n\r\n const baseInformation = useRef(initialBaseInformation());\r\n const damageInformation = useRef(initialDamageInformation());\r\n const locationInformation = useRef(\r\n initialLocationInformation()\r\n );\r\n const transportInformation = useRef(\r\n initialTransportInformation()\r\n );\r\n const registerInformation = useRef(\r\n initialRegisterInformation()\r\n );\r\n const vehicleInformation = useRef(\r\n initialVehicleInformation()\r\n );\r\n const insuranceInformation = useRef(\r\n initialInsuranceInformation()\r\n );\r\n const ownerInformation = useRef(initialOwnerInformation());\r\n\r\n const [incidentLocation, setIncidentLocation] = useState<\r\n DrivePathPoint | undefined\r\n >(undefined);\r\n\r\n useEffect(() => {\r\n const getCustomerVehicleDetails = async (controller: AbortController) => {\r\n const client = new CasesClient();\r\n client\r\n .getCustomerVehicleDetails(caseId, controller.signal)\r\n .then((response) => {\r\n const processResponseObj = processCustomerVehicleDetailsResponse(\r\n response\r\n );\r\n baseInformation.current = processResponseObj.baseInformation;\r\n damageInformation.current = processResponseObj.damageInformation;\r\n locationInformation.current = processResponseObj.locationInformation;\r\n transportInformation.current =\r\n processResponseObj.transportInformation;\r\n registerInformation.current = processResponseObj.registerInformation;\r\n vehicleInformation.current = processResponseObj.vehicleInformation;\r\n insuranceInformation.current =\r\n processResponseObj.insuranceInformation;\r\n ownerInformation.current = processResponseObj.ownerInformation;\r\n setIncidentLocation(processIncidentLocation(response));\r\n setData(response);\r\n })\r\n .catch((error) => console.log(error));\r\n };\r\n\r\n const controller = new AbortController();\r\n\r\n resetData();\r\n getCustomerVehicleDetails(controller);\r\n\r\n return () => controller.abort();\r\n }, [caseId]);\r\n\r\n const resetData = () => {\r\n baseInformation.current = initialBaseInformation();\r\n damageInformation.current = initialDamageInformation();\r\n locationInformation.current = initialLocationInformation();\r\n transportInformation.current = initialTransportInformation();\r\n registerInformation.current = initialRegisterInformation();\r\n vehicleInformation.current = initialVehicleInformation();\r\n insuranceInformation.current = initialInsuranceInformation();\r\n ownerInformation.current = initialOwnerInformation();\r\n };\r\n\r\n return (\r\n \r\n {data === undefined && }\r\n {data && (\r\n <>\r\n \r\n Skada/Plats\r\n \r\n \r\n \r\n {incidentLocation !== undefined &&\r\n incidentLocation.latitude != null &&\r\n incidentLocation.longitude != null && (\r\n <>\r\n Platsinformation\r\n \r\n {scriptLoaded && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n Fordon\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CustomerVehicleComponent;\r\n","export const initialBaseInformation = () => {\r\n return {\r\n title: 'Grundläggande information',\r\n list: [\r\n { name: 'Uppdragsnummer', value: '' },\r\n { name: 'Starttid', value: '' },\r\n { name: 'Källa', value: '' },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialDamageInformation = () => {\r\n return {\r\n title: 'Skadeinformation',\r\n list: [\r\n { name: 'Skadeorsak', value: '' },\r\n { name: 'Skadeorsaksbeskrivning', value: '' },\r\n { name: 'Hjälptyp', value: '' },\r\n { name: 'Hjälptypsbeskrivning', value: '' },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialLocationInformation = () => {\r\n return {\r\n title: '',\r\n list: [\r\n { name: 'Gatuadress', value: '' },\r\n { name: 'Ort', value: '' },\r\n { name: 'Källa', value: '' },\r\n { name: 'Longitud', value: '12,9766081' },\r\n { name: 'Latitud', value: '55,597663' },\r\n { name: 'Skadeplats', value: '' },\r\n { name: 'Person på plats, tel.', value: '' },\r\n { name: 'Person på plats, info.', value: '' },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialTransportInformation = () => {\r\n return {\r\n title: 'Transportinformation',\r\n list: [\r\n { name: 'Faktisk avlämningsplats', value: '' },\r\n { name: 'Stad för faktiskt avlämningsplats', value: '' },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialRegisterInformation = () => {\r\n return {\r\n title: 'Registreringsinformation',\r\n list: [\r\n { name: 'Första registreringsdatum', value: '' },\r\n { name: 'Vägmätarställning', value: '' },\r\n { name: 'Avläsningsdatum vägmätarställning', value: '' },\r\n { name: 'Sista ägarbyte', value: '' },\r\n { name: 'Antal ägarbyten', value: '' },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialVehicleInformation = () => {\r\n return {\r\n title: 'Fordonsinformation',\r\n columns: 2,\r\n list: [\r\n { name: 'Registreringsnummer', value: '', flex: 3 },\r\n { name: 'Vikt(kg)', value: '', flex: 2 },\r\n { name: 'Fordonstyp', value: '', flex: 3 },\r\n { name: 'Färg M', value: '', flex: 2 },\r\n { name: 'Fordonsbeskrivning', value: '', flex: 3 },\r\n { name: 'Chassinummer', value: '', flex: 2 },\r\n { name: 'Har släp/last', value: '', flex: 3 },\r\n { name: 'Nationalitet', value: '', flex: 2 },\r\n { name: 'Vikt (kg) släp/last', value: '', flex: 3 },\r\n { name: 'Mätarställning', value: '', flex: 2 },\r\n { name: 'Märke', value: '', flex: 3 },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialInsuranceInformation = () => {\r\n return {\r\n title: 'Försäkringsinformation',\r\n list: [\r\n { name: 'Försäkringsbolag', value: '' },\r\n { name: 'Vagnskadegarantibolag', value: '' },\r\n { name: 'Assistanspaket', value: '' },\r\n ],\r\n };\r\n};\r\n\r\nexport const initialOwnerInformation = () => {\r\n return {\r\n title: 'Ägarinformation',\r\n list: [\r\n { name: 'Namn', value: '' },\r\n { name: 'Org-/Personnummer', value: '' },\r\n ],\r\n };\r\n};\r\n","export const initialRepairShopInformation = {\r\n title: 'Verkstadsinformation',\r\n list: [\r\n { name: 'Stad', value: '' },\r\n { name: 'Adress', value: '' },\r\n { name: 'Postnummer', value: '' },\r\n ],\r\n};\r\n","import React, { useContext, useEffect, useRef, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { FirstColumnWidth, Margins } from '../../../utils/styles';\r\nimport CaseListComponent from '../CaseListComponent';\r\nimport ZebraList, { ZebraListProps } from '../../ZebraList/ZebraList';\r\nimport { initialRepairShopInformation } from './emptyData';\r\nimport { CasesClient, GetRepairShopDetailsResponse } from '../../api-clients';\r\nimport { CasesContext } from '../CasesContext';\r\nimport { Container, Divider, Spacer, SubContainer } from '../styles';\r\nimport { H1 } from '../../styled';\r\nimport Loader from '../../Loader';\r\nimport CaseFilterComponent from '../CaseFilterComponent';\r\nimport PaginationComponent from '../PaginationComponent';\r\n\r\nconst RepairShopContainer = styled(Container)`\r\n padding-bottom: 60px;\r\n`;\r\n\r\nconst Title = styled(H1)`\r\n margin-top: ${Margins.Double};\r\n margin-bottom: ${Margins.Small};\r\n`;\r\n\r\nconst PreviousVisitsTitle = styled(H1)`\r\n margin-top: ${Margins.Double};\r\n margin-bottom: ${Margins.Medium};\r\n`;\r\nconst SpaceDivider = styled(Divider)`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst CaseListWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n margin-left: -${Margins.Double};\r\n`;\r\n\r\nconst FilterWrapper = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n margin-left: 35px;\r\n margin-bottom: 22px;\r\n`;\r\n\r\ninterface Props {\r\n caseId: number;\r\n}\r\n\r\nconst RepairShopComponent: React.FC = ({ caseId }) => {\r\n const repairShopInformation = useRef(\r\n initialRepairShopInformation\r\n );\r\n\r\n const { loading, setLoading, getCases } = useContext(CasesContext);\r\n\r\n const [data, setData] = useState(\r\n undefined\r\n );\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n\r\n const getRepairShopDetails = async (controller: AbortController) => {\r\n const client = new CasesClient();\r\n client\r\n .getRepairShopDetails(caseId, controller.signal)\r\n .then((response) => {\r\n setData(response);\r\n })\r\n .catch((error) => console.log(error));\r\n };\r\n\r\n const controller = new AbortController();\r\n\r\n getRepairShopDetails(controller);\r\n getCases(caseId);\r\n\r\n return () => {\r\n controller.abort();\r\n setData(undefined);\r\n repairShopInformation.current = initialRepairShopInformation;\r\n };\r\n }, [caseId]);\r\n\r\n useEffect(() => {\r\n processRepairShopDetailsResponse(data);\r\n }, [data]);\r\n\r\n const processRepairShopDetailsResponse = (\r\n response: GetRepairShopDetailsResponse | undefined\r\n ) => {\r\n if (response) {\r\n repairShopInformation.current.list[0].value = response.city ?? '';\r\n repairShopInformation.current.list[1].value =\r\n response.streetAddress ?? '';\r\n repairShopInformation.current.list[2].value = response.zipCode ?? '';\r\n\r\n if (response.phoneNumbers) {\r\n const existsAlready = repairShopInformation.current.list.filter(\r\n (f) => f.name === 'Telefonnummer'\r\n );\r\n if (existsAlready === undefined || existsAlready.length === 0) {\r\n response.phoneNumbers.forEach((phone) => {\r\n repairShopInformation.current.list.push({\r\n name: 'Telefonnummer',\r\n value: phone,\r\n });\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n {data === undefined && }\r\n {data && (\r\n <>\r\n \r\n {!!data?.name ? data?.name : 'Ej lämnad på verkstad'}\r\n \r\n \r\n \r\n\r\n {data.name !== undefined && (\r\n \r\n Tidigare körningar till verkstaden\r\n \r\n )}\r\n {data.name !== undefined && (\r\n \r\n \r\n \r\n \r\n \r\n {!loading && }\r\n {loading && }\r\n \r\n {!loading && }\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default RepairShopComponent;\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Colors, FontFamily, FontSize } from '../../utils/styles';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { H1 } from '../styled';\r\nimport { CaseDetailedActiveTab } from './types';\r\nimport InvestigationComponent from './Investigation/InvestigationComponent';\r\nimport ProcessingComponent from './Processing/ProcessingComponent';\r\nimport CustomerVehicleComponent from './CustomerVehicle/CustomerVehicleComponent';\r\nimport RepairShopComponent from './RepairShop/RepairShopComponent';\r\n// import authService from '../../components/api-authorization/AuthorizeService';\r\nimport {\r\n CaseDTO,\r\n CasesClient,\r\n FlagEnum,\r\n ILogMeRequest,\r\n LogClient,\r\n LogMeRequest,\r\n ToggleUserFlagRequest,\r\n} from '../api-clients';\r\nimport { CasesContext } from './CasesContext';\r\nimport { BasicDataContext, UserRole } from '../../utils/useBasicData';\r\nimport dayjs from 'dayjs';\r\n\r\nconst Container = styled.div`\r\n display: inline-flex;\r\n flex-direction: column;\r\n margin-left: 35px;\r\n padding-top: 40px;\r\n width: calc(100% - 35px);\r\n`;\r\n\r\nconst ButtonContainer = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n height: 30px;\r\n margin: 0;\r\n padding: 0;\r\n width: 60%;\r\n min-width: 550px;\r\n`;\r\n\r\nconst BackLink = styled.button`\r\n font-size: ${FontSize.Medium};\r\n color: ${Colors.Red};\r\n background-color: transparent;\r\n outline: none;\r\n border: none;\r\n width: 60px;\r\n padding: 0;\r\n margin: 0;\r\n margin-bottom: 20px;\r\n margin-top: -8px;\r\n cursor: pointer;\r\n text-align: left;\r\n :focus {\r\n outline: none;\r\n }\r\n`;\r\n\r\nconst Button = styled.button<{\r\n isActive?: boolean;\r\n rightBorder?: boolean;\r\n}>`\r\n outline: none;\r\n border: 1px solid ${Colors.LightGrey};\r\n border-right: ${(props) =>\r\n props.rightBorder ? `1px solid ${Colors.LightGrey}` : 'none'};\r\n font-weight: ${(props) => (props.isActive ? 'bold' : 'normal')};\r\n font-size: ${FontSize.Medium};\r\n background-color: transparent;\r\n padding-top: 3px;\r\n padding-bottom: 3px;\r\n width: 100px;\r\n cursor: ${(props) => (props.isActive ? 'default' : 'pointer')};\r\n :focus {\r\n outline: none;\r\n }\r\n`;\r\n\r\nconst Border = styled.div`\r\n width: calc(100% - 35px);\r\n border-top: 1px solid ${Colors.LightGrey};\r\n margin-top: -1px;\r\n`;\r\n\r\nconst IncidentTitle = styled(H1)`\r\n font-size: 3em;\r\n font-weight: normal;\r\n margin-top: 0;\r\n margin-bottom: 15px;\r\n`;\r\n\r\nconst CaseDetailed: React.FC = () => {\r\n console.log(window.location.pathname);\r\n const param = useParams>();\r\n const [caseId, setCaseId] = useState(Number(param['id']));\r\n const [activeTab, setActiveTab] = useState(\r\n undefined\r\n );\r\n const [init, setInit] = useState(false);\r\n const [shellCase, setShellCase] = useState(null);\r\n const [role, setRole] = useState('');\r\n const history = useHistory();\r\n\r\n const { cases, update } = useContext(CasesContext);\r\n\r\n const { user } = useContext(BasicDataContext);\r\n\r\n useEffect(() => {\r\n if (caseId != Number(param.id)) {\r\n setCaseId(Number(param.id));\r\n }\r\n }, [param]);\r\n\r\n useEffect(() => {\r\n if (shellCase != null) {\r\n const logClient = new LogClient();\r\n const controller = new AbortController();\r\n const _case = shellCase;\r\n\r\n const logRequest = async (action: string) => {\r\n if (_case) {\r\n await logClient.log(\r\n new LogMeRequest({\r\n caseId: caseId,\r\n action: action,\r\n } as ILogMeRequest),\r\n controller.signal\r\n );\r\n }\r\n };\r\n\r\n const removeUnreadFlag = () => {\r\n if (_case) {\r\n const hasFlag = _case.userFlags?.find(\r\n (uf) => uf.flagId === FlagEnum.Unread\r\n );\r\n\r\n if (hasFlag) {\r\n const client = new CasesClient();\r\n client.toggleUserFlag(\r\n new ToggleUserFlagRequest({\r\n flagType: FlagEnum.Unread,\r\n caseId: caseId,\r\n })\r\n );\r\n\r\n update(caseId, FlagEnum.Unread);\r\n }\r\n }\r\n };\r\n\r\n const initializeCaseDetails = async () => {\r\n removeUnreadFlag();\r\n\r\n // if (await authService.isAuthenticated()) {\r\n // const user = await authService.getUser();\r\n if (user) {\r\n if (user.roles!.find((f) => f === UserRole.Investigator)) {\r\n if (!init) {\r\n setActiveTab(CaseDetailedActiveTab.INVESTIGATION);\r\n }\r\n } else {\r\n if (!init) setActiveTab(CaseDetailedActiveTab.PROCESSING);\r\n }\r\n\r\n setRole(user.roles![0]);\r\n\r\n logRequest('Authenticated navigation to case details');\r\n }\r\n };\r\n\r\n // const subscription = authService.subscribe(() => {\r\n // initializeCaseDetails();\r\n // });\r\n\r\n initializeCaseDetails();\r\n setInit(true);\r\n return () => {\r\n // authService.unsubscribe(subscription);\r\n // controller.abort();\r\n };\r\n }\r\n }, [shellCase]);\r\n\r\n useEffect(() => {\r\n if (shellCase == null || shellCase.id !== caseId) {\r\n const _getShellCase = async () => {\r\n const client = new CasesClient();\r\n var response = await client.getShellCases(caseId);\r\n setShellCase(response);\r\n };\r\n\r\n _getShellCase();\r\n }\r\n }, [caseId]);\r\n\r\n const updateInvestigationCheck = async (checkValue: boolean | undefined) => {\r\n const client = new CasesClient();\r\n var resp = await client.updateInvestigationCheck(\r\n caseId,\r\n checkValue == undefined ? 'null' : checkValue.toString()\r\n );\r\n var _shellCase = {\r\n ...shellCase!,\r\n isInvestigationCase: resp == null ? undefined : resp!,\r\n } as CaseDTO;\r\n\r\n setShellCase(_shellCase);\r\n };\r\n\r\n const goBack = () => {\r\n history.push('/');\r\n };\r\n\r\n if (activeTab === undefined) return null;\r\n return (\r\n \r\n \r\n {shellCase &&\r\n `${shellCase.registrationNumber}, ${shellCase.incidentType}, ${dayjs(\r\n shellCase.crashDate!\r\n ).format('YYYY-MM-DD HH:mm:ss')}`}\r\n \r\n goBack()}>« Tillbaka\r\n \r\n {role !== 'CaseWorker' && (\r\n setActiveTab(CaseDetailedActiveTab.INVESTIGATION)\r\n }\r\n >\r\n Utredning\r\n \r\n )}\r\n {/* setActiveTab(CaseDetailedActiveTab.PROCESSING)\r\n }\r\n >\r\n Handläggning\r\n */}\r\n setActiveTab(CaseDetailedActiveTab.CUSTOMER_AND_VEHICLE)\r\n }\r\n >\r\n Kund & fordon{' '}\r\n \r\n setActiveTab(CaseDetailedActiveTab.WORKSHOP_INFO)\r\n }\r\n rightBorder={true}\r\n >\r\n Verkstadsinfo\r\n \r\n \r\n \r\n\r\n {activeTab === CaseDetailedActiveTab.INVESTIGATION &&\r\n role !== 'CaseWorker' && (\r\n \r\n )}\r\n {activeTab === CaseDetailedActiveTab.PROCESSING && (\r\n \r\n )}\r\n {activeTab === CaseDetailedActiveTab.CUSTOMER_AND_VEHICLE && (\r\n \r\n )}\r\n {activeTab === CaseDetailedActiveTab.WORKSHOP_INFO && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CaseDetailed;\r\n","import React from 'react';\r\nimport { useContext } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Colors } from '../../utils/styles';\r\nimport { ModalStackContext } from '../Modal/useModalStack';\r\n\r\nconst Wrapper = styled.div`\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n left: 0;\r\n bottom: 0;\r\n background: rgba(255, 255, 255, 0.8);\r\n backdrop-filter: blur(10px);\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst TextBox = styled.div`\r\n margin-bottom: 30px;\r\n background: white;\r\n border-radius: 10px;\r\n padding: 60px;\r\n border: 2px solid ${Colors.DividerGrey};\r\n font-size: 20px;\r\n font-weight: bold;\r\n`;\r\n\r\ninterface Props {\r\n popup?: boolean;\r\n}\r\n\r\nconst NoLicense: React.FC = (props) => {\r\n const { popup = false } = props;\r\n const text = Kan tyvärr inte hitta innehållet för ärendet!;\r\n\r\n if (popup) {\r\n return {text};\r\n }\r\n\r\n return (\r\n \r\n {text}\r\n \r\n );\r\n};\r\n\r\nexport default NoLicense;\r\n","import React, { useState } from 'react';\r\nimport { useEffect } from 'react';\r\nimport { useParams } from 'react-router';\r\nimport { CarfaxResponse, CasesClient } from '../../api-clients';\r\nimport styled from 'styled-components';\r\nimport Loader from '../../Loader';\r\nimport DoesNotExists from '../../DoesNotExists';\r\nimport './report.css';\r\n\r\ninterface Props {}\r\n\r\nconst FrameReport = styled.embed`\r\n width: 100%;\r\n border: 0;\r\n`;\r\n\r\nconst FrameWrapper = styled.div`\r\n height: 800px;\r\n overflow-y: hidden;\r\n width: 100%;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n padding: 40px 35px 20px;\r\n position: relative;\r\n`;\r\n\r\nconst HtmlWrapper = styled.div`\r\n padding: 20px 0;\r\n background-color: #f2f2f2;\r\n`;\r\nconst CarfaxReport: React.FC = () => {\r\n const param = useParams>();\r\n const [caseId, setCaseId] = useState(Number(param['id']));\r\n const [report, setReport] = useState(undefined);\r\n\r\n useEffect(() => {\r\n fetchReport();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (report?.success) {\r\n setTimeout(() => {\r\n filterReport();\r\n }, 0);\r\n }\r\n }, [report]);\r\n\r\n const fetchReport = async () => {\r\n var client = new CasesClient();\r\n var resp = await client.getCarfaxReport(caseId);\r\n setReport(resp);\r\n };\r\n\r\n if (report === undefined) {\r\n return ;\r\n }\r\n\r\n const filterReport = () => {\r\n var uls = document.getElementsByTagName(\r\n 'ul'\r\n ) as HTMLCollectionOf;\r\n for (var i = 0; i < uls.length; i++) {\r\n var ul = uls[i] as HTMLUListElement;\r\n if (ul.className === 'menu') {\r\n var parent = ul.parentElement;\r\n if (!!parent) {\r\n parent!.innerHTML = '';\r\n }\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n {!report.success && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {report.success && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CarfaxReport;\r\n","import React from 'react';\r\n\r\nconst NotFound: React.FC = () => {\r\n console.log('NOT FOUND');\r\n return null;\r\n};\r\n\r\nexport default NotFound;\r\n","import CaseContainer from './components/Cases';\r\nimport React, { useContext } from 'react';\r\nimport { Route, Switch } from 'react-router';\r\nimport Layout from './components/Layout';\r\nimport IncidentsContainer from './components/IncidentsMap';\r\nimport { ApplicationPaths } from './components/api-authorization/ApiAuthorizationConstants';\r\nimport ApiAuthorizationRoutes from './components/api-authorization/ApiAuthorizationRoutes';\r\nimport CaseDetailed from './components/Cases/CaseDetailed';\r\nimport CarfaxReport from './components/Cases/CarfaxReport';\r\nimport NotFound from './components/NotFound';\r\nimport { BasicDataContext, RouteContent } from './utils/useBasicData';\r\n\r\nconst Routes: React.FC = () => {\r\n const { user, routeContent } = useContext(BasicDataContext);\r\n\r\n console.log(user);\r\n\r\n console.log(routeContent);\r\n\r\n var routes: JSX.Element[] = [];\r\n if (!!routeContent.find((f) => f === RouteContent.ViewContent)) {\r\n routes = [\r\n ...routes,\r\n ,\r\n ,\r\n ,\r\n ,\r\n ];\r\n }\r\n if (!!routeContent.find((f) => f === RouteContent.ApiContent)) {\r\n routes = [\r\n ...routes,\r\n ,\r\n ];\r\n }\r\n\r\n return (\r\n \r\n \r\n {routes}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Routes;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { GlobalFonts } from './fonts/fonts';\r\nimport CasesProvider from './components/Cases/CasesContext';\r\nimport Routes from './Routes';\r\nimport IncidentsMapProvider from './components/IncidentsMap/IncidentsMapContext';\r\nimport GoogleMapsApiProvider from './components/GoogleMaps/GoogleMapsApiContext';\r\nimport GoogleMapsProvider from './components/GoogleMaps/GoogleMapsContext';\r\nimport BasicDataProvider from './utils/useBasicData';\r\nimport { ModalProvider } from './components/Modal/useModalStack';\r\n\r\n// console.log = () => {};\r\n\r\nconst App: React.FC = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement\r\n);\r\n"],"sourceRoot":""}