{"version":3,"file":"static/js/main.03796778.js","mappings":"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+DtB,SAAYC,GACV,uBACA,yBACA,6BACA,mCACD,CALD,CAAYA,KAAAA,GAAe,KAuC3B,SAAYC,GACV,uCACA,mEACA,qCACA,2CACA,mCACD,CAND,CAAYA,KAAAA,GAAa,KA6CzB,SAAYC,GACV,yDACA,qCACA,yEACA,2DACA,+CACA,iEACA,+CACA,6DACA,mCACD,CAVD,CAAYA,KAAAA,GAAe,KAqE3B,SAAYC,GAEV,yCACA,+BACA,+BAEA,+BAEA,qCACA,mCACD,CAVD,CAAYA,KAAAA,GAAc,KAsD1B,SAAYC,GACV,qCACA,6CACA,+CACA,2CACA,mCACD,CAND,CAAYA,KAAAA,GAAe,KA6C3B,SAAYC,GACV,iCACA,iCACA,qEACA,mCACA,iCACA,2BACA,uCACA,mBACA,qCACA,qBACA,0BACA,kDACA,oCACA,kDACA,mCACD,CAhBD,CAAYA,KAAAA,GAAc,KAyG1B,SAAYC,GACV,iCACA,yCACA,2CACA,uCACA,6CACA,mCACD,CAPD,CAAYA,KAAAA,GAAkB,KAmD9B,SAAYC,GACV,mBACA,mBACA,yBACA,qBAEA,uBACA,6BACA,+BACA,uBACA,mCACD,CAXD,CAAYA,KAAAA,GAA0B,KC7iBtC,SAAYC,GACV,+CACA,+DACA,mCACD,CAJD,CAAYA,KAAAA,GAAmB,KAsM/B,SAAYC,GACV,iBACA,mBACA,mCACD,CAJD,CAAYA,KAAAA,GAA0B,KCxMtC,SAAYC,GACV,mBACA,uCACA,uCACA,uCACA,mCACD,CAND,CAAYA,KAAAA,GAAiB,KCA7B,SAAYC,GAEVA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,uDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,2DACA,mCACD,CAPD,CAAYA,KAAAA,GAAgB,KCI5B,SAAYC,GACV,iBAEA,iCACA,yBACA,qBACA,mCACD,CAPD,CAAYA,KAAAA,GAAa,KA8CzB,SAAYC,GACV,2BACA,2BACA,yBACA,6BACA,mCACA,qBACA,qBACA,qBACA,uBACA,2BACA,8BACA,wBACA,oCACA,wBACA,4BACA,gCACA,wCACA,sCACA,8BACA,mCACD,CArBD,CAAY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A,EACrB4yE,UAAU,EACVE,WAAYxjE,GAAiBsK,UAGlBy8D,GAAyB,+BACjC3D,IAAc,CACjB5xE,GAAI,oBACJsP,KAAM,SACN8hD,MAAO,MAAeliD,QACtBykE,eAAgB,GAChB5B,SAAU,CAAC7yE,EAAO2I,KAChB,MAAMiwB,EAAUs8C,GAA0BrC,SACxClqE,EAAQmgB,kBACRngB,GAEIR,EAAWguE,GAA2BtD,SAC1ClqE,EAAQ6gB,mBACR7gB,GAEF,OAAIiwB,IAAYzwB,EACPywB,EACEzwB,IAAaywB,EACfzwB,EACEA,GAAYywB,EACdi5C,GAAK,CAACj5C,EAASzwB,SADjB,CAEP,EAEFyqE,UAAU,IAGC0D,GAAW,+BACnB5D,IAAc,CACjB5xE,GAAI,OACJsP,KAAM,SACNyiE,SAAU,CAAC7yE,GAASikB,OAAMziB,YAAayiB,GAAQziB,EAC/CoxE,UAAU,EACVD,YAAY,EACZG,WAAYxjE,GAAiB0jE,YAGlBuD,GAAoB,CAC/BD,GACAzB,GACAM,GACAC,GACAZ,GACAzB,GACAkB,GACAd,GACAiD,GACAjC,GACAN,GACAC,GACAT,GACAG,GACAC,GACAsB,GACAM,GACAE,GACAC,GACAC,GACAf,GACAE,GACAP,GACAa,GACAX,GACAD,GACAoB,GACAT,GACAU,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAE,IAQWG,GAA+B,CAC1C,CACE7rB,QAAS,mCACThiD,QAAS,CACP0tE,GACAnB,GACAiB,GACAC,GACA3C,GACAE,KAGJ,CACEhpB,QAAS,6BACThiD,QAAS,CACPksE,GACAM,GACAC,GACAZ,KAGJ,CACE7pB,QAAS,gCACThiD,QAAS,CACPoqE,GACAkB,GACAd,GACAgB,KAGJ,CACExpB,QAAS,0BACThiD,QAAS,CACPssE,GACAzB,GACAsC,GACAC,GACAJ,GACAK,GACAJ,GACAK,GACAJ,KAGJ,CACElrB,QAAS,0BACThiD,QAAS,CACPosE,GACA1B,GACAqB,GACAE,GACAP,GACAE,GACAmB,GACApB,GACAe,GACAE,GACAC,GACAC,KAGJ,CACE9q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GACAC,GACAC,GACAC,IAGK,MAAME,GAA2C,CACtD3D,GACA0B,GACAzB,IAGW2D,GAA4C,CACvD9B,GACAkB,GACArB,GACAE,GACAD,IAGWiC,GAAkB9B,GAElB9D,GAAkB,CAC7B8C,GAGAC,GACAE,GACAX,GACAwB,GACAI,GACAG,GACAI,GACAC,GACAC,GACAC,GACAxB,GACA4B,GACAxB,GACA4B,GACAD,GACAhD,GACAD,GAGAP,GACAkD,GACAhD,GACAC,GACAC,GACA0B,GACAzB,GACAU,GACAC,GACAC,GACAC,GAGAZ,GACA6C,GACAC,GACA3C,GACAC,GACAwB,GACAH,GACAE,GACAD,GAGA0B,GACAC,GACAC,GACAC,GACAC,IAaWI,IAV4B7F,GAAgBzpF,QACtDgD,GAAWA,EAAO4iE,aAAexjE,GAAiB0jE,YASM,CACzD,CACEroB,QAAS,6BACThiD,QAAS,CACP4yF,GACAd,GACAI,GACAG,GACAI,GACAC,GACAC,GACArC,KAGJ,CACEtuC,QAAS,mCACThiD,QAAS,CACPmzF,GACAH,GACA5B,GACAgC,GACA5B,GACArB,GACAD,KAGJ,CACEluC,QAAS,0BACThiD,QAAS,CACP6yF,GACAlD,GACAE,GACAE,GACA0B,GACAzB,GACAU,GACAC,GACAC,GACAC,KAGJ,CACE7uC,QAAS,0BACThiD,QAAS,CACP8yF,GACAC,GACA9C,GACAG,GACAC,GACAwB,GACAH,GACAE,GACAD,KAGJ,CACE3vC,QAAS,6BACThiD,QAAS,CAACixF,KAEZ,CACEjvC,QAAS,oCACThiD,QAAS,CACPqzF,GACAC,GACAC,GACAC,GACAC,uBCj5CC,MAAMK,GAA2C,EACtD/hG,YACA2rD,OACAq2C,mBACAlzC,cAEA,MAAM,EAAEhuD,IAAM,UACR45D,EAAQsnC,IAAqBH,GAAgBz7F,GAC7Cy+D,EAAO,gBAAC,KAAU,CAAC7kE,UAAU,2BACnC,OACE,gBAACG,EAAA,EAAO,CAACD,MAAOY,EAAE,gCAAiCquE,UAAU,QAAQxH,OAAK,GACxE,uBACE3nE,WAAW,QACTA,EACA,4CAGF,0BAAQqlD,QAAS,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","sources":["webpack://portal/webpack/runtime/chunk loaded","webpack://portal/webpack/runtime/create fake namespace object","webpack://portal/webpack/runtime/load script","webpack://portal/./src/i18nConstants.ts","webpack://portal/./src/components/CornerFlag.tsx","webpack://portal/./src/components/EnvironmentFlag.tsx","webpack://portal/./src/i18n.ts","webpack://portal/./src/utils/dates.ts","webpack://portal/./src/utils/browser.ts","webpack://portal/./src/utils/routing.ts","webpack://portal/./src/components/auth/CarbonAuth0Provider.tsx","webpack://portal/../../../../protos/golang/generated/ts2/portal/auth.ts","webpack://portal/./src/utils/auth.ts","webpack://portal/./src/state/notifications.ts","webpack://portal/./src/state/idmApi.ts","webpack://portal/./src/state/location.ts","webpack://portal/./src/utils/metrics.ts","webpack://portal/./src/state/measurement.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/db.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/alarms.ts","webpack://portal/../../../../protos/golang/generated/ts2/almanac/almanac.ts","webpack://portal/../../../../protos/golang/generated/ts2/google/protobuf/timestamp.ts","webpack://portal/../../../../protos/golang/generated/ts2/geo/geo.ts","webpack://portal/../../../../protos/golang/generated/ts2/google/protobuf/duration.ts","webpack://portal/../../../../protos/golang/generated/ts2/google/protobuf/empty.ts","webpack://portal/../../../../protos/golang/generated/ts2/rtc/jobs.ts","webpack://portal/../../../../protos/golang/generated/ts2/metrics/metrics.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/spatial.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/configs.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/veselka.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/customers.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/metrics.ts","webpack://portal/../../../../protos/golang/generated/ts2/category_profile/category_profile.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/category_profile.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/farm.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/geo.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/users.ts","webpack://portal/./src/utils/almanac.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/admin.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/hardware.ts","webpack://portal/../../../../protos/golang/generated/ts2/frontend/laser.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/health.ts","webpack://portal/../../../../protos/golang/generated/ts2/veselka/pagination.ts","webpack://portal/../../../../protos/golang/generated/ts2/veselka/label_point.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/messages.ts","webpack://portal/./src/utils/api.ts","webpack://portal/../../../../protos/golang/generated/ts2/frontend/profile_sync.ts","webpack://portal/../../../../protos/golang/generated/ts2/weed_tracking/weed_tracking.ts","webpack://portal/../../../../protos/golang/generated/ts2/core/controls/exterminator/controllers/aimbot/process/aimbot.ts","webpack://portal/../../../../protos/golang/generated/ts2/lib/common/camera/camera.ts","webpack://portal/../../../../protos/golang/generated/ts2/cv/cv.ts","webpack://portal/../../../../protos/golang/generated/ts2/cv/runtime/cv_runtime.ts","webpack://portal/../../../../protos/golang/generated/ts2/recorder/recorder.ts","webpack://portal/../../../../protos/golang/generated/ts2/frontend/weeding_diagnostics.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/jobs.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/reports.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/robots.ts","webpack://portal/../../../../protos/golang/generated/ts2/portal/audit_logs.ts","webpack://portal/../../../../protos/golang/generated/ts2/target_velocity_estimator/target_velocity_estimator.ts","webpack://portal/./src/state/portalApi.ts","webpack://portal/../../../../protos/golang/generated/ts2/rtc/device_location_history.ts","webpack://portal/../../../../protos/golang/generated/ts2/rtc/location_history.ts","webpack://portal/./src/state/rtcLocationApi.ts","webpack://portal/./src/state/s3CacheProxyApi.ts","webpack://portal/./src/state/self.ts","webpack://portal/./src/state/userPreferences.ts","webpack://portal/./src/state/store.ts","webpack://portal/./src/components/auth/WithAuthorizationRequired.tsx","webpack://portal/./src/components/CarbonNotifications.tsx","webpack://portal/./src/components/WithSkeleton.tsx","webpack://portal/./src/components/CarbonCard.tsx","webpack://portal/./src/components/ListManager.tsx","webpack://portal/./src/utils/errors.ts","webpack://portal/./src/utils/hooks/useStable.ts","webpack://portal/./src/utils/hooks/useApiPopups.ts","webpack://portal/./src/views/admin/AdminAlarms.tsx","webpack://portal/./src/components/config/ConfigAuditLog.tsx","webpack://portal/./src/components/config/ConfigCacheRefresh.tsx","webpack://portal/./src/utils/timing.ts","webpack://portal/./src/components/FeedbackDialog.tsx","webpack://portal/./src/components/ErrorBoundary.tsx","webpack://portal/./src/components/config/ConfigTree.tsx","webpack://portal/./src/components/SwitchWithLabel.tsx","webpack://portal/./src/components/config/UnsyncedKeyWarning.tsx","webpack://portal/./src/components/config/Config.tsx","webpack://portal/./src/views/admin/AdminConfigs.tsx","webpack://portal/./src/views/admin/AdminPortal.tsx","webpack://portal/./src/utils/forms.ts","webpack://portal/./src/components/almanac/CategoryThresholds.tsx","webpack://portal/./src/components/ConfirmationDialog.tsx","webpack://portal/./src/components/almanac/FormulaCard.tsx","webpack://portal/./src/components/almanac/AdvancedCategory.tsx","webpack://portal/./src/utils/localStorage.ts","webpack://portal/./src/components/almanac/AdvancedAlmanac.tsx","webpack://portal/./src/components/almanac/TuningControl.tsx","webpack://portal/./src/components/almanac/BasicAlmanacCard.tsx","webpack://portal/./src/components/almanac/BasicAlmanac.tsx","webpack://portal/./src/utils/crops.ts","webpack://portal/./src/components/EditableTypography.tsx","webpack://portal/./src/images/logo_stack.svg","webpack://portal/./src/images/background_map.svg","webpack://portal/./src/components/Page.tsx","webpack://portal/./src/components/Loading.tsx","webpack://portal/./src/components/almanac/Almanac.tsx","webpack://portal/./src/utils/hooks/useBreakpoint.ts","webpack://portal/./src/components/CarbonDataGrid.tsx","webpack://portal/./src/components/almanac/NewAlmanac.tsx","webpack://portal/./src/components/header/SearchField.tsx","webpack://portal/./src/utils/hooks/useFuzzySearch.ts","webpack://portal/./src/components/almanac/AlmanacList.tsx","webpack://portal/./src/utils/categoryCollectionProfile.ts","webpack://portal/./src/components/categoryCollectionProfile/imageOverlays/PointLabelOverlay.tsx","webpack://portal/./src/components/images/processImageResults.ts","webpack://portal/./src/components/categoryCollectionProfile/imageOverlays/RemoveImageOverlay.tsx","webpack://portal/./src/components/images/IconImage.tsx","webpack://portal/./src/components/images/Image.tsx","webpack://portal/./src/utils/images.ts","webpack://portal/./src/components/images/ThumbnailImage.tsx","webpack://portal/./src/components/categoryCollectionProfile/useCategorizedImages.ts","webpack://portal/./src/components/images/useInfiniteScroll.ts","webpack://portal/./src/components/categoryCollectionProfile/CategorizedImages.tsx","webpack://portal/./src/components/categoryCollectionProfile/imageOverlays/CategoryImageOverlay.tsx","webpack://portal/./src/components/images/ImageGrid.tsx","webpack://portal/./src/components/categoryCollectionProfile/LoadMoreImagesButton.tsx","webpack://portal/./src/components/categoryCollectionProfile/ImageCategorizationOptions.tsx","webpack://portal/./src/components/images/ImageSizeSlider.tsx","webpack://portal/./src/components/CarbonDateRangePicker.tsx","webpack://portal/./src/utils/hooks/useShadowValue.ts","webpack://portal/./src/utils/math.ts","webpack://portal/./src/utils/certifiedMetrics.ts","webpack://portal/./src/utils/reports.ts","webpack://portal/./src/components/categoryCollectionProfile/LabelPointFilters.tsx","webpack://portal/./src/components/RadioChips.tsx","webpack://portal/./src/images/logo_icon.svg","webpack://portal/./src/components/categoryCollectionProfile/SetCategoryCollectionProfile.tsx","webpack://portal/./src/components/categoryCollectionProfile/ShowLabelsButton.tsx","webpack://portal/./src/components/categoryCollectionProfile/CategoryCollectionProfile.tsx","webpack://portal/./src/components/categoryCollectionProfile/CategoryCollectionProfileList.tsx","webpack://portal/./src/images/logo_ops_center.svg","webpack://portal/./src/images/icons/confluence.svg","webpack://portal/./src/images/arrow.svg","webpack://portal/./src/utils/hotkeys.ts","webpack://portal/./src/components/Drawer.tsx","webpack://portal/./src/images/icons/farm.svg","webpack://portal/./src/utils/hooks/useFeatureFlag.ts","webpack://portal/./src/images/icons/slayer_side_outlined.svg","webpack://portal/./src/images/icons/jira.svg","webpack://portal/./src/components/header/Header.tsx","webpack://portal/./src/components/ResponsiveSubnav.tsx","webpack://portal/./src/utils/velocityEstimator.ts","webpack://portal/./src/components/velocityEstimator/NewVelocityEstimator.tsx","webpack://portal/./src/components/velocityEstimator/FormulaCard.tsx","webpack://portal/./src/components/velocityEstimator/SmoothingInputSlider.tsx","webpack://portal/./src/components/velocityEstimator/AdvancedFormulaCard.tsx","webpack://portal/./src/components/velocityEstimator/VelocityEstimator.tsx","webpack://portal/./src/components/velocityEstimator/VelocityEstimatorList.tsx","webpack://portal/./src/views/admin/Admin.tsx","webpack://portal/./src/components/auth/Auth0Callback.tsx","webpack://portal/./src/components/map/AccuracyMarker.tsx","webpack://portal/./src/components/measurement/formatters.tsx","webpack://portal/./src/utils/blocks.ts","webpack://portal/./src/utils/geo.ts","webpack://portal/./src/components/map/CenterPivot.tsx","webpack://portal/./src/utils/farm.ts","webpack://portal/./src/utils/map.ts","webpack://portal/./src/components/map/filters/FilterControl.tsx","webpack://portal/./src/components/FacilityTypeIcon.tsx","webpack://portal/./src/images/bud_icon_border.svg","webpack://portal/./src/images/logo_icon_border.svg","webpack://portal/./src/images/rtc_icon_border.svg","webpack://portal/./src/images/slayer_icon_border.svg","webpack://portal/./src/components/RobotTypeIcon.tsx","webpack://portal/./src/components/map/filters/FilterPane.tsx","webpack://portal/./src/utils/spatialMetrics.ts","webpack://portal/./src/components/map/heatmaps/HeatmapControl.tsx","webpack://portal/./src/components/BetaFlag.tsx","webpack://portal/./src/components/measurement/Measurement.tsx","webpack://portal/./src/components/map/heatmaps/HeatmapLegend.tsx","webpack://portal/./src/components/map/heatmaps/HeatmapPane.tsx","webpack://portal/./src/workers/index.ts","webpack://portal/./src/utils/hooks/useMountEffect.ts","webpack://portal/./src/components/map/useMapHistory.tsx","webpack://portal/./src/components/map/draw/MeasureControl.tsx","webpack://portal/./src/utils/hooks/useControlledState.ts","webpack://portal/./src/components/map/useMapBlocks.tsx","webpack://portal/./src/components/map/useMapRobots.tsx","webpack://portal/./src/components/map/Map.tsx","webpack://portal/./src/components/map/useMapFacilities.tsx","webpack://portal/./src/views/autotractor/AutotractorMap.tsx","webpack://portal/./src/views/autotractor/AutotractorOverwatch.tsx","webpack://portal/./src/views/autotractor/Autotractor.tsx","webpack://portal/./src/components/customers/CustomerEditor.tsx","webpack://portal/./src/components/NewCustomer.tsx","webpack://portal/./src/views/customers/CustomerList.tsx","webpack://portal/./src/views/farms/Farm.tsx","webpack://portal/./src/components/customers/CustomerSelector.tsx","webpack://portal/./src/views/farms/FarmList.tsx","webpack://portal/./src/views/farms/Farms.tsx","webpack://portal/./src/components/AlarmTable.tsx","webpack://portal/./src/views/fleet/FleetAlarmList.tsx","webpack://portal/./src/components/LaserTable.tsx","webpack://portal/./src/views/fleet/FleetHardware.tsx","webpack://portal/./src/utils/hooks/useUnmountEffect.ts","webpack://portal/./src/components/CopyToClipboardButton.tsx","webpack://portal/./src/images/icons/model.svg","webpack://portal/./src/components/robots/RobotMachineHealth.tsx","webpack://portal/./src/components/robots/RobotCustomerSelector.tsx","webpack://portal/./src/components/robots/RobotImplementationSelector.tsx","webpack://portal/./src/components/robots/RobotStatus.tsx","webpack://portal/./src/utils/fleetViews.tsx","webpack://portal/./src/utils/hooks/useMemoAsync.ts","webpack://portal/./src/components/robots/RobotSummaryCard.tsx","webpack://portal/./src/views/fleet/FleetRobotCards.tsx","webpack://portal/./src/views/fleet/FleetRobotTable.tsx","webpack://portal/./src/components/FormikEffect.tsx","webpack://portal/./src/components/robots/RobotMultiSelector.tsx","webpack://portal/./src/components/Sortable.tsx","webpack://portal/./src/components/robots/StatusSelector.tsx","webpack://portal/./src/views/fleet/FleetViewEditor.tsx","webpack://portal/./src/views/fleet/FleetRobotList.tsx","webpack://portal/./src/views/robots/useRobotHistory.tsx","webpack://portal/./src/views/fleet/MissionControl.tsx","webpack://portal/./src/utils/hooks/useInterval.ts","webpack://portal/./src/components/robots/NewRobot.tsx","webpack://portal/./src/views/fleet/Fleet.tsx","webpack://portal/./src/utils/hooks/useQuery.ts","webpack://portal/./src/views/GdprConsent.tsx","webpack://portal/./src/views/Knowledge.tsx","webpack://portal/./src/views/Login.tsx","webpack://portal/./src/views/Logout.tsx","webpack://portal/./src/components/CarbonUploadCard.tsx","webpack://portal/./src/views/Offline.tsx","webpack://portal/./src/components/reports/ReportTools.tsx","webpack://portal/./src/components/reports/ReportEditor.tsx","webpack://portal/./src/components/reports/ReportTable.tsx","webpack://portal/./src/components/reports/RunReportDialog.tsx","webpack://portal/./src/components/RequireFeatureFlag.tsx","webpack://portal/./src/views/reports/Report.tsx","webpack://portal/./src/views/reports/ReportInstance.tsx","webpack://portal/./src/views/reports/ReportInstanceList.tsx","webpack://portal/./src/utils/charts.ts","webpack://portal/./src/components/ViewPlaceholder.tsx","webpack://portal/./src/views/reports/ExploreGraph.tsx","webpack://portal/./src/views/reports/ExploreMap.tsx","webpack://portal/./src/views/reports/Explore.tsx","webpack://portal/./src/views/reports/ReportList.tsx","webpack://portal/./src/views/reports/Reports.tsx","webpack://portal/./src/components/EffectfulTextField.tsx","webpack://portal/./src/views/robots/NewRobotField.tsx","webpack://portal/./src/views/robots/RobotAdmin.tsx","webpack://portal/./src/views/robots/RobotAlarmList.tsx","webpack://portal/./src/views/robots/NewRobotAutotractorJob.tsx","webpack://portal/./src/views/robots/RobotAutotractorJobList.tsx","webpack://portal/./src/views/robots/RobotAutotractor.tsx","webpack://portal/./src/images/icons/veselka.svg","webpack://portal/./src/components/CropEditor.tsx","webpack://portal/./src/components/ModelName.tsx","webpack://portal/./src/views/robots/RobotCropList.tsx","webpack://portal/./src/utils/discriminator.ts","webpack://portal/./src/images/icons/material_do_not_disturb.svg","webpack://portal/./src/images/icons/material_point_scan.svg","webpack://portal/./src/components/discriminator/TrustControl.tsx","webpack://portal/./src/components/discriminator/TrustsCard.tsx","webpack://portal/./src/components/discriminator/AdvancedCategory.tsx","webpack://portal/./src/components/discriminator/AdvancedDiscriminator.tsx","webpack://portal/./src/components/discriminator/BasicDiscriminatorCard.tsx","webpack://portal/./src/components/discriminator/BasicDiscriminator.tsx","webpack://portal/./src/components/discriminator/Discriminator.tsx","webpack://portal/./src/components/discriminator/NewDiscriminator.tsx","webpack://portal/./src/views/robots/RobotDiscriminatorList.tsx","webpack://portal/./src/views/robots/RobotFieldList.tsx","webpack://portal/./src/views/robots/RobotComputersList.tsx","webpack://portal/./src/views/robots/RobotLasersList.tsx","webpack://portal/./src/views/robots/RobotVersionHistory.tsx","webpack://portal/./src/views/robots/RobotHardware.tsx","webpack://portal/./src/components/CertifiedMetrics.tsx","webpack://portal/./src/components/JobSummary.tsx","webpack://portal/./src/views/robots/RobotHistory.tsx","webpack://portal/./src/utils/modelinator.ts","webpack://portal/./src/components/modelinator/trusts.ts","webpack://portal/./src/components/modelinator/formatModelinator.ts","webpack://portal/./src/components/modelinator/ExportModelinatorButton.tsx","webpack://portal/./src/components/modelinator/Modelinator.tsx","webpack://portal/./src/views/robots/RobotModelinator.tsx","webpack://portal/./src/components/robots/RobotSelector.tsx","webpack://portal/./src/views/robots/RobotSummary.tsx","webpack://portal/./src/utils/stream.ts","webpack://portal/./src/components/chat/CarbonMessage.tsx","webpack://portal/./src/utils/sleepMs.ts","webpack://portal/./src/utils/waitGroup.ts","webpack://portal/./src/components/chat/Chat.tsx","webpack://portal/./src/components/LabelDivider.tsx","webpack://portal/./src/utils/chats.ts","webpack://portal/./src/components/chat/LegacyChatMessage.tsx","webpack://portal/./src/components/chat/LegacyChat.tsx","webpack://portal/./src/views/robots/RobotSupport.tsx","webpack://portal/./src/views/robots/RobotUploads.tsx","webpack://portal/./src/views/robots/Robot.tsx","webpack://portal/./src/components/users/AccountDescription.tsx","webpack://portal/./src/components/users/DeleteAccount.tsx","webpack://portal/./src/utils/i18n.ts","webpack://portal/./src/views/Settings.tsx","webpack://portal/./src/views/users/User.tsx","webpack://portal/./src/components/InviteUser.tsx","webpack://portal/./src/views/users/UserList.tsx","webpack://portal/./src/components/CarbonRouter.tsx","webpack://portal/./src/components/KeyboardShortcutsDialog.tsx","webpack://portal/./src/components/PendingActivationOverlay.tsx","webpack://portal/./src/App.tsx","webpack://portal/./src/index.tsx","webpack://portal/./src/utils/alarms.ts","webpack://portal/./src/utils/arrays.ts","webpack://portal/./src/utils/configs.ts","webpack://portal/./src/utils/identity.ts","webpack://portal/./src/utils/objects.ts","webpack://portal/./src/utils/robots.ts","webpack://portal/./src/utils/strings.ts","webpack://portal/./src/utils/theme.ts","webpack://portal/./src/utils/units/units.ts","webpack://portal/./src/workers/mapWorker.ts","webpack://portal/../../../../protos/golang/generated/ts2/config/api/config_service.ts","webpack://portal/../../../../protos/golang/generated/ts2/frontend/alarm.ts","webpack://portal/../../../../protos/golang/generated/ts2/frontend/status_bar.ts","webpack://portal/webpack/bootstrap","webpack://portal/webpack/runtime/compat get default export","webpack://portal/webpack/runtime/define property getters","webpack://portal/webpack/runtime/ensure chunk","webpack://portal/webpack/runtime/get javascript chunk filename","webpack://portal/webpack/runtime/get mini-css chunk filename","webpack://portal/webpack/runtime/global","webpack://portal/webpack/runtime/harmony module decorator","webpack://portal/webpack/runtime/hasOwnProperty shorthand","webpack://portal/webpack/runtime/make namespace object","webpack://portal/webpack/runtime/node module decorator","webpack://portal/webpack/runtime/publicPath","webpack://portal/webpack/runtime/jsonp chunk loading","webpack://portal/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"portal:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","export const NAMESPACE = \"translations\";\nexport const DEFAULT_LANG: PortalLanguage = \"en-US\";\nexport const LANGUAGES = [\n \"da-DK\",\n \"de-DE\",\n \"en-US\",\n \"es-ES\",\n \"fr-FR\",\n \"it-IT\",\n \"lt-LT\",\n \"nl-NL\",\n \"pl-PL\",\n \"ro-RO\",\n \"sr-RS\",\n \"uk-UA\",\n] as const;\n\nexport type PortalLanguage = (typeof LANGUAGES)[number];\nexport type LanguageMap = { [K in PortalLanguage]: V };\n\nconst LANGUAGES_SET = new Set(LANGUAGES);\n\nexport const isPortalLanguage = (lang: string): lang is PortalLanguage => {\n return LANGUAGES_SET.has(lang);\n};\n\nexport const portalLanguageOrDefault = (lang: string): PortalLanguage => {\n return isPortalLanguage(lang) ? lang : DEFAULT_LANG;\n};\n\n// We use the browser's Intl.DisplayNames but we want to use simpler names\n// e.g. \"English\" instead of \"American English\" so we translate our specific\n// locales to more general ones\nexport const DISPLAY_LANGUAGES: LanguageMap = {\n \"da-DK\": \"da\",\n \"de-DE\": \"de\",\n \"en-US\": \"en\",\n \"es-ES\": \"es\",\n \"fr-FR\": \"fr\",\n \"it-IT\": \"it\",\n \"lt-LT\": \"lt\",\n \"nl-NL\": \"nl\",\n \"pl-PL\": \"pl\",\n \"ro-RO\": \"ro\",\n \"sr-RS\": \"sr\",\n \"uk-UA\": \"uk\",\n};\n\n// https://github.com/EvanHahn/HumanizeDuration.js?tab=readme-ov-file#supported-languages\n// Humanize Duration has a specific set of languages they support, so this\n// matches up our locales with their list\nexport const HUMANIZE_DURATION_LANGUAGES: LanguageMap = {\n \"da-DK\": \"da\",\n \"de-DE\": \"de\",\n \"en-US\": \"en\",\n \"es-ES\": \"es\",\n \"fr-FR\": \"fr\",\n \"it-IT\": \"it\",\n \"lt-LT\": \"lt\",\n \"nl-NL\": \"nl\",\n \"pl-PL\": \"pl\",\n \"ro-RO\": \"ro\",\n \"sr-RS\": \"sr\",\n \"uk-UA\": \"uk\",\n};\n","import { classes } from \"portal/utils/theme\";\nimport { Tooltip } from \"@mui/material\";\nimport React, { FunctionComponent } from \"react\";\n\n/**\n * Visual flag for upper left corner with optional tooltip message\n */\ninterface Props {\n className?: string;\n label?: string;\n title?: string;\n}\nexport const CornerFlag: FunctionComponent = ({\n className,\n label,\n title,\n}) => (\n \n \n {label}\n \n \n);\n","import { classes } from \"portal/utils/theme\";\nimport { CornerFlag } from \"./CornerFlag\";\nimport { useTranslation } from \"react-i18next\";\nimport React, { FunctionComponent } from \"react\";\n\nexport const isProduction =\n typeof window === \"undefined\"\n ? false\n : window.location.host === \"customer.cloud.carbonrobotics.com\";\nexport const isStaging =\n typeof window === \"undefined\"\n ? false\n : window.location.host === \"customer-stg.cloud.carbonrobotics.com\";\nexport const isTest = typeof jest !== \"undefined\";\nexport const isDevelopment = !isProduction && !isStaging;\n\n/**\n * Visual flag for upper left corner showing what the current environment is\n */\nexport const EnvironmentFlag: FunctionComponent = () => {\n const { t } = useTranslation();\n return (\n {\n if (isStaging) {\n return t(\"components.EnvironmentFlag.beta\");\n }\n if (isDevelopment) {\n return t(\"components.EnvironmentFlag.dev\");\n }\n return \"\";\n })()}\n className={classes(\"pointer-events-none fixed z-[99999] print:hidden\", {\n hidden: isProduction,\n \"bg-red-800\": isStaging,\n \"bg-purple-800\": isDevelopment,\n })}\n />\n );\n};\n","import { DEFAULT_LANG, type LanguageMap, NAMESPACE } from \"./i18nConstants\";\nimport { initReactI18next } from \"react-i18next\";\nimport { isDevelopment, isTest } from \"./components/EnvironmentFlag\";\nimport daDK from \"localization-cloud/translations/da-DK.json\";\nimport deDE from \"localization-cloud/translations/de-DE.json\";\nimport enUS from \"localization-cloud/translations/en-US.json\";\nimport esES from \"localization-cloud/translations/es-ES.json\";\nimport frFR from \"localization-cloud/translations/fr-FR.json\";\nimport i18n, { type ResourceLanguage } from \"i18next\";\nimport itIT from \"localization-cloud/translations/it-IT.json\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport ltLT from \"localization-cloud/translations/lt-LT.json\";\nimport nlNL from \"localization-cloud/translations/nl-NL.json\";\nimport plPL from \"localization-cloud/translations/pl-PL.json\";\nimport roRO from \"localization-cloud/translations/ro-RO.json\";\nimport srRS from \"localization-cloud/translations/sr-RS.json\";\nimport ukUA from \"localization-cloud/translations/uk-UA.json\";\n\n// types to use for getDataByLanguage which doesn't have correct types\nexport interface TranslationRoot {\n translations: Record;\n}\ntype TranslationData = string | { [key: string]: TranslationData };\n\nexport const getFromTranslationData = (\n path: string,\n data: TranslationRoot\n): TranslationData | undefined => {\n const parts = path.split(\".\");\n let current: TranslationData = data.translations;\n for (const part of parts) {\n if (!current || typeof current === \"string\") {\n return;\n }\n const currentPart: TranslationData | undefined = current[part];\n if (!currentPart) {\n return;\n }\n current = currentPart;\n }\n return current;\n};\n\nexport const RESOURCES: LanguageMap = {\n \"da-DK\": { [NAMESPACE]: daDK },\n \"de-DE\": { [NAMESPACE]: deDE },\n \"en-US\": { [NAMESPACE]: enUS },\n \"es-ES\": { [NAMESPACE]: esES },\n \"fr-FR\": { [NAMESPACE]: frFR },\n \"it-IT\": { [NAMESPACE]: itIT },\n \"lt-LT\": { [NAMESPACE]: ltLT },\n \"nl-NL\": { [NAMESPACE]: nlNL },\n \"pl-PL\": { [NAMESPACE]: plPL },\n \"ro-RO\": { [NAMESPACE]: roRO },\n \"sr-RS\": { [NAMESPACE]: srRS },\n \"uk-UA\": { [NAMESPACE]: ukUA },\n};\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n missingKeyHandler: (language, namespace, key, fallbackValue) => {\n throw new Error(`Key not found ${key}, ${language}, ${fallbackValue}`);\n },\n ns: NAMESPACE,\n resources: RESOURCES,\n fallbackLng: DEFAULT_LANG,\n debug: isDevelopment && !isTest,\n returnEmptyString: false,\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n });\n\nexport { default } from \"i18next\";\n","import { DateRange } from \"@mui/x-date-pickers-pro\";\nimport { DateTime } from \"luxon\";\nimport { i18n as I18n, TFunction } from \"i18next\";\n\nexport const DATE_PATH_FORMAT = \"yyyy-MM-dd\";\n\nexport const DEFAULT_TIMEZONE = \"America/Los_Angeles\";\n\n// luxon toLocaleString presets\nexport const DATETIME_EXCEL = \"MM/dd/yyyy hh:mm a\";\nexport const DATETIME_SHORT_WITHOUT_YEAR: Intl.DateTimeFormatOptions = {\n ...DateTime.DATETIME_SHORT,\n year: undefined,\n};\n\nexport const formatDateOffset = (t: TFunction, offset: number): string => {\n if (offset === 0) {\n return t(\"components.DateRangePicker.today\");\n }\n if (offset === 1) {\n return t(\"components.DateRangePicker.tomorrow\");\n }\n if (offset === -1) {\n return t(\"components.DateRangePicker.yesterday\");\n }\n if (offset < -1) {\n return t(\"components.DateRangePicker.minusDays\", {\n days: Math.abs(offset),\n });\n }\n if (offset > 1) {\n return t(\"components.DateRangePicker.plusDays\", { days: offset });\n }\n return t(\"components.DateRangePicker.invalid\");\n};\n\nexport const formatCompactDate = (\n t: TFunction,\n i18n: I18n,\n input?: DateTime | number\n): string => {\n let date: DateTime | undefined;\n if (typeof input === \"number\") {\n date = DateTime.fromMillis(input);\n } else if (input instanceof DateTime) {\n date = input;\n }\n\n if (!date || !date.isValid) {\n return t(\"components.DateRangePicker.invalid\");\n }\n\n const resultSet: string[] = [];\n\n if (!isToday(date)) {\n if (isThisWeek(date)) {\n resultSet.push(\n date.toLocaleString({ weekday: \"long\" }, { locale: i18n.language })\n );\n } else {\n resultSet.push(\n date.toLocaleString(\n { month: \"short\", day: \"numeric\" },\n { locale: i18n.language }\n )\n );\n }\n\n if (!isThisYear(date)) {\n resultSet.push(\n date.toLocaleString({ year: \"numeric\" }, { locale: i18n.language })\n );\n }\n }\n return resultSet.join(\" \");\n};\n\nexport const isToday = (date: DateTime): boolean =>\n isSameDate(date, DateTime.local());\n\nexport const isSameDate = (a: DateTime, b: DateTime): boolean =>\n a.toISODate() === b.toISODate();\n\nexport const isThisWeek = (date: DateTime): boolean =>\n date >\n DateTime.local()\n .minus({ days: 6 })\n .set({ hour: 0, minute: 0, second: 0, millisecond: 0 });\n\nexport const isThisMonth = (date: DateTime): boolean =>\n date >\n DateTime.local().set({\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n });\n\nexport const isThisYear = (date: DateTime): boolean =>\n date.year === DateTime.local().year;\n\nexport const isSameRange = (\n a: DateRange,\n b: DateRange\n): boolean => {\n const [aStart, aEnd] = a;\n const [bStart, bEnd] = b;\n if (!Array.isArray(a) || !Array.isArray(b)) {\n return a === b;\n }\n let startIsSame = false;\n startIsSame = !aStart || !bStart ? aStart === bStart : aStart.equals(bStart);\n let endIsSame = false;\n endIsSame = !aEnd || !bEnd ? aEnd === bEnd : aEnd.equals(bEnd);\n return startIsSame && endIsSame;\n};\n\nexport const roundToMinute = (date: DateTime): DateTime =>\n DateTime.fromMillis(date.toMillis()).set({\n minute: date.second >= 30 ? date.minute + 1 : date.minute,\n second: 0,\n millisecond: 0,\n });\n\nexport const snapToDayStart = (date: DateTime): DateTime =>\n DateTime.fromMillis(date.toMillis()).set({\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n });\n\nexport const snapToDayEnd = (date: DateTime): DateTime =>\n snapToDayStart(date).plus({ days: 1 }).minus({ milliseconds: 1 });\n","import { entries } from \"./objects\";\nimport { isUndefined } from \"./identity\";\nimport { sortBy } from \"./arrays\";\n\nexport const toQuery = (data: Record = {}): string => {\n const parameters = new URLSearchParams();\n const sortedParameters = sortBy(entries(data), 0);\n for (const [key, value] of sortedParameters) {\n if (isUndefined(value)) {\n continue;\n } else if (typeof value === \"boolean\") {\n if (value) {\n parameters.append(key, \"true\");\n }\n } else {\n parameters.append(key, String(value));\n }\n }\n if ([...parameters.keys()].length === 0) {\n return \"\";\n }\n return `${parameters.toString()}`;\n};\n","import { createBrowserHistory } from \"history\";\nimport { DATE_PATH_FORMAT } from \"./dates\";\nimport { DateTime } from \"luxon\";\nimport { ElementType, ReactNode } from \"react\";\nimport { toQuery } from \"./browser\";\n\nexport const history = createBrowserHistory();\n\ninterface Props {\n [index: string]: any;\n}\n\ninterface RenderProps extends Props {\n render: () => ReactNode;\n}\n\ninterface ComponentProps extends Props {\n component: ElementType;\n}\n\nexport type RouteProps = RenderProps | ComponentProps;\n\n// Gets a URL ecoded pathname for the current page\nexport const getSafePath = (): string =>\n encodeURIComponent(window.location.pathname);\n\nexport enum Slug {\n CUSTOMER_ID = \":id\",\n USER_ID = \":id\",\n NEW = \"new\",\n REPORT = \":report\",\n REPORT_INSTANCE = \":instance\",\n SERIAL = \":serial\",\n}\n\nexport enum Path {\n AUTOTRACTOR = \"/autotractor\",\n ACCOUNT = \"/account\",\n ADMIN = \"/admin\",\n BASE = \"/\",\n CALLBACK = \"/callback\",\n CUSTOMERS = \"/customers\",\n FARMS = \"/farms\",\n FLEET = \"/fleet\",\n GDPR_CONSENT = \"/consent\",\n KNOWLEDGE = \"/knowledge\",\n LOGIN = \"/login\",\n LOGOUT = \"/logout\",\n OFFLINE = \"/offline\",\n REPORTS = \"/reports\",\n ROBOTS = `${Path.FLEET}/robots`,\n SETTINGS = \"/settings\",\n USERS = \"/users\",\n}\n\nexport enum RobotSubpath {\n ADMIN = \"/admin\",\n ALARMS = \"/alarms\",\n ALMANAC = \"/almanac\",\n AUTOTRACTOR = \"/autotractor\",\n CATEGORY_COLLECTION_PROFILE = \"/category-collection\",\n CONFIG = \"/config\",\n CROPS = \"/crops\",\n DISCRIMINATOR = \"/discriminator\",\n FIELDS = \"/fields\",\n HARDWARE = \"/hardware\",\n HARDWARE_COMPUTERS = \"/hardware/computers\",\n HARDWARE_VERSIONS = \"/hardware/versions\",\n HARDWARE_LASERS = \"/hardware/lasers\",\n HISTORY = \"/history\",\n SUMMARY = \"/\",\n SUPPORT = \"/support\",\n UPLOADS = \"/uploads\",\n VELOCITY_ESTIMATOR = \"/velocity\",\n}\n\nexport enum AutotractorSubpath {\n JOBS = \"/jobs\",\n}\n\nexport enum FleetSubpath {\n ALARMS = \"/alarms\",\n HARDWARE = \"/hardware\",\n ROBOTS = \"/robots\",\n MISSION_CONTROL = \"/mission-control\",\n}\n\nexport enum ReportSubpath {\n SCHEDULED = \"/scheduled\",\n EXPLORE = \"/explore\",\n}\n\nexport enum AdminSubpath {\n ALARMS = \"/alarms\",\n ALMANAC = \"/almanac\",\n CATEGORY_COLLECTION_PROFILE = \"/category-collection\",\n CONFIG = \"/config\",\n DISCRIMINATOR = \"/discriminator\",\n PORTAL = \"/portal\",\n VELOCITY_ESTIMATOR = \"/velocity\",\n}\n\nexport const getCustomerPath = (id: string = Slug.CUSTOMER_ID): string =>\n `${Path.CUSTOMERS}/${id}`;\n\nexport const getReportPath = (slug: string = Slug.REPORT): string =>\n `${Path.REPORTS}${ReportSubpath.SCHEDULED}/${slug}`;\n\nexport const getCropPath = (serial: string, cropId: string): string =>\n `${getRobotPath(serial, RobotSubpath.CROPS)}/${cropId}`;\n\nexport const getModelinatorPath = (\n serial: string,\n cropId: string,\n modelId: string\n): string => `${getCropPath(serial, cropId)}/${modelId}`;\n\nexport const getAlmanacPath = (serial: string, uuid: string): string =>\n `${getRobotPath(serial, RobotSubpath.ALMANAC)}/${uuid}`;\n\nexport const getDiscriminatorPath = (serial: string, uuid: string): string =>\n `${getRobotPath(serial, RobotSubpath.DISCRIMINATOR)}/${uuid}`;\n\nexport const getReportInstancesPath = (slug: string = Slug.REPORT): string =>\n `${Path.REPORTS}${ReportSubpath.SCHEDULED}/${slug}/runs`;\n\nexport const getReportInstancePath = (\n reportSlug: string = Slug.REPORT,\n instanceSlug: string = Slug.REPORT_INSTANCE\n): string =>\n `${Path.REPORTS}${ReportSubpath.SCHEDULED}/${reportSlug}/runs/${instanceSlug}`;\n\nexport const getRobotPath = (\n serial: string = Slug.SERIAL,\n subpage?: RobotSubpath | undefined\n): string =>\n `${Path.ROBOTS}/${serial}${serial === Slug.SERIAL ? \"/*\" : subpage ?? \"\"}`;\n\nexport const getRobotHistoryPath = (\n serial: string = Slug.SERIAL,\n jobId: string\n): string => {\n const today = DateTime.local();\n const lastWeek = today.minus({ days: 7 });\n return `${getRobotPath(serial, RobotSubpath.HISTORY)}/${lastWeek.toFormat(\n DATE_PATH_FORMAT\n )}/${today.toFormat(DATE_PATH_FORMAT)}?${toQuery({ jobId })}`;\n};\n\nexport const getFleetPath = (subpage?: FleetSubpath | undefined): string =>\n `${Path.FLEET}${subpage ?? \"/*\"}`;\n\nexport const getAdminPath = (subpage?: AdminSubpath | undefined): string =>\n `${Path.ADMIN}${subpage ?? \"/*\"}`;\n\nexport const getUserPath = (id: string = Slug.USER_ID): string =>\n `${Path.USERS}/${id}`;\n\nexport const getFarmPath = (farmId: string): string =>\n `${Path.FARMS}/${farmId}`;\n","import { Auth0Provider } from \"@auth0/auth0-react\";\nimport { Path } from \"portal/utils/routing\";\nimport { useNavigate } from \"react-router-dom\";\nimport React, { FunctionComponent, PropsWithChildren } from \"react\";\n\nexport const CarbonAuth0Provider: FunctionComponent = ({\n children,\n}) => {\n const navigate = useNavigate();\n return (\n {\n console.debug(\n \"CarbonAuth0Provider.tsx:onRedirectCallback: appState, args:\",\n appState,\n ...parameters\n );\n const to = appState?.returnTo || Path.BASE;\n navigate(to, { replace: true });\n }}\n authorizationParams={{\n redirect_uri: window._jsenv.REACT_APP_AUTH0_REST_CALLBACK_URL,\n audience: window._jsenv.REACT_APP_AUTH0_AUDIENCE,\n scope:\n \"openid profile email read:users:self update:users:self offline_access\",\n }}\n >\n {children}\n \n );\n};\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/auth.proto\n\n/* eslint-disable */\n\nexport const protobufPackage = \"carbon.portal.auth\";\n\nexport enum UserDisplayRole {\n unknown_role = 0,\n robot_role = 1,\n operator_basic = 2,\n farm_manager = 3,\n carbon_tech = 4,\n carbon_basic = 5,\n operator_advanced = 6,\n UNRECOGNIZED = -1,\n}\n\nexport function userDisplayRoleFromJSON(object: any): UserDisplayRole {\n switch (object) {\n case 0:\n case \"unknown_role\":\n return UserDisplayRole.unknown_role;\n case 1:\n case \"robot_role\":\n return UserDisplayRole.robot_role;\n case 2:\n case \"operator_basic\":\n return UserDisplayRole.operator_basic;\n case 3:\n case \"farm_manager\":\n return UserDisplayRole.farm_manager;\n case 4:\n case \"carbon_tech\":\n return UserDisplayRole.carbon_tech;\n case 5:\n case \"carbon_basic\":\n return UserDisplayRole.carbon_basic;\n case 6:\n case \"operator_advanced\":\n return UserDisplayRole.operator_advanced;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return UserDisplayRole.UNRECOGNIZED;\n }\n}\n\nexport function userDisplayRoleToJSON(object: UserDisplayRole): string {\n switch (object) {\n case UserDisplayRole.unknown_role:\n return \"unknown_role\";\n case UserDisplayRole.robot_role:\n return \"robot_role\";\n case UserDisplayRole.operator_basic:\n return \"operator_basic\";\n case UserDisplayRole.farm_manager:\n return \"farm_manager\";\n case UserDisplayRole.carbon_tech:\n return \"carbon_tech\";\n case UserDisplayRole.carbon_basic:\n return \"carbon_basic\";\n case UserDisplayRole.operator_advanced:\n return \"operator_advanced\";\n case UserDisplayRole.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum PermissionAction {\n unknown_action = 0,\n read = 1,\n update = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function permissionActionFromJSON(object: any): PermissionAction {\n switch (object) {\n case 0:\n case \"unknown_action\":\n return PermissionAction.unknown_action;\n case 1:\n case \"read\":\n return PermissionAction.read;\n case 2:\n case \"update\":\n return PermissionAction.update;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return PermissionAction.UNRECOGNIZED;\n }\n}\n\nexport function permissionActionToJSON(object: PermissionAction): string {\n switch (object) {\n case PermissionAction.unknown_action:\n return \"unknown_action\";\n case PermissionAction.read:\n return \"read\";\n case PermissionAction.update:\n return \"update\";\n case PermissionAction.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum PermissionResource {\n unknown = 0,\n alarms_customer = 1,\n alarms_internal = 2,\n almanacs = 3,\n operator_settings = 4,\n banding = 5,\n banding_basic = 6,\n banding_advanced = 7,\n calibration = 8,\n cameras = 9,\n capture = 10,\n chat = 11,\n configs = 12,\n crops = 13,\n models_basic = 14,\n models_pinned = 15,\n models_nickname = 16,\n thresholds = 17,\n diagnostics = 18,\n guides = 19,\n jobs = 20,\n captcha = 21,\n lasers_row = 22,\n lasers_basic = 23,\n lasers_disable = 24,\n lasers_enable = 25,\n lasers_advanced = 26,\n lasers = 27,\n feeds = 28,\n models_advanced = 29,\n hardware = 30,\n quick_tune = 31,\n robot_ui = 32,\n thinning = 33,\n thinning_basic = 34,\n thinning_advanced = 35,\n software_basic = 36,\n software_advanced = 37,\n velocity_estimators = 38,\n vizualization_basic = 39,\n vizualization_advanced = 40,\n metrics = 41,\n mode = 42,\n jobs_select = 43,\n portal_settings = 44,\n portal_labs = 45,\n shortcuts_internal = 46,\n admin_alarms = 47,\n admin_cloud = 48,\n customers = 49,\n users = 50,\n users_invite = 51,\n users_permissions = 52,\n reports = 53,\n robots = 54,\n robots_assign = 55,\n robots_status = 56,\n robots_health = 57,\n veselka = 58,\n metrics_internal = 59,\n metrics_customer = 60,\n crops_basic = 61,\n crops_advanced = 62,\n discriminators = 63,\n operator_map = 64,\n uploads = 65,\n farms = 66,\n images = 67,\n autotractor_jobs = 68,\n plant_category_profiles = 69,\n UNRECOGNIZED = -1,\n}\n\nexport function permissionResourceFromJSON(object: any): PermissionResource {\n switch (object) {\n case 0:\n case \"unknown\":\n return PermissionResource.unknown;\n case 1:\n case \"alarms_customer\":\n return PermissionResource.alarms_customer;\n case 2:\n case \"alarms_internal\":\n return PermissionResource.alarms_internal;\n case 3:\n case \"almanacs\":\n return PermissionResource.almanacs;\n case 4:\n case \"operator_settings\":\n return PermissionResource.operator_settings;\n case 5:\n case \"banding\":\n return PermissionResource.banding;\n case 6:\n case \"banding_basic\":\n return PermissionResource.banding_basic;\n case 7:\n case \"banding_advanced\":\n return PermissionResource.banding_advanced;\n case 8:\n case \"calibration\":\n return PermissionResource.calibration;\n case 9:\n case \"cameras\":\n return PermissionResource.cameras;\n case 10:\n case \"capture\":\n return PermissionResource.capture;\n case 11:\n case \"chat\":\n return PermissionResource.chat;\n case 12:\n case \"configs\":\n return PermissionResource.configs;\n case 13:\n case \"crops\":\n return PermissionResource.crops;\n case 14:\n case \"models_basic\":\n return PermissionResource.models_basic;\n case 15:\n case \"models_pinned\":\n return PermissionResource.models_pinned;\n case 16:\n case \"models_nickname\":\n return PermissionResource.models_nickname;\n case 17:\n case \"thresholds\":\n return PermissionResource.thresholds;\n case 18:\n case \"diagnostics\":\n return PermissionResource.diagnostics;\n case 19:\n case \"guides\":\n return PermissionResource.guides;\n case 20:\n case \"jobs\":\n return PermissionResource.jobs;\n case 21:\n case \"captcha\":\n return PermissionResource.captcha;\n case 22:\n case \"lasers_row\":\n return PermissionResource.lasers_row;\n case 23:\n case \"lasers_basic\":\n return PermissionResource.lasers_basic;\n case 24:\n case \"lasers_disable\":\n return PermissionResource.lasers_disable;\n case 25:\n case \"lasers_enable\":\n return PermissionResource.lasers_enable;\n case 26:\n case \"lasers_advanced\":\n return PermissionResource.lasers_advanced;\n case 27:\n case \"lasers\":\n return PermissionResource.lasers;\n case 28:\n case \"feeds\":\n return PermissionResource.feeds;\n case 29:\n case \"models_advanced\":\n return PermissionResource.models_advanced;\n case 30:\n case \"hardware\":\n return PermissionResource.hardware;\n case 31:\n case \"quick_tune\":\n return PermissionResource.quick_tune;\n case 32:\n case \"robot_ui\":\n return PermissionResource.robot_ui;\n case 33:\n case \"thinning\":\n return PermissionResource.thinning;\n case 34:\n case \"thinning_basic\":\n return PermissionResource.thinning_basic;\n case 35:\n case \"thinning_advanced\":\n return PermissionResource.thinning_advanced;\n case 36:\n case \"software_basic\":\n return PermissionResource.software_basic;\n case 37:\n case \"software_advanced\":\n return PermissionResource.software_advanced;\n case 38:\n case \"velocity_estimators\":\n return PermissionResource.velocity_estimators;\n case 39:\n case \"vizualization_basic\":\n return PermissionResource.vizualization_basic;\n case 40:\n case \"vizualization_advanced\":\n return PermissionResource.vizualization_advanced;\n case 41:\n case \"metrics\":\n return PermissionResource.metrics;\n case 42:\n case \"mode\":\n return PermissionResource.mode;\n case 43:\n case \"jobs_select\":\n return PermissionResource.jobs_select;\n case 44:\n case \"portal_settings\":\n return PermissionResource.portal_settings;\n case 45:\n case \"portal_labs\":\n return PermissionResource.portal_labs;\n case 46:\n case \"shortcuts_internal\":\n return PermissionResource.shortcuts_internal;\n case 47:\n case \"admin_alarms\":\n return PermissionResource.admin_alarms;\n case 48:\n case \"admin_cloud\":\n return PermissionResource.admin_cloud;\n case 49:\n case \"customers\":\n return PermissionResource.customers;\n case 50:\n case \"users\":\n return PermissionResource.users;\n case 51:\n case \"users_invite\":\n return PermissionResource.users_invite;\n case 52:\n case \"users_permissions\":\n return PermissionResource.users_permissions;\n case 53:\n case \"reports\":\n return PermissionResource.reports;\n case 54:\n case \"robots\":\n return PermissionResource.robots;\n case 55:\n case \"robots_assign\":\n return PermissionResource.robots_assign;\n case 56:\n case \"robots_status\":\n return PermissionResource.robots_status;\n case 57:\n case \"robots_health\":\n return PermissionResource.robots_health;\n case 58:\n case \"veselka\":\n return PermissionResource.veselka;\n case 59:\n case \"metrics_internal\":\n return PermissionResource.metrics_internal;\n case 60:\n case \"metrics_customer\":\n return PermissionResource.metrics_customer;\n case 61:\n case \"crops_basic\":\n return PermissionResource.crops_basic;\n case 62:\n case \"crops_advanced\":\n return PermissionResource.crops_advanced;\n case 63:\n case \"discriminators\":\n return PermissionResource.discriminators;\n case 64:\n case \"operator_map\":\n return PermissionResource.operator_map;\n case 65:\n case \"uploads\":\n return PermissionResource.uploads;\n case 66:\n case \"farms\":\n return PermissionResource.farms;\n case 67:\n case \"images\":\n return PermissionResource.images;\n case 68:\n case \"autotractor_jobs\":\n return PermissionResource.autotractor_jobs;\n case 69:\n case \"plant_category_profiles\":\n return PermissionResource.plant_category_profiles;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return PermissionResource.UNRECOGNIZED;\n }\n}\n\nexport function permissionResourceToJSON(object: PermissionResource): string {\n switch (object) {\n case PermissionResource.unknown:\n return \"unknown\";\n case PermissionResource.alarms_customer:\n return \"alarms_customer\";\n case PermissionResource.alarms_internal:\n return \"alarms_internal\";\n case PermissionResource.almanacs:\n return \"almanacs\";\n case PermissionResource.operator_settings:\n return \"operator_settings\";\n case PermissionResource.banding:\n return \"banding\";\n case PermissionResource.banding_basic:\n return \"banding_basic\";\n case PermissionResource.banding_advanced:\n return \"banding_advanced\";\n case PermissionResource.calibration:\n return \"calibration\";\n case PermissionResource.cameras:\n return \"cameras\";\n case PermissionResource.capture:\n return \"capture\";\n case PermissionResource.chat:\n return \"chat\";\n case PermissionResource.configs:\n return \"configs\";\n case PermissionResource.crops:\n return \"crops\";\n case PermissionResource.models_basic:\n return \"models_basic\";\n case PermissionResource.models_pinned:\n return \"models_pinned\";\n case PermissionResource.models_nickname:\n return \"models_nickname\";\n case PermissionResource.thresholds:\n return \"thresholds\";\n case PermissionResource.diagnostics:\n return \"diagnostics\";\n case PermissionResource.guides:\n return \"guides\";\n case PermissionResource.jobs:\n return \"jobs\";\n case PermissionResource.captcha:\n return \"captcha\";\n case PermissionResource.lasers_row:\n return \"lasers_row\";\n case PermissionResource.lasers_basic:\n return \"lasers_basic\";\n case PermissionResource.lasers_disable:\n return \"lasers_disable\";\n case PermissionResource.lasers_enable:\n return \"lasers_enable\";\n case PermissionResource.lasers_advanced:\n return \"lasers_advanced\";\n case PermissionResource.lasers:\n return \"lasers\";\n case PermissionResource.feeds:\n return \"feeds\";\n case PermissionResource.models_advanced:\n return \"models_advanced\";\n case PermissionResource.hardware:\n return \"hardware\";\n case PermissionResource.quick_tune:\n return \"quick_tune\";\n case PermissionResource.robot_ui:\n return \"robot_ui\";\n case PermissionResource.thinning:\n return \"thinning\";\n case PermissionResource.thinning_basic:\n return \"thinning_basic\";\n case PermissionResource.thinning_advanced:\n return \"thinning_advanced\";\n case PermissionResource.software_basic:\n return \"software_basic\";\n case PermissionResource.software_advanced:\n return \"software_advanced\";\n case PermissionResource.velocity_estimators:\n return \"velocity_estimators\";\n case PermissionResource.vizualization_basic:\n return \"vizualization_basic\";\n case PermissionResource.vizualization_advanced:\n return \"vizualization_advanced\";\n case PermissionResource.metrics:\n return \"metrics\";\n case PermissionResource.mode:\n return \"mode\";\n case PermissionResource.jobs_select:\n return \"jobs_select\";\n case PermissionResource.portal_settings:\n return \"portal_settings\";\n case PermissionResource.portal_labs:\n return \"portal_labs\";\n case PermissionResource.shortcuts_internal:\n return \"shortcuts_internal\";\n case PermissionResource.admin_alarms:\n return \"admin_alarms\";\n case PermissionResource.admin_cloud:\n return \"admin_cloud\";\n case PermissionResource.customers:\n return \"customers\";\n case PermissionResource.users:\n return \"users\";\n case PermissionResource.users_invite:\n return \"users_invite\";\n case PermissionResource.users_permissions:\n return \"users_permissions\";\n case PermissionResource.reports:\n return \"reports\";\n case PermissionResource.robots:\n return \"robots\";\n case PermissionResource.robots_assign:\n return \"robots_assign\";\n case PermissionResource.robots_status:\n return \"robots_status\";\n case PermissionResource.robots_health:\n return \"robots_health\";\n case PermissionResource.veselka:\n return \"veselka\";\n case PermissionResource.metrics_internal:\n return \"metrics_internal\";\n case PermissionResource.metrics_customer:\n return \"metrics_customer\";\n case PermissionResource.crops_basic:\n return \"crops_basic\";\n case PermissionResource.crops_advanced:\n return \"crops_advanced\";\n case PermissionResource.discriminators:\n return \"discriminators\";\n case PermissionResource.operator_map:\n return \"operator_map\";\n case PermissionResource.uploads:\n return \"uploads\";\n case PermissionResource.farms:\n return \"farms\";\n case PermissionResource.images:\n return \"images\";\n case PermissionResource.autotractor_jobs:\n return \"autotractor_jobs\";\n case PermissionResource.plant_category_profiles:\n return \"plant_category_profiles\";\n case PermissionResource.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum PermissionDomain {\n unknown_domain = 0,\n none = 1,\n self = 2,\n robot = 3,\n customer = 4,\n all = 5,\n templates = 6,\n UNRECOGNIZED = -1,\n}\n\nexport function permissionDomainFromJSON(object: any): PermissionDomain {\n switch (object) {\n case 0:\n case \"unknown_domain\":\n return PermissionDomain.unknown_domain;\n case 1:\n case \"none\":\n return PermissionDomain.none;\n case 2:\n case \"self\":\n return PermissionDomain.self;\n case 3:\n case \"robot\":\n return PermissionDomain.robot;\n case 4:\n case \"customer\":\n return PermissionDomain.customer;\n case 5:\n case \"all\":\n return PermissionDomain.all;\n case 6:\n case \"templates\":\n return PermissionDomain.templates;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return PermissionDomain.UNRECOGNIZED;\n }\n}\n\nexport function permissionDomainToJSON(object: PermissionDomain): string {\n switch (object) {\n case PermissionDomain.unknown_domain:\n return \"unknown_domain\";\n case PermissionDomain.none:\n return \"none\";\n case PermissionDomain.self:\n return \"self\";\n case PermissionDomain.robot:\n return \"robot\";\n case PermissionDomain.customer:\n return \"customer\";\n case PermissionDomain.all:\n return \"all\";\n case PermissionDomain.templates:\n return \"templates\";\n case PermissionDomain.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n","import { Auth0User } from \"protos/portal/users\";\nimport { GetTokenSilentlyOptions } from \"@auth0/auth0-react\";\nimport {\n PermissionAction,\n permissionActionToJSON,\n PermissionDomain,\n permissionDomainToJSON,\n PermissionResource,\n permissionResourceToJSON,\n} from \"protos/portal/auth\";\n\n// Make everything optional in the Auth0User type and within the metadata fields\nexport interface CarbonUser\n extends Partial> {\n appMetadata?: Partial;\n userMetadata?: Partial;\n}\n\nlet getAccessTokenSilently: (\n options?: GetTokenSilentlyOptions | undefined\n) => Promise;\n\nexport const auth = {\n getAccessTokenSilently: () => getAccessTokenSilently(),\n setAccessTokenSilently: (\n function_: (\n options?: GetTokenSilentlyOptions | undefined\n ) => Promise\n ) => (getAccessTokenSilently = function_),\n};\n\nexport const isActivated = (\n user?: Pick\n): boolean => (isInternal(user) || user?.appMetadata?.isActivated) ?? false;\n\nexport const isExperimental = (user?: CarbonUser): boolean =>\n user?.userMetadata?.experimental ?? false;\n\nexport const getCustomerId = (user?: CarbonUser): number | undefined =>\n user?.appMetadata?.customerId;\n\nexport const isInternal = (\n user?: Pick\n): boolean =>\n Boolean(\n user?.email?.endsWith(\"@carbonrobotics.com\") &&\n user.userId?.startsWith(\"google-oauth2|\")\n );\n\nexport const buildPermission = (\n action: PermissionAction,\n resource: PermissionResource,\n domain?: PermissionDomain | undefined\n): string => {\n const permission: string[] = [\n permissionActionToJSON(action),\n permissionResourceToJSON(resource),\n ];\n if (domain) {\n permission.push(permissionDomainToJSON(domain));\n }\n return permission.join(\":\");\n};\n","import { createSlice, nanoid, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { VariantType } from \"notistack\";\n\nexport type Key = string;\nexport type { VariantType } from \"notistack\";\n\nexport interface Notification {\n message: string;\n variant: VariantType;\n}\n\ninterface NotificationSlot {\n key: Key;\n dismissed: boolean;\n notification: Notification;\n}\n\ninterface State {\n slots: NotificationSlot[];\n}\n\nconst initialState: State = {\n slots: [],\n};\n\nexport const notifications = createSlice({\n name: \"notifications\",\n initialState,\n reducers: {\n addNotification: {\n prepare: (notification: Notification) => {\n const key = nanoid();\n return { payload: { key, dismissed: false, notification } };\n },\n reducer: (state, action: PayloadAction) => {\n state.slots.push(action.payload);\n },\n },\n // Remove a notification from the UI. It's kept in the internal state\n // because we need to propagate the dismissal state to Notistack.\n dismissNotification: (state, action: PayloadAction) => {\n const key: Key = action.payload;\n for (const slot of state.slots) {\n if (slot.key === key) {\n slot.dismissed = true;\n break;\n }\n }\n },\n // Fully remove a notification from the state, after Notistack is done\n // caring about it. This should only be used by our middleware, not by\n // normal components that want to remove their notifications; use\n // `dismissNotification` for that instead.\n notificationExited: (state, action: PayloadAction) => {\n const key: Key = action.payload;\n state.slots = state.slots.filter((n) => n.key !== key);\n },\n },\n});\n\nexport const { addNotification, dismissNotification, notificationExited } =\n notifications.actions;\n","import { auth } from \"portal/utils/auth\";\nimport {\n BaseQueryFn,\n createApi,\n FetchArgs,\n fetchBaseQuery,\n FetchBaseQueryError,\n} from \"@reduxjs/toolkit/query/react\";\nimport { snakeToCamel } from \"portal/utils/strings\";\nimport { transformKeys, values } from \"portal/utils/objects\";\n\nexport interface IDMToken {\n exp: number;\n iat: number;\n token: string;\n userId: string;\n}\n\nenum Tag {\n STREAM_TOKEN = \"Stream/Token\",\n}\n\nconst baseQuery: BaseQueryFn<\n string | FetchArgs,\n unknown,\n FetchBaseQueryError\n> = async (arguments_, api, extraOptions = {}) => {\n const result = await fetchBaseQuery({\n baseUrl: window._jsenv.REACT_APP_IDM_URL,\n prepareHeaders: async (headers) => {\n const accessToken = await auth.getAccessTokenSilently();\n headers.set(\"Authorization\", `Bearer ${accessToken}`);\n headers.set(\"X-AUTH0-audience\", window._jsenv.REACT_APP_AUTH0_AUDIENCE);\n return headers;\n },\n })(arguments_, api, extraOptions);\n // transform all API responses from snake_case (Go) to camelCase (Typescript)\n if (result.data) {\n return { ...result, data: transformKeys(result.data, snakeToCamel) };\n }\n return result;\n};\n\nexport const idmApi = createApi({\n reducerPath: \"idmApi\",\n baseQuery,\n tagTypes: values(Tag),\n endpoints: (builder) => ({\n getStreamToken: builder.query({\n query: () => ({\n method: \"POST\",\n url: `oauth/stream/token`,\n }),\n providesTags: [Tag.STREAM_TOKEN],\n }),\n }),\n});\n\nexport const { useGetStreamTokenQuery } = idmApi;\n","import * as Comparators from \"portal/utils/comparators\";\nimport { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport { LocationHistoryRecord } from \"protos/rtc/location_history\";\n\ninterface State {\n // Map from robot serial to a consecutive subset of its location history.\n // The history for any robot should be internally complete: e.g., if the\n // history contains data from Tuesday and from Thursday, then it should also\n // contain any relevant data from Wednesday. Data from Monday or Friday might\n // not be included if it hasn't been fetched.\n //\n // Each robot's location history is sorted by timestamp.\n history: Record;\n}\n\nconst initialState: State = {\n history: {},\n};\n\nexport const location = createSlice({\n name: \"location\",\n initialState,\n reducers: {\n clearHistory(state) {\n state.history = initialState.history;\n },\n clearTractorHistory(\n state,\n action: PayloadAction<{\n serial: string;\n }>\n ) {\n const { serial } = action.payload;\n state.history[serial] = [];\n },\n updateHistory(\n state,\n action: PayloadAction<{\n serial: string;\n updates: LocationHistoryRecord[];\n }>\n ) {\n const { serial, updates } = action.payload;\n let history = [...(state.history[serial] ?? []), ...updates];\n history.sort(Comparators.comparing((record) => record.timestamp));\n // Remove consecutive duplicates, using timestamp as a unique key.\n history = history.filter((record, index) => {\n if (index === 0) {\n return true;\n }\n const previous = history[index - 1];\n return (\n record.timestamp &&\n previous?.timestamp &&\n record.timestamp > previous.timestamp\n );\n });\n state.history[serial] = history;\n },\n },\n});\n\nexport const { updateHistory, clearHistory, clearTractorHistory } =\n location.actions;\n","import { BlockColors, BlockRange } from \"./blocks\";\nimport { BlockResponse } from \"protos/portal/spatial\";\nimport {\n CarbonUnit,\n convert,\n isUnitNumberType,\n MeasurementSystem,\n UnitNumberType,\n} from \"./units/units\";\nimport { DailyMetricResponse } from \"protos/portal/metrics\";\nimport { DateTime } from \"luxon\";\nimport { i18n as I18n, ParseKeys } from \"i18next\";\nimport { isEqual } from \"./objects\";\nimport { isUndefined } from \"./identity\";\nimport { TimeUnits } from \"convert-units/definitions/time\";\n\nexport enum MetricValidation {\n VALIDATED = \"validated\",\n PENDING = \"pending\",\n INTERNAL = \"internal\",\n}\n\nexport enum CycleSlot {\n ALTITUDE = \"metric-altitude\",\n AREA = \"metric-area\",\n DENSITY = \"metric-density\",\n DISTANCE = \"metric-distance\",\n SHOOT = \"metric-shoot\",\n SIZE = \"metric-size\",\n SPEED = \"metric-speed\",\n COVERAGE = \"metric-coverage\",\n TIME = \"metric-time\",\n COMPONENT_ENCODERS = \"encoders\",\n STATUS_AREA = \"status-area\",\n STATUS_TIME = \"status-time\",\n}\n\nexport interface MetricBase {\n canAverage: boolean;\n canTotal: boolean;\n getValue: (\n value: any,\n metrics: DailyMetricResponse,\n canReadInternalMetrics?: boolean\n ) => any;\n id: ParseKeys;\n validation: MetricValidation;\n cycleSlot?: CycleSlot;\n cycle?: { [K in MeasurementSystem]?: CarbonUnit[] };\n}\n\nexport interface SpatialMetricBase extends MetricBase {\n canMap: boolean;\n popup?: SpatialMetric[];\n getValue: (block: BlockResponse) => any;\n colors: BlockColors;\n minY?: number;\n maxY?: number;\n fill?: boolean;\n getColor: (value: any, range: BlockRange, isRelative?: boolean) => string;\n renderWhenNotCountable?: boolean;\n}\n\nexport interface MetricTimeBase {\n type: \"dateTime\";\n units: TimeUnits;\n}\n\nexport type MetricTime = MetricBase & MetricTimeBase;\nexport type SpatialMetricTime = SpatialMetricBase & MetricTimeBase;\n\nexport interface MetricStringBase {\n type: \"string\";\n}\n\nexport type MetricString = MetricBase & MetricStringBase;\nexport type SpatialMetricString = SpatialMetricBase & MetricStringBase;\n\nexport interface MetricBooleanBase {\n type: \"boolean\";\n truei18nKey?: string;\n falsei18nKey?: string;\n}\n\nexport type MetricBoolean = MetricBase & MetricBooleanBase;\nexport type SpatialMetricBoolean = SpatialMetricBase & MetricBooleanBase;\n\nexport interface MetricNumberBase {\n type: \"number\";\n units: CarbonUnit;\n unitsDelimiter?: string;\n toUnits?: CarbonUnit;\n decimalPlaces?: number;\n}\n\nexport type MetricNumber = MetricBase & MetricNumberBase;\nexport type SpatialMetricNumber = SpatialMetricBase & MetricNumberBase;\n\nexport interface MetricDurationBase {\n type: \"number\";\n isDuration: true;\n units: TimeUnits;\n}\n\nexport type MetricDuration = MetricBase & MetricDurationBase;\nexport type SpatialMetricDuration = SpatialMetricBase & MetricDurationBase;\n\nexport type Metric =\n | MetricTime\n | MetricString\n | MetricBoolean\n | MetricNumber\n | MetricDuration;\n\nexport type SpatialMetric =\n | SpatialMetricTime\n | SpatialMetricString\n | SpatialMetricBoolean\n | SpatialMetricNumber\n | SpatialMetricDuration;\n\nexport type AnyMetric = Metric | SpatialMetric;\n\nexport const carbonConvert = (\n value: number,\n fromUnits: CarbonUnit,\n toUnits: CarbonUnit\n): number => {\n if (\n fromUnits === toUnits ||\n isEqual(fromUnits, toUnits) ||\n isUnitNumberType(fromUnits) ||\n isUnitNumberType(toUnits)\n ) {\n return value;\n }\n return convert(value).from(fromUnits).to(toUnits);\n};\n\nexport const isCount = (\n unit: MetricNumberBase[\"units\"] | undefined\n): unit is UnitNumberType.COUNT => UnitNumberType.COUNT === unit;\n\nexport const isPercent = (\n unit: MetricNumberBase[\"units\"] | undefined\n): unit is UnitNumberType.PERCENT => UnitNumberType.PERCENT === unit;\n\nexport const isSpatialMetric = (metric: AnyMetric): metric is SpatialMetric =>\n \"canMap\" in metric;\n\nexport const isMetricTime = (metric: AnyMetric): metric is MetricTime =>\n metric.type === \"dateTime\" && !isSpatialMetric(metric);\n\nexport const isMetricString = (metric: AnyMetric): metric is MetricString =>\n metric.type === \"string\" && !isSpatialMetric(metric);\n\nexport const isMetricBoolean = (metric: AnyMetric): metric is MetricBoolean =>\n metric.type === \"boolean\" && !isSpatialMetric(metric);\n\nexport const isMetricNumber = (metric: AnyMetric): metric is MetricNumber =>\n metric.type === \"number\" && !isSpatialMetric(metric);\n\nexport const isMetricDuration = (metric: AnyMetric): metric is MetricDuration =>\n metric.type === \"number\" &&\n \"isDuration\" in metric &&\n !isSpatialMetric(metric);\n\nexport const isSpatialMetricTime = (\n metric: AnyMetric\n): metric is SpatialMetricTime =>\n metric.type === \"dateTime\" && isSpatialMetric(metric);\n\nexport const isSpatialMetricString = (\n metric: AnyMetric\n): metric is SpatialMetricString =>\n metric.type === \"string\" && isSpatialMetric(metric);\n\nexport const isSpatialMetricBoolean = (\n metric: AnyMetric\n): metric is SpatialMetricBoolean =>\n metric.type === \"boolean\" && isSpatialMetric(metric);\n\nexport const isSpatialMetricNumber = (\n metric: AnyMetric\n): metric is SpatialMetricNumber =>\n metric.type === \"number\" && isSpatialMetric(metric);\n\nexport const isSpatialMetricDuration = (\n metric: AnyMetric\n): metric is SpatialMetricDuration =>\n metric.type === \"number\" && \"isDuration\" in metric && isSpatialMetric(metric);\n\nexport const unitsToI18nKey = (units: CarbonUnit | UnitNumberType): string => {\n if (isCount(units)) {\n return \"\";\n } else if (isPercent(units)) {\n return \"utils.units.%\";\n } else {\n return units;\n }\n};\n\nexport const formatTime = (i18n: I18n, value?: number | undefined): string => {\n if (isUndefined(value) || value === 0) {\n return \"\";\n }\n return DateTime.fromMillis(value).toLocaleString(\n {\n hour12: true,\n hour: \"numeric\",\n minute: \"2-digit\",\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n },\n { locale: i18n.language }\n );\n};\n\nexport const getAsPercentOfCategorized = (\n value: number | undefined,\n {\n weedsTypeCountBroadleaf,\n weedsTypeCountGrass,\n weedsTypeCountOffshoot,\n weedsTypeCountPurslane,\n }: DailyMetricResponse\n): number | undefined => {\n const totalCategorized =\n weedsTypeCountBroadleaf +\n weedsTypeCountGrass +\n weedsTypeCountOffshoot +\n weedsTypeCountPurslane;\n if (isUndefined(value) || !totalCategorized) {\n return;\n }\n return (value / totalCategorized) * 100;\n};\n","import { CarbonUnit } from \"portal/utils/units/units\";\nimport { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport { CycleSlot } from \"portal/utils/metrics\";\n\n// TODO: migrate into userPreferences\ninterface State {\n cycleSlots: Record;\n}\n\nconst initialState: State = {\n cycleSlots: {\n [CycleSlot.STATUS_TIME]: \"h\",\n [CycleSlot.TIME]: \"h\",\n [CycleSlot.COMPONENT_ENCODERS]: \"in\",\n },\n};\n\nexport const measurement = createSlice({\n name: \"measurement\",\n initialState,\n reducers: {\n setCycleSlot: (state, action: PayloadAction<[string, CarbonUnit]>) => {\n const [slot, unit] = action.payload;\n\n state.cycleSlots[slot] = unit;\n },\n },\n});\n\nexport const { setCycleSlot } = measurement.actions;\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/db.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"carbon.portal.db\";\n\nexport interface DB {\n id: number;\n createdAt: number;\n updatedAt: number;\n deletedAt: number;\n}\n\nfunction createBaseDB(): DB {\n return { id: 0, createdAt: 0, updatedAt: 0, deletedAt: 0 };\n}\n\nexport const DB: MessageFns = {\n encode(message: DB, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).int64(message.id);\n }\n if (message.createdAt !== 0) {\n writer.uint32(16).int64(message.createdAt);\n }\n if (message.updatedAt !== 0) {\n writer.uint32(24).int64(message.updatedAt);\n }\n if (message.deletedAt !== 0) {\n writer.uint32(32).int64(message.deletedAt);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DB {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDB();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.createdAt = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.updatedAt = longToNumber(reader.int64());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.deletedAt = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DB {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n createdAt: isSet(object.createdAt) ? globalThis.Number(object.createdAt) : 0,\n updatedAt: isSet(object.updatedAt) ? globalThis.Number(object.updatedAt) : 0,\n deletedAt: isSet(object.deletedAt) ? globalThis.Number(object.deletedAt) : 0,\n };\n },\n\n toJSON(message: DB): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.createdAt !== 0) {\n obj.createdAt = Math.round(message.createdAt);\n }\n if (message.updatedAt !== 0) {\n obj.updatedAt = Math.round(message.updatedAt);\n }\n if (message.deletedAt !== 0) {\n obj.deletedAt = Math.round(message.deletedAt);\n }\n return obj;\n },\n\n create, I>>(base?: I): DB {\n return DB.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DB {\n const message = createBaseDB();\n message.id = object.id ?? 0;\n message.createdAt = object.createdAt ?? 0;\n message.updatedAt = object.updatedAt ?? 0;\n message.deletedAt = object.deletedAt ?? 0;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/alarms.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { AlarmRow } from \"../frontend/alarm\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.alarms\";\n\nexport interface AlarmResponse {\n db: DB | undefined;\n alarm: AlarmRow | undefined;\n startedAt: number;\n endedAt: number;\n robotId: number;\n}\n\nfunction createBaseAlarmResponse(): AlarmResponse {\n return { db: undefined, alarm: undefined, startedAt: 0, endedAt: 0, robotId: 0 };\n}\n\nexport const AlarmResponse: MessageFns = {\n encode(message: AlarmResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.alarm !== undefined) {\n AlarmRow.encode(message.alarm, writer.uint32(18).fork()).join();\n }\n if (message.startedAt !== 0) {\n writer.uint32(88).int64(message.startedAt);\n }\n if (message.endedAt !== 0) {\n writer.uint32(96).int64(message.endedAt);\n }\n if (message.robotId !== 0) {\n writer.uint32(104).int64(message.robotId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AlarmResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAlarmResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.alarm = AlarmRow.decode(reader, reader.uint32());\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.startedAt = longToNumber(reader.int64());\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n\n message.endedAt = longToNumber(reader.int64());\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n\n message.robotId = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AlarmResponse {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n alarm: isSet(object.alarm) ? AlarmRow.fromJSON(object.alarm) : undefined,\n startedAt: isSet(object.startedAt) ? globalThis.Number(object.startedAt) : 0,\n endedAt: isSet(object.endedAt) ? globalThis.Number(object.endedAt) : 0,\n robotId: isSet(object.robotId) ? globalThis.Number(object.robotId) : 0,\n };\n },\n\n toJSON(message: AlarmResponse): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.alarm !== undefined) {\n obj.alarm = AlarmRow.toJSON(message.alarm);\n }\n if (message.startedAt !== 0) {\n obj.startedAt = Math.round(message.startedAt);\n }\n if (message.endedAt !== 0) {\n obj.endedAt = Math.round(message.endedAt);\n }\n if (message.robotId !== 0) {\n obj.robotId = Math.round(message.robotId);\n }\n return obj;\n },\n\n create, I>>(base?: I): AlarmResponse {\n return AlarmResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AlarmResponse {\n const message = createBaseAlarmResponse();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.alarm = (object.alarm !== undefined && object.alarm !== null)\n ? AlarmRow.fromPartial(object.alarm)\n : undefined;\n message.startedAt = object.startedAt ?? 0;\n message.endedAt = object.endedAt ?? 0;\n message.robotId = object.robotId ?? 0;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: almanac/almanac.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"carbon.aimbot.almanac\";\n\nexport enum CategoryClassification {\n CATEGORY_WEED = 0,\n CATEGORY_CROP = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function categoryClassificationFromJSON(object: any): CategoryClassification {\n switch (object) {\n case 0:\n case \"CATEGORY_WEED\":\n return CategoryClassification.CATEGORY_WEED;\n case 1:\n case \"CATEGORY_CROP\":\n return CategoryClassification.CATEGORY_CROP;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return CategoryClassification.UNRECOGNIZED;\n }\n}\n\nexport function categoryClassificationToJSON(object: CategoryClassification): string {\n switch (object) {\n case CategoryClassification.CATEGORY_WEED:\n return \"CATEGORY_WEED\";\n case CategoryClassification.CATEGORY_CROP:\n return \"CATEGORY_CROP\";\n case CategoryClassification.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface Formula {\n /** A */\n multiplier: number;\n /** b */\n offset: number;\n /** e */\n exponent: number;\n /** discrete val 1-10 */\n fineTuneMultiplier: number;\n /** Time to cap all shooting at */\n maxTime: number;\n /** how big each step is for moving ftm: F= 1.0 + (5-ftm)*ftm_val */\n fineTuneMultiplierVal: number;\n}\n\nexport interface Trust {\n /** In weeding Can be skipped if not enough time (will not */\n ignorable: boolean;\n /** be used in VE, but can be targeted still) */\n avoid: boolean;\n}\n\nexport interface ModelTrust {\n /** Minimum detections over opportuninty */\n minDoo: number;\n /** for weed act as WPT for crop this is crop protect */\n weedingThreshold: number;\n /** only used for crop to decide if should be */\n thinningThreshold: number;\n /** looked at or ignored in thinning */\n bandingThreshold: number;\n}\n\nexport interface TypeCategory {\n /** This is a uuid which maps to a crop id or weed id */\n category: string;\n classification: CategoryClassification;\n}\n\nexport interface AlmanacTypeCategory {\n type:\n | TypeCategory\n | undefined;\n /** Each size goes from [sizes[i-1], sizes[i]) for i=0 we use [0, */\n sizes: number[];\n /**\n * sizes[i]) additionally we add [sizes[N], inf) to the end so for 3\n * categories only need 2 values\n */\n formulas: Formula[];\n}\n\nexport interface DiscriminatorTypeCategory {\n type: TypeCategory | undefined;\n trusts: Trust[];\n}\n\nexport interface ModelinatorTypeCategory {\n type: TypeCategory | undefined;\n trusts: ModelTrust[];\n}\n\nexport interface AlmanacConfig {\n /** auto generated uuid */\n id: string;\n name: string;\n protected: boolean;\n updatedTs: number;\n /** Must contain an instance with category=\"DEFAULT\" */\n categories: AlmanacTypeCategory[];\n}\n\nexport interface DiscriminatorConfig {\n /** auto generated uuid */\n id: string;\n name: string;\n protected: boolean;\n updatedTs: number;\n categories: DiscriminatorTypeCategory[];\n}\n\nexport interface ModelinatorConfig {\n /** must match an existing model id */\n modelId: string;\n /** must match an existing crop id */\n cropId: string;\n /** Set if has been modifed by user from model suggestion */\n modified: boolean;\n categories: ModelinatorTypeCategory[];\n}\n\nfunction createBaseFormula(): Formula {\n return { multiplier: 0, offset: 0, exponent: 0, fineTuneMultiplier: 0, maxTime: 0, fineTuneMultiplierVal: 0 };\n}\n\nexport const Formula: MessageFns = {\n encode(message: Formula, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.multiplier !== 0) {\n writer.uint32(13).float(message.multiplier);\n }\n if (message.offset !== 0) {\n writer.uint32(21).float(message.offset);\n }\n if (message.exponent !== 0) {\n writer.uint32(29).float(message.exponent);\n }\n if (message.fineTuneMultiplier !== 0) {\n writer.uint32(32).uint32(message.fineTuneMultiplier);\n }\n if (message.maxTime !== 0) {\n writer.uint32(40).uint32(message.maxTime);\n }\n if (message.fineTuneMultiplierVal !== 0) {\n writer.uint32(53).float(message.fineTuneMultiplierVal);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Formula {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFormula();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.multiplier = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.offset = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.exponent = reader.float();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.fineTuneMultiplier = reader.uint32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.maxTime = reader.uint32();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n\n message.fineTuneMultiplierVal = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Formula {\n return {\n multiplier: isSet(object.multiplier) ? globalThis.Number(object.multiplier) : 0,\n offset: isSet(object.offset) ? globalThis.Number(object.offset) : 0,\n exponent: isSet(object.exponent) ? globalThis.Number(object.exponent) : 0,\n fineTuneMultiplier: isSet(object.fineTuneMultiplier) ? globalThis.Number(object.fineTuneMultiplier) : 0,\n maxTime: isSet(object.maxTime) ? globalThis.Number(object.maxTime) : 0,\n fineTuneMultiplierVal: isSet(object.fineTuneMultiplierVal) ? globalThis.Number(object.fineTuneMultiplierVal) : 0,\n };\n },\n\n toJSON(message: Formula): unknown {\n const obj: any = {};\n if (message.multiplier !== 0) {\n obj.multiplier = message.multiplier;\n }\n if (message.offset !== 0) {\n obj.offset = message.offset;\n }\n if (message.exponent !== 0) {\n obj.exponent = message.exponent;\n }\n if (message.fineTuneMultiplier !== 0) {\n obj.fineTuneMultiplier = Math.round(message.fineTuneMultiplier);\n }\n if (message.maxTime !== 0) {\n obj.maxTime = Math.round(message.maxTime);\n }\n if (message.fineTuneMultiplierVal !== 0) {\n obj.fineTuneMultiplierVal = message.fineTuneMultiplierVal;\n }\n return obj;\n },\n\n create, I>>(base?: I): Formula {\n return Formula.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Formula {\n const message = createBaseFormula();\n message.multiplier = object.multiplier ?? 0;\n message.offset = object.offset ?? 0;\n message.exponent = object.exponent ?? 0;\n message.fineTuneMultiplier = object.fineTuneMultiplier ?? 0;\n message.maxTime = object.maxTime ?? 0;\n message.fineTuneMultiplierVal = object.fineTuneMultiplierVal ?? 0;\n return message;\n },\n};\n\nfunction createBaseTrust(): Trust {\n return { ignorable: false, avoid: false };\n}\n\nexport const Trust: MessageFns = {\n encode(message: Trust, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.ignorable !== false) {\n writer.uint32(8).bool(message.ignorable);\n }\n if (message.avoid !== false) {\n writer.uint32(16).bool(message.avoid);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Trust {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrust();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.ignorable = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.avoid = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Trust {\n return {\n ignorable: isSet(object.ignorable) ? globalThis.Boolean(object.ignorable) : false,\n avoid: isSet(object.avoid) ? globalThis.Boolean(object.avoid) : false,\n };\n },\n\n toJSON(message: Trust): unknown {\n const obj: any = {};\n if (message.ignorable !== false) {\n obj.ignorable = message.ignorable;\n }\n if (message.avoid !== false) {\n obj.avoid = message.avoid;\n }\n return obj;\n },\n\n create, I>>(base?: I): Trust {\n return Trust.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Trust {\n const message = createBaseTrust();\n message.ignorable = object.ignorable ?? false;\n message.avoid = object.avoid ?? false;\n return message;\n },\n};\n\nfunction createBaseModelTrust(): ModelTrust {\n return { minDoo: 0, weedingThreshold: 0, thinningThreshold: 0, bandingThreshold: 0 };\n}\n\nexport const ModelTrust: MessageFns = {\n encode(message: ModelTrust, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.minDoo !== 0) {\n writer.uint32(13).float(message.minDoo);\n }\n if (message.weedingThreshold !== 0) {\n writer.uint32(21).float(message.weedingThreshold);\n }\n if (message.thinningThreshold !== 0) {\n writer.uint32(29).float(message.thinningThreshold);\n }\n if (message.bandingThreshold !== 0) {\n writer.uint32(37).float(message.bandingThreshold);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ModelTrust {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseModelTrust();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.minDoo = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.weedingThreshold = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.thinningThreshold = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.bandingThreshold = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ModelTrust {\n return {\n minDoo: isSet(object.minDoo) ? globalThis.Number(object.minDoo) : 0,\n weedingThreshold: isSet(object.weedingThreshold) ? globalThis.Number(object.weedingThreshold) : 0,\n thinningThreshold: isSet(object.thinningThreshold) ? globalThis.Number(object.thinningThreshold) : 0,\n bandingThreshold: isSet(object.bandingThreshold) ? globalThis.Number(object.bandingThreshold) : 0,\n };\n },\n\n toJSON(message: ModelTrust): unknown {\n const obj: any = {};\n if (message.minDoo !== 0) {\n obj.minDoo = message.minDoo;\n }\n if (message.weedingThreshold !== 0) {\n obj.weedingThreshold = message.weedingThreshold;\n }\n if (message.thinningThreshold !== 0) {\n obj.thinningThreshold = message.thinningThreshold;\n }\n if (message.bandingThreshold !== 0) {\n obj.bandingThreshold = message.bandingThreshold;\n }\n return obj;\n },\n\n create, I>>(base?: I): ModelTrust {\n return ModelTrust.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ModelTrust {\n const message = createBaseModelTrust();\n message.minDoo = object.minDoo ?? 0;\n message.weedingThreshold = object.weedingThreshold ?? 0;\n message.thinningThreshold = object.thinningThreshold ?? 0;\n message.bandingThreshold = object.bandingThreshold ?? 0;\n return message;\n },\n};\n\nfunction createBaseTypeCategory(): TypeCategory {\n return { category: \"\", classification: 0 };\n}\n\nexport const TypeCategory: MessageFns = {\n encode(message: TypeCategory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.category !== \"\") {\n writer.uint32(10).string(message.category);\n }\n if (message.classification !== 0) {\n writer.uint32(16).int32(message.classification);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TypeCategory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTypeCategory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.category = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.classification = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TypeCategory {\n return {\n category: isSet(object.category) ? globalThis.String(object.category) : \"\",\n classification: isSet(object.classification) ? categoryClassificationFromJSON(object.classification) : 0,\n };\n },\n\n toJSON(message: TypeCategory): unknown {\n const obj: any = {};\n if (message.category !== \"\") {\n obj.category = message.category;\n }\n if (message.classification !== 0) {\n obj.classification = categoryClassificationToJSON(message.classification);\n }\n return obj;\n },\n\n create, I>>(base?: I): TypeCategory {\n return TypeCategory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TypeCategory {\n const message = createBaseTypeCategory();\n message.category = object.category ?? \"\";\n message.classification = object.classification ?? 0;\n return message;\n },\n};\n\nfunction createBaseAlmanacTypeCategory(): AlmanacTypeCategory {\n return { type: undefined, sizes: [], formulas: [] };\n}\n\nexport const AlmanacTypeCategory: MessageFns = {\n encode(message: AlmanacTypeCategory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.type !== undefined) {\n TypeCategory.encode(message.type, writer.uint32(10).fork()).join();\n }\n writer.uint32(18).fork();\n for (const v of message.sizes) {\n writer.float(v);\n }\n writer.join();\n for (const v of message.formulas) {\n Formula.encode(v!, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AlmanacTypeCategory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAlmanacTypeCategory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.type = TypeCategory.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag === 21) {\n message.sizes.push(reader.float());\n\n continue;\n }\n\n if (tag === 18) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.sizes.push(reader.float());\n }\n\n continue;\n }\n\n break;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.formulas.push(Formula.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AlmanacTypeCategory {\n return {\n type: isSet(object.type) ? TypeCategory.fromJSON(object.type) : undefined,\n sizes: globalThis.Array.isArray(object?.sizes) ? object.sizes.map((e: any) => globalThis.Number(e)) : [],\n formulas: globalThis.Array.isArray(object?.formulas) ? object.formulas.map((e: any) => Formula.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: AlmanacTypeCategory): unknown {\n const obj: any = {};\n if (message.type !== undefined) {\n obj.type = TypeCategory.toJSON(message.type);\n }\n if (message.sizes?.length) {\n obj.sizes = message.sizes;\n }\n if (message.formulas?.length) {\n obj.formulas = message.formulas.map((e) => Formula.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): AlmanacTypeCategory {\n return AlmanacTypeCategory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AlmanacTypeCategory {\n const message = createBaseAlmanacTypeCategory();\n message.type = (object.type !== undefined && object.type !== null)\n ? TypeCategory.fromPartial(object.type)\n : undefined;\n message.sizes = object.sizes?.map((e) => e) || [];\n message.formulas = object.formulas?.map((e) => Formula.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseDiscriminatorTypeCategory(): DiscriminatorTypeCategory {\n return { type: undefined, trusts: [] };\n}\n\nexport const DiscriminatorTypeCategory: MessageFns = {\n encode(message: DiscriminatorTypeCategory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.type !== undefined) {\n TypeCategory.encode(message.type, writer.uint32(10).fork()).join();\n }\n for (const v of message.trusts) {\n Trust.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DiscriminatorTypeCategory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDiscriminatorTypeCategory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.type = TypeCategory.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.trusts.push(Trust.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DiscriminatorTypeCategory {\n return {\n type: isSet(object.type) ? TypeCategory.fromJSON(object.type) : undefined,\n trusts: globalThis.Array.isArray(object?.trusts) ? object.trusts.map((e: any) => Trust.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: DiscriminatorTypeCategory): unknown {\n const obj: any = {};\n if (message.type !== undefined) {\n obj.type = TypeCategory.toJSON(message.type);\n }\n if (message.trusts?.length) {\n obj.trusts = message.trusts.map((e) => Trust.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): DiscriminatorTypeCategory {\n return DiscriminatorTypeCategory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DiscriminatorTypeCategory {\n const message = createBaseDiscriminatorTypeCategory();\n message.type = (object.type !== undefined && object.type !== null)\n ? TypeCategory.fromPartial(object.type)\n : undefined;\n message.trusts = object.trusts?.map((e) => Trust.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseModelinatorTypeCategory(): ModelinatorTypeCategory {\n return { type: undefined, trusts: [] };\n}\n\nexport const ModelinatorTypeCategory: MessageFns = {\n encode(message: ModelinatorTypeCategory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.type !== undefined) {\n TypeCategory.encode(message.type, writer.uint32(10).fork()).join();\n }\n for (const v of message.trusts) {\n ModelTrust.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ModelinatorTypeCategory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseModelinatorTypeCategory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.type = TypeCategory.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.trusts.push(ModelTrust.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ModelinatorTypeCategory {\n return {\n type: isSet(object.type) ? TypeCategory.fromJSON(object.type) : undefined,\n trusts: globalThis.Array.isArray(object?.trusts) ? object.trusts.map((e: any) => ModelTrust.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: ModelinatorTypeCategory): unknown {\n const obj: any = {};\n if (message.type !== undefined) {\n obj.type = TypeCategory.toJSON(message.type);\n }\n if (message.trusts?.length) {\n obj.trusts = message.trusts.map((e) => ModelTrust.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): ModelinatorTypeCategory {\n return ModelinatorTypeCategory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ModelinatorTypeCategory {\n const message = createBaseModelinatorTypeCategory();\n message.type = (object.type !== undefined && object.type !== null)\n ? TypeCategory.fromPartial(object.type)\n : undefined;\n message.trusts = object.trusts?.map((e) => ModelTrust.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseAlmanacConfig(): AlmanacConfig {\n return { id: \"\", name: \"\", protected: false, updatedTs: 0, categories: [] };\n}\n\nexport const AlmanacConfig: MessageFns = {\n encode(message: AlmanacConfig, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.protected !== false) {\n writer.uint32(24).bool(message.protected);\n }\n if (message.updatedTs !== 0) {\n writer.uint32(32).uint64(message.updatedTs);\n }\n for (const v of message.categories) {\n AlmanacTypeCategory.encode(v!, writer.uint32(42).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AlmanacConfig {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAlmanacConfig();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.protected = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.updatedTs = longToNumber(reader.uint64());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.categories.push(AlmanacTypeCategory.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AlmanacConfig {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n protected: isSet(object.protected) ? globalThis.Boolean(object.protected) : false,\n updatedTs: isSet(object.updatedTs) ? globalThis.Number(object.updatedTs) : 0,\n categories: globalThis.Array.isArray(object?.categories)\n ? object.categories.map((e: any) => AlmanacTypeCategory.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: AlmanacConfig): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.protected !== false) {\n obj.protected = message.protected;\n }\n if (message.updatedTs !== 0) {\n obj.updatedTs = Math.round(message.updatedTs);\n }\n if (message.categories?.length) {\n obj.categories = message.categories.map((e) => AlmanacTypeCategory.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): AlmanacConfig {\n return AlmanacConfig.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AlmanacConfig {\n const message = createBaseAlmanacConfig();\n message.id = object.id ?? \"\";\n message.name = object.name ?? \"\";\n message.protected = object.protected ?? false;\n message.updatedTs = object.updatedTs ?? 0;\n message.categories = object.categories?.map((e) => AlmanacTypeCategory.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseDiscriminatorConfig(): DiscriminatorConfig {\n return { id: \"\", name: \"\", protected: false, updatedTs: 0, categories: [] };\n}\n\nexport const DiscriminatorConfig: MessageFns = {\n encode(message: DiscriminatorConfig, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.protected !== false) {\n writer.uint32(24).bool(message.protected);\n }\n if (message.updatedTs !== 0) {\n writer.uint32(32).uint64(message.updatedTs);\n }\n for (const v of message.categories) {\n DiscriminatorTypeCategory.encode(v!, writer.uint32(42).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DiscriminatorConfig {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDiscriminatorConfig();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.protected = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.updatedTs = longToNumber(reader.uint64());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.categories.push(DiscriminatorTypeCategory.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DiscriminatorConfig {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n protected: isSet(object.protected) ? globalThis.Boolean(object.protected) : false,\n updatedTs: isSet(object.updatedTs) ? globalThis.Number(object.updatedTs) : 0,\n categories: globalThis.Array.isArray(object?.categories)\n ? object.categories.map((e: any) => DiscriminatorTypeCategory.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: DiscriminatorConfig): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.protected !== false) {\n obj.protected = message.protected;\n }\n if (message.updatedTs !== 0) {\n obj.updatedTs = Math.round(message.updatedTs);\n }\n if (message.categories?.length) {\n obj.categories = message.categories.map((e) => DiscriminatorTypeCategory.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): DiscriminatorConfig {\n return DiscriminatorConfig.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DiscriminatorConfig {\n const message = createBaseDiscriminatorConfig();\n message.id = object.id ?? \"\";\n message.name = object.name ?? \"\";\n message.protected = object.protected ?? false;\n message.updatedTs = object.updatedTs ?? 0;\n message.categories = object.categories?.map((e) => DiscriminatorTypeCategory.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseModelinatorConfig(): ModelinatorConfig {\n return { modelId: \"\", cropId: \"\", modified: false, categories: [] };\n}\n\nexport const ModelinatorConfig: MessageFns = {\n encode(message: ModelinatorConfig, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.modelId !== \"\") {\n writer.uint32(10).string(message.modelId);\n }\n if (message.cropId !== \"\") {\n writer.uint32(18).string(message.cropId);\n }\n if (message.modified !== false) {\n writer.uint32(24).bool(message.modified);\n }\n for (const v of message.categories) {\n ModelinatorTypeCategory.encode(v!, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ModelinatorConfig {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseModelinatorConfig();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.modelId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.cropId = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.modified = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.categories.push(ModelinatorTypeCategory.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ModelinatorConfig {\n return {\n modelId: isSet(object.modelId) ? globalThis.String(object.modelId) : \"\",\n cropId: isSet(object.cropId) ? globalThis.String(object.cropId) : \"\",\n modified: isSet(object.modified) ? globalThis.Boolean(object.modified) : false,\n categories: globalThis.Array.isArray(object?.categories)\n ? object.categories.map((e: any) => ModelinatorTypeCategory.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ModelinatorConfig): unknown {\n const obj: any = {};\n if (message.modelId !== \"\") {\n obj.modelId = message.modelId;\n }\n if (message.cropId !== \"\") {\n obj.cropId = message.cropId;\n }\n if (message.modified !== false) {\n obj.modified = message.modified;\n }\n if (message.categories?.length) {\n obj.categories = message.categories.map((e) => ModelinatorTypeCategory.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): ModelinatorConfig {\n return ModelinatorConfig.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ModelinatorConfig {\n const message = createBaseModelinatorConfig();\n message.modelId = object.modelId ?? \"\";\n message.cropId = object.cropId ?? \"\";\n message.modified = object.modified ?? false;\n message.categories = object.categories?.map((e) => ModelinatorTypeCategory.fromPartial(e)) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: google/protobuf/timestamp.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"google.protobuf\";\n\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(time(NULL));\n * timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n * struct timeval tv;\n * gettimeofday(&tv, NULL);\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(tv.tv_sec);\n * timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n * FILETIME ft;\n * GetSystemTimeAsFileTime(&ft);\n * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n * Timestamp timestamp;\n * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n * long millis = System.currentTimeMillis();\n *\n * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n * .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n * Instant now = Instant.now();\n *\n * Timestamp timestamp =\n * Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n * .setNanos(now.getNano()).build();\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n * timestamp = Timestamp()\n * timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D\n * ) to obtain a formatter capable of generating timestamps in this format.\n */\nexport interface Timestamp {\n /**\n * Represents seconds of UTC time since Unix epoch\n * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n * 9999-12-31T23:59:59Z inclusive.\n */\n seconds: number;\n /**\n * Non-negative fractions of a second at nanosecond resolution. Negative\n * second values with fractions must still have non-negative nanos values\n * that count forward in time. Must be from 0 to 999,999,999\n * inclusive.\n */\n nanos: number;\n}\n\nfunction createBaseTimestamp(): Timestamp {\n return { seconds: 0, nanos: 0 };\n}\n\nexport const Timestamp: MessageFns = {\n encode(message: Timestamp, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.seconds !== 0) {\n writer.uint32(8).int64(message.seconds);\n }\n if (message.nanos !== 0) {\n writer.uint32(16).int32(message.nanos);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Timestamp {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTimestamp();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.seconds = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.nanos = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Timestamp {\n return {\n seconds: isSet(object.seconds) ? globalThis.Number(object.seconds) : 0,\n nanos: isSet(object.nanos) ? globalThis.Number(object.nanos) : 0,\n };\n },\n\n toJSON(message: Timestamp): unknown {\n const obj: any = {};\n if (message.seconds !== 0) {\n obj.seconds = Math.round(message.seconds);\n }\n if (message.nanos !== 0) {\n obj.nanos = Math.round(message.nanos);\n }\n return obj;\n },\n\n create, I>>(base?: I): Timestamp {\n return Timestamp.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Timestamp {\n const message = createBaseTimestamp();\n message.seconds = object.seconds ?? 0;\n message.nanos = object.nanos ?? 0;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: geo/geo.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Timestamp } from \"../google/protobuf/timestamp\";\n\nexport const protobufPackage = \"carbon.geo\";\n\n/**\n * Type of \"fix\", indicating the method by which a point was captured. This\n * informs the precision of the measurement.\n *\n * These categories map to fix types for GGA messages under the NMEA 0183 spec,\n * though the numeric enum values differ.\n */\nexport enum FixType {\n FIX_TYPE_UNSPECIFIED = 0,\n NO_FIX = 1,\n GNSS = 2,\n DIFFERENTIAL_GNSS = 3,\n RTK_FIXED = 4,\n RTK_FLOAT = 5,\n DEAD_RECKONING = 6,\n UNRECOGNIZED = -1,\n}\n\nexport function fixTypeFromJSON(object: any): FixType {\n switch (object) {\n case 0:\n case \"FIX_TYPE_UNSPECIFIED\":\n return FixType.FIX_TYPE_UNSPECIFIED;\n case 1:\n case \"NO_FIX\":\n return FixType.NO_FIX;\n case 2:\n case \"GNSS\":\n return FixType.GNSS;\n case 3:\n case \"DIFFERENTIAL_GNSS\":\n return FixType.DIFFERENTIAL_GNSS;\n case 4:\n case \"RTK_FIXED\":\n return FixType.RTK_FIXED;\n case 5:\n case \"RTK_FLOAT\":\n return FixType.RTK_FLOAT;\n case 6:\n case \"DEAD_RECKONING\":\n return FixType.DEAD_RECKONING;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return FixType.UNRECOGNIZED;\n }\n}\n\nexport function fixTypeToJSON(object: FixType): string {\n switch (object) {\n case FixType.FIX_TYPE_UNSPECIFIED:\n return \"FIX_TYPE_UNSPECIFIED\";\n case FixType.NO_FIX:\n return \"NO_FIX\";\n case FixType.GNSS:\n return \"GNSS\";\n case FixType.DIFFERENTIAL_GNSS:\n return \"DIFFERENTIAL_GNSS\";\n case FixType.RTK_FIXED:\n return \"RTK_FIXED\";\n case FixType.RTK_FLOAT:\n return \"RTK_FLOAT\";\n case FixType.DEAD_RECKONING:\n return \"DEAD_RECKONING\";\n case FixType.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\n/** Information about how a point was recorded. */\nexport interface CaptureInfo {\n fixType: FixType;\n captureTime: string | undefined;\n}\n\nexport interface Id {\n /**\n * Globally unique ID for this entity. Intended to be a short, high-entropy\n * string, like base62 over ~65 bits (e.g., `JVU8yUVxbf9`).\n */\n id: string;\n}\n\n/** A point on the earth represented in the WGS 84 geodetic coordinate system. */\nexport interface Point {\n /** Longitude, as degrees east of the prime meridian. */\n lng: number;\n /** Latitude, as degrees north of the equator. */\n lat: number;\n /** Altitude, as height in meters above the reference ellipsoid. */\n alt: number;\n captureInfo:\n | CaptureInfo\n | undefined;\n /**\n * Globally unique identifier for this point.\n *\n * Geometries containing points can include only the ID to incorporate\n * points by reference; e.g., the following `LineString` could\n * represent a closed path:\n *\n * {\n * points { id { id: \"Xb8M8INv9bo\" } }\n * points { id { id: \"B8pNtE3frX4\" } }\n * points { id { id: \"a78CkdKl7gk\" } }\n * points { id { id: \"Xb8M8INv9bo\" } }\n * }\n */\n id:\n | Id\n | undefined;\n /** Optional human-readable name for this point. */\n name: string;\n}\n\nexport interface LineString {\n points: Point[];\n}\n\n/** An A-B segment, typically indicating a ray, a line, or a heading. */\nexport interface AbLine {\n /** The start of the line. */\n a:\n | Point\n | undefined;\n /** The end of the line. */\n b: Point | undefined;\n}\n\n/**\n * A region on the earth, which has an exterior boundary and possible some\n * interior holes. The exterior boundary must be wound counterclockwise and\n * each hole must be wound clockwise.\n */\nexport interface Polygon {\n boundary: PolygonRing | undefined;\n holes: PolygonRing[];\n}\n\n/**\n * A linear ring on the boundary of the polygon, forming an exterior boundary\n * or interior hole. The ring must contain at least four points, and the first\n * and last points must be identical.\n */\nexport interface PolygonRing {\n points: Point[];\n}\n\n/** A union of disjoint `Polygon`s. */\nexport interface MultiPolygon {\n polygons: Polygon[];\n}\n\nfunction createBaseCaptureInfo(): CaptureInfo {\n return { fixType: 0, captureTime: undefined };\n}\n\nexport const CaptureInfo: MessageFns = {\n encode(message: CaptureInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.fixType !== 0) {\n writer.uint32(8).int32(message.fixType);\n }\n if (message.captureTime !== undefined) {\n Timestamp.encode(toTimestamp(message.captureTime), writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CaptureInfo {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCaptureInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.fixType = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.captureTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CaptureInfo {\n return {\n fixType: isSet(object.fixType) ? fixTypeFromJSON(object.fixType) : 0,\n captureTime: isSet(object.captureTime) ? globalThis.String(object.captureTime) : undefined,\n };\n },\n\n toJSON(message: CaptureInfo): unknown {\n const obj: any = {};\n if (message.fixType !== 0) {\n obj.fixType = fixTypeToJSON(message.fixType);\n }\n if (message.captureTime !== undefined) {\n obj.captureTime = message.captureTime;\n }\n return obj;\n },\n\n create, I>>(base?: I): CaptureInfo {\n return CaptureInfo.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CaptureInfo {\n const message = createBaseCaptureInfo();\n message.fixType = object.fixType ?? 0;\n message.captureTime = object.captureTime ?? undefined;\n return message;\n },\n};\n\nfunction createBaseId(): Id {\n return { id: \"\" };\n}\n\nexport const Id: MessageFns = {\n encode(message: Id, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Id {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseId();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Id {\n return { id: isSet(object.id) ? globalThis.String(object.id) : \"\" };\n },\n\n toJSON(message: Id): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n return obj;\n },\n\n create, I>>(base?: I): Id {\n return Id.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Id {\n const message = createBaseId();\n message.id = object.id ?? \"\";\n return message;\n },\n};\n\nfunction createBasePoint(): Point {\n return { lng: 0, lat: 0, alt: 0, captureInfo: undefined, id: undefined, name: \"\" };\n}\n\nexport const Point: MessageFns = {\n encode(message: Point, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.lng !== 0) {\n writer.uint32(9).double(message.lng);\n }\n if (message.lat !== 0) {\n writer.uint32(17).double(message.lat);\n }\n if (message.alt !== 0) {\n writer.uint32(25).double(message.alt);\n }\n if (message.captureInfo !== undefined) {\n CaptureInfo.encode(message.captureInfo, writer.uint32(34).fork()).join();\n }\n if (message.id !== undefined) {\n Id.encode(message.id, writer.uint32(42).fork()).join();\n }\n if (message.name !== \"\") {\n writer.uint32(50).string(message.name);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Point {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePoint();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.lng = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.lat = reader.double();\n continue;\n case 3:\n if (tag !== 25) {\n break;\n }\n\n message.alt = reader.double();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.captureInfo = CaptureInfo.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.id = Id.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.name = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Point {\n return {\n lng: isSet(object.lng) ? globalThis.Number(object.lng) : 0,\n lat: isSet(object.lat) ? globalThis.Number(object.lat) : 0,\n alt: isSet(object.alt) ? globalThis.Number(object.alt) : 0,\n captureInfo: isSet(object.captureInfo) ? CaptureInfo.fromJSON(object.captureInfo) : undefined,\n id: isSet(object.id) ? Id.fromJSON(object.id) : undefined,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n };\n },\n\n toJSON(message: Point): unknown {\n const obj: any = {};\n if (message.lng !== 0) {\n obj.lng = message.lng;\n }\n if (message.lat !== 0) {\n obj.lat = message.lat;\n }\n if (message.alt !== 0) {\n obj.alt = message.alt;\n }\n if (message.captureInfo !== undefined) {\n obj.captureInfo = CaptureInfo.toJSON(message.captureInfo);\n }\n if (message.id !== undefined) {\n obj.id = Id.toJSON(message.id);\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n return obj;\n },\n\n create, I>>(base?: I): Point {\n return Point.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Point {\n const message = createBasePoint();\n message.lng = object.lng ?? 0;\n message.lat = object.lat ?? 0;\n message.alt = object.alt ?? 0;\n message.captureInfo = (object.captureInfo !== undefined && object.captureInfo !== null)\n ? CaptureInfo.fromPartial(object.captureInfo)\n : undefined;\n message.id = (object.id !== undefined && object.id !== null) ? Id.fromPartial(object.id) : undefined;\n message.name = object.name ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLineString(): LineString {\n return { points: [] };\n}\n\nexport const LineString: MessageFns = {\n encode(message: LineString, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.points) {\n Point.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LineString {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLineString();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.points.push(Point.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LineString {\n return { points: globalThis.Array.isArray(object?.points) ? object.points.map((e: any) => Point.fromJSON(e)) : [] };\n },\n\n toJSON(message: LineString): unknown {\n const obj: any = {};\n if (message.points?.length) {\n obj.points = message.points.map((e) => Point.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): LineString {\n return LineString.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LineString {\n const message = createBaseLineString();\n message.points = object.points?.map((e) => Point.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseAbLine(): AbLine {\n return { a: undefined, b: undefined };\n}\n\nexport const AbLine: MessageFns = {\n encode(message: AbLine, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.a !== undefined) {\n Point.encode(message.a, writer.uint32(10).fork()).join();\n }\n if (message.b !== undefined) {\n Point.encode(message.b, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AbLine {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAbLine();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.a = Point.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.b = Point.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AbLine {\n return {\n a: isSet(object.a) ? Point.fromJSON(object.a) : undefined,\n b: isSet(object.b) ? Point.fromJSON(object.b) : undefined,\n };\n },\n\n toJSON(message: AbLine): unknown {\n const obj: any = {};\n if (message.a !== undefined) {\n obj.a = Point.toJSON(message.a);\n }\n if (message.b !== undefined) {\n obj.b = Point.toJSON(message.b);\n }\n return obj;\n },\n\n create, I>>(base?: I): AbLine {\n return AbLine.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AbLine {\n const message = createBaseAbLine();\n message.a = (object.a !== undefined && object.a !== null) ? Point.fromPartial(object.a) : undefined;\n message.b = (object.b !== undefined && object.b !== null) ? Point.fromPartial(object.b) : undefined;\n return message;\n },\n};\n\nfunction createBasePolygon(): Polygon {\n return { boundary: undefined, holes: [] };\n}\n\nexport const Polygon: MessageFns = {\n encode(message: Polygon, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.boundary !== undefined) {\n PolygonRing.encode(message.boundary, writer.uint32(10).fork()).join();\n }\n for (const v of message.holes) {\n PolygonRing.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Polygon {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePolygon();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.boundary = PolygonRing.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.holes.push(PolygonRing.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Polygon {\n return {\n boundary: isSet(object.boundary) ? PolygonRing.fromJSON(object.boundary) : undefined,\n holes: globalThis.Array.isArray(object?.holes) ? object.holes.map((e: any) => PolygonRing.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: Polygon): unknown {\n const obj: any = {};\n if (message.boundary !== undefined) {\n obj.boundary = PolygonRing.toJSON(message.boundary);\n }\n if (message.holes?.length) {\n obj.holes = message.holes.map((e) => PolygonRing.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): Polygon {\n return Polygon.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Polygon {\n const message = createBasePolygon();\n message.boundary = (object.boundary !== undefined && object.boundary !== null)\n ? PolygonRing.fromPartial(object.boundary)\n : undefined;\n message.holes = object.holes?.map((e) => PolygonRing.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBasePolygonRing(): PolygonRing {\n return { points: [] };\n}\n\nexport const PolygonRing: MessageFns = {\n encode(message: PolygonRing, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.points) {\n Point.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PolygonRing {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePolygonRing();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.points.push(Point.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PolygonRing {\n return { points: globalThis.Array.isArray(object?.points) ? object.points.map((e: any) => Point.fromJSON(e)) : [] };\n },\n\n toJSON(message: PolygonRing): unknown {\n const obj: any = {};\n if (message.points?.length) {\n obj.points = message.points.map((e) => Point.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): PolygonRing {\n return PolygonRing.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PolygonRing {\n const message = createBasePolygonRing();\n message.points = object.points?.map((e) => Point.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseMultiPolygon(): MultiPolygon {\n return { polygons: [] };\n}\n\nexport const MultiPolygon: MessageFns = {\n encode(message: MultiPolygon, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.polygons) {\n Polygon.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MultiPolygon {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMultiPolygon();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.polygons.push(Polygon.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MultiPolygon {\n return {\n polygons: globalThis.Array.isArray(object?.polygons) ? object.polygons.map((e: any) => Polygon.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: MultiPolygon): unknown {\n const obj: any = {};\n if (message.polygons?.length) {\n obj.polygons = message.polygons.map((e) => Polygon.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): MultiPolygon {\n return MultiPolygon.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): MultiPolygon {\n const message = createBaseMultiPolygon();\n message.polygons = object.polygons?.map((e) => Polygon.fromPartial(e)) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction toTimestamp(dateStr: string): Timestamp {\n const date = new globalThis.Date(dateStr);\n const seconds = Math.trunc(date.getTime() / 1_000);\n const nanos = (date.getTime() % 1_000) * 1_000_000;\n return { seconds, nanos };\n}\n\nfunction fromTimestamp(t: Timestamp): string {\n let millis = (t.seconds || 0) * 1_000;\n millis += (t.nanos || 0) / 1_000_000;\n return new globalThis.Date(millis).toISOString();\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: google/protobuf/duration.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"google.protobuf\";\n\n/**\n * A Duration represents a signed, fixed-length span of time represented\n * as a count of seconds and fractions of seconds at nanosecond\n * resolution. It is independent of any calendar and concepts like \"day\"\n * or \"month\". It is related to Timestamp in that the difference between\n * two Timestamp values is a Duration and it can be added or subtracted\n * from a Timestamp. Range is approximately +-10,000 years.\n *\n * # Examples\n *\n * Example 1: Compute Duration from two Timestamps in pseudo code.\n *\n * Timestamp start = ...;\n * Timestamp end = ...;\n * Duration duration = ...;\n *\n * duration.seconds = end.seconds - start.seconds;\n * duration.nanos = end.nanos - start.nanos;\n *\n * if (duration.seconds < 0 && duration.nanos > 0) {\n * duration.seconds += 1;\n * duration.nanos -= 1000000000;\n * } else if (duration.seconds > 0 && duration.nanos < 0) {\n * duration.seconds -= 1;\n * duration.nanos += 1000000000;\n * }\n *\n * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n *\n * Timestamp start = ...;\n * Duration duration = ...;\n * Timestamp end = ...;\n *\n * end.seconds = start.seconds + duration.seconds;\n * end.nanos = start.nanos + duration.nanos;\n *\n * if (end.nanos < 0) {\n * end.seconds -= 1;\n * end.nanos += 1000000000;\n * } else if (end.nanos >= 1000000000) {\n * end.seconds += 1;\n * end.nanos -= 1000000000;\n * }\n *\n * Example 3: Compute Duration from datetime.timedelta in Python.\n *\n * td = datetime.timedelta(days=3, minutes=10)\n * duration = Duration()\n * duration.FromTimedelta(td)\n *\n * # JSON Mapping\n *\n * In JSON format, the Duration type is encoded as a string rather than an\n * object, where the string ends in the suffix \"s\" (indicating seconds) and\n * is preceded by the number of seconds, with nanoseconds expressed as\n * fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n * encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n * be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n * microsecond should be expressed in JSON format as \"3.000001s\".\n */\nexport interface Duration {\n /**\n * Signed seconds of the span of time. Must be from -315,576,000,000\n * to +315,576,000,000 inclusive. Note: these bounds are computed from:\n * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n */\n seconds: number;\n /**\n * Signed fractions of a second at nanosecond resolution of the span\n * of time. Durations less than one second are represented with a 0\n * `seconds` field and a positive or negative `nanos` field. For durations\n * of one second or more, a non-zero value for the `nanos` field must be\n * of the same sign as the `seconds` field. Must be from -999,999,999\n * to +999,999,999 inclusive.\n */\n nanos: number;\n}\n\nfunction createBaseDuration(): Duration {\n return { seconds: 0, nanos: 0 };\n}\n\nexport const Duration: MessageFns = {\n encode(message: Duration, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.seconds !== 0) {\n writer.uint32(8).int64(message.seconds);\n }\n if (message.nanos !== 0) {\n writer.uint32(16).int32(message.nanos);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Duration {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDuration();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.seconds = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.nanos = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Duration {\n return {\n seconds: isSet(object.seconds) ? globalThis.Number(object.seconds) : 0,\n nanos: isSet(object.nanos) ? globalThis.Number(object.nanos) : 0,\n };\n },\n\n toJSON(message: Duration): unknown {\n const obj: any = {};\n if (message.seconds !== 0) {\n obj.seconds = Math.round(message.seconds);\n }\n if (message.nanos !== 0) {\n obj.nanos = Math.round(message.nanos);\n }\n return obj;\n },\n\n create, I>>(base?: I): Duration {\n return Duration.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Duration {\n const message = createBaseDuration();\n message.seconds = object.seconds ?? 0;\n message.nanos = object.nanos ?? 0;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: google/protobuf/empty.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"google.protobuf\";\n\n/**\n * A generic empty message that you can re-use to avoid defining duplicated\n * empty messages in your APIs. A typical example is to use it as the request\n * or the response type of an API method. For instance:\n *\n * service Foo {\n * rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n * }\n */\nexport interface Empty {\n}\n\nfunction createBaseEmpty(): Empty {\n return {};\n}\n\nexport const Empty: MessageFns = {\n encode(_: Empty, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Empty {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseEmpty();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): Empty {\n return {};\n },\n\n toJSON(_: Empty): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): Empty {\n return Empty.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): Empty {\n const message = createBaseEmpty();\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: rtc/jobs.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { LineString, Point } from \"../geo/geo\";\nimport { Duration } from \"../google/protobuf/duration\";\nimport { Empty } from \"../google/protobuf/empty\";\nimport { Timestamp } from \"../google/protobuf/timestamp\";\n\nexport const protobufPackage = \"carbon.rtc\";\n\n/** Task API */\nexport interface Task {\n id: number;\n name: string;\n startedAt: string | undefined;\n endedAt: string | undefined;\n expectedDuration: Duration | undefined;\n statusInfo: string;\n expectedTractorState: TractorState[];\n state: Task_TaskState;\n /** core structural task types */\n sequence?: SequenceTask | undefined;\n manual?:\n | ManualTask\n | undefined;\n /** tasks with specific automations available */\n goToAndFace?: GoToAndFaceTask | undefined;\n followPath?: FollowPathTask | undefined;\n tractorState?: SetTractorStateTask | undefined;\n}\n\nexport enum Task_TaskState {\n TASK_STATE_UNSPECIFIED = 0,\n PENDING = 1,\n IN_PROGRESS = 2,\n COMPLETED = 3,\n CANCELLED = 4,\n UNRECOGNIZED = -1,\n}\n\nexport function task_TaskStateFromJSON(object: any): Task_TaskState {\n switch (object) {\n case 0:\n case \"TASK_STATE_UNSPECIFIED\":\n return Task_TaskState.TASK_STATE_UNSPECIFIED;\n case 1:\n case \"PENDING\":\n return Task_TaskState.PENDING;\n case 2:\n case \"IN_PROGRESS\":\n return Task_TaskState.IN_PROGRESS;\n case 3:\n case \"COMPLETED\":\n return Task_TaskState.COMPLETED;\n case 4:\n case \"CANCELLED\":\n return Task_TaskState.CANCELLED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return Task_TaskState.UNRECOGNIZED;\n }\n}\n\nexport function task_TaskStateToJSON(object: Task_TaskState): string {\n switch (object) {\n case Task_TaskState.TASK_STATE_UNSPECIFIED:\n return \"TASK_STATE_UNSPECIFIED\";\n case Task_TaskState.PENDING:\n return \"PENDING\";\n case Task_TaskState.IN_PROGRESS:\n return \"IN_PROGRESS\";\n case Task_TaskState.COMPLETED:\n return \"COMPLETED\";\n case Task_TaskState.CANCELLED:\n return \"CANCELLED\";\n case Task_TaskState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\n/**\n * A `SequenceTask` requires completing all of its child tasks, in order, with\n * no overlap in time.\n */\nexport interface SequenceTask {\n items: Task[];\n}\n\n/**\n * A `ManualTask` can only be completed by a human and will always require an\n * intervention request.\n */\nexport interface ManualTask {\n instructions: string;\n}\n\n/**\n * A `GoToAndFaceTask` requires that the robot move to a particular position\n * and face in a particular direction. For example, this might be used to line\n * up at the start of a row.\n */\nexport interface GoToAndFaceTask {\n point: Point | undefined;\n heading: number;\n}\n\nexport interface FollowPathTask {\n path: LineString | undefined;\n speed: SpeedSetting | undefined;\n stopOnCompletion: boolean;\n}\n\nexport interface SpeedSetting {\n constantMph?: number | undefined;\n remoteOperatorControlled?: Empty | undefined;\n implementControlled?: Empty | undefined;\n}\n\nexport interface SetTractorStateTask {\n state: TractorState[];\n}\n\nexport interface TractorState {\n gear?: TractorState_Gear | undefined;\n hitch?: HitchState | undefined;\n}\n\nexport enum TractorState_Gear {\n GEAR_UNSPECIFIED = 0,\n PARK = 1,\n REVERSE = 2,\n NEUTRAL = 3,\n FORWARD = 4,\n POWERZERO = 5,\n UNRECOGNIZED = -1,\n}\n\nexport function tractorState_GearFromJSON(object: any): TractorState_Gear {\n switch (object) {\n case 0:\n case \"GEAR_UNSPECIFIED\":\n return TractorState_Gear.GEAR_UNSPECIFIED;\n case 1:\n case \"PARK\":\n return TractorState_Gear.PARK;\n case 2:\n case \"REVERSE\":\n return TractorState_Gear.REVERSE;\n case 3:\n case \"NEUTRAL\":\n return TractorState_Gear.NEUTRAL;\n case 4:\n case \"FORWARD\":\n return TractorState_Gear.FORWARD;\n case 5:\n case \"POWERZERO\":\n return TractorState_Gear.POWERZERO;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return TractorState_Gear.UNRECOGNIZED;\n }\n}\n\nexport function tractorState_GearToJSON(object: TractorState_Gear): string {\n switch (object) {\n case TractorState_Gear.GEAR_UNSPECIFIED:\n return \"GEAR_UNSPECIFIED\";\n case TractorState_Gear.PARK:\n return \"PARK\";\n case TractorState_Gear.REVERSE:\n return \"REVERSE\";\n case TractorState_Gear.NEUTRAL:\n return \"NEUTRAL\";\n case TractorState_Gear.FORWARD:\n return \"FORWARD\";\n case TractorState_Gear.POWERZERO:\n return \"POWERZERO\";\n case TractorState_Gear.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface HitchState {\n command?:\n | HitchState_HitchCommand\n | undefined;\n /** Target position, between 0.0 (fully lowered) and 1.0 (fully raised). */\n position?: number | undefined;\n}\n\nexport enum HitchState_HitchCommand {\n HITCH_COMMAND_UNSPECIFIED = 0,\n RAISED = 1,\n LOWERED = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function hitchState_HitchCommandFromJSON(object: any): HitchState_HitchCommand {\n switch (object) {\n case 0:\n case \"HITCH_COMMAND_UNSPECIFIED\":\n return HitchState_HitchCommand.HITCH_COMMAND_UNSPECIFIED;\n case 1:\n case \"RAISED\":\n return HitchState_HitchCommand.RAISED;\n case 2:\n case \"LOWERED\":\n return HitchState_HitchCommand.LOWERED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return HitchState_HitchCommand.UNRECOGNIZED;\n }\n}\n\nexport function hitchState_HitchCommandToJSON(object: HitchState_HitchCommand): string {\n switch (object) {\n case HitchState_HitchCommand.HITCH_COMMAND_UNSPECIFIED:\n return \"HITCH_COMMAND_UNSPECIFIED\";\n case HitchState_HitchCommand.RAISED:\n return \"RAISED\";\n case HitchState_HitchCommand.LOWERED:\n return \"LOWERED\";\n case HitchState_HitchCommand.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface GetTaskRequest {\n id: number;\n}\n\nexport interface CreateTaskRequest {\n task: Task | undefined;\n}\n\nexport interface InsertTaskRequest {\n parentTaskId: number;\n precedingTaskId: number;\n task: Task | undefined;\n}\n\nexport interface UpdateTaskRequest {\n task: Task | undefined;\n}\n\nexport interface DeleteTaskRequest {\n id: number;\n}\n\n/** TODO:(smt) query filters */\nexport interface ListTasksRequest {\n}\n\nexport interface TaskList {\n tasks: Task[];\n}\n\n/** Jobs API */\nexport interface Job {\n id: number;\n name: string;\n startedAt: string | undefined;\n endedAt: string | undefined;\n task: Task | undefined;\n state: Job_JobState;\n robot: string;\n workOrderId?:\n | number\n | undefined;\n /** Farm ID per Portal, typically a 12-character alphanumeric string. */\n farmId: string;\n /** Customer ID per Portal, typically a UUID. */\n customerId: string;\n}\n\nexport enum Job_JobState {\n JOB_STATE_UNSPECIFIED = 0,\n PENDING = 1,\n IN_PROGRESS = 2,\n PAUSED = 3,\n COMPLETED = 4,\n CANCELLED = 5,\n UNRECOGNIZED = -1,\n}\n\nexport function job_JobStateFromJSON(object: any): Job_JobState {\n switch (object) {\n case 0:\n case \"JOB_STATE_UNSPECIFIED\":\n return Job_JobState.JOB_STATE_UNSPECIFIED;\n case 1:\n case \"PENDING\":\n return Job_JobState.PENDING;\n case 2:\n case \"IN_PROGRESS\":\n return Job_JobState.IN_PROGRESS;\n case 3:\n case \"PAUSED\":\n return Job_JobState.PAUSED;\n case 4:\n case \"COMPLETED\":\n return Job_JobState.COMPLETED;\n case 5:\n case \"CANCELLED\":\n return Job_JobState.CANCELLED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return Job_JobState.UNRECOGNIZED;\n }\n}\n\nexport function job_JobStateToJSON(object: Job_JobState): string {\n switch (object) {\n case Job_JobState.JOB_STATE_UNSPECIFIED:\n return \"JOB_STATE_UNSPECIFIED\";\n case Job_JobState.PENDING:\n return \"PENDING\";\n case Job_JobState.IN_PROGRESS:\n return \"IN_PROGRESS\";\n case Job_JobState.PAUSED:\n return \"PAUSED\";\n case Job_JobState.COMPLETED:\n return \"COMPLETED\";\n case Job_JobState.CANCELLED:\n return \"CANCELLED\";\n case Job_JobState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface GetJobRequest {\n id: number;\n}\n\nexport interface CreateJobRequest {\n job: Job | undefined;\n}\n\nexport interface UpdateJobRequest {\n job: Job | undefined;\n}\n\nexport interface DeleteJobRequest {\n id: number;\n}\n\n/** TODO:(smt) query filters */\nexport interface ListJobsRequest {\n}\n\nexport interface JobList {\n jobs: Job[];\n}\n\n/** Work Orders APIs */\nexport interface WorkOrder {\n id: number;\n name: string;\n scheduledAt: string | undefined;\n duration: Duration | undefined;\n jobs: Job[];\n state: WorkOrder_WorkOrderState;\n}\n\nexport enum WorkOrder_WorkOrderState {\n WORK_ORDER_STATE_UNSPECIFIED = 0,\n PENDING = 1,\n IN_PROGRESS = 2,\n COMPLETED = 3,\n CANCELLED = 4,\n UNRECOGNIZED = -1,\n}\n\nexport function workOrder_WorkOrderStateFromJSON(object: any): WorkOrder_WorkOrderState {\n switch (object) {\n case 0:\n case \"WORK_ORDER_STATE_UNSPECIFIED\":\n return WorkOrder_WorkOrderState.WORK_ORDER_STATE_UNSPECIFIED;\n case 1:\n case \"PENDING\":\n return WorkOrder_WorkOrderState.PENDING;\n case 2:\n case \"IN_PROGRESS\":\n return WorkOrder_WorkOrderState.IN_PROGRESS;\n case 3:\n case \"COMPLETED\":\n return WorkOrder_WorkOrderState.COMPLETED;\n case 4:\n case \"CANCELLED\":\n return WorkOrder_WorkOrderState.CANCELLED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return WorkOrder_WorkOrderState.UNRECOGNIZED;\n }\n}\n\nexport function workOrder_WorkOrderStateToJSON(object: WorkOrder_WorkOrderState): string {\n switch (object) {\n case WorkOrder_WorkOrderState.WORK_ORDER_STATE_UNSPECIFIED:\n return \"WORK_ORDER_STATE_UNSPECIFIED\";\n case WorkOrder_WorkOrderState.PENDING:\n return \"PENDING\";\n case WorkOrder_WorkOrderState.IN_PROGRESS:\n return \"IN_PROGRESS\";\n case WorkOrder_WorkOrderState.COMPLETED:\n return \"COMPLETED\";\n case WorkOrder_WorkOrderState.CANCELLED:\n return \"CANCELLED\";\n case WorkOrder_WorkOrderState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface GetWorkOrderRequest {\n id: number;\n}\n\nexport interface CreateWorkOrderRequest {\n workOrder: WorkOrder | undefined;\n}\n\nexport interface WorkOrderAddJobsRequest {\n workOrderId: number;\n jobId: number[];\n}\n\nexport interface WorkOrderRemoveJobsRequest {\n workOrderId: number;\n jobId: number[];\n}\n\nexport interface UpdateWorkOrderRequest {\n workOrder: WorkOrder | undefined;\n}\n\nexport interface DeleteWorkOrderRequest {\n id: number;\n}\n\n/** TODO:(smt) query filters */\nexport interface ListWorkOrdersRequest {\n}\n\nexport interface WorkOrderList {\n workOrders: WorkOrder[];\n}\n\n/** Intervention APIs */\nexport interface Intervention {\n id: number;\n taskId: number;\n qualification: string;\n description: string;\n state: Intervention_InterventionState;\n robotSerial: string;\n jobId: number;\n cause: Intervention_InterventionCause;\n}\n\nexport enum Intervention_InterventionState {\n INTERVENTION_STATE_UNSPECIFIED = 0,\n NEW = 1,\n ACKNOWLEDGED = 2,\n IN_PROGRESS = 3,\n COMPLETED = 4,\n CANCELLED = 5,\n FAILED = 6,\n UNRECOGNIZED = -1,\n}\n\nexport function intervention_InterventionStateFromJSON(object: any): Intervention_InterventionState {\n switch (object) {\n case 0:\n case \"INTERVENTION_STATE_UNSPECIFIED\":\n return Intervention_InterventionState.INTERVENTION_STATE_UNSPECIFIED;\n case 1:\n case \"NEW\":\n return Intervention_InterventionState.NEW;\n case 2:\n case \"ACKNOWLEDGED\":\n return Intervention_InterventionState.ACKNOWLEDGED;\n case 3:\n case \"IN_PROGRESS\":\n return Intervention_InterventionState.IN_PROGRESS;\n case 4:\n case \"COMPLETED\":\n return Intervention_InterventionState.COMPLETED;\n case 5:\n case \"CANCELLED\":\n return Intervention_InterventionState.CANCELLED;\n case 6:\n case \"FAILED\":\n return Intervention_InterventionState.FAILED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return Intervention_InterventionState.UNRECOGNIZED;\n }\n}\n\nexport function intervention_InterventionStateToJSON(object: Intervention_InterventionState): string {\n switch (object) {\n case Intervention_InterventionState.INTERVENTION_STATE_UNSPECIFIED:\n return \"INTERVENTION_STATE_UNSPECIFIED\";\n case Intervention_InterventionState.NEW:\n return \"NEW\";\n case Intervention_InterventionState.ACKNOWLEDGED:\n return \"ACKNOWLEDGED\";\n case Intervention_InterventionState.IN_PROGRESS:\n return \"IN_PROGRESS\";\n case Intervention_InterventionState.COMPLETED:\n return \"COMPLETED\";\n case Intervention_InterventionState.CANCELLED:\n return \"CANCELLED\";\n case Intervention_InterventionState.FAILED:\n return \"FAILED\";\n case Intervention_InterventionState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum Intervention_InterventionCause {\n INTERVENTION_CAUSE_UNSPECIFIED = 0,\n SENSOR_TRIGGERED = 1,\n SAFETY_DRIVER_ACTION = 2,\n TRACTOR_REQUEST = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function intervention_InterventionCauseFromJSON(object: any): Intervention_InterventionCause {\n switch (object) {\n case 0:\n case \"INTERVENTION_CAUSE_UNSPECIFIED\":\n return Intervention_InterventionCause.INTERVENTION_CAUSE_UNSPECIFIED;\n case 1:\n case \"SENSOR_TRIGGERED\":\n return Intervention_InterventionCause.SENSOR_TRIGGERED;\n case 2:\n case \"SAFETY_DRIVER_ACTION\":\n return Intervention_InterventionCause.SAFETY_DRIVER_ACTION;\n case 3:\n case \"TRACTOR_REQUEST\":\n return Intervention_InterventionCause.TRACTOR_REQUEST;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return Intervention_InterventionCause.UNRECOGNIZED;\n }\n}\n\nexport function intervention_InterventionCauseToJSON(object: Intervention_InterventionCause): string {\n switch (object) {\n case Intervention_InterventionCause.INTERVENTION_CAUSE_UNSPECIFIED:\n return \"INTERVENTION_CAUSE_UNSPECIFIED\";\n case Intervention_InterventionCause.SENSOR_TRIGGERED:\n return \"SENSOR_TRIGGERED\";\n case Intervention_InterventionCause.SAFETY_DRIVER_ACTION:\n return \"SAFETY_DRIVER_ACTION\";\n case Intervention_InterventionCause.TRACTOR_REQUEST:\n return \"TRACTOR_REQUEST\";\n case Intervention_InterventionCause.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface CreateInterventionRequest {\n intervention: Intervention | undefined;\n}\n\nexport interface AcknowledgeInterventionRequest {\n intervention: Intervention | undefined;\n}\n\nexport interface CompleteInterventionRequest {\n state: CompleteInterventionRequest_CompletionState;\n intervention: Intervention | undefined;\n}\n\nexport enum CompleteInterventionRequest_CompletionState {\n COMPLETION_STATE_UNSPECIFIED = 0,\n COMPLETE = 1,\n CANCELLED = 2,\n FAILED = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function completeInterventionRequest_CompletionStateFromJSON(\n object: any,\n): CompleteInterventionRequest_CompletionState {\n switch (object) {\n case 0:\n case \"COMPLETION_STATE_UNSPECIFIED\":\n return CompleteInterventionRequest_CompletionState.COMPLETION_STATE_UNSPECIFIED;\n case 1:\n case \"COMPLETE\":\n return CompleteInterventionRequest_CompletionState.COMPLETE;\n case 2:\n case \"CANCELLED\":\n return CompleteInterventionRequest_CompletionState.CANCELLED;\n case 3:\n case \"FAILED\":\n return CompleteInterventionRequest_CompletionState.FAILED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return CompleteInterventionRequest_CompletionState.UNRECOGNIZED;\n }\n}\n\nexport function completeInterventionRequest_CompletionStateToJSON(\n object: CompleteInterventionRequest_CompletionState,\n): string {\n switch (object) {\n case CompleteInterventionRequest_CompletionState.COMPLETION_STATE_UNSPECIFIED:\n return \"COMPLETION_STATE_UNSPECIFIED\";\n case CompleteInterventionRequest_CompletionState.COMPLETE:\n return \"COMPLETE\";\n case CompleteInterventionRequest_CompletionState.CANCELLED:\n return \"CANCELLED\";\n case CompleteInterventionRequest_CompletionState.FAILED:\n return \"FAILED\";\n case CompleteInterventionRequest_CompletionState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface SubscriptionRequest {\n}\n\nexport interface SubscriptionResponse {\n intervention?: Intervention | undefined;\n}\n\nfunction createBaseTask(): Task {\n return {\n id: 0,\n name: \"\",\n startedAt: undefined,\n endedAt: undefined,\n expectedDuration: undefined,\n statusInfo: \"\",\n expectedTractorState: [],\n state: 0,\n sequence: undefined,\n manual: undefined,\n goToAndFace: undefined,\n followPath: undefined,\n tractorState: undefined,\n };\n}\n\nexport const Task: MessageFns = {\n encode(message: Task, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.startedAt !== undefined) {\n Timestamp.encode(toTimestamp(message.startedAt), writer.uint32(26).fork()).join();\n }\n if (message.endedAt !== undefined) {\n Timestamp.encode(toTimestamp(message.endedAt), writer.uint32(34).fork()).join();\n }\n if (message.expectedDuration !== undefined) {\n Duration.encode(message.expectedDuration, writer.uint32(42).fork()).join();\n }\n if (message.statusInfo !== \"\") {\n writer.uint32(50).string(message.statusInfo);\n }\n for (const v of message.expectedTractorState) {\n TractorState.encode(v!, writer.uint32(58).fork()).join();\n }\n if (message.state !== 0) {\n writer.uint32(64).int32(message.state);\n }\n if (message.sequence !== undefined) {\n SequenceTask.encode(message.sequence, writer.uint32(74).fork()).join();\n }\n if (message.manual !== undefined) {\n ManualTask.encode(message.manual, writer.uint32(82).fork()).join();\n }\n if (message.goToAndFace !== undefined) {\n GoToAndFaceTask.encode(message.goToAndFace, writer.uint32(90).fork()).join();\n }\n if (message.followPath !== undefined) {\n FollowPathTask.encode(message.followPath, writer.uint32(98).fork()).join();\n }\n if (message.tractorState !== undefined) {\n SetTractorStateTask.encode(message.tractorState, writer.uint32(106).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Task {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.startedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.endedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.expectedDuration = Duration.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.statusInfo = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.expectedTractorState.push(TractorState.decode(reader, reader.uint32()));\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.state = reader.int32() as any;\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.sequence = SequenceTask.decode(reader, reader.uint32());\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.manual = ManualTask.decode(reader, reader.uint32());\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.goToAndFace = GoToAndFaceTask.decode(reader, reader.uint32());\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.followPath = FollowPathTask.decode(reader, reader.uint32());\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.tractorState = SetTractorStateTask.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Task {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n startedAt: isSet(object.startedAt) ? globalThis.String(object.startedAt) : undefined,\n endedAt: isSet(object.endedAt) ? globalThis.String(object.endedAt) : undefined,\n expectedDuration: isSet(object.expectedDuration) ? Duration.fromJSON(object.expectedDuration) : undefined,\n statusInfo: isSet(object.statusInfo) ? globalThis.String(object.statusInfo) : \"\",\n expectedTractorState: globalThis.Array.isArray(object?.expectedTractorState)\n ? object.expectedTractorState.map((e: any) => TractorState.fromJSON(e))\n : [],\n state: isSet(object.state) ? task_TaskStateFromJSON(object.state) : 0,\n sequence: isSet(object.sequence) ? SequenceTask.fromJSON(object.sequence) : undefined,\n manual: isSet(object.manual) ? ManualTask.fromJSON(object.manual) : undefined,\n goToAndFace: isSet(object.goToAndFace) ? GoToAndFaceTask.fromJSON(object.goToAndFace) : undefined,\n followPath: isSet(object.followPath) ? FollowPathTask.fromJSON(object.followPath) : undefined,\n tractorState: isSet(object.tractorState) ? SetTractorStateTask.fromJSON(object.tractorState) : undefined,\n };\n },\n\n toJSON(message: Task): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.startedAt !== undefined) {\n obj.startedAt = message.startedAt;\n }\n if (message.endedAt !== undefined) {\n obj.endedAt = message.endedAt;\n }\n if (message.expectedDuration !== undefined) {\n obj.expectedDuration = Duration.toJSON(message.expectedDuration);\n }\n if (message.statusInfo !== \"\") {\n obj.statusInfo = message.statusInfo;\n }\n if (message.expectedTractorState?.length) {\n obj.expectedTractorState = message.expectedTractorState.map((e) => TractorState.toJSON(e));\n }\n if (message.state !== 0) {\n obj.state = task_TaskStateToJSON(message.state);\n }\n if (message.sequence !== undefined) {\n obj.sequence = SequenceTask.toJSON(message.sequence);\n }\n if (message.manual !== undefined) {\n obj.manual = ManualTask.toJSON(message.manual);\n }\n if (message.goToAndFace !== undefined) {\n obj.goToAndFace = GoToAndFaceTask.toJSON(message.goToAndFace);\n }\n if (message.followPath !== undefined) {\n obj.followPath = FollowPathTask.toJSON(message.followPath);\n }\n if (message.tractorState !== undefined) {\n obj.tractorState = SetTractorStateTask.toJSON(message.tractorState);\n }\n return obj;\n },\n\n create, I>>(base?: I): Task {\n return Task.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Task {\n const message = createBaseTask();\n message.id = object.id ?? 0;\n message.name = object.name ?? \"\";\n message.startedAt = object.startedAt ?? undefined;\n message.endedAt = object.endedAt ?? undefined;\n message.expectedDuration = (object.expectedDuration !== undefined && object.expectedDuration !== null)\n ? Duration.fromPartial(object.expectedDuration)\n : undefined;\n message.statusInfo = object.statusInfo ?? \"\";\n message.expectedTractorState = object.expectedTractorState?.map((e) => TractorState.fromPartial(e)) || [];\n message.state = object.state ?? 0;\n message.sequence = (object.sequence !== undefined && object.sequence !== null)\n ? SequenceTask.fromPartial(object.sequence)\n : undefined;\n message.manual = (object.manual !== undefined && object.manual !== null)\n ? ManualTask.fromPartial(object.manual)\n : undefined;\n message.goToAndFace = (object.goToAndFace !== undefined && object.goToAndFace !== null)\n ? GoToAndFaceTask.fromPartial(object.goToAndFace)\n : undefined;\n message.followPath = (object.followPath !== undefined && object.followPath !== null)\n ? FollowPathTask.fromPartial(object.followPath)\n : undefined;\n message.tractorState = (object.tractorState !== undefined && object.tractorState !== null)\n ? SetTractorStateTask.fromPartial(object.tractorState)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseSequenceTask(): SequenceTask {\n return { items: [] };\n}\n\nexport const SequenceTask: MessageFns = {\n encode(message: SequenceTask, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.items) {\n Task.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SequenceTask {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSequenceTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.items.push(Task.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SequenceTask {\n return { items: globalThis.Array.isArray(object?.items) ? object.items.map((e: any) => Task.fromJSON(e)) : [] };\n },\n\n toJSON(message: SequenceTask): unknown {\n const obj: any = {};\n if (message.items?.length) {\n obj.items = message.items.map((e) => Task.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): SequenceTask {\n return SequenceTask.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SequenceTask {\n const message = createBaseSequenceTask();\n message.items = object.items?.map((e) => Task.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseManualTask(): ManualTask {\n return { instructions: \"\" };\n}\n\nexport const ManualTask: MessageFns = {\n encode(message: ManualTask, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.instructions !== \"\") {\n writer.uint32(10).string(message.instructions);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ManualTask {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseManualTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.instructions = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ManualTask {\n return { instructions: isSet(object.instructions) ? globalThis.String(object.instructions) : \"\" };\n },\n\n toJSON(message: ManualTask): unknown {\n const obj: any = {};\n if (message.instructions !== \"\") {\n obj.instructions = message.instructions;\n }\n return obj;\n },\n\n create, I>>(base?: I): ManualTask {\n return ManualTask.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ManualTask {\n const message = createBaseManualTask();\n message.instructions = object.instructions ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGoToAndFaceTask(): GoToAndFaceTask {\n return { point: undefined, heading: 0 };\n}\n\nexport const GoToAndFaceTask: MessageFns = {\n encode(message: GoToAndFaceTask, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.point !== undefined) {\n Point.encode(message.point, writer.uint32(10).fork()).join();\n }\n if (message.heading !== 0) {\n writer.uint32(17).double(message.heading);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GoToAndFaceTask {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGoToAndFaceTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.point = Point.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.heading = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GoToAndFaceTask {\n return {\n point: isSet(object.point) ? Point.fromJSON(object.point) : undefined,\n heading: isSet(object.heading) ? globalThis.Number(object.heading) : 0,\n };\n },\n\n toJSON(message: GoToAndFaceTask): unknown {\n const obj: any = {};\n if (message.point !== undefined) {\n obj.point = Point.toJSON(message.point);\n }\n if (message.heading !== 0) {\n obj.heading = message.heading;\n }\n return obj;\n },\n\n create, I>>(base?: I): GoToAndFaceTask {\n return GoToAndFaceTask.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GoToAndFaceTask {\n const message = createBaseGoToAndFaceTask();\n message.point = (object.point !== undefined && object.point !== null) ? Point.fromPartial(object.point) : undefined;\n message.heading = object.heading ?? 0;\n return message;\n },\n};\n\nfunction createBaseFollowPathTask(): FollowPathTask {\n return { path: undefined, speed: undefined, stopOnCompletion: false };\n}\n\nexport const FollowPathTask: MessageFns = {\n encode(message: FollowPathTask, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.path !== undefined) {\n LineString.encode(message.path, writer.uint32(10).fork()).join();\n }\n if (message.speed !== undefined) {\n SpeedSetting.encode(message.speed, writer.uint32(18).fork()).join();\n }\n if (message.stopOnCompletion !== false) {\n writer.uint32(24).bool(message.stopOnCompletion);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FollowPathTask {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFollowPathTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = LineString.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.speed = SpeedSetting.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.stopOnCompletion = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FollowPathTask {\n return {\n path: isSet(object.path) ? LineString.fromJSON(object.path) : undefined,\n speed: isSet(object.speed) ? SpeedSetting.fromJSON(object.speed) : undefined,\n stopOnCompletion: isSet(object.stopOnCompletion) ? globalThis.Boolean(object.stopOnCompletion) : false,\n };\n },\n\n toJSON(message: FollowPathTask): unknown {\n const obj: any = {};\n if (message.path !== undefined) {\n obj.path = LineString.toJSON(message.path);\n }\n if (message.speed !== undefined) {\n obj.speed = SpeedSetting.toJSON(message.speed);\n }\n if (message.stopOnCompletion !== false) {\n obj.stopOnCompletion = message.stopOnCompletion;\n }\n return obj;\n },\n\n create, I>>(base?: I): FollowPathTask {\n return FollowPathTask.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FollowPathTask {\n const message = createBaseFollowPathTask();\n message.path = (object.path !== undefined && object.path !== null)\n ? LineString.fromPartial(object.path)\n : undefined;\n message.speed = (object.speed !== undefined && object.speed !== null)\n ? SpeedSetting.fromPartial(object.speed)\n : undefined;\n message.stopOnCompletion = object.stopOnCompletion ?? false;\n return message;\n },\n};\n\nfunction createBaseSpeedSetting(): SpeedSetting {\n return { constantMph: undefined, remoteOperatorControlled: undefined, implementControlled: undefined };\n}\n\nexport const SpeedSetting: MessageFns = {\n encode(message: SpeedSetting, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.constantMph !== undefined) {\n writer.uint32(9).double(message.constantMph);\n }\n if (message.remoteOperatorControlled !== undefined) {\n Empty.encode(message.remoteOperatorControlled, writer.uint32(18).fork()).join();\n }\n if (message.implementControlled !== undefined) {\n Empty.encode(message.implementControlled, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SpeedSetting {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSpeedSetting();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.constantMph = reader.double();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.remoteOperatorControlled = Empty.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.implementControlled = Empty.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SpeedSetting {\n return {\n constantMph: isSet(object.constantMph) ? globalThis.Number(object.constantMph) : undefined,\n remoteOperatorControlled: isSet(object.remoteOperatorControlled)\n ? Empty.fromJSON(object.remoteOperatorControlled)\n : undefined,\n implementControlled: isSet(object.implementControlled) ? Empty.fromJSON(object.implementControlled) : undefined,\n };\n },\n\n toJSON(message: SpeedSetting): unknown {\n const obj: any = {};\n if (message.constantMph !== undefined) {\n obj.constantMph = message.constantMph;\n }\n if (message.remoteOperatorControlled !== undefined) {\n obj.remoteOperatorControlled = Empty.toJSON(message.remoteOperatorControlled);\n }\n if (message.implementControlled !== undefined) {\n obj.implementControlled = Empty.toJSON(message.implementControlled);\n }\n return obj;\n },\n\n create, I>>(base?: I): SpeedSetting {\n return SpeedSetting.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SpeedSetting {\n const message = createBaseSpeedSetting();\n message.constantMph = object.constantMph ?? undefined;\n message.remoteOperatorControlled =\n (object.remoteOperatorControlled !== undefined && object.remoteOperatorControlled !== null)\n ? Empty.fromPartial(object.remoteOperatorControlled)\n : undefined;\n message.implementControlled = (object.implementControlled !== undefined && object.implementControlled !== null)\n ? Empty.fromPartial(object.implementControlled)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseSetTractorStateTask(): SetTractorStateTask {\n return { state: [] };\n}\n\nexport const SetTractorStateTask: MessageFns = {\n encode(message: SetTractorStateTask, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.state) {\n TractorState.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetTractorStateTask {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetTractorStateTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.state.push(TractorState.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetTractorStateTask {\n return {\n state: globalThis.Array.isArray(object?.state) ? object.state.map((e: any) => TractorState.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: SetTractorStateTask): unknown {\n const obj: any = {};\n if (message.state?.length) {\n obj.state = message.state.map((e) => TractorState.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): SetTractorStateTask {\n return SetTractorStateTask.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetTractorStateTask {\n const message = createBaseSetTractorStateTask();\n message.state = object.state?.map((e) => TractorState.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseTractorState(): TractorState {\n return { gear: undefined, hitch: undefined };\n}\n\nexport const TractorState: MessageFns = {\n encode(message: TractorState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.gear !== undefined) {\n writer.uint32(8).int32(message.gear);\n }\n if (message.hitch !== undefined) {\n HitchState.encode(message.hitch, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TractorState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTractorState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.gear = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.hitch = HitchState.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TractorState {\n return {\n gear: isSet(object.gear) ? tractorState_GearFromJSON(object.gear) : undefined,\n hitch: isSet(object.hitch) ? HitchState.fromJSON(object.hitch) : undefined,\n };\n },\n\n toJSON(message: TractorState): unknown {\n const obj: any = {};\n if (message.gear !== undefined) {\n obj.gear = tractorState_GearToJSON(message.gear);\n }\n if (message.hitch !== undefined) {\n obj.hitch = HitchState.toJSON(message.hitch);\n }\n return obj;\n },\n\n create, I>>(base?: I): TractorState {\n return TractorState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TractorState {\n const message = createBaseTractorState();\n message.gear = object.gear ?? undefined;\n message.hitch = (object.hitch !== undefined && object.hitch !== null)\n ? HitchState.fromPartial(object.hitch)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseHitchState(): HitchState {\n return { command: undefined, position: undefined };\n}\n\nexport const HitchState: MessageFns = {\n encode(message: HitchState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.command !== undefined) {\n writer.uint32(8).int32(message.command);\n }\n if (message.position !== undefined) {\n writer.uint32(17).double(message.position);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HitchState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHitchState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.command = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.position = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HitchState {\n return {\n command: isSet(object.command) ? hitchState_HitchCommandFromJSON(object.command) : undefined,\n position: isSet(object.position) ? globalThis.Number(object.position) : undefined,\n };\n },\n\n toJSON(message: HitchState): unknown {\n const obj: any = {};\n if (message.command !== undefined) {\n obj.command = hitchState_HitchCommandToJSON(message.command);\n }\n if (message.position !== undefined) {\n obj.position = message.position;\n }\n return obj;\n },\n\n create, I>>(base?: I): HitchState {\n return HitchState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): HitchState {\n const message = createBaseHitchState();\n message.command = object.command ?? undefined;\n message.position = object.position ?? undefined;\n return message;\n },\n};\n\nfunction createBaseGetTaskRequest(): GetTaskRequest {\n return { id: 0 };\n}\n\nexport const GetTaskRequest: MessageFns = {\n encode(message: GetTaskRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTaskRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTaskRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetTaskRequest {\n return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 };\n },\n\n toJSON(message: GetTaskRequest): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetTaskRequest {\n return GetTaskRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetTaskRequest {\n const message = createBaseGetTaskRequest();\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseCreateTaskRequest(): CreateTaskRequest {\n return { task: undefined };\n}\n\nexport const CreateTaskRequest: MessageFns = {\n encode(message: CreateTaskRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.task !== undefined) {\n Task.encode(message.task, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CreateTaskRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateTaskRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.task = Task.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CreateTaskRequest {\n return { task: isSet(object.task) ? Task.fromJSON(object.task) : undefined };\n },\n\n toJSON(message: CreateTaskRequest): unknown {\n const obj: any = {};\n if (message.task !== undefined) {\n obj.task = Task.toJSON(message.task);\n }\n return obj;\n },\n\n create, I>>(base?: I): CreateTaskRequest {\n return CreateTaskRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CreateTaskRequest {\n const message = createBaseCreateTaskRequest();\n message.task = (object.task !== undefined && object.task !== null) ? Task.fromPartial(object.task) : undefined;\n return message;\n },\n};\n\nfunction createBaseInsertTaskRequest(): InsertTaskRequest {\n return { parentTaskId: 0, precedingTaskId: 0, task: undefined };\n}\n\nexport const InsertTaskRequest: MessageFns = {\n encode(message: InsertTaskRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.parentTaskId !== 0) {\n writer.uint32(8).uint64(message.parentTaskId);\n }\n if (message.precedingTaskId !== 0) {\n writer.uint32(16).uint64(message.precedingTaskId);\n }\n if (message.task !== undefined) {\n Task.encode(message.task, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): InsertTaskRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInsertTaskRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.parentTaskId = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.precedingTaskId = longToNumber(reader.uint64());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.task = Task.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): InsertTaskRequest {\n return {\n parentTaskId: isSet(object.parentTaskId) ? globalThis.Number(object.parentTaskId) : 0,\n precedingTaskId: isSet(object.precedingTaskId) ? globalThis.Number(object.precedingTaskId) : 0,\n task: isSet(object.task) ? Task.fromJSON(object.task) : undefined,\n };\n },\n\n toJSON(message: InsertTaskRequest): unknown {\n const obj: any = {};\n if (message.parentTaskId !== 0) {\n obj.parentTaskId = Math.round(message.parentTaskId);\n }\n if (message.precedingTaskId !== 0) {\n obj.precedingTaskId = Math.round(message.precedingTaskId);\n }\n if (message.task !== undefined) {\n obj.task = Task.toJSON(message.task);\n }\n return obj;\n },\n\n create, I>>(base?: I): InsertTaskRequest {\n return InsertTaskRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): InsertTaskRequest {\n const message = createBaseInsertTaskRequest();\n message.parentTaskId = object.parentTaskId ?? 0;\n message.precedingTaskId = object.precedingTaskId ?? 0;\n message.task = (object.task !== undefined && object.task !== null) ? Task.fromPartial(object.task) : undefined;\n return message;\n },\n};\n\nfunction createBaseUpdateTaskRequest(): UpdateTaskRequest {\n return { task: undefined };\n}\n\nexport const UpdateTaskRequest: MessageFns = {\n encode(message: UpdateTaskRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.task !== undefined) {\n Task.encode(message.task, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UpdateTaskRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUpdateTaskRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.task = Task.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UpdateTaskRequest {\n return { task: isSet(object.task) ? Task.fromJSON(object.task) : undefined };\n },\n\n toJSON(message: UpdateTaskRequest): unknown {\n const obj: any = {};\n if (message.task !== undefined) {\n obj.task = Task.toJSON(message.task);\n }\n return obj;\n },\n\n create, I>>(base?: I): UpdateTaskRequest {\n return UpdateTaskRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UpdateTaskRequest {\n const message = createBaseUpdateTaskRequest();\n message.task = (object.task !== undefined && object.task !== null) ? Task.fromPartial(object.task) : undefined;\n return message;\n },\n};\n\nfunction createBaseDeleteTaskRequest(): DeleteTaskRequest {\n return { id: 0 };\n}\n\nexport const DeleteTaskRequest: MessageFns = {\n encode(message: DeleteTaskRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeleteTaskRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeleteTaskRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeleteTaskRequest {\n return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 };\n },\n\n toJSON(message: DeleteTaskRequest): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): DeleteTaskRequest {\n return DeleteTaskRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeleteTaskRequest {\n const message = createBaseDeleteTaskRequest();\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseListTasksRequest(): ListTasksRequest {\n return {};\n}\n\nexport const ListTasksRequest: MessageFns = {\n encode(_: ListTasksRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListTasksRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListTasksRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ListTasksRequest {\n return {};\n },\n\n toJSON(_: ListTasksRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ListTasksRequest {\n return ListTasksRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ListTasksRequest {\n const message = createBaseListTasksRequest();\n return message;\n },\n};\n\nfunction createBaseTaskList(): TaskList {\n return { tasks: [] };\n}\n\nexport const TaskList: MessageFns = {\n encode(message: TaskList, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.tasks) {\n Task.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TaskList {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTaskList();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.tasks.push(Task.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TaskList {\n return { tasks: globalThis.Array.isArray(object?.tasks) ? object.tasks.map((e: any) => Task.fromJSON(e)) : [] };\n },\n\n toJSON(message: TaskList): unknown {\n const obj: any = {};\n if (message.tasks?.length) {\n obj.tasks = message.tasks.map((e) => Task.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): TaskList {\n return TaskList.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TaskList {\n const message = createBaseTaskList();\n message.tasks = object.tasks?.map((e) => Task.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseJob(): Job {\n return {\n id: 0,\n name: \"\",\n startedAt: undefined,\n endedAt: undefined,\n task: undefined,\n state: 0,\n robot: \"\",\n workOrderId: undefined,\n farmId: \"\",\n customerId: \"\",\n };\n}\n\nexport const Job: MessageFns = {\n encode(message: Job, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.startedAt !== undefined) {\n Timestamp.encode(toTimestamp(message.startedAt), writer.uint32(26).fork()).join();\n }\n if (message.endedAt !== undefined) {\n Timestamp.encode(toTimestamp(message.endedAt), writer.uint32(34).fork()).join();\n }\n if (message.task !== undefined) {\n Task.encode(message.task, writer.uint32(42).fork()).join();\n }\n if (message.state !== 0) {\n writer.uint32(48).int32(message.state);\n }\n if (message.robot !== \"\") {\n writer.uint32(58).string(message.robot);\n }\n if (message.workOrderId !== undefined) {\n writer.uint32(64).uint64(message.workOrderId);\n }\n if (message.farmId !== \"\") {\n writer.uint32(74).string(message.farmId);\n }\n if (message.customerId !== \"\") {\n writer.uint32(82).string(message.customerId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Job {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseJob();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.startedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.endedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.task = Task.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.state = reader.int32() as any;\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.robot = reader.string();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.workOrderId = longToNumber(reader.uint64());\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.farmId = reader.string();\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.customerId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Job {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n startedAt: isSet(object.startedAt) ? globalThis.String(object.startedAt) : undefined,\n endedAt: isSet(object.endedAt) ? globalThis.String(object.endedAt) : undefined,\n task: isSet(object.task) ? Task.fromJSON(object.task) : undefined,\n state: isSet(object.state) ? job_JobStateFromJSON(object.state) : 0,\n robot: isSet(object.robot) ? globalThis.String(object.robot) : \"\",\n workOrderId: isSet(object.workOrderId) ? globalThis.Number(object.workOrderId) : undefined,\n farmId: isSet(object.farmId) ? globalThis.String(object.farmId) : \"\",\n customerId: isSet(object.customerId) ? globalThis.String(object.customerId) : \"\",\n };\n },\n\n toJSON(message: Job): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.startedAt !== undefined) {\n obj.startedAt = message.startedAt;\n }\n if (message.endedAt !== undefined) {\n obj.endedAt = message.endedAt;\n }\n if (message.task !== undefined) {\n obj.task = Task.toJSON(message.task);\n }\n if (message.state !== 0) {\n obj.state = job_JobStateToJSON(message.state);\n }\n if (message.robot !== \"\") {\n obj.robot = message.robot;\n }\n if (message.workOrderId !== undefined) {\n obj.workOrderId = Math.round(message.workOrderId);\n }\n if (message.farmId !== \"\") {\n obj.farmId = message.farmId;\n }\n if (message.customerId !== \"\") {\n obj.customerId = message.customerId;\n }\n return obj;\n },\n\n create, I>>(base?: I): Job {\n return Job.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Job {\n const message = createBaseJob();\n message.id = object.id ?? 0;\n message.name = object.name ?? \"\";\n message.startedAt = object.startedAt ?? undefined;\n message.endedAt = object.endedAt ?? undefined;\n message.task = (object.task !== undefined && object.task !== null) ? Task.fromPartial(object.task) : undefined;\n message.state = object.state ?? 0;\n message.robot = object.robot ?? \"\";\n message.workOrderId = object.workOrderId ?? undefined;\n message.farmId = object.farmId ?? \"\";\n message.customerId = object.customerId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetJobRequest(): GetJobRequest {\n return { id: 0 };\n}\n\nexport const GetJobRequest: MessageFns = {\n encode(message: GetJobRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetJobRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetJobRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetJobRequest {\n return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 };\n },\n\n toJSON(message: GetJobRequest): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetJobRequest {\n return GetJobRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetJobRequest {\n const message = createBaseGetJobRequest();\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseCreateJobRequest(): CreateJobRequest {\n return { job: undefined };\n}\n\nexport const CreateJobRequest: MessageFns = {\n encode(message: CreateJobRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.job !== undefined) {\n Job.encode(message.job, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CreateJobRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateJobRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.job = Job.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CreateJobRequest {\n return { job: isSet(object.job) ? Job.fromJSON(object.job) : undefined };\n },\n\n toJSON(message: CreateJobRequest): unknown {\n const obj: any = {};\n if (message.job !== undefined) {\n obj.job = Job.toJSON(message.job);\n }\n return obj;\n },\n\n create, I>>(base?: I): CreateJobRequest {\n return CreateJobRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CreateJobRequest {\n const message = createBaseCreateJobRequest();\n message.job = (object.job !== undefined && object.job !== null) ? Job.fromPartial(object.job) : undefined;\n return message;\n },\n};\n\nfunction createBaseUpdateJobRequest(): UpdateJobRequest {\n return { job: undefined };\n}\n\nexport const UpdateJobRequest: MessageFns = {\n encode(message: UpdateJobRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.job !== undefined) {\n Job.encode(message.job, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UpdateJobRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUpdateJobRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.job = Job.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UpdateJobRequest {\n return { job: isSet(object.job) ? Job.fromJSON(object.job) : undefined };\n },\n\n toJSON(message: UpdateJobRequest): unknown {\n const obj: any = {};\n if (message.job !== undefined) {\n obj.job = Job.toJSON(message.job);\n }\n return obj;\n },\n\n create, I>>(base?: I): UpdateJobRequest {\n return UpdateJobRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UpdateJobRequest {\n const message = createBaseUpdateJobRequest();\n message.job = (object.job !== undefined && object.job !== null) ? Job.fromPartial(object.job) : undefined;\n return message;\n },\n};\n\nfunction createBaseDeleteJobRequest(): DeleteJobRequest {\n return { id: 0 };\n}\n\nexport const DeleteJobRequest: MessageFns = {\n encode(message: DeleteJobRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeleteJobRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeleteJobRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeleteJobRequest {\n return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 };\n },\n\n toJSON(message: DeleteJobRequest): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): DeleteJobRequest {\n return DeleteJobRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeleteJobRequest {\n const message = createBaseDeleteJobRequest();\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseListJobsRequest(): ListJobsRequest {\n return {};\n}\n\nexport const ListJobsRequest: MessageFns = {\n encode(_: ListJobsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListJobsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListJobsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ListJobsRequest {\n return {};\n },\n\n toJSON(_: ListJobsRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ListJobsRequest {\n return ListJobsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ListJobsRequest {\n const message = createBaseListJobsRequest();\n return message;\n },\n};\n\nfunction createBaseJobList(): JobList {\n return { jobs: [] };\n}\n\nexport const JobList: MessageFns = {\n encode(message: JobList, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.jobs) {\n Job.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): JobList {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseJobList();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.jobs.push(Job.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): JobList {\n return { jobs: globalThis.Array.isArray(object?.jobs) ? object.jobs.map((e: any) => Job.fromJSON(e)) : [] };\n },\n\n toJSON(message: JobList): unknown {\n const obj: any = {};\n if (message.jobs?.length) {\n obj.jobs = message.jobs.map((e) => Job.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): JobList {\n return JobList.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): JobList {\n const message = createBaseJobList();\n message.jobs = object.jobs?.map((e) => Job.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseWorkOrder(): WorkOrder {\n return { id: 0, name: \"\", scheduledAt: undefined, duration: undefined, jobs: [], state: 0 };\n}\n\nexport const WorkOrder: MessageFns = {\n encode(message: WorkOrder, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.scheduledAt !== undefined) {\n Timestamp.encode(toTimestamp(message.scheduledAt), writer.uint32(26).fork()).join();\n }\n if (message.duration !== undefined) {\n Duration.encode(message.duration, writer.uint32(34).fork()).join();\n }\n for (const v of message.jobs) {\n Job.encode(v!, writer.uint32(42).fork()).join();\n }\n if (message.state !== 0) {\n writer.uint32(48).int32(message.state);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): WorkOrder {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWorkOrder();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.scheduledAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.duration = Duration.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.jobs.push(Job.decode(reader, reader.uint32()));\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.state = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): WorkOrder {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n scheduledAt: isSet(object.scheduledAt) ? globalThis.String(object.scheduledAt) : undefined,\n duration: isSet(object.duration) ? Duration.fromJSON(object.duration) : undefined,\n jobs: globalThis.Array.isArray(object?.jobs) ? object.jobs.map((e: any) => Job.fromJSON(e)) : [],\n state: isSet(object.state) ? workOrder_WorkOrderStateFromJSON(object.state) : 0,\n };\n },\n\n toJSON(message: WorkOrder): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.scheduledAt !== undefined) {\n obj.scheduledAt = message.scheduledAt;\n }\n if (message.duration !== undefined) {\n obj.duration = Duration.toJSON(message.duration);\n }\n if (message.jobs?.length) {\n obj.jobs = message.jobs.map((e) => Job.toJSON(e));\n }\n if (message.state !== 0) {\n obj.state = workOrder_WorkOrderStateToJSON(message.state);\n }\n return obj;\n },\n\n create, I>>(base?: I): WorkOrder {\n return WorkOrder.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): WorkOrder {\n const message = createBaseWorkOrder();\n message.id = object.id ?? 0;\n message.name = object.name ?? \"\";\n message.scheduledAt = object.scheduledAt ?? undefined;\n message.duration = (object.duration !== undefined && object.duration !== null)\n ? Duration.fromPartial(object.duration)\n : undefined;\n message.jobs = object.jobs?.map((e) => Job.fromPartial(e)) || [];\n message.state = object.state ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetWorkOrderRequest(): GetWorkOrderRequest {\n return { id: 0 };\n}\n\nexport const GetWorkOrderRequest: MessageFns = {\n encode(message: GetWorkOrderRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetWorkOrderRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetWorkOrderRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetWorkOrderRequest {\n return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 };\n },\n\n toJSON(message: GetWorkOrderRequest): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetWorkOrderRequest {\n return GetWorkOrderRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetWorkOrderRequest {\n const message = createBaseGetWorkOrderRequest();\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseCreateWorkOrderRequest(): CreateWorkOrderRequest {\n return { workOrder: undefined };\n}\n\nexport const CreateWorkOrderRequest: MessageFns = {\n encode(message: CreateWorkOrderRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.workOrder !== undefined) {\n WorkOrder.encode(message.workOrder, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CreateWorkOrderRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateWorkOrderRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.workOrder = WorkOrder.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CreateWorkOrderRequest {\n return { workOrder: isSet(object.workOrder) ? WorkOrder.fromJSON(object.workOrder) : undefined };\n },\n\n toJSON(message: CreateWorkOrderRequest): unknown {\n const obj: any = {};\n if (message.workOrder !== undefined) {\n obj.workOrder = WorkOrder.toJSON(message.workOrder);\n }\n return obj;\n },\n\n create, I>>(base?: I): CreateWorkOrderRequest {\n return CreateWorkOrderRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CreateWorkOrderRequest {\n const message = createBaseCreateWorkOrderRequest();\n message.workOrder = (object.workOrder !== undefined && object.workOrder !== null)\n ? WorkOrder.fromPartial(object.workOrder)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseWorkOrderAddJobsRequest(): WorkOrderAddJobsRequest {\n return { workOrderId: 0, jobId: [] };\n}\n\nexport const WorkOrderAddJobsRequest: MessageFns = {\n encode(message: WorkOrderAddJobsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.workOrderId !== 0) {\n writer.uint32(8).uint64(message.workOrderId);\n }\n writer.uint32(18).fork();\n for (const v of message.jobId) {\n writer.uint64(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): WorkOrderAddJobsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWorkOrderAddJobsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.workOrderId = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag === 16) {\n message.jobId.push(longToNumber(reader.uint64()));\n\n continue;\n }\n\n if (tag === 18) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.jobId.push(longToNumber(reader.uint64()));\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): WorkOrderAddJobsRequest {\n return {\n workOrderId: isSet(object.workOrderId) ? globalThis.Number(object.workOrderId) : 0,\n jobId: globalThis.Array.isArray(object?.jobId) ? object.jobId.map((e: any) => globalThis.Number(e)) : [],\n };\n },\n\n toJSON(message: WorkOrderAddJobsRequest): unknown {\n const obj: any = {};\n if (message.workOrderId !== 0) {\n obj.workOrderId = Math.round(message.workOrderId);\n }\n if (message.jobId?.length) {\n obj.jobId = message.jobId.map((e) => Math.round(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): WorkOrderAddJobsRequest {\n return WorkOrderAddJobsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): WorkOrderAddJobsRequest {\n const message = createBaseWorkOrderAddJobsRequest();\n message.workOrderId = object.workOrderId ?? 0;\n message.jobId = object.jobId?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseWorkOrderRemoveJobsRequest(): WorkOrderRemoveJobsRequest {\n return { workOrderId: 0, jobId: [] };\n}\n\nexport const WorkOrderRemoveJobsRequest: MessageFns = {\n encode(message: WorkOrderRemoveJobsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.workOrderId !== 0) {\n writer.uint32(8).uint64(message.workOrderId);\n }\n writer.uint32(18).fork();\n for (const v of message.jobId) {\n writer.uint64(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): WorkOrderRemoveJobsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWorkOrderRemoveJobsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.workOrderId = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag === 16) {\n message.jobId.push(longToNumber(reader.uint64()));\n\n continue;\n }\n\n if (tag === 18) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.jobId.push(longToNumber(reader.uint64()));\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): WorkOrderRemoveJobsRequest {\n return {\n workOrderId: isSet(object.workOrderId) ? globalThis.Number(object.workOrderId) : 0,\n jobId: globalThis.Array.isArray(object?.jobId) ? object.jobId.map((e: any) => globalThis.Number(e)) : [],\n };\n },\n\n toJSON(message: WorkOrderRemoveJobsRequest): unknown {\n const obj: any = {};\n if (message.workOrderId !== 0) {\n obj.workOrderId = Math.round(message.workOrderId);\n }\n if (message.jobId?.length) {\n obj.jobId = message.jobId.map((e) => Math.round(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): WorkOrderRemoveJobsRequest {\n return WorkOrderRemoveJobsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): WorkOrderRemoveJobsRequest {\n const message = createBaseWorkOrderRemoveJobsRequest();\n message.workOrderId = object.workOrderId ?? 0;\n message.jobId = object.jobId?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseUpdateWorkOrderRequest(): UpdateWorkOrderRequest {\n return { workOrder: undefined };\n}\n\nexport const UpdateWorkOrderRequest: MessageFns = {\n encode(message: UpdateWorkOrderRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.workOrder !== undefined) {\n WorkOrder.encode(message.workOrder, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UpdateWorkOrderRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUpdateWorkOrderRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.workOrder = WorkOrder.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UpdateWorkOrderRequest {\n return { workOrder: isSet(object.workOrder) ? WorkOrder.fromJSON(object.workOrder) : undefined };\n },\n\n toJSON(message: UpdateWorkOrderRequest): unknown {\n const obj: any = {};\n if (message.workOrder !== undefined) {\n obj.workOrder = WorkOrder.toJSON(message.workOrder);\n }\n return obj;\n },\n\n create, I>>(base?: I): UpdateWorkOrderRequest {\n return UpdateWorkOrderRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UpdateWorkOrderRequest {\n const message = createBaseUpdateWorkOrderRequest();\n message.workOrder = (object.workOrder !== undefined && object.workOrder !== null)\n ? WorkOrder.fromPartial(object.workOrder)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseDeleteWorkOrderRequest(): DeleteWorkOrderRequest {\n return { id: 0 };\n}\n\nexport const DeleteWorkOrderRequest: MessageFns = {\n encode(message: DeleteWorkOrderRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeleteWorkOrderRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeleteWorkOrderRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeleteWorkOrderRequest {\n return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 };\n },\n\n toJSON(message: DeleteWorkOrderRequest): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): DeleteWorkOrderRequest {\n return DeleteWorkOrderRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeleteWorkOrderRequest {\n const message = createBaseDeleteWorkOrderRequest();\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseListWorkOrdersRequest(): ListWorkOrdersRequest {\n return {};\n}\n\nexport const ListWorkOrdersRequest: MessageFns = {\n encode(_: ListWorkOrdersRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListWorkOrdersRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListWorkOrdersRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ListWorkOrdersRequest {\n return {};\n },\n\n toJSON(_: ListWorkOrdersRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ListWorkOrdersRequest {\n return ListWorkOrdersRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ListWorkOrdersRequest {\n const message = createBaseListWorkOrdersRequest();\n return message;\n },\n};\n\nfunction createBaseWorkOrderList(): WorkOrderList {\n return { workOrders: [] };\n}\n\nexport const WorkOrderList: MessageFns = {\n encode(message: WorkOrderList, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.workOrders) {\n WorkOrder.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): WorkOrderList {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWorkOrderList();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.workOrders.push(WorkOrder.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): WorkOrderList {\n return {\n workOrders: globalThis.Array.isArray(object?.workOrders)\n ? object.workOrders.map((e: any) => WorkOrder.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: WorkOrderList): unknown {\n const obj: any = {};\n if (message.workOrders?.length) {\n obj.workOrders = message.workOrders.map((e) => WorkOrder.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): WorkOrderList {\n return WorkOrderList.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): WorkOrderList {\n const message = createBaseWorkOrderList();\n message.workOrders = object.workOrders?.map((e) => WorkOrder.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseIntervention(): Intervention {\n return { id: 0, taskId: 0, qualification: \"\", description: \"\", state: 0, robotSerial: \"\", jobId: 0, cause: 0 };\n}\n\nexport const Intervention: MessageFns = {\n encode(message: Intervention, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n if (message.taskId !== 0) {\n writer.uint32(16).uint64(message.taskId);\n }\n if (message.qualification !== \"\") {\n writer.uint32(26).string(message.qualification);\n }\n if (message.description !== \"\") {\n writer.uint32(34).string(message.description);\n }\n if (message.state !== 0) {\n writer.uint32(40).int32(message.state);\n }\n if (message.robotSerial !== \"\") {\n writer.uint32(50).string(message.robotSerial);\n }\n if (message.jobId !== 0) {\n writer.uint32(56).uint64(message.jobId);\n }\n if (message.cause !== 0) {\n writer.uint32(64).int32(message.cause);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Intervention {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseIntervention();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.taskId = longToNumber(reader.uint64());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.qualification = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.description = reader.string();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.state = reader.int32() as any;\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.robotSerial = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.jobId = longToNumber(reader.uint64());\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.cause = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Intervention {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n taskId: isSet(object.taskId) ? globalThis.Number(object.taskId) : 0,\n qualification: isSet(object.qualification) ? globalThis.String(object.qualification) : \"\",\n description: isSet(object.description) ? globalThis.String(object.description) : \"\",\n state: isSet(object.state) ? intervention_InterventionStateFromJSON(object.state) : 0,\n robotSerial: isSet(object.robotSerial) ? globalThis.String(object.robotSerial) : \"\",\n jobId: isSet(object.jobId) ? globalThis.Number(object.jobId) : 0,\n cause: isSet(object.cause) ? intervention_InterventionCauseFromJSON(object.cause) : 0,\n };\n },\n\n toJSON(message: Intervention): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.taskId !== 0) {\n obj.taskId = Math.round(message.taskId);\n }\n if (message.qualification !== \"\") {\n obj.qualification = message.qualification;\n }\n if (message.description !== \"\") {\n obj.description = message.description;\n }\n if (message.state !== 0) {\n obj.state = intervention_InterventionStateToJSON(message.state);\n }\n if (message.robotSerial !== \"\") {\n obj.robotSerial = message.robotSerial;\n }\n if (message.jobId !== 0) {\n obj.jobId = Math.round(message.jobId);\n }\n if (message.cause !== 0) {\n obj.cause = intervention_InterventionCauseToJSON(message.cause);\n }\n return obj;\n },\n\n create, I>>(base?: I): Intervention {\n return Intervention.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Intervention {\n const message = createBaseIntervention();\n message.id = object.id ?? 0;\n message.taskId = object.taskId ?? 0;\n message.qualification = object.qualification ?? \"\";\n message.description = object.description ?? \"\";\n message.state = object.state ?? 0;\n message.robotSerial = object.robotSerial ?? \"\";\n message.jobId = object.jobId ?? 0;\n message.cause = object.cause ?? 0;\n return message;\n },\n};\n\nfunction createBaseCreateInterventionRequest(): CreateInterventionRequest {\n return { intervention: undefined };\n}\n\nexport const CreateInterventionRequest: MessageFns = {\n encode(message: CreateInterventionRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.intervention !== undefined) {\n Intervention.encode(message.intervention, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CreateInterventionRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateInterventionRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.intervention = Intervention.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CreateInterventionRequest {\n return { intervention: isSet(object.intervention) ? Intervention.fromJSON(object.intervention) : undefined };\n },\n\n toJSON(message: CreateInterventionRequest): unknown {\n const obj: any = {};\n if (message.intervention !== undefined) {\n obj.intervention = Intervention.toJSON(message.intervention);\n }\n return obj;\n },\n\n create, I>>(base?: I): CreateInterventionRequest {\n return CreateInterventionRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CreateInterventionRequest {\n const message = createBaseCreateInterventionRequest();\n message.intervention = (object.intervention !== undefined && object.intervention !== null)\n ? Intervention.fromPartial(object.intervention)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseAcknowledgeInterventionRequest(): AcknowledgeInterventionRequest {\n return { intervention: undefined };\n}\n\nexport const AcknowledgeInterventionRequest: MessageFns = {\n encode(message: AcknowledgeInterventionRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.intervention !== undefined) {\n Intervention.encode(message.intervention, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AcknowledgeInterventionRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAcknowledgeInterventionRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.intervention = Intervention.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AcknowledgeInterventionRequest {\n return { intervention: isSet(object.intervention) ? Intervention.fromJSON(object.intervention) : undefined };\n },\n\n toJSON(message: AcknowledgeInterventionRequest): unknown {\n const obj: any = {};\n if (message.intervention !== undefined) {\n obj.intervention = Intervention.toJSON(message.intervention);\n }\n return obj;\n },\n\n create, I>>(base?: I): AcknowledgeInterventionRequest {\n return AcknowledgeInterventionRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): AcknowledgeInterventionRequest {\n const message = createBaseAcknowledgeInterventionRequest();\n message.intervention = (object.intervention !== undefined && object.intervention !== null)\n ? Intervention.fromPartial(object.intervention)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseCompleteInterventionRequest(): CompleteInterventionRequest {\n return { state: 0, intervention: undefined };\n}\n\nexport const CompleteInterventionRequest: MessageFns = {\n encode(message: CompleteInterventionRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.state !== 0) {\n writer.uint32(8).int32(message.state);\n }\n if (message.intervention !== undefined) {\n Intervention.encode(message.intervention, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CompleteInterventionRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompleteInterventionRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.state = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.intervention = Intervention.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CompleteInterventionRequest {\n return {\n state: isSet(object.state) ? completeInterventionRequest_CompletionStateFromJSON(object.state) : 0,\n intervention: isSet(object.intervention) ? Intervention.fromJSON(object.intervention) : undefined,\n };\n },\n\n toJSON(message: CompleteInterventionRequest): unknown {\n const obj: any = {};\n if (message.state !== 0) {\n obj.state = completeInterventionRequest_CompletionStateToJSON(message.state);\n }\n if (message.intervention !== undefined) {\n obj.intervention = Intervention.toJSON(message.intervention);\n }\n return obj;\n },\n\n create, I>>(base?: I): CompleteInterventionRequest {\n return CompleteInterventionRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CompleteInterventionRequest {\n const message = createBaseCompleteInterventionRequest();\n message.state = object.state ?? 0;\n message.intervention = (object.intervention !== undefined && object.intervention !== null)\n ? Intervention.fromPartial(object.intervention)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseSubscriptionRequest(): SubscriptionRequest {\n return {};\n}\n\nexport const SubscriptionRequest: MessageFns = {\n encode(_: SubscriptionRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SubscriptionRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSubscriptionRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SubscriptionRequest {\n return {};\n },\n\n toJSON(_: SubscriptionRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SubscriptionRequest {\n return SubscriptionRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SubscriptionRequest {\n const message = createBaseSubscriptionRequest();\n return message;\n },\n};\n\nfunction createBaseSubscriptionResponse(): SubscriptionResponse {\n return { intervention: undefined };\n}\n\nexport const SubscriptionResponse: MessageFns = {\n encode(message: SubscriptionResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.intervention !== undefined) {\n Intervention.encode(message.intervention, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SubscriptionResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSubscriptionResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.intervention = Intervention.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SubscriptionResponse {\n return { intervention: isSet(object.intervention) ? Intervention.fromJSON(object.intervention) : undefined };\n },\n\n toJSON(message: SubscriptionResponse): unknown {\n const obj: any = {};\n if (message.intervention !== undefined) {\n obj.intervention = Intervention.toJSON(message.intervention);\n }\n return obj;\n },\n\n create, I>>(base?: I): SubscriptionResponse {\n return SubscriptionResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SubscriptionResponse {\n const message = createBaseSubscriptionResponse();\n message.intervention = (object.intervention !== undefined && object.intervention !== null)\n ? Intervention.fromPartial(object.intervention)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction toTimestamp(dateStr: string): Timestamp {\n const date = new globalThis.Date(dateStr);\n const seconds = Math.trunc(date.getTime() / 1_000);\n const nanos = (date.getTime() % 1_000) * 1_000_000;\n return { seconds, nanos };\n}\n\nfunction fromTimestamp(t: Timestamp): string {\n let millis = (t.seconds || 0) * 1_000;\n millis += (t.nanos || 0) / 1_000_000;\n return new globalThis.Date(millis).toISOString();\n}\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: metrics/metrics.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"carbon.metrics\";\n\nexport interface LaserPosition {\n row: number;\n slot: number;\n}\n\nexport interface LaserIdentifier {\n position: LaserPosition | undefined;\n serial: string;\n}\n\nexport interface LaserLifeTime {\n id: LaserIdentifier | undefined;\n lifetimeSec: number;\n}\n\nexport interface LaserEventTime {\n id: LaserIdentifier | undefined;\n timestampSec: number;\n}\n\nexport interface LaserLifeTimes {\n lifetimes: LaserLifeTime[];\n}\n\nexport interface LaserChangeTimes {\n installs: LaserEventTime[];\n removals: LaserEventTime[];\n}\n\nexport interface CountsByConclusionType {\n disarmedWeed: number[];\n armedWeed: number[];\n disarmedCrop: number[];\n armedCrop: number[];\n}\n\nexport interface TargetSizeData {\n cumulativeSize: number;\n count: number;\n}\n\nexport interface RequiredLaserTimeData {\n cumulativeTime: number;\n count: number;\n}\n\nexport interface SpatialPosition {\n latitude: number;\n longitude: number;\n heightMm: number;\n timestampMs: number;\n ecefX: number;\n ecefY: number;\n ecefZ: number;\n}\n\nexport interface WeedCounterChunk {\n conclusionCounts: CountsByConclusionType | undefined;\n weedSizeData: TargetSizeData | undefined;\n cropSizeData: TargetSizeData | undefined;\n countsByCategory: { [key: string]: number };\n targetedLaserTimeData: RequiredLaserTimeData | undefined;\n untargetedLaserTimeData: RequiredLaserTimeData | undefined;\n validCropCount: number;\n}\n\nexport interface WeedCounterChunk_CountsByCategoryEntry {\n key: string;\n value: number;\n}\n\nexport interface WheelEncoderSpatialData {\n startPosM: number;\n endPosM: number;\n}\n\nexport interface BandingSpatialData {\n percentBanded: number;\n}\n\nexport interface ImplementWidthSpatialData {\n widthMm: number;\n}\n\nexport interface VelocitySpatialMetric {\n avgTargetVel: { [key: string]: number };\n}\n\nexport interface VelocitySpatialMetric_AvgTargetVelEntry {\n key: string;\n value: number;\n}\n\nexport interface JobMetric {\n jobId: string;\n}\n\nexport interface HWMetric {\n lifted: boolean;\n estopped: boolean;\n laserKey: boolean;\n interlock: boolean;\n waterProtect: boolean;\n}\n\nexport interface SpatialMetricBlock {\n start: SpatialPosition | undefined;\n end: SpatialPosition | undefined;\n weedCount: WeedCounterChunk | undefined;\n weData: WheelEncoderSpatialData | undefined;\n bandingData: BandingSpatialData | undefined;\n implementWidthData: ImplementWidthSpatialData | undefined;\n velData: VelocitySpatialMetric | undefined;\n startLeft: SpatialPosition | undefined;\n startRight: SpatialPosition | undefined;\n endLeft: SpatialPosition | undefined;\n endRight: SpatialPosition | undefined;\n jobMetric:\n | JobMetric\n | undefined;\n /** May not be a valid block */\n suspicious: boolean;\n hwMetric: HWMetric | undefined;\n}\n\nfunction createBaseLaserPosition(): LaserPosition {\n return { row: 0, slot: 0 };\n}\n\nexport const LaserPosition: MessageFns = {\n encode(message: LaserPosition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.row !== 0) {\n writer.uint32(8).uint32(message.row);\n }\n if (message.slot !== 0) {\n writer.uint32(16).uint32(message.slot);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserPosition {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserPosition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.row = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.slot = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserPosition {\n return {\n row: isSet(object.row) ? globalThis.Number(object.row) : 0,\n slot: isSet(object.slot) ? globalThis.Number(object.slot) : 0,\n };\n },\n\n toJSON(message: LaserPosition): unknown {\n const obj: any = {};\n if (message.row !== 0) {\n obj.row = Math.round(message.row);\n }\n if (message.slot !== 0) {\n obj.slot = Math.round(message.slot);\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserPosition {\n return LaserPosition.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserPosition {\n const message = createBaseLaserPosition();\n message.row = object.row ?? 0;\n message.slot = object.slot ?? 0;\n return message;\n },\n};\n\nfunction createBaseLaserIdentifier(): LaserIdentifier {\n return { position: undefined, serial: \"\" };\n}\n\nexport const LaserIdentifier: MessageFns = {\n encode(message: LaserIdentifier, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.position !== undefined) {\n LaserPosition.encode(message.position, writer.uint32(10).fork()).join();\n }\n if (message.serial !== \"\") {\n writer.uint32(18).string(message.serial);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserIdentifier {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserIdentifier();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.position = LaserPosition.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.serial = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserIdentifier {\n return {\n position: isSet(object.position) ? LaserPosition.fromJSON(object.position) : undefined,\n serial: isSet(object.serial) ? globalThis.String(object.serial) : \"\",\n };\n },\n\n toJSON(message: LaserIdentifier): unknown {\n const obj: any = {};\n if (message.position !== undefined) {\n obj.position = LaserPosition.toJSON(message.position);\n }\n if (message.serial !== \"\") {\n obj.serial = message.serial;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserIdentifier {\n return LaserIdentifier.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserIdentifier {\n const message = createBaseLaserIdentifier();\n message.position = (object.position !== undefined && object.position !== null)\n ? LaserPosition.fromPartial(object.position)\n : undefined;\n message.serial = object.serial ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLaserLifeTime(): LaserLifeTime {\n return { id: undefined, lifetimeSec: 0 };\n}\n\nexport const LaserLifeTime: MessageFns = {\n encode(message: LaserLifeTime, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== undefined) {\n LaserIdentifier.encode(message.id, writer.uint32(10).fork()).join();\n }\n if (message.lifetimeSec !== 0) {\n writer.uint32(16).uint64(message.lifetimeSec);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserLifeTime {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserLifeTime();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = LaserIdentifier.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.lifetimeSec = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserLifeTime {\n return {\n id: isSet(object.id) ? LaserIdentifier.fromJSON(object.id) : undefined,\n lifetimeSec: isSet(object.lifetimeSec) ? globalThis.Number(object.lifetimeSec) : 0,\n };\n },\n\n toJSON(message: LaserLifeTime): unknown {\n const obj: any = {};\n if (message.id !== undefined) {\n obj.id = LaserIdentifier.toJSON(message.id);\n }\n if (message.lifetimeSec !== 0) {\n obj.lifetimeSec = Math.round(message.lifetimeSec);\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserLifeTime {\n return LaserLifeTime.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserLifeTime {\n const message = createBaseLaserLifeTime();\n message.id = (object.id !== undefined && object.id !== null) ? LaserIdentifier.fromPartial(object.id) : undefined;\n message.lifetimeSec = object.lifetimeSec ?? 0;\n return message;\n },\n};\n\nfunction createBaseLaserEventTime(): LaserEventTime {\n return { id: undefined, timestampSec: 0 };\n}\n\nexport const LaserEventTime: MessageFns = {\n encode(message: LaserEventTime, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== undefined) {\n LaserIdentifier.encode(message.id, writer.uint32(10).fork()).join();\n }\n if (message.timestampSec !== 0) {\n writer.uint32(16).int64(message.timestampSec);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserEventTime {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserEventTime();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = LaserIdentifier.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.timestampSec = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserEventTime {\n return {\n id: isSet(object.id) ? LaserIdentifier.fromJSON(object.id) : undefined,\n timestampSec: isSet(object.timestampSec) ? globalThis.Number(object.timestampSec) : 0,\n };\n },\n\n toJSON(message: LaserEventTime): unknown {\n const obj: any = {};\n if (message.id !== undefined) {\n obj.id = LaserIdentifier.toJSON(message.id);\n }\n if (message.timestampSec !== 0) {\n obj.timestampSec = Math.round(message.timestampSec);\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserEventTime {\n return LaserEventTime.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserEventTime {\n const message = createBaseLaserEventTime();\n message.id = (object.id !== undefined && object.id !== null) ? LaserIdentifier.fromPartial(object.id) : undefined;\n message.timestampSec = object.timestampSec ?? 0;\n return message;\n },\n};\n\nfunction createBaseLaserLifeTimes(): LaserLifeTimes {\n return { lifetimes: [] };\n}\n\nexport const LaserLifeTimes: MessageFns = {\n encode(message: LaserLifeTimes, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.lifetimes) {\n LaserLifeTime.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserLifeTimes {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserLifeTimes();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.lifetimes.push(LaserLifeTime.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserLifeTimes {\n return {\n lifetimes: globalThis.Array.isArray(object?.lifetimes)\n ? object.lifetimes.map((e: any) => LaserLifeTime.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: LaserLifeTimes): unknown {\n const obj: any = {};\n if (message.lifetimes?.length) {\n obj.lifetimes = message.lifetimes.map((e) => LaserLifeTime.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserLifeTimes {\n return LaserLifeTimes.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserLifeTimes {\n const message = createBaseLaserLifeTimes();\n message.lifetimes = object.lifetimes?.map((e) => LaserLifeTime.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseLaserChangeTimes(): LaserChangeTimes {\n return { installs: [], removals: [] };\n}\n\nexport const LaserChangeTimes: MessageFns = {\n encode(message: LaserChangeTimes, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.installs) {\n LaserEventTime.encode(v!, writer.uint32(10).fork()).join();\n }\n for (const v of message.removals) {\n LaserEventTime.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserChangeTimes {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserChangeTimes();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.installs.push(LaserEventTime.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.removals.push(LaserEventTime.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserChangeTimes {\n return {\n installs: globalThis.Array.isArray(object?.installs)\n ? object.installs.map((e: any) => LaserEventTime.fromJSON(e))\n : [],\n removals: globalThis.Array.isArray(object?.removals)\n ? object.removals.map((e: any) => LaserEventTime.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: LaserChangeTimes): unknown {\n const obj: any = {};\n if (message.installs?.length) {\n obj.installs = message.installs.map((e) => LaserEventTime.toJSON(e));\n }\n if (message.removals?.length) {\n obj.removals = message.removals.map((e) => LaserEventTime.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserChangeTimes {\n return LaserChangeTimes.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserChangeTimes {\n const message = createBaseLaserChangeTimes();\n message.installs = object.installs?.map((e) => LaserEventTime.fromPartial(e)) || [];\n message.removals = object.removals?.map((e) => LaserEventTime.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseCountsByConclusionType(): CountsByConclusionType {\n return { disarmedWeed: [], armedWeed: [], disarmedCrop: [], armedCrop: [] };\n}\n\nexport const CountsByConclusionType: MessageFns = {\n encode(message: CountsByConclusionType, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n writer.uint32(10).fork();\n for (const v of message.disarmedWeed) {\n writer.uint32(v);\n }\n writer.join();\n writer.uint32(18).fork();\n for (const v of message.armedWeed) {\n writer.uint32(v);\n }\n writer.join();\n writer.uint32(26).fork();\n for (const v of message.disarmedCrop) {\n writer.uint32(v);\n }\n writer.join();\n writer.uint32(34).fork();\n for (const v of message.armedCrop) {\n writer.uint32(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CountsByConclusionType {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCountsByConclusionType();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 8) {\n message.disarmedWeed.push(reader.uint32());\n\n continue;\n }\n\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.disarmedWeed.push(reader.uint32());\n }\n\n continue;\n }\n\n break;\n case 2:\n if (tag === 16) {\n message.armedWeed.push(reader.uint32());\n\n continue;\n }\n\n if (tag === 18) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.armedWeed.push(reader.uint32());\n }\n\n continue;\n }\n\n break;\n case 3:\n if (tag === 24) {\n message.disarmedCrop.push(reader.uint32());\n\n continue;\n }\n\n if (tag === 26) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.disarmedCrop.push(reader.uint32());\n }\n\n continue;\n }\n\n break;\n case 4:\n if (tag === 32) {\n message.armedCrop.push(reader.uint32());\n\n continue;\n }\n\n if (tag === 34) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.armedCrop.push(reader.uint32());\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CountsByConclusionType {\n return {\n disarmedWeed: globalThis.Array.isArray(object?.disarmedWeed)\n ? object.disarmedWeed.map((e: any) => globalThis.Number(e))\n : [],\n armedWeed: globalThis.Array.isArray(object?.armedWeed)\n ? object.armedWeed.map((e: any) => globalThis.Number(e))\n : [],\n disarmedCrop: globalThis.Array.isArray(object?.disarmedCrop)\n ? object.disarmedCrop.map((e: any) => globalThis.Number(e))\n : [],\n armedCrop: globalThis.Array.isArray(object?.armedCrop)\n ? object.armedCrop.map((e: any) => globalThis.Number(e))\n : [],\n };\n },\n\n toJSON(message: CountsByConclusionType): unknown {\n const obj: any = {};\n if (message.disarmedWeed?.length) {\n obj.disarmedWeed = message.disarmedWeed.map((e) => Math.round(e));\n }\n if (message.armedWeed?.length) {\n obj.armedWeed = message.armedWeed.map((e) => Math.round(e));\n }\n if (message.disarmedCrop?.length) {\n obj.disarmedCrop = message.disarmedCrop.map((e) => Math.round(e));\n }\n if (message.armedCrop?.length) {\n obj.armedCrop = message.armedCrop.map((e) => Math.round(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): CountsByConclusionType {\n return CountsByConclusionType.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CountsByConclusionType {\n const message = createBaseCountsByConclusionType();\n message.disarmedWeed = object.disarmedWeed?.map((e) => e) || [];\n message.armedWeed = object.armedWeed?.map((e) => e) || [];\n message.disarmedCrop = object.disarmedCrop?.map((e) => e) || [];\n message.armedCrop = object.armedCrop?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseTargetSizeData(): TargetSizeData {\n return { cumulativeSize: 0, count: 0 };\n}\n\nexport const TargetSizeData: MessageFns = {\n encode(message: TargetSizeData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.cumulativeSize !== 0) {\n writer.uint32(9).double(message.cumulativeSize);\n }\n if (message.count !== 0) {\n writer.uint32(16).uint64(message.count);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TargetSizeData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTargetSizeData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.cumulativeSize = reader.double();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.count = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TargetSizeData {\n return {\n cumulativeSize: isSet(object.cumulativeSize) ? globalThis.Number(object.cumulativeSize) : 0,\n count: isSet(object.count) ? globalThis.Number(object.count) : 0,\n };\n },\n\n toJSON(message: TargetSizeData): unknown {\n const obj: any = {};\n if (message.cumulativeSize !== 0) {\n obj.cumulativeSize = message.cumulativeSize;\n }\n if (message.count !== 0) {\n obj.count = Math.round(message.count);\n }\n return obj;\n },\n\n create, I>>(base?: I): TargetSizeData {\n return TargetSizeData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TargetSizeData {\n const message = createBaseTargetSizeData();\n message.cumulativeSize = object.cumulativeSize ?? 0;\n message.count = object.count ?? 0;\n return message;\n },\n};\n\nfunction createBaseRequiredLaserTimeData(): RequiredLaserTimeData {\n return { cumulativeTime: 0, count: 0 };\n}\n\nexport const RequiredLaserTimeData: MessageFns = {\n encode(message: RequiredLaserTimeData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.cumulativeTime !== 0) {\n writer.uint32(8).uint64(message.cumulativeTime);\n }\n if (message.count !== 0) {\n writer.uint32(16).uint64(message.count);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RequiredLaserTimeData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRequiredLaserTimeData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.cumulativeTime = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.count = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RequiredLaserTimeData {\n return {\n cumulativeTime: isSet(object.cumulativeTime) ? globalThis.Number(object.cumulativeTime) : 0,\n count: isSet(object.count) ? globalThis.Number(object.count) : 0,\n };\n },\n\n toJSON(message: RequiredLaserTimeData): unknown {\n const obj: any = {};\n if (message.cumulativeTime !== 0) {\n obj.cumulativeTime = Math.round(message.cumulativeTime);\n }\n if (message.count !== 0) {\n obj.count = Math.round(message.count);\n }\n return obj;\n },\n\n create, I>>(base?: I): RequiredLaserTimeData {\n return RequiredLaserTimeData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RequiredLaserTimeData {\n const message = createBaseRequiredLaserTimeData();\n message.cumulativeTime = object.cumulativeTime ?? 0;\n message.count = object.count ?? 0;\n return message;\n },\n};\n\nfunction createBaseSpatialPosition(): SpatialPosition {\n return { latitude: 0, longitude: 0, heightMm: 0, timestampMs: 0, ecefX: 0, ecefY: 0, ecefZ: 0 };\n}\n\nexport const SpatialPosition: MessageFns = {\n encode(message: SpatialPosition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.latitude !== 0) {\n writer.uint32(9).double(message.latitude);\n }\n if (message.longitude !== 0) {\n writer.uint32(17).double(message.longitude);\n }\n if (message.heightMm !== 0) {\n writer.uint32(25).double(message.heightMm);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(32).uint64(message.timestampMs);\n }\n if (message.ecefX !== 0) {\n writer.uint32(41).double(message.ecefX);\n }\n if (message.ecefY !== 0) {\n writer.uint32(49).double(message.ecefY);\n }\n if (message.ecefZ !== 0) {\n writer.uint32(57).double(message.ecefZ);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SpatialPosition {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSpatialPosition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.latitude = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.longitude = reader.double();\n continue;\n case 3:\n if (tag !== 25) {\n break;\n }\n\n message.heightMm = reader.double();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.uint64());\n continue;\n case 5:\n if (tag !== 41) {\n break;\n }\n\n message.ecefX = reader.double();\n continue;\n case 6:\n if (tag !== 49) {\n break;\n }\n\n message.ecefY = reader.double();\n continue;\n case 7:\n if (tag !== 57) {\n break;\n }\n\n message.ecefZ = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SpatialPosition {\n return {\n latitude: isSet(object.latitude) ? globalThis.Number(object.latitude) : 0,\n longitude: isSet(object.longitude) ? globalThis.Number(object.longitude) : 0,\n heightMm: isSet(object.heightMm) ? globalThis.Number(object.heightMm) : 0,\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n ecefX: isSet(object.ecefX) ? globalThis.Number(object.ecefX) : 0,\n ecefY: isSet(object.ecefY) ? globalThis.Number(object.ecefY) : 0,\n ecefZ: isSet(object.ecefZ) ? globalThis.Number(object.ecefZ) : 0,\n };\n },\n\n toJSON(message: SpatialPosition): unknown {\n const obj: any = {};\n if (message.latitude !== 0) {\n obj.latitude = message.latitude;\n }\n if (message.longitude !== 0) {\n obj.longitude = message.longitude;\n }\n if (message.heightMm !== 0) {\n obj.heightMm = message.heightMm;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.ecefX !== 0) {\n obj.ecefX = message.ecefX;\n }\n if (message.ecefY !== 0) {\n obj.ecefY = message.ecefY;\n }\n if (message.ecefZ !== 0) {\n obj.ecefZ = message.ecefZ;\n }\n return obj;\n },\n\n create, I>>(base?: I): SpatialPosition {\n return SpatialPosition.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SpatialPosition {\n const message = createBaseSpatialPosition();\n message.latitude = object.latitude ?? 0;\n message.longitude = object.longitude ?? 0;\n message.heightMm = object.heightMm ?? 0;\n message.timestampMs = object.timestampMs ?? 0;\n message.ecefX = object.ecefX ?? 0;\n message.ecefY = object.ecefY ?? 0;\n message.ecefZ = object.ecefZ ?? 0;\n return message;\n },\n};\n\nfunction createBaseWeedCounterChunk(): WeedCounterChunk {\n return {\n conclusionCounts: undefined,\n weedSizeData: undefined,\n cropSizeData: undefined,\n countsByCategory: {},\n targetedLaserTimeData: undefined,\n untargetedLaserTimeData: undefined,\n validCropCount: 0,\n };\n}\n\nexport const WeedCounterChunk: MessageFns = {\n encode(message: WeedCounterChunk, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.conclusionCounts !== undefined) {\n CountsByConclusionType.encode(message.conclusionCounts, writer.uint32(10).fork()).join();\n }\n if (message.weedSizeData !== undefined) {\n TargetSizeData.encode(message.weedSizeData, writer.uint32(18).fork()).join();\n }\n if (message.cropSizeData !== undefined) {\n TargetSizeData.encode(message.cropSizeData, writer.uint32(26).fork()).join();\n }\n Object.entries(message.countsByCategory).forEach(([key, value]) => {\n WeedCounterChunk_CountsByCategoryEntry.encode({ key: key as any, value }, writer.uint32(34).fork()).join();\n });\n if (message.targetedLaserTimeData !== undefined) {\n RequiredLaserTimeData.encode(message.targetedLaserTimeData, writer.uint32(42).fork()).join();\n }\n if (message.untargetedLaserTimeData !== undefined) {\n RequiredLaserTimeData.encode(message.untargetedLaserTimeData, writer.uint32(50).fork()).join();\n }\n if (message.validCropCount !== 0) {\n writer.uint32(56).uint64(message.validCropCount);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): WeedCounterChunk {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWeedCounterChunk();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.conclusionCounts = CountsByConclusionType.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.weedSizeData = TargetSizeData.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.cropSizeData = TargetSizeData.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n const entry4 = WeedCounterChunk_CountsByCategoryEntry.decode(reader, reader.uint32());\n if (entry4.value !== undefined) {\n message.countsByCategory[entry4.key] = entry4.value;\n }\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.targetedLaserTimeData = RequiredLaserTimeData.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.untargetedLaserTimeData = RequiredLaserTimeData.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.validCropCount = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): WeedCounterChunk {\n return {\n conclusionCounts: isSet(object.conclusionCounts)\n ? CountsByConclusionType.fromJSON(object.conclusionCounts)\n : undefined,\n weedSizeData: isSet(object.weedSizeData) ? TargetSizeData.fromJSON(object.weedSizeData) : undefined,\n cropSizeData: isSet(object.cropSizeData) ? TargetSizeData.fromJSON(object.cropSizeData) : undefined,\n countsByCategory: isObject(object.countsByCategory)\n ? Object.entries(object.countsByCategory).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n targetedLaserTimeData: isSet(object.targetedLaserTimeData)\n ? RequiredLaserTimeData.fromJSON(object.targetedLaserTimeData)\n : undefined,\n untargetedLaserTimeData: isSet(object.untargetedLaserTimeData)\n ? RequiredLaserTimeData.fromJSON(object.untargetedLaserTimeData)\n : undefined,\n validCropCount: isSet(object.validCropCount) ? globalThis.Number(object.validCropCount) : 0,\n };\n },\n\n toJSON(message: WeedCounterChunk): unknown {\n const obj: any = {};\n if (message.conclusionCounts !== undefined) {\n obj.conclusionCounts = CountsByConclusionType.toJSON(message.conclusionCounts);\n }\n if (message.weedSizeData !== undefined) {\n obj.weedSizeData = TargetSizeData.toJSON(message.weedSizeData);\n }\n if (message.cropSizeData !== undefined) {\n obj.cropSizeData = TargetSizeData.toJSON(message.cropSizeData);\n }\n if (message.countsByCategory) {\n const entries = Object.entries(message.countsByCategory);\n if (entries.length > 0) {\n obj.countsByCategory = {};\n entries.forEach(([k, v]) => {\n obj.countsByCategory[k] = Math.round(v);\n });\n }\n }\n if (message.targetedLaserTimeData !== undefined) {\n obj.targetedLaserTimeData = RequiredLaserTimeData.toJSON(message.targetedLaserTimeData);\n }\n if (message.untargetedLaserTimeData !== undefined) {\n obj.untargetedLaserTimeData = RequiredLaserTimeData.toJSON(message.untargetedLaserTimeData);\n }\n if (message.validCropCount !== 0) {\n obj.validCropCount = Math.round(message.validCropCount);\n }\n return obj;\n },\n\n create, I>>(base?: I): WeedCounterChunk {\n return WeedCounterChunk.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): WeedCounterChunk {\n const message = createBaseWeedCounterChunk();\n message.conclusionCounts = (object.conclusionCounts !== undefined && object.conclusionCounts !== null)\n ? CountsByConclusionType.fromPartial(object.conclusionCounts)\n : undefined;\n message.weedSizeData = (object.weedSizeData !== undefined && object.weedSizeData !== null)\n ? TargetSizeData.fromPartial(object.weedSizeData)\n : undefined;\n message.cropSizeData = (object.cropSizeData !== undefined && object.cropSizeData !== null)\n ? TargetSizeData.fromPartial(object.cropSizeData)\n : undefined;\n message.countsByCategory = Object.entries(object.countsByCategory ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n message.targetedLaserTimeData =\n (object.targetedLaserTimeData !== undefined && object.targetedLaserTimeData !== null)\n ? RequiredLaserTimeData.fromPartial(object.targetedLaserTimeData)\n : undefined;\n message.untargetedLaserTimeData =\n (object.untargetedLaserTimeData !== undefined && object.untargetedLaserTimeData !== null)\n ? RequiredLaserTimeData.fromPartial(object.untargetedLaserTimeData)\n : undefined;\n message.validCropCount = object.validCropCount ?? 0;\n return message;\n },\n};\n\nfunction createBaseWeedCounterChunk_CountsByCategoryEntry(): WeedCounterChunk_CountsByCategoryEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const WeedCounterChunk_CountsByCategoryEntry: MessageFns = {\n encode(message: WeedCounterChunk_CountsByCategoryEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(16).uint32(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): WeedCounterChunk_CountsByCategoryEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWeedCounterChunk_CountsByCategoryEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.value = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): WeedCounterChunk_CountsByCategoryEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: WeedCounterChunk_CountsByCategoryEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = Math.round(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): WeedCounterChunk_CountsByCategoryEntry {\n return WeedCounterChunk_CountsByCategoryEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): WeedCounterChunk_CountsByCategoryEntry {\n const message = createBaseWeedCounterChunk_CountsByCategoryEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseWheelEncoderSpatialData(): WheelEncoderSpatialData {\n return { startPosM: 0, endPosM: 0 };\n}\n\nexport const WheelEncoderSpatialData: MessageFns = {\n encode(message: WheelEncoderSpatialData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.startPosM !== 0) {\n writer.uint32(13).float(message.startPosM);\n }\n if (message.endPosM !== 0) {\n writer.uint32(21).float(message.endPosM);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): WheelEncoderSpatialData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWheelEncoderSpatialData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.startPosM = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.endPosM = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): WheelEncoderSpatialData {\n return {\n startPosM: isSet(object.startPosM) ? globalThis.Number(object.startPosM) : 0,\n endPosM: isSet(object.endPosM) ? globalThis.Number(object.endPosM) : 0,\n };\n },\n\n toJSON(message: WheelEncoderSpatialData): unknown {\n const obj: any = {};\n if (message.startPosM !== 0) {\n obj.startPosM = message.startPosM;\n }\n if (message.endPosM !== 0) {\n obj.endPosM = message.endPosM;\n }\n return obj;\n },\n\n create, I>>(base?: I): WheelEncoderSpatialData {\n return WheelEncoderSpatialData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): WheelEncoderSpatialData {\n const message = createBaseWheelEncoderSpatialData();\n message.startPosM = object.startPosM ?? 0;\n message.endPosM = object.endPosM ?? 0;\n return message;\n },\n};\n\nfunction createBaseBandingSpatialData(): BandingSpatialData {\n return { percentBanded: 0 };\n}\n\nexport const BandingSpatialData: MessageFns = {\n encode(message: BandingSpatialData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.percentBanded !== 0) {\n writer.uint32(13).float(message.percentBanded);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BandingSpatialData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBandingSpatialData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.percentBanded = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BandingSpatialData {\n return { percentBanded: isSet(object.percentBanded) ? globalThis.Number(object.percentBanded) : 0 };\n },\n\n toJSON(message: BandingSpatialData): unknown {\n const obj: any = {};\n if (message.percentBanded !== 0) {\n obj.percentBanded = message.percentBanded;\n }\n return obj;\n },\n\n create, I>>(base?: I): BandingSpatialData {\n return BandingSpatialData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BandingSpatialData {\n const message = createBaseBandingSpatialData();\n message.percentBanded = object.percentBanded ?? 0;\n return message;\n },\n};\n\nfunction createBaseImplementWidthSpatialData(): ImplementWidthSpatialData {\n return { widthMm: 0 };\n}\n\nexport const ImplementWidthSpatialData: MessageFns = {\n encode(message: ImplementWidthSpatialData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.widthMm !== 0) {\n writer.uint32(13).float(message.widthMm);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ImplementWidthSpatialData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImplementWidthSpatialData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.widthMm = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ImplementWidthSpatialData {\n return { widthMm: isSet(object.widthMm) ? globalThis.Number(object.widthMm) : 0 };\n },\n\n toJSON(message: ImplementWidthSpatialData): unknown {\n const obj: any = {};\n if (message.widthMm !== 0) {\n obj.widthMm = message.widthMm;\n }\n return obj;\n },\n\n create, I>>(base?: I): ImplementWidthSpatialData {\n return ImplementWidthSpatialData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ImplementWidthSpatialData {\n const message = createBaseImplementWidthSpatialData();\n message.widthMm = object.widthMm ?? 0;\n return message;\n },\n};\n\nfunction createBaseVelocitySpatialMetric(): VelocitySpatialMetric {\n return { avgTargetVel: {} };\n}\n\nexport const VelocitySpatialMetric: MessageFns = {\n encode(message: VelocitySpatialMetric, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.avgTargetVel).forEach(([key, value]) => {\n VelocitySpatialMetric_AvgTargetVelEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): VelocitySpatialMetric {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVelocitySpatialMetric();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = VelocitySpatialMetric_AvgTargetVelEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.avgTargetVel[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): VelocitySpatialMetric {\n return {\n avgTargetVel: isObject(object.avgTargetVel)\n ? Object.entries(object.avgTargetVel).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: VelocitySpatialMetric): unknown {\n const obj: any = {};\n if (message.avgTargetVel) {\n const entries = Object.entries(message.avgTargetVel);\n if (entries.length > 0) {\n obj.avgTargetVel = {};\n entries.forEach(([k, v]) => {\n obj.avgTargetVel[k] = v;\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): VelocitySpatialMetric {\n return VelocitySpatialMetric.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): VelocitySpatialMetric {\n const message = createBaseVelocitySpatialMetric();\n message.avgTargetVel = Object.entries(object.avgTargetVel ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseVelocitySpatialMetric_AvgTargetVelEntry(): VelocitySpatialMetric_AvgTargetVelEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const VelocitySpatialMetric_AvgTargetVelEntry: MessageFns = {\n encode(message: VelocitySpatialMetric_AvgTargetVelEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(21).float(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): VelocitySpatialMetric_AvgTargetVelEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVelocitySpatialMetric_AvgTargetVelEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.value = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): VelocitySpatialMetric_AvgTargetVelEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: VelocitySpatialMetric_AvgTargetVelEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): VelocitySpatialMetric_AvgTargetVelEntry {\n return VelocitySpatialMetric_AvgTargetVelEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): VelocitySpatialMetric_AvgTargetVelEntry {\n const message = createBaseVelocitySpatialMetric_AvgTargetVelEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseJobMetric(): JobMetric {\n return { jobId: \"\" };\n}\n\nexport const JobMetric: MessageFns = {\n encode(message: JobMetric, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.jobId !== \"\") {\n writer.uint32(10).string(message.jobId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): JobMetric {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseJobMetric();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.jobId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): JobMetric {\n return { jobId: isSet(object.jobId) ? globalThis.String(object.jobId) : \"\" };\n },\n\n toJSON(message: JobMetric): unknown {\n const obj: any = {};\n if (message.jobId !== \"\") {\n obj.jobId = message.jobId;\n }\n return obj;\n },\n\n create, I>>(base?: I): JobMetric {\n return JobMetric.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): JobMetric {\n const message = createBaseJobMetric();\n message.jobId = object.jobId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseHWMetric(): HWMetric {\n return { lifted: false, estopped: false, laserKey: false, interlock: false, waterProtect: false };\n}\n\nexport const HWMetric: MessageFns = {\n encode(message: HWMetric, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.lifted !== false) {\n writer.uint32(8).bool(message.lifted);\n }\n if (message.estopped !== false) {\n writer.uint32(16).bool(message.estopped);\n }\n if (message.laserKey !== false) {\n writer.uint32(24).bool(message.laserKey);\n }\n if (message.interlock !== false) {\n writer.uint32(32).bool(message.interlock);\n }\n if (message.waterProtect !== false) {\n writer.uint32(40).bool(message.waterProtect);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HWMetric {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHWMetric();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.lifted = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.estopped = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.laserKey = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.interlock = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.waterProtect = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HWMetric {\n return {\n lifted: isSet(object.lifted) ? globalThis.Boolean(object.lifted) : false,\n estopped: isSet(object.estopped) ? globalThis.Boolean(object.estopped) : false,\n laserKey: isSet(object.laserKey) ? globalThis.Boolean(object.laserKey) : false,\n interlock: isSet(object.interlock) ? globalThis.Boolean(object.interlock) : false,\n waterProtect: isSet(object.waterProtect) ? globalThis.Boolean(object.waterProtect) : false,\n };\n },\n\n toJSON(message: HWMetric): unknown {\n const obj: any = {};\n if (message.lifted !== false) {\n obj.lifted = message.lifted;\n }\n if (message.estopped !== false) {\n obj.estopped = message.estopped;\n }\n if (message.laserKey !== false) {\n obj.laserKey = message.laserKey;\n }\n if (message.interlock !== false) {\n obj.interlock = message.interlock;\n }\n if (message.waterProtect !== false) {\n obj.waterProtect = message.waterProtect;\n }\n return obj;\n },\n\n create, I>>(base?: I): HWMetric {\n return HWMetric.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): HWMetric {\n const message = createBaseHWMetric();\n message.lifted = object.lifted ?? false;\n message.estopped = object.estopped ?? false;\n message.laserKey = object.laserKey ?? false;\n message.interlock = object.interlock ?? false;\n message.waterProtect = object.waterProtect ?? false;\n return message;\n },\n};\n\nfunction createBaseSpatialMetricBlock(): SpatialMetricBlock {\n return {\n start: undefined,\n end: undefined,\n weedCount: undefined,\n weData: undefined,\n bandingData: undefined,\n implementWidthData: undefined,\n velData: undefined,\n startLeft: undefined,\n startRight: undefined,\n endLeft: undefined,\n endRight: undefined,\n jobMetric: undefined,\n suspicious: false,\n hwMetric: undefined,\n };\n}\n\nexport const SpatialMetricBlock: MessageFns = {\n encode(message: SpatialMetricBlock, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.start !== undefined) {\n SpatialPosition.encode(message.start, writer.uint32(10).fork()).join();\n }\n if (message.end !== undefined) {\n SpatialPosition.encode(message.end, writer.uint32(18).fork()).join();\n }\n if (message.weedCount !== undefined) {\n WeedCounterChunk.encode(message.weedCount, writer.uint32(26).fork()).join();\n }\n if (message.weData !== undefined) {\n WheelEncoderSpatialData.encode(message.weData, writer.uint32(34).fork()).join();\n }\n if (message.bandingData !== undefined) {\n BandingSpatialData.encode(message.bandingData, writer.uint32(42).fork()).join();\n }\n if (message.implementWidthData !== undefined) {\n ImplementWidthSpatialData.encode(message.implementWidthData, writer.uint32(50).fork()).join();\n }\n if (message.velData !== undefined) {\n VelocitySpatialMetric.encode(message.velData, writer.uint32(58).fork()).join();\n }\n if (message.startLeft !== undefined) {\n SpatialPosition.encode(message.startLeft, writer.uint32(66).fork()).join();\n }\n if (message.startRight !== undefined) {\n SpatialPosition.encode(message.startRight, writer.uint32(74).fork()).join();\n }\n if (message.endLeft !== undefined) {\n SpatialPosition.encode(message.endLeft, writer.uint32(82).fork()).join();\n }\n if (message.endRight !== undefined) {\n SpatialPosition.encode(message.endRight, writer.uint32(90).fork()).join();\n }\n if (message.jobMetric !== undefined) {\n JobMetric.encode(message.jobMetric, writer.uint32(98).fork()).join();\n }\n if (message.suspicious !== false) {\n writer.uint32(104).bool(message.suspicious);\n }\n if (message.hwMetric !== undefined) {\n HWMetric.encode(message.hwMetric, writer.uint32(114).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SpatialMetricBlock {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSpatialMetricBlock();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.start = SpatialPosition.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.end = SpatialPosition.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.weedCount = WeedCounterChunk.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.weData = WheelEncoderSpatialData.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.bandingData = BandingSpatialData.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.implementWidthData = ImplementWidthSpatialData.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.velData = VelocitySpatialMetric.decode(reader, reader.uint32());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.startLeft = SpatialPosition.decode(reader, reader.uint32());\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.startRight = SpatialPosition.decode(reader, reader.uint32());\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.endLeft = SpatialPosition.decode(reader, reader.uint32());\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.endRight = SpatialPosition.decode(reader, reader.uint32());\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.jobMetric = JobMetric.decode(reader, reader.uint32());\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n\n message.suspicious = reader.bool();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.hwMetric = HWMetric.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SpatialMetricBlock {\n return {\n start: isSet(object.start) ? SpatialPosition.fromJSON(object.start) : undefined,\n end: isSet(object.end) ? SpatialPosition.fromJSON(object.end) : undefined,\n weedCount: isSet(object.weedCount) ? WeedCounterChunk.fromJSON(object.weedCount) : undefined,\n weData: isSet(object.weData) ? WheelEncoderSpatialData.fromJSON(object.weData) : undefined,\n bandingData: isSet(object.bandingData) ? BandingSpatialData.fromJSON(object.bandingData) : undefined,\n implementWidthData: isSet(object.implementWidthData)\n ? ImplementWidthSpatialData.fromJSON(object.implementWidthData)\n : undefined,\n velData: isSet(object.velData) ? VelocitySpatialMetric.fromJSON(object.velData) : undefined,\n startLeft: isSet(object.startLeft) ? SpatialPosition.fromJSON(object.startLeft) : undefined,\n startRight: isSet(object.startRight) ? SpatialPosition.fromJSON(object.startRight) : undefined,\n endLeft: isSet(object.endLeft) ? SpatialPosition.fromJSON(object.endLeft) : undefined,\n endRight: isSet(object.endRight) ? SpatialPosition.fromJSON(object.endRight) : undefined,\n jobMetric: isSet(object.jobMetric) ? JobMetric.fromJSON(object.jobMetric) : undefined,\n suspicious: isSet(object.suspicious) ? globalThis.Boolean(object.suspicious) : false,\n hwMetric: isSet(object.hwMetric) ? HWMetric.fromJSON(object.hwMetric) : undefined,\n };\n },\n\n toJSON(message: SpatialMetricBlock): unknown {\n const obj: any = {};\n if (message.start !== undefined) {\n obj.start = SpatialPosition.toJSON(message.start);\n }\n if (message.end !== undefined) {\n obj.end = SpatialPosition.toJSON(message.end);\n }\n if (message.weedCount !== undefined) {\n obj.weedCount = WeedCounterChunk.toJSON(message.weedCount);\n }\n if (message.weData !== undefined) {\n obj.weData = WheelEncoderSpatialData.toJSON(message.weData);\n }\n if (message.bandingData !== undefined) {\n obj.bandingData = BandingSpatialData.toJSON(message.bandingData);\n }\n if (message.implementWidthData !== undefined) {\n obj.implementWidthData = ImplementWidthSpatialData.toJSON(message.implementWidthData);\n }\n if (message.velData !== undefined) {\n obj.velData = VelocitySpatialMetric.toJSON(message.velData);\n }\n if (message.startLeft !== undefined) {\n obj.startLeft = SpatialPosition.toJSON(message.startLeft);\n }\n if (message.startRight !== undefined) {\n obj.startRight = SpatialPosition.toJSON(message.startRight);\n }\n if (message.endLeft !== undefined) {\n obj.endLeft = SpatialPosition.toJSON(message.endLeft);\n }\n if (message.endRight !== undefined) {\n obj.endRight = SpatialPosition.toJSON(message.endRight);\n }\n if (message.jobMetric !== undefined) {\n obj.jobMetric = JobMetric.toJSON(message.jobMetric);\n }\n if (message.suspicious !== false) {\n obj.suspicious = message.suspicious;\n }\n if (message.hwMetric !== undefined) {\n obj.hwMetric = HWMetric.toJSON(message.hwMetric);\n }\n return obj;\n },\n\n create, I>>(base?: I): SpatialMetricBlock {\n return SpatialMetricBlock.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SpatialMetricBlock {\n const message = createBaseSpatialMetricBlock();\n message.start = (object.start !== undefined && object.start !== null)\n ? SpatialPosition.fromPartial(object.start)\n : undefined;\n message.end = (object.end !== undefined && object.end !== null)\n ? SpatialPosition.fromPartial(object.end)\n : undefined;\n message.weedCount = (object.weedCount !== undefined && object.weedCount !== null)\n ? WeedCounterChunk.fromPartial(object.weedCount)\n : undefined;\n message.weData = (object.weData !== undefined && object.weData !== null)\n ? WheelEncoderSpatialData.fromPartial(object.weData)\n : undefined;\n message.bandingData = (object.bandingData !== undefined && object.bandingData !== null)\n ? BandingSpatialData.fromPartial(object.bandingData)\n : undefined;\n message.implementWidthData = (object.implementWidthData !== undefined && object.implementWidthData !== null)\n ? ImplementWidthSpatialData.fromPartial(object.implementWidthData)\n : undefined;\n message.velData = (object.velData !== undefined && object.velData !== null)\n ? VelocitySpatialMetric.fromPartial(object.velData)\n : undefined;\n message.startLeft = (object.startLeft !== undefined && object.startLeft !== null)\n ? SpatialPosition.fromPartial(object.startLeft)\n : undefined;\n message.startRight = (object.startRight !== undefined && object.startRight !== null)\n ? SpatialPosition.fromPartial(object.startRight)\n : undefined;\n message.endLeft = (object.endLeft !== undefined && object.endLeft !== null)\n ? SpatialPosition.fromPartial(object.endLeft)\n : undefined;\n message.endRight = (object.endRight !== undefined && object.endRight !== null)\n ? SpatialPosition.fromPartial(object.endRight)\n : undefined;\n message.jobMetric = (object.jobMetric !== undefined && object.jobMetric !== null)\n ? JobMetric.fromPartial(object.jobMetric)\n : undefined;\n message.suspicious = object.suspicious ?? false;\n message.hwMetric = (object.hwMetric !== undefined && object.hwMetric !== null)\n ? HWMetric.fromPartial(object.hwMetric)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/spatial.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { SpatialMetricBlock } from \"../metrics/metrics\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.spatial\";\n\nexport interface BlockResponse {\n db: DB | undefined;\n block: SpatialMetricBlock | undefined;\n serial: string;\n}\n\nexport interface BlocksResponse {\n blocks: BlockResponse[];\n queryLimitReached: boolean;\n}\n\nexport interface BlocksByDateResponse {\n blocks: { [key: string]: BlocksResponse };\n}\n\nexport interface BlocksByDateResponse_BlocksEntry {\n key: string;\n value: BlocksResponse | undefined;\n}\n\nexport interface BlocksByDateByRobotResponse {\n blocks: { [key: string]: BlocksByDateResponse };\n}\n\nexport interface BlocksByDateByRobotResponse_BlocksEntry {\n key: string;\n value: BlocksByDateResponse | undefined;\n}\n\nfunction createBaseBlockResponse(): BlockResponse {\n return { db: undefined, block: undefined, serial: \"\" };\n}\n\nexport const BlockResponse: MessageFns = {\n encode(message: BlockResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.block !== undefined) {\n SpatialMetricBlock.encode(message.block, writer.uint32(18).fork()).join();\n }\n if (message.serial !== \"\") {\n writer.uint32(26).string(message.serial);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BlockResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBlockResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.block = SpatialMetricBlock.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.serial = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BlockResponse {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n block: isSet(object.block) ? SpatialMetricBlock.fromJSON(object.block) : undefined,\n serial: isSet(object.serial) ? globalThis.String(object.serial) : \"\",\n };\n },\n\n toJSON(message: BlockResponse): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.block !== undefined) {\n obj.block = SpatialMetricBlock.toJSON(message.block);\n }\n if (message.serial !== \"\") {\n obj.serial = message.serial;\n }\n return obj;\n },\n\n create, I>>(base?: I): BlockResponse {\n return BlockResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BlockResponse {\n const message = createBaseBlockResponse();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.block = (object.block !== undefined && object.block !== null)\n ? SpatialMetricBlock.fromPartial(object.block)\n : undefined;\n message.serial = object.serial ?? \"\";\n return message;\n },\n};\n\nfunction createBaseBlocksResponse(): BlocksResponse {\n return { blocks: [], queryLimitReached: false };\n}\n\nexport const BlocksResponse: MessageFns = {\n encode(message: BlocksResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.blocks) {\n BlockResponse.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.queryLimitReached !== false) {\n writer.uint32(16).bool(message.queryLimitReached);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BlocksResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBlocksResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.blocks.push(BlockResponse.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.queryLimitReached = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BlocksResponse {\n return {\n blocks: globalThis.Array.isArray(object?.blocks) ? object.blocks.map((e: any) => BlockResponse.fromJSON(e)) : [],\n queryLimitReached: isSet(object.queryLimitReached) ? globalThis.Boolean(object.queryLimitReached) : false,\n };\n },\n\n toJSON(message: BlocksResponse): unknown {\n const obj: any = {};\n if (message.blocks?.length) {\n obj.blocks = message.blocks.map((e) => BlockResponse.toJSON(e));\n }\n if (message.queryLimitReached !== false) {\n obj.queryLimitReached = message.queryLimitReached;\n }\n return obj;\n },\n\n create, I>>(base?: I): BlocksResponse {\n return BlocksResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BlocksResponse {\n const message = createBaseBlocksResponse();\n message.blocks = object.blocks?.map((e) => BlockResponse.fromPartial(e)) || [];\n message.queryLimitReached = object.queryLimitReached ?? false;\n return message;\n },\n};\n\nfunction createBaseBlocksByDateResponse(): BlocksByDateResponse {\n return { blocks: {} };\n}\n\nexport const BlocksByDateResponse: MessageFns = {\n encode(message: BlocksByDateResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.blocks).forEach(([key, value]) => {\n BlocksByDateResponse_BlocksEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BlocksByDateResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBlocksByDateResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = BlocksByDateResponse_BlocksEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.blocks[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BlocksByDateResponse {\n return {\n blocks: isObject(object.blocks)\n ? Object.entries(object.blocks).reduce<{ [key: string]: BlocksResponse }>((acc, [key, value]) => {\n acc[key] = BlocksResponse.fromJSON(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: BlocksByDateResponse): unknown {\n const obj: any = {};\n if (message.blocks) {\n const entries = Object.entries(message.blocks);\n if (entries.length > 0) {\n obj.blocks = {};\n entries.forEach(([k, v]) => {\n obj.blocks[k] = BlocksResponse.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): BlocksByDateResponse {\n return BlocksByDateResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BlocksByDateResponse {\n const message = createBaseBlocksByDateResponse();\n message.blocks = Object.entries(object.blocks ?? {}).reduce<{ [key: string]: BlocksResponse }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = BlocksResponse.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseBlocksByDateResponse_BlocksEntry(): BlocksByDateResponse_BlocksEntry {\n return { key: \"\", value: undefined };\n}\n\nexport const BlocksByDateResponse_BlocksEntry: MessageFns = {\n encode(message: BlocksByDateResponse_BlocksEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n BlocksResponse.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BlocksByDateResponse_BlocksEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBlocksByDateResponse_BlocksEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = BlocksResponse.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BlocksByDateResponse_BlocksEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? BlocksResponse.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: BlocksByDateResponse_BlocksEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== undefined) {\n obj.value = BlocksResponse.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): BlocksByDateResponse_BlocksEntry {\n return BlocksByDateResponse_BlocksEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): BlocksByDateResponse_BlocksEntry {\n const message = createBaseBlocksByDateResponse_BlocksEntry();\n message.key = object.key ?? \"\";\n message.value = (object.value !== undefined && object.value !== null)\n ? BlocksResponse.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseBlocksByDateByRobotResponse(): BlocksByDateByRobotResponse {\n return { blocks: {} };\n}\n\nexport const BlocksByDateByRobotResponse: MessageFns = {\n encode(message: BlocksByDateByRobotResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.blocks).forEach(([key, value]) => {\n BlocksByDateByRobotResponse_BlocksEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BlocksByDateByRobotResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBlocksByDateByRobotResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = BlocksByDateByRobotResponse_BlocksEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.blocks[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BlocksByDateByRobotResponse {\n return {\n blocks: isObject(object.blocks)\n ? Object.entries(object.blocks).reduce<{ [key: string]: BlocksByDateResponse }>((acc, [key, value]) => {\n acc[key] = BlocksByDateResponse.fromJSON(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: BlocksByDateByRobotResponse): unknown {\n const obj: any = {};\n if (message.blocks) {\n const entries = Object.entries(message.blocks);\n if (entries.length > 0) {\n obj.blocks = {};\n entries.forEach(([k, v]) => {\n obj.blocks[k] = BlocksByDateResponse.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): BlocksByDateByRobotResponse {\n return BlocksByDateByRobotResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BlocksByDateByRobotResponse {\n const message = createBaseBlocksByDateByRobotResponse();\n message.blocks = Object.entries(object.blocks ?? {}).reduce<{ [key: string]: BlocksByDateResponse }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = BlocksByDateResponse.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseBlocksByDateByRobotResponse_BlocksEntry(): BlocksByDateByRobotResponse_BlocksEntry {\n return { key: \"\", value: undefined };\n}\n\nexport const BlocksByDateByRobotResponse_BlocksEntry: MessageFns = {\n encode(message: BlocksByDateByRobotResponse_BlocksEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n BlocksByDateResponse.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BlocksByDateByRobotResponse_BlocksEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBlocksByDateByRobotResponse_BlocksEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = BlocksByDateResponse.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BlocksByDateByRobotResponse_BlocksEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? BlocksByDateResponse.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: BlocksByDateByRobotResponse_BlocksEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== undefined) {\n obj.value = BlocksByDateResponse.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): BlocksByDateByRobotResponse_BlocksEntry {\n return BlocksByDateByRobotResponse_BlocksEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): BlocksByDateByRobotResponse_BlocksEntry {\n const message = createBaseBlocksByDateByRobotResponse_BlocksEntry();\n message.key = object.key ?? \"\";\n message.value = (object.value !== undefined && object.value !== null)\n ? BlocksByDateResponse.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/configs.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { ConfigNode } from \"../config/api/config_service\";\n\nexport const protobufPackage = \"carbon.portal.configs\";\n\nexport interface ConfigResponse {\n config: ConfigNode | undefined;\n template?: ConfigNode | undefined;\n unsyncedKeys: UnsyncedKey[];\n}\n\nexport interface UnsyncedKey {\n key: string;\n ts: number;\n oldValue: string;\n newValue: string;\n}\n\nexport interface ConfigCrop {\n commonName: string;\n carbonName: string;\n id: string;\n pinned: string;\n recommended: string;\n isEnabled: boolean;\n}\n\nfunction createBaseConfigResponse(): ConfigResponse {\n return { config: undefined, template: undefined, unsyncedKeys: [] };\n}\n\nexport const ConfigResponse: MessageFns = {\n encode(message: ConfigResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.config !== undefined) {\n ConfigNode.encode(message.config, writer.uint32(10).fork()).join();\n }\n if (message.template !== undefined) {\n ConfigNode.encode(message.template, writer.uint32(18).fork()).join();\n }\n for (const v of message.unsyncedKeys) {\n UnsyncedKey.encode(v!, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ConfigResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConfigResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.config = ConfigNode.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.template = ConfigNode.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.unsyncedKeys.push(UnsyncedKey.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ConfigResponse {\n return {\n config: isSet(object.config) ? ConfigNode.fromJSON(object.config) : undefined,\n template: isSet(object.template) ? ConfigNode.fromJSON(object.template) : undefined,\n unsyncedKeys: globalThis.Array.isArray(object?.unsyncedKeys)\n ? object.unsyncedKeys.map((e: any) => UnsyncedKey.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ConfigResponse): unknown {\n const obj: any = {};\n if (message.config !== undefined) {\n obj.config = ConfigNode.toJSON(message.config);\n }\n if (message.template !== undefined) {\n obj.template = ConfigNode.toJSON(message.template);\n }\n if (message.unsyncedKeys?.length) {\n obj.unsyncedKeys = message.unsyncedKeys.map((e) => UnsyncedKey.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): ConfigResponse {\n return ConfigResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ConfigResponse {\n const message = createBaseConfigResponse();\n message.config = (object.config !== undefined && object.config !== null)\n ? ConfigNode.fromPartial(object.config)\n : undefined;\n message.template = (object.template !== undefined && object.template !== null)\n ? ConfigNode.fromPartial(object.template)\n : undefined;\n message.unsyncedKeys = object.unsyncedKeys?.map((e) => UnsyncedKey.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseUnsyncedKey(): UnsyncedKey {\n return { key: \"\", ts: 0, oldValue: \"\", newValue: \"\" };\n}\n\nexport const UnsyncedKey: MessageFns = {\n encode(message: UnsyncedKey, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.ts !== 0) {\n writer.uint32(16).uint64(message.ts);\n }\n if (message.oldValue !== \"\") {\n writer.uint32(26).string(message.oldValue);\n }\n if (message.newValue !== \"\") {\n writer.uint32(34).string(message.newValue);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UnsyncedKey {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUnsyncedKey();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.ts = longToNumber(reader.uint64());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.oldValue = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.newValue = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UnsyncedKey {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n ts: isSet(object.ts) ? globalThis.Number(object.ts) : 0,\n oldValue: isSet(object.oldValue) ? globalThis.String(object.oldValue) : \"\",\n newValue: isSet(object.newValue) ? globalThis.String(object.newValue) : \"\",\n };\n },\n\n toJSON(message: UnsyncedKey): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.ts !== 0) {\n obj.ts = Math.round(message.ts);\n }\n if (message.oldValue !== \"\") {\n obj.oldValue = message.oldValue;\n }\n if (message.newValue !== \"\") {\n obj.newValue = message.newValue;\n }\n return obj;\n },\n\n create, I>>(base?: I): UnsyncedKey {\n return UnsyncedKey.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UnsyncedKey {\n const message = createBaseUnsyncedKey();\n message.key = object.key ?? \"\";\n message.ts = object.ts ?? 0;\n message.oldValue = object.oldValue ?? \"\";\n message.newValue = object.newValue ?? \"\";\n return message;\n },\n};\n\nfunction createBaseConfigCrop(): ConfigCrop {\n return { commonName: \"\", carbonName: \"\", id: \"\", pinned: \"\", recommended: \"\", isEnabled: false };\n}\n\nexport const ConfigCrop: MessageFns = {\n encode(message: ConfigCrop, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.commonName !== \"\") {\n writer.uint32(10).string(message.commonName);\n }\n if (message.carbonName !== \"\") {\n writer.uint32(18).string(message.carbonName);\n }\n if (message.id !== \"\") {\n writer.uint32(26).string(message.id);\n }\n if (message.pinned !== \"\") {\n writer.uint32(34).string(message.pinned);\n }\n if (message.recommended !== \"\") {\n writer.uint32(42).string(message.recommended);\n }\n if (message.isEnabled !== false) {\n writer.uint32(48).bool(message.isEnabled);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ConfigCrop {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConfigCrop();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.commonName = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.carbonName = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.pinned = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.recommended = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.isEnabled = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ConfigCrop {\n return {\n commonName: isSet(object.commonName) ? globalThis.String(object.commonName) : \"\",\n carbonName: isSet(object.carbonName) ? globalThis.String(object.carbonName) : \"\",\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n pinned: isSet(object.pinned) ? globalThis.String(object.pinned) : \"\",\n recommended: isSet(object.recommended) ? globalThis.String(object.recommended) : \"\",\n isEnabled: isSet(object.isEnabled) ? globalThis.Boolean(object.isEnabled) : false,\n };\n },\n\n toJSON(message: ConfigCrop): unknown {\n const obj: any = {};\n if (message.commonName !== \"\") {\n obj.commonName = message.commonName;\n }\n if (message.carbonName !== \"\") {\n obj.carbonName = message.carbonName;\n }\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.pinned !== \"\") {\n obj.pinned = message.pinned;\n }\n if (message.recommended !== \"\") {\n obj.recommended = message.recommended;\n }\n if (message.isEnabled !== false) {\n obj.isEnabled = message.isEnabled;\n }\n return obj;\n },\n\n create, I>>(base?: I): ConfigCrop {\n return ConfigCrop.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ConfigCrop {\n const message = createBaseConfigCrop();\n message.commonName = object.commonName ?? \"\";\n message.carbonName = object.carbonName ?? \"\";\n message.id = object.id ?? \"\";\n message.pinned = object.pinned ?? \"\";\n message.recommended = object.recommended ?? \"\";\n message.isEnabled = object.isEnabled ?? false;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/veselka.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.veselka\";\n\nexport interface Image {\n id: string;\n location: string;\n robotId: string;\n useCase: string;\n role: string;\n created: number;\n url: string;\n height: number;\n width: number;\n ppi: number;\n valid: number;\n capturedAt: number;\n detectionJson: string;\n reasonJson: string;\n priority: string;\n camId: string;\n rowId: string;\n geoJson: string;\n crop: string;\n imageType: string;\n city: string;\n correctedHw: boolean;\n sessionName: string;\n cropId: string;\n focusMetric: number;\n geohash: string;\n quarantineReason: string;\n}\n\nexport interface CropConfidence {\n db: DB | undefined;\n robotId: number;\n cropId: string;\n latitude: number;\n longitude: number;\n precision: number;\n numTotalImages: number;\n numRegionalImages: number;\n confidence: string;\n}\n\nexport interface Crop {\n archived: boolean;\n carbonName: string;\n commonName: string;\n created: number;\n description: string;\n id: string;\n legacyCropName: string;\n notes: string;\n updated: number;\n}\n\nexport interface RobotCrop {\n crop: Crop | undefined;\n confidence: CropConfidence | undefined;\n}\n\nexport interface Model {\n id: string;\n created: number;\n updated: number;\n url: string;\n customer: string;\n crop: string;\n version: number;\n trainingDockerTag: string;\n gitSha: string;\n checksum: string;\n location: string;\n trainedAt: number;\n type: string;\n description: string;\n metadataJson: string;\n productionContainerVersion: string;\n testResultsJson: string;\n wandbJson: string;\n snapshotJson: string;\n isStub: boolean;\n isGoodToDeploy: boolean;\n robotName: string;\n environment: string;\n deploy: boolean;\n isPretraining: boolean;\n subType: string;\n datasetId: string;\n containerVersion: string;\n containerId: string;\n pipelineId: string;\n parentModelId: string;\n viableCropIds: string[];\n}\n\nfunction createBaseImage(): Image {\n return {\n id: \"\",\n location: \"\",\n robotId: \"\",\n useCase: \"\",\n role: \"\",\n created: 0,\n url: \"\",\n height: 0,\n width: 0,\n ppi: 0,\n valid: 0,\n capturedAt: 0,\n detectionJson: \"\",\n reasonJson: \"\",\n priority: \"\",\n camId: \"\",\n rowId: \"\",\n geoJson: \"\",\n crop: \"\",\n imageType: \"\",\n city: \"\",\n correctedHw: false,\n sessionName: \"\",\n cropId: \"\",\n focusMetric: 0,\n geohash: \"\",\n quarantineReason: \"\",\n };\n}\n\nexport const Image: MessageFns = {\n encode(message: Image, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.location !== \"\") {\n writer.uint32(18).string(message.location);\n }\n if (message.robotId !== \"\") {\n writer.uint32(26).string(message.robotId);\n }\n if (message.useCase !== \"\") {\n writer.uint32(34).string(message.useCase);\n }\n if (message.role !== \"\") {\n writer.uint32(42).string(message.role);\n }\n if (message.created !== 0) {\n writer.uint32(48).int64(message.created);\n }\n if (message.url !== \"\") {\n writer.uint32(58).string(message.url);\n }\n if (message.height !== 0) {\n writer.uint32(64).int64(message.height);\n }\n if (message.width !== 0) {\n writer.uint32(72).int64(message.width);\n }\n if (message.ppi !== 0) {\n writer.uint32(80).int64(message.ppi);\n }\n if (message.valid !== 0) {\n writer.uint32(88).int64(message.valid);\n }\n if (message.capturedAt !== 0) {\n writer.uint32(96).int64(message.capturedAt);\n }\n if (message.detectionJson !== \"\") {\n writer.uint32(106).string(message.detectionJson);\n }\n if (message.reasonJson !== \"\") {\n writer.uint32(114).string(message.reasonJson);\n }\n if (message.priority !== \"\") {\n writer.uint32(122).string(message.priority);\n }\n if (message.camId !== \"\") {\n writer.uint32(130).string(message.camId);\n }\n if (message.rowId !== \"\") {\n writer.uint32(138).string(message.rowId);\n }\n if (message.geoJson !== \"\") {\n writer.uint32(146).string(message.geoJson);\n }\n if (message.crop !== \"\") {\n writer.uint32(154).string(message.crop);\n }\n if (message.imageType !== \"\") {\n writer.uint32(162).string(message.imageType);\n }\n if (message.city !== \"\") {\n writer.uint32(170).string(message.city);\n }\n if (message.correctedHw !== false) {\n writer.uint32(176).bool(message.correctedHw);\n }\n if (message.sessionName !== \"\") {\n writer.uint32(186).string(message.sessionName);\n }\n if (message.cropId !== \"\") {\n writer.uint32(194).string(message.cropId);\n }\n if (message.focusMetric !== 0) {\n writer.uint32(200).int64(message.focusMetric);\n }\n if (message.geohash !== \"\") {\n writer.uint32(210).string(message.geohash);\n }\n if (message.quarantineReason !== \"\") {\n writer.uint32(218).string(message.quarantineReason);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Image {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.location = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.robotId = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.useCase = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.role = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.created = longToNumber(reader.int64());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.url = reader.string();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.height = longToNumber(reader.int64());\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.width = longToNumber(reader.int64());\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.ppi = longToNumber(reader.int64());\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.valid = longToNumber(reader.int64());\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n\n message.capturedAt = longToNumber(reader.int64());\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.detectionJson = reader.string();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.reasonJson = reader.string();\n continue;\n case 15:\n if (tag !== 122) {\n break;\n }\n\n message.priority = reader.string();\n continue;\n case 16:\n if (tag !== 130) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 17:\n if (tag !== 138) {\n break;\n }\n\n message.rowId = reader.string();\n continue;\n case 18:\n if (tag !== 146) {\n break;\n }\n\n message.geoJson = reader.string();\n continue;\n case 19:\n if (tag !== 154) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n\n message.imageType = reader.string();\n continue;\n case 21:\n if (tag !== 170) {\n break;\n }\n\n message.city = reader.string();\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n\n message.correctedHw = reader.bool();\n continue;\n case 23:\n if (tag !== 186) {\n break;\n }\n\n message.sessionName = reader.string();\n continue;\n case 24:\n if (tag !== 194) {\n break;\n }\n\n message.cropId = reader.string();\n continue;\n case 25:\n if (tag !== 200) {\n break;\n }\n\n message.focusMetric = longToNumber(reader.int64());\n continue;\n case 26:\n if (tag !== 210) {\n break;\n }\n\n message.geohash = reader.string();\n continue;\n case 27:\n if (tag !== 218) {\n break;\n }\n\n message.quarantineReason = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Image {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n location: isSet(object.location) ? globalThis.String(object.location) : \"\",\n robotId: isSet(object.robotId) ? globalThis.String(object.robotId) : \"\",\n useCase: isSet(object.useCase) ? globalThis.String(object.useCase) : \"\",\n role: isSet(object.role) ? globalThis.String(object.role) : \"\",\n created: isSet(object.created) ? globalThis.Number(object.created) : 0,\n url: isSet(object.url) ? globalThis.String(object.url) : \"\",\n height: isSet(object.height) ? globalThis.Number(object.height) : 0,\n width: isSet(object.width) ? globalThis.Number(object.width) : 0,\n ppi: isSet(object.ppi) ? globalThis.Number(object.ppi) : 0,\n valid: isSet(object.valid) ? globalThis.Number(object.valid) : 0,\n capturedAt: isSet(object.capturedAt) ? globalThis.Number(object.capturedAt) : 0,\n detectionJson: isSet(object.detectionJson) ? globalThis.String(object.detectionJson) : \"\",\n reasonJson: isSet(object.reasonJson) ? globalThis.String(object.reasonJson) : \"\",\n priority: isSet(object.priority) ? globalThis.String(object.priority) : \"\",\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n rowId: isSet(object.rowId) ? globalThis.String(object.rowId) : \"\",\n geoJson: isSet(object.geoJson) ? globalThis.String(object.geoJson) : \"\",\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n imageType: isSet(object.imageType) ? globalThis.String(object.imageType) : \"\",\n city: isSet(object.city) ? globalThis.String(object.city) : \"\",\n correctedHw: isSet(object.correctedHw) ? globalThis.Boolean(object.correctedHw) : false,\n sessionName: isSet(object.sessionName) ? globalThis.String(object.sessionName) : \"\",\n cropId: isSet(object.cropId) ? globalThis.String(object.cropId) : \"\",\n focusMetric: isSet(object.focusMetric) ? globalThis.Number(object.focusMetric) : 0,\n geohash: isSet(object.geohash) ? globalThis.String(object.geohash) : \"\",\n quarantineReason: isSet(object.quarantineReason) ? globalThis.String(object.quarantineReason) : \"\",\n };\n },\n\n toJSON(message: Image): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.location !== \"\") {\n obj.location = message.location;\n }\n if (message.robotId !== \"\") {\n obj.robotId = message.robotId;\n }\n if (message.useCase !== \"\") {\n obj.useCase = message.useCase;\n }\n if (message.role !== \"\") {\n obj.role = message.role;\n }\n if (message.created !== 0) {\n obj.created = Math.round(message.created);\n }\n if (message.url !== \"\") {\n obj.url = message.url;\n }\n if (message.height !== 0) {\n obj.height = Math.round(message.height);\n }\n if (message.width !== 0) {\n obj.width = Math.round(message.width);\n }\n if (message.ppi !== 0) {\n obj.ppi = Math.round(message.ppi);\n }\n if (message.valid !== 0) {\n obj.valid = Math.round(message.valid);\n }\n if (message.capturedAt !== 0) {\n obj.capturedAt = Math.round(message.capturedAt);\n }\n if (message.detectionJson !== \"\") {\n obj.detectionJson = message.detectionJson;\n }\n if (message.reasonJson !== \"\") {\n obj.reasonJson = message.reasonJson;\n }\n if (message.priority !== \"\") {\n obj.priority = message.priority;\n }\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.rowId !== \"\") {\n obj.rowId = message.rowId;\n }\n if (message.geoJson !== \"\") {\n obj.geoJson = message.geoJson;\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.imageType !== \"\") {\n obj.imageType = message.imageType;\n }\n if (message.city !== \"\") {\n obj.city = message.city;\n }\n if (message.correctedHw !== false) {\n obj.correctedHw = message.correctedHw;\n }\n if (message.sessionName !== \"\") {\n obj.sessionName = message.sessionName;\n }\n if (message.cropId !== \"\") {\n obj.cropId = message.cropId;\n }\n if (message.focusMetric !== 0) {\n obj.focusMetric = Math.round(message.focusMetric);\n }\n if (message.geohash !== \"\") {\n obj.geohash = message.geohash;\n }\n if (message.quarantineReason !== \"\") {\n obj.quarantineReason = message.quarantineReason;\n }\n return obj;\n },\n\n create, I>>(base?: I): Image {\n return Image.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Image {\n const message = createBaseImage();\n message.id = object.id ?? \"\";\n message.location = object.location ?? \"\";\n message.robotId = object.robotId ?? \"\";\n message.useCase = object.useCase ?? \"\";\n message.role = object.role ?? \"\";\n message.created = object.created ?? 0;\n message.url = object.url ?? \"\";\n message.height = object.height ?? 0;\n message.width = object.width ?? 0;\n message.ppi = object.ppi ?? 0;\n message.valid = object.valid ?? 0;\n message.capturedAt = object.capturedAt ?? 0;\n message.detectionJson = object.detectionJson ?? \"\";\n message.reasonJson = object.reasonJson ?? \"\";\n message.priority = object.priority ?? \"\";\n message.camId = object.camId ?? \"\";\n message.rowId = object.rowId ?? \"\";\n message.geoJson = object.geoJson ?? \"\";\n message.crop = object.crop ?? \"\";\n message.imageType = object.imageType ?? \"\";\n message.city = object.city ?? \"\";\n message.correctedHw = object.correctedHw ?? false;\n message.sessionName = object.sessionName ?? \"\";\n message.cropId = object.cropId ?? \"\";\n message.focusMetric = object.focusMetric ?? 0;\n message.geohash = object.geohash ?? \"\";\n message.quarantineReason = object.quarantineReason ?? \"\";\n return message;\n },\n};\n\nfunction createBaseCropConfidence(): CropConfidence {\n return {\n db: undefined,\n robotId: 0,\n cropId: \"\",\n latitude: 0,\n longitude: 0,\n precision: 0,\n numTotalImages: 0,\n numRegionalImages: 0,\n confidence: \"\",\n };\n}\n\nexport const CropConfidence: MessageFns = {\n encode(message: CropConfidence, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.robotId !== 0) {\n writer.uint32(16).int64(message.robotId);\n }\n if (message.cropId !== \"\") {\n writer.uint32(26).string(message.cropId);\n }\n if (message.latitude !== 0) {\n writer.uint32(37).float(message.latitude);\n }\n if (message.longitude !== 0) {\n writer.uint32(45).float(message.longitude);\n }\n if (message.precision !== 0) {\n writer.uint32(48).int64(message.precision);\n }\n if (message.numTotalImages !== 0) {\n writer.uint32(56).int64(message.numTotalImages);\n }\n if (message.numRegionalImages !== 0) {\n writer.uint32(64).int64(message.numRegionalImages);\n }\n if (message.confidence !== \"\") {\n writer.uint32(74).string(message.confidence);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CropConfidence {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCropConfidence();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.robotId = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.cropId = reader.string();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.latitude = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n\n message.longitude = reader.float();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.precision = longToNumber(reader.int64());\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.numTotalImages = longToNumber(reader.int64());\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.numRegionalImages = longToNumber(reader.int64());\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.confidence = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CropConfidence {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n robotId: isSet(object.robotId) ? globalThis.Number(object.robotId) : 0,\n cropId: isSet(object.cropId) ? globalThis.String(object.cropId) : \"\",\n latitude: isSet(object.latitude) ? globalThis.Number(object.latitude) : 0,\n longitude: isSet(object.longitude) ? globalThis.Number(object.longitude) : 0,\n precision: isSet(object.precision) ? globalThis.Number(object.precision) : 0,\n numTotalImages: isSet(object.numTotalImages) ? globalThis.Number(object.numTotalImages) : 0,\n numRegionalImages: isSet(object.numRegionalImages) ? globalThis.Number(object.numRegionalImages) : 0,\n confidence: isSet(object.confidence) ? globalThis.String(object.confidence) : \"\",\n };\n },\n\n toJSON(message: CropConfidence): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.robotId !== 0) {\n obj.robotId = Math.round(message.robotId);\n }\n if (message.cropId !== \"\") {\n obj.cropId = message.cropId;\n }\n if (message.latitude !== 0) {\n obj.latitude = message.latitude;\n }\n if (message.longitude !== 0) {\n obj.longitude = message.longitude;\n }\n if (message.precision !== 0) {\n obj.precision = Math.round(message.precision);\n }\n if (message.numTotalImages !== 0) {\n obj.numTotalImages = Math.round(message.numTotalImages);\n }\n if (message.numRegionalImages !== 0) {\n obj.numRegionalImages = Math.round(message.numRegionalImages);\n }\n if (message.confidence !== \"\") {\n obj.confidence = message.confidence;\n }\n return obj;\n },\n\n create, I>>(base?: I): CropConfidence {\n return CropConfidence.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CropConfidence {\n const message = createBaseCropConfidence();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.robotId = object.robotId ?? 0;\n message.cropId = object.cropId ?? \"\";\n message.latitude = object.latitude ?? 0;\n message.longitude = object.longitude ?? 0;\n message.precision = object.precision ?? 0;\n message.numTotalImages = object.numTotalImages ?? 0;\n message.numRegionalImages = object.numRegionalImages ?? 0;\n message.confidence = object.confidence ?? \"\";\n return message;\n },\n};\n\nfunction createBaseCrop(): Crop {\n return {\n archived: false,\n carbonName: \"\",\n commonName: \"\",\n created: 0,\n description: \"\",\n id: \"\",\n legacyCropName: \"\",\n notes: \"\",\n updated: 0,\n };\n}\n\nexport const Crop: MessageFns = {\n encode(message: Crop, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.archived !== false) {\n writer.uint32(8).bool(message.archived);\n }\n if (message.carbonName !== \"\") {\n writer.uint32(18).string(message.carbonName);\n }\n if (message.commonName !== \"\") {\n writer.uint32(26).string(message.commonName);\n }\n if (message.created !== 0) {\n writer.uint32(32).int64(message.created);\n }\n if (message.description !== \"\") {\n writer.uint32(42).string(message.description);\n }\n if (message.id !== \"\") {\n writer.uint32(50).string(message.id);\n }\n if (message.legacyCropName !== \"\") {\n writer.uint32(58).string(message.legacyCropName);\n }\n if (message.notes !== \"\") {\n writer.uint32(66).string(message.notes);\n }\n if (message.updated !== 0) {\n writer.uint32(72).int64(message.updated);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Crop {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCrop();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.archived = reader.bool();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.carbonName = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.commonName = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.created = longToNumber(reader.int64());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.description = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.legacyCropName = reader.string();\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.notes = reader.string();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.updated = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Crop {\n return {\n archived: isSet(object.archived) ? globalThis.Boolean(object.archived) : false,\n carbonName: isSet(object.carbonName) ? globalThis.String(object.carbonName) : \"\",\n commonName: isSet(object.commonName) ? globalThis.String(object.commonName) : \"\",\n created: isSet(object.created) ? globalThis.Number(object.created) : 0,\n description: isSet(object.description) ? globalThis.String(object.description) : \"\",\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n legacyCropName: isSet(object.legacyCropName) ? globalThis.String(object.legacyCropName) : \"\",\n notes: isSet(object.notes) ? globalThis.String(object.notes) : \"\",\n updated: isSet(object.updated) ? globalThis.Number(object.updated) : 0,\n };\n },\n\n toJSON(message: Crop): unknown {\n const obj: any = {};\n if (message.archived !== false) {\n obj.archived = message.archived;\n }\n if (message.carbonName !== \"\") {\n obj.carbonName = message.carbonName;\n }\n if (message.commonName !== \"\") {\n obj.commonName = message.commonName;\n }\n if (message.created !== 0) {\n obj.created = Math.round(message.created);\n }\n if (message.description !== \"\") {\n obj.description = message.description;\n }\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.legacyCropName !== \"\") {\n obj.legacyCropName = message.legacyCropName;\n }\n if (message.notes !== \"\") {\n obj.notes = message.notes;\n }\n if (message.updated !== 0) {\n obj.updated = Math.round(message.updated);\n }\n return obj;\n },\n\n create, I>>(base?: I): Crop {\n return Crop.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Crop {\n const message = createBaseCrop();\n message.archived = object.archived ?? false;\n message.carbonName = object.carbonName ?? \"\";\n message.commonName = object.commonName ?? \"\";\n message.created = object.created ?? 0;\n message.description = object.description ?? \"\";\n message.id = object.id ?? \"\";\n message.legacyCropName = object.legacyCropName ?? \"\";\n message.notes = object.notes ?? \"\";\n message.updated = object.updated ?? 0;\n return message;\n },\n};\n\nfunction createBaseRobotCrop(): RobotCrop {\n return { crop: undefined, confidence: undefined };\n}\n\nexport const RobotCrop: MessageFns = {\n encode(message: RobotCrop, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.crop !== undefined) {\n Crop.encode(message.crop, writer.uint32(10).fork()).join();\n }\n if (message.confidence !== undefined) {\n CropConfidence.encode(message.confidence, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotCrop {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotCrop();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.crop = Crop.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.confidence = CropConfidence.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotCrop {\n return {\n crop: isSet(object.crop) ? Crop.fromJSON(object.crop) : undefined,\n confidence: isSet(object.confidence) ? CropConfidence.fromJSON(object.confidence) : undefined,\n };\n },\n\n toJSON(message: RobotCrop): unknown {\n const obj: any = {};\n if (message.crop !== undefined) {\n obj.crop = Crop.toJSON(message.crop);\n }\n if (message.confidence !== undefined) {\n obj.confidence = CropConfidence.toJSON(message.confidence);\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotCrop {\n return RobotCrop.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotCrop {\n const message = createBaseRobotCrop();\n message.crop = (object.crop !== undefined && object.crop !== null) ? Crop.fromPartial(object.crop) : undefined;\n message.confidence = (object.confidence !== undefined && object.confidence !== null)\n ? CropConfidence.fromPartial(object.confidence)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseModel(): Model {\n return {\n id: \"\",\n created: 0,\n updated: 0,\n url: \"\",\n customer: \"\",\n crop: \"\",\n version: 0,\n trainingDockerTag: \"\",\n gitSha: \"\",\n checksum: \"\",\n location: \"\",\n trainedAt: 0,\n type: \"\",\n description: \"\",\n metadataJson: \"\",\n productionContainerVersion: \"\",\n testResultsJson: \"\",\n wandbJson: \"\",\n snapshotJson: \"\",\n isStub: false,\n isGoodToDeploy: false,\n robotName: \"\",\n environment: \"\",\n deploy: false,\n isPretraining: false,\n subType: \"\",\n datasetId: \"\",\n containerVersion: \"\",\n containerId: \"\",\n pipelineId: \"\",\n parentModelId: \"\",\n viableCropIds: [],\n };\n}\n\nexport const Model: MessageFns = {\n encode(message: Model, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.created !== 0) {\n writer.uint32(16).int64(message.created);\n }\n if (message.updated !== 0) {\n writer.uint32(24).int64(message.updated);\n }\n if (message.url !== \"\") {\n writer.uint32(34).string(message.url);\n }\n if (message.customer !== \"\") {\n writer.uint32(42).string(message.customer);\n }\n if (message.crop !== \"\") {\n writer.uint32(50).string(message.crop);\n }\n if (message.version !== 0) {\n writer.uint32(56).int64(message.version);\n }\n if (message.trainingDockerTag !== \"\") {\n writer.uint32(66).string(message.trainingDockerTag);\n }\n if (message.gitSha !== \"\") {\n writer.uint32(74).string(message.gitSha);\n }\n if (message.checksum !== \"\") {\n writer.uint32(82).string(message.checksum);\n }\n if (message.location !== \"\") {\n writer.uint32(90).string(message.location);\n }\n if (message.trainedAt !== 0) {\n writer.uint32(96).int64(message.trainedAt);\n }\n if (message.type !== \"\") {\n writer.uint32(106).string(message.type);\n }\n if (message.description !== \"\") {\n writer.uint32(114).string(message.description);\n }\n if (message.metadataJson !== \"\") {\n writer.uint32(122).string(message.metadataJson);\n }\n if (message.productionContainerVersion !== \"\") {\n writer.uint32(130).string(message.productionContainerVersion);\n }\n if (message.testResultsJson !== \"\") {\n writer.uint32(138).string(message.testResultsJson);\n }\n if (message.wandbJson !== \"\") {\n writer.uint32(146).string(message.wandbJson);\n }\n if (message.snapshotJson !== \"\") {\n writer.uint32(154).string(message.snapshotJson);\n }\n if (message.isStub !== false) {\n writer.uint32(160).bool(message.isStub);\n }\n if (message.isGoodToDeploy !== false) {\n writer.uint32(168).bool(message.isGoodToDeploy);\n }\n if (message.robotName !== \"\") {\n writer.uint32(178).string(message.robotName);\n }\n if (message.environment !== \"\") {\n writer.uint32(186).string(message.environment);\n }\n if (message.deploy !== false) {\n writer.uint32(192).bool(message.deploy);\n }\n if (message.isPretraining !== false) {\n writer.uint32(200).bool(message.isPretraining);\n }\n if (message.subType !== \"\") {\n writer.uint32(210).string(message.subType);\n }\n if (message.datasetId !== \"\") {\n writer.uint32(218).string(message.datasetId);\n }\n if (message.containerVersion !== \"\") {\n writer.uint32(226).string(message.containerVersion);\n }\n if (message.containerId !== \"\") {\n writer.uint32(234).string(message.containerId);\n }\n if (message.pipelineId !== \"\") {\n writer.uint32(242).string(message.pipelineId);\n }\n if (message.parentModelId !== \"\") {\n writer.uint32(250).string(message.parentModelId);\n }\n for (const v of message.viableCropIds) {\n writer.uint32(258).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Model {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseModel();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.created = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.updated = longToNumber(reader.int64());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.url = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.customer = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.version = longToNumber(reader.int64());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.trainingDockerTag = reader.string();\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.gitSha = reader.string();\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.checksum = reader.string();\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.location = reader.string();\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n\n message.trainedAt = longToNumber(reader.int64());\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.type = reader.string();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.description = reader.string();\n continue;\n case 15:\n if (tag !== 122) {\n break;\n }\n\n message.metadataJson = reader.string();\n continue;\n case 16:\n if (tag !== 130) {\n break;\n }\n\n message.productionContainerVersion = reader.string();\n continue;\n case 17:\n if (tag !== 138) {\n break;\n }\n\n message.testResultsJson = reader.string();\n continue;\n case 18:\n if (tag !== 146) {\n break;\n }\n\n message.wandbJson = reader.string();\n continue;\n case 19:\n if (tag !== 154) {\n break;\n }\n\n message.snapshotJson = reader.string();\n continue;\n case 20:\n if (tag !== 160) {\n break;\n }\n\n message.isStub = reader.bool();\n continue;\n case 21:\n if (tag !== 168) {\n break;\n }\n\n message.isGoodToDeploy = reader.bool();\n continue;\n case 22:\n if (tag !== 178) {\n break;\n }\n\n message.robotName = reader.string();\n continue;\n case 23:\n if (tag !== 186) {\n break;\n }\n\n message.environment = reader.string();\n continue;\n case 24:\n if (tag !== 192) {\n break;\n }\n\n message.deploy = reader.bool();\n continue;\n case 25:\n if (tag !== 200) {\n break;\n }\n\n message.isPretraining = reader.bool();\n continue;\n case 26:\n if (tag !== 210) {\n break;\n }\n\n message.subType = reader.string();\n continue;\n case 27:\n if (tag !== 218) {\n break;\n }\n\n message.datasetId = reader.string();\n continue;\n case 28:\n if (tag !== 226) {\n break;\n }\n\n message.containerVersion = reader.string();\n continue;\n case 29:\n if (tag !== 234) {\n break;\n }\n\n message.containerId = reader.string();\n continue;\n case 30:\n if (tag !== 242) {\n break;\n }\n\n message.pipelineId = reader.string();\n continue;\n case 31:\n if (tag !== 250) {\n break;\n }\n\n message.parentModelId = reader.string();\n continue;\n case 32:\n if (tag !== 258) {\n break;\n }\n\n message.viableCropIds.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Model {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n created: isSet(object.created) ? globalThis.Number(object.created) : 0,\n updated: isSet(object.updated) ? globalThis.Number(object.updated) : 0,\n url: isSet(object.url) ? globalThis.String(object.url) : \"\",\n customer: isSet(object.customer) ? globalThis.String(object.customer) : \"\",\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n version: isSet(object.version) ? globalThis.Number(object.version) : 0,\n trainingDockerTag: isSet(object.trainingDockerTag) ? globalThis.String(object.trainingDockerTag) : \"\",\n gitSha: isSet(object.gitSha) ? globalThis.String(object.gitSha) : \"\",\n checksum: isSet(object.checksum) ? globalThis.String(object.checksum) : \"\",\n location: isSet(object.location) ? globalThis.String(object.location) : \"\",\n trainedAt: isSet(object.trainedAt) ? globalThis.Number(object.trainedAt) : 0,\n type: isSet(object.type) ? globalThis.String(object.type) : \"\",\n description: isSet(object.description) ? globalThis.String(object.description) : \"\",\n metadataJson: isSet(object.metadataJson) ? globalThis.String(object.metadataJson) : \"\",\n productionContainerVersion: isSet(object.productionContainerVersion)\n ? globalThis.String(object.productionContainerVersion)\n : \"\",\n testResultsJson: isSet(object.testResultsJson) ? globalThis.String(object.testResultsJson) : \"\",\n wandbJson: isSet(object.wandbJson) ? globalThis.String(object.wandbJson) : \"\",\n snapshotJson: isSet(object.snapshotJson) ? globalThis.String(object.snapshotJson) : \"\",\n isStub: isSet(object.isStub) ? globalThis.Boolean(object.isStub) : false,\n isGoodToDeploy: isSet(object.isGoodToDeploy) ? globalThis.Boolean(object.isGoodToDeploy) : false,\n robotName: isSet(object.robotName) ? globalThis.String(object.robotName) : \"\",\n environment: isSet(object.environment) ? globalThis.String(object.environment) : \"\",\n deploy: isSet(object.deploy) ? globalThis.Boolean(object.deploy) : false,\n isPretraining: isSet(object.isPretraining) ? globalThis.Boolean(object.isPretraining) : false,\n subType: isSet(object.subType) ? globalThis.String(object.subType) : \"\",\n datasetId: isSet(object.datasetId) ? globalThis.String(object.datasetId) : \"\",\n containerVersion: isSet(object.containerVersion) ? globalThis.String(object.containerVersion) : \"\",\n containerId: isSet(object.containerId) ? globalThis.String(object.containerId) : \"\",\n pipelineId: isSet(object.pipelineId) ? globalThis.String(object.pipelineId) : \"\",\n parentModelId: isSet(object.parentModelId) ? globalThis.String(object.parentModelId) : \"\",\n viableCropIds: globalThis.Array.isArray(object?.viableCropIds)\n ? object.viableCropIds.map((e: any) => globalThis.String(e))\n : [],\n };\n },\n\n toJSON(message: Model): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.created !== 0) {\n obj.created = Math.round(message.created);\n }\n if (message.updated !== 0) {\n obj.updated = Math.round(message.updated);\n }\n if (message.url !== \"\") {\n obj.url = message.url;\n }\n if (message.customer !== \"\") {\n obj.customer = message.customer;\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.version !== 0) {\n obj.version = Math.round(message.version);\n }\n if (message.trainingDockerTag !== \"\") {\n obj.trainingDockerTag = message.trainingDockerTag;\n }\n if (message.gitSha !== \"\") {\n obj.gitSha = message.gitSha;\n }\n if (message.checksum !== \"\") {\n obj.checksum = message.checksum;\n }\n if (message.location !== \"\") {\n obj.location = message.location;\n }\n if (message.trainedAt !== 0) {\n obj.trainedAt = Math.round(message.trainedAt);\n }\n if (message.type !== \"\") {\n obj.type = message.type;\n }\n if (message.description !== \"\") {\n obj.description = message.description;\n }\n if (message.metadataJson !== \"\") {\n obj.metadataJson = message.metadataJson;\n }\n if (message.productionContainerVersion !== \"\") {\n obj.productionContainerVersion = message.productionContainerVersion;\n }\n if (message.testResultsJson !== \"\") {\n obj.testResultsJson = message.testResultsJson;\n }\n if (message.wandbJson !== \"\") {\n obj.wandbJson = message.wandbJson;\n }\n if (message.snapshotJson !== \"\") {\n obj.snapshotJson = message.snapshotJson;\n }\n if (message.isStub !== false) {\n obj.isStub = message.isStub;\n }\n if (message.isGoodToDeploy !== false) {\n obj.isGoodToDeploy = message.isGoodToDeploy;\n }\n if (message.robotName !== \"\") {\n obj.robotName = message.robotName;\n }\n if (message.environment !== \"\") {\n obj.environment = message.environment;\n }\n if (message.deploy !== false) {\n obj.deploy = message.deploy;\n }\n if (message.isPretraining !== false) {\n obj.isPretraining = message.isPretraining;\n }\n if (message.subType !== \"\") {\n obj.subType = message.subType;\n }\n if (message.datasetId !== \"\") {\n obj.datasetId = message.datasetId;\n }\n if (message.containerVersion !== \"\") {\n obj.containerVersion = message.containerVersion;\n }\n if (message.containerId !== \"\") {\n obj.containerId = message.containerId;\n }\n if (message.pipelineId !== \"\") {\n obj.pipelineId = message.pipelineId;\n }\n if (message.parentModelId !== \"\") {\n obj.parentModelId = message.parentModelId;\n }\n if (message.viableCropIds?.length) {\n obj.viableCropIds = message.viableCropIds;\n }\n return obj;\n },\n\n create, I>>(base?: I): Model {\n return Model.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Model {\n const message = createBaseModel();\n message.id = object.id ?? \"\";\n message.created = object.created ?? 0;\n message.updated = object.updated ?? 0;\n message.url = object.url ?? \"\";\n message.customer = object.customer ?? \"\";\n message.crop = object.crop ?? \"\";\n message.version = object.version ?? 0;\n message.trainingDockerTag = object.trainingDockerTag ?? \"\";\n message.gitSha = object.gitSha ?? \"\";\n message.checksum = object.checksum ?? \"\";\n message.location = object.location ?? \"\";\n message.trainedAt = object.trainedAt ?? 0;\n message.type = object.type ?? \"\";\n message.description = object.description ?? \"\";\n message.metadataJson = object.metadataJson ?? \"\";\n message.productionContainerVersion = object.productionContainerVersion ?? \"\";\n message.testResultsJson = object.testResultsJson ?? \"\";\n message.wandbJson = object.wandbJson ?? \"\";\n message.snapshotJson = object.snapshotJson ?? \"\";\n message.isStub = object.isStub ?? false;\n message.isGoodToDeploy = object.isGoodToDeploy ?? false;\n message.robotName = object.robotName ?? \"\";\n message.environment = object.environment ?? \"\";\n message.deploy = object.deploy ?? false;\n message.isPretraining = object.isPretraining ?? false;\n message.subType = object.subType ?? \"\";\n message.datasetId = object.datasetId ?? \"\";\n message.containerVersion = object.containerVersion ?? \"\";\n message.containerId = object.containerId ?? \"\";\n message.pipelineId = object.pipelineId ?? \"\";\n message.parentModelId = object.parentModelId ?? \"\";\n message.viableCropIds = object.viableCropIds?.map((e) => e) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/customers.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.customers\";\n\nexport interface FeatureFlags {\n reports: boolean;\n almanac: boolean;\n jobs: boolean;\n unvalidatedMetrics: boolean;\n spatial: boolean;\n velocityEstimator: boolean;\n explore: boolean;\n categoryCollection: boolean;\n}\n\nexport interface CustomerResponse {\n db: DB | undefined;\n name: string;\n /** @deprecated */\n sfdcAccountId: string;\n emails: string[];\n featureFlags: FeatureFlags | undefined;\n weeklyReportHour: number;\n weeklyReportDay: number;\n weeklyReportEnabled: boolean;\n weeklyReportLookbackDays: number;\n weeklyReportTimezone: string;\n}\n\nfunction createBaseFeatureFlags(): FeatureFlags {\n return {\n reports: false,\n almanac: false,\n jobs: false,\n unvalidatedMetrics: false,\n spatial: false,\n velocityEstimator: false,\n explore: false,\n categoryCollection: false,\n };\n}\n\nexport const FeatureFlags: MessageFns = {\n encode(message: FeatureFlags, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.reports !== false) {\n writer.uint32(8).bool(message.reports);\n }\n if (message.almanac !== false) {\n writer.uint32(16).bool(message.almanac);\n }\n if (message.jobs !== false) {\n writer.uint32(24).bool(message.jobs);\n }\n if (message.unvalidatedMetrics !== false) {\n writer.uint32(32).bool(message.unvalidatedMetrics);\n }\n if (message.spatial !== false) {\n writer.uint32(40).bool(message.spatial);\n }\n if (message.velocityEstimator !== false) {\n writer.uint32(48).bool(message.velocityEstimator);\n }\n if (message.explore !== false) {\n writer.uint32(56).bool(message.explore);\n }\n if (message.categoryCollection !== false) {\n writer.uint32(64).bool(message.categoryCollection);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FeatureFlags {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFeatureFlags();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.reports = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.almanac = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.jobs = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.unvalidatedMetrics = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.spatial = reader.bool();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.velocityEstimator = reader.bool();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.explore = reader.bool();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.categoryCollection = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FeatureFlags {\n return {\n reports: isSet(object.reports) ? globalThis.Boolean(object.reports) : false,\n almanac: isSet(object.almanac) ? globalThis.Boolean(object.almanac) : false,\n jobs: isSet(object.jobs) ? globalThis.Boolean(object.jobs) : false,\n unvalidatedMetrics: isSet(object.unvalidatedMetrics) ? globalThis.Boolean(object.unvalidatedMetrics) : false,\n spatial: isSet(object.spatial) ? globalThis.Boolean(object.spatial) : false,\n velocityEstimator: isSet(object.velocityEstimator) ? globalThis.Boolean(object.velocityEstimator) : false,\n explore: isSet(object.explore) ? globalThis.Boolean(object.explore) : false,\n categoryCollection: isSet(object.categoryCollection) ? globalThis.Boolean(object.categoryCollection) : false,\n };\n },\n\n toJSON(message: FeatureFlags): unknown {\n const obj: any = {};\n if (message.reports !== false) {\n obj.reports = message.reports;\n }\n if (message.almanac !== false) {\n obj.almanac = message.almanac;\n }\n if (message.jobs !== false) {\n obj.jobs = message.jobs;\n }\n if (message.unvalidatedMetrics !== false) {\n obj.unvalidatedMetrics = message.unvalidatedMetrics;\n }\n if (message.spatial !== false) {\n obj.spatial = message.spatial;\n }\n if (message.velocityEstimator !== false) {\n obj.velocityEstimator = message.velocityEstimator;\n }\n if (message.explore !== false) {\n obj.explore = message.explore;\n }\n if (message.categoryCollection !== false) {\n obj.categoryCollection = message.categoryCollection;\n }\n return obj;\n },\n\n create, I>>(base?: I): FeatureFlags {\n return FeatureFlags.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FeatureFlags {\n const message = createBaseFeatureFlags();\n message.reports = object.reports ?? false;\n message.almanac = object.almanac ?? false;\n message.jobs = object.jobs ?? false;\n message.unvalidatedMetrics = object.unvalidatedMetrics ?? false;\n message.spatial = object.spatial ?? false;\n message.velocityEstimator = object.velocityEstimator ?? false;\n message.explore = object.explore ?? false;\n message.categoryCollection = object.categoryCollection ?? false;\n return message;\n },\n};\n\nfunction createBaseCustomerResponse(): CustomerResponse {\n return {\n db: undefined,\n name: \"\",\n sfdcAccountId: \"\",\n emails: [],\n featureFlags: undefined,\n weeklyReportHour: 0,\n weeklyReportDay: 0,\n weeklyReportEnabled: false,\n weeklyReportLookbackDays: 0,\n weeklyReportTimezone: \"\",\n };\n}\n\nexport const CustomerResponse: MessageFns = {\n encode(message: CustomerResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.sfdcAccountId !== \"\") {\n writer.uint32(26).string(message.sfdcAccountId);\n }\n for (const v of message.emails) {\n writer.uint32(34).string(v!);\n }\n if (message.featureFlags !== undefined) {\n FeatureFlags.encode(message.featureFlags, writer.uint32(42).fork()).join();\n }\n if (message.weeklyReportHour !== 0) {\n writer.uint32(48).int64(message.weeklyReportHour);\n }\n if (message.weeklyReportDay !== 0) {\n writer.uint32(56).int64(message.weeklyReportDay);\n }\n if (message.weeklyReportEnabled !== false) {\n writer.uint32(64).bool(message.weeklyReportEnabled);\n }\n if (message.weeklyReportLookbackDays !== 0) {\n writer.uint32(72).int64(message.weeklyReportLookbackDays);\n }\n if (message.weeklyReportTimezone !== \"\") {\n writer.uint32(82).string(message.weeklyReportTimezone);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CustomerResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCustomerResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.sfdcAccountId = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.emails.push(reader.string());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.featureFlags = FeatureFlags.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.weeklyReportHour = longToNumber(reader.int64());\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.weeklyReportDay = longToNumber(reader.int64());\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.weeklyReportEnabled = reader.bool();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.weeklyReportLookbackDays = longToNumber(reader.int64());\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.weeklyReportTimezone = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CustomerResponse {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n sfdcAccountId: isSet(object.sfdcAccountId) ? globalThis.String(object.sfdcAccountId) : \"\",\n emails: globalThis.Array.isArray(object?.emails) ? object.emails.map((e: any) => globalThis.String(e)) : [],\n featureFlags: isSet(object.featureFlags) ? FeatureFlags.fromJSON(object.featureFlags) : undefined,\n weeklyReportHour: isSet(object.weeklyReportHour) ? globalThis.Number(object.weeklyReportHour) : 0,\n weeklyReportDay: isSet(object.weeklyReportDay) ? globalThis.Number(object.weeklyReportDay) : 0,\n weeklyReportEnabled: isSet(object.weeklyReportEnabled) ? globalThis.Boolean(object.weeklyReportEnabled) : false,\n weeklyReportLookbackDays: isSet(object.weeklyReportLookbackDays)\n ? globalThis.Number(object.weeklyReportLookbackDays)\n : 0,\n weeklyReportTimezone: isSet(object.weeklyReportTimezone) ? globalThis.String(object.weeklyReportTimezone) : \"\",\n };\n },\n\n toJSON(message: CustomerResponse): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.sfdcAccountId !== \"\") {\n obj.sfdcAccountId = message.sfdcAccountId;\n }\n if (message.emails?.length) {\n obj.emails = message.emails;\n }\n if (message.featureFlags !== undefined) {\n obj.featureFlags = FeatureFlags.toJSON(message.featureFlags);\n }\n if (message.weeklyReportHour !== 0) {\n obj.weeklyReportHour = Math.round(message.weeklyReportHour);\n }\n if (message.weeklyReportDay !== 0) {\n obj.weeklyReportDay = Math.round(message.weeklyReportDay);\n }\n if (message.weeklyReportEnabled !== false) {\n obj.weeklyReportEnabled = message.weeklyReportEnabled;\n }\n if (message.weeklyReportLookbackDays !== 0) {\n obj.weeklyReportLookbackDays = Math.round(message.weeklyReportLookbackDays);\n }\n if (message.weeklyReportTimezone !== \"\") {\n obj.weeklyReportTimezone = message.weeklyReportTimezone;\n }\n return obj;\n },\n\n create, I>>(base?: I): CustomerResponse {\n return CustomerResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CustomerResponse {\n const message = createBaseCustomerResponse();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.name = object.name ?? \"\";\n message.sfdcAccountId = object.sfdcAccountId ?? \"\";\n message.emails = object.emails?.map((e) => e) || [];\n message.featureFlags = (object.featureFlags !== undefined && object.featureFlags !== null)\n ? FeatureFlags.fromPartial(object.featureFlags)\n : undefined;\n message.weeklyReportHour = object.weeklyReportHour ?? 0;\n message.weeklyReportDay = object.weeklyReportDay ?? 0;\n message.weeklyReportEnabled = object.weeklyReportEnabled ?? false;\n message.weeklyReportLookbackDays = object.weeklyReportLookbackDays ?? 0;\n message.weeklyReportTimezone = object.weeklyReportTimezone ?? \"\";\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/metrics.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.metrics\";\n\nexport interface DailyMetricResponse {\n db: DB | undefined;\n serial: string;\n robotId: number;\n acresWeeded: number;\n avgSpeedMph: number;\n avgWeedSizeMm: number;\n bandingConfigName: string;\n bandingEnabled: boolean;\n coverageSpeedAcresHr: number;\n distanceWeededMeters: number;\n killedWeeds: number;\n missedWeeds: number;\n skippedWeeds: number;\n timeEfficiency: number;\n totalWeeds: number;\n uptimeSeconds: number;\n weedDensitySqFt: number;\n weedingUptimeSeconds: number;\n weedingEfficiency: number;\n weedsTypeCountBroadleaf: number;\n weedsTypeCountGrass: number;\n weedsTypeCountOffshoot: number;\n weedsTypeCountPurslane: number;\n notWeedingWeeds: number;\n date: string;\n keptCrops: number;\n missedCrops: number;\n notThinning: number;\n notWeeding: number;\n skippedCrops: number;\n thinnedCrops: number;\n totalCrops: number;\n bandingPercentage: number;\n thinningEfficiency: number;\n cropId: string;\n crop: string;\n cropDensitySqFt: number;\n avgCropSizeMm: number;\n avgTargetableReqLaserTime: number;\n avgUntargetableReqLaserTime: number;\n validCrops: number;\n operatorEffectiveness: number;\n targetWeedingTimeSeconds: number;\n}\n\nexport interface DailyMetricsByDateResponse {\n metrics: { [key: string]: DailyMetricResponse };\n}\n\nexport interface DailyMetricsByDateResponse_MetricsEntry {\n key: string;\n value: DailyMetricResponse | undefined;\n}\n\nexport interface DailyMetricsByDateByRobotResponse {\n metrics: { [key: string]: DailyMetricsByDateResponse };\n}\n\nexport interface DailyMetricsByDateByRobotResponse_MetricsEntry {\n key: string;\n value: DailyMetricsByDateResponse | undefined;\n}\n\nfunction createBaseDailyMetricResponse(): DailyMetricResponse {\n return {\n db: undefined,\n serial: \"\",\n robotId: 0,\n acresWeeded: 0,\n avgSpeedMph: 0,\n avgWeedSizeMm: 0,\n bandingConfigName: \"\",\n bandingEnabled: false,\n coverageSpeedAcresHr: 0,\n distanceWeededMeters: 0,\n killedWeeds: 0,\n missedWeeds: 0,\n skippedWeeds: 0,\n timeEfficiency: 0,\n totalWeeds: 0,\n uptimeSeconds: 0,\n weedDensitySqFt: 0,\n weedingUptimeSeconds: 0,\n weedingEfficiency: 0,\n weedsTypeCountBroadleaf: 0,\n weedsTypeCountGrass: 0,\n weedsTypeCountOffshoot: 0,\n weedsTypeCountPurslane: 0,\n notWeedingWeeds: 0,\n date: \"\",\n keptCrops: 0,\n missedCrops: 0,\n notThinning: 0,\n notWeeding: 0,\n skippedCrops: 0,\n thinnedCrops: 0,\n totalCrops: 0,\n bandingPercentage: 0,\n thinningEfficiency: 0,\n cropId: \"\",\n crop: \"\",\n cropDensitySqFt: 0,\n avgCropSizeMm: 0,\n avgTargetableReqLaserTime: 0,\n avgUntargetableReqLaserTime: 0,\n validCrops: 0,\n operatorEffectiveness: 0,\n targetWeedingTimeSeconds: 0,\n };\n}\n\nexport const DailyMetricResponse: MessageFns = {\n encode(message: DailyMetricResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.serial !== \"\") {\n writer.uint32(18).string(message.serial);\n }\n if (message.robotId !== 0) {\n writer.uint32(24).uint64(message.robotId);\n }\n if (message.acresWeeded !== 0) {\n writer.uint32(37).float(message.acresWeeded);\n }\n if (message.avgSpeedMph !== 0) {\n writer.uint32(45).float(message.avgSpeedMph);\n }\n if (message.avgWeedSizeMm !== 0) {\n writer.uint32(53).float(message.avgWeedSizeMm);\n }\n if (message.bandingConfigName !== \"\") {\n writer.uint32(58).string(message.bandingConfigName);\n }\n if (message.bandingEnabled !== false) {\n writer.uint32(64).bool(message.bandingEnabled);\n }\n if (message.coverageSpeedAcresHr !== 0) {\n writer.uint32(77).float(message.coverageSpeedAcresHr);\n }\n if (message.distanceWeededMeters !== 0) {\n writer.uint32(85).float(message.distanceWeededMeters);\n }\n if (message.killedWeeds !== 0) {\n writer.uint32(88).int64(message.killedWeeds);\n }\n if (message.missedWeeds !== 0) {\n writer.uint32(96).int64(message.missedWeeds);\n }\n if (message.skippedWeeds !== 0) {\n writer.uint32(104).int64(message.skippedWeeds);\n }\n if (message.timeEfficiency !== 0) {\n writer.uint32(117).float(message.timeEfficiency);\n }\n if (message.totalWeeds !== 0) {\n writer.uint32(120).int64(message.totalWeeds);\n }\n if (message.uptimeSeconds !== 0) {\n writer.uint32(133).float(message.uptimeSeconds);\n }\n if (message.weedDensitySqFt !== 0) {\n writer.uint32(141).float(message.weedDensitySqFt);\n }\n if (message.weedingUptimeSeconds !== 0) {\n writer.uint32(149).float(message.weedingUptimeSeconds);\n }\n if (message.weedingEfficiency !== 0) {\n writer.uint32(157).float(message.weedingEfficiency);\n }\n if (message.weedsTypeCountBroadleaf !== 0) {\n writer.uint32(160).int64(message.weedsTypeCountBroadleaf);\n }\n if (message.weedsTypeCountGrass !== 0) {\n writer.uint32(168).int64(message.weedsTypeCountGrass);\n }\n if (message.weedsTypeCountOffshoot !== 0) {\n writer.uint32(176).int64(message.weedsTypeCountOffshoot);\n }\n if (message.weedsTypeCountPurslane !== 0) {\n writer.uint32(184).int64(message.weedsTypeCountPurslane);\n }\n if (message.notWeedingWeeds !== 0) {\n writer.uint32(192).int64(message.notWeedingWeeds);\n }\n if (message.date !== \"\") {\n writer.uint32(202).string(message.date);\n }\n if (message.keptCrops !== 0) {\n writer.uint32(208).int64(message.keptCrops);\n }\n if (message.missedCrops !== 0) {\n writer.uint32(216).int64(message.missedCrops);\n }\n if (message.notThinning !== 0) {\n writer.uint32(224).int64(message.notThinning);\n }\n if (message.notWeeding !== 0) {\n writer.uint32(232).int64(message.notWeeding);\n }\n if (message.skippedCrops !== 0) {\n writer.uint32(240).int64(message.skippedCrops);\n }\n if (message.thinnedCrops !== 0) {\n writer.uint32(248).int64(message.thinnedCrops);\n }\n if (message.totalCrops !== 0) {\n writer.uint32(256).int64(message.totalCrops);\n }\n if (message.bandingPercentage !== 0) {\n writer.uint32(269).float(message.bandingPercentage);\n }\n if (message.thinningEfficiency !== 0) {\n writer.uint32(277).float(message.thinningEfficiency);\n }\n if (message.cropId !== \"\") {\n writer.uint32(282).string(message.cropId);\n }\n if (message.crop !== \"\") {\n writer.uint32(290).string(message.crop);\n }\n if (message.cropDensitySqFt !== 0) {\n writer.uint32(301).float(message.cropDensitySqFt);\n }\n if (message.avgCropSizeMm !== 0) {\n writer.uint32(309).float(message.avgCropSizeMm);\n }\n if (message.avgTargetableReqLaserTime !== 0) {\n writer.uint32(312).int64(message.avgTargetableReqLaserTime);\n }\n if (message.avgUntargetableReqLaserTime !== 0) {\n writer.uint32(320).int64(message.avgUntargetableReqLaserTime);\n }\n if (message.validCrops !== 0) {\n writer.uint32(328).int64(message.validCrops);\n }\n if (message.operatorEffectiveness !== 0) {\n writer.uint32(341).float(message.operatorEffectiveness);\n }\n if (message.targetWeedingTimeSeconds !== 0) {\n writer.uint32(344).int64(message.targetWeedingTimeSeconds);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DailyMetricResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDailyMetricResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.serial = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.robotId = longToNumber(reader.uint64());\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.acresWeeded = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n\n message.avgSpeedMph = reader.float();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n\n message.avgWeedSizeMm = reader.float();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.bandingConfigName = reader.string();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.bandingEnabled = reader.bool();\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n\n message.coverageSpeedAcresHr = reader.float();\n continue;\n case 10:\n if (tag !== 85) {\n break;\n }\n\n message.distanceWeededMeters = reader.float();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.killedWeeds = longToNumber(reader.int64());\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n\n message.missedWeeds = longToNumber(reader.int64());\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n\n message.skippedWeeds = longToNumber(reader.int64());\n continue;\n case 14:\n if (tag !== 117) {\n break;\n }\n\n message.timeEfficiency = reader.float();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.totalWeeds = longToNumber(reader.int64());\n continue;\n case 16:\n if (tag !== 133) {\n break;\n }\n\n message.uptimeSeconds = reader.float();\n continue;\n case 17:\n if (tag !== 141) {\n break;\n }\n\n message.weedDensitySqFt = reader.float();\n continue;\n case 18:\n if (tag !== 149) {\n break;\n }\n\n message.weedingUptimeSeconds = reader.float();\n continue;\n case 19:\n if (tag !== 157) {\n break;\n }\n\n message.weedingEfficiency = reader.float();\n continue;\n case 20:\n if (tag !== 160) {\n break;\n }\n\n message.weedsTypeCountBroadleaf = longToNumber(reader.int64());\n continue;\n case 21:\n if (tag !== 168) {\n break;\n }\n\n message.weedsTypeCountGrass = longToNumber(reader.int64());\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n\n message.weedsTypeCountOffshoot = longToNumber(reader.int64());\n continue;\n case 23:\n if (tag !== 184) {\n break;\n }\n\n message.weedsTypeCountPurslane = longToNumber(reader.int64());\n continue;\n case 24:\n if (tag !== 192) {\n break;\n }\n\n message.notWeedingWeeds = longToNumber(reader.int64());\n continue;\n case 25:\n if (tag !== 202) {\n break;\n }\n\n message.date = reader.string();\n continue;\n case 26:\n if (tag !== 208) {\n break;\n }\n\n message.keptCrops = longToNumber(reader.int64());\n continue;\n case 27:\n if (tag !== 216) {\n break;\n }\n\n message.missedCrops = longToNumber(reader.int64());\n continue;\n case 28:\n if (tag !== 224) {\n break;\n }\n\n message.notThinning = longToNumber(reader.int64());\n continue;\n case 29:\n if (tag !== 232) {\n break;\n }\n\n message.notWeeding = longToNumber(reader.int64());\n continue;\n case 30:\n if (tag !== 240) {\n break;\n }\n\n message.skippedCrops = longToNumber(reader.int64());\n continue;\n case 31:\n if (tag !== 248) {\n break;\n }\n\n message.thinnedCrops = longToNumber(reader.int64());\n continue;\n case 32:\n if (tag !== 256) {\n break;\n }\n\n message.totalCrops = longToNumber(reader.int64());\n continue;\n case 33:\n if (tag !== 269) {\n break;\n }\n\n message.bandingPercentage = reader.float();\n continue;\n case 34:\n if (tag !== 277) {\n break;\n }\n\n message.thinningEfficiency = reader.float();\n continue;\n case 35:\n if (tag !== 282) {\n break;\n }\n\n message.cropId = reader.string();\n continue;\n case 36:\n if (tag !== 290) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 37:\n if (tag !== 301) {\n break;\n }\n\n message.cropDensitySqFt = reader.float();\n continue;\n case 38:\n if (tag !== 309) {\n break;\n }\n\n message.avgCropSizeMm = reader.float();\n continue;\n case 39:\n if (tag !== 312) {\n break;\n }\n\n message.avgTargetableReqLaserTime = longToNumber(reader.int64());\n continue;\n case 40:\n if (tag !== 320) {\n break;\n }\n\n message.avgUntargetableReqLaserTime = longToNumber(reader.int64());\n continue;\n case 41:\n if (tag !== 328) {\n break;\n }\n\n message.validCrops = longToNumber(reader.int64());\n continue;\n case 42:\n if (tag !== 341) {\n break;\n }\n\n message.operatorEffectiveness = reader.float();\n continue;\n case 43:\n if (tag !== 344) {\n break;\n }\n\n message.targetWeedingTimeSeconds = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DailyMetricResponse {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n serial: isSet(object.serial) ? globalThis.String(object.serial) : \"\",\n robotId: isSet(object.robotId) ? globalThis.Number(object.robotId) : 0,\n acresWeeded: isSet(object.acresWeeded) ? globalThis.Number(object.acresWeeded) : 0,\n avgSpeedMph: isSet(object.avgSpeedMph) ? globalThis.Number(object.avgSpeedMph) : 0,\n avgWeedSizeMm: isSet(object.avgWeedSizeMm) ? globalThis.Number(object.avgWeedSizeMm) : 0,\n bandingConfigName: isSet(object.bandingConfigName) ? globalThis.String(object.bandingConfigName) : \"\",\n bandingEnabled: isSet(object.bandingEnabled) ? globalThis.Boolean(object.bandingEnabled) : false,\n coverageSpeedAcresHr: isSet(object.coverageSpeedAcresHr) ? globalThis.Number(object.coverageSpeedAcresHr) : 0,\n distanceWeededMeters: isSet(object.distanceWeededMeters) ? globalThis.Number(object.distanceWeededMeters) : 0,\n killedWeeds: isSet(object.killedWeeds) ? globalThis.Number(object.killedWeeds) : 0,\n missedWeeds: isSet(object.missedWeeds) ? globalThis.Number(object.missedWeeds) : 0,\n skippedWeeds: isSet(object.skippedWeeds) ? globalThis.Number(object.skippedWeeds) : 0,\n timeEfficiency: isSet(object.timeEfficiency) ? globalThis.Number(object.timeEfficiency) : 0,\n totalWeeds: isSet(object.totalWeeds) ? globalThis.Number(object.totalWeeds) : 0,\n uptimeSeconds: isSet(object.uptimeSeconds) ? globalThis.Number(object.uptimeSeconds) : 0,\n weedDensitySqFt: isSet(object.weedDensitySqFt) ? globalThis.Number(object.weedDensitySqFt) : 0,\n weedingUptimeSeconds: isSet(object.weedingUptimeSeconds) ? globalThis.Number(object.weedingUptimeSeconds) : 0,\n weedingEfficiency: isSet(object.weedingEfficiency) ? globalThis.Number(object.weedingEfficiency) : 0,\n weedsTypeCountBroadleaf: isSet(object.weedsTypeCountBroadleaf)\n ? globalThis.Number(object.weedsTypeCountBroadleaf)\n : 0,\n weedsTypeCountGrass: isSet(object.weedsTypeCountGrass) ? globalThis.Number(object.weedsTypeCountGrass) : 0,\n weedsTypeCountOffshoot: isSet(object.weedsTypeCountOffshoot)\n ? globalThis.Number(object.weedsTypeCountOffshoot)\n : 0,\n weedsTypeCountPurslane: isSet(object.weedsTypeCountPurslane)\n ? globalThis.Number(object.weedsTypeCountPurslane)\n : 0,\n notWeedingWeeds: isSet(object.notWeedingWeeds) ? globalThis.Number(object.notWeedingWeeds) : 0,\n date: isSet(object.date) ? globalThis.String(object.date) : \"\",\n keptCrops: isSet(object.keptCrops) ? globalThis.Number(object.keptCrops) : 0,\n missedCrops: isSet(object.missedCrops) ? globalThis.Number(object.missedCrops) : 0,\n notThinning: isSet(object.notThinning) ? globalThis.Number(object.notThinning) : 0,\n notWeeding: isSet(object.notWeeding) ? globalThis.Number(object.notWeeding) : 0,\n skippedCrops: isSet(object.skippedCrops) ? globalThis.Number(object.skippedCrops) : 0,\n thinnedCrops: isSet(object.thinnedCrops) ? globalThis.Number(object.thinnedCrops) : 0,\n totalCrops: isSet(object.totalCrops) ? globalThis.Number(object.totalCrops) : 0,\n bandingPercentage: isSet(object.bandingPercentage) ? globalThis.Number(object.bandingPercentage) : 0,\n thinningEfficiency: isSet(object.thinningEfficiency) ? globalThis.Number(object.thinningEfficiency) : 0,\n cropId: isSet(object.cropId) ? globalThis.String(object.cropId) : \"\",\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n cropDensitySqFt: isSet(object.cropDensitySqFt) ? globalThis.Number(object.cropDensitySqFt) : 0,\n avgCropSizeMm: isSet(object.avgCropSizeMm) ? globalThis.Number(object.avgCropSizeMm) : 0,\n avgTargetableReqLaserTime: isSet(object.avgTargetableReqLaserTime)\n ? globalThis.Number(object.avgTargetableReqLaserTime)\n : 0,\n avgUntargetableReqLaserTime: isSet(object.avgUntargetableReqLaserTime)\n ? globalThis.Number(object.avgUntargetableReqLaserTime)\n : 0,\n validCrops: isSet(object.validCrops) ? globalThis.Number(object.validCrops) : 0,\n operatorEffectiveness: isSet(object.operatorEffectiveness) ? globalThis.Number(object.operatorEffectiveness) : 0,\n targetWeedingTimeSeconds: isSet(object.targetWeedingTimeSeconds)\n ? globalThis.Number(object.targetWeedingTimeSeconds)\n : 0,\n };\n },\n\n toJSON(message: DailyMetricResponse): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.serial !== \"\") {\n obj.serial = message.serial;\n }\n if (message.robotId !== 0) {\n obj.robotId = Math.round(message.robotId);\n }\n if (message.acresWeeded !== 0) {\n obj.acresWeeded = message.acresWeeded;\n }\n if (message.avgSpeedMph !== 0) {\n obj.avgSpeedMph = message.avgSpeedMph;\n }\n if (message.avgWeedSizeMm !== 0) {\n obj.avgWeedSizeMm = message.avgWeedSizeMm;\n }\n if (message.bandingConfigName !== \"\") {\n obj.bandingConfigName = message.bandingConfigName;\n }\n if (message.bandingEnabled !== false) {\n obj.bandingEnabled = message.bandingEnabled;\n }\n if (message.coverageSpeedAcresHr !== 0) {\n obj.coverageSpeedAcresHr = message.coverageSpeedAcresHr;\n }\n if (message.distanceWeededMeters !== 0) {\n obj.distanceWeededMeters = message.distanceWeededMeters;\n }\n if (message.killedWeeds !== 0) {\n obj.killedWeeds = Math.round(message.killedWeeds);\n }\n if (message.missedWeeds !== 0) {\n obj.missedWeeds = Math.round(message.missedWeeds);\n }\n if (message.skippedWeeds !== 0) {\n obj.skippedWeeds = Math.round(message.skippedWeeds);\n }\n if (message.timeEfficiency !== 0) {\n obj.timeEfficiency = message.timeEfficiency;\n }\n if (message.totalWeeds !== 0) {\n obj.totalWeeds = Math.round(message.totalWeeds);\n }\n if (message.uptimeSeconds !== 0) {\n obj.uptimeSeconds = message.uptimeSeconds;\n }\n if (message.weedDensitySqFt !== 0) {\n obj.weedDensitySqFt = message.weedDensitySqFt;\n }\n if (message.weedingUptimeSeconds !== 0) {\n obj.weedingUptimeSeconds = message.weedingUptimeSeconds;\n }\n if (message.weedingEfficiency !== 0) {\n obj.weedingEfficiency = message.weedingEfficiency;\n }\n if (message.weedsTypeCountBroadleaf !== 0) {\n obj.weedsTypeCountBroadleaf = Math.round(message.weedsTypeCountBroadleaf);\n }\n if (message.weedsTypeCountGrass !== 0) {\n obj.weedsTypeCountGrass = Math.round(message.weedsTypeCountGrass);\n }\n if (message.weedsTypeCountOffshoot !== 0) {\n obj.weedsTypeCountOffshoot = Math.round(message.weedsTypeCountOffshoot);\n }\n if (message.weedsTypeCountPurslane !== 0) {\n obj.weedsTypeCountPurslane = Math.round(message.weedsTypeCountPurslane);\n }\n if (message.notWeedingWeeds !== 0) {\n obj.notWeedingWeeds = Math.round(message.notWeedingWeeds);\n }\n if (message.date !== \"\") {\n obj.date = message.date;\n }\n if (message.keptCrops !== 0) {\n obj.keptCrops = Math.round(message.keptCrops);\n }\n if (message.missedCrops !== 0) {\n obj.missedCrops = Math.round(message.missedCrops);\n }\n if (message.notThinning !== 0) {\n obj.notThinning = Math.round(message.notThinning);\n }\n if (message.notWeeding !== 0) {\n obj.notWeeding = Math.round(message.notWeeding);\n }\n if (message.skippedCrops !== 0) {\n obj.skippedCrops = Math.round(message.skippedCrops);\n }\n if (message.thinnedCrops !== 0) {\n obj.thinnedCrops = Math.round(message.thinnedCrops);\n }\n if (message.totalCrops !== 0) {\n obj.totalCrops = Math.round(message.totalCrops);\n }\n if (message.bandingPercentage !== 0) {\n obj.bandingPercentage = message.bandingPercentage;\n }\n if (message.thinningEfficiency !== 0) {\n obj.thinningEfficiency = message.thinningEfficiency;\n }\n if (message.cropId !== \"\") {\n obj.cropId = message.cropId;\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.cropDensitySqFt !== 0) {\n obj.cropDensitySqFt = message.cropDensitySqFt;\n }\n if (message.avgCropSizeMm !== 0) {\n obj.avgCropSizeMm = message.avgCropSizeMm;\n }\n if (message.avgTargetableReqLaserTime !== 0) {\n obj.avgTargetableReqLaserTime = Math.round(message.avgTargetableReqLaserTime);\n }\n if (message.avgUntargetableReqLaserTime !== 0) {\n obj.avgUntargetableReqLaserTime = Math.round(message.avgUntargetableReqLaserTime);\n }\n if (message.validCrops !== 0) {\n obj.validCrops = Math.round(message.validCrops);\n }\n if (message.operatorEffectiveness !== 0) {\n obj.operatorEffectiveness = message.operatorEffectiveness;\n }\n if (message.targetWeedingTimeSeconds !== 0) {\n obj.targetWeedingTimeSeconds = Math.round(message.targetWeedingTimeSeconds);\n }\n return obj;\n },\n\n create, I>>(base?: I): DailyMetricResponse {\n return DailyMetricResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DailyMetricResponse {\n const message = createBaseDailyMetricResponse();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.serial = object.serial ?? \"\";\n message.robotId = object.robotId ?? 0;\n message.acresWeeded = object.acresWeeded ?? 0;\n message.avgSpeedMph = object.avgSpeedMph ?? 0;\n message.avgWeedSizeMm = object.avgWeedSizeMm ?? 0;\n message.bandingConfigName = object.bandingConfigName ?? \"\";\n message.bandingEnabled = object.bandingEnabled ?? false;\n message.coverageSpeedAcresHr = object.coverageSpeedAcresHr ?? 0;\n message.distanceWeededMeters = object.distanceWeededMeters ?? 0;\n message.killedWeeds = object.killedWeeds ?? 0;\n message.missedWeeds = object.missedWeeds ?? 0;\n message.skippedWeeds = object.skippedWeeds ?? 0;\n message.timeEfficiency = object.timeEfficiency ?? 0;\n message.totalWeeds = object.totalWeeds ?? 0;\n message.uptimeSeconds = object.uptimeSeconds ?? 0;\n message.weedDensitySqFt = object.weedDensitySqFt ?? 0;\n message.weedingUptimeSeconds = object.weedingUptimeSeconds ?? 0;\n message.weedingEfficiency = object.weedingEfficiency ?? 0;\n message.weedsTypeCountBroadleaf = object.weedsTypeCountBroadleaf ?? 0;\n message.weedsTypeCountGrass = object.weedsTypeCountGrass ?? 0;\n message.weedsTypeCountOffshoot = object.weedsTypeCountOffshoot ?? 0;\n message.weedsTypeCountPurslane = object.weedsTypeCountPurslane ?? 0;\n message.notWeedingWeeds = object.notWeedingWeeds ?? 0;\n message.date = object.date ?? \"\";\n message.keptCrops = object.keptCrops ?? 0;\n message.missedCrops = object.missedCrops ?? 0;\n message.notThinning = object.notThinning ?? 0;\n message.notWeeding = object.notWeeding ?? 0;\n message.skippedCrops = object.skippedCrops ?? 0;\n message.thinnedCrops = object.thinnedCrops ?? 0;\n message.totalCrops = object.totalCrops ?? 0;\n message.bandingPercentage = object.bandingPercentage ?? 0;\n message.thinningEfficiency = object.thinningEfficiency ?? 0;\n message.cropId = object.cropId ?? \"\";\n message.crop = object.crop ?? \"\";\n message.cropDensitySqFt = object.cropDensitySqFt ?? 0;\n message.avgCropSizeMm = object.avgCropSizeMm ?? 0;\n message.avgTargetableReqLaserTime = object.avgTargetableReqLaserTime ?? 0;\n message.avgUntargetableReqLaserTime = object.avgUntargetableReqLaserTime ?? 0;\n message.validCrops = object.validCrops ?? 0;\n message.operatorEffectiveness = object.operatorEffectiveness ?? 0;\n message.targetWeedingTimeSeconds = object.targetWeedingTimeSeconds ?? 0;\n return message;\n },\n};\n\nfunction createBaseDailyMetricsByDateResponse(): DailyMetricsByDateResponse {\n return { metrics: {} };\n}\n\nexport const DailyMetricsByDateResponse: MessageFns = {\n encode(message: DailyMetricsByDateResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.metrics).forEach(([key, value]) => {\n DailyMetricsByDateResponse_MetricsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DailyMetricsByDateResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDailyMetricsByDateResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = DailyMetricsByDateResponse_MetricsEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.metrics[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DailyMetricsByDateResponse {\n return {\n metrics: isObject(object.metrics)\n ? Object.entries(object.metrics).reduce<{ [key: string]: DailyMetricResponse }>((acc, [key, value]) => {\n acc[key] = DailyMetricResponse.fromJSON(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: DailyMetricsByDateResponse): unknown {\n const obj: any = {};\n if (message.metrics) {\n const entries = Object.entries(message.metrics);\n if (entries.length > 0) {\n obj.metrics = {};\n entries.forEach(([k, v]) => {\n obj.metrics[k] = DailyMetricResponse.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): DailyMetricsByDateResponse {\n return DailyMetricsByDateResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DailyMetricsByDateResponse {\n const message = createBaseDailyMetricsByDateResponse();\n message.metrics = Object.entries(object.metrics ?? {}).reduce<{ [key: string]: DailyMetricResponse }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = DailyMetricResponse.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseDailyMetricsByDateResponse_MetricsEntry(): DailyMetricsByDateResponse_MetricsEntry {\n return { key: \"\", value: undefined };\n}\n\nexport const DailyMetricsByDateResponse_MetricsEntry: MessageFns = {\n encode(message: DailyMetricsByDateResponse_MetricsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n DailyMetricResponse.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DailyMetricsByDateResponse_MetricsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDailyMetricsByDateResponse_MetricsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = DailyMetricResponse.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DailyMetricsByDateResponse_MetricsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? DailyMetricResponse.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: DailyMetricsByDateResponse_MetricsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== undefined) {\n obj.value = DailyMetricResponse.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): DailyMetricsByDateResponse_MetricsEntry {\n return DailyMetricsByDateResponse_MetricsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): DailyMetricsByDateResponse_MetricsEntry {\n const message = createBaseDailyMetricsByDateResponse_MetricsEntry();\n message.key = object.key ?? \"\";\n message.value = (object.value !== undefined && object.value !== null)\n ? DailyMetricResponse.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseDailyMetricsByDateByRobotResponse(): DailyMetricsByDateByRobotResponse {\n return { metrics: {} };\n}\n\nexport const DailyMetricsByDateByRobotResponse: MessageFns = {\n encode(message: DailyMetricsByDateByRobotResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.metrics).forEach(([key, value]) => {\n DailyMetricsByDateByRobotResponse_MetricsEntry.encode({ key: key as any, value }, writer.uint32(10).fork())\n .join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DailyMetricsByDateByRobotResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDailyMetricsByDateByRobotResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = DailyMetricsByDateByRobotResponse_MetricsEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.metrics[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DailyMetricsByDateByRobotResponse {\n return {\n metrics: isObject(object.metrics)\n ? Object.entries(object.metrics).reduce<{ [key: string]: DailyMetricsByDateResponse }>((acc, [key, value]) => {\n acc[key] = DailyMetricsByDateResponse.fromJSON(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: DailyMetricsByDateByRobotResponse): unknown {\n const obj: any = {};\n if (message.metrics) {\n const entries = Object.entries(message.metrics);\n if (entries.length > 0) {\n obj.metrics = {};\n entries.forEach(([k, v]) => {\n obj.metrics[k] = DailyMetricsByDateResponse.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): DailyMetricsByDateByRobotResponse {\n return DailyMetricsByDateByRobotResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): DailyMetricsByDateByRobotResponse {\n const message = createBaseDailyMetricsByDateByRobotResponse();\n message.metrics = Object.entries(object.metrics ?? {}).reduce<{ [key: string]: DailyMetricsByDateResponse }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = DailyMetricsByDateResponse.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseDailyMetricsByDateByRobotResponse_MetricsEntry(): DailyMetricsByDateByRobotResponse_MetricsEntry {\n return { key: \"\", value: undefined };\n}\n\nexport const DailyMetricsByDateByRobotResponse_MetricsEntry: MessageFns<\n DailyMetricsByDateByRobotResponse_MetricsEntry\n> = {\n encode(\n message: DailyMetricsByDateByRobotResponse_MetricsEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n DailyMetricsByDateResponse.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DailyMetricsByDateByRobotResponse_MetricsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDailyMetricsByDateByRobotResponse_MetricsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = DailyMetricsByDateResponse.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DailyMetricsByDateByRobotResponse_MetricsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? DailyMetricsByDateResponse.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: DailyMetricsByDateByRobotResponse_MetricsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== undefined) {\n obj.value = DailyMetricsByDateResponse.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): DailyMetricsByDateByRobotResponse_MetricsEntry {\n return DailyMetricsByDateByRobotResponse_MetricsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): DailyMetricsByDateByRobotResponse_MetricsEntry {\n const message = createBaseDailyMetricsByDateByRobotResponse_MetricsEntry();\n message.key = object.key ?? \"\";\n message.value = (object.value !== undefined && object.value !== null)\n ? DailyMetricsByDateResponse.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: category_profile/category_profile.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"carbon.category_profile\";\n\nexport interface CategoryCollection {\n id: string;\n customerId?: string | undefined;\n name: string;\n categoryIds: string[];\n protected: boolean;\n}\n\nexport interface Category {\n id: string;\n customerId?: string | undefined;\n name: string;\n chipIds: string[];\n protected: boolean;\n}\n\nfunction createBaseCategoryCollection(): CategoryCollection {\n return { id: \"\", customerId: undefined, name: \"\", categoryIds: [], protected: false };\n}\n\nexport const CategoryCollection: MessageFns = {\n encode(message: CategoryCollection, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.customerId !== undefined) {\n writer.uint32(18).string(message.customerId);\n }\n if (message.name !== \"\") {\n writer.uint32(26).string(message.name);\n }\n for (const v of message.categoryIds) {\n writer.uint32(34).string(v!);\n }\n if (message.protected !== false) {\n writer.uint32(40).bool(message.protected);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CategoryCollection {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCategoryCollection();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.customerId = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.categoryIds.push(reader.string());\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.protected = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CategoryCollection {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n customerId: isSet(object.customerId) ? globalThis.String(object.customerId) : undefined,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n categoryIds: globalThis.Array.isArray(object?.categoryIds)\n ? object.categoryIds.map((e: any) => globalThis.String(e))\n : [],\n protected: isSet(object.protected) ? globalThis.Boolean(object.protected) : false,\n };\n },\n\n toJSON(message: CategoryCollection): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.customerId !== undefined) {\n obj.customerId = message.customerId;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.categoryIds?.length) {\n obj.categoryIds = message.categoryIds;\n }\n if (message.protected !== false) {\n obj.protected = message.protected;\n }\n return obj;\n },\n\n create, I>>(base?: I): CategoryCollection {\n return CategoryCollection.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CategoryCollection {\n const message = createBaseCategoryCollection();\n message.id = object.id ?? \"\";\n message.customerId = object.customerId ?? undefined;\n message.name = object.name ?? \"\";\n message.categoryIds = object.categoryIds?.map((e) => e) || [];\n message.protected = object.protected ?? false;\n return message;\n },\n};\n\nfunction createBaseCategory(): Category {\n return { id: \"\", customerId: undefined, name: \"\", chipIds: [], protected: false };\n}\n\nexport const Category: MessageFns = {\n encode(message: Category, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.customerId !== undefined) {\n writer.uint32(18).string(message.customerId);\n }\n if (message.name !== \"\") {\n writer.uint32(26).string(message.name);\n }\n for (const v of message.chipIds) {\n writer.uint32(34).string(v!);\n }\n if (message.protected !== false) {\n writer.uint32(40).bool(message.protected);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Category {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCategory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.customerId = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.chipIds.push(reader.string());\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.protected = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Category {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n customerId: isSet(object.customerId) ? globalThis.String(object.customerId) : undefined,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n chipIds: globalThis.Array.isArray(object?.chipIds) ? object.chipIds.map((e: any) => globalThis.String(e)) : [],\n protected: isSet(object.protected) ? globalThis.Boolean(object.protected) : false,\n };\n },\n\n toJSON(message: Category): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.customerId !== undefined) {\n obj.customerId = message.customerId;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.chipIds?.length) {\n obj.chipIds = message.chipIds;\n }\n if (message.protected !== false) {\n obj.protected = message.protected;\n }\n return obj;\n },\n\n create, I>>(base?: I): Category {\n return Category.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Category {\n const message = createBaseCategory();\n message.id = object.id ?? \"\";\n message.customerId = object.customerId ?? undefined;\n message.name = object.name ?? \"\";\n message.chipIds = object.chipIds?.map((e) => e) || [];\n message.protected = object.protected ?? false;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/category_profile.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Category, CategoryCollection } from \"../category_profile/category_profile\";\n\nexport const protobufPackage = \"carbon.portal.category_profile\";\n\nexport interface ExpandedCategoryCollectionResponse {\n profile: CategoryCollection | undefined;\n categories: Category[];\n}\n\nexport interface UnsavedCategory {\n id: string;\n customerId?: string | undefined;\n name: string;\n chipIds: string[];\n /** selected images that need chip generation. */\n labelPointIds: string[];\n protected: boolean;\n}\n\nexport interface ExpandedCategoryCollectionRequest {\n profile: CategoryCollection | undefined;\n categories: UnsavedCategory[];\n}\n\nfunction createBaseExpandedCategoryCollectionResponse(): ExpandedCategoryCollectionResponse {\n return { profile: undefined, categories: [] };\n}\n\nexport const ExpandedCategoryCollectionResponse: MessageFns = {\n encode(message: ExpandedCategoryCollectionResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.profile !== undefined) {\n CategoryCollection.encode(message.profile, writer.uint32(10).fork()).join();\n }\n for (const v of message.categories) {\n Category.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ExpandedCategoryCollectionResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseExpandedCategoryCollectionResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.profile = CategoryCollection.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.categories.push(Category.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ExpandedCategoryCollectionResponse {\n return {\n profile: isSet(object.profile) ? CategoryCollection.fromJSON(object.profile) : undefined,\n categories: globalThis.Array.isArray(object?.categories)\n ? object.categories.map((e: any) => Category.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ExpandedCategoryCollectionResponse): unknown {\n const obj: any = {};\n if (message.profile !== undefined) {\n obj.profile = CategoryCollection.toJSON(message.profile);\n }\n if (message.categories?.length) {\n obj.categories = message.categories.map((e) => Category.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): ExpandedCategoryCollectionResponse {\n return ExpandedCategoryCollectionResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): ExpandedCategoryCollectionResponse {\n const message = createBaseExpandedCategoryCollectionResponse();\n message.profile = (object.profile !== undefined && object.profile !== null)\n ? CategoryCollection.fromPartial(object.profile)\n : undefined;\n message.categories = object.categories?.map((e) => Category.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseUnsavedCategory(): UnsavedCategory {\n return { id: \"\", customerId: undefined, name: \"\", chipIds: [], labelPointIds: [], protected: false };\n}\n\nexport const UnsavedCategory: MessageFns = {\n encode(message: UnsavedCategory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.customerId !== undefined) {\n writer.uint32(18).string(message.customerId);\n }\n if (message.name !== \"\") {\n writer.uint32(26).string(message.name);\n }\n for (const v of message.chipIds) {\n writer.uint32(34).string(v!);\n }\n for (const v of message.labelPointIds) {\n writer.uint32(42).string(v!);\n }\n if (message.protected !== false) {\n writer.uint32(48).bool(message.protected);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UnsavedCategory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUnsavedCategory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.customerId = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.chipIds.push(reader.string());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.labelPointIds.push(reader.string());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.protected = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UnsavedCategory {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n customerId: isSet(object.customerId) ? globalThis.String(object.customerId) : undefined,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n chipIds: globalThis.Array.isArray(object?.chipIds) ? object.chipIds.map((e: any) => globalThis.String(e)) : [],\n labelPointIds: globalThis.Array.isArray(object?.labelPointIds)\n ? object.labelPointIds.map((e: any) => globalThis.String(e))\n : [],\n protected: isSet(object.protected) ? globalThis.Boolean(object.protected) : false,\n };\n },\n\n toJSON(message: UnsavedCategory): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.customerId !== undefined) {\n obj.customerId = message.customerId;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.chipIds?.length) {\n obj.chipIds = message.chipIds;\n }\n if (message.labelPointIds?.length) {\n obj.labelPointIds = message.labelPointIds;\n }\n if (message.protected !== false) {\n obj.protected = message.protected;\n }\n return obj;\n },\n\n create, I>>(base?: I): UnsavedCategory {\n return UnsavedCategory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UnsavedCategory {\n const message = createBaseUnsavedCategory();\n message.id = object.id ?? \"\";\n message.customerId = object.customerId ?? undefined;\n message.name = object.name ?? \"\";\n message.chipIds = object.chipIds?.map((e) => e) || [];\n message.labelPointIds = object.labelPointIds?.map((e) => e) || [];\n message.protected = object.protected ?? false;\n return message;\n },\n};\n\nfunction createBaseExpandedCategoryCollectionRequest(): ExpandedCategoryCollectionRequest {\n return { profile: undefined, categories: [] };\n}\n\nexport const ExpandedCategoryCollectionRequest: MessageFns = {\n encode(message: ExpandedCategoryCollectionRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.profile !== undefined) {\n CategoryCollection.encode(message.profile, writer.uint32(10).fork()).join();\n }\n for (const v of message.categories) {\n UnsavedCategory.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ExpandedCategoryCollectionRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseExpandedCategoryCollectionRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.profile = CategoryCollection.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.categories.push(UnsavedCategory.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ExpandedCategoryCollectionRequest {\n return {\n profile: isSet(object.profile) ? CategoryCollection.fromJSON(object.profile) : undefined,\n categories: globalThis.Array.isArray(object?.categories)\n ? object.categories.map((e: any) => UnsavedCategory.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ExpandedCategoryCollectionRequest): unknown {\n const obj: any = {};\n if (message.profile !== undefined) {\n obj.profile = CategoryCollection.toJSON(message.profile);\n }\n if (message.categories?.length) {\n obj.categories = message.categories.map((e) => UnsavedCategory.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): ExpandedCategoryCollectionRequest {\n return ExpandedCategoryCollectionRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): ExpandedCategoryCollectionRequest {\n const message = createBaseExpandedCategoryCollectionRequest();\n message.profile = (object.profile !== undefined && object.profile !== null)\n ? CategoryCollection.fromPartial(object.profile)\n : undefined;\n message.categories = object.categories?.map((e) => UnsavedCategory.fromPartial(e)) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/farm.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { AbLine, Id, LineString, Point, Polygon } from \"../geo/geo\";\nimport { Timestamp } from \"../google/protobuf/timestamp\";\n\nexport const protobufPackage = \"carbon.portal.farm\";\n\nexport interface Farm {\n id: Id | undefined;\n version: VersionInfo | undefined;\n name: string;\n customerId: number;\n pointDefs: PointDefinition[];\n zones: Zone[];\n}\n\nexport interface VersionInfo {\n /** Sequence number for this version. Monotonically increasing. */\n ordinal: number;\n /** Update time for this version. */\n updateTime:\n | string\n | undefined;\n /**\n * Whether this entity is intended to be deleted in the latest version. The\n * entity is kept around as a tombstone so that we can tell that future syncs\n * aren't intending to recreate it.\n */\n deleted: boolean;\n /**\n * Input-only field: whether this entity is intended to be changed in a given\n * patch request. If this is false, then no edits to this entity's fields\n * will be incorporated into the merge, though edits to its descendants may\n * still be incorporated.\n */\n changed: boolean;\n}\n\nexport interface PointDefinition {\n point: Point | undefined;\n version: VersionInfo | undefined;\n}\n\nexport interface Zone {\n id: Id | undefined;\n version:\n | VersionInfo\n | undefined;\n /** Human-readable name for this zone. */\n name: string;\n /** The physical areas that this zone includes. */\n areas: Area[];\n contents: ZoneContents | undefined;\n}\n\n/**\n * This is a full message because `protoc-gen-go` generates bad code for\n * `oneof`s: https://github.com/golang/protobuf/issues/1326\n */\nexport interface ZoneContents {\n farmBoundary?: FarmBoundaryData | undefined;\n field?: FieldData | undefined;\n headland?: HeadlandData | undefined;\n privateRoad?: PrivateRoadData | undefined;\n obstacle?: ObstacleData | undefined;\n}\n\n/**\n * An area is a contiguous region of space. It comprises all points within\n * `buffer_meters` of the `geometry`. For example, a `line_string` in the shape\n * of a circle describes an annulus, whereas a `polygon` in the same shape\n * describes a disk.\n */\nexport interface Area {\n bufferMeters: number;\n point?: Point | undefined;\n lineString?: LineString | undefined;\n polygon?: Polygon | undefined;\n}\n\n/**\n * A farm boundary denotes the maximal extent of the farm. Under no\n * circumstance should autonomous vehicles exist this boundary.\n *\n * A farm should have at most one zone of this type.\n */\nexport interface FarmBoundaryData {\n}\n\nexport interface FieldData {\n /**\n * Heading along which crops are planted. Used for determining a default\n * direction of travel when plotting a GPS path through this field.\n */\n plantingHeading:\n | PlantingHeading\n | undefined;\n /**\n * For circular fields that use center-pivot irrigation, this message\n * describes the geometry of the center pivot. See:\n * https://en.wikipedia.org/wiki/Center-pivot_irrigation\n */\n centerPivot: CenterPivot | undefined;\n}\n\nexport interface HeadlandData {\n}\n\nexport interface PrivateRoadData {\n}\n\nexport interface ObstacleData {\n}\n\n/**\n * A planting heading can either be specified as an A-B line of recorded\n * points, or just a fixed numeric heading.\n */\nexport interface PlantingHeading {\n /** Degrees clockwise from north in the middle of the field. */\n azimuthDegrees?:\n | number\n | undefined;\n /** A vector between two points along the centerline of a single row. */\n abLine?: AbLine | undefined;\n}\n\nexport interface CenterPivot {\n /** The center point of a center pivot. */\n center:\n | Point\n | undefined;\n /** The width of the arm of the center pivot. */\n widthMeters: number;\n /**\n * Radius of the center pivot, from the center point to the farthest point on\n * the physical arm.\n */\n lengthMeters: number;\n /**\n * Device ID of a GPS tracker attached to the arm of the center pivot, near\n * the distal end of that arm, so that we can track the arm's angular\n * position as it traverses the field. Devices and their IDs are managed by\n * the RTC location service. Empty implies no such tracker.\n */\n endpointDeviceId: string;\n}\n\nexport interface CreateFarmRequest {\n farm: Farm | undefined;\n}\n\nexport interface UpdateFarmRequest {\n /**\n * Patch updates to the farm. Descendant `VersionInfo`s must retain the\n * `ordinal` of the last copy that this client received from the server, for\n * merging purposes. To delete an entity, flip `deleted` from `false` to\n * `true`. To update an entity, set `changed` to `true` and edit the fields\n * on the entity.\n */\n farm: Farm | undefined;\n}\n\nexport interface ListFarmsRequest {\n /**\n * Cursor from `ListFarmsResponse.next_page_token` on a previous response.\n * If blank, starts from the beginning.\n */\n pageToken: string;\n}\n\nexport interface ListFarmsResponse {\n farms: Farm[];\n /**\n * Cursor for `ListFarmsRequest.page_token`. If blank, there are no further\n * pages.\n */\n nextPageToken: string;\n}\n\nexport interface GetFarmRequest {\n /** ID of the farm to get. */\n id:\n | Id\n | undefined;\n /** If specified, this is a conditional request; see `FarmsService.GetFarm`. */\n ifModifiedSince: string | undefined;\n}\n\nexport interface GetFarmResponse {\n farm: Farm | undefined;\n}\n\nfunction createBaseFarm(): Farm {\n return { id: undefined, version: undefined, name: \"\", customerId: 0, pointDefs: [], zones: [] };\n}\n\nexport const Farm: MessageFns = {\n encode(message: Farm, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== undefined) {\n Id.encode(message.id, writer.uint32(10).fork()).join();\n }\n if (message.version !== undefined) {\n VersionInfo.encode(message.version, writer.uint32(18).fork()).join();\n }\n if (message.name !== \"\") {\n writer.uint32(26).string(message.name);\n }\n if (message.customerId !== 0) {\n writer.uint32(32).int64(message.customerId);\n }\n for (const v of message.pointDefs) {\n PointDefinition.encode(v!, writer.uint32(42).fork()).join();\n }\n for (const v of message.zones) {\n Zone.encode(v!, writer.uint32(50).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Farm {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFarm();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = Id.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.version = VersionInfo.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.customerId = longToNumber(reader.int64());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.pointDefs.push(PointDefinition.decode(reader, reader.uint32()));\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.zones.push(Zone.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Farm {\n return {\n id: isSet(object.id) ? Id.fromJSON(object.id) : undefined,\n version: isSet(object.version) ? VersionInfo.fromJSON(object.version) : undefined,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n customerId: isSet(object.customerId) ? globalThis.Number(object.customerId) : 0,\n pointDefs: globalThis.Array.isArray(object?.pointDefs)\n ? object.pointDefs.map((e: any) => PointDefinition.fromJSON(e))\n : [],\n zones: globalThis.Array.isArray(object?.zones) ? object.zones.map((e: any) => Zone.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: Farm): unknown {\n const obj: any = {};\n if (message.id !== undefined) {\n obj.id = Id.toJSON(message.id);\n }\n if (message.version !== undefined) {\n obj.version = VersionInfo.toJSON(message.version);\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.customerId !== 0) {\n obj.customerId = Math.round(message.customerId);\n }\n if (message.pointDefs?.length) {\n obj.pointDefs = message.pointDefs.map((e) => PointDefinition.toJSON(e));\n }\n if (message.zones?.length) {\n obj.zones = message.zones.map((e) => Zone.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): Farm {\n return Farm.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Farm {\n const message = createBaseFarm();\n message.id = (object.id !== undefined && object.id !== null) ? Id.fromPartial(object.id) : undefined;\n message.version = (object.version !== undefined && object.version !== null)\n ? VersionInfo.fromPartial(object.version)\n : undefined;\n message.name = object.name ?? \"\";\n message.customerId = object.customerId ?? 0;\n message.pointDefs = object.pointDefs?.map((e) => PointDefinition.fromPartial(e)) || [];\n message.zones = object.zones?.map((e) => Zone.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseVersionInfo(): VersionInfo {\n return { ordinal: 0, updateTime: undefined, deleted: false, changed: false };\n}\n\nexport const VersionInfo: MessageFns = {\n encode(message: VersionInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.ordinal !== 0) {\n writer.uint32(8).int64(message.ordinal);\n }\n if (message.updateTime !== undefined) {\n Timestamp.encode(toTimestamp(message.updateTime), writer.uint32(18).fork()).join();\n }\n if (message.deleted !== false) {\n writer.uint32(24).bool(message.deleted);\n }\n if (message.changed !== false) {\n writer.uint32(32).bool(message.changed);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): VersionInfo {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVersionInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.ordinal = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.updateTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.deleted = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.changed = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): VersionInfo {\n return {\n ordinal: isSet(object.ordinal) ? globalThis.Number(object.ordinal) : 0,\n updateTime: isSet(object.updateTime) ? globalThis.String(object.updateTime) : undefined,\n deleted: isSet(object.deleted) ? globalThis.Boolean(object.deleted) : false,\n changed: isSet(object.changed) ? globalThis.Boolean(object.changed) : false,\n };\n },\n\n toJSON(message: VersionInfo): unknown {\n const obj: any = {};\n if (message.ordinal !== 0) {\n obj.ordinal = Math.round(message.ordinal);\n }\n if (message.updateTime !== undefined) {\n obj.updateTime = message.updateTime;\n }\n if (message.deleted !== false) {\n obj.deleted = message.deleted;\n }\n if (message.changed !== false) {\n obj.changed = message.changed;\n }\n return obj;\n },\n\n create, I>>(base?: I): VersionInfo {\n return VersionInfo.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): VersionInfo {\n const message = createBaseVersionInfo();\n message.ordinal = object.ordinal ?? 0;\n message.updateTime = object.updateTime ?? undefined;\n message.deleted = object.deleted ?? false;\n message.changed = object.changed ?? false;\n return message;\n },\n};\n\nfunction createBasePointDefinition(): PointDefinition {\n return { point: undefined, version: undefined };\n}\n\nexport const PointDefinition: MessageFns = {\n encode(message: PointDefinition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.point !== undefined) {\n Point.encode(message.point, writer.uint32(10).fork()).join();\n }\n if (message.version !== undefined) {\n VersionInfo.encode(message.version, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PointDefinition {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePointDefinition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.point = Point.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.version = VersionInfo.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PointDefinition {\n return {\n point: isSet(object.point) ? Point.fromJSON(object.point) : undefined,\n version: isSet(object.version) ? VersionInfo.fromJSON(object.version) : undefined,\n };\n },\n\n toJSON(message: PointDefinition): unknown {\n const obj: any = {};\n if (message.point !== undefined) {\n obj.point = Point.toJSON(message.point);\n }\n if (message.version !== undefined) {\n obj.version = VersionInfo.toJSON(message.version);\n }\n return obj;\n },\n\n create, I>>(base?: I): PointDefinition {\n return PointDefinition.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PointDefinition {\n const message = createBasePointDefinition();\n message.point = (object.point !== undefined && object.point !== null) ? Point.fromPartial(object.point) : undefined;\n message.version = (object.version !== undefined && object.version !== null)\n ? VersionInfo.fromPartial(object.version)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseZone(): Zone {\n return { id: undefined, version: undefined, name: \"\", areas: [], contents: undefined };\n}\n\nexport const Zone: MessageFns = {\n encode(message: Zone, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== undefined) {\n Id.encode(message.id, writer.uint32(10).fork()).join();\n }\n if (message.version !== undefined) {\n VersionInfo.encode(message.version, writer.uint32(18).fork()).join();\n }\n if (message.name !== \"\") {\n writer.uint32(26).string(message.name);\n }\n for (const v of message.areas) {\n Area.encode(v!, writer.uint32(34).fork()).join();\n }\n if (message.contents !== undefined) {\n ZoneContents.encode(message.contents, writer.uint32(42).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Zone {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseZone();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = Id.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.version = VersionInfo.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.areas.push(Area.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.contents = ZoneContents.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Zone {\n return {\n id: isSet(object.id) ? Id.fromJSON(object.id) : undefined,\n version: isSet(object.version) ? VersionInfo.fromJSON(object.version) : undefined,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n areas: globalThis.Array.isArray(object?.areas) ? object.areas.map((e: any) => Area.fromJSON(e)) : [],\n contents: isSet(object.contents) ? ZoneContents.fromJSON(object.contents) : undefined,\n };\n },\n\n toJSON(message: Zone): unknown {\n const obj: any = {};\n if (message.id !== undefined) {\n obj.id = Id.toJSON(message.id);\n }\n if (message.version !== undefined) {\n obj.version = VersionInfo.toJSON(message.version);\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.areas?.length) {\n obj.areas = message.areas.map((e) => Area.toJSON(e));\n }\n if (message.contents !== undefined) {\n obj.contents = ZoneContents.toJSON(message.contents);\n }\n return obj;\n },\n\n create, I>>(base?: I): Zone {\n return Zone.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Zone {\n const message = createBaseZone();\n message.id = (object.id !== undefined && object.id !== null) ? Id.fromPartial(object.id) : undefined;\n message.version = (object.version !== undefined && object.version !== null)\n ? VersionInfo.fromPartial(object.version)\n : undefined;\n message.name = object.name ?? \"\";\n message.areas = object.areas?.map((e) => Area.fromPartial(e)) || [];\n message.contents = (object.contents !== undefined && object.contents !== null)\n ? ZoneContents.fromPartial(object.contents)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseZoneContents(): ZoneContents {\n return {\n farmBoundary: undefined,\n field: undefined,\n headland: undefined,\n privateRoad: undefined,\n obstacle: undefined,\n };\n}\n\nexport const ZoneContents: MessageFns = {\n encode(message: ZoneContents, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.farmBoundary !== undefined) {\n FarmBoundaryData.encode(message.farmBoundary, writer.uint32(74).fork()).join();\n }\n if (message.field !== undefined) {\n FieldData.encode(message.field, writer.uint32(42).fork()).join();\n }\n if (message.headland !== undefined) {\n HeadlandData.encode(message.headland, writer.uint32(50).fork()).join();\n }\n if (message.privateRoad !== undefined) {\n PrivateRoadData.encode(message.privateRoad, writer.uint32(58).fork()).join();\n }\n if (message.obstacle !== undefined) {\n ObstacleData.encode(message.obstacle, writer.uint32(66).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ZoneContents {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseZoneContents();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.farmBoundary = FarmBoundaryData.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.field = FieldData.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.headland = HeadlandData.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.privateRoad = PrivateRoadData.decode(reader, reader.uint32());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.obstacle = ObstacleData.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ZoneContents {\n return {\n farmBoundary: isSet(object.farmBoundary) ? FarmBoundaryData.fromJSON(object.farmBoundary) : undefined,\n field: isSet(object.field) ? FieldData.fromJSON(object.field) : undefined,\n headland: isSet(object.headland) ? HeadlandData.fromJSON(object.headland) : undefined,\n privateRoad: isSet(object.privateRoad) ? PrivateRoadData.fromJSON(object.privateRoad) : undefined,\n obstacle: isSet(object.obstacle) ? ObstacleData.fromJSON(object.obstacle) : undefined,\n };\n },\n\n toJSON(message: ZoneContents): unknown {\n const obj: any = {};\n if (message.farmBoundary !== undefined) {\n obj.farmBoundary = FarmBoundaryData.toJSON(message.farmBoundary);\n }\n if (message.field !== undefined) {\n obj.field = FieldData.toJSON(message.field);\n }\n if (message.headland !== undefined) {\n obj.headland = HeadlandData.toJSON(message.headland);\n }\n if (message.privateRoad !== undefined) {\n obj.privateRoad = PrivateRoadData.toJSON(message.privateRoad);\n }\n if (message.obstacle !== undefined) {\n obj.obstacle = ObstacleData.toJSON(message.obstacle);\n }\n return obj;\n },\n\n create, I>>(base?: I): ZoneContents {\n return ZoneContents.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ZoneContents {\n const message = createBaseZoneContents();\n message.farmBoundary = (object.farmBoundary !== undefined && object.farmBoundary !== null)\n ? FarmBoundaryData.fromPartial(object.farmBoundary)\n : undefined;\n message.field = (object.field !== undefined && object.field !== null)\n ? FieldData.fromPartial(object.field)\n : undefined;\n message.headland = (object.headland !== undefined && object.headland !== null)\n ? HeadlandData.fromPartial(object.headland)\n : undefined;\n message.privateRoad = (object.privateRoad !== undefined && object.privateRoad !== null)\n ? PrivateRoadData.fromPartial(object.privateRoad)\n : undefined;\n message.obstacle = (object.obstacle !== undefined && object.obstacle !== null)\n ? ObstacleData.fromPartial(object.obstacle)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseArea(): Area {\n return { bufferMeters: 0, point: undefined, lineString: undefined, polygon: undefined };\n}\n\nexport const Area: MessageFns = {\n encode(message: Area, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.bufferMeters !== 0) {\n writer.uint32(9).double(message.bufferMeters);\n }\n if (message.point !== undefined) {\n Point.encode(message.point, writer.uint32(18).fork()).join();\n }\n if (message.lineString !== undefined) {\n LineString.encode(message.lineString, writer.uint32(26).fork()).join();\n }\n if (message.polygon !== undefined) {\n Polygon.encode(message.polygon, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Area {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseArea();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.bufferMeters = reader.double();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.point = Point.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.lineString = LineString.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.polygon = Polygon.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Area {\n return {\n bufferMeters: isSet(object.bufferMeters) ? globalThis.Number(object.bufferMeters) : 0,\n point: isSet(object.point) ? Point.fromJSON(object.point) : undefined,\n lineString: isSet(object.lineString) ? LineString.fromJSON(object.lineString) : undefined,\n polygon: isSet(object.polygon) ? Polygon.fromJSON(object.polygon) : undefined,\n };\n },\n\n toJSON(message: Area): unknown {\n const obj: any = {};\n if (message.bufferMeters !== 0) {\n obj.bufferMeters = message.bufferMeters;\n }\n if (message.point !== undefined) {\n obj.point = Point.toJSON(message.point);\n }\n if (message.lineString !== undefined) {\n obj.lineString = LineString.toJSON(message.lineString);\n }\n if (message.polygon !== undefined) {\n obj.polygon = Polygon.toJSON(message.polygon);\n }\n return obj;\n },\n\n create, I>>(base?: I): Area {\n return Area.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Area {\n const message = createBaseArea();\n message.bufferMeters = object.bufferMeters ?? 0;\n message.point = (object.point !== undefined && object.point !== null) ? Point.fromPartial(object.point) : undefined;\n message.lineString = (object.lineString !== undefined && object.lineString !== null)\n ? LineString.fromPartial(object.lineString)\n : undefined;\n message.polygon = (object.polygon !== undefined && object.polygon !== null)\n ? Polygon.fromPartial(object.polygon)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseFarmBoundaryData(): FarmBoundaryData {\n return {};\n}\n\nexport const FarmBoundaryData: MessageFns = {\n encode(_: FarmBoundaryData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FarmBoundaryData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFarmBoundaryData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): FarmBoundaryData {\n return {};\n },\n\n toJSON(_: FarmBoundaryData): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): FarmBoundaryData {\n return FarmBoundaryData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): FarmBoundaryData {\n const message = createBaseFarmBoundaryData();\n return message;\n },\n};\n\nfunction createBaseFieldData(): FieldData {\n return { plantingHeading: undefined, centerPivot: undefined };\n}\n\nexport const FieldData: MessageFns = {\n encode(message: FieldData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.plantingHeading !== undefined) {\n PlantingHeading.encode(message.plantingHeading, writer.uint32(10).fork()).join();\n }\n if (message.centerPivot !== undefined) {\n CenterPivot.encode(message.centerPivot, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FieldData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFieldData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.plantingHeading = PlantingHeading.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.centerPivot = CenterPivot.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FieldData {\n return {\n plantingHeading: isSet(object.plantingHeading) ? PlantingHeading.fromJSON(object.plantingHeading) : undefined,\n centerPivot: isSet(object.centerPivot) ? CenterPivot.fromJSON(object.centerPivot) : undefined,\n };\n },\n\n toJSON(message: FieldData): unknown {\n const obj: any = {};\n if (message.plantingHeading !== undefined) {\n obj.plantingHeading = PlantingHeading.toJSON(message.plantingHeading);\n }\n if (message.centerPivot !== undefined) {\n obj.centerPivot = CenterPivot.toJSON(message.centerPivot);\n }\n return obj;\n },\n\n create, I>>(base?: I): FieldData {\n return FieldData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FieldData {\n const message = createBaseFieldData();\n message.plantingHeading = (object.plantingHeading !== undefined && object.plantingHeading !== null)\n ? PlantingHeading.fromPartial(object.plantingHeading)\n : undefined;\n message.centerPivot = (object.centerPivot !== undefined && object.centerPivot !== null)\n ? CenterPivot.fromPartial(object.centerPivot)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseHeadlandData(): HeadlandData {\n return {};\n}\n\nexport const HeadlandData: MessageFns = {\n encode(_: HeadlandData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HeadlandData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHeadlandData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): HeadlandData {\n return {};\n },\n\n toJSON(_: HeadlandData): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): HeadlandData {\n return HeadlandData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): HeadlandData {\n const message = createBaseHeadlandData();\n return message;\n },\n};\n\nfunction createBasePrivateRoadData(): PrivateRoadData {\n return {};\n}\n\nexport const PrivateRoadData: MessageFns = {\n encode(_: PrivateRoadData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PrivateRoadData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePrivateRoadData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): PrivateRoadData {\n return {};\n },\n\n toJSON(_: PrivateRoadData): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): PrivateRoadData {\n return PrivateRoadData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): PrivateRoadData {\n const message = createBasePrivateRoadData();\n return message;\n },\n};\n\nfunction createBaseObstacleData(): ObstacleData {\n return {};\n}\n\nexport const ObstacleData: MessageFns = {\n encode(_: ObstacleData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ObstacleData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseObstacleData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ObstacleData {\n return {};\n },\n\n toJSON(_: ObstacleData): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ObstacleData {\n return ObstacleData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ObstacleData {\n const message = createBaseObstacleData();\n return message;\n },\n};\n\nfunction createBasePlantingHeading(): PlantingHeading {\n return { azimuthDegrees: undefined, abLine: undefined };\n}\n\nexport const PlantingHeading: MessageFns = {\n encode(message: PlantingHeading, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.azimuthDegrees !== undefined) {\n writer.uint32(9).double(message.azimuthDegrees);\n }\n if (message.abLine !== undefined) {\n AbLine.encode(message.abLine, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PlantingHeading {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePlantingHeading();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.azimuthDegrees = reader.double();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.abLine = AbLine.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PlantingHeading {\n return {\n azimuthDegrees: isSet(object.azimuthDegrees) ? globalThis.Number(object.azimuthDegrees) : undefined,\n abLine: isSet(object.abLine) ? AbLine.fromJSON(object.abLine) : undefined,\n };\n },\n\n toJSON(message: PlantingHeading): unknown {\n const obj: any = {};\n if (message.azimuthDegrees !== undefined) {\n obj.azimuthDegrees = message.azimuthDegrees;\n }\n if (message.abLine !== undefined) {\n obj.abLine = AbLine.toJSON(message.abLine);\n }\n return obj;\n },\n\n create, I>>(base?: I): PlantingHeading {\n return PlantingHeading.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PlantingHeading {\n const message = createBasePlantingHeading();\n message.azimuthDegrees = object.azimuthDegrees ?? undefined;\n message.abLine = (object.abLine !== undefined && object.abLine !== null)\n ? AbLine.fromPartial(object.abLine)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseCenterPivot(): CenterPivot {\n return { center: undefined, widthMeters: 0, lengthMeters: 0, endpointDeviceId: \"\" };\n}\n\nexport const CenterPivot: MessageFns = {\n encode(message: CenterPivot, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.center !== undefined) {\n Point.encode(message.center, writer.uint32(10).fork()).join();\n }\n if (message.widthMeters !== 0) {\n writer.uint32(17).double(message.widthMeters);\n }\n if (message.lengthMeters !== 0) {\n writer.uint32(25).double(message.lengthMeters);\n }\n if (message.endpointDeviceId !== \"\") {\n writer.uint32(34).string(message.endpointDeviceId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CenterPivot {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCenterPivot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.center = Point.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.widthMeters = reader.double();\n continue;\n case 3:\n if (tag !== 25) {\n break;\n }\n\n message.lengthMeters = reader.double();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.endpointDeviceId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CenterPivot {\n return {\n center: isSet(object.center) ? Point.fromJSON(object.center) : undefined,\n widthMeters: isSet(object.widthMeters) ? globalThis.Number(object.widthMeters) : 0,\n lengthMeters: isSet(object.lengthMeters) ? globalThis.Number(object.lengthMeters) : 0,\n endpointDeviceId: isSet(object.endpointDeviceId) ? globalThis.String(object.endpointDeviceId) : \"\",\n };\n },\n\n toJSON(message: CenterPivot): unknown {\n const obj: any = {};\n if (message.center !== undefined) {\n obj.center = Point.toJSON(message.center);\n }\n if (message.widthMeters !== 0) {\n obj.widthMeters = message.widthMeters;\n }\n if (message.lengthMeters !== 0) {\n obj.lengthMeters = message.lengthMeters;\n }\n if (message.endpointDeviceId !== \"\") {\n obj.endpointDeviceId = message.endpointDeviceId;\n }\n return obj;\n },\n\n create, I>>(base?: I): CenterPivot {\n return CenterPivot.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CenterPivot {\n const message = createBaseCenterPivot();\n message.center = (object.center !== undefined && object.center !== null)\n ? Point.fromPartial(object.center)\n : undefined;\n message.widthMeters = object.widthMeters ?? 0;\n message.lengthMeters = object.lengthMeters ?? 0;\n message.endpointDeviceId = object.endpointDeviceId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseCreateFarmRequest(): CreateFarmRequest {\n return { farm: undefined };\n}\n\nexport const CreateFarmRequest: MessageFns = {\n encode(message: CreateFarmRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.farm !== undefined) {\n Farm.encode(message.farm, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CreateFarmRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateFarmRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.farm = Farm.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CreateFarmRequest {\n return { farm: isSet(object.farm) ? Farm.fromJSON(object.farm) : undefined };\n },\n\n toJSON(message: CreateFarmRequest): unknown {\n const obj: any = {};\n if (message.farm !== undefined) {\n obj.farm = Farm.toJSON(message.farm);\n }\n return obj;\n },\n\n create, I>>(base?: I): CreateFarmRequest {\n return CreateFarmRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CreateFarmRequest {\n const message = createBaseCreateFarmRequest();\n message.farm = (object.farm !== undefined && object.farm !== null) ? Farm.fromPartial(object.farm) : undefined;\n return message;\n },\n};\n\nfunction createBaseUpdateFarmRequest(): UpdateFarmRequest {\n return { farm: undefined };\n}\n\nexport const UpdateFarmRequest: MessageFns = {\n encode(message: UpdateFarmRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.farm !== undefined) {\n Farm.encode(message.farm, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UpdateFarmRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUpdateFarmRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.farm = Farm.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UpdateFarmRequest {\n return { farm: isSet(object.farm) ? Farm.fromJSON(object.farm) : undefined };\n },\n\n toJSON(message: UpdateFarmRequest): unknown {\n const obj: any = {};\n if (message.farm !== undefined) {\n obj.farm = Farm.toJSON(message.farm);\n }\n return obj;\n },\n\n create, I>>(base?: I): UpdateFarmRequest {\n return UpdateFarmRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UpdateFarmRequest {\n const message = createBaseUpdateFarmRequest();\n message.farm = (object.farm !== undefined && object.farm !== null) ? Farm.fromPartial(object.farm) : undefined;\n return message;\n },\n};\n\nfunction createBaseListFarmsRequest(): ListFarmsRequest {\n return { pageToken: \"\" };\n}\n\nexport const ListFarmsRequest: MessageFns = {\n encode(message: ListFarmsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.pageToken !== \"\") {\n writer.uint32(10).string(message.pageToken);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListFarmsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListFarmsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.pageToken = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListFarmsRequest {\n return { pageToken: isSet(object.pageToken) ? globalThis.String(object.pageToken) : \"\" };\n },\n\n toJSON(message: ListFarmsRequest): unknown {\n const obj: any = {};\n if (message.pageToken !== \"\") {\n obj.pageToken = message.pageToken;\n }\n return obj;\n },\n\n create, I>>(base?: I): ListFarmsRequest {\n return ListFarmsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListFarmsRequest {\n const message = createBaseListFarmsRequest();\n message.pageToken = object.pageToken ?? \"\";\n return message;\n },\n};\n\nfunction createBaseListFarmsResponse(): ListFarmsResponse {\n return { farms: [], nextPageToken: \"\" };\n}\n\nexport const ListFarmsResponse: MessageFns = {\n encode(message: ListFarmsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.farms) {\n Farm.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.nextPageToken !== \"\") {\n writer.uint32(18).string(message.nextPageToken);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListFarmsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListFarmsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.farms.push(Farm.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.nextPageToken = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListFarmsResponse {\n return {\n farms: globalThis.Array.isArray(object?.farms) ? object.farms.map((e: any) => Farm.fromJSON(e)) : [],\n nextPageToken: isSet(object.nextPageToken) ? globalThis.String(object.nextPageToken) : \"\",\n };\n },\n\n toJSON(message: ListFarmsResponse): unknown {\n const obj: any = {};\n if (message.farms?.length) {\n obj.farms = message.farms.map((e) => Farm.toJSON(e));\n }\n if (message.nextPageToken !== \"\") {\n obj.nextPageToken = message.nextPageToken;\n }\n return obj;\n },\n\n create, I>>(base?: I): ListFarmsResponse {\n return ListFarmsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListFarmsResponse {\n const message = createBaseListFarmsResponse();\n message.farms = object.farms?.map((e) => Farm.fromPartial(e)) || [];\n message.nextPageToken = object.nextPageToken ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetFarmRequest(): GetFarmRequest {\n return { id: undefined, ifModifiedSince: undefined };\n}\n\nexport const GetFarmRequest: MessageFns = {\n encode(message: GetFarmRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== undefined) {\n Id.encode(message.id, writer.uint32(10).fork()).join();\n }\n if (message.ifModifiedSince !== undefined) {\n Timestamp.encode(toTimestamp(message.ifModifiedSince), writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetFarmRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFarmRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = Id.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.ifModifiedSince = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetFarmRequest {\n return {\n id: isSet(object.id) ? Id.fromJSON(object.id) : undefined,\n ifModifiedSince: isSet(object.ifModifiedSince) ? globalThis.String(object.ifModifiedSince) : undefined,\n };\n },\n\n toJSON(message: GetFarmRequest): unknown {\n const obj: any = {};\n if (message.id !== undefined) {\n obj.id = Id.toJSON(message.id);\n }\n if (message.ifModifiedSince !== undefined) {\n obj.ifModifiedSince = message.ifModifiedSince;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetFarmRequest {\n return GetFarmRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetFarmRequest {\n const message = createBaseGetFarmRequest();\n message.id = (object.id !== undefined && object.id !== null) ? Id.fromPartial(object.id) : undefined;\n message.ifModifiedSince = object.ifModifiedSince ?? undefined;\n return message;\n },\n};\n\nfunction createBaseGetFarmResponse(): GetFarmResponse {\n return { farm: undefined };\n}\n\nexport const GetFarmResponse: MessageFns = {\n encode(message: GetFarmResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.farm !== undefined) {\n Farm.encode(message.farm, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetFarmResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFarmResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.farm = Farm.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetFarmResponse {\n return { farm: isSet(object.farm) ? Farm.fromJSON(object.farm) : undefined };\n },\n\n toJSON(message: GetFarmResponse): unknown {\n const obj: any = {};\n if (message.farm !== undefined) {\n obj.farm = Farm.toJSON(message.farm);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetFarmResponse {\n return GetFarmResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetFarmResponse {\n const message = createBaseGetFarmResponse();\n message.farm = (object.farm !== undefined && object.farm !== null) ? Farm.fromPartial(object.farm) : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction toTimestamp(dateStr: string): Timestamp {\n const date = new globalThis.Date(dateStr);\n const seconds = Math.trunc(date.getTime() / 1_000);\n const nanos = (date.getTime() % 1_000) * 1_000_000;\n return { seconds, nanos };\n}\n\nfunction fromTimestamp(t: Timestamp): string {\n let millis = (t.seconds || 0) * 1_000;\n millis += (t.nanos || 0) / 1_000_000;\n return new globalThis.Date(millis).toISOString();\n}\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/geo.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { LineString, Point } from \"../geo/geo\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.field\";\n\nexport interface GeoJSON {\n /** JSON comprising a GeoJSON feature object, like `{\"type\":\"Feature\",...}`. */\n feature: string;\n}\n\nexport interface PlanPathRequest {\n /** Robot serial, like \"slayer1\". */\n serial: string;\n /**\n * Field ID, typically a UUID in text format (hex with dashes). The backend\n * will attempt to plan a path through this field, respecting its boundary.\n */\n fieldId: string;\n /**\n * The robot's current location. The planned path will start from the point\n * on the target line that is closest to this point.\n */\n currentPoint:\n | Point\n | undefined;\n /**\n * The A-B line along which the robot wants to drive. This represents a\n * directed line with no distinguished start point or extent. It should have\n * exactly two points and should have positive length.\n */\n targetLine:\n | LineString\n | undefined;\n /**\n * Radius of a safety buffer around the tractor: the path will only pass\n * through points around which the ball of this radius lies entirely within\n * the field boundary.\n */\n bufferMeters: number;\n}\n\nexport interface PlanPathResponse {\n /**\n * The path that the robot should drive, as a LineString with two or more\n * points.\n */\n track:\n | LineString\n | undefined;\n /** Distance from the robot's current point to the track, in meters. */\n distanceMeters: number;\n}\n\nexport interface FieldDefinition {\n db: DB | undefined;\n fieldId: string;\n robotId: number;\n /** Human-readable name of this field. */\n name: string;\n boundary: GeoJSON | undefined;\n plantingHeading: GeoJSON | undefined;\n}\n\nfunction createBaseGeoJSON(): GeoJSON {\n return { feature: \"\" };\n}\n\nexport const GeoJSON: MessageFns = {\n encode(message: GeoJSON, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.feature !== \"\") {\n writer.uint32(10).string(message.feature);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GeoJSON {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGeoJSON();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.feature = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GeoJSON {\n return { feature: isSet(object.feature) ? globalThis.String(object.feature) : \"\" };\n },\n\n toJSON(message: GeoJSON): unknown {\n const obj: any = {};\n if (message.feature !== \"\") {\n obj.feature = message.feature;\n }\n return obj;\n },\n\n create, I>>(base?: I): GeoJSON {\n return GeoJSON.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GeoJSON {\n const message = createBaseGeoJSON();\n message.feature = object.feature ?? \"\";\n return message;\n },\n};\n\nfunction createBasePlanPathRequest(): PlanPathRequest {\n return { serial: \"\", fieldId: \"\", currentPoint: undefined, targetLine: undefined, bufferMeters: 0 };\n}\n\nexport const PlanPathRequest: MessageFns = {\n encode(message: PlanPathRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.serial !== \"\") {\n writer.uint32(42).string(message.serial);\n }\n if (message.fieldId !== \"\") {\n writer.uint32(10).string(message.fieldId);\n }\n if (message.currentPoint !== undefined) {\n Point.encode(message.currentPoint, writer.uint32(18).fork()).join();\n }\n if (message.targetLine !== undefined) {\n LineString.encode(message.targetLine, writer.uint32(26).fork()).join();\n }\n if (message.bufferMeters !== 0) {\n writer.uint32(33).double(message.bufferMeters);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PlanPathRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePlanPathRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.serial = reader.string();\n continue;\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.fieldId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.currentPoint = Point.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.targetLine = LineString.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 33) {\n break;\n }\n\n message.bufferMeters = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PlanPathRequest {\n return {\n serial: isSet(object.serial) ? globalThis.String(object.serial) : \"\",\n fieldId: isSet(object.fieldId) ? globalThis.String(object.fieldId) : \"\",\n currentPoint: isSet(object.currentPoint) ? Point.fromJSON(object.currentPoint) : undefined,\n targetLine: isSet(object.targetLine) ? LineString.fromJSON(object.targetLine) : undefined,\n bufferMeters: isSet(object.bufferMeters) ? globalThis.Number(object.bufferMeters) : 0,\n };\n },\n\n toJSON(message: PlanPathRequest): unknown {\n const obj: any = {};\n if (message.serial !== \"\") {\n obj.serial = message.serial;\n }\n if (message.fieldId !== \"\") {\n obj.fieldId = message.fieldId;\n }\n if (message.currentPoint !== undefined) {\n obj.currentPoint = Point.toJSON(message.currentPoint);\n }\n if (message.targetLine !== undefined) {\n obj.targetLine = LineString.toJSON(message.targetLine);\n }\n if (message.bufferMeters !== 0) {\n obj.bufferMeters = message.bufferMeters;\n }\n return obj;\n },\n\n create, I>>(base?: I): PlanPathRequest {\n return PlanPathRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PlanPathRequest {\n const message = createBasePlanPathRequest();\n message.serial = object.serial ?? \"\";\n message.fieldId = object.fieldId ?? \"\";\n message.currentPoint = (object.currentPoint !== undefined && object.currentPoint !== null)\n ? Point.fromPartial(object.currentPoint)\n : undefined;\n message.targetLine = (object.targetLine !== undefined && object.targetLine !== null)\n ? LineString.fromPartial(object.targetLine)\n : undefined;\n message.bufferMeters = object.bufferMeters ?? 0;\n return message;\n },\n};\n\nfunction createBasePlanPathResponse(): PlanPathResponse {\n return { track: undefined, distanceMeters: 0 };\n}\n\nexport const PlanPathResponse: MessageFns = {\n encode(message: PlanPathResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.track !== undefined) {\n LineString.encode(message.track, writer.uint32(10).fork()).join();\n }\n if (message.distanceMeters !== 0) {\n writer.uint32(17).double(message.distanceMeters);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PlanPathResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePlanPathResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.track = LineString.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.distanceMeters = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PlanPathResponse {\n return {\n track: isSet(object.track) ? LineString.fromJSON(object.track) : undefined,\n distanceMeters: isSet(object.distanceMeters) ? globalThis.Number(object.distanceMeters) : 0,\n };\n },\n\n toJSON(message: PlanPathResponse): unknown {\n const obj: any = {};\n if (message.track !== undefined) {\n obj.track = LineString.toJSON(message.track);\n }\n if (message.distanceMeters !== 0) {\n obj.distanceMeters = message.distanceMeters;\n }\n return obj;\n },\n\n create, I>>(base?: I): PlanPathResponse {\n return PlanPathResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PlanPathResponse {\n const message = createBasePlanPathResponse();\n message.track = (object.track !== undefined && object.track !== null)\n ? LineString.fromPartial(object.track)\n : undefined;\n message.distanceMeters = object.distanceMeters ?? 0;\n return message;\n },\n};\n\nfunction createBaseFieldDefinition(): FieldDefinition {\n return { db: undefined, fieldId: \"\", robotId: 0, name: \"\", boundary: undefined, plantingHeading: undefined };\n}\n\nexport const FieldDefinition: MessageFns = {\n encode(message: FieldDefinition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.fieldId !== \"\") {\n writer.uint32(18).string(message.fieldId);\n }\n if (message.robotId !== 0) {\n writer.uint32(24).int64(message.robotId);\n }\n if (message.name !== \"\") {\n writer.uint32(34).string(message.name);\n }\n if (message.boundary !== undefined) {\n GeoJSON.encode(message.boundary, writer.uint32(42).fork()).join();\n }\n if (message.plantingHeading !== undefined) {\n GeoJSON.encode(message.plantingHeading, writer.uint32(50).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FieldDefinition {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFieldDefinition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.fieldId = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.robotId = longToNumber(reader.int64());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.boundary = GeoJSON.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.plantingHeading = GeoJSON.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FieldDefinition {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n fieldId: isSet(object.fieldId) ? globalThis.String(object.fieldId) : \"\",\n robotId: isSet(object.robotId) ? globalThis.Number(object.robotId) : 0,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n boundary: isSet(object.boundary) ? GeoJSON.fromJSON(object.boundary) : undefined,\n plantingHeading: isSet(object.plantingHeading) ? GeoJSON.fromJSON(object.plantingHeading) : undefined,\n };\n },\n\n toJSON(message: FieldDefinition): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.fieldId !== \"\") {\n obj.fieldId = message.fieldId;\n }\n if (message.robotId !== 0) {\n obj.robotId = Math.round(message.robotId);\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.boundary !== undefined) {\n obj.boundary = GeoJSON.toJSON(message.boundary);\n }\n if (message.plantingHeading !== undefined) {\n obj.plantingHeading = GeoJSON.toJSON(message.plantingHeading);\n }\n return obj;\n },\n\n create, I>>(base?: I): FieldDefinition {\n return FieldDefinition.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FieldDefinition {\n const message = createBaseFieldDefinition();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.fieldId = object.fieldId ?? \"\";\n message.robotId = object.robotId ?? 0;\n message.name = object.name ?? \"\";\n message.boundary = (object.boundary !== undefined && object.boundary !== null)\n ? GeoJSON.fromPartial(object.boundary)\n : undefined;\n message.plantingHeading = (object.plantingHeading !== undefined && object.plantingHeading !== null)\n ? GeoJSON.fromPartial(object.plantingHeading)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/users.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { UserDisplayRole, userDisplayRoleFromJSON, userDisplayRoleToJSON } from \"./auth\";\nimport { CustomerResponse } from \"./customers\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.users\";\n\nexport enum ViewMode {\n VIEW_MODE_UNSPECIFIED = 0,\n VIEW_MODE_CARDS = 1,\n VIEW_MODE_TABLE = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function viewModeFromJSON(object: any): ViewMode {\n switch (object) {\n case 0:\n case \"VIEW_MODE_UNSPECIFIED\":\n return ViewMode.VIEW_MODE_UNSPECIFIED;\n case 1:\n case \"VIEW_MODE_CARDS\":\n return ViewMode.VIEW_MODE_CARDS;\n case 2:\n case \"VIEW_MODE_TABLE\":\n return ViewMode.VIEW_MODE_TABLE;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ViewMode.UNRECOGNIZED;\n }\n}\n\nexport function viewModeToJSON(object: ViewMode): string {\n switch (object) {\n case ViewMode.VIEW_MODE_UNSPECIFIED:\n return \"VIEW_MODE_UNSPECIFIED\";\n case ViewMode.VIEW_MODE_CARDS:\n return \"VIEW_MODE_CARDS\";\n case ViewMode.VIEW_MODE_TABLE:\n return \"VIEW_MODE_TABLE\";\n case ViewMode.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface AppMetadata {\n customerId?: number | undefined;\n isActivated?: boolean | undefined;\n isInvited?: boolean | undefined;\n isRobot?:\n | boolean\n | undefined;\n /**\n * Cached set of user permissions stored on the app metadata, updated by an\n * Auth0 post-login action for full logins only.\n */\n permissions: string[];\n sfdcAccountId?: number | undefined;\n role?: UserDisplayRole | undefined;\n}\n\nexport interface UserMetadata {\n consentGiven?: boolean | undefined;\n consentTimestamp?: number | undefined;\n experimental?: boolean | undefined;\n language?: string | undefined;\n showMascot?: boolean | undefined;\n unit?: string | undefined;\n defaultFleetViewId?: number | undefined;\n}\n\nexport interface Auth0Profile {\n email: string;\n emailVerified: boolean;\n name: string;\n username: string;\n givenName: string;\n phoneNumber: string;\n phoneVerified: boolean;\n familyName: string;\n}\n\nexport interface Auth0Identity {\n connection: string;\n userId: string;\n provider: string;\n isSocial: boolean;\n accessToken: string;\n accessTokenSecret: string;\n refreshToken: string;\n profileData: Auth0Profile | undefined;\n}\n\nexport interface Auth0User {\n userId: string;\n email: string;\n emailVerified: boolean;\n username: string;\n phoneNumber: string;\n phoneVerified: boolean;\n createdAt: string;\n updatedAt: string;\n identities: Auth0Identity[];\n appMetadata: AppMetadata | undefined;\n userMetadata: UserMetadata | undefined;\n picture: string;\n name: string;\n nickname: string;\n multifactor: string[];\n lastIp: string;\n lastLogin: string;\n loginsCount: number;\n blocked: boolean;\n givenName: string;\n familyName: string;\n}\n\nexport interface FleetView {\n db: DB | undefined;\n userAuth0Id: string;\n name: string;\n columns: string[];\n search: string;\n showInternal: boolean;\n showMap: boolean;\n showOffline: boolean;\n statuses: string[];\n pinnedRobotIds: number[];\n /** @deprecated */\n customerId: number;\n viewMode: ViewMode;\n customerIds: number[];\n}\n\nexport interface UserResponse {\n /** User response from Auth0. */\n user:\n | Auth0User\n | undefined;\n /** Permissions granted to the user, from the Auth0 management API. */\n permissions: Permissions | undefined;\n customer: CustomerResponse | undefined;\n fleetViews: FleetView[];\n}\n\nexport interface Permissions {\n /** Names of each Auth0 permission that the user has, like \"read:configs:all\". */\n names: string[];\n}\n\n/** Asks whether each of the given user IDs belongs to a Carbon employee. */\nexport interface IsCarbonRequest {\n userIds: string[];\n}\n\nexport interface IsCarbonResponse {\n users: IsCarbonUser[];\n}\n\nexport interface IsCarbonUser {\n userId: string;\n isCarbon: boolean;\n}\n\nfunction createBaseAppMetadata(): AppMetadata {\n return {\n customerId: undefined,\n isActivated: undefined,\n isInvited: undefined,\n isRobot: undefined,\n permissions: [],\n sfdcAccountId: undefined,\n role: undefined,\n };\n}\n\nexport const AppMetadata: MessageFns = {\n encode(message: AppMetadata, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.customerId !== undefined) {\n writer.uint32(8).int64(message.customerId);\n }\n if (message.isActivated !== undefined) {\n writer.uint32(16).bool(message.isActivated);\n }\n if (message.isInvited !== undefined) {\n writer.uint32(24).bool(message.isInvited);\n }\n if (message.isRobot !== undefined) {\n writer.uint32(32).bool(message.isRobot);\n }\n for (const v of message.permissions) {\n writer.uint32(42).string(v!);\n }\n if (message.sfdcAccountId !== undefined) {\n writer.uint32(48).int64(message.sfdcAccountId);\n }\n if (message.role !== undefined) {\n writer.uint32(56).int32(message.role);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AppMetadata {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAppMetadata();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.customerId = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.isActivated = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.isInvited = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.isRobot = reader.bool();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.permissions.push(reader.string());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.sfdcAccountId = longToNumber(reader.int64());\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.role = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AppMetadata {\n return {\n customerId: isSet(object.customerId) ? globalThis.Number(object.customerId) : undefined,\n isActivated: isSet(object.isActivated) ? globalThis.Boolean(object.isActivated) : undefined,\n isInvited: isSet(object.isInvited) ? globalThis.Boolean(object.isInvited) : undefined,\n isRobot: isSet(object.isRobot) ? globalThis.Boolean(object.isRobot) : undefined,\n permissions: globalThis.Array.isArray(object?.permissions)\n ? object.permissions.map((e: any) => globalThis.String(e))\n : [],\n sfdcAccountId: isSet(object.sfdcAccountId) ? globalThis.Number(object.sfdcAccountId) : undefined,\n role: isSet(object.role) ? userDisplayRoleFromJSON(object.role) : undefined,\n };\n },\n\n toJSON(message: AppMetadata): unknown {\n const obj: any = {};\n if (message.customerId !== undefined) {\n obj.customerId = Math.round(message.customerId);\n }\n if (message.isActivated !== undefined) {\n obj.isActivated = message.isActivated;\n }\n if (message.isInvited !== undefined) {\n obj.isInvited = message.isInvited;\n }\n if (message.isRobot !== undefined) {\n obj.isRobot = message.isRobot;\n }\n if (message.permissions?.length) {\n obj.permissions = message.permissions;\n }\n if (message.sfdcAccountId !== undefined) {\n obj.sfdcAccountId = Math.round(message.sfdcAccountId);\n }\n if (message.role !== undefined) {\n obj.role = userDisplayRoleToJSON(message.role);\n }\n return obj;\n },\n\n create, I>>(base?: I): AppMetadata {\n return AppMetadata.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AppMetadata {\n const message = createBaseAppMetadata();\n message.customerId = object.customerId ?? undefined;\n message.isActivated = object.isActivated ?? undefined;\n message.isInvited = object.isInvited ?? undefined;\n message.isRobot = object.isRobot ?? undefined;\n message.permissions = object.permissions?.map((e) => e) || [];\n message.sfdcAccountId = object.sfdcAccountId ?? undefined;\n message.role = object.role ?? undefined;\n return message;\n },\n};\n\nfunction createBaseUserMetadata(): UserMetadata {\n return {\n consentGiven: undefined,\n consentTimestamp: undefined,\n experimental: undefined,\n language: undefined,\n showMascot: undefined,\n unit: undefined,\n defaultFleetViewId: undefined,\n };\n}\n\nexport const UserMetadata: MessageFns = {\n encode(message: UserMetadata, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.consentGiven !== undefined) {\n writer.uint32(8).bool(message.consentGiven);\n }\n if (message.consentTimestamp !== undefined) {\n writer.uint32(16).int64(message.consentTimestamp);\n }\n if (message.experimental !== undefined) {\n writer.uint32(24).bool(message.experimental);\n }\n if (message.language !== undefined) {\n writer.uint32(34).string(message.language);\n }\n if (message.showMascot !== undefined) {\n writer.uint32(40).bool(message.showMascot);\n }\n if (message.unit !== undefined) {\n writer.uint32(50).string(message.unit);\n }\n if (message.defaultFleetViewId !== undefined) {\n writer.uint32(56).int64(message.defaultFleetViewId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UserMetadata {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUserMetadata();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.consentGiven = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.consentTimestamp = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.experimental = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.language = reader.string();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.showMascot = reader.bool();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.unit = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.defaultFleetViewId = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UserMetadata {\n return {\n consentGiven: isSet(object.consentGiven) ? globalThis.Boolean(object.consentGiven) : undefined,\n consentTimestamp: isSet(object.consentTimestamp) ? globalThis.Number(object.consentTimestamp) : undefined,\n experimental: isSet(object.experimental) ? globalThis.Boolean(object.experimental) : undefined,\n language: isSet(object.language) ? globalThis.String(object.language) : undefined,\n showMascot: isSet(object.showMascot) ? globalThis.Boolean(object.showMascot) : undefined,\n unit: isSet(object.unit) ? globalThis.String(object.unit) : undefined,\n defaultFleetViewId: isSet(object.defaultFleetViewId) ? globalThis.Number(object.defaultFleetViewId) : undefined,\n };\n },\n\n toJSON(message: UserMetadata): unknown {\n const obj: any = {};\n if (message.consentGiven !== undefined) {\n obj.consentGiven = message.consentGiven;\n }\n if (message.consentTimestamp !== undefined) {\n obj.consentTimestamp = Math.round(message.consentTimestamp);\n }\n if (message.experimental !== undefined) {\n obj.experimental = message.experimental;\n }\n if (message.language !== undefined) {\n obj.language = message.language;\n }\n if (message.showMascot !== undefined) {\n obj.showMascot = message.showMascot;\n }\n if (message.unit !== undefined) {\n obj.unit = message.unit;\n }\n if (message.defaultFleetViewId !== undefined) {\n obj.defaultFleetViewId = Math.round(message.defaultFleetViewId);\n }\n return obj;\n },\n\n create, I>>(base?: I): UserMetadata {\n return UserMetadata.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UserMetadata {\n const message = createBaseUserMetadata();\n message.consentGiven = object.consentGiven ?? undefined;\n message.consentTimestamp = object.consentTimestamp ?? undefined;\n message.experimental = object.experimental ?? undefined;\n message.language = object.language ?? undefined;\n message.showMascot = object.showMascot ?? undefined;\n message.unit = object.unit ?? undefined;\n message.defaultFleetViewId = object.defaultFleetViewId ?? undefined;\n return message;\n },\n};\n\nfunction createBaseAuth0Profile(): Auth0Profile {\n return {\n email: \"\",\n emailVerified: false,\n name: \"\",\n username: \"\",\n givenName: \"\",\n phoneNumber: \"\",\n phoneVerified: false,\n familyName: \"\",\n };\n}\n\nexport const Auth0Profile: MessageFns = {\n encode(message: Auth0Profile, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.email !== \"\") {\n writer.uint32(10).string(message.email);\n }\n if (message.emailVerified !== false) {\n writer.uint32(16).bool(message.emailVerified);\n }\n if (message.name !== \"\") {\n writer.uint32(26).string(message.name);\n }\n if (message.username !== \"\") {\n writer.uint32(34).string(message.username);\n }\n if (message.givenName !== \"\") {\n writer.uint32(42).string(message.givenName);\n }\n if (message.phoneNumber !== \"\") {\n writer.uint32(50).string(message.phoneNumber);\n }\n if (message.phoneVerified !== false) {\n writer.uint32(56).bool(message.phoneVerified);\n }\n if (message.familyName !== \"\") {\n writer.uint32(66).string(message.familyName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Auth0Profile {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAuth0Profile();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.email = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.emailVerified = reader.bool();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.username = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.givenName = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.phoneNumber = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.phoneVerified = reader.bool();\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.familyName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Auth0Profile {\n return {\n email: isSet(object.email) ? globalThis.String(object.email) : \"\",\n emailVerified: isSet(object.emailVerified) ? globalThis.Boolean(object.emailVerified) : false,\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n username: isSet(object.username) ? globalThis.String(object.username) : \"\",\n givenName: isSet(object.givenName) ? globalThis.String(object.givenName) : \"\",\n phoneNumber: isSet(object.phoneNumber) ? globalThis.String(object.phoneNumber) : \"\",\n phoneVerified: isSet(object.phoneVerified) ? globalThis.Boolean(object.phoneVerified) : false,\n familyName: isSet(object.familyName) ? globalThis.String(object.familyName) : \"\",\n };\n },\n\n toJSON(message: Auth0Profile): unknown {\n const obj: any = {};\n if (message.email !== \"\") {\n obj.email = message.email;\n }\n if (message.emailVerified !== false) {\n obj.emailVerified = message.emailVerified;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.username !== \"\") {\n obj.username = message.username;\n }\n if (message.givenName !== \"\") {\n obj.givenName = message.givenName;\n }\n if (message.phoneNumber !== \"\") {\n obj.phoneNumber = message.phoneNumber;\n }\n if (message.phoneVerified !== false) {\n obj.phoneVerified = message.phoneVerified;\n }\n if (message.familyName !== \"\") {\n obj.familyName = message.familyName;\n }\n return obj;\n },\n\n create, I>>(base?: I): Auth0Profile {\n return Auth0Profile.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Auth0Profile {\n const message = createBaseAuth0Profile();\n message.email = object.email ?? \"\";\n message.emailVerified = object.emailVerified ?? false;\n message.name = object.name ?? \"\";\n message.username = object.username ?? \"\";\n message.givenName = object.givenName ?? \"\";\n message.phoneNumber = object.phoneNumber ?? \"\";\n message.phoneVerified = object.phoneVerified ?? false;\n message.familyName = object.familyName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseAuth0Identity(): Auth0Identity {\n return {\n connection: \"\",\n userId: \"\",\n provider: \"\",\n isSocial: false,\n accessToken: \"\",\n accessTokenSecret: \"\",\n refreshToken: \"\",\n profileData: undefined,\n };\n}\n\nexport const Auth0Identity: MessageFns = {\n encode(message: Auth0Identity, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.connection !== \"\") {\n writer.uint32(10).string(message.connection);\n }\n if (message.userId !== \"\") {\n writer.uint32(18).string(message.userId);\n }\n if (message.provider !== \"\") {\n writer.uint32(26).string(message.provider);\n }\n if (message.isSocial !== false) {\n writer.uint32(32).bool(message.isSocial);\n }\n if (message.accessToken !== \"\") {\n writer.uint32(42).string(message.accessToken);\n }\n if (message.accessTokenSecret !== \"\") {\n writer.uint32(50).string(message.accessTokenSecret);\n }\n if (message.refreshToken !== \"\") {\n writer.uint32(58).string(message.refreshToken);\n }\n if (message.profileData !== undefined) {\n Auth0Profile.encode(message.profileData, writer.uint32(66).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Auth0Identity {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAuth0Identity();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.connection = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.userId = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.provider = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.isSocial = reader.bool();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.accessToken = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.accessTokenSecret = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.refreshToken = reader.string();\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.profileData = Auth0Profile.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Auth0Identity {\n return {\n connection: isSet(object.connection) ? globalThis.String(object.connection) : \"\",\n userId: isSet(object.userId) ? globalThis.String(object.userId) : \"\",\n provider: isSet(object.provider) ? globalThis.String(object.provider) : \"\",\n isSocial: isSet(object.isSocial) ? globalThis.Boolean(object.isSocial) : false,\n accessToken: isSet(object.accessToken) ? globalThis.String(object.accessToken) : \"\",\n accessTokenSecret: isSet(object.accessTokenSecret) ? globalThis.String(object.accessTokenSecret) : \"\",\n refreshToken: isSet(object.refreshToken) ? globalThis.String(object.refreshToken) : \"\",\n profileData: isSet(object.profileData) ? Auth0Profile.fromJSON(object.profileData) : undefined,\n };\n },\n\n toJSON(message: Auth0Identity): unknown {\n const obj: any = {};\n if (message.connection !== \"\") {\n obj.connection = message.connection;\n }\n if (message.userId !== \"\") {\n obj.userId = message.userId;\n }\n if (message.provider !== \"\") {\n obj.provider = message.provider;\n }\n if (message.isSocial !== false) {\n obj.isSocial = message.isSocial;\n }\n if (message.accessToken !== \"\") {\n obj.accessToken = message.accessToken;\n }\n if (message.accessTokenSecret !== \"\") {\n obj.accessTokenSecret = message.accessTokenSecret;\n }\n if (message.refreshToken !== \"\") {\n obj.refreshToken = message.refreshToken;\n }\n if (message.profileData !== undefined) {\n obj.profileData = Auth0Profile.toJSON(message.profileData);\n }\n return obj;\n },\n\n create, I>>(base?: I): Auth0Identity {\n return Auth0Identity.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Auth0Identity {\n const message = createBaseAuth0Identity();\n message.connection = object.connection ?? \"\";\n message.userId = object.userId ?? \"\";\n message.provider = object.provider ?? \"\";\n message.isSocial = object.isSocial ?? false;\n message.accessToken = object.accessToken ?? \"\";\n message.accessTokenSecret = object.accessTokenSecret ?? \"\";\n message.refreshToken = object.refreshToken ?? \"\";\n message.profileData = (object.profileData !== undefined && object.profileData !== null)\n ? Auth0Profile.fromPartial(object.profileData)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseAuth0User(): Auth0User {\n return {\n userId: \"\",\n email: \"\",\n emailVerified: false,\n username: \"\",\n phoneNumber: \"\",\n phoneVerified: false,\n createdAt: \"\",\n updatedAt: \"\",\n identities: [],\n appMetadata: undefined,\n userMetadata: undefined,\n picture: \"\",\n name: \"\",\n nickname: \"\",\n multifactor: [],\n lastIp: \"\",\n lastLogin: \"\",\n loginsCount: 0,\n blocked: false,\n givenName: \"\",\n familyName: \"\",\n };\n}\n\nexport const Auth0User: MessageFns = {\n encode(message: Auth0User, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.userId !== \"\") {\n writer.uint32(10).string(message.userId);\n }\n if (message.email !== \"\") {\n writer.uint32(18).string(message.email);\n }\n if (message.emailVerified !== false) {\n writer.uint32(24).bool(message.emailVerified);\n }\n if (message.username !== \"\") {\n writer.uint32(34).string(message.username);\n }\n if (message.phoneNumber !== \"\") {\n writer.uint32(42).string(message.phoneNumber);\n }\n if (message.phoneVerified !== false) {\n writer.uint32(48).bool(message.phoneVerified);\n }\n if (message.createdAt !== \"\") {\n writer.uint32(58).string(message.createdAt);\n }\n if (message.updatedAt !== \"\") {\n writer.uint32(66).string(message.updatedAt);\n }\n for (const v of message.identities) {\n Auth0Identity.encode(v!, writer.uint32(74).fork()).join();\n }\n if (message.appMetadata !== undefined) {\n AppMetadata.encode(message.appMetadata, writer.uint32(82).fork()).join();\n }\n if (message.userMetadata !== undefined) {\n UserMetadata.encode(message.userMetadata, writer.uint32(90).fork()).join();\n }\n if (message.picture !== \"\") {\n writer.uint32(98).string(message.picture);\n }\n if (message.name !== \"\") {\n writer.uint32(106).string(message.name);\n }\n if (message.nickname !== \"\") {\n writer.uint32(114).string(message.nickname);\n }\n for (const v of message.multifactor) {\n writer.uint32(122).string(v!);\n }\n if (message.lastIp !== \"\") {\n writer.uint32(130).string(message.lastIp);\n }\n if (message.lastLogin !== \"\") {\n writer.uint32(138).string(message.lastLogin);\n }\n if (message.loginsCount !== 0) {\n writer.uint32(144).int64(message.loginsCount);\n }\n if (message.blocked !== false) {\n writer.uint32(152).bool(message.blocked);\n }\n if (message.givenName !== \"\") {\n writer.uint32(162).string(message.givenName);\n }\n if (message.familyName !== \"\") {\n writer.uint32(170).string(message.familyName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Auth0User {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAuth0User();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.userId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.email = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.emailVerified = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.username = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.phoneNumber = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.phoneVerified = reader.bool();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.createdAt = reader.string();\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.updatedAt = reader.string();\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.identities.push(Auth0Identity.decode(reader, reader.uint32()));\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.appMetadata = AppMetadata.decode(reader, reader.uint32());\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.userMetadata = UserMetadata.decode(reader, reader.uint32());\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.picture = reader.string();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.nickname = reader.string();\n continue;\n case 15:\n if (tag !== 122) {\n break;\n }\n\n message.multifactor.push(reader.string());\n continue;\n case 16:\n if (tag !== 130) {\n break;\n }\n\n message.lastIp = reader.string();\n continue;\n case 17:\n if (tag !== 138) {\n break;\n }\n\n message.lastLogin = reader.string();\n continue;\n case 18:\n if (tag !== 144) {\n break;\n }\n\n message.loginsCount = longToNumber(reader.int64());\n continue;\n case 19:\n if (tag !== 152) {\n break;\n }\n\n message.blocked = reader.bool();\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n\n message.givenName = reader.string();\n continue;\n case 21:\n if (tag !== 170) {\n break;\n }\n\n message.familyName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Auth0User {\n return {\n userId: isSet(object.userId) ? globalThis.String(object.userId) : \"\",\n email: isSet(object.email) ? globalThis.String(object.email) : \"\",\n emailVerified: isSet(object.emailVerified) ? globalThis.Boolean(object.emailVerified) : false,\n username: isSet(object.username) ? globalThis.String(object.username) : \"\",\n phoneNumber: isSet(object.phoneNumber) ? globalThis.String(object.phoneNumber) : \"\",\n phoneVerified: isSet(object.phoneVerified) ? globalThis.Boolean(object.phoneVerified) : false,\n createdAt: isSet(object.createdAt) ? globalThis.String(object.createdAt) : \"\",\n updatedAt: isSet(object.updatedAt) ? globalThis.String(object.updatedAt) : \"\",\n identities: globalThis.Array.isArray(object?.identities)\n ? object.identities.map((e: any) => Auth0Identity.fromJSON(e))\n : [],\n appMetadata: isSet(object.appMetadata) ? AppMetadata.fromJSON(object.appMetadata) : undefined,\n userMetadata: isSet(object.userMetadata) ? UserMetadata.fromJSON(object.userMetadata) : undefined,\n picture: isSet(object.picture) ? globalThis.String(object.picture) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n nickname: isSet(object.nickname) ? globalThis.String(object.nickname) : \"\",\n multifactor: globalThis.Array.isArray(object?.multifactor)\n ? object.multifactor.map((e: any) => globalThis.String(e))\n : [],\n lastIp: isSet(object.lastIp) ? globalThis.String(object.lastIp) : \"\",\n lastLogin: isSet(object.lastLogin) ? globalThis.String(object.lastLogin) : \"\",\n loginsCount: isSet(object.loginsCount) ? globalThis.Number(object.loginsCount) : 0,\n blocked: isSet(object.blocked) ? globalThis.Boolean(object.blocked) : false,\n givenName: isSet(object.givenName) ? globalThis.String(object.givenName) : \"\",\n familyName: isSet(object.familyName) ? globalThis.String(object.familyName) : \"\",\n };\n },\n\n toJSON(message: Auth0User): unknown {\n const obj: any = {};\n if (message.userId !== \"\") {\n obj.userId = message.userId;\n }\n if (message.email !== \"\") {\n obj.email = message.email;\n }\n if (message.emailVerified !== false) {\n obj.emailVerified = message.emailVerified;\n }\n if (message.username !== \"\") {\n obj.username = message.username;\n }\n if (message.phoneNumber !== \"\") {\n obj.phoneNumber = message.phoneNumber;\n }\n if (message.phoneVerified !== false) {\n obj.phoneVerified = message.phoneVerified;\n }\n if (message.createdAt !== \"\") {\n obj.createdAt = message.createdAt;\n }\n if (message.updatedAt !== \"\") {\n obj.updatedAt = message.updatedAt;\n }\n if (message.identities?.length) {\n obj.identities = message.identities.map((e) => Auth0Identity.toJSON(e));\n }\n if (message.appMetadata !== undefined) {\n obj.appMetadata = AppMetadata.toJSON(message.appMetadata);\n }\n if (message.userMetadata !== undefined) {\n obj.userMetadata = UserMetadata.toJSON(message.userMetadata);\n }\n if (message.picture !== \"\") {\n obj.picture = message.picture;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.nickname !== \"\") {\n obj.nickname = message.nickname;\n }\n if (message.multifactor?.length) {\n obj.multifactor = message.multifactor;\n }\n if (message.lastIp !== \"\") {\n obj.lastIp = message.lastIp;\n }\n if (message.lastLogin !== \"\") {\n obj.lastLogin = message.lastLogin;\n }\n if (message.loginsCount !== 0) {\n obj.loginsCount = Math.round(message.loginsCount);\n }\n if (message.blocked !== false) {\n obj.blocked = message.blocked;\n }\n if (message.givenName !== \"\") {\n obj.givenName = message.givenName;\n }\n if (message.familyName !== \"\") {\n obj.familyName = message.familyName;\n }\n return obj;\n },\n\n create, I>>(base?: I): Auth0User {\n return Auth0User.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Auth0User {\n const message = createBaseAuth0User();\n message.userId = object.userId ?? \"\";\n message.email = object.email ?? \"\";\n message.emailVerified = object.emailVerified ?? false;\n message.username = object.username ?? \"\";\n message.phoneNumber = object.phoneNumber ?? \"\";\n message.phoneVerified = object.phoneVerified ?? false;\n message.createdAt = object.createdAt ?? \"\";\n message.updatedAt = object.updatedAt ?? \"\";\n message.identities = object.identities?.map((e) => Auth0Identity.fromPartial(e)) || [];\n message.appMetadata = (object.appMetadata !== undefined && object.appMetadata !== null)\n ? AppMetadata.fromPartial(object.appMetadata)\n : undefined;\n message.userMetadata = (object.userMetadata !== undefined && object.userMetadata !== null)\n ? UserMetadata.fromPartial(object.userMetadata)\n : undefined;\n message.picture = object.picture ?? \"\";\n message.name = object.name ?? \"\";\n message.nickname = object.nickname ?? \"\";\n message.multifactor = object.multifactor?.map((e) => e) || [];\n message.lastIp = object.lastIp ?? \"\";\n message.lastLogin = object.lastLogin ?? \"\";\n message.loginsCount = object.loginsCount ?? 0;\n message.blocked = object.blocked ?? false;\n message.givenName = object.givenName ?? \"\";\n message.familyName = object.familyName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFleetView(): FleetView {\n return {\n db: undefined,\n userAuth0Id: \"\",\n name: \"\",\n columns: [],\n search: \"\",\n showInternal: false,\n showMap: false,\n showOffline: false,\n statuses: [],\n pinnedRobotIds: [],\n customerId: 0,\n viewMode: 0,\n customerIds: [],\n };\n}\n\nexport const FleetView: MessageFns = {\n encode(message: FleetView, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.userAuth0Id !== \"\") {\n writer.uint32(18).string(message.userAuth0Id);\n }\n if (message.name !== \"\") {\n writer.uint32(26).string(message.name);\n }\n for (const v of message.columns) {\n writer.uint32(34).string(v!);\n }\n if (message.search !== \"\") {\n writer.uint32(42).string(message.search);\n }\n if (message.showInternal !== false) {\n writer.uint32(48).bool(message.showInternal);\n }\n if (message.showMap !== false) {\n writer.uint32(56).bool(message.showMap);\n }\n if (message.showOffline !== false) {\n writer.uint32(64).bool(message.showOffline);\n }\n for (const v of message.statuses) {\n writer.uint32(74).string(v!);\n }\n writer.uint32(82).fork();\n for (const v of message.pinnedRobotIds) {\n writer.int64(v);\n }\n writer.join();\n if (message.customerId !== 0) {\n writer.uint32(88).int64(message.customerId);\n }\n if (message.viewMode !== 0) {\n writer.uint32(96).int32(message.viewMode);\n }\n writer.uint32(106).fork();\n for (const v of message.customerIds) {\n writer.int64(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FleetView {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFleetView();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.userAuth0Id = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.columns.push(reader.string());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.search = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.showInternal = reader.bool();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.showMap = reader.bool();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.showOffline = reader.bool();\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.statuses.push(reader.string());\n continue;\n case 10:\n if (tag === 80) {\n message.pinnedRobotIds.push(longToNumber(reader.int64()));\n\n continue;\n }\n\n if (tag === 82) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.pinnedRobotIds.push(longToNumber(reader.int64()));\n }\n\n continue;\n }\n\n break;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.customerId = longToNumber(reader.int64());\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n\n message.viewMode = reader.int32() as any;\n continue;\n case 13:\n if (tag === 104) {\n message.customerIds.push(longToNumber(reader.int64()));\n\n continue;\n }\n\n if (tag === 106) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.customerIds.push(longToNumber(reader.int64()));\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FleetView {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n userAuth0Id: isSet(object.userAuth0Id) ? globalThis.String(object.userAuth0Id) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n columns: globalThis.Array.isArray(object?.columns) ? object.columns.map((e: any) => globalThis.String(e)) : [],\n search: isSet(object.search) ? globalThis.String(object.search) : \"\",\n showInternal: isSet(object.showInternal) ? globalThis.Boolean(object.showInternal) : false,\n showMap: isSet(object.showMap) ? globalThis.Boolean(object.showMap) : false,\n showOffline: isSet(object.showOffline) ? globalThis.Boolean(object.showOffline) : false,\n statuses: globalThis.Array.isArray(object?.statuses) ? object.statuses.map((e: any) => globalThis.String(e)) : [],\n pinnedRobotIds: globalThis.Array.isArray(object?.pinnedRobotIds)\n ? object.pinnedRobotIds.map((e: any) => globalThis.Number(e))\n : [],\n customerId: isSet(object.customerId) ? globalThis.Number(object.customerId) : 0,\n viewMode: isSet(object.viewMode) ? viewModeFromJSON(object.viewMode) : 0,\n customerIds: globalThis.Array.isArray(object?.customerIds)\n ? object.customerIds.map((e: any) => globalThis.Number(e))\n : [],\n };\n },\n\n toJSON(message: FleetView): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.userAuth0Id !== \"\") {\n obj.userAuth0Id = message.userAuth0Id;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.columns?.length) {\n obj.columns = message.columns;\n }\n if (message.search !== \"\") {\n obj.search = message.search;\n }\n if (message.showInternal !== false) {\n obj.showInternal = message.showInternal;\n }\n if (message.showMap !== false) {\n obj.showMap = message.showMap;\n }\n if (message.showOffline !== false) {\n obj.showOffline = message.showOffline;\n }\n if (message.statuses?.length) {\n obj.statuses = message.statuses;\n }\n if (message.pinnedRobotIds?.length) {\n obj.pinnedRobotIds = message.pinnedRobotIds.map((e) => Math.round(e));\n }\n if (message.customerId !== 0) {\n obj.customerId = Math.round(message.customerId);\n }\n if (message.viewMode !== 0) {\n obj.viewMode = viewModeToJSON(message.viewMode);\n }\n if (message.customerIds?.length) {\n obj.customerIds = message.customerIds.map((e) => Math.round(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): FleetView {\n return FleetView.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FleetView {\n const message = createBaseFleetView();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.userAuth0Id = object.userAuth0Id ?? \"\";\n message.name = object.name ?? \"\";\n message.columns = object.columns?.map((e) => e) || [];\n message.search = object.search ?? \"\";\n message.showInternal = object.showInternal ?? false;\n message.showMap = object.showMap ?? false;\n message.showOffline = object.showOffline ?? false;\n message.statuses = object.statuses?.map((e) => e) || [];\n message.pinnedRobotIds = object.pinnedRobotIds?.map((e) => e) || [];\n message.customerId = object.customerId ?? 0;\n message.viewMode = object.viewMode ?? 0;\n message.customerIds = object.customerIds?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseUserResponse(): UserResponse {\n return { user: undefined, permissions: undefined, customer: undefined, fleetViews: [] };\n}\n\nexport const UserResponse: MessageFns = {\n encode(message: UserResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.user !== undefined) {\n Auth0User.encode(message.user, writer.uint32(10).fork()).join();\n }\n if (message.permissions !== undefined) {\n Permissions.encode(message.permissions, writer.uint32(34).fork()).join();\n }\n if (message.customer !== undefined) {\n CustomerResponse.encode(message.customer, writer.uint32(18).fork()).join();\n }\n for (const v of message.fleetViews) {\n FleetView.encode(v!, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UserResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUserResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.user = Auth0User.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.permissions = Permissions.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.customer = CustomerResponse.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.fleetViews.push(FleetView.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UserResponse {\n return {\n user: isSet(object.user) ? Auth0User.fromJSON(object.user) : undefined,\n permissions: isSet(object.permissions) ? Permissions.fromJSON(object.permissions) : undefined,\n customer: isSet(object.customer) ? CustomerResponse.fromJSON(object.customer) : undefined,\n fleetViews: globalThis.Array.isArray(object?.fleetViews)\n ? object.fleetViews.map((e: any) => FleetView.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: UserResponse): unknown {\n const obj: any = {};\n if (message.user !== undefined) {\n obj.user = Auth0User.toJSON(message.user);\n }\n if (message.permissions !== undefined) {\n obj.permissions = Permissions.toJSON(message.permissions);\n }\n if (message.customer !== undefined) {\n obj.customer = CustomerResponse.toJSON(message.customer);\n }\n if (message.fleetViews?.length) {\n obj.fleetViews = message.fleetViews.map((e) => FleetView.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): UserResponse {\n return UserResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UserResponse {\n const message = createBaseUserResponse();\n message.user = (object.user !== undefined && object.user !== null) ? Auth0User.fromPartial(object.user) : undefined;\n message.permissions = (object.permissions !== undefined && object.permissions !== null)\n ? Permissions.fromPartial(object.permissions)\n : undefined;\n message.customer = (object.customer !== undefined && object.customer !== null)\n ? CustomerResponse.fromPartial(object.customer)\n : undefined;\n message.fleetViews = object.fleetViews?.map((e) => FleetView.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBasePermissions(): Permissions {\n return { names: [] };\n}\n\nexport const Permissions: MessageFns = {\n encode(message: Permissions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.names) {\n writer.uint32(10).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Permissions {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePermissions();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.names.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Permissions {\n return { names: globalThis.Array.isArray(object?.names) ? object.names.map((e: any) => globalThis.String(e)) : [] };\n },\n\n toJSON(message: Permissions): unknown {\n const obj: any = {};\n if (message.names?.length) {\n obj.names = message.names;\n }\n return obj;\n },\n\n create, I>>(base?: I): Permissions {\n return Permissions.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Permissions {\n const message = createBasePermissions();\n message.names = object.names?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseIsCarbonRequest(): IsCarbonRequest {\n return { userIds: [] };\n}\n\nexport const IsCarbonRequest: MessageFns = {\n encode(message: IsCarbonRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.userIds) {\n writer.uint32(10).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): IsCarbonRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseIsCarbonRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.userIds.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): IsCarbonRequest {\n return {\n userIds: globalThis.Array.isArray(object?.userIds) ? object.userIds.map((e: any) => globalThis.String(e)) : [],\n };\n },\n\n toJSON(message: IsCarbonRequest): unknown {\n const obj: any = {};\n if (message.userIds?.length) {\n obj.userIds = message.userIds;\n }\n return obj;\n },\n\n create, I>>(base?: I): IsCarbonRequest {\n return IsCarbonRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): IsCarbonRequest {\n const message = createBaseIsCarbonRequest();\n message.userIds = object.userIds?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseIsCarbonResponse(): IsCarbonResponse {\n return { users: [] };\n}\n\nexport const IsCarbonResponse: MessageFns = {\n encode(message: IsCarbonResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.users) {\n IsCarbonUser.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): IsCarbonResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseIsCarbonResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.users.push(IsCarbonUser.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): IsCarbonResponse {\n return {\n users: globalThis.Array.isArray(object?.users) ? object.users.map((e: any) => IsCarbonUser.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: IsCarbonResponse): unknown {\n const obj: any = {};\n if (message.users?.length) {\n obj.users = message.users.map((e) => IsCarbonUser.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): IsCarbonResponse {\n return IsCarbonResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): IsCarbonResponse {\n const message = createBaseIsCarbonResponse();\n message.users = object.users?.map((e) => IsCarbonUser.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseIsCarbonUser(): IsCarbonUser {\n return { userId: \"\", isCarbon: false };\n}\n\nexport const IsCarbonUser: MessageFns = {\n encode(message: IsCarbonUser, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.userId !== \"\") {\n writer.uint32(10).string(message.userId);\n }\n if (message.isCarbon !== false) {\n writer.uint32(16).bool(message.isCarbon);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): IsCarbonUser {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseIsCarbonUser();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.userId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.isCarbon = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): IsCarbonUser {\n return {\n userId: isSet(object.userId) ? globalThis.String(object.userId) : \"\",\n isCarbon: isSet(object.isCarbon) ? globalThis.Boolean(object.isCarbon) : false,\n };\n },\n\n toJSON(message: IsCarbonUser): unknown {\n const obj: any = {};\n if (message.userId !== \"\") {\n obj.userId = message.userId;\n }\n if (message.isCarbon !== false) {\n obj.isCarbon = message.isCarbon;\n }\n return obj;\n },\n\n create, I>>(base?: I): IsCarbonUser {\n return IsCarbonUser.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): IsCarbonUser {\n const message = createBaseIsCarbonUser();\n message.userId = object.userId ?? \"\";\n message.isCarbon = object.isCarbon ?? false;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","import {\n AlmanacConfig,\n AlmanacTypeCategory,\n CategoryClassification,\n categoryClassificationFromJSON,\n DiscriminatorTypeCategory,\n Formula,\n ModelinatorConfig,\n ModelinatorTypeCategory,\n TypeCategory,\n} from \"protos/almanac/almanac\";\nimport { ConfigCrop } from \"protos/portal/configs\";\nimport { Crop } from \"protos/portal/veselka\";\nimport { findWhere } from \"./arrays\";\nimport { keys } from \"./objects\";\nimport { TFunction } from \"i18next\";\n\nexport enum SIZE_INDEX {\n SMALL = 0,\n MEDIUM = 1,\n LARGE = 2,\n}\nexport const ALL_SIZES = Object.freeze([\n SIZE_INDEX.SMALL,\n SIZE_INDEX.MEDIUM,\n SIZE_INDEX.LARGE,\n] as const);\n\nexport const WEED_CATEGORY_BROADLEAF = \"9fd4e9d0-2d01-4ae1-89c5-f4b4f6de9a3c\";\nexport const WEED_CATEGORY_GRASS = \"f032b206-92cf-400a-b79e-e22bdb7930e3\";\nexport const WEED_CATEGORY_OFFSHOOT = \"2e678c61-f476-4485-aa9c-6a0e4bc7c626\";\nexport const WEED_CATEGORY_PURSLANE = \"1659226a-fe1c-450c-828f-88dc8819c25d\";\nexport const WEED_CATEGORY_BLOSSOM = \"bb55614f-44df-4ee0-a754-b891a70961d2\";\nexport const WEED_CATEGORY_PREBLOSSOM = \"a0e9ec55-4414-4dd1-bf71-c19a138fedd6\";\nexport const WEED_CATEGORY_FRUIT = \"12051fbb-ed5e-4a56-b7a4-a17c7a976550\";\nexport const WEED_CATEGORY_RUNNER = \"8fcb6d5a-6c28-4b38-b48b-485178979086\";\n\nexport const WEED_CATEGORIES = new Set([\n WEED_CATEGORY_BROADLEAF,\n WEED_CATEGORY_GRASS,\n WEED_CATEGORY_OFFSHOOT,\n WEED_CATEGORY_PURSLANE,\n WEED_CATEGORY_BLOSSOM,\n WEED_CATEGORY_PREBLOSSOM,\n WEED_CATEGORY_FRUIT,\n WEED_CATEGORY_RUNNER,\n]);\n\nexport const SIZE_SMALL_TO_MEDIUM = 8;\nexport const SIZE_MEDIUM_TO_LARGE = 20;\nexport const DEFAULT_SIZES = [SIZE_SMALL_TO_MEDIUM, SIZE_MEDIUM_TO_LARGE];\nexport const DEFAULT_FORMULA = Formula.fromPartial({\n multiplier: 40.63,\n offset: 15,\n exponent: 1,\n fineTuneMultiplier: 5,\n maxTime: 3000,\n fineTuneMultiplierVal: 0.2,\n});\n\nexport const DEFAULT_CATEGORY = AlmanacTypeCategory.fromPartial({\n type: {\n category: \"\",\n classification: categoryClassificationFromJSON(\n categoryClassificationFromJSON(CategoryClassification.CATEGORY_WEED)\n ),\n },\n sizes: DEFAULT_SIZES,\n formulas: [\n {\n ...DEFAULT_FORMULA,\n multiplier: 40.63,\n },\n {\n ...DEFAULT_FORMULA,\n multiplier: 56.875,\n },\n {\n ...DEFAULT_FORMULA,\n multiplier: 65,\n },\n ],\n});\n\nexport const isCategorySynced = (category: AlmanacTypeCategory): boolean => {\n for (const key of keys(DEFAULT_FORMULA)) {\n const values = new Set();\n for (const formula of category.formulas) {\n values.add(formula[key]);\n }\n if (values.size > 1) {\n return false;\n }\n }\n return true;\n};\n\nexport const getFormulaBySize = (\n category: AlmanacTypeCategory,\n size: SIZE_INDEX\n): Formula => {\n const formula = category.formulas[size];\n if (!formula) {\n console.error(`Formula for size ${size} not found`);\n return Formula.fromPartial({});\n }\n return formula;\n};\n\nconst mergeFormulas = (\n small: Partial,\n medium: Partial,\n large: Partial\n): Omit => ({\n ...DEFAULT_CATEGORY,\n formulas: [\n { ...getFormulaBySize(DEFAULT_CATEGORY, SIZE_INDEX.SMALL), ...small },\n { ...getFormulaBySize(DEFAULT_CATEGORY, SIZE_INDEX.MEDIUM), ...medium },\n { ...getFormulaBySize(DEFAULT_CATEGORY, SIZE_INDEX.LARGE), ...large },\n ],\n});\n\nexport const DEFAULT_WEED_BROADLEAF = AlmanacTypeCategory.fromPartial({\n ...DEFAULT_CATEGORY,\n ...mergeFormulas(\n { multiplier: 40.63 },\n { multiplier: 56.875 },\n { multiplier: 65 }\n ),\n type: {\n category: WEED_CATEGORY_BROADLEAF,\n classification: categoryClassificationFromJSON(\n CategoryClassification.CATEGORY_WEED\n ),\n },\n});\n\nexport const DEFAULT_WEED_GRASS = AlmanacTypeCategory.fromPartial({\n ...DEFAULT_CATEGORY,\n ...mergeFormulas(\n { multiplier: 21.875 },\n { multiplier: 30.625 },\n { multiplier: 35 }\n ),\n type: {\n category: WEED_CATEGORY_GRASS,\n classification: categoryClassificationFromJSON(\n CategoryClassification.CATEGORY_WEED\n ),\n },\n});\n\nexport const DEFAULT_WEED_OFFSHOOT = AlmanacTypeCategory.fromPartial({\n ...DEFAULT_CATEGORY,\n ...mergeFormulas(\n { multiplier: 37 },\n { multiplier: 42.5 },\n { multiplier: 42 }\n ),\n type: {\n category: WEED_CATEGORY_OFFSHOOT,\n classification: categoryClassificationFromJSON(\n CategoryClassification.CATEGORY_WEED\n ),\n },\n});\n\nexport const DEFAULT_WEED_PURSLANE = AlmanacTypeCategory.fromPartial({\n ...DEFAULT_CATEGORY,\n ...mergeFormulas(\n { multiplier: 37 },\n { multiplier: 42.5 },\n { multiplier: 42 }\n ),\n type: {\n category: WEED_CATEGORY_PURSLANE,\n classification: categoryClassificationFromJSON(\n CategoryClassification.CATEGORY_WEED\n ),\n },\n});\n\nexport const getDefaultAlmanac = (t: TFunction): AlmanacConfig =>\n AlmanacConfig.fromPartial({\n name: t(\"utils.descriptors.default\"),\n categories: [\n DEFAULT_WEED_BROADLEAF,\n DEFAULT_WEED_GRASS,\n DEFAULT_WEED_OFFSHOOT,\n DEFAULT_WEED_PURSLANE,\n {\n type: {\n category: \"DEFAULT\",\n classification: categoryClassificationFromJSON(\n CategoryClassification.CATEGORY_WEED\n ),\n },\n sizes: [8, 20],\n formulas: [\n {\n multiplier: 43.75,\n offset: 15,\n exponent: 1,\n fineTuneMultiplier: 5,\n maxTime: 3000,\n fineTuneMultiplierVal: 0.2,\n },\n {\n multiplier: 61.25,\n offset: 15,\n exponent: 1,\n fineTuneMultiplier: 5,\n maxTime: 3000,\n fineTuneMultiplierVal: 0.2,\n },\n {\n multiplier: 70,\n offset: 15,\n exponent: 1,\n fineTuneMultiplier: 5,\n maxTime: 3000,\n fineTuneMultiplierVal: 0.2,\n },\n ],\n },\n ],\n protected: false,\n });\n\nexport const getWeedCategoryName = (t: TFunction, uuid: string): string => {\n switch (uuid) {\n case WEED_CATEGORY_BROADLEAF: {\n return t(\"models.weeds.categories.broadleaf\");\n }\n case WEED_CATEGORY_GRASS: {\n return t(\"models.weeds.categories.grass\");\n }\n case WEED_CATEGORY_OFFSHOOT: {\n return t(\"models.weeds.categories.offshoot\");\n }\n case WEED_CATEGORY_PURSLANE: {\n return t(\"models.weeds.categories.purslane\");\n }\n case WEED_CATEGORY_BLOSSOM: {\n return t(\"models.weeds.categories.blossom\");\n }\n case WEED_CATEGORY_PREBLOSSOM: {\n return t(\"models.weeds.categories.preblossom\");\n }\n case WEED_CATEGORY_FRUIT: {\n return t(\"models.weeds.categories.fruit\");\n }\n case WEED_CATEGORY_RUNNER: {\n return t(\"models.weeds.categories.runner\");\n }\n default: {\n return t(\"models.weeds.categories.unknown\");\n }\n }\n};\n\nexport const getDefaultWeedCategory = (uuid: string): AlmanacTypeCategory => {\n let newCategory = DEFAULT_CATEGORY;\n switch (uuid) {\n case WEED_CATEGORY_BROADLEAF: {\n newCategory = DEFAULT_WEED_BROADLEAF;\n break;\n }\n case WEED_CATEGORY_GRASS: {\n newCategory = DEFAULT_WEED_GRASS;\n break;\n }\n case WEED_CATEGORY_OFFSHOOT: {\n newCategory = DEFAULT_WEED_OFFSHOOT;\n break;\n }\n case WEED_CATEGORY_PURSLANE: {\n newCategory = DEFAULT_WEED_PURSLANE;\n break;\n }\n }\n return structuredClone(newCategory);\n};\n\nexport const filterCategories = <\n T extends\n | DiscriminatorTypeCategory\n | AlmanacTypeCategory\n | ModelinatorTypeCategory\n>(\n categories?: T[]\n): {\n weedCategories: T[];\n cropCategories: T[];\n defaultCategory: T | undefined;\n} => {\n const defaultCategory = categories?.find(\n (category) => category.type?.category === \"DEFAULT\"\n );\n const weedCategories: T[] =\n categories?.filter((category) =>\n WEED_CATEGORIES.has(category.type?.category ?? \"\")\n ) ?? [];\n const cropCategories: T[] =\n categories?.filter(\n (category) =>\n !WEED_CATEGORIES.has(category.type?.category ?? \"\") &&\n category !== defaultCategory\n ) ?? [];\n\n return { weedCategories, cropCategories, defaultCategory };\n};\n\nexport interface FineTuneMultipliers {\n small: number;\n medium: number;\n large: number;\n}\n\nexport const getFineTuneMultipliers = (\n category: AlmanacTypeCategory\n): FineTuneMultipliers => ({\n small: getFormulaBySize(category, 0).fineTuneMultiplier,\n medium: getFormulaBySize(category, 1).fineTuneMultiplier,\n large: getFormulaBySize(category, 2).fineTuneMultiplier,\n});\n\nexport const withFineTuneMulipliers = (\n category: AlmanacTypeCategory,\n fineTuneMultipliers: FineTuneMultipliers\n): AlmanacTypeCategory => {\n const updated = structuredClone(category);\n getFormulaBySize(updated, 0).fineTuneMultiplier = fineTuneMultipliers.small;\n getFormulaBySize(updated, 1).fineTuneMultiplier = fineTuneMultipliers.medium;\n getFormulaBySize(updated, 2).fineTuneMultiplier = fineTuneMultipliers.large;\n return updated;\n};\n\nexport const getTypeCategoryTitle = (\n t: TFunction,\n type: TypeCategory | undefined,\n crops: Array = []\n): string => {\n if (!type?.category) {\n return t(\"models.weeds.categories.unknown\");\n }\n if (type.category === \"DEFAULT\") {\n return t(\"utils.descriptors.default\");\n }\n\n if (WEED_CATEGORIES.has(type.category)) {\n return getWeedCategoryName(t, type.category);\n }\n\n const crop = findWhere(crops, { id: type.category });\n return crop?.commonName ?? t(\"models.crops.categories.unknown\");\n};\n\nexport const getCategoryTitle = (\n t: TFunction,\n category: AlmanacTypeCategory | ModelinatorTypeCategory,\n crops: ConfigCrop[] = []\n): string => {\n return getTypeCategoryTitle(t, category.type, crops);\n};\n\nexport const getModelinatorId = (\n serial: string,\n modelinator: ModelinatorConfig\n): string => `${serial}/${modelinator.cropId}-${modelinator.modelId}`;\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/admin.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.admin\";\n\nexport interface GlobalAllowedAlarm {\n db: DB | undefined;\n code: string;\n}\n\nexport interface RobotAllowedAlarm {\n db: DB | undefined;\n code: string;\n robotId: number;\n}\n\nexport interface RobotBlockedAlarm {\n db: DB | undefined;\n code: string;\n robotId: number;\n}\n\nexport interface GlobalAlarmAllowlist {\n alarms: GlobalAllowedAlarm[];\n}\n\nexport interface RobotAlarmAllowlist {\n alarms: RobotAllowedAlarm[];\n}\n\nexport interface RobotAlarmBlocklist {\n alarms: RobotBlockedAlarm[];\n}\n\nexport interface GlobalAlarmlists {\n allowed: GlobalAlarmAllowlist | undefined;\n}\n\nexport interface RobotAlarmlists {\n allowed: RobotAlarmAllowlist | undefined;\n blocked: RobotAlarmBlocklist | undefined;\n}\n\nexport interface Maintenance {\n db: DB | undefined;\n message: string;\n restrictAccess: boolean;\n}\n\nfunction createBaseGlobalAllowedAlarm(): GlobalAllowedAlarm {\n return { db: undefined, code: \"\" };\n}\n\nexport const GlobalAllowedAlarm: MessageFns = {\n encode(message: GlobalAllowedAlarm, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.code !== \"\") {\n writer.uint32(18).string(message.code);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GlobalAllowedAlarm {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGlobalAllowedAlarm();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.code = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GlobalAllowedAlarm {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n code: isSet(object.code) ? globalThis.String(object.code) : \"\",\n };\n },\n\n toJSON(message: GlobalAllowedAlarm): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.code !== \"\") {\n obj.code = message.code;\n }\n return obj;\n },\n\n create, I>>(base?: I): GlobalAllowedAlarm {\n return GlobalAllowedAlarm.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GlobalAllowedAlarm {\n const message = createBaseGlobalAllowedAlarm();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.code = object.code ?? \"\";\n return message;\n },\n};\n\nfunction createBaseRobotAllowedAlarm(): RobotAllowedAlarm {\n return { db: undefined, code: \"\", robotId: 0 };\n}\n\nexport const RobotAllowedAlarm: MessageFns = {\n encode(message: RobotAllowedAlarm, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.code !== \"\") {\n writer.uint32(18).string(message.code);\n }\n if (message.robotId !== 0) {\n writer.uint32(24).int64(message.robotId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotAllowedAlarm {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotAllowedAlarm();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.code = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.robotId = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotAllowedAlarm {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n code: isSet(object.code) ? globalThis.String(object.code) : \"\",\n robotId: isSet(object.robotId) ? globalThis.Number(object.robotId) : 0,\n };\n },\n\n toJSON(message: RobotAllowedAlarm): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.code !== \"\") {\n obj.code = message.code;\n }\n if (message.robotId !== 0) {\n obj.robotId = Math.round(message.robotId);\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotAllowedAlarm {\n return RobotAllowedAlarm.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotAllowedAlarm {\n const message = createBaseRobotAllowedAlarm();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.code = object.code ?? \"\";\n message.robotId = object.robotId ?? 0;\n return message;\n },\n};\n\nfunction createBaseRobotBlockedAlarm(): RobotBlockedAlarm {\n return { db: undefined, code: \"\", robotId: 0 };\n}\n\nexport const RobotBlockedAlarm: MessageFns = {\n encode(message: RobotBlockedAlarm, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.code !== \"\") {\n writer.uint32(18).string(message.code);\n }\n if (message.robotId !== 0) {\n writer.uint32(24).int64(message.robotId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotBlockedAlarm {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotBlockedAlarm();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.code = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.robotId = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotBlockedAlarm {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n code: isSet(object.code) ? globalThis.String(object.code) : \"\",\n robotId: isSet(object.robotId) ? globalThis.Number(object.robotId) : 0,\n };\n },\n\n toJSON(message: RobotBlockedAlarm): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.code !== \"\") {\n obj.code = message.code;\n }\n if (message.robotId !== 0) {\n obj.robotId = Math.round(message.robotId);\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotBlockedAlarm {\n return RobotBlockedAlarm.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotBlockedAlarm {\n const message = createBaseRobotBlockedAlarm();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.code = object.code ?? \"\";\n message.robotId = object.robotId ?? 0;\n return message;\n },\n};\n\nfunction createBaseGlobalAlarmAllowlist(): GlobalAlarmAllowlist {\n return { alarms: [] };\n}\n\nexport const GlobalAlarmAllowlist: MessageFns = {\n encode(message: GlobalAlarmAllowlist, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.alarms) {\n GlobalAllowedAlarm.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GlobalAlarmAllowlist {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGlobalAlarmAllowlist();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.alarms.push(GlobalAllowedAlarm.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GlobalAlarmAllowlist {\n return {\n alarms: globalThis.Array.isArray(object?.alarms)\n ? object.alarms.map((e: any) => GlobalAllowedAlarm.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: GlobalAlarmAllowlist): unknown {\n const obj: any = {};\n if (message.alarms?.length) {\n obj.alarms = message.alarms.map((e) => GlobalAllowedAlarm.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): GlobalAlarmAllowlist {\n return GlobalAlarmAllowlist.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GlobalAlarmAllowlist {\n const message = createBaseGlobalAlarmAllowlist();\n message.alarms = object.alarms?.map((e) => GlobalAllowedAlarm.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseRobotAlarmAllowlist(): RobotAlarmAllowlist {\n return { alarms: [] };\n}\n\nexport const RobotAlarmAllowlist: MessageFns = {\n encode(message: RobotAlarmAllowlist, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.alarms) {\n RobotAllowedAlarm.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotAlarmAllowlist {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotAlarmAllowlist();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.alarms.push(RobotAllowedAlarm.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotAlarmAllowlist {\n return {\n alarms: globalThis.Array.isArray(object?.alarms)\n ? object.alarms.map((e: any) => RobotAllowedAlarm.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: RobotAlarmAllowlist): unknown {\n const obj: any = {};\n if (message.alarms?.length) {\n obj.alarms = message.alarms.map((e) => RobotAllowedAlarm.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotAlarmAllowlist {\n return RobotAlarmAllowlist.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotAlarmAllowlist {\n const message = createBaseRobotAlarmAllowlist();\n message.alarms = object.alarms?.map((e) => RobotAllowedAlarm.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseRobotAlarmBlocklist(): RobotAlarmBlocklist {\n return { alarms: [] };\n}\n\nexport const RobotAlarmBlocklist: MessageFns = {\n encode(message: RobotAlarmBlocklist, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.alarms) {\n RobotBlockedAlarm.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotAlarmBlocklist {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotAlarmBlocklist();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.alarms.push(RobotBlockedAlarm.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotAlarmBlocklist {\n return {\n alarms: globalThis.Array.isArray(object?.alarms)\n ? object.alarms.map((e: any) => RobotBlockedAlarm.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: RobotAlarmBlocklist): unknown {\n const obj: any = {};\n if (message.alarms?.length) {\n obj.alarms = message.alarms.map((e) => RobotBlockedAlarm.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotAlarmBlocklist {\n return RobotAlarmBlocklist.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotAlarmBlocklist {\n const message = createBaseRobotAlarmBlocklist();\n message.alarms = object.alarms?.map((e) => RobotBlockedAlarm.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseGlobalAlarmlists(): GlobalAlarmlists {\n return { allowed: undefined };\n}\n\nexport const GlobalAlarmlists: MessageFns = {\n encode(message: GlobalAlarmlists, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.allowed !== undefined) {\n GlobalAlarmAllowlist.encode(message.allowed, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GlobalAlarmlists {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGlobalAlarmlists();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.allowed = GlobalAlarmAllowlist.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GlobalAlarmlists {\n return { allowed: isSet(object.allowed) ? GlobalAlarmAllowlist.fromJSON(object.allowed) : undefined };\n },\n\n toJSON(message: GlobalAlarmlists): unknown {\n const obj: any = {};\n if (message.allowed !== undefined) {\n obj.allowed = GlobalAlarmAllowlist.toJSON(message.allowed);\n }\n return obj;\n },\n\n create, I>>(base?: I): GlobalAlarmlists {\n return GlobalAlarmlists.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GlobalAlarmlists {\n const message = createBaseGlobalAlarmlists();\n message.allowed = (object.allowed !== undefined && object.allowed !== null)\n ? GlobalAlarmAllowlist.fromPartial(object.allowed)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseRobotAlarmlists(): RobotAlarmlists {\n return { allowed: undefined, blocked: undefined };\n}\n\nexport const RobotAlarmlists: MessageFns = {\n encode(message: RobotAlarmlists, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.allowed !== undefined) {\n RobotAlarmAllowlist.encode(message.allowed, writer.uint32(10).fork()).join();\n }\n if (message.blocked !== undefined) {\n RobotAlarmBlocklist.encode(message.blocked, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotAlarmlists {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotAlarmlists();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.allowed = RobotAlarmAllowlist.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.blocked = RobotAlarmBlocklist.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotAlarmlists {\n return {\n allowed: isSet(object.allowed) ? RobotAlarmAllowlist.fromJSON(object.allowed) : undefined,\n blocked: isSet(object.blocked) ? RobotAlarmBlocklist.fromJSON(object.blocked) : undefined,\n };\n },\n\n toJSON(message: RobotAlarmlists): unknown {\n const obj: any = {};\n if (message.allowed !== undefined) {\n obj.allowed = RobotAlarmAllowlist.toJSON(message.allowed);\n }\n if (message.blocked !== undefined) {\n obj.blocked = RobotAlarmBlocklist.toJSON(message.blocked);\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotAlarmlists {\n return RobotAlarmlists.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotAlarmlists {\n const message = createBaseRobotAlarmlists();\n message.allowed = (object.allowed !== undefined && object.allowed !== null)\n ? RobotAlarmAllowlist.fromPartial(object.allowed)\n : undefined;\n message.blocked = (object.blocked !== undefined && object.blocked !== null)\n ? RobotAlarmBlocklist.fromPartial(object.blocked)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseMaintenance(): Maintenance {\n return { db: undefined, message: \"\", restrictAccess: false };\n}\n\nexport const Maintenance: MessageFns = {\n encode(message: Maintenance, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.message !== \"\") {\n writer.uint32(18).string(message.message);\n }\n if (message.restrictAccess !== false) {\n writer.uint32(24).bool(message.restrictAccess);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Maintenance {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMaintenance();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.message = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.restrictAccess = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Maintenance {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n message: isSet(object.message) ? globalThis.String(object.message) : \"\",\n restrictAccess: isSet(object.restrictAccess) ? globalThis.Boolean(object.restrictAccess) : false,\n };\n },\n\n toJSON(message: Maintenance): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.message !== \"\") {\n obj.message = message.message;\n }\n if (message.restrictAccess !== false) {\n obj.restrictAccess = message.restrictAccess;\n }\n return obj;\n },\n\n create, I>>(base?: I): Maintenance {\n return Maintenance.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Maintenance {\n const message = createBaseMaintenance();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.message = object.message ?? \"\";\n message.restrictAccess = object.restrictAccess ?? false;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/hardware.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.hardware\";\n\nexport interface LaserStats {\n db: DB | undefined;\n robotId: number;\n rowNumber: number;\n laserId: number;\n cameraId: string;\n laserSerial: string;\n firing: boolean;\n enabled: boolean;\n error: boolean;\n totalFireCount: number;\n totalFireTimeMs: number;\n deltaTemp: number;\n current: number;\n targetTrajectoryId: number;\n lifetimeSec: number;\n powerLevel: number;\n installedAt: number;\n removedAt: number;\n}\n\nexport interface HardwareResponse {\n lasers: LaserStats[];\n hostSerials: { [key: string]: string };\n}\n\nexport interface HardwareResponse_HostSerialsEntry {\n key: string;\n value: string;\n}\n\nfunction createBaseLaserStats(): LaserStats {\n return {\n db: undefined,\n robotId: 0,\n rowNumber: 0,\n laserId: 0,\n cameraId: \"\",\n laserSerial: \"\",\n firing: false,\n enabled: false,\n error: false,\n totalFireCount: 0,\n totalFireTimeMs: 0,\n deltaTemp: 0,\n current: 0,\n targetTrajectoryId: 0,\n lifetimeSec: 0,\n powerLevel: 0,\n installedAt: 0,\n removedAt: 0,\n };\n}\n\nexport const LaserStats: MessageFns = {\n encode(message: LaserStats, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.robotId !== 0) {\n writer.uint32(16).uint64(message.robotId);\n }\n if (message.rowNumber !== 0) {\n writer.uint32(24).uint64(message.rowNumber);\n }\n if (message.laserId !== 0) {\n writer.uint32(32).uint64(message.laserId);\n }\n if (message.cameraId !== \"\") {\n writer.uint32(42).string(message.cameraId);\n }\n if (message.laserSerial !== \"\") {\n writer.uint32(50).string(message.laserSerial);\n }\n if (message.firing !== false) {\n writer.uint32(56).bool(message.firing);\n }\n if (message.enabled !== false) {\n writer.uint32(64).bool(message.enabled);\n }\n if (message.error !== false) {\n writer.uint32(72).bool(message.error);\n }\n if (message.totalFireCount !== 0) {\n writer.uint32(80).uint64(message.totalFireCount);\n }\n if (message.totalFireTimeMs !== 0) {\n writer.uint32(88).uint64(message.totalFireTimeMs);\n }\n if (message.deltaTemp !== 0) {\n writer.uint32(101).float(message.deltaTemp);\n }\n if (message.current !== 0) {\n writer.uint32(109).float(message.current);\n }\n if (message.targetTrajectoryId !== 0) {\n writer.uint32(112).uint32(message.targetTrajectoryId);\n }\n if (message.lifetimeSec !== 0) {\n writer.uint32(120).uint64(message.lifetimeSec);\n }\n if (message.powerLevel !== 0) {\n writer.uint32(133).float(message.powerLevel);\n }\n if (message.installedAt !== 0) {\n writer.uint32(136).uint64(message.installedAt);\n }\n if (message.removedAt !== 0) {\n writer.uint32(144).uint64(message.removedAt);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserStats {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserStats();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.robotId = longToNumber(reader.uint64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.rowNumber = longToNumber(reader.uint64());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.laserId = longToNumber(reader.uint64());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.cameraId = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.laserSerial = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.firing = reader.bool();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.enabled = reader.bool();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.error = reader.bool();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.totalFireCount = longToNumber(reader.uint64());\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.totalFireTimeMs = longToNumber(reader.uint64());\n continue;\n case 12:\n if (tag !== 101) {\n break;\n }\n\n message.deltaTemp = reader.float();\n continue;\n case 13:\n if (tag !== 109) {\n break;\n }\n\n message.current = reader.float();\n continue;\n case 14:\n if (tag !== 112) {\n break;\n }\n\n message.targetTrajectoryId = reader.uint32();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.lifetimeSec = longToNumber(reader.uint64());\n continue;\n case 16:\n if (tag !== 133) {\n break;\n }\n\n message.powerLevel = reader.float();\n continue;\n case 17:\n if (tag !== 136) {\n break;\n }\n\n message.installedAt = longToNumber(reader.uint64());\n continue;\n case 18:\n if (tag !== 144) {\n break;\n }\n\n message.removedAt = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserStats {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n robotId: isSet(object.robotId) ? globalThis.Number(object.robotId) : 0,\n rowNumber: isSet(object.rowNumber) ? globalThis.Number(object.rowNumber) : 0,\n laserId: isSet(object.laserId) ? globalThis.Number(object.laserId) : 0,\n cameraId: isSet(object.cameraId) ? globalThis.String(object.cameraId) : \"\",\n laserSerial: isSet(object.laserSerial) ? globalThis.String(object.laserSerial) : \"\",\n firing: isSet(object.firing) ? globalThis.Boolean(object.firing) : false,\n enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false,\n error: isSet(object.error) ? globalThis.Boolean(object.error) : false,\n totalFireCount: isSet(object.totalFireCount) ? globalThis.Number(object.totalFireCount) : 0,\n totalFireTimeMs: isSet(object.totalFireTimeMs) ? globalThis.Number(object.totalFireTimeMs) : 0,\n deltaTemp: isSet(object.deltaTemp) ? globalThis.Number(object.deltaTemp) : 0,\n current: isSet(object.current) ? globalThis.Number(object.current) : 0,\n targetTrajectoryId: isSet(object.targetTrajectoryId) ? globalThis.Number(object.targetTrajectoryId) : 0,\n lifetimeSec: isSet(object.lifetimeSec) ? globalThis.Number(object.lifetimeSec) : 0,\n powerLevel: isSet(object.powerLevel) ? globalThis.Number(object.powerLevel) : 0,\n installedAt: isSet(object.installedAt) ? globalThis.Number(object.installedAt) : 0,\n removedAt: isSet(object.removedAt) ? globalThis.Number(object.removedAt) : 0,\n };\n },\n\n toJSON(message: LaserStats): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.robotId !== 0) {\n obj.robotId = Math.round(message.robotId);\n }\n if (message.rowNumber !== 0) {\n obj.rowNumber = Math.round(message.rowNumber);\n }\n if (message.laserId !== 0) {\n obj.laserId = Math.round(message.laserId);\n }\n if (message.cameraId !== \"\") {\n obj.cameraId = message.cameraId;\n }\n if (message.laserSerial !== \"\") {\n obj.laserSerial = message.laserSerial;\n }\n if (message.firing !== false) {\n obj.firing = message.firing;\n }\n if (message.enabled !== false) {\n obj.enabled = message.enabled;\n }\n if (message.error !== false) {\n obj.error = message.error;\n }\n if (message.totalFireCount !== 0) {\n obj.totalFireCount = Math.round(message.totalFireCount);\n }\n if (message.totalFireTimeMs !== 0) {\n obj.totalFireTimeMs = Math.round(message.totalFireTimeMs);\n }\n if (message.deltaTemp !== 0) {\n obj.deltaTemp = message.deltaTemp;\n }\n if (message.current !== 0) {\n obj.current = message.current;\n }\n if (message.targetTrajectoryId !== 0) {\n obj.targetTrajectoryId = Math.round(message.targetTrajectoryId);\n }\n if (message.lifetimeSec !== 0) {\n obj.lifetimeSec = Math.round(message.lifetimeSec);\n }\n if (message.powerLevel !== 0) {\n obj.powerLevel = message.powerLevel;\n }\n if (message.installedAt !== 0) {\n obj.installedAt = Math.round(message.installedAt);\n }\n if (message.removedAt !== 0) {\n obj.removedAt = Math.round(message.removedAt);\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserStats {\n return LaserStats.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserStats {\n const message = createBaseLaserStats();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.robotId = object.robotId ?? 0;\n message.rowNumber = object.rowNumber ?? 0;\n message.laserId = object.laserId ?? 0;\n message.cameraId = object.cameraId ?? \"\";\n message.laserSerial = object.laserSerial ?? \"\";\n message.firing = object.firing ?? false;\n message.enabled = object.enabled ?? false;\n message.error = object.error ?? false;\n message.totalFireCount = object.totalFireCount ?? 0;\n message.totalFireTimeMs = object.totalFireTimeMs ?? 0;\n message.deltaTemp = object.deltaTemp ?? 0;\n message.current = object.current ?? 0;\n message.targetTrajectoryId = object.targetTrajectoryId ?? 0;\n message.lifetimeSec = object.lifetimeSec ?? 0;\n message.powerLevel = object.powerLevel ?? 0;\n message.installedAt = object.installedAt ?? 0;\n message.removedAt = object.removedAt ?? 0;\n return message;\n },\n};\n\nfunction createBaseHardwareResponse(): HardwareResponse {\n return { lasers: [], hostSerials: {} };\n}\n\nexport const HardwareResponse: MessageFns = {\n encode(message: HardwareResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.lasers) {\n LaserStats.encode(v!, writer.uint32(10).fork()).join();\n }\n Object.entries(message.hostSerials).forEach(([key, value]) => {\n HardwareResponse_HostSerialsEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HardwareResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHardwareResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.lasers.push(LaserStats.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n const entry2 = HardwareResponse_HostSerialsEntry.decode(reader, reader.uint32());\n if (entry2.value !== undefined) {\n message.hostSerials[entry2.key] = entry2.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HardwareResponse {\n return {\n lasers: globalThis.Array.isArray(object?.lasers) ? object.lasers.map((e: any) => LaserStats.fromJSON(e)) : [],\n hostSerials: isObject(object.hostSerials)\n ? Object.entries(object.hostSerials).reduce<{ [key: string]: string }>((acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: HardwareResponse): unknown {\n const obj: any = {};\n if (message.lasers?.length) {\n obj.lasers = message.lasers.map((e) => LaserStats.toJSON(e));\n }\n if (message.hostSerials) {\n const entries = Object.entries(message.hostSerials);\n if (entries.length > 0) {\n obj.hostSerials = {};\n entries.forEach(([k, v]) => {\n obj.hostSerials[k] = v;\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): HardwareResponse {\n return HardwareResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): HardwareResponse {\n const message = createBaseHardwareResponse();\n message.lasers = object.lasers?.map((e) => LaserStats.fromPartial(e)) || [];\n message.hostSerials = Object.entries(object.hostSerials ?? {}).reduce<{ [key: string]: string }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.String(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseHardwareResponse_HostSerialsEntry(): HardwareResponse_HostSerialsEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const HardwareResponse_HostSerialsEntry: MessageFns = {\n encode(message: HardwareResponse_HostSerialsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HardwareResponse_HostSerialsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHardwareResponse_HostSerialsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HardwareResponse_HostSerialsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n };\n },\n\n toJSON(message: HardwareResponse_HostSerialsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): HardwareResponse_HostSerialsEntry {\n return HardwareResponse_HostSerialsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): HardwareResponse_HostSerialsEntry {\n const message = createBaseHardwareResponse_HostSerialsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: frontend/laser.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Timestamp } from \"../util/util\";\n\nexport const protobufPackage = \"carbon.frontend.laser\";\n\nexport interface LaserDescriptor {\n rowNumber: number;\n laserId: number;\n cameraId: string;\n serial: string;\n}\n\nexport interface LaserState {\n laserDescriptor: LaserDescriptor | undefined;\n firing: boolean;\n enabled: boolean;\n error: boolean;\n totalFireCount: number;\n totalFireTimeMs: number;\n deltaTemp: number;\n current: number;\n targetTrajectoryId: number;\n lifetimeSec: number;\n powerLevel: number;\n}\n\nexport interface LaserStateList {\n ts: Timestamp | undefined;\n lasers: LaserState[];\n}\n\nexport interface RowRequest {\n rowNumber: number;\n}\n\nexport interface SetLaserPowerRequest {\n laserDescriptor: LaserDescriptor | undefined;\n powerLevel: number;\n}\n\nexport interface FixLaserMetricsRequest {\n laserDescriptor: LaserDescriptor | undefined;\n totalFireCount: number;\n totalFireTimeMs: number;\n lifetimeSec: number;\n}\n\nfunction createBaseLaserDescriptor(): LaserDescriptor {\n return { rowNumber: 0, laserId: 0, cameraId: \"\", serial: \"\" };\n}\n\nexport const LaserDescriptor: MessageFns = {\n encode(message: LaserDescriptor, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.rowNumber !== 0) {\n writer.uint32(8).uint32(message.rowNumber);\n }\n if (message.laserId !== 0) {\n writer.uint32(16).uint32(message.laserId);\n }\n if (message.cameraId !== \"\") {\n writer.uint32(26).string(message.cameraId);\n }\n if (message.serial !== \"\") {\n writer.uint32(34).string(message.serial);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserDescriptor {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserDescriptor();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.rowNumber = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.laserId = reader.uint32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.cameraId = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.serial = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserDescriptor {\n return {\n rowNumber: isSet(object.rowNumber) ? globalThis.Number(object.rowNumber) : 0,\n laserId: isSet(object.laserId) ? globalThis.Number(object.laserId) : 0,\n cameraId: isSet(object.cameraId) ? globalThis.String(object.cameraId) : \"\",\n serial: isSet(object.serial) ? globalThis.String(object.serial) : \"\",\n };\n },\n\n toJSON(message: LaserDescriptor): unknown {\n const obj: any = {};\n if (message.rowNumber !== 0) {\n obj.rowNumber = Math.round(message.rowNumber);\n }\n if (message.laserId !== 0) {\n obj.laserId = Math.round(message.laserId);\n }\n if (message.cameraId !== \"\") {\n obj.cameraId = message.cameraId;\n }\n if (message.serial !== \"\") {\n obj.serial = message.serial;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserDescriptor {\n return LaserDescriptor.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserDescriptor {\n const message = createBaseLaserDescriptor();\n message.rowNumber = object.rowNumber ?? 0;\n message.laserId = object.laserId ?? 0;\n message.cameraId = object.cameraId ?? \"\";\n message.serial = object.serial ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLaserState(): LaserState {\n return {\n laserDescriptor: undefined,\n firing: false,\n enabled: false,\n error: false,\n totalFireCount: 0,\n totalFireTimeMs: 0,\n deltaTemp: 0,\n current: 0,\n targetTrajectoryId: 0,\n lifetimeSec: 0,\n powerLevel: 0,\n };\n}\n\nexport const LaserState: MessageFns = {\n encode(message: LaserState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.laserDescriptor !== undefined) {\n LaserDescriptor.encode(message.laserDescriptor, writer.uint32(10).fork()).join();\n }\n if (message.firing !== false) {\n writer.uint32(16).bool(message.firing);\n }\n if (message.enabled !== false) {\n writer.uint32(24).bool(message.enabled);\n }\n if (message.error !== false) {\n writer.uint32(32).bool(message.error);\n }\n if (message.totalFireCount !== 0) {\n writer.uint32(40).int64(message.totalFireCount);\n }\n if (message.totalFireTimeMs !== 0) {\n writer.uint32(48).int64(message.totalFireTimeMs);\n }\n if (message.deltaTemp !== 0) {\n writer.uint32(61).float(message.deltaTemp);\n }\n if (message.current !== 0) {\n writer.uint32(77).float(message.current);\n }\n if (message.targetTrajectoryId !== 0) {\n writer.uint32(80).uint32(message.targetTrajectoryId);\n }\n if (message.lifetimeSec !== 0) {\n writer.uint32(88).uint64(message.lifetimeSec);\n }\n if (message.powerLevel !== 0) {\n writer.uint32(101).float(message.powerLevel);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.laserDescriptor = LaserDescriptor.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.firing = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.enabled = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.error = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.totalFireCount = longToNumber(reader.int64());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.totalFireTimeMs = longToNumber(reader.int64());\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n\n message.deltaTemp = reader.float();\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n\n message.current = reader.float();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.targetTrajectoryId = reader.uint32();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.lifetimeSec = longToNumber(reader.uint64());\n continue;\n case 12:\n if (tag !== 101) {\n break;\n }\n\n message.powerLevel = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserState {\n return {\n laserDescriptor: isSet(object.laserDescriptor) ? LaserDescriptor.fromJSON(object.laserDescriptor) : undefined,\n firing: isSet(object.firing) ? globalThis.Boolean(object.firing) : false,\n enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false,\n error: isSet(object.error) ? globalThis.Boolean(object.error) : false,\n totalFireCount: isSet(object.totalFireCount) ? globalThis.Number(object.totalFireCount) : 0,\n totalFireTimeMs: isSet(object.totalFireTimeMs) ? globalThis.Number(object.totalFireTimeMs) : 0,\n deltaTemp: isSet(object.deltaTemp) ? globalThis.Number(object.deltaTemp) : 0,\n current: isSet(object.current) ? globalThis.Number(object.current) : 0,\n targetTrajectoryId: isSet(object.targetTrajectoryId) ? globalThis.Number(object.targetTrajectoryId) : 0,\n lifetimeSec: isSet(object.lifetimeSec) ? globalThis.Number(object.lifetimeSec) : 0,\n powerLevel: isSet(object.powerLevel) ? globalThis.Number(object.powerLevel) : 0,\n };\n },\n\n toJSON(message: LaserState): unknown {\n const obj: any = {};\n if (message.laserDescriptor !== undefined) {\n obj.laserDescriptor = LaserDescriptor.toJSON(message.laserDescriptor);\n }\n if (message.firing !== false) {\n obj.firing = message.firing;\n }\n if (message.enabled !== false) {\n obj.enabled = message.enabled;\n }\n if (message.error !== false) {\n obj.error = message.error;\n }\n if (message.totalFireCount !== 0) {\n obj.totalFireCount = Math.round(message.totalFireCount);\n }\n if (message.totalFireTimeMs !== 0) {\n obj.totalFireTimeMs = Math.round(message.totalFireTimeMs);\n }\n if (message.deltaTemp !== 0) {\n obj.deltaTemp = message.deltaTemp;\n }\n if (message.current !== 0) {\n obj.current = message.current;\n }\n if (message.targetTrajectoryId !== 0) {\n obj.targetTrajectoryId = Math.round(message.targetTrajectoryId);\n }\n if (message.lifetimeSec !== 0) {\n obj.lifetimeSec = Math.round(message.lifetimeSec);\n }\n if (message.powerLevel !== 0) {\n obj.powerLevel = message.powerLevel;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserState {\n return LaserState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserState {\n const message = createBaseLaserState();\n message.laserDescriptor = (object.laserDescriptor !== undefined && object.laserDescriptor !== null)\n ? LaserDescriptor.fromPartial(object.laserDescriptor)\n : undefined;\n message.firing = object.firing ?? false;\n message.enabled = object.enabled ?? false;\n message.error = object.error ?? false;\n message.totalFireCount = object.totalFireCount ?? 0;\n message.totalFireTimeMs = object.totalFireTimeMs ?? 0;\n message.deltaTemp = object.deltaTemp ?? 0;\n message.current = object.current ?? 0;\n message.targetTrajectoryId = object.targetTrajectoryId ?? 0;\n message.lifetimeSec = object.lifetimeSec ?? 0;\n message.powerLevel = object.powerLevel ?? 0;\n return message;\n },\n};\n\nfunction createBaseLaserStateList(): LaserStateList {\n return { ts: undefined, lasers: [] };\n}\n\nexport const LaserStateList: MessageFns = {\n encode(message: LaserStateList, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.ts !== undefined) {\n Timestamp.encode(message.ts, writer.uint32(10).fork()).join();\n }\n for (const v of message.lasers) {\n LaserState.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserStateList {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserStateList();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.ts = Timestamp.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.lasers.push(LaserState.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserStateList {\n return {\n ts: isSet(object.ts) ? Timestamp.fromJSON(object.ts) : undefined,\n lasers: globalThis.Array.isArray(object?.lasers) ? object.lasers.map((e: any) => LaserState.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: LaserStateList): unknown {\n const obj: any = {};\n if (message.ts !== undefined) {\n obj.ts = Timestamp.toJSON(message.ts);\n }\n if (message.lasers?.length) {\n obj.lasers = message.lasers.map((e) => LaserState.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserStateList {\n return LaserStateList.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserStateList {\n const message = createBaseLaserStateList();\n message.ts = (object.ts !== undefined && object.ts !== null) ? Timestamp.fromPartial(object.ts) : undefined;\n message.lasers = object.lasers?.map((e) => LaserState.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseRowRequest(): RowRequest {\n return { rowNumber: 0 };\n}\n\nexport const RowRequest: MessageFns = {\n encode(message: RowRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.rowNumber !== 0) {\n writer.uint32(8).uint32(message.rowNumber);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RowRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRowRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.rowNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RowRequest {\n return { rowNumber: isSet(object.rowNumber) ? globalThis.Number(object.rowNumber) : 0 };\n },\n\n toJSON(message: RowRequest): unknown {\n const obj: any = {};\n if (message.rowNumber !== 0) {\n obj.rowNumber = Math.round(message.rowNumber);\n }\n return obj;\n },\n\n create, I>>(base?: I): RowRequest {\n return RowRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RowRequest {\n const message = createBaseRowRequest();\n message.rowNumber = object.rowNumber ?? 0;\n return message;\n },\n};\n\nfunction createBaseSetLaserPowerRequest(): SetLaserPowerRequest {\n return { laserDescriptor: undefined, powerLevel: 0 };\n}\n\nexport const SetLaserPowerRequest: MessageFns = {\n encode(message: SetLaserPowerRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.laserDescriptor !== undefined) {\n LaserDescriptor.encode(message.laserDescriptor, writer.uint32(10).fork()).join();\n }\n if (message.powerLevel !== 0) {\n writer.uint32(21).float(message.powerLevel);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetLaserPowerRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetLaserPowerRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.laserDescriptor = LaserDescriptor.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.powerLevel = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetLaserPowerRequest {\n return {\n laserDescriptor: isSet(object.laserDescriptor) ? LaserDescriptor.fromJSON(object.laserDescriptor) : undefined,\n powerLevel: isSet(object.powerLevel) ? globalThis.Number(object.powerLevel) : 0,\n };\n },\n\n toJSON(message: SetLaserPowerRequest): unknown {\n const obj: any = {};\n if (message.laserDescriptor !== undefined) {\n obj.laserDescriptor = LaserDescriptor.toJSON(message.laserDescriptor);\n }\n if (message.powerLevel !== 0) {\n obj.powerLevel = message.powerLevel;\n }\n return obj;\n },\n\n create, I>>(base?: I): SetLaserPowerRequest {\n return SetLaserPowerRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetLaserPowerRequest {\n const message = createBaseSetLaserPowerRequest();\n message.laserDescriptor = (object.laserDescriptor !== undefined && object.laserDescriptor !== null)\n ? LaserDescriptor.fromPartial(object.laserDescriptor)\n : undefined;\n message.powerLevel = object.powerLevel ?? 0;\n return message;\n },\n};\n\nfunction createBaseFixLaserMetricsRequest(): FixLaserMetricsRequest {\n return { laserDescriptor: undefined, totalFireCount: 0, totalFireTimeMs: 0, lifetimeSec: 0 };\n}\n\nexport const FixLaserMetricsRequest: MessageFns = {\n encode(message: FixLaserMetricsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.laserDescriptor !== undefined) {\n LaserDescriptor.encode(message.laserDescriptor, writer.uint32(10).fork()).join();\n }\n if (message.totalFireCount !== 0) {\n writer.uint32(16).int64(message.totalFireCount);\n }\n if (message.totalFireTimeMs !== 0) {\n writer.uint32(24).int64(message.totalFireTimeMs);\n }\n if (message.lifetimeSec !== 0) {\n writer.uint32(32).uint64(message.lifetimeSec);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FixLaserMetricsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFixLaserMetricsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.laserDescriptor = LaserDescriptor.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.totalFireCount = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.totalFireTimeMs = longToNumber(reader.int64());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.lifetimeSec = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FixLaserMetricsRequest {\n return {\n laserDescriptor: isSet(object.laserDescriptor) ? LaserDescriptor.fromJSON(object.laserDescriptor) : undefined,\n totalFireCount: isSet(object.totalFireCount) ? globalThis.Number(object.totalFireCount) : 0,\n totalFireTimeMs: isSet(object.totalFireTimeMs) ? globalThis.Number(object.totalFireTimeMs) : 0,\n lifetimeSec: isSet(object.lifetimeSec) ? globalThis.Number(object.lifetimeSec) : 0,\n };\n },\n\n toJSON(message: FixLaserMetricsRequest): unknown {\n const obj: any = {};\n if (message.laserDescriptor !== undefined) {\n obj.laserDescriptor = LaserDescriptor.toJSON(message.laserDescriptor);\n }\n if (message.totalFireCount !== 0) {\n obj.totalFireCount = Math.round(message.totalFireCount);\n }\n if (message.totalFireTimeMs !== 0) {\n obj.totalFireTimeMs = Math.round(message.totalFireTimeMs);\n }\n if (message.lifetimeSec !== 0) {\n obj.lifetimeSec = Math.round(message.lifetimeSec);\n }\n return obj;\n },\n\n create, I>>(base?: I): FixLaserMetricsRequest {\n return FixLaserMetricsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FixLaserMetricsRequest {\n const message = createBaseFixLaserMetricsRequest();\n message.laserDescriptor = (object.laserDescriptor !== undefined && object.laserDescriptor !== null)\n ? LaserDescriptor.fromPartial(object.laserDescriptor)\n : undefined;\n message.totalFireCount = object.totalFireCount ?? 0;\n message.totalFireTimeMs = object.totalFireTimeMs ?? 0;\n message.lifetimeSec = object.lifetimeSec ?? 0;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/health.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { AlarmRow as AlarmRow1 } from \"../frontend/alarm\";\nimport { LaserStateList } from \"../frontend/laser\";\nimport { Status, statusFromJSON, statusToJSON } from \"../frontend/status_bar\";\nimport { LaserChangeTimes } from \"../metrics/metrics\";\n\nexport const protobufPackage = \"carbon.portal.health\";\n\n/** ########### START DEPRECATED ALARMS */\nexport enum AlarmLevel {\n /** @deprecated */\n ALARM_UNKNOWN = 0,\n /** @deprecated */\n ALARM_CRITICAL = 1,\n /** @deprecated */\n ALARM_HIGH = 2,\n /** @deprecated */\n ALARM_MEDIUM = 3,\n /** @deprecated */\n ALARM_LOW = 4,\n /** @deprecated */\n ALARM_HIDDEN = 5,\n UNRECOGNIZED = -1,\n}\n\nexport function alarmLevelFromJSON(object: any): AlarmLevel {\n switch (object) {\n case 0:\n case \"ALARM_UNKNOWN\":\n return AlarmLevel.ALARM_UNKNOWN;\n case 1:\n case \"ALARM_CRITICAL\":\n return AlarmLevel.ALARM_CRITICAL;\n case 2:\n case \"ALARM_HIGH\":\n return AlarmLevel.ALARM_HIGH;\n case 3:\n case \"ALARM_MEDIUM\":\n return AlarmLevel.ALARM_MEDIUM;\n case 4:\n case \"ALARM_LOW\":\n return AlarmLevel.ALARM_LOW;\n case 5:\n case \"ALARM_HIDDEN\":\n return AlarmLevel.ALARM_HIDDEN;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return AlarmLevel.UNRECOGNIZED;\n }\n}\n\nexport function alarmLevelToJSON(object: AlarmLevel): string {\n switch (object) {\n case AlarmLevel.ALARM_UNKNOWN:\n return \"ALARM_UNKNOWN\";\n case AlarmLevel.ALARM_CRITICAL:\n return \"ALARM_CRITICAL\";\n case AlarmLevel.ALARM_HIGH:\n return \"ALARM_HIGH\";\n case AlarmLevel.ALARM_MEDIUM:\n return \"ALARM_MEDIUM\";\n case AlarmLevel.ALARM_LOW:\n return \"ALARM_LOW\";\n case AlarmLevel.ALARM_HIDDEN:\n return \"ALARM_HIDDEN\";\n case AlarmLevel.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum AlarmImpact {\n /** @deprecated */\n IMPACT_UNDEFINED = 0,\n /** @deprecated */\n IMPACT_CRITICAL = 1,\n /** @deprecated */\n IMPACT_OFFLINE = 2,\n /** @deprecated */\n IMPACT_DEGRADED = 3,\n /** @deprecated */\n IMPACT_NONE = 4,\n UNRECOGNIZED = -1,\n}\n\nexport function alarmImpactFromJSON(object: any): AlarmImpact {\n switch (object) {\n case 0:\n case \"IMPACT_UNDEFINED\":\n return AlarmImpact.IMPACT_UNDEFINED;\n case 1:\n case \"IMPACT_CRITICAL\":\n return AlarmImpact.IMPACT_CRITICAL;\n case 2:\n case \"IMPACT_OFFLINE\":\n return AlarmImpact.IMPACT_OFFLINE;\n case 3:\n case \"IMPACT_DEGRADED\":\n return AlarmImpact.IMPACT_DEGRADED;\n case 4:\n case \"IMPACT_NONE\":\n return AlarmImpact.IMPACT_NONE;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return AlarmImpact.UNRECOGNIZED;\n }\n}\n\nexport function alarmImpactToJSON(object: AlarmImpact): string {\n switch (object) {\n case AlarmImpact.IMPACT_UNDEFINED:\n return \"IMPACT_UNDEFINED\";\n case AlarmImpact.IMPACT_CRITICAL:\n return \"IMPACT_CRITICAL\";\n case AlarmImpact.IMPACT_OFFLINE:\n return \"IMPACT_OFFLINE\";\n case AlarmImpact.IMPACT_DEGRADED:\n return \"IMPACT_DEGRADED\";\n case AlarmImpact.IMPACT_NONE:\n return \"IMPACT_NONE\";\n case AlarmImpact.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\n/** @deprecated */\nexport interface AlarmRow {\n timestampMs: number;\n alarmCode: string;\n description: string;\n level: AlarmLevel;\n identifier: string;\n acknowledged: boolean;\n impact: AlarmImpact;\n}\n\nexport interface Location {\n x: number;\n y: number;\n z: number;\n}\n\nexport interface FieldConfig {\n bandingEnabled: boolean;\n bandingDynamic: boolean;\n activeBandConfig: string;\n activeThinningConfigId: string;\n activeJobId: string;\n activeAlmanacId: string;\n activeDiscriminatorId: string;\n isWeeding: boolean;\n isThinning: boolean;\n activeBandConfigName: string;\n activeThinningConfigName: string;\n activeJobName: string;\n activeAlmanacName: string;\n activeDiscriminatorName: string;\n activeModelinatorId: string;\n activeVelocityEstimatorId: string;\n activeVelocityEstimatorName: string;\n activeCategoryCollectionId: string;\n}\n\nexport interface Versions {\n current: string;\n latest: string;\n}\n\nexport interface WeedingPerformance {\n areaWeededTotal: number;\n areaWeededToday: number;\n timeWeededToday: number;\n}\n\nexport interface Performance {\n weeding: WeedingPerformance | undefined;\n}\n\nexport interface DailyMetrics {\n metrics: { [key: string]: string };\n}\n\nexport interface DailyMetrics_MetricsEntry {\n key: string;\n value: string;\n}\n\nexport interface Metrics {\n dailyMetrics: { [key: string]: DailyMetrics };\n}\n\nexport interface Metrics_DailyMetricsEntry {\n key: string;\n value: DailyMetrics | undefined;\n}\n\nexport interface HealthLog {\n /** @deprecated */\n alarms: AlarmRow[];\n location: Location | undefined;\n model: string;\n models: string[];\n performance: Performance | undefined;\n reportedAt: number;\n robotSerial: string;\n status: Status;\n statusChangedAt: number;\n /**\n * DEPRECATED: use crop_id\n *\n * @deprecated\n */\n crop: string;\n p2p: string;\n softwareVersion: string;\n targetVersion: string;\n targetVersionReady: boolean;\n statusMessage: string;\n metricTotals: { [key: string]: number };\n alarmList: AlarmRow1[];\n fieldConfig: FieldConfig | undefined;\n metrics: Metrics | undefined;\n cropId: string;\n robotRuntime240v: number;\n laserState: LaserStateList | undefined;\n laserChangeTimes: LaserChangeTimes | undefined;\n hostSerials: { [key: string]: string };\n featureFlags: { [key: string]: boolean };\n}\n\nexport interface HealthLog_MetricTotalsEntry {\n key: string;\n value: number;\n}\n\nexport interface HealthLog_HostSerialsEntry {\n key: string;\n value: string;\n}\n\nexport interface HealthLog_FeatureFlagsEntry {\n key: string;\n value: boolean;\n}\n\nexport interface HistoryResponse {\n logs: HealthLog[];\n queryLimitReached: boolean;\n}\n\nexport interface IssueReport {\n description: string;\n phoneNumber: string;\n robotSerial: string;\n reportedAt: number;\n /**\n * Deprecated, use crop_id\n *\n * @deprecated\n */\n crop: string;\n modelId: string;\n softwareVersion: string;\n cropId: string;\n}\n\nfunction createBaseAlarmRow(): AlarmRow {\n return { timestampMs: 0, alarmCode: \"\", description: \"\", level: 0, identifier: \"\", acknowledged: false, impact: 0 };\n}\n\nexport const AlarmRow: MessageFns = {\n encode(message: AlarmRow, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.timestampMs !== 0) {\n writer.uint32(8).int64(message.timestampMs);\n }\n if (message.alarmCode !== \"\") {\n writer.uint32(18).string(message.alarmCode);\n }\n if (message.description !== \"\") {\n writer.uint32(26).string(message.description);\n }\n if (message.level !== 0) {\n writer.uint32(32).int32(message.level);\n }\n if (message.identifier !== \"\") {\n writer.uint32(42).string(message.identifier);\n }\n if (message.acknowledged !== false) {\n writer.uint32(48).bool(message.acknowledged);\n }\n if (message.impact !== 0) {\n writer.uint32(56).int32(message.impact);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AlarmRow {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAlarmRow();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.alarmCode = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.description = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.level = reader.int32() as any;\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.identifier = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.acknowledged = reader.bool();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.impact = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AlarmRow {\n return {\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n alarmCode: isSet(object.alarmCode) ? globalThis.String(object.alarmCode) : \"\",\n description: isSet(object.description) ? globalThis.String(object.description) : \"\",\n level: isSet(object.level) ? alarmLevelFromJSON(object.level) : 0,\n identifier: isSet(object.identifier) ? globalThis.String(object.identifier) : \"\",\n acknowledged: isSet(object.acknowledged) ? globalThis.Boolean(object.acknowledged) : false,\n impact: isSet(object.impact) ? alarmImpactFromJSON(object.impact) : 0,\n };\n },\n\n toJSON(message: AlarmRow): unknown {\n const obj: any = {};\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.alarmCode !== \"\") {\n obj.alarmCode = message.alarmCode;\n }\n if (message.description !== \"\") {\n obj.description = message.description;\n }\n if (message.level !== 0) {\n obj.level = alarmLevelToJSON(message.level);\n }\n if (message.identifier !== \"\") {\n obj.identifier = message.identifier;\n }\n if (message.acknowledged !== false) {\n obj.acknowledged = message.acknowledged;\n }\n if (message.impact !== 0) {\n obj.impact = alarmImpactToJSON(message.impact);\n }\n return obj;\n },\n\n create, I>>(base?: I): AlarmRow {\n return AlarmRow.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AlarmRow {\n const message = createBaseAlarmRow();\n message.timestampMs = object.timestampMs ?? 0;\n message.alarmCode = object.alarmCode ?? \"\";\n message.description = object.description ?? \"\";\n message.level = object.level ?? 0;\n message.identifier = object.identifier ?? \"\";\n message.acknowledged = object.acknowledged ?? false;\n message.impact = object.impact ?? 0;\n return message;\n },\n};\n\nfunction createBaseLocation(): Location {\n return { x: 0, y: 0, z: 0 };\n}\n\nexport const Location: MessageFns = {\n encode(message: Location, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(9).double(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(17).double(message.y);\n }\n if (message.z !== 0) {\n writer.uint32(25).double(message.z);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Location {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLocation();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.x = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.y = reader.double();\n continue;\n case 3:\n if (tag !== 25) {\n break;\n }\n\n message.z = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Location {\n return {\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n z: isSet(object.z) ? globalThis.Number(object.z) : 0,\n };\n },\n\n toJSON(message: Location): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = message.x;\n }\n if (message.y !== 0) {\n obj.y = message.y;\n }\n if (message.z !== 0) {\n obj.z = message.z;\n }\n return obj;\n },\n\n create, I>>(base?: I): Location {\n return Location.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Location {\n const message = createBaseLocation();\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n message.z = object.z ?? 0;\n return message;\n },\n};\n\nfunction createBaseFieldConfig(): FieldConfig {\n return {\n bandingEnabled: false,\n bandingDynamic: false,\n activeBandConfig: \"\",\n activeThinningConfigId: \"\",\n activeJobId: \"\",\n activeAlmanacId: \"\",\n activeDiscriminatorId: \"\",\n isWeeding: false,\n isThinning: false,\n activeBandConfigName: \"\",\n activeThinningConfigName: \"\",\n activeJobName: \"\",\n activeAlmanacName: \"\",\n activeDiscriminatorName: \"\",\n activeModelinatorId: \"\",\n activeVelocityEstimatorId: \"\",\n activeVelocityEstimatorName: \"\",\n activeCategoryCollectionId: \"\",\n };\n}\n\nexport const FieldConfig: MessageFns = {\n encode(message: FieldConfig, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.bandingEnabled !== false) {\n writer.uint32(8).bool(message.bandingEnabled);\n }\n if (message.bandingDynamic !== false) {\n writer.uint32(16).bool(message.bandingDynamic);\n }\n if (message.activeBandConfig !== \"\") {\n writer.uint32(26).string(message.activeBandConfig);\n }\n if (message.activeThinningConfigId !== \"\") {\n writer.uint32(34).string(message.activeThinningConfigId);\n }\n if (message.activeJobId !== \"\") {\n writer.uint32(42).string(message.activeJobId);\n }\n if (message.activeAlmanacId !== \"\") {\n writer.uint32(50).string(message.activeAlmanacId);\n }\n if (message.activeDiscriminatorId !== \"\") {\n writer.uint32(58).string(message.activeDiscriminatorId);\n }\n if (message.isWeeding !== false) {\n writer.uint32(64).bool(message.isWeeding);\n }\n if (message.isThinning !== false) {\n writer.uint32(72).bool(message.isThinning);\n }\n if (message.activeBandConfigName !== \"\") {\n writer.uint32(82).string(message.activeBandConfigName);\n }\n if (message.activeThinningConfigName !== \"\") {\n writer.uint32(90).string(message.activeThinningConfigName);\n }\n if (message.activeJobName !== \"\") {\n writer.uint32(98).string(message.activeJobName);\n }\n if (message.activeAlmanacName !== \"\") {\n writer.uint32(106).string(message.activeAlmanacName);\n }\n if (message.activeDiscriminatorName !== \"\") {\n writer.uint32(114).string(message.activeDiscriminatorName);\n }\n if (message.activeModelinatorId !== \"\") {\n writer.uint32(122).string(message.activeModelinatorId);\n }\n if (message.activeVelocityEstimatorId !== \"\") {\n writer.uint32(130).string(message.activeVelocityEstimatorId);\n }\n if (message.activeVelocityEstimatorName !== \"\") {\n writer.uint32(138).string(message.activeVelocityEstimatorName);\n }\n if (message.activeCategoryCollectionId !== \"\") {\n writer.uint32(146).string(message.activeCategoryCollectionId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FieldConfig {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFieldConfig();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.bandingEnabled = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.bandingDynamic = reader.bool();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.activeBandConfig = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.activeThinningConfigId = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.activeJobId = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.activeAlmanacId = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.activeDiscriminatorId = reader.string();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.isWeeding = reader.bool();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.isThinning = reader.bool();\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.activeBandConfigName = reader.string();\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.activeThinningConfigName = reader.string();\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.activeJobName = reader.string();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.activeAlmanacName = reader.string();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.activeDiscriminatorName = reader.string();\n continue;\n case 15:\n if (tag !== 122) {\n break;\n }\n\n message.activeModelinatorId = reader.string();\n continue;\n case 16:\n if (tag !== 130) {\n break;\n }\n\n message.activeVelocityEstimatorId = reader.string();\n continue;\n case 17:\n if (tag !== 138) {\n break;\n }\n\n message.activeVelocityEstimatorName = reader.string();\n continue;\n case 18:\n if (tag !== 146) {\n break;\n }\n\n message.activeCategoryCollectionId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FieldConfig {\n return {\n bandingEnabled: isSet(object.bandingEnabled) ? globalThis.Boolean(object.bandingEnabled) : false,\n bandingDynamic: isSet(object.bandingDynamic) ? globalThis.Boolean(object.bandingDynamic) : false,\n activeBandConfig: isSet(object.activeBandConfig) ? globalThis.String(object.activeBandConfig) : \"\",\n activeThinningConfigId: isSet(object.activeThinningConfigId)\n ? globalThis.String(object.activeThinningConfigId)\n : \"\",\n activeJobId: isSet(object.activeJobId) ? globalThis.String(object.activeJobId) : \"\",\n activeAlmanacId: isSet(object.activeAlmanacId) ? globalThis.String(object.activeAlmanacId) : \"\",\n activeDiscriminatorId: isSet(object.activeDiscriminatorId) ? globalThis.String(object.activeDiscriminatorId) : \"\",\n isWeeding: isSet(object.isWeeding) ? globalThis.Boolean(object.isWeeding) : false,\n isThinning: isSet(object.isThinning) ? globalThis.Boolean(object.isThinning) : false,\n activeBandConfigName: isSet(object.activeBandConfigName) ? globalThis.String(object.activeBandConfigName) : \"\",\n activeThinningConfigName: isSet(object.activeThinningConfigName)\n ? globalThis.String(object.activeThinningConfigName)\n : \"\",\n activeJobName: isSet(object.activeJobName) ? globalThis.String(object.activeJobName) : \"\",\n activeAlmanacName: isSet(object.activeAlmanacName) ? globalThis.String(object.activeAlmanacName) : \"\",\n activeDiscriminatorName: isSet(object.activeDiscriminatorName)\n ? globalThis.String(object.activeDiscriminatorName)\n : \"\",\n activeModelinatorId: isSet(object.activeModelinatorId) ? globalThis.String(object.activeModelinatorId) : \"\",\n activeVelocityEstimatorId: isSet(object.activeVelocityEstimatorId)\n ? globalThis.String(object.activeVelocityEstimatorId)\n : \"\",\n activeVelocityEstimatorName: isSet(object.activeVelocityEstimatorName)\n ? globalThis.String(object.activeVelocityEstimatorName)\n : \"\",\n activeCategoryCollectionId: isSet(object.activeCategoryCollectionId)\n ? globalThis.String(object.activeCategoryCollectionId)\n : \"\",\n };\n },\n\n toJSON(message: FieldConfig): unknown {\n const obj: any = {};\n if (message.bandingEnabled !== false) {\n obj.bandingEnabled = message.bandingEnabled;\n }\n if (message.bandingDynamic !== false) {\n obj.bandingDynamic = message.bandingDynamic;\n }\n if (message.activeBandConfig !== \"\") {\n obj.activeBandConfig = message.activeBandConfig;\n }\n if (message.activeThinningConfigId !== \"\") {\n obj.activeThinningConfigId = message.activeThinningConfigId;\n }\n if (message.activeJobId !== \"\") {\n obj.activeJobId = message.activeJobId;\n }\n if (message.activeAlmanacId !== \"\") {\n obj.activeAlmanacId = message.activeAlmanacId;\n }\n if (message.activeDiscriminatorId !== \"\") {\n obj.activeDiscriminatorId = message.activeDiscriminatorId;\n }\n if (message.isWeeding !== false) {\n obj.isWeeding = message.isWeeding;\n }\n if (message.isThinning !== false) {\n obj.isThinning = message.isThinning;\n }\n if (message.activeBandConfigName !== \"\") {\n obj.activeBandConfigName = message.activeBandConfigName;\n }\n if (message.activeThinningConfigName !== \"\") {\n obj.activeThinningConfigName = message.activeThinningConfigName;\n }\n if (message.activeJobName !== \"\") {\n obj.activeJobName = message.activeJobName;\n }\n if (message.activeAlmanacName !== \"\") {\n obj.activeAlmanacName = message.activeAlmanacName;\n }\n if (message.activeDiscriminatorName !== \"\") {\n obj.activeDiscriminatorName = message.activeDiscriminatorName;\n }\n if (message.activeModelinatorId !== \"\") {\n obj.activeModelinatorId = message.activeModelinatorId;\n }\n if (message.activeVelocityEstimatorId !== \"\") {\n obj.activeVelocityEstimatorId = message.activeVelocityEstimatorId;\n }\n if (message.activeVelocityEstimatorName !== \"\") {\n obj.activeVelocityEstimatorName = message.activeVelocityEstimatorName;\n }\n if (message.activeCategoryCollectionId !== \"\") {\n obj.activeCategoryCollectionId = message.activeCategoryCollectionId;\n }\n return obj;\n },\n\n create, I>>(base?: I): FieldConfig {\n return FieldConfig.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FieldConfig {\n const message = createBaseFieldConfig();\n message.bandingEnabled = object.bandingEnabled ?? false;\n message.bandingDynamic = object.bandingDynamic ?? false;\n message.activeBandConfig = object.activeBandConfig ?? \"\";\n message.activeThinningConfigId = object.activeThinningConfigId ?? \"\";\n message.activeJobId = object.activeJobId ?? \"\";\n message.activeAlmanacId = object.activeAlmanacId ?? \"\";\n message.activeDiscriminatorId = object.activeDiscriminatorId ?? \"\";\n message.isWeeding = object.isWeeding ?? false;\n message.isThinning = object.isThinning ?? false;\n message.activeBandConfigName = object.activeBandConfigName ?? \"\";\n message.activeThinningConfigName = object.activeThinningConfigName ?? \"\";\n message.activeJobName = object.activeJobName ?? \"\";\n message.activeAlmanacName = object.activeAlmanacName ?? \"\";\n message.activeDiscriminatorName = object.activeDiscriminatorName ?? \"\";\n message.activeModelinatorId = object.activeModelinatorId ?? \"\";\n message.activeVelocityEstimatorId = object.activeVelocityEstimatorId ?? \"\";\n message.activeVelocityEstimatorName = object.activeVelocityEstimatorName ?? \"\";\n message.activeCategoryCollectionId = object.activeCategoryCollectionId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseVersions(): Versions {\n return { current: \"\", latest: \"\" };\n}\n\nexport const Versions: MessageFns = {\n encode(message: Versions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.current !== \"\") {\n writer.uint32(10).string(message.current);\n }\n if (message.latest !== \"\") {\n writer.uint32(18).string(message.latest);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Versions {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVersions();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.current = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.latest = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Versions {\n return {\n current: isSet(object.current) ? globalThis.String(object.current) : \"\",\n latest: isSet(object.latest) ? globalThis.String(object.latest) : \"\",\n };\n },\n\n toJSON(message: Versions): unknown {\n const obj: any = {};\n if (message.current !== \"\") {\n obj.current = message.current;\n }\n if (message.latest !== \"\") {\n obj.latest = message.latest;\n }\n return obj;\n },\n\n create, I>>(base?: I): Versions {\n return Versions.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Versions {\n const message = createBaseVersions();\n message.current = object.current ?? \"\";\n message.latest = object.latest ?? \"\";\n return message;\n },\n};\n\nfunction createBaseWeedingPerformance(): WeedingPerformance {\n return { areaWeededTotal: 0, areaWeededToday: 0, timeWeededToday: 0 };\n}\n\nexport const WeedingPerformance: MessageFns = {\n encode(message: WeedingPerformance, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.areaWeededTotal !== 0) {\n writer.uint32(9).double(message.areaWeededTotal);\n }\n if (message.areaWeededToday !== 0) {\n writer.uint32(17).double(message.areaWeededToday);\n }\n if (message.timeWeededToday !== 0) {\n writer.uint32(24).int64(message.timeWeededToday);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): WeedingPerformance {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWeedingPerformance();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.areaWeededTotal = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.areaWeededToday = reader.double();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.timeWeededToday = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): WeedingPerformance {\n return {\n areaWeededTotal: isSet(object.areaWeededTotal) ? globalThis.Number(object.areaWeededTotal) : 0,\n areaWeededToday: isSet(object.areaWeededToday) ? globalThis.Number(object.areaWeededToday) : 0,\n timeWeededToday: isSet(object.timeWeededToday) ? globalThis.Number(object.timeWeededToday) : 0,\n };\n },\n\n toJSON(message: WeedingPerformance): unknown {\n const obj: any = {};\n if (message.areaWeededTotal !== 0) {\n obj.areaWeededTotal = message.areaWeededTotal;\n }\n if (message.areaWeededToday !== 0) {\n obj.areaWeededToday = message.areaWeededToday;\n }\n if (message.timeWeededToday !== 0) {\n obj.timeWeededToday = Math.round(message.timeWeededToday);\n }\n return obj;\n },\n\n create, I>>(base?: I): WeedingPerformance {\n return WeedingPerformance.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): WeedingPerformance {\n const message = createBaseWeedingPerformance();\n message.areaWeededTotal = object.areaWeededTotal ?? 0;\n message.areaWeededToday = object.areaWeededToday ?? 0;\n message.timeWeededToday = object.timeWeededToday ?? 0;\n return message;\n },\n};\n\nfunction createBasePerformance(): Performance {\n return { weeding: undefined };\n}\n\nexport const Performance: MessageFns = {\n encode(message: Performance, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.weeding !== undefined) {\n WeedingPerformance.encode(message.weeding, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Performance {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformance();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.weeding = WeedingPerformance.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Performance {\n return { weeding: isSet(object.weeding) ? WeedingPerformance.fromJSON(object.weeding) : undefined };\n },\n\n toJSON(message: Performance): unknown {\n const obj: any = {};\n if (message.weeding !== undefined) {\n obj.weeding = WeedingPerformance.toJSON(message.weeding);\n }\n return obj;\n },\n\n create, I>>(base?: I): Performance {\n return Performance.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Performance {\n const message = createBasePerformance();\n message.weeding = (object.weeding !== undefined && object.weeding !== null)\n ? WeedingPerformance.fromPartial(object.weeding)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseDailyMetrics(): DailyMetrics {\n return { metrics: {} };\n}\n\nexport const DailyMetrics: MessageFns = {\n encode(message: DailyMetrics, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.metrics).forEach(([key, value]) => {\n DailyMetrics_MetricsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DailyMetrics {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDailyMetrics();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = DailyMetrics_MetricsEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.metrics[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DailyMetrics {\n return {\n metrics: isObject(object.metrics)\n ? Object.entries(object.metrics).reduce<{ [key: string]: string }>((acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: DailyMetrics): unknown {\n const obj: any = {};\n if (message.metrics) {\n const entries = Object.entries(message.metrics);\n if (entries.length > 0) {\n obj.metrics = {};\n entries.forEach(([k, v]) => {\n obj.metrics[k] = v;\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): DailyMetrics {\n return DailyMetrics.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DailyMetrics {\n const message = createBaseDailyMetrics();\n message.metrics = Object.entries(object.metrics ?? {}).reduce<{ [key: string]: string }>((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.String(value);\n }\n return acc;\n }, {});\n return message;\n },\n};\n\nfunction createBaseDailyMetrics_MetricsEntry(): DailyMetrics_MetricsEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const DailyMetrics_MetricsEntry: MessageFns = {\n encode(message: DailyMetrics_MetricsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DailyMetrics_MetricsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDailyMetrics_MetricsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DailyMetrics_MetricsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n };\n },\n\n toJSON(message: DailyMetrics_MetricsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(base?: I): DailyMetrics_MetricsEntry {\n return DailyMetrics_MetricsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DailyMetrics_MetricsEntry {\n const message = createBaseDailyMetrics_MetricsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseMetrics(): Metrics {\n return { dailyMetrics: {} };\n}\n\nexport const Metrics: MessageFns = {\n encode(message: Metrics, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.dailyMetrics).forEach(([key, value]) => {\n Metrics_DailyMetricsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Metrics {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMetrics();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = Metrics_DailyMetricsEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.dailyMetrics[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Metrics {\n return {\n dailyMetrics: isObject(object.dailyMetrics)\n ? Object.entries(object.dailyMetrics).reduce<{ [key: string]: DailyMetrics }>((acc, [key, value]) => {\n acc[key] = DailyMetrics.fromJSON(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: Metrics): unknown {\n const obj: any = {};\n if (message.dailyMetrics) {\n const entries = Object.entries(message.dailyMetrics);\n if (entries.length > 0) {\n obj.dailyMetrics = {};\n entries.forEach(([k, v]) => {\n obj.dailyMetrics[k] = DailyMetrics.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): Metrics {\n return Metrics.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Metrics {\n const message = createBaseMetrics();\n message.dailyMetrics = Object.entries(object.dailyMetrics ?? {}).reduce<{ [key: string]: DailyMetrics }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = DailyMetrics.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseMetrics_DailyMetricsEntry(): Metrics_DailyMetricsEntry {\n return { key: \"\", value: undefined };\n}\n\nexport const Metrics_DailyMetricsEntry: MessageFns = {\n encode(message: Metrics_DailyMetricsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n DailyMetrics.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Metrics_DailyMetricsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMetrics_DailyMetricsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = DailyMetrics.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Metrics_DailyMetricsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? DailyMetrics.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: Metrics_DailyMetricsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== undefined) {\n obj.value = DailyMetrics.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(base?: I): Metrics_DailyMetricsEntry {\n return Metrics_DailyMetricsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Metrics_DailyMetricsEntry {\n const message = createBaseMetrics_DailyMetricsEntry();\n message.key = object.key ?? \"\";\n message.value = (object.value !== undefined && object.value !== null)\n ? DailyMetrics.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseHealthLog(): HealthLog {\n return {\n alarms: [],\n location: undefined,\n model: \"\",\n models: [],\n performance: undefined,\n reportedAt: 0,\n robotSerial: \"\",\n status: 0,\n statusChangedAt: 0,\n crop: \"\",\n p2p: \"\",\n softwareVersion: \"\",\n targetVersion: \"\",\n targetVersionReady: false,\n statusMessage: \"\",\n metricTotals: {},\n alarmList: [],\n fieldConfig: undefined,\n metrics: undefined,\n cropId: \"\",\n robotRuntime240v: 0,\n laserState: undefined,\n laserChangeTimes: undefined,\n hostSerials: {},\n featureFlags: {},\n };\n}\n\nexport const HealthLog: MessageFns = {\n encode(message: HealthLog, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.alarms) {\n AlarmRow.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.location !== undefined) {\n Location.encode(message.location, writer.uint32(18).fork()).join();\n }\n if (message.model !== \"\") {\n writer.uint32(26).string(message.model);\n }\n for (const v of message.models) {\n writer.uint32(34).string(v!);\n }\n if (message.performance !== undefined) {\n Performance.encode(message.performance, writer.uint32(42).fork()).join();\n }\n if (message.reportedAt !== 0) {\n writer.uint32(48).int64(message.reportedAt);\n }\n if (message.robotSerial !== \"\") {\n writer.uint32(58).string(message.robotSerial);\n }\n if (message.status !== 0) {\n writer.uint32(72).int32(message.status);\n }\n if (message.statusChangedAt !== 0) {\n writer.uint32(80).int64(message.statusChangedAt);\n }\n if (message.crop !== \"\") {\n writer.uint32(90).string(message.crop);\n }\n if (message.p2p !== \"\") {\n writer.uint32(98).string(message.p2p);\n }\n if (message.softwareVersion !== \"\") {\n writer.uint32(106).string(message.softwareVersion);\n }\n if (message.targetVersion !== \"\") {\n writer.uint32(114).string(message.targetVersion);\n }\n if (message.targetVersionReady !== false) {\n writer.uint32(120).bool(message.targetVersionReady);\n }\n if (message.statusMessage !== \"\") {\n writer.uint32(130).string(message.statusMessage);\n }\n Object.entries(message.metricTotals).forEach(([key, value]) => {\n HealthLog_MetricTotalsEntry.encode({ key: key as any, value }, writer.uint32(138).fork()).join();\n });\n for (const v of message.alarmList) {\n AlarmRow1.encode(v!, writer.uint32(146).fork()).join();\n }\n if (message.fieldConfig !== undefined) {\n FieldConfig.encode(message.fieldConfig, writer.uint32(154).fork()).join();\n }\n if (message.metrics !== undefined) {\n Metrics.encode(message.metrics, writer.uint32(162).fork()).join();\n }\n if (message.cropId !== \"\") {\n writer.uint32(170).string(message.cropId);\n }\n if (message.robotRuntime240v !== 0) {\n writer.uint32(176).uint32(message.robotRuntime240v);\n }\n if (message.laserState !== undefined) {\n LaserStateList.encode(message.laserState, writer.uint32(186).fork()).join();\n }\n if (message.laserChangeTimes !== undefined) {\n LaserChangeTimes.encode(message.laserChangeTimes, writer.uint32(194).fork()).join();\n }\n Object.entries(message.hostSerials).forEach(([key, value]) => {\n HealthLog_HostSerialsEntry.encode({ key: key as any, value }, writer.uint32(202).fork()).join();\n });\n Object.entries(message.featureFlags).forEach(([key, value]) => {\n HealthLog_FeatureFlagsEntry.encode({ key: key as any, value }, writer.uint32(210).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HealthLog {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHealthLog();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.alarms.push(AlarmRow.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.location = Location.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.model = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.models.push(reader.string());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.performance = Performance.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.reportedAt = longToNumber(reader.int64());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.robotSerial = reader.string();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.status = reader.int32() as any;\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.statusChangedAt = longToNumber(reader.int64());\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.p2p = reader.string();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.softwareVersion = reader.string();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.targetVersion = reader.string();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.targetVersionReady = reader.bool();\n continue;\n case 16:\n if (tag !== 130) {\n break;\n }\n\n message.statusMessage = reader.string();\n continue;\n case 17:\n if (tag !== 138) {\n break;\n }\n\n const entry17 = HealthLog_MetricTotalsEntry.decode(reader, reader.uint32());\n if (entry17.value !== undefined) {\n message.metricTotals[entry17.key] = entry17.value;\n }\n continue;\n case 18:\n if (tag !== 146) {\n break;\n }\n\n message.alarmList.push(AlarmRow1.decode(reader, reader.uint32()));\n continue;\n case 19:\n if (tag !== 154) {\n break;\n }\n\n message.fieldConfig = FieldConfig.decode(reader, reader.uint32());\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n\n message.metrics = Metrics.decode(reader, reader.uint32());\n continue;\n case 21:\n if (tag !== 170) {\n break;\n }\n\n message.cropId = reader.string();\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n\n message.robotRuntime240v = reader.uint32();\n continue;\n case 23:\n if (tag !== 186) {\n break;\n }\n\n message.laserState = LaserStateList.decode(reader, reader.uint32());\n continue;\n case 24:\n if (tag !== 194) {\n break;\n }\n\n message.laserChangeTimes = LaserChangeTimes.decode(reader, reader.uint32());\n continue;\n case 25:\n if (tag !== 202) {\n break;\n }\n\n const entry25 = HealthLog_HostSerialsEntry.decode(reader, reader.uint32());\n if (entry25.value !== undefined) {\n message.hostSerials[entry25.key] = entry25.value;\n }\n continue;\n case 26:\n if (tag !== 210) {\n break;\n }\n\n const entry26 = HealthLog_FeatureFlagsEntry.decode(reader, reader.uint32());\n if (entry26.value !== undefined) {\n message.featureFlags[entry26.key] = entry26.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HealthLog {\n return {\n alarms: globalThis.Array.isArray(object?.alarms) ? object.alarms.map((e: any) => AlarmRow.fromJSON(e)) : [],\n location: isSet(object.location) ? Location.fromJSON(object.location) : undefined,\n model: isSet(object.model) ? globalThis.String(object.model) : \"\",\n models: globalThis.Array.isArray(object?.models) ? object.models.map((e: any) => globalThis.String(e)) : [],\n performance: isSet(object.performance) ? Performance.fromJSON(object.performance) : undefined,\n reportedAt: isSet(object.reportedAt) ? globalThis.Number(object.reportedAt) : 0,\n robotSerial: isSet(object.robotSerial) ? globalThis.String(object.robotSerial) : \"\",\n status: isSet(object.status) ? statusFromJSON(object.status) : 0,\n statusChangedAt: isSet(object.statusChangedAt) ? globalThis.Number(object.statusChangedAt) : 0,\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n p2p: isSet(object.p2p) ? globalThis.String(object.p2p) : \"\",\n softwareVersion: isSet(object.softwareVersion) ? globalThis.String(object.softwareVersion) : \"\",\n targetVersion: isSet(object.targetVersion) ? globalThis.String(object.targetVersion) : \"\",\n targetVersionReady: isSet(object.targetVersionReady) ? globalThis.Boolean(object.targetVersionReady) : false,\n statusMessage: isSet(object.statusMessage) ? globalThis.String(object.statusMessage) : \"\",\n metricTotals: isObject(object.metricTotals)\n ? Object.entries(object.metricTotals).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n alarmList: globalThis.Array.isArray(object?.alarmList)\n ? object.alarmList.map((e: any) => AlarmRow1.fromJSON(e))\n : [],\n fieldConfig: isSet(object.fieldConfig) ? FieldConfig.fromJSON(object.fieldConfig) : undefined,\n metrics: isSet(object.metrics) ? Metrics.fromJSON(object.metrics) : undefined,\n cropId: isSet(object.cropId) ? globalThis.String(object.cropId) : \"\",\n robotRuntime240v: isSet(object.robotRuntime240v) ? globalThis.Number(object.robotRuntime240v) : 0,\n laserState: isSet(object.laserState) ? LaserStateList.fromJSON(object.laserState) : undefined,\n laserChangeTimes: isSet(object.laserChangeTimes) ? LaserChangeTimes.fromJSON(object.laserChangeTimes) : undefined,\n hostSerials: isObject(object.hostSerials)\n ? Object.entries(object.hostSerials).reduce<{ [key: string]: string }>((acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n }, {})\n : {},\n featureFlags: isObject(object.featureFlags)\n ? Object.entries(object.featureFlags).reduce<{ [key: string]: boolean }>((acc, [key, value]) => {\n acc[key] = Boolean(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: HealthLog): unknown {\n const obj: any = {};\n if (message.alarms?.length) {\n obj.alarms = message.alarms.map((e) => AlarmRow.toJSON(e));\n }\n if (message.location !== undefined) {\n obj.location = Location.toJSON(message.location);\n }\n if (message.model !== \"\") {\n obj.model = message.model;\n }\n if (message.models?.length) {\n obj.models = message.models;\n }\n if (message.performance !== undefined) {\n obj.performance = Performance.toJSON(message.performance);\n }\n if (message.reportedAt !== 0) {\n obj.reportedAt = Math.round(message.reportedAt);\n }\n if (message.robotSerial !== \"\") {\n obj.robotSerial = message.robotSerial;\n }\n if (message.status !== 0) {\n obj.status = statusToJSON(message.status);\n }\n if (message.statusChangedAt !== 0) {\n obj.statusChangedAt = Math.round(message.statusChangedAt);\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.p2p !== \"\") {\n obj.p2p = message.p2p;\n }\n if (message.softwareVersion !== \"\") {\n obj.softwareVersion = message.softwareVersion;\n }\n if (message.targetVersion !== \"\") {\n obj.targetVersion = message.targetVersion;\n }\n if (message.targetVersionReady !== false) {\n obj.targetVersionReady = message.targetVersionReady;\n }\n if (message.statusMessage !== \"\") {\n obj.statusMessage = message.statusMessage;\n }\n if (message.metricTotals) {\n const entries = Object.entries(message.metricTotals);\n if (entries.length > 0) {\n obj.metricTotals = {};\n entries.forEach(([k, v]) => {\n obj.metricTotals[k] = Math.round(v);\n });\n }\n }\n if (message.alarmList?.length) {\n obj.alarmList = message.alarmList.map((e) => AlarmRow1.toJSON(e));\n }\n if (message.fieldConfig !== undefined) {\n obj.fieldConfig = FieldConfig.toJSON(message.fieldConfig);\n }\n if (message.metrics !== undefined) {\n obj.metrics = Metrics.toJSON(message.metrics);\n }\n if (message.cropId !== \"\") {\n obj.cropId = message.cropId;\n }\n if (message.robotRuntime240v !== 0) {\n obj.robotRuntime240v = Math.round(message.robotRuntime240v);\n }\n if (message.laserState !== undefined) {\n obj.laserState = LaserStateList.toJSON(message.laserState);\n }\n if (message.laserChangeTimes !== undefined) {\n obj.laserChangeTimes = LaserChangeTimes.toJSON(message.laserChangeTimes);\n }\n if (message.hostSerials) {\n const entries = Object.entries(message.hostSerials);\n if (entries.length > 0) {\n obj.hostSerials = {};\n entries.forEach(([k, v]) => {\n obj.hostSerials[k] = v;\n });\n }\n }\n if (message.featureFlags) {\n const entries = Object.entries(message.featureFlags);\n if (entries.length > 0) {\n obj.featureFlags = {};\n entries.forEach(([k, v]) => {\n obj.featureFlags[k] = v;\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): HealthLog {\n return HealthLog.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): HealthLog {\n const message = createBaseHealthLog();\n message.alarms = object.alarms?.map((e) => AlarmRow.fromPartial(e)) || [];\n message.location = (object.location !== undefined && object.location !== null)\n ? Location.fromPartial(object.location)\n : undefined;\n message.model = object.model ?? \"\";\n message.models = object.models?.map((e) => e) || [];\n message.performance = (object.performance !== undefined && object.performance !== null)\n ? Performance.fromPartial(object.performance)\n : undefined;\n message.reportedAt = object.reportedAt ?? 0;\n message.robotSerial = object.robotSerial ?? \"\";\n message.status = object.status ?? 0;\n message.statusChangedAt = object.statusChangedAt ?? 0;\n message.crop = object.crop ?? \"\";\n message.p2p = object.p2p ?? \"\";\n message.softwareVersion = object.softwareVersion ?? \"\";\n message.targetVersion = object.targetVersion ?? \"\";\n message.targetVersionReady = object.targetVersionReady ?? false;\n message.statusMessage = object.statusMessage ?? \"\";\n message.metricTotals = Object.entries(object.metricTotals ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n message.alarmList = object.alarmList?.map((e) => AlarmRow1.fromPartial(e)) || [];\n message.fieldConfig = (object.fieldConfig !== undefined && object.fieldConfig !== null)\n ? FieldConfig.fromPartial(object.fieldConfig)\n : undefined;\n message.metrics = (object.metrics !== undefined && object.metrics !== null)\n ? Metrics.fromPartial(object.metrics)\n : undefined;\n message.cropId = object.cropId ?? \"\";\n message.robotRuntime240v = object.robotRuntime240v ?? 0;\n message.laserState = (object.laserState !== undefined && object.laserState !== null)\n ? LaserStateList.fromPartial(object.laserState)\n : undefined;\n message.laserChangeTimes = (object.laserChangeTimes !== undefined && object.laserChangeTimes !== null)\n ? LaserChangeTimes.fromPartial(object.laserChangeTimes)\n : undefined;\n message.hostSerials = Object.entries(object.hostSerials ?? {}).reduce<{ [key: string]: string }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.String(value);\n }\n return acc;\n },\n {},\n );\n message.featureFlags = Object.entries(object.featureFlags ?? {}).reduce<{ [key: string]: boolean }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Boolean(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseHealthLog_MetricTotalsEntry(): HealthLog_MetricTotalsEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const HealthLog_MetricTotalsEntry: MessageFns = {\n encode(message: HealthLog_MetricTotalsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(16).uint64(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HealthLog_MetricTotalsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHealthLog_MetricTotalsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.value = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HealthLog_MetricTotalsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: HealthLog_MetricTotalsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = Math.round(message.value);\n }\n return obj;\n },\n\n create, I>>(base?: I): HealthLog_MetricTotalsEntry {\n return HealthLog_MetricTotalsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): HealthLog_MetricTotalsEntry {\n const message = createBaseHealthLog_MetricTotalsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseHealthLog_HostSerialsEntry(): HealthLog_HostSerialsEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const HealthLog_HostSerialsEntry: MessageFns = {\n encode(message: HealthLog_HostSerialsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HealthLog_HostSerialsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHealthLog_HostSerialsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HealthLog_HostSerialsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n };\n },\n\n toJSON(message: HealthLog_HostSerialsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(base?: I): HealthLog_HostSerialsEntry {\n return HealthLog_HostSerialsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): HealthLog_HostSerialsEntry {\n const message = createBaseHealthLog_HostSerialsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseHealthLog_FeatureFlagsEntry(): HealthLog_FeatureFlagsEntry {\n return { key: \"\", value: false };\n}\n\nexport const HealthLog_FeatureFlagsEntry: MessageFns = {\n encode(message: HealthLog_FeatureFlagsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== false) {\n writer.uint32(16).bool(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HealthLog_FeatureFlagsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHealthLog_FeatureFlagsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.value = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HealthLog_FeatureFlagsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Boolean(object.value) : false,\n };\n },\n\n toJSON(message: HealthLog_FeatureFlagsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== false) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(base?: I): HealthLog_FeatureFlagsEntry {\n return HealthLog_FeatureFlagsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): HealthLog_FeatureFlagsEntry {\n const message = createBaseHealthLog_FeatureFlagsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? false;\n return message;\n },\n};\n\nfunction createBaseHistoryResponse(): HistoryResponse {\n return { logs: [], queryLimitReached: false };\n}\n\nexport const HistoryResponse: MessageFns = {\n encode(message: HistoryResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.logs) {\n HealthLog.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.queryLimitReached !== false) {\n writer.uint32(16).bool(message.queryLimitReached);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): HistoryResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHistoryResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.logs.push(HealthLog.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.queryLimitReached = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): HistoryResponse {\n return {\n logs: globalThis.Array.isArray(object?.logs) ? object.logs.map((e: any) => HealthLog.fromJSON(e)) : [],\n queryLimitReached: isSet(object.queryLimitReached) ? globalThis.Boolean(object.queryLimitReached) : false,\n };\n },\n\n toJSON(message: HistoryResponse): unknown {\n const obj: any = {};\n if (message.logs?.length) {\n obj.logs = message.logs.map((e) => HealthLog.toJSON(e));\n }\n if (message.queryLimitReached !== false) {\n obj.queryLimitReached = message.queryLimitReached;\n }\n return obj;\n },\n\n create, I>>(base?: I): HistoryResponse {\n return HistoryResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): HistoryResponse {\n const message = createBaseHistoryResponse();\n message.logs = object.logs?.map((e) => HealthLog.fromPartial(e)) || [];\n message.queryLimitReached = object.queryLimitReached ?? false;\n return message;\n },\n};\n\nfunction createBaseIssueReport(): IssueReport {\n return {\n description: \"\",\n phoneNumber: \"\",\n robotSerial: \"\",\n reportedAt: 0,\n crop: \"\",\n modelId: \"\",\n softwareVersion: \"\",\n cropId: \"\",\n };\n}\n\nexport const IssueReport: MessageFns = {\n encode(message: IssueReport, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.description !== \"\") {\n writer.uint32(10).string(message.description);\n }\n if (message.phoneNumber !== \"\") {\n writer.uint32(18).string(message.phoneNumber);\n }\n if (message.robotSerial !== \"\") {\n writer.uint32(26).string(message.robotSerial);\n }\n if (message.reportedAt !== 0) {\n writer.uint32(32).int64(message.reportedAt);\n }\n if (message.crop !== \"\") {\n writer.uint32(42).string(message.crop);\n }\n if (message.modelId !== \"\") {\n writer.uint32(50).string(message.modelId);\n }\n if (message.softwareVersion !== \"\") {\n writer.uint32(58).string(message.softwareVersion);\n }\n if (message.cropId !== \"\") {\n writer.uint32(66).string(message.cropId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): IssueReport {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseIssueReport();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.description = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.phoneNumber = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.robotSerial = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.reportedAt = longToNumber(reader.int64());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.modelId = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.softwareVersion = reader.string();\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.cropId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): IssueReport {\n return {\n description: isSet(object.description) ? globalThis.String(object.description) : \"\",\n phoneNumber: isSet(object.phoneNumber) ? globalThis.String(object.phoneNumber) : \"\",\n robotSerial: isSet(object.robotSerial) ? globalThis.String(object.robotSerial) : \"\",\n reportedAt: isSet(object.reportedAt) ? globalThis.Number(object.reportedAt) : 0,\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n modelId: isSet(object.modelId) ? globalThis.String(object.modelId) : \"\",\n softwareVersion: isSet(object.softwareVersion) ? globalThis.String(object.softwareVersion) : \"\",\n cropId: isSet(object.cropId) ? globalThis.String(object.cropId) : \"\",\n };\n },\n\n toJSON(message: IssueReport): unknown {\n const obj: any = {};\n if (message.description !== \"\") {\n obj.description = message.description;\n }\n if (message.phoneNumber !== \"\") {\n obj.phoneNumber = message.phoneNumber;\n }\n if (message.robotSerial !== \"\") {\n obj.robotSerial = message.robotSerial;\n }\n if (message.reportedAt !== 0) {\n obj.reportedAt = Math.round(message.reportedAt);\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.modelId !== \"\") {\n obj.modelId = message.modelId;\n }\n if (message.softwareVersion !== \"\") {\n obj.softwareVersion = message.softwareVersion;\n }\n if (message.cropId !== \"\") {\n obj.cropId = message.cropId;\n }\n return obj;\n },\n\n create, I>>(base?: I): IssueReport {\n return IssueReport.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): IssueReport {\n const message = createBaseIssueReport();\n message.description = object.description ?? \"\";\n message.phoneNumber = object.phoneNumber ?? \"\";\n message.robotSerial = object.robotSerial ?? \"\";\n message.reportedAt = object.reportedAt ?? 0;\n message.crop = object.crop ?? \"\";\n message.modelId = object.modelId ?? \"\";\n message.softwareVersion = object.softwareVersion ?? \"\";\n message.cropId = object.cropId ?? \"\";\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: veselka/pagination.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"carbon.veselka.pagination\";\n\nexport enum ResultsCountType {\n UNKNOWN = 0,\n /** PRECISE - the exact number of results that exist */\n PRECISE = 1,\n /** ESTIMATED - a rough estimate of results */\n ESTIMATED = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function resultsCountTypeFromJSON(object: any): ResultsCountType {\n switch (object) {\n case 0:\n case \"UNKNOWN\":\n return ResultsCountType.UNKNOWN;\n case 1:\n case \"PRECISE\":\n return ResultsCountType.PRECISE;\n case 2:\n case \"ESTIMATED\":\n return ResultsCountType.ESTIMATED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ResultsCountType.UNRECOGNIZED;\n }\n}\n\nexport function resultsCountTypeToJSON(object: ResultsCountType): string {\n switch (object) {\n case ResultsCountType.UNKNOWN:\n return \"UNKNOWN\";\n case ResultsCountType.PRECISE:\n return \"PRECISE\";\n case ResultsCountType.ESTIMATED:\n return \"ESTIMATED\";\n case ResultsCountType.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface Pagination {\n totalRecords: number;\n countType: ResultsCountType;\n currentPage: number;\n totalPages: number;\n}\n\nfunction createBasePagination(): Pagination {\n return { totalRecords: 0, countType: 0, currentPage: 0, totalPages: 0 };\n}\n\nexport const Pagination: MessageFns = {\n encode(message: Pagination, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.totalRecords !== 0) {\n writer.uint32(8).int32(message.totalRecords);\n }\n if (message.countType !== 0) {\n writer.uint32(16).int32(message.countType);\n }\n if (message.currentPage !== 0) {\n writer.uint32(24).int32(message.currentPage);\n }\n if (message.totalPages !== 0) {\n writer.uint32(32).int32(message.totalPages);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Pagination {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePagination();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.totalRecords = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.countType = reader.int32() as any;\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.currentPage = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.totalPages = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Pagination {\n return {\n totalRecords: isSet(object.totalRecords) ? globalThis.Number(object.totalRecords) : 0,\n countType: isSet(object.countType) ? resultsCountTypeFromJSON(object.countType) : 0,\n currentPage: isSet(object.currentPage) ? globalThis.Number(object.currentPage) : 0,\n totalPages: isSet(object.totalPages) ? globalThis.Number(object.totalPages) : 0,\n };\n },\n\n toJSON(message: Pagination): unknown {\n const obj: any = {};\n if (message.totalRecords !== 0) {\n obj.totalRecords = Math.round(message.totalRecords);\n }\n if (message.countType !== 0) {\n obj.countType = resultsCountTypeToJSON(message.countType);\n }\n if (message.currentPage !== 0) {\n obj.currentPage = Math.round(message.currentPage);\n }\n if (message.totalPages !== 0) {\n obj.totalPages = Math.round(message.totalPages);\n }\n return obj;\n },\n\n create, I>>(base?: I): Pagination {\n return Pagination.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Pagination {\n const message = createBasePagination();\n message.totalRecords = object.totalRecords ?? 0;\n message.countType = object.countType ?? 0;\n message.currentPage = object.currentPage ?? 0;\n message.totalPages = object.totalPages ?? 0;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: veselka/label_point.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Pagination } from \"./pagination\";\n\nexport const protobufPackage = \"carbon.veselka.label_point\";\n\nexport interface Image {\n id: string;\n /** s3 url */\n url: string;\n /** Pixels per centimeter of the image */\n ppcm: number;\n}\n\nexport interface LabelPoint {\n id: string;\n chipId: string;\n x: number;\n y: number;\n radius: number;\n image: Image | undefined;\n}\n\nexport interface ListLabelPointsResponse {\n data: LabelPoint[];\n pagination: Pagination | undefined;\n}\n\nfunction createBaseImage(): Image {\n return { id: \"\", url: \"\", ppcm: 0 };\n}\n\nexport const Image: MessageFns = {\n encode(message: Image, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.url !== \"\") {\n writer.uint32(18).string(message.url);\n }\n if (message.ppcm !== 0) {\n writer.uint32(37).float(message.ppcm);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Image {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.url = reader.string();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.ppcm = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Image {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n url: isSet(object.url) ? globalThis.String(object.url) : \"\",\n ppcm: isSet(object.ppcm) ? globalThis.Number(object.ppcm) : 0,\n };\n },\n\n toJSON(message: Image): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.url !== \"\") {\n obj.url = message.url;\n }\n if (message.ppcm !== 0) {\n obj.ppcm = message.ppcm;\n }\n return obj;\n },\n\n create, I>>(base?: I): Image {\n return Image.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Image {\n const message = createBaseImage();\n message.id = object.id ?? \"\";\n message.url = object.url ?? \"\";\n message.ppcm = object.ppcm ?? 0;\n return message;\n },\n};\n\nfunction createBaseLabelPoint(): LabelPoint {\n return { id: \"\", chipId: \"\", x: 0, y: 0, radius: 0, image: undefined };\n}\n\nexport const LabelPoint: MessageFns = {\n encode(message: LabelPoint, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.chipId !== \"\") {\n writer.uint32(18).string(message.chipId);\n }\n if (message.x !== 0) {\n writer.uint32(29).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(37).float(message.y);\n }\n if (message.radius !== 0) {\n writer.uint32(45).float(message.radius);\n }\n if (message.image !== undefined) {\n Image.encode(message.image, writer.uint32(50).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LabelPoint {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLabelPoint();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.chipId = reader.string();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.x = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.y = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n\n message.radius = reader.float();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.image = Image.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LabelPoint {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n chipId: isSet(object.chipId) ? globalThis.String(object.chipId) : \"\",\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n radius: isSet(object.radius) ? globalThis.Number(object.radius) : 0,\n image: isSet(object.image) ? Image.fromJSON(object.image) : undefined,\n };\n },\n\n toJSON(message: LabelPoint): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.chipId !== \"\") {\n obj.chipId = message.chipId;\n }\n if (message.x !== 0) {\n obj.x = message.x;\n }\n if (message.y !== 0) {\n obj.y = message.y;\n }\n if (message.radius !== 0) {\n obj.radius = message.radius;\n }\n if (message.image !== undefined) {\n obj.image = Image.toJSON(message.image);\n }\n return obj;\n },\n\n create, I>>(base?: I): LabelPoint {\n return LabelPoint.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LabelPoint {\n const message = createBaseLabelPoint();\n message.id = object.id ?? \"\";\n message.chipId = object.chipId ?? \"\";\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n message.radius = object.radius ?? 0;\n message.image = (object.image !== undefined && object.image !== null) ? Image.fromPartial(object.image) : undefined;\n return message;\n },\n};\n\nfunction createBaseListLabelPointsResponse(): ListLabelPointsResponse {\n return { data: [], pagination: undefined };\n}\n\nexport const ListLabelPointsResponse: MessageFns = {\n encode(message: ListLabelPointsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.data) {\n LabelPoint.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.pagination !== undefined) {\n Pagination.encode(message.pagination, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListLabelPointsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListLabelPointsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.data.push(LabelPoint.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.pagination = Pagination.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListLabelPointsResponse {\n return {\n data: globalThis.Array.isArray(object?.data) ? object.data.map((e: any) => LabelPoint.fromJSON(e)) : [],\n pagination: isSet(object.pagination) ? Pagination.fromJSON(object.pagination) : undefined,\n };\n },\n\n toJSON(message: ListLabelPointsResponse): unknown {\n const obj: any = {};\n if (message.data?.length) {\n obj.data = message.data.map((e) => LabelPoint.toJSON(e));\n }\n if (message.pagination !== undefined) {\n obj.pagination = Pagination.toJSON(message.pagination);\n }\n return obj;\n },\n\n create, I>>(base?: I): ListLabelPointsResponse {\n return ListLabelPointsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListLabelPointsResponse {\n const message = createBaseListLabelPointsResponse();\n message.data = object.data?.map((e) => LabelPoint.fromPartial(e)) || [];\n message.pagination = (object.pagination !== undefined && object.pagination !== null)\n ? Pagination.fromPartial(object.pagination)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/messages.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.messages\";\n\nexport interface Message {\n db: DB | undefined;\n message: string;\n authorUserId: string;\n authorRobotId: number;\n recipientUserId: string;\n recipientCustomerId: number;\n recipientRobotId: number;\n authorUserEmail: string;\n authorUserName: string;\n}\n\nexport interface MessagesResponse {\n page: number;\n limit: number;\n messages: Message[];\n}\n\nfunction createBaseMessage(): Message {\n return {\n db: undefined,\n message: \"\",\n authorUserId: \"\",\n authorRobotId: 0,\n recipientUserId: \"\",\n recipientCustomerId: 0,\n recipientRobotId: 0,\n authorUserEmail: \"\",\n authorUserName: \"\",\n };\n}\n\nexport const Message: MessageFns = {\n encode(message: Message, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.message !== \"\") {\n writer.uint32(18).string(message.message);\n }\n if (message.authorUserId !== \"\") {\n writer.uint32(26).string(message.authorUserId);\n }\n if (message.authorRobotId !== 0) {\n writer.uint32(32).int64(message.authorRobotId);\n }\n if (message.recipientUserId !== \"\") {\n writer.uint32(42).string(message.recipientUserId);\n }\n if (message.recipientCustomerId !== 0) {\n writer.uint32(48).int64(message.recipientCustomerId);\n }\n if (message.recipientRobotId !== 0) {\n writer.uint32(56).int64(message.recipientRobotId);\n }\n if (message.authorUserEmail !== \"\") {\n writer.uint32(66).string(message.authorUserEmail);\n }\n if (message.authorUserName !== \"\") {\n writer.uint32(74).string(message.authorUserName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Message {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.message = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.authorUserId = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.authorRobotId = longToNumber(reader.int64());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.recipientUserId = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.recipientCustomerId = longToNumber(reader.int64());\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.recipientRobotId = longToNumber(reader.int64());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.authorUserEmail = reader.string();\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.authorUserName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Message {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n message: isSet(object.message) ? globalThis.String(object.message) : \"\",\n authorUserId: isSet(object.authorUserId) ? globalThis.String(object.authorUserId) : \"\",\n authorRobotId: isSet(object.authorRobotId) ? globalThis.Number(object.authorRobotId) : 0,\n recipientUserId: isSet(object.recipientUserId) ? globalThis.String(object.recipientUserId) : \"\",\n recipientCustomerId: isSet(object.recipientCustomerId) ? globalThis.Number(object.recipientCustomerId) : 0,\n recipientRobotId: isSet(object.recipientRobotId) ? globalThis.Number(object.recipientRobotId) : 0,\n authorUserEmail: isSet(object.authorUserEmail) ? globalThis.String(object.authorUserEmail) : \"\",\n authorUserName: isSet(object.authorUserName) ? globalThis.String(object.authorUserName) : \"\",\n };\n },\n\n toJSON(message: Message): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.message !== \"\") {\n obj.message = message.message;\n }\n if (message.authorUserId !== \"\") {\n obj.authorUserId = message.authorUserId;\n }\n if (message.authorRobotId !== 0) {\n obj.authorRobotId = Math.round(message.authorRobotId);\n }\n if (message.recipientUserId !== \"\") {\n obj.recipientUserId = message.recipientUserId;\n }\n if (message.recipientCustomerId !== 0) {\n obj.recipientCustomerId = Math.round(message.recipientCustomerId);\n }\n if (message.recipientRobotId !== 0) {\n obj.recipientRobotId = Math.round(message.recipientRobotId);\n }\n if (message.authorUserEmail !== \"\") {\n obj.authorUserEmail = message.authorUserEmail;\n }\n if (message.authorUserName !== \"\") {\n obj.authorUserName = message.authorUserName;\n }\n return obj;\n },\n\n create, I>>(base?: I): Message {\n return Message.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Message {\n const message = createBaseMessage();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.message = object.message ?? \"\";\n message.authorUserId = object.authorUserId ?? \"\";\n message.authorRobotId = object.authorRobotId ?? 0;\n message.recipientUserId = object.recipientUserId ?? \"\";\n message.recipientCustomerId = object.recipientCustomerId ?? 0;\n message.recipientRobotId = object.recipientRobotId ?? 0;\n message.authorUserEmail = object.authorUserEmail ?? \"\";\n message.authorUserName = object.authorUserName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseMessagesResponse(): MessagesResponse {\n return { page: 0, limit: 0, messages: [] };\n}\n\nexport const MessagesResponse: MessageFns = {\n encode(message: MessagesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.page !== 0) {\n writer.uint32(16).int64(message.page);\n }\n if (message.limit !== 0) {\n writer.uint32(24).int64(message.limit);\n }\n for (const v of message.messages) {\n Message.encode(v!, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MessagesResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessagesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.page = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.limit = longToNumber(reader.int64());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.messages.push(Message.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MessagesResponse {\n return {\n page: isSet(object.page) ? globalThis.Number(object.page) : 0,\n limit: isSet(object.limit) ? globalThis.Number(object.limit) : 0,\n messages: globalThis.Array.isArray(object?.messages) ? object.messages.map((e: any) => Message.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: MessagesResponse): unknown {\n const obj: any = {};\n if (message.page !== 0) {\n obj.page = Math.round(message.page);\n }\n if (message.limit !== 0) {\n obj.limit = Math.round(message.limit);\n }\n if (message.messages?.length) {\n obj.messages = message.messages.map((e) => Message.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): MessagesResponse {\n return MessagesResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): MessagesResponse {\n const message = createBaseMessagesResponse();\n message.page = object.page ?? 0;\n message.limit = object.limit ?? 0;\n message.messages = object.messages?.map((e) => Message.fromPartial(e)) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","import { auth } from \"./auth\";\nimport { entries, isEmpty } from \"portal/utils/objects\";\n\nexport enum Method {\n DELETE = \"DELETE\",\n GET = \"GET\",\n PATCH = \"PATCH\",\n POST = \"POST\",\n PUT = \"PUT\",\n}\n\nexport interface Pagination {\n limit?: number;\n page?: number;\n sort?: string;\n}\n\n// query string (?foo=1&bar=2)\nexport interface Query {\n [index: string]: string | string[] | boolean | number;\n}\n\n/**\n * Converts an Object of key/value pairs into a URL encoded query string\n */\nexport const buildQueryString = (query?: Query): string => {\n if (isEmpty(query)) {\n return \"\";\n }\n const result = entries(query).map(([key, value]) => {\n const encodedValue = Array.isArray(value) ? value.join(\",\") : String(value);\n return `${key}=${encodeURIComponent(encodedValue)}`;\n });\n\n return `?${result.join(\"&\")}`;\n};\n\nexport interface Download {\n file: Blob;\n name: string;\n}\n\ntype ProgressCallback = (progress: number) => void;\nclass ProgressPromise extends Promise {\n private progressCallbacks: ProgressCallback[];\n\n constructor(\n executor: (\n resolve: (result: T) => void,\n reject: (error: any) => void,\n progress: ProgressCallback\n ) => void\n ) {\n super((resolve, reject) =>\n executor(resolve, reject, (progress: number) => {\n try {\n for (const callback of this.progressCallbacks) {\n callback(progress);\n }\n } catch (error) {\n reject(error);\n }\n })\n );\n this.progressCallbacks = [];\n }\n\n public progress(callback: ProgressCallback): ProgressPromise {\n this.progressCallbacks.push(callback);\n return this;\n }\n}\n\n/**\n * get method which tracks progress\n */\nexport const download = (\n path: string,\n query?: Query\n): ProgressPromise => {\n const xhr = new XMLHttpRequest();\n return new ProgressPromise(async (resolve, reject, progress) => {\n xhr.addEventListener(\"progress\", (event) => {\n if (event.lengthComputable) {\n progress((event.loaded / event.total) * 100);\n }\n });\n xhr.addEventListener(\"error\", reject);\n xhr.addEventListener(\"abort\", reject);\n xhr.addEventListener(\"load\", () => {\n resolve({\n file: xhr.response,\n name:\n xhr\n .getResponseHeader(\"Content-Disposition\")\n ?.replace(\"attachment; filename=\", \"\") ?? \"unknown\",\n });\n });\n xhr.open(Method.GET, `/v1${path}${buildQueryString(query)}`, true);\n const accessToken = await auth.getAccessTokenSilently();\n xhr.setRequestHeader(\"Authorization\", `Bearer ${accessToken}`);\n xhr.responseType = \"blob\";\n xhr.send(undefined);\n });\n};\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: frontend/profile_sync.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"carbon.frontend.profile_sync\";\n\nexport enum ProfileType {\n ALMANAC = 0,\n DISCRIMINATOR = 1,\n MODELINATOR = 3,\n BANDING = 4,\n THINNING = 5,\n TARGET_VELOCITY_ESTIMATOR = 6,\n CATEGORY_COLLECTION = 7,\n CATEGORY = 8,\n UNRECOGNIZED = -1,\n}\n\nexport function profileTypeFromJSON(object: any): ProfileType {\n switch (object) {\n case 0:\n case \"ALMANAC\":\n return ProfileType.ALMANAC;\n case 1:\n case \"DISCRIMINATOR\":\n return ProfileType.DISCRIMINATOR;\n case 3:\n case \"MODELINATOR\":\n return ProfileType.MODELINATOR;\n case 4:\n case \"BANDING\":\n return ProfileType.BANDING;\n case 5:\n case \"THINNING\":\n return ProfileType.THINNING;\n case 6:\n case \"TARGET_VELOCITY_ESTIMATOR\":\n return ProfileType.TARGET_VELOCITY_ESTIMATOR;\n case 7:\n case \"CATEGORY_COLLECTION\":\n return ProfileType.CATEGORY_COLLECTION;\n case 8:\n case \"CATEGORY\":\n return ProfileType.CATEGORY;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ProfileType.UNRECOGNIZED;\n }\n}\n\nexport function profileTypeToJSON(object: ProfileType): string {\n switch (object) {\n case ProfileType.ALMANAC:\n return \"ALMANAC\";\n case ProfileType.DISCRIMINATOR:\n return \"DISCRIMINATOR\";\n case ProfileType.MODELINATOR:\n return \"MODELINATOR\";\n case ProfileType.BANDING:\n return \"BANDING\";\n case ProfileType.THINNING:\n return \"THINNING\";\n case ProfileType.TARGET_VELOCITY_ESTIMATOR:\n return \"TARGET_VELOCITY_ESTIMATOR\";\n case ProfileType.CATEGORY_COLLECTION:\n return \"CATEGORY_COLLECTION\";\n case ProfileType.CATEGORY:\n return \"CATEGORY\";\n case ProfileType.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface ProfileSyncData {\n profileType: ProfileType;\n lastUpdatedTsMs: number;\n deleted: boolean;\n protected: boolean;\n}\n\nfunction createBaseProfileSyncData(): ProfileSyncData {\n return { profileType: 0, lastUpdatedTsMs: 0, deleted: false, protected: false };\n}\n\nexport const ProfileSyncData: MessageFns = {\n encode(message: ProfileSyncData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.profileType !== 0) {\n writer.uint32(8).int32(message.profileType);\n }\n if (message.lastUpdatedTsMs !== 0) {\n writer.uint32(16).int64(message.lastUpdatedTsMs);\n }\n if (message.deleted !== false) {\n writer.uint32(24).bool(message.deleted);\n }\n if (message.protected !== false) {\n writer.uint32(32).bool(message.protected);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ProfileSyncData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseProfileSyncData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.profileType = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.lastUpdatedTsMs = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.deleted = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.protected = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ProfileSyncData {\n return {\n profileType: isSet(object.profileType) ? profileTypeFromJSON(object.profileType) : 0,\n lastUpdatedTsMs: isSet(object.lastUpdatedTsMs) ? globalThis.Number(object.lastUpdatedTsMs) : 0,\n deleted: isSet(object.deleted) ? globalThis.Boolean(object.deleted) : false,\n protected: isSet(object.protected) ? globalThis.Boolean(object.protected) : false,\n };\n },\n\n toJSON(message: ProfileSyncData): unknown {\n const obj: any = {};\n if (message.profileType !== 0) {\n obj.profileType = profileTypeToJSON(message.profileType);\n }\n if (message.lastUpdatedTsMs !== 0) {\n obj.lastUpdatedTsMs = Math.round(message.lastUpdatedTsMs);\n }\n if (message.deleted !== false) {\n obj.deleted = message.deleted;\n }\n if (message.protected !== false) {\n obj.protected = message.protected;\n }\n return obj;\n },\n\n create, I>>(base?: I): ProfileSyncData {\n return ProfileSyncData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ProfileSyncData {\n const message = createBaseProfileSyncData();\n message.profileType = object.profileType ?? 0;\n message.lastUpdatedTsMs = object.lastUpdatedTsMs ?? 0;\n message.deleted = object.deleted ?? false;\n message.protected = object.protected ?? false;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: weed_tracking/weed_tracking.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"weed_tracking\";\n\nexport enum InvalidScoreReason {\n NONE = 0,\n ANOTHER_LASER_SHOOTING = 1,\n SCANNER_POSITION_INVALID = 2,\n WEED_ALREADY_KILLED = 3,\n WEED_SHOT_BY_ANOTHER_LASER = 4,\n WEED_OUT_OF_BAND = 5,\n NOT_A_WEED = 6,\n SCORE_NEGATIVE = 7,\n INTERSECTED_WITH_NONSHOOTABLE = 8,\n EXTERMINATION_FAILURES_EXCEEDED_MAX = 9,\n DETECTIONS_OVER_OPPORTUNITIES_BELOW_MIN = 10,\n UNRECOGNIZED = -1,\n}\n\nexport function invalidScoreReasonFromJSON(object: any): InvalidScoreReason {\n switch (object) {\n case 0:\n case \"NONE\":\n return InvalidScoreReason.NONE;\n case 1:\n case \"ANOTHER_LASER_SHOOTING\":\n return InvalidScoreReason.ANOTHER_LASER_SHOOTING;\n case 2:\n case \"SCANNER_POSITION_INVALID\":\n return InvalidScoreReason.SCANNER_POSITION_INVALID;\n case 3:\n case \"WEED_ALREADY_KILLED\":\n return InvalidScoreReason.WEED_ALREADY_KILLED;\n case 4:\n case \"WEED_SHOT_BY_ANOTHER_LASER\":\n return InvalidScoreReason.WEED_SHOT_BY_ANOTHER_LASER;\n case 5:\n case \"WEED_OUT_OF_BAND\":\n return InvalidScoreReason.WEED_OUT_OF_BAND;\n case 6:\n case \"NOT_A_WEED\":\n return InvalidScoreReason.NOT_A_WEED;\n case 7:\n case \"SCORE_NEGATIVE\":\n return InvalidScoreReason.SCORE_NEGATIVE;\n case 8:\n case \"INTERSECTED_WITH_NONSHOOTABLE\":\n return InvalidScoreReason.INTERSECTED_WITH_NONSHOOTABLE;\n case 9:\n case \"EXTERMINATION_FAILURES_EXCEEDED_MAX\":\n return InvalidScoreReason.EXTERMINATION_FAILURES_EXCEEDED_MAX;\n case 10:\n case \"DETECTIONS_OVER_OPPORTUNITIES_BELOW_MIN\":\n return InvalidScoreReason.DETECTIONS_OVER_OPPORTUNITIES_BELOW_MIN;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return InvalidScoreReason.UNRECOGNIZED;\n }\n}\n\nexport function invalidScoreReasonToJSON(object: InvalidScoreReason): string {\n switch (object) {\n case InvalidScoreReason.NONE:\n return \"NONE\";\n case InvalidScoreReason.ANOTHER_LASER_SHOOTING:\n return \"ANOTHER_LASER_SHOOTING\";\n case InvalidScoreReason.SCANNER_POSITION_INVALID:\n return \"SCANNER_POSITION_INVALID\";\n case InvalidScoreReason.WEED_ALREADY_KILLED:\n return \"WEED_ALREADY_KILLED\";\n case InvalidScoreReason.WEED_SHOT_BY_ANOTHER_LASER:\n return \"WEED_SHOT_BY_ANOTHER_LASER\";\n case InvalidScoreReason.WEED_OUT_OF_BAND:\n return \"WEED_OUT_OF_BAND\";\n case InvalidScoreReason.NOT_A_WEED:\n return \"NOT_A_WEED\";\n case InvalidScoreReason.SCORE_NEGATIVE:\n return \"SCORE_NEGATIVE\";\n case InvalidScoreReason.INTERSECTED_WITH_NONSHOOTABLE:\n return \"INTERSECTED_WITH_NONSHOOTABLE\";\n case InvalidScoreReason.EXTERMINATION_FAILURES_EXCEEDED_MAX:\n return \"EXTERMINATION_FAILURES_EXCEEDED_MAX\";\n case InvalidScoreReason.DETECTIONS_OVER_OPPORTUNITIES_BELOW_MIN:\n return \"DETECTIONS_OVER_OPPORTUNITIES_BELOW_MIN\";\n case InvalidScoreReason.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum KillStatus {\n STATUS_NOT_SHOT = 0,\n STATUS_BEING_SHOT = 1,\n STATUS_SHOT = 2,\n STATUS_PARTIALLY_SHOT = 3,\n STATUS_P2P_NOT_FOUND = 4,\n STATUS_ERROR = 5,\n STATUS_P2P_MISSING_CONTEXT = 6,\n UNRECOGNIZED = -1,\n}\n\nexport function killStatusFromJSON(object: any): KillStatus {\n switch (object) {\n case 0:\n case \"STATUS_NOT_SHOT\":\n return KillStatus.STATUS_NOT_SHOT;\n case 1:\n case \"STATUS_BEING_SHOT\":\n return KillStatus.STATUS_BEING_SHOT;\n case 2:\n case \"STATUS_SHOT\":\n return KillStatus.STATUS_SHOT;\n case 3:\n case \"STATUS_PARTIALLY_SHOT\":\n return KillStatus.STATUS_PARTIALLY_SHOT;\n case 4:\n case \"STATUS_P2P_NOT_FOUND\":\n return KillStatus.STATUS_P2P_NOT_FOUND;\n case 5:\n case \"STATUS_ERROR\":\n return KillStatus.STATUS_ERROR;\n case 6:\n case \"STATUS_P2P_MISSING_CONTEXT\":\n return KillStatus.STATUS_P2P_MISSING_CONTEXT;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return KillStatus.UNRECOGNIZED;\n }\n}\n\nexport function killStatusToJSON(object: KillStatus): string {\n switch (object) {\n case KillStatus.STATUS_NOT_SHOT:\n return \"STATUS_NOT_SHOT\";\n case KillStatus.STATUS_BEING_SHOT:\n return \"STATUS_BEING_SHOT\";\n case KillStatus.STATUS_SHOT:\n return \"STATUS_SHOT\";\n case KillStatus.STATUS_PARTIALLY_SHOT:\n return \"STATUS_PARTIALLY_SHOT\";\n case KillStatus.STATUS_P2P_NOT_FOUND:\n return \"STATUS_P2P_NOT_FOUND\";\n case KillStatus.STATUS_ERROR:\n return \"STATUS_ERROR\";\n case KillStatus.STATUS_P2P_MISSING_CONTEXT:\n return \"STATUS_P2P_MISSING_CONTEXT\";\n case KillStatus.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum DuplicateStatus {\n UNIQUE = 0,\n PRIMARY = 1,\n DUPLICATE = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function duplicateStatusFromJSON(object: any): DuplicateStatus {\n switch (object) {\n case 0:\n case \"UNIQUE\":\n return DuplicateStatus.UNIQUE;\n case 1:\n case \"PRIMARY\":\n return DuplicateStatus.PRIMARY;\n case 2:\n case \"DUPLICATE\":\n return DuplicateStatus.DUPLICATE;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return DuplicateStatus.UNRECOGNIZED;\n }\n}\n\nexport function duplicateStatusToJSON(object: DuplicateStatus): string {\n switch (object) {\n case DuplicateStatus.UNIQUE:\n return \"UNIQUE\";\n case DuplicateStatus.PRIMARY:\n return \"PRIMARY\";\n case DuplicateStatus.DUPLICATE:\n return \"DUPLICATE\";\n case DuplicateStatus.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum ThinningState {\n THINNING_UNSET = 0,\n THINNING_MARKED_FOR_THINNING = 1,\n THINNING_KEPT = 2,\n THINNING_IGNORED = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function thinningStateFromJSON(object: any): ThinningState {\n switch (object) {\n case 0:\n case \"THINNING_UNSET\":\n return ThinningState.THINNING_UNSET;\n case 1:\n case \"THINNING_MARKED_FOR_THINNING\":\n return ThinningState.THINNING_MARKED_FOR_THINNING;\n case 2:\n case \"THINNING_KEPT\":\n return ThinningState.THINNING_KEPT;\n case 3:\n case \"THINNING_IGNORED\":\n return ThinningState.THINNING_IGNORED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ThinningState.UNRECOGNIZED;\n }\n}\n\nexport function thinningStateToJSON(object: ThinningState): string {\n switch (object) {\n case ThinningState.THINNING_UNSET:\n return \"THINNING_UNSET\";\n case ThinningState.THINNING_MARKED_FOR_THINNING:\n return \"THINNING_MARKED_FOR_THINNING\";\n case ThinningState.THINNING_KEPT:\n return \"THINNING_KEPT\";\n case ThinningState.THINNING_IGNORED:\n return \"THINNING_IGNORED\";\n case ThinningState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum TargetableState {\n TARGET_NOT_IN_SCHEDULER = 0,\n TARGET_SCORED = 1,\n TARGET_INTERSECTS_NON_SHOOTABLE = 2,\n TARGET_TOO_MANY_FAILURES = 3,\n TARGET_DOO_TOO_LOW = 4,\n TARGET_IGNORED_FROM_ALMANAC = 5,\n TARGET_OUT_OF_BAND = 6,\n TARGET_AVOID_FROM_ALMANAC = 7,\n UNRECOGNIZED = -1,\n}\n\nexport function targetableStateFromJSON(object: any): TargetableState {\n switch (object) {\n case 0:\n case \"TARGET_NOT_IN_SCHEDULER\":\n return TargetableState.TARGET_NOT_IN_SCHEDULER;\n case 1:\n case \"TARGET_SCORED\":\n return TargetableState.TARGET_SCORED;\n case 2:\n case \"TARGET_INTERSECTS_NON_SHOOTABLE\":\n return TargetableState.TARGET_INTERSECTS_NON_SHOOTABLE;\n case 3:\n case \"TARGET_TOO_MANY_FAILURES\":\n return TargetableState.TARGET_TOO_MANY_FAILURES;\n case 4:\n case \"TARGET_DOO_TOO_LOW\":\n return TargetableState.TARGET_DOO_TOO_LOW;\n case 5:\n case \"TARGET_IGNORED_FROM_ALMANAC\":\n return TargetableState.TARGET_IGNORED_FROM_ALMANAC;\n case 6:\n case \"TARGET_OUT_OF_BAND\":\n return TargetableState.TARGET_OUT_OF_BAND;\n case 7:\n case \"TARGET_AVOID_FROM_ALMANAC\":\n return TargetableState.TARGET_AVOID_FROM_ALMANAC;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return TargetableState.UNRECOGNIZED;\n }\n}\n\nexport function targetableStateToJSON(object: TargetableState): string {\n switch (object) {\n case TargetableState.TARGET_NOT_IN_SCHEDULER:\n return \"TARGET_NOT_IN_SCHEDULER\";\n case TargetableState.TARGET_SCORED:\n return \"TARGET_SCORED\";\n case TargetableState.TARGET_INTERSECTS_NON_SHOOTABLE:\n return \"TARGET_INTERSECTS_NON_SHOOTABLE\";\n case TargetableState.TARGET_TOO_MANY_FAILURES:\n return \"TARGET_TOO_MANY_FAILURES\";\n case TargetableState.TARGET_DOO_TOO_LOW:\n return \"TARGET_DOO_TOO_LOW\";\n case TargetableState.TARGET_IGNORED_FROM_ALMANAC:\n return \"TARGET_IGNORED_FROM_ALMANAC\";\n case TargetableState.TARGET_OUT_OF_BAND:\n return \"TARGET_OUT_OF_BAND\";\n case TargetableState.TARGET_AVOID_FROM_ALMANAC:\n return \"TARGET_AVOID_FROM_ALMANAC\";\n case TargetableState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum Classification {\n /** CLASS_UNDECIDED - class not yet decided */\n CLASS_UNDECIDED = 0,\n CLASS_WEED = 1,\n CLASS_CROP = 2,\n /** CLASS_BOTH - both weed and crop */\n CLASS_BOTH = 3,\n /** CLASS_UNKNOWN - we were unable to classify */\n CLASS_UNKNOWN = 4,\n UNRECOGNIZED = -1,\n}\n\nexport function classificationFromJSON(object: any): Classification {\n switch (object) {\n case 0:\n case \"CLASS_UNDECIDED\":\n return Classification.CLASS_UNDECIDED;\n case 1:\n case \"CLASS_WEED\":\n return Classification.CLASS_WEED;\n case 2:\n case \"CLASS_CROP\":\n return Classification.CLASS_CROP;\n case 3:\n case \"CLASS_BOTH\":\n return Classification.CLASS_BOTH;\n case 4:\n case \"CLASS_UNKNOWN\":\n return Classification.CLASS_UNKNOWN;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return Classification.UNRECOGNIZED;\n }\n}\n\nexport function classificationToJSON(object: Classification): string {\n switch (object) {\n case Classification.CLASS_UNDECIDED:\n return \"CLASS_UNDECIDED\";\n case Classification.CLASS_WEED:\n return \"CLASS_WEED\";\n case Classification.CLASS_CROP:\n return \"CLASS_CROP\";\n case Classification.CLASS_BOTH:\n return \"CLASS_BOTH\";\n case Classification.CLASS_UNKNOWN:\n return \"CLASS_UNKNOWN\";\n case Classification.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum RecordingStatus {\n NOT_RECORDING = 0,\n RECORDING_STARTED = 1,\n RECORDING_FINISHED = 2,\n RECORDING_FAILED = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function recordingStatusFromJSON(object: any): RecordingStatus {\n switch (object) {\n case 0:\n case \"NOT_RECORDING\":\n return RecordingStatus.NOT_RECORDING;\n case 1:\n case \"RECORDING_STARTED\":\n return RecordingStatus.RECORDING_STARTED;\n case 2:\n case \"RECORDING_FINISHED\":\n return RecordingStatus.RECORDING_FINISHED;\n case 3:\n case \"RECORDING_FAILED\":\n return RecordingStatus.RECORDING_FAILED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return RecordingStatus.UNRECOGNIZED;\n }\n}\n\nexport function recordingStatusToJSON(object: RecordingStatus): string {\n switch (object) {\n case RecordingStatus.NOT_RECORDING:\n return \"NOT_RECORDING\";\n case RecordingStatus.RECORDING_STARTED:\n return \"RECORDING_STARTED\";\n case RecordingStatus.RECORDING_FINISHED:\n return \"RECORDING_FINISHED\";\n case RecordingStatus.RECORDING_FAILED:\n return \"RECORDING_FAILED\";\n case RecordingStatus.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum ConclusionType {\n NOT_WEEDING = 0,\n OUT_OF_BAND = 1,\n INTERSECTS_WITH_NON_SHOOTABLE = 2,\n OUT_OF_RANGE = 3,\n UNIMPORTANT = 4,\n NOT_SHOT = 5,\n PARTIALLY_SHOT = 6,\n SHOT = 7,\n P2P_NOT_FOUND = 8,\n ERROR = 9,\n FLICKER = 10,\n MARKED_FOR_THINNING = 11,\n NOT_TARGETED = 12,\n P2P_MISSING_CONTEXT = 13,\n UNRECOGNIZED = -1,\n}\n\nexport function conclusionTypeFromJSON(object: any): ConclusionType {\n switch (object) {\n case 0:\n case \"NOT_WEEDING\":\n return ConclusionType.NOT_WEEDING;\n case 1:\n case \"OUT_OF_BAND\":\n return ConclusionType.OUT_OF_BAND;\n case 2:\n case \"INTERSECTS_WITH_NON_SHOOTABLE\":\n return ConclusionType.INTERSECTS_WITH_NON_SHOOTABLE;\n case 3:\n case \"OUT_OF_RANGE\":\n return ConclusionType.OUT_OF_RANGE;\n case 4:\n case \"UNIMPORTANT\":\n return ConclusionType.UNIMPORTANT;\n case 5:\n case \"NOT_SHOT\":\n return ConclusionType.NOT_SHOT;\n case 6:\n case \"PARTIALLY_SHOT\":\n return ConclusionType.PARTIALLY_SHOT;\n case 7:\n case \"SHOT\":\n return ConclusionType.SHOT;\n case 8:\n case \"P2P_NOT_FOUND\":\n return ConclusionType.P2P_NOT_FOUND;\n case 9:\n case \"ERROR\":\n return ConclusionType.ERROR;\n case 10:\n case \"FLICKER\":\n return ConclusionType.FLICKER;\n case 11:\n case \"MARKED_FOR_THINNING\":\n return ConclusionType.MARKED_FOR_THINNING;\n case 12:\n case \"NOT_TARGETED\":\n return ConclusionType.NOT_TARGETED;\n case 13:\n case \"P2P_MISSING_CONTEXT\":\n return ConclusionType.P2P_MISSING_CONTEXT;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ConclusionType.UNRECOGNIZED;\n }\n}\n\nexport function conclusionTypeToJSON(object: ConclusionType): string {\n switch (object) {\n case ConclusionType.NOT_WEEDING:\n return \"NOT_WEEDING\";\n case ConclusionType.OUT_OF_BAND:\n return \"OUT_OF_BAND\";\n case ConclusionType.INTERSECTS_WITH_NON_SHOOTABLE:\n return \"INTERSECTS_WITH_NON_SHOOTABLE\";\n case ConclusionType.OUT_OF_RANGE:\n return \"OUT_OF_RANGE\";\n case ConclusionType.UNIMPORTANT:\n return \"UNIMPORTANT\";\n case ConclusionType.NOT_SHOT:\n return \"NOT_SHOT\";\n case ConclusionType.PARTIALLY_SHOT:\n return \"PARTIALLY_SHOT\";\n case ConclusionType.SHOT:\n return \"SHOT\";\n case ConclusionType.P2P_NOT_FOUND:\n return \"P2P_NOT_FOUND\";\n case ConclusionType.ERROR:\n return \"ERROR\";\n case ConclusionType.FLICKER:\n return \"FLICKER\";\n case ConclusionType.MARKED_FOR_THINNING:\n return \"MARKED_FOR_THINNING\";\n case ConclusionType.NOT_TARGETED:\n return \"NOT_TARGETED\";\n case ConclusionType.P2P_MISSING_CONTEXT:\n return \"P2P_MISSING_CONTEXT\";\n case ConclusionType.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum PlantCaptchaStatus {\n NOT_STARTED = 0,\n CAPTCHA_STARTED = 1,\n CAPTCHA_FINISHED = 2,\n CAPTCHA_FAILED = 3,\n CAPTCHA_CANCELLED = 4,\n UNRECOGNIZED = -1,\n}\n\nexport function plantCaptchaStatusFromJSON(object: any): PlantCaptchaStatus {\n switch (object) {\n case 0:\n case \"NOT_STARTED\":\n return PlantCaptchaStatus.NOT_STARTED;\n case 1:\n case \"CAPTCHA_STARTED\":\n return PlantCaptchaStatus.CAPTCHA_STARTED;\n case 2:\n case \"CAPTCHA_FINISHED\":\n return PlantCaptchaStatus.CAPTCHA_FINISHED;\n case 3:\n case \"CAPTCHA_FAILED\":\n return PlantCaptchaStatus.CAPTCHA_FAILED;\n case 4:\n case \"CAPTCHA_CANCELLED\":\n return PlantCaptchaStatus.CAPTCHA_CANCELLED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return PlantCaptchaStatus.UNRECOGNIZED;\n }\n}\n\nexport function plantCaptchaStatusToJSON(object: PlantCaptchaStatus): string {\n switch (object) {\n case PlantCaptchaStatus.NOT_STARTED:\n return \"NOT_STARTED\";\n case PlantCaptchaStatus.CAPTCHA_STARTED:\n return \"CAPTCHA_STARTED\";\n case PlantCaptchaStatus.CAPTCHA_FINISHED:\n return \"CAPTCHA_FINISHED\";\n case PlantCaptchaStatus.CAPTCHA_FAILED:\n return \"CAPTCHA_FAILED\";\n case PlantCaptchaStatus.CAPTCHA_CANCELLED:\n return \"CAPTCHA_CANCELLED\";\n case PlantCaptchaStatus.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum PlantCaptchaUserPrediction {\n WEED = 0,\n CROP = 1,\n UNKNOWN = 2,\n OTHER = 3,\n /** IGNORE - Only used in initial state */\n IGNORE = 4,\n VOLUNTEER = 5,\n BENEFICIAL = 6,\n DEBRIS = 7,\n UNRECOGNIZED = -1,\n}\n\nexport function plantCaptchaUserPredictionFromJSON(object: any): PlantCaptchaUserPrediction {\n switch (object) {\n case 0:\n case \"WEED\":\n return PlantCaptchaUserPrediction.WEED;\n case 1:\n case \"CROP\":\n return PlantCaptchaUserPrediction.CROP;\n case 2:\n case \"UNKNOWN\":\n return PlantCaptchaUserPrediction.UNKNOWN;\n case 3:\n case \"OTHER\":\n return PlantCaptchaUserPrediction.OTHER;\n case 4:\n case \"IGNORE\":\n return PlantCaptchaUserPrediction.IGNORE;\n case 5:\n case \"VOLUNTEER\":\n return PlantCaptchaUserPrediction.VOLUNTEER;\n case 6:\n case \"BENEFICIAL\":\n return PlantCaptchaUserPrediction.BENEFICIAL;\n case 7:\n case \"DEBRIS\":\n return PlantCaptchaUserPrediction.DEBRIS;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return PlantCaptchaUserPrediction.UNRECOGNIZED;\n }\n}\n\nexport function plantCaptchaUserPredictionToJSON(object: PlantCaptchaUserPrediction): string {\n switch (object) {\n case PlantCaptchaUserPrediction.WEED:\n return \"WEED\";\n case PlantCaptchaUserPrediction.CROP:\n return \"CROP\";\n case PlantCaptchaUserPrediction.UNKNOWN:\n return \"UNKNOWN\";\n case PlantCaptchaUserPrediction.OTHER:\n return \"OTHER\";\n case PlantCaptchaUserPrediction.IGNORE:\n return \"IGNORE\";\n case PlantCaptchaUserPrediction.VOLUNTEER:\n return \"VOLUNTEER\";\n case PlantCaptchaUserPrediction.BENEFICIAL:\n return \"BENEFICIAL\";\n case PlantCaptchaUserPrediction.DEBRIS:\n return \"DEBRIS\";\n case PlantCaptchaUserPrediction.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\n/** @deprecated */\nexport interface Trajectory {\n id: number;\n trackerId: number;\n status: number;\n isWeed: boolean;\n xMm: number;\n yMm: number;\n zMm: number;\n intersectedWithNonshootable: boolean;\n nonshootableTypeString: string;\n deduplicatedAcrossTracker: boolean;\n}\n\n/** @deprecated */\nexport interface Target {\n scannerId: number;\n trajectoryId: number;\n nextTrajectoryId: number;\n startingPosY: number;\n endingPosY: number;\n}\n\n/** @deprecated */\nexport interface Bounds {\n trackerId: string;\n maxPosMmY: number;\n}\n\n/** @deprecated */\nexport interface TrackingStatusReply {\n targets: Target[];\n trajectories: Trajectory[];\n bounds: Bounds[];\n}\n\nexport interface GetDetectionsRequest {\n camId: string;\n timestampMs: number;\n maxX: number;\n}\n\nexport interface Detection {\n x: number;\n y: number;\n size: number;\n clz: string;\n isWeed: boolean;\n outOfBand: boolean;\n id: number;\n}\n\nexport interface Detections {\n detections: Detection[];\n timestampMs: number;\n}\n\nexport interface Band {\n startXPx: number;\n endXPx: number;\n}\n\nexport interface Bands {\n band: Band[];\n bandingEnabled: boolean;\n rowHasBandsDefined: boolean;\n}\n\nexport interface GetDetectionsResponse {\n detections: Detections | undefined;\n bands: Bands | undefined;\n}\n\nexport interface PingRequest {\n x: number;\n}\n\nexport interface PongReply {\n x: number;\n}\n\nexport interface TrajectoryScore {\n score: number;\n scoreTilt: number;\n scorePan: number;\n scoreBusy: number;\n scoreInRange: number;\n scoreImportance: number;\n scoreSize: number;\n}\n\nexport interface PerScannerScore {\n scannerId: number;\n score: number;\n}\n\nexport interface ScoreState {\n targetState: TargetableState;\n scores: PerScannerScore[];\n}\n\nexport interface Pos2D {\n x: number;\n y: number;\n}\n\nexport interface KillBox {\n scannerId: number;\n topLeft: Pos2D | undefined;\n bottomRight: Pos2D | undefined;\n}\n\nexport interface Thresholds {\n /** @deprecated */\n weeding: number;\n /** @deprecated */\n thinning: number;\n /** @deprecated */\n banding: number;\n passedWeeding: boolean;\n passedThinning: boolean;\n passedBanding: boolean;\n}\n\nexport interface Decisions {\n weedingWeed: boolean;\n weedingCrop: boolean;\n thinningWeed: boolean;\n thinningCrop: boolean;\n keepableCrop: boolean;\n bandingCrop: boolean;\n}\n\nexport interface TrajectorySnapshot {\n id: number;\n killStatus: KillStatus;\n /** Deprecated 2.1 */\n isWeed: boolean;\n xMm: number;\n yMm: number;\n zMm: number;\n score?: TrajectoryScore | undefined;\n invalidScore?: InvalidScoreReason | undefined;\n radiusMm: number;\n category: string;\n shootTimeRequestedMs: number;\n shootTimeActualMs: number;\n markedForThinning: boolean;\n trackerId: number;\n duplicateStatus: DuplicateStatus;\n duplicateTrajectoryId: number;\n assignedLasers: number[];\n /** deprecated 1.16 use score state */\n outOfBand: boolean;\n /** deprecated 1.16 */\n intersectedWithNonshootable: boolean;\n detectionClasses: { [key: string]: number };\n confidence: number;\n thinningState: ThinningState;\n globalPos: number;\n scoreState: ScoreState | undefined;\n doo: number;\n distancePerspectivesCount: number;\n /** as returned from almanac, 0 for small, 1 for medium, 2 for large */\n sizeCategoryIndex: number;\n speculativeAllowed: boolean;\n /** crop protect / reverse crop protect */\n protectedByTraj: boolean;\n /** deprecated 2.1 */\n thresholds:\n | Thresholds\n | undefined;\n /** UPDATED 2.1, behind upt feature flag */\n decisions: Decisions | undefined;\n cropScore: number;\n weedScore: number;\n plantScore: number;\n numDetectionsUsedForDecision: number;\n classification: Classification;\n embeddingDistances: { [key: string]: number };\n}\n\nexport interface TrajectorySnapshot_DetectionClassesEntry {\n key: string;\n value: number;\n}\n\nexport interface TrajectorySnapshot_EmbeddingDistancesEntry {\n key: string;\n value: number;\n}\n\nexport interface BandDefinition {\n offsetMm: number;\n widthMm: number;\n id: number;\n}\n\nexport interface DiagnosticsSnapshot {\n timestampMs: number;\n trajectories: TrajectorySnapshot[];\n bands: BandDefinition[];\n killBoxes: KillBox[];\n}\n\nexport interface RecordDiagnosticsRequest {\n ttlSec: number;\n cropImagesPerSec: number;\n weedImagesPerSec: number;\n}\n\nexport interface GetRecordingStatusResponse {\n status: RecordingStatus;\n}\n\nexport interface StartSavingCropLineDetectionReplayRequest {\n filename: string;\n ttlMs: number;\n}\n\nexport interface RecordAimbotInputRequest {\n name: string;\n ttlMs: number;\n rotaryTicks?: boolean | undefined;\n deepweed?: boolean | undefined;\n laneHeights?: boolean | undefined;\n}\n\nexport interface ConclusionCount {\n type: ConclusionType;\n count: number;\n}\n\nexport interface ConclusionCounter {\n counts: ConclusionCount[];\n}\n\nexport interface BandDefinitions {\n bands: BandDefinition[];\n bandingEnabled: boolean;\n rowHasBandsDefined: boolean;\n}\n\nexport interface PlantCaptchaStatusResponse {\n status: PlantCaptchaStatus;\n totalImages: number;\n imagesTaken: number;\n metadataTaken: number;\n}\n\nexport interface Embedding {\n elements: number[];\n}\n\nexport interface PlantCaptchaItemMetadata {\n confidence: number;\n xPx: number;\n yPx: number;\n xMm: number;\n yMm: number;\n zMm: number;\n sizeMm: number;\n categories: { [key: string]: number };\n doo: number;\n isWeed: boolean;\n intersectedWithNonshootable: boolean;\n confidenceHistory: number[];\n isInBand: boolean;\n id: string;\n sizePx: number;\n shootTimeMs: number;\n weedConfidenceHistory: number[];\n cropConfidenceHistory: number[];\n /** as returned from almanac, 0 for small, 1 for medium, 2 for large */\n sizeCategoryIndex: number;\n weedCategories: { [key: string]: number };\n embeddingHistory: Embedding[];\n initialLabel: PlantCaptchaUserPrediction;\n}\n\nexport interface PlantCaptchaItemMetadata_CategoriesEntry {\n key: string;\n value: number;\n}\n\nexport interface PlantCaptchaItemMetadata_WeedCategoriesEntry {\n key: string;\n value: number;\n}\n\nexport interface GetTargetingEnabledRequest {\n}\n\nexport interface GetTargetingEnabledResponse {\n enabled: boolean;\n}\n\nfunction createBaseTrajectory(): Trajectory {\n return {\n id: 0,\n trackerId: 0,\n status: 0,\n isWeed: false,\n xMm: 0,\n yMm: 0,\n zMm: 0,\n intersectedWithNonshootable: false,\n nonshootableTypeString: \"\",\n deduplicatedAcrossTracker: false,\n };\n}\n\nexport const Trajectory: MessageFns = {\n encode(message: Trajectory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint32(message.id);\n }\n if (message.trackerId !== 0) {\n writer.uint32(16).uint32(message.trackerId);\n }\n if (message.status !== 0) {\n writer.uint32(24).uint32(message.status);\n }\n if (message.isWeed !== false) {\n writer.uint32(32).bool(message.isWeed);\n }\n if (message.xMm !== 0) {\n writer.uint32(41).double(message.xMm);\n }\n if (message.yMm !== 0) {\n writer.uint32(49).double(message.yMm);\n }\n if (message.zMm !== 0) {\n writer.uint32(57).double(message.zMm);\n }\n if (message.intersectedWithNonshootable !== false) {\n writer.uint32(64).bool(message.intersectedWithNonshootable);\n }\n if (message.nonshootableTypeString !== \"\") {\n writer.uint32(74).string(message.nonshootableTypeString);\n }\n if (message.deduplicatedAcrossTracker !== false) {\n writer.uint32(80).bool(message.deduplicatedAcrossTracker);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Trajectory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrajectory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.trackerId = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.status = reader.uint32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.isWeed = reader.bool();\n continue;\n case 5:\n if (tag !== 41) {\n break;\n }\n\n message.xMm = reader.double();\n continue;\n case 6:\n if (tag !== 49) {\n break;\n }\n\n message.yMm = reader.double();\n continue;\n case 7:\n if (tag !== 57) {\n break;\n }\n\n message.zMm = reader.double();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.intersectedWithNonshootable = reader.bool();\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.nonshootableTypeString = reader.string();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.deduplicatedAcrossTracker = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Trajectory {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n trackerId: isSet(object.trackerId) ? globalThis.Number(object.trackerId) : 0,\n status: isSet(object.status) ? globalThis.Number(object.status) : 0,\n isWeed: isSet(object.isWeed) ? globalThis.Boolean(object.isWeed) : false,\n xMm: isSet(object.xMm) ? globalThis.Number(object.xMm) : 0,\n yMm: isSet(object.yMm) ? globalThis.Number(object.yMm) : 0,\n zMm: isSet(object.zMm) ? globalThis.Number(object.zMm) : 0,\n intersectedWithNonshootable: isSet(object.intersectedWithNonshootable)\n ? globalThis.Boolean(object.intersectedWithNonshootable)\n : false,\n nonshootableTypeString: isSet(object.nonshootableTypeString)\n ? globalThis.String(object.nonshootableTypeString)\n : \"\",\n deduplicatedAcrossTracker: isSet(object.deduplicatedAcrossTracker)\n ? globalThis.Boolean(object.deduplicatedAcrossTracker)\n : false,\n };\n },\n\n toJSON(message: Trajectory): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.trackerId !== 0) {\n obj.trackerId = Math.round(message.trackerId);\n }\n if (message.status !== 0) {\n obj.status = Math.round(message.status);\n }\n if (message.isWeed !== false) {\n obj.isWeed = message.isWeed;\n }\n if (message.xMm !== 0) {\n obj.xMm = message.xMm;\n }\n if (message.yMm !== 0) {\n obj.yMm = message.yMm;\n }\n if (message.zMm !== 0) {\n obj.zMm = message.zMm;\n }\n if (message.intersectedWithNonshootable !== false) {\n obj.intersectedWithNonshootable = message.intersectedWithNonshootable;\n }\n if (message.nonshootableTypeString !== \"\") {\n obj.nonshootableTypeString = message.nonshootableTypeString;\n }\n if (message.deduplicatedAcrossTracker !== false) {\n obj.deduplicatedAcrossTracker = message.deduplicatedAcrossTracker;\n }\n return obj;\n },\n\n create, I>>(base?: I): Trajectory {\n return Trajectory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Trajectory {\n const message = createBaseTrajectory();\n message.id = object.id ?? 0;\n message.trackerId = object.trackerId ?? 0;\n message.status = object.status ?? 0;\n message.isWeed = object.isWeed ?? false;\n message.xMm = object.xMm ?? 0;\n message.yMm = object.yMm ?? 0;\n message.zMm = object.zMm ?? 0;\n message.intersectedWithNonshootable = object.intersectedWithNonshootable ?? false;\n message.nonshootableTypeString = object.nonshootableTypeString ?? \"\";\n message.deduplicatedAcrossTracker = object.deduplicatedAcrossTracker ?? false;\n return message;\n },\n};\n\nfunction createBaseTarget(): Target {\n return { scannerId: 0, trajectoryId: 0, nextTrajectoryId: 0, startingPosY: 0, endingPosY: 0 };\n}\n\nexport const Target: MessageFns = {\n encode(message: Target, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.trajectoryId !== 0) {\n writer.uint32(16).uint32(message.trajectoryId);\n }\n if (message.nextTrajectoryId !== 0) {\n writer.uint32(24).uint32(message.nextTrajectoryId);\n }\n if (message.startingPosY !== 0) {\n writer.uint32(37).float(message.startingPosY);\n }\n if (message.endingPosY !== 0) {\n writer.uint32(45).float(message.endingPosY);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Target {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTarget();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.trajectoryId = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.nextTrajectoryId = reader.uint32();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.startingPosY = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n\n message.endingPosY = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Target {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n trajectoryId: isSet(object.trajectoryId) ? globalThis.Number(object.trajectoryId) : 0,\n nextTrajectoryId: isSet(object.nextTrajectoryId) ? globalThis.Number(object.nextTrajectoryId) : 0,\n startingPosY: isSet(object.startingPosY) ? globalThis.Number(object.startingPosY) : 0,\n endingPosY: isSet(object.endingPosY) ? globalThis.Number(object.endingPosY) : 0,\n };\n },\n\n toJSON(message: Target): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.trajectoryId !== 0) {\n obj.trajectoryId = Math.round(message.trajectoryId);\n }\n if (message.nextTrajectoryId !== 0) {\n obj.nextTrajectoryId = Math.round(message.nextTrajectoryId);\n }\n if (message.startingPosY !== 0) {\n obj.startingPosY = message.startingPosY;\n }\n if (message.endingPosY !== 0) {\n obj.endingPosY = message.endingPosY;\n }\n return obj;\n },\n\n create, I>>(base?: I): Target {\n return Target.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Target {\n const message = createBaseTarget();\n message.scannerId = object.scannerId ?? 0;\n message.trajectoryId = object.trajectoryId ?? 0;\n message.nextTrajectoryId = object.nextTrajectoryId ?? 0;\n message.startingPosY = object.startingPosY ?? 0;\n message.endingPosY = object.endingPosY ?? 0;\n return message;\n },\n};\n\nfunction createBaseBounds(): Bounds {\n return { trackerId: \"\", maxPosMmY: 0 };\n}\n\nexport const Bounds: MessageFns = {\n encode(message: Bounds, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.trackerId !== \"\") {\n writer.uint32(10).string(message.trackerId);\n }\n if (message.maxPosMmY !== 0) {\n writer.uint32(21).float(message.maxPosMmY);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Bounds {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBounds();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.trackerId = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.maxPosMmY = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Bounds {\n return {\n trackerId: isSet(object.trackerId) ? globalThis.String(object.trackerId) : \"\",\n maxPosMmY: isSet(object.maxPosMmY) ? globalThis.Number(object.maxPosMmY) : 0,\n };\n },\n\n toJSON(message: Bounds): unknown {\n const obj: any = {};\n if (message.trackerId !== \"\") {\n obj.trackerId = message.trackerId;\n }\n if (message.maxPosMmY !== 0) {\n obj.maxPosMmY = message.maxPosMmY;\n }\n return obj;\n },\n\n create, I>>(base?: I): Bounds {\n return Bounds.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Bounds {\n const message = createBaseBounds();\n message.trackerId = object.trackerId ?? \"\";\n message.maxPosMmY = object.maxPosMmY ?? 0;\n return message;\n },\n};\n\nfunction createBaseTrackingStatusReply(): TrackingStatusReply {\n return { targets: [], trajectories: [], bounds: [] };\n}\n\nexport const TrackingStatusReply: MessageFns = {\n encode(message: TrackingStatusReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.targets) {\n Target.encode(v!, writer.uint32(10).fork()).join();\n }\n for (const v of message.trajectories) {\n Trajectory.encode(v!, writer.uint32(18).fork()).join();\n }\n for (const v of message.bounds) {\n Bounds.encode(v!, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrackingStatusReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackingStatusReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.targets.push(Target.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.trajectories.push(Trajectory.decode(reader, reader.uint32()));\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.bounds.push(Bounds.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrackingStatusReply {\n return {\n targets: globalThis.Array.isArray(object?.targets) ? object.targets.map((e: any) => Target.fromJSON(e)) : [],\n trajectories: globalThis.Array.isArray(object?.trajectories)\n ? object.trajectories.map((e: any) => Trajectory.fromJSON(e))\n : [],\n bounds: globalThis.Array.isArray(object?.bounds) ? object.bounds.map((e: any) => Bounds.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: TrackingStatusReply): unknown {\n const obj: any = {};\n if (message.targets?.length) {\n obj.targets = message.targets.map((e) => Target.toJSON(e));\n }\n if (message.trajectories?.length) {\n obj.trajectories = message.trajectories.map((e) => Trajectory.toJSON(e));\n }\n if (message.bounds?.length) {\n obj.bounds = message.bounds.map((e) => Bounds.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): TrackingStatusReply {\n return TrackingStatusReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrackingStatusReply {\n const message = createBaseTrackingStatusReply();\n message.targets = object.targets?.map((e) => Target.fromPartial(e)) || [];\n message.trajectories = object.trajectories?.map((e) => Trajectory.fromPartial(e)) || [];\n message.bounds = object.bounds?.map((e) => Bounds.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseGetDetectionsRequest(): GetDetectionsRequest {\n return { camId: \"\", timestampMs: 0, maxX: 0 };\n}\n\nexport const GetDetectionsRequest: MessageFns = {\n encode(message: GetDetectionsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(16).int64(message.timestampMs);\n }\n if (message.maxX !== 0) {\n writer.uint32(24).int32(message.maxX);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDetectionsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDetectionsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.maxX = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDetectionsRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n maxX: isSet(object.maxX) ? globalThis.Number(object.maxX) : 0,\n };\n },\n\n toJSON(message: GetDetectionsRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.maxX !== 0) {\n obj.maxX = Math.round(message.maxX);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetDetectionsRequest {\n return GetDetectionsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetDetectionsRequest {\n const message = createBaseGetDetectionsRequest();\n message.camId = object.camId ?? \"\";\n message.timestampMs = object.timestampMs ?? 0;\n message.maxX = object.maxX ?? 0;\n return message;\n },\n};\n\nfunction createBaseDetection(): Detection {\n return { x: 0, y: 0, size: 0, clz: \"\", isWeed: false, outOfBand: false, id: 0 };\n}\n\nexport const Detection: MessageFns = {\n encode(message: Detection, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.size !== 0) {\n writer.uint32(29).float(message.size);\n }\n if (message.clz !== \"\") {\n writer.uint32(34).string(message.clz);\n }\n if (message.isWeed !== false) {\n writer.uint32(40).bool(message.isWeed);\n }\n if (message.outOfBand !== false) {\n writer.uint32(48).bool(message.outOfBand);\n }\n if (message.id !== 0) {\n writer.uint32(56).uint32(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Detection {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDetection();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.size = reader.float();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.clz = reader.string();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.isWeed = reader.bool();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.outOfBand = reader.bool();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.id = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Detection {\n return {\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n size: isSet(object.size) ? globalThis.Number(object.size) : 0,\n clz: isSet(object.clz) ? globalThis.String(object.clz) : \"\",\n isWeed: isSet(object.isWeed) ? globalThis.Boolean(object.isWeed) : false,\n outOfBand: isSet(object.outOfBand) ? globalThis.Boolean(object.outOfBand) : false,\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n };\n },\n\n toJSON(message: Detection): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = message.x;\n }\n if (message.y !== 0) {\n obj.y = message.y;\n }\n if (message.size !== 0) {\n obj.size = message.size;\n }\n if (message.clz !== \"\") {\n obj.clz = message.clz;\n }\n if (message.isWeed !== false) {\n obj.isWeed = message.isWeed;\n }\n if (message.outOfBand !== false) {\n obj.outOfBand = message.outOfBand;\n }\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): Detection {\n return Detection.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Detection {\n const message = createBaseDetection();\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n message.size = object.size ?? 0;\n message.clz = object.clz ?? \"\";\n message.isWeed = object.isWeed ?? false;\n message.outOfBand = object.outOfBand ?? false;\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseDetections(): Detections {\n return { detections: [], timestampMs: 0 };\n}\n\nexport const Detections: MessageFns = {\n encode(message: Detections, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.detections) {\n Detection.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.timestampMs !== 0) {\n writer.uint32(16).int64(message.timestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Detections {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDetections();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.detections.push(Detection.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Detections {\n return {\n detections: globalThis.Array.isArray(object?.detections)\n ? object.detections.map((e: any) => Detection.fromJSON(e))\n : [],\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n };\n },\n\n toJSON(message: Detections): unknown {\n const obj: any = {};\n if (message.detections?.length) {\n obj.detections = message.detections.map((e) => Detection.toJSON(e));\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): Detections {\n return Detections.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Detections {\n const message = createBaseDetections();\n message.detections = object.detections?.map((e) => Detection.fromPartial(e)) || [];\n message.timestampMs = object.timestampMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseBand(): Band {\n return { startXPx: 0, endXPx: 0 };\n}\n\nexport const Band: MessageFns = {\n encode(message: Band, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.startXPx !== 0) {\n writer.uint32(9).double(message.startXPx);\n }\n if (message.endXPx !== 0) {\n writer.uint32(17).double(message.endXPx);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Band {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBand();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.startXPx = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.endXPx = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Band {\n return {\n startXPx: isSet(object.startXPx) ? globalThis.Number(object.startXPx) : 0,\n endXPx: isSet(object.endXPx) ? globalThis.Number(object.endXPx) : 0,\n };\n },\n\n toJSON(message: Band): unknown {\n const obj: any = {};\n if (message.startXPx !== 0) {\n obj.startXPx = message.startXPx;\n }\n if (message.endXPx !== 0) {\n obj.endXPx = message.endXPx;\n }\n return obj;\n },\n\n create, I>>(base?: I): Band {\n return Band.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Band {\n const message = createBaseBand();\n message.startXPx = object.startXPx ?? 0;\n message.endXPx = object.endXPx ?? 0;\n return message;\n },\n};\n\nfunction createBaseBands(): Bands {\n return { band: [], bandingEnabled: false, rowHasBandsDefined: false };\n}\n\nexport const Bands: MessageFns = {\n encode(message: Bands, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.band) {\n Band.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.bandingEnabled !== false) {\n writer.uint32(16).bool(message.bandingEnabled);\n }\n if (message.rowHasBandsDefined !== false) {\n writer.uint32(24).bool(message.rowHasBandsDefined);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Bands {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBands();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.band.push(Band.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.bandingEnabled = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.rowHasBandsDefined = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Bands {\n return {\n band: globalThis.Array.isArray(object?.band) ? object.band.map((e: any) => Band.fromJSON(e)) : [],\n bandingEnabled: isSet(object.bandingEnabled) ? globalThis.Boolean(object.bandingEnabled) : false,\n rowHasBandsDefined: isSet(object.rowHasBandsDefined) ? globalThis.Boolean(object.rowHasBandsDefined) : false,\n };\n },\n\n toJSON(message: Bands): unknown {\n const obj: any = {};\n if (message.band?.length) {\n obj.band = message.band.map((e) => Band.toJSON(e));\n }\n if (message.bandingEnabled !== false) {\n obj.bandingEnabled = message.bandingEnabled;\n }\n if (message.rowHasBandsDefined !== false) {\n obj.rowHasBandsDefined = message.rowHasBandsDefined;\n }\n return obj;\n },\n\n create, I>>(base?: I): Bands {\n return Bands.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Bands {\n const message = createBaseBands();\n message.band = object.band?.map((e) => Band.fromPartial(e)) || [];\n message.bandingEnabled = object.bandingEnabled ?? false;\n message.rowHasBandsDefined = object.rowHasBandsDefined ?? false;\n return message;\n },\n};\n\nfunction createBaseGetDetectionsResponse(): GetDetectionsResponse {\n return { detections: undefined, bands: undefined };\n}\n\nexport const GetDetectionsResponse: MessageFns = {\n encode(message: GetDetectionsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.detections !== undefined) {\n Detections.encode(message.detections, writer.uint32(10).fork()).join();\n }\n if (message.bands !== undefined) {\n Bands.encode(message.bands, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDetectionsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDetectionsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.detections = Detections.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.bands = Bands.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDetectionsResponse {\n return {\n detections: isSet(object.detections) ? Detections.fromJSON(object.detections) : undefined,\n bands: isSet(object.bands) ? Bands.fromJSON(object.bands) : undefined,\n };\n },\n\n toJSON(message: GetDetectionsResponse): unknown {\n const obj: any = {};\n if (message.detections !== undefined) {\n obj.detections = Detections.toJSON(message.detections);\n }\n if (message.bands !== undefined) {\n obj.bands = Bands.toJSON(message.bands);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetDetectionsResponse {\n return GetDetectionsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetDetectionsResponse {\n const message = createBaseGetDetectionsResponse();\n message.detections = (object.detections !== undefined && object.detections !== null)\n ? Detections.fromPartial(object.detections)\n : undefined;\n message.bands = (object.bands !== undefined && object.bands !== null) ? Bands.fromPartial(object.bands) : undefined;\n return message;\n },\n};\n\nfunction createBasePingRequest(): PingRequest {\n return { x: 0 };\n}\n\nexport const PingRequest: MessageFns = {\n encode(message: PingRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(8).uint32(message.x);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PingRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePingRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.x = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PingRequest {\n return { x: isSet(object.x) ? globalThis.Number(object.x) : 0 };\n },\n\n toJSON(message: PingRequest): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = Math.round(message.x);\n }\n return obj;\n },\n\n create, I>>(base?: I): PingRequest {\n return PingRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PingRequest {\n const message = createBasePingRequest();\n message.x = object.x ?? 0;\n return message;\n },\n};\n\nfunction createBasePongReply(): PongReply {\n return { x: 0 };\n}\n\nexport const PongReply: MessageFns = {\n encode(message: PongReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(8).uint32(message.x);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PongReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePongReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.x = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PongReply {\n return { x: isSet(object.x) ? globalThis.Number(object.x) : 0 };\n },\n\n toJSON(message: PongReply): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = Math.round(message.x);\n }\n return obj;\n },\n\n create, I>>(base?: I): PongReply {\n return PongReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PongReply {\n const message = createBasePongReply();\n message.x = object.x ?? 0;\n return message;\n },\n};\n\nfunction createBaseTrajectoryScore(): TrajectoryScore {\n return { score: 0, scoreTilt: 0, scorePan: 0, scoreBusy: 0, scoreInRange: 0, scoreImportance: 0, scoreSize: 0 };\n}\n\nexport const TrajectoryScore: MessageFns = {\n encode(message: TrajectoryScore, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.score !== 0) {\n writer.uint32(8).uint64(message.score);\n }\n if (message.scoreTilt !== 0) {\n writer.uint32(17).double(message.scoreTilt);\n }\n if (message.scorePan !== 0) {\n writer.uint32(25).double(message.scorePan);\n }\n if (message.scoreBusy !== 0) {\n writer.uint32(33).double(message.scoreBusy);\n }\n if (message.scoreInRange !== 0) {\n writer.uint32(41).double(message.scoreInRange);\n }\n if (message.scoreImportance !== 0) {\n writer.uint32(49).double(message.scoreImportance);\n }\n if (message.scoreSize !== 0) {\n writer.uint32(57).double(message.scoreSize);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrajectoryScore {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrajectoryScore();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.score = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.scoreTilt = reader.double();\n continue;\n case 3:\n if (tag !== 25) {\n break;\n }\n\n message.scorePan = reader.double();\n continue;\n case 4:\n if (tag !== 33) {\n break;\n }\n\n message.scoreBusy = reader.double();\n continue;\n case 5:\n if (tag !== 41) {\n break;\n }\n\n message.scoreInRange = reader.double();\n continue;\n case 6:\n if (tag !== 49) {\n break;\n }\n\n message.scoreImportance = reader.double();\n continue;\n case 7:\n if (tag !== 57) {\n break;\n }\n\n message.scoreSize = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrajectoryScore {\n return {\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n scoreTilt: isSet(object.scoreTilt) ? globalThis.Number(object.scoreTilt) : 0,\n scorePan: isSet(object.scorePan) ? globalThis.Number(object.scorePan) : 0,\n scoreBusy: isSet(object.scoreBusy) ? globalThis.Number(object.scoreBusy) : 0,\n scoreInRange: isSet(object.scoreInRange) ? globalThis.Number(object.scoreInRange) : 0,\n scoreImportance: isSet(object.scoreImportance) ? globalThis.Number(object.scoreImportance) : 0,\n scoreSize: isSet(object.scoreSize) ? globalThis.Number(object.scoreSize) : 0,\n };\n },\n\n toJSON(message: TrajectoryScore): unknown {\n const obj: any = {};\n if (message.score !== 0) {\n obj.score = Math.round(message.score);\n }\n if (message.scoreTilt !== 0) {\n obj.scoreTilt = message.scoreTilt;\n }\n if (message.scorePan !== 0) {\n obj.scorePan = message.scorePan;\n }\n if (message.scoreBusy !== 0) {\n obj.scoreBusy = message.scoreBusy;\n }\n if (message.scoreInRange !== 0) {\n obj.scoreInRange = message.scoreInRange;\n }\n if (message.scoreImportance !== 0) {\n obj.scoreImportance = message.scoreImportance;\n }\n if (message.scoreSize !== 0) {\n obj.scoreSize = message.scoreSize;\n }\n return obj;\n },\n\n create, I>>(base?: I): TrajectoryScore {\n return TrajectoryScore.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrajectoryScore {\n const message = createBaseTrajectoryScore();\n message.score = object.score ?? 0;\n message.scoreTilt = object.scoreTilt ?? 0;\n message.scorePan = object.scorePan ?? 0;\n message.scoreBusy = object.scoreBusy ?? 0;\n message.scoreInRange = object.scoreInRange ?? 0;\n message.scoreImportance = object.scoreImportance ?? 0;\n message.scoreSize = object.scoreSize ?? 0;\n return message;\n },\n};\n\nfunction createBasePerScannerScore(): PerScannerScore {\n return { scannerId: 0, score: 0 };\n}\n\nexport const PerScannerScore: MessageFns = {\n encode(message: PerScannerScore, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.score !== 0) {\n writer.uint32(16).int32(message.score);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PerScannerScore {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerScannerScore();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.score = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PerScannerScore {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n };\n },\n\n toJSON(message: PerScannerScore): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.score !== 0) {\n obj.score = Math.round(message.score);\n }\n return obj;\n },\n\n create, I>>(base?: I): PerScannerScore {\n return PerScannerScore.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PerScannerScore {\n const message = createBasePerScannerScore();\n message.scannerId = object.scannerId ?? 0;\n message.score = object.score ?? 0;\n return message;\n },\n};\n\nfunction createBaseScoreState(): ScoreState {\n return { targetState: 0, scores: [] };\n}\n\nexport const ScoreState: MessageFns = {\n encode(message: ScoreState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.targetState !== 0) {\n writer.uint32(8).int32(message.targetState);\n }\n for (const v of message.scores) {\n PerScannerScore.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ScoreState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseScoreState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.targetState = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.scores.push(PerScannerScore.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ScoreState {\n return {\n targetState: isSet(object.targetState) ? targetableStateFromJSON(object.targetState) : 0,\n scores: globalThis.Array.isArray(object?.scores)\n ? object.scores.map((e: any) => PerScannerScore.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ScoreState): unknown {\n const obj: any = {};\n if (message.targetState !== 0) {\n obj.targetState = targetableStateToJSON(message.targetState);\n }\n if (message.scores?.length) {\n obj.scores = message.scores.map((e) => PerScannerScore.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): ScoreState {\n return ScoreState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ScoreState {\n const message = createBaseScoreState();\n message.targetState = object.targetState ?? 0;\n message.scores = object.scores?.map((e) => PerScannerScore.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBasePos2D(): Pos2D {\n return { x: 0, y: 0 };\n}\n\nexport const Pos2D: MessageFns = {\n encode(message: Pos2D, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(9).double(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(17).double(message.y);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Pos2D {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePos2D();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.x = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.y = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Pos2D {\n return {\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n };\n },\n\n toJSON(message: Pos2D): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = message.x;\n }\n if (message.y !== 0) {\n obj.y = message.y;\n }\n return obj;\n },\n\n create, I>>(base?: I): Pos2D {\n return Pos2D.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Pos2D {\n const message = createBasePos2D();\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n return message;\n },\n};\n\nfunction createBaseKillBox(): KillBox {\n return { scannerId: 0, topLeft: undefined, bottomRight: undefined };\n}\n\nexport const KillBox: MessageFns = {\n encode(message: KillBox, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.topLeft !== undefined) {\n Pos2D.encode(message.topLeft, writer.uint32(18).fork()).join();\n }\n if (message.bottomRight !== undefined) {\n Pos2D.encode(message.bottomRight, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): KillBox {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseKillBox();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.topLeft = Pos2D.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.bottomRight = Pos2D.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): KillBox {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n topLeft: isSet(object.topLeft) ? Pos2D.fromJSON(object.topLeft) : undefined,\n bottomRight: isSet(object.bottomRight) ? Pos2D.fromJSON(object.bottomRight) : undefined,\n };\n },\n\n toJSON(message: KillBox): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.topLeft !== undefined) {\n obj.topLeft = Pos2D.toJSON(message.topLeft);\n }\n if (message.bottomRight !== undefined) {\n obj.bottomRight = Pos2D.toJSON(message.bottomRight);\n }\n return obj;\n },\n\n create, I>>(base?: I): KillBox {\n return KillBox.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): KillBox {\n const message = createBaseKillBox();\n message.scannerId = object.scannerId ?? 0;\n message.topLeft = (object.topLeft !== undefined && object.topLeft !== null)\n ? Pos2D.fromPartial(object.topLeft)\n : undefined;\n message.bottomRight = (object.bottomRight !== undefined && object.bottomRight !== null)\n ? Pos2D.fromPartial(object.bottomRight)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseThresholds(): Thresholds {\n return { weeding: 0, thinning: 0, banding: 0, passedWeeding: false, passedThinning: false, passedBanding: false };\n}\n\nexport const Thresholds: MessageFns = {\n encode(message: Thresholds, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.weeding !== 0) {\n writer.uint32(13).float(message.weeding);\n }\n if (message.thinning !== 0) {\n writer.uint32(21).float(message.thinning);\n }\n if (message.banding !== 0) {\n writer.uint32(29).float(message.banding);\n }\n if (message.passedWeeding !== false) {\n writer.uint32(32).bool(message.passedWeeding);\n }\n if (message.passedThinning !== false) {\n writer.uint32(40).bool(message.passedThinning);\n }\n if (message.passedBanding !== false) {\n writer.uint32(48).bool(message.passedBanding);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Thresholds {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseThresholds();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.weeding = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.thinning = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.banding = reader.float();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.passedWeeding = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.passedThinning = reader.bool();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.passedBanding = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Thresholds {\n return {\n weeding: isSet(object.weeding) ? globalThis.Number(object.weeding) : 0,\n thinning: isSet(object.thinning) ? globalThis.Number(object.thinning) : 0,\n banding: isSet(object.banding) ? globalThis.Number(object.banding) : 0,\n passedWeeding: isSet(object.passedWeeding) ? globalThis.Boolean(object.passedWeeding) : false,\n passedThinning: isSet(object.passedThinning) ? globalThis.Boolean(object.passedThinning) : false,\n passedBanding: isSet(object.passedBanding) ? globalThis.Boolean(object.passedBanding) : false,\n };\n },\n\n toJSON(message: Thresholds): unknown {\n const obj: any = {};\n if (message.weeding !== 0) {\n obj.weeding = message.weeding;\n }\n if (message.thinning !== 0) {\n obj.thinning = message.thinning;\n }\n if (message.banding !== 0) {\n obj.banding = message.banding;\n }\n if (message.passedWeeding !== false) {\n obj.passedWeeding = message.passedWeeding;\n }\n if (message.passedThinning !== false) {\n obj.passedThinning = message.passedThinning;\n }\n if (message.passedBanding !== false) {\n obj.passedBanding = message.passedBanding;\n }\n return obj;\n },\n\n create, I>>(base?: I): Thresholds {\n return Thresholds.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Thresholds {\n const message = createBaseThresholds();\n message.weeding = object.weeding ?? 0;\n message.thinning = object.thinning ?? 0;\n message.banding = object.banding ?? 0;\n message.passedWeeding = object.passedWeeding ?? false;\n message.passedThinning = object.passedThinning ?? false;\n message.passedBanding = object.passedBanding ?? false;\n return message;\n },\n};\n\nfunction createBaseDecisions(): Decisions {\n return {\n weedingWeed: false,\n weedingCrop: false,\n thinningWeed: false,\n thinningCrop: false,\n keepableCrop: false,\n bandingCrop: false,\n };\n}\n\nexport const Decisions: MessageFns = {\n encode(message: Decisions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.weedingWeed !== false) {\n writer.uint32(8).bool(message.weedingWeed);\n }\n if (message.weedingCrop !== false) {\n writer.uint32(16).bool(message.weedingCrop);\n }\n if (message.thinningWeed !== false) {\n writer.uint32(24).bool(message.thinningWeed);\n }\n if (message.thinningCrop !== false) {\n writer.uint32(32).bool(message.thinningCrop);\n }\n if (message.keepableCrop !== false) {\n writer.uint32(40).bool(message.keepableCrop);\n }\n if (message.bandingCrop !== false) {\n writer.uint32(48).bool(message.bandingCrop);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Decisions {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDecisions();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.weedingWeed = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.weedingCrop = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.thinningWeed = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.thinningCrop = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.keepableCrop = reader.bool();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.bandingCrop = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Decisions {\n return {\n weedingWeed: isSet(object.weedingWeed) ? globalThis.Boolean(object.weedingWeed) : false,\n weedingCrop: isSet(object.weedingCrop) ? globalThis.Boolean(object.weedingCrop) : false,\n thinningWeed: isSet(object.thinningWeed) ? globalThis.Boolean(object.thinningWeed) : false,\n thinningCrop: isSet(object.thinningCrop) ? globalThis.Boolean(object.thinningCrop) : false,\n keepableCrop: isSet(object.keepableCrop) ? globalThis.Boolean(object.keepableCrop) : false,\n bandingCrop: isSet(object.bandingCrop) ? globalThis.Boolean(object.bandingCrop) : false,\n };\n },\n\n toJSON(message: Decisions): unknown {\n const obj: any = {};\n if (message.weedingWeed !== false) {\n obj.weedingWeed = message.weedingWeed;\n }\n if (message.weedingCrop !== false) {\n obj.weedingCrop = message.weedingCrop;\n }\n if (message.thinningWeed !== false) {\n obj.thinningWeed = message.thinningWeed;\n }\n if (message.thinningCrop !== false) {\n obj.thinningCrop = message.thinningCrop;\n }\n if (message.keepableCrop !== false) {\n obj.keepableCrop = message.keepableCrop;\n }\n if (message.bandingCrop !== false) {\n obj.bandingCrop = message.bandingCrop;\n }\n return obj;\n },\n\n create, I>>(base?: I): Decisions {\n return Decisions.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Decisions {\n const message = createBaseDecisions();\n message.weedingWeed = object.weedingWeed ?? false;\n message.weedingCrop = object.weedingCrop ?? false;\n message.thinningWeed = object.thinningWeed ?? false;\n message.thinningCrop = object.thinningCrop ?? false;\n message.keepableCrop = object.keepableCrop ?? false;\n message.bandingCrop = object.bandingCrop ?? false;\n return message;\n },\n};\n\nfunction createBaseTrajectorySnapshot(): TrajectorySnapshot {\n return {\n id: 0,\n killStatus: 0,\n isWeed: false,\n xMm: 0,\n yMm: 0,\n zMm: 0,\n score: undefined,\n invalidScore: undefined,\n radiusMm: 0,\n category: \"\",\n shootTimeRequestedMs: 0,\n shootTimeActualMs: 0,\n markedForThinning: false,\n trackerId: 0,\n duplicateStatus: 0,\n duplicateTrajectoryId: 0,\n assignedLasers: [],\n outOfBand: false,\n intersectedWithNonshootable: false,\n detectionClasses: {},\n confidence: 0,\n thinningState: 0,\n globalPos: 0,\n scoreState: undefined,\n doo: 0,\n distancePerspectivesCount: 0,\n sizeCategoryIndex: 0,\n speculativeAllowed: false,\n protectedByTraj: false,\n thresholds: undefined,\n decisions: undefined,\n cropScore: 0,\n weedScore: 0,\n plantScore: 0,\n numDetectionsUsedForDecision: 0,\n classification: 0,\n embeddingDistances: {},\n };\n}\n\nexport const TrajectorySnapshot: MessageFns = {\n encode(message: TrajectorySnapshot, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint32(message.id);\n }\n if (message.killStatus !== 0) {\n writer.uint32(16).int32(message.killStatus);\n }\n if (message.isWeed !== false) {\n writer.uint32(24).bool(message.isWeed);\n }\n if (message.xMm !== 0) {\n writer.uint32(33).double(message.xMm);\n }\n if (message.yMm !== 0) {\n writer.uint32(41).double(message.yMm);\n }\n if (message.zMm !== 0) {\n writer.uint32(49).double(message.zMm);\n }\n if (message.score !== undefined) {\n TrajectoryScore.encode(message.score, writer.uint32(58).fork()).join();\n }\n if (message.invalidScore !== undefined) {\n writer.uint32(64).int32(message.invalidScore);\n }\n if (message.radiusMm !== 0) {\n writer.uint32(73).double(message.radiusMm);\n }\n if (message.category !== \"\") {\n writer.uint32(82).string(message.category);\n }\n if (message.shootTimeRequestedMs !== 0) {\n writer.uint32(88).uint64(message.shootTimeRequestedMs);\n }\n if (message.shootTimeActualMs !== 0) {\n writer.uint32(96).uint64(message.shootTimeActualMs);\n }\n if (message.markedForThinning !== false) {\n writer.uint32(104).bool(message.markedForThinning);\n }\n if (message.trackerId !== 0) {\n writer.uint32(112).uint32(message.trackerId);\n }\n if (message.duplicateStatus !== 0) {\n writer.uint32(120).int32(message.duplicateStatus);\n }\n if (message.duplicateTrajectoryId !== 0) {\n writer.uint32(128).uint32(message.duplicateTrajectoryId);\n }\n writer.uint32(138).fork();\n for (const v of message.assignedLasers) {\n writer.uint32(v);\n }\n writer.join();\n if (message.outOfBand !== false) {\n writer.uint32(144).bool(message.outOfBand);\n }\n if (message.intersectedWithNonshootable !== false) {\n writer.uint32(152).bool(message.intersectedWithNonshootable);\n }\n Object.entries(message.detectionClasses).forEach(([key, value]) => {\n TrajectorySnapshot_DetectionClassesEntry.encode({ key: key as any, value }, writer.uint32(162).fork()).join();\n });\n if (message.confidence !== 0) {\n writer.uint32(169).double(message.confidence);\n }\n if (message.thinningState !== 0) {\n writer.uint32(176).int32(message.thinningState);\n }\n if (message.globalPos !== 0) {\n writer.uint32(185).double(message.globalPos);\n }\n if (message.scoreState !== undefined) {\n ScoreState.encode(message.scoreState, writer.uint32(194).fork()).join();\n }\n if (message.doo !== 0) {\n writer.uint32(205).float(message.doo);\n }\n if (message.distancePerspectivesCount !== 0) {\n writer.uint32(208).uint32(message.distancePerspectivesCount);\n }\n if (message.sizeCategoryIndex !== 0) {\n writer.uint32(216).int32(message.sizeCategoryIndex);\n }\n if (message.speculativeAllowed !== false) {\n writer.uint32(224).bool(message.speculativeAllowed);\n }\n if (message.protectedByTraj !== false) {\n writer.uint32(232).bool(message.protectedByTraj);\n }\n if (message.thresholds !== undefined) {\n Thresholds.encode(message.thresholds, writer.uint32(242).fork()).join();\n }\n if (message.decisions !== undefined) {\n Decisions.encode(message.decisions, writer.uint32(250).fork()).join();\n }\n if (message.cropScore !== 0) {\n writer.uint32(257).double(message.cropScore);\n }\n if (message.weedScore !== 0) {\n writer.uint32(265).double(message.weedScore);\n }\n if (message.plantScore !== 0) {\n writer.uint32(273).double(message.plantScore);\n }\n if (message.numDetectionsUsedForDecision !== 0) {\n writer.uint32(280).uint32(message.numDetectionsUsedForDecision);\n }\n if (message.classification !== 0) {\n writer.uint32(288).int32(message.classification);\n }\n Object.entries(message.embeddingDistances).forEach(([key, value]) => {\n TrajectorySnapshot_EmbeddingDistancesEntry.encode({ key: key as any, value }, writer.uint32(298).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrajectorySnapshot {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrajectorySnapshot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.killStatus = reader.int32() as any;\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.isWeed = reader.bool();\n continue;\n case 4:\n if (tag !== 33) {\n break;\n }\n\n message.xMm = reader.double();\n continue;\n case 5:\n if (tag !== 41) {\n break;\n }\n\n message.yMm = reader.double();\n continue;\n case 6:\n if (tag !== 49) {\n break;\n }\n\n message.zMm = reader.double();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.score = TrajectoryScore.decode(reader, reader.uint32());\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.invalidScore = reader.int32() as any;\n continue;\n case 9:\n if (tag !== 73) {\n break;\n }\n\n message.radiusMm = reader.double();\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.category = reader.string();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.shootTimeRequestedMs = longToNumber(reader.uint64());\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n\n message.shootTimeActualMs = longToNumber(reader.uint64());\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n\n message.markedForThinning = reader.bool();\n continue;\n case 14:\n if (tag !== 112) {\n break;\n }\n\n message.trackerId = reader.uint32();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.duplicateStatus = reader.int32() as any;\n continue;\n case 16:\n if (tag !== 128) {\n break;\n }\n\n message.duplicateTrajectoryId = reader.uint32();\n continue;\n case 17:\n if (tag === 136) {\n message.assignedLasers.push(reader.uint32());\n\n continue;\n }\n\n if (tag === 138) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.assignedLasers.push(reader.uint32());\n }\n\n continue;\n }\n\n break;\n case 18:\n if (tag !== 144) {\n break;\n }\n\n message.outOfBand = reader.bool();\n continue;\n case 19:\n if (tag !== 152) {\n break;\n }\n\n message.intersectedWithNonshootable = reader.bool();\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n\n const entry20 = TrajectorySnapshot_DetectionClassesEntry.decode(reader, reader.uint32());\n if (entry20.value !== undefined) {\n message.detectionClasses[entry20.key] = entry20.value;\n }\n continue;\n case 21:\n if (tag !== 169) {\n break;\n }\n\n message.confidence = reader.double();\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n\n message.thinningState = reader.int32() as any;\n continue;\n case 23:\n if (tag !== 185) {\n break;\n }\n\n message.globalPos = reader.double();\n continue;\n case 24:\n if (tag !== 194) {\n break;\n }\n\n message.scoreState = ScoreState.decode(reader, reader.uint32());\n continue;\n case 25:\n if (tag !== 205) {\n break;\n }\n\n message.doo = reader.float();\n continue;\n case 26:\n if (tag !== 208) {\n break;\n }\n\n message.distancePerspectivesCount = reader.uint32();\n continue;\n case 27:\n if (tag !== 216) {\n break;\n }\n\n message.sizeCategoryIndex = reader.int32();\n continue;\n case 28:\n if (tag !== 224) {\n break;\n }\n\n message.speculativeAllowed = reader.bool();\n continue;\n case 29:\n if (tag !== 232) {\n break;\n }\n\n message.protectedByTraj = reader.bool();\n continue;\n case 30:\n if (tag !== 242) {\n break;\n }\n\n message.thresholds = Thresholds.decode(reader, reader.uint32());\n continue;\n case 31:\n if (tag !== 250) {\n break;\n }\n\n message.decisions = Decisions.decode(reader, reader.uint32());\n continue;\n case 32:\n if (tag !== 257) {\n break;\n }\n\n message.cropScore = reader.double();\n continue;\n case 33:\n if (tag !== 265) {\n break;\n }\n\n message.weedScore = reader.double();\n continue;\n case 34:\n if (tag !== 273) {\n break;\n }\n\n message.plantScore = reader.double();\n continue;\n case 35:\n if (tag !== 280) {\n break;\n }\n\n message.numDetectionsUsedForDecision = reader.uint32();\n continue;\n case 36:\n if (tag !== 288) {\n break;\n }\n\n message.classification = reader.int32() as any;\n continue;\n case 37:\n if (tag !== 298) {\n break;\n }\n\n const entry37 = TrajectorySnapshot_EmbeddingDistancesEntry.decode(reader, reader.uint32());\n if (entry37.value !== undefined) {\n message.embeddingDistances[entry37.key] = entry37.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrajectorySnapshot {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n killStatus: isSet(object.killStatus) ? killStatusFromJSON(object.killStatus) : 0,\n isWeed: isSet(object.isWeed) ? globalThis.Boolean(object.isWeed) : false,\n xMm: isSet(object.xMm) ? globalThis.Number(object.xMm) : 0,\n yMm: isSet(object.yMm) ? globalThis.Number(object.yMm) : 0,\n zMm: isSet(object.zMm) ? globalThis.Number(object.zMm) : 0,\n score: isSet(object.score) ? TrajectoryScore.fromJSON(object.score) : undefined,\n invalidScore: isSet(object.invalidScore) ? invalidScoreReasonFromJSON(object.invalidScore) : undefined,\n radiusMm: isSet(object.radiusMm) ? globalThis.Number(object.radiusMm) : 0,\n category: isSet(object.category) ? globalThis.String(object.category) : \"\",\n shootTimeRequestedMs: isSet(object.shootTimeRequestedMs) ? globalThis.Number(object.shootTimeRequestedMs) : 0,\n shootTimeActualMs: isSet(object.shootTimeActualMs) ? globalThis.Number(object.shootTimeActualMs) : 0,\n markedForThinning: isSet(object.markedForThinning) ? globalThis.Boolean(object.markedForThinning) : false,\n trackerId: isSet(object.trackerId) ? globalThis.Number(object.trackerId) : 0,\n duplicateStatus: isSet(object.duplicateStatus) ? duplicateStatusFromJSON(object.duplicateStatus) : 0,\n duplicateTrajectoryId: isSet(object.duplicateTrajectoryId) ? globalThis.Number(object.duplicateTrajectoryId) : 0,\n assignedLasers: globalThis.Array.isArray(object?.assignedLasers)\n ? object.assignedLasers.map((e: any) => globalThis.Number(e))\n : [],\n outOfBand: isSet(object.outOfBand) ? globalThis.Boolean(object.outOfBand) : false,\n intersectedWithNonshootable: isSet(object.intersectedWithNonshootable)\n ? globalThis.Boolean(object.intersectedWithNonshootable)\n : false,\n detectionClasses: isObject(object.detectionClasses)\n ? Object.entries(object.detectionClasses).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n confidence: isSet(object.confidence) ? globalThis.Number(object.confidence) : 0,\n thinningState: isSet(object.thinningState) ? thinningStateFromJSON(object.thinningState) : 0,\n globalPos: isSet(object.globalPos) ? globalThis.Number(object.globalPos) : 0,\n scoreState: isSet(object.scoreState) ? ScoreState.fromJSON(object.scoreState) : undefined,\n doo: isSet(object.doo) ? globalThis.Number(object.doo) : 0,\n distancePerspectivesCount: isSet(object.distancePerspectivesCount)\n ? globalThis.Number(object.distancePerspectivesCount)\n : 0,\n sizeCategoryIndex: isSet(object.sizeCategoryIndex) ? globalThis.Number(object.sizeCategoryIndex) : 0,\n speculativeAllowed: isSet(object.speculativeAllowed) ? globalThis.Boolean(object.speculativeAllowed) : false,\n protectedByTraj: isSet(object.protectedByTraj) ? globalThis.Boolean(object.protectedByTraj) : false,\n thresholds: isSet(object.thresholds) ? Thresholds.fromJSON(object.thresholds) : undefined,\n decisions: isSet(object.decisions) ? Decisions.fromJSON(object.decisions) : undefined,\n cropScore: isSet(object.cropScore) ? globalThis.Number(object.cropScore) : 0,\n weedScore: isSet(object.weedScore) ? globalThis.Number(object.weedScore) : 0,\n plantScore: isSet(object.plantScore) ? globalThis.Number(object.plantScore) : 0,\n numDetectionsUsedForDecision: isSet(object.numDetectionsUsedForDecision)\n ? globalThis.Number(object.numDetectionsUsedForDecision)\n : 0,\n classification: isSet(object.classification) ? classificationFromJSON(object.classification) : 0,\n embeddingDistances: isObject(object.embeddingDistances)\n ? Object.entries(object.embeddingDistances).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: TrajectorySnapshot): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.killStatus !== 0) {\n obj.killStatus = killStatusToJSON(message.killStatus);\n }\n if (message.isWeed !== false) {\n obj.isWeed = message.isWeed;\n }\n if (message.xMm !== 0) {\n obj.xMm = message.xMm;\n }\n if (message.yMm !== 0) {\n obj.yMm = message.yMm;\n }\n if (message.zMm !== 0) {\n obj.zMm = message.zMm;\n }\n if (message.score !== undefined) {\n obj.score = TrajectoryScore.toJSON(message.score);\n }\n if (message.invalidScore !== undefined) {\n obj.invalidScore = invalidScoreReasonToJSON(message.invalidScore);\n }\n if (message.radiusMm !== 0) {\n obj.radiusMm = message.radiusMm;\n }\n if (message.category !== \"\") {\n obj.category = message.category;\n }\n if (message.shootTimeRequestedMs !== 0) {\n obj.shootTimeRequestedMs = Math.round(message.shootTimeRequestedMs);\n }\n if (message.shootTimeActualMs !== 0) {\n obj.shootTimeActualMs = Math.round(message.shootTimeActualMs);\n }\n if (message.markedForThinning !== false) {\n obj.markedForThinning = message.markedForThinning;\n }\n if (message.trackerId !== 0) {\n obj.trackerId = Math.round(message.trackerId);\n }\n if (message.duplicateStatus !== 0) {\n obj.duplicateStatus = duplicateStatusToJSON(message.duplicateStatus);\n }\n if (message.duplicateTrajectoryId !== 0) {\n obj.duplicateTrajectoryId = Math.round(message.duplicateTrajectoryId);\n }\n if (message.assignedLasers?.length) {\n obj.assignedLasers = message.assignedLasers.map((e) => Math.round(e));\n }\n if (message.outOfBand !== false) {\n obj.outOfBand = message.outOfBand;\n }\n if (message.intersectedWithNonshootable !== false) {\n obj.intersectedWithNonshootable = message.intersectedWithNonshootable;\n }\n if (message.detectionClasses) {\n const entries = Object.entries(message.detectionClasses);\n if (entries.length > 0) {\n obj.detectionClasses = {};\n entries.forEach(([k, v]) => {\n obj.detectionClasses[k] = v;\n });\n }\n }\n if (message.confidence !== 0) {\n obj.confidence = message.confidence;\n }\n if (message.thinningState !== 0) {\n obj.thinningState = thinningStateToJSON(message.thinningState);\n }\n if (message.globalPos !== 0) {\n obj.globalPos = message.globalPos;\n }\n if (message.scoreState !== undefined) {\n obj.scoreState = ScoreState.toJSON(message.scoreState);\n }\n if (message.doo !== 0) {\n obj.doo = message.doo;\n }\n if (message.distancePerspectivesCount !== 0) {\n obj.distancePerspectivesCount = Math.round(message.distancePerspectivesCount);\n }\n if (message.sizeCategoryIndex !== 0) {\n obj.sizeCategoryIndex = Math.round(message.sizeCategoryIndex);\n }\n if (message.speculativeAllowed !== false) {\n obj.speculativeAllowed = message.speculativeAllowed;\n }\n if (message.protectedByTraj !== false) {\n obj.protectedByTraj = message.protectedByTraj;\n }\n if (message.thresholds !== undefined) {\n obj.thresholds = Thresholds.toJSON(message.thresholds);\n }\n if (message.decisions !== undefined) {\n obj.decisions = Decisions.toJSON(message.decisions);\n }\n if (message.cropScore !== 0) {\n obj.cropScore = message.cropScore;\n }\n if (message.weedScore !== 0) {\n obj.weedScore = message.weedScore;\n }\n if (message.plantScore !== 0) {\n obj.plantScore = message.plantScore;\n }\n if (message.numDetectionsUsedForDecision !== 0) {\n obj.numDetectionsUsedForDecision = Math.round(message.numDetectionsUsedForDecision);\n }\n if (message.classification !== 0) {\n obj.classification = classificationToJSON(message.classification);\n }\n if (message.embeddingDistances) {\n const entries = Object.entries(message.embeddingDistances);\n if (entries.length > 0) {\n obj.embeddingDistances = {};\n entries.forEach(([k, v]) => {\n obj.embeddingDistances[k] = v;\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): TrajectorySnapshot {\n return TrajectorySnapshot.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrajectorySnapshot {\n const message = createBaseTrajectorySnapshot();\n message.id = object.id ?? 0;\n message.killStatus = object.killStatus ?? 0;\n message.isWeed = object.isWeed ?? false;\n message.xMm = object.xMm ?? 0;\n message.yMm = object.yMm ?? 0;\n message.zMm = object.zMm ?? 0;\n message.score = (object.score !== undefined && object.score !== null)\n ? TrajectoryScore.fromPartial(object.score)\n : undefined;\n message.invalidScore = object.invalidScore ?? undefined;\n message.radiusMm = object.radiusMm ?? 0;\n message.category = object.category ?? \"\";\n message.shootTimeRequestedMs = object.shootTimeRequestedMs ?? 0;\n message.shootTimeActualMs = object.shootTimeActualMs ?? 0;\n message.markedForThinning = object.markedForThinning ?? false;\n message.trackerId = object.trackerId ?? 0;\n message.duplicateStatus = object.duplicateStatus ?? 0;\n message.duplicateTrajectoryId = object.duplicateTrajectoryId ?? 0;\n message.assignedLasers = object.assignedLasers?.map((e) => e) || [];\n message.outOfBand = object.outOfBand ?? false;\n message.intersectedWithNonshootable = object.intersectedWithNonshootable ?? false;\n message.detectionClasses = Object.entries(object.detectionClasses ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n message.confidence = object.confidence ?? 0;\n message.thinningState = object.thinningState ?? 0;\n message.globalPos = object.globalPos ?? 0;\n message.scoreState = (object.scoreState !== undefined && object.scoreState !== null)\n ? ScoreState.fromPartial(object.scoreState)\n : undefined;\n message.doo = object.doo ?? 0;\n message.distancePerspectivesCount = object.distancePerspectivesCount ?? 0;\n message.sizeCategoryIndex = object.sizeCategoryIndex ?? 0;\n message.speculativeAllowed = object.speculativeAllowed ?? false;\n message.protectedByTraj = object.protectedByTraj ?? false;\n message.thresholds = (object.thresholds !== undefined && object.thresholds !== null)\n ? Thresholds.fromPartial(object.thresholds)\n : undefined;\n message.decisions = (object.decisions !== undefined && object.decisions !== null)\n ? Decisions.fromPartial(object.decisions)\n : undefined;\n message.cropScore = object.cropScore ?? 0;\n message.weedScore = object.weedScore ?? 0;\n message.plantScore = object.plantScore ?? 0;\n message.numDetectionsUsedForDecision = object.numDetectionsUsedForDecision ?? 0;\n message.classification = object.classification ?? 0;\n message.embeddingDistances = Object.entries(object.embeddingDistances ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseTrajectorySnapshot_DetectionClassesEntry(): TrajectorySnapshot_DetectionClassesEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const TrajectorySnapshot_DetectionClassesEntry: MessageFns = {\n encode(message: TrajectorySnapshot_DetectionClassesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(17).double(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrajectorySnapshot_DetectionClassesEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrajectorySnapshot_DetectionClassesEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.value = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrajectorySnapshot_DetectionClassesEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: TrajectorySnapshot_DetectionClassesEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): TrajectorySnapshot_DetectionClassesEntry {\n return TrajectorySnapshot_DetectionClassesEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): TrajectorySnapshot_DetectionClassesEntry {\n const message = createBaseTrajectorySnapshot_DetectionClassesEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseTrajectorySnapshot_EmbeddingDistancesEntry(): TrajectorySnapshot_EmbeddingDistancesEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const TrajectorySnapshot_EmbeddingDistancesEntry: MessageFns = {\n encode(message: TrajectorySnapshot_EmbeddingDistancesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(21).float(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrajectorySnapshot_EmbeddingDistancesEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrajectorySnapshot_EmbeddingDistancesEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.value = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrajectorySnapshot_EmbeddingDistancesEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: TrajectorySnapshot_EmbeddingDistancesEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): TrajectorySnapshot_EmbeddingDistancesEntry {\n return TrajectorySnapshot_EmbeddingDistancesEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): TrajectorySnapshot_EmbeddingDistancesEntry {\n const message = createBaseTrajectorySnapshot_EmbeddingDistancesEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseBandDefinition(): BandDefinition {\n return { offsetMm: 0, widthMm: 0, id: 0 };\n}\n\nexport const BandDefinition: MessageFns = {\n encode(message: BandDefinition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.offsetMm !== 0) {\n writer.uint32(13).float(message.offsetMm);\n }\n if (message.widthMm !== 0) {\n writer.uint32(21).float(message.widthMm);\n }\n if (message.id !== 0) {\n writer.uint32(24).int32(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BandDefinition {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBandDefinition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.offsetMm = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.widthMm = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.id = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BandDefinition {\n return {\n offsetMm: isSet(object.offsetMm) ? globalThis.Number(object.offsetMm) : 0,\n widthMm: isSet(object.widthMm) ? globalThis.Number(object.widthMm) : 0,\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n };\n },\n\n toJSON(message: BandDefinition): unknown {\n const obj: any = {};\n if (message.offsetMm !== 0) {\n obj.offsetMm = message.offsetMm;\n }\n if (message.widthMm !== 0) {\n obj.widthMm = message.widthMm;\n }\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): BandDefinition {\n return BandDefinition.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BandDefinition {\n const message = createBaseBandDefinition();\n message.offsetMm = object.offsetMm ?? 0;\n message.widthMm = object.widthMm ?? 0;\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseDiagnosticsSnapshot(): DiagnosticsSnapshot {\n return { timestampMs: 0, trajectories: [], bands: [], killBoxes: [] };\n}\n\nexport const DiagnosticsSnapshot: MessageFns = {\n encode(message: DiagnosticsSnapshot, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.timestampMs !== 0) {\n writer.uint32(8).uint64(message.timestampMs);\n }\n for (const v of message.trajectories) {\n TrajectorySnapshot.encode(v!, writer.uint32(18).fork()).join();\n }\n for (const v of message.bands) {\n BandDefinition.encode(v!, writer.uint32(26).fork()).join();\n }\n for (const v of message.killBoxes) {\n KillBox.encode(v!, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DiagnosticsSnapshot {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDiagnosticsSnapshot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.trajectories.push(TrajectorySnapshot.decode(reader, reader.uint32()));\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.bands.push(BandDefinition.decode(reader, reader.uint32()));\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.killBoxes.push(KillBox.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DiagnosticsSnapshot {\n return {\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n trajectories: globalThis.Array.isArray(object?.trajectories)\n ? object.trajectories.map((e: any) => TrajectorySnapshot.fromJSON(e))\n : [],\n bands: globalThis.Array.isArray(object?.bands) ? object.bands.map((e: any) => BandDefinition.fromJSON(e)) : [],\n killBoxes: globalThis.Array.isArray(object?.killBoxes)\n ? object.killBoxes.map((e: any) => KillBox.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: DiagnosticsSnapshot): unknown {\n const obj: any = {};\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.trajectories?.length) {\n obj.trajectories = message.trajectories.map((e) => TrajectorySnapshot.toJSON(e));\n }\n if (message.bands?.length) {\n obj.bands = message.bands.map((e) => BandDefinition.toJSON(e));\n }\n if (message.killBoxes?.length) {\n obj.killBoxes = message.killBoxes.map((e) => KillBox.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): DiagnosticsSnapshot {\n return DiagnosticsSnapshot.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DiagnosticsSnapshot {\n const message = createBaseDiagnosticsSnapshot();\n message.timestampMs = object.timestampMs ?? 0;\n message.trajectories = object.trajectories?.map((e) => TrajectorySnapshot.fromPartial(e)) || [];\n message.bands = object.bands?.map((e) => BandDefinition.fromPartial(e)) || [];\n message.killBoxes = object.killBoxes?.map((e) => KillBox.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseRecordDiagnosticsRequest(): RecordDiagnosticsRequest {\n return { ttlSec: 0, cropImagesPerSec: 0, weedImagesPerSec: 0 };\n}\n\nexport const RecordDiagnosticsRequest: MessageFns = {\n encode(message: RecordDiagnosticsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.ttlSec !== 0) {\n writer.uint32(8).uint32(message.ttlSec);\n }\n if (message.cropImagesPerSec !== 0) {\n writer.uint32(21).float(message.cropImagesPerSec);\n }\n if (message.weedImagesPerSec !== 0) {\n writer.uint32(29).float(message.weedImagesPerSec);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RecordDiagnosticsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRecordDiagnosticsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.ttlSec = reader.uint32();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.cropImagesPerSec = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.weedImagesPerSec = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RecordDiagnosticsRequest {\n return {\n ttlSec: isSet(object.ttlSec) ? globalThis.Number(object.ttlSec) : 0,\n cropImagesPerSec: isSet(object.cropImagesPerSec) ? globalThis.Number(object.cropImagesPerSec) : 0,\n weedImagesPerSec: isSet(object.weedImagesPerSec) ? globalThis.Number(object.weedImagesPerSec) : 0,\n };\n },\n\n toJSON(message: RecordDiagnosticsRequest): unknown {\n const obj: any = {};\n if (message.ttlSec !== 0) {\n obj.ttlSec = Math.round(message.ttlSec);\n }\n if (message.cropImagesPerSec !== 0) {\n obj.cropImagesPerSec = message.cropImagesPerSec;\n }\n if (message.weedImagesPerSec !== 0) {\n obj.weedImagesPerSec = message.weedImagesPerSec;\n }\n return obj;\n },\n\n create, I>>(base?: I): RecordDiagnosticsRequest {\n return RecordDiagnosticsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RecordDiagnosticsRequest {\n const message = createBaseRecordDiagnosticsRequest();\n message.ttlSec = object.ttlSec ?? 0;\n message.cropImagesPerSec = object.cropImagesPerSec ?? 0;\n message.weedImagesPerSec = object.weedImagesPerSec ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetRecordingStatusResponse(): GetRecordingStatusResponse {\n return { status: 0 };\n}\n\nexport const GetRecordingStatusResponse: MessageFns = {\n encode(message: GetRecordingStatusResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.status !== 0) {\n writer.uint32(8).int32(message.status);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetRecordingStatusResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetRecordingStatusResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.status = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetRecordingStatusResponse {\n return { status: isSet(object.status) ? recordingStatusFromJSON(object.status) : 0 };\n },\n\n toJSON(message: GetRecordingStatusResponse): unknown {\n const obj: any = {};\n if (message.status !== 0) {\n obj.status = recordingStatusToJSON(message.status);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetRecordingStatusResponse {\n return GetRecordingStatusResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetRecordingStatusResponse {\n const message = createBaseGetRecordingStatusResponse();\n message.status = object.status ?? 0;\n return message;\n },\n};\n\nfunction createBaseStartSavingCropLineDetectionReplayRequest(): StartSavingCropLineDetectionReplayRequest {\n return { filename: \"\", ttlMs: 0 };\n}\n\nexport const StartSavingCropLineDetectionReplayRequest: MessageFns = {\n encode(message: StartSavingCropLineDetectionReplayRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.filename !== \"\") {\n writer.uint32(10).string(message.filename);\n }\n if (message.ttlMs !== 0) {\n writer.uint32(16).uint32(message.ttlMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StartSavingCropLineDetectionReplayRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStartSavingCropLineDetectionReplayRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.filename = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.ttlMs = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StartSavingCropLineDetectionReplayRequest {\n return {\n filename: isSet(object.filename) ? globalThis.String(object.filename) : \"\",\n ttlMs: isSet(object.ttlMs) ? globalThis.Number(object.ttlMs) : 0,\n };\n },\n\n toJSON(message: StartSavingCropLineDetectionReplayRequest): unknown {\n const obj: any = {};\n if (message.filename !== \"\") {\n obj.filename = message.filename;\n }\n if (message.ttlMs !== 0) {\n obj.ttlMs = Math.round(message.ttlMs);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): StartSavingCropLineDetectionReplayRequest {\n return StartSavingCropLineDetectionReplayRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): StartSavingCropLineDetectionReplayRequest {\n const message = createBaseStartSavingCropLineDetectionReplayRequest();\n message.filename = object.filename ?? \"\";\n message.ttlMs = object.ttlMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseRecordAimbotInputRequest(): RecordAimbotInputRequest {\n return { name: \"\", ttlMs: 0, rotaryTicks: undefined, deepweed: undefined, laneHeights: undefined };\n}\n\nexport const RecordAimbotInputRequest: MessageFns = {\n encode(message: RecordAimbotInputRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.ttlMs !== 0) {\n writer.uint32(16).uint32(message.ttlMs);\n }\n if (message.rotaryTicks !== undefined) {\n writer.uint32(24).bool(message.rotaryTicks);\n }\n if (message.deepweed !== undefined) {\n writer.uint32(32).bool(message.deepweed);\n }\n if (message.laneHeights !== undefined) {\n writer.uint32(40).bool(message.laneHeights);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RecordAimbotInputRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRecordAimbotInputRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.ttlMs = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.rotaryTicks = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.deepweed = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.laneHeights = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RecordAimbotInputRequest {\n return {\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n ttlMs: isSet(object.ttlMs) ? globalThis.Number(object.ttlMs) : 0,\n rotaryTicks: isSet(object.rotaryTicks) ? globalThis.Boolean(object.rotaryTicks) : undefined,\n deepweed: isSet(object.deepweed) ? globalThis.Boolean(object.deepweed) : undefined,\n laneHeights: isSet(object.laneHeights) ? globalThis.Boolean(object.laneHeights) : undefined,\n };\n },\n\n toJSON(message: RecordAimbotInputRequest): unknown {\n const obj: any = {};\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.ttlMs !== 0) {\n obj.ttlMs = Math.round(message.ttlMs);\n }\n if (message.rotaryTicks !== undefined) {\n obj.rotaryTicks = message.rotaryTicks;\n }\n if (message.deepweed !== undefined) {\n obj.deepweed = message.deepweed;\n }\n if (message.laneHeights !== undefined) {\n obj.laneHeights = message.laneHeights;\n }\n return obj;\n },\n\n create, I>>(base?: I): RecordAimbotInputRequest {\n return RecordAimbotInputRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RecordAimbotInputRequest {\n const message = createBaseRecordAimbotInputRequest();\n message.name = object.name ?? \"\";\n message.ttlMs = object.ttlMs ?? 0;\n message.rotaryTicks = object.rotaryTicks ?? undefined;\n message.deepweed = object.deepweed ?? undefined;\n message.laneHeights = object.laneHeights ?? undefined;\n return message;\n },\n};\n\nfunction createBaseConclusionCount(): ConclusionCount {\n return { type: 0, count: 0 };\n}\n\nexport const ConclusionCount: MessageFns = {\n encode(message: ConclusionCount, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.type !== 0) {\n writer.uint32(8).int32(message.type);\n }\n if (message.count !== 0) {\n writer.uint32(16).uint32(message.count);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ConclusionCount {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConclusionCount();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.type = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.count = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ConclusionCount {\n return {\n type: isSet(object.type) ? conclusionTypeFromJSON(object.type) : 0,\n count: isSet(object.count) ? globalThis.Number(object.count) : 0,\n };\n },\n\n toJSON(message: ConclusionCount): unknown {\n const obj: any = {};\n if (message.type !== 0) {\n obj.type = conclusionTypeToJSON(message.type);\n }\n if (message.count !== 0) {\n obj.count = Math.round(message.count);\n }\n return obj;\n },\n\n create, I>>(base?: I): ConclusionCount {\n return ConclusionCount.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ConclusionCount {\n const message = createBaseConclusionCount();\n message.type = object.type ?? 0;\n message.count = object.count ?? 0;\n return message;\n },\n};\n\nfunction createBaseConclusionCounter(): ConclusionCounter {\n return { counts: [] };\n}\n\nexport const ConclusionCounter: MessageFns = {\n encode(message: ConclusionCounter, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.counts) {\n ConclusionCount.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ConclusionCounter {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConclusionCounter();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.counts.push(ConclusionCount.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ConclusionCounter {\n return {\n counts: globalThis.Array.isArray(object?.counts)\n ? object.counts.map((e: any) => ConclusionCount.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ConclusionCounter): unknown {\n const obj: any = {};\n if (message.counts?.length) {\n obj.counts = message.counts.map((e) => ConclusionCount.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): ConclusionCounter {\n return ConclusionCounter.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ConclusionCounter {\n const message = createBaseConclusionCounter();\n message.counts = object.counts?.map((e) => ConclusionCount.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseBandDefinitions(): BandDefinitions {\n return { bands: [], bandingEnabled: false, rowHasBandsDefined: false };\n}\n\nexport const BandDefinitions: MessageFns = {\n encode(message: BandDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.bands) {\n BandDefinition.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.bandingEnabled !== false) {\n writer.uint32(16).bool(message.bandingEnabled);\n }\n if (message.rowHasBandsDefined !== false) {\n writer.uint32(24).bool(message.rowHasBandsDefined);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BandDefinitions {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBandDefinitions();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.bands.push(BandDefinition.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.bandingEnabled = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.rowHasBandsDefined = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BandDefinitions {\n return {\n bands: globalThis.Array.isArray(object?.bands) ? object.bands.map((e: any) => BandDefinition.fromJSON(e)) : [],\n bandingEnabled: isSet(object.bandingEnabled) ? globalThis.Boolean(object.bandingEnabled) : false,\n rowHasBandsDefined: isSet(object.rowHasBandsDefined) ? globalThis.Boolean(object.rowHasBandsDefined) : false,\n };\n },\n\n toJSON(message: BandDefinitions): unknown {\n const obj: any = {};\n if (message.bands?.length) {\n obj.bands = message.bands.map((e) => BandDefinition.toJSON(e));\n }\n if (message.bandingEnabled !== false) {\n obj.bandingEnabled = message.bandingEnabled;\n }\n if (message.rowHasBandsDefined !== false) {\n obj.rowHasBandsDefined = message.rowHasBandsDefined;\n }\n return obj;\n },\n\n create, I>>(base?: I): BandDefinitions {\n return BandDefinitions.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BandDefinitions {\n const message = createBaseBandDefinitions();\n message.bands = object.bands?.map((e) => BandDefinition.fromPartial(e)) || [];\n message.bandingEnabled = object.bandingEnabled ?? false;\n message.rowHasBandsDefined = object.rowHasBandsDefined ?? false;\n return message;\n },\n};\n\nfunction createBasePlantCaptchaStatusResponse(): PlantCaptchaStatusResponse {\n return { status: 0, totalImages: 0, imagesTaken: 0, metadataTaken: 0 };\n}\n\nexport const PlantCaptchaStatusResponse: MessageFns = {\n encode(message: PlantCaptchaStatusResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.status !== 0) {\n writer.uint32(8).int32(message.status);\n }\n if (message.totalImages !== 0) {\n writer.uint32(16).int32(message.totalImages);\n }\n if (message.imagesTaken !== 0) {\n writer.uint32(24).int32(message.imagesTaken);\n }\n if (message.metadataTaken !== 0) {\n writer.uint32(32).int32(message.metadataTaken);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PlantCaptchaStatusResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePlantCaptchaStatusResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.status = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.totalImages = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.imagesTaken = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.metadataTaken = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PlantCaptchaStatusResponse {\n return {\n status: isSet(object.status) ? plantCaptchaStatusFromJSON(object.status) : 0,\n totalImages: isSet(object.totalImages) ? globalThis.Number(object.totalImages) : 0,\n imagesTaken: isSet(object.imagesTaken) ? globalThis.Number(object.imagesTaken) : 0,\n metadataTaken: isSet(object.metadataTaken) ? globalThis.Number(object.metadataTaken) : 0,\n };\n },\n\n toJSON(message: PlantCaptchaStatusResponse): unknown {\n const obj: any = {};\n if (message.status !== 0) {\n obj.status = plantCaptchaStatusToJSON(message.status);\n }\n if (message.totalImages !== 0) {\n obj.totalImages = Math.round(message.totalImages);\n }\n if (message.imagesTaken !== 0) {\n obj.imagesTaken = Math.round(message.imagesTaken);\n }\n if (message.metadataTaken !== 0) {\n obj.metadataTaken = Math.round(message.metadataTaken);\n }\n return obj;\n },\n\n create, I>>(base?: I): PlantCaptchaStatusResponse {\n return PlantCaptchaStatusResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PlantCaptchaStatusResponse {\n const message = createBasePlantCaptchaStatusResponse();\n message.status = object.status ?? 0;\n message.totalImages = object.totalImages ?? 0;\n message.imagesTaken = object.imagesTaken ?? 0;\n message.metadataTaken = object.metadataTaken ?? 0;\n return message;\n },\n};\n\nfunction createBaseEmbedding(): Embedding {\n return { elements: [] };\n}\n\nexport const Embedding: MessageFns = {\n encode(message: Embedding, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n writer.uint32(10).fork();\n for (const v of message.elements) {\n writer.float(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Embedding {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseEmbedding();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 13) {\n message.elements.push(reader.float());\n\n continue;\n }\n\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.elements.push(reader.float());\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): Embedding {\n return {\n elements: globalThis.Array.isArray(object?.elements) ? object.elements.map((e: any) => globalThis.Number(e)) : [],\n };\n },\n\n toJSON(message: Embedding): unknown {\n const obj: any = {};\n if (message.elements?.length) {\n obj.elements = message.elements;\n }\n return obj;\n },\n\n create, I>>(base?: I): Embedding {\n return Embedding.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): Embedding {\n const message = createBaseEmbedding();\n message.elements = object.elements?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBasePlantCaptchaItemMetadata(): PlantCaptchaItemMetadata {\n return {\n confidence: 0,\n xPx: 0,\n yPx: 0,\n xMm: 0,\n yMm: 0,\n zMm: 0,\n sizeMm: 0,\n categories: {},\n doo: 0,\n isWeed: false,\n intersectedWithNonshootable: false,\n confidenceHistory: [],\n isInBand: false,\n id: \"\",\n sizePx: 0,\n shootTimeMs: 0,\n weedConfidenceHistory: [],\n cropConfidenceHistory: [],\n sizeCategoryIndex: 0,\n weedCategories: {},\n embeddingHistory: [],\n initialLabel: 0,\n };\n}\n\nexport const PlantCaptchaItemMetadata: MessageFns = {\n encode(message: PlantCaptchaItemMetadata, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.confidence !== 0) {\n writer.uint32(13).float(message.confidence);\n }\n if (message.xPx !== 0) {\n writer.uint32(16).int32(message.xPx);\n }\n if (message.yPx !== 0) {\n writer.uint32(24).int32(message.yPx);\n }\n if (message.xMm !== 0) {\n writer.uint32(33).double(message.xMm);\n }\n if (message.yMm !== 0) {\n writer.uint32(41).double(message.yMm);\n }\n if (message.zMm !== 0) {\n writer.uint32(49).double(message.zMm);\n }\n if (message.sizeMm !== 0) {\n writer.uint32(61).float(message.sizeMm);\n }\n Object.entries(message.categories).forEach(([key, value]) => {\n PlantCaptchaItemMetadata_CategoriesEntry.encode({ key: key as any, value }, writer.uint32(66).fork()).join();\n });\n if (message.doo !== 0) {\n writer.uint32(77).float(message.doo);\n }\n if (message.isWeed !== false) {\n writer.uint32(80).bool(message.isWeed);\n }\n if (message.intersectedWithNonshootable !== false) {\n writer.uint32(88).bool(message.intersectedWithNonshootable);\n }\n writer.uint32(98).fork();\n for (const v of message.confidenceHistory) {\n writer.float(v);\n }\n writer.join();\n if (message.isInBand !== false) {\n writer.uint32(104).bool(message.isInBand);\n }\n if (message.id !== \"\") {\n writer.uint32(114).string(message.id);\n }\n if (message.sizePx !== 0) {\n writer.uint32(125).float(message.sizePx);\n }\n if (message.shootTimeMs !== 0) {\n writer.uint32(128).uint32(message.shootTimeMs);\n }\n writer.uint32(138).fork();\n for (const v of message.weedConfidenceHistory) {\n writer.float(v);\n }\n writer.join();\n writer.uint32(146).fork();\n for (const v of message.cropConfidenceHistory) {\n writer.float(v);\n }\n writer.join();\n if (message.sizeCategoryIndex !== 0) {\n writer.uint32(152).int32(message.sizeCategoryIndex);\n }\n Object.entries(message.weedCategories).forEach(([key, value]) => {\n PlantCaptchaItemMetadata_WeedCategoriesEntry.encode({ key: key as any, value }, writer.uint32(162).fork()).join();\n });\n for (const v of message.embeddingHistory) {\n Embedding.encode(v!, writer.uint32(170).fork()).join();\n }\n if (message.initialLabel !== 0) {\n writer.uint32(176).int32(message.initialLabel);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PlantCaptchaItemMetadata {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePlantCaptchaItemMetadata();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.confidence = reader.float();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.xPx = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.yPx = reader.int32();\n continue;\n case 4:\n if (tag !== 33) {\n break;\n }\n\n message.xMm = reader.double();\n continue;\n case 5:\n if (tag !== 41) {\n break;\n }\n\n message.yMm = reader.double();\n continue;\n case 6:\n if (tag !== 49) {\n break;\n }\n\n message.zMm = reader.double();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n\n message.sizeMm = reader.float();\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n const entry8 = PlantCaptchaItemMetadata_CategoriesEntry.decode(reader, reader.uint32());\n if (entry8.value !== undefined) {\n message.categories[entry8.key] = entry8.value;\n }\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n\n message.doo = reader.float();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.isWeed = reader.bool();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.intersectedWithNonshootable = reader.bool();\n continue;\n case 12:\n if (tag === 101) {\n message.confidenceHistory.push(reader.float());\n\n continue;\n }\n\n if (tag === 98) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.confidenceHistory.push(reader.float());\n }\n\n continue;\n }\n\n break;\n case 13:\n if (tag !== 104) {\n break;\n }\n\n message.isInBand = reader.bool();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 15:\n if (tag !== 125) {\n break;\n }\n\n message.sizePx = reader.float();\n continue;\n case 16:\n if (tag !== 128) {\n break;\n }\n\n message.shootTimeMs = reader.uint32();\n continue;\n case 17:\n if (tag === 141) {\n message.weedConfidenceHistory.push(reader.float());\n\n continue;\n }\n\n if (tag === 138) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.weedConfidenceHistory.push(reader.float());\n }\n\n continue;\n }\n\n break;\n case 18:\n if (tag === 149) {\n message.cropConfidenceHistory.push(reader.float());\n\n continue;\n }\n\n if (tag === 146) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.cropConfidenceHistory.push(reader.float());\n }\n\n continue;\n }\n\n break;\n case 19:\n if (tag !== 152) {\n break;\n }\n\n message.sizeCategoryIndex = reader.int32();\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n\n const entry20 = PlantCaptchaItemMetadata_WeedCategoriesEntry.decode(reader, reader.uint32());\n if (entry20.value !== undefined) {\n message.weedCategories[entry20.key] = entry20.value;\n }\n continue;\n case 21:\n if (tag !== 170) {\n break;\n }\n\n message.embeddingHistory.push(Embedding.decode(reader, reader.uint32()));\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n\n message.initialLabel = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PlantCaptchaItemMetadata {\n return {\n confidence: isSet(object.confidence) ? globalThis.Number(object.confidence) : 0,\n xPx: isSet(object.xPx) ? globalThis.Number(object.xPx) : 0,\n yPx: isSet(object.yPx) ? globalThis.Number(object.yPx) : 0,\n xMm: isSet(object.xMm) ? globalThis.Number(object.xMm) : 0,\n yMm: isSet(object.yMm) ? globalThis.Number(object.yMm) : 0,\n zMm: isSet(object.zMm) ? globalThis.Number(object.zMm) : 0,\n sizeMm: isSet(object.sizeMm) ? globalThis.Number(object.sizeMm) : 0,\n categories: isObject(object.categories)\n ? Object.entries(object.categories).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n doo: isSet(object.doo) ? globalThis.Number(object.doo) : 0,\n isWeed: isSet(object.isWeed) ? globalThis.Boolean(object.isWeed) : false,\n intersectedWithNonshootable: isSet(object.intersectedWithNonshootable)\n ? globalThis.Boolean(object.intersectedWithNonshootable)\n : false,\n confidenceHistory: globalThis.Array.isArray(object?.confidenceHistory)\n ? object.confidenceHistory.map((e: any) => globalThis.Number(e))\n : [],\n isInBand: isSet(object.isInBand) ? globalThis.Boolean(object.isInBand) : false,\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n sizePx: isSet(object.sizePx) ? globalThis.Number(object.sizePx) : 0,\n shootTimeMs: isSet(object.shootTimeMs) ? globalThis.Number(object.shootTimeMs) : 0,\n weedConfidenceHistory: globalThis.Array.isArray(object?.weedConfidenceHistory)\n ? object.weedConfidenceHistory.map((e: any) => globalThis.Number(e))\n : [],\n cropConfidenceHistory: globalThis.Array.isArray(object?.cropConfidenceHistory)\n ? object.cropConfidenceHistory.map((e: any) => globalThis.Number(e))\n : [],\n sizeCategoryIndex: isSet(object.sizeCategoryIndex) ? globalThis.Number(object.sizeCategoryIndex) : 0,\n weedCategories: isObject(object.weedCategories)\n ? Object.entries(object.weedCategories).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n embeddingHistory: globalThis.Array.isArray(object?.embeddingHistory)\n ? object.embeddingHistory.map((e: any) => Embedding.fromJSON(e))\n : [],\n initialLabel: isSet(object.initialLabel) ? plantCaptchaUserPredictionFromJSON(object.initialLabel) : 0,\n };\n },\n\n toJSON(message: PlantCaptchaItemMetadata): unknown {\n const obj: any = {};\n if (message.confidence !== 0) {\n obj.confidence = message.confidence;\n }\n if (message.xPx !== 0) {\n obj.xPx = Math.round(message.xPx);\n }\n if (message.yPx !== 0) {\n obj.yPx = Math.round(message.yPx);\n }\n if (message.xMm !== 0) {\n obj.xMm = message.xMm;\n }\n if (message.yMm !== 0) {\n obj.yMm = message.yMm;\n }\n if (message.zMm !== 0) {\n obj.zMm = message.zMm;\n }\n if (message.sizeMm !== 0) {\n obj.sizeMm = message.sizeMm;\n }\n if (message.categories) {\n const entries = Object.entries(message.categories);\n if (entries.length > 0) {\n obj.categories = {};\n entries.forEach(([k, v]) => {\n obj.categories[k] = v;\n });\n }\n }\n if (message.doo !== 0) {\n obj.doo = message.doo;\n }\n if (message.isWeed !== false) {\n obj.isWeed = message.isWeed;\n }\n if (message.intersectedWithNonshootable !== false) {\n obj.intersectedWithNonshootable = message.intersectedWithNonshootable;\n }\n if (message.confidenceHistory?.length) {\n obj.confidenceHistory = message.confidenceHistory;\n }\n if (message.isInBand !== false) {\n obj.isInBand = message.isInBand;\n }\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.sizePx !== 0) {\n obj.sizePx = message.sizePx;\n }\n if (message.shootTimeMs !== 0) {\n obj.shootTimeMs = Math.round(message.shootTimeMs);\n }\n if (message.weedConfidenceHistory?.length) {\n obj.weedConfidenceHistory = message.weedConfidenceHistory;\n }\n if (message.cropConfidenceHistory?.length) {\n obj.cropConfidenceHistory = message.cropConfidenceHistory;\n }\n if (message.sizeCategoryIndex !== 0) {\n obj.sizeCategoryIndex = Math.round(message.sizeCategoryIndex);\n }\n if (message.weedCategories) {\n const entries = Object.entries(message.weedCategories);\n if (entries.length > 0) {\n obj.weedCategories = {};\n entries.forEach(([k, v]) => {\n obj.weedCategories[k] = v;\n });\n }\n }\n if (message.embeddingHistory?.length) {\n obj.embeddingHistory = message.embeddingHistory.map((e) => Embedding.toJSON(e));\n }\n if (message.initialLabel !== 0) {\n obj.initialLabel = plantCaptchaUserPredictionToJSON(message.initialLabel);\n }\n return obj;\n },\n\n create, I>>(base?: I): PlantCaptchaItemMetadata {\n return PlantCaptchaItemMetadata.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PlantCaptchaItemMetadata {\n const message = createBasePlantCaptchaItemMetadata();\n message.confidence = object.confidence ?? 0;\n message.xPx = object.xPx ?? 0;\n message.yPx = object.yPx ?? 0;\n message.xMm = object.xMm ?? 0;\n message.yMm = object.yMm ?? 0;\n message.zMm = object.zMm ?? 0;\n message.sizeMm = object.sizeMm ?? 0;\n message.categories = Object.entries(object.categories ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n message.doo = object.doo ?? 0;\n message.isWeed = object.isWeed ?? false;\n message.intersectedWithNonshootable = object.intersectedWithNonshootable ?? false;\n message.confidenceHistory = object.confidenceHistory?.map((e) => e) || [];\n message.isInBand = object.isInBand ?? false;\n message.id = object.id ?? \"\";\n message.sizePx = object.sizePx ?? 0;\n message.shootTimeMs = object.shootTimeMs ?? 0;\n message.weedConfidenceHistory = object.weedConfidenceHistory?.map((e) => e) || [];\n message.cropConfidenceHistory = object.cropConfidenceHistory?.map((e) => e) || [];\n message.sizeCategoryIndex = object.sizeCategoryIndex ?? 0;\n message.weedCategories = Object.entries(object.weedCategories ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n message.embeddingHistory = object.embeddingHistory?.map((e) => Embedding.fromPartial(e)) || [];\n message.initialLabel = object.initialLabel ?? 0;\n return message;\n },\n};\n\nfunction createBasePlantCaptchaItemMetadata_CategoriesEntry(): PlantCaptchaItemMetadata_CategoriesEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const PlantCaptchaItemMetadata_CategoriesEntry: MessageFns = {\n encode(message: PlantCaptchaItemMetadata_CategoriesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(21).float(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PlantCaptchaItemMetadata_CategoriesEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePlantCaptchaItemMetadata_CategoriesEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.value = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PlantCaptchaItemMetadata_CategoriesEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: PlantCaptchaItemMetadata_CategoriesEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): PlantCaptchaItemMetadata_CategoriesEntry {\n return PlantCaptchaItemMetadata_CategoriesEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): PlantCaptchaItemMetadata_CategoriesEntry {\n const message = createBasePlantCaptchaItemMetadata_CategoriesEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBasePlantCaptchaItemMetadata_WeedCategoriesEntry(): PlantCaptchaItemMetadata_WeedCategoriesEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const PlantCaptchaItemMetadata_WeedCategoriesEntry: MessageFns = {\n encode(\n message: PlantCaptchaItemMetadata_WeedCategoriesEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(21).float(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PlantCaptchaItemMetadata_WeedCategoriesEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePlantCaptchaItemMetadata_WeedCategoriesEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.value = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PlantCaptchaItemMetadata_WeedCategoriesEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: PlantCaptchaItemMetadata_WeedCategoriesEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): PlantCaptchaItemMetadata_WeedCategoriesEntry {\n return PlantCaptchaItemMetadata_WeedCategoriesEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): PlantCaptchaItemMetadata_WeedCategoriesEntry {\n const message = createBasePlantCaptchaItemMetadata_WeedCategoriesEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetTargetingEnabledRequest(): GetTargetingEnabledRequest {\n return {};\n}\n\nexport const GetTargetingEnabledRequest: MessageFns = {\n encode(_: GetTargetingEnabledRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTargetingEnabledRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTargetingEnabledRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetTargetingEnabledRequest {\n return {};\n },\n\n toJSON(_: GetTargetingEnabledRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetTargetingEnabledRequest {\n return GetTargetingEnabledRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetTargetingEnabledRequest {\n const message = createBaseGetTargetingEnabledRequest();\n return message;\n },\n};\n\nfunction createBaseGetTargetingEnabledResponse(): GetTargetingEnabledResponse {\n return { enabled: false };\n}\n\nexport const GetTargetingEnabledResponse: MessageFns = {\n encode(message: GetTargetingEnabledResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.enabled !== false) {\n writer.uint32(8).bool(message.enabled);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTargetingEnabledResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTargetingEnabledResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.enabled = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetTargetingEnabledResponse {\n return { enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false };\n },\n\n toJSON(message: GetTargetingEnabledResponse): unknown {\n const obj: any = {};\n if (message.enabled !== false) {\n obj.enabled = message.enabled;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetTargetingEnabledResponse {\n return GetTargetingEnabledResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetTargetingEnabledResponse {\n const message = createBaseGetTargetingEnabledResponse();\n message.enabled = object.enabled ?? false;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: core/controls/exterminator/controllers/aimbot/process/aimbot.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Detection } from \"../../../../../../weed_tracking/weed_tracking\";\n\nexport const protobufPackage = \"aimbot\";\n\nexport enum SafetyOverrideState {\n SafetyOverrideNone = 0,\n SafetyOverrideVelocityStop = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function safetyOverrideStateFromJSON(object: any): SafetyOverrideState {\n switch (object) {\n case 0:\n case \"SafetyOverrideNone\":\n return SafetyOverrideState.SafetyOverrideNone;\n case 1:\n case \"SafetyOverrideVelocityStop\":\n return SafetyOverrideState.SafetyOverrideVelocityStop;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return SafetyOverrideState.UNRECOGNIZED;\n }\n}\n\nexport function safetyOverrideStateToJSON(object: SafetyOverrideState): string {\n switch (object) {\n case SafetyOverrideState.SafetyOverrideNone:\n return \"SafetyOverrideNone\";\n case SafetyOverrideState.SafetyOverrideVelocityStop:\n return \"SafetyOverrideVelocityStop\";\n case SafetyOverrideState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface PingRequest {\n x: number;\n}\n\nexport interface PongReply {\n x: number;\n}\n\nexport interface TargetingState {\n weedingEnabled: boolean;\n thinningEnabled: boolean;\n}\n\nexport interface AimbotState {\n algorithm: string;\n running: boolean;\n armed: boolean;\n targetingState: TargetingState | undefined;\n ready: boolean;\n safetyOverrideState: SafetyOverrideState;\n actuationTasksRunning: boolean;\n}\n\nexport interface TargetVelocityRequest {\n}\n\nexport interface TargetVelocityReply {\n velocityMin: number;\n velocityMax: number;\n}\n\nexport interface LaserTestActuationTask {\n /** 0 Means all of them */\n scannerId: number;\n durationMs: number;\n}\n\nexport interface ImageDrawActuationTask {\n /** 0 Means all of them */\n scannerId: number;\n /** 50 is a good default */\n speedMmps: number;\n}\n\nexport interface RangeDrawActuationTask {\n /** 0 Means all of them */\n scannerId: number;\n /** 20 is a good default */\n durationS: number;\n}\n\nexport interface ActuationTaskRequest {\n laserTest?: LaserTestActuationTask | undefined;\n imageDraw?: ImageDrawActuationTask | undefined;\n rangeDraw?: RangeDrawActuationTask | undefined;\n}\n\nexport interface LensSetRequest {\n scannerId: number;\n value: number;\n}\n\nexport interface LensSetReply {\n}\n\nexport interface LensGetRequest {\n scannerId: number;\n}\n\nexport interface LensGetReply {\n value: number;\n minValue: number;\n maxValue: number;\n manualAutofocusPercent: number;\n manualAutofocusing: boolean;\n scannerId: number;\n}\n\nexport interface LensGetAllReply {\n lensStatus: LensGetReply[];\n}\n\nexport interface LensAutoFocusRequest {\n scannerId: number;\n}\n\nexport interface LensAutoFocusReply {\n}\n\nexport interface StopLensAutoFocusRequest {\n scannerId: number;\n}\n\nexport interface LaserArmRequest {\n scannerId: number;\n armed: boolean;\n}\n\nexport interface LaserArmReply {\n}\n\nexport interface LaserEnableRequest {\n scannerId: number;\n enabled: boolean;\n}\n\nexport interface LaserEnableReply {\n status: boolean;\n message: string;\n}\n\nexport interface LaserFireRequest {\n scannerId: number;\n fire: boolean;\n}\n\nexport interface LaserFireReply {\n}\n\nexport interface LaserSetRequest {\n scannerId: number;\n on: boolean;\n}\n\nexport interface LaserSetReply {\n}\n\nexport interface BurnIdividualImagesRequest {\n scannerId: number[];\n speedMmps: number;\n intensity: number;\n jsonImg: string;\n}\n\nexport interface LaserState {\n enabled: boolean;\n firing: boolean;\n error: boolean;\n /**\n * Deprecated, use scanner state\n *\n * @deprecated\n */\n errorCode: string;\n /**\n * Deprecated, use scanner state\n *\n * @deprecated\n */\n errorMessage: string;\n power: boolean;\n deltaTemp: number;\n current: number;\n arced: boolean;\n powerLevel: number;\n}\n\nexport interface ServoGoToRequest {\n scannerId: number;\n servoType: ServoGoToRequest_ServoType;\n position: number;\n timeMs: number;\n awaitSettle: boolean;\n}\n\nexport enum ServoGoToRequest_ServoType {\n PAN = 0,\n TILT = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function servoGoToRequest_ServoTypeFromJSON(object: any): ServoGoToRequest_ServoType {\n switch (object) {\n case 0:\n case \"PAN\":\n return ServoGoToRequest_ServoType.PAN;\n case 1:\n case \"TILT\":\n return ServoGoToRequest_ServoType.TILT;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ServoGoToRequest_ServoType.UNRECOGNIZED;\n }\n}\n\nexport function servoGoToRequest_ServoTypeToJSON(object: ServoGoToRequest_ServoType): string {\n switch (object) {\n case ServoGoToRequest_ServoType.PAN:\n return \"PAN\";\n case ServoGoToRequest_ServoType.TILT:\n return \"TILT\";\n case ServoGoToRequest_ServoType.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface ServoGoToReply {\n}\n\nexport interface ServoGetPosVelRequest {\n scannerId: number;\n}\n\nexport interface ServoGetPosVelReply {\n panPosition: number;\n tiltPosition: number;\n panVelocity: number;\n tiltVelocity: number;\n}\n\nexport interface ServoGetLimitsRequest {\n scannerId: number;\n}\n\nexport interface ServoGetLimitsReply {\n panMin: number;\n panMax: number;\n tiltMin: number;\n tiltMax: number;\n}\n\nexport interface TuningParam {\n name: string;\n vUint?: number | undefined;\n vInt?: number | undefined;\n vBool?: boolean | undefined;\n vFloat?: number | undefined;\n vString?: string | undefined;\n}\n\nexport interface TuningParamsUpdateRequest {\n params: TuningParam[];\n}\n\nexport interface TuningParamsUpdateReply {\n}\n\nexport interface TuningParamsGetRequest {\n name: string;\n}\n\nexport interface TuningParamsGetReply {\n params: TuningParam[];\n}\n\nexport interface GetLoadEstimateRequest {\n}\n\nexport interface GetLoadEstimateReply {\n currentLoad: number;\n targetLoad: number;\n}\n\nexport interface GetDiagnosticRequest {\n}\n\nexport interface GetDiagnosticReply {\n diagnostic: string;\n}\n\nexport interface ResetDevicesRequest {\n deviceId: string;\n}\n\nexport interface ResetDevicesReply {\n}\n\nexport interface ResetScannerRequest {\n scannerId: number;\n metricsOnly: boolean;\n}\n\nexport interface ResetScannerReply {\n}\n\nexport interface ScannerDescriptor {\n id: number;\n}\n\nexport interface ScannerTargetPosition {\n scannerDescriptor: ScannerDescriptor | undefined;\n x: number;\n y: number;\n}\n\nexport interface CrosshairState {\n x: number;\n y: number;\n calibrating: boolean;\n calibrationFailed: boolean;\n}\n\nexport interface ScannerState {\n scannerDescriptor: ScannerDescriptor | undefined;\n laserState: LaserState | undefined;\n crosshairState: CrosshairState | undefined;\n scannerError: boolean;\n errorCode: string;\n errorMessage: string;\n targetTrajectoryId: number;\n panFailure: boolean;\n tiltFailure: boolean;\n}\n\nexport interface AutoXHairCalibrationProgress {\n inProgress: boolean;\n progress: number;\n}\n\nexport interface ScannerStatusReply {\n states: ScannerState[];\n xHairProgress: AutoXHairCalibrationProgress | undefined;\n}\n\nexport interface BootedReply {\n booted: boolean;\n}\n\nexport interface TrackerState {\n id: number;\n atWeedLimit: boolean;\n rotaryTimeout: boolean;\n deepweedError: boolean;\n}\n\nexport interface SchedulerState {\n overCapacity: boolean;\n}\n\nexport interface TrackingState {\n states: TrackerState[];\n schedulerState: SchedulerState | undefined;\n}\n\nexport interface BedtopHeightProfile {\n weedHeightColumns: number[];\n cropHeightColumns: number[];\n pcamId: string;\n}\n\nexport interface TrackerBedtopHeightProfile {\n profiles: BedtopHeightProfile[];\n bbhOffsetMm: number;\n}\n\nexport interface GetDimensionsResponse {\n minXMm: number;\n maxXMm: number;\n minYMm: number;\n maxYMm: number;\n centerXMm: number;\n}\n\nexport interface GetTargetCamSNRequest {\n cameraId: string;\n}\n\nexport interface GetTargetCamSNResponse {\n serialNumber: string;\n}\n\nexport interface ReloadThinningConfRequest {\n}\n\nexport interface ReloadAlmanacConfRequest {\n}\n\nexport interface ReloadDiscriminatorConfRequest {\n}\n\nexport interface ReloadModelinatorConfRequest {\n}\n\nexport interface ReloadTVEProfileRequest {\n}\n\nexport interface FixLaserMetricsRequest {\n scanner: ScannerDescriptor | undefined;\n totalFireCount: number;\n totalFireTimeMs: number;\n}\n\nexport interface TrackedItemsRequest {\n camId: string;\n}\n\nexport interface TrackedItemHistory {\n timestampMs: number;\n detection: Detection | undefined;\n}\n\nexport interface TrackedItem {\n id: number;\n history: TrackedItemHistory[];\n}\n\nexport interface TrackedItemsResponse {\n trackedItems: TrackedItem[];\n}\n\nexport interface ParticipationResponse {\n runningAsLeader: boolean;\n}\n\nfunction createBasePingRequest(): PingRequest {\n return { x: 0 };\n}\n\nexport const PingRequest: MessageFns = {\n encode(message: PingRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(8).uint32(message.x);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PingRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePingRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.x = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PingRequest {\n return { x: isSet(object.x) ? globalThis.Number(object.x) : 0 };\n },\n\n toJSON(message: PingRequest): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = Math.round(message.x);\n }\n return obj;\n },\n\n create, I>>(base?: I): PingRequest {\n return PingRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PingRequest {\n const message = createBasePingRequest();\n message.x = object.x ?? 0;\n return message;\n },\n};\n\nfunction createBasePongReply(): PongReply {\n return { x: 0 };\n}\n\nexport const PongReply: MessageFns = {\n encode(message: PongReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(8).uint32(message.x);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PongReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePongReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.x = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PongReply {\n return { x: isSet(object.x) ? globalThis.Number(object.x) : 0 };\n },\n\n toJSON(message: PongReply): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = Math.round(message.x);\n }\n return obj;\n },\n\n create, I>>(base?: I): PongReply {\n return PongReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PongReply {\n const message = createBasePongReply();\n message.x = object.x ?? 0;\n return message;\n },\n};\n\nfunction createBaseTargetingState(): TargetingState {\n return { weedingEnabled: false, thinningEnabled: false };\n}\n\nexport const TargetingState: MessageFns = {\n encode(message: TargetingState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.weedingEnabled !== false) {\n writer.uint32(8).bool(message.weedingEnabled);\n }\n if (message.thinningEnabled !== false) {\n writer.uint32(16).bool(message.thinningEnabled);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TargetingState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTargetingState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.weedingEnabled = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.thinningEnabled = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TargetingState {\n return {\n weedingEnabled: isSet(object.weedingEnabled) ? globalThis.Boolean(object.weedingEnabled) : false,\n thinningEnabled: isSet(object.thinningEnabled) ? globalThis.Boolean(object.thinningEnabled) : false,\n };\n },\n\n toJSON(message: TargetingState): unknown {\n const obj: any = {};\n if (message.weedingEnabled !== false) {\n obj.weedingEnabled = message.weedingEnabled;\n }\n if (message.thinningEnabled !== false) {\n obj.thinningEnabled = message.thinningEnabled;\n }\n return obj;\n },\n\n create, I>>(base?: I): TargetingState {\n return TargetingState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TargetingState {\n const message = createBaseTargetingState();\n message.weedingEnabled = object.weedingEnabled ?? false;\n message.thinningEnabled = object.thinningEnabled ?? false;\n return message;\n },\n};\n\nfunction createBaseAimbotState(): AimbotState {\n return {\n algorithm: \"\",\n running: false,\n armed: false,\n targetingState: undefined,\n ready: false,\n safetyOverrideState: 0,\n actuationTasksRunning: false,\n };\n}\n\nexport const AimbotState: MessageFns = {\n encode(message: AimbotState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.algorithm !== \"\") {\n writer.uint32(10).string(message.algorithm);\n }\n if (message.running !== false) {\n writer.uint32(16).bool(message.running);\n }\n if (message.armed !== false) {\n writer.uint32(24).bool(message.armed);\n }\n if (message.targetingState !== undefined) {\n TargetingState.encode(message.targetingState, writer.uint32(34).fork()).join();\n }\n if (message.ready !== false) {\n writer.uint32(40).bool(message.ready);\n }\n if (message.safetyOverrideState !== 0) {\n writer.uint32(48).int32(message.safetyOverrideState);\n }\n if (message.actuationTasksRunning !== false) {\n writer.uint32(56).bool(message.actuationTasksRunning);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AimbotState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAimbotState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.algorithm = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.running = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.armed = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.targetingState = TargetingState.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.ready = reader.bool();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.safetyOverrideState = reader.int32() as any;\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.actuationTasksRunning = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AimbotState {\n return {\n algorithm: isSet(object.algorithm) ? globalThis.String(object.algorithm) : \"\",\n running: isSet(object.running) ? globalThis.Boolean(object.running) : false,\n armed: isSet(object.armed) ? globalThis.Boolean(object.armed) : false,\n targetingState: isSet(object.targetingState) ? TargetingState.fromJSON(object.targetingState) : undefined,\n ready: isSet(object.ready) ? globalThis.Boolean(object.ready) : false,\n safetyOverrideState: isSet(object.safetyOverrideState)\n ? safetyOverrideStateFromJSON(object.safetyOverrideState)\n : 0,\n actuationTasksRunning: isSet(object.actuationTasksRunning)\n ? globalThis.Boolean(object.actuationTasksRunning)\n : false,\n };\n },\n\n toJSON(message: AimbotState): unknown {\n const obj: any = {};\n if (message.algorithm !== \"\") {\n obj.algorithm = message.algorithm;\n }\n if (message.running !== false) {\n obj.running = message.running;\n }\n if (message.armed !== false) {\n obj.armed = message.armed;\n }\n if (message.targetingState !== undefined) {\n obj.targetingState = TargetingState.toJSON(message.targetingState);\n }\n if (message.ready !== false) {\n obj.ready = message.ready;\n }\n if (message.safetyOverrideState !== 0) {\n obj.safetyOverrideState = safetyOverrideStateToJSON(message.safetyOverrideState);\n }\n if (message.actuationTasksRunning !== false) {\n obj.actuationTasksRunning = message.actuationTasksRunning;\n }\n return obj;\n },\n\n create, I>>(base?: I): AimbotState {\n return AimbotState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AimbotState {\n const message = createBaseAimbotState();\n message.algorithm = object.algorithm ?? \"\";\n message.running = object.running ?? false;\n message.armed = object.armed ?? false;\n message.targetingState = (object.targetingState !== undefined && object.targetingState !== null)\n ? TargetingState.fromPartial(object.targetingState)\n : undefined;\n message.ready = object.ready ?? false;\n message.safetyOverrideState = object.safetyOverrideState ?? 0;\n message.actuationTasksRunning = object.actuationTasksRunning ?? false;\n return message;\n },\n};\n\nfunction createBaseTargetVelocityRequest(): TargetVelocityRequest {\n return {};\n}\n\nexport const TargetVelocityRequest: MessageFns = {\n encode(_: TargetVelocityRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TargetVelocityRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTargetVelocityRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): TargetVelocityRequest {\n return {};\n },\n\n toJSON(_: TargetVelocityRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): TargetVelocityRequest {\n return TargetVelocityRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): TargetVelocityRequest {\n const message = createBaseTargetVelocityRequest();\n return message;\n },\n};\n\nfunction createBaseTargetVelocityReply(): TargetVelocityReply {\n return { velocityMin: 0, velocityMax: 0 };\n}\n\nexport const TargetVelocityReply: MessageFns = {\n encode(message: TargetVelocityReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.velocityMin !== 0) {\n writer.uint32(13).float(message.velocityMin);\n }\n if (message.velocityMax !== 0) {\n writer.uint32(21).float(message.velocityMax);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TargetVelocityReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTargetVelocityReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.velocityMin = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.velocityMax = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TargetVelocityReply {\n return {\n velocityMin: isSet(object.velocityMin) ? globalThis.Number(object.velocityMin) : 0,\n velocityMax: isSet(object.velocityMax) ? globalThis.Number(object.velocityMax) : 0,\n };\n },\n\n toJSON(message: TargetVelocityReply): unknown {\n const obj: any = {};\n if (message.velocityMin !== 0) {\n obj.velocityMin = message.velocityMin;\n }\n if (message.velocityMax !== 0) {\n obj.velocityMax = message.velocityMax;\n }\n return obj;\n },\n\n create, I>>(base?: I): TargetVelocityReply {\n return TargetVelocityReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TargetVelocityReply {\n const message = createBaseTargetVelocityReply();\n message.velocityMin = object.velocityMin ?? 0;\n message.velocityMax = object.velocityMax ?? 0;\n return message;\n },\n};\n\nfunction createBaseLaserTestActuationTask(): LaserTestActuationTask {\n return { scannerId: 0, durationMs: 0 };\n}\n\nexport const LaserTestActuationTask: MessageFns = {\n encode(message: LaserTestActuationTask, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.durationMs !== 0) {\n writer.uint32(16).uint32(message.durationMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserTestActuationTask {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserTestActuationTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.durationMs = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserTestActuationTask {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n durationMs: isSet(object.durationMs) ? globalThis.Number(object.durationMs) : 0,\n };\n },\n\n toJSON(message: LaserTestActuationTask): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.durationMs !== 0) {\n obj.durationMs = Math.round(message.durationMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserTestActuationTask {\n return LaserTestActuationTask.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserTestActuationTask {\n const message = createBaseLaserTestActuationTask();\n message.scannerId = object.scannerId ?? 0;\n message.durationMs = object.durationMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseImageDrawActuationTask(): ImageDrawActuationTask {\n return { scannerId: 0, speedMmps: 0 };\n}\n\nexport const ImageDrawActuationTask: MessageFns = {\n encode(message: ImageDrawActuationTask, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.speedMmps !== 0) {\n writer.uint32(21).float(message.speedMmps);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ImageDrawActuationTask {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImageDrawActuationTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.speedMmps = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ImageDrawActuationTask {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n speedMmps: isSet(object.speedMmps) ? globalThis.Number(object.speedMmps) : 0,\n };\n },\n\n toJSON(message: ImageDrawActuationTask): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.speedMmps !== 0) {\n obj.speedMmps = message.speedMmps;\n }\n return obj;\n },\n\n create, I>>(base?: I): ImageDrawActuationTask {\n return ImageDrawActuationTask.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ImageDrawActuationTask {\n const message = createBaseImageDrawActuationTask();\n message.scannerId = object.scannerId ?? 0;\n message.speedMmps = object.speedMmps ?? 0;\n return message;\n },\n};\n\nfunction createBaseRangeDrawActuationTask(): RangeDrawActuationTask {\n return { scannerId: 0, durationS: 0 };\n}\n\nexport const RangeDrawActuationTask: MessageFns = {\n encode(message: RangeDrawActuationTask, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.durationS !== 0) {\n writer.uint32(21).float(message.durationS);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RangeDrawActuationTask {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRangeDrawActuationTask();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.durationS = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RangeDrawActuationTask {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n durationS: isSet(object.durationS) ? globalThis.Number(object.durationS) : 0,\n };\n },\n\n toJSON(message: RangeDrawActuationTask): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.durationS !== 0) {\n obj.durationS = message.durationS;\n }\n return obj;\n },\n\n create, I>>(base?: I): RangeDrawActuationTask {\n return RangeDrawActuationTask.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RangeDrawActuationTask {\n const message = createBaseRangeDrawActuationTask();\n message.scannerId = object.scannerId ?? 0;\n message.durationS = object.durationS ?? 0;\n return message;\n },\n};\n\nfunction createBaseActuationTaskRequest(): ActuationTaskRequest {\n return { laserTest: undefined, imageDraw: undefined, rangeDraw: undefined };\n}\n\nexport const ActuationTaskRequest: MessageFns = {\n encode(message: ActuationTaskRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.laserTest !== undefined) {\n LaserTestActuationTask.encode(message.laserTest, writer.uint32(10).fork()).join();\n }\n if (message.imageDraw !== undefined) {\n ImageDrawActuationTask.encode(message.imageDraw, writer.uint32(18).fork()).join();\n }\n if (message.rangeDraw !== undefined) {\n RangeDrawActuationTask.encode(message.rangeDraw, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ActuationTaskRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseActuationTaskRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.laserTest = LaserTestActuationTask.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.imageDraw = ImageDrawActuationTask.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.rangeDraw = RangeDrawActuationTask.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ActuationTaskRequest {\n return {\n laserTest: isSet(object.laserTest) ? LaserTestActuationTask.fromJSON(object.laserTest) : undefined,\n imageDraw: isSet(object.imageDraw) ? ImageDrawActuationTask.fromJSON(object.imageDraw) : undefined,\n rangeDraw: isSet(object.rangeDraw) ? RangeDrawActuationTask.fromJSON(object.rangeDraw) : undefined,\n };\n },\n\n toJSON(message: ActuationTaskRequest): unknown {\n const obj: any = {};\n if (message.laserTest !== undefined) {\n obj.laserTest = LaserTestActuationTask.toJSON(message.laserTest);\n }\n if (message.imageDraw !== undefined) {\n obj.imageDraw = ImageDrawActuationTask.toJSON(message.imageDraw);\n }\n if (message.rangeDraw !== undefined) {\n obj.rangeDraw = RangeDrawActuationTask.toJSON(message.rangeDraw);\n }\n return obj;\n },\n\n create, I>>(base?: I): ActuationTaskRequest {\n return ActuationTaskRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ActuationTaskRequest {\n const message = createBaseActuationTaskRequest();\n message.laserTest = (object.laserTest !== undefined && object.laserTest !== null)\n ? LaserTestActuationTask.fromPartial(object.laserTest)\n : undefined;\n message.imageDraw = (object.imageDraw !== undefined && object.imageDraw !== null)\n ? ImageDrawActuationTask.fromPartial(object.imageDraw)\n : undefined;\n message.rangeDraw = (object.rangeDraw !== undefined && object.rangeDraw !== null)\n ? RangeDrawActuationTask.fromPartial(object.rangeDraw)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseLensSetRequest(): LensSetRequest {\n return { scannerId: 0, value: 0 };\n}\n\nexport const LensSetRequest: MessageFns = {\n encode(message: LensSetRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.value !== 0) {\n writer.uint32(16).uint32(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LensSetRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLensSetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.value = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LensSetRequest {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: LensSetRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.value !== 0) {\n obj.value = Math.round(message.value);\n }\n return obj;\n },\n\n create, I>>(base?: I): LensSetRequest {\n return LensSetRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LensSetRequest {\n const message = createBaseLensSetRequest();\n message.scannerId = object.scannerId ?? 0;\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseLensSetReply(): LensSetReply {\n return {};\n}\n\nexport const LensSetReply: MessageFns = {\n encode(_: LensSetReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LensSetReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLensSetReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): LensSetReply {\n return {};\n },\n\n toJSON(_: LensSetReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): LensSetReply {\n return LensSetReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): LensSetReply {\n const message = createBaseLensSetReply();\n return message;\n },\n};\n\nfunction createBaseLensGetRequest(): LensGetRequest {\n return { scannerId: 0 };\n}\n\nexport const LensGetRequest: MessageFns = {\n encode(message: LensGetRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LensGetRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLensGetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LensGetRequest {\n return { scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0 };\n },\n\n toJSON(message: LensGetRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n return obj;\n },\n\n create, I>>(base?: I): LensGetRequest {\n return LensGetRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LensGetRequest {\n const message = createBaseLensGetRequest();\n message.scannerId = object.scannerId ?? 0;\n return message;\n },\n};\n\nfunction createBaseLensGetReply(): LensGetReply {\n return { value: 0, minValue: 0, maxValue: 0, manualAutofocusPercent: 0, manualAutofocusing: false, scannerId: 0 };\n}\n\nexport const LensGetReply: MessageFns = {\n encode(message: LensGetReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.value !== 0) {\n writer.uint32(8).uint32(message.value);\n }\n if (message.minValue !== 0) {\n writer.uint32(16).uint32(message.minValue);\n }\n if (message.maxValue !== 0) {\n writer.uint32(24).uint32(message.maxValue);\n }\n if (message.manualAutofocusPercent !== 0) {\n writer.uint32(37).float(message.manualAutofocusPercent);\n }\n if (message.manualAutofocusing !== false) {\n writer.uint32(40).bool(message.manualAutofocusing);\n }\n if (message.scannerId !== 0) {\n writer.uint32(48).uint32(message.scannerId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LensGetReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLensGetReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.value = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.minValue = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.maxValue = reader.uint32();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.manualAutofocusPercent = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.manualAutofocusing = reader.bool();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LensGetReply {\n return {\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n minValue: isSet(object.minValue) ? globalThis.Number(object.minValue) : 0,\n maxValue: isSet(object.maxValue) ? globalThis.Number(object.maxValue) : 0,\n manualAutofocusPercent: isSet(object.manualAutofocusPercent)\n ? globalThis.Number(object.manualAutofocusPercent)\n : 0,\n manualAutofocusing: isSet(object.manualAutofocusing) ? globalThis.Boolean(object.manualAutofocusing) : false,\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n };\n },\n\n toJSON(message: LensGetReply): unknown {\n const obj: any = {};\n if (message.value !== 0) {\n obj.value = Math.round(message.value);\n }\n if (message.minValue !== 0) {\n obj.minValue = Math.round(message.minValue);\n }\n if (message.maxValue !== 0) {\n obj.maxValue = Math.round(message.maxValue);\n }\n if (message.manualAutofocusPercent !== 0) {\n obj.manualAutofocusPercent = message.manualAutofocusPercent;\n }\n if (message.manualAutofocusing !== false) {\n obj.manualAutofocusing = message.manualAutofocusing;\n }\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n return obj;\n },\n\n create, I>>(base?: I): LensGetReply {\n return LensGetReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LensGetReply {\n const message = createBaseLensGetReply();\n message.value = object.value ?? 0;\n message.minValue = object.minValue ?? 0;\n message.maxValue = object.maxValue ?? 0;\n message.manualAutofocusPercent = object.manualAutofocusPercent ?? 0;\n message.manualAutofocusing = object.manualAutofocusing ?? false;\n message.scannerId = object.scannerId ?? 0;\n return message;\n },\n};\n\nfunction createBaseLensGetAllReply(): LensGetAllReply {\n return { lensStatus: [] };\n}\n\nexport const LensGetAllReply: MessageFns = {\n encode(message: LensGetAllReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.lensStatus) {\n LensGetReply.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LensGetAllReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLensGetAllReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.lensStatus.push(LensGetReply.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LensGetAllReply {\n return {\n lensStatus: globalThis.Array.isArray(object?.lensStatus)\n ? object.lensStatus.map((e: any) => LensGetReply.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: LensGetAllReply): unknown {\n const obj: any = {};\n if (message.lensStatus?.length) {\n obj.lensStatus = message.lensStatus.map((e) => LensGetReply.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): LensGetAllReply {\n return LensGetAllReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LensGetAllReply {\n const message = createBaseLensGetAllReply();\n message.lensStatus = object.lensStatus?.map((e) => LensGetReply.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseLensAutoFocusRequest(): LensAutoFocusRequest {\n return { scannerId: 0 };\n}\n\nexport const LensAutoFocusRequest: MessageFns = {\n encode(message: LensAutoFocusRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LensAutoFocusRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLensAutoFocusRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LensAutoFocusRequest {\n return { scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0 };\n },\n\n toJSON(message: LensAutoFocusRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n return obj;\n },\n\n create, I>>(base?: I): LensAutoFocusRequest {\n return LensAutoFocusRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LensAutoFocusRequest {\n const message = createBaseLensAutoFocusRequest();\n message.scannerId = object.scannerId ?? 0;\n return message;\n },\n};\n\nfunction createBaseLensAutoFocusReply(): LensAutoFocusReply {\n return {};\n}\n\nexport const LensAutoFocusReply: MessageFns = {\n encode(_: LensAutoFocusReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LensAutoFocusReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLensAutoFocusReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): LensAutoFocusReply {\n return {};\n },\n\n toJSON(_: LensAutoFocusReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): LensAutoFocusReply {\n return LensAutoFocusReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): LensAutoFocusReply {\n const message = createBaseLensAutoFocusReply();\n return message;\n },\n};\n\nfunction createBaseStopLensAutoFocusRequest(): StopLensAutoFocusRequest {\n return { scannerId: 0 };\n}\n\nexport const StopLensAutoFocusRequest: MessageFns = {\n encode(message: StopLensAutoFocusRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StopLensAutoFocusRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStopLensAutoFocusRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StopLensAutoFocusRequest {\n return { scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0 };\n },\n\n toJSON(message: StopLensAutoFocusRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n return obj;\n },\n\n create, I>>(base?: I): StopLensAutoFocusRequest {\n return StopLensAutoFocusRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): StopLensAutoFocusRequest {\n const message = createBaseStopLensAutoFocusRequest();\n message.scannerId = object.scannerId ?? 0;\n return message;\n },\n};\n\nfunction createBaseLaserArmRequest(): LaserArmRequest {\n return { scannerId: 0, armed: false };\n}\n\nexport const LaserArmRequest: MessageFns = {\n encode(message: LaserArmRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.armed !== false) {\n writer.uint32(16).bool(message.armed);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserArmRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserArmRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.armed = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserArmRequest {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n armed: isSet(object.armed) ? globalThis.Boolean(object.armed) : false,\n };\n },\n\n toJSON(message: LaserArmRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.armed !== false) {\n obj.armed = message.armed;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserArmRequest {\n return LaserArmRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserArmRequest {\n const message = createBaseLaserArmRequest();\n message.scannerId = object.scannerId ?? 0;\n message.armed = object.armed ?? false;\n return message;\n },\n};\n\nfunction createBaseLaserArmReply(): LaserArmReply {\n return {};\n}\n\nexport const LaserArmReply: MessageFns = {\n encode(_: LaserArmReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserArmReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserArmReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): LaserArmReply {\n return {};\n },\n\n toJSON(_: LaserArmReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): LaserArmReply {\n return LaserArmReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): LaserArmReply {\n const message = createBaseLaserArmReply();\n return message;\n },\n};\n\nfunction createBaseLaserEnableRequest(): LaserEnableRequest {\n return { scannerId: 0, enabled: false };\n}\n\nexport const LaserEnableRequest: MessageFns = {\n encode(message: LaserEnableRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.enabled !== false) {\n writer.uint32(16).bool(message.enabled);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserEnableRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserEnableRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.enabled = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserEnableRequest {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false,\n };\n },\n\n toJSON(message: LaserEnableRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.enabled !== false) {\n obj.enabled = message.enabled;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserEnableRequest {\n return LaserEnableRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserEnableRequest {\n const message = createBaseLaserEnableRequest();\n message.scannerId = object.scannerId ?? 0;\n message.enabled = object.enabled ?? false;\n return message;\n },\n};\n\nfunction createBaseLaserEnableReply(): LaserEnableReply {\n return { status: false, message: \"\" };\n}\n\nexport const LaserEnableReply: MessageFns = {\n encode(message: LaserEnableReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.status !== false) {\n writer.uint32(8).bool(message.status);\n }\n if (message.message !== \"\") {\n writer.uint32(18).string(message.message);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserEnableReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserEnableReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.status = reader.bool();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.message = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserEnableReply {\n return {\n status: isSet(object.status) ? globalThis.Boolean(object.status) : false,\n message: isSet(object.message) ? globalThis.String(object.message) : \"\",\n };\n },\n\n toJSON(message: LaserEnableReply): unknown {\n const obj: any = {};\n if (message.status !== false) {\n obj.status = message.status;\n }\n if (message.message !== \"\") {\n obj.message = message.message;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserEnableReply {\n return LaserEnableReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserEnableReply {\n const message = createBaseLaserEnableReply();\n message.status = object.status ?? false;\n message.message = object.message ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLaserFireRequest(): LaserFireRequest {\n return { scannerId: 0, fire: false };\n}\n\nexport const LaserFireRequest: MessageFns = {\n encode(message: LaserFireRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.fire !== false) {\n writer.uint32(16).bool(message.fire);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserFireRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserFireRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.fire = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserFireRequest {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n fire: isSet(object.fire) ? globalThis.Boolean(object.fire) : false,\n };\n },\n\n toJSON(message: LaserFireRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.fire !== false) {\n obj.fire = message.fire;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserFireRequest {\n return LaserFireRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserFireRequest {\n const message = createBaseLaserFireRequest();\n message.scannerId = object.scannerId ?? 0;\n message.fire = object.fire ?? false;\n return message;\n },\n};\n\nfunction createBaseLaserFireReply(): LaserFireReply {\n return {};\n}\n\nexport const LaserFireReply: MessageFns = {\n encode(_: LaserFireReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserFireReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserFireReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): LaserFireReply {\n return {};\n },\n\n toJSON(_: LaserFireReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): LaserFireReply {\n return LaserFireReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): LaserFireReply {\n const message = createBaseLaserFireReply();\n return message;\n },\n};\n\nfunction createBaseLaserSetRequest(): LaserSetRequest {\n return { scannerId: 0, on: false };\n}\n\nexport const LaserSetRequest: MessageFns = {\n encode(message: LaserSetRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.on !== false) {\n writer.uint32(16).bool(message.on);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserSetRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserSetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.on = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserSetRequest {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n on: isSet(object.on) ? globalThis.Boolean(object.on) : false,\n };\n },\n\n toJSON(message: LaserSetRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.on !== false) {\n obj.on = message.on;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserSetRequest {\n return LaserSetRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserSetRequest {\n const message = createBaseLaserSetRequest();\n message.scannerId = object.scannerId ?? 0;\n message.on = object.on ?? false;\n return message;\n },\n};\n\nfunction createBaseLaserSetReply(): LaserSetReply {\n return {};\n}\n\nexport const LaserSetReply: MessageFns = {\n encode(_: LaserSetReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserSetReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserSetReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): LaserSetReply {\n return {};\n },\n\n toJSON(_: LaserSetReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): LaserSetReply {\n return LaserSetReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): LaserSetReply {\n const message = createBaseLaserSetReply();\n return message;\n },\n};\n\nfunction createBaseBurnIdividualImagesRequest(): BurnIdividualImagesRequest {\n return { scannerId: [], speedMmps: 0, intensity: 0, jsonImg: \"\" };\n}\n\nexport const BurnIdividualImagesRequest: MessageFns = {\n encode(message: BurnIdividualImagesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n writer.uint32(10).fork();\n for (const v of message.scannerId) {\n writer.uint32(v);\n }\n writer.join();\n if (message.speedMmps !== 0) {\n writer.uint32(21).float(message.speedMmps);\n }\n if (message.intensity !== 0) {\n writer.uint32(29).float(message.intensity);\n }\n if (message.jsonImg !== \"\") {\n writer.uint32(34).string(message.jsonImg);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BurnIdividualImagesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBurnIdividualImagesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 8) {\n message.scannerId.push(reader.uint32());\n\n continue;\n }\n\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.scannerId.push(reader.uint32());\n }\n\n continue;\n }\n\n break;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.speedMmps = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.intensity = reader.float();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.jsonImg = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BurnIdividualImagesRequest {\n return {\n scannerId: globalThis.Array.isArray(object?.scannerId)\n ? object.scannerId.map((e: any) => globalThis.Number(e))\n : [],\n speedMmps: isSet(object.speedMmps) ? globalThis.Number(object.speedMmps) : 0,\n intensity: isSet(object.intensity) ? globalThis.Number(object.intensity) : 0,\n jsonImg: isSet(object.jsonImg) ? globalThis.String(object.jsonImg) : \"\",\n };\n },\n\n toJSON(message: BurnIdividualImagesRequest): unknown {\n const obj: any = {};\n if (message.scannerId?.length) {\n obj.scannerId = message.scannerId.map((e) => Math.round(e));\n }\n if (message.speedMmps !== 0) {\n obj.speedMmps = message.speedMmps;\n }\n if (message.intensity !== 0) {\n obj.intensity = message.intensity;\n }\n if (message.jsonImg !== \"\") {\n obj.jsonImg = message.jsonImg;\n }\n return obj;\n },\n\n create, I>>(base?: I): BurnIdividualImagesRequest {\n return BurnIdividualImagesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BurnIdividualImagesRequest {\n const message = createBaseBurnIdividualImagesRequest();\n message.scannerId = object.scannerId?.map((e) => e) || [];\n message.speedMmps = object.speedMmps ?? 0;\n message.intensity = object.intensity ?? 0;\n message.jsonImg = object.jsonImg ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLaserState(): LaserState {\n return {\n enabled: false,\n firing: false,\n error: false,\n errorCode: \"\",\n errorMessage: \"\",\n power: false,\n deltaTemp: 0,\n current: 0,\n arced: false,\n powerLevel: 0,\n };\n}\n\nexport const LaserState: MessageFns = {\n encode(message: LaserState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.enabled !== false) {\n writer.uint32(8).bool(message.enabled);\n }\n if (message.firing !== false) {\n writer.uint32(16).bool(message.firing);\n }\n if (message.error !== false) {\n writer.uint32(24).bool(message.error);\n }\n if (message.errorCode !== \"\") {\n writer.uint32(34).string(message.errorCode);\n }\n if (message.errorMessage !== \"\") {\n writer.uint32(42).string(message.errorMessage);\n }\n if (message.power !== false) {\n writer.uint32(48).bool(message.power);\n }\n if (message.deltaTemp !== 0) {\n writer.uint32(61).float(message.deltaTemp);\n }\n if (message.current !== 0) {\n writer.uint32(69).float(message.current);\n }\n if (message.arced !== false) {\n writer.uint32(72).bool(message.arced);\n }\n if (message.powerLevel !== 0) {\n writer.uint32(85).float(message.powerLevel);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaserState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaserState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.enabled = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.firing = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.error = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.errorCode = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.errorMessage = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.power = reader.bool();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n\n message.deltaTemp = reader.float();\n continue;\n case 8:\n if (tag !== 69) {\n break;\n }\n\n message.current = reader.float();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.arced = reader.bool();\n continue;\n case 10:\n if (tag !== 85) {\n break;\n }\n\n message.powerLevel = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaserState {\n return {\n enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false,\n firing: isSet(object.firing) ? globalThis.Boolean(object.firing) : false,\n error: isSet(object.error) ? globalThis.Boolean(object.error) : false,\n errorCode: isSet(object.errorCode) ? globalThis.String(object.errorCode) : \"\",\n errorMessage: isSet(object.errorMessage) ? globalThis.String(object.errorMessage) : \"\",\n power: isSet(object.power) ? globalThis.Boolean(object.power) : false,\n deltaTemp: isSet(object.deltaTemp) ? globalThis.Number(object.deltaTemp) : 0,\n current: isSet(object.current) ? globalThis.Number(object.current) : 0,\n arced: isSet(object.arced) ? globalThis.Boolean(object.arced) : false,\n powerLevel: isSet(object.powerLevel) ? globalThis.Number(object.powerLevel) : 0,\n };\n },\n\n toJSON(message: LaserState): unknown {\n const obj: any = {};\n if (message.enabled !== false) {\n obj.enabled = message.enabled;\n }\n if (message.firing !== false) {\n obj.firing = message.firing;\n }\n if (message.error !== false) {\n obj.error = message.error;\n }\n if (message.errorCode !== \"\") {\n obj.errorCode = message.errorCode;\n }\n if (message.errorMessage !== \"\") {\n obj.errorMessage = message.errorMessage;\n }\n if (message.power !== false) {\n obj.power = message.power;\n }\n if (message.deltaTemp !== 0) {\n obj.deltaTemp = message.deltaTemp;\n }\n if (message.current !== 0) {\n obj.current = message.current;\n }\n if (message.arced !== false) {\n obj.arced = message.arced;\n }\n if (message.powerLevel !== 0) {\n obj.powerLevel = message.powerLevel;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaserState {\n return LaserState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaserState {\n const message = createBaseLaserState();\n message.enabled = object.enabled ?? false;\n message.firing = object.firing ?? false;\n message.error = object.error ?? false;\n message.errorCode = object.errorCode ?? \"\";\n message.errorMessage = object.errorMessage ?? \"\";\n message.power = object.power ?? false;\n message.deltaTemp = object.deltaTemp ?? 0;\n message.current = object.current ?? 0;\n message.arced = object.arced ?? false;\n message.powerLevel = object.powerLevel ?? 0;\n return message;\n },\n};\n\nfunction createBaseServoGoToRequest(): ServoGoToRequest {\n return { scannerId: 0, servoType: 0, position: 0, timeMs: 0, awaitSettle: false };\n}\n\nexport const ServoGoToRequest: MessageFns = {\n encode(message: ServoGoToRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.servoType !== 0) {\n writer.uint32(16).int32(message.servoType);\n }\n if (message.position !== 0) {\n writer.uint32(24).int32(message.position);\n }\n if (message.timeMs !== 0) {\n writer.uint32(32).uint32(message.timeMs);\n }\n if (message.awaitSettle !== false) {\n writer.uint32(40).bool(message.awaitSettle);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ServoGoToRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseServoGoToRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.servoType = reader.int32() as any;\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.position = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.timeMs = reader.uint32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.awaitSettle = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ServoGoToRequest {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n servoType: isSet(object.servoType) ? servoGoToRequest_ServoTypeFromJSON(object.servoType) : 0,\n position: isSet(object.position) ? globalThis.Number(object.position) : 0,\n timeMs: isSet(object.timeMs) ? globalThis.Number(object.timeMs) : 0,\n awaitSettle: isSet(object.awaitSettle) ? globalThis.Boolean(object.awaitSettle) : false,\n };\n },\n\n toJSON(message: ServoGoToRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.servoType !== 0) {\n obj.servoType = servoGoToRequest_ServoTypeToJSON(message.servoType);\n }\n if (message.position !== 0) {\n obj.position = Math.round(message.position);\n }\n if (message.timeMs !== 0) {\n obj.timeMs = Math.round(message.timeMs);\n }\n if (message.awaitSettle !== false) {\n obj.awaitSettle = message.awaitSettle;\n }\n return obj;\n },\n\n create, I>>(base?: I): ServoGoToRequest {\n return ServoGoToRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ServoGoToRequest {\n const message = createBaseServoGoToRequest();\n message.scannerId = object.scannerId ?? 0;\n message.servoType = object.servoType ?? 0;\n message.position = object.position ?? 0;\n message.timeMs = object.timeMs ?? 0;\n message.awaitSettle = object.awaitSettle ?? false;\n return message;\n },\n};\n\nfunction createBaseServoGoToReply(): ServoGoToReply {\n return {};\n}\n\nexport const ServoGoToReply: MessageFns = {\n encode(_: ServoGoToReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ServoGoToReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseServoGoToReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ServoGoToReply {\n return {};\n },\n\n toJSON(_: ServoGoToReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ServoGoToReply {\n return ServoGoToReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ServoGoToReply {\n const message = createBaseServoGoToReply();\n return message;\n },\n};\n\nfunction createBaseServoGetPosVelRequest(): ServoGetPosVelRequest {\n return { scannerId: 0 };\n}\n\nexport const ServoGetPosVelRequest: MessageFns = {\n encode(message: ServoGetPosVelRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ServoGetPosVelRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseServoGetPosVelRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ServoGetPosVelRequest {\n return { scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0 };\n },\n\n toJSON(message: ServoGetPosVelRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n return obj;\n },\n\n create, I>>(base?: I): ServoGetPosVelRequest {\n return ServoGetPosVelRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ServoGetPosVelRequest {\n const message = createBaseServoGetPosVelRequest();\n message.scannerId = object.scannerId ?? 0;\n return message;\n },\n};\n\nfunction createBaseServoGetPosVelReply(): ServoGetPosVelReply {\n return { panPosition: 0, tiltPosition: 0, panVelocity: 0, tiltVelocity: 0 };\n}\n\nexport const ServoGetPosVelReply: MessageFns = {\n encode(message: ServoGetPosVelReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.panPosition !== 0) {\n writer.uint32(8).int32(message.panPosition);\n }\n if (message.tiltPosition !== 0) {\n writer.uint32(16).int32(message.tiltPosition);\n }\n if (message.panVelocity !== 0) {\n writer.uint32(24).uint32(message.panVelocity);\n }\n if (message.tiltVelocity !== 0) {\n writer.uint32(32).uint32(message.tiltVelocity);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ServoGetPosVelReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseServoGetPosVelReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.panPosition = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.tiltPosition = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.panVelocity = reader.uint32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.tiltVelocity = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ServoGetPosVelReply {\n return {\n panPosition: isSet(object.panPosition) ? globalThis.Number(object.panPosition) : 0,\n tiltPosition: isSet(object.tiltPosition) ? globalThis.Number(object.tiltPosition) : 0,\n panVelocity: isSet(object.panVelocity) ? globalThis.Number(object.panVelocity) : 0,\n tiltVelocity: isSet(object.tiltVelocity) ? globalThis.Number(object.tiltVelocity) : 0,\n };\n },\n\n toJSON(message: ServoGetPosVelReply): unknown {\n const obj: any = {};\n if (message.panPosition !== 0) {\n obj.panPosition = Math.round(message.panPosition);\n }\n if (message.tiltPosition !== 0) {\n obj.tiltPosition = Math.round(message.tiltPosition);\n }\n if (message.panVelocity !== 0) {\n obj.panVelocity = Math.round(message.panVelocity);\n }\n if (message.tiltVelocity !== 0) {\n obj.tiltVelocity = Math.round(message.tiltVelocity);\n }\n return obj;\n },\n\n create, I>>(base?: I): ServoGetPosVelReply {\n return ServoGetPosVelReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ServoGetPosVelReply {\n const message = createBaseServoGetPosVelReply();\n message.panPosition = object.panPosition ?? 0;\n message.tiltPosition = object.tiltPosition ?? 0;\n message.panVelocity = object.panVelocity ?? 0;\n message.tiltVelocity = object.tiltVelocity ?? 0;\n return message;\n },\n};\n\nfunction createBaseServoGetLimitsRequest(): ServoGetLimitsRequest {\n return { scannerId: 0 };\n}\n\nexport const ServoGetLimitsRequest: MessageFns = {\n encode(message: ServoGetLimitsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ServoGetLimitsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseServoGetLimitsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ServoGetLimitsRequest {\n return { scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0 };\n },\n\n toJSON(message: ServoGetLimitsRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n return obj;\n },\n\n create, I>>(base?: I): ServoGetLimitsRequest {\n return ServoGetLimitsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ServoGetLimitsRequest {\n const message = createBaseServoGetLimitsRequest();\n message.scannerId = object.scannerId ?? 0;\n return message;\n },\n};\n\nfunction createBaseServoGetLimitsReply(): ServoGetLimitsReply {\n return { panMin: 0, panMax: 0, tiltMin: 0, tiltMax: 0 };\n}\n\nexport const ServoGetLimitsReply: MessageFns = {\n encode(message: ServoGetLimitsReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.panMin !== 0) {\n writer.uint32(8).int32(message.panMin);\n }\n if (message.panMax !== 0) {\n writer.uint32(16).int32(message.panMax);\n }\n if (message.tiltMin !== 0) {\n writer.uint32(24).int32(message.tiltMin);\n }\n if (message.tiltMax !== 0) {\n writer.uint32(32).int32(message.tiltMax);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ServoGetLimitsReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseServoGetLimitsReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.panMin = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.panMax = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.tiltMin = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.tiltMax = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ServoGetLimitsReply {\n return {\n panMin: isSet(object.panMin) ? globalThis.Number(object.panMin) : 0,\n panMax: isSet(object.panMax) ? globalThis.Number(object.panMax) : 0,\n tiltMin: isSet(object.tiltMin) ? globalThis.Number(object.tiltMin) : 0,\n tiltMax: isSet(object.tiltMax) ? globalThis.Number(object.tiltMax) : 0,\n };\n },\n\n toJSON(message: ServoGetLimitsReply): unknown {\n const obj: any = {};\n if (message.panMin !== 0) {\n obj.panMin = Math.round(message.panMin);\n }\n if (message.panMax !== 0) {\n obj.panMax = Math.round(message.panMax);\n }\n if (message.tiltMin !== 0) {\n obj.tiltMin = Math.round(message.tiltMin);\n }\n if (message.tiltMax !== 0) {\n obj.tiltMax = Math.round(message.tiltMax);\n }\n return obj;\n },\n\n create, I>>(base?: I): ServoGetLimitsReply {\n return ServoGetLimitsReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ServoGetLimitsReply {\n const message = createBaseServoGetLimitsReply();\n message.panMin = object.panMin ?? 0;\n message.panMax = object.panMax ?? 0;\n message.tiltMin = object.tiltMin ?? 0;\n message.tiltMax = object.tiltMax ?? 0;\n return message;\n },\n};\n\nfunction createBaseTuningParam(): TuningParam {\n return { name: \"\", vUint: undefined, vInt: undefined, vBool: undefined, vFloat: undefined, vString: undefined };\n}\n\nexport const TuningParam: MessageFns = {\n encode(message: TuningParam, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.vUint !== undefined) {\n writer.uint32(16).uint32(message.vUint);\n }\n if (message.vInt !== undefined) {\n writer.uint32(24).int32(message.vInt);\n }\n if (message.vBool !== undefined) {\n writer.uint32(32).bool(message.vBool);\n }\n if (message.vFloat !== undefined) {\n writer.uint32(45).float(message.vFloat);\n }\n if (message.vString !== undefined) {\n writer.uint32(50).string(message.vString);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TuningParam {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTuningParam();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.vUint = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.vInt = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.vBool = reader.bool();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n\n message.vFloat = reader.float();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.vString = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TuningParam {\n return {\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n vUint: isSet(object.vUint) ? globalThis.Number(object.vUint) : undefined,\n vInt: isSet(object.vInt) ? globalThis.Number(object.vInt) : undefined,\n vBool: isSet(object.vBool) ? globalThis.Boolean(object.vBool) : undefined,\n vFloat: isSet(object.vFloat) ? globalThis.Number(object.vFloat) : undefined,\n vString: isSet(object.vString) ? globalThis.String(object.vString) : undefined,\n };\n },\n\n toJSON(message: TuningParam): unknown {\n const obj: any = {};\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.vUint !== undefined) {\n obj.vUint = Math.round(message.vUint);\n }\n if (message.vInt !== undefined) {\n obj.vInt = Math.round(message.vInt);\n }\n if (message.vBool !== undefined) {\n obj.vBool = message.vBool;\n }\n if (message.vFloat !== undefined) {\n obj.vFloat = message.vFloat;\n }\n if (message.vString !== undefined) {\n obj.vString = message.vString;\n }\n return obj;\n },\n\n create, I>>(base?: I): TuningParam {\n return TuningParam.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TuningParam {\n const message = createBaseTuningParam();\n message.name = object.name ?? \"\";\n message.vUint = object.vUint ?? undefined;\n message.vInt = object.vInt ?? undefined;\n message.vBool = object.vBool ?? undefined;\n message.vFloat = object.vFloat ?? undefined;\n message.vString = object.vString ?? undefined;\n return message;\n },\n};\n\nfunction createBaseTuningParamsUpdateRequest(): TuningParamsUpdateRequest {\n return { params: [] };\n}\n\nexport const TuningParamsUpdateRequest: MessageFns = {\n encode(message: TuningParamsUpdateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.params) {\n TuningParam.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TuningParamsUpdateRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTuningParamsUpdateRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.params.push(TuningParam.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TuningParamsUpdateRequest {\n return {\n params: globalThis.Array.isArray(object?.params) ? object.params.map((e: any) => TuningParam.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: TuningParamsUpdateRequest): unknown {\n const obj: any = {};\n if (message.params?.length) {\n obj.params = message.params.map((e) => TuningParam.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): TuningParamsUpdateRequest {\n return TuningParamsUpdateRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TuningParamsUpdateRequest {\n const message = createBaseTuningParamsUpdateRequest();\n message.params = object.params?.map((e) => TuningParam.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseTuningParamsUpdateReply(): TuningParamsUpdateReply {\n return {};\n}\n\nexport const TuningParamsUpdateReply: MessageFns = {\n encode(_: TuningParamsUpdateReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TuningParamsUpdateReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTuningParamsUpdateReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): TuningParamsUpdateReply {\n return {};\n },\n\n toJSON(_: TuningParamsUpdateReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): TuningParamsUpdateReply {\n return TuningParamsUpdateReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): TuningParamsUpdateReply {\n const message = createBaseTuningParamsUpdateReply();\n return message;\n },\n};\n\nfunction createBaseTuningParamsGetRequest(): TuningParamsGetRequest {\n return { name: \"\" };\n}\n\nexport const TuningParamsGetRequest: MessageFns = {\n encode(message: TuningParamsGetRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TuningParamsGetRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTuningParamsGetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TuningParamsGetRequest {\n return { name: isSet(object.name) ? globalThis.String(object.name) : \"\" };\n },\n\n toJSON(message: TuningParamsGetRequest): unknown {\n const obj: any = {};\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n return obj;\n },\n\n create, I>>(base?: I): TuningParamsGetRequest {\n return TuningParamsGetRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TuningParamsGetRequest {\n const message = createBaseTuningParamsGetRequest();\n message.name = object.name ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTuningParamsGetReply(): TuningParamsGetReply {\n return { params: [] };\n}\n\nexport const TuningParamsGetReply: MessageFns = {\n encode(message: TuningParamsGetReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.params) {\n TuningParam.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TuningParamsGetReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTuningParamsGetReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.params.push(TuningParam.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TuningParamsGetReply {\n return {\n params: globalThis.Array.isArray(object?.params) ? object.params.map((e: any) => TuningParam.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: TuningParamsGetReply): unknown {\n const obj: any = {};\n if (message.params?.length) {\n obj.params = message.params.map((e) => TuningParam.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): TuningParamsGetReply {\n return TuningParamsGetReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TuningParamsGetReply {\n const message = createBaseTuningParamsGetReply();\n message.params = object.params?.map((e) => TuningParam.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseGetLoadEstimateRequest(): GetLoadEstimateRequest {\n return {};\n}\n\nexport const GetLoadEstimateRequest: MessageFns = {\n encode(_: GetLoadEstimateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetLoadEstimateRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLoadEstimateRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetLoadEstimateRequest {\n return {};\n },\n\n toJSON(_: GetLoadEstimateRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetLoadEstimateRequest {\n return GetLoadEstimateRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetLoadEstimateRequest {\n const message = createBaseGetLoadEstimateRequest();\n return message;\n },\n};\n\nfunction createBaseGetLoadEstimateReply(): GetLoadEstimateReply {\n return { currentLoad: 0, targetLoad: 0 };\n}\n\nexport const GetLoadEstimateReply: MessageFns = {\n encode(message: GetLoadEstimateReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.currentLoad !== 0) {\n writer.uint32(13).float(message.currentLoad);\n }\n if (message.targetLoad !== 0) {\n writer.uint32(21).float(message.targetLoad);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetLoadEstimateReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLoadEstimateReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.currentLoad = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.targetLoad = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetLoadEstimateReply {\n return {\n currentLoad: isSet(object.currentLoad) ? globalThis.Number(object.currentLoad) : 0,\n targetLoad: isSet(object.targetLoad) ? globalThis.Number(object.targetLoad) : 0,\n };\n },\n\n toJSON(message: GetLoadEstimateReply): unknown {\n const obj: any = {};\n if (message.currentLoad !== 0) {\n obj.currentLoad = message.currentLoad;\n }\n if (message.targetLoad !== 0) {\n obj.targetLoad = message.targetLoad;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetLoadEstimateReply {\n return GetLoadEstimateReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetLoadEstimateReply {\n const message = createBaseGetLoadEstimateReply();\n message.currentLoad = object.currentLoad ?? 0;\n message.targetLoad = object.targetLoad ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetDiagnosticRequest(): GetDiagnosticRequest {\n return {};\n}\n\nexport const GetDiagnosticRequest: MessageFns = {\n encode(_: GetDiagnosticRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDiagnosticRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDiagnosticRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetDiagnosticRequest {\n return {};\n },\n\n toJSON(_: GetDiagnosticRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetDiagnosticRequest {\n return GetDiagnosticRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetDiagnosticRequest {\n const message = createBaseGetDiagnosticRequest();\n return message;\n },\n};\n\nfunction createBaseGetDiagnosticReply(): GetDiagnosticReply {\n return { diagnostic: \"\" };\n}\n\nexport const GetDiagnosticReply: MessageFns = {\n encode(message: GetDiagnosticReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.diagnostic !== \"\") {\n writer.uint32(10).string(message.diagnostic);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDiagnosticReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDiagnosticReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.diagnostic = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDiagnosticReply {\n return { diagnostic: isSet(object.diagnostic) ? globalThis.String(object.diagnostic) : \"\" };\n },\n\n toJSON(message: GetDiagnosticReply): unknown {\n const obj: any = {};\n if (message.diagnostic !== \"\") {\n obj.diagnostic = message.diagnostic;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetDiagnosticReply {\n return GetDiagnosticReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetDiagnosticReply {\n const message = createBaseGetDiagnosticReply();\n message.diagnostic = object.diagnostic ?? \"\";\n return message;\n },\n};\n\nfunction createBaseResetDevicesRequest(): ResetDevicesRequest {\n return { deviceId: \"\" };\n}\n\nexport const ResetDevicesRequest: MessageFns = {\n encode(message: ResetDevicesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.deviceId !== \"\") {\n writer.uint32(10).string(message.deviceId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ResetDevicesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseResetDevicesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.deviceId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ResetDevicesRequest {\n return { deviceId: isSet(object.deviceId) ? globalThis.String(object.deviceId) : \"\" };\n },\n\n toJSON(message: ResetDevicesRequest): unknown {\n const obj: any = {};\n if (message.deviceId !== \"\") {\n obj.deviceId = message.deviceId;\n }\n return obj;\n },\n\n create, I>>(base?: I): ResetDevicesRequest {\n return ResetDevicesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ResetDevicesRequest {\n const message = createBaseResetDevicesRequest();\n message.deviceId = object.deviceId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseResetDevicesReply(): ResetDevicesReply {\n return {};\n}\n\nexport const ResetDevicesReply: MessageFns = {\n encode(_: ResetDevicesReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ResetDevicesReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseResetDevicesReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ResetDevicesReply {\n return {};\n },\n\n toJSON(_: ResetDevicesReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ResetDevicesReply {\n return ResetDevicesReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ResetDevicesReply {\n const message = createBaseResetDevicesReply();\n return message;\n },\n};\n\nfunction createBaseResetScannerRequest(): ResetScannerRequest {\n return { scannerId: 0, metricsOnly: false };\n}\n\nexport const ResetScannerRequest: MessageFns = {\n encode(message: ResetScannerRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerId !== 0) {\n writer.uint32(8).uint32(message.scannerId);\n }\n if (message.metricsOnly !== false) {\n writer.uint32(16).bool(message.metricsOnly);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ResetScannerRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseResetScannerRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.scannerId = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.metricsOnly = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ResetScannerRequest {\n return {\n scannerId: isSet(object.scannerId) ? globalThis.Number(object.scannerId) : 0,\n metricsOnly: isSet(object.metricsOnly) ? globalThis.Boolean(object.metricsOnly) : false,\n };\n },\n\n toJSON(message: ResetScannerRequest): unknown {\n const obj: any = {};\n if (message.scannerId !== 0) {\n obj.scannerId = Math.round(message.scannerId);\n }\n if (message.metricsOnly !== false) {\n obj.metricsOnly = message.metricsOnly;\n }\n return obj;\n },\n\n create, I>>(base?: I): ResetScannerRequest {\n return ResetScannerRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ResetScannerRequest {\n const message = createBaseResetScannerRequest();\n message.scannerId = object.scannerId ?? 0;\n message.metricsOnly = object.metricsOnly ?? false;\n return message;\n },\n};\n\nfunction createBaseResetScannerReply(): ResetScannerReply {\n return {};\n}\n\nexport const ResetScannerReply: MessageFns = {\n encode(_: ResetScannerReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ResetScannerReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseResetScannerReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ResetScannerReply {\n return {};\n },\n\n toJSON(_: ResetScannerReply): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ResetScannerReply {\n return ResetScannerReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ResetScannerReply {\n const message = createBaseResetScannerReply();\n return message;\n },\n};\n\nfunction createBaseScannerDescriptor(): ScannerDescriptor {\n return { id: 0 };\n}\n\nexport const ScannerDescriptor: MessageFns = {\n encode(message: ScannerDescriptor, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint32(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ScannerDescriptor {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseScannerDescriptor();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ScannerDescriptor {\n return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 };\n },\n\n toJSON(message: ScannerDescriptor): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create, I>>(base?: I): ScannerDescriptor {\n return ScannerDescriptor.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ScannerDescriptor {\n const message = createBaseScannerDescriptor();\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseScannerTargetPosition(): ScannerTargetPosition {\n return { scannerDescriptor: undefined, x: 0, y: 0 };\n}\n\nexport const ScannerTargetPosition: MessageFns = {\n encode(message: ScannerTargetPosition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerDescriptor !== undefined) {\n ScannerDescriptor.encode(message.scannerDescriptor, writer.uint32(10).fork()).join();\n }\n if (message.x !== 0) {\n writer.uint32(16).uint32(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(24).uint32(message.y);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ScannerTargetPosition {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseScannerTargetPosition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scannerDescriptor = ScannerDescriptor.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.x = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.y = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ScannerTargetPosition {\n return {\n scannerDescriptor: isSet(object.scannerDescriptor)\n ? ScannerDescriptor.fromJSON(object.scannerDescriptor)\n : undefined,\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n };\n },\n\n toJSON(message: ScannerTargetPosition): unknown {\n const obj: any = {};\n if (message.scannerDescriptor !== undefined) {\n obj.scannerDescriptor = ScannerDescriptor.toJSON(message.scannerDescriptor);\n }\n if (message.x !== 0) {\n obj.x = Math.round(message.x);\n }\n if (message.y !== 0) {\n obj.y = Math.round(message.y);\n }\n return obj;\n },\n\n create, I>>(base?: I): ScannerTargetPosition {\n return ScannerTargetPosition.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ScannerTargetPosition {\n const message = createBaseScannerTargetPosition();\n message.scannerDescriptor = (object.scannerDescriptor !== undefined && object.scannerDescriptor !== null)\n ? ScannerDescriptor.fromPartial(object.scannerDescriptor)\n : undefined;\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n return message;\n },\n};\n\nfunction createBaseCrosshairState(): CrosshairState {\n return { x: 0, y: 0, calibrating: false, calibrationFailed: false };\n}\n\nexport const CrosshairState: MessageFns = {\n encode(message: CrosshairState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(8).uint32(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(16).uint32(message.y);\n }\n if (message.calibrating !== false) {\n writer.uint32(24).bool(message.calibrating);\n }\n if (message.calibrationFailed !== false) {\n writer.uint32(32).bool(message.calibrationFailed);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CrosshairState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCrosshairState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.x = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.y = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.calibrating = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.calibrationFailed = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CrosshairState {\n return {\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n calibrating: isSet(object.calibrating) ? globalThis.Boolean(object.calibrating) : false,\n calibrationFailed: isSet(object.calibrationFailed) ? globalThis.Boolean(object.calibrationFailed) : false,\n };\n },\n\n toJSON(message: CrosshairState): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = Math.round(message.x);\n }\n if (message.y !== 0) {\n obj.y = Math.round(message.y);\n }\n if (message.calibrating !== false) {\n obj.calibrating = message.calibrating;\n }\n if (message.calibrationFailed !== false) {\n obj.calibrationFailed = message.calibrationFailed;\n }\n return obj;\n },\n\n create, I>>(base?: I): CrosshairState {\n return CrosshairState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CrosshairState {\n const message = createBaseCrosshairState();\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n message.calibrating = object.calibrating ?? false;\n message.calibrationFailed = object.calibrationFailed ?? false;\n return message;\n },\n};\n\nfunction createBaseScannerState(): ScannerState {\n return {\n scannerDescriptor: undefined,\n laserState: undefined,\n crosshairState: undefined,\n scannerError: false,\n errorCode: \"\",\n errorMessage: \"\",\n targetTrajectoryId: 0,\n panFailure: false,\n tiltFailure: false,\n };\n}\n\nexport const ScannerState: MessageFns = {\n encode(message: ScannerState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scannerDescriptor !== undefined) {\n ScannerDescriptor.encode(message.scannerDescriptor, writer.uint32(10).fork()).join();\n }\n if (message.laserState !== undefined) {\n LaserState.encode(message.laserState, writer.uint32(18).fork()).join();\n }\n if (message.crosshairState !== undefined) {\n CrosshairState.encode(message.crosshairState, writer.uint32(26).fork()).join();\n }\n if (message.scannerError !== false) {\n writer.uint32(32).bool(message.scannerError);\n }\n if (message.errorCode !== \"\") {\n writer.uint32(42).string(message.errorCode);\n }\n if (message.errorMessage !== \"\") {\n writer.uint32(50).string(message.errorMessage);\n }\n if (message.targetTrajectoryId !== 0) {\n writer.uint32(56).uint32(message.targetTrajectoryId);\n }\n if (message.panFailure !== false) {\n writer.uint32(64).bool(message.panFailure);\n }\n if (message.tiltFailure !== false) {\n writer.uint32(72).bool(message.tiltFailure);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ScannerState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseScannerState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scannerDescriptor = ScannerDescriptor.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.laserState = LaserState.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.crosshairState = CrosshairState.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.scannerError = reader.bool();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.errorCode = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.errorMessage = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.targetTrajectoryId = reader.uint32();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.panFailure = reader.bool();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.tiltFailure = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ScannerState {\n return {\n scannerDescriptor: isSet(object.scannerDescriptor)\n ? ScannerDescriptor.fromJSON(object.scannerDescriptor)\n : undefined,\n laserState: isSet(object.laserState) ? LaserState.fromJSON(object.laserState) : undefined,\n crosshairState: isSet(object.crosshairState) ? CrosshairState.fromJSON(object.crosshairState) : undefined,\n scannerError: isSet(object.scannerError) ? globalThis.Boolean(object.scannerError) : false,\n errorCode: isSet(object.errorCode) ? globalThis.String(object.errorCode) : \"\",\n errorMessage: isSet(object.errorMessage) ? globalThis.String(object.errorMessage) : \"\",\n targetTrajectoryId: isSet(object.targetTrajectoryId) ? globalThis.Number(object.targetTrajectoryId) : 0,\n panFailure: isSet(object.panFailure) ? globalThis.Boolean(object.panFailure) : false,\n tiltFailure: isSet(object.tiltFailure) ? globalThis.Boolean(object.tiltFailure) : false,\n };\n },\n\n toJSON(message: ScannerState): unknown {\n const obj: any = {};\n if (message.scannerDescriptor !== undefined) {\n obj.scannerDescriptor = ScannerDescriptor.toJSON(message.scannerDescriptor);\n }\n if (message.laserState !== undefined) {\n obj.laserState = LaserState.toJSON(message.laserState);\n }\n if (message.crosshairState !== undefined) {\n obj.crosshairState = CrosshairState.toJSON(message.crosshairState);\n }\n if (message.scannerError !== false) {\n obj.scannerError = message.scannerError;\n }\n if (message.errorCode !== \"\") {\n obj.errorCode = message.errorCode;\n }\n if (message.errorMessage !== \"\") {\n obj.errorMessage = message.errorMessage;\n }\n if (message.targetTrajectoryId !== 0) {\n obj.targetTrajectoryId = Math.round(message.targetTrajectoryId);\n }\n if (message.panFailure !== false) {\n obj.panFailure = message.panFailure;\n }\n if (message.tiltFailure !== false) {\n obj.tiltFailure = message.tiltFailure;\n }\n return obj;\n },\n\n create, I>>(base?: I): ScannerState {\n return ScannerState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ScannerState {\n const message = createBaseScannerState();\n message.scannerDescriptor = (object.scannerDescriptor !== undefined && object.scannerDescriptor !== null)\n ? ScannerDescriptor.fromPartial(object.scannerDescriptor)\n : undefined;\n message.laserState = (object.laserState !== undefined && object.laserState !== null)\n ? LaserState.fromPartial(object.laserState)\n : undefined;\n message.crosshairState = (object.crosshairState !== undefined && object.crosshairState !== null)\n ? CrosshairState.fromPartial(object.crosshairState)\n : undefined;\n message.scannerError = object.scannerError ?? false;\n message.errorCode = object.errorCode ?? \"\";\n message.errorMessage = object.errorMessage ?? \"\";\n message.targetTrajectoryId = object.targetTrajectoryId ?? 0;\n message.panFailure = object.panFailure ?? false;\n message.tiltFailure = object.tiltFailure ?? false;\n return message;\n },\n};\n\nfunction createBaseAutoXHairCalibrationProgress(): AutoXHairCalibrationProgress {\n return { inProgress: false, progress: 0 };\n}\n\nexport const AutoXHairCalibrationProgress: MessageFns = {\n encode(message: AutoXHairCalibrationProgress, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.inProgress !== false) {\n writer.uint32(8).bool(message.inProgress);\n }\n if (message.progress !== 0) {\n writer.uint32(21).float(message.progress);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AutoXHairCalibrationProgress {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAutoXHairCalibrationProgress();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.inProgress = reader.bool();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.progress = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AutoXHairCalibrationProgress {\n return {\n inProgress: isSet(object.inProgress) ? globalThis.Boolean(object.inProgress) : false,\n progress: isSet(object.progress) ? globalThis.Number(object.progress) : 0,\n };\n },\n\n toJSON(message: AutoXHairCalibrationProgress): unknown {\n const obj: any = {};\n if (message.inProgress !== false) {\n obj.inProgress = message.inProgress;\n }\n if (message.progress !== 0) {\n obj.progress = message.progress;\n }\n return obj;\n },\n\n create, I>>(base?: I): AutoXHairCalibrationProgress {\n return AutoXHairCalibrationProgress.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AutoXHairCalibrationProgress {\n const message = createBaseAutoXHairCalibrationProgress();\n message.inProgress = object.inProgress ?? false;\n message.progress = object.progress ?? 0;\n return message;\n },\n};\n\nfunction createBaseScannerStatusReply(): ScannerStatusReply {\n return { states: [], xHairProgress: undefined };\n}\n\nexport const ScannerStatusReply: MessageFns = {\n encode(message: ScannerStatusReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.states) {\n ScannerState.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.xHairProgress !== undefined) {\n AutoXHairCalibrationProgress.encode(message.xHairProgress, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ScannerStatusReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseScannerStatusReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.states.push(ScannerState.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.xHairProgress = AutoXHairCalibrationProgress.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ScannerStatusReply {\n return {\n states: globalThis.Array.isArray(object?.states) ? object.states.map((e: any) => ScannerState.fromJSON(e)) : [],\n xHairProgress: isSet(object.xHairProgress)\n ? AutoXHairCalibrationProgress.fromJSON(object.xHairProgress)\n : undefined,\n };\n },\n\n toJSON(message: ScannerStatusReply): unknown {\n const obj: any = {};\n if (message.states?.length) {\n obj.states = message.states.map((e) => ScannerState.toJSON(e));\n }\n if (message.xHairProgress !== undefined) {\n obj.xHairProgress = AutoXHairCalibrationProgress.toJSON(message.xHairProgress);\n }\n return obj;\n },\n\n create, I>>(base?: I): ScannerStatusReply {\n return ScannerStatusReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ScannerStatusReply {\n const message = createBaseScannerStatusReply();\n message.states = object.states?.map((e) => ScannerState.fromPartial(e)) || [];\n message.xHairProgress = (object.xHairProgress !== undefined && object.xHairProgress !== null)\n ? AutoXHairCalibrationProgress.fromPartial(object.xHairProgress)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseBootedReply(): BootedReply {\n return { booted: false };\n}\n\nexport const BootedReply: MessageFns = {\n encode(message: BootedReply, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.booted !== false) {\n writer.uint32(8).bool(message.booted);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BootedReply {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBootedReply();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.booted = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BootedReply {\n return { booted: isSet(object.booted) ? globalThis.Boolean(object.booted) : false };\n },\n\n toJSON(message: BootedReply): unknown {\n const obj: any = {};\n if (message.booted !== false) {\n obj.booted = message.booted;\n }\n return obj;\n },\n\n create, I>>(base?: I): BootedReply {\n return BootedReply.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BootedReply {\n const message = createBaseBootedReply();\n message.booted = object.booted ?? false;\n return message;\n },\n};\n\nfunction createBaseTrackerState(): TrackerState {\n return { id: 0, atWeedLimit: false, rotaryTimeout: false, deepweedError: false };\n}\n\nexport const TrackerState: MessageFns = {\n encode(message: TrackerState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint32(message.id);\n }\n if (message.atWeedLimit !== false) {\n writer.uint32(16).bool(message.atWeedLimit);\n }\n if (message.rotaryTimeout !== false) {\n writer.uint32(24).bool(message.rotaryTimeout);\n }\n if (message.deepweedError !== false) {\n writer.uint32(32).bool(message.deepweedError);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrackerState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackerState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.atWeedLimit = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.rotaryTimeout = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.deepweedError = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrackerState {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n atWeedLimit: isSet(object.atWeedLimit) ? globalThis.Boolean(object.atWeedLimit) : false,\n rotaryTimeout: isSet(object.rotaryTimeout) ? globalThis.Boolean(object.rotaryTimeout) : false,\n deepweedError: isSet(object.deepweedError) ? globalThis.Boolean(object.deepweedError) : false,\n };\n },\n\n toJSON(message: TrackerState): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.atWeedLimit !== false) {\n obj.atWeedLimit = message.atWeedLimit;\n }\n if (message.rotaryTimeout !== false) {\n obj.rotaryTimeout = message.rotaryTimeout;\n }\n if (message.deepweedError !== false) {\n obj.deepweedError = message.deepweedError;\n }\n return obj;\n },\n\n create, I>>(base?: I): TrackerState {\n return TrackerState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrackerState {\n const message = createBaseTrackerState();\n message.id = object.id ?? 0;\n message.atWeedLimit = object.atWeedLimit ?? false;\n message.rotaryTimeout = object.rotaryTimeout ?? false;\n message.deepweedError = object.deepweedError ?? false;\n return message;\n },\n};\n\nfunction createBaseSchedulerState(): SchedulerState {\n return { overCapacity: false };\n}\n\nexport const SchedulerState: MessageFns = {\n encode(message: SchedulerState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.overCapacity !== false) {\n writer.uint32(8).bool(message.overCapacity);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SchedulerState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSchedulerState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.overCapacity = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SchedulerState {\n return { overCapacity: isSet(object.overCapacity) ? globalThis.Boolean(object.overCapacity) : false };\n },\n\n toJSON(message: SchedulerState): unknown {\n const obj: any = {};\n if (message.overCapacity !== false) {\n obj.overCapacity = message.overCapacity;\n }\n return obj;\n },\n\n create, I>>(base?: I): SchedulerState {\n return SchedulerState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SchedulerState {\n const message = createBaseSchedulerState();\n message.overCapacity = object.overCapacity ?? false;\n return message;\n },\n};\n\nfunction createBaseTrackingState(): TrackingState {\n return { states: [], schedulerState: undefined };\n}\n\nexport const TrackingState: MessageFns = {\n encode(message: TrackingState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.states) {\n TrackerState.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.schedulerState !== undefined) {\n SchedulerState.encode(message.schedulerState, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrackingState {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackingState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.states.push(TrackerState.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.schedulerState = SchedulerState.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrackingState {\n return {\n states: globalThis.Array.isArray(object?.states) ? object.states.map((e: any) => TrackerState.fromJSON(e)) : [],\n schedulerState: isSet(object.schedulerState) ? SchedulerState.fromJSON(object.schedulerState) : undefined,\n };\n },\n\n toJSON(message: TrackingState): unknown {\n const obj: any = {};\n if (message.states?.length) {\n obj.states = message.states.map((e) => TrackerState.toJSON(e));\n }\n if (message.schedulerState !== undefined) {\n obj.schedulerState = SchedulerState.toJSON(message.schedulerState);\n }\n return obj;\n },\n\n create, I>>(base?: I): TrackingState {\n return TrackingState.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrackingState {\n const message = createBaseTrackingState();\n message.states = object.states?.map((e) => TrackerState.fromPartial(e)) || [];\n message.schedulerState = (object.schedulerState !== undefined && object.schedulerState !== null)\n ? SchedulerState.fromPartial(object.schedulerState)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseBedtopHeightProfile(): BedtopHeightProfile {\n return { weedHeightColumns: [], cropHeightColumns: [], pcamId: \"\" };\n}\n\nexport const BedtopHeightProfile: MessageFns = {\n encode(message: BedtopHeightProfile, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n writer.uint32(10).fork();\n for (const v of message.weedHeightColumns) {\n writer.double(v);\n }\n writer.join();\n writer.uint32(18).fork();\n for (const v of message.cropHeightColumns) {\n writer.double(v);\n }\n writer.join();\n if (message.pcamId !== \"\") {\n writer.uint32(26).string(message.pcamId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): BedtopHeightProfile {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBedtopHeightProfile();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 9) {\n message.weedHeightColumns.push(reader.double());\n\n continue;\n }\n\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.weedHeightColumns.push(reader.double());\n }\n\n continue;\n }\n\n break;\n case 2:\n if (tag === 17) {\n message.cropHeightColumns.push(reader.double());\n\n continue;\n }\n\n if (tag === 18) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.cropHeightColumns.push(reader.double());\n }\n\n continue;\n }\n\n break;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.pcamId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): BedtopHeightProfile {\n return {\n weedHeightColumns: globalThis.Array.isArray(object?.weedHeightColumns)\n ? object.weedHeightColumns.map((e: any) => globalThis.Number(e))\n : [],\n cropHeightColumns: globalThis.Array.isArray(object?.cropHeightColumns)\n ? object.cropHeightColumns.map((e: any) => globalThis.Number(e))\n : [],\n pcamId: isSet(object.pcamId) ? globalThis.String(object.pcamId) : \"\",\n };\n },\n\n toJSON(message: BedtopHeightProfile): unknown {\n const obj: any = {};\n if (message.weedHeightColumns?.length) {\n obj.weedHeightColumns = message.weedHeightColumns;\n }\n if (message.cropHeightColumns?.length) {\n obj.cropHeightColumns = message.cropHeightColumns;\n }\n if (message.pcamId !== \"\") {\n obj.pcamId = message.pcamId;\n }\n return obj;\n },\n\n create, I>>(base?: I): BedtopHeightProfile {\n return BedtopHeightProfile.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): BedtopHeightProfile {\n const message = createBaseBedtopHeightProfile();\n message.weedHeightColumns = object.weedHeightColumns?.map((e) => e) || [];\n message.cropHeightColumns = object.cropHeightColumns?.map((e) => e) || [];\n message.pcamId = object.pcamId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTrackerBedtopHeightProfile(): TrackerBedtopHeightProfile {\n return { profiles: [], bbhOffsetMm: 0 };\n}\n\nexport const TrackerBedtopHeightProfile: MessageFns = {\n encode(message: TrackerBedtopHeightProfile, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.profiles) {\n BedtopHeightProfile.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.bbhOffsetMm !== 0) {\n writer.uint32(21).float(message.bbhOffsetMm);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrackerBedtopHeightProfile {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackerBedtopHeightProfile();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.profiles.push(BedtopHeightProfile.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.bbhOffsetMm = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrackerBedtopHeightProfile {\n return {\n profiles: globalThis.Array.isArray(object?.profiles)\n ? object.profiles.map((e: any) => BedtopHeightProfile.fromJSON(e))\n : [],\n bbhOffsetMm: isSet(object.bbhOffsetMm) ? globalThis.Number(object.bbhOffsetMm) : 0,\n };\n },\n\n toJSON(message: TrackerBedtopHeightProfile): unknown {\n const obj: any = {};\n if (message.profiles?.length) {\n obj.profiles = message.profiles.map((e) => BedtopHeightProfile.toJSON(e));\n }\n if (message.bbhOffsetMm !== 0) {\n obj.bbhOffsetMm = message.bbhOffsetMm;\n }\n return obj;\n },\n\n create, I>>(base?: I): TrackerBedtopHeightProfile {\n return TrackerBedtopHeightProfile.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrackerBedtopHeightProfile {\n const message = createBaseTrackerBedtopHeightProfile();\n message.profiles = object.profiles?.map((e) => BedtopHeightProfile.fromPartial(e)) || [];\n message.bbhOffsetMm = object.bbhOffsetMm ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetDimensionsResponse(): GetDimensionsResponse {\n return { minXMm: 0, maxXMm: 0, minYMm: 0, maxYMm: 0, centerXMm: 0 };\n}\n\nexport const GetDimensionsResponse: MessageFns = {\n encode(message: GetDimensionsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.minXMm !== 0) {\n writer.uint32(9).double(message.minXMm);\n }\n if (message.maxXMm !== 0) {\n writer.uint32(17).double(message.maxXMm);\n }\n if (message.minYMm !== 0) {\n writer.uint32(25).double(message.minYMm);\n }\n if (message.maxYMm !== 0) {\n writer.uint32(33).double(message.maxYMm);\n }\n if (message.centerXMm !== 0) {\n writer.uint32(41).double(message.centerXMm);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDimensionsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDimensionsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.minXMm = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.maxXMm = reader.double();\n continue;\n case 3:\n if (tag !== 25) {\n break;\n }\n\n message.minYMm = reader.double();\n continue;\n case 4:\n if (tag !== 33) {\n break;\n }\n\n message.maxYMm = reader.double();\n continue;\n case 5:\n if (tag !== 41) {\n break;\n }\n\n message.centerXMm = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDimensionsResponse {\n return {\n minXMm: isSet(object.minXMm) ? globalThis.Number(object.minXMm) : 0,\n maxXMm: isSet(object.maxXMm) ? globalThis.Number(object.maxXMm) : 0,\n minYMm: isSet(object.minYMm) ? globalThis.Number(object.minYMm) : 0,\n maxYMm: isSet(object.maxYMm) ? globalThis.Number(object.maxYMm) : 0,\n centerXMm: isSet(object.centerXMm) ? globalThis.Number(object.centerXMm) : 0,\n };\n },\n\n toJSON(message: GetDimensionsResponse): unknown {\n const obj: any = {};\n if (message.minXMm !== 0) {\n obj.minXMm = message.minXMm;\n }\n if (message.maxXMm !== 0) {\n obj.maxXMm = message.maxXMm;\n }\n if (message.minYMm !== 0) {\n obj.minYMm = message.minYMm;\n }\n if (message.maxYMm !== 0) {\n obj.maxYMm = message.maxYMm;\n }\n if (message.centerXMm !== 0) {\n obj.centerXMm = message.centerXMm;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetDimensionsResponse {\n return GetDimensionsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetDimensionsResponse {\n const message = createBaseGetDimensionsResponse();\n message.minXMm = object.minXMm ?? 0;\n message.maxXMm = object.maxXMm ?? 0;\n message.minYMm = object.minYMm ?? 0;\n message.maxYMm = object.maxYMm ?? 0;\n message.centerXMm = object.centerXMm ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetTargetCamSNRequest(): GetTargetCamSNRequest {\n return { cameraId: \"\" };\n}\n\nexport const GetTargetCamSNRequest: MessageFns = {\n encode(message: GetTargetCamSNRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.cameraId !== \"\") {\n writer.uint32(10).string(message.cameraId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTargetCamSNRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTargetCamSNRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.cameraId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetTargetCamSNRequest {\n return { cameraId: isSet(object.cameraId) ? globalThis.String(object.cameraId) : \"\" };\n },\n\n toJSON(message: GetTargetCamSNRequest): unknown {\n const obj: any = {};\n if (message.cameraId !== \"\") {\n obj.cameraId = message.cameraId;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetTargetCamSNRequest {\n return GetTargetCamSNRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetTargetCamSNRequest {\n const message = createBaseGetTargetCamSNRequest();\n message.cameraId = object.cameraId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetTargetCamSNResponse(): GetTargetCamSNResponse {\n return { serialNumber: \"\" };\n}\n\nexport const GetTargetCamSNResponse: MessageFns = {\n encode(message: GetTargetCamSNResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.serialNumber !== \"\") {\n writer.uint32(10).string(message.serialNumber);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTargetCamSNResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTargetCamSNResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.serialNumber = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetTargetCamSNResponse {\n return { serialNumber: isSet(object.serialNumber) ? globalThis.String(object.serialNumber) : \"\" };\n },\n\n toJSON(message: GetTargetCamSNResponse): unknown {\n const obj: any = {};\n if (message.serialNumber !== \"\") {\n obj.serialNumber = message.serialNumber;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetTargetCamSNResponse {\n return GetTargetCamSNResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetTargetCamSNResponse {\n const message = createBaseGetTargetCamSNResponse();\n message.serialNumber = object.serialNumber ?? \"\";\n return message;\n },\n};\n\nfunction createBaseReloadThinningConfRequest(): ReloadThinningConfRequest {\n return {};\n}\n\nexport const ReloadThinningConfRequest: MessageFns = {\n encode(_: ReloadThinningConfRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ReloadThinningConfRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseReloadThinningConfRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ReloadThinningConfRequest {\n return {};\n },\n\n toJSON(_: ReloadThinningConfRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ReloadThinningConfRequest {\n return ReloadThinningConfRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ReloadThinningConfRequest {\n const message = createBaseReloadThinningConfRequest();\n return message;\n },\n};\n\nfunction createBaseReloadAlmanacConfRequest(): ReloadAlmanacConfRequest {\n return {};\n}\n\nexport const ReloadAlmanacConfRequest: MessageFns = {\n encode(_: ReloadAlmanacConfRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ReloadAlmanacConfRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseReloadAlmanacConfRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ReloadAlmanacConfRequest {\n return {};\n },\n\n toJSON(_: ReloadAlmanacConfRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ReloadAlmanacConfRequest {\n return ReloadAlmanacConfRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ReloadAlmanacConfRequest {\n const message = createBaseReloadAlmanacConfRequest();\n return message;\n },\n};\n\nfunction createBaseReloadDiscriminatorConfRequest(): ReloadDiscriminatorConfRequest {\n return {};\n}\n\nexport const ReloadDiscriminatorConfRequest: MessageFns = {\n encode(_: ReloadDiscriminatorConfRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ReloadDiscriminatorConfRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseReloadDiscriminatorConfRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ReloadDiscriminatorConfRequest {\n return {};\n },\n\n toJSON(_: ReloadDiscriminatorConfRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ReloadDiscriminatorConfRequest {\n return ReloadDiscriminatorConfRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ReloadDiscriminatorConfRequest {\n const message = createBaseReloadDiscriminatorConfRequest();\n return message;\n },\n};\n\nfunction createBaseReloadModelinatorConfRequest(): ReloadModelinatorConfRequest {\n return {};\n}\n\nexport const ReloadModelinatorConfRequest: MessageFns = {\n encode(_: ReloadModelinatorConfRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ReloadModelinatorConfRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseReloadModelinatorConfRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ReloadModelinatorConfRequest {\n return {};\n },\n\n toJSON(_: ReloadModelinatorConfRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ReloadModelinatorConfRequest {\n return ReloadModelinatorConfRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ReloadModelinatorConfRequest {\n const message = createBaseReloadModelinatorConfRequest();\n return message;\n },\n};\n\nfunction createBaseReloadTVEProfileRequest(): ReloadTVEProfileRequest {\n return {};\n}\n\nexport const ReloadTVEProfileRequest: MessageFns = {\n encode(_: ReloadTVEProfileRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ReloadTVEProfileRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseReloadTVEProfileRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): ReloadTVEProfileRequest {\n return {};\n },\n\n toJSON(_: ReloadTVEProfileRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): ReloadTVEProfileRequest {\n return ReloadTVEProfileRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): ReloadTVEProfileRequest {\n const message = createBaseReloadTVEProfileRequest();\n return message;\n },\n};\n\nfunction createBaseFixLaserMetricsRequest(): FixLaserMetricsRequest {\n return { scanner: undefined, totalFireCount: 0, totalFireTimeMs: 0 };\n}\n\nexport const FixLaserMetricsRequest: MessageFns = {\n encode(message: FixLaserMetricsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scanner !== undefined) {\n ScannerDescriptor.encode(message.scanner, writer.uint32(10).fork()).join();\n }\n if (message.totalFireCount !== 0) {\n writer.uint32(16).int64(message.totalFireCount);\n }\n if (message.totalFireTimeMs !== 0) {\n writer.uint32(24).int64(message.totalFireTimeMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FixLaserMetricsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFixLaserMetricsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scanner = ScannerDescriptor.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.totalFireCount = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.totalFireTimeMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FixLaserMetricsRequest {\n return {\n scanner: isSet(object.scanner) ? ScannerDescriptor.fromJSON(object.scanner) : undefined,\n totalFireCount: isSet(object.totalFireCount) ? globalThis.Number(object.totalFireCount) : 0,\n totalFireTimeMs: isSet(object.totalFireTimeMs) ? globalThis.Number(object.totalFireTimeMs) : 0,\n };\n },\n\n toJSON(message: FixLaserMetricsRequest): unknown {\n const obj: any = {};\n if (message.scanner !== undefined) {\n obj.scanner = ScannerDescriptor.toJSON(message.scanner);\n }\n if (message.totalFireCount !== 0) {\n obj.totalFireCount = Math.round(message.totalFireCount);\n }\n if (message.totalFireTimeMs !== 0) {\n obj.totalFireTimeMs = Math.round(message.totalFireTimeMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): FixLaserMetricsRequest {\n return FixLaserMetricsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FixLaserMetricsRequest {\n const message = createBaseFixLaserMetricsRequest();\n message.scanner = (object.scanner !== undefined && object.scanner !== null)\n ? ScannerDescriptor.fromPartial(object.scanner)\n : undefined;\n message.totalFireCount = object.totalFireCount ?? 0;\n message.totalFireTimeMs = object.totalFireTimeMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseTrackedItemsRequest(): TrackedItemsRequest {\n return { camId: \"\" };\n}\n\nexport const TrackedItemsRequest: MessageFns = {\n encode(message: TrackedItemsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrackedItemsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackedItemsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrackedItemsRequest {\n return { camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\" };\n },\n\n toJSON(message: TrackedItemsRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n return obj;\n },\n\n create, I>>(base?: I): TrackedItemsRequest {\n return TrackedItemsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrackedItemsRequest {\n const message = createBaseTrackedItemsRequest();\n message.camId = object.camId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTrackedItemHistory(): TrackedItemHistory {\n return { timestampMs: 0, detection: undefined };\n}\n\nexport const TrackedItemHistory: MessageFns = {\n encode(message: TrackedItemHistory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.timestampMs !== 0) {\n writer.uint32(8).uint64(message.timestampMs);\n }\n if (message.detection !== undefined) {\n Detection.encode(message.detection, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrackedItemHistory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackedItemHistory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.detection = Detection.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrackedItemHistory {\n return {\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n detection: isSet(object.detection) ? Detection.fromJSON(object.detection) : undefined,\n };\n },\n\n toJSON(message: TrackedItemHistory): unknown {\n const obj: any = {};\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.detection !== undefined) {\n obj.detection = Detection.toJSON(message.detection);\n }\n return obj;\n },\n\n create, I>>(base?: I): TrackedItemHistory {\n return TrackedItemHistory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrackedItemHistory {\n const message = createBaseTrackedItemHistory();\n message.timestampMs = object.timestampMs ?? 0;\n message.detection = (object.detection !== undefined && object.detection !== null)\n ? Detection.fromPartial(object.detection)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseTrackedItem(): TrackedItem {\n return { id: 0, history: [] };\n}\n\nexport const TrackedItem: MessageFns = {\n encode(message: TrackedItem, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).int64(message.id);\n }\n for (const v of message.history) {\n TrackedItemHistory.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrackedItem {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackedItem();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.history.push(TrackedItemHistory.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrackedItem {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n history: globalThis.Array.isArray(object?.history)\n ? object.history.map((e: any) => TrackedItemHistory.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: TrackedItem): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.history?.length) {\n obj.history = message.history.map((e) => TrackedItemHistory.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): TrackedItem {\n return TrackedItem.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrackedItem {\n const message = createBaseTrackedItem();\n message.id = object.id ?? 0;\n message.history = object.history?.map((e) => TrackedItemHistory.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseTrackedItemsResponse(): TrackedItemsResponse {\n return { trackedItems: [] };\n}\n\nexport const TrackedItemsResponse: MessageFns = {\n encode(message: TrackedItemsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.trackedItems) {\n TrackedItem.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrackedItemsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackedItemsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.trackedItems.push(TrackedItem.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrackedItemsResponse {\n return {\n trackedItems: globalThis.Array.isArray(object?.trackedItems)\n ? object.trackedItems.map((e: any) => TrackedItem.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: TrackedItemsResponse): unknown {\n const obj: any = {};\n if (message.trackedItems?.length) {\n obj.trackedItems = message.trackedItems.map((e) => TrackedItem.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): TrackedItemsResponse {\n return TrackedItemsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrackedItemsResponse {\n const message = createBaseTrackedItemsResponse();\n message.trackedItems = object.trackedItems?.map((e) => TrackedItem.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseParticipationResponse(): ParticipationResponse {\n return { runningAsLeader: false };\n}\n\nexport const ParticipationResponse: MessageFns = {\n encode(message: ParticipationResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.runningAsLeader !== false) {\n writer.uint32(8).bool(message.runningAsLeader);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ParticipationResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseParticipationResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.runningAsLeader = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ParticipationResponse {\n return { runningAsLeader: isSet(object.runningAsLeader) ? globalThis.Boolean(object.runningAsLeader) : false };\n },\n\n toJSON(message: ParticipationResponse): unknown {\n const obj: any = {};\n if (message.runningAsLeader !== false) {\n obj.runningAsLeader = message.runningAsLeader;\n }\n return obj;\n },\n\n create, I>>(base?: I): ParticipationResponse {\n return ParticipationResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ParticipationResponse {\n const message = createBaseParticipationResponse();\n message.runningAsLeader = object.runningAsLeader ?? false;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: lib/common/camera/camera.proto\n\n/* eslint-disable */\n\nexport const protobufPackage = \"lib.common.camera\";\n\nexport enum LightSourcePreset {\n kOff = 0,\n kDaylight5000K = 1,\n kDaylight6500K = 2,\n kTungsten2800K = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function lightSourcePresetFromJSON(object: any): LightSourcePreset {\n switch (object) {\n case 0:\n case \"kOff\":\n return LightSourcePreset.kOff;\n case 1:\n case \"kDaylight5000K\":\n return LightSourcePreset.kDaylight5000K;\n case 2:\n case \"kDaylight6500K\":\n return LightSourcePreset.kDaylight6500K;\n case 3:\n case \"kTungsten2800K\":\n return LightSourcePreset.kTungsten2800K;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return LightSourcePreset.UNRECOGNIZED;\n }\n}\n\nexport function lightSourcePresetToJSON(object: LightSourcePreset): string {\n switch (object) {\n case LightSourcePreset.kOff:\n return \"kOff\";\n case LightSourcePreset.kDaylight5000K:\n return \"kDaylight5000K\";\n case LightSourcePreset.kDaylight6500K:\n return \"kDaylight6500K\";\n case LightSourcePreset.kTungsten2800K:\n return \"kTungsten2800K\";\n case LightSourcePreset.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: cv/cv.proto\n\n/* eslint-disable */\n\nexport const protobufPackage = \"carbon.aimbot.cv\";\n\nexport enum P2PCaptureReason {\n /** P2PCaptureReason_MISS - Must keep order and increment by one as we iterate based on size */\n P2PCaptureReason_MISS = 0,\n P2PCaptureReason_SUCCESS = 1,\n P2PCaptureReason_JUMP = 2,\n P2PCaptureReason_First_P2P = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function p2PCaptureReasonFromJSON(object: any): P2PCaptureReason {\n switch (object) {\n case 0:\n case \"P2PCaptureReason_MISS\":\n return P2PCaptureReason.P2PCaptureReason_MISS;\n case 1:\n case \"P2PCaptureReason_SUCCESS\":\n return P2PCaptureReason.P2PCaptureReason_SUCCESS;\n case 2:\n case \"P2PCaptureReason_JUMP\":\n return P2PCaptureReason.P2PCaptureReason_JUMP;\n case 3:\n case \"P2PCaptureReason_First_P2P\":\n return P2PCaptureReason.P2PCaptureReason_First_P2P;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return P2PCaptureReason.UNRECOGNIZED;\n }\n}\n\nexport function p2PCaptureReasonToJSON(object: P2PCaptureReason): string {\n switch (object) {\n case P2PCaptureReason.P2PCaptureReason_MISS:\n return \"P2PCaptureReason_MISS\";\n case P2PCaptureReason.P2PCaptureReason_SUCCESS:\n return \"P2PCaptureReason_SUCCESS\";\n case P2PCaptureReason.P2PCaptureReason_JUMP:\n return \"P2PCaptureReason_JUMP\";\n case P2PCaptureReason.P2PCaptureReason_First_P2P:\n return \"P2PCaptureReason_First_P2P\";\n case P2PCaptureReason.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: cv/runtime/cv_runtime.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { LightSourcePreset, lightSourcePresetFromJSON, lightSourcePresetToJSON } from \"../../lib/common/camera/camera\";\nimport { Detection } from \"../../weed_tracking/weed_tracking\";\nimport { P2PCaptureReason, p2PCaptureReasonFromJSON, p2PCaptureReasonToJSON } from \"../cv\";\n\nexport const protobufPackage = \"cv.runtime.proto\";\n\nexport enum BufferUseCase {\n P2P = 0,\n /** OpticalFlow - Deprecated */\n OpticalFlow = 1,\n Predict = 2,\n Drive = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function bufferUseCaseFromJSON(object: any): BufferUseCase {\n switch (object) {\n case 0:\n case \"P2P\":\n return BufferUseCase.P2P;\n case 1:\n case \"OpticalFlow\":\n return BufferUseCase.OpticalFlow;\n case 2:\n case \"Predict\":\n return BufferUseCase.Predict;\n case 3:\n case \"Drive\":\n return BufferUseCase.Drive;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return BufferUseCase.UNRECOGNIZED;\n }\n}\n\nexport function bufferUseCaseToJSON(object: BufferUseCase): string {\n switch (object) {\n case BufferUseCase.P2P:\n return \"P2P\";\n case BufferUseCase.OpticalFlow:\n return \"OpticalFlow\";\n case BufferUseCase.Predict:\n return \"Predict\";\n case BufferUseCase.Drive:\n return \"Drive\";\n case BufferUseCase.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum DetectionClass {\n ORGANICS = 0,\n DRIPTAPE = 1,\n SPINACH = 2,\n STICK_RED = 3,\n STICK_YELLOW = 4,\n ONION = 5,\n CROWN = 6,\n GRASS = 7,\n FURROW = 8,\n PURSLANE = 9,\n HORSETAIL = 10,\n KOCHIA = 11,\n LAMBSQUARTER = 12,\n MALLOW = 13,\n NUTSEDGE = 14,\n LEAFY_WEED = 15,\n INFRASTRUCTURE = 16,\n LONDON_ROCKET = 17,\n BABY_WEED = 18,\n UNRECOGNIZED = -1,\n}\n\nexport function detectionClassFromJSON(object: any): DetectionClass {\n switch (object) {\n case 0:\n case \"ORGANICS\":\n return DetectionClass.ORGANICS;\n case 1:\n case \"DRIPTAPE\":\n return DetectionClass.DRIPTAPE;\n case 2:\n case \"SPINACH\":\n return DetectionClass.SPINACH;\n case 3:\n case \"STICK_RED\":\n return DetectionClass.STICK_RED;\n case 4:\n case \"STICK_YELLOW\":\n return DetectionClass.STICK_YELLOW;\n case 5:\n case \"ONION\":\n return DetectionClass.ONION;\n case 6:\n case \"CROWN\":\n return DetectionClass.CROWN;\n case 7:\n case \"GRASS\":\n return DetectionClass.GRASS;\n case 8:\n case \"FURROW\":\n return DetectionClass.FURROW;\n case 9:\n case \"PURSLANE\":\n return DetectionClass.PURSLANE;\n case 10:\n case \"HORSETAIL\":\n return DetectionClass.HORSETAIL;\n case 11:\n case \"KOCHIA\":\n return DetectionClass.KOCHIA;\n case 12:\n case \"LAMBSQUARTER\":\n return DetectionClass.LAMBSQUARTER;\n case 13:\n case \"MALLOW\":\n return DetectionClass.MALLOW;\n case 14:\n case \"NUTSEDGE\":\n return DetectionClass.NUTSEDGE;\n case 15:\n case \"LEAFY_WEED\":\n return DetectionClass.LEAFY_WEED;\n case 16:\n case \"INFRASTRUCTURE\":\n return DetectionClass.INFRASTRUCTURE;\n case 17:\n case \"LONDON_ROCKET\":\n return DetectionClass.LONDON_ROCKET;\n case 18:\n case \"BABY_WEED\":\n return DetectionClass.BABY_WEED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return DetectionClass.UNRECOGNIZED;\n }\n}\n\nexport function detectionClassToJSON(object: DetectionClass): string {\n switch (object) {\n case DetectionClass.ORGANICS:\n return \"ORGANICS\";\n case DetectionClass.DRIPTAPE:\n return \"DRIPTAPE\";\n case DetectionClass.SPINACH:\n return \"SPINACH\";\n case DetectionClass.STICK_RED:\n return \"STICK_RED\";\n case DetectionClass.STICK_YELLOW:\n return \"STICK_YELLOW\";\n case DetectionClass.ONION:\n return \"ONION\";\n case DetectionClass.CROWN:\n return \"CROWN\";\n case DetectionClass.GRASS:\n return \"GRASS\";\n case DetectionClass.FURROW:\n return \"FURROW\";\n case DetectionClass.PURSLANE:\n return \"PURSLANE\";\n case DetectionClass.HORSETAIL:\n return \"HORSETAIL\";\n case DetectionClass.KOCHIA:\n return \"KOCHIA\";\n case DetectionClass.LAMBSQUARTER:\n return \"LAMBSQUARTER\";\n case DetectionClass.MALLOW:\n return \"MALLOW\";\n case DetectionClass.NUTSEDGE:\n return \"NUTSEDGE\";\n case DetectionClass.LEAFY_WEED:\n return \"LEAFY_WEED\";\n case DetectionClass.INFRASTRUCTURE:\n return \"INFRASTRUCTURE\";\n case DetectionClass.LONDON_ROCKET:\n return \"LONDON_ROCKET\";\n case DetectionClass.BABY_WEED:\n return \"BABY_WEED\";\n case DetectionClass.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport enum HitClass {\n WEED = 0,\n CROP = 1,\n PLANT = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function hitClassFromJSON(object: any): HitClass {\n switch (object) {\n case 0:\n case \"WEED\":\n return HitClass.WEED;\n case 1:\n case \"CROP\":\n return HitClass.CROP;\n case 2:\n case \"PLANT\":\n return HitClass.PLANT;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return HitClass.UNRECOGNIZED;\n }\n}\n\nexport function hitClassToJSON(object: HitClass): string {\n switch (object) {\n case HitClass.WEED:\n return \"WEED\";\n case HitClass.CROP:\n return \"CROP\";\n case HitClass.PLANT:\n return \"PLANT\";\n case HitClass.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface MaskExpressions {\n exprs: MaskExpression[];\n}\n\nexport interface TargetSafetyZone {\n up: number;\n down: number;\n left: number;\n right: number;\n}\n\nexport interface P2PContext {\n predictCamId: string;\n predictTimestampMs: number;\n predictCoordX: number;\n predictCoordY: number;\n}\n\nexport interface SetP2PContextRequest {\n targetCamId: string;\n primaryContext: P2PContext | undefined;\n secondaryContext?: P2PContext | undefined;\n safetyZone: TargetSafetyZone | undefined;\n}\n\nexport interface SetP2PContextResponse {\n}\n\nexport interface GetBufferNameRequest {\n camId: string;\n useCase: BufferUseCase;\n}\n\nexport interface GetBufferNameResponse {\n bufferName: string;\n}\n\nexport interface GetCameraDimensionsRequest {\n camId: string;\n}\n\nexport interface GetCameraDimensionsResponse {\n width: number;\n height: number;\n transpose: boolean;\n}\n\nexport interface StartP2PDataCaptureRequest {\n targetCamId: string;\n captureMissRate: number;\n captureSuccessRate: number;\n captureEnabled: boolean;\n capturePath: string;\n afterTimestampMs: number;\n}\n\nexport interface StartP2PDataCaptureResponse {\n}\n\nexport interface StopP2PDataCaptureRequest {\n targetCamId: string;\n}\n\nexport interface StopP2PDataCaptureResponse {\n}\n\nexport interface PointDetectionCategory {\n threshold: number;\n category: string;\n}\n\nexport interface SegmentationDetectionCategory {\n threshold: number;\n category: string;\n safetyRadiusIn: number;\n}\n\nexport interface DeepweedDetectionCriteriaSetting {\n /** v1 */\n pointCategories: PointDetectionCategory[];\n /** v2 */\n weedPointThreshold: number;\n cropPointThreshold: number;\n segmentationCategories: SegmentationDetectionCategory[];\n}\n\nexport interface SetDeepweedDetectionCriteriaRequest {\n weedPointThreshold: number;\n cropPointThreshold: number;\n pointCategories: PointDetectionCategory[];\n segmentationCategories: SegmentationDetectionCategory[];\n}\n\nexport interface SetDeepweedDetectionCriteriaResponse {\n}\n\nexport interface GetDeepweedDetectionCriteriaRequest {\n}\n\nexport interface GetDeepweedDetectionCriteriaResponse {\n weedPointThreshold: number;\n cropPointThreshold: number;\n pointCategories: PointDetectionCategory[];\n segmentationCategories: SegmentationDetectionCategory[];\n}\n\nexport interface GetDeepweedSupportedCategoriesRequest {\n camId?: string | undefined;\n}\n\nexport interface GetDeepweedSupportedCategoriesResponse {\n segmentationCategories: string[];\n pointCategories: string[];\n}\n\nexport interface SetDeeplabMaskExpressionsRequest {\n camId: string;\n useCase: BufferUseCase;\n exprs: MaskExpression[];\n}\n\nexport interface SetDeeplabMaskExpressionsResponse {\n}\n\nexport interface GetDeepweedIndexToCategoryRequest {\n camId: string;\n}\n\nexport interface GetDeepweedIndexToCategoryResponse {\n weedPointIndexToCategory: { [key: number]: string };\n cropPointIndexToCategory: { [key: number]: string };\n intersectionIndexToCategory: { [key: number]: string };\n}\n\nexport interface GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry {\n key: number;\n value: string;\n}\n\nexport interface GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry {\n key: number;\n value: string;\n}\n\nexport interface GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry {\n key: number;\n value: string;\n}\n\nexport interface GetPredictCamMatrixRequest {\n predictCamId: string;\n}\n\nexport interface GetPredictCamDistortionCoefficientsRequest {\n predictCamId: string;\n}\n\nexport interface SetCameraSettingsRequest {\n camIds: string[];\n exposureUs?: number | undefined;\n gamma?: number | undefined;\n gainDb?: number | undefined;\n lightSourcePreset?: LightSourcePreset | undefined;\n wbRatioRed?: number | undefined;\n wbRatioGreen?: number | undefined;\n wbRatioBlue?: number | undefined;\n roiOffsetX?: number | undefined;\n roiOffsetY?: number | undefined;\n mirror?: boolean | undefined;\n flip?: boolean | undefined;\n strobing?: boolean | undefined;\n ptp?: boolean | undefined;\n autoWhitebalance?: boolean | undefined;\n}\n\nexport interface SetCameraSettingsResponse {\n camIds: string[];\n}\n\nexport interface SetAutoWhitebalanceRequest {\n enable: boolean;\n camIds: string[];\n}\n\nexport interface SetAutoWhitebalanceResponse {\n}\n\nexport interface GetCameraSettingsRequest {\n camIds: string[];\n}\n\nexport interface CameraSettingsResponse {\n camId: string;\n exposureUs?: number | undefined;\n gamma?: number | undefined;\n gainDb?: number | undefined;\n lightSourcePreset?: LightSourcePreset | undefined;\n wbRatioRed?: number | undefined;\n wbRatioGreen?: number | undefined;\n wbRatioBlue?: number | undefined;\n roiWidth?: number | undefined;\n roiHeight?: number | undefined;\n roiOffsetX?: number | undefined;\n roiOffsetY?: number | undefined;\n gpuId?: number | undefined;\n mirror: boolean;\n flip: boolean;\n strobing: boolean;\n ptp: boolean;\n autoWhitebalance?: boolean | undefined;\n}\n\nexport interface GetCameraSettingsResponse {\n cameraSettingsResponse: CameraSettingsResponse[];\n}\n\nexport interface StartBurstRecordFramesRequest {\n camId: string;\n durationMs: number;\n path: string;\n dontCapturePredictImage: boolean;\n downsampleFactor: number;\n}\n\nexport interface StartBurstRecordFramesResponse {\n}\n\nexport interface StopBurstRecordFramesRequest {\n camId: string;\n lastFrameTimestampMs?: number | undefined;\n}\n\nexport interface StopBurstRecordFramesResponse {\n}\n\nexport interface P2POutputProto {\n matched: boolean;\n targetCoordX: number;\n targetCoordY: number;\n targetTimestampMs: number;\n predictTimestampMs: number;\n safe: boolean;\n}\n\nexport interface GetNextP2POutputRequest {\n bufferName: string;\n timestampMs: number;\n timeoutMs: number;\n}\n\nexport interface GetConnectorsRequest {\n camIds: string[];\n connectorIds: string[];\n}\n\nexport interface ConnectorResponse {\n camId: string;\n connectorId: string;\n isEnabled: boolean;\n reductionRatio: number;\n}\n\nexport interface GetConnectorsResponse {\n connectorResponse: ConnectorResponse[];\n}\n\nexport interface SetConnectorsRequest {\n camIds: string[];\n connectorIds: string[];\n isEnabled?: boolean | undefined;\n reductionRatio?: number | undefined;\n}\n\nexport interface SetConnectorsResponse {\n}\n\nexport interface NodeTiming {\n name: string;\n fpsMean: number;\n fps99pct: number;\n latencyMsMean: number;\n latencyMs99pct: number;\n state: string;\n stateTimings: { [key: string]: number };\n}\n\nexport interface NodeTiming_StateTimingsEntry {\n key: string;\n value: number;\n}\n\nexport interface GetTimingRequest {\n}\n\nexport interface GetTimingResponse {\n nodeTiming: NodeTiming[];\n}\n\nexport interface PredictRequest {\n camId: string;\n filePaths: string[];\n timestampsMs: number[];\n}\n\nexport interface PredictResponse {\n}\n\nexport interface LoadAndQueueRequest {\n camId: string;\n filePaths: string[];\n timestampsMs: number[];\n}\n\nexport interface LoadAndQueueResponse {\n}\n\nexport interface SetImageRequest {\n camId: string;\n filePath: string;\n}\n\nexport interface SetImageResponse {\n}\n\nexport interface UnsetImageRequest {\n camId: string;\n}\n\nexport interface UnsetImageResponse {\n}\n\nexport interface GetModelPathsRequest {\n}\n\nexport interface GetModelPathsResponse {\n p2p?: string | undefined;\n deepweed?: string | undefined;\n furrows?: string | undefined;\n}\n\nexport interface GetCameraTemperaturesRequest {\n}\n\nexport interface CameraTemperature {\n camId: string;\n temperature: number;\n}\n\nexport interface GetCameraTemperaturesResponse {\n temperature: CameraTemperature[];\n}\n\nexport interface GeoLLA {\n lat?: number | undefined;\n lng?: number | undefined;\n alt?: number | undefined;\n timestampMs?: number | undefined;\n}\n\nexport interface GeoECEF {\n x?: number | undefined;\n y?: number | undefined;\n z?: number | undefined;\n timestampMs?: number | undefined;\n}\n\nexport interface SetGPSLocationRequest {\n lla: GeoLLA | undefined;\n ecef: GeoECEF | undefined;\n}\n\nexport interface SetGPSLocationResponse {\n}\n\nexport interface SetImplementStatusRequest {\n lifted: boolean;\n estopped: boolean;\n}\n\nexport interface SetImplementStatusResponse {\n}\n\nexport interface MaskExpression {\n category?: CategoryExpression | undefined;\n dilate?: DilateExpression | undefined;\n erode?:\n | ErodeExpression\n | undefined;\n /** Union is a reserved keyword in C */\n unionExpr?: UnionExpression | undefined;\n intersect?: IntersectExpression | undefined;\n negate?: NegateExpression | undefined;\n line?: LineExpression | undefined;\n allLines?: AllLinesExpression | undefined;\n}\n\nexport interface CategoryExpression {\n category: string;\n threshold: number;\n}\n\nexport interface LineExpression {\n category: string;\n x: number;\n y: number;\n}\n\nexport interface AllLinesExpression {\n category: string;\n}\n\nexport interface DilateExpression {\n expr: MaskExpression | undefined;\n size: number;\n granularity: number;\n}\n\nexport interface ErodeExpression {\n expr: MaskExpression | undefined;\n size: number;\n granularity: number;\n}\n\nexport interface UnionExpression {\n exprs: MaskExpression[];\n}\n\nexport interface IntersectExpression {\n exprs: MaskExpression[];\n}\n\nexport interface NegateExpression {\n expr: MaskExpression | undefined;\n}\n\nexport interface SetImageScoreRequest {\n score: number;\n timestampMs: number;\n camId: string;\n deepweedDetections: DeepweedDetection[];\n}\n\nexport interface SetImageScoreResponse {\n}\n\nexport interface GetScoreQueueRequest {\n scoreType: string;\n}\n\nexport interface ScoreObject {\n score: number;\n timestampMs: number;\n camId: string;\n}\n\nexport interface GetScoreQueueResponse {\n scoreObject: ScoreObject[];\n}\n\nexport interface GetMaxImageScoreRequest {\n scoreType: string;\n}\n\nexport interface GetMaxImageScoreResponse {\n score: number;\n type: string;\n}\n\nexport interface GetMaxScoredImageRequest {\n scoreType: string;\n}\n\nexport interface GetLatestP2PImageRequest {\n /** @deprecated */\n scoreType: string;\n reason: P2PCaptureReason;\n}\n\nexport interface GetLatestImageRequest {\n camId: string;\n}\n\nexport interface FlushQueuesRequest {\n scoreType: string[];\n}\n\nexport interface FlushQueuesResponse {\n}\n\nexport interface ImageAndMetadataResponse {\n bytes: Uint8Array;\n width: number;\n height: number;\n timestampMs: number;\n score: number;\n camId: string;\n isoFormattedTime: string;\n llaLat: number;\n llaLng: number;\n llaAlt: number;\n llaTimestampMs: number;\n ecefX: number;\n ecefY: number;\n ecefZ: number;\n ecefTimestampMs: number;\n ppi: number;\n scoreType?: string | undefined;\n imageType: string;\n modelUrl: string;\n crop: string;\n weedHeightColumns: number[];\n cropHeightColumns: number[];\n bbhOffsetMm: number;\n focusMetric: number;\n exposureUs: number;\n cropPointThreshold: number;\n weedPointThreshold: number;\n weedingEnabled: boolean;\n thinningEnabled: boolean;\n deepweedId: string;\n p2pId: string;\n deepweedDetections: Detection[];\n segmentationThreshold: number;\n simulatorGenerated: boolean;\n}\n\nexport interface P2PImageAndMetadataResponse {\n targetBytes: Uint8Array;\n targetWidth: number;\n targetHeight: number;\n perspectiveBytes: Uint8Array;\n perspectiveWidth: number;\n perspectiveHeight: number;\n annotatedTargetBytes: Uint8Array;\n annotatedTargetWidth: number;\n annotatedTargetHeight: number;\n timestampMs: number;\n score: number;\n camId: string;\n isoFormattedTime: string;\n llaLat: number;\n llaLng: number;\n llaAlt: number;\n llaTimestampMs: number;\n ecefX: number;\n ecefY: number;\n ecefZ: number;\n ecefTimestampMs: number;\n ppi: number;\n perspectivePpi: number;\n imageType: string;\n modelUrl: string;\n crop: string;\n focusMetric: number;\n exposureUs: number;\n weedingEnabled: boolean;\n thinningEnabled: boolean;\n deepweedId: string;\n p2pId: string;\n}\n\nexport interface GetCameraInfoRequest {\n}\n\nexport interface CameraInfo {\n camId: string;\n ipAddress?: string | undefined;\n serialNumber?: string | undefined;\n model: string;\n width: number;\n height: number;\n connected: boolean;\n linkSpeed: number;\n}\n\nexport interface GetCameraInfoResponse {\n cameraInfo: CameraInfo[];\n}\n\nexport interface GetLightweightBurstRecordRequest {\n}\n\nexport interface GetLightweightBurstRecordResponse {\n zipFile: Uint8Array;\n metadataFile: Uint8Array;\n}\n\nexport interface GetBootedRequest {\n}\n\nexport interface GetBootedResponse {\n booted: boolean;\n}\n\nexport interface GetReadyRequest {\n}\n\nexport interface GetReadyResponse {\n ready: boolean;\n}\n\nexport interface DeepweedDetection {\n x: number;\n y: number;\n size: number;\n score: number;\n detectionClassScores: { [key: string]: number };\n hitClass: HitClass;\n maskIntersections: string[];\n weedScore: number;\n cropScore: number;\n}\n\nexport interface DeepweedDetection_DetectionClassScoresEntry {\n key: string;\n value: number;\n}\n\nexport interface DeepweedOutput {\n detections: DeepweedDetection[];\n maskWidth: number;\n maskHeight: number;\n maskChannels: number;\n mask: number[];\n maskChannelClasses: string[];\n predictInDistanceBuffer: boolean;\n timestampMs: number;\n}\n\nexport interface GetDeepweedOutputByTimestampRequest {\n camId: string;\n timestampMs: number;\n}\n\nexport interface GetRecommendedStrobeSettingsRequest {\n}\n\nexport interface GetRecommendedStrobeSettingsResponse {\n targetCameraFps: number;\n targetsPerPredictRatio: number;\n}\n\n/** @deprecated */\nexport interface StartP2PBufferringRequest {\n camId: string;\n}\n\n/** @deprecated */\nexport interface StartP2PBufferringResponse {\n}\n\n/** @deprecated */\nexport interface StopP2PBufferringRequest {\n saveBurst: boolean;\n camId: string;\n path: string;\n dontCapturePredictImage: boolean;\n startTimestampMs: number;\n endTimestampMs: number;\n}\n\n/** @deprecated */\nexport interface StopP2PBufferringResponse {\n}\n\nexport interface P2PCaptureRequest {\n camId: string;\n name: string;\n timestampMs: number;\n writeToDisk: boolean;\n reason: P2PCaptureReason;\n}\n\nexport interface P2PCaptureResponse {\n}\n\nexport interface P2PBufferringBurstCaptureRequest {\n camId: string;\n path: string;\n dontCapturePredictImage: boolean;\n startTimestampMs: number;\n endTimestampMs: number;\n}\n\nexport interface P2PBufferringBurstCaptureResponse {\n}\n\nexport interface GetNextDeepweedOutputRequest {\n timestampMs: number;\n bufferName: string;\n timeoutMs: number;\n}\n\nexport interface SetTargetingStateRequest {\n weedingEnabled: boolean;\n thinningEnabled: boolean;\n}\n\nexport interface SetTargetingStateResponse {\n}\n\nfunction createBaseMaskExpressions(): MaskExpressions {\n return { exprs: [] };\n}\n\nexport const MaskExpressions: MessageFns = {\n encode(message: MaskExpressions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.exprs) {\n MaskExpression.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MaskExpressions {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMaskExpressions();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.exprs.push(MaskExpression.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MaskExpressions {\n return {\n exprs: globalThis.Array.isArray(object?.exprs) ? object.exprs.map((e: any) => MaskExpression.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: MaskExpressions): unknown {\n const obj: any = {};\n if (message.exprs?.length) {\n obj.exprs = message.exprs.map((e) => MaskExpression.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): MaskExpressions {\n return MaskExpressions.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): MaskExpressions {\n const message = createBaseMaskExpressions();\n message.exprs = object.exprs?.map((e) => MaskExpression.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseTargetSafetyZone(): TargetSafetyZone {\n return { up: 0, down: 0, left: 0, right: 0 };\n}\n\nexport const TargetSafetyZone: MessageFns = {\n encode(message: TargetSafetyZone, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.up !== 0) {\n writer.uint32(13).float(message.up);\n }\n if (message.down !== 0) {\n writer.uint32(21).float(message.down);\n }\n if (message.left !== 0) {\n writer.uint32(29).float(message.left);\n }\n if (message.right !== 0) {\n writer.uint32(37).float(message.right);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TargetSafetyZone {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTargetSafetyZone();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.up = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.down = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.left = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.right = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TargetSafetyZone {\n return {\n up: isSet(object.up) ? globalThis.Number(object.up) : 0,\n down: isSet(object.down) ? globalThis.Number(object.down) : 0,\n left: isSet(object.left) ? globalThis.Number(object.left) : 0,\n right: isSet(object.right) ? globalThis.Number(object.right) : 0,\n };\n },\n\n toJSON(message: TargetSafetyZone): unknown {\n const obj: any = {};\n if (message.up !== 0) {\n obj.up = message.up;\n }\n if (message.down !== 0) {\n obj.down = message.down;\n }\n if (message.left !== 0) {\n obj.left = message.left;\n }\n if (message.right !== 0) {\n obj.right = message.right;\n }\n return obj;\n },\n\n create, I>>(base?: I): TargetSafetyZone {\n return TargetSafetyZone.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TargetSafetyZone {\n const message = createBaseTargetSafetyZone();\n message.up = object.up ?? 0;\n message.down = object.down ?? 0;\n message.left = object.left ?? 0;\n message.right = object.right ?? 0;\n return message;\n },\n};\n\nfunction createBaseP2PContext(): P2PContext {\n return { predictCamId: \"\", predictTimestampMs: 0, predictCoordX: 0, predictCoordY: 0 };\n}\n\nexport const P2PContext: MessageFns = {\n encode(message: P2PContext, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.predictCamId !== \"\") {\n writer.uint32(10).string(message.predictCamId);\n }\n if (message.predictTimestampMs !== 0) {\n writer.uint32(16).int64(message.predictTimestampMs);\n }\n if (message.predictCoordX !== 0) {\n writer.uint32(29).float(message.predictCoordX);\n }\n if (message.predictCoordY !== 0) {\n writer.uint32(37).float(message.predictCoordY);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): P2PContext {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseP2PContext();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.predictCamId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.predictTimestampMs = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.predictCoordX = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.predictCoordY = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): P2PContext {\n return {\n predictCamId: isSet(object.predictCamId) ? globalThis.String(object.predictCamId) : \"\",\n predictTimestampMs: isSet(object.predictTimestampMs) ? globalThis.Number(object.predictTimestampMs) : 0,\n predictCoordX: isSet(object.predictCoordX) ? globalThis.Number(object.predictCoordX) : 0,\n predictCoordY: isSet(object.predictCoordY) ? globalThis.Number(object.predictCoordY) : 0,\n };\n },\n\n toJSON(message: P2PContext): unknown {\n const obj: any = {};\n if (message.predictCamId !== \"\") {\n obj.predictCamId = message.predictCamId;\n }\n if (message.predictTimestampMs !== 0) {\n obj.predictTimestampMs = Math.round(message.predictTimestampMs);\n }\n if (message.predictCoordX !== 0) {\n obj.predictCoordX = message.predictCoordX;\n }\n if (message.predictCoordY !== 0) {\n obj.predictCoordY = message.predictCoordY;\n }\n return obj;\n },\n\n create, I>>(base?: I): P2PContext {\n return P2PContext.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): P2PContext {\n const message = createBaseP2PContext();\n message.predictCamId = object.predictCamId ?? \"\";\n message.predictTimestampMs = object.predictTimestampMs ?? 0;\n message.predictCoordX = object.predictCoordX ?? 0;\n message.predictCoordY = object.predictCoordY ?? 0;\n return message;\n },\n};\n\nfunction createBaseSetP2PContextRequest(): SetP2PContextRequest {\n return { targetCamId: \"\", primaryContext: undefined, secondaryContext: undefined, safetyZone: undefined };\n}\n\nexport const SetP2PContextRequest: MessageFns = {\n encode(message: SetP2PContextRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.targetCamId !== \"\") {\n writer.uint32(10).string(message.targetCamId);\n }\n if (message.primaryContext !== undefined) {\n P2PContext.encode(message.primaryContext, writer.uint32(18).fork()).join();\n }\n if (message.secondaryContext !== undefined) {\n P2PContext.encode(message.secondaryContext, writer.uint32(26).fork()).join();\n }\n if (message.safetyZone !== undefined) {\n TargetSafetyZone.encode(message.safetyZone, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetP2PContextRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetP2PContextRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.targetCamId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.primaryContext = P2PContext.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.secondaryContext = P2PContext.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.safetyZone = TargetSafetyZone.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetP2PContextRequest {\n return {\n targetCamId: isSet(object.targetCamId) ? globalThis.String(object.targetCamId) : \"\",\n primaryContext: isSet(object.primaryContext) ? P2PContext.fromJSON(object.primaryContext) : undefined,\n secondaryContext: isSet(object.secondaryContext) ? P2PContext.fromJSON(object.secondaryContext) : undefined,\n safetyZone: isSet(object.safetyZone) ? TargetSafetyZone.fromJSON(object.safetyZone) : undefined,\n };\n },\n\n toJSON(message: SetP2PContextRequest): unknown {\n const obj: any = {};\n if (message.targetCamId !== \"\") {\n obj.targetCamId = message.targetCamId;\n }\n if (message.primaryContext !== undefined) {\n obj.primaryContext = P2PContext.toJSON(message.primaryContext);\n }\n if (message.secondaryContext !== undefined) {\n obj.secondaryContext = P2PContext.toJSON(message.secondaryContext);\n }\n if (message.safetyZone !== undefined) {\n obj.safetyZone = TargetSafetyZone.toJSON(message.safetyZone);\n }\n return obj;\n },\n\n create, I>>(base?: I): SetP2PContextRequest {\n return SetP2PContextRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetP2PContextRequest {\n const message = createBaseSetP2PContextRequest();\n message.targetCamId = object.targetCamId ?? \"\";\n message.primaryContext = (object.primaryContext !== undefined && object.primaryContext !== null)\n ? P2PContext.fromPartial(object.primaryContext)\n : undefined;\n message.secondaryContext = (object.secondaryContext !== undefined && object.secondaryContext !== null)\n ? P2PContext.fromPartial(object.secondaryContext)\n : undefined;\n message.safetyZone = (object.safetyZone !== undefined && object.safetyZone !== null)\n ? TargetSafetyZone.fromPartial(object.safetyZone)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseSetP2PContextResponse(): SetP2PContextResponse {\n return {};\n}\n\nexport const SetP2PContextResponse: MessageFns = {\n encode(_: SetP2PContextResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetP2PContextResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetP2PContextResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetP2PContextResponse {\n return {};\n },\n\n toJSON(_: SetP2PContextResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SetP2PContextResponse {\n return SetP2PContextResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SetP2PContextResponse {\n const message = createBaseSetP2PContextResponse();\n return message;\n },\n};\n\nfunction createBaseGetBufferNameRequest(): GetBufferNameRequest {\n return { camId: \"\", useCase: 0 };\n}\n\nexport const GetBufferNameRequest: MessageFns = {\n encode(message: GetBufferNameRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.useCase !== 0) {\n writer.uint32(16).int32(message.useCase);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetBufferNameRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetBufferNameRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.useCase = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetBufferNameRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n useCase: isSet(object.useCase) ? bufferUseCaseFromJSON(object.useCase) : 0,\n };\n },\n\n toJSON(message: GetBufferNameRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.useCase !== 0) {\n obj.useCase = bufferUseCaseToJSON(message.useCase);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetBufferNameRequest {\n return GetBufferNameRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetBufferNameRequest {\n const message = createBaseGetBufferNameRequest();\n message.camId = object.camId ?? \"\";\n message.useCase = object.useCase ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetBufferNameResponse(): GetBufferNameResponse {\n return { bufferName: \"\" };\n}\n\nexport const GetBufferNameResponse: MessageFns = {\n encode(message: GetBufferNameResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.bufferName !== \"\") {\n writer.uint32(10).string(message.bufferName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetBufferNameResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetBufferNameResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.bufferName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetBufferNameResponse {\n return { bufferName: isSet(object.bufferName) ? globalThis.String(object.bufferName) : \"\" };\n },\n\n toJSON(message: GetBufferNameResponse): unknown {\n const obj: any = {};\n if (message.bufferName !== \"\") {\n obj.bufferName = message.bufferName;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetBufferNameResponse {\n return GetBufferNameResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetBufferNameResponse {\n const message = createBaseGetBufferNameResponse();\n message.bufferName = object.bufferName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetCameraDimensionsRequest(): GetCameraDimensionsRequest {\n return { camId: \"\" };\n}\n\nexport const GetCameraDimensionsRequest: MessageFns = {\n encode(message: GetCameraDimensionsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCameraDimensionsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCameraDimensionsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetCameraDimensionsRequest {\n return { camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\" };\n },\n\n toJSON(message: GetCameraDimensionsRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetCameraDimensionsRequest {\n return GetCameraDimensionsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetCameraDimensionsRequest {\n const message = createBaseGetCameraDimensionsRequest();\n message.camId = object.camId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetCameraDimensionsResponse(): GetCameraDimensionsResponse {\n return { width: 0, height: 0, transpose: false };\n}\n\nexport const GetCameraDimensionsResponse: MessageFns = {\n encode(message: GetCameraDimensionsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.width !== 0) {\n writer.uint32(8).int64(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(16).int64(message.height);\n }\n if (message.transpose !== false) {\n writer.uint32(24).bool(message.transpose);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCameraDimensionsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCameraDimensionsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.width = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.height = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.transpose = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetCameraDimensionsResponse {\n return {\n width: isSet(object.width) ? globalThis.Number(object.width) : 0,\n height: isSet(object.height) ? globalThis.Number(object.height) : 0,\n transpose: isSet(object.transpose) ? globalThis.Boolean(object.transpose) : false,\n };\n },\n\n toJSON(message: GetCameraDimensionsResponse): unknown {\n const obj: any = {};\n if (message.width !== 0) {\n obj.width = Math.round(message.width);\n }\n if (message.height !== 0) {\n obj.height = Math.round(message.height);\n }\n if (message.transpose !== false) {\n obj.transpose = message.transpose;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetCameraDimensionsResponse {\n return GetCameraDimensionsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetCameraDimensionsResponse {\n const message = createBaseGetCameraDimensionsResponse();\n message.width = object.width ?? 0;\n message.height = object.height ?? 0;\n message.transpose = object.transpose ?? false;\n return message;\n },\n};\n\nfunction createBaseStartP2PDataCaptureRequest(): StartP2PDataCaptureRequest {\n return {\n targetCamId: \"\",\n captureMissRate: 0,\n captureSuccessRate: 0,\n captureEnabled: false,\n capturePath: \"\",\n afterTimestampMs: 0,\n };\n}\n\nexport const StartP2PDataCaptureRequest: MessageFns = {\n encode(message: StartP2PDataCaptureRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.targetCamId !== \"\") {\n writer.uint32(10).string(message.targetCamId);\n }\n if (message.captureMissRate !== 0) {\n writer.uint32(21).float(message.captureMissRate);\n }\n if (message.captureSuccessRate !== 0) {\n writer.uint32(29).float(message.captureSuccessRate);\n }\n if (message.captureEnabled !== false) {\n writer.uint32(32).bool(message.captureEnabled);\n }\n if (message.capturePath !== \"\") {\n writer.uint32(42).string(message.capturePath);\n }\n if (message.afterTimestampMs !== 0) {\n writer.uint32(48).int64(message.afterTimestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StartP2PDataCaptureRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStartP2PDataCaptureRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.targetCamId = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.captureMissRate = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.captureSuccessRate = reader.float();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.captureEnabled = reader.bool();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.capturePath = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.afterTimestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StartP2PDataCaptureRequest {\n return {\n targetCamId: isSet(object.targetCamId) ? globalThis.String(object.targetCamId) : \"\",\n captureMissRate: isSet(object.captureMissRate) ? globalThis.Number(object.captureMissRate) : 0,\n captureSuccessRate: isSet(object.captureSuccessRate) ? globalThis.Number(object.captureSuccessRate) : 0,\n captureEnabled: isSet(object.captureEnabled) ? globalThis.Boolean(object.captureEnabled) : false,\n capturePath: isSet(object.capturePath) ? globalThis.String(object.capturePath) : \"\",\n afterTimestampMs: isSet(object.afterTimestampMs) ? globalThis.Number(object.afterTimestampMs) : 0,\n };\n },\n\n toJSON(message: StartP2PDataCaptureRequest): unknown {\n const obj: any = {};\n if (message.targetCamId !== \"\") {\n obj.targetCamId = message.targetCamId;\n }\n if (message.captureMissRate !== 0) {\n obj.captureMissRate = message.captureMissRate;\n }\n if (message.captureSuccessRate !== 0) {\n obj.captureSuccessRate = message.captureSuccessRate;\n }\n if (message.captureEnabled !== false) {\n obj.captureEnabled = message.captureEnabled;\n }\n if (message.capturePath !== \"\") {\n obj.capturePath = message.capturePath;\n }\n if (message.afterTimestampMs !== 0) {\n obj.afterTimestampMs = Math.round(message.afterTimestampMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): StartP2PDataCaptureRequest {\n return StartP2PDataCaptureRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): StartP2PDataCaptureRequest {\n const message = createBaseStartP2PDataCaptureRequest();\n message.targetCamId = object.targetCamId ?? \"\";\n message.captureMissRate = object.captureMissRate ?? 0;\n message.captureSuccessRate = object.captureSuccessRate ?? 0;\n message.captureEnabled = object.captureEnabled ?? false;\n message.capturePath = object.capturePath ?? \"\";\n message.afterTimestampMs = object.afterTimestampMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseStartP2PDataCaptureResponse(): StartP2PDataCaptureResponse {\n return {};\n}\n\nexport const StartP2PDataCaptureResponse: MessageFns = {\n encode(_: StartP2PDataCaptureResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StartP2PDataCaptureResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStartP2PDataCaptureResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): StartP2PDataCaptureResponse {\n return {};\n },\n\n toJSON(_: StartP2PDataCaptureResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): StartP2PDataCaptureResponse {\n return StartP2PDataCaptureResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): StartP2PDataCaptureResponse {\n const message = createBaseStartP2PDataCaptureResponse();\n return message;\n },\n};\n\nfunction createBaseStopP2PDataCaptureRequest(): StopP2PDataCaptureRequest {\n return { targetCamId: \"\" };\n}\n\nexport const StopP2PDataCaptureRequest: MessageFns = {\n encode(message: StopP2PDataCaptureRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.targetCamId !== \"\") {\n writer.uint32(10).string(message.targetCamId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StopP2PDataCaptureRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStopP2PDataCaptureRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.targetCamId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StopP2PDataCaptureRequest {\n return { targetCamId: isSet(object.targetCamId) ? globalThis.String(object.targetCamId) : \"\" };\n },\n\n toJSON(message: StopP2PDataCaptureRequest): unknown {\n const obj: any = {};\n if (message.targetCamId !== \"\") {\n obj.targetCamId = message.targetCamId;\n }\n return obj;\n },\n\n create, I>>(base?: I): StopP2PDataCaptureRequest {\n return StopP2PDataCaptureRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): StopP2PDataCaptureRequest {\n const message = createBaseStopP2PDataCaptureRequest();\n message.targetCamId = object.targetCamId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseStopP2PDataCaptureResponse(): StopP2PDataCaptureResponse {\n return {};\n}\n\nexport const StopP2PDataCaptureResponse: MessageFns = {\n encode(_: StopP2PDataCaptureResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StopP2PDataCaptureResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStopP2PDataCaptureResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): StopP2PDataCaptureResponse {\n return {};\n },\n\n toJSON(_: StopP2PDataCaptureResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): StopP2PDataCaptureResponse {\n return StopP2PDataCaptureResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): StopP2PDataCaptureResponse {\n const message = createBaseStopP2PDataCaptureResponse();\n return message;\n },\n};\n\nfunction createBasePointDetectionCategory(): PointDetectionCategory {\n return { threshold: 0, category: \"\" };\n}\n\nexport const PointDetectionCategory: MessageFns = {\n encode(message: PointDetectionCategory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.threshold !== 0) {\n writer.uint32(13).float(message.threshold);\n }\n if (message.category !== \"\") {\n writer.uint32(18).string(message.category);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PointDetectionCategory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePointDetectionCategory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.threshold = reader.float();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.category = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PointDetectionCategory {\n return {\n threshold: isSet(object.threshold) ? globalThis.Number(object.threshold) : 0,\n category: isSet(object.category) ? globalThis.String(object.category) : \"\",\n };\n },\n\n toJSON(message: PointDetectionCategory): unknown {\n const obj: any = {};\n if (message.threshold !== 0) {\n obj.threshold = message.threshold;\n }\n if (message.category !== \"\") {\n obj.category = message.category;\n }\n return obj;\n },\n\n create, I>>(base?: I): PointDetectionCategory {\n return PointDetectionCategory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PointDetectionCategory {\n const message = createBasePointDetectionCategory();\n message.threshold = object.threshold ?? 0;\n message.category = object.category ?? \"\";\n return message;\n },\n};\n\nfunction createBaseSegmentationDetectionCategory(): SegmentationDetectionCategory {\n return { threshold: 0, category: \"\", safetyRadiusIn: 0 };\n}\n\nexport const SegmentationDetectionCategory: MessageFns = {\n encode(message: SegmentationDetectionCategory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.threshold !== 0) {\n writer.uint32(13).float(message.threshold);\n }\n if (message.category !== \"\") {\n writer.uint32(18).string(message.category);\n }\n if (message.safetyRadiusIn !== 0) {\n writer.uint32(29).float(message.safetyRadiusIn);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SegmentationDetectionCategory {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSegmentationDetectionCategory();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.threshold = reader.float();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.category = reader.string();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.safetyRadiusIn = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SegmentationDetectionCategory {\n return {\n threshold: isSet(object.threshold) ? globalThis.Number(object.threshold) : 0,\n category: isSet(object.category) ? globalThis.String(object.category) : \"\",\n safetyRadiusIn: isSet(object.safetyRadiusIn) ? globalThis.Number(object.safetyRadiusIn) : 0,\n };\n },\n\n toJSON(message: SegmentationDetectionCategory): unknown {\n const obj: any = {};\n if (message.threshold !== 0) {\n obj.threshold = message.threshold;\n }\n if (message.category !== \"\") {\n obj.category = message.category;\n }\n if (message.safetyRadiusIn !== 0) {\n obj.safetyRadiusIn = message.safetyRadiusIn;\n }\n return obj;\n },\n\n create, I>>(base?: I): SegmentationDetectionCategory {\n return SegmentationDetectionCategory.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): SegmentationDetectionCategory {\n const message = createBaseSegmentationDetectionCategory();\n message.threshold = object.threshold ?? 0;\n message.category = object.category ?? \"\";\n message.safetyRadiusIn = object.safetyRadiusIn ?? 0;\n return message;\n },\n};\n\nfunction createBaseDeepweedDetectionCriteriaSetting(): DeepweedDetectionCriteriaSetting {\n return { pointCategories: [], weedPointThreshold: 0, cropPointThreshold: 0, segmentationCategories: [] };\n}\n\nexport const DeepweedDetectionCriteriaSetting: MessageFns = {\n encode(message: DeepweedDetectionCriteriaSetting, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.pointCategories) {\n PointDetectionCategory.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.weedPointThreshold !== 0) {\n writer.uint32(21).float(message.weedPointThreshold);\n }\n if (message.cropPointThreshold !== 0) {\n writer.uint32(29).float(message.cropPointThreshold);\n }\n for (const v of message.segmentationCategories) {\n SegmentationDetectionCategory.encode(v!, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeepweedDetectionCriteriaSetting {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeepweedDetectionCriteriaSetting();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.pointCategories.push(PointDetectionCategory.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.weedPointThreshold = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.cropPointThreshold = reader.float();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.segmentationCategories.push(SegmentationDetectionCategory.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeepweedDetectionCriteriaSetting {\n return {\n pointCategories: globalThis.Array.isArray(object?.pointCategories)\n ? object.pointCategories.map((e: any) => PointDetectionCategory.fromJSON(e))\n : [],\n weedPointThreshold: isSet(object.weedPointThreshold) ? globalThis.Number(object.weedPointThreshold) : 0,\n cropPointThreshold: isSet(object.cropPointThreshold) ? globalThis.Number(object.cropPointThreshold) : 0,\n segmentationCategories: globalThis.Array.isArray(object?.segmentationCategories)\n ? object.segmentationCategories.map((e: any) => SegmentationDetectionCategory.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: DeepweedDetectionCriteriaSetting): unknown {\n const obj: any = {};\n if (message.pointCategories?.length) {\n obj.pointCategories = message.pointCategories.map((e) => PointDetectionCategory.toJSON(e));\n }\n if (message.weedPointThreshold !== 0) {\n obj.weedPointThreshold = message.weedPointThreshold;\n }\n if (message.cropPointThreshold !== 0) {\n obj.cropPointThreshold = message.cropPointThreshold;\n }\n if (message.segmentationCategories?.length) {\n obj.segmentationCategories = message.segmentationCategories.map((e) => SegmentationDetectionCategory.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): DeepweedDetectionCriteriaSetting {\n return DeepweedDetectionCriteriaSetting.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): DeepweedDetectionCriteriaSetting {\n const message = createBaseDeepweedDetectionCriteriaSetting();\n message.pointCategories = object.pointCategories?.map((e) => PointDetectionCategory.fromPartial(e)) || [];\n message.weedPointThreshold = object.weedPointThreshold ?? 0;\n message.cropPointThreshold = object.cropPointThreshold ?? 0;\n message.segmentationCategories =\n object.segmentationCategories?.map((e) => SegmentationDetectionCategory.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseSetDeepweedDetectionCriteriaRequest(): SetDeepweedDetectionCriteriaRequest {\n return { weedPointThreshold: 0, cropPointThreshold: 0, pointCategories: [], segmentationCategories: [] };\n}\n\nexport const SetDeepweedDetectionCriteriaRequest: MessageFns = {\n encode(message: SetDeepweedDetectionCriteriaRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.weedPointThreshold !== 0) {\n writer.uint32(13).float(message.weedPointThreshold);\n }\n if (message.cropPointThreshold !== 0) {\n writer.uint32(21).float(message.cropPointThreshold);\n }\n for (const v of message.pointCategories) {\n PointDetectionCategory.encode(v!, writer.uint32(26).fork()).join();\n }\n for (const v of message.segmentationCategories) {\n SegmentationDetectionCategory.encode(v!, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetDeepweedDetectionCriteriaRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetDeepweedDetectionCriteriaRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.weedPointThreshold = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.cropPointThreshold = reader.float();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.pointCategories.push(PointDetectionCategory.decode(reader, reader.uint32()));\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.segmentationCategories.push(SegmentationDetectionCategory.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetDeepweedDetectionCriteriaRequest {\n return {\n weedPointThreshold: isSet(object.weedPointThreshold) ? globalThis.Number(object.weedPointThreshold) : 0,\n cropPointThreshold: isSet(object.cropPointThreshold) ? globalThis.Number(object.cropPointThreshold) : 0,\n pointCategories: globalThis.Array.isArray(object?.pointCategories)\n ? object.pointCategories.map((e: any) => PointDetectionCategory.fromJSON(e))\n : [],\n segmentationCategories: globalThis.Array.isArray(object?.segmentationCategories)\n ? object.segmentationCategories.map((e: any) => SegmentationDetectionCategory.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: SetDeepweedDetectionCriteriaRequest): unknown {\n const obj: any = {};\n if (message.weedPointThreshold !== 0) {\n obj.weedPointThreshold = message.weedPointThreshold;\n }\n if (message.cropPointThreshold !== 0) {\n obj.cropPointThreshold = message.cropPointThreshold;\n }\n if (message.pointCategories?.length) {\n obj.pointCategories = message.pointCategories.map((e) => PointDetectionCategory.toJSON(e));\n }\n if (message.segmentationCategories?.length) {\n obj.segmentationCategories = message.segmentationCategories.map((e) => SegmentationDetectionCategory.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): SetDeepweedDetectionCriteriaRequest {\n return SetDeepweedDetectionCriteriaRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): SetDeepweedDetectionCriteriaRequest {\n const message = createBaseSetDeepweedDetectionCriteriaRequest();\n message.weedPointThreshold = object.weedPointThreshold ?? 0;\n message.cropPointThreshold = object.cropPointThreshold ?? 0;\n message.pointCategories = object.pointCategories?.map((e) => PointDetectionCategory.fromPartial(e)) || [];\n message.segmentationCategories =\n object.segmentationCategories?.map((e) => SegmentationDetectionCategory.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseSetDeepweedDetectionCriteriaResponse(): SetDeepweedDetectionCriteriaResponse {\n return {};\n}\n\nexport const SetDeepweedDetectionCriteriaResponse: MessageFns = {\n encode(_: SetDeepweedDetectionCriteriaResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetDeepweedDetectionCriteriaResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetDeepweedDetectionCriteriaResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetDeepweedDetectionCriteriaResponse {\n return {};\n },\n\n toJSON(_: SetDeepweedDetectionCriteriaResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): SetDeepweedDetectionCriteriaResponse {\n return SetDeepweedDetectionCriteriaResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n _: I,\n ): SetDeepweedDetectionCriteriaResponse {\n const message = createBaseSetDeepweedDetectionCriteriaResponse();\n return message;\n },\n};\n\nfunction createBaseGetDeepweedDetectionCriteriaRequest(): GetDeepweedDetectionCriteriaRequest {\n return {};\n}\n\nexport const GetDeepweedDetectionCriteriaRequest: MessageFns = {\n encode(_: GetDeepweedDetectionCriteriaRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedDetectionCriteriaRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedDetectionCriteriaRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetDeepweedDetectionCriteriaRequest {\n return {};\n },\n\n toJSON(_: GetDeepweedDetectionCriteriaRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedDetectionCriteriaRequest {\n return GetDeepweedDetectionCriteriaRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n _: I,\n ): GetDeepweedDetectionCriteriaRequest {\n const message = createBaseGetDeepweedDetectionCriteriaRequest();\n return message;\n },\n};\n\nfunction createBaseGetDeepweedDetectionCriteriaResponse(): GetDeepweedDetectionCriteriaResponse {\n return { weedPointThreshold: 0, cropPointThreshold: 0, pointCategories: [], segmentationCategories: [] };\n}\n\nexport const GetDeepweedDetectionCriteriaResponse: MessageFns = {\n encode(message: GetDeepweedDetectionCriteriaResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.weedPointThreshold !== 0) {\n writer.uint32(13).float(message.weedPointThreshold);\n }\n if (message.cropPointThreshold !== 0) {\n writer.uint32(21).float(message.cropPointThreshold);\n }\n for (const v of message.pointCategories) {\n PointDetectionCategory.encode(v!, writer.uint32(26).fork()).join();\n }\n for (const v of message.segmentationCategories) {\n SegmentationDetectionCategory.encode(v!, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedDetectionCriteriaResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedDetectionCriteriaResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.weedPointThreshold = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.cropPointThreshold = reader.float();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.pointCategories.push(PointDetectionCategory.decode(reader, reader.uint32()));\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.segmentationCategories.push(SegmentationDetectionCategory.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedDetectionCriteriaResponse {\n return {\n weedPointThreshold: isSet(object.weedPointThreshold) ? globalThis.Number(object.weedPointThreshold) : 0,\n cropPointThreshold: isSet(object.cropPointThreshold) ? globalThis.Number(object.cropPointThreshold) : 0,\n pointCategories: globalThis.Array.isArray(object?.pointCategories)\n ? object.pointCategories.map((e: any) => PointDetectionCategory.fromJSON(e))\n : [],\n segmentationCategories: globalThis.Array.isArray(object?.segmentationCategories)\n ? object.segmentationCategories.map((e: any) => SegmentationDetectionCategory.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: GetDeepweedDetectionCriteriaResponse): unknown {\n const obj: any = {};\n if (message.weedPointThreshold !== 0) {\n obj.weedPointThreshold = message.weedPointThreshold;\n }\n if (message.cropPointThreshold !== 0) {\n obj.cropPointThreshold = message.cropPointThreshold;\n }\n if (message.pointCategories?.length) {\n obj.pointCategories = message.pointCategories.map((e) => PointDetectionCategory.toJSON(e));\n }\n if (message.segmentationCategories?.length) {\n obj.segmentationCategories = message.segmentationCategories.map((e) => SegmentationDetectionCategory.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedDetectionCriteriaResponse {\n return GetDeepweedDetectionCriteriaResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedDetectionCriteriaResponse {\n const message = createBaseGetDeepweedDetectionCriteriaResponse();\n message.weedPointThreshold = object.weedPointThreshold ?? 0;\n message.cropPointThreshold = object.cropPointThreshold ?? 0;\n message.pointCategories = object.pointCategories?.map((e) => PointDetectionCategory.fromPartial(e)) || [];\n message.segmentationCategories =\n object.segmentationCategories?.map((e) => SegmentationDetectionCategory.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseGetDeepweedSupportedCategoriesRequest(): GetDeepweedSupportedCategoriesRequest {\n return { camId: undefined };\n}\n\nexport const GetDeepweedSupportedCategoriesRequest: MessageFns = {\n encode(message: GetDeepweedSupportedCategoriesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== undefined) {\n writer.uint32(10).string(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedSupportedCategoriesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedSupportedCategoriesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedSupportedCategoriesRequest {\n return { camId: isSet(object.camId) ? globalThis.String(object.camId) : undefined };\n },\n\n toJSON(message: GetDeepweedSupportedCategoriesRequest): unknown {\n const obj: any = {};\n if (message.camId !== undefined) {\n obj.camId = message.camId;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedSupportedCategoriesRequest {\n return GetDeepweedSupportedCategoriesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedSupportedCategoriesRequest {\n const message = createBaseGetDeepweedSupportedCategoriesRequest();\n message.camId = object.camId ?? undefined;\n return message;\n },\n};\n\nfunction createBaseGetDeepweedSupportedCategoriesResponse(): GetDeepweedSupportedCategoriesResponse {\n return { segmentationCategories: [], pointCategories: [] };\n}\n\nexport const GetDeepweedSupportedCategoriesResponse: MessageFns = {\n encode(message: GetDeepweedSupportedCategoriesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.segmentationCategories) {\n writer.uint32(10).string(v!);\n }\n for (const v of message.pointCategories) {\n writer.uint32(18).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedSupportedCategoriesResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedSupportedCategoriesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.segmentationCategories.push(reader.string());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.pointCategories.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedSupportedCategoriesResponse {\n return {\n segmentationCategories: globalThis.Array.isArray(object?.segmentationCategories)\n ? object.segmentationCategories.map((e: any) => globalThis.String(e))\n : [],\n pointCategories: globalThis.Array.isArray(object?.pointCategories)\n ? object.pointCategories.map((e: any) => globalThis.String(e))\n : [],\n };\n },\n\n toJSON(message: GetDeepweedSupportedCategoriesResponse): unknown {\n const obj: any = {};\n if (message.segmentationCategories?.length) {\n obj.segmentationCategories = message.segmentationCategories;\n }\n if (message.pointCategories?.length) {\n obj.pointCategories = message.pointCategories;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedSupportedCategoriesResponse {\n return GetDeepweedSupportedCategoriesResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedSupportedCategoriesResponse {\n const message = createBaseGetDeepweedSupportedCategoriesResponse();\n message.segmentationCategories = object.segmentationCategories?.map((e) => e) || [];\n message.pointCategories = object.pointCategories?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseSetDeeplabMaskExpressionsRequest(): SetDeeplabMaskExpressionsRequest {\n return { camId: \"\", useCase: 0, exprs: [] };\n}\n\nexport const SetDeeplabMaskExpressionsRequest: MessageFns = {\n encode(message: SetDeeplabMaskExpressionsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.useCase !== 0) {\n writer.uint32(16).int32(message.useCase);\n }\n for (const v of message.exprs) {\n MaskExpression.encode(v!, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetDeeplabMaskExpressionsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetDeeplabMaskExpressionsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.useCase = reader.int32() as any;\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.exprs.push(MaskExpression.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetDeeplabMaskExpressionsRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n useCase: isSet(object.useCase) ? bufferUseCaseFromJSON(object.useCase) : 0,\n exprs: globalThis.Array.isArray(object?.exprs) ? object.exprs.map((e: any) => MaskExpression.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: SetDeeplabMaskExpressionsRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.useCase !== 0) {\n obj.useCase = bufferUseCaseToJSON(message.useCase);\n }\n if (message.exprs?.length) {\n obj.exprs = message.exprs.map((e) => MaskExpression.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): SetDeeplabMaskExpressionsRequest {\n return SetDeeplabMaskExpressionsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): SetDeeplabMaskExpressionsRequest {\n const message = createBaseSetDeeplabMaskExpressionsRequest();\n message.camId = object.camId ?? \"\";\n message.useCase = object.useCase ?? 0;\n message.exprs = object.exprs?.map((e) => MaskExpression.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseSetDeeplabMaskExpressionsResponse(): SetDeeplabMaskExpressionsResponse {\n return {};\n}\n\nexport const SetDeeplabMaskExpressionsResponse: MessageFns = {\n encode(_: SetDeeplabMaskExpressionsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetDeeplabMaskExpressionsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetDeeplabMaskExpressionsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetDeeplabMaskExpressionsResponse {\n return {};\n },\n\n toJSON(_: SetDeeplabMaskExpressionsResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): SetDeeplabMaskExpressionsResponse {\n return SetDeeplabMaskExpressionsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n _: I,\n ): SetDeeplabMaskExpressionsResponse {\n const message = createBaseSetDeeplabMaskExpressionsResponse();\n return message;\n },\n};\n\nfunction createBaseGetDeepweedIndexToCategoryRequest(): GetDeepweedIndexToCategoryRequest {\n return { camId: \"\" };\n}\n\nexport const GetDeepweedIndexToCategoryRequest: MessageFns = {\n encode(message: GetDeepweedIndexToCategoryRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedIndexToCategoryRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedIndexToCategoryRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedIndexToCategoryRequest {\n return { camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\" };\n },\n\n toJSON(message: GetDeepweedIndexToCategoryRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedIndexToCategoryRequest {\n return GetDeepweedIndexToCategoryRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedIndexToCategoryRequest {\n const message = createBaseGetDeepweedIndexToCategoryRequest();\n message.camId = object.camId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetDeepweedIndexToCategoryResponse(): GetDeepweedIndexToCategoryResponse {\n return { weedPointIndexToCategory: {}, cropPointIndexToCategory: {}, intersectionIndexToCategory: {} };\n}\n\nexport const GetDeepweedIndexToCategoryResponse: MessageFns = {\n encode(message: GetDeepweedIndexToCategoryResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.weedPointIndexToCategory).forEach(([key, value]) => {\n GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry.encode(\n { key: key as any, value },\n writer.uint32(10).fork(),\n ).join();\n });\n Object.entries(message.cropPointIndexToCategory).forEach(([key, value]) => {\n GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry.encode(\n { key: key as any, value },\n writer.uint32(18).fork(),\n ).join();\n });\n Object.entries(message.intersectionIndexToCategory).forEach(([key, value]) => {\n GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry.encode(\n { key: key as any, value },\n writer.uint32(26).fork(),\n ).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedIndexToCategoryResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedIndexToCategoryResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry.decode(\n reader,\n reader.uint32(),\n );\n if (entry1.value !== undefined) {\n message.weedPointIndexToCategory[entry1.key] = entry1.value;\n }\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n const entry2 = GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry.decode(\n reader,\n reader.uint32(),\n );\n if (entry2.value !== undefined) {\n message.cropPointIndexToCategory[entry2.key] = entry2.value;\n }\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n const entry3 = GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry.decode(\n reader,\n reader.uint32(),\n );\n if (entry3.value !== undefined) {\n message.intersectionIndexToCategory[entry3.key] = entry3.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedIndexToCategoryResponse {\n return {\n weedPointIndexToCategory: isObject(object.weedPointIndexToCategory)\n ? Object.entries(object.weedPointIndexToCategory).reduce<{ [key: number]: string }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = String(value);\n return acc;\n }, {})\n : {},\n cropPointIndexToCategory: isObject(object.cropPointIndexToCategory)\n ? Object.entries(object.cropPointIndexToCategory).reduce<{ [key: number]: string }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = String(value);\n return acc;\n }, {})\n : {},\n intersectionIndexToCategory: isObject(object.intersectionIndexToCategory)\n ? Object.entries(object.intersectionIndexToCategory).reduce<{ [key: number]: string }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = String(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: GetDeepweedIndexToCategoryResponse): unknown {\n const obj: any = {};\n if (message.weedPointIndexToCategory) {\n const entries = Object.entries(message.weedPointIndexToCategory);\n if (entries.length > 0) {\n obj.weedPointIndexToCategory = {};\n entries.forEach(([k, v]) => {\n obj.weedPointIndexToCategory[k] = v;\n });\n }\n }\n if (message.cropPointIndexToCategory) {\n const entries = Object.entries(message.cropPointIndexToCategory);\n if (entries.length > 0) {\n obj.cropPointIndexToCategory = {};\n entries.forEach(([k, v]) => {\n obj.cropPointIndexToCategory[k] = v;\n });\n }\n }\n if (message.intersectionIndexToCategory) {\n const entries = Object.entries(message.intersectionIndexToCategory);\n if (entries.length > 0) {\n obj.intersectionIndexToCategory = {};\n entries.forEach(([k, v]) => {\n obj.intersectionIndexToCategory[k] = v;\n });\n }\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedIndexToCategoryResponse {\n return GetDeepweedIndexToCategoryResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedIndexToCategoryResponse {\n const message = createBaseGetDeepweedIndexToCategoryResponse();\n message.weedPointIndexToCategory = Object.entries(object.weedPointIndexToCategory ?? {}).reduce<\n { [key: number]: string }\n >((acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = globalThis.String(value);\n }\n return acc;\n }, {});\n message.cropPointIndexToCategory = Object.entries(object.cropPointIndexToCategory ?? {}).reduce<\n { [key: number]: string }\n >((acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = globalThis.String(value);\n }\n return acc;\n }, {});\n message.intersectionIndexToCategory = Object.entries(object.intersectionIndexToCategory ?? {}).reduce<\n { [key: number]: string }\n >((acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = globalThis.String(value);\n }\n return acc;\n }, {});\n return message;\n },\n};\n\nfunction createBaseGetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry(): GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry {\n return { key: 0, value: \"\" };\n}\n\nexport const GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry: MessageFns<\n GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry\n> = {\n encode(\n message: GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).int32(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(\n input: BinaryReader | Uint8Array,\n length?: number,\n ): GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n };\n },\n\n toJSON(message: GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry {\n return GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry {\n const message = createBaseGetDeepweedIndexToCategoryResponse_WeedPointIndexToCategoryEntry();\n message.key = object.key ?? 0;\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry(): GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry {\n return { key: 0, value: \"\" };\n}\n\nexport const GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry: MessageFns<\n GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry\n> = {\n encode(\n message: GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).int32(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(\n input: BinaryReader | Uint8Array,\n length?: number,\n ): GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n };\n },\n\n toJSON(message: GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry {\n return GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry {\n const message = createBaseGetDeepweedIndexToCategoryResponse_CropPointIndexToCategoryEntry();\n message.key = object.key ?? 0;\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry(): GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry {\n return { key: 0, value: \"\" };\n}\n\nexport const GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry: MessageFns<\n GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry\n> = {\n encode(\n message: GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).int32(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(\n input: BinaryReader | Uint8Array,\n length?: number,\n ): GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n };\n },\n\n toJSON(message: GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry {\n return GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry {\n const message = createBaseGetDeepweedIndexToCategoryResponse_IntersectionIndexToCategoryEntry();\n message.key = object.key ?? 0;\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetPredictCamMatrixRequest(): GetPredictCamMatrixRequest {\n return { predictCamId: \"\" };\n}\n\nexport const GetPredictCamMatrixRequest: MessageFns = {\n encode(message: GetPredictCamMatrixRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.predictCamId !== \"\") {\n writer.uint32(10).string(message.predictCamId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetPredictCamMatrixRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetPredictCamMatrixRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.predictCamId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetPredictCamMatrixRequest {\n return { predictCamId: isSet(object.predictCamId) ? globalThis.String(object.predictCamId) : \"\" };\n },\n\n toJSON(message: GetPredictCamMatrixRequest): unknown {\n const obj: any = {};\n if (message.predictCamId !== \"\") {\n obj.predictCamId = message.predictCamId;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetPredictCamMatrixRequest {\n return GetPredictCamMatrixRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetPredictCamMatrixRequest {\n const message = createBaseGetPredictCamMatrixRequest();\n message.predictCamId = object.predictCamId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetPredictCamDistortionCoefficientsRequest(): GetPredictCamDistortionCoefficientsRequest {\n return { predictCamId: \"\" };\n}\n\nexport const GetPredictCamDistortionCoefficientsRequest: MessageFns = {\n encode(message: GetPredictCamDistortionCoefficientsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.predictCamId !== \"\") {\n writer.uint32(10).string(message.predictCamId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetPredictCamDistortionCoefficientsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetPredictCamDistortionCoefficientsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.predictCamId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetPredictCamDistortionCoefficientsRequest {\n return { predictCamId: isSet(object.predictCamId) ? globalThis.String(object.predictCamId) : \"\" };\n },\n\n toJSON(message: GetPredictCamDistortionCoefficientsRequest): unknown {\n const obj: any = {};\n if (message.predictCamId !== \"\") {\n obj.predictCamId = message.predictCamId;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetPredictCamDistortionCoefficientsRequest {\n return GetPredictCamDistortionCoefficientsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetPredictCamDistortionCoefficientsRequest {\n const message = createBaseGetPredictCamDistortionCoefficientsRequest();\n message.predictCamId = object.predictCamId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseSetCameraSettingsRequest(): SetCameraSettingsRequest {\n return {\n camIds: [],\n exposureUs: undefined,\n gamma: undefined,\n gainDb: undefined,\n lightSourcePreset: undefined,\n wbRatioRed: undefined,\n wbRatioGreen: undefined,\n wbRatioBlue: undefined,\n roiOffsetX: undefined,\n roiOffsetY: undefined,\n mirror: undefined,\n flip: undefined,\n strobing: undefined,\n ptp: undefined,\n autoWhitebalance: undefined,\n };\n}\n\nexport const SetCameraSettingsRequest: MessageFns = {\n encode(message: SetCameraSettingsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.camIds) {\n writer.uint32(10).string(v!);\n }\n if (message.exposureUs !== undefined) {\n writer.uint32(21).float(message.exposureUs);\n }\n if (message.gamma !== undefined) {\n writer.uint32(29).float(message.gamma);\n }\n if (message.gainDb !== undefined) {\n writer.uint32(37).float(message.gainDb);\n }\n if (message.lightSourcePreset !== undefined) {\n writer.uint32(40).int32(message.lightSourcePreset);\n }\n if (message.wbRatioRed !== undefined) {\n writer.uint32(53).float(message.wbRatioRed);\n }\n if (message.wbRatioGreen !== undefined) {\n writer.uint32(61).float(message.wbRatioGreen);\n }\n if (message.wbRatioBlue !== undefined) {\n writer.uint32(69).float(message.wbRatioBlue);\n }\n if (message.roiOffsetX !== undefined) {\n writer.uint32(72).int64(message.roiOffsetX);\n }\n if (message.roiOffsetY !== undefined) {\n writer.uint32(80).int64(message.roiOffsetY);\n }\n if (message.mirror !== undefined) {\n writer.uint32(88).bool(message.mirror);\n }\n if (message.flip !== undefined) {\n writer.uint32(96).bool(message.flip);\n }\n if (message.strobing !== undefined) {\n writer.uint32(104).bool(message.strobing);\n }\n if (message.ptp !== undefined) {\n writer.uint32(112).bool(message.ptp);\n }\n if (message.autoWhitebalance !== undefined) {\n writer.uint32(120).bool(message.autoWhitebalance);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetCameraSettingsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetCameraSettingsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camIds.push(reader.string());\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.exposureUs = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.gamma = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.gainDb = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.lightSourcePreset = reader.int32() as any;\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n\n message.wbRatioRed = reader.float();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n\n message.wbRatioGreen = reader.float();\n continue;\n case 8:\n if (tag !== 69) {\n break;\n }\n\n message.wbRatioBlue = reader.float();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.roiOffsetX = longToNumber(reader.int64());\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.roiOffsetY = longToNumber(reader.int64());\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.mirror = reader.bool();\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n\n message.flip = reader.bool();\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n\n message.strobing = reader.bool();\n continue;\n case 14:\n if (tag !== 112) {\n break;\n }\n\n message.ptp = reader.bool();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.autoWhitebalance = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetCameraSettingsRequest {\n return {\n camIds: globalThis.Array.isArray(object?.camIds) ? object.camIds.map((e: any) => globalThis.String(e)) : [],\n exposureUs: isSet(object.exposureUs) ? globalThis.Number(object.exposureUs) : undefined,\n gamma: isSet(object.gamma) ? globalThis.Number(object.gamma) : undefined,\n gainDb: isSet(object.gainDb) ? globalThis.Number(object.gainDb) : undefined,\n lightSourcePreset: isSet(object.lightSourcePreset)\n ? lightSourcePresetFromJSON(object.lightSourcePreset)\n : undefined,\n wbRatioRed: isSet(object.wbRatioRed) ? globalThis.Number(object.wbRatioRed) : undefined,\n wbRatioGreen: isSet(object.wbRatioGreen) ? globalThis.Number(object.wbRatioGreen) : undefined,\n wbRatioBlue: isSet(object.wbRatioBlue) ? globalThis.Number(object.wbRatioBlue) : undefined,\n roiOffsetX: isSet(object.roiOffsetX) ? globalThis.Number(object.roiOffsetX) : undefined,\n roiOffsetY: isSet(object.roiOffsetY) ? globalThis.Number(object.roiOffsetY) : undefined,\n mirror: isSet(object.mirror) ? globalThis.Boolean(object.mirror) : undefined,\n flip: isSet(object.flip) ? globalThis.Boolean(object.flip) : undefined,\n strobing: isSet(object.strobing) ? globalThis.Boolean(object.strobing) : undefined,\n ptp: isSet(object.ptp) ? globalThis.Boolean(object.ptp) : undefined,\n autoWhitebalance: isSet(object.autoWhitebalance) ? globalThis.Boolean(object.autoWhitebalance) : undefined,\n };\n },\n\n toJSON(message: SetCameraSettingsRequest): unknown {\n const obj: any = {};\n if (message.camIds?.length) {\n obj.camIds = message.camIds;\n }\n if (message.exposureUs !== undefined) {\n obj.exposureUs = message.exposureUs;\n }\n if (message.gamma !== undefined) {\n obj.gamma = message.gamma;\n }\n if (message.gainDb !== undefined) {\n obj.gainDb = message.gainDb;\n }\n if (message.lightSourcePreset !== undefined) {\n obj.lightSourcePreset = lightSourcePresetToJSON(message.lightSourcePreset);\n }\n if (message.wbRatioRed !== undefined) {\n obj.wbRatioRed = message.wbRatioRed;\n }\n if (message.wbRatioGreen !== undefined) {\n obj.wbRatioGreen = message.wbRatioGreen;\n }\n if (message.wbRatioBlue !== undefined) {\n obj.wbRatioBlue = message.wbRatioBlue;\n }\n if (message.roiOffsetX !== undefined) {\n obj.roiOffsetX = Math.round(message.roiOffsetX);\n }\n if (message.roiOffsetY !== undefined) {\n obj.roiOffsetY = Math.round(message.roiOffsetY);\n }\n if (message.mirror !== undefined) {\n obj.mirror = message.mirror;\n }\n if (message.flip !== undefined) {\n obj.flip = message.flip;\n }\n if (message.strobing !== undefined) {\n obj.strobing = message.strobing;\n }\n if (message.ptp !== undefined) {\n obj.ptp = message.ptp;\n }\n if (message.autoWhitebalance !== undefined) {\n obj.autoWhitebalance = message.autoWhitebalance;\n }\n return obj;\n },\n\n create, I>>(base?: I): SetCameraSettingsRequest {\n return SetCameraSettingsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetCameraSettingsRequest {\n const message = createBaseSetCameraSettingsRequest();\n message.camIds = object.camIds?.map((e) => e) || [];\n message.exposureUs = object.exposureUs ?? undefined;\n message.gamma = object.gamma ?? undefined;\n message.gainDb = object.gainDb ?? undefined;\n message.lightSourcePreset = object.lightSourcePreset ?? undefined;\n message.wbRatioRed = object.wbRatioRed ?? undefined;\n message.wbRatioGreen = object.wbRatioGreen ?? undefined;\n message.wbRatioBlue = object.wbRatioBlue ?? undefined;\n message.roiOffsetX = object.roiOffsetX ?? undefined;\n message.roiOffsetY = object.roiOffsetY ?? undefined;\n message.mirror = object.mirror ?? undefined;\n message.flip = object.flip ?? undefined;\n message.strobing = object.strobing ?? undefined;\n message.ptp = object.ptp ?? undefined;\n message.autoWhitebalance = object.autoWhitebalance ?? undefined;\n return message;\n },\n};\n\nfunction createBaseSetCameraSettingsResponse(): SetCameraSettingsResponse {\n return { camIds: [] };\n}\n\nexport const SetCameraSettingsResponse: MessageFns = {\n encode(message: SetCameraSettingsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.camIds) {\n writer.uint32(10).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetCameraSettingsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetCameraSettingsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camIds.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetCameraSettingsResponse {\n return {\n camIds: globalThis.Array.isArray(object?.camIds) ? object.camIds.map((e: any) => globalThis.String(e)) : [],\n };\n },\n\n toJSON(message: SetCameraSettingsResponse): unknown {\n const obj: any = {};\n if (message.camIds?.length) {\n obj.camIds = message.camIds;\n }\n return obj;\n },\n\n create, I>>(base?: I): SetCameraSettingsResponse {\n return SetCameraSettingsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetCameraSettingsResponse {\n const message = createBaseSetCameraSettingsResponse();\n message.camIds = object.camIds?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseSetAutoWhitebalanceRequest(): SetAutoWhitebalanceRequest {\n return { enable: false, camIds: [] };\n}\n\nexport const SetAutoWhitebalanceRequest: MessageFns = {\n encode(message: SetAutoWhitebalanceRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.enable !== false) {\n writer.uint32(8).bool(message.enable);\n }\n for (const v of message.camIds) {\n writer.uint32(18).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetAutoWhitebalanceRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetAutoWhitebalanceRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.enable = reader.bool();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.camIds.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetAutoWhitebalanceRequest {\n return {\n enable: isSet(object.enable) ? globalThis.Boolean(object.enable) : false,\n camIds: globalThis.Array.isArray(object?.camIds) ? object.camIds.map((e: any) => globalThis.String(e)) : [],\n };\n },\n\n toJSON(message: SetAutoWhitebalanceRequest): unknown {\n const obj: any = {};\n if (message.enable !== false) {\n obj.enable = message.enable;\n }\n if (message.camIds?.length) {\n obj.camIds = message.camIds;\n }\n return obj;\n },\n\n create, I>>(base?: I): SetAutoWhitebalanceRequest {\n return SetAutoWhitebalanceRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetAutoWhitebalanceRequest {\n const message = createBaseSetAutoWhitebalanceRequest();\n message.enable = object.enable ?? false;\n message.camIds = object.camIds?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseSetAutoWhitebalanceResponse(): SetAutoWhitebalanceResponse {\n return {};\n}\n\nexport const SetAutoWhitebalanceResponse: MessageFns = {\n encode(_: SetAutoWhitebalanceResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetAutoWhitebalanceResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetAutoWhitebalanceResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetAutoWhitebalanceResponse {\n return {};\n },\n\n toJSON(_: SetAutoWhitebalanceResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SetAutoWhitebalanceResponse {\n return SetAutoWhitebalanceResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SetAutoWhitebalanceResponse {\n const message = createBaseSetAutoWhitebalanceResponse();\n return message;\n },\n};\n\nfunction createBaseGetCameraSettingsRequest(): GetCameraSettingsRequest {\n return { camIds: [] };\n}\n\nexport const GetCameraSettingsRequest: MessageFns = {\n encode(message: GetCameraSettingsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.camIds) {\n writer.uint32(10).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCameraSettingsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCameraSettingsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camIds.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetCameraSettingsRequest {\n return {\n camIds: globalThis.Array.isArray(object?.camIds) ? object.camIds.map((e: any) => globalThis.String(e)) : [],\n };\n },\n\n toJSON(message: GetCameraSettingsRequest): unknown {\n const obj: any = {};\n if (message.camIds?.length) {\n obj.camIds = message.camIds;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetCameraSettingsRequest {\n return GetCameraSettingsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetCameraSettingsRequest {\n const message = createBaseGetCameraSettingsRequest();\n message.camIds = object.camIds?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseCameraSettingsResponse(): CameraSettingsResponse {\n return {\n camId: \"\",\n exposureUs: undefined,\n gamma: undefined,\n gainDb: undefined,\n lightSourcePreset: undefined,\n wbRatioRed: undefined,\n wbRatioGreen: undefined,\n wbRatioBlue: undefined,\n roiWidth: undefined,\n roiHeight: undefined,\n roiOffsetX: undefined,\n roiOffsetY: undefined,\n gpuId: undefined,\n mirror: false,\n flip: false,\n strobing: false,\n ptp: false,\n autoWhitebalance: undefined,\n };\n}\n\nexport const CameraSettingsResponse: MessageFns = {\n encode(message: CameraSettingsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.exposureUs !== undefined) {\n writer.uint32(21).float(message.exposureUs);\n }\n if (message.gamma !== undefined) {\n writer.uint32(29).float(message.gamma);\n }\n if (message.gainDb !== undefined) {\n writer.uint32(37).float(message.gainDb);\n }\n if (message.lightSourcePreset !== undefined) {\n writer.uint32(40).int32(message.lightSourcePreset);\n }\n if (message.wbRatioRed !== undefined) {\n writer.uint32(53).float(message.wbRatioRed);\n }\n if (message.wbRatioGreen !== undefined) {\n writer.uint32(61).float(message.wbRatioGreen);\n }\n if (message.wbRatioBlue !== undefined) {\n writer.uint32(69).float(message.wbRatioBlue);\n }\n if (message.roiWidth !== undefined) {\n writer.uint32(72).int64(message.roiWidth);\n }\n if (message.roiHeight !== undefined) {\n writer.uint32(80).int64(message.roiHeight);\n }\n if (message.roiOffsetX !== undefined) {\n writer.uint32(88).int64(message.roiOffsetX);\n }\n if (message.roiOffsetY !== undefined) {\n writer.uint32(96).int64(message.roiOffsetY);\n }\n if (message.gpuId !== undefined) {\n writer.uint32(104).int64(message.gpuId);\n }\n if (message.mirror !== false) {\n writer.uint32(112).bool(message.mirror);\n }\n if (message.flip !== false) {\n writer.uint32(120).bool(message.flip);\n }\n if (message.strobing !== false) {\n writer.uint32(128).bool(message.strobing);\n }\n if (message.ptp !== false) {\n writer.uint32(136).bool(message.ptp);\n }\n if (message.autoWhitebalance !== undefined) {\n writer.uint32(144).bool(message.autoWhitebalance);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CameraSettingsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCameraSettingsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.exposureUs = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.gamma = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.gainDb = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.lightSourcePreset = reader.int32() as any;\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n\n message.wbRatioRed = reader.float();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n\n message.wbRatioGreen = reader.float();\n continue;\n case 8:\n if (tag !== 69) {\n break;\n }\n\n message.wbRatioBlue = reader.float();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.roiWidth = longToNumber(reader.int64());\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.roiHeight = longToNumber(reader.int64());\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.roiOffsetX = longToNumber(reader.int64());\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n\n message.roiOffsetY = longToNumber(reader.int64());\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n\n message.gpuId = longToNumber(reader.int64());\n continue;\n case 14:\n if (tag !== 112) {\n break;\n }\n\n message.mirror = reader.bool();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.flip = reader.bool();\n continue;\n case 16:\n if (tag !== 128) {\n break;\n }\n\n message.strobing = reader.bool();\n continue;\n case 17:\n if (tag !== 136) {\n break;\n }\n\n message.ptp = reader.bool();\n continue;\n case 18:\n if (tag !== 144) {\n break;\n }\n\n message.autoWhitebalance = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CameraSettingsResponse {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n exposureUs: isSet(object.exposureUs) ? globalThis.Number(object.exposureUs) : undefined,\n gamma: isSet(object.gamma) ? globalThis.Number(object.gamma) : undefined,\n gainDb: isSet(object.gainDb) ? globalThis.Number(object.gainDb) : undefined,\n lightSourcePreset: isSet(object.lightSourcePreset)\n ? lightSourcePresetFromJSON(object.lightSourcePreset)\n : undefined,\n wbRatioRed: isSet(object.wbRatioRed) ? globalThis.Number(object.wbRatioRed) : undefined,\n wbRatioGreen: isSet(object.wbRatioGreen) ? globalThis.Number(object.wbRatioGreen) : undefined,\n wbRatioBlue: isSet(object.wbRatioBlue) ? globalThis.Number(object.wbRatioBlue) : undefined,\n roiWidth: isSet(object.roiWidth) ? globalThis.Number(object.roiWidth) : undefined,\n roiHeight: isSet(object.roiHeight) ? globalThis.Number(object.roiHeight) : undefined,\n roiOffsetX: isSet(object.roiOffsetX) ? globalThis.Number(object.roiOffsetX) : undefined,\n roiOffsetY: isSet(object.roiOffsetY) ? globalThis.Number(object.roiOffsetY) : undefined,\n gpuId: isSet(object.gpuId) ? globalThis.Number(object.gpuId) : undefined,\n mirror: isSet(object.mirror) ? globalThis.Boolean(object.mirror) : false,\n flip: isSet(object.flip) ? globalThis.Boolean(object.flip) : false,\n strobing: isSet(object.strobing) ? globalThis.Boolean(object.strobing) : false,\n ptp: isSet(object.ptp) ? globalThis.Boolean(object.ptp) : false,\n autoWhitebalance: isSet(object.autoWhitebalance) ? globalThis.Boolean(object.autoWhitebalance) : undefined,\n };\n },\n\n toJSON(message: CameraSettingsResponse): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.exposureUs !== undefined) {\n obj.exposureUs = message.exposureUs;\n }\n if (message.gamma !== undefined) {\n obj.gamma = message.gamma;\n }\n if (message.gainDb !== undefined) {\n obj.gainDb = message.gainDb;\n }\n if (message.lightSourcePreset !== undefined) {\n obj.lightSourcePreset = lightSourcePresetToJSON(message.lightSourcePreset);\n }\n if (message.wbRatioRed !== undefined) {\n obj.wbRatioRed = message.wbRatioRed;\n }\n if (message.wbRatioGreen !== undefined) {\n obj.wbRatioGreen = message.wbRatioGreen;\n }\n if (message.wbRatioBlue !== undefined) {\n obj.wbRatioBlue = message.wbRatioBlue;\n }\n if (message.roiWidth !== undefined) {\n obj.roiWidth = Math.round(message.roiWidth);\n }\n if (message.roiHeight !== undefined) {\n obj.roiHeight = Math.round(message.roiHeight);\n }\n if (message.roiOffsetX !== undefined) {\n obj.roiOffsetX = Math.round(message.roiOffsetX);\n }\n if (message.roiOffsetY !== undefined) {\n obj.roiOffsetY = Math.round(message.roiOffsetY);\n }\n if (message.gpuId !== undefined) {\n obj.gpuId = Math.round(message.gpuId);\n }\n if (message.mirror !== false) {\n obj.mirror = message.mirror;\n }\n if (message.flip !== false) {\n obj.flip = message.flip;\n }\n if (message.strobing !== false) {\n obj.strobing = message.strobing;\n }\n if (message.ptp !== false) {\n obj.ptp = message.ptp;\n }\n if (message.autoWhitebalance !== undefined) {\n obj.autoWhitebalance = message.autoWhitebalance;\n }\n return obj;\n },\n\n create, I>>(base?: I): CameraSettingsResponse {\n return CameraSettingsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CameraSettingsResponse {\n const message = createBaseCameraSettingsResponse();\n message.camId = object.camId ?? \"\";\n message.exposureUs = object.exposureUs ?? undefined;\n message.gamma = object.gamma ?? undefined;\n message.gainDb = object.gainDb ?? undefined;\n message.lightSourcePreset = object.lightSourcePreset ?? undefined;\n message.wbRatioRed = object.wbRatioRed ?? undefined;\n message.wbRatioGreen = object.wbRatioGreen ?? undefined;\n message.wbRatioBlue = object.wbRatioBlue ?? undefined;\n message.roiWidth = object.roiWidth ?? undefined;\n message.roiHeight = object.roiHeight ?? undefined;\n message.roiOffsetX = object.roiOffsetX ?? undefined;\n message.roiOffsetY = object.roiOffsetY ?? undefined;\n message.gpuId = object.gpuId ?? undefined;\n message.mirror = object.mirror ?? false;\n message.flip = object.flip ?? false;\n message.strobing = object.strobing ?? false;\n message.ptp = object.ptp ?? false;\n message.autoWhitebalance = object.autoWhitebalance ?? undefined;\n return message;\n },\n};\n\nfunction createBaseGetCameraSettingsResponse(): GetCameraSettingsResponse {\n return { cameraSettingsResponse: [] };\n}\n\nexport const GetCameraSettingsResponse: MessageFns = {\n encode(message: GetCameraSettingsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.cameraSettingsResponse) {\n CameraSettingsResponse.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCameraSettingsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCameraSettingsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.cameraSettingsResponse.push(CameraSettingsResponse.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetCameraSettingsResponse {\n return {\n cameraSettingsResponse: globalThis.Array.isArray(object?.cameraSettingsResponse)\n ? object.cameraSettingsResponse.map((e: any) => CameraSettingsResponse.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: GetCameraSettingsResponse): unknown {\n const obj: any = {};\n if (message.cameraSettingsResponse?.length) {\n obj.cameraSettingsResponse = message.cameraSettingsResponse.map((e) => CameraSettingsResponse.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): GetCameraSettingsResponse {\n return GetCameraSettingsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetCameraSettingsResponse {\n const message = createBaseGetCameraSettingsResponse();\n message.cameraSettingsResponse = object.cameraSettingsResponse?.map((e) => CameraSettingsResponse.fromPartial(e)) ||\n [];\n return message;\n },\n};\n\nfunction createBaseStartBurstRecordFramesRequest(): StartBurstRecordFramesRequest {\n return { camId: \"\", durationMs: 0, path: \"\", dontCapturePredictImage: false, downsampleFactor: 0 };\n}\n\nexport const StartBurstRecordFramesRequest: MessageFns = {\n encode(message: StartBurstRecordFramesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.durationMs !== 0) {\n writer.uint32(16).int64(message.durationMs);\n }\n if (message.path !== \"\") {\n writer.uint32(26).string(message.path);\n }\n if (message.dontCapturePredictImage !== false) {\n writer.uint32(32).bool(message.dontCapturePredictImage);\n }\n if (message.downsampleFactor !== 0) {\n writer.uint32(40).int32(message.downsampleFactor);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StartBurstRecordFramesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStartBurstRecordFramesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.durationMs = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.dontCapturePredictImage = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.downsampleFactor = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StartBurstRecordFramesRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n durationMs: isSet(object.durationMs) ? globalThis.Number(object.durationMs) : 0,\n path: isSet(object.path) ? globalThis.String(object.path) : \"\",\n dontCapturePredictImage: isSet(object.dontCapturePredictImage)\n ? globalThis.Boolean(object.dontCapturePredictImage)\n : false,\n downsampleFactor: isSet(object.downsampleFactor) ? globalThis.Number(object.downsampleFactor) : 0,\n };\n },\n\n toJSON(message: StartBurstRecordFramesRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.durationMs !== 0) {\n obj.durationMs = Math.round(message.durationMs);\n }\n if (message.path !== \"\") {\n obj.path = message.path;\n }\n if (message.dontCapturePredictImage !== false) {\n obj.dontCapturePredictImage = message.dontCapturePredictImage;\n }\n if (message.downsampleFactor !== 0) {\n obj.downsampleFactor = Math.round(message.downsampleFactor);\n }\n return obj;\n },\n\n create, I>>(base?: I): StartBurstRecordFramesRequest {\n return StartBurstRecordFramesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): StartBurstRecordFramesRequest {\n const message = createBaseStartBurstRecordFramesRequest();\n message.camId = object.camId ?? \"\";\n message.durationMs = object.durationMs ?? 0;\n message.path = object.path ?? \"\";\n message.dontCapturePredictImage = object.dontCapturePredictImage ?? false;\n message.downsampleFactor = object.downsampleFactor ?? 0;\n return message;\n },\n};\n\nfunction createBaseStartBurstRecordFramesResponse(): StartBurstRecordFramesResponse {\n return {};\n}\n\nexport const StartBurstRecordFramesResponse: MessageFns = {\n encode(_: StartBurstRecordFramesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StartBurstRecordFramesResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStartBurstRecordFramesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): StartBurstRecordFramesResponse {\n return {};\n },\n\n toJSON(_: StartBurstRecordFramesResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): StartBurstRecordFramesResponse {\n return StartBurstRecordFramesResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): StartBurstRecordFramesResponse {\n const message = createBaseStartBurstRecordFramesResponse();\n return message;\n },\n};\n\nfunction createBaseStopBurstRecordFramesRequest(): StopBurstRecordFramesRequest {\n return { camId: \"\", lastFrameTimestampMs: undefined };\n}\n\nexport const StopBurstRecordFramesRequest: MessageFns = {\n encode(message: StopBurstRecordFramesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.lastFrameTimestampMs !== undefined) {\n writer.uint32(16).int64(message.lastFrameTimestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StopBurstRecordFramesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStopBurstRecordFramesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.lastFrameTimestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StopBurstRecordFramesRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n lastFrameTimestampMs: isSet(object.lastFrameTimestampMs)\n ? globalThis.Number(object.lastFrameTimestampMs)\n : undefined,\n };\n },\n\n toJSON(message: StopBurstRecordFramesRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.lastFrameTimestampMs !== undefined) {\n obj.lastFrameTimestampMs = Math.round(message.lastFrameTimestampMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): StopBurstRecordFramesRequest {\n return StopBurstRecordFramesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): StopBurstRecordFramesRequest {\n const message = createBaseStopBurstRecordFramesRequest();\n message.camId = object.camId ?? \"\";\n message.lastFrameTimestampMs = object.lastFrameTimestampMs ?? undefined;\n return message;\n },\n};\n\nfunction createBaseStopBurstRecordFramesResponse(): StopBurstRecordFramesResponse {\n return {};\n}\n\nexport const StopBurstRecordFramesResponse: MessageFns = {\n encode(_: StopBurstRecordFramesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StopBurstRecordFramesResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStopBurstRecordFramesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): StopBurstRecordFramesResponse {\n return {};\n },\n\n toJSON(_: StopBurstRecordFramesResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): StopBurstRecordFramesResponse {\n return StopBurstRecordFramesResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): StopBurstRecordFramesResponse {\n const message = createBaseStopBurstRecordFramesResponse();\n return message;\n },\n};\n\nfunction createBaseP2POutputProto(): P2POutputProto {\n return { matched: false, targetCoordX: 0, targetCoordY: 0, targetTimestampMs: 0, predictTimestampMs: 0, safe: false };\n}\n\nexport const P2POutputProto: MessageFns = {\n encode(message: P2POutputProto, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.matched !== false) {\n writer.uint32(8).bool(message.matched);\n }\n if (message.targetCoordX !== 0) {\n writer.uint32(21).float(message.targetCoordX);\n }\n if (message.targetCoordY !== 0) {\n writer.uint32(29).float(message.targetCoordY);\n }\n if (message.targetTimestampMs !== 0) {\n writer.uint32(32).int64(message.targetTimestampMs);\n }\n if (message.predictTimestampMs !== 0) {\n writer.uint32(40).int64(message.predictTimestampMs);\n }\n if (message.safe !== false) {\n writer.uint32(48).bool(message.safe);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): P2POutputProto {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseP2POutputProto();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.matched = reader.bool();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.targetCoordX = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.targetCoordY = reader.float();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.targetTimestampMs = longToNumber(reader.int64());\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.predictTimestampMs = longToNumber(reader.int64());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.safe = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): P2POutputProto {\n return {\n matched: isSet(object.matched) ? globalThis.Boolean(object.matched) : false,\n targetCoordX: isSet(object.targetCoordX) ? globalThis.Number(object.targetCoordX) : 0,\n targetCoordY: isSet(object.targetCoordY) ? globalThis.Number(object.targetCoordY) : 0,\n targetTimestampMs: isSet(object.targetTimestampMs) ? globalThis.Number(object.targetTimestampMs) : 0,\n predictTimestampMs: isSet(object.predictTimestampMs) ? globalThis.Number(object.predictTimestampMs) : 0,\n safe: isSet(object.safe) ? globalThis.Boolean(object.safe) : false,\n };\n },\n\n toJSON(message: P2POutputProto): unknown {\n const obj: any = {};\n if (message.matched !== false) {\n obj.matched = message.matched;\n }\n if (message.targetCoordX !== 0) {\n obj.targetCoordX = message.targetCoordX;\n }\n if (message.targetCoordY !== 0) {\n obj.targetCoordY = message.targetCoordY;\n }\n if (message.targetTimestampMs !== 0) {\n obj.targetTimestampMs = Math.round(message.targetTimestampMs);\n }\n if (message.predictTimestampMs !== 0) {\n obj.predictTimestampMs = Math.round(message.predictTimestampMs);\n }\n if (message.safe !== false) {\n obj.safe = message.safe;\n }\n return obj;\n },\n\n create, I>>(base?: I): P2POutputProto {\n return P2POutputProto.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): P2POutputProto {\n const message = createBaseP2POutputProto();\n message.matched = object.matched ?? false;\n message.targetCoordX = object.targetCoordX ?? 0;\n message.targetCoordY = object.targetCoordY ?? 0;\n message.targetTimestampMs = object.targetTimestampMs ?? 0;\n message.predictTimestampMs = object.predictTimestampMs ?? 0;\n message.safe = object.safe ?? false;\n return message;\n },\n};\n\nfunction createBaseGetNextP2POutputRequest(): GetNextP2POutputRequest {\n return { bufferName: \"\", timestampMs: 0, timeoutMs: 0 };\n}\n\nexport const GetNextP2POutputRequest: MessageFns = {\n encode(message: GetNextP2POutputRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.bufferName !== \"\") {\n writer.uint32(10).string(message.bufferName);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(16).int64(message.timestampMs);\n }\n if (message.timeoutMs !== 0) {\n writer.uint32(24).int64(message.timeoutMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetNextP2POutputRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetNextP2POutputRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.bufferName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.timeoutMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetNextP2POutputRequest {\n return {\n bufferName: isSet(object.bufferName) ? globalThis.String(object.bufferName) : \"\",\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n timeoutMs: isSet(object.timeoutMs) ? globalThis.Number(object.timeoutMs) : 0,\n };\n },\n\n toJSON(message: GetNextP2POutputRequest): unknown {\n const obj: any = {};\n if (message.bufferName !== \"\") {\n obj.bufferName = message.bufferName;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.timeoutMs !== 0) {\n obj.timeoutMs = Math.round(message.timeoutMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetNextP2POutputRequest {\n return GetNextP2POutputRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetNextP2POutputRequest {\n const message = createBaseGetNextP2POutputRequest();\n message.bufferName = object.bufferName ?? \"\";\n message.timestampMs = object.timestampMs ?? 0;\n message.timeoutMs = object.timeoutMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetConnectorsRequest(): GetConnectorsRequest {\n return { camIds: [], connectorIds: [] };\n}\n\nexport const GetConnectorsRequest: MessageFns = {\n encode(message: GetConnectorsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.camIds) {\n writer.uint32(10).string(v!);\n }\n for (const v of message.connectorIds) {\n writer.uint32(18).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetConnectorsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetConnectorsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camIds.push(reader.string());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.connectorIds.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetConnectorsRequest {\n return {\n camIds: globalThis.Array.isArray(object?.camIds) ? object.camIds.map((e: any) => globalThis.String(e)) : [],\n connectorIds: globalThis.Array.isArray(object?.connectorIds)\n ? object.connectorIds.map((e: any) => globalThis.String(e))\n : [],\n };\n },\n\n toJSON(message: GetConnectorsRequest): unknown {\n const obj: any = {};\n if (message.camIds?.length) {\n obj.camIds = message.camIds;\n }\n if (message.connectorIds?.length) {\n obj.connectorIds = message.connectorIds;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetConnectorsRequest {\n return GetConnectorsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetConnectorsRequest {\n const message = createBaseGetConnectorsRequest();\n message.camIds = object.camIds?.map((e) => e) || [];\n message.connectorIds = object.connectorIds?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseConnectorResponse(): ConnectorResponse {\n return { camId: \"\", connectorId: \"\", isEnabled: false, reductionRatio: 0 };\n}\n\nexport const ConnectorResponse: MessageFns = {\n encode(message: ConnectorResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.connectorId !== \"\") {\n writer.uint32(18).string(message.connectorId);\n }\n if (message.isEnabled !== false) {\n writer.uint32(24).bool(message.isEnabled);\n }\n if (message.reductionRatio !== 0) {\n writer.uint32(32).int64(message.reductionRatio);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ConnectorResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConnectorResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.connectorId = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.isEnabled = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.reductionRatio = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ConnectorResponse {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n connectorId: isSet(object.connectorId) ? globalThis.String(object.connectorId) : \"\",\n isEnabled: isSet(object.isEnabled) ? globalThis.Boolean(object.isEnabled) : false,\n reductionRatio: isSet(object.reductionRatio) ? globalThis.Number(object.reductionRatio) : 0,\n };\n },\n\n toJSON(message: ConnectorResponse): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.connectorId !== \"\") {\n obj.connectorId = message.connectorId;\n }\n if (message.isEnabled !== false) {\n obj.isEnabled = message.isEnabled;\n }\n if (message.reductionRatio !== 0) {\n obj.reductionRatio = Math.round(message.reductionRatio);\n }\n return obj;\n },\n\n create, I>>(base?: I): ConnectorResponse {\n return ConnectorResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ConnectorResponse {\n const message = createBaseConnectorResponse();\n message.camId = object.camId ?? \"\";\n message.connectorId = object.connectorId ?? \"\";\n message.isEnabled = object.isEnabled ?? false;\n message.reductionRatio = object.reductionRatio ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetConnectorsResponse(): GetConnectorsResponse {\n return { connectorResponse: [] };\n}\n\nexport const GetConnectorsResponse: MessageFns = {\n encode(message: GetConnectorsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.connectorResponse) {\n ConnectorResponse.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetConnectorsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetConnectorsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.connectorResponse.push(ConnectorResponse.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetConnectorsResponse {\n return {\n connectorResponse: globalThis.Array.isArray(object?.connectorResponse)\n ? object.connectorResponse.map((e: any) => ConnectorResponse.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: GetConnectorsResponse): unknown {\n const obj: any = {};\n if (message.connectorResponse?.length) {\n obj.connectorResponse = message.connectorResponse.map((e) => ConnectorResponse.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): GetConnectorsResponse {\n return GetConnectorsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetConnectorsResponse {\n const message = createBaseGetConnectorsResponse();\n message.connectorResponse = object.connectorResponse?.map((e) => ConnectorResponse.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseSetConnectorsRequest(): SetConnectorsRequest {\n return { camIds: [], connectorIds: [], isEnabled: undefined, reductionRatio: undefined };\n}\n\nexport const SetConnectorsRequest: MessageFns = {\n encode(message: SetConnectorsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.camIds) {\n writer.uint32(10).string(v!);\n }\n for (const v of message.connectorIds) {\n writer.uint32(18).string(v!);\n }\n if (message.isEnabled !== undefined) {\n writer.uint32(24).bool(message.isEnabled);\n }\n if (message.reductionRatio !== undefined) {\n writer.uint32(32).int64(message.reductionRatio);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetConnectorsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetConnectorsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camIds.push(reader.string());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.connectorIds.push(reader.string());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.isEnabled = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.reductionRatio = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetConnectorsRequest {\n return {\n camIds: globalThis.Array.isArray(object?.camIds) ? object.camIds.map((e: any) => globalThis.String(e)) : [],\n connectorIds: globalThis.Array.isArray(object?.connectorIds)\n ? object.connectorIds.map((e: any) => globalThis.String(e))\n : [],\n isEnabled: isSet(object.isEnabled) ? globalThis.Boolean(object.isEnabled) : undefined,\n reductionRatio: isSet(object.reductionRatio) ? globalThis.Number(object.reductionRatio) : undefined,\n };\n },\n\n toJSON(message: SetConnectorsRequest): unknown {\n const obj: any = {};\n if (message.camIds?.length) {\n obj.camIds = message.camIds;\n }\n if (message.connectorIds?.length) {\n obj.connectorIds = message.connectorIds;\n }\n if (message.isEnabled !== undefined) {\n obj.isEnabled = message.isEnabled;\n }\n if (message.reductionRatio !== undefined) {\n obj.reductionRatio = Math.round(message.reductionRatio);\n }\n return obj;\n },\n\n create, I>>(base?: I): SetConnectorsRequest {\n return SetConnectorsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetConnectorsRequest {\n const message = createBaseSetConnectorsRequest();\n message.camIds = object.camIds?.map((e) => e) || [];\n message.connectorIds = object.connectorIds?.map((e) => e) || [];\n message.isEnabled = object.isEnabled ?? undefined;\n message.reductionRatio = object.reductionRatio ?? undefined;\n return message;\n },\n};\n\nfunction createBaseSetConnectorsResponse(): SetConnectorsResponse {\n return {};\n}\n\nexport const SetConnectorsResponse: MessageFns = {\n encode(_: SetConnectorsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetConnectorsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetConnectorsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetConnectorsResponse {\n return {};\n },\n\n toJSON(_: SetConnectorsResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SetConnectorsResponse {\n return SetConnectorsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SetConnectorsResponse {\n const message = createBaseSetConnectorsResponse();\n return message;\n },\n};\n\nfunction createBaseNodeTiming(): NodeTiming {\n return { name: \"\", fpsMean: 0, fps99pct: 0, latencyMsMean: 0, latencyMs99pct: 0, state: \"\", stateTimings: {} };\n}\n\nexport const NodeTiming: MessageFns = {\n encode(message: NodeTiming, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.fpsMean !== 0) {\n writer.uint32(21).float(message.fpsMean);\n }\n if (message.fps99pct !== 0) {\n writer.uint32(29).float(message.fps99pct);\n }\n if (message.latencyMsMean !== 0) {\n writer.uint32(37).float(message.latencyMsMean);\n }\n if (message.latencyMs99pct !== 0) {\n writer.uint32(45).float(message.latencyMs99pct);\n }\n if (message.state !== \"\") {\n writer.uint32(50).string(message.state);\n }\n Object.entries(message.stateTimings).forEach(([key, value]) => {\n NodeTiming_StateTimingsEntry.encode({ key: key as any, value }, writer.uint32(58).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): NodeTiming {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseNodeTiming();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.fpsMean = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.fps99pct = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.latencyMsMean = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n\n message.latencyMs99pct = reader.float();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.state = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n const entry7 = NodeTiming_StateTimingsEntry.decode(reader, reader.uint32());\n if (entry7.value !== undefined) {\n message.stateTimings[entry7.key] = entry7.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): NodeTiming {\n return {\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n fpsMean: isSet(object.fpsMean) ? globalThis.Number(object.fpsMean) : 0,\n fps99pct: isSet(object.fps99pct) ? globalThis.Number(object.fps99pct) : 0,\n latencyMsMean: isSet(object.latencyMsMean) ? globalThis.Number(object.latencyMsMean) : 0,\n latencyMs99pct: isSet(object.latencyMs99pct) ? globalThis.Number(object.latencyMs99pct) : 0,\n state: isSet(object.state) ? globalThis.String(object.state) : \"\",\n stateTimings: isObject(object.stateTimings)\n ? Object.entries(object.stateTimings).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: NodeTiming): unknown {\n const obj: any = {};\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.fpsMean !== 0) {\n obj.fpsMean = message.fpsMean;\n }\n if (message.fps99pct !== 0) {\n obj.fps99pct = message.fps99pct;\n }\n if (message.latencyMsMean !== 0) {\n obj.latencyMsMean = message.latencyMsMean;\n }\n if (message.latencyMs99pct !== 0) {\n obj.latencyMs99pct = message.latencyMs99pct;\n }\n if (message.state !== \"\") {\n obj.state = message.state;\n }\n if (message.stateTimings) {\n const entries = Object.entries(message.stateTimings);\n if (entries.length > 0) {\n obj.stateTimings = {};\n entries.forEach(([k, v]) => {\n obj.stateTimings[k] = v;\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): NodeTiming {\n return NodeTiming.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): NodeTiming {\n const message = createBaseNodeTiming();\n message.name = object.name ?? \"\";\n message.fpsMean = object.fpsMean ?? 0;\n message.fps99pct = object.fps99pct ?? 0;\n message.latencyMsMean = object.latencyMsMean ?? 0;\n message.latencyMs99pct = object.latencyMs99pct ?? 0;\n message.state = object.state ?? \"\";\n message.stateTimings = Object.entries(object.stateTimings ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseNodeTiming_StateTimingsEntry(): NodeTiming_StateTimingsEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const NodeTiming_StateTimingsEntry: MessageFns = {\n encode(message: NodeTiming_StateTimingsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(21).float(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): NodeTiming_StateTimingsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseNodeTiming_StateTimingsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.value = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): NodeTiming_StateTimingsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: NodeTiming_StateTimingsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(base?: I): NodeTiming_StateTimingsEntry {\n return NodeTiming_StateTimingsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): NodeTiming_StateTimingsEntry {\n const message = createBaseNodeTiming_StateTimingsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetTimingRequest(): GetTimingRequest {\n return {};\n}\n\nexport const GetTimingRequest: MessageFns = {\n encode(_: GetTimingRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTimingRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTimingRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetTimingRequest {\n return {};\n },\n\n toJSON(_: GetTimingRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetTimingRequest {\n return GetTimingRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetTimingRequest {\n const message = createBaseGetTimingRequest();\n return message;\n },\n};\n\nfunction createBaseGetTimingResponse(): GetTimingResponse {\n return { nodeTiming: [] };\n}\n\nexport const GetTimingResponse: MessageFns = {\n encode(message: GetTimingResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.nodeTiming) {\n NodeTiming.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTimingResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTimingResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.nodeTiming.push(NodeTiming.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetTimingResponse {\n return {\n nodeTiming: globalThis.Array.isArray(object?.nodeTiming)\n ? object.nodeTiming.map((e: any) => NodeTiming.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: GetTimingResponse): unknown {\n const obj: any = {};\n if (message.nodeTiming?.length) {\n obj.nodeTiming = message.nodeTiming.map((e) => NodeTiming.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): GetTimingResponse {\n return GetTimingResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetTimingResponse {\n const message = createBaseGetTimingResponse();\n message.nodeTiming = object.nodeTiming?.map((e) => NodeTiming.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBasePredictRequest(): PredictRequest {\n return { camId: \"\", filePaths: [], timestampsMs: [] };\n}\n\nexport const PredictRequest: MessageFns = {\n encode(message: PredictRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n for (const v of message.filePaths) {\n writer.uint32(18).string(v!);\n }\n writer.uint32(26).fork();\n for (const v of message.timestampsMs) {\n writer.int64(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PredictRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePredictRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.filePaths.push(reader.string());\n continue;\n case 3:\n if (tag === 24) {\n message.timestampsMs.push(longToNumber(reader.int64()));\n\n continue;\n }\n\n if (tag === 26) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.timestampsMs.push(longToNumber(reader.int64()));\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PredictRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n filePaths: globalThis.Array.isArray(object?.filePaths)\n ? object.filePaths.map((e: any) => globalThis.String(e))\n : [],\n timestampsMs: globalThis.Array.isArray(object?.timestampsMs)\n ? object.timestampsMs.map((e: any) => globalThis.Number(e))\n : [],\n };\n },\n\n toJSON(message: PredictRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.filePaths?.length) {\n obj.filePaths = message.filePaths;\n }\n if (message.timestampsMs?.length) {\n obj.timestampsMs = message.timestampsMs.map((e) => Math.round(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): PredictRequest {\n return PredictRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PredictRequest {\n const message = createBasePredictRequest();\n message.camId = object.camId ?? \"\";\n message.filePaths = object.filePaths?.map((e) => e) || [];\n message.timestampsMs = object.timestampsMs?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBasePredictResponse(): PredictResponse {\n return {};\n}\n\nexport const PredictResponse: MessageFns = {\n encode(_: PredictResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PredictResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePredictResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): PredictResponse {\n return {};\n },\n\n toJSON(_: PredictResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): PredictResponse {\n return PredictResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): PredictResponse {\n const message = createBasePredictResponse();\n return message;\n },\n};\n\nfunction createBaseLoadAndQueueRequest(): LoadAndQueueRequest {\n return { camId: \"\", filePaths: [], timestampsMs: [] };\n}\n\nexport const LoadAndQueueRequest: MessageFns = {\n encode(message: LoadAndQueueRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n for (const v of message.filePaths) {\n writer.uint32(18).string(v!);\n }\n writer.uint32(26).fork();\n for (const v of message.timestampsMs) {\n writer.int64(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LoadAndQueueRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLoadAndQueueRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.filePaths.push(reader.string());\n continue;\n case 3:\n if (tag === 24) {\n message.timestampsMs.push(longToNumber(reader.int64()));\n\n continue;\n }\n\n if (tag === 26) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.timestampsMs.push(longToNumber(reader.int64()));\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LoadAndQueueRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n filePaths: globalThis.Array.isArray(object?.filePaths)\n ? object.filePaths.map((e: any) => globalThis.String(e))\n : [],\n timestampsMs: globalThis.Array.isArray(object?.timestampsMs)\n ? object.timestampsMs.map((e: any) => globalThis.Number(e))\n : [],\n };\n },\n\n toJSON(message: LoadAndQueueRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.filePaths?.length) {\n obj.filePaths = message.filePaths;\n }\n if (message.timestampsMs?.length) {\n obj.timestampsMs = message.timestampsMs.map((e) => Math.round(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): LoadAndQueueRequest {\n return LoadAndQueueRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LoadAndQueueRequest {\n const message = createBaseLoadAndQueueRequest();\n message.camId = object.camId ?? \"\";\n message.filePaths = object.filePaths?.map((e) => e) || [];\n message.timestampsMs = object.timestampsMs?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseLoadAndQueueResponse(): LoadAndQueueResponse {\n return {};\n}\n\nexport const LoadAndQueueResponse: MessageFns = {\n encode(_: LoadAndQueueResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LoadAndQueueResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLoadAndQueueResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): LoadAndQueueResponse {\n return {};\n },\n\n toJSON(_: LoadAndQueueResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): LoadAndQueueResponse {\n return LoadAndQueueResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): LoadAndQueueResponse {\n const message = createBaseLoadAndQueueResponse();\n return message;\n },\n};\n\nfunction createBaseSetImageRequest(): SetImageRequest {\n return { camId: \"\", filePath: \"\" };\n}\n\nexport const SetImageRequest: MessageFns = {\n encode(message: SetImageRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.filePath !== \"\") {\n writer.uint32(18).string(message.filePath);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetImageRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetImageRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.filePath = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetImageRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n filePath: isSet(object.filePath) ? globalThis.String(object.filePath) : \"\",\n };\n },\n\n toJSON(message: SetImageRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.filePath !== \"\") {\n obj.filePath = message.filePath;\n }\n return obj;\n },\n\n create, I>>(base?: I): SetImageRequest {\n return SetImageRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetImageRequest {\n const message = createBaseSetImageRequest();\n message.camId = object.camId ?? \"\";\n message.filePath = object.filePath ?? \"\";\n return message;\n },\n};\n\nfunction createBaseSetImageResponse(): SetImageResponse {\n return {};\n}\n\nexport const SetImageResponse: MessageFns = {\n encode(_: SetImageResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetImageResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetImageResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetImageResponse {\n return {};\n },\n\n toJSON(_: SetImageResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SetImageResponse {\n return SetImageResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SetImageResponse {\n const message = createBaseSetImageResponse();\n return message;\n },\n};\n\nfunction createBaseUnsetImageRequest(): UnsetImageRequest {\n return { camId: \"\" };\n}\n\nexport const UnsetImageRequest: MessageFns = {\n encode(message: UnsetImageRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UnsetImageRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUnsetImageRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UnsetImageRequest {\n return { camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\" };\n },\n\n toJSON(message: UnsetImageRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n return obj;\n },\n\n create, I>>(base?: I): UnsetImageRequest {\n return UnsetImageRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UnsetImageRequest {\n const message = createBaseUnsetImageRequest();\n message.camId = object.camId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseUnsetImageResponse(): UnsetImageResponse {\n return {};\n}\n\nexport const UnsetImageResponse: MessageFns = {\n encode(_: UnsetImageResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UnsetImageResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUnsetImageResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): UnsetImageResponse {\n return {};\n },\n\n toJSON(_: UnsetImageResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): UnsetImageResponse {\n return UnsetImageResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): UnsetImageResponse {\n const message = createBaseUnsetImageResponse();\n return message;\n },\n};\n\nfunction createBaseGetModelPathsRequest(): GetModelPathsRequest {\n return {};\n}\n\nexport const GetModelPathsRequest: MessageFns = {\n encode(_: GetModelPathsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetModelPathsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetModelPathsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetModelPathsRequest {\n return {};\n },\n\n toJSON(_: GetModelPathsRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetModelPathsRequest {\n return GetModelPathsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetModelPathsRequest {\n const message = createBaseGetModelPathsRequest();\n return message;\n },\n};\n\nfunction createBaseGetModelPathsResponse(): GetModelPathsResponse {\n return { p2p: undefined, deepweed: undefined, furrows: undefined };\n}\n\nexport const GetModelPathsResponse: MessageFns = {\n encode(message: GetModelPathsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.p2p !== undefined) {\n writer.uint32(10).string(message.p2p);\n }\n if (message.deepweed !== undefined) {\n writer.uint32(18).string(message.deepweed);\n }\n if (message.furrows !== undefined) {\n writer.uint32(26).string(message.furrows);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetModelPathsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetModelPathsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.p2p = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.deepweed = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.furrows = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetModelPathsResponse {\n return {\n p2p: isSet(object.p2p) ? globalThis.String(object.p2p) : undefined,\n deepweed: isSet(object.deepweed) ? globalThis.String(object.deepweed) : undefined,\n furrows: isSet(object.furrows) ? globalThis.String(object.furrows) : undefined,\n };\n },\n\n toJSON(message: GetModelPathsResponse): unknown {\n const obj: any = {};\n if (message.p2p !== undefined) {\n obj.p2p = message.p2p;\n }\n if (message.deepweed !== undefined) {\n obj.deepweed = message.deepweed;\n }\n if (message.furrows !== undefined) {\n obj.furrows = message.furrows;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetModelPathsResponse {\n return GetModelPathsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetModelPathsResponse {\n const message = createBaseGetModelPathsResponse();\n message.p2p = object.p2p ?? undefined;\n message.deepweed = object.deepweed ?? undefined;\n message.furrows = object.furrows ?? undefined;\n return message;\n },\n};\n\nfunction createBaseGetCameraTemperaturesRequest(): GetCameraTemperaturesRequest {\n return {};\n}\n\nexport const GetCameraTemperaturesRequest: MessageFns = {\n encode(_: GetCameraTemperaturesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCameraTemperaturesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCameraTemperaturesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetCameraTemperaturesRequest {\n return {};\n },\n\n toJSON(_: GetCameraTemperaturesRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetCameraTemperaturesRequest {\n return GetCameraTemperaturesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetCameraTemperaturesRequest {\n const message = createBaseGetCameraTemperaturesRequest();\n return message;\n },\n};\n\nfunction createBaseCameraTemperature(): CameraTemperature {\n return { camId: \"\", temperature: 0 };\n}\n\nexport const CameraTemperature: MessageFns = {\n encode(message: CameraTemperature, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.temperature !== 0) {\n writer.uint32(17).double(message.temperature);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CameraTemperature {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCameraTemperature();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.temperature = reader.double();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CameraTemperature {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n temperature: isSet(object.temperature) ? globalThis.Number(object.temperature) : 0,\n };\n },\n\n toJSON(message: CameraTemperature): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.temperature !== 0) {\n obj.temperature = message.temperature;\n }\n return obj;\n },\n\n create, I>>(base?: I): CameraTemperature {\n return CameraTemperature.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CameraTemperature {\n const message = createBaseCameraTemperature();\n message.camId = object.camId ?? \"\";\n message.temperature = object.temperature ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetCameraTemperaturesResponse(): GetCameraTemperaturesResponse {\n return { temperature: [] };\n}\n\nexport const GetCameraTemperaturesResponse: MessageFns = {\n encode(message: GetCameraTemperaturesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.temperature) {\n CameraTemperature.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCameraTemperaturesResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCameraTemperaturesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.temperature.push(CameraTemperature.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetCameraTemperaturesResponse {\n return {\n temperature: globalThis.Array.isArray(object?.temperature)\n ? object.temperature.map((e: any) => CameraTemperature.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: GetCameraTemperaturesResponse): unknown {\n const obj: any = {};\n if (message.temperature?.length) {\n obj.temperature = message.temperature.map((e) => CameraTemperature.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): GetCameraTemperaturesResponse {\n return GetCameraTemperaturesResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetCameraTemperaturesResponse {\n const message = createBaseGetCameraTemperaturesResponse();\n message.temperature = object.temperature?.map((e) => CameraTemperature.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseGeoLLA(): GeoLLA {\n return { lat: undefined, lng: undefined, alt: undefined, timestampMs: undefined };\n}\n\nexport const GeoLLA: MessageFns = {\n encode(message: GeoLLA, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.lat !== undefined) {\n writer.uint32(9).double(message.lat);\n }\n if (message.lng !== undefined) {\n writer.uint32(17).double(message.lng);\n }\n if (message.alt !== undefined) {\n writer.uint32(25).double(message.alt);\n }\n if (message.timestampMs !== undefined) {\n writer.uint32(32).int64(message.timestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GeoLLA {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGeoLLA();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.lat = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.lng = reader.double();\n continue;\n case 3:\n if (tag !== 25) {\n break;\n }\n\n message.alt = reader.double();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GeoLLA {\n return {\n lat: isSet(object.lat) ? globalThis.Number(object.lat) : undefined,\n lng: isSet(object.lng) ? globalThis.Number(object.lng) : undefined,\n alt: isSet(object.alt) ? globalThis.Number(object.alt) : undefined,\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : undefined,\n };\n },\n\n toJSON(message: GeoLLA): unknown {\n const obj: any = {};\n if (message.lat !== undefined) {\n obj.lat = message.lat;\n }\n if (message.lng !== undefined) {\n obj.lng = message.lng;\n }\n if (message.alt !== undefined) {\n obj.alt = message.alt;\n }\n if (message.timestampMs !== undefined) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): GeoLLA {\n return GeoLLA.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GeoLLA {\n const message = createBaseGeoLLA();\n message.lat = object.lat ?? undefined;\n message.lng = object.lng ?? undefined;\n message.alt = object.alt ?? undefined;\n message.timestampMs = object.timestampMs ?? undefined;\n return message;\n },\n};\n\nfunction createBaseGeoECEF(): GeoECEF {\n return { x: undefined, y: undefined, z: undefined, timestampMs: undefined };\n}\n\nexport const GeoECEF: MessageFns = {\n encode(message: GeoECEF, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== undefined) {\n writer.uint32(9).double(message.x);\n }\n if (message.y !== undefined) {\n writer.uint32(17).double(message.y);\n }\n if (message.z !== undefined) {\n writer.uint32(25).double(message.z);\n }\n if (message.timestampMs !== undefined) {\n writer.uint32(32).int64(message.timestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GeoECEF {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGeoECEF();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.x = reader.double();\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n\n message.y = reader.double();\n continue;\n case 3:\n if (tag !== 25) {\n break;\n }\n\n message.z = reader.double();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GeoECEF {\n return {\n x: isSet(object.x) ? globalThis.Number(object.x) : undefined,\n y: isSet(object.y) ? globalThis.Number(object.y) : undefined,\n z: isSet(object.z) ? globalThis.Number(object.z) : undefined,\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : undefined,\n };\n },\n\n toJSON(message: GeoECEF): unknown {\n const obj: any = {};\n if (message.x !== undefined) {\n obj.x = message.x;\n }\n if (message.y !== undefined) {\n obj.y = message.y;\n }\n if (message.z !== undefined) {\n obj.z = message.z;\n }\n if (message.timestampMs !== undefined) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): GeoECEF {\n return GeoECEF.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GeoECEF {\n const message = createBaseGeoECEF();\n message.x = object.x ?? undefined;\n message.y = object.y ?? undefined;\n message.z = object.z ?? undefined;\n message.timestampMs = object.timestampMs ?? undefined;\n return message;\n },\n};\n\nfunction createBaseSetGPSLocationRequest(): SetGPSLocationRequest {\n return { lla: undefined, ecef: undefined };\n}\n\nexport const SetGPSLocationRequest: MessageFns = {\n encode(message: SetGPSLocationRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.lla !== undefined) {\n GeoLLA.encode(message.lla, writer.uint32(10).fork()).join();\n }\n if (message.ecef !== undefined) {\n GeoECEF.encode(message.ecef, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetGPSLocationRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetGPSLocationRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.lla = GeoLLA.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.ecef = GeoECEF.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetGPSLocationRequest {\n return {\n lla: isSet(object.lla) ? GeoLLA.fromJSON(object.lla) : undefined,\n ecef: isSet(object.ecef) ? GeoECEF.fromJSON(object.ecef) : undefined,\n };\n },\n\n toJSON(message: SetGPSLocationRequest): unknown {\n const obj: any = {};\n if (message.lla !== undefined) {\n obj.lla = GeoLLA.toJSON(message.lla);\n }\n if (message.ecef !== undefined) {\n obj.ecef = GeoECEF.toJSON(message.ecef);\n }\n return obj;\n },\n\n create, I>>(base?: I): SetGPSLocationRequest {\n return SetGPSLocationRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetGPSLocationRequest {\n const message = createBaseSetGPSLocationRequest();\n message.lla = (object.lla !== undefined && object.lla !== null) ? GeoLLA.fromPartial(object.lla) : undefined;\n message.ecef = (object.ecef !== undefined && object.ecef !== null) ? GeoECEF.fromPartial(object.ecef) : undefined;\n return message;\n },\n};\n\nfunction createBaseSetGPSLocationResponse(): SetGPSLocationResponse {\n return {};\n}\n\nexport const SetGPSLocationResponse: MessageFns = {\n encode(_: SetGPSLocationResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetGPSLocationResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetGPSLocationResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetGPSLocationResponse {\n return {};\n },\n\n toJSON(_: SetGPSLocationResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SetGPSLocationResponse {\n return SetGPSLocationResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SetGPSLocationResponse {\n const message = createBaseSetGPSLocationResponse();\n return message;\n },\n};\n\nfunction createBaseSetImplementStatusRequest(): SetImplementStatusRequest {\n return { lifted: false, estopped: false };\n}\n\nexport const SetImplementStatusRequest: MessageFns = {\n encode(message: SetImplementStatusRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.lifted !== false) {\n writer.uint32(8).bool(message.lifted);\n }\n if (message.estopped !== false) {\n writer.uint32(16).bool(message.estopped);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetImplementStatusRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetImplementStatusRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.lifted = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.estopped = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetImplementStatusRequest {\n return {\n lifted: isSet(object.lifted) ? globalThis.Boolean(object.lifted) : false,\n estopped: isSet(object.estopped) ? globalThis.Boolean(object.estopped) : false,\n };\n },\n\n toJSON(message: SetImplementStatusRequest): unknown {\n const obj: any = {};\n if (message.lifted !== false) {\n obj.lifted = message.lifted;\n }\n if (message.estopped !== false) {\n obj.estopped = message.estopped;\n }\n return obj;\n },\n\n create, I>>(base?: I): SetImplementStatusRequest {\n return SetImplementStatusRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetImplementStatusRequest {\n const message = createBaseSetImplementStatusRequest();\n message.lifted = object.lifted ?? false;\n message.estopped = object.estopped ?? false;\n return message;\n },\n};\n\nfunction createBaseSetImplementStatusResponse(): SetImplementStatusResponse {\n return {};\n}\n\nexport const SetImplementStatusResponse: MessageFns = {\n encode(_: SetImplementStatusResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetImplementStatusResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetImplementStatusResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetImplementStatusResponse {\n return {};\n },\n\n toJSON(_: SetImplementStatusResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SetImplementStatusResponse {\n return SetImplementStatusResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SetImplementStatusResponse {\n const message = createBaseSetImplementStatusResponse();\n return message;\n },\n};\n\nfunction createBaseMaskExpression(): MaskExpression {\n return {\n category: undefined,\n dilate: undefined,\n erode: undefined,\n unionExpr: undefined,\n intersect: undefined,\n negate: undefined,\n line: undefined,\n allLines: undefined,\n };\n}\n\nexport const MaskExpression: MessageFns = {\n encode(message: MaskExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.category !== undefined) {\n CategoryExpression.encode(message.category, writer.uint32(10).fork()).join();\n }\n if (message.dilate !== undefined) {\n DilateExpression.encode(message.dilate, writer.uint32(18).fork()).join();\n }\n if (message.erode !== undefined) {\n ErodeExpression.encode(message.erode, writer.uint32(26).fork()).join();\n }\n if (message.unionExpr !== undefined) {\n UnionExpression.encode(message.unionExpr, writer.uint32(34).fork()).join();\n }\n if (message.intersect !== undefined) {\n IntersectExpression.encode(message.intersect, writer.uint32(42).fork()).join();\n }\n if (message.negate !== undefined) {\n NegateExpression.encode(message.negate, writer.uint32(50).fork()).join();\n }\n if (message.line !== undefined) {\n LineExpression.encode(message.line, writer.uint32(58).fork()).join();\n }\n if (message.allLines !== undefined) {\n AllLinesExpression.encode(message.allLines, writer.uint32(66).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MaskExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMaskExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.category = CategoryExpression.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.dilate = DilateExpression.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.erode = ErodeExpression.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.unionExpr = UnionExpression.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.intersect = IntersectExpression.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.negate = NegateExpression.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.line = LineExpression.decode(reader, reader.uint32());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.allLines = AllLinesExpression.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MaskExpression {\n return {\n category: isSet(object.category) ? CategoryExpression.fromJSON(object.category) : undefined,\n dilate: isSet(object.dilate) ? DilateExpression.fromJSON(object.dilate) : undefined,\n erode: isSet(object.erode) ? ErodeExpression.fromJSON(object.erode) : undefined,\n unionExpr: isSet(object.unionExpr) ? UnionExpression.fromJSON(object.unionExpr) : undefined,\n intersect: isSet(object.intersect) ? IntersectExpression.fromJSON(object.intersect) : undefined,\n negate: isSet(object.negate) ? NegateExpression.fromJSON(object.negate) : undefined,\n line: isSet(object.line) ? LineExpression.fromJSON(object.line) : undefined,\n allLines: isSet(object.allLines) ? AllLinesExpression.fromJSON(object.allLines) : undefined,\n };\n },\n\n toJSON(message: MaskExpression): unknown {\n const obj: any = {};\n if (message.category !== undefined) {\n obj.category = CategoryExpression.toJSON(message.category);\n }\n if (message.dilate !== undefined) {\n obj.dilate = DilateExpression.toJSON(message.dilate);\n }\n if (message.erode !== undefined) {\n obj.erode = ErodeExpression.toJSON(message.erode);\n }\n if (message.unionExpr !== undefined) {\n obj.unionExpr = UnionExpression.toJSON(message.unionExpr);\n }\n if (message.intersect !== undefined) {\n obj.intersect = IntersectExpression.toJSON(message.intersect);\n }\n if (message.negate !== undefined) {\n obj.negate = NegateExpression.toJSON(message.negate);\n }\n if (message.line !== undefined) {\n obj.line = LineExpression.toJSON(message.line);\n }\n if (message.allLines !== undefined) {\n obj.allLines = AllLinesExpression.toJSON(message.allLines);\n }\n return obj;\n },\n\n create, I>>(base?: I): MaskExpression {\n return MaskExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): MaskExpression {\n const message = createBaseMaskExpression();\n message.category = (object.category !== undefined && object.category !== null)\n ? CategoryExpression.fromPartial(object.category)\n : undefined;\n message.dilate = (object.dilate !== undefined && object.dilate !== null)\n ? DilateExpression.fromPartial(object.dilate)\n : undefined;\n message.erode = (object.erode !== undefined && object.erode !== null)\n ? ErodeExpression.fromPartial(object.erode)\n : undefined;\n message.unionExpr = (object.unionExpr !== undefined && object.unionExpr !== null)\n ? UnionExpression.fromPartial(object.unionExpr)\n : undefined;\n message.intersect = (object.intersect !== undefined && object.intersect !== null)\n ? IntersectExpression.fromPartial(object.intersect)\n : undefined;\n message.negate = (object.negate !== undefined && object.negate !== null)\n ? NegateExpression.fromPartial(object.negate)\n : undefined;\n message.line = (object.line !== undefined && object.line !== null)\n ? LineExpression.fromPartial(object.line)\n : undefined;\n message.allLines = (object.allLines !== undefined && object.allLines !== null)\n ? AllLinesExpression.fromPartial(object.allLines)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseCategoryExpression(): CategoryExpression {\n return { category: \"\", threshold: 0 };\n}\n\nexport const CategoryExpression: MessageFns = {\n encode(message: CategoryExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.category !== \"\") {\n writer.uint32(10).string(message.category);\n }\n if (message.threshold !== 0) {\n writer.uint32(21).float(message.threshold);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CategoryExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCategoryExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.category = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.threshold = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CategoryExpression {\n return {\n category: isSet(object.category) ? globalThis.String(object.category) : \"\",\n threshold: isSet(object.threshold) ? globalThis.Number(object.threshold) : 0,\n };\n },\n\n toJSON(message: CategoryExpression): unknown {\n const obj: any = {};\n if (message.category !== \"\") {\n obj.category = message.category;\n }\n if (message.threshold !== 0) {\n obj.threshold = message.threshold;\n }\n return obj;\n },\n\n create, I>>(base?: I): CategoryExpression {\n return CategoryExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CategoryExpression {\n const message = createBaseCategoryExpression();\n message.category = object.category ?? \"\";\n message.threshold = object.threshold ?? 0;\n return message;\n },\n};\n\nfunction createBaseLineExpression(): LineExpression {\n return { category: \"\", x: 0, y: 0 };\n}\n\nexport const LineExpression: MessageFns = {\n encode(message: LineExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.category !== \"\") {\n writer.uint32(10).string(message.category);\n }\n if (message.x !== 0) {\n writer.uint32(21).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(29).float(message.y);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LineExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLineExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.category = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.x = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.y = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LineExpression {\n return {\n category: isSet(object.category) ? globalThis.String(object.category) : \"\",\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n };\n },\n\n toJSON(message: LineExpression): unknown {\n const obj: any = {};\n if (message.category !== \"\") {\n obj.category = message.category;\n }\n if (message.x !== 0) {\n obj.x = message.x;\n }\n if (message.y !== 0) {\n obj.y = message.y;\n }\n return obj;\n },\n\n create, I>>(base?: I): LineExpression {\n return LineExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LineExpression {\n const message = createBaseLineExpression();\n message.category = object.category ?? \"\";\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n return message;\n },\n};\n\nfunction createBaseAllLinesExpression(): AllLinesExpression {\n return { category: \"\" };\n}\n\nexport const AllLinesExpression: MessageFns = {\n encode(message: AllLinesExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.category !== \"\") {\n writer.uint32(10).string(message.category);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AllLinesExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAllLinesExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.category = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AllLinesExpression {\n return { category: isSet(object.category) ? globalThis.String(object.category) : \"\" };\n },\n\n toJSON(message: AllLinesExpression): unknown {\n const obj: any = {};\n if (message.category !== \"\") {\n obj.category = message.category;\n }\n return obj;\n },\n\n create, I>>(base?: I): AllLinesExpression {\n return AllLinesExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): AllLinesExpression {\n const message = createBaseAllLinesExpression();\n message.category = object.category ?? \"\";\n return message;\n },\n};\n\nfunction createBaseDilateExpression(): DilateExpression {\n return { expr: undefined, size: 0, granularity: 0 };\n}\n\nexport const DilateExpression: MessageFns = {\n encode(message: DilateExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.expr !== undefined) {\n MaskExpression.encode(message.expr, writer.uint32(10).fork()).join();\n }\n if (message.size !== 0) {\n writer.uint32(16).int32(message.size);\n }\n if (message.granularity !== 0) {\n writer.uint32(24).int32(message.granularity);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DilateExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDilateExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.expr = MaskExpression.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.size = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.granularity = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DilateExpression {\n return {\n expr: isSet(object.expr) ? MaskExpression.fromJSON(object.expr) : undefined,\n size: isSet(object.size) ? globalThis.Number(object.size) : 0,\n granularity: isSet(object.granularity) ? globalThis.Number(object.granularity) : 0,\n };\n },\n\n toJSON(message: DilateExpression): unknown {\n const obj: any = {};\n if (message.expr !== undefined) {\n obj.expr = MaskExpression.toJSON(message.expr);\n }\n if (message.size !== 0) {\n obj.size = Math.round(message.size);\n }\n if (message.granularity !== 0) {\n obj.granularity = Math.round(message.granularity);\n }\n return obj;\n },\n\n create, I>>(base?: I): DilateExpression {\n return DilateExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DilateExpression {\n const message = createBaseDilateExpression();\n message.expr = (object.expr !== undefined && object.expr !== null)\n ? MaskExpression.fromPartial(object.expr)\n : undefined;\n message.size = object.size ?? 0;\n message.granularity = object.granularity ?? 0;\n return message;\n },\n};\n\nfunction createBaseErodeExpression(): ErodeExpression {\n return { expr: undefined, size: 0, granularity: 0 };\n}\n\nexport const ErodeExpression: MessageFns = {\n encode(message: ErodeExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.expr !== undefined) {\n MaskExpression.encode(message.expr, writer.uint32(10).fork()).join();\n }\n if (message.size !== 0) {\n writer.uint32(16).int32(message.size);\n }\n if (message.granularity !== 0) {\n writer.uint32(24).int32(message.granularity);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ErodeExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseErodeExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.expr = MaskExpression.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.size = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.granularity = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ErodeExpression {\n return {\n expr: isSet(object.expr) ? MaskExpression.fromJSON(object.expr) : undefined,\n size: isSet(object.size) ? globalThis.Number(object.size) : 0,\n granularity: isSet(object.granularity) ? globalThis.Number(object.granularity) : 0,\n };\n },\n\n toJSON(message: ErodeExpression): unknown {\n const obj: any = {};\n if (message.expr !== undefined) {\n obj.expr = MaskExpression.toJSON(message.expr);\n }\n if (message.size !== 0) {\n obj.size = Math.round(message.size);\n }\n if (message.granularity !== 0) {\n obj.granularity = Math.round(message.granularity);\n }\n return obj;\n },\n\n create, I>>(base?: I): ErodeExpression {\n return ErodeExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ErodeExpression {\n const message = createBaseErodeExpression();\n message.expr = (object.expr !== undefined && object.expr !== null)\n ? MaskExpression.fromPartial(object.expr)\n : undefined;\n message.size = object.size ?? 0;\n message.granularity = object.granularity ?? 0;\n return message;\n },\n};\n\nfunction createBaseUnionExpression(): UnionExpression {\n return { exprs: [] };\n}\n\nexport const UnionExpression: MessageFns = {\n encode(message: UnionExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.exprs) {\n MaskExpression.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UnionExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUnionExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.exprs.push(MaskExpression.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UnionExpression {\n return {\n exprs: globalThis.Array.isArray(object?.exprs) ? object.exprs.map((e: any) => MaskExpression.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: UnionExpression): unknown {\n const obj: any = {};\n if (message.exprs?.length) {\n obj.exprs = message.exprs.map((e) => MaskExpression.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): UnionExpression {\n return UnionExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UnionExpression {\n const message = createBaseUnionExpression();\n message.exprs = object.exprs?.map((e) => MaskExpression.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseIntersectExpression(): IntersectExpression {\n return { exprs: [] };\n}\n\nexport const IntersectExpression: MessageFns = {\n encode(message: IntersectExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.exprs) {\n MaskExpression.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): IntersectExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseIntersectExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.exprs.push(MaskExpression.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): IntersectExpression {\n return {\n exprs: globalThis.Array.isArray(object?.exprs) ? object.exprs.map((e: any) => MaskExpression.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: IntersectExpression): unknown {\n const obj: any = {};\n if (message.exprs?.length) {\n obj.exprs = message.exprs.map((e) => MaskExpression.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): IntersectExpression {\n return IntersectExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): IntersectExpression {\n const message = createBaseIntersectExpression();\n message.exprs = object.exprs?.map((e) => MaskExpression.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseNegateExpression(): NegateExpression {\n return { expr: undefined };\n}\n\nexport const NegateExpression: MessageFns = {\n encode(message: NegateExpression, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.expr !== undefined) {\n MaskExpression.encode(message.expr, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): NegateExpression {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseNegateExpression();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.expr = MaskExpression.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): NegateExpression {\n return { expr: isSet(object.expr) ? MaskExpression.fromJSON(object.expr) : undefined };\n },\n\n toJSON(message: NegateExpression): unknown {\n const obj: any = {};\n if (message.expr !== undefined) {\n obj.expr = MaskExpression.toJSON(message.expr);\n }\n return obj;\n },\n\n create, I>>(base?: I): NegateExpression {\n return NegateExpression.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): NegateExpression {\n const message = createBaseNegateExpression();\n message.expr = (object.expr !== undefined && object.expr !== null)\n ? MaskExpression.fromPartial(object.expr)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseSetImageScoreRequest(): SetImageScoreRequest {\n return { score: 0, timestampMs: 0, camId: \"\", deepweedDetections: [] };\n}\n\nexport const SetImageScoreRequest: MessageFns = {\n encode(message: SetImageScoreRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.score !== 0) {\n writer.uint32(9).double(message.score);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(16).int64(message.timestampMs);\n }\n if (message.camId !== \"\") {\n writer.uint32(26).string(message.camId);\n }\n for (const v of message.deepweedDetections) {\n DeepweedDetection.encode(v!, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetImageScoreRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetImageScoreRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.score = reader.double();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.deepweedDetections.push(DeepweedDetection.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetImageScoreRequest {\n return {\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n deepweedDetections: globalThis.Array.isArray(object?.deepweedDetections)\n ? object.deepweedDetections.map((e: any) => DeepweedDetection.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: SetImageScoreRequest): unknown {\n const obj: any = {};\n if (message.score !== 0) {\n obj.score = message.score;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.deepweedDetections?.length) {\n obj.deepweedDetections = message.deepweedDetections.map((e) => DeepweedDetection.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): SetImageScoreRequest {\n return SetImageScoreRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetImageScoreRequest {\n const message = createBaseSetImageScoreRequest();\n message.score = object.score ?? 0;\n message.timestampMs = object.timestampMs ?? 0;\n message.camId = object.camId ?? \"\";\n message.deepweedDetections = object.deepweedDetections?.map((e) => DeepweedDetection.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseSetImageScoreResponse(): SetImageScoreResponse {\n return {};\n}\n\nexport const SetImageScoreResponse: MessageFns = {\n encode(_: SetImageScoreResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetImageScoreResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetImageScoreResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetImageScoreResponse {\n return {};\n },\n\n toJSON(_: SetImageScoreResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SetImageScoreResponse {\n return SetImageScoreResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SetImageScoreResponse {\n const message = createBaseSetImageScoreResponse();\n return message;\n },\n};\n\nfunction createBaseGetScoreQueueRequest(): GetScoreQueueRequest {\n return { scoreType: \"\" };\n}\n\nexport const GetScoreQueueRequest: MessageFns = {\n encode(message: GetScoreQueueRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scoreType !== \"\") {\n writer.uint32(10).string(message.scoreType);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetScoreQueueRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetScoreQueueRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scoreType = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetScoreQueueRequest {\n return { scoreType: isSet(object.scoreType) ? globalThis.String(object.scoreType) : \"\" };\n },\n\n toJSON(message: GetScoreQueueRequest): unknown {\n const obj: any = {};\n if (message.scoreType !== \"\") {\n obj.scoreType = message.scoreType;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetScoreQueueRequest {\n return GetScoreQueueRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetScoreQueueRequest {\n const message = createBaseGetScoreQueueRequest();\n message.scoreType = object.scoreType ?? \"\";\n return message;\n },\n};\n\nfunction createBaseScoreObject(): ScoreObject {\n return { score: 0, timestampMs: 0, camId: \"\" };\n}\n\nexport const ScoreObject: MessageFns = {\n encode(message: ScoreObject, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.score !== 0) {\n writer.uint32(9).double(message.score);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(16).int64(message.timestampMs);\n }\n if (message.camId !== \"\") {\n writer.uint32(26).string(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ScoreObject {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseScoreObject();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.score = reader.double();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ScoreObject {\n return {\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n };\n },\n\n toJSON(message: ScoreObject): unknown {\n const obj: any = {};\n if (message.score !== 0) {\n obj.score = message.score;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n return obj;\n },\n\n create, I>>(base?: I): ScoreObject {\n return ScoreObject.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ScoreObject {\n const message = createBaseScoreObject();\n message.score = object.score ?? 0;\n message.timestampMs = object.timestampMs ?? 0;\n message.camId = object.camId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetScoreQueueResponse(): GetScoreQueueResponse {\n return { scoreObject: [] };\n}\n\nexport const GetScoreQueueResponse: MessageFns = {\n encode(message: GetScoreQueueResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.scoreObject) {\n ScoreObject.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetScoreQueueResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetScoreQueueResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scoreObject.push(ScoreObject.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetScoreQueueResponse {\n return {\n scoreObject: globalThis.Array.isArray(object?.scoreObject)\n ? object.scoreObject.map((e: any) => ScoreObject.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: GetScoreQueueResponse): unknown {\n const obj: any = {};\n if (message.scoreObject?.length) {\n obj.scoreObject = message.scoreObject.map((e) => ScoreObject.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): GetScoreQueueResponse {\n return GetScoreQueueResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetScoreQueueResponse {\n const message = createBaseGetScoreQueueResponse();\n message.scoreObject = object.scoreObject?.map((e) => ScoreObject.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseGetMaxImageScoreRequest(): GetMaxImageScoreRequest {\n return { scoreType: \"\" };\n}\n\nexport const GetMaxImageScoreRequest: MessageFns = {\n encode(message: GetMaxImageScoreRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scoreType !== \"\") {\n writer.uint32(10).string(message.scoreType);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetMaxImageScoreRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetMaxImageScoreRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scoreType = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetMaxImageScoreRequest {\n return { scoreType: isSet(object.scoreType) ? globalThis.String(object.scoreType) : \"\" };\n },\n\n toJSON(message: GetMaxImageScoreRequest): unknown {\n const obj: any = {};\n if (message.scoreType !== \"\") {\n obj.scoreType = message.scoreType;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetMaxImageScoreRequest {\n return GetMaxImageScoreRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetMaxImageScoreRequest {\n const message = createBaseGetMaxImageScoreRequest();\n message.scoreType = object.scoreType ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetMaxImageScoreResponse(): GetMaxImageScoreResponse {\n return { score: 0, type: \"\" };\n}\n\nexport const GetMaxImageScoreResponse: MessageFns = {\n encode(message: GetMaxImageScoreResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.score !== 0) {\n writer.uint32(9).double(message.score);\n }\n if (message.type !== \"\") {\n writer.uint32(18).string(message.type);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetMaxImageScoreResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetMaxImageScoreResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 9) {\n break;\n }\n\n message.score = reader.double();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.type = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetMaxImageScoreResponse {\n return {\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n type: isSet(object.type) ? globalThis.String(object.type) : \"\",\n };\n },\n\n toJSON(message: GetMaxImageScoreResponse): unknown {\n const obj: any = {};\n if (message.score !== 0) {\n obj.score = message.score;\n }\n if (message.type !== \"\") {\n obj.type = message.type;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetMaxImageScoreResponse {\n return GetMaxImageScoreResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetMaxImageScoreResponse {\n const message = createBaseGetMaxImageScoreResponse();\n message.score = object.score ?? 0;\n message.type = object.type ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetMaxScoredImageRequest(): GetMaxScoredImageRequest {\n return { scoreType: \"\" };\n}\n\nexport const GetMaxScoredImageRequest: MessageFns = {\n encode(message: GetMaxScoredImageRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scoreType !== \"\") {\n writer.uint32(10).string(message.scoreType);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetMaxScoredImageRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetMaxScoredImageRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scoreType = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetMaxScoredImageRequest {\n return { scoreType: isSet(object.scoreType) ? globalThis.String(object.scoreType) : \"\" };\n },\n\n toJSON(message: GetMaxScoredImageRequest): unknown {\n const obj: any = {};\n if (message.scoreType !== \"\") {\n obj.scoreType = message.scoreType;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetMaxScoredImageRequest {\n return GetMaxScoredImageRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetMaxScoredImageRequest {\n const message = createBaseGetMaxScoredImageRequest();\n message.scoreType = object.scoreType ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetLatestP2PImageRequest(): GetLatestP2PImageRequest {\n return { scoreType: \"\", reason: 0 };\n}\n\nexport const GetLatestP2PImageRequest: MessageFns = {\n encode(message: GetLatestP2PImageRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.scoreType !== \"\") {\n writer.uint32(10).string(message.scoreType);\n }\n if (message.reason !== 0) {\n writer.uint32(16).int32(message.reason);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetLatestP2PImageRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLatestP2PImageRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scoreType = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.reason = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetLatestP2PImageRequest {\n return {\n scoreType: isSet(object.scoreType) ? globalThis.String(object.scoreType) : \"\",\n reason: isSet(object.reason) ? p2PCaptureReasonFromJSON(object.reason) : 0,\n };\n },\n\n toJSON(message: GetLatestP2PImageRequest): unknown {\n const obj: any = {};\n if (message.scoreType !== \"\") {\n obj.scoreType = message.scoreType;\n }\n if (message.reason !== 0) {\n obj.reason = p2PCaptureReasonToJSON(message.reason);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetLatestP2PImageRequest {\n return GetLatestP2PImageRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetLatestP2PImageRequest {\n const message = createBaseGetLatestP2PImageRequest();\n message.scoreType = object.scoreType ?? \"\";\n message.reason = object.reason ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetLatestImageRequest(): GetLatestImageRequest {\n return { camId: \"\" };\n}\n\nexport const GetLatestImageRequest: MessageFns = {\n encode(message: GetLatestImageRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetLatestImageRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLatestImageRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetLatestImageRequest {\n return { camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\" };\n },\n\n toJSON(message: GetLatestImageRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetLatestImageRequest {\n return GetLatestImageRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetLatestImageRequest {\n const message = createBaseGetLatestImageRequest();\n message.camId = object.camId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFlushQueuesRequest(): FlushQueuesRequest {\n return { scoreType: [] };\n}\n\nexport const FlushQueuesRequest: MessageFns = {\n encode(message: FlushQueuesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.scoreType) {\n writer.uint32(10).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FlushQueuesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFlushQueuesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.scoreType.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FlushQueuesRequest {\n return {\n scoreType: globalThis.Array.isArray(object?.scoreType)\n ? object.scoreType.map((e: any) => globalThis.String(e))\n : [],\n };\n },\n\n toJSON(message: FlushQueuesRequest): unknown {\n const obj: any = {};\n if (message.scoreType?.length) {\n obj.scoreType = message.scoreType;\n }\n return obj;\n },\n\n create, I>>(base?: I): FlushQueuesRequest {\n return FlushQueuesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FlushQueuesRequest {\n const message = createBaseFlushQueuesRequest();\n message.scoreType = object.scoreType?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseFlushQueuesResponse(): FlushQueuesResponse {\n return {};\n}\n\nexport const FlushQueuesResponse: MessageFns = {\n encode(_: FlushQueuesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FlushQueuesResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFlushQueuesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): FlushQueuesResponse {\n return {};\n },\n\n toJSON(_: FlushQueuesResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): FlushQueuesResponse {\n return FlushQueuesResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): FlushQueuesResponse {\n const message = createBaseFlushQueuesResponse();\n return message;\n },\n};\n\nfunction createBaseImageAndMetadataResponse(): ImageAndMetadataResponse {\n return {\n bytes: new Uint8Array(0),\n width: 0,\n height: 0,\n timestampMs: 0,\n score: 0,\n camId: \"\",\n isoFormattedTime: \"\",\n llaLat: 0,\n llaLng: 0,\n llaAlt: 0,\n llaTimestampMs: 0,\n ecefX: 0,\n ecefY: 0,\n ecefZ: 0,\n ecefTimestampMs: 0,\n ppi: 0,\n scoreType: undefined,\n imageType: \"\",\n modelUrl: \"\",\n crop: \"\",\n weedHeightColumns: [],\n cropHeightColumns: [],\n bbhOffsetMm: 0,\n focusMetric: 0,\n exposureUs: 0,\n cropPointThreshold: 0,\n weedPointThreshold: 0,\n weedingEnabled: false,\n thinningEnabled: false,\n deepweedId: \"\",\n p2pId: \"\",\n deepweedDetections: [],\n segmentationThreshold: 0,\n simulatorGenerated: false,\n };\n}\n\nexport const ImageAndMetadataResponse: MessageFns = {\n encode(message: ImageAndMetadataResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.bytes.length !== 0) {\n writer.uint32(10).bytes(message.bytes);\n }\n if (message.width !== 0) {\n writer.uint32(16).int32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(24).int32(message.height);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(32).int64(message.timestampMs);\n }\n if (message.score !== 0) {\n writer.uint32(41).double(message.score);\n }\n if (message.camId !== \"\") {\n writer.uint32(50).string(message.camId);\n }\n if (message.isoFormattedTime !== \"\") {\n writer.uint32(58).string(message.isoFormattedTime);\n }\n if (message.llaLat !== 0) {\n writer.uint32(65).double(message.llaLat);\n }\n if (message.llaLng !== 0) {\n writer.uint32(73).double(message.llaLng);\n }\n if (message.llaAlt !== 0) {\n writer.uint32(81).double(message.llaAlt);\n }\n if (message.llaTimestampMs !== 0) {\n writer.uint32(88).int64(message.llaTimestampMs);\n }\n if (message.ecefX !== 0) {\n writer.uint32(97).double(message.ecefX);\n }\n if (message.ecefY !== 0) {\n writer.uint32(105).double(message.ecefY);\n }\n if (message.ecefZ !== 0) {\n writer.uint32(113).double(message.ecefZ);\n }\n if (message.ecefTimestampMs !== 0) {\n writer.uint32(120).int64(message.ecefTimestampMs);\n }\n if (message.ppi !== 0) {\n writer.uint32(133).float(message.ppi);\n }\n if (message.scoreType !== undefined) {\n writer.uint32(138).string(message.scoreType);\n }\n if (message.imageType !== \"\") {\n writer.uint32(146).string(message.imageType);\n }\n if (message.modelUrl !== \"\") {\n writer.uint32(154).string(message.modelUrl);\n }\n if (message.crop !== \"\") {\n writer.uint32(162).string(message.crop);\n }\n writer.uint32(170).fork();\n for (const v of message.weedHeightColumns) {\n writer.double(v);\n }\n writer.join();\n writer.uint32(178).fork();\n for (const v of message.cropHeightColumns) {\n writer.double(v);\n }\n writer.join();\n if (message.bbhOffsetMm !== 0) {\n writer.uint32(185).double(message.bbhOffsetMm);\n }\n if (message.focusMetric !== 0) {\n writer.uint32(193).double(message.focusMetric);\n }\n if (message.exposureUs !== 0) {\n writer.uint32(201).double(message.exposureUs);\n }\n if (message.cropPointThreshold !== 0) {\n writer.uint32(209).double(message.cropPointThreshold);\n }\n if (message.weedPointThreshold !== 0) {\n writer.uint32(217).double(message.weedPointThreshold);\n }\n if (message.weedingEnabled !== false) {\n writer.uint32(224).bool(message.weedingEnabled);\n }\n if (message.thinningEnabled !== false) {\n writer.uint32(232).bool(message.thinningEnabled);\n }\n if (message.deepweedId !== \"\") {\n writer.uint32(242).string(message.deepweedId);\n }\n if (message.p2pId !== \"\") {\n writer.uint32(250).string(message.p2pId);\n }\n for (const v of message.deepweedDetections) {\n Detection.encode(v!, writer.uint32(258).fork()).join();\n }\n if (message.segmentationThreshold !== 0) {\n writer.uint32(265).double(message.segmentationThreshold);\n }\n if (message.simulatorGenerated !== false) {\n writer.uint32(272).bool(message.simulatorGenerated);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ImageAndMetadataResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImageAndMetadataResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.bytes = reader.bytes();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.width = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.height = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 5:\n if (tag !== 41) {\n break;\n }\n\n message.score = reader.double();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.isoFormattedTime = reader.string();\n continue;\n case 8:\n if (tag !== 65) {\n break;\n }\n\n message.llaLat = reader.double();\n continue;\n case 9:\n if (tag !== 73) {\n break;\n }\n\n message.llaLng = reader.double();\n continue;\n case 10:\n if (tag !== 81) {\n break;\n }\n\n message.llaAlt = reader.double();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n\n message.llaTimestampMs = longToNumber(reader.int64());\n continue;\n case 12:\n if (tag !== 97) {\n break;\n }\n\n message.ecefX = reader.double();\n continue;\n case 13:\n if (tag !== 105) {\n break;\n }\n\n message.ecefY = reader.double();\n continue;\n case 14:\n if (tag !== 113) {\n break;\n }\n\n message.ecefZ = reader.double();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.ecefTimestampMs = longToNumber(reader.int64());\n continue;\n case 16:\n if (tag !== 133) {\n break;\n }\n\n message.ppi = reader.float();\n continue;\n case 17:\n if (tag !== 138) {\n break;\n }\n\n message.scoreType = reader.string();\n continue;\n case 18:\n if (tag !== 146) {\n break;\n }\n\n message.imageType = reader.string();\n continue;\n case 19:\n if (tag !== 154) {\n break;\n }\n\n message.modelUrl = reader.string();\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 21:\n if (tag === 169) {\n message.weedHeightColumns.push(reader.double());\n\n continue;\n }\n\n if (tag === 170) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.weedHeightColumns.push(reader.double());\n }\n\n continue;\n }\n\n break;\n case 22:\n if (tag === 177) {\n message.cropHeightColumns.push(reader.double());\n\n continue;\n }\n\n if (tag === 178) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.cropHeightColumns.push(reader.double());\n }\n\n continue;\n }\n\n break;\n case 23:\n if (tag !== 185) {\n break;\n }\n\n message.bbhOffsetMm = reader.double();\n continue;\n case 24:\n if (tag !== 193) {\n break;\n }\n\n message.focusMetric = reader.double();\n continue;\n case 25:\n if (tag !== 201) {\n break;\n }\n\n message.exposureUs = reader.double();\n continue;\n case 26:\n if (tag !== 209) {\n break;\n }\n\n message.cropPointThreshold = reader.double();\n continue;\n case 27:\n if (tag !== 217) {\n break;\n }\n\n message.weedPointThreshold = reader.double();\n continue;\n case 28:\n if (tag !== 224) {\n break;\n }\n\n message.weedingEnabled = reader.bool();\n continue;\n case 29:\n if (tag !== 232) {\n break;\n }\n\n message.thinningEnabled = reader.bool();\n continue;\n case 30:\n if (tag !== 242) {\n break;\n }\n\n message.deepweedId = reader.string();\n continue;\n case 31:\n if (tag !== 250) {\n break;\n }\n\n message.p2pId = reader.string();\n continue;\n case 32:\n if (tag !== 258) {\n break;\n }\n\n message.deepweedDetections.push(Detection.decode(reader, reader.uint32()));\n continue;\n case 33:\n if (tag !== 265) {\n break;\n }\n\n message.segmentationThreshold = reader.double();\n continue;\n case 34:\n if (tag !== 272) {\n break;\n }\n\n message.simulatorGenerated = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ImageAndMetadataResponse {\n return {\n bytes: isSet(object.bytes) ? bytesFromBase64(object.bytes) : new Uint8Array(0),\n width: isSet(object.width) ? globalThis.Number(object.width) : 0,\n height: isSet(object.height) ? globalThis.Number(object.height) : 0,\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n isoFormattedTime: isSet(object.isoFormattedTime) ? globalThis.String(object.isoFormattedTime) : \"\",\n llaLat: isSet(object.llaLat) ? globalThis.Number(object.llaLat) : 0,\n llaLng: isSet(object.llaLng) ? globalThis.Number(object.llaLng) : 0,\n llaAlt: isSet(object.llaAlt) ? globalThis.Number(object.llaAlt) : 0,\n llaTimestampMs: isSet(object.llaTimestampMs) ? globalThis.Number(object.llaTimestampMs) : 0,\n ecefX: isSet(object.ecefX) ? globalThis.Number(object.ecefX) : 0,\n ecefY: isSet(object.ecefY) ? globalThis.Number(object.ecefY) : 0,\n ecefZ: isSet(object.ecefZ) ? globalThis.Number(object.ecefZ) : 0,\n ecefTimestampMs: isSet(object.ecefTimestampMs) ? globalThis.Number(object.ecefTimestampMs) : 0,\n ppi: isSet(object.ppi) ? globalThis.Number(object.ppi) : 0,\n scoreType: isSet(object.scoreType) ? globalThis.String(object.scoreType) : undefined,\n imageType: isSet(object.imageType) ? globalThis.String(object.imageType) : \"\",\n modelUrl: isSet(object.modelUrl) ? globalThis.String(object.modelUrl) : \"\",\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n weedHeightColumns: globalThis.Array.isArray(object?.weedHeightColumns)\n ? object.weedHeightColumns.map((e: any) => globalThis.Number(e))\n : [],\n cropHeightColumns: globalThis.Array.isArray(object?.cropHeightColumns)\n ? object.cropHeightColumns.map((e: any) => globalThis.Number(e))\n : [],\n bbhOffsetMm: isSet(object.bbhOffsetMm) ? globalThis.Number(object.bbhOffsetMm) : 0,\n focusMetric: isSet(object.focusMetric) ? globalThis.Number(object.focusMetric) : 0,\n exposureUs: isSet(object.exposureUs) ? globalThis.Number(object.exposureUs) : 0,\n cropPointThreshold: isSet(object.cropPointThreshold) ? globalThis.Number(object.cropPointThreshold) : 0,\n weedPointThreshold: isSet(object.weedPointThreshold) ? globalThis.Number(object.weedPointThreshold) : 0,\n weedingEnabled: isSet(object.weedingEnabled) ? globalThis.Boolean(object.weedingEnabled) : false,\n thinningEnabled: isSet(object.thinningEnabled) ? globalThis.Boolean(object.thinningEnabled) : false,\n deepweedId: isSet(object.deepweedId) ? globalThis.String(object.deepweedId) : \"\",\n p2pId: isSet(object.p2pId) ? globalThis.String(object.p2pId) : \"\",\n deepweedDetections: globalThis.Array.isArray(object?.deepweedDetections)\n ? object.deepweedDetections.map((e: any) => Detection.fromJSON(e))\n : [],\n segmentationThreshold: isSet(object.segmentationThreshold) ? globalThis.Number(object.segmentationThreshold) : 0,\n simulatorGenerated: isSet(object.simulatorGenerated) ? globalThis.Boolean(object.simulatorGenerated) : false,\n };\n },\n\n toJSON(message: ImageAndMetadataResponse): unknown {\n const obj: any = {};\n if (message.bytes.length !== 0) {\n obj.bytes = base64FromBytes(message.bytes);\n }\n if (message.width !== 0) {\n obj.width = Math.round(message.width);\n }\n if (message.height !== 0) {\n obj.height = Math.round(message.height);\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.score !== 0) {\n obj.score = message.score;\n }\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.isoFormattedTime !== \"\") {\n obj.isoFormattedTime = message.isoFormattedTime;\n }\n if (message.llaLat !== 0) {\n obj.llaLat = message.llaLat;\n }\n if (message.llaLng !== 0) {\n obj.llaLng = message.llaLng;\n }\n if (message.llaAlt !== 0) {\n obj.llaAlt = message.llaAlt;\n }\n if (message.llaTimestampMs !== 0) {\n obj.llaTimestampMs = Math.round(message.llaTimestampMs);\n }\n if (message.ecefX !== 0) {\n obj.ecefX = message.ecefX;\n }\n if (message.ecefY !== 0) {\n obj.ecefY = message.ecefY;\n }\n if (message.ecefZ !== 0) {\n obj.ecefZ = message.ecefZ;\n }\n if (message.ecefTimestampMs !== 0) {\n obj.ecefTimestampMs = Math.round(message.ecefTimestampMs);\n }\n if (message.ppi !== 0) {\n obj.ppi = message.ppi;\n }\n if (message.scoreType !== undefined) {\n obj.scoreType = message.scoreType;\n }\n if (message.imageType !== \"\") {\n obj.imageType = message.imageType;\n }\n if (message.modelUrl !== \"\") {\n obj.modelUrl = message.modelUrl;\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.weedHeightColumns?.length) {\n obj.weedHeightColumns = message.weedHeightColumns;\n }\n if (message.cropHeightColumns?.length) {\n obj.cropHeightColumns = message.cropHeightColumns;\n }\n if (message.bbhOffsetMm !== 0) {\n obj.bbhOffsetMm = message.bbhOffsetMm;\n }\n if (message.focusMetric !== 0) {\n obj.focusMetric = message.focusMetric;\n }\n if (message.exposureUs !== 0) {\n obj.exposureUs = message.exposureUs;\n }\n if (message.cropPointThreshold !== 0) {\n obj.cropPointThreshold = message.cropPointThreshold;\n }\n if (message.weedPointThreshold !== 0) {\n obj.weedPointThreshold = message.weedPointThreshold;\n }\n if (message.weedingEnabled !== false) {\n obj.weedingEnabled = message.weedingEnabled;\n }\n if (message.thinningEnabled !== false) {\n obj.thinningEnabled = message.thinningEnabled;\n }\n if (message.deepweedId !== \"\") {\n obj.deepweedId = message.deepweedId;\n }\n if (message.p2pId !== \"\") {\n obj.p2pId = message.p2pId;\n }\n if (message.deepweedDetections?.length) {\n obj.deepweedDetections = message.deepweedDetections.map((e) => Detection.toJSON(e));\n }\n if (message.segmentationThreshold !== 0) {\n obj.segmentationThreshold = message.segmentationThreshold;\n }\n if (message.simulatorGenerated !== false) {\n obj.simulatorGenerated = message.simulatorGenerated;\n }\n return obj;\n },\n\n create, I>>(base?: I): ImageAndMetadataResponse {\n return ImageAndMetadataResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ImageAndMetadataResponse {\n const message = createBaseImageAndMetadataResponse();\n message.bytes = object.bytes ?? new Uint8Array(0);\n message.width = object.width ?? 0;\n message.height = object.height ?? 0;\n message.timestampMs = object.timestampMs ?? 0;\n message.score = object.score ?? 0;\n message.camId = object.camId ?? \"\";\n message.isoFormattedTime = object.isoFormattedTime ?? \"\";\n message.llaLat = object.llaLat ?? 0;\n message.llaLng = object.llaLng ?? 0;\n message.llaAlt = object.llaAlt ?? 0;\n message.llaTimestampMs = object.llaTimestampMs ?? 0;\n message.ecefX = object.ecefX ?? 0;\n message.ecefY = object.ecefY ?? 0;\n message.ecefZ = object.ecefZ ?? 0;\n message.ecefTimestampMs = object.ecefTimestampMs ?? 0;\n message.ppi = object.ppi ?? 0;\n message.scoreType = object.scoreType ?? undefined;\n message.imageType = object.imageType ?? \"\";\n message.modelUrl = object.modelUrl ?? \"\";\n message.crop = object.crop ?? \"\";\n message.weedHeightColumns = object.weedHeightColumns?.map((e) => e) || [];\n message.cropHeightColumns = object.cropHeightColumns?.map((e) => e) || [];\n message.bbhOffsetMm = object.bbhOffsetMm ?? 0;\n message.focusMetric = object.focusMetric ?? 0;\n message.exposureUs = object.exposureUs ?? 0;\n message.cropPointThreshold = object.cropPointThreshold ?? 0;\n message.weedPointThreshold = object.weedPointThreshold ?? 0;\n message.weedingEnabled = object.weedingEnabled ?? false;\n message.thinningEnabled = object.thinningEnabled ?? false;\n message.deepweedId = object.deepweedId ?? \"\";\n message.p2pId = object.p2pId ?? \"\";\n message.deepweedDetections = object.deepweedDetections?.map((e) => Detection.fromPartial(e)) || [];\n message.segmentationThreshold = object.segmentationThreshold ?? 0;\n message.simulatorGenerated = object.simulatorGenerated ?? false;\n return message;\n },\n};\n\nfunction createBaseP2PImageAndMetadataResponse(): P2PImageAndMetadataResponse {\n return {\n targetBytes: new Uint8Array(0),\n targetWidth: 0,\n targetHeight: 0,\n perspectiveBytes: new Uint8Array(0),\n perspectiveWidth: 0,\n perspectiveHeight: 0,\n annotatedTargetBytes: new Uint8Array(0),\n annotatedTargetWidth: 0,\n annotatedTargetHeight: 0,\n timestampMs: 0,\n score: 0,\n camId: \"\",\n isoFormattedTime: \"\",\n llaLat: 0,\n llaLng: 0,\n llaAlt: 0,\n llaTimestampMs: 0,\n ecefX: 0,\n ecefY: 0,\n ecefZ: 0,\n ecefTimestampMs: 0,\n ppi: 0,\n perspectivePpi: 0,\n imageType: \"\",\n modelUrl: \"\",\n crop: \"\",\n focusMetric: 0,\n exposureUs: 0,\n weedingEnabled: false,\n thinningEnabled: false,\n deepweedId: \"\",\n p2pId: \"\",\n };\n}\n\nexport const P2PImageAndMetadataResponse: MessageFns = {\n encode(message: P2PImageAndMetadataResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.targetBytes.length !== 0) {\n writer.uint32(10).bytes(message.targetBytes);\n }\n if (message.targetWidth !== 0) {\n writer.uint32(16).int32(message.targetWidth);\n }\n if (message.targetHeight !== 0) {\n writer.uint32(24).int32(message.targetHeight);\n }\n if (message.perspectiveBytes.length !== 0) {\n writer.uint32(34).bytes(message.perspectiveBytes);\n }\n if (message.perspectiveWidth !== 0) {\n writer.uint32(40).int32(message.perspectiveWidth);\n }\n if (message.perspectiveHeight !== 0) {\n writer.uint32(48).int32(message.perspectiveHeight);\n }\n if (message.annotatedTargetBytes.length !== 0) {\n writer.uint32(58).bytes(message.annotatedTargetBytes);\n }\n if (message.annotatedTargetWidth !== 0) {\n writer.uint32(64).int32(message.annotatedTargetWidth);\n }\n if (message.annotatedTargetHeight !== 0) {\n writer.uint32(72).int32(message.annotatedTargetHeight);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(80).int64(message.timestampMs);\n }\n if (message.score !== 0) {\n writer.uint32(89).double(message.score);\n }\n if (message.camId !== \"\") {\n writer.uint32(98).string(message.camId);\n }\n if (message.isoFormattedTime !== \"\") {\n writer.uint32(106).string(message.isoFormattedTime);\n }\n if (message.llaLat !== 0) {\n writer.uint32(113).double(message.llaLat);\n }\n if (message.llaLng !== 0) {\n writer.uint32(121).double(message.llaLng);\n }\n if (message.llaAlt !== 0) {\n writer.uint32(129).double(message.llaAlt);\n }\n if (message.llaTimestampMs !== 0) {\n writer.uint32(136).int64(message.llaTimestampMs);\n }\n if (message.ecefX !== 0) {\n writer.uint32(145).double(message.ecefX);\n }\n if (message.ecefY !== 0) {\n writer.uint32(153).double(message.ecefY);\n }\n if (message.ecefZ !== 0) {\n writer.uint32(161).double(message.ecefZ);\n }\n if (message.ecefTimestampMs !== 0) {\n writer.uint32(168).int64(message.ecefTimestampMs);\n }\n if (message.ppi !== 0) {\n writer.uint32(181).float(message.ppi);\n }\n if (message.perspectivePpi !== 0) {\n writer.uint32(189).float(message.perspectivePpi);\n }\n if (message.imageType !== \"\") {\n writer.uint32(202).string(message.imageType);\n }\n if (message.modelUrl !== \"\") {\n writer.uint32(210).string(message.modelUrl);\n }\n if (message.crop !== \"\") {\n writer.uint32(218).string(message.crop);\n }\n if (message.focusMetric !== 0) {\n writer.uint32(225).double(message.focusMetric);\n }\n if (message.exposureUs !== 0) {\n writer.uint32(233).double(message.exposureUs);\n }\n if (message.weedingEnabled !== false) {\n writer.uint32(240).bool(message.weedingEnabled);\n }\n if (message.thinningEnabled !== false) {\n writer.uint32(248).bool(message.thinningEnabled);\n }\n if (message.deepweedId !== \"\") {\n writer.uint32(258).string(message.deepweedId);\n }\n if (message.p2pId !== \"\") {\n writer.uint32(266).string(message.p2pId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): P2PImageAndMetadataResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseP2PImageAndMetadataResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.targetBytes = reader.bytes();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.targetWidth = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.targetHeight = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.perspectiveBytes = reader.bytes();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.perspectiveWidth = reader.int32();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.perspectiveHeight = reader.int32();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.annotatedTargetBytes = reader.bytes();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.annotatedTargetWidth = reader.int32();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.annotatedTargetHeight = reader.int32();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 11:\n if (tag !== 89) {\n break;\n }\n\n message.score = reader.double();\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.isoFormattedTime = reader.string();\n continue;\n case 14:\n if (tag !== 113) {\n break;\n }\n\n message.llaLat = reader.double();\n continue;\n case 15:\n if (tag !== 121) {\n break;\n }\n\n message.llaLng = reader.double();\n continue;\n case 16:\n if (tag !== 129) {\n break;\n }\n\n message.llaAlt = reader.double();\n continue;\n case 17:\n if (tag !== 136) {\n break;\n }\n\n message.llaTimestampMs = longToNumber(reader.int64());\n continue;\n case 18:\n if (tag !== 145) {\n break;\n }\n\n message.ecefX = reader.double();\n continue;\n case 19:\n if (tag !== 153) {\n break;\n }\n\n message.ecefY = reader.double();\n continue;\n case 20:\n if (tag !== 161) {\n break;\n }\n\n message.ecefZ = reader.double();\n continue;\n case 21:\n if (tag !== 168) {\n break;\n }\n\n message.ecefTimestampMs = longToNumber(reader.int64());\n continue;\n case 22:\n if (tag !== 181) {\n break;\n }\n\n message.ppi = reader.float();\n continue;\n case 23:\n if (tag !== 189) {\n break;\n }\n\n message.perspectivePpi = reader.float();\n continue;\n case 25:\n if (tag !== 202) {\n break;\n }\n\n message.imageType = reader.string();\n continue;\n case 26:\n if (tag !== 210) {\n break;\n }\n\n message.modelUrl = reader.string();\n continue;\n case 27:\n if (tag !== 218) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 28:\n if (tag !== 225) {\n break;\n }\n\n message.focusMetric = reader.double();\n continue;\n case 29:\n if (tag !== 233) {\n break;\n }\n\n message.exposureUs = reader.double();\n continue;\n case 30:\n if (tag !== 240) {\n break;\n }\n\n message.weedingEnabled = reader.bool();\n continue;\n case 31:\n if (tag !== 248) {\n break;\n }\n\n message.thinningEnabled = reader.bool();\n continue;\n case 32:\n if (tag !== 258) {\n break;\n }\n\n message.deepweedId = reader.string();\n continue;\n case 33:\n if (tag !== 266) {\n break;\n }\n\n message.p2pId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): P2PImageAndMetadataResponse {\n return {\n targetBytes: isSet(object.targetBytes) ? bytesFromBase64(object.targetBytes) : new Uint8Array(0),\n targetWidth: isSet(object.targetWidth) ? globalThis.Number(object.targetWidth) : 0,\n targetHeight: isSet(object.targetHeight) ? globalThis.Number(object.targetHeight) : 0,\n perspectiveBytes: isSet(object.perspectiveBytes) ? bytesFromBase64(object.perspectiveBytes) : new Uint8Array(0),\n perspectiveWidth: isSet(object.perspectiveWidth) ? globalThis.Number(object.perspectiveWidth) : 0,\n perspectiveHeight: isSet(object.perspectiveHeight) ? globalThis.Number(object.perspectiveHeight) : 0,\n annotatedTargetBytes: isSet(object.annotatedTargetBytes)\n ? bytesFromBase64(object.annotatedTargetBytes)\n : new Uint8Array(0),\n annotatedTargetWidth: isSet(object.annotatedTargetWidth) ? globalThis.Number(object.annotatedTargetWidth) : 0,\n annotatedTargetHeight: isSet(object.annotatedTargetHeight) ? globalThis.Number(object.annotatedTargetHeight) : 0,\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n isoFormattedTime: isSet(object.isoFormattedTime) ? globalThis.String(object.isoFormattedTime) : \"\",\n llaLat: isSet(object.llaLat) ? globalThis.Number(object.llaLat) : 0,\n llaLng: isSet(object.llaLng) ? globalThis.Number(object.llaLng) : 0,\n llaAlt: isSet(object.llaAlt) ? globalThis.Number(object.llaAlt) : 0,\n llaTimestampMs: isSet(object.llaTimestampMs) ? globalThis.Number(object.llaTimestampMs) : 0,\n ecefX: isSet(object.ecefX) ? globalThis.Number(object.ecefX) : 0,\n ecefY: isSet(object.ecefY) ? globalThis.Number(object.ecefY) : 0,\n ecefZ: isSet(object.ecefZ) ? globalThis.Number(object.ecefZ) : 0,\n ecefTimestampMs: isSet(object.ecefTimestampMs) ? globalThis.Number(object.ecefTimestampMs) : 0,\n ppi: isSet(object.ppi) ? globalThis.Number(object.ppi) : 0,\n perspectivePpi: isSet(object.perspectivePpi) ? globalThis.Number(object.perspectivePpi) : 0,\n imageType: isSet(object.imageType) ? globalThis.String(object.imageType) : \"\",\n modelUrl: isSet(object.modelUrl) ? globalThis.String(object.modelUrl) : \"\",\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n focusMetric: isSet(object.focusMetric) ? globalThis.Number(object.focusMetric) : 0,\n exposureUs: isSet(object.exposureUs) ? globalThis.Number(object.exposureUs) : 0,\n weedingEnabled: isSet(object.weedingEnabled) ? globalThis.Boolean(object.weedingEnabled) : false,\n thinningEnabled: isSet(object.thinningEnabled) ? globalThis.Boolean(object.thinningEnabled) : false,\n deepweedId: isSet(object.deepweedId) ? globalThis.String(object.deepweedId) : \"\",\n p2pId: isSet(object.p2pId) ? globalThis.String(object.p2pId) : \"\",\n };\n },\n\n toJSON(message: P2PImageAndMetadataResponse): unknown {\n const obj: any = {};\n if (message.targetBytes.length !== 0) {\n obj.targetBytes = base64FromBytes(message.targetBytes);\n }\n if (message.targetWidth !== 0) {\n obj.targetWidth = Math.round(message.targetWidth);\n }\n if (message.targetHeight !== 0) {\n obj.targetHeight = Math.round(message.targetHeight);\n }\n if (message.perspectiveBytes.length !== 0) {\n obj.perspectiveBytes = base64FromBytes(message.perspectiveBytes);\n }\n if (message.perspectiveWidth !== 0) {\n obj.perspectiveWidth = Math.round(message.perspectiveWidth);\n }\n if (message.perspectiveHeight !== 0) {\n obj.perspectiveHeight = Math.round(message.perspectiveHeight);\n }\n if (message.annotatedTargetBytes.length !== 0) {\n obj.annotatedTargetBytes = base64FromBytes(message.annotatedTargetBytes);\n }\n if (message.annotatedTargetWidth !== 0) {\n obj.annotatedTargetWidth = Math.round(message.annotatedTargetWidth);\n }\n if (message.annotatedTargetHeight !== 0) {\n obj.annotatedTargetHeight = Math.round(message.annotatedTargetHeight);\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.score !== 0) {\n obj.score = message.score;\n }\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.isoFormattedTime !== \"\") {\n obj.isoFormattedTime = message.isoFormattedTime;\n }\n if (message.llaLat !== 0) {\n obj.llaLat = message.llaLat;\n }\n if (message.llaLng !== 0) {\n obj.llaLng = message.llaLng;\n }\n if (message.llaAlt !== 0) {\n obj.llaAlt = message.llaAlt;\n }\n if (message.llaTimestampMs !== 0) {\n obj.llaTimestampMs = Math.round(message.llaTimestampMs);\n }\n if (message.ecefX !== 0) {\n obj.ecefX = message.ecefX;\n }\n if (message.ecefY !== 0) {\n obj.ecefY = message.ecefY;\n }\n if (message.ecefZ !== 0) {\n obj.ecefZ = message.ecefZ;\n }\n if (message.ecefTimestampMs !== 0) {\n obj.ecefTimestampMs = Math.round(message.ecefTimestampMs);\n }\n if (message.ppi !== 0) {\n obj.ppi = message.ppi;\n }\n if (message.perspectivePpi !== 0) {\n obj.perspectivePpi = message.perspectivePpi;\n }\n if (message.imageType !== \"\") {\n obj.imageType = message.imageType;\n }\n if (message.modelUrl !== \"\") {\n obj.modelUrl = message.modelUrl;\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.focusMetric !== 0) {\n obj.focusMetric = message.focusMetric;\n }\n if (message.exposureUs !== 0) {\n obj.exposureUs = message.exposureUs;\n }\n if (message.weedingEnabled !== false) {\n obj.weedingEnabled = message.weedingEnabled;\n }\n if (message.thinningEnabled !== false) {\n obj.thinningEnabled = message.thinningEnabled;\n }\n if (message.deepweedId !== \"\") {\n obj.deepweedId = message.deepweedId;\n }\n if (message.p2pId !== \"\") {\n obj.p2pId = message.p2pId;\n }\n return obj;\n },\n\n create, I>>(base?: I): P2PImageAndMetadataResponse {\n return P2PImageAndMetadataResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): P2PImageAndMetadataResponse {\n const message = createBaseP2PImageAndMetadataResponse();\n message.targetBytes = object.targetBytes ?? new Uint8Array(0);\n message.targetWidth = object.targetWidth ?? 0;\n message.targetHeight = object.targetHeight ?? 0;\n message.perspectiveBytes = object.perspectiveBytes ?? new Uint8Array(0);\n message.perspectiveWidth = object.perspectiveWidth ?? 0;\n message.perspectiveHeight = object.perspectiveHeight ?? 0;\n message.annotatedTargetBytes = object.annotatedTargetBytes ?? new Uint8Array(0);\n message.annotatedTargetWidth = object.annotatedTargetWidth ?? 0;\n message.annotatedTargetHeight = object.annotatedTargetHeight ?? 0;\n message.timestampMs = object.timestampMs ?? 0;\n message.score = object.score ?? 0;\n message.camId = object.camId ?? \"\";\n message.isoFormattedTime = object.isoFormattedTime ?? \"\";\n message.llaLat = object.llaLat ?? 0;\n message.llaLng = object.llaLng ?? 0;\n message.llaAlt = object.llaAlt ?? 0;\n message.llaTimestampMs = object.llaTimestampMs ?? 0;\n message.ecefX = object.ecefX ?? 0;\n message.ecefY = object.ecefY ?? 0;\n message.ecefZ = object.ecefZ ?? 0;\n message.ecefTimestampMs = object.ecefTimestampMs ?? 0;\n message.ppi = object.ppi ?? 0;\n message.perspectivePpi = object.perspectivePpi ?? 0;\n message.imageType = object.imageType ?? \"\";\n message.modelUrl = object.modelUrl ?? \"\";\n message.crop = object.crop ?? \"\";\n message.focusMetric = object.focusMetric ?? 0;\n message.exposureUs = object.exposureUs ?? 0;\n message.weedingEnabled = object.weedingEnabled ?? false;\n message.thinningEnabled = object.thinningEnabled ?? false;\n message.deepweedId = object.deepweedId ?? \"\";\n message.p2pId = object.p2pId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetCameraInfoRequest(): GetCameraInfoRequest {\n return {};\n}\n\nexport const GetCameraInfoRequest: MessageFns = {\n encode(_: GetCameraInfoRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCameraInfoRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCameraInfoRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetCameraInfoRequest {\n return {};\n },\n\n toJSON(_: GetCameraInfoRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetCameraInfoRequest {\n return GetCameraInfoRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetCameraInfoRequest {\n const message = createBaseGetCameraInfoRequest();\n return message;\n },\n};\n\nfunction createBaseCameraInfo(): CameraInfo {\n return {\n camId: \"\",\n ipAddress: undefined,\n serialNumber: undefined,\n model: \"\",\n width: 0,\n height: 0,\n connected: false,\n linkSpeed: 0,\n };\n}\n\nexport const CameraInfo: MessageFns = {\n encode(message: CameraInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.ipAddress !== undefined) {\n writer.uint32(18).string(message.ipAddress);\n }\n if (message.serialNumber !== undefined) {\n writer.uint32(26).string(message.serialNumber);\n }\n if (message.model !== \"\") {\n writer.uint32(34).string(message.model);\n }\n if (message.width !== 0) {\n writer.uint32(40).uint32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(48).uint32(message.height);\n }\n if (message.connected !== false) {\n writer.uint32(56).bool(message.connected);\n }\n if (message.linkSpeed !== 0) {\n writer.uint32(64).uint64(message.linkSpeed);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CameraInfo {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCameraInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.ipAddress = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.serialNumber = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.model = reader.string();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.width = reader.uint32();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.height = reader.uint32();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.connected = reader.bool();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.linkSpeed = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CameraInfo {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n ipAddress: isSet(object.ipAddress) ? globalThis.String(object.ipAddress) : undefined,\n serialNumber: isSet(object.serialNumber) ? globalThis.String(object.serialNumber) : undefined,\n model: isSet(object.model) ? globalThis.String(object.model) : \"\",\n width: isSet(object.width) ? globalThis.Number(object.width) : 0,\n height: isSet(object.height) ? globalThis.Number(object.height) : 0,\n connected: isSet(object.connected) ? globalThis.Boolean(object.connected) : false,\n linkSpeed: isSet(object.linkSpeed) ? globalThis.Number(object.linkSpeed) : 0,\n };\n },\n\n toJSON(message: CameraInfo): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.ipAddress !== undefined) {\n obj.ipAddress = message.ipAddress;\n }\n if (message.serialNumber !== undefined) {\n obj.serialNumber = message.serialNumber;\n }\n if (message.model !== \"\") {\n obj.model = message.model;\n }\n if (message.width !== 0) {\n obj.width = Math.round(message.width);\n }\n if (message.height !== 0) {\n obj.height = Math.round(message.height);\n }\n if (message.connected !== false) {\n obj.connected = message.connected;\n }\n if (message.linkSpeed !== 0) {\n obj.linkSpeed = Math.round(message.linkSpeed);\n }\n return obj;\n },\n\n create, I>>(base?: I): CameraInfo {\n return CameraInfo.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CameraInfo {\n const message = createBaseCameraInfo();\n message.camId = object.camId ?? \"\";\n message.ipAddress = object.ipAddress ?? undefined;\n message.serialNumber = object.serialNumber ?? undefined;\n message.model = object.model ?? \"\";\n message.width = object.width ?? 0;\n message.height = object.height ?? 0;\n message.connected = object.connected ?? false;\n message.linkSpeed = object.linkSpeed ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetCameraInfoResponse(): GetCameraInfoResponse {\n return { cameraInfo: [] };\n}\n\nexport const GetCameraInfoResponse: MessageFns = {\n encode(message: GetCameraInfoResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.cameraInfo) {\n CameraInfo.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCameraInfoResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCameraInfoResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.cameraInfo.push(CameraInfo.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetCameraInfoResponse {\n return {\n cameraInfo: globalThis.Array.isArray(object?.cameraInfo)\n ? object.cameraInfo.map((e: any) => CameraInfo.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: GetCameraInfoResponse): unknown {\n const obj: any = {};\n if (message.cameraInfo?.length) {\n obj.cameraInfo = message.cameraInfo.map((e) => CameraInfo.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): GetCameraInfoResponse {\n return GetCameraInfoResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetCameraInfoResponse {\n const message = createBaseGetCameraInfoResponse();\n message.cameraInfo = object.cameraInfo?.map((e) => CameraInfo.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseGetLightweightBurstRecordRequest(): GetLightweightBurstRecordRequest {\n return {};\n}\n\nexport const GetLightweightBurstRecordRequest: MessageFns = {\n encode(_: GetLightweightBurstRecordRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetLightweightBurstRecordRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLightweightBurstRecordRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetLightweightBurstRecordRequest {\n return {};\n },\n\n toJSON(_: GetLightweightBurstRecordRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetLightweightBurstRecordRequest {\n return GetLightweightBurstRecordRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n _: I,\n ): GetLightweightBurstRecordRequest {\n const message = createBaseGetLightweightBurstRecordRequest();\n return message;\n },\n};\n\nfunction createBaseGetLightweightBurstRecordResponse(): GetLightweightBurstRecordResponse {\n return { zipFile: new Uint8Array(0), metadataFile: new Uint8Array(0) };\n}\n\nexport const GetLightweightBurstRecordResponse: MessageFns = {\n encode(message: GetLightweightBurstRecordResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.zipFile.length !== 0) {\n writer.uint32(10).bytes(message.zipFile);\n }\n if (message.metadataFile.length !== 0) {\n writer.uint32(18).bytes(message.metadataFile);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetLightweightBurstRecordResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLightweightBurstRecordResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.zipFile = reader.bytes();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.metadataFile = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetLightweightBurstRecordResponse {\n return {\n zipFile: isSet(object.zipFile) ? bytesFromBase64(object.zipFile) : new Uint8Array(0),\n metadataFile: isSet(object.metadataFile) ? bytesFromBase64(object.metadataFile) : new Uint8Array(0),\n };\n },\n\n toJSON(message: GetLightweightBurstRecordResponse): unknown {\n const obj: any = {};\n if (message.zipFile.length !== 0) {\n obj.zipFile = base64FromBytes(message.zipFile);\n }\n if (message.metadataFile.length !== 0) {\n obj.metadataFile = base64FromBytes(message.metadataFile);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetLightweightBurstRecordResponse {\n return GetLightweightBurstRecordResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetLightweightBurstRecordResponse {\n const message = createBaseGetLightweightBurstRecordResponse();\n message.zipFile = object.zipFile ?? new Uint8Array(0);\n message.metadataFile = object.metadataFile ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseGetBootedRequest(): GetBootedRequest {\n return {};\n}\n\nexport const GetBootedRequest: MessageFns = {\n encode(_: GetBootedRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetBootedRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetBootedRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetBootedRequest {\n return {};\n },\n\n toJSON(_: GetBootedRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetBootedRequest {\n return GetBootedRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetBootedRequest {\n const message = createBaseGetBootedRequest();\n return message;\n },\n};\n\nfunction createBaseGetBootedResponse(): GetBootedResponse {\n return { booted: false };\n}\n\nexport const GetBootedResponse: MessageFns = {\n encode(message: GetBootedResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.booted !== false) {\n writer.uint32(8).bool(message.booted);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetBootedResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetBootedResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.booted = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetBootedResponse {\n return { booted: isSet(object.booted) ? globalThis.Boolean(object.booted) : false };\n },\n\n toJSON(message: GetBootedResponse): unknown {\n const obj: any = {};\n if (message.booted !== false) {\n obj.booted = message.booted;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetBootedResponse {\n return GetBootedResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetBootedResponse {\n const message = createBaseGetBootedResponse();\n message.booted = object.booted ?? false;\n return message;\n },\n};\n\nfunction createBaseGetReadyRequest(): GetReadyRequest {\n return {};\n}\n\nexport const GetReadyRequest: MessageFns = {\n encode(_: GetReadyRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetReadyRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetReadyRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetReadyRequest {\n return {};\n },\n\n toJSON(_: GetReadyRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetReadyRequest {\n return GetReadyRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetReadyRequest {\n const message = createBaseGetReadyRequest();\n return message;\n },\n};\n\nfunction createBaseGetReadyResponse(): GetReadyResponse {\n return { ready: false };\n}\n\nexport const GetReadyResponse: MessageFns = {\n encode(message: GetReadyResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.ready !== false) {\n writer.uint32(8).bool(message.ready);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetReadyResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetReadyResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.ready = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetReadyResponse {\n return { ready: isSet(object.ready) ? globalThis.Boolean(object.ready) : false };\n },\n\n toJSON(message: GetReadyResponse): unknown {\n const obj: any = {};\n if (message.ready !== false) {\n obj.ready = message.ready;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetReadyResponse {\n return GetReadyResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetReadyResponse {\n const message = createBaseGetReadyResponse();\n message.ready = object.ready ?? false;\n return message;\n },\n};\n\nfunction createBaseDeepweedDetection(): DeepweedDetection {\n return {\n x: 0,\n y: 0,\n size: 0,\n score: 0,\n detectionClassScores: {},\n hitClass: 0,\n maskIntersections: [],\n weedScore: 0,\n cropScore: 0,\n };\n}\n\nexport const DeepweedDetection: MessageFns = {\n encode(message: DeepweedDetection, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.size !== 0) {\n writer.uint32(29).float(message.size);\n }\n if (message.score !== 0) {\n writer.uint32(37).float(message.score);\n }\n Object.entries(message.detectionClassScores).forEach(([key, value]) => {\n DeepweedDetection_DetectionClassScoresEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).join();\n });\n if (message.hitClass !== 0) {\n writer.uint32(48).int32(message.hitClass);\n }\n for (const v of message.maskIntersections) {\n writer.uint32(58).string(v!);\n }\n if (message.weedScore !== 0) {\n writer.uint32(69).float(message.weedScore);\n }\n if (message.cropScore !== 0) {\n writer.uint32(77).float(message.cropScore);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeepweedDetection {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeepweedDetection();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.size = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.score = reader.float();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n const entry5 = DeepweedDetection_DetectionClassScoresEntry.decode(reader, reader.uint32());\n if (entry5.value !== undefined) {\n message.detectionClassScores[entry5.key] = entry5.value;\n }\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.hitClass = reader.int32() as any;\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.maskIntersections.push(reader.string());\n continue;\n case 8:\n if (tag !== 69) {\n break;\n }\n\n message.weedScore = reader.float();\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n\n message.cropScore = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeepweedDetection {\n return {\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n size: isSet(object.size) ? globalThis.Number(object.size) : 0,\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n detectionClassScores: isObject(object.detectionClassScores)\n ? Object.entries(object.detectionClassScores).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n hitClass: isSet(object.hitClass) ? hitClassFromJSON(object.hitClass) : 0,\n maskIntersections: globalThis.Array.isArray(object?.maskIntersections)\n ? object.maskIntersections.map((e: any) => globalThis.String(e))\n : [],\n weedScore: isSet(object.weedScore) ? globalThis.Number(object.weedScore) : 0,\n cropScore: isSet(object.cropScore) ? globalThis.Number(object.cropScore) : 0,\n };\n },\n\n toJSON(message: DeepweedDetection): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = message.x;\n }\n if (message.y !== 0) {\n obj.y = message.y;\n }\n if (message.size !== 0) {\n obj.size = message.size;\n }\n if (message.score !== 0) {\n obj.score = message.score;\n }\n if (message.detectionClassScores) {\n const entries = Object.entries(message.detectionClassScores);\n if (entries.length > 0) {\n obj.detectionClassScores = {};\n entries.forEach(([k, v]) => {\n obj.detectionClassScores[k] = v;\n });\n }\n }\n if (message.hitClass !== 0) {\n obj.hitClass = hitClassToJSON(message.hitClass);\n }\n if (message.maskIntersections?.length) {\n obj.maskIntersections = message.maskIntersections;\n }\n if (message.weedScore !== 0) {\n obj.weedScore = message.weedScore;\n }\n if (message.cropScore !== 0) {\n obj.cropScore = message.cropScore;\n }\n return obj;\n },\n\n create, I>>(base?: I): DeepweedDetection {\n return DeepweedDetection.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeepweedDetection {\n const message = createBaseDeepweedDetection();\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n message.size = object.size ?? 0;\n message.score = object.score ?? 0;\n message.detectionClassScores = Object.entries(object.detectionClassScores ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n message.hitClass = object.hitClass ?? 0;\n message.maskIntersections = object.maskIntersections?.map((e) => e) || [];\n message.weedScore = object.weedScore ?? 0;\n message.cropScore = object.cropScore ?? 0;\n return message;\n },\n};\n\nfunction createBaseDeepweedDetection_DetectionClassScoresEntry(): DeepweedDetection_DetectionClassScoresEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const DeepweedDetection_DetectionClassScoresEntry: MessageFns = {\n encode(\n message: DeepweedDetection_DetectionClassScoresEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(21).float(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeepweedDetection_DetectionClassScoresEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeepweedDetection_DetectionClassScoresEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.value = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeepweedDetection_DetectionClassScoresEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: DeepweedDetection_DetectionClassScoresEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): DeepweedDetection_DetectionClassScoresEntry {\n return DeepweedDetection_DetectionClassScoresEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): DeepweedDetection_DetectionClassScoresEntry {\n const message = createBaseDeepweedDetection_DetectionClassScoresEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseDeepweedOutput(): DeepweedOutput {\n return {\n detections: [],\n maskWidth: 0,\n maskHeight: 0,\n maskChannels: 0,\n mask: [],\n maskChannelClasses: [],\n predictInDistanceBuffer: false,\n timestampMs: 0,\n };\n}\n\nexport const DeepweedOutput: MessageFns = {\n encode(message: DeepweedOutput, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.detections) {\n DeepweedDetection.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.maskWidth !== 0) {\n writer.uint32(16).uint32(message.maskWidth);\n }\n if (message.maskHeight !== 0) {\n writer.uint32(24).uint32(message.maskHeight);\n }\n if (message.maskChannels !== 0) {\n writer.uint32(32).uint32(message.maskChannels);\n }\n writer.uint32(42).fork();\n for (const v of message.mask) {\n writer.int32(v);\n }\n writer.join();\n for (const v of message.maskChannelClasses) {\n writer.uint32(50).string(v!);\n }\n if (message.predictInDistanceBuffer !== false) {\n writer.uint32(56).bool(message.predictInDistanceBuffer);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(64).int64(message.timestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeepweedOutput {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeepweedOutput();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.detections.push(DeepweedDetection.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.maskWidth = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.maskHeight = reader.uint32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.maskChannels = reader.uint32();\n continue;\n case 5:\n if (tag === 40) {\n message.mask.push(reader.int32());\n\n continue;\n }\n\n if (tag === 42) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.mask.push(reader.int32());\n }\n\n continue;\n }\n\n break;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.maskChannelClasses.push(reader.string());\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.predictInDistanceBuffer = reader.bool();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeepweedOutput {\n return {\n detections: globalThis.Array.isArray(object?.detections)\n ? object.detections.map((e: any) => DeepweedDetection.fromJSON(e))\n : [],\n maskWidth: isSet(object.maskWidth) ? globalThis.Number(object.maskWidth) : 0,\n maskHeight: isSet(object.maskHeight) ? globalThis.Number(object.maskHeight) : 0,\n maskChannels: isSet(object.maskChannels) ? globalThis.Number(object.maskChannels) : 0,\n mask: globalThis.Array.isArray(object?.mask) ? object.mask.map((e: any) => globalThis.Number(e)) : [],\n maskChannelClasses: globalThis.Array.isArray(object?.maskChannelClasses)\n ? object.maskChannelClasses.map((e: any) => globalThis.String(e))\n : [],\n predictInDistanceBuffer: isSet(object.predictInDistanceBuffer)\n ? globalThis.Boolean(object.predictInDistanceBuffer)\n : false,\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n };\n },\n\n toJSON(message: DeepweedOutput): unknown {\n const obj: any = {};\n if (message.detections?.length) {\n obj.detections = message.detections.map((e) => DeepweedDetection.toJSON(e));\n }\n if (message.maskWidth !== 0) {\n obj.maskWidth = Math.round(message.maskWidth);\n }\n if (message.maskHeight !== 0) {\n obj.maskHeight = Math.round(message.maskHeight);\n }\n if (message.maskChannels !== 0) {\n obj.maskChannels = Math.round(message.maskChannels);\n }\n if (message.mask?.length) {\n obj.mask = message.mask.map((e) => Math.round(e));\n }\n if (message.maskChannelClasses?.length) {\n obj.maskChannelClasses = message.maskChannelClasses;\n }\n if (message.predictInDistanceBuffer !== false) {\n obj.predictInDistanceBuffer = message.predictInDistanceBuffer;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): DeepweedOutput {\n return DeepweedOutput.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeepweedOutput {\n const message = createBaseDeepweedOutput();\n message.detections = object.detections?.map((e) => DeepweedDetection.fromPartial(e)) || [];\n message.maskWidth = object.maskWidth ?? 0;\n message.maskHeight = object.maskHeight ?? 0;\n message.maskChannels = object.maskChannels ?? 0;\n message.mask = object.mask?.map((e) => e) || [];\n message.maskChannelClasses = object.maskChannelClasses?.map((e) => e) || [];\n message.predictInDistanceBuffer = object.predictInDistanceBuffer ?? false;\n message.timestampMs = object.timestampMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetDeepweedOutputByTimestampRequest(): GetDeepweedOutputByTimestampRequest {\n return { camId: \"\", timestampMs: 0 };\n}\n\nexport const GetDeepweedOutputByTimestampRequest: MessageFns = {\n encode(message: GetDeepweedOutputByTimestampRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(16).int64(message.timestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedOutputByTimestampRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedOutputByTimestampRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedOutputByTimestampRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n };\n },\n\n toJSON(message: GetDeepweedOutputByTimestampRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedOutputByTimestampRequest {\n return GetDeepweedOutputByTimestampRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedOutputByTimestampRequest {\n const message = createBaseGetDeepweedOutputByTimestampRequest();\n message.camId = object.camId ?? \"\";\n message.timestampMs = object.timestampMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetRecommendedStrobeSettingsRequest(): GetRecommendedStrobeSettingsRequest {\n return {};\n}\n\nexport const GetRecommendedStrobeSettingsRequest: MessageFns = {\n encode(_: GetRecommendedStrobeSettingsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetRecommendedStrobeSettingsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetRecommendedStrobeSettingsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetRecommendedStrobeSettingsRequest {\n return {};\n },\n\n toJSON(_: GetRecommendedStrobeSettingsRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetRecommendedStrobeSettingsRequest {\n return GetRecommendedStrobeSettingsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n _: I,\n ): GetRecommendedStrobeSettingsRequest {\n const message = createBaseGetRecommendedStrobeSettingsRequest();\n return message;\n },\n};\n\nfunction createBaseGetRecommendedStrobeSettingsResponse(): GetRecommendedStrobeSettingsResponse {\n return { targetCameraFps: 0, targetsPerPredictRatio: 0 };\n}\n\nexport const GetRecommendedStrobeSettingsResponse: MessageFns = {\n encode(message: GetRecommendedStrobeSettingsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.targetCameraFps !== 0) {\n writer.uint32(13).float(message.targetCameraFps);\n }\n if (message.targetsPerPredictRatio !== 0) {\n writer.uint32(16).int32(message.targetsPerPredictRatio);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetRecommendedStrobeSettingsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetRecommendedStrobeSettingsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.targetCameraFps = reader.float();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.targetsPerPredictRatio = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetRecommendedStrobeSettingsResponse {\n return {\n targetCameraFps: isSet(object.targetCameraFps) ? globalThis.Number(object.targetCameraFps) : 0,\n targetsPerPredictRatio: isSet(object.targetsPerPredictRatio)\n ? globalThis.Number(object.targetsPerPredictRatio)\n : 0,\n };\n },\n\n toJSON(message: GetRecommendedStrobeSettingsResponse): unknown {\n const obj: any = {};\n if (message.targetCameraFps !== 0) {\n obj.targetCameraFps = message.targetCameraFps;\n }\n if (message.targetsPerPredictRatio !== 0) {\n obj.targetsPerPredictRatio = Math.round(message.targetsPerPredictRatio);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetRecommendedStrobeSettingsResponse {\n return GetRecommendedStrobeSettingsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetRecommendedStrobeSettingsResponse {\n const message = createBaseGetRecommendedStrobeSettingsResponse();\n message.targetCameraFps = object.targetCameraFps ?? 0;\n message.targetsPerPredictRatio = object.targetsPerPredictRatio ?? 0;\n return message;\n },\n};\n\nfunction createBaseStartP2PBufferringRequest(): StartP2PBufferringRequest {\n return { camId: \"\" };\n}\n\nexport const StartP2PBufferringRequest: MessageFns = {\n encode(message: StartP2PBufferringRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StartP2PBufferringRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStartP2PBufferringRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StartP2PBufferringRequest {\n return { camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\" };\n },\n\n toJSON(message: StartP2PBufferringRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n return obj;\n },\n\n create, I>>(base?: I): StartP2PBufferringRequest {\n return StartP2PBufferringRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): StartP2PBufferringRequest {\n const message = createBaseStartP2PBufferringRequest();\n message.camId = object.camId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseStartP2PBufferringResponse(): StartP2PBufferringResponse {\n return {};\n}\n\nexport const StartP2PBufferringResponse: MessageFns = {\n encode(_: StartP2PBufferringResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StartP2PBufferringResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStartP2PBufferringResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): StartP2PBufferringResponse {\n return {};\n },\n\n toJSON(_: StartP2PBufferringResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): StartP2PBufferringResponse {\n return StartP2PBufferringResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): StartP2PBufferringResponse {\n const message = createBaseStartP2PBufferringResponse();\n return message;\n },\n};\n\nfunction createBaseStopP2PBufferringRequest(): StopP2PBufferringRequest {\n return {\n saveBurst: false,\n camId: \"\",\n path: \"\",\n dontCapturePredictImage: false,\n startTimestampMs: 0,\n endTimestampMs: 0,\n };\n}\n\nexport const StopP2PBufferringRequest: MessageFns = {\n encode(message: StopP2PBufferringRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.saveBurst !== false) {\n writer.uint32(8).bool(message.saveBurst);\n }\n if (message.camId !== \"\") {\n writer.uint32(18).string(message.camId);\n }\n if (message.path !== \"\") {\n writer.uint32(26).string(message.path);\n }\n if (message.dontCapturePredictImage !== false) {\n writer.uint32(32).bool(message.dontCapturePredictImage);\n }\n if (message.startTimestampMs !== 0) {\n writer.uint32(40).int64(message.startTimestampMs);\n }\n if (message.endTimestampMs !== 0) {\n writer.uint32(48).int64(message.endTimestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StopP2PBufferringRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStopP2PBufferringRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.saveBurst = reader.bool();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.dontCapturePredictImage = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.startTimestampMs = longToNumber(reader.int64());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.endTimestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StopP2PBufferringRequest {\n return {\n saveBurst: isSet(object.saveBurst) ? globalThis.Boolean(object.saveBurst) : false,\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n path: isSet(object.path) ? globalThis.String(object.path) : \"\",\n dontCapturePredictImage: isSet(object.dontCapturePredictImage)\n ? globalThis.Boolean(object.dontCapturePredictImage)\n : false,\n startTimestampMs: isSet(object.startTimestampMs) ? globalThis.Number(object.startTimestampMs) : 0,\n endTimestampMs: isSet(object.endTimestampMs) ? globalThis.Number(object.endTimestampMs) : 0,\n };\n },\n\n toJSON(message: StopP2PBufferringRequest): unknown {\n const obj: any = {};\n if (message.saveBurst !== false) {\n obj.saveBurst = message.saveBurst;\n }\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.path !== \"\") {\n obj.path = message.path;\n }\n if (message.dontCapturePredictImage !== false) {\n obj.dontCapturePredictImage = message.dontCapturePredictImage;\n }\n if (message.startTimestampMs !== 0) {\n obj.startTimestampMs = Math.round(message.startTimestampMs);\n }\n if (message.endTimestampMs !== 0) {\n obj.endTimestampMs = Math.round(message.endTimestampMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): StopP2PBufferringRequest {\n return StopP2PBufferringRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): StopP2PBufferringRequest {\n const message = createBaseStopP2PBufferringRequest();\n message.saveBurst = object.saveBurst ?? false;\n message.camId = object.camId ?? \"\";\n message.path = object.path ?? \"\";\n message.dontCapturePredictImage = object.dontCapturePredictImage ?? false;\n message.startTimestampMs = object.startTimestampMs ?? 0;\n message.endTimestampMs = object.endTimestampMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseStopP2PBufferringResponse(): StopP2PBufferringResponse {\n return {};\n}\n\nexport const StopP2PBufferringResponse: MessageFns = {\n encode(_: StopP2PBufferringResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StopP2PBufferringResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStopP2PBufferringResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): StopP2PBufferringResponse {\n return {};\n },\n\n toJSON(_: StopP2PBufferringResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): StopP2PBufferringResponse {\n return StopP2PBufferringResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): StopP2PBufferringResponse {\n const message = createBaseStopP2PBufferringResponse();\n return message;\n },\n};\n\nfunction createBaseP2PCaptureRequest(): P2PCaptureRequest {\n return { camId: \"\", name: \"\", timestampMs: 0, writeToDisk: false, reason: 0 };\n}\n\nexport const P2PCaptureRequest: MessageFns = {\n encode(message: P2PCaptureRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(10).string(message.camId);\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(24).int64(message.timestampMs);\n }\n if (message.writeToDisk !== false) {\n writer.uint32(32).bool(message.writeToDisk);\n }\n if (message.reason !== 0) {\n writer.uint32(40).int32(message.reason);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): P2PCaptureRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseP2PCaptureRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.writeToDisk = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.reason = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): P2PCaptureRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n writeToDisk: isSet(object.writeToDisk) ? globalThis.Boolean(object.writeToDisk) : false,\n reason: isSet(object.reason) ? p2PCaptureReasonFromJSON(object.reason) : 0,\n };\n },\n\n toJSON(message: P2PCaptureRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.writeToDisk !== false) {\n obj.writeToDisk = message.writeToDisk;\n }\n if (message.reason !== 0) {\n obj.reason = p2PCaptureReasonToJSON(message.reason);\n }\n return obj;\n },\n\n create, I>>(base?: I): P2PCaptureRequest {\n return P2PCaptureRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): P2PCaptureRequest {\n const message = createBaseP2PCaptureRequest();\n message.camId = object.camId ?? \"\";\n message.name = object.name ?? \"\";\n message.timestampMs = object.timestampMs ?? 0;\n message.writeToDisk = object.writeToDisk ?? false;\n message.reason = object.reason ?? 0;\n return message;\n },\n};\n\nfunction createBaseP2PCaptureResponse(): P2PCaptureResponse {\n return {};\n}\n\nexport const P2PCaptureResponse: MessageFns = {\n encode(_: P2PCaptureResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): P2PCaptureResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseP2PCaptureResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): P2PCaptureResponse {\n return {};\n },\n\n toJSON(_: P2PCaptureResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): P2PCaptureResponse {\n return P2PCaptureResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): P2PCaptureResponse {\n const message = createBaseP2PCaptureResponse();\n return message;\n },\n};\n\nfunction createBaseP2PBufferringBurstCaptureRequest(): P2PBufferringBurstCaptureRequest {\n return { camId: \"\", path: \"\", dontCapturePredictImage: false, startTimestampMs: 0, endTimestampMs: 0 };\n}\n\nexport const P2PBufferringBurstCaptureRequest: MessageFns = {\n encode(message: P2PBufferringBurstCaptureRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.camId !== \"\") {\n writer.uint32(18).string(message.camId);\n }\n if (message.path !== \"\") {\n writer.uint32(26).string(message.path);\n }\n if (message.dontCapturePredictImage !== false) {\n writer.uint32(32).bool(message.dontCapturePredictImage);\n }\n if (message.startTimestampMs !== 0) {\n writer.uint32(40).int64(message.startTimestampMs);\n }\n if (message.endTimestampMs !== 0) {\n writer.uint32(48).int64(message.endTimestampMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): P2PBufferringBurstCaptureRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseP2PBufferringBurstCaptureRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.camId = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.dontCapturePredictImage = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.startTimestampMs = longToNumber(reader.int64());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.endTimestampMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): P2PBufferringBurstCaptureRequest {\n return {\n camId: isSet(object.camId) ? globalThis.String(object.camId) : \"\",\n path: isSet(object.path) ? globalThis.String(object.path) : \"\",\n dontCapturePredictImage: isSet(object.dontCapturePredictImage)\n ? globalThis.Boolean(object.dontCapturePredictImage)\n : false,\n startTimestampMs: isSet(object.startTimestampMs) ? globalThis.Number(object.startTimestampMs) : 0,\n endTimestampMs: isSet(object.endTimestampMs) ? globalThis.Number(object.endTimestampMs) : 0,\n };\n },\n\n toJSON(message: P2PBufferringBurstCaptureRequest): unknown {\n const obj: any = {};\n if (message.camId !== \"\") {\n obj.camId = message.camId;\n }\n if (message.path !== \"\") {\n obj.path = message.path;\n }\n if (message.dontCapturePredictImage !== false) {\n obj.dontCapturePredictImage = message.dontCapturePredictImage;\n }\n if (message.startTimestampMs !== 0) {\n obj.startTimestampMs = Math.round(message.startTimestampMs);\n }\n if (message.endTimestampMs !== 0) {\n obj.endTimestampMs = Math.round(message.endTimestampMs);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): P2PBufferringBurstCaptureRequest {\n return P2PBufferringBurstCaptureRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): P2PBufferringBurstCaptureRequest {\n const message = createBaseP2PBufferringBurstCaptureRequest();\n message.camId = object.camId ?? \"\";\n message.path = object.path ?? \"\";\n message.dontCapturePredictImage = object.dontCapturePredictImage ?? false;\n message.startTimestampMs = object.startTimestampMs ?? 0;\n message.endTimestampMs = object.endTimestampMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseP2PBufferringBurstCaptureResponse(): P2PBufferringBurstCaptureResponse {\n return {};\n}\n\nexport const P2PBufferringBurstCaptureResponse: MessageFns = {\n encode(_: P2PBufferringBurstCaptureResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): P2PBufferringBurstCaptureResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseP2PBufferringBurstCaptureResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): P2PBufferringBurstCaptureResponse {\n return {};\n },\n\n toJSON(_: P2PBufferringBurstCaptureResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): P2PBufferringBurstCaptureResponse {\n return P2PBufferringBurstCaptureResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n _: I,\n ): P2PBufferringBurstCaptureResponse {\n const message = createBaseP2PBufferringBurstCaptureResponse();\n return message;\n },\n};\n\nfunction createBaseGetNextDeepweedOutputRequest(): GetNextDeepweedOutputRequest {\n return { timestampMs: 0, bufferName: \"\", timeoutMs: 0 };\n}\n\nexport const GetNextDeepweedOutputRequest: MessageFns = {\n encode(message: GetNextDeepweedOutputRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.timestampMs !== 0) {\n writer.uint32(8).int64(message.timestampMs);\n }\n if (message.bufferName !== \"\") {\n writer.uint32(18).string(message.bufferName);\n }\n if (message.timeoutMs !== 0) {\n writer.uint32(24).int64(message.timeoutMs);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetNextDeepweedOutputRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetNextDeepweedOutputRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.bufferName = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.timeoutMs = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetNextDeepweedOutputRequest {\n return {\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n bufferName: isSet(object.bufferName) ? globalThis.String(object.bufferName) : \"\",\n timeoutMs: isSet(object.timeoutMs) ? globalThis.Number(object.timeoutMs) : 0,\n };\n },\n\n toJSON(message: GetNextDeepweedOutputRequest): unknown {\n const obj: any = {};\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.bufferName !== \"\") {\n obj.bufferName = message.bufferName;\n }\n if (message.timeoutMs !== 0) {\n obj.timeoutMs = Math.round(message.timeoutMs);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetNextDeepweedOutputRequest {\n return GetNextDeepweedOutputRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetNextDeepweedOutputRequest {\n const message = createBaseGetNextDeepweedOutputRequest();\n message.timestampMs = object.timestampMs ?? 0;\n message.bufferName = object.bufferName ?? \"\";\n message.timeoutMs = object.timeoutMs ?? 0;\n return message;\n },\n};\n\nfunction createBaseSetTargetingStateRequest(): SetTargetingStateRequest {\n return { weedingEnabled: false, thinningEnabled: false };\n}\n\nexport const SetTargetingStateRequest: MessageFns = {\n encode(message: SetTargetingStateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.weedingEnabled !== false) {\n writer.uint32(8).bool(message.weedingEnabled);\n }\n if (message.thinningEnabled !== false) {\n writer.uint32(16).bool(message.thinningEnabled);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetTargetingStateRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetTargetingStateRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.weedingEnabled = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.thinningEnabled = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): SetTargetingStateRequest {\n return {\n weedingEnabled: isSet(object.weedingEnabled) ? globalThis.Boolean(object.weedingEnabled) : false,\n thinningEnabled: isSet(object.thinningEnabled) ? globalThis.Boolean(object.thinningEnabled) : false,\n };\n },\n\n toJSON(message: SetTargetingStateRequest): unknown {\n const obj: any = {};\n if (message.weedingEnabled !== false) {\n obj.weedingEnabled = message.weedingEnabled;\n }\n if (message.thinningEnabled !== false) {\n obj.thinningEnabled = message.thinningEnabled;\n }\n return obj;\n },\n\n create, I>>(base?: I): SetTargetingStateRequest {\n return SetTargetingStateRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): SetTargetingStateRequest {\n const message = createBaseSetTargetingStateRequest();\n message.weedingEnabled = object.weedingEnabled ?? false;\n message.thinningEnabled = object.thinningEnabled ?? false;\n return message;\n },\n};\n\nfunction createBaseSetTargetingStateResponse(): SetTargetingStateResponse {\n return {};\n}\n\nexport const SetTargetingStateResponse: MessageFns = {\n encode(_: SetTargetingStateResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): SetTargetingStateResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetTargetingStateResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): SetTargetingStateResponse {\n return {};\n },\n\n toJSON(_: SetTargetingStateResponse): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): SetTargetingStateResponse {\n return SetTargetingStateResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): SetTargetingStateResponse {\n const message = createBaseSetTargetingStateResponse();\n return message;\n },\n};\n\nfunction bytesFromBase64(b64: string): Uint8Array {\n if ((globalThis as any).Buffer) {\n return Uint8Array.from(globalThis.Buffer.from(b64, \"base64\"));\n } else {\n const bin = globalThis.atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n }\n}\n\nfunction base64FromBytes(arr: Uint8Array): string {\n if ((globalThis as any).Buffer) {\n return globalThis.Buffer.from(arr).toString(\"base64\");\n } else {\n const bin: string[] = [];\n arr.forEach((byte) => {\n bin.push(globalThis.String.fromCharCode(byte));\n });\n return globalThis.btoa(bin.join(\"\"));\n }\n}\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: recorder/recorder.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"recorder\";\n\nexport interface DetectionClass {\n class: string;\n score: number;\n}\n\nexport interface DeepweedDetection {\n x: number;\n y: number;\n size: number;\n score: number;\n hitClass: DeepweedDetection_HitClass;\n detectionClasses: DetectionClass[];\n maskIntersections: Uint8Array[];\n trajectoryId: number;\n weedScore: number;\n cropScore: number;\n}\n\nexport enum DeepweedDetection_HitClass {\n WEED = 0,\n CROP = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function deepweedDetection_HitClassFromJSON(object: any): DeepweedDetection_HitClass {\n switch (object) {\n case 0:\n case \"WEED\":\n return DeepweedDetection_HitClass.WEED;\n case 1:\n case \"CROP\":\n return DeepweedDetection_HitClass.CROP;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return DeepweedDetection_HitClass.UNRECOGNIZED;\n }\n}\n\nexport function deepweedDetection_HitClassToJSON(object: DeepweedDetection_HitClass): string {\n switch (object) {\n case DeepweedDetection_HitClass.WEED:\n return \"WEED\";\n case DeepweedDetection_HitClass.CROP:\n return \"CROP\";\n case DeepweedDetection_HitClass.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface DeepweedPredictionFrame {\n timestampMs: number;\n detections: DeepweedDetection[];\n}\n\nexport interface DeepweedPredictionRecord {\n recordTimestampMs: number;\n frame: DeepweedPredictionFrame | undefined;\n}\n\nexport interface LaneHeightSnapshot {\n weedHeight: number[];\n cropHeight: number[];\n}\n\nexport interface LaneHeightRecord {\n recordTimestampMs: number;\n snapshot: LaneHeightSnapshot | undefined;\n}\n\nexport interface RotaryTicksSnapshot {\n timestampUs: number;\n fl: number;\n fr: number;\n bl: number;\n br: number;\n flEnabled: boolean;\n frEnabled: boolean;\n blEnabled: boolean;\n brEnabled: boolean;\n}\n\nexport interface RotaryTicksRecord {\n recordTimestampMs: number;\n snapshot: RotaryTicksSnapshot | undefined;\n}\n\nfunction createBaseDetectionClass(): DetectionClass {\n return { class: \"\", score: 0 };\n}\n\nexport const DetectionClass: MessageFns = {\n encode(message: DetectionClass, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.class !== \"\") {\n writer.uint32(10).string(message.class);\n }\n if (message.score !== 0) {\n writer.uint32(21).float(message.score);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DetectionClass {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDetectionClass();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.class = reader.string();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.score = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DetectionClass {\n return {\n class: isSet(object.class) ? globalThis.String(object.class) : \"\",\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n };\n },\n\n toJSON(message: DetectionClass): unknown {\n const obj: any = {};\n if (message.class !== \"\") {\n obj.class = message.class;\n }\n if (message.score !== 0) {\n obj.score = message.score;\n }\n return obj;\n },\n\n create, I>>(base?: I): DetectionClass {\n return DetectionClass.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DetectionClass {\n const message = createBaseDetectionClass();\n message.class = object.class ?? \"\";\n message.score = object.score ?? 0;\n return message;\n },\n};\n\nfunction createBaseDeepweedDetection(): DeepweedDetection {\n return {\n x: 0,\n y: 0,\n size: 0,\n score: 0,\n hitClass: 0,\n detectionClasses: [],\n maskIntersections: [],\n trajectoryId: 0,\n weedScore: 0,\n cropScore: 0,\n };\n}\n\nexport const DeepweedDetection: MessageFns = {\n encode(message: DeepweedDetection, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.size !== 0) {\n writer.uint32(29).float(message.size);\n }\n if (message.score !== 0) {\n writer.uint32(37).float(message.score);\n }\n if (message.hitClass !== 0) {\n writer.uint32(40).int32(message.hitClass);\n }\n for (const v of message.detectionClasses) {\n DetectionClass.encode(v!, writer.uint32(50).fork()).join();\n }\n for (const v of message.maskIntersections) {\n writer.uint32(58).bytes(v!);\n }\n if (message.trajectoryId !== 0) {\n writer.uint32(64).uint32(message.trajectoryId);\n }\n if (message.weedScore !== 0) {\n writer.uint32(77).float(message.weedScore);\n }\n if (message.cropScore !== 0) {\n writer.uint32(85).float(message.cropScore);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeepweedDetection {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeepweedDetection();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.size = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.score = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.hitClass = reader.int32() as any;\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.detectionClasses.push(DetectionClass.decode(reader, reader.uint32()));\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.maskIntersections.push(reader.bytes());\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.trajectoryId = reader.uint32();\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n\n message.weedScore = reader.float();\n continue;\n case 10:\n if (tag !== 85) {\n break;\n }\n\n message.cropScore = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeepweedDetection {\n return {\n x: isSet(object.x) ? globalThis.Number(object.x) : 0,\n y: isSet(object.y) ? globalThis.Number(object.y) : 0,\n size: isSet(object.size) ? globalThis.Number(object.size) : 0,\n score: isSet(object.score) ? globalThis.Number(object.score) : 0,\n hitClass: isSet(object.hitClass) ? deepweedDetection_HitClassFromJSON(object.hitClass) : 0,\n detectionClasses: globalThis.Array.isArray(object?.detectionClasses)\n ? object.detectionClasses.map((e: any) => DetectionClass.fromJSON(e))\n : [],\n maskIntersections: globalThis.Array.isArray(object?.maskIntersections)\n ? object.maskIntersections.map((e: any) => bytesFromBase64(e))\n : [],\n trajectoryId: isSet(object.trajectoryId) ? globalThis.Number(object.trajectoryId) : 0,\n weedScore: isSet(object.weedScore) ? globalThis.Number(object.weedScore) : 0,\n cropScore: isSet(object.cropScore) ? globalThis.Number(object.cropScore) : 0,\n };\n },\n\n toJSON(message: DeepweedDetection): unknown {\n const obj: any = {};\n if (message.x !== 0) {\n obj.x = message.x;\n }\n if (message.y !== 0) {\n obj.y = message.y;\n }\n if (message.size !== 0) {\n obj.size = message.size;\n }\n if (message.score !== 0) {\n obj.score = message.score;\n }\n if (message.hitClass !== 0) {\n obj.hitClass = deepweedDetection_HitClassToJSON(message.hitClass);\n }\n if (message.detectionClasses?.length) {\n obj.detectionClasses = message.detectionClasses.map((e) => DetectionClass.toJSON(e));\n }\n if (message.maskIntersections?.length) {\n obj.maskIntersections = message.maskIntersections.map((e) => base64FromBytes(e));\n }\n if (message.trajectoryId !== 0) {\n obj.trajectoryId = Math.round(message.trajectoryId);\n }\n if (message.weedScore !== 0) {\n obj.weedScore = message.weedScore;\n }\n if (message.cropScore !== 0) {\n obj.cropScore = message.cropScore;\n }\n return obj;\n },\n\n create, I>>(base?: I): DeepweedDetection {\n return DeepweedDetection.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeepweedDetection {\n const message = createBaseDeepweedDetection();\n message.x = object.x ?? 0;\n message.y = object.y ?? 0;\n message.size = object.size ?? 0;\n message.score = object.score ?? 0;\n message.hitClass = object.hitClass ?? 0;\n message.detectionClasses = object.detectionClasses?.map((e) => DetectionClass.fromPartial(e)) || [];\n message.maskIntersections = object.maskIntersections?.map((e) => e) || [];\n message.trajectoryId = object.trajectoryId ?? 0;\n message.weedScore = object.weedScore ?? 0;\n message.cropScore = object.cropScore ?? 0;\n return message;\n },\n};\n\nfunction createBaseDeepweedPredictionFrame(): DeepweedPredictionFrame {\n return { timestampMs: 0, detections: [] };\n}\n\nexport const DeepweedPredictionFrame: MessageFns = {\n encode(message: DeepweedPredictionFrame, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.timestampMs !== 0) {\n writer.uint32(8).int64(message.timestampMs);\n }\n for (const v of message.detections) {\n DeepweedDetection.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeepweedPredictionFrame {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeepweedPredictionFrame();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.detections.push(DeepweedDetection.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeepweedPredictionFrame {\n return {\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n detections: globalThis.Array.isArray(object?.detections)\n ? object.detections.map((e: any) => DeepweedDetection.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: DeepweedPredictionFrame): unknown {\n const obj: any = {};\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.detections?.length) {\n obj.detections = message.detections.map((e) => DeepweedDetection.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): DeepweedPredictionFrame {\n return DeepweedPredictionFrame.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeepweedPredictionFrame {\n const message = createBaseDeepweedPredictionFrame();\n message.timestampMs = object.timestampMs ?? 0;\n message.detections = object.detections?.map((e) => DeepweedDetection.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseDeepweedPredictionRecord(): DeepweedPredictionRecord {\n return { recordTimestampMs: 0, frame: undefined };\n}\n\nexport const DeepweedPredictionRecord: MessageFns = {\n encode(message: DeepweedPredictionRecord, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordTimestampMs !== 0) {\n writer.uint32(8).uint64(message.recordTimestampMs);\n }\n if (message.frame !== undefined) {\n DeepweedPredictionFrame.encode(message.frame, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeepweedPredictionRecord {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeepweedPredictionRecord();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.recordTimestampMs = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.frame = DeepweedPredictionFrame.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeepweedPredictionRecord {\n return {\n recordTimestampMs: isSet(object.recordTimestampMs) ? globalThis.Number(object.recordTimestampMs) : 0,\n frame: isSet(object.frame) ? DeepweedPredictionFrame.fromJSON(object.frame) : undefined,\n };\n },\n\n toJSON(message: DeepweedPredictionRecord): unknown {\n const obj: any = {};\n if (message.recordTimestampMs !== 0) {\n obj.recordTimestampMs = Math.round(message.recordTimestampMs);\n }\n if (message.frame !== undefined) {\n obj.frame = DeepweedPredictionFrame.toJSON(message.frame);\n }\n return obj;\n },\n\n create, I>>(base?: I): DeepweedPredictionRecord {\n return DeepweedPredictionRecord.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeepweedPredictionRecord {\n const message = createBaseDeepweedPredictionRecord();\n message.recordTimestampMs = object.recordTimestampMs ?? 0;\n message.frame = (object.frame !== undefined && object.frame !== null)\n ? DeepweedPredictionFrame.fromPartial(object.frame)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseLaneHeightSnapshot(): LaneHeightSnapshot {\n return { weedHeight: [], cropHeight: [] };\n}\n\nexport const LaneHeightSnapshot: MessageFns = {\n encode(message: LaneHeightSnapshot, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n writer.uint32(10).fork();\n for (const v of message.weedHeight) {\n writer.double(v);\n }\n writer.join();\n writer.uint32(18).fork();\n for (const v of message.cropHeight) {\n writer.double(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaneHeightSnapshot {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaneHeightSnapshot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 9) {\n message.weedHeight.push(reader.double());\n\n continue;\n }\n\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.weedHeight.push(reader.double());\n }\n\n continue;\n }\n\n break;\n case 2:\n if (tag === 17) {\n message.cropHeight.push(reader.double());\n\n continue;\n }\n\n if (tag === 18) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.cropHeight.push(reader.double());\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaneHeightSnapshot {\n return {\n weedHeight: globalThis.Array.isArray(object?.weedHeight)\n ? object.weedHeight.map((e: any) => globalThis.Number(e))\n : [],\n cropHeight: globalThis.Array.isArray(object?.cropHeight)\n ? object.cropHeight.map((e: any) => globalThis.Number(e))\n : [],\n };\n },\n\n toJSON(message: LaneHeightSnapshot): unknown {\n const obj: any = {};\n if (message.weedHeight?.length) {\n obj.weedHeight = message.weedHeight;\n }\n if (message.cropHeight?.length) {\n obj.cropHeight = message.cropHeight;\n }\n return obj;\n },\n\n create, I>>(base?: I): LaneHeightSnapshot {\n return LaneHeightSnapshot.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaneHeightSnapshot {\n const message = createBaseLaneHeightSnapshot();\n message.weedHeight = object.weedHeight?.map((e) => e) || [];\n message.cropHeight = object.cropHeight?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseLaneHeightRecord(): LaneHeightRecord {\n return { recordTimestampMs: 0, snapshot: undefined };\n}\n\nexport const LaneHeightRecord: MessageFns = {\n encode(message: LaneHeightRecord, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordTimestampMs !== 0) {\n writer.uint32(8).uint64(message.recordTimestampMs);\n }\n if (message.snapshot !== undefined) {\n LaneHeightSnapshot.encode(message.snapshot, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LaneHeightRecord {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaneHeightRecord();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.recordTimestampMs = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.snapshot = LaneHeightSnapshot.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LaneHeightRecord {\n return {\n recordTimestampMs: isSet(object.recordTimestampMs) ? globalThis.Number(object.recordTimestampMs) : 0,\n snapshot: isSet(object.snapshot) ? LaneHeightSnapshot.fromJSON(object.snapshot) : undefined,\n };\n },\n\n toJSON(message: LaneHeightRecord): unknown {\n const obj: any = {};\n if (message.recordTimestampMs !== 0) {\n obj.recordTimestampMs = Math.round(message.recordTimestampMs);\n }\n if (message.snapshot !== undefined) {\n obj.snapshot = LaneHeightSnapshot.toJSON(message.snapshot);\n }\n return obj;\n },\n\n create, I>>(base?: I): LaneHeightRecord {\n return LaneHeightRecord.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LaneHeightRecord {\n const message = createBaseLaneHeightRecord();\n message.recordTimestampMs = object.recordTimestampMs ?? 0;\n message.snapshot = (object.snapshot !== undefined && object.snapshot !== null)\n ? LaneHeightSnapshot.fromPartial(object.snapshot)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseRotaryTicksSnapshot(): RotaryTicksSnapshot {\n return {\n timestampUs: 0,\n fl: 0,\n fr: 0,\n bl: 0,\n br: 0,\n flEnabled: false,\n frEnabled: false,\n blEnabled: false,\n brEnabled: false,\n };\n}\n\nexport const RotaryTicksSnapshot: MessageFns = {\n encode(message: RotaryTicksSnapshot, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.timestampUs !== 0) {\n writer.uint32(8).uint64(message.timestampUs);\n }\n if (message.fl !== 0) {\n writer.uint32(16).int32(message.fl);\n }\n if (message.fr !== 0) {\n writer.uint32(24).int32(message.fr);\n }\n if (message.bl !== 0) {\n writer.uint32(32).int32(message.bl);\n }\n if (message.br !== 0) {\n writer.uint32(40).int32(message.br);\n }\n if (message.flEnabled !== false) {\n writer.uint32(48).bool(message.flEnabled);\n }\n if (message.frEnabled !== false) {\n writer.uint32(56).bool(message.frEnabled);\n }\n if (message.blEnabled !== false) {\n writer.uint32(64).bool(message.blEnabled);\n }\n if (message.brEnabled !== false) {\n writer.uint32(72).bool(message.brEnabled);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RotaryTicksSnapshot {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRotaryTicksSnapshot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.timestampUs = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.fl = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.fr = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.bl = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.br = reader.int32();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.flEnabled = reader.bool();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.frEnabled = reader.bool();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.blEnabled = reader.bool();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.brEnabled = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RotaryTicksSnapshot {\n return {\n timestampUs: isSet(object.timestampUs) ? globalThis.Number(object.timestampUs) : 0,\n fl: isSet(object.fl) ? globalThis.Number(object.fl) : 0,\n fr: isSet(object.fr) ? globalThis.Number(object.fr) : 0,\n bl: isSet(object.bl) ? globalThis.Number(object.bl) : 0,\n br: isSet(object.br) ? globalThis.Number(object.br) : 0,\n flEnabled: isSet(object.flEnabled) ? globalThis.Boolean(object.flEnabled) : false,\n frEnabled: isSet(object.frEnabled) ? globalThis.Boolean(object.frEnabled) : false,\n blEnabled: isSet(object.blEnabled) ? globalThis.Boolean(object.blEnabled) : false,\n brEnabled: isSet(object.brEnabled) ? globalThis.Boolean(object.brEnabled) : false,\n };\n },\n\n toJSON(message: RotaryTicksSnapshot): unknown {\n const obj: any = {};\n if (message.timestampUs !== 0) {\n obj.timestampUs = Math.round(message.timestampUs);\n }\n if (message.fl !== 0) {\n obj.fl = Math.round(message.fl);\n }\n if (message.fr !== 0) {\n obj.fr = Math.round(message.fr);\n }\n if (message.bl !== 0) {\n obj.bl = Math.round(message.bl);\n }\n if (message.br !== 0) {\n obj.br = Math.round(message.br);\n }\n if (message.flEnabled !== false) {\n obj.flEnabled = message.flEnabled;\n }\n if (message.frEnabled !== false) {\n obj.frEnabled = message.frEnabled;\n }\n if (message.blEnabled !== false) {\n obj.blEnabled = message.blEnabled;\n }\n if (message.brEnabled !== false) {\n obj.brEnabled = message.brEnabled;\n }\n return obj;\n },\n\n create, I>>(base?: I): RotaryTicksSnapshot {\n return RotaryTicksSnapshot.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RotaryTicksSnapshot {\n const message = createBaseRotaryTicksSnapshot();\n message.timestampUs = object.timestampUs ?? 0;\n message.fl = object.fl ?? 0;\n message.fr = object.fr ?? 0;\n message.bl = object.bl ?? 0;\n message.br = object.br ?? 0;\n message.flEnabled = object.flEnabled ?? false;\n message.frEnabled = object.frEnabled ?? false;\n message.blEnabled = object.blEnabled ?? false;\n message.brEnabled = object.brEnabled ?? false;\n return message;\n },\n};\n\nfunction createBaseRotaryTicksRecord(): RotaryTicksRecord {\n return { recordTimestampMs: 0, snapshot: undefined };\n}\n\nexport const RotaryTicksRecord: MessageFns = {\n encode(message: RotaryTicksRecord, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordTimestampMs !== 0) {\n writer.uint32(8).uint64(message.recordTimestampMs);\n }\n if (message.snapshot !== undefined) {\n RotaryTicksSnapshot.encode(message.snapshot, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RotaryTicksRecord {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRotaryTicksRecord();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.recordTimestampMs = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.snapshot = RotaryTicksSnapshot.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RotaryTicksRecord {\n return {\n recordTimestampMs: isSet(object.recordTimestampMs) ? globalThis.Number(object.recordTimestampMs) : 0,\n snapshot: isSet(object.snapshot) ? RotaryTicksSnapshot.fromJSON(object.snapshot) : undefined,\n };\n },\n\n toJSON(message: RotaryTicksRecord): unknown {\n const obj: any = {};\n if (message.recordTimestampMs !== 0) {\n obj.recordTimestampMs = Math.round(message.recordTimestampMs);\n }\n if (message.snapshot !== undefined) {\n obj.snapshot = RotaryTicksSnapshot.toJSON(message.snapshot);\n }\n return obj;\n },\n\n create, I>>(base?: I): RotaryTicksRecord {\n return RotaryTicksRecord.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RotaryTicksRecord {\n const message = createBaseRotaryTicksRecord();\n message.recordTimestampMs = object.recordTimestampMs ?? 0;\n message.snapshot = (object.snapshot !== undefined && object.snapshot !== null)\n ? RotaryTicksSnapshot.fromPartial(object.snapshot)\n : undefined;\n return message;\n },\n};\n\nfunction bytesFromBase64(b64: string): Uint8Array {\n if ((globalThis as any).Buffer) {\n return Uint8Array.from(globalThis.Buffer.from(b64, \"base64\"));\n } else {\n const bin = globalThis.atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n }\n}\n\nfunction base64FromBytes(arr: Uint8Array): string {\n if ((globalThis as any).Buffer) {\n return globalThis.Buffer.from(arr).toString(\"base64\");\n } else {\n const bin: string[] = [];\n arr.forEach((byte) => {\n bin.push(globalThis.String.fromCharCode(byte));\n });\n return globalThis.btoa(bin.join(\"\"));\n }\n}\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: frontend/weeding_diagnostics.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { GetDimensionsResponse } from \"../core/controls/exterminator/controllers/aimbot/process/aimbot\";\nimport { DeepweedOutput } from \"../cv/runtime/cv_runtime\";\nimport { DeepweedPredictionRecord, RotaryTicksRecord } from \"../recorder/recorder\";\nimport { ConfigDefinition } from \"../thinning/thinning\";\nimport { Timestamp } from \"../util/util\";\nimport { DiagnosticsSnapshot, TrajectorySnapshot } from \"../weed_tracking/weed_tracking\";\nimport { Annotations } from \"./image_stream\";\n\nexport const protobufPackage = \"carbon.frontend.weeding_diagnostics\";\n\nexport enum UploadState {\n NONE = 0,\n IN_PROGRESS = 1,\n DONE = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function uploadStateFromJSON(object: any): UploadState {\n switch (object) {\n case 0:\n case \"NONE\":\n return UploadState.NONE;\n case 1:\n case \"IN_PROGRESS\":\n return UploadState.IN_PROGRESS;\n case 2:\n case \"DONE\":\n return UploadState.DONE;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return UploadState.UNRECOGNIZED;\n }\n}\n\nexport function uploadStateToJSON(object: UploadState): string {\n switch (object) {\n case UploadState.NONE:\n return \"NONE\";\n case UploadState.IN_PROGRESS:\n return \"IN_PROGRESS\";\n case UploadState.DONE:\n return \"DONE\";\n case UploadState.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface RecordWeedingDiagnosticsRequest {\n name: string;\n ttlSec: number;\n cropImagesPerSec: number;\n weedImagesPerSec: number;\n}\n\nexport interface GetCurrentTrajectoriesRequest {\n rowId: number;\n}\n\nexport interface GetRecordingsListRequest {\n}\n\nexport interface GetRecordingsListResponse {\n name: string[];\n}\n\nexport interface GetSnapshotRequest {\n recordingName: string;\n rowId: number;\n snapshotNumber: number;\n}\n\nexport interface GetSnapshotResponse {\n snapshot: DiagnosticsSnapshot | undefined;\n}\n\nexport interface OpenRecordingRequest {\n recordingName: string;\n}\n\nexport interface TrajectoriesWithImages {\n ids: number[];\n}\n\nexport interface PredictImages {\n names: string[];\n}\n\nexport interface PredictImagesPerCam {\n images: { [key: number]: PredictImages };\n}\n\nexport interface PredictImagesPerCam_ImagesEntry {\n key: number;\n value: PredictImages | undefined;\n}\n\nexport interface OpenRecordingResponse {\n numSnapshotsPerRow: { [key: number]: number };\n recordingData: StaticRecordingData | undefined;\n trajectoryImagesPerRow: { [key: number]: TrajectoriesWithImages };\n predictImagesPerRow: { [key: number]: PredictImagesPerCam };\n}\n\nexport interface OpenRecordingResponse_NumSnapshotsPerRowEntry {\n key: number;\n value: number;\n}\n\nexport interface OpenRecordingResponse_TrajectoryImagesPerRowEntry {\n key: number;\n value: TrajectoriesWithImages | undefined;\n}\n\nexport interface OpenRecordingResponse_PredictImagesPerRowEntry {\n key: number;\n value: PredictImagesPerCam | undefined;\n}\n\nexport interface DeleteRecordingRequest {\n recordingName: string;\n}\n\nexport interface ConfigNodeSnapshot {\n values: { [key: string]: string };\n childNodes: { [key: string]: ConfigNodeSnapshot };\n}\n\nexport interface ConfigNodeSnapshot_ValuesEntry {\n key: string;\n value: string;\n}\n\nexport interface ConfigNodeSnapshot_ChildNodesEntry {\n key: string;\n value: ConfigNodeSnapshot | undefined;\n}\n\nexport interface CameraDimensions {\n width: number;\n height: number;\n}\n\nexport interface RowCameras {\n cams: { [key: string]: CameraDimensions };\n}\n\nexport interface RowCameras_CamsEntry {\n key: string;\n value: CameraDimensions | undefined;\n}\n\nexport interface StaticRecordingData {\n lasersEnabled: { [key: string]: boolean };\n rootConfig: ConfigNodeSnapshot | undefined;\n rowsRecorded: number[];\n rowDimensions: { [key: number]: GetDimensionsResponse };\n cropSafetyRadiusMmPerRow: { [key: number]: number };\n thinningConfig: ConfigDefinition | undefined;\n recordingTimestamp: number;\n rowCameras: { [key: number]: RowCameras };\n weedPointThreshold: number;\n cropPointThreshold: number;\n wheelDiameterBackLeftIn: number;\n wheelDiameterBackRightIn: number;\n wheelDiameterFrontLeftIn: number;\n wheelDiameterFrontRightIn: number;\n}\n\nexport interface StaticRecordingData_LasersEnabledEntry {\n key: string;\n value: boolean;\n}\n\nexport interface StaticRecordingData_RowDimensionsEntry {\n key: number;\n value: GetDimensionsResponse | undefined;\n}\n\nexport interface StaticRecordingData_CropSafetyRadiusMmPerRowEntry {\n key: number;\n value: number;\n}\n\nexport interface StaticRecordingData_RowCamerasEntry {\n key: number;\n value: RowCameras | undefined;\n}\n\nexport interface GetTrajectoryDataRequest {\n recordingName: string;\n rowId: number;\n trajectoryId: number;\n}\n\nexport interface LastSnapshot {\n trajectory: TrajectorySnapshot | undefined;\n diagnosticsSnapshotNumber: number;\n}\n\nexport interface ExtraTrajectoryField {\n label: string;\n value: string;\n color: string;\n}\n\nexport interface TargetImage {\n name: string;\n timestamp: number;\n p2pPredictX: number;\n p2pPredictY: number;\n}\n\nexport interface TrajectoryPredictImageMetadata {\n centerXPx: number;\n centerYPx: number;\n radiusPx: number;\n ts: Timestamp | undefined;\n pcamId: string;\n}\n\nexport interface TrajectoryData {\n predictImage: TrajectoryPredictImageMetadata | undefined;\n targetImages: TargetImage[];\n lastSnapshot: LastSnapshot | undefined;\n extraFields: ExtraTrajectoryField[];\n crosshairX: number;\n crosshairY: number;\n}\n\nexport interface GetTrajectoryPredictImageRequest {\n recordingName: string;\n rowId: number;\n trajectoryId: number;\n}\n\nexport interface GetTrajectoryTargetImageRequest {\n recordingName: string;\n rowId: number;\n trajectoryId: number;\n imageName: string;\n}\n\nexport interface ImageChunk {\n imageChunk: Uint8Array;\n}\n\nexport interface GetPredictImageMetadataRequest {\n recordingName: string;\n rowId: number;\n imageName: string;\n}\n\nexport interface GetPredictImageMetadataResponse {\n ts: Timestamp | undefined;\n annotations: Annotations | undefined;\n deepweedOutput: DeepweedOutput | undefined;\n deepweedOutputBelowThreshold: DeepweedOutput | undefined;\n}\n\nexport interface GetPredictImageRequest {\n recordingName: string;\n rowId: number;\n imageName: string;\n}\n\nexport interface StartUploadRequest {\n recordingName: string;\n}\n\nexport interface GetNextUploadStateRequest {\n recordingName: string;\n ts: Timestamp | undefined;\n}\n\nexport interface GetNextUploadStateResponse {\n uploadState: UploadState;\n ts: Timestamp | undefined;\n percentUploaded: number;\n}\n\nexport interface GetDeepweedPredictionsCountRequest {\n recordingName: string;\n row: number;\n camId: number;\n}\n\nexport interface GetDeepweedPredictionsCountResponse {\n count: number;\n}\n\nexport interface GetDeepweedPredictionsRequest {\n recordingName: string;\n row: number;\n camId: number;\n idx: number;\n}\n\nexport interface GetDeepweedPredictionsResponse {\n predictions: DeepweedPredictionRecord | undefined;\n}\n\nexport interface FindTrajectoryRequest {\n recordingName: string;\n rowId: number;\n trajectoryId: number;\n}\n\nexport interface FindTrajectoryResponse {\n snapshotId: number;\n trajectory: TrajectorySnapshot | undefined;\n}\n\nexport interface GetRotaryTicksRequest {\n recordingName: string;\n rowId: number;\n}\n\nexport interface GetRotaryTicksResponse {\n records: RotaryTicksRecord[];\n wheelEncoderResolution: number;\n}\n\nfunction createBaseRecordWeedingDiagnosticsRequest(): RecordWeedingDiagnosticsRequest {\n return { name: \"\", ttlSec: 0, cropImagesPerSec: 0, weedImagesPerSec: 0 };\n}\n\nexport const RecordWeedingDiagnosticsRequest: MessageFns = {\n encode(message: RecordWeedingDiagnosticsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.ttlSec !== 0) {\n writer.uint32(16).uint32(message.ttlSec);\n }\n if (message.cropImagesPerSec !== 0) {\n writer.uint32(29).float(message.cropImagesPerSec);\n }\n if (message.weedImagesPerSec !== 0) {\n writer.uint32(37).float(message.weedImagesPerSec);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RecordWeedingDiagnosticsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRecordWeedingDiagnosticsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.ttlSec = reader.uint32();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n\n message.cropImagesPerSec = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n\n message.weedImagesPerSec = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RecordWeedingDiagnosticsRequest {\n return {\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n ttlSec: isSet(object.ttlSec) ? globalThis.Number(object.ttlSec) : 0,\n cropImagesPerSec: isSet(object.cropImagesPerSec) ? globalThis.Number(object.cropImagesPerSec) : 0,\n weedImagesPerSec: isSet(object.weedImagesPerSec) ? globalThis.Number(object.weedImagesPerSec) : 0,\n };\n },\n\n toJSON(message: RecordWeedingDiagnosticsRequest): unknown {\n const obj: any = {};\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.ttlSec !== 0) {\n obj.ttlSec = Math.round(message.ttlSec);\n }\n if (message.cropImagesPerSec !== 0) {\n obj.cropImagesPerSec = message.cropImagesPerSec;\n }\n if (message.weedImagesPerSec !== 0) {\n obj.weedImagesPerSec = message.weedImagesPerSec;\n }\n return obj;\n },\n\n create, I>>(base?: I): RecordWeedingDiagnosticsRequest {\n return RecordWeedingDiagnosticsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): RecordWeedingDiagnosticsRequest {\n const message = createBaseRecordWeedingDiagnosticsRequest();\n message.name = object.name ?? \"\";\n message.ttlSec = object.ttlSec ?? 0;\n message.cropImagesPerSec = object.cropImagesPerSec ?? 0;\n message.weedImagesPerSec = object.weedImagesPerSec ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetCurrentTrajectoriesRequest(): GetCurrentTrajectoriesRequest {\n return { rowId: 0 };\n}\n\nexport const GetCurrentTrajectoriesRequest: MessageFns = {\n encode(message: GetCurrentTrajectoriesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.rowId !== 0) {\n writer.uint32(8).uint32(message.rowId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetCurrentTrajectoriesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCurrentTrajectoriesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetCurrentTrajectoriesRequest {\n return { rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0 };\n },\n\n toJSON(message: GetCurrentTrajectoriesRequest): unknown {\n const obj: any = {};\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetCurrentTrajectoriesRequest {\n return GetCurrentTrajectoriesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetCurrentTrajectoriesRequest {\n const message = createBaseGetCurrentTrajectoriesRequest();\n message.rowId = object.rowId ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetRecordingsListRequest(): GetRecordingsListRequest {\n return {};\n}\n\nexport const GetRecordingsListRequest: MessageFns = {\n encode(_: GetRecordingsListRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetRecordingsListRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetRecordingsListRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): GetRecordingsListRequest {\n return {};\n },\n\n toJSON(_: GetRecordingsListRequest): unknown {\n const obj: any = {};\n return obj;\n },\n\n create, I>>(base?: I): GetRecordingsListRequest {\n return GetRecordingsListRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(_: I): GetRecordingsListRequest {\n const message = createBaseGetRecordingsListRequest();\n return message;\n },\n};\n\nfunction createBaseGetRecordingsListResponse(): GetRecordingsListResponse {\n return { name: [] };\n}\n\nexport const GetRecordingsListResponse: MessageFns = {\n encode(message: GetRecordingsListResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.name) {\n writer.uint32(10).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetRecordingsListResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetRecordingsListResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetRecordingsListResponse {\n return { name: globalThis.Array.isArray(object?.name) ? object.name.map((e: any) => globalThis.String(e)) : [] };\n },\n\n toJSON(message: GetRecordingsListResponse): unknown {\n const obj: any = {};\n if (message.name?.length) {\n obj.name = message.name;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetRecordingsListResponse {\n return GetRecordingsListResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetRecordingsListResponse {\n const message = createBaseGetRecordingsListResponse();\n message.name = object.name?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseGetSnapshotRequest(): GetSnapshotRequest {\n return { recordingName: \"\", rowId: 0, snapshotNumber: 0 };\n}\n\nexport const GetSnapshotRequest: MessageFns = {\n encode(message: GetSnapshotRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.rowId !== 0) {\n writer.uint32(16).uint32(message.rowId);\n }\n if (message.snapshotNumber !== 0) {\n writer.uint32(24).uint32(message.snapshotNumber);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetSnapshotRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetSnapshotRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.snapshotNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetSnapshotRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0,\n snapshotNumber: isSet(object.snapshotNumber) ? globalThis.Number(object.snapshotNumber) : 0,\n };\n },\n\n toJSON(message: GetSnapshotRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n if (message.snapshotNumber !== 0) {\n obj.snapshotNumber = Math.round(message.snapshotNumber);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetSnapshotRequest {\n return GetSnapshotRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetSnapshotRequest {\n const message = createBaseGetSnapshotRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.rowId = object.rowId ?? 0;\n message.snapshotNumber = object.snapshotNumber ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetSnapshotResponse(): GetSnapshotResponse {\n return { snapshot: undefined };\n}\n\nexport const GetSnapshotResponse: MessageFns = {\n encode(message: GetSnapshotResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.snapshot !== undefined) {\n DiagnosticsSnapshot.encode(message.snapshot, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetSnapshotResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetSnapshotResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.snapshot = DiagnosticsSnapshot.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetSnapshotResponse {\n return { snapshot: isSet(object.snapshot) ? DiagnosticsSnapshot.fromJSON(object.snapshot) : undefined };\n },\n\n toJSON(message: GetSnapshotResponse): unknown {\n const obj: any = {};\n if (message.snapshot !== undefined) {\n obj.snapshot = DiagnosticsSnapshot.toJSON(message.snapshot);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetSnapshotResponse {\n return GetSnapshotResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetSnapshotResponse {\n const message = createBaseGetSnapshotResponse();\n message.snapshot = (object.snapshot !== undefined && object.snapshot !== null)\n ? DiagnosticsSnapshot.fromPartial(object.snapshot)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseOpenRecordingRequest(): OpenRecordingRequest {\n return { recordingName: \"\" };\n}\n\nexport const OpenRecordingRequest: MessageFns = {\n encode(message: OpenRecordingRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): OpenRecordingRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseOpenRecordingRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): OpenRecordingRequest {\n return { recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\" };\n },\n\n toJSON(message: OpenRecordingRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n return obj;\n },\n\n create, I>>(base?: I): OpenRecordingRequest {\n return OpenRecordingRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): OpenRecordingRequest {\n const message = createBaseOpenRecordingRequest();\n message.recordingName = object.recordingName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTrajectoriesWithImages(): TrajectoriesWithImages {\n return { ids: [] };\n}\n\nexport const TrajectoriesWithImages: MessageFns = {\n encode(message: TrajectoriesWithImages, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n writer.uint32(10).fork();\n for (const v of message.ids) {\n writer.uint32(v);\n }\n writer.join();\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrajectoriesWithImages {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrajectoriesWithImages();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 8) {\n message.ids.push(reader.uint32());\n\n continue;\n }\n\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.ids.push(reader.uint32());\n }\n\n continue;\n }\n\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrajectoriesWithImages {\n return { ids: globalThis.Array.isArray(object?.ids) ? object.ids.map((e: any) => globalThis.Number(e)) : [] };\n },\n\n toJSON(message: TrajectoriesWithImages): unknown {\n const obj: any = {};\n if (message.ids?.length) {\n obj.ids = message.ids.map((e) => Math.round(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): TrajectoriesWithImages {\n return TrajectoriesWithImages.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrajectoriesWithImages {\n const message = createBaseTrajectoriesWithImages();\n message.ids = object.ids?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBasePredictImages(): PredictImages {\n return { names: [] };\n}\n\nexport const PredictImages: MessageFns = {\n encode(message: PredictImages, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.names) {\n writer.uint32(10).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PredictImages {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePredictImages();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.names.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PredictImages {\n return { names: globalThis.Array.isArray(object?.names) ? object.names.map((e: any) => globalThis.String(e)) : [] };\n },\n\n toJSON(message: PredictImages): unknown {\n const obj: any = {};\n if (message.names?.length) {\n obj.names = message.names;\n }\n return obj;\n },\n\n create, I>>(base?: I): PredictImages {\n return PredictImages.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PredictImages {\n const message = createBasePredictImages();\n message.names = object.names?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBasePredictImagesPerCam(): PredictImagesPerCam {\n return { images: {} };\n}\n\nexport const PredictImagesPerCam: MessageFns = {\n encode(message: PredictImagesPerCam, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.images).forEach(([key, value]) => {\n PredictImagesPerCam_ImagesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PredictImagesPerCam {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePredictImagesPerCam();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = PredictImagesPerCam_ImagesEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.images[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PredictImagesPerCam {\n return {\n images: isObject(object.images)\n ? Object.entries(object.images).reduce<{ [key: number]: PredictImages }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = PredictImages.fromJSON(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: PredictImagesPerCam): unknown {\n const obj: any = {};\n if (message.images) {\n const entries = Object.entries(message.images);\n if (entries.length > 0) {\n obj.images = {};\n entries.forEach(([k, v]) => {\n obj.images[k] = PredictImages.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): PredictImagesPerCam {\n return PredictImagesPerCam.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PredictImagesPerCam {\n const message = createBasePredictImagesPerCam();\n message.images = Object.entries(object.images ?? {}).reduce<{ [key: number]: PredictImages }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = PredictImages.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBasePredictImagesPerCam_ImagesEntry(): PredictImagesPerCam_ImagesEntry {\n return { key: 0, value: undefined };\n}\n\nexport const PredictImagesPerCam_ImagesEntry: MessageFns = {\n encode(message: PredictImagesPerCam_ImagesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).int32(message.key);\n }\n if (message.value !== undefined) {\n PredictImages.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PredictImagesPerCam_ImagesEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePredictImagesPerCam_ImagesEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = PredictImages.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PredictImagesPerCam_ImagesEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? PredictImages.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: PredictImagesPerCam_ImagesEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== undefined) {\n obj.value = PredictImages.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(base?: I): PredictImagesPerCam_ImagesEntry {\n return PredictImagesPerCam_ImagesEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): PredictImagesPerCam_ImagesEntry {\n const message = createBasePredictImagesPerCam_ImagesEntry();\n message.key = object.key ?? 0;\n message.value = (object.value !== undefined && object.value !== null)\n ? PredictImages.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseOpenRecordingResponse(): OpenRecordingResponse {\n return { numSnapshotsPerRow: {}, recordingData: undefined, trajectoryImagesPerRow: {}, predictImagesPerRow: {} };\n}\n\nexport const OpenRecordingResponse: MessageFns = {\n encode(message: OpenRecordingResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.numSnapshotsPerRow).forEach(([key, value]) => {\n OpenRecordingResponse_NumSnapshotsPerRowEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n if (message.recordingData !== undefined) {\n StaticRecordingData.encode(message.recordingData, writer.uint32(18).fork()).join();\n }\n Object.entries(message.trajectoryImagesPerRow).forEach(([key, value]) => {\n OpenRecordingResponse_TrajectoryImagesPerRowEntry.encode({ key: key as any, value }, writer.uint32(26).fork())\n .join();\n });\n Object.entries(message.predictImagesPerRow).forEach(([key, value]) => {\n OpenRecordingResponse_PredictImagesPerRowEntry.encode({ key: key as any, value }, writer.uint32(34).fork())\n .join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): OpenRecordingResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseOpenRecordingResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = OpenRecordingResponse_NumSnapshotsPerRowEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.numSnapshotsPerRow[entry1.key] = entry1.value;\n }\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.recordingData = StaticRecordingData.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n const entry3 = OpenRecordingResponse_TrajectoryImagesPerRowEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.trajectoryImagesPerRow[entry3.key] = entry3.value;\n }\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n const entry4 = OpenRecordingResponse_PredictImagesPerRowEntry.decode(reader, reader.uint32());\n if (entry4.value !== undefined) {\n message.predictImagesPerRow[entry4.key] = entry4.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): OpenRecordingResponse {\n return {\n numSnapshotsPerRow: isObject(object.numSnapshotsPerRow)\n ? Object.entries(object.numSnapshotsPerRow).reduce<{ [key: number]: number }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = Number(value);\n return acc;\n }, {})\n : {},\n recordingData: isSet(object.recordingData) ? StaticRecordingData.fromJSON(object.recordingData) : undefined,\n trajectoryImagesPerRow: isObject(object.trajectoryImagesPerRow)\n ? Object.entries(object.trajectoryImagesPerRow).reduce<{ [key: number]: TrajectoriesWithImages }>(\n (acc, [key, value]) => {\n acc[globalThis.Number(key)] = TrajectoriesWithImages.fromJSON(value);\n return acc;\n },\n {},\n )\n : {},\n predictImagesPerRow: isObject(object.predictImagesPerRow)\n ? Object.entries(object.predictImagesPerRow).reduce<{ [key: number]: PredictImagesPerCam }>(\n (acc, [key, value]) => {\n acc[globalThis.Number(key)] = PredictImagesPerCam.fromJSON(value);\n return acc;\n },\n {},\n )\n : {},\n };\n },\n\n toJSON(message: OpenRecordingResponse): unknown {\n const obj: any = {};\n if (message.numSnapshotsPerRow) {\n const entries = Object.entries(message.numSnapshotsPerRow);\n if (entries.length > 0) {\n obj.numSnapshotsPerRow = {};\n entries.forEach(([k, v]) => {\n obj.numSnapshotsPerRow[k] = Math.round(v);\n });\n }\n }\n if (message.recordingData !== undefined) {\n obj.recordingData = StaticRecordingData.toJSON(message.recordingData);\n }\n if (message.trajectoryImagesPerRow) {\n const entries = Object.entries(message.trajectoryImagesPerRow);\n if (entries.length > 0) {\n obj.trajectoryImagesPerRow = {};\n entries.forEach(([k, v]) => {\n obj.trajectoryImagesPerRow[k] = TrajectoriesWithImages.toJSON(v);\n });\n }\n }\n if (message.predictImagesPerRow) {\n const entries = Object.entries(message.predictImagesPerRow);\n if (entries.length > 0) {\n obj.predictImagesPerRow = {};\n entries.forEach(([k, v]) => {\n obj.predictImagesPerRow[k] = PredictImagesPerCam.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): OpenRecordingResponse {\n return OpenRecordingResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): OpenRecordingResponse {\n const message = createBaseOpenRecordingResponse();\n message.numSnapshotsPerRow = Object.entries(object.numSnapshotsPerRow ?? {}).reduce<{ [key: number]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n message.recordingData = (object.recordingData !== undefined && object.recordingData !== null)\n ? StaticRecordingData.fromPartial(object.recordingData)\n : undefined;\n message.trajectoryImagesPerRow = Object.entries(object.trajectoryImagesPerRow ?? {}).reduce<\n { [key: number]: TrajectoriesWithImages }\n >((acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = TrajectoriesWithImages.fromPartial(value);\n }\n return acc;\n }, {});\n message.predictImagesPerRow = Object.entries(object.predictImagesPerRow ?? {}).reduce<\n { [key: number]: PredictImagesPerCam }\n >((acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = PredictImagesPerCam.fromPartial(value);\n }\n return acc;\n }, {});\n return message;\n },\n};\n\nfunction createBaseOpenRecordingResponse_NumSnapshotsPerRowEntry(): OpenRecordingResponse_NumSnapshotsPerRowEntry {\n return { key: 0, value: 0 };\n}\n\nexport const OpenRecordingResponse_NumSnapshotsPerRowEntry: MessageFns =\n {\n encode(\n message: OpenRecordingResponse_NumSnapshotsPerRowEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).uint32(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(16).uint32(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): OpenRecordingResponse_NumSnapshotsPerRowEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseOpenRecordingResponse_NumSnapshotsPerRowEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.value = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): OpenRecordingResponse_NumSnapshotsPerRowEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: OpenRecordingResponse_NumSnapshotsPerRowEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== 0) {\n obj.value = Math.round(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): OpenRecordingResponse_NumSnapshotsPerRowEntry {\n return OpenRecordingResponse_NumSnapshotsPerRowEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): OpenRecordingResponse_NumSnapshotsPerRowEntry {\n const message = createBaseOpenRecordingResponse_NumSnapshotsPerRowEntry();\n message.key = object.key ?? 0;\n message.value = object.value ?? 0;\n return message;\n },\n };\n\nfunction createBaseOpenRecordingResponse_TrajectoryImagesPerRowEntry(): OpenRecordingResponse_TrajectoryImagesPerRowEntry {\n return { key: 0, value: undefined };\n}\n\nexport const OpenRecordingResponse_TrajectoryImagesPerRowEntry: MessageFns<\n OpenRecordingResponse_TrajectoryImagesPerRowEntry\n> = {\n encode(\n message: OpenRecordingResponse_TrajectoryImagesPerRowEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).uint32(message.key);\n }\n if (message.value !== undefined) {\n TrajectoriesWithImages.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): OpenRecordingResponse_TrajectoryImagesPerRowEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseOpenRecordingResponse_TrajectoryImagesPerRowEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = TrajectoriesWithImages.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): OpenRecordingResponse_TrajectoryImagesPerRowEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? TrajectoriesWithImages.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: OpenRecordingResponse_TrajectoryImagesPerRowEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== undefined) {\n obj.value = TrajectoriesWithImages.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): OpenRecordingResponse_TrajectoryImagesPerRowEntry {\n return OpenRecordingResponse_TrajectoryImagesPerRowEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): OpenRecordingResponse_TrajectoryImagesPerRowEntry {\n const message = createBaseOpenRecordingResponse_TrajectoryImagesPerRowEntry();\n message.key = object.key ?? 0;\n message.value = (object.value !== undefined && object.value !== null)\n ? TrajectoriesWithImages.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseOpenRecordingResponse_PredictImagesPerRowEntry(): OpenRecordingResponse_PredictImagesPerRowEntry {\n return { key: 0, value: undefined };\n}\n\nexport const OpenRecordingResponse_PredictImagesPerRowEntry: MessageFns<\n OpenRecordingResponse_PredictImagesPerRowEntry\n> = {\n encode(\n message: OpenRecordingResponse_PredictImagesPerRowEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).uint32(message.key);\n }\n if (message.value !== undefined) {\n PredictImagesPerCam.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): OpenRecordingResponse_PredictImagesPerRowEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseOpenRecordingResponse_PredictImagesPerRowEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = PredictImagesPerCam.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): OpenRecordingResponse_PredictImagesPerRowEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? PredictImagesPerCam.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: OpenRecordingResponse_PredictImagesPerRowEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== undefined) {\n obj.value = PredictImagesPerCam.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): OpenRecordingResponse_PredictImagesPerRowEntry {\n return OpenRecordingResponse_PredictImagesPerRowEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): OpenRecordingResponse_PredictImagesPerRowEntry {\n const message = createBaseOpenRecordingResponse_PredictImagesPerRowEntry();\n message.key = object.key ?? 0;\n message.value = (object.value !== undefined && object.value !== null)\n ? PredictImagesPerCam.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseDeleteRecordingRequest(): DeleteRecordingRequest {\n return { recordingName: \"\" };\n}\n\nexport const DeleteRecordingRequest: MessageFns = {\n encode(message: DeleteRecordingRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeleteRecordingRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeleteRecordingRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeleteRecordingRequest {\n return { recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\" };\n },\n\n toJSON(message: DeleteRecordingRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n return obj;\n },\n\n create, I>>(base?: I): DeleteRecordingRequest {\n return DeleteRecordingRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeleteRecordingRequest {\n const message = createBaseDeleteRecordingRequest();\n message.recordingName = object.recordingName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseConfigNodeSnapshot(): ConfigNodeSnapshot {\n return { values: {}, childNodes: {} };\n}\n\nexport const ConfigNodeSnapshot: MessageFns = {\n encode(message: ConfigNodeSnapshot, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.values).forEach(([key, value]) => {\n ConfigNodeSnapshot_ValuesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n Object.entries(message.childNodes).forEach(([key, value]) => {\n ConfigNodeSnapshot_ChildNodesEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ConfigNodeSnapshot {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConfigNodeSnapshot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = ConfigNodeSnapshot_ValuesEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.values[entry1.key] = entry1.value;\n }\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n const entry2 = ConfigNodeSnapshot_ChildNodesEntry.decode(reader, reader.uint32());\n if (entry2.value !== undefined) {\n message.childNodes[entry2.key] = entry2.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ConfigNodeSnapshot {\n return {\n values: isObject(object.values)\n ? Object.entries(object.values).reduce<{ [key: string]: string }>((acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n }, {})\n : {},\n childNodes: isObject(object.childNodes)\n ? Object.entries(object.childNodes).reduce<{ [key: string]: ConfigNodeSnapshot }>((acc, [key, value]) => {\n acc[key] = ConfigNodeSnapshot.fromJSON(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: ConfigNodeSnapshot): unknown {\n const obj: any = {};\n if (message.values) {\n const entries = Object.entries(message.values);\n if (entries.length > 0) {\n obj.values = {};\n entries.forEach(([k, v]) => {\n obj.values[k] = v;\n });\n }\n }\n if (message.childNodes) {\n const entries = Object.entries(message.childNodes);\n if (entries.length > 0) {\n obj.childNodes = {};\n entries.forEach(([k, v]) => {\n obj.childNodes[k] = ConfigNodeSnapshot.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): ConfigNodeSnapshot {\n return ConfigNodeSnapshot.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ConfigNodeSnapshot {\n const message = createBaseConfigNodeSnapshot();\n message.values = Object.entries(object.values ?? {}).reduce<{ [key: string]: string }>((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.String(value);\n }\n return acc;\n }, {});\n message.childNodes = Object.entries(object.childNodes ?? {}).reduce<{ [key: string]: ConfigNodeSnapshot }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = ConfigNodeSnapshot.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseConfigNodeSnapshot_ValuesEntry(): ConfigNodeSnapshot_ValuesEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const ConfigNodeSnapshot_ValuesEntry: MessageFns = {\n encode(message: ConfigNodeSnapshot_ValuesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ConfigNodeSnapshot_ValuesEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConfigNodeSnapshot_ValuesEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ConfigNodeSnapshot_ValuesEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n };\n },\n\n toJSON(message: ConfigNodeSnapshot_ValuesEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(base?: I): ConfigNodeSnapshot_ValuesEntry {\n return ConfigNodeSnapshot_ValuesEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): ConfigNodeSnapshot_ValuesEntry {\n const message = createBaseConfigNodeSnapshot_ValuesEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseConfigNodeSnapshot_ChildNodesEntry(): ConfigNodeSnapshot_ChildNodesEntry {\n return { key: \"\", value: undefined };\n}\n\nexport const ConfigNodeSnapshot_ChildNodesEntry: MessageFns = {\n encode(message: ConfigNodeSnapshot_ChildNodesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n ConfigNodeSnapshot.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ConfigNodeSnapshot_ChildNodesEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConfigNodeSnapshot_ChildNodesEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = ConfigNodeSnapshot.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ConfigNodeSnapshot_ChildNodesEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? ConfigNodeSnapshot.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: ConfigNodeSnapshot_ChildNodesEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== undefined) {\n obj.value = ConfigNodeSnapshot.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): ConfigNodeSnapshot_ChildNodesEntry {\n return ConfigNodeSnapshot_ChildNodesEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): ConfigNodeSnapshot_ChildNodesEntry {\n const message = createBaseConfigNodeSnapshot_ChildNodesEntry();\n message.key = object.key ?? \"\";\n message.value = (object.value !== undefined && object.value !== null)\n ? ConfigNodeSnapshot.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseCameraDimensions(): CameraDimensions {\n return { width: 0, height: 0 };\n}\n\nexport const CameraDimensions: MessageFns = {\n encode(message: CameraDimensions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.width !== 0) {\n writer.uint32(8).uint32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(16).uint32(message.height);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CameraDimensions {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCameraDimensions();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.width = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.height = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CameraDimensions {\n return {\n width: isSet(object.width) ? globalThis.Number(object.width) : 0,\n height: isSet(object.height) ? globalThis.Number(object.height) : 0,\n };\n },\n\n toJSON(message: CameraDimensions): unknown {\n const obj: any = {};\n if (message.width !== 0) {\n obj.width = Math.round(message.width);\n }\n if (message.height !== 0) {\n obj.height = Math.round(message.height);\n }\n return obj;\n },\n\n create, I>>(base?: I): CameraDimensions {\n return CameraDimensions.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CameraDimensions {\n const message = createBaseCameraDimensions();\n message.width = object.width ?? 0;\n message.height = object.height ?? 0;\n return message;\n },\n};\n\nfunction createBaseRowCameras(): RowCameras {\n return { cams: {} };\n}\n\nexport const RowCameras: MessageFns = {\n encode(message: RowCameras, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.cams).forEach(([key, value]) => {\n RowCameras_CamsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RowCameras {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRowCameras();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = RowCameras_CamsEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.cams[entry1.key] = entry1.value;\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RowCameras {\n return {\n cams: isObject(object.cams)\n ? Object.entries(object.cams).reduce<{ [key: string]: CameraDimensions }>((acc, [key, value]) => {\n acc[key] = CameraDimensions.fromJSON(value);\n return acc;\n }, {})\n : {},\n };\n },\n\n toJSON(message: RowCameras): unknown {\n const obj: any = {};\n if (message.cams) {\n const entries = Object.entries(message.cams);\n if (entries.length > 0) {\n obj.cams = {};\n entries.forEach(([k, v]) => {\n obj.cams[k] = CameraDimensions.toJSON(v);\n });\n }\n }\n return obj;\n },\n\n create, I>>(base?: I): RowCameras {\n return RowCameras.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RowCameras {\n const message = createBaseRowCameras();\n message.cams = Object.entries(object.cams ?? {}).reduce<{ [key: string]: CameraDimensions }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = CameraDimensions.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n return message;\n },\n};\n\nfunction createBaseRowCameras_CamsEntry(): RowCameras_CamsEntry {\n return { key: \"\", value: undefined };\n}\n\nexport const RowCameras_CamsEntry: MessageFns = {\n encode(message: RowCameras_CamsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n CameraDimensions.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RowCameras_CamsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRowCameras_CamsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = CameraDimensions.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RowCameras_CamsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? CameraDimensions.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: RowCameras_CamsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== undefined) {\n obj.value = CameraDimensions.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(base?: I): RowCameras_CamsEntry {\n return RowCameras_CamsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RowCameras_CamsEntry {\n const message = createBaseRowCameras_CamsEntry();\n message.key = object.key ?? \"\";\n message.value = (object.value !== undefined && object.value !== null)\n ? CameraDimensions.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseStaticRecordingData(): StaticRecordingData {\n return {\n lasersEnabled: {},\n rootConfig: undefined,\n rowsRecorded: [],\n rowDimensions: {},\n cropSafetyRadiusMmPerRow: {},\n thinningConfig: undefined,\n recordingTimestamp: 0,\n rowCameras: {},\n weedPointThreshold: 0,\n cropPointThreshold: 0,\n wheelDiameterBackLeftIn: 0,\n wheelDiameterBackRightIn: 0,\n wheelDiameterFrontLeftIn: 0,\n wheelDiameterFrontRightIn: 0,\n };\n}\n\nexport const StaticRecordingData: MessageFns = {\n encode(message: StaticRecordingData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.lasersEnabled).forEach(([key, value]) => {\n StaticRecordingData_LasersEnabledEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n if (message.rootConfig !== undefined) {\n ConfigNodeSnapshot.encode(message.rootConfig, writer.uint32(18).fork()).join();\n }\n writer.uint32(26).fork();\n for (const v of message.rowsRecorded) {\n writer.int32(v);\n }\n writer.join();\n Object.entries(message.rowDimensions).forEach(([key, value]) => {\n StaticRecordingData_RowDimensionsEntry.encode({ key: key as any, value }, writer.uint32(34).fork()).join();\n });\n Object.entries(message.cropSafetyRadiusMmPerRow).forEach(([key, value]) => {\n StaticRecordingData_CropSafetyRadiusMmPerRowEntry.encode({ key: key as any, value }, writer.uint32(42).fork())\n .join();\n });\n if (message.thinningConfig !== undefined) {\n ConfigDefinition.encode(message.thinningConfig, writer.uint32(50).fork()).join();\n }\n if (message.recordingTimestamp !== 0) {\n writer.uint32(56).int64(message.recordingTimestamp);\n }\n Object.entries(message.rowCameras).forEach(([key, value]) => {\n StaticRecordingData_RowCamerasEntry.encode({ key: key as any, value }, writer.uint32(66).fork()).join();\n });\n if (message.weedPointThreshold !== 0) {\n writer.uint32(77).float(message.weedPointThreshold);\n }\n if (message.cropPointThreshold !== 0) {\n writer.uint32(85).float(message.cropPointThreshold);\n }\n if (message.wheelDiameterBackLeftIn !== 0) {\n writer.uint32(93).float(message.wheelDiameterBackLeftIn);\n }\n if (message.wheelDiameterBackRightIn !== 0) {\n writer.uint32(101).float(message.wheelDiameterBackRightIn);\n }\n if (message.wheelDiameterFrontLeftIn !== 0) {\n writer.uint32(109).float(message.wheelDiameterFrontLeftIn);\n }\n if (message.wheelDiameterFrontRightIn !== 0) {\n writer.uint32(117).float(message.wheelDiameterFrontRightIn);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StaticRecordingData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStaticRecordingData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n const entry1 = StaticRecordingData_LasersEnabledEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.lasersEnabled[entry1.key] = entry1.value;\n }\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.rootConfig = ConfigNodeSnapshot.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag === 24) {\n message.rowsRecorded.push(reader.int32());\n\n continue;\n }\n\n if (tag === 26) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.rowsRecorded.push(reader.int32());\n }\n\n continue;\n }\n\n break;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n const entry4 = StaticRecordingData_RowDimensionsEntry.decode(reader, reader.uint32());\n if (entry4.value !== undefined) {\n message.rowDimensions[entry4.key] = entry4.value;\n }\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n const entry5 = StaticRecordingData_CropSafetyRadiusMmPerRowEntry.decode(reader, reader.uint32());\n if (entry5.value !== undefined) {\n message.cropSafetyRadiusMmPerRow[entry5.key] = entry5.value;\n }\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.thinningConfig = ConfigDefinition.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.recordingTimestamp = longToNumber(reader.int64());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n const entry8 = StaticRecordingData_RowCamerasEntry.decode(reader, reader.uint32());\n if (entry8.value !== undefined) {\n message.rowCameras[entry8.key] = entry8.value;\n }\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n\n message.weedPointThreshold = reader.float();\n continue;\n case 10:\n if (tag !== 85) {\n break;\n }\n\n message.cropPointThreshold = reader.float();\n continue;\n case 11:\n if (tag !== 93) {\n break;\n }\n\n message.wheelDiameterBackLeftIn = reader.float();\n continue;\n case 12:\n if (tag !== 101) {\n break;\n }\n\n message.wheelDiameterBackRightIn = reader.float();\n continue;\n case 13:\n if (tag !== 109) {\n break;\n }\n\n message.wheelDiameterFrontLeftIn = reader.float();\n continue;\n case 14:\n if (tag !== 117) {\n break;\n }\n\n message.wheelDiameterFrontRightIn = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StaticRecordingData {\n return {\n lasersEnabled: isObject(object.lasersEnabled)\n ? Object.entries(object.lasersEnabled).reduce<{ [key: string]: boolean }>((acc, [key, value]) => {\n acc[key] = Boolean(value);\n return acc;\n }, {})\n : {},\n rootConfig: isSet(object.rootConfig) ? ConfigNodeSnapshot.fromJSON(object.rootConfig) : undefined,\n rowsRecorded: globalThis.Array.isArray(object?.rowsRecorded)\n ? object.rowsRecorded.map((e: any) => globalThis.Number(e))\n : [],\n rowDimensions: isObject(object.rowDimensions)\n ? Object.entries(object.rowDimensions).reduce<{ [key: number]: GetDimensionsResponse }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = GetDimensionsResponse.fromJSON(value);\n return acc;\n }, {})\n : {},\n cropSafetyRadiusMmPerRow: isObject(object.cropSafetyRadiusMmPerRow)\n ? Object.entries(object.cropSafetyRadiusMmPerRow).reduce<{ [key: number]: number }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = Number(value);\n return acc;\n }, {})\n : {},\n thinningConfig: isSet(object.thinningConfig) ? ConfigDefinition.fromJSON(object.thinningConfig) : undefined,\n recordingTimestamp: isSet(object.recordingTimestamp) ? globalThis.Number(object.recordingTimestamp) : 0,\n rowCameras: isObject(object.rowCameras)\n ? Object.entries(object.rowCameras).reduce<{ [key: number]: RowCameras }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = RowCameras.fromJSON(value);\n return acc;\n }, {})\n : {},\n weedPointThreshold: isSet(object.weedPointThreshold) ? globalThis.Number(object.weedPointThreshold) : 0,\n cropPointThreshold: isSet(object.cropPointThreshold) ? globalThis.Number(object.cropPointThreshold) : 0,\n wheelDiameterBackLeftIn: isSet(object.wheelDiameterBackLeftIn)\n ? globalThis.Number(object.wheelDiameterBackLeftIn)\n : 0,\n wheelDiameterBackRightIn: isSet(object.wheelDiameterBackRightIn)\n ? globalThis.Number(object.wheelDiameterBackRightIn)\n : 0,\n wheelDiameterFrontLeftIn: isSet(object.wheelDiameterFrontLeftIn)\n ? globalThis.Number(object.wheelDiameterFrontLeftIn)\n : 0,\n wheelDiameterFrontRightIn: isSet(object.wheelDiameterFrontRightIn)\n ? globalThis.Number(object.wheelDiameterFrontRightIn)\n : 0,\n };\n },\n\n toJSON(message: StaticRecordingData): unknown {\n const obj: any = {};\n if (message.lasersEnabled) {\n const entries = Object.entries(message.lasersEnabled);\n if (entries.length > 0) {\n obj.lasersEnabled = {};\n entries.forEach(([k, v]) => {\n obj.lasersEnabled[k] = v;\n });\n }\n }\n if (message.rootConfig !== undefined) {\n obj.rootConfig = ConfigNodeSnapshot.toJSON(message.rootConfig);\n }\n if (message.rowsRecorded?.length) {\n obj.rowsRecorded = message.rowsRecorded.map((e) => Math.round(e));\n }\n if (message.rowDimensions) {\n const entries = Object.entries(message.rowDimensions);\n if (entries.length > 0) {\n obj.rowDimensions = {};\n entries.forEach(([k, v]) => {\n obj.rowDimensions[k] = GetDimensionsResponse.toJSON(v);\n });\n }\n }\n if (message.cropSafetyRadiusMmPerRow) {\n const entries = Object.entries(message.cropSafetyRadiusMmPerRow);\n if (entries.length > 0) {\n obj.cropSafetyRadiusMmPerRow = {};\n entries.forEach(([k, v]) => {\n obj.cropSafetyRadiusMmPerRow[k] = v;\n });\n }\n }\n if (message.thinningConfig !== undefined) {\n obj.thinningConfig = ConfigDefinition.toJSON(message.thinningConfig);\n }\n if (message.recordingTimestamp !== 0) {\n obj.recordingTimestamp = Math.round(message.recordingTimestamp);\n }\n if (message.rowCameras) {\n const entries = Object.entries(message.rowCameras);\n if (entries.length > 0) {\n obj.rowCameras = {};\n entries.forEach(([k, v]) => {\n obj.rowCameras[k] = RowCameras.toJSON(v);\n });\n }\n }\n if (message.weedPointThreshold !== 0) {\n obj.weedPointThreshold = message.weedPointThreshold;\n }\n if (message.cropPointThreshold !== 0) {\n obj.cropPointThreshold = message.cropPointThreshold;\n }\n if (message.wheelDiameterBackLeftIn !== 0) {\n obj.wheelDiameterBackLeftIn = message.wheelDiameterBackLeftIn;\n }\n if (message.wheelDiameterBackRightIn !== 0) {\n obj.wheelDiameterBackRightIn = message.wheelDiameterBackRightIn;\n }\n if (message.wheelDiameterFrontLeftIn !== 0) {\n obj.wheelDiameterFrontLeftIn = message.wheelDiameterFrontLeftIn;\n }\n if (message.wheelDiameterFrontRightIn !== 0) {\n obj.wheelDiameterFrontRightIn = message.wheelDiameterFrontRightIn;\n }\n return obj;\n },\n\n create, I>>(base?: I): StaticRecordingData {\n return StaticRecordingData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): StaticRecordingData {\n const message = createBaseStaticRecordingData();\n message.lasersEnabled = Object.entries(object.lasersEnabled ?? {}).reduce<{ [key: string]: boolean }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Boolean(value);\n }\n return acc;\n },\n {},\n );\n message.rootConfig = (object.rootConfig !== undefined && object.rootConfig !== null)\n ? ConfigNodeSnapshot.fromPartial(object.rootConfig)\n : undefined;\n message.rowsRecorded = object.rowsRecorded?.map((e) => e) || [];\n message.rowDimensions = Object.entries(object.rowDimensions ?? {}).reduce<{ [key: number]: GetDimensionsResponse }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = GetDimensionsResponse.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n message.cropSafetyRadiusMmPerRow = Object.entries(object.cropSafetyRadiusMmPerRow ?? {}).reduce<\n { [key: number]: number }\n >((acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = globalThis.Number(value);\n }\n return acc;\n }, {});\n message.thinningConfig = (object.thinningConfig !== undefined && object.thinningConfig !== null)\n ? ConfigDefinition.fromPartial(object.thinningConfig)\n : undefined;\n message.recordingTimestamp = object.recordingTimestamp ?? 0;\n message.rowCameras = Object.entries(object.rowCameras ?? {}).reduce<{ [key: number]: RowCameras }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = RowCameras.fromPartial(value);\n }\n return acc;\n },\n {},\n );\n message.weedPointThreshold = object.weedPointThreshold ?? 0;\n message.cropPointThreshold = object.cropPointThreshold ?? 0;\n message.wheelDiameterBackLeftIn = object.wheelDiameterBackLeftIn ?? 0;\n message.wheelDiameterBackRightIn = object.wheelDiameterBackRightIn ?? 0;\n message.wheelDiameterFrontLeftIn = object.wheelDiameterFrontLeftIn ?? 0;\n message.wheelDiameterFrontRightIn = object.wheelDiameterFrontRightIn ?? 0;\n return message;\n },\n};\n\nfunction createBaseStaticRecordingData_LasersEnabledEntry(): StaticRecordingData_LasersEnabledEntry {\n return { key: \"\", value: false };\n}\n\nexport const StaticRecordingData_LasersEnabledEntry: MessageFns = {\n encode(message: StaticRecordingData_LasersEnabledEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== false) {\n writer.uint32(16).bool(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StaticRecordingData_LasersEnabledEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStaticRecordingData_LasersEnabledEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.value = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StaticRecordingData_LasersEnabledEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Boolean(object.value) : false,\n };\n },\n\n toJSON(message: StaticRecordingData_LasersEnabledEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== false) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): StaticRecordingData_LasersEnabledEntry {\n return StaticRecordingData_LasersEnabledEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): StaticRecordingData_LasersEnabledEntry {\n const message = createBaseStaticRecordingData_LasersEnabledEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? false;\n return message;\n },\n};\n\nfunction createBaseStaticRecordingData_RowDimensionsEntry(): StaticRecordingData_RowDimensionsEntry {\n return { key: 0, value: undefined };\n}\n\nexport const StaticRecordingData_RowDimensionsEntry: MessageFns = {\n encode(message: StaticRecordingData_RowDimensionsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).uint32(message.key);\n }\n if (message.value !== undefined) {\n GetDimensionsResponse.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StaticRecordingData_RowDimensionsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStaticRecordingData_RowDimensionsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = GetDimensionsResponse.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StaticRecordingData_RowDimensionsEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? GetDimensionsResponse.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: StaticRecordingData_RowDimensionsEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== undefined) {\n obj.value = GetDimensionsResponse.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): StaticRecordingData_RowDimensionsEntry {\n return StaticRecordingData_RowDimensionsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): StaticRecordingData_RowDimensionsEntry {\n const message = createBaseStaticRecordingData_RowDimensionsEntry();\n message.key = object.key ?? 0;\n message.value = (object.value !== undefined && object.value !== null)\n ? GetDimensionsResponse.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseStaticRecordingData_CropSafetyRadiusMmPerRowEntry(): StaticRecordingData_CropSafetyRadiusMmPerRowEntry {\n return { key: 0, value: 0 };\n}\n\nexport const StaticRecordingData_CropSafetyRadiusMmPerRowEntry: MessageFns<\n StaticRecordingData_CropSafetyRadiusMmPerRowEntry\n> = {\n encode(\n message: StaticRecordingData_CropSafetyRadiusMmPerRowEntry,\n writer: BinaryWriter = new BinaryWriter(),\n ): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).uint32(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(21).float(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StaticRecordingData_CropSafetyRadiusMmPerRowEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStaticRecordingData_CropSafetyRadiusMmPerRowEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.uint32();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.value = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StaticRecordingData_CropSafetyRadiusMmPerRowEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: StaticRecordingData_CropSafetyRadiusMmPerRowEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== 0) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): StaticRecordingData_CropSafetyRadiusMmPerRowEntry {\n return StaticRecordingData_CropSafetyRadiusMmPerRowEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): StaticRecordingData_CropSafetyRadiusMmPerRowEntry {\n const message = createBaseStaticRecordingData_CropSafetyRadiusMmPerRowEntry();\n message.key = object.key ?? 0;\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseStaticRecordingData_RowCamerasEntry(): StaticRecordingData_RowCamerasEntry {\n return { key: 0, value: undefined };\n}\n\nexport const StaticRecordingData_RowCamerasEntry: MessageFns = {\n encode(message: StaticRecordingData_RowCamerasEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).uint32(message.key);\n }\n if (message.value !== undefined) {\n RowCameras.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StaticRecordingData_RowCamerasEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStaticRecordingData_RowCamerasEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = RowCameras.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StaticRecordingData_RowCamerasEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? RowCameras.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: StaticRecordingData_RowCamerasEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== undefined) {\n obj.value = RowCameras.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): StaticRecordingData_RowCamerasEntry {\n return StaticRecordingData_RowCamerasEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): StaticRecordingData_RowCamerasEntry {\n const message = createBaseStaticRecordingData_RowCamerasEntry();\n message.key = object.key ?? 0;\n message.value = (object.value !== undefined && object.value !== null)\n ? RowCameras.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseGetTrajectoryDataRequest(): GetTrajectoryDataRequest {\n return { recordingName: \"\", rowId: 0, trajectoryId: 0 };\n}\n\nexport const GetTrajectoryDataRequest: MessageFns = {\n encode(message: GetTrajectoryDataRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.rowId !== 0) {\n writer.uint32(16).uint32(message.rowId);\n }\n if (message.trajectoryId !== 0) {\n writer.uint32(24).uint32(message.trajectoryId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTrajectoryDataRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTrajectoryDataRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.trajectoryId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetTrajectoryDataRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0,\n trajectoryId: isSet(object.trajectoryId) ? globalThis.Number(object.trajectoryId) : 0,\n };\n },\n\n toJSON(message: GetTrajectoryDataRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n if (message.trajectoryId !== 0) {\n obj.trajectoryId = Math.round(message.trajectoryId);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetTrajectoryDataRequest {\n return GetTrajectoryDataRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetTrajectoryDataRequest {\n const message = createBaseGetTrajectoryDataRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.rowId = object.rowId ?? 0;\n message.trajectoryId = object.trajectoryId ?? 0;\n return message;\n },\n};\n\nfunction createBaseLastSnapshot(): LastSnapshot {\n return { trajectory: undefined, diagnosticsSnapshotNumber: 0 };\n}\n\nexport const LastSnapshot: MessageFns = {\n encode(message: LastSnapshot, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.trajectory !== undefined) {\n TrajectorySnapshot.encode(message.trajectory, writer.uint32(10).fork()).join();\n }\n if (message.diagnosticsSnapshotNumber !== 0) {\n writer.uint32(16).uint32(message.diagnosticsSnapshotNumber);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LastSnapshot {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLastSnapshot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.trajectory = TrajectorySnapshot.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.diagnosticsSnapshotNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LastSnapshot {\n return {\n trajectory: isSet(object.trajectory) ? TrajectorySnapshot.fromJSON(object.trajectory) : undefined,\n diagnosticsSnapshotNumber: isSet(object.diagnosticsSnapshotNumber)\n ? globalThis.Number(object.diagnosticsSnapshotNumber)\n : 0,\n };\n },\n\n toJSON(message: LastSnapshot): unknown {\n const obj: any = {};\n if (message.trajectory !== undefined) {\n obj.trajectory = TrajectorySnapshot.toJSON(message.trajectory);\n }\n if (message.diagnosticsSnapshotNumber !== 0) {\n obj.diagnosticsSnapshotNumber = Math.round(message.diagnosticsSnapshotNumber);\n }\n return obj;\n },\n\n create, I>>(base?: I): LastSnapshot {\n return LastSnapshot.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LastSnapshot {\n const message = createBaseLastSnapshot();\n message.trajectory = (object.trajectory !== undefined && object.trajectory !== null)\n ? TrajectorySnapshot.fromPartial(object.trajectory)\n : undefined;\n message.diagnosticsSnapshotNumber = object.diagnosticsSnapshotNumber ?? 0;\n return message;\n },\n};\n\nfunction createBaseExtraTrajectoryField(): ExtraTrajectoryField {\n return { label: \"\", value: \"\", color: \"\" };\n}\n\nexport const ExtraTrajectoryField: MessageFns = {\n encode(message: ExtraTrajectoryField, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.label !== \"\") {\n writer.uint32(10).string(message.label);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n if (message.color !== \"\") {\n writer.uint32(26).string(message.color);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ExtraTrajectoryField {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseExtraTrajectoryField();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.label = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.color = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ExtraTrajectoryField {\n return {\n label: isSet(object.label) ? globalThis.String(object.label) : \"\",\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n color: isSet(object.color) ? globalThis.String(object.color) : \"\",\n };\n },\n\n toJSON(message: ExtraTrajectoryField): unknown {\n const obj: any = {};\n if (message.label !== \"\") {\n obj.label = message.label;\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n if (message.color !== \"\") {\n obj.color = message.color;\n }\n return obj;\n },\n\n create, I>>(base?: I): ExtraTrajectoryField {\n return ExtraTrajectoryField.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ExtraTrajectoryField {\n const message = createBaseExtraTrajectoryField();\n message.label = object.label ?? \"\";\n message.value = object.value ?? \"\";\n message.color = object.color ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTargetImage(): TargetImage {\n return { name: \"\", timestamp: 0, p2pPredictX: 0, p2pPredictY: 0 };\n}\n\nexport const TargetImage: MessageFns = {\n encode(message: TargetImage, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.timestamp !== 0) {\n writer.uint32(16).uint64(message.timestamp);\n }\n if (message.p2pPredictX !== 0) {\n writer.uint32(24).uint32(message.p2pPredictX);\n }\n if (message.p2pPredictY !== 0) {\n writer.uint32(32).uint32(message.p2pPredictY);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TargetImage {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTargetImage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.timestamp = longToNumber(reader.uint64());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.p2pPredictX = reader.uint32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.p2pPredictY = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TargetImage {\n return {\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n timestamp: isSet(object.timestamp) ? globalThis.Number(object.timestamp) : 0,\n p2pPredictX: isSet(object.p2pPredictX) ? globalThis.Number(object.p2pPredictX) : 0,\n p2pPredictY: isSet(object.p2pPredictY) ? globalThis.Number(object.p2pPredictY) : 0,\n };\n },\n\n toJSON(message: TargetImage): unknown {\n const obj: any = {};\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.timestamp !== 0) {\n obj.timestamp = Math.round(message.timestamp);\n }\n if (message.p2pPredictX !== 0) {\n obj.p2pPredictX = Math.round(message.p2pPredictX);\n }\n if (message.p2pPredictY !== 0) {\n obj.p2pPredictY = Math.round(message.p2pPredictY);\n }\n return obj;\n },\n\n create, I>>(base?: I): TargetImage {\n return TargetImage.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TargetImage {\n const message = createBaseTargetImage();\n message.name = object.name ?? \"\";\n message.timestamp = object.timestamp ?? 0;\n message.p2pPredictX = object.p2pPredictX ?? 0;\n message.p2pPredictY = object.p2pPredictY ?? 0;\n return message;\n },\n};\n\nfunction createBaseTrajectoryPredictImageMetadata(): TrajectoryPredictImageMetadata {\n return { centerXPx: 0, centerYPx: 0, radiusPx: 0, ts: undefined, pcamId: \"\" };\n}\n\nexport const TrajectoryPredictImageMetadata: MessageFns = {\n encode(message: TrajectoryPredictImageMetadata, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.centerXPx !== 0) {\n writer.uint32(8).int32(message.centerXPx);\n }\n if (message.centerYPx !== 0) {\n writer.uint32(16).int32(message.centerYPx);\n }\n if (message.radiusPx !== 0) {\n writer.uint32(24).int32(message.radiusPx);\n }\n if (message.ts !== undefined) {\n Timestamp.encode(message.ts, writer.uint32(34).fork()).join();\n }\n if (message.pcamId !== \"\") {\n writer.uint32(42).string(message.pcamId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrajectoryPredictImageMetadata {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrajectoryPredictImageMetadata();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.centerXPx = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.centerYPx = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.radiusPx = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.ts = Timestamp.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.pcamId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrajectoryPredictImageMetadata {\n return {\n centerXPx: isSet(object.centerXPx) ? globalThis.Number(object.centerXPx) : 0,\n centerYPx: isSet(object.centerYPx) ? globalThis.Number(object.centerYPx) : 0,\n radiusPx: isSet(object.radiusPx) ? globalThis.Number(object.radiusPx) : 0,\n ts: isSet(object.ts) ? Timestamp.fromJSON(object.ts) : undefined,\n pcamId: isSet(object.pcamId) ? globalThis.String(object.pcamId) : \"\",\n };\n },\n\n toJSON(message: TrajectoryPredictImageMetadata): unknown {\n const obj: any = {};\n if (message.centerXPx !== 0) {\n obj.centerXPx = Math.round(message.centerXPx);\n }\n if (message.centerYPx !== 0) {\n obj.centerYPx = Math.round(message.centerYPx);\n }\n if (message.radiusPx !== 0) {\n obj.radiusPx = Math.round(message.radiusPx);\n }\n if (message.ts !== undefined) {\n obj.ts = Timestamp.toJSON(message.ts);\n }\n if (message.pcamId !== \"\") {\n obj.pcamId = message.pcamId;\n }\n return obj;\n },\n\n create, I>>(base?: I): TrajectoryPredictImageMetadata {\n return TrajectoryPredictImageMetadata.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): TrajectoryPredictImageMetadata {\n const message = createBaseTrajectoryPredictImageMetadata();\n message.centerXPx = object.centerXPx ?? 0;\n message.centerYPx = object.centerYPx ?? 0;\n message.radiusPx = object.radiusPx ?? 0;\n message.ts = (object.ts !== undefined && object.ts !== null) ? Timestamp.fromPartial(object.ts) : undefined;\n message.pcamId = object.pcamId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTrajectoryData(): TrajectoryData {\n return {\n predictImage: undefined,\n targetImages: [],\n lastSnapshot: undefined,\n extraFields: [],\n crosshairX: 0,\n crosshairY: 0,\n };\n}\n\nexport const TrajectoryData: MessageFns = {\n encode(message: TrajectoryData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.predictImage !== undefined) {\n TrajectoryPredictImageMetadata.encode(message.predictImage, writer.uint32(10).fork()).join();\n }\n for (const v of message.targetImages) {\n TargetImage.encode(v!, writer.uint32(18).fork()).join();\n }\n if (message.lastSnapshot !== undefined) {\n LastSnapshot.encode(message.lastSnapshot, writer.uint32(26).fork()).join();\n }\n for (const v of message.extraFields) {\n ExtraTrajectoryField.encode(v!, writer.uint32(34).fork()).join();\n }\n if (message.crosshairX !== 0) {\n writer.uint32(40).uint32(message.crosshairX);\n }\n if (message.crosshairY !== 0) {\n writer.uint32(48).uint32(message.crosshairY);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TrajectoryData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrajectoryData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.predictImage = TrajectoryPredictImageMetadata.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.targetImages.push(TargetImage.decode(reader, reader.uint32()));\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.lastSnapshot = LastSnapshot.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.extraFields.push(ExtraTrajectoryField.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.crosshairX = reader.uint32();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.crosshairY = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TrajectoryData {\n return {\n predictImage: isSet(object.predictImage)\n ? TrajectoryPredictImageMetadata.fromJSON(object.predictImage)\n : undefined,\n targetImages: globalThis.Array.isArray(object?.targetImages)\n ? object.targetImages.map((e: any) => TargetImage.fromJSON(e))\n : [],\n lastSnapshot: isSet(object.lastSnapshot) ? LastSnapshot.fromJSON(object.lastSnapshot) : undefined,\n extraFields: globalThis.Array.isArray(object?.extraFields)\n ? object.extraFields.map((e: any) => ExtraTrajectoryField.fromJSON(e))\n : [],\n crosshairX: isSet(object.crosshairX) ? globalThis.Number(object.crosshairX) : 0,\n crosshairY: isSet(object.crosshairY) ? globalThis.Number(object.crosshairY) : 0,\n };\n },\n\n toJSON(message: TrajectoryData): unknown {\n const obj: any = {};\n if (message.predictImage !== undefined) {\n obj.predictImage = TrajectoryPredictImageMetadata.toJSON(message.predictImage);\n }\n if (message.targetImages?.length) {\n obj.targetImages = message.targetImages.map((e) => TargetImage.toJSON(e));\n }\n if (message.lastSnapshot !== undefined) {\n obj.lastSnapshot = LastSnapshot.toJSON(message.lastSnapshot);\n }\n if (message.extraFields?.length) {\n obj.extraFields = message.extraFields.map((e) => ExtraTrajectoryField.toJSON(e));\n }\n if (message.crosshairX !== 0) {\n obj.crosshairX = Math.round(message.crosshairX);\n }\n if (message.crosshairY !== 0) {\n obj.crosshairY = Math.round(message.crosshairY);\n }\n return obj;\n },\n\n create, I>>(base?: I): TrajectoryData {\n return TrajectoryData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TrajectoryData {\n const message = createBaseTrajectoryData();\n message.predictImage = (object.predictImage !== undefined && object.predictImage !== null)\n ? TrajectoryPredictImageMetadata.fromPartial(object.predictImage)\n : undefined;\n message.targetImages = object.targetImages?.map((e) => TargetImage.fromPartial(e)) || [];\n message.lastSnapshot = (object.lastSnapshot !== undefined && object.lastSnapshot !== null)\n ? LastSnapshot.fromPartial(object.lastSnapshot)\n : undefined;\n message.extraFields = object.extraFields?.map((e) => ExtraTrajectoryField.fromPartial(e)) || [];\n message.crosshairX = object.crosshairX ?? 0;\n message.crosshairY = object.crosshairY ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetTrajectoryPredictImageRequest(): GetTrajectoryPredictImageRequest {\n return { recordingName: \"\", rowId: 0, trajectoryId: 0 };\n}\n\nexport const GetTrajectoryPredictImageRequest: MessageFns = {\n encode(message: GetTrajectoryPredictImageRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.rowId !== 0) {\n writer.uint32(16).uint32(message.rowId);\n }\n if (message.trajectoryId !== 0) {\n writer.uint32(24).uint32(message.trajectoryId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTrajectoryPredictImageRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTrajectoryPredictImageRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.trajectoryId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetTrajectoryPredictImageRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0,\n trajectoryId: isSet(object.trajectoryId) ? globalThis.Number(object.trajectoryId) : 0,\n };\n },\n\n toJSON(message: GetTrajectoryPredictImageRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n if (message.trajectoryId !== 0) {\n obj.trajectoryId = Math.round(message.trajectoryId);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetTrajectoryPredictImageRequest {\n return GetTrajectoryPredictImageRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetTrajectoryPredictImageRequest {\n const message = createBaseGetTrajectoryPredictImageRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.rowId = object.rowId ?? 0;\n message.trajectoryId = object.trajectoryId ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetTrajectoryTargetImageRequest(): GetTrajectoryTargetImageRequest {\n return { recordingName: \"\", rowId: 0, trajectoryId: 0, imageName: \"\" };\n}\n\nexport const GetTrajectoryTargetImageRequest: MessageFns = {\n encode(message: GetTrajectoryTargetImageRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.rowId !== 0) {\n writer.uint32(16).uint32(message.rowId);\n }\n if (message.trajectoryId !== 0) {\n writer.uint32(24).uint32(message.trajectoryId);\n }\n if (message.imageName !== \"\") {\n writer.uint32(34).string(message.imageName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetTrajectoryTargetImageRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetTrajectoryTargetImageRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.trajectoryId = reader.uint32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.imageName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetTrajectoryTargetImageRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0,\n trajectoryId: isSet(object.trajectoryId) ? globalThis.Number(object.trajectoryId) : 0,\n imageName: isSet(object.imageName) ? globalThis.String(object.imageName) : \"\",\n };\n },\n\n toJSON(message: GetTrajectoryTargetImageRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n if (message.trajectoryId !== 0) {\n obj.trajectoryId = Math.round(message.trajectoryId);\n }\n if (message.imageName !== \"\") {\n obj.imageName = message.imageName;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetTrajectoryTargetImageRequest {\n return GetTrajectoryTargetImageRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetTrajectoryTargetImageRequest {\n const message = createBaseGetTrajectoryTargetImageRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.rowId = object.rowId ?? 0;\n message.trajectoryId = object.trajectoryId ?? 0;\n message.imageName = object.imageName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseImageChunk(): ImageChunk {\n return { imageChunk: new Uint8Array(0) };\n}\n\nexport const ImageChunk: MessageFns = {\n encode(message: ImageChunk, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.imageChunk.length !== 0) {\n writer.uint32(10).bytes(message.imageChunk);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ImageChunk {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImageChunk();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.imageChunk = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ImageChunk {\n return { imageChunk: isSet(object.imageChunk) ? bytesFromBase64(object.imageChunk) : new Uint8Array(0) };\n },\n\n toJSON(message: ImageChunk): unknown {\n const obj: any = {};\n if (message.imageChunk.length !== 0) {\n obj.imageChunk = base64FromBytes(message.imageChunk);\n }\n return obj;\n },\n\n create, I>>(base?: I): ImageChunk {\n return ImageChunk.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ImageChunk {\n const message = createBaseImageChunk();\n message.imageChunk = object.imageChunk ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseGetPredictImageMetadataRequest(): GetPredictImageMetadataRequest {\n return { recordingName: \"\", rowId: 0, imageName: \"\" };\n}\n\nexport const GetPredictImageMetadataRequest: MessageFns = {\n encode(message: GetPredictImageMetadataRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.rowId !== 0) {\n writer.uint32(16).uint32(message.rowId);\n }\n if (message.imageName !== \"\") {\n writer.uint32(26).string(message.imageName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetPredictImageMetadataRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetPredictImageMetadataRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.imageName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetPredictImageMetadataRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0,\n imageName: isSet(object.imageName) ? globalThis.String(object.imageName) : \"\",\n };\n },\n\n toJSON(message: GetPredictImageMetadataRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n if (message.imageName !== \"\") {\n obj.imageName = message.imageName;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetPredictImageMetadataRequest {\n return GetPredictImageMetadataRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetPredictImageMetadataRequest {\n const message = createBaseGetPredictImageMetadataRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.rowId = object.rowId ?? 0;\n message.imageName = object.imageName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetPredictImageMetadataResponse(): GetPredictImageMetadataResponse {\n return { ts: undefined, annotations: undefined, deepweedOutput: undefined, deepweedOutputBelowThreshold: undefined };\n}\n\nexport const GetPredictImageMetadataResponse: MessageFns = {\n encode(message: GetPredictImageMetadataResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.ts !== undefined) {\n Timestamp.encode(message.ts, writer.uint32(10).fork()).join();\n }\n if (message.annotations !== undefined) {\n Annotations.encode(message.annotations, writer.uint32(18).fork()).join();\n }\n if (message.deepweedOutput !== undefined) {\n DeepweedOutput.encode(message.deepweedOutput, writer.uint32(26).fork()).join();\n }\n if (message.deepweedOutputBelowThreshold !== undefined) {\n DeepweedOutput.encode(message.deepweedOutputBelowThreshold, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetPredictImageMetadataResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetPredictImageMetadataResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.ts = Timestamp.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.annotations = Annotations.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.deepweedOutput = DeepweedOutput.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.deepweedOutputBelowThreshold = DeepweedOutput.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetPredictImageMetadataResponse {\n return {\n ts: isSet(object.ts) ? Timestamp.fromJSON(object.ts) : undefined,\n annotations: isSet(object.annotations) ? Annotations.fromJSON(object.annotations) : undefined,\n deepweedOutput: isSet(object.deepweedOutput) ? DeepweedOutput.fromJSON(object.deepweedOutput) : undefined,\n deepweedOutputBelowThreshold: isSet(object.deepweedOutputBelowThreshold)\n ? DeepweedOutput.fromJSON(object.deepweedOutputBelowThreshold)\n : undefined,\n };\n },\n\n toJSON(message: GetPredictImageMetadataResponse): unknown {\n const obj: any = {};\n if (message.ts !== undefined) {\n obj.ts = Timestamp.toJSON(message.ts);\n }\n if (message.annotations !== undefined) {\n obj.annotations = Annotations.toJSON(message.annotations);\n }\n if (message.deepweedOutput !== undefined) {\n obj.deepweedOutput = DeepweedOutput.toJSON(message.deepweedOutput);\n }\n if (message.deepweedOutputBelowThreshold !== undefined) {\n obj.deepweedOutputBelowThreshold = DeepweedOutput.toJSON(message.deepweedOutputBelowThreshold);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetPredictImageMetadataResponse {\n return GetPredictImageMetadataResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetPredictImageMetadataResponse {\n const message = createBaseGetPredictImageMetadataResponse();\n message.ts = (object.ts !== undefined && object.ts !== null) ? Timestamp.fromPartial(object.ts) : undefined;\n message.annotations = (object.annotations !== undefined && object.annotations !== null)\n ? Annotations.fromPartial(object.annotations)\n : undefined;\n message.deepweedOutput = (object.deepweedOutput !== undefined && object.deepweedOutput !== null)\n ? DeepweedOutput.fromPartial(object.deepweedOutput)\n : undefined;\n message.deepweedOutputBelowThreshold =\n (object.deepweedOutputBelowThreshold !== undefined && object.deepweedOutputBelowThreshold !== null)\n ? DeepweedOutput.fromPartial(object.deepweedOutputBelowThreshold)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseGetPredictImageRequest(): GetPredictImageRequest {\n return { recordingName: \"\", rowId: 0, imageName: \"\" };\n}\n\nexport const GetPredictImageRequest: MessageFns = {\n encode(message: GetPredictImageRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.rowId !== 0) {\n writer.uint32(16).uint32(message.rowId);\n }\n if (message.imageName !== \"\") {\n writer.uint32(26).string(message.imageName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetPredictImageRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetPredictImageRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.imageName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetPredictImageRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0,\n imageName: isSet(object.imageName) ? globalThis.String(object.imageName) : \"\",\n };\n },\n\n toJSON(message: GetPredictImageRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n if (message.imageName !== \"\") {\n obj.imageName = message.imageName;\n }\n return obj;\n },\n\n create, I>>(base?: I): GetPredictImageRequest {\n return GetPredictImageRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetPredictImageRequest {\n const message = createBaseGetPredictImageRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.rowId = object.rowId ?? 0;\n message.imageName = object.imageName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseStartUploadRequest(): StartUploadRequest {\n return { recordingName: \"\" };\n}\n\nexport const StartUploadRequest: MessageFns = {\n encode(message: StartUploadRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): StartUploadRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStartUploadRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): StartUploadRequest {\n return { recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\" };\n },\n\n toJSON(message: StartUploadRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n return obj;\n },\n\n create, I>>(base?: I): StartUploadRequest {\n return StartUploadRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): StartUploadRequest {\n const message = createBaseStartUploadRequest();\n message.recordingName = object.recordingName ?? \"\";\n return message;\n },\n};\n\nfunction createBaseGetNextUploadStateRequest(): GetNextUploadStateRequest {\n return { recordingName: \"\", ts: undefined };\n}\n\nexport const GetNextUploadStateRequest: MessageFns = {\n encode(message: GetNextUploadStateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.ts !== undefined) {\n Timestamp.encode(message.ts, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetNextUploadStateRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetNextUploadStateRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.ts = Timestamp.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetNextUploadStateRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n ts: isSet(object.ts) ? Timestamp.fromJSON(object.ts) : undefined,\n };\n },\n\n toJSON(message: GetNextUploadStateRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.ts !== undefined) {\n obj.ts = Timestamp.toJSON(message.ts);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetNextUploadStateRequest {\n return GetNextUploadStateRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetNextUploadStateRequest {\n const message = createBaseGetNextUploadStateRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.ts = (object.ts !== undefined && object.ts !== null) ? Timestamp.fromPartial(object.ts) : undefined;\n return message;\n },\n};\n\nfunction createBaseGetNextUploadStateResponse(): GetNextUploadStateResponse {\n return { uploadState: 0, ts: undefined, percentUploaded: 0 };\n}\n\nexport const GetNextUploadStateResponse: MessageFns = {\n encode(message: GetNextUploadStateResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.uploadState !== 0) {\n writer.uint32(8).int32(message.uploadState);\n }\n if (message.ts !== undefined) {\n Timestamp.encode(message.ts, writer.uint32(18).fork()).join();\n }\n if (message.percentUploaded !== 0) {\n writer.uint32(24).uint32(message.percentUploaded);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetNextUploadStateResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetNextUploadStateResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.uploadState = reader.int32() as any;\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.ts = Timestamp.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.percentUploaded = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetNextUploadStateResponse {\n return {\n uploadState: isSet(object.uploadState) ? uploadStateFromJSON(object.uploadState) : 0,\n ts: isSet(object.ts) ? Timestamp.fromJSON(object.ts) : undefined,\n percentUploaded: isSet(object.percentUploaded) ? globalThis.Number(object.percentUploaded) : 0,\n };\n },\n\n toJSON(message: GetNextUploadStateResponse): unknown {\n const obj: any = {};\n if (message.uploadState !== 0) {\n obj.uploadState = uploadStateToJSON(message.uploadState);\n }\n if (message.ts !== undefined) {\n obj.ts = Timestamp.toJSON(message.ts);\n }\n if (message.percentUploaded !== 0) {\n obj.percentUploaded = Math.round(message.percentUploaded);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetNextUploadStateResponse {\n return GetNextUploadStateResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetNextUploadStateResponse {\n const message = createBaseGetNextUploadStateResponse();\n message.uploadState = object.uploadState ?? 0;\n message.ts = (object.ts !== undefined && object.ts !== null) ? Timestamp.fromPartial(object.ts) : undefined;\n message.percentUploaded = object.percentUploaded ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetDeepweedPredictionsCountRequest(): GetDeepweedPredictionsCountRequest {\n return { recordingName: \"\", row: 0, camId: 0 };\n}\n\nexport const GetDeepweedPredictionsCountRequest: MessageFns = {\n encode(message: GetDeepweedPredictionsCountRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.row !== 0) {\n writer.uint32(16).uint32(message.row);\n }\n if (message.camId !== 0) {\n writer.uint32(24).uint32(message.camId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedPredictionsCountRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedPredictionsCountRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.row = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.camId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedPredictionsCountRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n row: isSet(object.row) ? globalThis.Number(object.row) : 0,\n camId: isSet(object.camId) ? globalThis.Number(object.camId) : 0,\n };\n },\n\n toJSON(message: GetDeepweedPredictionsCountRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.row !== 0) {\n obj.row = Math.round(message.row);\n }\n if (message.camId !== 0) {\n obj.camId = Math.round(message.camId);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedPredictionsCountRequest {\n return GetDeepweedPredictionsCountRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedPredictionsCountRequest {\n const message = createBaseGetDeepweedPredictionsCountRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.row = object.row ?? 0;\n message.camId = object.camId ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetDeepweedPredictionsCountResponse(): GetDeepweedPredictionsCountResponse {\n return { count: 0 };\n}\n\nexport const GetDeepweedPredictionsCountResponse: MessageFns = {\n encode(message: GetDeepweedPredictionsCountResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.count !== 0) {\n writer.uint32(8).uint32(message.count);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedPredictionsCountResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedPredictionsCountResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.count = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedPredictionsCountResponse {\n return { count: isSet(object.count) ? globalThis.Number(object.count) : 0 };\n },\n\n toJSON(message: GetDeepweedPredictionsCountResponse): unknown {\n const obj: any = {};\n if (message.count !== 0) {\n obj.count = Math.round(message.count);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): GetDeepweedPredictionsCountResponse {\n return GetDeepweedPredictionsCountResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedPredictionsCountResponse {\n const message = createBaseGetDeepweedPredictionsCountResponse();\n message.count = object.count ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetDeepweedPredictionsRequest(): GetDeepweedPredictionsRequest {\n return { recordingName: \"\", row: 0, camId: 0, idx: 0 };\n}\n\nexport const GetDeepweedPredictionsRequest: MessageFns = {\n encode(message: GetDeepweedPredictionsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.row !== 0) {\n writer.uint32(16).uint32(message.row);\n }\n if (message.camId !== 0) {\n writer.uint32(24).uint32(message.camId);\n }\n if (message.idx !== 0) {\n writer.uint32(32).uint32(message.idx);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedPredictionsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedPredictionsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.row = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.camId = reader.uint32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.idx = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedPredictionsRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n row: isSet(object.row) ? globalThis.Number(object.row) : 0,\n camId: isSet(object.camId) ? globalThis.Number(object.camId) : 0,\n idx: isSet(object.idx) ? globalThis.Number(object.idx) : 0,\n };\n },\n\n toJSON(message: GetDeepweedPredictionsRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.row !== 0) {\n obj.row = Math.round(message.row);\n }\n if (message.camId !== 0) {\n obj.camId = Math.round(message.camId);\n }\n if (message.idx !== 0) {\n obj.idx = Math.round(message.idx);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetDeepweedPredictionsRequest {\n return GetDeepweedPredictionsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedPredictionsRequest {\n const message = createBaseGetDeepweedPredictionsRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.row = object.row ?? 0;\n message.camId = object.camId ?? 0;\n message.idx = object.idx ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetDeepweedPredictionsResponse(): GetDeepweedPredictionsResponse {\n return { predictions: undefined };\n}\n\nexport const GetDeepweedPredictionsResponse: MessageFns = {\n encode(message: GetDeepweedPredictionsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.predictions !== undefined) {\n DeepweedPredictionRecord.encode(message.predictions, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetDeepweedPredictionsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetDeepweedPredictionsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.predictions = DeepweedPredictionRecord.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetDeepweedPredictionsResponse {\n return {\n predictions: isSet(object.predictions) ? DeepweedPredictionRecord.fromJSON(object.predictions) : undefined,\n };\n },\n\n toJSON(message: GetDeepweedPredictionsResponse): unknown {\n const obj: any = {};\n if (message.predictions !== undefined) {\n obj.predictions = DeepweedPredictionRecord.toJSON(message.predictions);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetDeepweedPredictionsResponse {\n return GetDeepweedPredictionsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): GetDeepweedPredictionsResponse {\n const message = createBaseGetDeepweedPredictionsResponse();\n message.predictions = (object.predictions !== undefined && object.predictions !== null)\n ? DeepweedPredictionRecord.fromPartial(object.predictions)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseFindTrajectoryRequest(): FindTrajectoryRequest {\n return { recordingName: \"\", rowId: 0, trajectoryId: 0 };\n}\n\nexport const FindTrajectoryRequest: MessageFns = {\n encode(message: FindTrajectoryRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.rowId !== 0) {\n writer.uint32(16).uint32(message.rowId);\n }\n if (message.trajectoryId !== 0) {\n writer.uint32(24).uint32(message.trajectoryId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FindTrajectoryRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFindTrajectoryRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.trajectoryId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FindTrajectoryRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0,\n trajectoryId: isSet(object.trajectoryId) ? globalThis.Number(object.trajectoryId) : 0,\n };\n },\n\n toJSON(message: FindTrajectoryRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n if (message.trajectoryId !== 0) {\n obj.trajectoryId = Math.round(message.trajectoryId);\n }\n return obj;\n },\n\n create, I>>(base?: I): FindTrajectoryRequest {\n return FindTrajectoryRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FindTrajectoryRequest {\n const message = createBaseFindTrajectoryRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.rowId = object.rowId ?? 0;\n message.trajectoryId = object.trajectoryId ?? 0;\n return message;\n },\n};\n\nfunction createBaseFindTrajectoryResponse(): FindTrajectoryResponse {\n return { snapshotId: 0, trajectory: undefined };\n}\n\nexport const FindTrajectoryResponse: MessageFns = {\n encode(message: FindTrajectoryResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.snapshotId !== 0) {\n writer.uint32(8).uint32(message.snapshotId);\n }\n if (message.trajectory !== undefined) {\n TrajectorySnapshot.encode(message.trajectory, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FindTrajectoryResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFindTrajectoryResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.snapshotId = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.trajectory = TrajectorySnapshot.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FindTrajectoryResponse {\n return {\n snapshotId: isSet(object.snapshotId) ? globalThis.Number(object.snapshotId) : 0,\n trajectory: isSet(object.trajectory) ? TrajectorySnapshot.fromJSON(object.trajectory) : undefined,\n };\n },\n\n toJSON(message: FindTrajectoryResponse): unknown {\n const obj: any = {};\n if (message.snapshotId !== 0) {\n obj.snapshotId = Math.round(message.snapshotId);\n }\n if (message.trajectory !== undefined) {\n obj.trajectory = TrajectorySnapshot.toJSON(message.trajectory);\n }\n return obj;\n },\n\n create, I>>(base?: I): FindTrajectoryResponse {\n return FindTrajectoryResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): FindTrajectoryResponse {\n const message = createBaseFindTrajectoryResponse();\n message.snapshotId = object.snapshotId ?? 0;\n message.trajectory = (object.trajectory !== undefined && object.trajectory !== null)\n ? TrajectorySnapshot.fromPartial(object.trajectory)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseGetRotaryTicksRequest(): GetRotaryTicksRequest {\n return { recordingName: \"\", rowId: 0 };\n}\n\nexport const GetRotaryTicksRequest: MessageFns = {\n encode(message: GetRotaryTicksRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.recordingName !== \"\") {\n writer.uint32(10).string(message.recordingName);\n }\n if (message.rowId !== 0) {\n writer.uint32(16).uint32(message.rowId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetRotaryTicksRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetRotaryTicksRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.recordingName = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.rowId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetRotaryTicksRequest {\n return {\n recordingName: isSet(object.recordingName) ? globalThis.String(object.recordingName) : \"\",\n rowId: isSet(object.rowId) ? globalThis.Number(object.rowId) : 0,\n };\n },\n\n toJSON(message: GetRotaryTicksRequest): unknown {\n const obj: any = {};\n if (message.recordingName !== \"\") {\n obj.recordingName = message.recordingName;\n }\n if (message.rowId !== 0) {\n obj.rowId = Math.round(message.rowId);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetRotaryTicksRequest {\n return GetRotaryTicksRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetRotaryTicksRequest {\n const message = createBaseGetRotaryTicksRequest();\n message.recordingName = object.recordingName ?? \"\";\n message.rowId = object.rowId ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetRotaryTicksResponse(): GetRotaryTicksResponse {\n return { records: [], wheelEncoderResolution: 0 };\n}\n\nexport const GetRotaryTicksResponse: MessageFns = {\n encode(message: GetRotaryTicksResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.records) {\n RotaryTicksRecord.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.wheelEncoderResolution !== 0) {\n writer.uint32(16).uint32(message.wheelEncoderResolution);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): GetRotaryTicksResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetRotaryTicksResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.records.push(RotaryTicksRecord.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.wheelEncoderResolution = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): GetRotaryTicksResponse {\n return {\n records: globalThis.Array.isArray(object?.records)\n ? object.records.map((e: any) => RotaryTicksRecord.fromJSON(e))\n : [],\n wheelEncoderResolution: isSet(object.wheelEncoderResolution)\n ? globalThis.Number(object.wheelEncoderResolution)\n : 0,\n };\n },\n\n toJSON(message: GetRotaryTicksResponse): unknown {\n const obj: any = {};\n if (message.records?.length) {\n obj.records = message.records.map((e) => RotaryTicksRecord.toJSON(e));\n }\n if (message.wheelEncoderResolution !== 0) {\n obj.wheelEncoderResolution = Math.round(message.wheelEncoderResolution);\n }\n return obj;\n },\n\n create, I>>(base?: I): GetRotaryTicksResponse {\n return GetRotaryTicksResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): GetRotaryTicksResponse {\n const message = createBaseGetRotaryTicksResponse();\n message.records = object.records?.map((e) => RotaryTicksRecord.fromPartial(e)) || [];\n message.wheelEncoderResolution = object.wheelEncoderResolution ?? 0;\n return message;\n },\n};\n\nfunction bytesFromBase64(b64: string): Uint8Array {\n if ((globalThis as any).Buffer) {\n return Uint8Array.from(globalThis.Buffer.from(b64, \"base64\"));\n } else {\n const bin = globalThis.atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n }\n}\n\nfunction base64FromBytes(arr: Uint8Array): string {\n if ((globalThis as any).Buffer) {\n return globalThis.Buffer.from(arr).toString(\"base64\");\n } else {\n const bin: string[] = [];\n arr.forEach((byte) => {\n bin.push(globalThis.String.fromCharCode(byte));\n });\n return globalThis.btoa(bin.join(\"\"));\n }\n}\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/jobs.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Job } from \"../frontend/jobs\";\nimport { ConfigNodeSnapshot } from \"../frontend/weeding_diagnostics\";\nimport { Metrics } from \"../metrics/metrics_aggregator_service\";\nimport { DB } from \"./db\";\nimport { DailyMetricResponse } from \"./metrics\";\n\nexport const protobufPackage = \"carbon.portal.jobs\";\n\nexport interface PortalJob {\n db: DB | undefined;\n robotId: number;\n jobId: string;\n name: string;\n timestampMs: number;\n bandingProfile: string;\n thinningProfile: string;\n stopTimestampMs: number;\n acreage: number;\n completed: boolean;\n cropId: string;\n almanac: string;\n discriminator: string;\n metrics: DailyMetricResponse | undefined;\n crop: string;\n serial: string;\n}\n\nexport interface UploadJobRequest {\n job: Job | undefined;\n robot: string;\n}\n\nexport interface UploadJobConfigDumpRequest {\n jobId: string;\n rootConfig: ConfigNodeSnapshot | undefined;\n}\n\nexport interface UploadJobMetricsRequest {\n jobId: string;\n jobMetrics: Metrics | undefined;\n}\n\nfunction createBasePortalJob(): PortalJob {\n return {\n db: undefined,\n robotId: 0,\n jobId: \"\",\n name: \"\",\n timestampMs: 0,\n bandingProfile: \"\",\n thinningProfile: \"\",\n stopTimestampMs: 0,\n acreage: 0,\n completed: false,\n cropId: \"\",\n almanac: \"\",\n discriminator: \"\",\n metrics: undefined,\n crop: \"\",\n serial: \"\",\n };\n}\n\nexport const PortalJob: MessageFns = {\n encode(message: PortalJob, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.robotId !== 0) {\n writer.uint32(16).uint64(message.robotId);\n }\n if (message.jobId !== \"\") {\n writer.uint32(26).string(message.jobId);\n }\n if (message.name !== \"\") {\n writer.uint32(34).string(message.name);\n }\n if (message.timestampMs !== 0) {\n writer.uint32(40).int64(message.timestampMs);\n }\n if (message.bandingProfile !== \"\") {\n writer.uint32(50).string(message.bandingProfile);\n }\n if (message.thinningProfile !== \"\") {\n writer.uint32(58).string(message.thinningProfile);\n }\n if (message.stopTimestampMs !== 0) {\n writer.uint32(64).int64(message.stopTimestampMs);\n }\n if (message.acreage !== 0) {\n writer.uint32(77).float(message.acreage);\n }\n if (message.completed !== false) {\n writer.uint32(80).bool(message.completed);\n }\n if (message.cropId !== \"\") {\n writer.uint32(90).string(message.cropId);\n }\n if (message.almanac !== \"\") {\n writer.uint32(98).string(message.almanac);\n }\n if (message.discriminator !== \"\") {\n writer.uint32(106).string(message.discriminator);\n }\n if (message.metrics !== undefined) {\n DailyMetricResponse.encode(message.metrics, writer.uint32(114).fork()).join();\n }\n if (message.crop !== \"\") {\n writer.uint32(122).string(message.crop);\n }\n if (message.serial !== \"\") {\n writer.uint32(130).string(message.serial);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): PortalJob {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePortalJob();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.robotId = longToNumber(reader.uint64());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.jobId = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n\n message.timestampMs = longToNumber(reader.int64());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.bandingProfile = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.thinningProfile = reader.string();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n\n message.stopTimestampMs = longToNumber(reader.int64());\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n\n message.acreage = reader.float();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.completed = reader.bool();\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.cropId = reader.string();\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.almanac = reader.string();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.discriminator = reader.string();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.metrics = DailyMetricResponse.decode(reader, reader.uint32());\n continue;\n case 15:\n if (tag !== 122) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 16:\n if (tag !== 130) {\n break;\n }\n\n message.serial = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PortalJob {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n robotId: isSet(object.robotId) ? globalThis.Number(object.robotId) : 0,\n jobId: isSet(object.jobId) ? globalThis.String(object.jobId) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n timestampMs: isSet(object.timestampMs) ? globalThis.Number(object.timestampMs) : 0,\n bandingProfile: isSet(object.bandingProfile) ? globalThis.String(object.bandingProfile) : \"\",\n thinningProfile: isSet(object.thinningProfile) ? globalThis.String(object.thinningProfile) : \"\",\n stopTimestampMs: isSet(object.stopTimestampMs) ? globalThis.Number(object.stopTimestampMs) : 0,\n acreage: isSet(object.acreage) ? globalThis.Number(object.acreage) : 0,\n completed: isSet(object.completed) ? globalThis.Boolean(object.completed) : false,\n cropId: isSet(object.cropId) ? globalThis.String(object.cropId) : \"\",\n almanac: isSet(object.almanac) ? globalThis.String(object.almanac) : \"\",\n discriminator: isSet(object.discriminator) ? globalThis.String(object.discriminator) : \"\",\n metrics: isSet(object.metrics) ? DailyMetricResponse.fromJSON(object.metrics) : undefined,\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n serial: isSet(object.serial) ? globalThis.String(object.serial) : \"\",\n };\n },\n\n toJSON(message: PortalJob): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.robotId !== 0) {\n obj.robotId = Math.round(message.robotId);\n }\n if (message.jobId !== \"\") {\n obj.jobId = message.jobId;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.timestampMs !== 0) {\n obj.timestampMs = Math.round(message.timestampMs);\n }\n if (message.bandingProfile !== \"\") {\n obj.bandingProfile = message.bandingProfile;\n }\n if (message.thinningProfile !== \"\") {\n obj.thinningProfile = message.thinningProfile;\n }\n if (message.stopTimestampMs !== 0) {\n obj.stopTimestampMs = Math.round(message.stopTimestampMs);\n }\n if (message.acreage !== 0) {\n obj.acreage = message.acreage;\n }\n if (message.completed !== false) {\n obj.completed = message.completed;\n }\n if (message.cropId !== \"\") {\n obj.cropId = message.cropId;\n }\n if (message.almanac !== \"\") {\n obj.almanac = message.almanac;\n }\n if (message.discriminator !== \"\") {\n obj.discriminator = message.discriminator;\n }\n if (message.metrics !== undefined) {\n obj.metrics = DailyMetricResponse.toJSON(message.metrics);\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.serial !== \"\") {\n obj.serial = message.serial;\n }\n return obj;\n },\n\n create, I>>(base?: I): PortalJob {\n return PortalJob.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): PortalJob {\n const message = createBasePortalJob();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.robotId = object.robotId ?? 0;\n message.jobId = object.jobId ?? \"\";\n message.name = object.name ?? \"\";\n message.timestampMs = object.timestampMs ?? 0;\n message.bandingProfile = object.bandingProfile ?? \"\";\n message.thinningProfile = object.thinningProfile ?? \"\";\n message.stopTimestampMs = object.stopTimestampMs ?? 0;\n message.acreage = object.acreage ?? 0;\n message.completed = object.completed ?? false;\n message.cropId = object.cropId ?? \"\";\n message.almanac = object.almanac ?? \"\";\n message.discriminator = object.discriminator ?? \"\";\n message.metrics = (object.metrics !== undefined && object.metrics !== null)\n ? DailyMetricResponse.fromPartial(object.metrics)\n : undefined;\n message.crop = object.crop ?? \"\";\n message.serial = object.serial ?? \"\";\n return message;\n },\n};\n\nfunction createBaseUploadJobRequest(): UploadJobRequest {\n return { job: undefined, robot: \"\" };\n}\n\nexport const UploadJobRequest: MessageFns = {\n encode(message: UploadJobRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.job !== undefined) {\n Job.encode(message.job, writer.uint32(10).fork()).join();\n }\n if (message.robot !== \"\") {\n writer.uint32(18).string(message.robot);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UploadJobRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUploadJobRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.job = Job.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.robot = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UploadJobRequest {\n return {\n job: isSet(object.job) ? Job.fromJSON(object.job) : undefined,\n robot: isSet(object.robot) ? globalThis.String(object.robot) : \"\",\n };\n },\n\n toJSON(message: UploadJobRequest): unknown {\n const obj: any = {};\n if (message.job !== undefined) {\n obj.job = Job.toJSON(message.job);\n }\n if (message.robot !== \"\") {\n obj.robot = message.robot;\n }\n return obj;\n },\n\n create, I>>(base?: I): UploadJobRequest {\n return UploadJobRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UploadJobRequest {\n const message = createBaseUploadJobRequest();\n message.job = (object.job !== undefined && object.job !== null) ? Job.fromPartial(object.job) : undefined;\n message.robot = object.robot ?? \"\";\n return message;\n },\n};\n\nfunction createBaseUploadJobConfigDumpRequest(): UploadJobConfigDumpRequest {\n return { jobId: \"\", rootConfig: undefined };\n}\n\nexport const UploadJobConfigDumpRequest: MessageFns = {\n encode(message: UploadJobConfigDumpRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.jobId !== \"\") {\n writer.uint32(10).string(message.jobId);\n }\n if (message.rootConfig !== undefined) {\n ConfigNodeSnapshot.encode(message.rootConfig, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UploadJobConfigDumpRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUploadJobConfigDumpRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.jobId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.rootConfig = ConfigNodeSnapshot.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UploadJobConfigDumpRequest {\n return {\n jobId: isSet(object.jobId) ? globalThis.String(object.jobId) : \"\",\n rootConfig: isSet(object.rootConfig) ? ConfigNodeSnapshot.fromJSON(object.rootConfig) : undefined,\n };\n },\n\n toJSON(message: UploadJobConfigDumpRequest): unknown {\n const obj: any = {};\n if (message.jobId !== \"\") {\n obj.jobId = message.jobId;\n }\n if (message.rootConfig !== undefined) {\n obj.rootConfig = ConfigNodeSnapshot.toJSON(message.rootConfig);\n }\n return obj;\n },\n\n create, I>>(base?: I): UploadJobConfigDumpRequest {\n return UploadJobConfigDumpRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UploadJobConfigDumpRequest {\n const message = createBaseUploadJobConfigDumpRequest();\n message.jobId = object.jobId ?? \"\";\n message.rootConfig = (object.rootConfig !== undefined && object.rootConfig !== null)\n ? ConfigNodeSnapshot.fromPartial(object.rootConfig)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseUploadJobMetricsRequest(): UploadJobMetricsRequest {\n return { jobId: \"\", jobMetrics: undefined };\n}\n\nexport const UploadJobMetricsRequest: MessageFns = {\n encode(message: UploadJobMetricsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.jobId !== \"\") {\n writer.uint32(10).string(message.jobId);\n }\n if (message.jobMetrics !== undefined) {\n Metrics.encode(message.jobMetrics, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): UploadJobMetricsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUploadJobMetricsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.jobId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.jobMetrics = Metrics.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): UploadJobMetricsRequest {\n return {\n jobId: isSet(object.jobId) ? globalThis.String(object.jobId) : \"\",\n jobMetrics: isSet(object.jobMetrics) ? Metrics.fromJSON(object.jobMetrics) : undefined,\n };\n },\n\n toJSON(message: UploadJobMetricsRequest): unknown {\n const obj: any = {};\n if (message.jobId !== \"\") {\n obj.jobId = message.jobId;\n }\n if (message.jobMetrics !== undefined) {\n obj.jobMetrics = Metrics.toJSON(message.jobMetrics);\n }\n return obj;\n },\n\n create, I>>(base?: I): UploadJobMetricsRequest {\n return UploadJobMetricsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): UploadJobMetricsRequest {\n const message = createBaseUploadJobMetricsRequest();\n message.jobId = object.jobId ?? \"\";\n message.jobMetrics = (object.jobMetrics !== undefined && object.jobMetrics !== null)\n ? Metrics.fromPartial(object.jobMetrics)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/reports.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { CustomerResponse } from \"./customers\";\nimport { DB } from \"./db\";\n\nexport const protobufPackage = \"carbon.portal.reports\";\n\nexport enum ReportMode {\n REPORT_MODE_UNSPECIFIED = 0,\n REPORT_MODE_JOBS = 1,\n REPORT_MODE_DAYS = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function reportModeFromJSON(object: any): ReportMode {\n switch (object) {\n case 0:\n case \"REPORT_MODE_UNSPECIFIED\":\n return ReportMode.REPORT_MODE_UNSPECIFIED;\n case 1:\n case \"REPORT_MODE_JOBS\":\n return ReportMode.REPORT_MODE_JOBS;\n case 2:\n case \"REPORT_MODE_DAYS\":\n return ReportMode.REPORT_MODE_DAYS;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ReportMode.UNRECOGNIZED;\n }\n}\n\nexport function reportModeToJSON(object: ReportMode): string {\n switch (object) {\n case ReportMode.REPORT_MODE_UNSPECIFIED:\n return \"REPORT_MODE_UNSPECIFIED\";\n case ReportMode.REPORT_MODE_JOBS:\n return \"REPORT_MODE_JOBS\";\n case ReportMode.REPORT_MODE_DAYS:\n return \"REPORT_MODE_DAYS\";\n case ReportMode.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface ReportInstanceResponse {\n db: DB | undefined;\n authorId: string;\n managerId: string;\n reportId: number;\n robotIds: number[];\n startDate: number;\n endDate: number;\n publishEmails: string[];\n slug: string;\n name: string;\n visibleColumns: string[];\n orderAsc: boolean;\n orderBy: string;\n showAverage: boolean;\n showTotal: boolean;\n authorName: string;\n automated: boolean;\n mode: ReportMode;\n}\n\nexport interface ReportResponse {\n db: DB | undefined;\n authorId: string;\n visibleColumns: string[];\n orderAsc: boolean;\n orderBy: string;\n showAverage: boolean;\n showTotal: boolean;\n slug: string;\n name: string;\n customerId: number;\n robotIds: number[];\n startDate: number;\n endDate: number;\n automateWeekly: boolean;\n authorName: string;\n customer: CustomerResponse | undefined;\n mode: ReportMode;\n}\n\nfunction createBaseReportInstanceResponse(): ReportInstanceResponse {\n return {\n db: undefined,\n authorId: \"\",\n managerId: \"\",\n reportId: 0,\n robotIds: [],\n startDate: 0,\n endDate: 0,\n publishEmails: [],\n slug: \"\",\n name: \"\",\n visibleColumns: [],\n orderAsc: false,\n orderBy: \"\",\n showAverage: false,\n showTotal: false,\n authorName: \"\",\n automated: false,\n mode: 0,\n };\n}\n\nexport const ReportInstanceResponse: MessageFns = {\n encode(message: ReportInstanceResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.authorId !== \"\") {\n writer.uint32(18).string(message.authorId);\n }\n if (message.managerId !== \"\") {\n writer.uint32(26).string(message.managerId);\n }\n if (message.reportId !== 0) {\n writer.uint32(32).uint64(message.reportId);\n }\n writer.uint32(42).fork();\n for (const v of message.robotIds) {\n writer.uint64(v);\n }\n writer.join();\n if (message.startDate !== 0) {\n writer.uint32(48).int64(message.startDate);\n }\n if (message.endDate !== 0) {\n writer.uint32(56).int64(message.endDate);\n }\n for (const v of message.publishEmails) {\n writer.uint32(66).string(v!);\n }\n if (message.slug !== \"\") {\n writer.uint32(122).string(message.slug);\n }\n if (message.name !== \"\") {\n writer.uint32(130).string(message.name);\n }\n for (const v of message.visibleColumns) {\n writer.uint32(138).string(v!);\n }\n if (message.orderAsc !== false) {\n writer.uint32(144).bool(message.orderAsc);\n }\n if (message.orderBy !== \"\") {\n writer.uint32(154).string(message.orderBy);\n }\n if (message.showAverage !== false) {\n writer.uint32(160).bool(message.showAverage);\n }\n if (message.showTotal !== false) {\n writer.uint32(168).bool(message.showTotal);\n }\n if (message.authorName !== \"\") {\n writer.uint32(178).string(message.authorName);\n }\n if (message.automated !== false) {\n writer.uint32(184).bool(message.automated);\n }\n if (message.mode !== 0) {\n writer.uint32(192).int32(message.mode);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ReportInstanceResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseReportInstanceResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.authorId = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.managerId = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.reportId = longToNumber(reader.uint64());\n continue;\n case 5:\n if (tag === 40) {\n message.robotIds.push(longToNumber(reader.uint64()));\n\n continue;\n }\n\n if (tag === 42) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.robotIds.push(longToNumber(reader.uint64()));\n }\n\n continue;\n }\n\n break;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.startDate = longToNumber(reader.int64());\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.endDate = longToNumber(reader.int64());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.publishEmails.push(reader.string());\n continue;\n case 15:\n if (tag !== 122) {\n break;\n }\n\n message.slug = reader.string();\n continue;\n case 16:\n if (tag !== 130) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 17:\n if (tag !== 138) {\n break;\n }\n\n message.visibleColumns.push(reader.string());\n continue;\n case 18:\n if (tag !== 144) {\n break;\n }\n\n message.orderAsc = reader.bool();\n continue;\n case 19:\n if (tag !== 154) {\n break;\n }\n\n message.orderBy = reader.string();\n continue;\n case 20:\n if (tag !== 160) {\n break;\n }\n\n message.showAverage = reader.bool();\n continue;\n case 21:\n if (tag !== 168) {\n break;\n }\n\n message.showTotal = reader.bool();\n continue;\n case 22:\n if (tag !== 178) {\n break;\n }\n\n message.authorName = reader.string();\n continue;\n case 23:\n if (tag !== 184) {\n break;\n }\n\n message.automated = reader.bool();\n continue;\n case 24:\n if (tag !== 192) {\n break;\n }\n\n message.mode = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ReportInstanceResponse {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n authorId: isSet(object.authorId) ? globalThis.String(object.authorId) : \"\",\n managerId: isSet(object.managerId) ? globalThis.String(object.managerId) : \"\",\n reportId: isSet(object.reportId) ? globalThis.Number(object.reportId) : 0,\n robotIds: globalThis.Array.isArray(object?.robotIds) ? object.robotIds.map((e: any) => globalThis.Number(e)) : [],\n startDate: isSet(object.startDate) ? globalThis.Number(object.startDate) : 0,\n endDate: isSet(object.endDate) ? globalThis.Number(object.endDate) : 0,\n publishEmails: globalThis.Array.isArray(object?.publishEmails)\n ? object.publishEmails.map((e: any) => globalThis.String(e))\n : [],\n slug: isSet(object.slug) ? globalThis.String(object.slug) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n visibleColumns: globalThis.Array.isArray(object?.visibleColumns)\n ? object.visibleColumns.map((e: any) => globalThis.String(e))\n : [],\n orderAsc: isSet(object.orderAsc) ? globalThis.Boolean(object.orderAsc) : false,\n orderBy: isSet(object.orderBy) ? globalThis.String(object.orderBy) : \"\",\n showAverage: isSet(object.showAverage) ? globalThis.Boolean(object.showAverage) : false,\n showTotal: isSet(object.showTotal) ? globalThis.Boolean(object.showTotal) : false,\n authorName: isSet(object.authorName) ? globalThis.String(object.authorName) : \"\",\n automated: isSet(object.automated) ? globalThis.Boolean(object.automated) : false,\n mode: isSet(object.mode) ? reportModeFromJSON(object.mode) : 0,\n };\n },\n\n toJSON(message: ReportInstanceResponse): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.authorId !== \"\") {\n obj.authorId = message.authorId;\n }\n if (message.managerId !== \"\") {\n obj.managerId = message.managerId;\n }\n if (message.reportId !== 0) {\n obj.reportId = Math.round(message.reportId);\n }\n if (message.robotIds?.length) {\n obj.robotIds = message.robotIds.map((e) => Math.round(e));\n }\n if (message.startDate !== 0) {\n obj.startDate = Math.round(message.startDate);\n }\n if (message.endDate !== 0) {\n obj.endDate = Math.round(message.endDate);\n }\n if (message.publishEmails?.length) {\n obj.publishEmails = message.publishEmails;\n }\n if (message.slug !== \"\") {\n obj.slug = message.slug;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.visibleColumns?.length) {\n obj.visibleColumns = message.visibleColumns;\n }\n if (message.orderAsc !== false) {\n obj.orderAsc = message.orderAsc;\n }\n if (message.orderBy !== \"\") {\n obj.orderBy = message.orderBy;\n }\n if (message.showAverage !== false) {\n obj.showAverage = message.showAverage;\n }\n if (message.showTotal !== false) {\n obj.showTotal = message.showTotal;\n }\n if (message.authorName !== \"\") {\n obj.authorName = message.authorName;\n }\n if (message.automated !== false) {\n obj.automated = message.automated;\n }\n if (message.mode !== 0) {\n obj.mode = reportModeToJSON(message.mode);\n }\n return obj;\n },\n\n create, I>>(base?: I): ReportInstanceResponse {\n return ReportInstanceResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ReportInstanceResponse {\n const message = createBaseReportInstanceResponse();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.authorId = object.authorId ?? \"\";\n message.managerId = object.managerId ?? \"\";\n message.reportId = object.reportId ?? 0;\n message.robotIds = object.robotIds?.map((e) => e) || [];\n message.startDate = object.startDate ?? 0;\n message.endDate = object.endDate ?? 0;\n message.publishEmails = object.publishEmails?.map((e) => e) || [];\n message.slug = object.slug ?? \"\";\n message.name = object.name ?? \"\";\n message.visibleColumns = object.visibleColumns?.map((e) => e) || [];\n message.orderAsc = object.orderAsc ?? false;\n message.orderBy = object.orderBy ?? \"\";\n message.showAverage = object.showAverage ?? false;\n message.showTotal = object.showTotal ?? false;\n message.authorName = object.authorName ?? \"\";\n message.automated = object.automated ?? false;\n message.mode = object.mode ?? 0;\n return message;\n },\n};\n\nfunction createBaseReportResponse(): ReportResponse {\n return {\n db: undefined,\n authorId: \"\",\n visibleColumns: [],\n orderAsc: false,\n orderBy: \"\",\n showAverage: false,\n showTotal: false,\n slug: \"\",\n name: \"\",\n customerId: 0,\n robotIds: [],\n startDate: 0,\n endDate: 0,\n automateWeekly: false,\n authorName: \"\",\n customer: undefined,\n mode: 0,\n };\n}\n\nexport const ReportResponse: MessageFns = {\n encode(message: ReportResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.authorId !== \"\") {\n writer.uint32(18).string(message.authorId);\n }\n for (const v of message.visibleColumns) {\n writer.uint32(26).string(v!);\n }\n if (message.orderAsc !== false) {\n writer.uint32(32).bool(message.orderAsc);\n }\n if (message.orderBy !== \"\") {\n writer.uint32(42).string(message.orderBy);\n }\n if (message.showAverage !== false) {\n writer.uint32(48).bool(message.showAverage);\n }\n if (message.showTotal !== false) {\n writer.uint32(56).bool(message.showTotal);\n }\n if (message.slug !== \"\") {\n writer.uint32(106).string(message.slug);\n }\n if (message.name !== \"\") {\n writer.uint32(114).string(message.name);\n }\n if (message.customerId !== 0) {\n writer.uint32(120).uint64(message.customerId);\n }\n writer.uint32(130).fork();\n for (const v of message.robotIds) {\n writer.uint64(v);\n }\n writer.join();\n if (message.startDate !== 0) {\n writer.uint32(136).int64(message.startDate);\n }\n if (message.endDate !== 0) {\n writer.uint32(144).int64(message.endDate);\n }\n if (message.automateWeekly !== false) {\n writer.uint32(152).bool(message.automateWeekly);\n }\n if (message.authorName !== \"\") {\n writer.uint32(162).string(message.authorName);\n }\n if (message.customer !== undefined) {\n CustomerResponse.encode(message.customer, writer.uint32(170).fork()).join();\n }\n if (message.mode !== 0) {\n writer.uint32(176).int32(message.mode);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ReportResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseReportResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.authorId = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.visibleColumns.push(reader.string());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.orderAsc = reader.bool();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.orderBy = reader.string();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.showAverage = reader.bool();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n\n message.showTotal = reader.bool();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.slug = reader.string();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.customerId = longToNumber(reader.uint64());\n continue;\n case 16:\n if (tag === 128) {\n message.robotIds.push(longToNumber(reader.uint64()));\n\n continue;\n }\n\n if (tag === 130) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.robotIds.push(longToNumber(reader.uint64()));\n }\n\n continue;\n }\n\n break;\n case 17:\n if (tag !== 136) {\n break;\n }\n\n message.startDate = longToNumber(reader.int64());\n continue;\n case 18:\n if (tag !== 144) {\n break;\n }\n\n message.endDate = longToNumber(reader.int64());\n continue;\n case 19:\n if (tag !== 152) {\n break;\n }\n\n message.automateWeekly = reader.bool();\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n\n message.authorName = reader.string();\n continue;\n case 21:\n if (tag !== 170) {\n break;\n }\n\n message.customer = CustomerResponse.decode(reader, reader.uint32());\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n\n message.mode = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ReportResponse {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n authorId: isSet(object.authorId) ? globalThis.String(object.authorId) : \"\",\n visibleColumns: globalThis.Array.isArray(object?.visibleColumns)\n ? object.visibleColumns.map((e: any) => globalThis.String(e))\n : [],\n orderAsc: isSet(object.orderAsc) ? globalThis.Boolean(object.orderAsc) : false,\n orderBy: isSet(object.orderBy) ? globalThis.String(object.orderBy) : \"\",\n showAverage: isSet(object.showAverage) ? globalThis.Boolean(object.showAverage) : false,\n showTotal: isSet(object.showTotal) ? globalThis.Boolean(object.showTotal) : false,\n slug: isSet(object.slug) ? globalThis.String(object.slug) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n customerId: isSet(object.customerId) ? globalThis.Number(object.customerId) : 0,\n robotIds: globalThis.Array.isArray(object?.robotIds) ? object.robotIds.map((e: any) => globalThis.Number(e)) : [],\n startDate: isSet(object.startDate) ? globalThis.Number(object.startDate) : 0,\n endDate: isSet(object.endDate) ? globalThis.Number(object.endDate) : 0,\n automateWeekly: isSet(object.automateWeekly) ? globalThis.Boolean(object.automateWeekly) : false,\n authorName: isSet(object.authorName) ? globalThis.String(object.authorName) : \"\",\n customer: isSet(object.customer) ? CustomerResponse.fromJSON(object.customer) : undefined,\n mode: isSet(object.mode) ? reportModeFromJSON(object.mode) : 0,\n };\n },\n\n toJSON(message: ReportResponse): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.authorId !== \"\") {\n obj.authorId = message.authorId;\n }\n if (message.visibleColumns?.length) {\n obj.visibleColumns = message.visibleColumns;\n }\n if (message.orderAsc !== false) {\n obj.orderAsc = message.orderAsc;\n }\n if (message.orderBy !== \"\") {\n obj.orderBy = message.orderBy;\n }\n if (message.showAverage !== false) {\n obj.showAverage = message.showAverage;\n }\n if (message.showTotal !== false) {\n obj.showTotal = message.showTotal;\n }\n if (message.slug !== \"\") {\n obj.slug = message.slug;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.customerId !== 0) {\n obj.customerId = Math.round(message.customerId);\n }\n if (message.robotIds?.length) {\n obj.robotIds = message.robotIds.map((e) => Math.round(e));\n }\n if (message.startDate !== 0) {\n obj.startDate = Math.round(message.startDate);\n }\n if (message.endDate !== 0) {\n obj.endDate = Math.round(message.endDate);\n }\n if (message.automateWeekly !== false) {\n obj.automateWeekly = message.automateWeekly;\n }\n if (message.authorName !== \"\") {\n obj.authorName = message.authorName;\n }\n if (message.customer !== undefined) {\n obj.customer = CustomerResponse.toJSON(message.customer);\n }\n if (message.mode !== 0) {\n obj.mode = reportModeToJSON(message.mode);\n }\n return obj;\n },\n\n create, I>>(base?: I): ReportResponse {\n return ReportResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ReportResponse {\n const message = createBaseReportResponse();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.authorId = object.authorId ?? \"\";\n message.visibleColumns = object.visibleColumns?.map((e) => e) || [];\n message.orderAsc = object.orderAsc ?? false;\n message.orderBy = object.orderBy ?? \"\";\n message.showAverage = object.showAverage ?? false;\n message.showTotal = object.showTotal ?? false;\n message.slug = object.slug ?? \"\";\n message.name = object.name ?? \"\";\n message.customerId = object.customerId ?? 0;\n message.robotIds = object.robotIds?.map((e) => e) || [];\n message.startDate = object.startDate ?? 0;\n message.endDate = object.endDate ?? 0;\n message.automateWeekly = object.automateWeekly ?? false;\n message.authorName = object.authorName ?? \"\";\n message.customer = (object.customer !== undefined && object.customer !== null)\n ? CustomerResponse.fromPartial(object.customer)\n : undefined;\n message.mode = object.mode ?? 0;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/robots.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { ConfigNode } from \"../config/api/config_service\";\nimport { Status, statusFromJSON, statusToJSON } from \"../frontend/status_bar\";\nimport { AlarmResponse } from \"./alarms\";\nimport { CustomerResponse } from \"./customers\";\nimport { DB } from \"./db\";\nimport { FieldConfig, HealthLog, Location, Performance } from \"./health\";\nimport { DailyMetricResponse } from \"./metrics\";\n\nexport const protobufPackage = \"carbon.portal.robots\";\n\nexport interface CachedRobotHealth {\n location: Location | undefined;\n model: string;\n performance: Performance | undefined;\n reportedAt: number;\n status: Status;\n statusChangedAt: number;\n /**\n * DEPRECATED: use crop_id\n *\n * @deprecated\n */\n crop: string;\n p2p: string;\n softwareVersion: string;\n targetVersion: string;\n targetVersionReady: boolean;\n metricTotals: { [key: string]: number };\n fieldConfig: FieldConfig | undefined;\n cropId: string;\n robotRuntime240v: number;\n activeAlarmCount: number;\n timezone: string;\n}\n\nexport interface CachedRobotHealth_MetricTotalsEntry {\n key: string;\n value: number;\n}\n\nexport interface RobotResponse {\n db: DB | undefined;\n health: CachedRobotHealth | undefined;\n serial: string;\n implementationStatus: string;\n featureFlags: { [key: string]: boolean };\n customerSerial: string;\n supportSlack: string;\n}\n\nexport interface RobotResponse_FeatureFlagsEntry {\n key: string;\n value: boolean;\n}\n\nexport interface RobotSummaryResponse {\n robot:\n | RobotResponse\n | undefined;\n /**\n * DEPRECATED: use alarm_list instead\n *\n * @deprecated\n */\n alarms: AlarmResponse[];\n healthLogs: HealthLog[];\n customer: CustomerResponse | undefined;\n alarmList: AlarmResponse[];\n dailyMetrics: DailyMetricResponse | undefined;\n config: ConfigNode | undefined;\n}\n\nexport interface RobotSummaryListReponse {\n robots: RobotSummaryResponse[];\n total: number;\n}\n\nexport interface RemoteResponse {\n host: string;\n}\n\nfunction createBaseCachedRobotHealth(): CachedRobotHealth {\n return {\n location: undefined,\n model: \"\",\n performance: undefined,\n reportedAt: 0,\n status: 0,\n statusChangedAt: 0,\n crop: \"\",\n p2p: \"\",\n softwareVersion: \"\",\n targetVersion: \"\",\n targetVersionReady: false,\n metricTotals: {},\n fieldConfig: undefined,\n cropId: \"\",\n robotRuntime240v: 0,\n activeAlarmCount: 0,\n timezone: \"\",\n };\n}\n\nexport const CachedRobotHealth: MessageFns = {\n encode(message: CachedRobotHealth, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.location !== undefined) {\n Location.encode(message.location, writer.uint32(18).fork()).join();\n }\n if (message.model !== \"\") {\n writer.uint32(26).string(message.model);\n }\n if (message.performance !== undefined) {\n Performance.encode(message.performance, writer.uint32(42).fork()).join();\n }\n if (message.reportedAt !== 0) {\n writer.uint32(48).int64(message.reportedAt);\n }\n if (message.status !== 0) {\n writer.uint32(72).int32(message.status);\n }\n if (message.statusChangedAt !== 0) {\n writer.uint32(80).int64(message.statusChangedAt);\n }\n if (message.crop !== \"\") {\n writer.uint32(90).string(message.crop);\n }\n if (message.p2p !== \"\") {\n writer.uint32(98).string(message.p2p);\n }\n if (message.softwareVersion !== \"\") {\n writer.uint32(106).string(message.softwareVersion);\n }\n if (message.targetVersion !== \"\") {\n writer.uint32(114).string(message.targetVersion);\n }\n if (message.targetVersionReady !== false) {\n writer.uint32(120).bool(message.targetVersionReady);\n }\n Object.entries(message.metricTotals).forEach(([key, value]) => {\n CachedRobotHealth_MetricTotalsEntry.encode({ key: key as any, value }, writer.uint32(138).fork()).join();\n });\n if (message.fieldConfig !== undefined) {\n FieldConfig.encode(message.fieldConfig, writer.uint32(154).fork()).join();\n }\n if (message.cropId !== \"\") {\n writer.uint32(170).string(message.cropId);\n }\n if (message.robotRuntime240v !== 0) {\n writer.uint32(176).uint32(message.robotRuntime240v);\n }\n if (message.activeAlarmCount !== 0) {\n writer.uint32(184).int64(message.activeAlarmCount);\n }\n if (message.timezone !== \"\") {\n writer.uint32(194).string(message.timezone);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CachedRobotHealth {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCachedRobotHealth();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.location = Location.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.model = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.performance = Performance.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n\n message.reportedAt = longToNumber(reader.int64());\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n\n message.status = reader.int32() as any;\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n\n message.statusChangedAt = longToNumber(reader.int64());\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.crop = reader.string();\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.p2p = reader.string();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n message.softwareVersion = reader.string();\n continue;\n case 14:\n if (tag !== 114) {\n break;\n }\n\n message.targetVersion = reader.string();\n continue;\n case 15:\n if (tag !== 120) {\n break;\n }\n\n message.targetVersionReady = reader.bool();\n continue;\n case 17:\n if (tag !== 138) {\n break;\n }\n\n const entry17 = CachedRobotHealth_MetricTotalsEntry.decode(reader, reader.uint32());\n if (entry17.value !== undefined) {\n message.metricTotals[entry17.key] = entry17.value;\n }\n continue;\n case 19:\n if (tag !== 154) {\n break;\n }\n\n message.fieldConfig = FieldConfig.decode(reader, reader.uint32());\n continue;\n case 21:\n if (tag !== 170) {\n break;\n }\n\n message.cropId = reader.string();\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n\n message.robotRuntime240v = reader.uint32();\n continue;\n case 23:\n if (tag !== 184) {\n break;\n }\n\n message.activeAlarmCount = longToNumber(reader.int64());\n continue;\n case 24:\n if (tag !== 194) {\n break;\n }\n\n message.timezone = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CachedRobotHealth {\n return {\n location: isSet(object.location) ? Location.fromJSON(object.location) : undefined,\n model: isSet(object.model) ? globalThis.String(object.model) : \"\",\n performance: isSet(object.performance) ? Performance.fromJSON(object.performance) : undefined,\n reportedAt: isSet(object.reportedAt) ? globalThis.Number(object.reportedAt) : 0,\n status: isSet(object.status) ? statusFromJSON(object.status) : 0,\n statusChangedAt: isSet(object.statusChangedAt) ? globalThis.Number(object.statusChangedAt) : 0,\n crop: isSet(object.crop) ? globalThis.String(object.crop) : \"\",\n p2p: isSet(object.p2p) ? globalThis.String(object.p2p) : \"\",\n softwareVersion: isSet(object.softwareVersion) ? globalThis.String(object.softwareVersion) : \"\",\n targetVersion: isSet(object.targetVersion) ? globalThis.String(object.targetVersion) : \"\",\n targetVersionReady: isSet(object.targetVersionReady) ? globalThis.Boolean(object.targetVersionReady) : false,\n metricTotals: isObject(object.metricTotals)\n ? Object.entries(object.metricTotals).reduce<{ [key: string]: number }>((acc, [key, value]) => {\n acc[key] = Number(value);\n return acc;\n }, {})\n : {},\n fieldConfig: isSet(object.fieldConfig) ? FieldConfig.fromJSON(object.fieldConfig) : undefined,\n cropId: isSet(object.cropId) ? globalThis.String(object.cropId) : \"\",\n robotRuntime240v: isSet(object.robotRuntime240v) ? globalThis.Number(object.robotRuntime240v) : 0,\n activeAlarmCount: isSet(object.activeAlarmCount) ? globalThis.Number(object.activeAlarmCount) : 0,\n timezone: isSet(object.timezone) ? globalThis.String(object.timezone) : \"\",\n };\n },\n\n toJSON(message: CachedRobotHealth): unknown {\n const obj: any = {};\n if (message.location !== undefined) {\n obj.location = Location.toJSON(message.location);\n }\n if (message.model !== \"\") {\n obj.model = message.model;\n }\n if (message.performance !== undefined) {\n obj.performance = Performance.toJSON(message.performance);\n }\n if (message.reportedAt !== 0) {\n obj.reportedAt = Math.round(message.reportedAt);\n }\n if (message.status !== 0) {\n obj.status = statusToJSON(message.status);\n }\n if (message.statusChangedAt !== 0) {\n obj.statusChangedAt = Math.round(message.statusChangedAt);\n }\n if (message.crop !== \"\") {\n obj.crop = message.crop;\n }\n if (message.p2p !== \"\") {\n obj.p2p = message.p2p;\n }\n if (message.softwareVersion !== \"\") {\n obj.softwareVersion = message.softwareVersion;\n }\n if (message.targetVersion !== \"\") {\n obj.targetVersion = message.targetVersion;\n }\n if (message.targetVersionReady !== false) {\n obj.targetVersionReady = message.targetVersionReady;\n }\n if (message.metricTotals) {\n const entries = Object.entries(message.metricTotals);\n if (entries.length > 0) {\n obj.metricTotals = {};\n entries.forEach(([k, v]) => {\n obj.metricTotals[k] = Math.round(v);\n });\n }\n }\n if (message.fieldConfig !== undefined) {\n obj.fieldConfig = FieldConfig.toJSON(message.fieldConfig);\n }\n if (message.cropId !== \"\") {\n obj.cropId = message.cropId;\n }\n if (message.robotRuntime240v !== 0) {\n obj.robotRuntime240v = Math.round(message.robotRuntime240v);\n }\n if (message.activeAlarmCount !== 0) {\n obj.activeAlarmCount = Math.round(message.activeAlarmCount);\n }\n if (message.timezone !== \"\") {\n obj.timezone = message.timezone;\n }\n return obj;\n },\n\n create, I>>(base?: I): CachedRobotHealth {\n return CachedRobotHealth.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): CachedRobotHealth {\n const message = createBaseCachedRobotHealth();\n message.location = (object.location !== undefined && object.location !== null)\n ? Location.fromPartial(object.location)\n : undefined;\n message.model = object.model ?? \"\";\n message.performance = (object.performance !== undefined && object.performance !== null)\n ? Performance.fromPartial(object.performance)\n : undefined;\n message.reportedAt = object.reportedAt ?? 0;\n message.status = object.status ?? 0;\n message.statusChangedAt = object.statusChangedAt ?? 0;\n message.crop = object.crop ?? \"\";\n message.p2p = object.p2p ?? \"\";\n message.softwareVersion = object.softwareVersion ?? \"\";\n message.targetVersion = object.targetVersion ?? \"\";\n message.targetVersionReady = object.targetVersionReady ?? false;\n message.metricTotals = Object.entries(object.metricTotals ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Number(value);\n }\n return acc;\n },\n {},\n );\n message.fieldConfig = (object.fieldConfig !== undefined && object.fieldConfig !== null)\n ? FieldConfig.fromPartial(object.fieldConfig)\n : undefined;\n message.cropId = object.cropId ?? \"\";\n message.robotRuntime240v = object.robotRuntime240v ?? 0;\n message.activeAlarmCount = object.activeAlarmCount ?? 0;\n message.timezone = object.timezone ?? \"\";\n return message;\n },\n};\n\nfunction createBaseCachedRobotHealth_MetricTotalsEntry(): CachedRobotHealth_MetricTotalsEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const CachedRobotHealth_MetricTotalsEntry: MessageFns = {\n encode(message: CachedRobotHealth_MetricTotalsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(16).uint64(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CachedRobotHealth_MetricTotalsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCachedRobotHealth_MetricTotalsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.value = longToNumber(reader.uint64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CachedRobotHealth_MetricTotalsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Number(object.value) : 0,\n };\n },\n\n toJSON(message: CachedRobotHealth_MetricTotalsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== 0) {\n obj.value = Math.round(message.value);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): CachedRobotHealth_MetricTotalsEntry {\n return CachedRobotHealth_MetricTotalsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): CachedRobotHealth_MetricTotalsEntry {\n const message = createBaseCachedRobotHealth_MetricTotalsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseRobotResponse(): RobotResponse {\n return {\n db: undefined,\n health: undefined,\n serial: \"\",\n implementationStatus: \"\",\n featureFlags: {},\n customerSerial: \"\",\n supportSlack: \"\",\n };\n}\n\nexport const RobotResponse: MessageFns = {\n encode(message: RobotResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.db !== undefined) {\n DB.encode(message.db, writer.uint32(10).fork()).join();\n }\n if (message.health !== undefined) {\n CachedRobotHealth.encode(message.health, writer.uint32(18).fork()).join();\n }\n if (message.serial !== \"\") {\n writer.uint32(26).string(message.serial);\n }\n if (message.implementationStatus !== \"\") {\n writer.uint32(34).string(message.implementationStatus);\n }\n Object.entries(message.featureFlags).forEach(([key, value]) => {\n RobotResponse_FeatureFlagsEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).join();\n });\n if (message.customerSerial !== \"\") {\n writer.uint32(50).string(message.customerSerial);\n }\n if (message.supportSlack !== \"\") {\n writer.uint32(58).string(message.supportSlack);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.db = DB.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.health = CachedRobotHealth.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.serial = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.implementationStatus = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n const entry5 = RobotResponse_FeatureFlagsEntry.decode(reader, reader.uint32());\n if (entry5.value !== undefined) {\n message.featureFlags[entry5.key] = entry5.value;\n }\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.customerSerial = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.supportSlack = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotResponse {\n return {\n db: isSet(object.db) ? DB.fromJSON(object.db) : undefined,\n health: isSet(object.health) ? CachedRobotHealth.fromJSON(object.health) : undefined,\n serial: isSet(object.serial) ? globalThis.String(object.serial) : \"\",\n implementationStatus: isSet(object.implementationStatus) ? globalThis.String(object.implementationStatus) : \"\",\n featureFlags: isObject(object.featureFlags)\n ? Object.entries(object.featureFlags).reduce<{ [key: string]: boolean }>((acc, [key, value]) => {\n acc[key] = Boolean(value);\n return acc;\n }, {})\n : {},\n customerSerial: isSet(object.customerSerial) ? globalThis.String(object.customerSerial) : \"\",\n supportSlack: isSet(object.supportSlack) ? globalThis.String(object.supportSlack) : \"\",\n };\n },\n\n toJSON(message: RobotResponse): unknown {\n const obj: any = {};\n if (message.db !== undefined) {\n obj.db = DB.toJSON(message.db);\n }\n if (message.health !== undefined) {\n obj.health = CachedRobotHealth.toJSON(message.health);\n }\n if (message.serial !== \"\") {\n obj.serial = message.serial;\n }\n if (message.implementationStatus !== \"\") {\n obj.implementationStatus = message.implementationStatus;\n }\n if (message.featureFlags) {\n const entries = Object.entries(message.featureFlags);\n if (entries.length > 0) {\n obj.featureFlags = {};\n entries.forEach(([k, v]) => {\n obj.featureFlags[k] = v;\n });\n }\n }\n if (message.customerSerial !== \"\") {\n obj.customerSerial = message.customerSerial;\n }\n if (message.supportSlack !== \"\") {\n obj.supportSlack = message.supportSlack;\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotResponse {\n return RobotResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotResponse {\n const message = createBaseRobotResponse();\n message.db = (object.db !== undefined && object.db !== null) ? DB.fromPartial(object.db) : undefined;\n message.health = (object.health !== undefined && object.health !== null)\n ? CachedRobotHealth.fromPartial(object.health)\n : undefined;\n message.serial = object.serial ?? \"\";\n message.implementationStatus = object.implementationStatus ?? \"\";\n message.featureFlags = Object.entries(object.featureFlags ?? {}).reduce<{ [key: string]: boolean }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.Boolean(value);\n }\n return acc;\n },\n {},\n );\n message.customerSerial = object.customerSerial ?? \"\";\n message.supportSlack = object.supportSlack ?? \"\";\n return message;\n },\n};\n\nfunction createBaseRobotResponse_FeatureFlagsEntry(): RobotResponse_FeatureFlagsEntry {\n return { key: \"\", value: false };\n}\n\nexport const RobotResponse_FeatureFlagsEntry: MessageFns = {\n encode(message: RobotResponse_FeatureFlagsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== false) {\n writer.uint32(16).bool(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotResponse_FeatureFlagsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotResponse_FeatureFlagsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.value = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotResponse_FeatureFlagsEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.Boolean(object.value) : false,\n };\n },\n\n toJSON(message: RobotResponse_FeatureFlagsEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== false) {\n obj.value = message.value;\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotResponse_FeatureFlagsEntry {\n return RobotResponse_FeatureFlagsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): RobotResponse_FeatureFlagsEntry {\n const message = createBaseRobotResponse_FeatureFlagsEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? false;\n return message;\n },\n};\n\nfunction createBaseRobotSummaryResponse(): RobotSummaryResponse {\n return {\n robot: undefined,\n alarms: [],\n healthLogs: [],\n customer: undefined,\n alarmList: [],\n dailyMetrics: undefined,\n config: undefined,\n };\n}\n\nexport const RobotSummaryResponse: MessageFns = {\n encode(message: RobotSummaryResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.robot !== undefined) {\n RobotResponse.encode(message.robot, writer.uint32(10).fork()).join();\n }\n for (const v of message.alarms) {\n AlarmResponse.encode(v!, writer.uint32(26).fork()).join();\n }\n for (const v of message.healthLogs) {\n HealthLog.encode(v!, writer.uint32(34).fork()).join();\n }\n if (message.customer !== undefined) {\n CustomerResponse.encode(message.customer, writer.uint32(42).fork()).join();\n }\n for (const v of message.alarmList) {\n AlarmResponse.encode(v!, writer.uint32(50).fork()).join();\n }\n if (message.dailyMetrics !== undefined) {\n DailyMetricResponse.encode(message.dailyMetrics, writer.uint32(58).fork()).join();\n }\n if (message.config !== undefined) {\n ConfigNode.encode(message.config, writer.uint32(66).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotSummaryResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotSummaryResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.robot = RobotResponse.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.alarms.push(AlarmResponse.decode(reader, reader.uint32()));\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.healthLogs.push(HealthLog.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.customer = CustomerResponse.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.alarmList.push(AlarmResponse.decode(reader, reader.uint32()));\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.dailyMetrics = DailyMetricResponse.decode(reader, reader.uint32());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.config = ConfigNode.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotSummaryResponse {\n return {\n robot: isSet(object.robot) ? RobotResponse.fromJSON(object.robot) : undefined,\n alarms: globalThis.Array.isArray(object?.alarms) ? object.alarms.map((e: any) => AlarmResponse.fromJSON(e)) : [],\n healthLogs: globalThis.Array.isArray(object?.healthLogs)\n ? object.healthLogs.map((e: any) => HealthLog.fromJSON(e))\n : [],\n customer: isSet(object.customer) ? CustomerResponse.fromJSON(object.customer) : undefined,\n alarmList: globalThis.Array.isArray(object?.alarmList)\n ? object.alarmList.map((e: any) => AlarmResponse.fromJSON(e))\n : [],\n dailyMetrics: isSet(object.dailyMetrics) ? DailyMetricResponse.fromJSON(object.dailyMetrics) : undefined,\n config: isSet(object.config) ? ConfigNode.fromJSON(object.config) : undefined,\n };\n },\n\n toJSON(message: RobotSummaryResponse): unknown {\n const obj: any = {};\n if (message.robot !== undefined) {\n obj.robot = RobotResponse.toJSON(message.robot);\n }\n if (message.alarms?.length) {\n obj.alarms = message.alarms.map((e) => AlarmResponse.toJSON(e));\n }\n if (message.healthLogs?.length) {\n obj.healthLogs = message.healthLogs.map((e) => HealthLog.toJSON(e));\n }\n if (message.customer !== undefined) {\n obj.customer = CustomerResponse.toJSON(message.customer);\n }\n if (message.alarmList?.length) {\n obj.alarmList = message.alarmList.map((e) => AlarmResponse.toJSON(e));\n }\n if (message.dailyMetrics !== undefined) {\n obj.dailyMetrics = DailyMetricResponse.toJSON(message.dailyMetrics);\n }\n if (message.config !== undefined) {\n obj.config = ConfigNode.toJSON(message.config);\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotSummaryResponse {\n return RobotSummaryResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotSummaryResponse {\n const message = createBaseRobotSummaryResponse();\n message.robot = (object.robot !== undefined && object.robot !== null)\n ? RobotResponse.fromPartial(object.robot)\n : undefined;\n message.alarms = object.alarms?.map((e) => AlarmResponse.fromPartial(e)) || [];\n message.healthLogs = object.healthLogs?.map((e) => HealthLog.fromPartial(e)) || [];\n message.customer = (object.customer !== undefined && object.customer !== null)\n ? CustomerResponse.fromPartial(object.customer)\n : undefined;\n message.alarmList = object.alarmList?.map((e) => AlarmResponse.fromPartial(e)) || [];\n message.dailyMetrics = (object.dailyMetrics !== undefined && object.dailyMetrics !== null)\n ? DailyMetricResponse.fromPartial(object.dailyMetrics)\n : undefined;\n message.config = (object.config !== undefined && object.config !== null)\n ? ConfigNode.fromPartial(object.config)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseRobotSummaryListReponse(): RobotSummaryListReponse {\n return { robots: [], total: 0 };\n}\n\nexport const RobotSummaryListReponse: MessageFns = {\n encode(message: RobotSummaryListReponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.robots) {\n RobotSummaryResponse.encode(v!, writer.uint32(10).fork()).join();\n }\n if (message.total !== 0) {\n writer.uint32(16).int64(message.total);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotSummaryListReponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotSummaryListReponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.robots.push(RobotSummaryResponse.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.total = longToNumber(reader.int64());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotSummaryListReponse {\n return {\n robots: globalThis.Array.isArray(object?.robots)\n ? object.robots.map((e: any) => RobotSummaryResponse.fromJSON(e))\n : [],\n total: isSet(object.total) ? globalThis.Number(object.total) : 0,\n };\n },\n\n toJSON(message: RobotSummaryListReponse): unknown {\n const obj: any = {};\n if (message.robots?.length) {\n obj.robots = message.robots.map((e) => RobotSummaryResponse.toJSON(e));\n }\n if (message.total !== 0) {\n obj.total = Math.round(message.total);\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotSummaryListReponse {\n return RobotSummaryListReponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotSummaryListReponse {\n const message = createBaseRobotSummaryListReponse();\n message.robots = object.robots?.map((e) => RobotSummaryResponse.fromPartial(e)) || [];\n message.total = object.total ?? 0;\n return message;\n },\n};\n\nfunction createBaseRemoteResponse(): RemoteResponse {\n return { host: \"\" };\n}\n\nexport const RemoteResponse: MessageFns = {\n encode(message: RemoteResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.host !== \"\") {\n writer.uint32(10).string(message.host);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RemoteResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRemoteResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.host = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RemoteResponse {\n return { host: isSet(object.host) ? globalThis.String(object.host) : \"\" };\n },\n\n toJSON(message: RemoteResponse): unknown {\n const obj: any = {};\n if (message.host !== \"\") {\n obj.host = message.host;\n }\n return obj;\n },\n\n create, I>>(base?: I): RemoteResponse {\n return RemoteResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RemoteResponse {\n const message = createBaseRemoteResponse();\n message.host = object.host ?? \"\";\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: portal/audit_logs.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"carbon.portal.audit_logs\";\n\nexport interface RoSyAuditLog {\n level: string;\n message: string;\n timestamp: string;\n namespace: string;\n robotSerial: string;\n key: string;\n userId: string;\n oldValue: string;\n newValue: string;\n}\n\nexport interface RoSyAuditLogResponse {\n logs: RoSyAuditLog[];\n}\n\nfunction createBaseRoSyAuditLog(): RoSyAuditLog {\n return {\n level: \"\",\n message: \"\",\n timestamp: \"\",\n namespace: \"\",\n robotSerial: \"\",\n key: \"\",\n userId: \"\",\n oldValue: \"\",\n newValue: \"\",\n };\n}\n\nexport const RoSyAuditLog: MessageFns = {\n encode(message: RoSyAuditLog, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.level !== \"\") {\n writer.uint32(10).string(message.level);\n }\n if (message.message !== \"\") {\n writer.uint32(18).string(message.message);\n }\n if (message.timestamp !== \"\") {\n writer.uint32(26).string(message.timestamp);\n }\n if (message.namespace !== \"\") {\n writer.uint32(34).string(message.namespace);\n }\n if (message.robotSerial !== \"\") {\n writer.uint32(42).string(message.robotSerial);\n }\n if (message.key !== \"\") {\n writer.uint32(50).string(message.key);\n }\n if (message.userId !== \"\") {\n writer.uint32(58).string(message.userId);\n }\n if (message.oldValue !== \"\") {\n writer.uint32(66).string(message.oldValue);\n }\n if (message.newValue !== \"\") {\n writer.uint32(74).string(message.newValue);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RoSyAuditLog {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRoSyAuditLog();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.level = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.message = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.timestamp = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.namespace = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.robotSerial = reader.string();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n\n message.userId = reader.string();\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n\n message.oldValue = reader.string();\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n\n message.newValue = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RoSyAuditLog {\n return {\n level: isSet(object.level) ? globalThis.String(object.level) : \"\",\n message: isSet(object.message) ? globalThis.String(object.message) : \"\",\n timestamp: isSet(object.timestamp) ? globalThis.String(object.timestamp) : \"\",\n namespace: isSet(object.namespace) ? globalThis.String(object.namespace) : \"\",\n robotSerial: isSet(object.robotSerial) ? globalThis.String(object.robotSerial) : \"\",\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n userId: isSet(object.userId) ? globalThis.String(object.userId) : \"\",\n oldValue: isSet(object.oldValue) ? globalThis.String(object.oldValue) : \"\",\n newValue: isSet(object.newValue) ? globalThis.String(object.newValue) : \"\",\n };\n },\n\n toJSON(message: RoSyAuditLog): unknown {\n const obj: any = {};\n if (message.level !== \"\") {\n obj.level = message.level;\n }\n if (message.message !== \"\") {\n obj.message = message.message;\n }\n if (message.timestamp !== \"\") {\n obj.timestamp = message.timestamp;\n }\n if (message.namespace !== \"\") {\n obj.namespace = message.namespace;\n }\n if (message.robotSerial !== \"\") {\n obj.robotSerial = message.robotSerial;\n }\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.userId !== \"\") {\n obj.userId = message.userId;\n }\n if (message.oldValue !== \"\") {\n obj.oldValue = message.oldValue;\n }\n if (message.newValue !== \"\") {\n obj.newValue = message.newValue;\n }\n return obj;\n },\n\n create, I>>(base?: I): RoSyAuditLog {\n return RoSyAuditLog.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RoSyAuditLog {\n const message = createBaseRoSyAuditLog();\n message.level = object.level ?? \"\";\n message.message = object.message ?? \"\";\n message.timestamp = object.timestamp ?? \"\";\n message.namespace = object.namespace ?? \"\";\n message.robotSerial = object.robotSerial ?? \"\";\n message.key = object.key ?? \"\";\n message.userId = object.userId ?? \"\";\n message.oldValue = object.oldValue ?? \"\";\n message.newValue = object.newValue ?? \"\";\n return message;\n },\n};\n\nfunction createBaseRoSyAuditLogResponse(): RoSyAuditLogResponse {\n return { logs: [] };\n}\n\nexport const RoSyAuditLogResponse: MessageFns = {\n encode(message: RoSyAuditLogResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.logs) {\n RoSyAuditLog.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RoSyAuditLogResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRoSyAuditLogResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.logs.push(RoSyAuditLog.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RoSyAuditLogResponse {\n return {\n logs: globalThis.Array.isArray(object?.logs) ? object.logs.map((e: any) => RoSyAuditLog.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: RoSyAuditLogResponse): unknown {\n const obj: any = {};\n if (message.logs?.length) {\n obj.logs = message.logs.map((e) => RoSyAuditLog.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): RoSyAuditLogResponse {\n return RoSyAuditLogResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RoSyAuditLogResponse {\n const message = createBaseRoSyAuditLogResponse();\n message.logs = object.logs?.map((e) => RoSyAuditLog.fromPartial(e)) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: target_velocity_estimator/target_velocity_estimator.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"carbon.aimbot.target_velocity_estimator\";\n\nexport interface TVERowProfile {\n primaryKillRate: number;\n secondaryKillRate: number;\n}\n\nexport interface TVEProfile {\n id: string;\n name: string;\n updateTs: number;\n protected: boolean;\n cruiseOffsetPercent: number;\n primaryRange: number;\n secondaryRange: number;\n increaseSmoothing: number;\n decreaseSmoothing: number;\n /**\n * use rows map instead\n *\n * @deprecated\n */\n row1:\n | TVERowProfile\n | undefined;\n /**\n * use rows map instead\n *\n * @deprecated\n */\n row2:\n | TVERowProfile\n | undefined;\n /**\n * use rows map instead\n *\n * @deprecated\n */\n row3: TVERowProfile | undefined;\n rows: { [key: number]: TVERowProfile };\n minVelMph: number;\n maxVelMph: number;\n}\n\nexport interface TVEProfile_RowsEntry {\n key: number;\n value: TVERowProfile | undefined;\n}\n\nexport interface ProfileDetails {\n id: string;\n name: string;\n}\n\nfunction createBaseTVERowProfile(): TVERowProfile {\n return { primaryKillRate: 0, secondaryKillRate: 0 };\n}\n\nexport const TVERowProfile: MessageFns = {\n encode(message: TVERowProfile, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.primaryKillRate !== 0) {\n writer.uint32(13).float(message.primaryKillRate);\n }\n if (message.secondaryKillRate !== 0) {\n writer.uint32(21).float(message.secondaryKillRate);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TVERowProfile {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTVERowProfile();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n\n message.primaryKillRate = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n\n message.secondaryKillRate = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TVERowProfile {\n return {\n primaryKillRate: isSet(object.primaryKillRate) ? globalThis.Number(object.primaryKillRate) : 0,\n secondaryKillRate: isSet(object.secondaryKillRate) ? globalThis.Number(object.secondaryKillRate) : 0,\n };\n },\n\n toJSON(message: TVERowProfile): unknown {\n const obj: any = {};\n if (message.primaryKillRate !== 0) {\n obj.primaryKillRate = message.primaryKillRate;\n }\n if (message.secondaryKillRate !== 0) {\n obj.secondaryKillRate = message.secondaryKillRate;\n }\n return obj;\n },\n\n create, I>>(base?: I): TVERowProfile {\n return TVERowProfile.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TVERowProfile {\n const message = createBaseTVERowProfile();\n message.primaryKillRate = object.primaryKillRate ?? 0;\n message.secondaryKillRate = object.secondaryKillRate ?? 0;\n return message;\n },\n};\n\nfunction createBaseTVEProfile(): TVEProfile {\n return {\n id: \"\",\n name: \"\",\n updateTs: 0,\n protected: false,\n cruiseOffsetPercent: 0,\n primaryRange: 0,\n secondaryRange: 0,\n increaseSmoothing: 0,\n decreaseSmoothing: 0,\n row1: undefined,\n row2: undefined,\n row3: undefined,\n rows: {},\n minVelMph: 0,\n maxVelMph: 0,\n };\n}\n\nexport const TVEProfile: MessageFns = {\n encode(message: TVEProfile, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n if (message.updateTs !== 0) {\n writer.uint32(24).int64(message.updateTs);\n }\n if (message.protected !== false) {\n writer.uint32(32).bool(message.protected);\n }\n if (message.cruiseOffsetPercent !== 0) {\n writer.uint32(45).float(message.cruiseOffsetPercent);\n }\n if (message.primaryRange !== 0) {\n writer.uint32(53).float(message.primaryRange);\n }\n if (message.secondaryRange !== 0) {\n writer.uint32(61).float(message.secondaryRange);\n }\n if (message.increaseSmoothing !== 0) {\n writer.uint32(69).float(message.increaseSmoothing);\n }\n if (message.decreaseSmoothing !== 0) {\n writer.uint32(77).float(message.decreaseSmoothing);\n }\n if (message.row1 !== undefined) {\n TVERowProfile.encode(message.row1, writer.uint32(82).fork()).join();\n }\n if (message.row2 !== undefined) {\n TVERowProfile.encode(message.row2, writer.uint32(90).fork()).join();\n }\n if (message.row3 !== undefined) {\n TVERowProfile.encode(message.row3, writer.uint32(98).fork()).join();\n }\n Object.entries(message.rows).forEach(([key, value]) => {\n TVEProfile_RowsEntry.encode({ key: key as any, value }, writer.uint32(106).fork()).join();\n });\n if (message.minVelMph !== 0) {\n writer.uint32(117).float(message.minVelMph);\n }\n if (message.maxVelMph !== 0) {\n writer.uint32(125).float(message.maxVelMph);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TVEProfile {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTVEProfile();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n\n message.updateTs = longToNumber(reader.int64());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.protected = reader.bool();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n\n message.cruiseOffsetPercent = reader.float();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n\n message.primaryRange = reader.float();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n\n message.secondaryRange = reader.float();\n continue;\n case 8:\n if (tag !== 69) {\n break;\n }\n\n message.increaseSmoothing = reader.float();\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n\n message.decreaseSmoothing = reader.float();\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n\n message.row1 = TVERowProfile.decode(reader, reader.uint32());\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n\n message.row2 = TVERowProfile.decode(reader, reader.uint32());\n continue;\n case 12:\n if (tag !== 98) {\n break;\n }\n\n message.row3 = TVERowProfile.decode(reader, reader.uint32());\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n\n const entry13 = TVEProfile_RowsEntry.decode(reader, reader.uint32());\n if (entry13.value !== undefined) {\n message.rows[entry13.key] = entry13.value;\n }\n continue;\n case 14:\n if (tag !== 117) {\n break;\n }\n\n message.minVelMph = reader.float();\n continue;\n case 15:\n if (tag !== 125) {\n break;\n }\n\n message.maxVelMph = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TVEProfile {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n updateTs: isSet(object.updateTs) ? globalThis.Number(object.updateTs) : 0,\n protected: isSet(object.protected) ? globalThis.Boolean(object.protected) : false,\n cruiseOffsetPercent: isSet(object.cruiseOffsetPercent) ? globalThis.Number(object.cruiseOffsetPercent) : 0,\n primaryRange: isSet(object.primaryRange) ? globalThis.Number(object.primaryRange) : 0,\n secondaryRange: isSet(object.secondaryRange) ? globalThis.Number(object.secondaryRange) : 0,\n increaseSmoothing: isSet(object.increaseSmoothing) ? globalThis.Number(object.increaseSmoothing) : 0,\n decreaseSmoothing: isSet(object.decreaseSmoothing) ? globalThis.Number(object.decreaseSmoothing) : 0,\n row1: isSet(object.row1) ? TVERowProfile.fromJSON(object.row1) : undefined,\n row2: isSet(object.row2) ? TVERowProfile.fromJSON(object.row2) : undefined,\n row3: isSet(object.row3) ? TVERowProfile.fromJSON(object.row3) : undefined,\n rows: isObject(object.rows)\n ? Object.entries(object.rows).reduce<{ [key: number]: TVERowProfile }>((acc, [key, value]) => {\n acc[globalThis.Number(key)] = TVERowProfile.fromJSON(value);\n return acc;\n }, {})\n : {},\n minVelMph: isSet(object.minVelMph) ? globalThis.Number(object.minVelMph) : 0,\n maxVelMph: isSet(object.maxVelMph) ? globalThis.Number(object.maxVelMph) : 0,\n };\n },\n\n toJSON(message: TVEProfile): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n if (message.updateTs !== 0) {\n obj.updateTs = Math.round(message.updateTs);\n }\n if (message.protected !== false) {\n obj.protected = message.protected;\n }\n if (message.cruiseOffsetPercent !== 0) {\n obj.cruiseOffsetPercent = message.cruiseOffsetPercent;\n }\n if (message.primaryRange !== 0) {\n obj.primaryRange = message.primaryRange;\n }\n if (message.secondaryRange !== 0) {\n obj.secondaryRange = message.secondaryRange;\n }\n if (message.increaseSmoothing !== 0) {\n obj.increaseSmoothing = message.increaseSmoothing;\n }\n if (message.decreaseSmoothing !== 0) {\n obj.decreaseSmoothing = message.decreaseSmoothing;\n }\n if (message.row1 !== undefined) {\n obj.row1 = TVERowProfile.toJSON(message.row1);\n }\n if (message.row2 !== undefined) {\n obj.row2 = TVERowProfile.toJSON(message.row2);\n }\n if (message.row3 !== undefined) {\n obj.row3 = TVERowProfile.toJSON(message.row3);\n }\n if (message.rows) {\n const entries = Object.entries(message.rows);\n if (entries.length > 0) {\n obj.rows = {};\n entries.forEach(([k, v]) => {\n obj.rows[k] = TVERowProfile.toJSON(v);\n });\n }\n }\n if (message.minVelMph !== 0) {\n obj.minVelMph = message.minVelMph;\n }\n if (message.maxVelMph !== 0) {\n obj.maxVelMph = message.maxVelMph;\n }\n return obj;\n },\n\n create, I>>(base?: I): TVEProfile {\n return TVEProfile.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TVEProfile {\n const message = createBaseTVEProfile();\n message.id = object.id ?? \"\";\n message.name = object.name ?? \"\";\n message.updateTs = object.updateTs ?? 0;\n message.protected = object.protected ?? false;\n message.cruiseOffsetPercent = object.cruiseOffsetPercent ?? 0;\n message.primaryRange = object.primaryRange ?? 0;\n message.secondaryRange = object.secondaryRange ?? 0;\n message.increaseSmoothing = object.increaseSmoothing ?? 0;\n message.decreaseSmoothing = object.decreaseSmoothing ?? 0;\n message.row1 = (object.row1 !== undefined && object.row1 !== null)\n ? TVERowProfile.fromPartial(object.row1)\n : undefined;\n message.row2 = (object.row2 !== undefined && object.row2 !== null)\n ? TVERowProfile.fromPartial(object.row2)\n : undefined;\n message.row3 = (object.row3 !== undefined && object.row3 !== null)\n ? TVERowProfile.fromPartial(object.row3)\n : undefined;\n message.rows = Object.entries(object.rows ?? {}).reduce<{ [key: number]: TVERowProfile }>((acc, [key, value]) => {\n if (value !== undefined) {\n acc[globalThis.Number(key)] = TVERowProfile.fromPartial(value);\n }\n return acc;\n }, {});\n message.minVelMph = object.minVelMph ?? 0;\n message.maxVelMph = object.maxVelMph ?? 0;\n return message;\n },\n};\n\nfunction createBaseTVEProfile_RowsEntry(): TVEProfile_RowsEntry {\n return { key: 0, value: undefined };\n}\n\nexport const TVEProfile_RowsEntry: MessageFns = {\n encode(message: TVEProfile_RowsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== 0) {\n writer.uint32(8).uint32(message.key);\n }\n if (message.value !== undefined) {\n TVERowProfile.encode(message.value, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TVEProfile_RowsEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTVEProfile_RowsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.key = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = TVERowProfile.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TVEProfile_RowsEntry {\n return {\n key: isSet(object.key) ? globalThis.Number(object.key) : 0,\n value: isSet(object.value) ? TVERowProfile.fromJSON(object.value) : undefined,\n };\n },\n\n toJSON(message: TVEProfile_RowsEntry): unknown {\n const obj: any = {};\n if (message.key !== 0) {\n obj.key = Math.round(message.key);\n }\n if (message.value !== undefined) {\n obj.value = TVERowProfile.toJSON(message.value);\n }\n return obj;\n },\n\n create, I>>(base?: I): TVEProfile_RowsEntry {\n return TVEProfile_RowsEntry.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): TVEProfile_RowsEntry {\n const message = createBaseTVEProfile_RowsEntry();\n message.key = object.key ?? 0;\n message.value = (object.value !== undefined && object.value !== null)\n ? TVERowProfile.fromPartial(object.value)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseProfileDetails(): ProfileDetails {\n return { id: \"\", name: \"\" };\n}\n\nexport const ProfileDetails: MessageFns = {\n encode(message: ProfileDetails, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.name !== \"\") {\n writer.uint32(18).string(message.name);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ProfileDetails {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseProfileDetails();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.name = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ProfileDetails {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n name: isSet(object.name) ? globalThis.String(object.name) : \"\",\n };\n },\n\n toJSON(message: ProfileDetails): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.name !== \"\") {\n obj.name = message.name;\n }\n return obj;\n },\n\n create, I>>(base?: I): ProfileDetails {\n return ProfileDetails.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ProfileDetails {\n const message = createBaseProfileDetails();\n message.id = object.id ?? \"\";\n message.name = object.name ?? \"\";\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","import { AlarmResponse } from \"protos/portal/alarms\";\nimport {\n AlmanacConfig,\n DiscriminatorConfig,\n ModelinatorConfig,\n} from \"protos/almanac/almanac\";\nimport { APIErrorResponse } from \"stream-chat\";\nimport { auth, CarbonUser } from \"portal/utils/auth\";\nimport {\n Job as AutotractorJob,\n JobList as AutotractorJobList,\n} from \"protos/rtc/jobs\";\nimport {\n BaseQueryError,\n BaseQueryFn,\n createApi,\n FetchArgs,\n fetchBaseQuery,\n FetchBaseQueryError,\n TagDescription,\n} from \"@reduxjs/toolkit/query/react\";\nimport {\n BlocksByDateByRobotResponse,\n BlocksResponse,\n} from \"protos/portal/spatial\";\nimport { camelToSnake, snakeToCamel } from \"portal/utils/strings\";\nimport { ConfigNode } from \"protos/config/api/config_service\";\nimport { ConfigResponse } from \"protos/portal/configs\";\nimport { Crop, Image, Model, RobotCrop } from \"protos/portal/veselka\";\nimport { CustomerResponse } from \"protos/portal/customers\";\nimport {\n DailyMetricResponse,\n DailyMetricsByDateByRobotResponse,\n} from \"protos/portal/metrics\";\nimport { DateRange } from \"@mui/lab\";\nimport { DateTime } from \"luxon\";\nimport {\n entries,\n isEmpty,\n isObject,\n transformKeys,\n values,\n} from \"portal/utils/objects\";\nimport {\n ExpandedCategoryCollectionRequest,\n ExpandedCategoryCollectionResponse,\n} from \"protos/portal/category_profile\";\nimport { Farm, ListFarmsResponse } from \"protos/portal/farm\";\nimport { FieldDefinition } from \"protos/portal/geo\";\nimport { findWhere, sortBy, spliceIfExists } from \"portal/utils/arrays\";\nimport { FleetView, UserResponse } from \"protos/portal/users\";\nimport { getModelinatorId } from \"portal/utils/almanac\";\nimport {\n getNodeFromPath,\n getParentNodeFromPath,\n setValue,\n sortByName,\n} from \"portal/utils/configs\";\nimport { GlobalAlarmlists, RobotAlarmlists } from \"protos/portal/admin\";\nimport { HardwareResponse } from \"protos/portal/hardware\";\nimport { HistoryResponse } from \"protos/portal/health\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport { ListLabelPointsResponse } from \"protos/veselka/label_point\";\nimport { Message, MessagesResponse } from \"protos/portal/messages\";\nimport { Method, Pagination } from \"portal/utils/api\";\nimport { PortalJob } from \"protos/portal/jobs\";\nimport { ReportInstanceResponse, ReportResponse } from \"protos/portal/reports\";\nimport { RobotResponse, RobotSummaryResponse } from \"protos/portal/robots\";\nimport { robotSort } from \"portal/utils/robots\";\nimport { RoSyAuditLogResponse } from \"protos/portal/audit_logs\";\nimport { SerializedError } from \"@reduxjs/toolkit\";\nimport { TFunction } from \"i18next\";\nimport { toQuery } from \"portal/utils/browser\";\nimport { TVEProfile } from \"protos/target_velocity_estimator/target_velocity_estimator\";\n\nenum Tag {\n ADMIN_ALARM = \"Admin/Alarm\",\n ADMIN_ALMANAC = \"Admin/Almananc\",\n ADMIN_CATEGORY_COLLECTION_PROFILE = \"Admin/CategoryCollectionProfile\",\n ADMIN_TARGET_VELOCITY_ESTIMATOR = \"Admin/TargetVelocityEstimator\",\n ALARM = \"Alarm\",\n ALMANAC = \"Almananc\",\n AUTOTRACTOR_JOB = \"AutotractorJob\",\n CATEGORY_COLLECTION_PROFILE = \"CategoryCollectionProfile\",\n CONFIG = \"Config\",\n CONFIG_TEMPLATE = \"ConfigTemplate\",\n CROP = \"Crop\",\n CUSTOMER = \"Customer\",\n DISCRIMINATOR = \"Discriminator\",\n FARM = \"Farm\",\n FIELD_DEFINITION = \"FieldDefinition\",\n IMAGE = \"Image\",\n JOB_METRIC = \"Job/Metric\",\n LABEL_POINT = \"LabelPoint\",\n MESSAGE = \"Message\",\n METRIC = \"Metric\",\n MODEL = \"Model\",\n MODELINDATOR = \"Modelinator\",\n REPORT = \"Report\",\n REPORT_INSTANCE = \"ReportInstance\",\n ROBOT = \"Robot\",\n ROBOT_CROP = \"Robot/Crop\",\n ROBOT_HARDWARE = \"Robot/Hardware\",\n ROBOT_JOB = \"Robot/Job\",\n SPATIAL = \"SPATIAL\",\n TARGET_VELOCITY_ESTIMATOR = \"TargetVelocityEstimator\",\n USER = \"User\",\n FLEET_VIEW = \"FleetView\",\n}\n\ninterface ErrorResponse {\n error?: string;\n}\n\nexport const formatError = (\n t: TFunction,\n error: FetchBaseQueryError | SerializedError | string | undefined\n): string | undefined => {\n if (isUndefined(error)) {\n return;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (\"message\" in error) {\n return error.message;\n }\n if (\"data\" in error && isObject(error.data) && \"error\" in error.data) {\n return error.data.error;\n }\n if (\"error\" in error) {\n return error.error;\n }\n if (\"status\" in error) {\n return String(error.status);\n }\n return t(\"components.ErrorBoundary.error\");\n};\n\nexport const isAPIErrorResponse = (error: unknown): error is APIErrorResponse =>\n isObject(error) && \"StatusCode\" in error;\n\nexport const handleError = (\n t: TFunction,\n isError: boolean,\n error:\n | FetchBaseQueryError\n | SerializedError\n | BaseQueryError\n | undefined,\n callback: (message?: string) => void\n): void => {\n if (!isError) {\n return;\n }\n const fallback = t(\"components.ErrorBoundary.error\");\n if (!error || typeof error !== \"object\" || !(\"data\" in error)) {\n callback(fallback);\n return;\n }\n callback((error.data as ErrorResponse).error ?? fallback);\n};\n\nconst baseQuery: BaseQueryFn<\n string | FetchArgs,\n unknown,\n FetchBaseQueryError\n> = async (arguments_, api, extraOptions = {}) => {\n return await fetchBaseQuery({\n baseUrl: \"/v1/\",\n prepareHeaders: async (headers) => {\n const accessToken = await auth.getAccessTokenSilently();\n headers.set(\"Authorization\", `Bearer ${accessToken}`);\n headers.set(\"X-AUTH0-audience\", window._jsenv.REACT_APP_AUTH0_AUDIENCE);\n headers.set(\n \"X-CARBON-Feature-Flags\",\n JSON.stringify([\n \"MetricValidCrops\",\n \"EncodingProtoJSON\",\n \"MetricOperatorEffectiveness\",\n ])\n );\n\n const now = DateTime.local();\n if (now.zoneName) {\n headers.set(\"Timezone\", now.zoneName);\n }\n return headers;\n },\n paramsSerializer: toQuery,\n })(arguments_, api, extraOptions);\n};\n\nexport const portalApi = createApi({\n reducerPath: \"portalApi\",\n keepUnusedDataFor: 60 * 5, // 5 minutes\n baseQuery,\n tagTypes: values(Tag),\n endpoints: (builder) => ({\n // AWS\n getS3UploadUrl: builder.query({\n query: ({ filename }) => ({\n url: `aws/s3/upload`,\n params: { filename },\n }),\n transformResponse: ({ url }: { url: string }) => url,\n }),\n\n // ALARMS\n listAlarms: builder.query({\n query: () => ({\n url: `alarms`,\n }),\n transformResponse: (response: AlarmResponse[]) =>\n response.map((alarm) => AlarmResponse.fromJSON(alarm)),\n providesTags: (result) =>\n result\n ? result.map((alarm) => ({ type: Tag.ALARM, id: alarm.db?.id }))\n : [],\n }),\n\n // HARDWARE\n getHardware: builder.query({\n query: () => `hardware`,\n transformResponse: (response: HardwareResponse) =>\n HardwareResponse.fromJSON(response),\n providesTags: (result) => {\n const tags: TagDescription[] = [];\n const robots = new Map();\n if (result?.lasers) {\n for (const laser of result.lasers) {\n robots.set(laser.robotId, true);\n }\n }\n for (const robotId of robots.keys()) {\n tags.push({\n type: Tag.ROBOT_HARDWARE,\n id: robotId,\n });\n }\n return tags;\n },\n }),\n\n // CONFIGS\n deleteConfigCache: builder.mutation({\n query: ({ serial }) => ({\n url: `configs/caches/${serial}`,\n method: Method.DELETE,\n }),\n }),\n getConfig: builder.query<\n ConfigResponse,\n { serial: string; fetchFirst?: boolean; noCache?: boolean }\n >({\n keepUnusedDataFor: 60 * 1, // 1 minute\n query: ({ serial, ...options }) => {\n if (options.noCache) {\n portalApi.util.invalidateTags([{ type: Tag.CONFIG, id: serial }]);\n }\n return { url: `configs/${serial}`, params: options };\n },\n transformResponse: (response: ConfigResponse) => {\n const { config, template, ...result } =\n ConfigResponse.fromJSON(response);\n return {\n ...result,\n config: config ? sortByName(config) : undefined,\n template: template ? sortByName(template) : undefined,\n };\n },\n providesTags: (result, error, { serial }) => [\n { type: Tag.CONFIG, id: serial },\n ],\n }),\n setConfigValue: builder.mutation<\n undefined,\n { serial: string; path: string; value: any }\n >({\n query: ({ serial, path, value }) => ({\n url: `configs/${serial}`,\n method: Method.POST,\n body: { path, value },\n }),\n onQueryStarted: async (\n { serial, path, value },\n { dispatch, queryFulfilled }\n ) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\"getConfig\", { serial }, (data) => {\n const node = getNodeFromPath(data.config, path);\n if (!node) {\n dispatch(\n portalApi.util.invalidateTags([\n { type: Tag.CONFIG, id: serial },\n ])\n );\n return data;\n }\n setValue(node, value);\n return data;\n })\n );\n },\n }),\n deleteConfigPath: builder.mutation<\n undefined,\n { serial: string; path: string }\n >({\n query: ({ serial, path }) => ({\n url: `configs/${serial}/${path}`,\n method: Method.DELETE,\n }),\n onQueryStarted: async (\n { serial, path },\n { dispatch, queryFulfilled }\n ) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\"getConfig\", { serial }, (data) => {\n const node = getParentNodeFromPath(data.config, path);\n const keyName = path.split(\"/\").pop();\n if (!node?.children) {\n dispatch(\n portalApi.util.invalidateTags([\n { type: Tag.CONFIG, id: serial },\n ])\n );\n return data;\n }\n for (let index = node.children.length - 1; index > 0; index--) {\n const child = node.children[index];\n if (child?.name === keyName) {\n node.children.splice(index, 1);\n }\n }\n return data;\n })\n );\n },\n }),\n getConfigTemplate: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ serial }) => ({ url: `configs/templates/${serial}` }),\n transformResponse: (response: ConfigNode) => {\n const result = ConfigNode.fromJSON(response);\n return sortByName(result);\n },\n providesTags: (result, error, { serial }) => [\n { type: Tag.CONFIG_TEMPLATE, id: serial },\n ],\n }),\n setConfigTemplateValue: builder.mutation<\n undefined,\n { serial: string; path: string; value: any }\n >({\n query: ({ serial, path, value }) => ({\n url: `configs/templates/${serial}`,\n method: Method.POST,\n body: { path, value, timestamp: Date.now() },\n }),\n onQueryStarted: async (\n { serial, path, value },\n { dispatch, queryFulfilled }\n ) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"getConfigTemplate\",\n { serial },\n (template) => {\n const node = getNodeFromPath(template, path);\n if (!node) {\n dispatch(\n portalApi.util.invalidateTags([\n { type: Tag.CONFIG_TEMPLATE, id: serial },\n ])\n );\n return template;\n }\n setValue(node, value);\n return template;\n }\n )\n );\n },\n }),\n deleteConfigTemplatePath: builder.mutation<\n undefined,\n { serial: string; path: string }\n >({\n query: ({ serial, path }) => ({\n url: `configs/templates/${serial}`,\n method: Method.DELETE,\n body: {\n path,\n timestamp: Date.now(),\n },\n }),\n onQueryStarted: async (\n { serial, path },\n { dispatch, queryFulfilled }\n ) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"getConfigTemplate\",\n { serial },\n (template) => {\n const node = getParentNodeFromPath(template, path);\n const keyName = path.split(\"/\").pop();\n if (!node?.children) {\n dispatch(\n portalApi.util.invalidateTags([\n { type: Tag.CONFIG_TEMPLATE, id: serial },\n ])\n );\n return template;\n }\n for (let index = node.children.length - 1; index > 0; index--) {\n const child = node.children[index];\n if (child?.name === keyName) {\n node.children.splice(index, 1);\n }\n }\n return template;\n }\n )\n );\n },\n }),\n getConfigAuditLog: builder.query<\n RoSyAuditLogResponse,\n { serial: string; lookbackDays?: number; logLimit?: number; key: string }\n >({\n query: ({ serial, lookbackDays = 30, logLimit = 100, key }) => ({\n method: Method.POST,\n url: `rosy_audit_logs/${serial}`,\n body: { lookbackDays, logLimit, key },\n }),\n transformResponse: (response: RoSyAuditLogResponse) =>\n RoSyAuditLogResponse.fromJSON(response),\n }),\n\n // CUSTOMERS\n listCustomers: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => \"customers\",\n transformResponse: (response: CustomerResponse[]) =>\n sortBy(response, \"name\").map((customer) =>\n CustomerResponse.fromJSON(customer)\n ),\n providesTags: (customers) => [\n Tag.CUSTOMER,\n ...(customers?.map((customer) => ({\n type: Tag.CUSTOMER,\n id: customer.db?.id,\n })) ?? []),\n ],\n }),\n getCustomer: builder.query<\n CustomerResponse | undefined,\n { customerId: number }\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => \"customers\",\n transformResponse: (\n response: CustomerResponse[] = [],\n _,\n { customerId }\n ) => {\n const customer = response.find(\n (customer) => customer.db?.id === customerId\n );\n return customer ? CustomerResponse.fromJSON(customer) : undefined;\n },\n onQueryStarted: async ({ customerId }, { dispatch, queryFulfilled }) => {\n const { data: customer } = await queryFulfilled;\n if (!customer) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listCustomers\",\n undefined,\n (customers) => {\n const index = customers.findIndex(\n (customer) => customer.db?.id === customerId\n );\n customers[index] = customer;\n return customers;\n }\n )\n );\n },\n providesTags: (customer) => [\n { type: Tag.CUSTOMER, id: customer?.db?.id },\n ],\n }),\n createCustomer: builder.mutation<\n CustomerResponse,\n Omit\n >({\n query: (customer) => ({\n url: \"customers\",\n method: Method.POST,\n body: CustomerResponse.toJSON(CustomerResponse.fromPartial(customer)),\n }),\n transformResponse: (customer) => CustomerResponse.fromJSON(customer),\n onQueryStarted: async (customer, { dispatch, queryFulfilled }) => {\n const { data: newCustomer } = await queryFulfilled;\n if (!newCustomer.db?.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listCustomers\",\n undefined,\n (customers) => {\n customers.push(newCustomer);\n return customers;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getCustomer\",\n { customerId: newCustomer.db.id },\n () => newCustomer\n )\n );\n },\n }),\n updateCustomer: builder.mutation<\n CustomerResponse,\n {\n customerId: number;\n customer: Omit;\n }\n >({\n query: ({ customerId, customer }) => ({\n url: `customers/${customerId}`,\n method: Method.POST,\n body: CustomerResponse.toJSON(CustomerResponse.fromPartial(customer)),\n }),\n transformResponse: (customer) => CustomerResponse.fromJSON(customer),\n onQueryStarted: async ({ customerId }, { dispatch, queryFulfilled }) => {\n const { data: updatedCustomer } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listCustomers\",\n undefined,\n (customers) => {\n const index = customers.findIndex(\n (customer) => customer.db?.id === customerId\n );\n customers[index] = updatedCustomer;\n return customers;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getCustomer\",\n { customerId },\n () => updatedCustomer\n )\n );\n },\n }),\n\n // MESSAGES\n listMessages: builder.query<\n Message[],\n { serial: string; pagination?: Pagination }\n >({\n keepUnusedDataFor: 60 * 1, // 1 minute\n query: ({ serial, pagination }) => ({\n url: `messages/robot/${serial}`,\n params: pagination,\n }),\n transformResponse: (response: MessagesResponse) => {\n const { messages } = MessagesResponse.fromJSON(response);\n return sortBy(messages, (message) => message.db?.createdAt ?? 0);\n },\n providesTags: (messages) => [\n Tag.MESSAGE,\n ...(messages?.map((message) => ({\n type: Tag.MESSAGE,\n id: message.db?.id,\n })) ?? []),\n ],\n }),\n sendMessage: builder.mutation(\n {\n query: ({ serial, message }) => ({\n url: `messages/robot/${serial}`,\n method: Method.POST,\n body: { message },\n }),\n transformResponse: (response: Message) => Message.fromJSON(response),\n invalidatesTags: (message) => [\n Tag.MESSAGE,\n { type: Tag.MESSAGE, id: message?.db?.id },\n ],\n }\n ),\n // REPORTS\n listReports: builder.query({\n query: () => \"reports\",\n transformResponse: (response: ReportResponse[]) =>\n response.map((report) => ReportResponse.fromJSON(report)),\n providesTags: (reports) => [\n Tag.REPORT,\n ...(reports?.map((report) => ({\n type: Tag.REPORT,\n id: report.slug,\n })) ?? []),\n ],\n }),\n getReport: builder.query<\n ReportResponse,\n { reportSlug: string; instance?: string }\n >({\n query: ({ reportSlug, instance }) => ({\n url: `reports/${reportSlug}`,\n params: { instance },\n }),\n transformResponse: (response: ReportResponse) =>\n ReportResponse.fromJSON(response),\n providesTags: (report) => [{ type: Tag.REPORT, id: report?.slug }],\n onQueryStarted: async ({ reportSlug }, { dispatch, queryFulfilled }) => {\n const { data: report } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listReports\",\n undefined,\n (reports) => {\n const index = reports.findIndex(\n (report) => report.slug === reportSlug\n );\n reports[index] = report;\n return reports;\n }\n )\n );\n },\n }),\n createReport: builder.mutation({\n query: (report) => ({\n url: \"reports/\",\n method: Method.POST,\n body: ReportResponse.toJSON(ReportResponse.fromPartial(report)),\n }),\n transformResponse: (response: ReportResponse) =>\n ReportResponse.fromJSON(response),\n onQueryStarted: async (report, { dispatch, queryFulfilled }) => {\n const { data: newReport } = await queryFulfilled;\n if (!newReport.db?.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listReports\",\n undefined,\n (reports) => {\n reports.push(newReport);\n return reports;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getReport\",\n { reportSlug: newReport.slug },\n () => newReport\n )\n );\n },\n }),\n updateReport: builder.mutation({\n query: (report) => ({\n url: `reports/${report.slug}`,\n method: Method.POST,\n body: ReportResponse.toJSON(ReportResponse.fromPartial(report)),\n }),\n transformResponse: (response: ReportResponse) =>\n ReportResponse.fromJSON(response),\n onQueryStarted: async (report, { dispatch, queryFulfilled }) => {\n const { data: updatedReport } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listReports\",\n undefined,\n (reports) => {\n const index = reports.findIndex(\n (report) => report.slug === updatedReport.slug\n );\n reports[index] = updatedReport;\n return reports;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getReport\",\n { reportSlug: updatedReport.slug },\n () => updatedReport\n )\n );\n },\n }),\n deleteReport: builder.mutation({\n query: ({ slug }) => ({\n url: `reports/${slug}`,\n method: Method.DELETE,\n }),\n onQueryStarted: async ({ slug }, { dispatch, queryFulfilled }) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listReports\",\n undefined,\n (reports) => {\n spliceIfExists(reports, (report) => report.slug === slug, 1);\n return reports;\n }\n )\n );\n dispatch(\n portalApi.util.invalidateTags([{ type: Tag.REPORT, id: slug }])\n );\n },\n }),\n listReportInstances: builder.query<\n ReportInstanceResponse[],\n { slug: string }\n >({\n query: ({ slug }) => `reports/${slug}/runs`,\n transformResponse: (response: ReportInstanceResponse[]) =>\n response.map((instance) => ReportInstanceResponse.fromJSON(instance)),\n providesTags: (instances) => [\n Tag.REPORT_INSTANCE,\n ...(instances?.map((instance) => ({\n type: Tag.REPORT_INSTANCE,\n id: instance.slug,\n })) ?? []),\n ],\n }),\n getReportInstance: builder.query<\n ReportInstanceResponse,\n { reportSlug: string; instanceSlug: string }\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ reportSlug, instanceSlug }) =>\n `reports/${reportSlug}/runs/${instanceSlug}`,\n transformResponse: (response: ReportInstanceResponse) =>\n ReportInstanceResponse.fromJSON(response),\n providesTags: (instance) => [\n { type: Tag.REPORT_INSTANCE, id: instance?.slug },\n ],\n onQueryStarted: async (\n { reportSlug, instanceSlug },\n { dispatch, queryFulfilled }\n ) => {\n const { data: instance } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listReportInstances\",\n { slug: reportSlug },\n (instances) => {\n const index = instances.findIndex(\n (instance) => instance.slug === instanceSlug\n );\n instances[index] = instance;\n return instances;\n }\n )\n );\n },\n }),\n createReportInstance: builder.mutation<\n ReportInstanceResponse,\n { reportSlug: string; instance: ReportInstanceResponse }\n >({\n query: ({ reportSlug, instance }) => ({\n url: `reports/${reportSlug}/runs`,\n method: Method.POST,\n body: ReportInstanceResponse.toJSON(\n ReportInstanceResponse.fromPartial(instance)\n ),\n }),\n transformResponse: (response: ReportInstanceResponse) =>\n ReportInstanceResponse.fromJSON(response),\n onQueryStarted: async ({ reportSlug }, { dispatch, queryFulfilled }) => {\n const { data: newInstance } = await queryFulfilled;\n if (!newInstance.db?.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listReportInstances\",\n { slug: reportSlug },\n (instances) => {\n instances.push(newInstance);\n return instances;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getReportInstance\",\n { reportSlug, instanceSlug: newInstance.slug },\n () => newInstance\n )\n );\n },\n }),\n updateReportInstance: builder.mutation<\n ReportInstanceResponse,\n { reportSlug: string; instance: ReportInstanceResponse }\n >({\n query: ({ reportSlug, instance }) => ({\n url: `reports/${reportSlug}/runs/${instance.slug}`,\n method: Method.POST,\n body: ReportInstanceResponse.toJSON(\n ReportInstanceResponse.fromPartial(instance)\n ),\n }),\n transformResponse: (response: ReportInstanceResponse) =>\n ReportInstanceResponse.fromJSON(response),\n onQueryStarted: async ({ reportSlug }, { dispatch, queryFulfilled }) => {\n const { data: updatedInstance } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listReportInstances\",\n { slug: reportSlug },\n (instances) => {\n const index = instances.findIndex(\n (instance) => instance.slug === updatedInstance.slug\n );\n instances[index] = updatedInstance;\n return instances;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getReportInstance\",\n { reportSlug, instanceSlug: updatedInstance.slug },\n () => updatedInstance\n )\n );\n },\n }),\n deleteReportInstance: builder.mutation<\n void,\n { reportSlug: string; instanceSlug: string }\n >({\n query: ({ reportSlug, instanceSlug }) => ({\n url: `reports/${reportSlug}/runs/${instanceSlug}`,\n method: Method.DELETE,\n }),\n onQueryStarted: async (\n { reportSlug, instanceSlug },\n { dispatch, queryFulfilled }\n ) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listReportInstances\",\n { slug: reportSlug },\n (instances) => {\n spliceIfExists(\n instances,\n (instance) => instance.slug === instanceSlug,\n 1\n );\n return instances;\n }\n )\n );\n dispatch(\n portalApi.util.invalidateTags([\n { type: Tag.REPORT_INSTANCE, id: instanceSlug },\n ])\n );\n },\n }),\n getDateMetrics: builder.query<\n DailyMetricsByDateByRobotResponse,\n { serials: string[]; dates: string[]; instance?: string }\n >({\n query: (parameters) => ({\n url: \"metrics/certified\",\n params: parameters,\n }),\n transformResponse: (response: DailyMetricsByDateByRobotResponse) =>\n DailyMetricsByDateByRobotResponse.fromJSON(response),\n providesTags: (response) => {\n const tags: TagDescription[] = [];\n for (const [serial, metricsByDate] of entries(\n response?.metrics ?? {}\n )) {\n for (const [date] of entries(metricsByDate.metrics)) {\n tags.push({ type: Tag.METRIC, id: `${serial}-${date}` });\n }\n }\n return tags;\n },\n }),\n getSpatial: builder.query<\n BlocksByDateByRobotResponse,\n { serials: string[]; dates: string[] }\n >({\n query: (parameters) => ({\n url: \"metrics/spatial\",\n params: parameters,\n }),\n transformResponse: (response: BlocksByDateByRobotResponse) =>\n BlocksByDateByRobotResponse.fromJSON(response),\n providesTags: (response) => {\n const tags: TagDescription[] = [];\n for (const [serial, blocksByDate] of entries(response?.blocks ?? {})) {\n for (const [date] of entries(blocksByDate.blocks)) {\n tags.push({ type: Tag.SPATIAL, id: `${serial}-${date}` });\n }\n }\n return tags;\n },\n }),\n\n // ROBOTS\n listRobots: builder.query<\n RobotSummaryResponse[],\n {\n instance?: string;\n latestMetrics?: boolean;\n }\n >({\n keepUnusedDataFor: 60 * 1, // 1 minute\n query: ({ instance, latestMetrics = true }) => ({\n url: `robots`,\n params: {\n showOffline: true,\n showInternal: true,\n instance,\n latestMetrics,\n },\n }),\n transformResponse: (response: RobotSummaryResponse[] = []) => {\n response.sort(robotSort);\n for (const summary of response) {\n if (summary.config) {\n summary.config = sortByName(ConfigNode.fromJSON(summary.config));\n }\n }\n return response.map((summary) =>\n RobotSummaryResponse.fromJSON(summary)\n );\n },\n providesTags: (summaries) => [\n Tag.ROBOT,\n ...(summaries?.map((summary) => ({\n type: Tag.ROBOT,\n id: summary.robot?.db?.id,\n })) ?? []),\n ],\n }),\n getRobot: builder.query({\n keepUnusedDataFor: 60 * 1, // 1 minute\n query: ({ serial }) => `robots/${serial}`,\n providesTags: (summary) => [\n { type: Tag.ROBOT, id: summary?.robot?.db?.id },\n ...(summary?.alarmList\n ? summary.alarmList.map((alarm) => ({\n type: Tag.ALARM,\n id: alarm.db?.id,\n }))\n : []),\n ],\n transformResponse: (summary: RobotSummaryResponse) =>\n RobotSummaryResponse.fromJSON(summary),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: summary } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\"listRobots\", {}, (robots) => {\n const index = robots.findIndex(\n (robot) => robot.robot?.serial === serial\n );\n robots[index] = summary;\n return robots;\n })\n );\n },\n }),\n getRobotHistory: builder.query<\n HistoryResponse,\n { serial: string; date: string }\n >({\n query: ({ serial, date }) => `robots/${serial}/history/${date}`,\n transformResponse: (response: HistoryResponse) =>\n HistoryResponse.fromJSON(response),\n }),\n getRobotBlocks: builder.query<\n BlocksResponse,\n { serial: string; date: string }\n >({\n query: ({ serial, date }) => `robots/${serial}/blocks/${date}`,\n transformResponse: (response: BlocksResponse) =>\n BlocksResponse.fromJSON(response),\n }),\n getRobotMetrics: builder.query<\n DailyMetricResponse,\n { serial: string; date: string }\n >({\n query: ({ serial, date }) => `robots/${serial}/metrics/${date}`,\n transformResponse: (response: DailyMetricResponse) =>\n DailyMetricResponse.fromJSON(response),\n providesTags: (result, error, { serial, date }) => [\n { type: Tag.METRIC, id: `${serial}-${date}` },\n ],\n }),\n createRobot: builder.mutation<\n RobotResponse,\n { serial: string; copyFrom: string }\n >({\n query: (parameters) => ({\n url: \"robots\",\n method: Method.POST,\n body: parameters,\n }),\n transformResponse: (summary: RobotResponse) =>\n RobotResponse.fromJSON(summary),\n // can't splice this into the cache because it's not a RobotSummaryResponse\n invalidatesTags: () => [Tag.ROBOT],\n }),\n updateRobot: builder.mutation<\n RobotResponse,\n {\n serial: string;\n robot: Partial<\n Pick\n >;\n }\n >({\n query: ({ serial, robot }) => ({\n url: `robots/${serial}`,\n method: Method.POST,\n body: RobotResponse.toJSON(RobotResponse.fromPartial(robot)),\n }),\n transformResponse: (summary: RobotResponse) =>\n RobotResponse.fromJSON(summary),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: robot } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\"listRobots\", {}, (summaries) => {\n const index = summaries.findIndex(\n (instance) => instance.robot?.serial === serial\n );\n if (summaries[index]) {\n summaries[index].robot = robot;\n }\n return summaries;\n })\n );\n dispatch(\n portalApi.util.updateQueryData(\"getRobot\", { serial }, (summary) => {\n summary.robot = robot;\n return summary;\n })\n );\n },\n }),\n assignRobot: builder.mutation<\n RobotResponse,\n { serial: string; customerId: number }\n >({\n query: ({ serial, customerId }) => ({\n url: `robots/${serial}/assign`,\n method: Method.POST,\n body: { customerId },\n }),\n transformResponse: (summary: RobotResponse) =>\n RobotResponse.fromJSON(summary),\n // can't splice this into the cache because it's not a RobotSummaryResponse\n invalidatesTags: (robot) => [\n Tag.ROBOT,\n { type: Tag.ROBOT, id: robot?.db?.id },\n ],\n }),\n getRobotProxy: builder.mutation({\n query: ({ serial }) => `robots/${serial}/remote`,\n transformResponse: (summary: RobotResponse) =>\n RobotResponse.fromJSON(summary),\n }),\n listRobotCrops: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ serial }) => `robots/${serial}/crops`,\n transformResponse: (response: RobotCrop[]) =>\n response.map((crop) => RobotCrop.fromJSON(crop)),\n providesTags: (robotCrops) => [\n Tag.ROBOT_CROP,\n ...(robotCrops?.map(({ crop }) => ({\n type: Tag.ROBOT_CROP,\n id: crop?.id,\n })) ?? []),\n ],\n }),\n listRobotJobs: builder.query<\n PortalJob[],\n { serial: string; startDate: string; endDate: string }\n >({\n query: ({ serial, startDate, endDate }) =>\n `robots/${serial}/jobs/${startDate}/${endDate}`,\n transformResponse: (response: PortalJob[]) =>\n response.map((job) => PortalJob.fromJSON(job)),\n providesTags: (jobs) => [\n Tag.ROBOT_JOB,\n ...(jobs?.map((job) => ({\n type: Tag.ROBOT_JOB,\n id: job.jobId,\n })) ?? []),\n ],\n }),\n getJob: builder.query({\n query: ({ jobId }) => `jobs/${jobId}`,\n transformResponse: (response: PortalJob) => PortalJob.fromJSON(response),\n providesTags: (job) => [\n Tag.ROBOT_JOB,\n { type: Tag.ROBOT_JOB, id: job?.jobId },\n { type: Tag.JOB_METRIC, id: job?.jobId },\n ],\n }),\n getJobHistory: builder.query({\n query: ({ jobId }) => `jobs/${jobId}/history`,\n transformResponse: (response: HistoryResponse) =>\n HistoryResponse.fromJSON(response),\n }),\n getJobBlocks: builder.query({\n query: ({ jobId }) => `jobs/${jobId}/blocks`,\n transformResponse: (response: BlocksResponse) =>\n BlocksResponse.fromJSON(response),\n }),\n getRobotHardware: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ serial }) => `robots/${serial}/hardware`,\n transformResponse: (response: HardwareResponse) =>\n HardwareResponse.fromJSON(response),\n providesTags: (robotCrops, error, { serial }) => [\n Tag.ROBOT_HARDWARE,\n {\n type: Tag.ROBOT_HARDWARE,\n id: serial,\n },\n ],\n }),\n\n // FARMS\n listFarms: builder.query({\n // Ideally, we'd let this paginate, but RTK Query doesn't have good\n // support for this... yet:\n //\n // https://github.com/reduxjs/redux-toolkit/discussions/1171#discussioncomment-11465176\n //\n // ...so we just fetch exhaustively for now.\n queryFn: async (_argument, _api, _options, baseQuery) => {\n const pages: Farm[][] = [];\n let response: ListFarmsResponse | undefined;\n do {\n const pageToken = response?.nextPageToken ?? \"\";\n const queryResult = await baseQuery({\n url: \"farms\",\n params: { pageToken },\n });\n const { data, error } = queryResult;\n if (error) {\n return { error };\n }\n response = ListFarmsResponse.fromJSON(data);\n pages.push(response.farms);\n } while (response.nextPageToken);\n return { data: pages.flat() };\n },\n providesTags: (farms: Farm[] | undefined) =>\n farms?.flatMap((farm) => {\n const id = farm.id?.id;\n return id ? [{ type: Tag.FARM, id }] : [];\n }) ?? [],\n }),\n getFarm: builder.query({\n query: (farmId) => `farms/${farmId}`,\n transformResponse: (response: unknown) => Farm.fromJSON(response),\n providesTags: (farm) => {\n const id = farm?.id?.id;\n return id ? [{ type: Tag.FARM, id }] : [];\n },\n }),\n\n // AUTOTRACTOR JOBS\n listAutotractorJobs: builder.query({\n query: ({ serial }) => ({\n url: \"rtc/jobs\",\n params: { serial },\n }),\n transformResponse: (response) =>\n AutotractorJobList.fromJSON(response).jobs,\n providesTags: (jobs) => [\n Tag.AUTOTRACTOR_JOB,\n ...(jobs?.map((job) => ({\n type: Tag.AUTOTRACTOR_JOB,\n id: job.id,\n })) ?? []),\n ],\n }),\n createAutotractorJob: builder.mutation<\n AutotractorJob,\n { job: AutotractorJob }\n >({\n query: ({ job }) => ({\n url: `rtc/jobs`,\n method: \"POST\",\n body: AutotractorJob.toJSON(job),\n }),\n transformResponse: (response: unknown) =>\n AutotractorJob.fromJSON(response),\n onQueryStarted: async (argument, { dispatch, queryFulfilled }) => {\n const { data: job } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listAutotractorJobs\",\n { serial: job.robot },\n (jobs) => {\n jobs.push(job);\n return jobs;\n }\n )\n );\n },\n }),\n\n // FIELD DEFINITIONS\n listFieldDefinitions: builder.query<\n FieldDefinition[],\n {\n serial: string;\n }\n >({\n query: ({ serial }) => `fields/robots/${serial}/definitions`,\n transformResponse: (response: FieldDefinition[]) =>\n response.map((definition) => FieldDefinition.fromJSON(definition)),\n providesTags: (definitions) => [\n Tag.FIELD_DEFINITION,\n ...(definitions?.map((definition) => ({\n type: Tag.FIELD_DEFINITION,\n id: definition.db?.id,\n })) ?? []),\n ],\n }),\n createFieldDefinition: builder.mutation<\n FieldDefinition,\n {\n serial: string;\n fieldDefinition: Required<\n Omit\n >;\n }\n >({\n query: ({ serial, fieldDefinition }) => ({\n url: `fields/robots/${serial}/definitions`,\n method: \"POST\",\n body: FieldDefinition.toJSON(\n FieldDefinition.fromPartial(fieldDefinition)\n ),\n }),\n transformResponse: (response: FieldDefinition) =>\n FieldDefinition.fromJSON(response),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: newDefinition } = await queryFulfilled;\n if (!newDefinition.db?.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listFieldDefinitions\",\n { serial },\n (definitions) => {\n definitions.push(newDefinition);\n return definitions;\n }\n )\n );\n },\n }),\n\n // USERS\n listUsers: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => \"users\",\n transformResponse: (response: CarbonUser[]) =>\n transformKeys(response, snakeToCamel),\n providesTags: (users) => [\n Tag.USER,\n ...(users?.map((user) => ({\n type: Tag.USER,\n id: user.email,\n })) ?? []),\n ],\n }),\n getUser: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ userId }) => {\n return `users/${userId}`;\n },\n transformResponse: (response: UserResponse) =>\n UserResponse.fromJSON(response),\n providesTags: (response) => {\n const tags = [{ type: Tag.USER, id: response?.user?.userId }];\n if (!isEmpty(response?.customer)) {\n tags.push({\n type: Tag.CUSTOMER,\n id: String(response?.customer?.db?.id),\n });\n }\n for (const fleetView of response?.fleetViews ?? []) {\n if (fleetView.db) {\n tags.push({\n type: Tag.FLEET_VIEW,\n id: String(fleetView.db.id),\n });\n }\n }\n return tags;\n },\n }),\n updateUser: builder.mutation<\n undefined,\n { userId: string; user: Partial }\n >({\n query: ({ userId, user }) => {\n const { appMetadata, userMetadata } = user;\n return {\n url: `users/${userId}`,\n method: Method.POST,\n body: {\n ...transformKeys(user, camelToSnake),\n app_metadata: appMetadata,\n user_metadata: userMetadata,\n },\n };\n },\n onQueryStarted: async (\n { userId, user },\n { dispatch, queryFulfilled }\n ) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\"listUsers\", undefined, (users) => {\n const index = users.findIndex((user) => user.userId === userId);\n users[index] = user;\n return users;\n })\n );\n dispatch(\n portalApi.util.invalidateTags([{ type: Tag.USER, id: userId }])\n );\n },\n }),\n deleteUser: builder.mutation({\n query: ({ userId }) => ({\n url: `users/${userId}`,\n method: Method.DELETE,\n }),\n onQueryStarted: async ({ userId }, { dispatch, queryFulfilled }) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\"listUsers\", undefined, (users) => {\n spliceIfExists(users, (user) => user.userId === userId, 1);\n return users;\n })\n );\n dispatch(\n portalApi.util.invalidateTags([{ type: Tag.USER, id: userId }])\n );\n },\n }),\n inviteUser: builder.mutation<\n undefined,\n { email: string; customerId?: number }\n >({\n query: ({ email, customerId }) => ({\n url: \"users/invite\",\n method: Method.POST,\n body: { email, customerId },\n }),\n invalidatesTags: (result, error, { email }) => [\n Tag.USER,\n { type: Tag.USER, id: email },\n ],\n }),\n createFleetView: builder.mutation<\n FleetView,\n { userId: string; fleetView: FleetView }\n >({\n query: ({ userId, fleetView }) => {\n return {\n url: `users/${userId}/fleetviews`,\n method: Method.POST,\n body: FleetView.toJSON(FleetView.fromPartial(fleetView)),\n };\n },\n transformResponse: (fleetView: FleetView) =>\n FleetView.fromJSON(fleetView),\n onQueryStarted: async ({ userId }, { dispatch, queryFulfilled }) => {\n const { data: newFleetView } = await queryFulfilled;\n if (!newFleetView.db?.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\"getUser\", { userId }, (user) => {\n user.fleetViews.push(newFleetView);\n return user;\n })\n );\n },\n }),\n updateFleetView: builder.mutation<\n undefined,\n { userId: string; fleetView: FleetView }\n >({\n query: ({ userId, fleetView }) => {\n return {\n url: `users/${userId}/fleetviews/${fleetView.db?.id}`,\n method: Method.POST,\n body: FleetView.toJSON(FleetView.fromPartial(fleetView)),\n };\n },\n onQueryStarted: async (\n { userId, fleetView },\n { dispatch, queryFulfilled }\n ) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\"getUser\", { userId }, (user) => {\n const index = user.fleetViews.findIndex(\n (current) => current.db?.id === fleetView.db?.id\n );\n user.fleetViews[index] = fleetView;\n return user;\n })\n );\n },\n }),\n deleteFleetView: builder.mutation<\n undefined,\n { userId: string; fleetViewId: number }\n >({\n query: ({ userId, fleetViewId }) => ({\n url: `users/${userId}/fleetviews/${fleetViewId}`,\n method: Method.DELETE,\n }),\n onQueryStarted: async (\n { userId, fleetViewId },\n { dispatch, queryFulfilled }\n ) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\"getUser\", { userId }, (user) => {\n spliceIfExists(\n user.fleetViews,\n (fleetView) => fleetView.db?.id === fleetViewId,\n 1\n );\n return user;\n })\n );\n },\n }),\n\n // VESELKA\n listUploads: builder.query<\n Image[],\n { serial: string; pagination?: Pagination }\n >({\n query: ({ serial, pagination }) => ({\n url: `veselka/uploads/${serial}`,\n params: pagination,\n }),\n transformResponse: (images: Image[]) =>\n images.map((image) => Image.fromJSON(image)),\n providesTags: (images) => [\n Tag.IMAGE,\n ...(images?.map((image) => ({\n type: Tag.IMAGE,\n id: image.id,\n })) ?? []),\n ],\n }),\n listCrops: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => \"veselka/models/crops\",\n transformResponse: (crops: Crop[]) =>\n crops.map((crop) => Crop.fromJSON(crop)),\n providesTags: (crops) => [\n Tag.CROP,\n ...(crops?.map((crop) => ({\n type: Tag.CROP,\n id: crop.id,\n })) ?? []),\n ],\n }),\n getCrop: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => \"veselka/models/crops\",\n providesTags: (crop) =>\n crop\n ? [\n {\n type: Tag.CROP,\n id: crop.id,\n },\n ]\n : [],\n transformResponse: (crops: Crop[], error, { cropId }) => {\n const crop = findWhere(crops, { id: cropId });\n if (!crop) {\n return;\n }\n return Crop.fromJSON(crop);\n },\n onQueryStarted: async ({ cropId }, { dispatch, queryFulfilled }) => {\n const { data: crop } = await queryFulfilled;\n if (!crop) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\"listCrops\", undefined, (crops) => {\n const index = crops.findIndex((crop) => crop.id === cropId);\n crops[index] = crop;\n return crops;\n })\n );\n },\n }),\n listLabelPoints: builder.query<\n ListLabelPointsResponse,\n {\n page: number;\n pageSize: number;\n crops?: string[];\n robots?: string[];\n chipIds?: string[];\n capturedAt?: DateRange;\n }\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ page, pageSize, crops, robots, capturedAt, chipIds }) => ({\n url: \"veselka/label-points\",\n params: {\n page,\n pageSize,\n crops,\n robots,\n capturedAt: (capturedAt || [])\n .map((value) => value?.toISO() ?? \"\")\n .join(\",\"),\n chipIds,\n },\n }),\n transformResponse: (response: ListLabelPointsResponse) =>\n ListLabelPointsResponse.fromJSON(response),\n providesTags: (response) => [\n Tag.LABEL_POINT,\n ...(response?.data.map(({ id }) => ({\n type: Tag.LABEL_POINT,\n id,\n })) ?? []),\n ],\n }),\n getModel: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ modelId }) => `veselka/models/${modelId}`,\n transformResponse: (model: Model) => Model.fromJSON(model),\n providesTags: (result, error, { modelId }) => [\n { type: Tag.MODEL, id: modelId },\n ],\n }),\n\n // ADMIN\n deleteCaches: builder.mutation({\n query: () => ({\n url: `/admin/caches`,\n method: Method.DELETE,\n }),\n }),\n getGlobalAlarmLists: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => \"/admin/alarms/lists\",\n transformResponse: (response: GlobalAlarmlists) =>\n GlobalAlarmlists.fromJSON(response),\n providesTags: () => [\n {\n type: Tag.ADMIN_ALARM,\n id: -1,\n },\n ],\n }),\n getRobotAlarmLists: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ serial }) => `/admin/alarms/lists/${serial}`,\n transformResponse: (response: RobotAlarmlists) =>\n RobotAlarmlists.fromJSON(response),\n providesTags: (result, error, { serial }) => [\n {\n type: Tag.ADMIN_ALARM,\n id: serial,\n },\n ],\n }),\n setGlobalAlarmLists: builder.mutation<\n GlobalAlarmlists,\n Omit\n >({\n query: (lists) => ({\n url: \"admin/alarms/lists\",\n method: Method.POST,\n body: GlobalAlarmlists.toJSON(lists),\n }),\n transformResponse: (response: GlobalAlarmlists) =>\n GlobalAlarmlists.fromJSON(response),\n onQueryStarted: async (lists, { dispatch, queryFulfilled }) => {\n const { data: newLists } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"getGlobalAlarmLists\",\n undefined,\n () => newLists\n )\n );\n },\n }),\n setRobotAlarmLists: builder.mutation<\n RobotAlarmlists,\n { serial: string; lists: Omit }\n >({\n query: ({ serial, lists }) => ({\n url: `admin/alarms/lists/${serial}`,\n method: Method.POST,\n body: RobotAlarmlists.toJSON(lists),\n }),\n transformResponse: (response: GlobalAlarmlists) =>\n RobotAlarmlists.fromJSON(response),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: newLists } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"getRobotAlarmLists\",\n { serial },\n () => newLists\n )\n );\n },\n }),\n\n // ALMANANC\n listAlmanacsForRobot: builder.query({\n query: ({ serial }) => `/profiles/almanacs/robots/${serial}`,\n transformResponse: (response: AlmanacConfig[]) =>\n response.map((almanac) => AlmanacConfig.fromJSON(almanac)),\n providesTags: (almanacs) =>\n almanacs?.map((almanac) => ({\n type: Tag.ALMANAC,\n id: almanac.id,\n })) ?? [],\n }),\n getAlmanac: builder.query<\n AlmanacConfig,\n {\n uuid: string;\n }\n >({\n query: ({ uuid }) => `/profiles/almanacs/profiles/${uuid}`,\n transformResponse: (response: AlmanacConfig) =>\n AlmanacConfig.fromJSON(response),\n providesTags: (result, error, { uuid }) => [\n {\n type: Tag.ALMANAC,\n id: uuid,\n },\n ],\n }),\n deleteAlmanac: builder.mutation({\n query: ({ uuid }) => ({\n url: `/profiles/almanacs/profiles/${uuid}`,\n method: Method.DELETE,\n }),\n invalidatesTags: (result, error, { uuid }) => [\n { type: Tag.ALMANAC, id: uuid },\n ],\n }),\n setAlmanac: builder.mutation<\n AlmanacConfig,\n { serial?: string; almanac: AlmanacConfig }\n >({\n query: ({ serial, almanac }) => ({\n url: `/profiles/almanacs/robots/${serial}`,\n method: Method.POST,\n body: AlmanacConfig.toJSON(almanac),\n }),\n transformResponse: (response: AlmanacConfig) =>\n AlmanacConfig.fromJSON(response),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: newAlmanac } = await queryFulfilled;\n if (!serial || !newAlmanac.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listAlmanacsForRobot\",\n { serial },\n (almanacs) => {\n almanacs.push(newAlmanac);\n return almanacs;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getAlmanac\",\n { uuid: newAlmanac.id },\n () => newAlmanac\n )\n );\n },\n }),\n // any string is valid for the input. Just matching the signature of\n // listAlmanacsForRobot so they can be used interchangeably\n listGlobalAlmanacs: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => `/profiles/almanacs/global`,\n transformResponse: (response: AlmanacConfig[]) =>\n response.map((almanac) => AlmanacConfig.fromJSON(almanac)),\n providesTags: (almanacs) =>\n almanacs?.map((almanac) => ({\n type: Tag.ADMIN_ALMANAC,\n id: almanac.id,\n })) ?? [],\n }),\n getGlobalAlmanac: builder.query({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ uuid }) => `/profiles/almanacs/global/${uuid}`,\n transformResponse: (response: AlmanacConfig) =>\n AlmanacConfig.fromJSON(response),\n providesTags: (result, error, { uuid }) => [\n {\n type: Tag.ADMIN_ALMANAC,\n id: uuid,\n },\n ],\n onQueryStarted: async ({ uuid }, { dispatch, queryFulfilled }) => {\n const { data: newAlmanac } = await queryFulfilled;\n if (!newAlmanac.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listGlobalAlmanacs\",\n {},\n (almanacs) => {\n const index = almanacs.findIndex(\n (almanac) => almanac.id === uuid\n );\n if (index === -1) {\n almanacs.push(newAlmanac);\n } else {\n almanacs[index] = newAlmanac;\n }\n return almanacs;\n }\n )\n );\n },\n }),\n deleteGlobalAlmanac: builder.mutation({\n query: ({ uuid }) => ({\n url: `/profiles/almanacs/global/${uuid}`,\n method: Method.DELETE,\n }),\n onQueryStarted: async ({ uuid }, { dispatch, queryFulfilled }) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listGlobalAlmanacs\",\n {},\n (almanacs) => {\n spliceIfExists(almanacs, (almanac) => almanac.id === uuid, 1);\n return almanacs;\n }\n )\n );\n dispatch(\n portalApi.util.invalidateTags([{ type: Tag.ADMIN_ALMANAC, id: uuid }])\n );\n },\n }),\n setGlobalAlmanac: builder.mutation<\n AlmanacConfig,\n { serial?: string; almanac: AlmanacConfig }\n >({\n query: ({ almanac }) => {\n return {\n url: `/profiles/almanacs/global/${almanac.id}`,\n method: Method.POST,\n body: AlmanacConfig.toJSON(almanac),\n };\n },\n transformResponse: (response: AlmanacConfig) =>\n AlmanacConfig.fromJSON(response),\n onQueryStarted: async (_, { dispatch, queryFulfilled }) => {\n const { data: newAlmanac } = await queryFulfilled;\n if (!newAlmanac.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listGlobalAlmanacs\",\n {},\n (almanacs) => {\n const index = almanacs.findIndex(\n (almanac) => almanac.id === newAlmanac.id\n );\n if (index === -1) {\n almanacs.push(newAlmanac);\n } else {\n almanacs[index] = newAlmanac;\n }\n return almanacs;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getGlobalAlmanac\",\n { uuid: newAlmanac.id },\n () => newAlmanac\n )\n );\n },\n }),\n\n // DISCRIMINATOR\n listDiscriminatorsForRobot: builder.query<\n DiscriminatorConfig[],\n { serial: string }\n >({\n query: ({ serial }) => `/profiles/discriminators/robots/${serial}`,\n transformResponse: (response: DiscriminatorConfig[]) =>\n response.map((discriminator) =>\n DiscriminatorConfig.fromJSON(discriminator)\n ),\n providesTags: (discriminators) =>\n discriminators?.map((discrimininator) => ({\n type: Tag.DISCRIMINATOR,\n id: discrimininator.id,\n })) ?? [],\n }),\n getDiscriminator: builder.query({\n query: ({ uuid }) => `/profiles/discriminators/profiles/${uuid}`,\n transformResponse: (response: DiscriminatorConfig) =>\n DiscriminatorConfig.fromJSON(response),\n providesTags: (result, error, { uuid }) => [\n {\n type: Tag.DISCRIMINATOR,\n id: uuid,\n },\n ],\n }),\n deleteDiscriminator: builder.mutation({\n query: ({ uuid }) => ({\n url: `/profiles/discriminators/profiles/${uuid}`,\n method: Method.DELETE,\n }),\n invalidatesTags: (result, error, { uuid }) => [\n { type: Tag.DISCRIMINATOR, id: uuid },\n ],\n }),\n setDiscriminator: builder.mutation<\n DiscriminatorConfig,\n { serial: string; discriminator: DiscriminatorConfig }\n >({\n query: ({ serial, discriminator }) => ({\n url: `/profiles/discriminators/robots/${serial}`,\n method: Method.POST,\n body: DiscriminatorConfig.toJSON(discriminator),\n }),\n transformResponse: (response: DiscriminatorConfig) =>\n DiscriminatorConfig.fromJSON(response),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: newDiscriminator } = await queryFulfilled;\n if (!newDiscriminator.id) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listDiscriminatorsForRobot\",\n { serial },\n (discriminators) => {\n const index = discriminators.findIndex(\n (discriminator) => discriminator.id === newDiscriminator.id\n );\n if (index === -1) {\n discriminators.push(newDiscriminator);\n } else {\n discriminators[index] = newDiscriminator;\n }\n return discriminators;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getDiscriminator\",\n { uuid: newDiscriminator.id },\n () => newDiscriminator\n )\n );\n },\n }),\n\n // MODELINATOR\n listModelinatorsForRobotAndCrop: builder.query<\n ModelinatorConfig[],\n { serial: string; cropId: string }\n >({\n query: ({ serial, cropId }) =>\n `/profiles/modelinators/robots/${serial}/crops/${cropId}`,\n transformResponse: (response: ModelinatorConfig[]) =>\n response.map((modelinator) => ModelinatorConfig.fromJSON(modelinator)),\n providesTags: (modelinators, error, { serial }) =>\n modelinators?.map((modelinator) => ({\n type: Tag.MODELINDATOR,\n id: getModelinatorId(serial, modelinator),\n })) ?? [],\n }),\n getModelinator: builder.query<\n ModelinatorConfig | undefined,\n { serial: string; cropId: string; modelId: string }\n >({\n query: ({ serial, cropId }) =>\n `/profiles/modelinators/robots/${serial}/crops/${cropId}`,\n transformResponse: (\n modelinators: ModelinatorConfig[],\n error,\n { cropId, modelId }\n ) => {\n const modelinator = findWhere(modelinators, { cropId, modelId });\n if (!modelinator) {\n return;\n }\n return ModelinatorConfig.fromJSON(modelinator);\n },\n onQueryStarted: async (\n { serial, cropId, modelId },\n { dispatch, queryFulfilled }\n ) => {\n const { data: newModelinator } = await queryFulfilled;\n if (!newModelinator) {\n return;\n }\n dispatch(\n portalApi.util.updateQueryData(\n \"listModelinatorsForRobotAndCrop\",\n { serial, cropId },\n (modelinators) => {\n const index = modelinators.findIndex(\n (modelinator) => modelinator.modelId === modelId\n );\n if (index === -1) {\n modelinators.push(newModelinator);\n } else {\n modelinators[index] = newModelinator;\n }\n return modelinators;\n }\n )\n );\n },\n }),\n setModelinator: builder.mutation<\n ModelinatorConfig,\n { serial: string; modelinator: ModelinatorConfig }\n >({\n query: ({ serial, modelinator }) => ({\n url: `/profiles/modelinators/robots/${serial}`,\n method: Method.POST,\n body: ModelinatorConfig.toJSON(modelinator),\n }),\n transformResponse: (response: ModelinatorConfig) =>\n ModelinatorConfig.fromJSON(response),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: newModelinator } = await queryFulfilled;\n const { cropId, modelId } = newModelinator;\n dispatch(\n portalApi.util.updateQueryData(\n \"listModelinatorsForRobotAndCrop\",\n { serial, cropId: newModelinator.cropId },\n (modelinators) => {\n const index = modelinators.findIndex(\n (modelinator) => modelinator.modelId === newModelinator.modelId\n );\n if (index === -1) {\n modelinators.push(newModelinator);\n } else {\n modelinators[index] = newModelinator;\n }\n return modelinators;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getModelinator\",\n { serial, cropId, modelId },\n () => newModelinator\n )\n );\n },\n }),\n\n // TARGET VELOCITY ESTIMATOR\n // any string is valid for the input. Just matching the signature of\n // listTargetVelocityEstimators so they can be used interchangeably\n listGlobalTargetVelocityEstimators: builder.query<\n TVEProfile[],\n { serial?: string }\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => `/profiles/velocity/global`,\n transformResponse: (response: TVEProfile[]) =>\n response.map((targetVelocityEstimator) =>\n TVEProfile.fromJSON(targetVelocityEstimator)\n ),\n providesTags: (targetVelocityEstimators) =>\n targetVelocityEstimators?.map((targetVelocityEstimator) => ({\n type: Tag.TARGET_VELOCITY_ESTIMATOR,\n id: targetVelocityEstimator.id,\n })) ?? [],\n }),\n getGlobalTargetVelocityEstimator: builder.query<\n TVEProfile,\n { uuid: string }\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ uuid }) => `/profiles/velocity/global/${uuid}`,\n transformResponse: (response: TVEProfile) =>\n TVEProfile.fromJSON(response),\n providesTags: (result, error, { uuid }) => [\n {\n type: Tag.ADMIN_TARGET_VELOCITY_ESTIMATOR,\n id: uuid,\n },\n ],\n onQueryStarted: async (_, { dispatch, queryFulfilled }) => {\n const { data: newTargetVelocityEstimator } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listGlobalTargetVelocityEstimators\",\n {},\n (targetVelocityEstimators) => {\n const index = targetVelocityEstimators.findIndex(\n (targetVelocityEstimator) =>\n targetVelocityEstimator.id === newTargetVelocityEstimator.id\n );\n if (index === -1) {\n targetVelocityEstimators.push(newTargetVelocityEstimator);\n } else {\n targetVelocityEstimators[index] = newTargetVelocityEstimator;\n }\n return targetVelocityEstimators;\n }\n )\n );\n },\n }),\n deleteTargetVelocityEstimator: builder.mutation({\n query: ({ uuid }) => ({\n url: `/profiles/velocity/profiles/${uuid}`,\n method: Method.DELETE,\n }),\n invalidatesTags: (result, error, { uuid }) => [\n { type: Tag.TARGET_VELOCITY_ESTIMATOR, id: uuid },\n ],\n }),\n deleteGlobalTargetVelocityEstimator: builder.mutation<\n void,\n { uuid: string }\n >({\n query: ({ uuid }) => ({\n url: `/profiles/velocity/global/${uuid}`,\n method: Method.DELETE,\n }),\n onQueryStarted: async ({ uuid }, { dispatch, queryFulfilled }) => {\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listGlobalTargetVelocityEstimators\",\n {},\n (targetVelocityEstimators) => {\n spliceIfExists(\n targetVelocityEstimators,\n (targetVelocityEstimator) =>\n targetVelocityEstimator.id === uuid,\n 1\n );\n return targetVelocityEstimators;\n }\n )\n );\n dispatch(\n portalApi.util.invalidateTags([\n { type: Tag.ADMIN_TARGET_VELOCITY_ESTIMATOR, id: uuid },\n ])\n );\n },\n }),\n setGlobalTargetVelocityEstimator: builder.mutation<\n TVEProfile,\n { serial?: string; targetVelocityEstimator: TVEProfile }\n >({\n query: ({ targetVelocityEstimator }) => {\n return {\n url: `/profiles/velocity/global/${targetVelocityEstimator.id}`,\n method: Method.POST,\n body: TVEProfile.toJSON(targetVelocityEstimator),\n };\n },\n transformResponse: (response: TVEProfile) =>\n TVEProfile.fromJSON(response),\n onQueryStarted: async (_, { dispatch, queryFulfilled }) => {\n const { data: newTargetVelocityEstimator } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listGlobalTargetVelocityEstimators\",\n {},\n (targetVelocityEstimators) => {\n const index = targetVelocityEstimators.findIndex(\n (targetVelocityEstimator) =>\n targetVelocityEstimator.id === newTargetVelocityEstimator.id\n );\n if (index === -1) {\n targetVelocityEstimators.push(newTargetVelocityEstimator);\n } else {\n targetVelocityEstimators[index] = newTargetVelocityEstimator;\n }\n return targetVelocityEstimators;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getGlobalTargetVelocityEstimator\",\n { uuid: newTargetVelocityEstimator.id },\n () => newTargetVelocityEstimator\n )\n );\n },\n }),\n listTargetVelocityEstimators: builder.query<\n TVEProfile[],\n { serial?: string }\n >({\n query: ({ serial }) => `/profiles/velocity/robots/${serial}`,\n transformResponse: (response: TVEProfile[]) =>\n response.map((targetVelocityEstimator) =>\n TVEProfile.fromJSON(targetVelocityEstimator)\n ),\n providesTags: (targetVelocityEstimators) =>\n targetVelocityEstimators?.map((targetVelocityEstimator) => ({\n type: Tag.TARGET_VELOCITY_ESTIMATOR,\n id: targetVelocityEstimator.id,\n })) ?? [],\n }),\n getTargetVelocityEstimator: builder.query({\n query: ({ uuid }) => `/profiles/velocity/profiles/${uuid}`,\n transformResponse: (response: TVEProfile) =>\n TVEProfile.fromJSON(response),\n providesTags: (targetVelocityTestimator) =>\n targetVelocityTestimator\n ? [\n {\n type: Tag.TARGET_VELOCITY_ESTIMATOR,\n id: targetVelocityTestimator.id,\n },\n ]\n : [],\n }),\n setTargetVelocityEstimator: builder.mutation<\n TVEProfile,\n { serial?: string; targetVelocityEstimator: TVEProfile }\n >({\n query: ({ serial, targetVelocityEstimator }) => ({\n url: `/profiles/velocity/robots/${serial}`,\n method: Method.POST,\n body: TVEProfile.toJSON(targetVelocityEstimator),\n }),\n transformResponse: (response: TVEProfile) =>\n TVEProfile.fromJSON(response),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: newTargetVelocityEstimator } = await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listTargetVelocityEstimators\",\n { serial },\n (targetVelocityEstimators) => {\n const index = targetVelocityEstimators.findIndex(\n (targetVelocityEstimator) =>\n targetVelocityEstimator.id === newTargetVelocityEstimator.id\n );\n if (index === -1) {\n targetVelocityEstimators.push(newTargetVelocityEstimator);\n } else {\n targetVelocityEstimators[index] = newTargetVelocityEstimator;\n }\n return targetVelocityEstimators;\n }\n )\n );\n dispatch(\n portalApi.util.updateQueryData(\n \"getTargetVelocityEstimator\",\n { uuid: newTargetVelocityEstimator.id },\n () => newTargetVelocityEstimator\n )\n );\n },\n }),\n\n // CATEGORY COLLECTION PROFILE\n listCustomerCategoryCollectionProfiles: builder.query<\n ExpandedCategoryCollectionResponse[],\n { serial?: string }\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ serial }) => `/profiles/category-collections/robots/${serial}`,\n transformResponse: (response: ExpandedCategoryCollectionResponse[]) =>\n response.map((categoryCollectionProfile) =>\n ExpandedCategoryCollectionResponse.fromJSON(categoryCollectionProfile)\n ),\n providesTags: (categoryCollectionProfiles) => [\n Tag.CATEGORY_COLLECTION_PROFILE,\n ...(categoryCollectionProfiles?.map((categoryCollectionProfile) => ({\n type: Tag.CATEGORY_COLLECTION_PROFILE,\n id: categoryCollectionProfile.profile?.id,\n })) ?? []),\n ],\n }),\n listGlobalCategoryCollectionProfiles: builder.query<\n ExpandedCategoryCollectionResponse[],\n { serial?: string } // only exists to match input/output interface between global and customer equivalent queries\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: () => `/profiles/category-collections/global`,\n transformResponse: (response: ExpandedCategoryCollectionResponse[]) =>\n response.map((categoryCollectionProfile) =>\n ExpandedCategoryCollectionResponse.fromJSON(categoryCollectionProfile)\n ),\n providesTags: (categoryCollectionProfiles) => [\n Tag.ADMIN_CATEGORY_COLLECTION_PROFILE,\n ...(categoryCollectionProfiles?.map((categoryCollectionProfile) => ({\n type: Tag.ADMIN_CATEGORY_COLLECTION_PROFILE,\n id: categoryCollectionProfile.profile?.id,\n })) ?? []),\n ],\n }),\n getCustomerCategoryCollectionProfile: builder.query<\n ExpandedCategoryCollectionResponse,\n { uuid: string; serial?: string }\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ uuid, serial }) =>\n `/profiles/category-collections/${uuid}/robots/${serial}`,\n transformResponse: (response: ExpandedCategoryCollectionResponse) =>\n ExpandedCategoryCollectionResponse.fromJSON(response),\n providesTags: (result, error, { uuid }) => [\n {\n type: Tag.CATEGORY_COLLECTION_PROFILE,\n id: uuid,\n },\n ],\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: newExpandedCategoryCollectionProfile } =\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listCustomerCategoryCollectionProfiles\",\n { serial },\n (categoryCollectionProfiles) => {\n const index = categoryCollectionProfiles.findIndex(\n (categoryCollectionProfile) =>\n categoryCollectionProfile.profile?.id ===\n newExpandedCategoryCollectionProfile.profile?.id\n );\n if (index === -1) {\n categoryCollectionProfiles.push(\n newExpandedCategoryCollectionProfile\n );\n } else {\n categoryCollectionProfiles[index] =\n newExpandedCategoryCollectionProfile;\n }\n return categoryCollectionProfiles;\n }\n )\n );\n },\n }),\n getGlobalCategoryCollectionProfile: builder.query<\n ExpandedCategoryCollectionResponse,\n { uuid: string; serial?: string }\n >({\n keepUnusedDataFor: 60 * 60, // 1 hour\n query: ({ uuid }) => `/profiles/category-collections/global/${uuid}`,\n transformResponse: (response: ExpandedCategoryCollectionResponse) =>\n ExpandedCategoryCollectionResponse.fromJSON(response),\n providesTags: (result, error, { uuid }) => [\n {\n type: Tag.ADMIN_CATEGORY_COLLECTION_PROFILE,\n id: uuid,\n },\n ],\n onQueryStarted: async (_, { dispatch, queryFulfilled }) => {\n const { data: newExpandedCategoryCollectionProfile } =\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listGlobalCategoryCollectionProfiles\",\n {},\n (categoryCollectionProfiles) => {\n const index = categoryCollectionProfiles.findIndex(\n (categoryCollectionProfile) =>\n categoryCollectionProfile.profile?.id ===\n newExpandedCategoryCollectionProfile.profile?.id\n );\n if (index === -1) {\n categoryCollectionProfiles.push(\n newExpandedCategoryCollectionProfile\n );\n } else {\n categoryCollectionProfiles[index] =\n newExpandedCategoryCollectionProfile;\n }\n return categoryCollectionProfiles;\n }\n )\n );\n },\n }),\n setGlobalCategoryCollectionProfile: builder.mutation<\n ExpandedCategoryCollectionResponse,\n {\n serial?: string;\n expandedCategoryCollection: ExpandedCategoryCollectionRequest;\n }\n >({\n query: ({ expandedCategoryCollection }) => {\n return {\n url: `/profiles/category-collections/global/${expandedCategoryCollection.profile?.id}`,\n method: Method.POST,\n body: ExpandedCategoryCollectionRequest.toJSON(\n expandedCategoryCollection\n ),\n };\n },\n transformResponse: (response: ExpandedCategoryCollectionResponse) =>\n ExpandedCategoryCollectionResponse.fromJSON(response),\n onQueryStarted: async (_, { dispatch, queryFulfilled }) => {\n const { data: newExpandedCategoryCollectionProfile } =\n await queryFulfilled;\n\n dispatch(\n portalApi.util.updateQueryData(\n \"listGlobalCategoryCollectionProfiles\",\n {},\n (categoryCollectionProfiles) => {\n const index = categoryCollectionProfiles.findIndex(\n (categoryCollectionProfile) =>\n categoryCollectionProfile.profile?.id ===\n newExpandedCategoryCollectionProfile.profile?.id\n );\n if (index === -1) {\n categoryCollectionProfiles.push(\n newExpandedCategoryCollectionProfile\n );\n } else {\n categoryCollectionProfiles[index] =\n newExpandedCategoryCollectionProfile;\n }\n return categoryCollectionProfiles;\n }\n )\n );\n if (newExpandedCategoryCollectionProfile.profile?.id) {\n dispatch(\n portalApi.util.updateQueryData(\n \"getGlobalCategoryCollectionProfile\",\n { uuid: newExpandedCategoryCollectionProfile.profile.id },\n () => newExpandedCategoryCollectionProfile\n )\n );\n }\n },\n }),\n setCustomerCategoryCollectionProfile: builder.mutation<\n ExpandedCategoryCollectionResponse,\n {\n serial?: string;\n expandedCategoryCollection: ExpandedCategoryCollectionRequest;\n }\n >({\n query: ({ serial, expandedCategoryCollection }) => {\n return {\n url: `/profiles/category-collections/${expandedCategoryCollection.profile?.id}/robots/${serial}`,\n method: Method.POST,\n body: ExpandedCategoryCollectionRequest.toJSON(\n expandedCategoryCollection\n ),\n };\n },\n transformResponse: (response: ExpandedCategoryCollectionResponse) =>\n ExpandedCategoryCollectionResponse.fromJSON(response),\n onQueryStarted: async ({ serial }, { dispatch, queryFulfilled }) => {\n const { data: newExpandedCategoryCollectionProfile } =\n await queryFulfilled;\n dispatch(\n portalApi.util.updateQueryData(\n \"listCustomerCategoryCollectionProfiles\",\n { serial },\n (categoryCollectionProfiles) => {\n const index = categoryCollectionProfiles.findIndex(\n (categoryCollectionProfile) =>\n categoryCollectionProfile.profile?.id ===\n newExpandedCategoryCollectionProfile.profile?.id\n );\n if (index === -1) {\n categoryCollectionProfiles.push(\n newExpandedCategoryCollectionProfile\n );\n } else {\n categoryCollectionProfiles[index] =\n newExpandedCategoryCollectionProfile;\n }\n return categoryCollectionProfiles;\n }\n )\n );\n if (newExpandedCategoryCollectionProfile.profile?.id) {\n dispatch(\n portalApi.util.updateQueryData(\n \"getCustomerCategoryCollectionProfile\",\n { uuid: newExpandedCategoryCollectionProfile.profile.id, serial },\n () => newExpandedCategoryCollectionProfile\n )\n );\n }\n },\n }),\n deleteGlobalCategoryCollectionProfile: builder.mutation<\n void,\n { uuid: string; serial?: string }\n >({\n query: ({ uuid }) => ({\n url: `/profiles/category-collections/global/${uuid}`,\n method: Method.DELETE,\n }),\n invalidatesTags: (result, error, { uuid }) => [\n { type: Tag.ADMIN_CATEGORY_COLLECTION_PROFILE, id: uuid },\n ],\n }),\n deleteCustomerCategoryCollectionProfile: builder.mutation<\n void,\n { uuid: string; serial?: string }\n >({\n query: ({ uuid, serial }) => {\n return {\n url: `/profiles/category-collections/${uuid}/robots/${serial}`,\n method: Method.DELETE,\n };\n },\n invalidatesTags: (result, error, { uuid }) => [\n { type: Tag.CATEGORY_COLLECTION_PROFILE, id: uuid },\n ],\n }),\n }),\n});\n\nexport const {\n // AWS\n useGetS3UploadUrlQuery,\n useLazyGetS3UploadUrlQuery,\n\n // ALARMS\n useListAlarmsQuery,\n useLazyListAlarmsQuery,\n\n // HARDWARE\n useGetHardwareQuery,\n useLazyGetHardwareQuery,\n\n // CONFIGS\n useDeleteConfigCacheMutation,\n useGetConfigQuery,\n useLazyGetConfigQuery,\n useSetConfigValueMutation,\n useDeleteConfigPathMutation,\n useGetConfigTemplateQuery,\n useLazyGetConfigTemplateQuery,\n useSetConfigTemplateValueMutation,\n useDeleteConfigTemplatePathMutation,\n useGetConfigAuditLogQuery,\n useLazyGetConfigAuditLogQuery,\n\n // CUSTOMERS\n useListCustomersQuery,\n useLazyListCustomersQuery,\n useGetCustomerQuery,\n useLazyGetCustomerQuery,\n useCreateCustomerMutation,\n useUpdateCustomerMutation,\n\n // MESSAGES\n useListMessagesQuery,\n useLazyListMessagesQuery,\n useSendMessageMutation,\n\n // REPORTS\n useListReportsQuery,\n useLazyListReportsQuery,\n useGetReportQuery,\n useLazyGetReportQuery,\n useCreateReportMutation,\n useDeleteReportMutation,\n useUpdateReportMutation,\n useListReportInstancesQuery,\n useLazyListReportInstancesQuery,\n useGetReportInstanceQuery,\n useLazyGetReportInstanceQuery,\n useCreateReportInstanceMutation,\n useUpdateReportInstanceMutation,\n useDeleteReportInstanceMutation,\n\n // METRICS\n useLazyGetDateMetricsQuery,\n useLazyGetSpatialQuery,\n\n // ROBOTS\n useListRobotsQuery,\n useLazyListRobotsQuery,\n useGetRobotQuery,\n useLazyGetRobotQuery,\n useGetRobotHistoryQuery,\n useLazyGetRobotHistoryQuery,\n useGetRobotBlocksQuery,\n useLazyGetRobotBlocksQuery,\n useGetRobotMetricsQuery,\n useLazyGetRobotMetricsQuery,\n useCreateRobotMutation,\n useUpdateRobotMutation,\n useAssignRobotMutation,\n useGetRobotProxyMutation,\n useListRobotCropsQuery,\n useLazyListRobotCropsQuery,\n useListRobotJobsQuery,\n useLazyListRobotJobsQuery,\n useGetJobQuery,\n useLazyGetJobQuery,\n useGetJobHistoryQuery,\n useLazyGetJobHistoryQuery,\n useGetJobBlocksQuery,\n useLazyGetJobBlocksQuery,\n useGetRobotHardwareQuery,\n useLazyGetRobotHardwareQuery,\n\n // FARMS\n useListFarmsQuery,\n useGetFarmQuery,\n\n // AUTOTRACTOR\n useListAutotractorJobsQuery,\n useCreateAutotractorJobMutation,\n\n // FIELD DEFINITIONS\n useLazyListFieldDefinitionsQuery,\n useListFieldDefinitionsQuery,\n useCreateFieldDefinitionMutation,\n\n // USERS\n useListUsersQuery,\n useLazyListUsersQuery,\n useGetUserQuery,\n useLazyGetUserQuery,\n useUpdateUserMutation,\n useDeleteUserMutation,\n useInviteUserMutation,\n useCreateFleetViewMutation,\n useUpdateFleetViewMutation,\n useDeleteFleetViewMutation,\n\n // VESELKA\n useListUploadsQuery,\n useLazyListUploadsQuery,\n useListCropsQuery,\n useLazyListCropsQuery,\n useGetCropQuery,\n useLazyGetCropQuery,\n useGetModelQuery,\n useLazyGetModelQuery,\n useLazyListLabelPointsQuery,\n\n // ADMIN\n useDeleteCachesMutation,\n useGetGlobalAlarmListsQuery,\n useLazyGetGlobalAlarmListsQuery,\n useGetRobotAlarmListsQuery,\n useLazyGetRobotAlarmListsQuery,\n useSetGlobalAlarmListsMutation,\n useSetRobotAlarmListsMutation,\n\n // ALMANAC\n useListAlmanacsForRobotQuery,\n useLazyListAlmanacsForRobotQuery,\n useGetAlmanacQuery,\n useLazyGetAlmanacQuery,\n useDeleteAlmanacMutation,\n useSetAlmanacMutation,\n useListGlobalAlmanacsQuery,\n useLazyListGlobalAlmanacsQuery,\n useGetGlobalAlmanacQuery,\n useLazyGetGlobalAlmanacQuery,\n useDeleteGlobalAlmanacMutation,\n useSetGlobalAlmanacMutation,\n\n // DISCRIMINATOR\n useListDiscriminatorsForRobotQuery,\n useLazyListDiscriminatorsForRobotQuery,\n useGetDiscriminatorQuery,\n useLazyGetDiscriminatorQuery,\n useDeleteDiscriminatorMutation,\n useSetDiscriminatorMutation,\n\n // MODELINATOR\n useListModelinatorsForRobotAndCropQuery,\n useLazyListModelinatorsForRobotAndCropQuery,\n useGetModelinatorQuery,\n useLazyGetModelinatorQuery,\n useSetModelinatorMutation,\n\n // TARGET VELOCITY ESTIMATOR\n useDeleteGlobalTargetVelocityEstimatorMutation,\n useDeleteTargetVelocityEstimatorMutation,\n useGetGlobalTargetVelocityEstimatorQuery,\n useLazyGetGlobalTargetVelocityEstimatorQuery,\n useGetTargetVelocityEstimatorQuery,\n useLazyGetTargetVelocityEstimatorQuery,\n useListGlobalTargetVelocityEstimatorsQuery,\n useLazyListGlobalTargetVelocityEstimatorsQuery,\n useListTargetVelocityEstimatorsQuery,\n useLazyListTargetVelocityEstimatorsQuery,\n useSetGlobalTargetVelocityEstimatorMutation,\n useSetTargetVelocityEstimatorMutation,\n\n // CATEGORY COLLECTION & CATEGORY PROFILES\n useListGlobalCategoryCollectionProfilesQuery,\n useListCustomerCategoryCollectionProfilesQuery,\n useGetGlobalCategoryCollectionProfileQuery,\n useGetCustomerCategoryCollectionProfileQuery,\n useSetGlobalCategoryCollectionProfileMutation,\n useSetCustomerCategoryCollectionProfileMutation,\n useDeleteGlobalCategoryCollectionProfileMutation,\n useDeleteCustomerCategoryCollectionProfileMutation,\n} = portalApi;\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: rtc/device_location_history.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Point } from \"../geo/geo\";\nimport { Timestamp } from \"../google/protobuf/timestamp\";\n\nexport const protobufPackage = \"carbon.rtc\";\n\nexport enum DeviceType {\n DEVICE_TYPE_UNKNOWN = 0,\n IRIDIUM_EDGE = 1,\n PEPLINK_GENERIC = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function deviceTypeFromJSON(object: any): DeviceType {\n switch (object) {\n case 0:\n case \"DEVICE_TYPE_UNKNOWN\":\n return DeviceType.DEVICE_TYPE_UNKNOWN;\n case 1:\n case \"IRIDIUM_EDGE\":\n return DeviceType.IRIDIUM_EDGE;\n case 2:\n case \"PEPLINK_GENERIC\":\n return DeviceType.PEPLINK_GENERIC;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return DeviceType.UNRECOGNIZED;\n }\n}\n\nexport function deviceTypeToJSON(object: DeviceType): string {\n switch (object) {\n case DeviceType.DEVICE_TYPE_UNKNOWN:\n return \"DEVICE_TYPE_UNKNOWN\";\n case DeviceType.IRIDIUM_EDGE:\n return \"IRIDIUM_EDGE\";\n case DeviceType.PEPLINK_GENERIC:\n return \"PEPLINK_GENERIC\";\n case DeviceType.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface DeviceLocationHistoryRecord {\n point: Point | undefined;\n timestamp: string | undefined;\n deviceId: string;\n deviceType: DeviceType;\n}\n\nexport interface DeviceLocationHistoryRecordList {\n records: DeviceLocationHistoryRecord[];\n}\n\nexport interface LogDeviceLocationHistoryRequest {\n history: DeviceLocationHistoryRecordList | undefined;\n}\n\nexport interface ListDevicesRequest {\n pageSize: number;\n pageToken: string;\n /** If not empty, only list devices with the given device_ids. */\n deviceIds: string[];\n}\n\nexport interface ListDevicesResponse {\n nextPageToken: string;\n devices: DeviceSummary[];\n}\n\nexport interface DeviceSummary {\n id: string;\n lastSeen: DeviceLocationHistoryRecord | undefined;\n}\n\nexport interface ListDeviceLocationHistoryRequest {\n pageSize: number;\n pageToken: string;\n deviceId: string;\n start: string | undefined;\n end: string | undefined;\n}\n\nexport interface ListDeviceLocationHistoryResponse {\n nextPageToken: string;\n history: DeviceLocationHistoryRecordList | undefined;\n}\n\nfunction createBaseDeviceLocationHistoryRecord(): DeviceLocationHistoryRecord {\n return { point: undefined, timestamp: undefined, deviceId: \"\", deviceType: 0 };\n}\n\nexport const DeviceLocationHistoryRecord: MessageFns = {\n encode(message: DeviceLocationHistoryRecord, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.point !== undefined) {\n Point.encode(message.point, writer.uint32(10).fork()).join();\n }\n if (message.timestamp !== undefined) {\n Timestamp.encode(toTimestamp(message.timestamp), writer.uint32(18).fork()).join();\n }\n if (message.deviceId !== \"\") {\n writer.uint32(26).string(message.deviceId);\n }\n if (message.deviceType !== 0) {\n writer.uint32(32).int32(message.deviceType);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeviceLocationHistoryRecord {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeviceLocationHistoryRecord();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.point = Point.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.timestamp = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.deviceId = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n\n message.deviceType = reader.int32() as any;\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeviceLocationHistoryRecord {\n return {\n point: isSet(object.point) ? Point.fromJSON(object.point) : undefined,\n timestamp: isSet(object.timestamp) ? globalThis.String(object.timestamp) : undefined,\n deviceId: isSet(object.deviceId) ? globalThis.String(object.deviceId) : \"\",\n deviceType: isSet(object.deviceType) ? deviceTypeFromJSON(object.deviceType) : 0,\n };\n },\n\n toJSON(message: DeviceLocationHistoryRecord): unknown {\n const obj: any = {};\n if (message.point !== undefined) {\n obj.point = Point.toJSON(message.point);\n }\n if (message.timestamp !== undefined) {\n obj.timestamp = message.timestamp;\n }\n if (message.deviceId !== \"\") {\n obj.deviceId = message.deviceId;\n }\n if (message.deviceType !== 0) {\n obj.deviceType = deviceTypeToJSON(message.deviceType);\n }\n return obj;\n },\n\n create, I>>(base?: I): DeviceLocationHistoryRecord {\n return DeviceLocationHistoryRecord.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeviceLocationHistoryRecord {\n const message = createBaseDeviceLocationHistoryRecord();\n message.point = (object.point !== undefined && object.point !== null) ? Point.fromPartial(object.point) : undefined;\n message.timestamp = object.timestamp ?? undefined;\n message.deviceId = object.deviceId ?? \"\";\n message.deviceType = object.deviceType ?? 0;\n return message;\n },\n};\n\nfunction createBaseDeviceLocationHistoryRecordList(): DeviceLocationHistoryRecordList {\n return { records: [] };\n}\n\nexport const DeviceLocationHistoryRecordList: MessageFns = {\n encode(message: DeviceLocationHistoryRecordList, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.records) {\n DeviceLocationHistoryRecord.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeviceLocationHistoryRecordList {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeviceLocationHistoryRecordList();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.records.push(DeviceLocationHistoryRecord.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeviceLocationHistoryRecordList {\n return {\n records: globalThis.Array.isArray(object?.records)\n ? object.records.map((e: any) => DeviceLocationHistoryRecord.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: DeviceLocationHistoryRecordList): unknown {\n const obj: any = {};\n if (message.records?.length) {\n obj.records = message.records.map((e) => DeviceLocationHistoryRecord.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): DeviceLocationHistoryRecordList {\n return DeviceLocationHistoryRecordList.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): DeviceLocationHistoryRecordList {\n const message = createBaseDeviceLocationHistoryRecordList();\n message.records = object.records?.map((e) => DeviceLocationHistoryRecord.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseLogDeviceLocationHistoryRequest(): LogDeviceLocationHistoryRequest {\n return { history: undefined };\n}\n\nexport const LogDeviceLocationHistoryRequest: MessageFns = {\n encode(message: LogDeviceLocationHistoryRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.history !== undefined) {\n DeviceLocationHistoryRecordList.encode(message.history, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LogDeviceLocationHistoryRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLogDeviceLocationHistoryRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.history = DeviceLocationHistoryRecordList.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LogDeviceLocationHistoryRequest {\n return { history: isSet(object.history) ? DeviceLocationHistoryRecordList.fromJSON(object.history) : undefined };\n },\n\n toJSON(message: LogDeviceLocationHistoryRequest): unknown {\n const obj: any = {};\n if (message.history !== undefined) {\n obj.history = DeviceLocationHistoryRecordList.toJSON(message.history);\n }\n return obj;\n },\n\n create, I>>(base?: I): LogDeviceLocationHistoryRequest {\n return LogDeviceLocationHistoryRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): LogDeviceLocationHistoryRequest {\n const message = createBaseLogDeviceLocationHistoryRequest();\n message.history = (object.history !== undefined && object.history !== null)\n ? DeviceLocationHistoryRecordList.fromPartial(object.history)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseListDevicesRequest(): ListDevicesRequest {\n return { pageSize: 0, pageToken: \"\", deviceIds: [] };\n}\n\nexport const ListDevicesRequest: MessageFns = {\n encode(message: ListDevicesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.pageSize !== 0) {\n writer.uint32(8).int32(message.pageSize);\n }\n if (message.pageToken !== \"\") {\n writer.uint32(18).string(message.pageToken);\n }\n for (const v of message.deviceIds) {\n writer.uint32(26).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListDevicesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListDevicesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.pageSize = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.pageToken = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.deviceIds.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListDevicesRequest {\n return {\n pageSize: isSet(object.pageSize) ? globalThis.Number(object.pageSize) : 0,\n pageToken: isSet(object.pageToken) ? globalThis.String(object.pageToken) : \"\",\n deviceIds: globalThis.Array.isArray(object?.deviceIds)\n ? object.deviceIds.map((e: any) => globalThis.String(e))\n : [],\n };\n },\n\n toJSON(message: ListDevicesRequest): unknown {\n const obj: any = {};\n if (message.pageSize !== 0) {\n obj.pageSize = Math.round(message.pageSize);\n }\n if (message.pageToken !== \"\") {\n obj.pageToken = message.pageToken;\n }\n if (message.deviceIds?.length) {\n obj.deviceIds = message.deviceIds;\n }\n return obj;\n },\n\n create, I>>(base?: I): ListDevicesRequest {\n return ListDevicesRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListDevicesRequest {\n const message = createBaseListDevicesRequest();\n message.pageSize = object.pageSize ?? 0;\n message.pageToken = object.pageToken ?? \"\";\n message.deviceIds = object.deviceIds?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseListDevicesResponse(): ListDevicesResponse {\n return { nextPageToken: \"\", devices: [] };\n}\n\nexport const ListDevicesResponse: MessageFns = {\n encode(message: ListDevicesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.nextPageToken !== \"\") {\n writer.uint32(10).string(message.nextPageToken);\n }\n for (const v of message.devices) {\n DeviceSummary.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListDevicesResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListDevicesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.nextPageToken = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.devices.push(DeviceSummary.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListDevicesResponse {\n return {\n nextPageToken: isSet(object.nextPageToken) ? globalThis.String(object.nextPageToken) : \"\",\n devices: globalThis.Array.isArray(object?.devices)\n ? object.devices.map((e: any) => DeviceSummary.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ListDevicesResponse): unknown {\n const obj: any = {};\n if (message.nextPageToken !== \"\") {\n obj.nextPageToken = message.nextPageToken;\n }\n if (message.devices?.length) {\n obj.devices = message.devices.map((e) => DeviceSummary.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): ListDevicesResponse {\n return ListDevicesResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListDevicesResponse {\n const message = createBaseListDevicesResponse();\n message.nextPageToken = object.nextPageToken ?? \"\";\n message.devices = object.devices?.map((e) => DeviceSummary.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseDeviceSummary(): DeviceSummary {\n return { id: \"\", lastSeen: undefined };\n}\n\nexport const DeviceSummary: MessageFns = {\n encode(message: DeviceSummary, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.lastSeen !== undefined) {\n DeviceLocationHistoryRecord.encode(message.lastSeen, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DeviceSummary {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeviceSummary();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.lastSeen = DeviceLocationHistoryRecord.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DeviceSummary {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n lastSeen: isSet(object.lastSeen) ? DeviceLocationHistoryRecord.fromJSON(object.lastSeen) : undefined,\n };\n },\n\n toJSON(message: DeviceSummary): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.lastSeen !== undefined) {\n obj.lastSeen = DeviceLocationHistoryRecord.toJSON(message.lastSeen);\n }\n return obj;\n },\n\n create, I>>(base?: I): DeviceSummary {\n return DeviceSummary.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): DeviceSummary {\n const message = createBaseDeviceSummary();\n message.id = object.id ?? \"\";\n message.lastSeen = (object.lastSeen !== undefined && object.lastSeen !== null)\n ? DeviceLocationHistoryRecord.fromPartial(object.lastSeen)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseListDeviceLocationHistoryRequest(): ListDeviceLocationHistoryRequest {\n return { pageSize: 0, pageToken: \"\", deviceId: \"\", start: undefined, end: undefined };\n}\n\nexport const ListDeviceLocationHistoryRequest: MessageFns = {\n encode(message: ListDeviceLocationHistoryRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.pageSize !== 0) {\n writer.uint32(8).int32(message.pageSize);\n }\n if (message.pageToken !== \"\") {\n writer.uint32(18).string(message.pageToken);\n }\n if (message.deviceId !== \"\") {\n writer.uint32(26).string(message.deviceId);\n }\n if (message.start !== undefined) {\n Timestamp.encode(toTimestamp(message.start), writer.uint32(34).fork()).join();\n }\n if (message.end !== undefined) {\n Timestamp.encode(toTimestamp(message.end), writer.uint32(42).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListDeviceLocationHistoryRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListDeviceLocationHistoryRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.pageSize = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.pageToken = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.deviceId = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.start = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.end = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListDeviceLocationHistoryRequest {\n return {\n pageSize: isSet(object.pageSize) ? globalThis.Number(object.pageSize) : 0,\n pageToken: isSet(object.pageToken) ? globalThis.String(object.pageToken) : \"\",\n deviceId: isSet(object.deviceId) ? globalThis.String(object.deviceId) : \"\",\n start: isSet(object.start) ? globalThis.String(object.start) : undefined,\n end: isSet(object.end) ? globalThis.String(object.end) : undefined,\n };\n },\n\n toJSON(message: ListDeviceLocationHistoryRequest): unknown {\n const obj: any = {};\n if (message.pageSize !== 0) {\n obj.pageSize = Math.round(message.pageSize);\n }\n if (message.pageToken !== \"\") {\n obj.pageToken = message.pageToken;\n }\n if (message.deviceId !== \"\") {\n obj.deviceId = message.deviceId;\n }\n if (message.start !== undefined) {\n obj.start = message.start;\n }\n if (message.end !== undefined) {\n obj.end = message.end;\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): ListDeviceLocationHistoryRequest {\n return ListDeviceLocationHistoryRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): ListDeviceLocationHistoryRequest {\n const message = createBaseListDeviceLocationHistoryRequest();\n message.pageSize = object.pageSize ?? 0;\n message.pageToken = object.pageToken ?? \"\";\n message.deviceId = object.deviceId ?? \"\";\n message.start = object.start ?? undefined;\n message.end = object.end ?? undefined;\n return message;\n },\n};\n\nfunction createBaseListDeviceLocationHistoryResponse(): ListDeviceLocationHistoryResponse {\n return { nextPageToken: \"\", history: undefined };\n}\n\nexport const ListDeviceLocationHistoryResponse: MessageFns = {\n encode(message: ListDeviceLocationHistoryResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.nextPageToken !== \"\") {\n writer.uint32(10).string(message.nextPageToken);\n }\n if (message.history !== undefined) {\n DeviceLocationHistoryRecordList.encode(message.history, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListDeviceLocationHistoryResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListDeviceLocationHistoryResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.nextPageToken = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.history = DeviceLocationHistoryRecordList.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListDeviceLocationHistoryResponse {\n return {\n nextPageToken: isSet(object.nextPageToken) ? globalThis.String(object.nextPageToken) : \"\",\n history: isSet(object.history) ? DeviceLocationHistoryRecordList.fromJSON(object.history) : undefined,\n };\n },\n\n toJSON(message: ListDeviceLocationHistoryResponse): unknown {\n const obj: any = {};\n if (message.nextPageToken !== \"\") {\n obj.nextPageToken = message.nextPageToken;\n }\n if (message.history !== undefined) {\n obj.history = DeviceLocationHistoryRecordList.toJSON(message.history);\n }\n return obj;\n },\n\n create, I>>(\n base?: I,\n ): ListDeviceLocationHistoryResponse {\n return ListDeviceLocationHistoryResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(\n object: I,\n ): ListDeviceLocationHistoryResponse {\n const message = createBaseListDeviceLocationHistoryResponse();\n message.nextPageToken = object.nextPageToken ?? \"\";\n message.history = (object.history !== undefined && object.history !== null)\n ? DeviceLocationHistoryRecordList.fromPartial(object.history)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction toTimestamp(dateStr: string): Timestamp {\n const date = new globalThis.Date(dateStr);\n const seconds = Math.trunc(date.getTime() / 1_000);\n const nanos = (date.getTime() % 1_000) * 1_000_000;\n return { seconds, nanos };\n}\n\nfunction fromTimestamp(t: Timestamp): string {\n let millis = (t.seconds || 0) * 1_000;\n millis += (t.nanos || 0) / 1_000_000;\n return new globalThis.Date(millis).toISOString();\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.2.0\n// protoc v3.21.12\n// source: rtc/location_history.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { Point } from \"../geo/geo\";\nimport { Timestamp } from \"../google/protobuf/timestamp\";\n\nexport const protobufPackage = \"carbon.rtc\";\n\nexport interface RobotData {\n /** 0 is not a valid task_id and can signify no task. */\n taskId: number;\n /**\n * Indicates whether the robot was making progress on its task, using a\n * task-specific definition of \"active\" that is determined by the robot. For\n * example, for a laserweeding task, the state might be determined by whether\n * the hitch is lowered.\n */\n active: boolean;\n}\n\nexport interface LocationHistoryRecord {\n point:\n | Point\n | undefined;\n /** Facing direction of the robot, if available from hardware. */\n headingDegrees?: number | undefined;\n timestamp: string | undefined;\n data: RobotData | undefined;\n}\n\nexport interface LocationHistoryRecordList {\n records: LocationHistoryRecord[];\n}\n\nexport interface LogLocationHistoryRequest {\n history: LocationHistoryRecordList | undefined;\n}\n\nexport interface ListRobotsRequest {\n pageSize: number;\n pageToken: string;\n /** If not empty, only list robots with the given serials. */\n robotSerials: string[];\n}\n\nexport interface ListRobotsResponse {\n nextPageToken: string;\n robots: RobotSummary[];\n}\n\nexport interface RobotSummary {\n serial: string;\n lastSeen: LocationHistoryRecord | undefined;\n}\n\nexport interface ListLocationHistoryRequest {\n pageSize: number;\n pageToken: string;\n robotSerial: string;\n start: string | undefined;\n end: string | undefined;\n}\n\nexport interface ListLocationHistoryResponse {\n nextPageToken: string;\n history: LocationHistoryRecordList | undefined;\n}\n\nfunction createBaseRobotData(): RobotData {\n return { taskId: 0, active: false };\n}\n\nexport const RobotData: MessageFns = {\n encode(message: RobotData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.taskId !== 0) {\n writer.uint32(8).uint64(message.taskId);\n }\n if (message.active !== false) {\n writer.uint32(16).bool(message.active);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.taskId = longToNumber(reader.uint64());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.active = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotData {\n return {\n taskId: isSet(object.taskId) ? globalThis.Number(object.taskId) : 0,\n active: isSet(object.active) ? globalThis.Boolean(object.active) : false,\n };\n },\n\n toJSON(message: RobotData): unknown {\n const obj: any = {};\n if (message.taskId !== 0) {\n obj.taskId = Math.round(message.taskId);\n }\n if (message.active !== false) {\n obj.active = message.active;\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotData {\n return RobotData.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotData {\n const message = createBaseRobotData();\n message.taskId = object.taskId ?? 0;\n message.active = object.active ?? false;\n return message;\n },\n};\n\nfunction createBaseLocationHistoryRecord(): LocationHistoryRecord {\n return { point: undefined, headingDegrees: undefined, timestamp: undefined, data: undefined };\n}\n\nexport const LocationHistoryRecord: MessageFns = {\n encode(message: LocationHistoryRecord, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.point !== undefined) {\n Point.encode(message.point, writer.uint32(10).fork()).join();\n }\n if (message.headingDegrees !== undefined) {\n writer.uint32(33).double(message.headingDegrees);\n }\n if (message.timestamp !== undefined) {\n Timestamp.encode(toTimestamp(message.timestamp), writer.uint32(18).fork()).join();\n }\n if (message.data !== undefined) {\n RobotData.encode(message.data, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LocationHistoryRecord {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLocationHistoryRecord();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.point = Point.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 33) {\n break;\n }\n\n message.headingDegrees = reader.double();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.timestamp = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.data = RobotData.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LocationHistoryRecord {\n return {\n point: isSet(object.point) ? Point.fromJSON(object.point) : undefined,\n headingDegrees: isSet(object.headingDegrees) ? globalThis.Number(object.headingDegrees) : undefined,\n timestamp: isSet(object.timestamp) ? globalThis.String(object.timestamp) : undefined,\n data: isSet(object.data) ? RobotData.fromJSON(object.data) : undefined,\n };\n },\n\n toJSON(message: LocationHistoryRecord): unknown {\n const obj: any = {};\n if (message.point !== undefined) {\n obj.point = Point.toJSON(message.point);\n }\n if (message.headingDegrees !== undefined) {\n obj.headingDegrees = message.headingDegrees;\n }\n if (message.timestamp !== undefined) {\n obj.timestamp = message.timestamp;\n }\n if (message.data !== undefined) {\n obj.data = RobotData.toJSON(message.data);\n }\n return obj;\n },\n\n create, I>>(base?: I): LocationHistoryRecord {\n return LocationHistoryRecord.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LocationHistoryRecord {\n const message = createBaseLocationHistoryRecord();\n message.point = (object.point !== undefined && object.point !== null) ? Point.fromPartial(object.point) : undefined;\n message.headingDegrees = object.headingDegrees ?? undefined;\n message.timestamp = object.timestamp ?? undefined;\n message.data = (object.data !== undefined && object.data !== null) ? RobotData.fromPartial(object.data) : undefined;\n return message;\n },\n};\n\nfunction createBaseLocationHistoryRecordList(): LocationHistoryRecordList {\n return { records: [] };\n}\n\nexport const LocationHistoryRecordList: MessageFns = {\n encode(message: LocationHistoryRecordList, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.records) {\n LocationHistoryRecord.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LocationHistoryRecordList {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLocationHistoryRecordList();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.records.push(LocationHistoryRecord.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LocationHistoryRecordList {\n return {\n records: globalThis.Array.isArray(object?.records)\n ? object.records.map((e: any) => LocationHistoryRecord.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: LocationHistoryRecordList): unknown {\n const obj: any = {};\n if (message.records?.length) {\n obj.records = message.records.map((e) => LocationHistoryRecord.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): LocationHistoryRecordList {\n return LocationHistoryRecordList.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LocationHistoryRecordList {\n const message = createBaseLocationHistoryRecordList();\n message.records = object.records?.map((e) => LocationHistoryRecord.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseLogLocationHistoryRequest(): LogLocationHistoryRequest {\n return { history: undefined };\n}\n\nexport const LogLocationHistoryRequest: MessageFns = {\n encode(message: LogLocationHistoryRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.history !== undefined) {\n LocationHistoryRecordList.encode(message.history, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): LogLocationHistoryRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLogLocationHistoryRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.history = LocationHistoryRecordList.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): LogLocationHistoryRequest {\n return { history: isSet(object.history) ? LocationHistoryRecordList.fromJSON(object.history) : undefined };\n },\n\n toJSON(message: LogLocationHistoryRequest): unknown {\n const obj: any = {};\n if (message.history !== undefined) {\n obj.history = LocationHistoryRecordList.toJSON(message.history);\n }\n return obj;\n },\n\n create, I>>(base?: I): LogLocationHistoryRequest {\n return LogLocationHistoryRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): LogLocationHistoryRequest {\n const message = createBaseLogLocationHistoryRequest();\n message.history = (object.history !== undefined && object.history !== null)\n ? LocationHistoryRecordList.fromPartial(object.history)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseListRobotsRequest(): ListRobotsRequest {\n return { pageSize: 0, pageToken: \"\", robotSerials: [] };\n}\n\nexport const ListRobotsRequest: MessageFns = {\n encode(message: ListRobotsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.pageSize !== 0) {\n writer.uint32(8).int32(message.pageSize);\n }\n if (message.pageToken !== \"\") {\n writer.uint32(18).string(message.pageToken);\n }\n for (const v of message.robotSerials) {\n writer.uint32(26).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListRobotsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListRobotsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.pageSize = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.pageToken = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.robotSerials.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListRobotsRequest {\n return {\n pageSize: isSet(object.pageSize) ? globalThis.Number(object.pageSize) : 0,\n pageToken: isSet(object.pageToken) ? globalThis.String(object.pageToken) : \"\",\n robotSerials: globalThis.Array.isArray(object?.robotSerials)\n ? object.robotSerials.map((e: any) => globalThis.String(e))\n : [],\n };\n },\n\n toJSON(message: ListRobotsRequest): unknown {\n const obj: any = {};\n if (message.pageSize !== 0) {\n obj.pageSize = Math.round(message.pageSize);\n }\n if (message.pageToken !== \"\") {\n obj.pageToken = message.pageToken;\n }\n if (message.robotSerials?.length) {\n obj.robotSerials = message.robotSerials;\n }\n return obj;\n },\n\n create, I>>(base?: I): ListRobotsRequest {\n return ListRobotsRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListRobotsRequest {\n const message = createBaseListRobotsRequest();\n message.pageSize = object.pageSize ?? 0;\n message.pageToken = object.pageToken ?? \"\";\n message.robotSerials = object.robotSerials?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseListRobotsResponse(): ListRobotsResponse {\n return { nextPageToken: \"\", robots: [] };\n}\n\nexport const ListRobotsResponse: MessageFns = {\n encode(message: ListRobotsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.nextPageToken !== \"\") {\n writer.uint32(10).string(message.nextPageToken);\n }\n for (const v of message.robots) {\n RobotSummary.encode(v!, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListRobotsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListRobotsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.nextPageToken = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.robots.push(RobotSummary.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListRobotsResponse {\n return {\n nextPageToken: isSet(object.nextPageToken) ? globalThis.String(object.nextPageToken) : \"\",\n robots: globalThis.Array.isArray(object?.robots) ? object.robots.map((e: any) => RobotSummary.fromJSON(e)) : [],\n };\n },\n\n toJSON(message: ListRobotsResponse): unknown {\n const obj: any = {};\n if (message.nextPageToken !== \"\") {\n obj.nextPageToken = message.nextPageToken;\n }\n if (message.robots?.length) {\n obj.robots = message.robots.map((e) => RobotSummary.toJSON(e));\n }\n return obj;\n },\n\n create, I>>(base?: I): ListRobotsResponse {\n return ListRobotsResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListRobotsResponse {\n const message = createBaseListRobotsResponse();\n message.nextPageToken = object.nextPageToken ?? \"\";\n message.robots = object.robots?.map((e) => RobotSummary.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseRobotSummary(): RobotSummary {\n return { serial: \"\", lastSeen: undefined };\n}\n\nexport const RobotSummary: MessageFns = {\n encode(message: RobotSummary, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.serial !== \"\") {\n writer.uint32(10).string(message.serial);\n }\n if (message.lastSeen !== undefined) {\n LocationHistoryRecord.encode(message.lastSeen, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RobotSummary {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRobotSummary();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.serial = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.lastSeen = LocationHistoryRecord.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RobotSummary {\n return {\n serial: isSet(object.serial) ? globalThis.String(object.serial) : \"\",\n lastSeen: isSet(object.lastSeen) ? LocationHistoryRecord.fromJSON(object.lastSeen) : undefined,\n };\n },\n\n toJSON(message: RobotSummary): unknown {\n const obj: any = {};\n if (message.serial !== \"\") {\n obj.serial = message.serial;\n }\n if (message.lastSeen !== undefined) {\n obj.lastSeen = LocationHistoryRecord.toJSON(message.lastSeen);\n }\n return obj;\n },\n\n create, I>>(base?: I): RobotSummary {\n return RobotSummary.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): RobotSummary {\n const message = createBaseRobotSummary();\n message.serial = object.serial ?? \"\";\n message.lastSeen = (object.lastSeen !== undefined && object.lastSeen !== null)\n ? LocationHistoryRecord.fromPartial(object.lastSeen)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseListLocationHistoryRequest(): ListLocationHistoryRequest {\n return { pageSize: 0, pageToken: \"\", robotSerial: \"\", start: undefined, end: undefined };\n}\n\nexport const ListLocationHistoryRequest: MessageFns = {\n encode(message: ListLocationHistoryRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.pageSize !== 0) {\n writer.uint32(8).int32(message.pageSize);\n }\n if (message.pageToken !== \"\") {\n writer.uint32(18).string(message.pageToken);\n }\n if (message.robotSerial !== \"\") {\n writer.uint32(26).string(message.robotSerial);\n }\n if (message.start !== undefined) {\n Timestamp.encode(toTimestamp(message.start), writer.uint32(34).fork()).join();\n }\n if (message.end !== undefined) {\n Timestamp.encode(toTimestamp(message.end), writer.uint32(42).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListLocationHistoryRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListLocationHistoryRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.pageSize = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.pageToken = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.robotSerial = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.start = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n\n message.end = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListLocationHistoryRequest {\n return {\n pageSize: isSet(object.pageSize) ? globalThis.Number(object.pageSize) : 0,\n pageToken: isSet(object.pageToken) ? globalThis.String(object.pageToken) : \"\",\n robotSerial: isSet(object.robotSerial) ? globalThis.String(object.robotSerial) : \"\",\n start: isSet(object.start) ? globalThis.String(object.start) : undefined,\n end: isSet(object.end) ? globalThis.String(object.end) : undefined,\n };\n },\n\n toJSON(message: ListLocationHistoryRequest): unknown {\n const obj: any = {};\n if (message.pageSize !== 0) {\n obj.pageSize = Math.round(message.pageSize);\n }\n if (message.pageToken !== \"\") {\n obj.pageToken = message.pageToken;\n }\n if (message.robotSerial !== \"\") {\n obj.robotSerial = message.robotSerial;\n }\n if (message.start !== undefined) {\n obj.start = message.start;\n }\n if (message.end !== undefined) {\n obj.end = message.end;\n }\n return obj;\n },\n\n create, I>>(base?: I): ListLocationHistoryRequest {\n return ListLocationHistoryRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListLocationHistoryRequest {\n const message = createBaseListLocationHistoryRequest();\n message.pageSize = object.pageSize ?? 0;\n message.pageToken = object.pageToken ?? \"\";\n message.robotSerial = object.robotSerial ?? \"\";\n message.start = object.start ?? undefined;\n message.end = object.end ?? undefined;\n return message;\n },\n};\n\nfunction createBaseListLocationHistoryResponse(): ListLocationHistoryResponse {\n return { nextPageToken: \"\", history: undefined };\n}\n\nexport const ListLocationHistoryResponse: MessageFns = {\n encode(message: ListLocationHistoryResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.nextPageToken !== \"\") {\n writer.uint32(10).string(message.nextPageToken);\n }\n if (message.history !== undefined) {\n LocationHistoryRecordList.encode(message.history, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ListLocationHistoryResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListLocationHistoryResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.nextPageToken = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.history = LocationHistoryRecordList.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ListLocationHistoryResponse {\n return {\n nextPageToken: isSet(object.nextPageToken) ? globalThis.String(object.nextPageToken) : \"\",\n history: isSet(object.history) ? LocationHistoryRecordList.fromJSON(object.history) : undefined,\n };\n },\n\n toJSON(message: ListLocationHistoryResponse): unknown {\n const obj: any = {};\n if (message.nextPageToken !== \"\") {\n obj.nextPageToken = message.nextPageToken;\n }\n if (message.history !== undefined) {\n obj.history = LocationHistoryRecordList.toJSON(message.history);\n }\n return obj;\n },\n\n create, I>>(base?: I): ListLocationHistoryResponse {\n return ListLocationHistoryResponse.fromPartial(base ?? ({} as any));\n },\n fromPartial, I>>(object: I): ListLocationHistoryResponse {\n const message = createBaseListLocationHistoryResponse();\n message.nextPageToken = object.nextPageToken ?? \"\";\n message.history = (object.history !== undefined && object.history !== null)\n ? LocationHistoryRecordList.fromPartial(object.history)\n : undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial = T extends Builtin ? T\n : T extends globalThis.Array ? globalThis.Array>\n : T extends ReadonlyArray ? ReadonlyArray>\n : T extends {} ? { [K in keyof T]?: DeepPartial }\n : Partial;\n\ntype KeysOfUnion = T extends T ? keyof T : never;\nexport type Exact = P extends Builtin ? P\n : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never };\n\nfunction toTimestamp(dateStr: string): Timestamp {\n const date = new globalThis.Date(dateStr);\n const seconds = Math.trunc(date.getTime() / 1_000);\n const nanos = (date.getTime() % 1_000) * 1_000_000;\n return { seconds, nanos };\n}\n\nfunction fromTimestamp(t: Timestamp): string {\n let millis = (t.seconds || 0) * 1_000;\n millis += (t.nanos || 0) / 1_000_000;\n return new globalThis.Date(millis).toISOString();\n}\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create, I>>(base?: I): T;\n fromPartial, I>>(object: I): T;\n}\n","import { auth } from \"portal/utils/auth\";\nimport {\n type BaseQueryFn,\n createApi,\n type FetchArgs,\n fetchBaseQuery,\n type FetchBaseQueryError,\n} from \"@reduxjs/toolkit/query/react\";\nimport { camelToSnake } from \"portal/utils/strings\";\nimport { DateTime } from \"luxon\";\nimport { ListDeviceLocationHistoryResponse } from \"protos/rtc/device_location_history\";\nimport { ListRobotsResponse } from \"protos/rtc/location_history\";\nimport { toQuery } from \"portal/utils/browser\";\nimport { transformKeys } from \"portal/utils/objects\";\n\nconst baseQuery: BaseQueryFn<\n string | FetchArgs,\n unknown,\n FetchBaseQueryError\n> = async (arguments_, api, extraOptions = {}) => {\n return await fetchBaseQuery({\n baseUrl: `${window._jsenv.REACT_APP_RTC_LOCATOR_URL}/v1/`,\n prepareHeaders: async (headers) => {\n const accessToken = await auth.getAccessTokenSilently();\n headers.set(\"Authorization\", `Bearer ${accessToken}`);\n headers.set(\"X-AUTH0-audience\", window._jsenv.REACT_APP_AUTH0_AUDIENCE);\n return headers;\n },\n paramsSerializer: toQuery,\n })(arguments_, api, extraOptions);\n};\n\nexport const timeRangeParams = (range: {\n start?: DateTime;\n end?: DateTime;\n}): {\n start: string;\n end: string;\n} => {\n return {\n start: String(range.start?.toUnixInteger() ?? 0),\n end: String(range.end?.toUnixInteger() ?? 2 ** 31 - 1),\n };\n};\n\nexport const rtcLocationApi = createApi({\n reducerPath: \"rtcLocationApi\",\n baseQuery,\n endpoints: (builder) => ({\n listRobots: builder.query({\n query: ({ serials }) => ({\n url: \"/robots/list\",\n params: {\n robot_serials: serials ? serials.join(\",\") : undefined,\n },\n }),\n transformResponse: (response: unknown) =>\n ListRobotsResponse.fromJSON(response),\n }),\n getDeviceLocationHistory: builder.query<\n ListDeviceLocationHistoryResponse,\n {\n deviceId: string;\n pageToken?: string;\n pageSize: number;\n start?: string;\n end?: string;\n desc?: boolean;\n }\n >({\n query: ({ deviceId, ...parameters }) => {\n return {\n url: `/devices/${deviceId}/location-history`,\n params: transformKeys(parameters, camelToSnake),\n };\n },\n transformResponse: (response: unknown) =>\n ListDeviceLocationHistoryResponse.fromJSON(response),\n }),\n }),\n});\n\nexport const { useListRobotsQuery, useGetDeviceLocationHistoryQuery } =\n rtcLocationApi;\n","import { auth } from \"portal/utils/auth\";\nimport {\n type BaseQueryFn,\n createApi,\n type FetchArgs,\n fetchBaseQuery,\n type FetchBaseQueryError,\n retry,\n} from \"@reduxjs/toolkit/query/react\";\n\nconst RETRY_EXPONENTIAL_CAP_ATTEMPTS = 5;\n/**\n * Exponential backoff based on the attempt number with a cap for how much the backoff should expand\n *\n * 1. 600ms * random(0.4, 1.4)\n * 2. 1200ms * random(0.4, 1.4)\n * 3. 2400ms * random(0.4, 1.4)\n * 4. 4800ms * random(0.4, 1.4)\n * 5. 9600ms * random(0.4, 1.4)\n *\n * @param attempt - Current attempt\n * @param maxRetries - Maximum number of retries\n */\nasync function cappedIncreaseBackoff(attempt: number = 0): Promise {\n const timeoutIncreaseFactor = Math.min(\n attempt,\n RETRY_EXPONENTIAL_CAP_ATTEMPTS\n );\n\n const timeout = Math.trunc(\n (Math.random() + 0.4) * (300 * 2 ** timeoutIncreaseFactor)\n );\n await new Promise((resolve) =>\n setTimeout((response) => resolve(response), timeout)\n );\n}\n\nconst baseQuery: BaseQueryFn =\n retry(\n async (arguments_, api, extraOptions = {}) => {\n const result = await fetchBaseQuery({\n baseUrl: window._jsenv.REACT_APP_S3_CACHE_PROXY_URL,\n prepareHeaders: async (headers) => {\n const accessToken = await auth.getAccessTokenSilently();\n headers.set(\"Authorization\", `Bearer ${accessToken}`);\n headers.set(\n \"X-AUTH0-audience\",\n window._jsenv.REACT_APP_AUTH0_AUDIENCE\n );\n return headers;\n },\n })(arguments_, api, extraOptions);\n\n // bail out of re-tries immediately if unauthorized,\n // because we know successive re-retries would be redundant\n if (result.error?.status === 401) {\n retry.fail(result.error);\n }\n\n return result;\n },\n {\n maxRetries: 20,\n backoff: cappedIncreaseBackoff,\n }\n );\n\nexport enum ImageOp {\n CROP = \"crop\",\n RESIZE = \"resize\",\n}\nexport interface CropThumbnailRequest {\n op: ImageOp;\n bucket: string;\n key: string;\n x: number;\n y: number;\n width: number;\n height: number;\n fill?: string;\n}\n\nexport const s3CacheProxyApi = createApi({\n reducerPath: \"s3CacheProxyApi\",\n baseQuery,\n endpoints: (builder) => ({\n getCropThumbnail: builder.query({\n query: (parameters) => ({\n url: \"image\",\n params: parameters,\n }),\n transformResponse: (response: { s3_uri: string }) => response.s3_uri,\n }),\n }),\n});\n\nexport const { useGetCropThumbnailQuery } = s3CacheProxyApi;\n","import * as Sentry from \"@sentry/browser\";\nimport { CarbonUser, isInternal } from \"portal/utils/auth\";\nimport { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport { CustomerResponse } from \"protos/portal/customers\";\nimport { FleetView, UserResponse } from \"protos/portal/users\";\nimport { MeasurementSystem } from \"portal/utils/units/units\";\nimport { StreamToken } from \"portal/utils/stream\";\nimport { toImplementationStatus } from \"portal/utils/robots\";\nimport { values } from \"portal/utils/objects\";\n\ninterface State {\n user?: CarbonUser;\n customer?: CustomerResponse;\n permissions: Record;\n isInternal: boolean;\n isLoading: boolean;\n measurementSystem: MeasurementSystem;\n settings: CarbonUser[\"userMetadata\"];\n streamToken?: StreamToken;\n fleetViews: Record;\n}\n\nconst initialState: State = {\n permissions: {},\n isInternal: false,\n isLoading: true,\n measurementSystem: MeasurementSystem.imperial,\n settings: {},\n fleetViews: {},\n};\n\nconst isMeasurementSystem = (\n input: string | undefined\n): input is MeasurementSystem =>\n values(MeasurementSystem).includes(input as MeasurementSystem);\n\nexport const self = createSlice({\n name: \"self\",\n initialState,\n reducers: {\n setCustomerMode: (state, action: PayloadAction) => {\n if (!state.user || !isInternal(state.user)) {\n return;\n }\n state.isInternal = !action.payload;\n },\n setStreamToken: (state, action: PayloadAction) => {\n state.streamToken = action.payload;\n },\n setSelf: (state, action: PayloadAction) => {\n state.user = action.payload.user;\n state.customer = action.payload.customer;\n state.permissions = Object.fromEntries(\n action.payload.permissions?.names.map((key) => [key, true]) ?? []\n );\n state.fleetViews = {};\n for (const view of action.payload.fleetViews) {\n if (!view.db) {\n continue;\n }\n state.fleetViews[view.db.id] = {\n ...view,\n statuses: view.statuses.map((status) =>\n toImplementationStatus(status)\n ),\n };\n }\n state.isInternal = isInternal(state.user);\n state.measurementSystem = isMeasurementSystem(\n state.user?.userMetadata?.unit\n )\n ? state.user.userMetadata.unit\n : MeasurementSystem.imperial;\n state.settings = state.user?.userMetadata ?? {};\n state.isLoading = false;\n Sentry.setUser(\n state.user\n ? {\n email: state.user.email,\n segment: state.isInternal ? \"carbon\" : \"customer\",\n }\n : // null required by Sentry\n // eslint-disable-next-line unicorn/no-null\n null\n );\n },\n setFleetView: (state, action: PayloadAction) => {\n if (!action.payload.db) {\n return;\n }\n state.fleetViews[action.payload.db.id] = action.payload;\n },\n unsetFleetView: (state, action: PayloadAction) => {\n delete state.fleetViews[action.payload];\n },\n },\n});\n\nexport const {\n setCustomerMode,\n setSelf,\n setStreamToken,\n setFleetView,\n unsetFleetView,\n} = self.actions;\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\n\ninterface State {\n categoryCollection: {\n thumbnailSize: number;\n showLabels: boolean;\n };\n}\n\nconst initialState: State = {\n categoryCollection: {\n thumbnailSize: 100,\n showLabels: true,\n },\n};\n\nexport const userPreferences = createSlice({\n name: \"userPreferences\",\n initialState,\n reducers: {\n updateCategoryCollectionThumbnailSize: (\n state,\n {\n payload: thumbnailSize,\n }: PayloadAction\n ) => {\n state.categoryCollection.thumbnailSize = thumbnailSize;\n },\n updateCategoryCollectionShowLabels: (\n state,\n {\n payload: showLabels,\n }: PayloadAction\n ) => {\n state.categoryCollection.showLabels = showLabels;\n },\n },\n});\n\nexport const {\n updateCategoryCollectionThumbnailSize,\n updateCategoryCollectionShowLabels,\n} = userPreferences.actions;\n","import { combineReducers, StateFromReducersMapObject } from \"redux\";\nimport { configureStore, Tuple } from \"@reduxjs/toolkit\";\nimport {\n createMigrate,\n FLUSH,\n PAUSE,\n PERSIST,\n PersistedState,\n persistReducer,\n persistStore,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from \"redux-persist\";\nimport { idmApi } from \"./idmApi\";\nimport { location } from \"./location\";\nimport { measurement } from \"./measurement\";\nimport { notifications } from \"./notifications\";\nimport { portalApi } from \"./portalApi\";\nimport { rtcLocationApi } from \"./rtcLocationApi\";\nimport { s3CacheProxyApi } from \"./s3CacheProxyApi\";\nimport { self } from \"./self\";\nimport { setupListeners } from \"@reduxjs/toolkit/query\";\nimport { userPreferences } from \"./userPreferences\";\nimport { useSelector } from \"react-redux\";\nimport storage from \"redux-persist/lib/storage\";\n\nenum AsyncThunkStatus {\n IDLE = \"idle\",\n PENDING = \"pending\",\n SUCCEEDED = \"succeeded\",\n FAILED = \"failed\",\n}\n\nconst reducers = combineReducers({\n [idmApi.reducerPath]: idmApi.reducer,\n [location.name]: location.reducer,\n [measurement.name]: measurement.reducer,\n [notifications.name]: notifications.reducer,\n [rtcLocationApi.reducerPath]: rtcLocationApi.reducer,\n [portalApi.reducerPath]: portalApi.reducer,\n [s3CacheProxyApi.reducerPath]: s3CacheProxyApi.reducer,\n [self.name]: self.reducer,\n [userPreferences.name]: userPreferences.reducer,\n});\n\nconst getPersistedState = (\n version: number,\n state: PersistedState,\n overrides?: Partial>\n): Exclude => ({\n _persist: {\n version,\n rehydrated: false,\n },\n ...state,\n ...overrides,\n});\n\nconst persistedReducers = persistReducer(\n {\n key: \"root\",\n version: 2,\n storage,\n blacklist: [\n idmApi.reducerPath,\n location.name,\n notifications.name,\n rtcLocationApi.reducerPath,\n portalApi.reducerPath,\n s3CacheProxyApi.reducerPath,\n self.name,\n ],\n migrate: createMigrate({\n // we never used version -1 but just in case\n 0: (state) => getPersistedState(0, state),\n // we never used version 0 but just in case\n 1: (state) => getPersistedState(1, state),\n // clear cycleSlots because convert library changed\n 2: (state) =>\n getPersistedState(2, state, {\n [measurement.name]: measurement.getInitialState(),\n }),\n }),\n },\n reducers\n);\n\nexport const store = configureStore({\n reducer: persistedReducers,\n middleware: (getDefaultMiddleware) =>\n new Tuple(\n ...getDefaultMiddleware({\n serializableCheck: {\n ignoredPaths: [\"location\"],\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\n },\n }),\n idmApi.middleware,\n portalApi.middleware,\n rtcLocationApi.middleware,\n s3CacheProxyApi.middleware\n ),\n});\n\nexport const persistor = persistStore(store);\n\nsetupListeners(store.dispatch);\n\nexport type RootState = ReturnType;\nexport type AppDispatch = typeof store.dispatch;\nexport type AppStore = typeof store;\n\nexport const useLocation: () => RootState[\"location\"] =\n (): RootState[\"location\"] =>\n useSelector((state: RootState) => state.location);\n\nexport const useSelf: () => RootState[\"self\"] = (): RootState[\"self\"] =>\n useSelector((state: RootState) => state.self);\n\nexport const useMeasurement: () => RootState[\"measurement\"] =\n (): RootState[\"measurement\"] =>\n useSelector((state: RootState) => state.measurement);\n\nexport const useNotifications: () => RootState[\"notifications\"] =\n (): RootState[\"notifications\"] =>\n useSelector((state: RootState) => state.notifications);\n\nexport const useUserPreferences: () => RootState[\"userPreferences\"] =\n (): RootState[\"userPreferences\"] =>\n useSelector((state: RootState) => state.userPreferences);\n\nexport interface AsyncDataState {\n data?: T;\n status: AsyncThunkStatus;\n}\n\nexport const asyncDataIdle = (data?: T): AsyncDataState => ({\n data,\n status: AsyncThunkStatus.IDLE,\n});\n\nexport const asyncDataPending = (data?: T): AsyncDataState => ({\n data,\n status: AsyncThunkStatus.PENDING,\n});\n\nexport const asyncDataSuccess = (data: T): AsyncDataState => ({\n data,\n status: AsyncThunkStatus.SUCCEEDED,\n});\n\nexport const asyncDataFailed = (data?: T): AsyncDataState => ({\n data,\n status: AsyncThunkStatus.FAILED,\n});\n","import { useSelf } from \"portal/state/store\";\nimport React, {\n ComponentType,\n FunctionComponent,\n PropsWithChildren,\n ReactNode,\n} from \"react\";\n\ntype Permission = string;\ntype PermissionSet = Record;\n\n// A permission group is either a single permission that must be granted, or an\n// array of permissions that must ALL be granted for the group to be satisfied.\ntype PermissionGroup = Permission | Permission[];\n\nconst isSatisfied = (\n permissions: PermissionSet,\n group: PermissionGroup\n): boolean => {\n return Array.isArray(group)\n ? group.every((permission) => Object.hasOwn(permissions, permission))\n : Object.hasOwn(permissions, group);\n};\n\n/**\n * core logic utility\n * we don't export this because we handle all three reasonable cases below\n *\n * Returns true if any of the permission groups is satisfied.\n */\nconst isAuthorized = (\n permissions: Record,\n permissionGroups: PermissionGroup[]\n): boolean => {\n return permissionGroups.some((group) => isSatisfied(permissions, group));\n};\n\n// hook version of isAuthorized\nexport const useAuthorizationRequired = (\n permissionGroups: PermissionGroup[]\n): boolean => {\n const { permissions } = useSelf();\n return isAuthorized(permissions, permissionGroups);\n};\n\n// component version of isAuthorized\ninterface WithAuthorizationRequiredProps extends PropsWithChildren {\n permissionGroups?: PermissionGroup[];\n}\nexport const WithAuthorizationRequired: FunctionComponent<\n WithAuthorizationRequiredProps\n> = ({ children, permissionGroups = [] }) => {\n const { permissions } = useSelf();\n\n if (!isAuthorized(permissions, permissionGroups)) {\n return;\n }\n\n return children;\n};\n\n// HOC version of isAuthorized\nexport const withAuthorizationRequired =

(\n permissionGroups: PermissionGroup[] = [],\n Component: ComponentType

,\n otherwise?: ReactNode\n): FunctionComponent

=>\n function WithAuthorizationRequired(props: P): ReactNode {\n const { permissions } = useSelf();\n\n if (!isAuthorized(permissions, permissionGroups)) {\n return otherwise;\n }\n\n return ;\n };\n","import { buildPermission } from \"portal/utils/auth\";\nimport {\n dismissNotification,\n notificationExited,\n type Key as NotificationKey,\n} from \"portal/state/notifications\";\nimport { IconButton, Snackbar } from \"@mui/material\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport {\n SnackbarProvider,\n useSnackbar as useNotistackSnackbar,\n} from \"notistack\";\nimport { useAuthorizationRequired } from \"./auth/WithAuthorizationRequired\";\nimport { useDispatch } from \"react-redux\";\nimport { useNotifications } from \"portal/state/store\";\nimport CloseIcon from \"@mui/icons-material/CloseOutlined\";\nimport React, {\n FunctionComponent,\n PropsWithChildren,\n useEffect,\n useRef,\n} from \"react\";\n\nexport const CarbonNotifications: FunctionComponent = ({\n children,\n}) => {\n const dispatch = useDispatch();\n\n const verboseErrors = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n ]);\n\n return (\n (\n {\n // We only ever use strings (nanoids) for our keys.\n const key: NotificationKey = snackbarKey as string;\n dispatch(dismissNotification(key));\n }}\n >\n \n \n )}\n preventDuplicate={!verboseErrors}\n maxSnack={verboseErrors ? 10 : 3}\n Components={{ default: Snackbar }}\n classes={{ containerRoot: \"mt-16\" }}\n anchorOrigin={{ horizontal: \"right\", vertical: \"top\" }}\n >\n {children}\n \n );\n};\n\nconst CarbonNotificationsInner: FunctionComponent = ({\n children,\n}) => {\n useCarbonNotifications();\n return children;\n};\n\nfunction useCarbonNotifications(): void {\n const dispatch = useDispatch();\n const { slots } = useNotifications();\n\n const { enqueueSnackbar, closeSnackbar } = useNotistackSnackbar();\n const displayedKeysRef = useRef | undefined>(undefined);\n if (!displayedKeysRef.current) {\n displayedKeysRef.current = new Set();\n }\n const { current: displayedKeys } = displayedKeysRef;\n\n // Whenever Redux state changes, sync it out to Notistack state. And, when\n // Notistack is done with a notification, remove it from the Redux state.\n useEffect(() => {\n for (const slot of slots) {\n const { key, dismissed, notification } = slot;\n const displayed = displayedKeys.has(key);\n if (dismissed && displayed) {\n closeSnackbar(key);\n } else if (!dismissed && !displayed) {\n enqueueSnackbar({\n ...notification,\n key,\n onExited: () => {\n dispatch(notificationExited(key));\n displayedKeys.delete(key);\n },\n });\n displayedKeys.add(key);\n }\n }\n }, [dispatch, displayedKeys, slots, closeSnackbar, enqueueSnackbar]);\n}\n","import { classes } from \"portal/utils/theme\";\nimport { Skeleton, SkeletonProps } from \"@mui/material\";\nimport React, { cloneElement, FunctionComponent, isValidElement } from \"react\";\n\n/**\n * Wrapper component that shows a skeleton loader for the child element\n */\nexport interface WithSkeletonProps extends SkeletonProps {\n error?: boolean;\n success: boolean;\n}\nexport const WithSkeleton: FunctionComponent = (props) => {\n const { error, success, children, className, ...rest } = props;\n\n if (error || !children) {\n return;\n }\n\n if (!success) {\n return ;\n }\n\n if (!isValidElement(children)) {\n return <>{children};\n }\n\n // if it's an element, try to add the className to it\n return cloneElement(children, {\n className: classes(className, children.props.className),\n } as any);\n};\n","import { Card, CardActions, CardContent, Typography } from \"@mui/material\";\nimport { classes } from \"portal/utils/theme\";\nimport { Form, Formik, FormikConfig, FormikProps, FormikValues } from \"formik\";\nimport { PropsFor } from \"@mui/system\";\nimport { WithSkeleton, WithSkeletonProps } from \"./WithSkeleton\";\nimport Grid from \"@mui/system/Unstable_Grid\";\nimport React, { ReactNode } from \"react\";\n\ninterface CarbonCardBaseProps {\n // eslint-disable-next-line @typescript-eslint/ban-types\n gridProps?: PropsFor;\n title: string;\n error?: boolean;\n success: boolean;\n withSkeletonProps?: WithSkeletonProps;\n}\n\nexport interface CarbonCardBasicProps extends CarbonCardBaseProps {\n content: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface CarbonCardFormikProps\n extends CarbonCardBaseProps {\n content: ReactNode | ((formikProps: FormikProps) => ReactNode);\n actions?: ReactNode | ((formikProps: FormikProps) => ReactNode);\n formikProps: FormikConfig;\n}\n\nexport type CarbonCardProps =\n | CarbonCardBasicProps\n | CarbonCardFormikProps;\n\nconst isPropsFormik = (\n props: CarbonCardProps\n): props is CarbonCardFormikProps => \"formikProps\" in props;\n\nconst isPropsBasic = (\n props: CarbonCardProps\n): props is CarbonCardBasicProps => !isPropsFormik(props);\n\nexport const CarbonCard: (\n props: CarbonCardProps\n) => ReactNode = (props) => {\n const { gridProps, title, error, success, withSkeletonProps } = props;\n\n const wrapBasic = (content: ReactNode, actions: ReactNode): ReactNode => (\n <>\n \n \n {title}\n \n {content}\n \n \n {actions}\n \n \n );\n\n const wrapFormik = (\n content: CarbonCardFormikProps[\"content\"],\n actions: CarbonCardFormikProps[\"actions\"],\n formikProps: CarbonCardFormikProps[\"formikProps\"]\n ): ReactNode => (\n \n {(formProps) => (\n

\n {wrapBasic(\n typeof content === \"function\" ? content(formProps) : content,\n typeof actions === \"function\" ? actions(formProps) : actions\n )}\n
\n )}\n \n );\n\n return (\n \n \n \n {isPropsFormik(props) &&\n wrapFormik(props.content, props.actions, props.formikProps)}\n {isPropsBasic(props) && wrapBasic(props.content, props.actions)}\n \n \n \n );\n};\n","import {\n CircularProgress,\n IconButton,\n List,\n ListItem,\n TextField,\n} from \"@mui/material\";\nimport { LoadingButton } from \"@mui/lab\";\nimport { TEXT_FIELD_DARK } from \"portal/utils/theme\";\n\nimport { useTranslation } from \"react-i18next\";\nimport AddIcon from \"@mui/icons-material/AddOutlined\";\nimport DeleteIcon from \"@mui/icons-material/DeleteOutlined\";\nimport React, { FunctionComponent, useState } from \"react\";\n\ninterface Props {\n list?: string[];\n loading?: boolean;\n onAdd: (added: string) => void;\n onRemove: (removed: string) => void;\n}\n\nexport const ListManager: FunctionComponent = ({\n list,\n onAdd,\n onRemove,\n loading = false,\n}) => {\n const { t } = useTranslation();\n const [newItem, setNewItem] = useState(\"\");\n return (\n \n {list?.map((item) => (\n onRemove(item)}\n >\n {loading ? (\n \n ) : (\n \n )}\n \n }\n className=\"font-mono text-lg\"\n >\n {item}\n \n ))}\n onAdd(newItem)}\n >\n {t(\"utils.actions.add\")} \n \n }\n >\n setNewItem(event.target.value)}\n />\n \n \n );\n};\n","export const isAbort = (error: unknown): boolean =>\n error instanceof DOMException && error.name === \"AbortError\";\n\n// Use `myPromise.catch(swallowAbort)` to turn an `AbortError` into a silent\n// success, while letting any other errors still throw.\nexport const swallowAbort = (reason: unknown): Promise =>\n isAbort(reason) ? Promise.resolve() : Promise.reject(reason);\n","import { DateRange } from \"@mui/x-date-pickers-pro\";\nimport { DateTime } from \"luxon\";\nimport { isEqual as isArrayEqual } from \"../arrays\";\nimport { isEqual as isObjectEqual } from \"../objects\";\nimport { isSameRange } from \"../dates\";\nimport { useState } from \"react\";\n\n/**\n * A set of hooks that \"stabilize\" complex objects by selectively deep comparing them\n * to prevent unnecessary re-renders.\n */\n\nexport const useStable = (input: T, eq: (a: T, b: T) => boolean): T => {\n const [previous, setPrevious] = useState(input);\n if (eq(input, previous)) {\n return previous;\n } else {\n setPrevious(input);\n return input;\n }\n};\n\nexport const useStableArray = (input: T[]): T[] =>\n useStable(input, isArrayEqual);\n\nexport const useStableObject = (input: T): T =>\n useStable(input, isObjectEqual);\n\nexport const useStableDateTime = (input: DateTime): DateTime =>\n useStable(input, (a, b) => a.equals(b));\n\nexport const useStableDateRange = (\n input: DateRange\n): DateRange => useStable(input, isSameRange);\n","import { addNotification, type VariantType } from \"portal/state/notifications\";\nimport {\n BaseQueryError,\n BaseQueryFn,\n BaseQueryResult,\n ResultTypeFrom,\n} from \"@reduxjs/toolkit/query\";\nimport { buildPermission } from \"../auth\";\nimport { handleError } from \"portal/state/portalApi\";\nimport { isAbort } from \"portal/utils/errors\";\nimport { isObject } from \"../objects\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { SerializedError } from \"@reduxjs/toolkit\";\nimport { TFunction } from \"i18next\";\nimport {\n TypedLazyQueryTrigger,\n TypedMutationTrigger,\n TypedUseLazyQueryStateResult,\n TypedUseMutationResult,\n TypedUseQueryHookResult,\n} from \"@reduxjs/toolkit/query/react\";\nimport { useAuthorizationRequired } from \"portal/components/auth/WithAuthorizationRequired\";\nimport { useDispatch } from \"react-redux\";\nimport { useEffect } from \"react\";\nimport { useStableObject } from \"./useStable\";\nimport { useTranslation } from \"react-i18next\";\n\n/**\n * Wrappers for RTK Query and Mutation hooks (including lazy ones) to handle\n * automatic error and success toast notifications.\n *\n * If success string is passed, that message will be shown on query success\n *\n * If user-facing error message is included in error response, it will be shown\n * (special error message will be shown for queryLimitReached errors)\n * errorVariant can be set to \"warning\" to show warning style toast instead of\n * error style toast on errors\n */\n\nexport interface UseApiPopupsOptions {\n success?: string;\n errorVariant?: VariantType;\n}\n\nconst DEFAULT_OPTIONS: UseApiPopupsOptions = {};\n\nexport const onPopupStateChange = (\n t: TFunction,\n data: ResultType | ResultTypeFrom>,\n showFullErrors: boolean,\n dispatch: ReturnType,\n isError: boolean,\n error: SerializedError | BaseQueryError | undefined,\n isSuccess: boolean,\n { success, errorVariant }: UseApiPopupsOptions\n): void => {\n if (isObject(data) && \"queryLimitReached\" in data && data.queryLimitReached) {\n dispatch(\n addNotification({\n message: t(\"components.ErrorBoundary.queryLimitReached\"),\n variant: \"warning\",\n })\n );\n }\n\n if (isError) {\n handleError(t, isError, error, (message) => {\n // ignore aborted request errors\n if (isAbort(error)) {\n return;\n }\n const variant = errorVariant ?? \"error\";\n if (variant === \"error\" || showFullErrors) {\n dispatch(\n addNotification({\n message: message ?? t(\"components.ErrorBoundary.error\"),\n variant,\n })\n );\n }\n });\n }\n if (success && isSuccess) {\n dispatch(\n addNotification({\n message: success,\n variant: \"success\",\n })\n );\n }\n};\n\nexport const useQueryPopups = <\n ResultType,\n QueryArgument,\n BaseQuery extends BaseQueryFn,\n HookResult extends TypedUseQueryHookResult<\n ResultType,\n QueryArgument,\n BaseQuery\n >\n>(\n useQueryHookResult: HookResult,\n options?: UseApiPopupsOptions\n): HookResult => {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const showFullErrors = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n ]);\n const { data, isError, error, isSuccess } = useQueryHookResult;\n const stableOptions = useStableObject(options ?? DEFAULT_OPTIONS);\n useEffect(() => {\n onPopupStateChange(\n t,\n data,\n showFullErrors,\n dispatch,\n isError,\n error,\n isSuccess,\n stableOptions\n );\n }, [\n isError,\n error,\n isSuccess,\n t,\n data,\n showFullErrors,\n dispatch,\n stableOptions,\n ]);\n\n return useQueryHookResult;\n};\n\nexport const useLazyPopups = <\n ResultType,\n QueryArgument,\n BaseQuery extends BaseQueryFn,\n LastPromiseInfo\n>(\n useLazyQueryHookResult: [\n TypedLazyQueryTrigger,\n TypedUseLazyQueryStateResult,\n LastPromiseInfo\n ],\n options?: UseApiPopupsOptions\n): [\n TypedLazyQueryTrigger,\n TypedUseLazyQueryStateResult,\n LastPromiseInfo\n] => {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const showFullErrors = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n ]);\n const [, { data, isError, error, isSuccess }] = useLazyQueryHookResult;\n const stableOptions = useStableObject(options ?? DEFAULT_OPTIONS);\n useEffect(() => {\n onPopupStateChange(\n t,\n data,\n showFullErrors,\n dispatch,\n isError,\n error,\n isSuccess,\n stableOptions\n );\n }, [\n isError,\n error,\n isSuccess,\n t,\n data,\n showFullErrors,\n dispatch,\n stableOptions,\n ]);\n\n return useLazyQueryHookResult;\n};\n\nexport const useMutationPopups = <\n ResultType,\n QueryArgument,\n BaseQuery extends BaseQueryFn\n>(\n useMutationHookResult: readonly [\n TypedMutationTrigger,\n TypedUseMutationResult\n ],\n options?: UseApiPopupsOptions\n): readonly [\n TypedMutationTrigger,\n TypedUseMutationResult\n] => {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const showFullErrors = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n ]);\n const [, { data, isError, error, isSuccess }] = useMutationHookResult;\n const stableOptions = useStableObject(options ?? DEFAULT_OPTIONS);\n useEffect(() => {\n onPopupStateChange(\n t,\n data,\n showFullErrors,\n dispatch,\n isError,\n error,\n isSuccess,\n stableOptions\n );\n }, [\n isError,\n error,\n isSuccess,\n t,\n data,\n showFullErrors,\n dispatch,\n stableOptions,\n ]);\n\n return useMutationHookResult;\n};\n","import { Alert } from \"@mui/material\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { capitalize } from \"portal/utils/strings\";\nimport { CarbonCard } from \"portal/components/CarbonCard\";\nimport { GlobalAllowedAlarm } from \"protos/portal/admin\";\nimport { ListManager } from \"portal/components/ListManager\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport {\n useGetGlobalAlarmListsQuery,\n useSetGlobalAlarmListsMutation,\n} from \"portal/state/portalApi\";\nimport {\n useMutationPopups,\n useQueryPopups,\n} from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport { withAuthenticationRequired } from \"@auth0/auth0-react\";\nimport { withAuthorizationRequired } from \"portal/components/auth/WithAuthorizationRequired\";\nimport { without } from \"portal/utils/arrays\";\nimport Grid from \"@mui/system/Unstable_Grid\";\nimport React, { FunctionComponent } from \"react\";\n\nconst _AdminAlarms: FunctionComponent = () => {\n const { t } = useTranslation();\n\n const { data: globalLists } = useQueryPopups(useGetGlobalAlarmListsQuery());\n const [setGlobalAlarmLists, { isLoading }] = useMutationPopups(\n useSetGlobalAlarmListsMutation(),\n {\n success: capitalize(\n t(\"utils.actions.savedLong\", {\n subject: t(\"views.admin.alarms.lists\"),\n })\n ),\n }\n );\n\n return (\n \n \n \n {t(\"views.admin.alarms.allowWarning\")}\n \n alarm.code)}\n loading={isLoading}\n onAdd={(newCode) => {\n setGlobalAlarmLists({\n allowed: {\n alarms: [\n ...(globalLists?.allowed?.alarms ?? []),\n GlobalAllowedAlarm.fromPartial({ code: newCode }),\n ],\n },\n });\n }}\n onRemove={(removedCode) => {\n setGlobalAlarmLists({\n allowed: {\n alarms: without(\n globalLists?.allowed?.alarms,\n GlobalAllowedAlarm.fromPartial({ code: removedCode }),\n \"code\"\n ),\n },\n });\n }}\n />\n \n }\n />\n \n );\n};\n\nexport const AdminAlarms = withAuthenticationRequired(\n withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.read,\n PermissionResource.admin_alarms,\n PermissionDomain.all\n ),\n ],\n _AdminAlarms\n )\n);\n","import {\n Avatar,\n Chip,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n} from \"@mui/material\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { DateTime } from \"luxon\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { RoSyAuditLog } from \"protos/portal/audit_logs\";\nimport { skipToken } from \"@reduxjs/toolkit/query\";\nimport {\n useGetConfigAuditLogQuery,\n useGetUserQuery,\n} from \"portal/state/portalApi\";\nimport { useQueryPopups } from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport { withAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport ChangeIcon from \"@mui/icons-material/ArrowForward\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport React, { FunctionComponent } from \"react\";\n\ninterface ConfigAuditLogProps {\n serial: string;\n path: string;\n open?: boolean;\n onClose?: () => void;\n}\n\nconst _ConfigAuditLog: FunctionComponent = ({\n serial,\n path: key,\n open = false,\n onClose,\n}) => {\n const { t } = useTranslation();\n\n const { data, isLoading } = useQueryPopups(\n useGetConfigAuditLogQuery(open ? { serial, key } : skipToken)\n );\n const logs = data?.logs;\n\n return (\n \n \n {t(\"views.fleet.robots.config.auditLog.title\")}\n \n \n \n \n \n {isLoading && (\n
\n \n
\n )}\n {logs && (\n
    \n {logs.map((log) => (\n \n ))}\n
\n )}\n
\n \n );\n};\n\nexport const ConfigAuditLog = withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.read,\n PermissionResource.configs,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.configs,\n PermissionDomain.all\n ),\n ],\n _ConfigAuditLog\n);\n\ninterface LoglineProps {\n log: RoSyAuditLog;\n}\n\nconst Logline: FunctionComponent = ({ log }) => {\n const { t, i18n } = useTranslation();\n const { userId, timestamp, oldValue, newValue } = log;\n // RoSy sometimes gives us a `userId` that's actually just a robot serial.\n // Real user IDs should look like `auth0|12345` or `google-oauth2|12345` or\n // similar, not `slayer1`. Remove hack when RoSy always returns user IDs.\n const isSerial = !userId.includes(\"|\");\n const hasUser = userId !== \"\" && !isSerial;\n const { data } = useQueryPopups(\n useGetUserQuery(hasUser ? { userId } : skipToken)\n );\n const displayName = isSerial ? userId : data?.user?.name ?? data?.user?.email;\n\n return (\n
  • \n
    \n }\n label={displayName ?? t(\"components.Loading.placeholder\")}\n />\n \n {DateTime.fromMillis(Number(timestamp)).toLocaleString(\n DateTime.DATETIME_SHORT,\n { locale: i18n.language }\n )}\n \n
    \n
    \n
    {oldValue}
    \n \n
    {newValue}
    \n
    \n
  • \n );\n};\n","import { Alert, Button } from \"@mui/material\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { classes } from \"portal/utils/theme\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { useDeleteConfigCacheMutation } from \"portal/state/portalApi\";\nimport { useMutationPopups } from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport { withAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport React, { FunctionComponent, useState } from \"react\";\nimport RefreshIcon from \"@mui/icons-material/RestartAlt\";\n\ninterface ConfigCacheRefreshProps {\n serial: string | undefined;\n}\n\nconst _ConfigCacheRefresh: FunctionComponent = ({\n serial,\n}) => {\n const { t } = useTranslation();\n const [deleteConfigCache] = useMutationPopups(useDeleteConfigCacheMutation());\n const [isLoading, setLoading] = useState(false);\n\n if (!serial) {\n return;\n }\n\n return (\n {\n setLoading(true);\n const { error } = await deleteConfigCache({ serial });\n if (error) {\n setLoading(false);\n } else {\n window.location.reload();\n }\n }}\n startIcon={\n \n }\n disabled={isLoading}\n >\n {t(\"views.admin.config.clearCaches.action\")}\n \n }\n >\n {t(\"views.admin.config.clearCaches.description\")}\n \n );\n};\n\nexport const ConfigCacheRefresh = withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.update,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n ],\n _ConfigCacheRefresh\n);\n","export const debounce = any>(\n callback: T,\n {\n wait = 300,\n leading = false,\n trailing = true,\n }: { leading?: boolean; trailing?: boolean; wait?: number } = {}\n): ((...arguments_: Parameters) => void) => {\n let timeout: number | undefined;\n return (...arguments_: Parameters): void => {\n const later = (): void => {\n timeout = undefined;\n if (trailing) {\n return callback.apply(this, arguments_);\n }\n };\n const callNow = leading && !timeout;\n clearTimeout(timeout);\n timeout = window.setTimeout(later, wait);\n if (callNow) {\n callback.apply(this, arguments_);\n }\n };\n};\n\nexport const sleep = (ms: number): Promise =>\n new Promise((resolve) => setTimeout(resolve, ms));\n","import * as Sentry from \"@sentry/browser\";\nimport {\n BLUE_LOADING_BUTTON,\n SMALL_TEXT_FIELD_DARK,\n WHITE_BUTTON,\n} from \"portal/utils/theme\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n TextField,\n} from \"@mui/material\";\nimport { convert } from \"portal/utils/units/units\";\nimport { LoadingButton } from \"@mui/lab\";\nimport { sleep } from \"portal/utils/timing\";\nimport { useSelf } from \"portal/state/store\";\nimport { useTranslation } from \"react-i18next\";\nimport FeedbackIcon from \"@mui/icons-material/FeedbackOutlined\";\nimport React, {\n createContext,\n FunctionComponent,\n PropsWithChildren,\n useContext,\n useEffect,\n useState,\n} from \"react\";\n\ninterface Feedback {\n comments: string;\n email: string;\n isLoading: boolean;\n sendFeedback: () => void;\n setComments: (comments: string) => void;\n setEmail: (email: string) => void;\n}\n\nconst FeedbackContext = createContext({\n comments: \"\",\n email: \"\",\n isLoading: false,\n sendFeedback: () => console.warn(\"sendFeedback not initialized\"),\n setComments: () => console.warn(\"setComments not initialized\"),\n setEmail: () => console.warn(\"setEmail not initialized\"),\n});\n\nexport const FeedbackContextProvider: FunctionComponent = ({\n children,\n}) => {\n const { user } = useSelf();\n\n const [comments, setComments] = useState(\"\");\n const [email, setEmail] = useState(user?.email ?? \"\");\n const [isLoading, setLoading] = useState(false);\n\n useEffect(() => {\n if (email === \"\" && user?.email) {\n setEmail(user.email);\n }\n }, [email, user?.email]);\n\n const sendFeedback = async (): Promise => {\n setLoading(true);\n const sentryUser = user\n ? {\n email: email || user.email,\n name: user.name,\n }\n : undefined;\n Sentry.captureMessage(\"Feedback form submitted\", {\n user: sentryUser,\n });\n Sentry.captureUserFeedback({\n event_id: Sentry.lastEventId() ?? \"\",\n name: user?.name ?? (email || \"\"),\n email: email || user?.email || \"\",\n comments: comments || \"\",\n });\n await sleep(convert(3).from(\"s\").to(\"ms\"));\n setLoading(false);\n };\n\n return (\n \n {children}\n \n );\n};\n\ninterface FeedbackFormProps {\n commentText?: string;\n disableButtons?: boolean;\n required?: boolean;\n}\n\nexport const FeedbackForm: FunctionComponent = ({\n commentText,\n disableButtons = false,\n required = false,\n}) => {\n const { t } = useTranslation();\n const { email, comments, sendFeedback, setEmail, setComments, isLoading } =\n useContext(FeedbackContext);\n return (\n
    \n setEmail(event.target.value)}\n className=\"w-full\"\n label=\"Email\"\n disabled={isLoading}\n />\n setComments(event.target.value)}\n className=\"w-full\"\n label={`${commentText ?? t(\"components.FeedbackDialog.comment\")}${\n required ? \"*\" : ` ${t(\"utils.form.optional\")}`\n }`}\n disabled={isLoading}\n />\n {!disableButtons && (\n {\n await sendFeedback();\n window.location.reload();\n }}\n startIcon={}\n >\n {t(\"components.FeedbackDialog.submit\")}\n \n )}\n
    \n );\n};\n\ninterface FeedbackDialogProps {\n commentText?: string;\n onSuccess?: () => void;\n open: boolean;\n required?: boolean;\n setOpen: (open: boolean) => void;\n yesText?: string;\n}\nexport const FeedbackDialog: FunctionComponent = ({\n commentText,\n onSuccess,\n open,\n required = false,\n setOpen,\n yesText,\n}) => {\n const { t } = useTranslation();\n const { sendFeedback, isLoading, comments } = useContext(FeedbackContext);\n\n return (\n \n {t(\"components.FeedbackDialog.feedback\")}\n \n \n \n \n \n {\n await sendFeedback();\n onSuccess?.();\n setOpen(false);\n }}\n startIcon={}\n >\n {yesText ?? t(\"utils.actions.submit\")}\n \n \n \n );\n};\n","import { BLUE_LOADING_BUTTON, classes } from \"portal/utils/theme\";\nimport { captureException } from \"@sentry/react\";\nimport {\n FeedbackContextProvider,\n FeedbackDialog,\n FeedbackForm,\n} from \"./FeedbackDialog\";\nimport { isAbort } from \"portal/utils/errors\";\nimport { LoadingButton } from \"@mui/lab\";\nimport { ParseKeys, t } from \"i18next\";\nimport ErrorIcon from \"@mui/icons-material/WarningOutlined\";\nimport FeedbackIcon from \"@mui/icons-material/FeedbackOutlined\";\nimport React, {\n Component,\n ComponentType,\n forwardRef,\n ForwardRefExoticComponent,\n FunctionComponent,\n PropsWithChildren,\n PropsWithoutRef,\n ReactNode,\n RefAttributes,\n useState,\n} from \"react\";\nimport ReloadIcon from \"@mui/icons-material/AutorenewOutlined\";\n\nconst ICON_SIZE_LARGE = \"text-6xl\";\nconst ICON_SIZE_SMALL = \"text-2xl\";\n\ninterface ErrorProps {\n small?: boolean;\n errorMessage: string;\n}\n\nexport const Error: FunctionComponent = ({\n errorMessage,\n small,\n}) => {\n const [isReloading, setReloading] = useState(false);\n const [isFeedbackOpen, setFeedbackOpen] = useState(false);\n\n return (\n
    \n \n {isReloading ? (\n \n ) : (\n \n )}\n {errorMessage}\n {small && (\n <>\n setFeedbackOpen(true)}\n startIcon={}\n >\n {t(\"components.FeedbackDialog.feedback\")}\n \n \n setFeedbackOpen(open)}\n onSuccess={() => window.location.reload()}\n />\n \n {\n setReloading(true);\n window.location.reload();\n }}\n startIcon={}\n >\n {t(\"utils.actions.reload\")}\n \n \n )}\n {!small && (\n \n \n \n )}\n
    \n \n );\n};\n\n/**\n * Version of error boundary that:\n * * Logs to Sentry if configured\n * * Supports multiple layouts\n * * Supports custom messages\n */\ninterface ErrorBoundaryProps extends PropsWithChildren {\n i18nKey?: ParseKeys;\n small?: boolean;\n}\n\nclass ErrorBoundary extends Component {\n state: {\n hasError: boolean;\n };\n\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(): any {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, ...arguments_: any[]): void {\n // ignore aborted request errors\n if (isAbort(error)) {\n return;\n }\n if (window._jsenv.REACT_APP_SENTRY_DSN) {\n captureException(error);\n } else {\n console.error(error, ...arguments_);\n }\n }\n\n render(): ReactNode {\n let errorMessage = this.props.i18nKey ? t(this.props.i18nKey) : \"\";\n if (!errorMessage) {\n errorMessage = this.props.small\n ? t(\"utils.descriptors.error\")\n : t(\"components.ErrorBoundary.error\");\n }\n\n return this.state.hasError ? (\n \n ) : (\n this.props.children\n );\n }\n}\n\nexport default ErrorBoundary;\n\n/**\n * HOC version of ErrorBoundary\n */\nexport const withErrorBoundary =

    (\n errorBoundaryProps: ErrorBoundaryProps,\n WrappedComponent: ComponentType

    \n): ForwardRefExoticComponent & RefAttributes> =>\n forwardRef((props, ref) => (\n \n \n \n ));\n","import { capitalize } from \"portal/utils/strings\";\nimport { classes, SMALL_TEXT_FIELD_DARK } from \"portal/utils/theme\";\nimport { ConfigNode } from \"protos/config/api/config_service\";\nimport { debounce } from \"portal/utils/timing\";\nimport {\n filterConfigTree,\n indexConfigTree,\n searchConfigTree,\n SearchIndex,\n} from \"portal/utils/configs\";\nimport {\n FormControlLabel,\n IconButton,\n InputAdornment,\n Skeleton,\n Switch,\n TextField,\n} from \"@mui/material\";\nimport { GlobalHotKeys } from \"react-hotkeys\";\nimport { SimpleTreeView, TreeItem } from \"@mui/x-tree-view\";\nimport { useLocation } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { withErrorBoundary } from \"portal/components/ErrorBoundary\";\nimport { without } from \"portal/utils/arrays\";\nimport ChangedIcon from \"@mui/icons-material/ChangeHistoryOutlined\";\nimport ClearIcon from \"@mui/icons-material/ClearOutlined\";\nimport CollapsedIcon from \"@mui/icons-material/ExpandMoreOutlined\";\nimport ExpandedIcon from \"@mui/icons-material/ChevronRightOutlined\";\nimport React, {\n FunctionComponent,\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nexport const getParentPath = (path: string): string =>\n path.split(\"/\").slice(0, -1).join(\"/\");\n\n// takes a path or array of paths and expands them to include all ancestors\nexport const expandPathsTo = (paths: string[] | string): string[] => {\n let expandedPaths: string[] = [];\n if (Array.isArray(paths)) {\n for (const path of paths) {\n expandedPaths = [...expandedPaths, ...expandPathsTo(path)];\n }\n } else {\n const transformedPaths = paths\n .split(\"/\")\n .map((segment, index, segments) => segments.slice(0, index).join(\"/\"));\n expandedPaths = [...expandedPaths, ...transformedPaths];\n }\n // remove dupes\n return [...new Set(expandedPaths)];\n};\n\ninterface NodeProps {\n node: ConfigNode;\n path?: string;\n onSelect: (path: string) => void;\n changedPaths: string[] | undefined;\n}\n\nexport const TreeNode: FunctionComponent = ({\n node,\n onSelect,\n path: parentPath = \"\",\n changedPaths,\n}) => {\n const breadcrumbs = parentPath ? `${parentPath}/` : \"\";\n const path = `${breadcrumbs}${node.name}`;\n return (\n \n {changedPaths?.includes(path) ? (\n \n ) : (\n <>\n )}\n {node.name}\n \n }\n onClick={() => {\n onSelect(path);\n }}\n >\n {node.children.map((child) => (\n \n ))}\n \n );\n};\n\nconst TREE_SKELETON = (\n <>\n \n \n \n \n \n \n);\n\ninterface TreeProps {\n className?: string;\n config?: ConfigNode;\n initialShowChanged: boolean;\n onSelect: (path: string | null) => void;\n selectedPath: string;\n addedPaths: string[] | undefined;\n removedPaths: string[] | undefined;\n changedPathsExpanded: string[] | undefined;\n changedPathsTree?: ConfigNode;\n isTemplate?: boolean;\n}\n\nconst _Tree: FunctionComponent = ({\n className,\n config,\n initialShowChanged,\n onSelect,\n selectedPath,\n changedPathsExpanded,\n changedPathsTree,\n isTemplate = false,\n}) => {\n const { t } = useTranslation();\n\n const { state } = useLocation();\n\n const [expanded, _setExpanded] = useState(\n // expand path to selected node\n expandPathsTo(selectedPath)\n );\n\n const setExpanded = useCallback(\n (paths: string[]): void => {\n // keep parent of selected node expanded\n _setExpanded([...paths, getParentPath(selectedPath)]);\n },\n [selectedPath]\n );\n\n const [isSearching, setSearching] = useState(false);\n const [savedExpanded, saveExpanded] = useState([]);\n // searchInput is live text box; searchQuery is debounced\n const [searchInput, setSearchInput] = useState(state?.search ?? \"\");\n const [searchQuery, setSearchQuery] = useState(state?.search ?? \"\");\n const debounceSearchState = useRef(0); // increment to cancel outstanding callback\n const finalizeSearchQuery = useMemo(\n () =>\n debounce((query, expectedState) => {\n if (debounceSearchState.current !== expectedState) {\n return;\n }\n setSearchQuery(query);\n setSearching(false);\n }),\n []\n );\n\n const handleSearchChange = (value: string): void => {\n if (!value) {\n clearSearch();\n return;\n }\n // save expanded nodes so we can restore later\n if (value && !searchInput) {\n saveExpanded(expanded);\n }\n // update value\n setSearchInput(value);\n setSearching(true);\n finalizeSearchQuery(value, ++debounceSearchState.current);\n };\n const clearSearch = (): void => {\n ++debounceSearchState.current;\n setSearchInput(\"\");\n setSearchQuery(\"\");\n setSearching(false);\n setExpanded([selectedPath, ...savedExpanded]);\n };\n\n const searchIndex: SearchIndex = useMemo(\n () => indexConfigTree(config),\n [config]\n );\n const filteredConfig = useMemo(() => {\n const resultPaths = searchConfigTree(searchIndex, searchQuery);\n return filterConfigTree(config, resultPaths);\n }, [config, searchIndex, searchQuery]);\n\n // Reset set of expanded nodes when search query changes. This doesn't\n // depend on `config`/`searchIndex` because we don't want to reset\n // expansion after the user saves a config value. It's okay to omit that\n // dep because we expect changes to the config to only change the leaf\n // values (not the structure), which this callback doesn't actually need.\n useEffect(() => {\n if (!searchQuery) {\n return; // handled by `clearSearch`\n }\n const resultPaths = searchConfigTree(searchIndex, searchQuery);\n setExpanded(\n expandPathsTo(\n // slice off the root node because the tree doesn't know about it\n resultPaths.map((path) => path.split(\"/\").slice(1).join(\"/\"))\n )\n );\n }, [searchIndex, searchQuery, setExpanded]);\n\n // controlled tree\n const handleToggle = (event: SyntheticEvent, nodeId: string): void => {\n if (expanded.includes(nodeId)) {\n setExpanded(without(expanded, nodeId));\n } else {\n setExpanded([...expanded, nodeId]);\n }\n };\n const handleSelect = (event: SyntheticEvent, nodeId: string | null): void => {\n onSelect(nodeId);\n };\n const [showChanged, setShowChanged] = useState(initialShowChanged);\n const inputRef = useRef();\n\n if (!config) {\n return (\n

    \n
    {TREE_SKELETON}
    \n
    \n \n \n
    \n
    \n );\n }\n\n const configTree = showChanged ? changedPathsTree : filteredConfig;\n\n return (\n
    \n {\n inputRef.current?.focus();\n event?.preventDefault();\n },\n }}\n />\n\n handleSearchChange(event.target.value)}\n className=\"w-full mr-5\"\n label={t(\"utils.actions.search\", {\n subject: capitalize(t(\"models.configs.config_other\")),\n })}\n disabled={showChanged}\n inputProps={{ className: \"font-mono\" }}\n InputProps={{\n ...SMALL_TEXT_FIELD_DARK.InputProps,\n endAdornment: (\n \n \n \n \n \n ),\n }}\n />\n {!isTemplate && (\n setShowChanged(checked)}\n name=\"changed\"\n />\n }\n label={t(\"views.fleet.robots.config.onlyChanged\")}\n />\n )}\n
    \n \n {isSearching && TREE_SKELETON}\n {!isSearching &&\n (showChanged ? changedPathsTree : configTree)?.children.map(\n (child) => (\n \n )\n )}\n \n
    \n
    \n );\n};\n\nexport const Tree = withErrorBoundary(\n { i18nKey: \"views.fleet.robots.config.errors.failed\" },\n _Tree\n);\n","import { classes } from \"portal/utils/theme\";\nimport { FieldProps } from \"formik\";\nimport { fieldToSwitch, SwitchProps } from \"formik-mui\";\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\nimport MuiSwitch from \"@mui/material/Switch\";\nimport React, { FunctionComponent } from \"react\";\n\n/**\n * Exclude props that are passed directly to the control\n * https://github.com/mui-org/material-ui/blob/v3.1.1/packages/material-ui/src/FormControlLabel/FormControlLabel.js#L71\n */\nexport interface SwitchWithLabelProps extends FieldProps, SwitchProps {\n className: string;\n label: string;\n}\n\nexport const SwitchWithLabel: FunctionComponent = ({\n className,\n label,\n ...props\n}) => {\n return (\n }\n label={label}\n />\n );\n};\n\nSwitchWithLabel.displayName = \"FormikMaterialUISwitchWithLabel\";\n","import { Alert, AlertTitle, Chip } from \"@mui/material\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { ConfigNode } from \"protos/config/api/config_service\";\nimport { ConfigResponse } from \"protos/portal/configs\";\nimport { DateTime } from \"luxon\";\nimport { getCustomerSerial } from \"portal/utils/robots\";\nimport {\n getNodeFromPath,\n getParentPath,\n isListNode,\n} from \"portal/utils/configs\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { useSelf } from \"portal/state/store\";\nimport { useTranslation } from \"react-i18next\";\nimport { withAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport AddIcon from \"@mui/icons-material/CreateNewFolderOutlined\";\nimport ChangeIcon from \"@mui/icons-material/ArrowForward\";\nimport DeleteIcon from \"@mui/icons-material/FolderOffOutlined\";\nimport React, { FunctionComponent, ReactNode } from \"react\";\n\ntype UnsyncedKey = ConfigResponse[\"unsyncedKeys\"][0];\n\ninterface UnsyncedKeyWarningProps {\n serial?: string;\n config?: ConfigNode;\n unsyncedKeys?: UnsyncedKey[];\n}\n\nconst _UnsyncedKeyWarning: FunctionComponent = ({\n serial,\n config,\n unsyncedKeys,\n}) => {\n const { isInternal } = useSelf();\n const { t } = useTranslation();\n\n if (!serial || !config || !unsyncedKeys || unsyncedKeys.length === 0) {\n return;\n }\n\n return (\n \n \n {t(\"views.admin.config.warnings.unsyncedKeys.title\")}\n \n {t(\"views.admin.config.warnings.unsyncedKeys.description\", {\n serial: isInternal ? serial : getCustomerSerial(t, serial),\n })}\n
      \n {unsyncedKeys.map((unsyncedKey) => (\n \n ))}\n
    \n
    \n );\n};\n\nexport const UnsyncedKeyWarning = withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.read,\n PermissionResource.configs,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.configs,\n PermissionDomain.all\n ),\n ],\n _UnsyncedKeyWarning\n);\n\ninterface UnsyncedKeyItemProps {\n unsyncedKey: UnsyncedKey;\n config: ConfigNode;\n}\n\nconst UnsyncedKeyItem: FunctionComponent = ({\n unsyncedKey,\n config,\n}) => {\n const { i18n } = useTranslation();\n const { ts, key, oldValue, newValue } = unsyncedKey;\n let displayPath: string;\n let displayOld: string;\n let displayIcon: ReactNode;\n let displayNew: string;\n let displayNewClassName: string;\n const node = getNodeFromPath(config, key);\n const parentPath = getParentPath(key);\n const parent = getNodeFromPath(config, parentPath);\n if (node && isListNode(node)) {\n // node added\n displayPath = key;\n displayOld = \"\";\n displayIcon = ;\n displayNew = newValue;\n displayNewClassName = \"italic\";\n } else if (!node && isListNode(parent)) {\n // node removed\n displayPath = parentPath;\n displayOld = \"\";\n displayIcon = ;\n displayNewClassName = \"line-through\";\n displayNew = key.replace(`${parentPath}/`, \"\");\n } else {\n // node changed\n displayPath = key;\n displayOld = oldValue;\n displayIcon = ;\n displayNew = newValue;\n displayNewClassName = \"italic\";\n }\n return (\n
  • \n
    \n \n
    {displayPath}
    \n
    \n
    \n {displayOld &&
    {displayOld}
    }\n {displayIcon}\n {displayNew &&
    {displayNew}
    }\n
    \n
  • \n );\n};\n","import {\n Alert,\n AlertTitle,\n Button,\n FormControl,\n FormHelperText,\n InputAdornment,\n MenuItem,\n OutlinedInput,\n Paper,\n} from \"@mui/material\";\nimport { AnyObjectSchema, boolean, number, object, string } from \"yup\";\nimport {\n BLUE_LOADING_BUTTON,\n classes,\n INPUT_DARK,\n RED_LOADING_BUTTON,\n SELECT_DARK,\n TEXT_FIELD_DARK,\n} from \"portal/utils/theme\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { capitalize, titleCase } from \"portal/utils/strings\";\nimport { ConfigAuditLog } from \"./ConfigAuditLog\";\nimport { ConfigCacheRefresh } from \"./ConfigCacheRefresh\";\nimport { ConfigNode } from \"protos/config/api/config_service\";\nimport { expandPathsTo, getParentPath, Tree } from \"./ConfigTree\";\nimport { Field, Form, Formik } from \"formik\";\nimport {\n filterConfigTree,\n getConfigChanges,\n getNodeFromPath,\n isBooleanNode,\n isFloatNode,\n isIntNode,\n isLeafNode,\n isListNode,\n isStringNode,\n isUintNode,\n} from \"portal/utils/configs\";\nimport { TextField as FormikTextField, Select } from \"formik-mui\";\nimport { LoadingButton } from \"@mui/lab\";\nimport {\n MutationActionCreatorResult,\n QueryStatus,\n skipToken,\n} from \"@reduxjs/toolkit/query\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { SwitchWithLabel } from \"portal/components/SwitchWithLabel\";\nimport { UnsyncedKeyWarning } from \"./UnsyncedKeyWarning\";\nimport {\n useAuthorizationRequired,\n withAuthorizationRequired,\n} from \"../auth/WithAuthorizationRequired\";\nimport {\n useDeleteConfigPathMutation,\n useDeleteConfigTemplatePathMutation,\n useGetConfigQuery,\n useGetConfigTemplateQuery,\n useSetConfigTemplateValueMutation,\n useSetConfigValueMutation,\n} from \"portal/state/portalApi\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport {\n useMutationPopups,\n useQueryPopups,\n} from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport AddIcon from \"@mui/icons-material/AddOutlined\";\nimport DeleteIcon from \"@mui/icons-material/DeleteOutlined\";\nimport React, {\n FunctionComponent,\n ReactElement,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport SaveIcon from \"@mui/icons-material/SaveOutlined\";\n\ninterface ConfigPaths {\n changedPathsTree?: ConfigNode | undefined;\n changedPathsExpanded?: string[] | undefined;\n addedPaths?: string[] | undefined;\n changedPaths?: string[] | undefined;\n removedPaths?: string[] | undefined;\n}\n\ninterface BaseProps {\n basePath?: string;\n readOnly?: boolean;\n}\n\ninterface SerialProps extends BaseProps {\n serial?: string;\n}\n\ninterface TemplateProps extends BaseProps {\n robotClass?: string;\n}\n\nconst isPropsSerial = (\n props: SerialProps | TemplateProps\n): props is SerialProps => \"serial\" in props;\n\nconst isPropsTemplate = (\n props: SerialProps | TemplateProps\n): props is TemplateProps => \"robotClass\" in props;\n\nconst _Config: FunctionComponent = ({\n basePath: inputPath,\n readOnly = false,\n ...props\n}) => {\n const { t } = useTranslation();\n const basePath = inputPath?.replace(/\\/+$/, \"\") ?? \"\";\n const isSerial = isPropsSerial(props);\n const isTemplate = isPropsTemplate(props);\n const useSetValueMutation = isTemplate\n ? useSetConfigTemplateValueMutation\n : useSetConfigValueMutation;\n const useDeletePathMutation = isTemplate\n ? useDeleteConfigTemplatePathMutation\n : useDeleteConfigPathMutation;\n let serial: string | undefined;\n if (isTemplate) {\n serial = props.robotClass;\n }\n if (isSerial) {\n serial = props.serial;\n }\n\n const [isAuditLogOpen, setAuditLogOpen] = useState(false);\n\n const { data: configData } = useQueryPopups(\n useGetConfigQuery(isSerial && serial ? { serial } : skipToken)\n );\n const { data: templateData } = useQueryPopups(\n useGetConfigTemplateQuery(isTemplate && serial ? { serial } : skipToken)\n );\n const config = isTemplate ? templateData : configData?.config;\n const template = isSerial ? configData?.template : undefined;\n const unsyncedKeys = isSerial ? configData?.unsyncedKeys : [];\n\n const canUpdate = useAuthorizationRequired([\n buildPermission(\n PermissionAction.update,\n PermissionResource.configs,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.configs,\n PermissionDomain.all\n ),\n ]);\n\n // get default config path from URL\n const { pathname, state: locationState } = useLocation();\n let path = pathname.replaceAll(basePath, \"\");\n // fix any double slashed\n path = path.replaceAll(/\\/{2,}/g, \"/\");\n // remove leading slash if any\n path = path.replace(/^\\//, \"\");\n const [selectedPath, setSelectedPath] = useState(path || \"\");\n\n // keep config path up to date\n const navigate = useNavigate();\n useEffect(() => {\n if (selectedPath) {\n navigate(`${basePath}/${selectedPath}`, {\n replace: true,\n state: locationState,\n });\n }\n }, [basePath, navigate, selectedPath, locationState]);\n\n const {\n changedPathsTree,\n changedPathsExpanded,\n addedPaths,\n changedPaths,\n removedPaths,\n } = useMemo(() => {\n if (!config || !template) {\n return {};\n }\n const { addedPaths, changedPaths, removedPaths, allChangedPaths } =\n getConfigChanges(config, template);\n const expandedPaths = [\n ...allChangedPaths,\n ...expandPathsTo(allChangedPaths),\n ];\n return {\n changedPathsTree: filterConfigTree(config, expandedPaths, \"\", {\n ignoreRoot: true,\n showChildren: false,\n }),\n changedPathsExpanded: expandedPaths,\n addedPaths,\n changedPaths,\n removedPaths,\n };\n }, [config, template]);\n\n const selectedNode = getNodeFromPath(config, selectedPath);\n const parentPath = getParentPath(selectedPath);\n const parentNode = getNodeFromPath(config, parentPath);\n const templateNode = getNodeFromPath(template, selectedPath);\n\n // handle update value\n const [setConfigValue] = useMutationPopups(useSetValueMutation(), {\n success: capitalize(\n t(\"utils.actions.savedLong\", {\n subject: t(\"models.configs.value_one\"),\n })\n ),\n });\n const updateItem = async (\n value: any\n ): Promise | undefined> => {\n if (!serial || !config) {\n return;\n }\n const response = await setConfigValue({\n serial,\n path: selectedPath,\n value,\n });\n if (isListNode(selectedNode)) {\n setSelectedPath(`${selectedPath}/${value}`);\n }\n return response;\n };\n\n // handle list delete\n const [deleteValue, { status }] = useMutationPopups(useDeletePathMutation(), {\n success: capitalize(\n t(\"utils.actions.deletedLong\", {\n subject: t(\"models.configs.key_one\"),\n })\n ),\n });\n\n const isDeleting = status === QueryStatus.pending;\n const deleteItem = async (path: string): Promise => {\n if (!serial) {\n return;\n }\n await deleteValue({ serial, path });\n setSelectedPath(parentPath);\n };\n\n // generarte appropriate field\n let field: ReactElement | null;\n let defaultValue: string | number | boolean = \"\";\n let schema: AnyObjectSchema | undefined;\n let value: string | number | boolean = \"\";\n const units = selectedNode?.def?.units;\n let hint = selectedNode?.def?.hint;\n const isDeprecated = hint && hint.toLowerCase().includes(\"deprecated\");\n const deprecationWarning = isDeprecated ? hint : undefined;\n if (isDeprecated) {\n hint = undefined;\n }\n const deprecationAlert = deprecationWarning ? (\n {deprecationWarning}\n ) : (\n <>\n );\n if (isBooleanNode(selectedNode)) {\n const formattedUnits = units ? ` ${units}` : \"\";\n field = (\n \n
    \n \n
    \n {hint && {hint}}\n {deprecationAlert}\n
    \n );\n schema = object({\n value: boolean()\n .required(t(\"utils.form.required\"))\n .typeError(t(\"utils.form.booleanType\")),\n });\n value = selectedNode?.value?.boolVal ?? false;\n defaultValue = templateNode?.value?.boolVal ?? false;\n } else if (isStringNode(selectedNode)) {\n const { sizeLimit = Number.POSITIVE_INFINITY, choices } =\n selectedNode?.def?.stringDef ?? {};\n if (Array.isArray(choices) && choices.length > 0) {\n field = (\n <>\n }\n formHelperText={{ children: hint }}\n disabled={readOnly || !canUpdate}\n >\n {choices.map((choice: string) => (\n \n {choice}\n {units ? ` ${units}` : \"\"}\n \n ))}\n \n {deprecationAlert}\n \n );\n schema = object({\n value: string(),\n });\n } else {\n field = (\n <>\n {units}\n ),\n }}\n name=\"value\"\n label={selectedNode?.name}\n helperText={hint}\n disabled={readOnly || !canUpdate}\n />\n {deprecationAlert}\n \n );\n schema = object({\n value: string()\n .test(\n \"size_limit\",\n t(\"utils.form.maxSize\", { limit: sizeLimit }),\n (value) => (value ? value.length <= sizeLimit : true)\n )\n .typeError(t(\"utils.form.stringType\")),\n });\n }\n value = selectedNode?.value?.stringVal ?? \"\";\n defaultValue = templateNode?.value?.stringVal ?? \"\";\n } else if (isIntNode(selectedNode) || isUintNode(selectedNode)) {\n field = (\n <>\n {units}\n ),\n }}\n inputProps={{ inputMode: \"numeric\", pattern: \"[0-9]+\" }}\n helperText={hint}\n disabled={readOnly || !canUpdate}\n />\n {deprecationAlert}\n \n );\n if (isIntNode(selectedNode)) {\n value = selectedNode?.value?.int64Val ?? 0;\n defaultValue = String(templateNode?.value?.int64Val ?? 0);\n } else {\n value = selectedNode?.value?.uint64Val ?? 0;\n defaultValue = String(templateNode?.value?.uint64Val ?? 0);\n }\n schema = object({\n value: number()\n .integer(t(\"utils.form.integerType\"))\n .required(t(\"utils.form.required\"))\n .typeError(t(\"utils.form.numberType\")),\n });\n } else if (isFloatNode(selectedNode)) {\n field = (\n <>\n {units}\n ),\n }}\n name=\"value\"\n label={selectedNode?.name}\n inputProps={{ inputMode: \"numeric\", pattern: \"[0-9]+\\\\.?[0-9]*\" }}\n helperText={hint}\n disabled={readOnly || !canUpdate}\n />\n {deprecationAlert}\n \n );\n schema = object({\n value: number()\n .required(t(\"utils.form.required\"))\n .typeError(t(\"utils.form.numberType\")),\n });\n value = selectedNode?.value?.floatVal ?? 0;\n defaultValue = templateNode?.value?.floatVal ?? 0;\n } else if (isListNode(selectedNode)) {\n if (readOnly || !canUpdate) {\n field = <>;\n schema = undefined;\n } else {\n field = (\n <>\n \n {deprecationAlert}\n \n );\n schema = object({\n value: string()\n .required(t(\"utils.form.required\"))\n .matches(/^[\\w.-]+$/, t(\"components.config.stringReqs\"))\n .typeError(t(\"utils.form.stringType\")),\n });\n }\n }\n\n const missingDefaults: Set = new Set();\n if (removedPaths) {\n for (const path of removedPaths) {\n if (path.startsWith(selectedPath)) {\n const truncated = path.replace(`${selectedPath}/`, \"\");\n const segments = truncated.split(\"/\");\n if (segments.length > 0) {\n const firstSegment = segments[0];\n if (!firstSegment) {\n continue;\n }\n missingDefaults.add(firstSegment);\n }\n }\n }\n }\n\n const showContent =\n isLeafNode(selectedNode) ||\n isListNode(selectedNode) ||\n isListNode(parentNode);\n\n return (\n <>\n \n \n
    \n {\n setSelectedPath(path || \"\");\n document.querySelector(\"#page\")?.scrollTo(0, 0);\n }}\n selectedPath={selectedPath}\n addedPaths={addedPaths}\n removedPaths={removedPaths}\n changedPathsExpanded={changedPathsExpanded}\n changedPathsTree={changedPathsTree}\n isTemplate={isTemplate}\n />\n {showContent && serial && (\n \n {\" \"}\n {\n const response = await updateItem(schema?.cast(values).value);\n if (response && !response.error) {\n resetForm({ values });\n }\n }}\n >\n {({ submitForm, isSubmitting, dirty, setFieldValue }) => (\n
    \n {field}\n
    \n : \n }\n >\n {isListNode(selectedNode)\n ? t(\"utils.actions.addLong\", {\n subject: titleCase(t(\"models.configs.key_one\")),\n })\n : t(\"utils.actions.save\")}\n \n setAuditLogOpen(true)}\n >\n {t(\"views.fleet.robots.config.auditLog.open\")}\n \n setAuditLogOpen(false)}\n />\n
    \n {missingDefaults.size > 0 && isListNode(selectedNode) && (\n \n \n {t(\"components.config.warnings.valueChanged.title\")}\n \n {t(\"components.config.warnings.keyMissing.description\", {\n count: missingDefaults.size,\n keys: [...missingDefaults].join(\", \"),\n })}\n \n )}\n {isListNode(parentNode) && (\n <>\n deleteItem(selectedPath)}\n startIcon={}\n >\n {t(\"utils.actions.deleteLong\", {\n subject: t(\"models.configs.key_one\"),\n })}\n \n {addedPaths?.includes(selectedPath) && (\n \n \n {t(\"components.config.warnings.valueChanged.title\")}\n \n {t(\"components.config.warnings.keyExtra.description\")}\n deleteItem(selectedPath)}\n startIcon={}\n >\n {t(\"utils.actions.deleteLong\", {\n subject: t(\"models.configs.key_one\"),\n })}\n \n \n )}\n \n )}\n {changedPaths?.includes(selectedPath) && (\n \n \n {t(\"components.config.warnings.valueChanged.title\")}\n \n {t(\n \"components.config.warnings.valueChanged.description\",\n {\n default: String(defaultValue) || \"\",\n }\n )}\n {\n setFieldValue(\"value\", defaultValue);\n submitForm();\n }}\n disabled={readOnly || !canUpdate}\n >\n {t(\"utils.actions.resetLong\", {\n subject: t(\"models.configs.value_one\"),\n })}\n \n \n )}\n \n )}\n \n \n )}\n
    \n \n );\n};\n\nexport const Config = withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.read,\n PermissionResource.configs,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.configs,\n PermissionDomain.all\n ),\n ],\n _Config\n);\n","import { Alert, Tab, Tabs } from \"@mui/material\";\n\nimport { AdminSubpath, getAdminPath } from \"portal/utils/routing\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { Config } from \"portal/components/config/Config\";\nimport {\n getTemplateSerial,\n RobotClass,\n toLocalizedRobotClass,\n} from \"portal/utils/robots\";\nimport { Link, useNavigate, useParams } from \"react-router-dom\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport {\n useAuthorizationRequired,\n withAuthorizationRequired,\n} from \"portal/components/auth/WithAuthorizationRequired\";\nimport { useSelf } from \"portal/state/store\";\nimport { useTranslation } from \"react-i18next\";\nimport { values } from \"portal/utils/objects\";\nimport { withAuthenticationRequired } from \"@auth0/auth0-react\";\nimport React, { FunctionComponent, useEffect } from \"react\";\n\nconst ADMINS = new Set([\n \"scochrane@carbonrobotics.com\",\n \"brett@carbonrobotics.com \",\n]);\n\nconst _AdminConfigs: FunctionComponent = () => {\n const { user, isInternal } = useSelf();\n const { class: inputClass } = useParams();\n const navigate = useNavigate();\n useEffect(() => {\n if (!inputClass || !values(RobotClass).includes(inputClass as RobotClass)) {\n navigate(`${getAdminPath(AdminSubpath.CONFIG)}/${RobotClass.Slayers}`);\n }\n }, [inputClass, navigate]);\n const selected = inputClass as RobotClass;\n const { t } = useTranslation();\n const isWriteAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.update,\n PermissionResource.configs,\n PermissionDomain.templates\n ),\n ]);\n\n return (\n <>\n {user && !ADMINS.has(user.email) && (\n \n {t(\"views.admin.config.warnings.notSimon\")}\n \n )}\n \n {t(\"views.admin.config.warnings.global\", {\n class: toLocalizedRobotClass(t, isInternal, selected),\n })}\n \n \n {[\n RobotClass.Slayers,\n RobotClass.Reapers,\n RobotClass.Rtcs,\n RobotClass.Simulators,\n RobotClass.Buds,\n ].map((robotClass) =>\n robotClass === RobotClass.Unknown ? undefined : (\n \n )\n )}\n \n {window._jsenv.REACT_APP_USE_ROBOT_SYNCER_TEMPLATES === \"true\" ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport const AdminConfigs = withAuthenticationRequired(\n withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.read,\n PermissionResource.configs,\n PermissionDomain.templates\n ),\n ],\n _AdminConfigs\n )\n);\n","import { Alert, Button } from \"@mui/material\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { capitalize } from \"portal/utils/strings\";\nimport { CarbonCard } from \"portal/components/CarbonCard\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { RED_BUTTON } from \"portal/utils/theme\";\nimport {\n useAuthorizationRequired,\n withAuthorizationRequired,\n} from \"portal/components/auth/WithAuthorizationRequired\";\nimport { useDeleteCachesMutation } from \"portal/state/portalApi\";\nimport { useMutationPopups } from \"portal/utils/hooks/useApiPopups\";\nimport { useSelf } from \"portal/state/store\";\nimport { useTranslation } from \"react-i18next\";\nimport { withAuthenticationRequired } from \"@auth0/auth0-react\";\nimport ClearCachesIcon from \"@mui/icons-material/RestartAlt\";\nimport Grid from \"@mui/system/Unstable_Grid\";\nimport React, { FunctionComponent } from \"react\";\n\nconst ADMINS = new Set([\n \"ansel@carbonrobotics.com\",\n \"benw@carbonrobotics.com\",\n \"wchargin@carbonrobotics.com\",\n]);\n\nconst _AdminPortal: FunctionComponent = () => {\n const { user } = useSelf();\n const { t } = useTranslation();\n\n const [clearCaches] = useMutationPopups(useDeleteCachesMutation(), {\n success: capitalize(t(\"utils.actions.updated\")),\n });\n\n const canUpdate = useAuthorizationRequired([\n buildPermission(\n PermissionAction.update,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n ]);\n\n return (\n <>\n {user && !ADMINS.has(user.email) && (\n \n {t(\"views.admin.portal.warnings.notPortalAdmin\")}\n \n )}\n \n {t(\"views.admin.portal.warnings.global\")}\n \n \n \n {t(\"views.admin.portal.clearCaches.description\")}\n

    \n }\n actions={\n clearCaches()}\n startIcon={}\n disabled={!canUpdate}\n >\n {t(\"views.admin.portal.clearCaches.action\")}\n \n }\n />\n
    \n \n );\n};\n\nexport const AdminPortal = withAuthenticationRequired(\n withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.update,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n ],\n _AdminPortal\n )\n);\n","import { AutocompleteProps } from \"@mui/material\";\nimport { isUndefined } from \"./identity\";\nimport { TFunction } from \"i18next\";\n\nexport const numberOrEmptyString = (\n value: number | string | undefined\n): \"\" | number => {\n if (isUndefined(value)) {\n return \"\";\n }\n if (typeof value === \"string\" && value === \"\") {\n return \"\";\n }\n return Number(value);\n};\n\nexport const getAutocompleteText = (\n t: TFunction\n): Pick<\n AutocompleteProps,\n \"loadingText\" | \"noOptionsText\" | \"getLimitTagsText\"\n> => ({\n loadingText: t(\"components.Loading.placeholder\"),\n noOptionsText: t(\"utils.form.noOptions\"),\n});\n","import {\n BLUE_BUTTON,\n FLAG_DISABLE_SSR_WARNING,\n SMALL_TEXT_FIELD,\n theme,\n WHITE_BUTTON,\n} from \"portal/utils/theme\";\nimport {\n Button,\n InputAdornment,\n Slider,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport { makeStyles } from \"tss-react/mui\";\nimport { numberOrEmptyString } from \"portal/utils/forms\";\nimport { useTranslation } from \"react-i18next\";\nimport Color from \"color\";\nimport CopyIcon from \"@mui/icons-material/ContentCopyOutlined\";\nimport PasteIcon from \"@mui/icons-material/ContentPasteOutlined\";\nimport React, { Fragment, FunctionComponent } from \"react\";\n\ninterface Props {\n copiedSizes: number[] | undefined;\n onChange: (sizes: number[]) => void;\n setCopiedSizes: (sizes: number[] | undefined) => void;\n sizes: number[];\n readOnly?: boolean;\n}\n\nexport const CategoryThresholds: FunctionComponent = ({\n copiedSizes,\n onChange,\n setCopiedSizes,\n sizes,\n readOnly = false,\n}) => {\n const { t } = useTranslation();\n const thumb1Color = new Color(theme.colors.violet[\"500\"]);\n const thumb2Color = new Color(theme.colors.teal[\"500\"]);\n\n // track the state for these two fields locally because we need to allow them\n // to be empty string to allow the user to delete the value but we don't want\n // to propagate that invalid state to the parent\n const [thumb1, setThumb1] = React.useState(sizes[0] ?? \"\");\n const [thumb2, setThumb2] = React.useState(sizes[1] ?? \"\");\n\n const useStyles = makeStyles()({\n root: {\n \"&>*\": {\n // color first thumb and label\n [`&:nth-child(1 of .MuiSlider-thumb), &:nth-child(3 of .MuiSlider-markLabel) ${FLAG_DISABLE_SSR_WARNING}`]:\n {\n color: `${thumb1Color.hex()} !important`,\n },\n [`&:nth-child(1 of .MuiSlider-thumb):hover ${FLAG_DISABLE_SSR_WARNING}`]:\n {\n boxShadow: `0px 0px 0px 8px ${thumb1Color\n .alpha(0.16)\n .rgb()} !important`,\n },\n\n // color second thumb and label\n [`&:nth-child(2 of .MuiSlider-thumb), &:nth-child(5 of .MuiSlider-markLabel) ${FLAG_DISABLE_SSR_WARNING}`]:\n {\n color: `${thumb2Color.hex()} !important`,\n },\n [`&:nth-child(2 of .MuiSlider-thumb):hover ${FLAG_DISABLE_SSR_WARNING}`]:\n {\n boxShadow: `0px 0px 0px 8px ${thumb2Color\n .alpha(0.16)\n .rgb()} !important`,\n },\n\n // move size labels above rail\n [`&:nth-child(2n of .MuiSlider-markLabel) ${FLAG_DISABLE_SSR_WARNING}`]:\n {\n marginTop: -50,\n },\n },\n },\n });\n\n const { classes } = useStyles();\n\n const thumb1DisplayValue = thumb1 || 0;\n const thumb2DisplayValue = thumb2 || 100;\n\n return (\n <>\n {/* Header */}\n
    \n \n {t(\"components.almanac.formulas.thresholds\")}\n \n
    \n {!readOnly && (\n <>\n }\n onClick={() => setCopiedSizes(sizes)}\n disabled={readOnly}\n >\n {t(\"components.almanac.formulas.copySize\")}\n \n {copiedSizes && (\n }\n onClick={() => onChange([...copiedSizes])}\n >\n {t(\"components.almanac.formulas.pasteSize\")}\n \n )}\n \n )}\n
    \n
    \n\n {/* Text entry */}\n
    \n \n {t(\"utils.units.mm\")}\n \n ),\n }}\n onChange={(event) => {\n const value = numberOrEmptyString(event.currentTarget.value);\n setThumb1(value);\n if (typeof value === \"number\" && typeof thumb2 === \"number\") {\n onChange([value, thumb2]);\n }\n }}\n />\n \n {t(\"utils.units.mm\")}\n \n ),\n }}\n onChange={(event) => {\n const value = numberOrEmptyString(event.currentTarget.value);\n setThumb2(value);\n if (typeof value === \"number\" && typeof thumb1 === \"number\") {\n onChange([thumb1, value]);\n }\n }}\n />\n
    \n\n {/* Slider */}\n {\n if (typeof value === \"number\") {\n return;\n }\n const [thumb1Value, thumb2Value] = value;\n if (isUndefined(thumb1Value) || isUndefined(thumb2Value)) {\n return;\n }\n setThumb1(thumb1Value);\n setThumb2(thumb2Value);\n if (\n typeof thumb1Value === \"number\" &&\n typeof thumb2Value === \"number\"\n ) {\n onChange([thumb1Value, thumb2Value]);\n }\n }}\n marks={[\n { value: 0, label: `0${t(\"utils.units.mm\")}` },\n {\n value: (thumb1 || 0) / 2,\n label: t(\"utils.descriptors.small\"),\n },\n {\n value: thumb1DisplayValue,\n label: `${thumb1DisplayValue}${t(\"utils.units.mm\")}`,\n },\n {\n value:\n thumb1DisplayValue +\n (thumb2DisplayValue - thumb1DisplayValue) / 2,\n label: t(\"utils.descriptors.medium\"),\n },\n {\n value: thumb2DisplayValue,\n label: `${thumb2DisplayValue}${t(\"utils.units.mm\")}`,\n },\n {\n value: thumb2DisplayValue + (100 - thumb2DisplayValue) / 2,\n label: t(\"utils.descriptors.large\"),\n },\n { value: 100, label: `100${t(\"utils.units.mm\")}` },\n ]}\n />\n \n );\n};\n","import { BLUE_LOADING_BUTTON, RED_LOADING_BUTTON } from \"portal/utils/theme\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from \"@mui/material\";\nimport { LoadingButton } from \"@mui/lab\";\nimport { useTranslation } from \"react-i18next\";\nimport React, { FunctionComponent, ReactNode, useState } from \"react\";\n\ninterface Props {\n description?: string | ReactNode;\n destructive?: boolean;\n onClose: () => void;\n onYes: () => void;\n noText?: string;\n title?: string | ReactNode;\n yesText?: string;\n yesIcon?: ReactNode;\n yesDisabled?: boolean;\n}\n\nexport const ConfirmationDialog: FunctionComponent = ({\n description,\n destructive = false,\n onClose,\n onYes,\n noText,\n title,\n yesText,\n yesIcon,\n yesDisabled = false,\n}) => {\n const [isLoading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n \n \n {title ?? t(\"components.ConfirmationDialog.title\")}\n \n {description && (\n \n {description}\n \n )}\n \n \n {\n setLoading(true);\n await onYes();\n setLoading(false);\n onClose();\n }}\n startIcon={yesIcon}\n loadingPosition={yesIcon ? \"start\" : \"center\"}\n >\n {yesText ?? t(\"utils.actions.confirm\")}\n \n \n \n );\n};\n","import {\n BLUE_BUTTON,\n SMALL_TEXT_FIELD_DARK,\n WHITE_BUTTON,\n} from \"portal/utils/theme\";\nimport { Button, Card, Grid, TextField, Typography } from \"@mui/material\";\nimport { Formula } from \"protos/almanac/almanac\";\nimport { numberOrEmptyString } from \"portal/utils/forms\";\nimport { TFunction } from \"i18next\";\nimport { useTranslation } from \"react-i18next\";\nimport CopyIcon from \"@mui/icons-material/ContentCopyOutlined\";\nimport PasteIcon from \"@mui/icons-material/ContentPasteOutlined\";\nimport React, { Fragment, FunctionComponent } from \"react\";\n\nconst getFormula = (\n t: TFunction\n): Array<{\n label: string;\n description: string;\n key: keyof Formula;\n min?: number;\n max?: number;\n step?: number;\n}> => [\n {\n label: t(\"components.almanac.formulas.multiplier.label\"),\n key: \"multiplier\",\n description: t(\"components.almanac.formulas.multiplier.description\"),\n step: 0.1,\n },\n {\n label: t(\"components.almanac.formulas.offset.label\"),\n key: \"offset\",\n description: t(\"components.almanac.formulas.offset.description\"),\n step: 100,\n },\n {\n label: t(\"components.almanac.formulas.exponent.label\"),\n key: \"exponent\",\n description: t(\"components.almanac.formulas.exponent.description\"),\n min: 1,\n step: 0.1,\n },\n {\n label: t(\"components.almanac.formulas.maxTime.label\"),\n key: \"maxTime\",\n description: t(\"components.almanac.formulas.maxTime.description\"),\n min: 0,\n step: 100,\n },\n {\n label: t(\"components.almanac.formulas.fineTuneMultiplier.label\"),\n key: \"fineTuneMultiplier\",\n description: t(\n \"components.almanac.formulas.fineTuneMultiplier.description\"\n ),\n min: 1,\n max: 10,\n step: 1,\n },\n {\n label: t(\"components.almanac.formulas.fineTuneMultiplierVal.label\"),\n key: \"fineTuneMultiplierVal\",\n description: t(\n \"components.almanac.formulas.fineTuneMultiplierVal.description\"\n ),\n max: 1,\n step: 0.1,\n },\n];\n\ninterface Props {\n copiedFormula: Formula | undefined;\n formula: Formula;\n onChange: (newFormula: Formula) => void;\n setCopiedFormula: (formula: Formula | undefined) => void;\n title: string;\n readOnly?: boolean;\n}\n\nexport const FormulaCard: FunctionComponent = ({\n copiedFormula,\n formula,\n onChange,\n setCopiedFormula,\n title,\n readOnly = false,\n}) => {\n const { t } = useTranslation();\n return (\n \n {/* Header */}\n
    \n {title}\n
    \n }\n onClick={() => setCopiedFormula(formula)}\n >\n {t(\"components.almanac.formulas.copyFormula\")}\n \n {copiedFormula && (\n }\n onClick={() => {\n onChange({\n ...formula,\n ...(readOnly\n ? {\n fineTuneMultiplier: copiedFormula.fineTuneMultiplier,\n }\n : copiedFormula),\n });\n }}\n >\n {t(\"components.almanac.formulas.pasteFormula\")}\n \n )}\n
    \n
    \n\n {/* Reference */}\n
    \n \n {t(\"components.almanac.formulas.laserTime\")} ={\" \"}\n {/* don't try to localize formula */}\n {/* eslint-disable i18next/no-literal-string */}\n \n F × (A × re + b)\n \n \n F = 1 + ((FI - 5) × FM)\n {/* eslint-enable i18next/no-literal-string */}\n
    \n\n {/* Form */}\n \n {getFormula(t).map(\n ({ label, description, key, min = 0, max = Infinity, step = 1 }) => (\n \n \n {label}\n \n \n \n onChange({\n ...formula,\n [key]: numberOrEmptyString(event.target.value),\n })\n }\n />\n \n \n {description}\n \n \n )\n )}\n \n
    \n );\n};\n","import { AlmanacTypeCategory, Formula } from \"protos/almanac/almanac\";\nimport {\n BG_BACKDROP,\n BLUE_BUTTON,\n classes,\n RED_BUTTON,\n} from \"portal/utils/theme\";\nimport { Button, Checkbox, FormControlLabel, Typography } from \"@mui/material\";\nimport { capitalize } from \"portal/utils/strings\";\nimport { CategoryThresholds } from \"./CategoryThresholds\";\nimport { ConfigCrop } from \"protos/portal/configs\";\nimport { ConfirmationDialog } from \"../ConfirmationDialog\";\nimport { FormulaCard } from \"./FormulaCard\";\nimport {\n getFormulaBySize,\n isCategorySynced,\n SIZE_INDEX,\n} from \"portal/utils/almanac\";\nimport { useTranslation } from \"react-i18next\";\nimport DeleteIcon from \"@mui/icons-material/DeleteOutlined\";\nimport ParentIcon from \"@mui/icons-material/ArrowBackOutlined\";\nimport React, { FunctionComponent, useState } from \"react\";\nimport SaveIcon from \"@mui/icons-material/SaveOutlined\";\n\ninterface Props {\n adminEditing?: boolean;\n category: AlmanacTypeCategory;\n copiedFormula: Formula | undefined;\n copiedSizes: number[] | undefined;\n onChange: (newCategory: AlmanacTypeCategory) => void;\n onClose: () => void;\n onDelete?: () => void;\n setCopiedFormula: (formula: Formula | undefined) => void;\n setCopiedSizes: (sizes: number[] | undefined) => void;\n title: string;\n crops: ConfigCrop[];\n readOnly?: boolean;\n}\n\nexport const AdvancedCategory: FunctionComponent = ({\n category: input,\n copiedFormula,\n copiedSizes,\n onChange,\n onClose,\n onDelete,\n setCopiedFormula,\n setCopiedSizes,\n title,\n crops,\n readOnly = false,\n}) => {\n const { t } = useTranslation();\n const crop = crops.find((crop) => crop.id === input.type?.category);\n // local changes\n const [updatedCategory, setUpdatedCategory] = useState<\n AlmanacTypeCategory | undefined\n >();\n\n // sync state\n const [areSizesSynced, setSizesSynced] = useState(\n isCategorySynced(input)\n );\n\n // confirmation dialogs\n const [confirmDelete, setConfirmDelete] = useState(false);\n const [confirmExit, setConfirmExit] = useState(false);\n\n // visible state\n const category = updatedCategory ?? input;\n\n return (\n \n {/* Header */}\n
    \n {/* Breadcrumb */}\n setConfirmExit(true) : onClose}\n className=\"text-white\"\n startIcon={}\n >\n {t(\"utils.actions.backLong\", {\n subject: capitalize(t(\"models.almanacs.almanac_one\")),\n })}\n \n {confirmExit && (\n setConfirmExit(false)}\n onYes={() => onClose()}\n />\n )}\n\n {/* Title */}\n \n {title}{\" \"}\n {crop && !crop.isEnabled\n ? ` (${t(\"utils.descriptors.disabled\")})`\n : \"\"}\n \n {/* Controls */}\n\n
    \n {onDelete && !readOnly && (\n setConfirmDelete(true)}\n startIcon={}\n >\n {t(\"utils.actions.delete\")}\n \n )}\n {confirmDelete && (\n setConfirmDelete(false)}\n onYes={() => onDelete?.()}\n />\n )}\n {!readOnly && (\n <>\n {\n setUpdatedCategory(undefined);\n onClose();\n }}\n >\n {t(\"utils.actions.cancel\")}\n \n }\n onClick={() => {\n onChange(category);\n setUpdatedCategory(undefined);\n onClose();\n }}\n >\n {t(\"utils.actions.save\")}\n \n \n )}\n
    \n
    \n\n setUpdatedCategory({ ...category, sizes })}\n setCopiedSizes={setCopiedSizes}\n sizes={category.sizes}\n readOnly={readOnly}\n />\n\n {/* Formulas */}\n
    \n \n {t(\"components.almanac.formulas.title\")}\n \n {\n const isSynced = event.currentTarget.checked;\n setSizesSynced(isSynced);\n if (isSynced) {\n const firstTrust = category.formulas[SIZE_INDEX.SMALL];\n if (!firstTrust) {\n return;\n }\n const { formulas } = category;\n for (const cardIndex of Object.values(SIZE_INDEX)) {\n formulas[Number(cardIndex)] = firstTrust;\n }\n\n setUpdatedCategory({ ...category, formulas });\n }\n }}\n />\n }\n label={t(\"components.almanac.formulas.sync\")}\n />\n
    \n {areSizesSynced ? (\n {\n setUpdatedCategory({\n ...category,\n formulas: [newFormula, newFormula, newFormula],\n });\n }}\n setCopiedFormula={setCopiedFormula}\n title={t(\"components.almanac.formulas.all\")}\n />\n ) : (\n [\n {\n sizeIndex: SIZE_INDEX.SMALL,\n title: t(\"utils.descriptors.small\"),\n },\n {\n sizeIndex: SIZE_INDEX.MEDIUM,\n title: t(\"utils.descriptors.medium\"),\n },\n {\n sizeIndex: SIZE_INDEX.LARGE,\n title: t(\"utils.descriptors.large\"),\n },\n ].map(({ sizeIndex, title }) => (\n {\n const { formulas } = category;\n formulas[sizeIndex] = newFormula;\n setUpdatedCategory({ ...category, formulas });\n }}\n setCopiedFormula={setCopiedFormula}\n title={title}\n />\n ))\n )}\n \n );\n};\n","export const LOCALSTORAGE_ALMANAC_FORMULA = \"almanac_formula\";\nexport const LOCALSTORAGE_ALMANAC_MODE = \"almanac_mode\";\nexport const LOCALSTORAGE_ALMANAC_SIZES = \"almanac_sizes\";\nexport const LOCALSTORAGE_DISCRIMINATOR_MODE = \"discriminator_mode\";\nexport const LOCALSTORAGE_DISCRIMINATOR_TRUSTS = \"discriminator_trusts\";\nexport const LOCALSTORAGE_DRAWER_EXPANDED = \"drawer_expanded\";\nexport const LOCALSTORAGE_MAP_BORDERS = \"map_borders\";\nexport const LOCALSTORAGE_MAP_FILTERS = \"map_filters\";\nexport const LOCALSTORAGE_MAP_FULLSCREEN = \"map_fullscreen\";\nexport const LOCALSTORAGE_MAP_LEGEND = \"map_legend\";\nexport const LOCALSTORAGE_MODELINATOR_TRUSTS = \"modelinator_trusts\";\nexport const LOCALSTORAGE_SUPPORT_CHAT = \"chat\";\nexport const LOCALSTORAGE_USERS_ACTIVATED = \"users_activated\";\nexport const LOCALSTORAGE_USERS_CONTRACTORS = \"users_contractors\";\nexport const LOCALSTORAGE_USERS_STAFF = \"users_staff\";\n","import { AdvancedCategory } from \"./AdvancedCategory\";\nimport {\n AlmanacConfig,\n AlmanacTypeCategory,\n CategoryClassification,\n Formula,\n} from \"protos/almanac/almanac\";\nimport {\n Button,\n Card,\n Divider,\n Menu,\n MenuItem,\n Typography,\n} from \"@mui/material\";\nimport { classes, WHITE_BUTTON } from \"portal/utils/theme\";\nimport { ConfigCrop } from \"protos/portal/configs\";\nimport {\n filterCategories,\n getCategoryTitle,\n getDefaultWeedCategory,\n getWeedCategoryName,\n WEED_CATEGORIES,\n} from \"portal/utils/almanac\";\nimport { findWhere, sortBy, without } from \"portal/utils/arrays\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport {\n LOCALSTORAGE_ALMANAC_FORMULA,\n LOCALSTORAGE_ALMANAC_SIZES,\n} from \"portal/utils/localStorage\";\nimport { titleCase } from \"portal/utils/strings\";\nimport { useLocalStorage } from \"@uidotdev/usehooks\";\nimport { useTranslation } from \"react-i18next\";\nimport NewIcon from \"@mui/icons-material/AddOutlined\";\nimport OpenCategoryIcon from \"@mui/icons-material/ChevronRightOutlined\";\nimport React, { FunctionComponent, useState } from \"react\";\n\ninterface Props {\n readOnly?: boolean;\n almanac: AlmanacConfig;\n crops: ConfigCrop[];\n onChange: (newAlmanac: AlmanacConfig) => void;\n}\n\nexport const AdvancedAlmanac: FunctionComponent = ({\n readOnly = false,\n almanac,\n crops,\n onChange,\n}) => {\n const { t } = useTranslation();\n\n // selection state\n const [selectedCategory, setSelectedCategory] = useState<\n AlmanacTypeCategory | undefined\n >();\n\n // menu anchors\n const [weedsAnchor, setWeedsAnchor] = useState<\n HTMLButtonElement | undefined\n >();\n const [cropsAnchor, setCropsAnchor] = useState<\n HTMLButtonElement | undefined\n >();\n\n // clipboard state\n const [copiedFormula, setCopiedFormula] = useLocalStorage<\n Formula | undefined\n >(LOCALSTORAGE_ALMANAC_FORMULA);\n const [copiedSizes, setCopiedSizes] = useLocalStorage(\n LOCALSTORAGE_ALMANAC_SIZES\n );\n\n // mutations\n const addCategory = (newCategory: AlmanacTypeCategory): void => {\n const updated = structuredClone(almanac);\n updated.categories.push(newCategory);\n onChange(updated);\n };\n\n const removeCategory = (oldCategory: AlmanacTypeCategory): void => {\n const updated = structuredClone(almanac);\n updated.categories = without(updated.categories, oldCategory);\n onChange(updated);\n };\n\n const updateCategory = (newCategory: AlmanacTypeCategory): void => {\n const updated = structuredClone(almanac);\n const oldCategory = findWhere(updated.categories, {\n type: { category: newCategory.type?.category },\n });\n updated.categories = [\n ...without(updated.categories, oldCategory).filter(\n (category) => !isUndefined(category)\n ),\n newCategory,\n ];\n onChange(updated);\n };\n\n const { weedCategories, cropCategories, defaultCategory } = filterCategories(\n almanac.categories\n );\n\n if (!defaultCategory) {\n return;\n }\n\n // Show category overlay\n if (selectedCategory) {\n return (\n setSelectedCategory(undefined)}\n onDelete={\n selectedCategory === defaultCategory\n ? undefined\n : () => {\n removeCategory(selectedCategory);\n setSelectedCategory(undefined);\n }\n }\n title={getCategoryTitle(t, selectedCategory, crops)}\n crops={crops}\n copiedFormula={copiedFormula}\n copiedSizes={copiedSizes}\n setCopiedFormula={setCopiedFormula}\n setCopiedSizes={setCopiedSizes}\n />\n );\n }\n\n return (\n
    \n {/* Default Category */}\n setSelectedCategory(defaultCategory)}\n title={getCategoryTitle(t, defaultCategory, crops)}\n />\n \n\n {/* Weed Categories */}\n\n {/* Header */}\n
    \n \n {titleCase(t(\"models.weeds.weed_other\"))}\n \n {!readOnly && (\n <>\n }\n disabled={weedCategories.length === WEED_CATEGORIES.size}\n onClick={(event) => setWeedsAnchor(event.currentTarget)}\n >\n {t(\"components.almanac.weeds.new\")}\n \n setWeedsAnchor(undefined)}\n >\n {[...WEED_CATEGORIES].map((weed) => {\n const category = findWhere(weedCategories, {\n type: { category: weed },\n });\n if (category) {\n return;\n }\n return (\n {\n addCategory(getDefaultWeedCategory(weed));\n setWeedsAnchor(undefined);\n }}\n >\n {getWeedCategoryName(t, weed)}\n \n );\n })}\n \n \n )}\n
    \n {/* List */}\n {weedCategories.length === 0 && (\n
    \n {t(\"components.almanac.weeds.none\")}\n
    \n )}\n {sortBy(weedCategories, (category) => getCategoryTitle(t, category)).map(\n (category) => (\n setSelectedCategory(category)}\n title={getCategoryTitle(t, category)}\n crops={crops}\n />\n )\n )}\n\n {/* Crop Categories */}\n\n {/* Header */}\n
    \n \n {titleCase(t(\"models.crops.crop_other\"))}\n \n {!readOnly && (\n <>\n }\n onClick={(event) => setCropsAnchor(event.currentTarget)}\n >\n {t(\"components.almanac.crops.new\")}\n \n setCropsAnchor(undefined)}\n >\n {sortBy(crops, \"commonName\").map((crop) => {\n const category = findWhere(cropCategories, {\n type: { category: crop.id },\n });\n if (category) {\n return;\n }\n return (\n {\n const newCategory = structuredClone(defaultCategory);\n newCategory.type = {\n category: crop.id,\n classification: CategoryClassification.CATEGORY_CROP,\n };\n addCategory(newCategory);\n setCropsAnchor(undefined);\n }}\n className={classes({\n \"italic text-orange-200\": !crop.isEnabled,\n })}\n >\n {crop.commonName}{\" \"}\n {crop.isEnabled\n ? \"\"\n : `(${t(\"utils.descriptors.disabled\")})`}\n \n );\n })}\n \n \n )}\n
    \n\n {/* List */}\n {cropCategories.length === 0 && (\n
    \n {t(\"components.almanac.crops.none\")}\n
    \n )}\n {sortBy(cropCategories, (category) =>\n getCategoryTitle(t, category, crops)\n ).map((category) => (\n setSelectedCategory(category)}\n title={getCategoryTitle(t, category, crops)}\n crops={crops}\n />\n ))}\n
    \n );\n};\n\ninterface CardProps {\n category: AlmanacTypeCategory;\n title: string;\n onClick: () => void;\n crops?: ConfigCrop[];\n}\n\nexport const AdvancedAlmanacCard: FunctionComponent = ({\n category,\n title,\n onClick,\n crops,\n}) => {\n const { t } = useTranslation();\n const isCrop =\n category.type?.classification === CategoryClassification.CATEGORY_CROP;\n const crop = crops?.find((crop) => crop.id === category.type?.category);\n if (isCrop && crops && !crop) {\n return;\n }\n return (\n onClick()}\n >\n \n {title}{\" \"}\n {crop && !crop.isEnabled ? `(${t(\"utils.descriptors.disabled\")})` : \"\"}\n \n \n \n );\n};\n","import { Button, ButtonProps } from \"@mui/material\";\nimport { classes, WHITE_BUTTON } from \"portal/utils/theme\";\nimport MinusIcon from \"@mui/icons-material/RemoveOutlined\";\nimport PlusIcon from \"@mui/icons-material/AddOutlined\";\nimport React, { FunctionComponent } from \"react\";\n\nconst TUNING_BUTTON: ButtonProps = {\n ...WHITE_BUTTON,\n variant: \"contained\",\n classes: {\n root: \"min-w-0 w-10 p-0\",\n },\n};\n\ninterface Props {\n interval?: number;\n label: string;\n max?: number;\n min?: number;\n onChange: (newValue: number) => void;\n value: number;\n disabled?: boolean;\n}\n\nexport const TuningControl: FunctionComponent = ({\n interval = 1,\n label,\n max = Infinity,\n min = -Infinity,\n onChange,\n value = 5,\n disabled = false,\n}) => {\n return (\n
    \n {label}\n
    \n onChange(Math.max(min, value - interval))}\n >\n \n \n
    \n {value}\n
    \n onChange(Math.min(max, value + interval))}\n >\n \n \n
    \n
    \n );\n};\n","import {\n AlmanacTypeCategory,\n CategoryClassification,\n} from \"protos/almanac/almanac\";\nimport { Card, Typography } from \"@mui/material\";\nimport { classes } from \"portal/utils/theme\";\nimport { ConfigCrop } from \"protos/portal/configs\";\nimport {\n getFineTuneMultipliers,\n withFineTuneMulipliers,\n} from \"portal/utils/almanac\";\nimport { TuningControl } from \"./TuningControl\";\nimport { useTranslation } from \"react-i18next\";\nimport React, { FunctionComponent, ReactNode } from \"react\";\n\ninterface Props {\n category: AlmanacTypeCategory;\n description?: ReactNode;\n onChange: (newCategory: AlmanacTypeCategory) => void;\n title: string;\n crops?: ConfigCrop[];\n readOnly?: boolean;\n}\n\nexport const BasicAlmanacCard: FunctionComponent = ({\n category,\n description,\n onChange,\n title,\n crops,\n}) => {\n const { t } = useTranslation();\n const fineTuneMultipliers = getFineTuneMultipliers(category);\n const isCrop =\n category.type?.classification === CategoryClassification.CATEGORY_CROP;\n const crop = crops?.find((crop) => crop.id === category.type?.category);\n if (isCrop && crops && !crop) {\n return;\n }\n return (\n \n \n {title}{\" \"}\n {crop && !crop.isEnabled ? ` (${t(\"utils.descriptors.disabled\")})` : \"\"}\n \n {description}\n
    \n \n {t(\"components.almanac.fineTuneTitle\")}\n \n \n onChange(\n withFineTuneMulipliers(category, {\n ...fineTuneMultipliers,\n small: value,\n })\n )\n }\n max={10}\n min={1}\n />\n \n onChange(\n withFineTuneMulipliers(category, {\n ...fineTuneMultipliers,\n medium: value,\n })\n )\n }\n max={10}\n min={1}\n />\n \n onChange(\n withFineTuneMulipliers(category, {\n ...fineTuneMultipliers,\n large: value,\n })\n )\n }\n max={10}\n min={1}\n />\n
    \n
    \n );\n};\n","import { AlmanacConfig, AlmanacTypeCategory } from \"protos/almanac/almanac\";\nimport { BasicAlmanacCard } from \"./BasicAlmanacCard\";\nimport { ConfigCrop } from \"protos/portal/configs\";\nimport { Divider, Typography } from \"@mui/material\";\nimport {\n filterCategories,\n getCategoryTitle,\n getWeedCategoryName,\n} from \"portal/utils/almanac\";\nimport { findWhere, sortBy, without } from \"portal/utils/arrays\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport { titleCase } from \"portal/utils/strings\";\nimport { useTranslation } from \"react-i18next\";\nimport React, { FunctionComponent } from \"react\";\n\ninterface Props {\n almanac: AlmanacConfig;\n crops: ConfigCrop[];\n onChange: (newAlmanac: AlmanacConfig) => void;\n}\n\nexport const BasicAlmanac: FunctionComponent = ({\n almanac,\n crops,\n onChange,\n}) => {\n const { weedCategories, cropCategories, defaultCategory } = filterCategories(\n almanac.categories\n );\n\n const { t } = useTranslation();\n\n // mutations\n const updateCategory = (newCategory: AlmanacTypeCategory): void => {\n const updated = structuredClone(almanac);\n const oldCategory = findWhere(updated.categories, {\n type: { category: newCategory.type?.category },\n });\n updated.categories = [\n ...without(updated.categories, oldCategory).filter(\n (category) => !isUndefined(category)\n ),\n newCategory,\n ];\n onChange(updated);\n };\n\n if (!defaultCategory) {\n return;\n }\n\n return (\n
    \n \n {t(\"components.almanac.fineTuneTitle\")}\n {t(\"components.almanac.fineTuneDescription\")}\n
    \n }\n onChange={updateCategory}\n />\n \n \n {titleCase(t(\"models.weeds.weed_other\"))}\n \n {weedCategories.length === 0 && (\n
    \n {t(\"components.almanac.weeds.none\")}\n
    \n )}\n {sortBy(weedCategories, (category) => getCategoryTitle(t, category)).map(\n (category) => (\n \n )\n )}\n \n {titleCase(t(\"models.crops.crop_other\"))}\n \n {cropCategories.length === 0 && (\n
    \n {t(\"components.almanac.crops.none\")}\n
    \n )}\n {sortBy(cropCategories, (category) =>\n getCategoryTitle(t, category, crops)\n ).map((category) => (\n \n ))}\n \n );\n};\n","import { ConfigCrop } from \"protos/portal/configs\";\nimport { ConfigNode } from \"protos/config/api/config_service\";\nimport { Crop, RobotCrop } from \"protos/portal/veselka\";\nimport { findWhere, sortBy } from \"./arrays\";\nimport { getNodeFromPath, getValue } from \"./configs\";\nimport { isBud, isReaper, isSimulator, isSlayer } from \"./robots\";\n\nexport const SLAYER_CROP_IDS_PATH = \"command/commander/crop_ids\";\nexport const BUD_CROP_IDS_PATH = `bud/commander/crop_ids`;\n\nexport enum CropConfidence {\n LOW = \"LOW\",\n MEDIUM = \"MEDIUM\",\n HIGH = \"HIGH\",\n}\n\nexport const cropToConfigCrop = (crop: Crop): ConfigCrop => ({\n id: crop.id,\n carbonName: crop.carbonName,\n commonName: crop.commonName,\n pinned: \"\",\n recommended: \"\",\n isEnabled: true,\n});\n\nexport interface SortedCrops {\n pinnedAndEnabledCrops: number;\n archived: ConfigCrop[];\n enabled: ConfigCrop[];\n disabled: ConfigCrop[];\n all: ConfigCrop[];\n}\n\nexport const getCrops = (\n serial?: string,\n config?: ConfigNode,\n crops?: RobotCrop[]\n): SortedCrops => {\n const result: SortedCrops = {\n pinnedAndEnabledCrops: 0,\n archived: [],\n enabled: [],\n disabled: [],\n all: [],\n };\n if (!serial) {\n return result;\n }\n let cropIdsNode: ConfigNode | undefined;\n if (isSlayer(serial) || isSimulator(serial) || isReaper(serial)) {\n cropIdsNode = getNodeFromPath(config, SLAYER_CROP_IDS_PATH);\n } else if (isBud(serial)) {\n cropIdsNode = getNodeFromPath(config, BUD_CROP_IDS_PATH);\n }\n if (!cropIdsNode) {\n return result;\n }\n for (const cropNode of cropIdsNode.children) {\n const veselkaCrop = findWhere(crops, { crop: { id: cropNode.name } });\n const carbonName =\n veselkaCrop?.crop?.carbonName ??\n getValue(getNodeFromPath(cropNode, \"carbon_name\")) ??\n \"Unknown\";\n const commonName =\n veselkaCrop?.crop?.commonName ??\n getValue(getNodeFromPath(cropNode, \"common_name\")) ??\n \"Unknown\";\n const isEnabled =\n getValue(getNodeFromPath(cropNode, \"enabled\")) ?? false;\n const pinned = getValue(getNodeFromPath(cropNode, \"pinned_model\"));\n const recommended = getValue(\n getNodeFromPath(cropNode, \"recommended_model\")\n );\n if (isEnabled && pinned) {\n result.pinnedAndEnabledCrops++;\n }\n const crop = {\n id: cropNode.name,\n carbonName,\n commonName,\n pinned: pinned ?? \"\",\n recommended: recommended ?? \"\",\n isEnabled,\n };\n if (isEnabled) {\n result.enabled.push(crop);\n } else if (veselkaCrop && !veselkaCrop.crop?.archived) {\n result.disabled.push(crop);\n } else {\n result.archived.push(crop);\n }\n }\n sortBy(result.enabled, \"commonName\");\n sortBy(result.disabled, \"commonName\");\n result.all = [...result.enabled, ...result.disabled];\n return result;\n};\n\nexport const getConfigKey = (serial: string, cropId: string): string =>\n `${isBud(serial) ? BUD_CROP_IDS_PATH : SLAYER_CROP_IDS_PATH}/${cropId}`;\n","import { Field, Form, Formik } from \"formik\";\nimport { IconButton, Typography, TypographyProps } from \"@mui/material\";\nimport { object, string } from \"yup\";\nimport { TEXT_FIELD_DARK } from \"portal/utils/theme\";\nimport { TextField } from \"formik-mui\";\nimport { useTranslation } from \"react-i18next\";\nimport EditIcon from \"@mui/icons-material/ModeEditOutlined\";\nimport React, { FunctionComponent, useState } from \"react\";\nimport SaveIcon from \"@mui/icons-material/CheckOutlined\";\n\ninterface Props extends TypographyProps {\n value: string;\n onEdit: (value: string) => void;\n}\n\nexport const EditableTypography: FunctionComponent = ({\n value,\n onEdit,\n ...props\n}) => {\n const [isEditing, setEditing] = useState(false);\n const { t } = useTranslation();\n return (\n {\n onEdit(values.name);\n setEditing(false);\n }}\n >\n {({ submitForm }) => (\n
    \n {isEditing ? (\n <>\n \n \n \n \n \n ) : (\n <>\n \n {value}\n \n setEditing(true)}\n >\n \n \n \n )}\n \n )}\n \n );\n};\n","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgLogoStack = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"currentColor\",\n viewBox: \"0 0 700 689.19\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M140.67 0v419h419V0Zm359.15 359.15H200.53V59.86h299.29Z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M469.89 269.36H290.32V149.65h119.71v59.85l59.86-59.85V89.79H230.46v239.43h239.43v-59.86zM89.61 590.53H30.05q-15.67 0-23-7.36c-4.91-4.91-7-11-7-21.45v-51.2q0-16.8 7.6-24.4T32 478.51h57.61v22.41H38.4q-9.6 0-9.6 9.6v51.2c0 4.11 1.58 6.51 9.6 6.51h51.21ZM129.29 590.53h-31.2l42.41-112h32l42.4 112h-31.2l-7.2-20h-40Zm14.41-40.81h25.6l-12.8-37.6ZM229.79 478.51H297q16.8 0 24.41 7.61t7.6 24.4v14.4q0 13.29-4.4 20.64t-14 9.76l20 35.21h-31.22L281 556.92h-22.4v33.61h-28.8Zm70.4 32q0-9.6-9.6-9.6h-32v33.6h32q9.6 0 9.6-9.6ZM351.88 478.51h64q15.69 0 23.05 7.13t7.36 21.68q0 9.6-4.16 15.6a22.45 22.45 0 0 1-10.24 8.4q13 3.52 17.6 17.28a37.81 37.81 0 0 1 1.6 11.52q0 15.69-7.36 23t-23 7.36h-68.85Zm65.61 32q0-9.6-9.61-9.6h-27.2v22.4h27.2q9.6 0 9.61-9.6Zm4.8 44.8q0-9.6-9.61-9.6h-32v22.41h32q9.61 0 9.61-9.61ZM573.18 560.12q0 16.82-7.6 24.41t-24.4 7.6h-40q-16.8 0-24.4-7.6t-7.6-24.41v-51.2q0-16.8 7.6-24.4t24.4-7.61h40q16.8 0 24.4 7.61t7.6 24.4Zm-28.8-51.2q0-9.6-9.6-9.6h-27.21q-9.6 0-9.6 9.6v51.2q0 9.61 9.6 9.61h27.21q9.6 0 9.6-9.61ZM693.68 590.53h-30.41l-38.4-67.21v67.21h-28.81v-112h30.41l38.4 67.21v-67.23h28.81ZM0 613.08h45q11.26 0 16.35 5.09t5.09 16.35v9.64q0 8.91-2.95 13.83a14.39 14.39 0 0 1-9.37 6.54l13.4 23.59H46.63L34.3 665.6h-15v22.52H0Zm47.17 21.44q0-6.43-6.43-6.43H19.3v22.51h21.44q6.42 0 6.43-6.44ZM166.16 667.75q0 11.25-5.1 16.35t-16.34 5.09h-26.8q-11.26 0-16.35-5.09t-5.09-16.35v-34.3q0-11.26 5.09-16.35t16.35-5.1h26.8q11.25 0 16.34 5.09t5.1 16.35Zm-19.3-34.3q0-6.44-6.43-6.44H122.2q-6.42 0-6.43 6.44v34.3q0 6.43 6.43 6.43h18.23q6.44 0 6.43-6.43ZM198.32 613.08h42.87q10.51 0 15.44 4.77t4.93 14.52q0 6.43-2.78 10.46a15.05 15.05 0 0 1-6.87 5.62q8.68 2.37 11.8 11.58a25.35 25.35 0 0 1 1.07 7.72q0 10.5-4.93 15.44t-15.44 4.93h-46.09Zm44 21.44q0-6.43-6.44-6.43h-18.27v15h18.22q6.43 0 6.44-6.43Zm3.21 30q0-6.43-6.43-6.43h-21.49v15h21.44q6.44 0 6.43-6.43ZM363.4 667.75q0 11.25-5.09 16.35T342 689.19h-26.8q-11.25 0-16.35-5.09t-5.09-16.35v-34.3q0-11.26 5.09-16.35t16.31-5.1H342q11.25 0 16.35 5.09t5.09 16.35Zm-19.3-34.3q0-6.44-6.43-6.44h-18.22q-6.43 0-6.43 6.44v34.3q0 6.43 6.43 6.43h18.22q6.43 0 6.43-6.43ZM432 688.12h-19.3v-60h-22.5v-15h64.32v15H432ZM518.84 688.12h-38.6v-15h9.65v-45h-9.65v-15h38.6v15h-9.65v45h9.65ZM635.58 673.23l40.07-.05a5 5 0 0 0 5.36-5.36l-.31-8.65h-24.65q-11.25 0-16.35-5.09t-5.09-16.35v-3.21q0-11.26 5.09-16.35t16.35-5.09h37.63v15h-33.34q-6.44 0-6.44 6.43v2.14q0 6.44 6.44 6.43h19.29q10.51 0 15.44 4.93t4.93 15.45v4.34q0 10.51-4.93 15.44t-15.44 4.93c-3.64 0-36.27.64-44.06 0ZM608.29 688.17h-39.9q-10.5 0-15.43-4.93c-3.29-3.29-4.7-7.36-4.7-14.37v-34.3q0-11.25 5.09-16.35t16.35-5.09h38.59v15H574q-6.43 0-6.43 6.43v34.3c0 2.75 1.06 4.36 6.43 4.36h34.3Z\"\n})));\nexport { SvgLogoStack as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MDAgNjg5LjE5IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogIDxwYXRoIGQ9Ik0xNDAuNjcsMFY0MTloNDE5VjBaTTQ5OS44MiwzNTkuMTVIMjAwLjUzVjU5Ljg2SDQ5OS44MloiIC8+CiAgPHBvbHlnb24KICAgIHBvaW50cz0iNDY5Ljg5IDI2OS4zNiAyOTAuMzIgMjY5LjM2IDI5MC4zMiAxNDkuNjUgNDEwLjAzIDE0OS42NSA0MTAuMDMgMjA5LjUgNDY5Ljg5IDE0OS42NSA0NjkuODkgODkuNzkgMjMwLjQ2IDg5Ljc5IDIzMC40NiAzMjkuMjIgNDY5Ljg5IDMyOS4yMiA0NjkuODkgMjY5LjM2IiAvPgogIDxwYXRoCiAgICBkPSJNODkuNjEsNTkwLjUzSDMwLjA1cS0xNS42NywwLTIzLTcuMzZjLTQuOTEtNC45MS03LTExLTctMjEuNDV2LTUxLjJxMC0xNi44LDcuNi0yNC40VDMyLDQ3OC41MUg4OS42MXYyMi40MUgzOC40cS05LjYsMC05LjYsOS42djUxLjJjMCw0LjExLDEuNTgsNi41MSw5LjYsNi41MUg4OS42MVoiIC8+CiAgPHBhdGggZD0iTTEyOS4yOSw1OTAuNTNIOTguMDlsNDIuNDEtMTEyaDMybDQyLjQsMTEySDE4My43bC03LjItMjBoLTQwWm0xNC40MS00MC44MWgyNS42bC0xMi44LTM3LjZaIiAvPgogIDxwYXRoCiAgICBkPSJNMjI5Ljc5LDQ3OC41MUgyOTdxMTYuOCwwLDI0LjQxLDcuNjF0Ny42LDI0LjR2MTQuNHEwLDEzLjI5LTQuNCwyMC42NHQtMTQsOS43NmwyMCwzNS4yMUgyOTkuMzlMMjgxLDU1Ni45MmgtMjIuNHYzMy42MWgtMjguOFptNzAuNCwzMnEwLTkuNi05LjYtOS42aC0zMnYzMy42aDMycTkuNiwwLDkuNi05LjZaIiAvPgogIDxwYXRoCiAgICBkPSJNMzUxLjg4LDQ3OC41MWg2NHExNS42OSwwLDIzLjA1LDcuMTN0Ny4zNiwyMS42OHEwLDkuNi00LjE2LDE1LjZhMjIuNDUsMjIuNDUsMCwwLDEtMTAuMjQsOC40cTEzLDMuNTIsMTcuNiwxNy4yOGEzNy44MSwzNy44MSwwLDAsMSwxLjYsMTEuNTJxMCwxNS42OS03LjM2LDIzdC0yMyw3LjM2SDM1MS44OFptNjUuNjEsMzJxMC05LjYtOS42MS05LjZoLTI3LjJ2MjIuNGgyNy4ycTkuNiwwLDkuNjEtOS42Wm00LjgsNDQuOHEwLTkuNi05LjYxLTkuNmgtMzJ2MjIuNDFoMzJxOS42MSwwLDkuNjEtOS42MVoiIC8+CiAgPHBhdGgKICAgIGQ9Ik01NzMuMTgsNTYwLjEycTAsMTYuODItNy42LDI0LjQxdC0yNC40LDcuNmgtNDBxLTE2LjgsMC0yNC40LTcuNnQtNy42LTI0LjQxdi01MS4ycTAtMTYuOCw3LjYtMjQuNHQyNC40LTcuNjFoNDBxMTYuOCwwLDI0LjQsNy42MXQ3LjYsMjQuNFptLTI4LjgtNTEuMnEwLTkuNi05LjYtOS42SDUwNy41N3EtOS42LDAtOS42LDkuNnY1MS4ycTAsOS42MSw5LjYsOS42MWgyNy4yMXE5LjYsMCw5LjYtOS42MVoiIC8+CiAgPHBhdGggZD0iTTY5My42OCw1OTAuNTNINjYzLjI3bC0zOC40LTY3LjIxdjY3LjIxSDU5Ni4wNnYtMTEyaDMwLjQxbDM4LjQsNjcuMjFWNDc4LjUxaDI4LjgxWiIgLz4KICA8cGF0aAogICAgZD0iTTAsNjEzLjA4SDQ1cTExLjI2LDAsMTYuMzUsNS4wOXQ1LjA5LDE2LjM1djkuNjRxMCw4LjkxLTIuOTUsMTMuODNhMTQuMzksMTQuMzksMCwwLDEtOS4zNyw2LjU0bDEzLjQsMjMuNTlINDYuNjNMMzQuMyw2NjUuNmgtMTV2MjIuNTJIMFptNDcuMTcsMjEuNDRxMC02LjQzLTYuNDMtNi40M0gxOS4zVjY1MC42SDQwLjc0cTYuNDIsMCw2LjQzLTYuNDRaIiAvPgogIDxwYXRoCiAgICBkPSJNMTY2LjE2LDY2Ny43NXEwLDExLjI1LTUuMSwxNi4zNXQtMTYuMzQsNS4wOWgtMjYuOHEtMTEuMjYsMC0xNi4zNS01LjA5dC01LjA5LTE2LjM1di0zNC4zcTAtMTEuMjYsNS4wOS0xNi4zNVQxMTcuOTIsNjEyaDI2LjhxMTEuMjUsMCwxNi4zNCw1LjA5dDUuMSwxNi4zNVptLTE5LjMtMzQuM3EwLTYuNDQtNi40My02LjQ0SDEyMi4ycS02LjQyLDAtNi40Myw2LjQ0djM0LjNxMCw2LjQzLDYuNDMsNi40M2gxOC4yM3E2LjQ0LDAsNi40My02LjQzWiIgLz4KICA8cGF0aAogICAgZD0iTTE5OC4zMiw2MTMuMDhoNDIuODdxMTAuNTEsMCwxNS40NCw0Ljc3dDQuOTMsMTQuNTJxMCw2LjQzLTIuNzgsMTAuNDZhMTUuMDUsMTUuMDUsMCwwLDEtNi44Nyw1LjYycTguNjgsMi4zNywxMS44LDExLjU4YTI1LjM1LDI1LjM1LDAsMCwxLDEuMDcsNy43MnEwLDEwLjUtNC45MywxNS40NHQtMTUuNDQsNC45M0gxOTguMzJabTQ0LDIxLjQ0cTAtNi40My02LjQ0LTYuNDNIMjE3LjYxdjE1aDE4LjIycTYuNDMsMCw2LjQ0LTYuNDNabTMuMjEsMzBxMC02LjQzLTYuNDMtNi40M0gyMTcuNjF2MTVoMjEuNDRxNi40NCwwLDYuNDMtNi40M1oiIC8+CiAgPHBhdGgKICAgIGQ9Ik0zNjMuNCw2NjcuNzVxMCwxMS4yNS01LjA5LDE2LjM1VDM0Miw2ODkuMTloLTI2LjhxLTExLjI1LDAtMTYuMzUtNS4wOXQtNS4wOS0xNi4zNXYtMzQuM3EwLTExLjI2LDUuMDktMTYuMzVUMzE1LjE2LDYxMkgzNDJxMTEuMjUsMCwxNi4zNSw1LjA5dDUuMDksMTYuMzVabS0xOS4zLTM0LjNxMC02LjQ0LTYuNDMtNi40NEgzMTkuNDVxLTYuNDMsMC02LjQzLDYuNDR2MzQuM3EwLDYuNDMsNi40Myw2LjQzaDE4LjIycTYuNDMsMCw2LjQzLTYuNDNaIiAvPgogIDxwYXRoIGQ9Ik00MzIsNjg4LjEyaC0xOS4zdi02MEgzOTAuMnYtMTVoNjQuMzJ2MTVINDMyWiIgLz4KICA8cGF0aCBkPSJNNTE4Ljg0LDY4OC4xMmgtMzguNnYtMTVoOS42NXYtNDVoLTkuNjV2LTE1aDM4LjZ2MTVoLTkuNjV2NDVoOS42NVoiIC8+CiAgPHBhdGgKICAgIGQ9Ik02MzUuNTgsNjczLjIzbDQwLjA3LS4wNWE1LDUsMCwwLDAsNS4zNi01LjM2bC0uMzEtOC42NUg2NTYuMDVxLTExLjI1LDAtMTYuMzUtNS4wOXQtNS4wOS0xNi4zNXYtMy4yMXEwLTExLjI2LDUuMDktMTYuMzV0MTYuMzUtNS4wOWgzNy42M3YxNUg2NjAuMzRxLTYuNDQsMC02LjQ0LDYuNDN2Mi4xNHEwLDYuNDQsNi40NCw2LjQzaDE5LjI5cTEwLjUxLDAsMTUuNDQsNC45M1Q3MDAsNjYzLjQ2djQuMzRxMCwxMC41MS00LjkzLDE1LjQ0dC0xNS40NCw0LjkzYy0zLjY0LDAtMzYuMjcuNjQtNDQuMDYsMFoiIC8+CiAgPHBhdGgKICAgIGQ9Ik02MDguMjksNjg4LjE3aC0zOS45cS0xMC41LDAtMTUuNDMtNC45M2MtMy4yOS0zLjI5LTQuNy03LjM2LTQuNy0xNC4zN3YtMzQuM3EwLTExLjI1LDUuMDktMTYuMzV0MTYuMzUtNS4wOWgzOC41OXYxNUg1NzRxLTYuNDMsMC02LjQzLDYuNDN2MzQuM2MwLDIuNzUsMS4wNiw0LjM2LDYuNDMsNC4zNmgzNC4zWiIgLz4KPC9zdmc+\";","var _style, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _path21, _path22, _path23, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38, _path39;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgBackgroundMap = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n id: \"background_map_svg__Layer_2\",\n \"data-name\": \"Layer 2\",\n viewBox: \"0 0 927.9 927.9\"\n}, props), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"background_map_svg__clippath-1\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h927.9v927.9H0z\",\n style: {\n fill: \"none\"\n }\n})), _style || (_style = /*#__PURE__*/React.createElement(\"style\", null, \".background_map_svg__cls-3,.background_map_svg__cls-4,.background_map_svg__cls-5{fill:#27272a}.background_map_svg__cls-5{fill-rule:evenodd}\"))), /*#__PURE__*/React.createElement(\"g\", {\n id: \"background_map_svg__Layer_1-2\",\n \"data-name\": \"Layer 1\",\n style: {\n clipPath: \"url(#background_map_svg__clippath-1)\",\n fill: \"none\"\n }\n}, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m914.95 912.68.77-1.13.95-.9 2.53-3.13 2.72-2.59 1.09-1.59 1.4-1.13 2.4-2.72 3.31-2.4.68-1.32 1.31-.86-.45-.73-1.59 1.05-.68 1.36-3.17 2.27-2.31 2.63-1.68 1.4-1 1.5-2.63 2.49-2.54 3.09-1.09 1.04-.68 1.08-2.81 3.35c-1.04 1.4-2.13 2.81-3.26 4.26v-.05l-.13.27-3.44 4.12-2.63 3.58.72.5 2.59-3.54 3.63-4.39s0-.04.04-.04l3.22-4.22 2.72-3.26ZM927.95 908.51l4.13-3.81-.41-.77-.32.22-3.94 3.67-3.67 3.99-.27.32-3.17 4.21c-.95 1.18-1.95 2.36-2.9 3.49l-.5.77-.86.9-2.67 3.4-2.36 2.67.68.59v.59-.59l2.31-2.67 2.68-3.4.81-.86.54-.82 2.95-3.53 3.53-4.63 3.44-3.76ZM929.03 917.29l-2.08 2.59-1.13 2.13-2.04 2.36-1.27 1.85-1.27 1.36.64.59 1.26-1.31 1.32-1.91 2.08-2.44 1.09-2.04 2.04-2.63 2.58-3.89-.73-.5-2.49 3.84zM923.69 827.54l2.72 7.44.18.22 5.03 3.72.54-.68-4.98-3.67-2.68-7.48v-.27l-.04-7.43.04-.23.77-6.84-.05-.63 1-7.89.46-5.52.41-2.13.17-5.17.87-2.53v-.19l-.36-4.39 1.9-3.09v-.17l.04-.14-.36-2.63 2.63-.49-.19-.87-3.03.59v.36l-.36.14.45 2.9-1.9 3.03v.19l-.05.09.36 4.48-.9 2.72-.09 4.94-.45 2.17-.45 5.63v.17l-.05.05-.95 7.56.04.64-.81 7.16.04 7.79-.04.09.09.36zM907.87 37.51c4.85-.5 11.96-4.53 21.16-11.91v-1.09c-9.33 7.52-16.49 11.64-21.25 12.15-.23.04-.41.04-.63.04-2.4 0-4.03-1.59-4.98-2.9-2.68-3.76-3.76-11.05-.68-17.71 2.49-5.39 7.2-11.74 14.05-18.9h-1.22l-.36.41c-6.39 6.79-10.83 12.91-13.27 18.12-3.22 6.97-2.04 14.63.81 18.57 1.63 2.31 3.94 3.49 6.39 3.22Z\",\n className: \"background_map_svg__cls-3\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M933.93 844.72s-.4-.05-1.08-.18c-.64-.13-1.5-.36-2.36-.49-1.72-.32-3.49-.5-3.49-.5l-.27 2.31s1.67.18 3.35.49c.86.14 1.68.32 2.31.45.63.14 1.04.18 1.04.18l.5-2.27ZM924.01 843.22s-.41-.05-1.09-.05-1.54-.04-2.45-.04l-3.49.18.09 2.32s1.73-.09 3.45-.19c.81.05 1.68.05 2.31.05.63.05 1.04.09 1.04.09l.14-2.36ZM914.04 843.45s-.86.05-1.72.09c-.86.09-1.77.18-1.77.18l.23 2.31 1.72-.18c.86-.05 1.72-.09 1.72-.09l-.18-2.31ZM907.65 844.04l-3.44.36c-1.72.32-3.45.59-3.45.59l.37 2.31s1.67-.31 3.4-.59c1.72-.18 3.4-.36 3.4-.36l-.28-2.31ZM893.51 561.72l-1.08.96-.78-.91 1.09-.95.77.9zM176.83 779.53l.677-1.134 1.356.81-.676 1.133zM160.75 814.05l-5.25-3.14 2.58-4.39 5.25 3.17-2.58 4.36zM189.38 820.3l-4.57-2.73 2.27-3.75 4.57 2.72-2.27 3.76zM157.696 786.691l4.211-7.07 8.523 5.076-4.212 7.07zM140.64 830.58l-12.38-7.38 6.12-10.24 12.37 7.34-6.11 10.28zM135.7 851.97l-6.35-3.77 3.13-5.29 6.34 3.8-3.12 5.26z\",\n className: \"background_map_svg__cls-4\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M746.54 186.31h-9.29v-9.29c0-.54-.55-.95-1.18-.95-.68 0-1.18.41-1.18.95v9.29h-9.29c-.54 0-.95.54-.95 1.17s.4 1.18.95 1.18h9.29v9.29c0 .5.49.95 1.18.95.63 0 1.18-.45 1.18-.95v-9.29h9.29c.49 0 .91-.54.91-1.18s-.41-1.17-.91-1.17Z\",\n className: \"background_map_svg__cls-5\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m775.53 918.43-3.68-1.72-2.62-.86-12.5-3.71-2.4-.59-4.49-1.86-4.12-2.13-8.16-6.61-.54-.68-5.03-7.93-3.71-10.06-3.13-7.38-5.71-8.47-.36-.4-8.52-5.8-4.71-3.03-4.04-2.04-6.84-4.71-1.9-1.18-1-.86-7.74-6.25-2.45-2.4-6.34-5.53-3.49-3.26-5.3-4.76-4.66-3.98-4.12-3.62-6.3-5.17-9.92-7.42-10.06-7.66-2.86-2.36-5.93-5.39-3.9-3.4-4.89-3.85-7.57-4.94-2.49-1.22-7.57-3.08-6.39-2.08-2.45-.73-9.1-1.99-10.61-1.77-10.01-1.22-5.35-.5-4.71-.91-4.17-.73-8.83-3.57-8.65-3.99-7.21-3.08-3.85-1.45-6.34-2.36-4.21-1.81-4.58-1.72-8.74-3.94-2.27-1.18-6.48-2.99-6.98-3.49-1.86-.86-8.79-3.31-8.79-2.27-8.83-.95-6.61.81-2.4.22-4.53 1.77-4.21 1.4-2.08 1.09-4.53 2.04-1.32.81-.9.41-4.76 2.67-3.99 1.49-2.13 1.18-6.7 2.49-5.39 2.94-3.31 1.18-2.81 1.45-7.84 2.9-4.71 2.08-2.18.72-4.25 1.63-4.49 1.45-8.93 2.58-1.13.23-7.38 2.04-5.8.95-7.43 1.4-4.35 1-8.83 2.95-.86.49-4.85 2.99-3.21 1.54-2.13 1.91-3.71 2.31-1.63 1.36-1.18.63-3.63 3.27-5.8 3.49-4.31 3.76-3.85 2.27-1.4 1.27-2.22 1.49-2.62 2.41-2.54 1.67-2.27 2.36-3.17 2.36-1.59 1.68-1.77 1.36-2.72 2.9-3.53 2.81-1.18 1.27-1.36 1.13-3.08 3.13-4.39 3.22-.59.59-.68.5-3.89 3.66-4.85 3.22-1 .77-3.94 3.8-3.85 2.9-1.05.95c-.49.36-.95.68-1.36 1l-.18.14-2.77 3.44-3.48 3.44-.86 1-.91.91-2.72 4.35-3.27 4.49-3.49 6.34-1.45 2.44-1.5 3.44-2.58 5.34-.86 2.13-2.13 4.35-1.45 2.22-1.72 3.31-3.4 4.71-.5.63-3.85 4.3-4.85 4.31-.19.13-4.16 3.9-4.8 3.89-1.36.96-3.4 3.03-4.98 3.67-3.89 1.99-1.72 1.13-1.19.55-4.3 2.68-4.58 1.9-1.49 1.08-2.99 1.41.45.91 3.22-1.59 1.45-1.05 4.26-1.72 4.35-2.72 1.18-.55 1.76-1.13 3.9-1.99 2.04-1.46 3.08-2.31 3.35-3.03 1.4-.96 4.85-3.94 4.63-4.26 4.62-4.08 4.49-5.08 3.4-4.71 1.72-3.35 1.49-2.22 2.18-4.48.91-2.09 2.58-5.39 1.41-3.35 1.45-2.45 3.44-6.26 3.27-4.53 2.76-4.35.77-.77.86-1 3.44-3.44 2.9-3.49 1.31-1 1.04-.95 3.85-2.9 3.85-3.76 5.89-3.99 3.94-3.67.68-.5.54-.59 4.44-3.22 3.13-3.22 1.36-1.08 1.13-1.27 3.58-2.76 2.68-2.9 1.77-1.4 1.59-1.68 3.17-2.36 2.35-2.44 2.41-1.49 2.63-2.45 2.21-1.45 1.5-1.4 3.71-2.13 4.31-3.76.54-.36 5.35-3.22 3.63-3.26 1.22-.63 1.54-1.27 3.67-2.31 2.36-2.08 2.9-1.32 5.61-3.44 8.74-3 4.35-.99 7.38-1.41 5.8-.95 1.64-.41 16.04-4.44 4.44-1.45 6.39-2.36 4.71-2.13 1.45-.5 6.39-2.35 2.85-1.45 3.3-1.18 5.57-3.04v.05l.19-.09 6.3-2.36 2.18-1.17 3.94-1.5 4.9-2.72.86-.37 1.32-.81 4.57-2.08 1.91-1 4.3-1.5 4.57-1.77 2.09-.14 6.48-.81 1.63.23 6.94.63 8.74 2.27 8.79 3.31 1.81.81 6.94 3.49 6.48 2.99 2.31 1.18 8.79 4 4.53 1.67 4.26 1.86 10.19 3.81 7.3 3.13 8.93 4.08 8.65 3.49 4.21.72 4.66.91 5.53.54 10.01 1.22 11.01 1.86 8.47 1.86 2.4.72 6.25 2 7.61 3.08 2.31 1.13 7.52 4.94 4.85 3.81 3.94 3.36 5.89 5.39 2.85 2.4 8.79 6.75 11.24 8.38 6.29 5.12 4.08 3.63 4.67 3.98 8.79 7.98 6.3 5.53 2.44 2.4c2.68 2.17 5.3 4.25 7.89 6.39l.91.77 2.04 1.27 6.79 4.71 4.03 2.04 4.71 3.04 8.52 5.84 5.8 8.47 3.04 7.25.91 2.31c.96 2.63 1.91 5.26 2.85 7.88l5.08 7.97.68.91 8.2 6.62 4.3 2.27 4.58 1.9 2.49.59 12.69 3.8c.81.28 1.59.51 2.27.73l3.67 1.72 5.04 2.72 8.06 6.02.59-.81-8.02-5.93-5.16-2.86ZM932.34 304.15l-.86-.05-.14 3.17v.23l-.68 7.65-.59 6.26-.36 1.45-.59 5.53-1.09 2.31-.36 3.81-2.9 3.94-.08.81-.96 1.04-1.68 3.94-2.35 1.81-1.14 2.4-2.58 1.41-1.41 2.31-3.03 1.59-1.27 1.86-1.99.76-2.4 2.49-5.3 1.81-.45.28-1.36.45-3.54 2.44-2.4.5-3.03 1.77-4.58 1-1.45.68-5.25 1.36-.72.5-.41.14-4.08 2.99-3.76 2.22-1.09.86-1.27 1.27-1.32 4.3-.95 3.44-.82 7.84-.05 2.49-.36 7.38-.59 5.8-.09 1.18-1.49 6.34-2.04 5.67-1.68 1.95-1.4 2.67-2.45 2.13-1.45 1.58-2.17 1.36-1.63 2.4-2.54 2.53-1.22 1.55-1.18 1.27-.13.22-.72 4.58-.64 3.13.09.14-.05.18 3.77 7.34.54.59 7.43 3.49 5.3 1.9 6.16 2.41 3.99 1.22 2.58 1.23 5.17 2.17 4.67 2.99 2.99 2.76 3.85 5.03 1.18 4.8.81 2.76.36 7.57-.13 7.66-1 5.07-.77 2.72-1.45 2.81-2.81 3.36-.54.77-.59.63-2.9 3.58-3.67 3.53-.63.81-1.9 5.35-.59 2.44-.05 4.85.32 3.08.99 6.07 1.73 6.48 1.18 3.04.87 2.04 2.67 5.76 3.13 3.89 3.9 3.99 3.95 3.04 5.44 4.66 2.26 2.58 4.85 5.26 2.9 5.12 2.09 2.53 5.8 8.02.36.23 7.48 3.08 4.76 1.32.13-.05h.18l3.04-1.27-.32-.81-2.94 1.27-4.49-1.27-7.7-3.17-5.57-7.84-2.04-2.41-2.95-5.3-4.89-5.3-2.27-2.54-5.57-4.8-3.81-2.95-3.85-3.89-3.08-3.85-3.49-7.61-1.13-2.95c-.41-1.62-.86-3.21-1.27-4.76l-.41-1.67-1.04-6.03-.32-2.94.09-4.81.5-2.22 1.9-5.34 4.04-3.98 3.58-4.26.59-.82 2.89-3.49 1.5-2.94.76-2.76 1-5.12.22-7.8-.4-7.93-.86-2.67-1.27-5.21-3.85-4.94-3.08-2.85-4.76-3.13-5.35-2.22-2.49-1.22-4.08-1.27-6.03-2.31-5.39-1.95-7.43-3.49-3.85-7.43.59-2.99.73-4.49 1.04-1.18 1.22-1.49 2.54-2.49 1.81-2.54 2.08-1.36 1.32-1.45 2.76-2.4 1.32-2.63 1.77-2.13 2.08-5.93 1.45-6.12v-.13l.72-6.93.32-7.48.04-2.41.82-7.65.91-3.53 1.27-4.17 1.99-1.72 3.71-2.22 4.17-2.99.36-.14.86-.54 5.03-1.27 1.46-.68 4.76-1.04 3.04-1.77 2.49-.54 3.49-2.45 1.36-.45.45-.27 5.3-1.86 2.54-2.53 1.76-.64.09-.13.09-.05 1.27-1.86 3.08-1.63 1.41-2.27 2.44-1.32.05-.09.14-.09 1.13-2.45 2.36-1.81 1.81-4.03.81-.91.04-.14.09-.08.09-.86 2.85-3.95.46-3.98 1.09-2.27.49-5.3.41-1.49.72-7.06.54-7.12v-.13l.14-3.22ZM659.81 13.18l7.71 7.34 2.58 2.86 4.76 5.16 5.43 7.75 2.73 6.43.67 1.23.55 1.27 3.35 6.52 3.31 4.94 3.4 2.94 4.39 2.45 4.67 2.27 3.08 1.26 3.53 1.87 4.31 1.98 6.02 5.63 1.54 1.72 4.12 6.02 2.04 6.07.77 1.63.77 4.44.86 3.13.19 1.04 1.54 9.34.68 5.29 2.85 6.04.55 1.67.13.09.04.13 1.09.82.23.09.86.09 6.85 1.81 3.11.32 4.67.72 4.62.82 3.04.37 7.89 2.35 1.04.41 6.66 2.58 7.02 5.08.5.45 5.43 7.29 2.68 7.93 1.72 7.34 1.32 7.8 1.58 4.98.59 2.94 2.26 3.18h.23l.23.17 2.4-.68 5.12 1.32.13-.04.14.04 2.81-1.04 4.84-.18 1.95-.55 7.17-.63 6.34-.18 1.31.09 6.39.18 1.86.32 5.98.59 3.44 1.13 4.31.82 5.71 3.34 1.9 1 7.29 6.71 8.11 7.88 7.16 7.48 5.26 7.84 2.85 7.74.18.77 2.27 6.89.18 2.36.99 5.25 1.14 7.79 1.54 6.17.4 1.76 1.41 2.32 7.88 5.03 2.09.58 5.75 1.23 2.72 1.63 4.94 2.08 2.54 2.77 1.31 3.85 2.31 3.85 1.14 7.57.22 3.81v-.6l.86-.04-.27-3.58-1.22-7.71-2.27-3.66-1.45-4.13-2.81-2.99-4.8-1.95-3.08-1.81-5.62-1.13-2.08-.64-1.72-1.13-5.85-3.71-1.23-2.13-.31-1.41-1.54-6.12-1.13-7.88-.96-5.11-.23-2.5-2.26-6.89-.27-1.04-.18-.36-2.67-7.34-5.3-7.84-7.39-7.84-8.02-7.74-7.38-6.8-1.95-1-6.03-3.53-4.12-.77-3.58-1.13-5.98-.55-1.86-.32-7.79-.31-6.43.13-1.41.14-5.76.55-2.12.54-5.03.22-2.63 1-5.12-1.31-.13.04-.1-.04-2.22.63-1.99-2.99-.5-2.54-1.59-4.93-1.31-7.84-1.81-7.84-2.72-7.84-5.43-7.2-.6-.59-7.25-5.26-7.83-3.08-.59-.09-7.25-2.22-3.17-.41-4.63-.81-4.7-.73-3-.27-6.93-1.86-.81-.09-.91-.68-.5-1.49-2.95-6.21-.58-4.98L731.26 98l-.86-3.13-.81-4.75-.72-1.45-2.18-6.34-4.12-5.99-1.59-1.81-6.34-5.89-4.26-1.95-3.49-1.86-3.13-1.27-4.62-2.26-4.35-2.4-3.35-2.9-3.03-4.62-3.36-6.48-.59-1.27-.63-1.18-2.76-6.56-5.49-7.89-4.8-5.16-2.62-2.9-7.89-7.52-7.66-7.85-6.3-7.56-.68.54 6.53 7.75 7.65 7.88z\",\n className: \"background_map_svg__cls-3\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m851.74 918.48-2.49-1.58-7.11-4.22-3.58-2.81-5.12-5.85-2.27-2.86-2.76-5.07-2.13-3.67-1.59-3.49-3.04-5.3-5.76-10.33-5.66-7.25-3.22-2.68-7.61-6.16-1.13-.68-3.35-2.63-5.34-3.98-8.79-9.02-1-1.18-7.84-7.2-2.45-1.63-6.44-2.86-3.9-1.08-4.93-1.49-7.52-2.09c-.4-.13-.81-.22-1.22-.36l-8.7-2.58-3-1.27-5.75-2-8.7-4.44-2.45-1.72-6.3-4.22-2.54-2.09-6.21-5.8-2.76-2.9-7.15-8.75-7.57-10.47-6.07-7.11-2.85-2.76-7.84-6.03-2.08-1.18-7.62-4.17-5.98-3.48-2.77-1.41-3.85-2.4-4.93-2.81-3.31-2.13-14.54-9.01-8.47-4.98-5.61-3.49-11.97-8.42-8.65-6.62-3.49-2.44-11.06-8.75-2.99-2.58-7.48-6.17-1.32-1-2.85-1.86-5.93-3.71-3.4-2.22-5.3-3.22-6.57-5.48-2.22-2.09-7.29-6.65-1.59-1.59-8.93-5.21-8.88-1.77-7.88.41-.81-.05h-.13l-6.53 1.41-2.17.18-4.98 1.49-7.2 1.59-5.34 1-2.4-.09-6.21-.14-3.17-.49-5.62-.82-17.57-2.77-8.79-1.18-8.25-.36-.59.04-7.2 1.04-1.63.32-5.49 1.36-3.31 1-3.53.95-6.57 2.22-6.3 2.49-5.98 2.81-3.9 2.13-2.03.63-6.71 2.54-8.47-.36h-.27l-8.61-2.08-8.83-1.32-3.03.18h-5.94l-2.27.68-6.43 1.17-.82.28-7.2 1.59-.73.08-6.88 1.05-1.86.09-5.44 1.5-3.53.95-2.85 1.63-5.12 3.72-.91.73-3.45 3.81-3.76 5.12-3.3 5.49-2.95 5.84-4.17 9.29-3.95 8.88-2.89 5.8-3.22 5.44-3.76 4.98-3.62 4.03-1.09 1.04-4.03 3.58-3.58 2.94-26.32 19.4-5.62 3.9c-1.04.68-2.08 1.36-3.12 2.08l-1.86 1.23-6.89 4.21-3.99 2.41-7.52 3.98-3.94 2.04-2.17 1-3.67 1.95-4.98 2.4-2.4 1.4-6.39 3.72-3.04 2.09c-1.4.99-2.85 1.99-4.3 2.95l-1.49 1.08-4.08 3.67-4.71 4.03-4.08 4.76-3.8 4.08c-.14.14-.28.32-.37.46l-.54.54-3.13 4.71-2.22 3.08-1.36 2.08-2.12 2.81-1.27 2.58-.77 1.31-2.18 4.49-2.58 4.26-.59 1.27-1.4 2.13-1.54 3.76-.91 1.63-1.9 4.35-2.59 4.39-.54 1.22-1.32 2.36-1.44 3.67-.77 1.54-1.49 5.08-1.36 3.72-.73 3.03-1.59 5.75-1.4 5.98-.59 2.95-1.45 6.53-2 6.61-1.99 4.12-.68 1.86-1.99 3.12-1.22 2.36-1.04 1.32.77.63 1-1.27 1.31-2.45 1.95-3.13.82-2 1.95-4.12 2.08-6.75 2.04-9.52 1.41-5.98 1.59-5.76.68-2.9 1.36-3.8 1.45-4.9.77-1.54 1.45-3.62 1.32-2.36.5-1.22 2.58-4.39 1.91-4.39.91-1.64 1.54-3.67 1.36-2.13.68-1.32 2.54-4.25 2.22-4.53.95-1.72c.36-.73.68-1.41.99-1.99l2.13-2.9 1.36-2.08 2.22-3.08 2.99-4.53.55-.59 4.21-4.58 3.99-4.62 4.76-4.12 3.99-3.58.63-.45 8.11-5.62 2.4-1.36 6.34-3.71 4.98-2.45 3.76-1.99 2.04-.95 5.85-2.95 5.7-3.08 7.98-4.76 4.85-3.12 3.35-2.27 5.44-3.71 26.28-19.39 3.62-2.95 5.22-4.76 3.66-4.04 3.76-5.03 1.4-2.27 2-3.49 2.86-5.66 8.11-18.17 2.9-5.8 3.26-5.39 3.67-4.99 3.4-3.76.81-.72 5.07-3.63 2.85-1.68 3.27-.81 5.39-1.45 1.68-.13 7.7-1.09 7.25-1.59.76-.27 6.49-1.22 2.44-.68h5.57l3-.13 8.65 1.27 8.97 2.13h.14l8.56.36 1.86-.68h.04l5.03-1.9 2-.63 4.04-2.17 5.93-2.77c1.04-.4 2.04-.81 2.99-1.22l3.45-1.36 1.13-.31 5.21-1.81 3.54-.91 3.26-1 5.48-1.41 1.59-.31 7.61-1.05 8.2.36 8.74 1.14 8.74 1.36 8.79 1.4 5.62.81 3.12.5 8.84.27 5.53-1.04 7.2-1.54 4.98-1.49 2.04-.18 6.62-1.4.72.04 7.98-.41.41.09 8.34 1.68 8.61 5.07 1.36 1.41 9.47 8.74 6.62 5.53 5.44 3.31 3.39 2.22 5.93 3.72 2.77 1.81 1.31.95 7.43 6.16 3.08 2.62 11.01 8.75 3.49 2.45 8.2 6.3 12.51 8.83 5.66 3.44 8.61 5.12 17.67 11.01 4.93 2.81 3.85 2.4 2.81 1.45 5.98 3.49 9.56 5.21 8.02 6.21 2.54 2.49 5.98 7.02 1.22 1.72 6.39 8.74 7.2 8.79 2.81 2.99 6.25 5.8 2.54 2.13 6.39 4.26 2.44 1.72 1.31.73 7.53 3.81 5.8 2.04 2.98 1.27 8.79 2.62 8.79 2.41 4.9 1.54 3.76 1 6.3 2.81 2.36 1.49 7.75 7.16 1.04 1.18 8.79 9.06 5.49 4.08 3.31 2.58 1.09.68 10.83 8.79 5.44 6.98 1.9 3.49 3.89 6.88 3 5.21 1.54 3.49 2.22 3.76 2.76 5.07 2.32 2.99 5.16 5.85 3.71 2.95 7.16 4.3 1.73 1.09.86.5 7.79 4.12 7.21 4.62.54-.81-7.2-4.62-7.84-4.12ZM621.3 5.21l.54 1 4.04 6.8 2.8 3.67 3.68 4.17 4.17 3.62 5.21 4.17 2.58 1.58 4.72 3.17 2.98 1.81 1.45 1.14 6.25 5.89 1.5 1.86 1.27 2.68 2.85 4.89 2.13 5.66 1.54 3.72 2.86 6.21 3.4 5.25 2.63 2.63 5.25 3.22 6.07 2.86 3.89 1.76 5.48 2.86 6.34 4.89 1.36 1.99 2.99 5.62.54 3.39 1.13 4.26v4.58l.18 2.9-.54 4.39-.5 3.36-.68 3.03-1.95 4.8-.18 1.13-.99 1.86-.96 3.67-.45 1.13-.49 5.93-.73 1.68.05.14-.05.14 1.05 6.12-.54 1.36.13.23-.09.22 2.13 2.72.32-.22.36.27 1.18-1.32 6.3-.54.09-.09.13-.05.45-.31.86-.41 3.4-2.85 3.03-.41 2.72-1.76 4.9-1.27.91-.36 4.44-1 1.86-.59.5-.04 6.12-.95 1.54-.09 7.84.59 4.03 1.08 3.63 1.09 3.62 2.63 4.03 2.49 1.31 1.45 1.09 2.45 3.04 5.25 1.49 6.93.22.73.55 7.66v.09l-.14 1.49-.45 5.8-1.4 5.98-.77 1.9-1.22 3.98-2.4 3.85-.27 1.09-1.22 1.45-1.59 3.58-1.18 1.54-1.54 3.53-3.35 3.49-.45.63-2.49 5.03-2.4 2.86-.77 1.77-1.67 1.81-1.45 2.54-1.27 1.54-1.68 3.54-3.4 4.57-2.54 4.89-1.63 2.54-1.04 2.44-2.58 3.99-.73 1.31-2.09 4.89-1.72 2.86-.82 2.62-2.45 4.4-.36.91-.86 6.61-.36 1.09.05.14-.05.18 1.59 3.26 3.58 4.66 4.4 2.36 7.79 3.17 5.89 2.27 2.86.95 6.84 1.59 2.99.4h.09l5.03-.63 1.59-1.09 2.9-5.08.45-4.17.59-2.49-.13-5.3.28-2.36-.09-5.44.13-2.27.13-5.53.13-1.95.6-7.07 1.22-6.61.14-.36.91-6.21.31-.95 1.09-5.58 1.22-2.22.77-3.35 3.48-3.72.32-.59 2.31-4.98 3.63-2.81.36-.9 1.08-.63 2.41-3.85 3.31-2.31.72-1.18 1.27-.68 2.81-3.08 5.62-2.68 4.35-2.67 2.58-.73 3.08-1.14 4.58-.86 2.04-.23 5.66-.41 1.77.09 5.89.18 2.59.59 5.3.77 5.57 2.36 2.13.68 1.81 1.36 5.71 3.9 3.72 3.76 6.61 7.7 5.12 8.02 3.48 7.48.6 3.94.95 3.58.36 5.48.27 2.31.14 5.76-.05 1.99.32 5.94-.18 1.76v.13l1.32 7.12-.09.5.05.14v.14l.77 1.36 4.12 2.9 3.76 2.95 1.95.76 5.75 1.54 2.72 1.13c1.72.49 3.36 1 4.98 1.49l.13.05 5.21 3.48 2.36 2.63 2.54 4.98.36 2.81 1.18 4.76-.09 4.03.19 3.58-.49 3.8-.6 3.94-.59 2.45-2.13 5.75-.4.59-2.09 4.39-1.5 2.18-1.54 2.72-.18.18-2.4 2.4-1 1.32-1.18 1.09-2.59 3.08-2.95 1.86-1.54 1.27-2.95 1.59-1.9 1.36-1.27.46-3.72 2-4.03 1.36-1.77.68-6.07 1.9-5.66 1.86-1.95.5-4.53.76-3.17.77-3.4.36-4.39 1.36-1.95.27-5.16 2.76-4.12 3.85-1.72 3.08-.86 2.18-1.86 5.75-.27 1.22-.96 5.39-.31 1.04-1.05 5.53-.91 2.17-1.08 3.58-3.04 4.53-.27.23-3.62 3.48-4.9 2.63-2.27.81-8.61 3.85-4.89 2.94-1 1.08-2.4 3.54-1.63 4.34-.41 1.55-.81 7.02-.18 7.11v.54l.63 8.38 1.05 6.62.32 2.53.86 5.21.86 7.79 2.36 7.93 1.27 1.9 4.94 5.89 8.42 7.74 2.17 2.4 5.12 5.39 2.62 4.31 2.31 3.44.81 3.04 2.22 4.49 2.13 7.61.23.54 3.35 7.43 1.86 5.26 1.23 2.49 1.36 3.67 1.81 4.03.76 2.63 1.81 5.08.86 5.39.41 2.45 1.72 7.75.36.86 4.35 7.03 3.54 3.49 5.03 4.39 2.72 2.04 6.21 5.62 1.49 1.77 4.3 5.89 3.8 7.84.95 1.27 4.94 6.53 1.63 1.49 7.02 6.3.73.5 1.73 1.22 6.07 3.89 2.95 2.17 4.85 2.85 7.06 4.94.64.32 1.68 1.27 6.16 3.99.45-.72-6.07-3.94-1.63-1.22-.72-.41-7.07-4.9-4.8-2.86-2.94-2.22-6.07-3.85-1.72-1.22-.63-.41-8.56-7.7-5.8-7.7-3.81-7.75-4.4-6.07-1.54-1.81-6.3-5.71-2.72-2.04-4.98-4.35-3.49-3.44-4.21-6.79-.36-.82-.05-.32-1.63-7.3-1.27-7.79-1.86-5.17-.73-2.62-1.86-4.12-1.32-3.68-1.22-2.49-1.9-5.25-3.49-7.89-2.17-7.61-2.22-4.49-.95-3.39-2.31-3.35-2.67-4.4-7.29-7.8-8.42-7.7-4.9-5.84-1.27-1.95-2.22-7.48-.86-7.79-.86-5.3-.32-2.49-1.04-6.57-.64-8.84.18-7.07.77-6.84.41-1.45 1.63-4.35 2.22-3.26 1-1.04 4.58-2.81 8.56-3.81 2.31-.86 5.26-2.81 3.44-3.4.55-.5 3.12-4.75 1.05-3.45.95-2.31 1-5.44.32-1.04 1.27-6.71 1.81-5.66.78-2.04 1.81-3.12 3.94-3.62 4.98-2.59 1.55-.18 4.49-1.4 3.31-.32 3.27-.81 4.53-.77 1.99-.55 6.07-1.95 5.75-1.81 1.72-.68 4.03-1.31 3.76-2 1.54-.63 1.9-1.36 2.9-1.54 1.49-1.22 3.21-2.04 2.45-2.99 1.13-1.09 1.05-1.36 2.72-2.72 1.54-2.68 1.45-2.17 2.13-4.4.54-.86 2.08-5.66.59-2.58.63-4.04.5-3.76-.19-3.72.09-4.12v-.09l-1.18-4.71-.45-3.13-2.58-5.08-2.54-2.81-5.48-3.67-5.03-1.49-2.72-1.09-5.8-1.59-1.99-.77-3.49-2.81-4.08-2.86-.5-.99.05-.41v-.13l-1.32-7.16.18-1.63-.32-6.07.04-2-.14-5.8-.27-2.36-.36-5.44-.95-3.67-.68-4.22-3.62-7.88-4.98-7.7-6.71-7.79-3.76-3.76-7.93-5.57-2-.6-5.71-2.44-5.3-.77-2.58-.55-7.84-.32-5.76.36-2.08.27-4.63.86-3.17 1.13-2.86.81-4.3 2.72-.63.23-5.21 2.58-2.81 3.08-1.13.54-.18.18-.81 1.27-3.31 2.32-2.27 3.76-.91.5-.09.14-.14.04-.4.95-3.58 2.81-2.76 5.71-3.45 3.71-.86 3.49-1.23 2.27-1 5.39-.32.91-.91 6.21-.13.5v.13l-.05.13-1.22 6.34-.59 7.21-.14 2-.14 5.48-.13 2.27.09 5.39-.27 2.35.13 5.3-.54 2.4-.55 4.31-2.72 4.67-1.36.81-4.57.55-2.81-.41-6.71-1.54-1.04-.36-1.86-.59-5.89-2.26-7.7-3.13-4.35-2.4-3.31-4.31-1.45-3.04.36-.99.95-6.84 2.68-4.94.81-2.59 1.63-2.76 2.09-4.85.72-1.32 2.54-3.94 1.08-2.49 1.63-2.54 2.76-5.3 3.22-4.21 1.67-3.53 1.13-1.41 1.54-2.63 1.77-1.95.77-1.81 2.32-2.68 2.89-5.66 3.54-3.63 1.49-3.53 1.13-1.49 1.63-3.67 1.22-1.45.32-1.22 2.36-3.72 1.22-3.94.73-1.95 1.49-5.89.59-7.79v-.18l-.54-7.66-.23-.68-1.59-7.29-2.99-5.07-1.27-2.77-1.41-1.49-4.03-2.53-3.94-2.77-3.58-1.04-4.3-1.18-7.74-.54-1.63.09-6.8 1-1.81.59-4.44 1-.95.36-5.21 1.4-2.63 1.72-2.85.32-.23.09-3.54 2.95-.91.41-.27.27-6.34.54-.09.13h-.18l-.96 1.04-1.63-2.13.49-1.27v-.13l.05-.09-1.09-6.12.77-1.86.5-5.94.32-.81 1-3.72 1.08-2.08.18-1.13 1.81-4.49.77-3.21.5-3.44.54-4.35-.18-3.08v-4.85l-1.13-4.08-.63-3.76-3-5.53-1.59-2.36-6.29-4.84-5.66-2.95-3.95-1.77-5.93-2.81-5.21-3.17-2.49-2.49-3.26-5.03-2.85-6.21-1.54-3.71-2.13-5.62-2.85-4.94-1.36-2.81-1.49-1.9-6.39-6.03-1.45-1.18-3.08-1.86-4.71-3.17-2.49-1.54-5.21-4.12-4.08-3.54-3.62-4.12-2.77-3.58-4.57-7.74-.41-.78-2.58-6.98-.82.32 2.58 6.93.45.86Z\",\n className: \"background_map_svg__cls-3\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m885.95 917.57-7.98-7.16-2.27-1.77-6.52-4.53-5.62-4.08-2.9-2.81-5.16-5.71-3.72-8.15-2.36-8.52-1.63-8.93-2.13-8.74-2.27-4.53-4.03-5.21-5.39-3.45-17.49-8.15-8.56-5.93-9.16-8.7-8.47-6.98-3.13-1.99-5.94-3.13-4.66-1.45-4.35-1.49-8.97-1.81-8.52-1.81-8.61-3.08-8.65-4.62-8.38-6.75-1.86-1.77-3.94-5.8-1.86-2.63-.77-1.73-3.31-6.75-2.85-8.7-2.63-5.62-2.54-3.94-6.88-4.44-7.48-3.12-1.59-.77-2.09-.78-6.66-2.04-3.44-1.31-5.3-1.86-8.52-4.03-8.75-5.12-8.74-5.52-8.7-5.89-8.61-7.39-1.41-1.31-15.99-18.3-6.61-7.84-2.13-2.94-5.08-6.03-3.8-3.85-7.11-5.44-2.09-1.23-8.69-4.62-4.39-2.58-4.13-2.9-6.03-5.53-2.4-3.21-3.31-5.21-3.98-8.56-1.32-3.81-2.31-5.12-7.21-9.15-1.49-.54-7.89-1.54-.36-.09-1.32.23-7.48.09-1.13.22-7.88.82-8.83 1.68-8.7 2-4.57.81-4.04.86-3.44.22-5.17.68-2.86-.13-5.71.13-3.22-.49-5.39-.64-5.12-1.27-3.49-.73-8.33-2.49-8.88-3.58-7.79-4.39-9.74-5.25-7.12-2.68-6.03-1.95-4.49-1.59-3.44-1.76-5.26-2.54-5.44-2.81-3.4-1.67-9.06-2.72-4.98-.54-4.12-.59-5.21.23-3.76-.19-4.53.95-4.49.41-3.04 1.09-5.84 1.4-1.22.49-2.99 1.09-3.22 1.5-1.49.45-4.58 2.54-4.53 2.31-3.48 2.13-3.13 2.22-2.27 1.45-3.08 2.17-3.85 3.04-1.9 1.54-3.9 2.95h-.05l-4.93 3.99-5.58 2.94-2.76 1.49-3.22.73-4.98 1.49-1.95-.14-6.39.09-2.49-.4-6.47-.59-3.13-.05-5.8.32-2.54.49-7.25 2.54-4.94 4.62-3.21 5.98-1.23 4.58-.63 2.81-.77 8.38.05 8.97.14 1.18-.18 7.43.05 1.08-1.36 8.52-1.27 4.57-1.41 3.95-.91 2.22-2.99 5.44-3.58 4.81-4.21 4.62-4.49 3.76-3.99 3.04-8.65 5.25-3.26 1.81-5.57 3.26-5.44 3.53-5.07 3.9-1.63 1.5-3.12 2.63-4.53 4.35-1.63 1.81-2.68 2.63-5.98 6.12-2.67 2.58-2.58 2.31c-.68.63-1.36 1.22-2 1.81l-2.36 1.95-4.35 3.44-8.83 7.61-3.35 3.58-2.49 3.13-1.49 1.67-1.63 2.09-.09.14c-.68 1.13-1.32 2.17-1.94 3.31l-3.13 5.76-2.9 5.98-1 2.49-3.35 11.01-.82 3.17-1.18 3.54-1.5 5.21-1.95 5.98-.63 2.27-2.81 9.29-1.36 3.89-2.36 6.21-1.55 3.36-1.08 2.76-2.63 5.98-2.09 3.9-.86 1.95-2.09 3.94-.86 1.86-.5.91-2.17 5.34-1.63 3.54-.91 2.94-2 6.07-1.9 7.52-.4 1.22-1.45 5.66-2.22 6.34-2.72 5.62-3.44 4.98-4.03 4.39-1.68 1.36-2.81 2.72-5.35 3.72 2.04 2.94 5.39-3.71 3.08-2.9 1.63-1.32 4.39-4.76 3.81-5.44 2.95-6.07 2.36-6.8 1.45-5.62.46-1.27 1.85-7.47 2.04-6.12.73-2.54 1.68-3.58 2.04-5.07.54-.95.86-1.9 2.09-3.94.86-1.95 2.08-3.9 2.72-6.25 1.04-2.67 1.59-3.36 2.45-6.43 1.36-3.99 2.72-8.83.77-2.81 1.9-5.89 1.54-5.25 1.17-3.53.82-3.22 3.26-10.74.91-2.27 2.81-5.84 3.04-5.62 1.81-3.04 1.49-1.95 1.49-1.68 2.49-3.08 3.04-3.26 8.65-7.52 4.39-3.4 2.45-2.08 4.62-4.22 2.76-2.58 6.02-6.21 2.68-2.63 1.63-1.77 4.35-4.21 3.12-2.63 1.5-1.41 4.89-3.72 5.21-3.4 5.53-3.22 3.26-1.81 8.83-5.39 4.26-3.22 4.9-4.17 4.3-4.71 3.81-5.03.91-1.5 2.4-4.53 1-2.4 1.45-4.17 1.36-4.76 1.44-9.06-.05-1.45.19-7.52-.09-1.22-.09-8.65.68-7.84.64-2.72 1.08-4.08 2.9-5.25 4.07-3.72 5.89-1.99 1.94-.45 5.57-.28h2.9l6.16.55 2.58.45 6.7-.09 2.27.18 5.62-1.59 3.67-.86 3.17-1.72 5.98-3.17 4.8-3.89 4.17-3.09 5.71-4.57 2.95-2.08 2.27-1.45 3.03-2.17c.73-.41 1.36-.82 2-1.23l1.27-.77 4.53-2.27 4.17-2.36 1.36-.45 3.36-1.49 3.03-1.09.91-.4 5.71-1.36 2.95-1.09 4.08-.36 4.35-.9 3.53.13 4.9-.22 4.12.59 4.49.45 8.38 2.5 3.31 1.63 5.44 2.81c1.76.86 3.53 1.72 5.25 2.49l3.45 1.81 4.93 1.76 5.98 1.95 6.61 2.45 8.75 4.76 8.74 4.85 9.47 3.89 8.56 2.54 3.58.76 5.16 1.22 5.66.73 3.36.54 5.98-.18 2.99.18 5.44-.73 3.4-.18 4.49-.95 4.61-.86 8.56-1.9 8.74-1.68 7.84-.86.77-.13 7.48-.09 1.23-.18 7.11 1.4.59.19 6.07 7.84 2.08 4.53 1.32 3.81 4.12 8.93 3.58 5.66 2.49 3.4 6.52 6.03 4.53 3.22 4.58 2.72 8.69 4.58 1.9 1.13 6.57 4.98 3.62 3.72 4.89 5.76 2.13 2.99 7.39 8.79 8.15 9.38 7.34 8.24 1.59 1.54 8.83 7.52 8.93 6.07 8.83 5.62 8.84 5.17 8.97 4.21 5.39 1.95 3.44 1.31 6.71 2.04 1.81.63 1.68.81 6.98 2.85 6.34 4.17 1.72 2.72 2.45 5.21 2.9 8.75 3.4 7.07.86 1.86 6.16 9.02 2.27 2.22 8.74 7.02 9.11 4.89 8.97 3.26 10.42 2.22 7.2 1.45 4.35 1.49 4.17 1.27 5.7 2.95 2.72 1.72 8.66 7.16 8.92 8.47 8.83 6.17 6.16 2.85 5.48 2.63 5.98 2.76 4.98 3.22 3.13 4.03 2.04 3.99 2.08 8.33 1.59 8.88 2.4 8.79 4.17 9.15 5.57 6.21 3.04 2.99 5.98 4.35 6.48 4.53 2.13 1.59 7.74 7.03.86.81 7.74 8.83 2.72-2.36-7.8-8.88-.99-1ZM607.62 13.37l4.81 8.02 7.25 7.97 8.42 6.47 2.13 1.54 13.28 8.61 7.53 6.93 4.44 7.07 3.76 8.33 3.71 7.3 3.58 5.57 2.49 2.49 5.66 4.35 7.75 3.99 1.77 1.32 5.84 4.12 1.59 1.63 1.36 2.94 2.54 4.44 1.05 6.57.22.72-.32 6.71.04.77-1.18 5.58-.27 1.9-2.08 7.8-.49 2.67-1.73 4.9-.18 1.17-.9 2.36-.77 3.49-.23.82-.91 5.94-.54 1.81-.41 5.12-.59 2.72-.04.32.27 4.62-.22 3.22.95 5.48.23 2.4 1.99 8.07.41 1.13.22.13.09.23 8.83 3.76.36-.32.45.09 2.13-2.86 1-1.77 1.9-3.08 3.27-4.58 2.68-5.17 1.81-2.72 1.18-1.95 1.81-1.72 1.72-2.18 3.71-3.9 2.22-1.54 1.99-1.63 3.36-2.13 1.27-.91 5.03-2.22 3.17-1.09 7.43-1.04 2.72.72 4.62.81 5.62 3.67 1.36 1.54 2.98 5.58.64 3.66.99 3.63-.27 4.44-.04 2.99-.95 3.17-1.45 4.12-.54 1.27-1.45 2.45-1.41 2.49-2.72 4.71-3.48 4.85-3.09 3.98-2.67 3.13-.77 1.17-1.14 1.36-2.67 2.54-2.4 2.67-2.67 3.22-2.27 2.08-3.67 4.62-2.04 3.08-1.08 1.14-.19.18c-.32.49-.54.95-.72 1.22l-2.45 3.35-3.35 6.17-2.4 3.76-1 2.49-1.58 2.99-1.99 4.81-2.81 5.97-.72 2-1.22 3.95-1.32 4.08v2.76l-.63 4.98v.54l1.17 3.27.82 4.44.18.55 4.26 4.57 6.57 2.49 1.41.73 3.22.72 4.89.72 7.7 1.27c.82.14 1.59.31 2.36.49l5.21 1.18 5.94 2.18 1.77.59 3.26 1.27 4.71 1.4 1.86.36 6.02 1 3.08.09 5.12-.54 2.35-.63 2.77-1.91 2.22-2.08 1.45-3.45 1.13-2.54.09-8.06-.23-.87-1.04-7.61v-.45l-1.18-7.3v-1.72l-.59-6.02v-2.22l-.14-5.39.09-2.22.59-7.02 1.18-6.44.41-1.08 1.04-5.03.41-1.08 1.45-4.81 1.59-2.62.95-2.31 2-2.22 1.22-2.17.73-.81 2.31-3.67 3.35-2.72.63-.72.55-.41 3.22-3.58 3.26-1.95 1.22-.91 2.72-1.18 2.27-1.49 5.21-2 3.4-.76 2.81-.45 4.71-.41 7.66.32 3.58.91 3.89.72 7.39 3.49 2.76 2.4 4.67 3.85.63.68 1.9 2.68 3.94 4.98 3.99 7.57.77 3.57 1.13 3.9.45 5.35.28 2.04-.09 5.53-.45 7.11-.5 2.54-.4 4.4-1.45 3.48.09 2.77-2.95 4.8-.5 6.85-.68.59.14.41-.27.36 1.86 3.8.54-.13.36.45 1.81-.86 5.52 2 .37.09h.08l.14.04 3.26-.59 4.26.45 4.21.55 3.27.54 7.43 2.63 6.43 7.25.6 2.27.86 4.76-.86 7.43-2.77 7.25-1.68 2.81-3.26 4.35-3.76 3.58-3.31 2.54-2.58 1.63-3.17 1.81-1.72.77-7.7 2.81-1.81.27-5.57 1.4-.32-.04-7.06.13-.36-.13-7.2-1.4-4.4-2.54-3.08-1.17-3.26-1.87-4.48-4.57h-.28l-.22-.18-4.62.5-4.12.82-.18.13-.23.09-1.67 2.4-.63 1.72-1.18 4.76-.05.22v.05l-.04.09.27 3.03-.68 4.26.36 3.44-.81 3.54-.27 3.99-.68 2.85-1.22 6.34-1.59 4.8-.36 1.36-1.86 5.26-1.67 1.95-1.32 2.4-2 1.49-1.81 1.95-3.17 1.49-1.59 1.04-.73.22-4.26 2.13-3.44.95-2.4 1.04-5.8 2.04-.82.5-3.71 3.67-2.67 4.58-.41 1.13-.54 7.61v.09l.22 7.43v.64l.23 7.06-.28 7.79v.05l.14 7.79 1.5 7.98.4 2.58 1.14 5.12.36 4.03.54 3.76.86 5.35.45 2.45 1.95 5.26 1.54 3.03 6.61 7.16 1 .95 6.8 5.03 2.9 2.68 4.67 4.8 2.12 2.63 2.49 4.71 2 2.94 1 2.22 2.98 5.48 2.09 5.08 1.4 2.67 1.27 3.26 2.27 4.44 1.41 3.76 1.81 3.85c.63 2.54 1.27 5.03 1.9 7.43l1 7.84.77 7.7.59 2.27 1.32 5.84 4.76 8.47 10.2 7.84 5.44 3.94 3.89 3.58 3.63 4.49 2.13 3.13 5.76 8.07 7.84 7.74 7.97 5.35c1.18.86 2.36 1.68 3.54 2.49l4.31 2.27 6.57 4.35 1.13.64.86.59 6.93 4.03 5.62 3.71 2.13 1.18 4.48 3.22 3.36 2.13.23-.41h1.54v-.27l.91-1.45-4.22-2.59-4.48-3.26-2.27-1.22-5.57-3.72-6.89-4.03-.81-.54-1.23-.68-6.57-4.35-4.22-2.22c-1.22-.81-2.36-1.63-3.54-2.45l-7.65-5.12-7.57-7.47-5.53-7.79-2.17-3.17-3.76-4.67-4.21-3.9-5.66-4.12-9.74-7.57-4.12-7.34-1.23-5.44-.49-1.86-.77-7.75-.77-5.71-.18-1.99-2.04-8.02-1.95-4.22-1.36-3.71-2.31-4.53-1.22-3.22-1.45-2.67-2.13-5.12-2.99-5.62-1-2.22-2.04-3.04-2.54-4.8-2.49-3.13-4.85-5.03-2.99-2.76-6.84-5.03-.87-.77-6.2-6.8-1.22-2.35-1.81-4.71-1.31-7.66-.5-3.63-.36-4.08-1.18-5.3-.41-2.63-1.45-7.48-.13-7.66.32-7.84-.27-7.11v-.64l-.22-7.29.5-7.11.18-.45 2.27-3.94 3.17-3.17 5.76-2.08 2.22-.95 3.4-.99 4.39-2.13 1.13-.36 1.59-1.05 3.9-1.9 1.72-2 2.58-2 1.32-2.44 1.95-2.4 2.08-5.89.27-1.18 1.59-4.8 1.31-6.62.68-2.85.28-4.03.86-3.76.05-.23v-.13l-.36-3.4.63-4.21-.22-3.04 1.09-4.35.45-1.23.86-1.18 2.86-.59 3.35-.31 3.85 3.93.28-.27.32.14-.23.41 3.36 1.9 3.08 1.14 5.03 2.85 7.07 1.31 1 .37 7.16-.19.81.09h.14l5.85-1.45 1.95-.32 8.15-2.95 1.91-.86 3.49-1.95 2.72-1.72 3.49-2.67 4.12-3.94 3.54-4.66 1.86-3.04 3.12-8.15.95-7.98v-.31l-.95-5.26-.86-3.26-7.66-8.47-8.02-2.81-3.8-.68-4.3-.54-4.53-.49h-.32l-3 .54-6.12-2.22-.22.09-.27-.09-.45.23.23-.18.5-7.25 2.76-4.48.27-.73-.14-2.76 1.5-3.4.32-4.35.55-2.53.45-7.57.09-5.76-.27-2.35-.46-5.48-1.22-4.12-.86-3.94-4.21-8.07-4.13-5.26-1.95-2.67-.81-.95-4.98-4.12-3.04-2.67-8.15-3.86-4.17-.76-3.76-.95-8.15-.36-5.08.41-3.04.45-3.62.81-5.8 2.22-2.22 1.5-2.9 1.27-1.45 1-3.57 2.22-3.22 3.58-.54.36-.73.81-3.76 3.13-2.27 3.67-.86 1-1.13 2.08-2.31 2.59-.87 2.22-1.72 2.9-1.54 5.08-.4 1.09-1.09 5.12-.45 1.32-1.27 6.75-.59 7.25-.09 2.31.14 5.52-.05 2.27.59 6.07.05 1.68 1.13 7.34 1.13 8.47.18.68-.09 7.12-.63 1.22c-.5 1.22-.95 2.36-1.45 3.53l-1.41 1.36-2.4 1.63-1.22.31-4.76.54-2.58-.09-5.94-.95-1.59-.32-4.48-1.31-3.27-1.27-1.77-.59-5.93-2.22-5.49-1.27-2.44-.49-6.66-1.09.04-.18-1.36-.05-5.03-.72-2.45-.55-.99-.54-6.34-2.44-3.13-3.36-.68-4.03-1.13-3.17.59-4.71v-2.63l2.35-7.43.64-1.72 2.81-5.98 1.95-4.66 1.59-2.95.86-2.31 2.4-3.81 3.22-5.93 2.45-3.36.77-1.17 1.09-1.13 2.13-3.26 3.3-4.17 2.27-2.08 2.85-3.49 2.31-2.49 2.63-2.49 1.31-1.59.86-1.22 2.63-3.13 3.54-4.53 3.22-4.53 2.85-4.98 1.36-2.44 1.45-2.4.76-1.73 1.5-4.3 1.13-3.67.04-3.31.32-4.67v-.36l-1.09-3.85-.72-4.26-3.35-6.11-1.9-2.13-6.75-4.44-4.85-.77-2.99-.81-.32-.05-.14-.04-5.03.77-2.9.36-3.76 1.23-5.44 2.4-1.59 1.09-3.31 2.12-2.13 1.73-2.35 1.59-2.41 2.58-1.63 1.63-1.63 2.13-2.09 1.99-1.36 2.17-1.81 2.72-2.67 5.17-3.22 4.53-1.99 3.21-.86 1.59-.95 1.23-5.94-2.54-1.86-7.38-.23-2.45-.91-5.25.18-2.99-.27-4.53.59-2.49.41-5.16.45-1.63.91-5.93.27-.77.68-3.31.95-2.54.22-1.22 1.63-4.76.63-2.9 2.04-7.8.31-2.04 1.27-6.07-.05-.82.28-7.06-.23-.95-1.23-7.34-2.67-4.58-1.68-3.53-1.86-1.9-6.15-4.39-1.77-1.36-7.8-3.99-5.34-4.03-2.17-2.17-3.31-5.17-3.99-7.8-3.4-7.61-4.67-7.57-.49-.59-7.57-6.93-1.58-1.13-11.97-7.7-2.08-1.49-7.97-6.07-6.94-7.56-4.53-7.47-2.9-7.2-.45-1.41-2.17-7.84-3.08.91 2.49 8.88 3.17 7.89Z\",\n className: \"background_map_svg__cls-3\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m905.52 918.57-1.95-1.99-5.93-6.75-2.9-2.95-8.79-7.74-8.15-6.93-5.66-8.66-2.72-8.47-1.59-8.79-1.32-8.74-.72-2.86-1.36-6.07-5.03-8.97-8.56-5.4-7.66-3.39-1.9-.68-7.98-2.85-7.79-4.17-.91-.41-.81-.54-7.93-6.57-2.32-2.13-6.47-7.25-8.79-8.79-2.45-1.59-6.44-2.99-3.8-.81-5.08-1.36-6.12-1-10.92-2.13-1.72-.5-7.48-2.95-7.38-5.8-1.09-1.45-4.16-7.16-1.45-5.44-.91-3.04-.91-7.48-.68-9.34.04-.68-.68-4.3-1.27-4.62-.13-.09-.05-.13-7.74-6.44-7.57-1.41-1.27-.45-8.7-.31-3.57-.28-5.53-.32-8.25-1.54-3.12-1.13-5.62-1.77-8.74-4.21-.82-.46-7.98-4.35-5.53-3.62-3.17-2.4-7.07-6.25-7.75-8.79-6.98-8.7-5.89-8.7-7.29-13.14-3.13-4.44-5.71-6.84-2.35-1.99-6.48-5.84-3.9-2.95-4.85-4.03-4.85-4.62-3.8-4.66-2.49-4.13-.54-2.85-1.63-5.62 1.54-11.69 1.59-5.66v-.14l.05-.14-.45-1.9.63-6.66-.14-.18v-.23l-7.43-7.21-.18-.04-.18-.09-7.29-.09-1.27-.49-.18.04-.13-.04-6.3 1.4-2.31-.13h-.18l-4.8 1.54-3.9.54-3.44 1-5.34 1.13-9.34 1.72-7.52 1.27-7.88.95-1.45.22-6.57.41-2.18.32-6.25-.04-2.58.27-6.57-.68-2.13.05-.09-.05-8.56-2.08-.09-.09-8.56-3.99-8.15-4.58-18.13-15-3.99-2.58-4.85-2.67-8.79-3.76-4.89-2.31-3.85-2.35-6.66-6.39-1.99-3.63-2.9-4.94-2.9-5.84-1.22-2.9-1.73-2.58-.14-.09-.09-.09-3.94-1.54-4.76-2.58-.18.05-.19-.09-5.25 1.4-3.62.14-3.04 1.95-5.8 2.49-1 .72-4.25 3.31-3.44 1.86-1.9 1.67-4.98 3.63-1.86 1-3.58 2.4-6.52 3.58-7.34 3.36-4.08 1.4-4.76 1.95-1.63.32-5.53 1.72-1.41.36-7.2 1.27-1.77.54-5.93.5-2.76.63h-5.35l-3.26.41h-.04l-5.57-.45-3.13.04-6.97-1.54-1.77-.36-3.17-1.32-5.44-3.04-9.02-3.94-8.79.19-8.88 2.49-3.12 1.04-5.76 1.41-1.09.68-5.93 2.76-1.86.81-8.75 8.06-3.35 3.81-5.44 6.66-2.49 2.95-1.9 2.44-2.04 2.4-3.81 4.98-3.44 5.34-2.76 4.89-.37.86-.82 2.13-2.08 5.85-2.32 8.79-.72 3.67-1.23 5.07-.36 2.08-1.49 6.71-1.41 7.89-.23.86-1.4 6.16-.91 2.49-1.49 3.71-3.45 5.44-.36.36-3.67 3.99-10.06 7.44-3.71 2.26-1.59 1.31-2.17 1.59-5.03 3.95-5.03 4.85-3.8 4.12-3.45 4.71-2.13 3.27-3.44 5.52-2.68 5.89-1.49 2.9-1.4 2.95-3.13 5.84-2.76 5.84-2.9 5.89-3.04 6.71-1.82 6.07-.27 1.77-1.36 5.39-.41 3.4-.86 4.12-.59 4.62-.59 2.95-.91 5.8-.4 1.63-1.59 7.84-1.36 8.11-1 6.39-.45 2.36-.77 5.17-.73 3.58-.68 3.81-1.04 4.94-2 8.74-.72 2.54-1.27 4.94-2.08 6.61-2.45 6.25-2.94 5.99-.59-.32.5.41s.05-.04.09-.09l-2.76 5.75-1.72 2.81-1.36 2.9-3.45 5.85-2.62 5.62-1.81 3.17-1.04 2.81-2.76 5.98-2.35 6.39-1.14 2.35-1.49 3.76-3 5.61-.77 1.09-2.72 4.12-2.54 2.81-1.63 1.68-4.85 3.85-4.89 3.17-6.12 3.31-3.36 1.49-2.72 1.13-6.03 2.09-2.17.68.27.95v.63-.63l2.17-.68 6.07-2.08 2.76-1.18 3.36-1.5 5.8-3.08 5.35-3.45 4.89-3.9 1.77-1.81 2.54-2.81 3.58-5.25 3.08-5.75 1.49-3.81 1.13-2.35 2.36-6.39 2.81-5.98.95-2.72 1.81-3.21 2.86-5.89 3.22-5.57 1.36-2.81 1.72-2.81 2.9-6.12 2.86-5.76 2.49-6.3 2.13-6.7 1.22-4.94.76-2.58 2.04-8.79 1-4.98.68-3.76.73-3.63.82-5.12.45-2.49 1.18-7.43 1.32-7.7 1.81-8.66.91-5.84.59-2.95.59-4.62.86-4.13.41-3.35 1.36-5.39.28-1.72 1.76-5.98.37-.91 2.62-5.76 2.9-5.89 2.95-6.25 2.95-5.39 1.41-2.99 1.49-2.86 2.81-6.11 5.38-8.47 3.31-4.57 3.76-4.13 4.93-4.76 5.03-3.94 2.17-1.63 1.49-1.23 3.72-2.26 5.03-3.67.54.41-.4-.5 4.98-3.67 4.25-4.62 3.49-5.39 1.59-3.94.91-2.49 1.68-7.16 1.36-7.43 1.54-7.16.32-2.09 1.27-5.07.73-3.67 2.27-8.74 3.21-8.66 2.72-4.84 3.4-5.26 3.76-4.98 2.04-2.36 1.9-2.49 2.49-2.9 1.49-1.9 1.28-1.49 2.67-3.27 3.26-3.71 8.83-8.11 1.49-.63 5.98-2.76 1.23-.73 5.38-1.31 3.17-1.05 8.83-2.44 8.52-.22 8.61 3.85 5.44 2.99 3.4 1.45 1.81.36 7.25 1.58 3.12-.04 5.49.46.08-.05.05.05 3.17-.41 5.53-.04 2.67-.59 6.12-.54 1.63-.5 7.47-1.31 1.31-.36 5.35-1.72 1.81-.31 4.8-2 4.03-1.4 7.43-3.35 1.4-.68 5.17-2.95 3.58-2.36 1.86-1 5.12-3.71 1.95-1.73 3.27-1.72 5.48-4.17 5.52-2.31 3.09-2 3.4-.09 5.16-1.36 4.49 2.49 3.98 1.54 1.49 2.22 1.27 2.95 2.95 5.89 2.94 5.12 2.13 3.76 6.75 6.44 3.9 2.4 4.98 2.36 8.74 3.76 4.76 2.63 3.9 2.49 18.12 15 8.29 4.67 8.83 4.12h.09l.27.09 8.47 2.13h2.17l6.66.68h.18l2.4-.27 6.25.04 2.27-.32 6.53-.4 9.47-1.22 8.11-1.32 8.79-1.68 5.36-1.14 3.35-.95 3.85-.54 4.98-1.54 2.31.14h.13l6.21-1.45 1.49.54 7.12.05 7.11 6.93-.63 6.53v.18l.45 1.86-1.59 5.48-1.59 11.96.04.09-.04.13 1.63 5.57.68 3.26 2.49 4.04 3.9 4.8 4.93 4.76 4.89 4.08 3.85 2.9 6.48 5.8 2.22 1.9 5.71 6.75 3.03 4.39 7.29 13.14 1.49 2.27 4.49 6.52 7.02 8.79 7.74 8.74 7.16 6.34 3.22 2.49 5.61 3.67 8.79 4.8 8.79 4.26 5.8 1.86 2.99 1.09 8.88 1.68 9.06.54v.68l.05-.68 8.52.37.82.31 7.75 1.45 7.29 6.12 1.18 4.3.68 4.08-.05.77.68 9.47.9 7.43.95 3.22 1.54 5.75 4.12 7.07 1.27 1.72-.32.63.4-.54 7.66 5.93 7.43 2.9 1.36.45 11.51 2.21 6.02 1 5.03 1.36 3.8.81 6.17 2.86 2.44 1.54 8.66 8.66 6.48 7.25 2.31 2.22 7.98 6.57.85.59 1.05.5 7.79 4.17 9.92 3.58 7.52 3.31 8.56 5.39 4.76 8.65 1.22 5.8.72 2.72 1.32 8.78.78 4.27c.27 1.49.54 2.98.81 4.48l2.9 8.98 5.8 8.79 8.2 6.93 2.04 1.86 6.66 5.8 2.85 2.9 5.93 6.8 2.04 2.04c2.27 2.04 4.49 4.08 6.75 6.12l.13.09 6.53 2.63.36-.91-6.48-2.68c-2.22-2-4.44-3.98-6.62-5.93Z\",\n className: \"background_map_svg__cls-3\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m862.16 925.95-.14-.09-1.72-.18-5.93-2.04-.09.05-.14-.05-3.08.59h-4.58l-2.67.63-6.66 1.09-6.39 1.31-1.27.19.14.86 1.4-.18 6.21-1.32 6.71-1.08 2.63-.59 4.44-.05 3.17-.59 5.93 2.09 1.68.14 1.44 1.49.64-.64-1.54-1.58-.18-.05zM815.35 312.26l.09-.05h.14l3-1.4 4.71-1 1.36-.68 1.99-1.31 3.31-1.05 5.76-2.27 3.35-2.85 1-.32.09-.14.18-.09.54-1.08 3.85-2.17 2.08-3.13 1.45-.86.04-.18.14-.09.27-1.4 3.44-2.54 2.4-4.57.19-.05.04-.18.28-.18.04-.18.14-.18 3.85-3.22 1.9-4.49.64-.73.72-1.5 2.49-3.17.64-2.4 1.63-2.94 1.59-6.3.95-6.89.27-7.25-.82-7.79-.59-1.72-1.68-6.21-4.62-7.79-7.66-7.66-.36-.22-7.61-4.22-5.35-1.22-2.4-.73-7.75-.36h-.18l-5.8.68-1.99.32-4.36 1.18-5.48 2.4-2.59 1.9-2.17 1.09-1.09.86-3.57 2.54-2.77 3.31-.81.77-.68.95-3.04 3.31-1.45 2.85-1.32 2.04-2.31 5.71-2.09 5.53-1.36 6.47-.49 3.72-.45 7.79.23 3.4.09 4.39.73 4.22.32 3.53 1.72 6.25.23 1.54 1.32 4.12 1.49 3.76 1.95 3.4 1.63 4.3 2.86 6.21 2.44 1.77 5.26 5.71.27-.09.27.18 3.49-2.04 3.99.68Zm-4.12-1.49-.18-.05-3.31 1.99-5.08-5.52-2.44-1.77-2.63-5.84-1.59-4.3-1.99-3.45-1.49-3.66-1.23-3.94-.23-1.59-1.72-6.16-.32-3.58-.78-4.12-.09-4.44-.23-3.31.45-7.74.45-3.63 1.36-6.34c.68-1.86 1.36-3.67 2.09-5.48l.18-.41c.05-.04.05-.09.05-.14l2.03-5.16 1.27-1.95 1.54-2.94 2.8-3.08.77-1.04.68-.6 2.94-3.48 3.31-2.36 1.13-.86 2-1 2.72-1.99 5.21-2.27 4.26-1.18 1.95-.31 5.8-.68 1.32.09 6.43.27 2.22.68 5.48 1.27 7.48 4.21 7.66 7.61 4.53 7.66 1.59 5.93.59 1.73.82 7.56-.27 7.2-.91 6.71-1.59 6.25-1.63 2.94-.73 2.49-2.27 2.77-.86 1.76-.68.77-1.77 4.35-3.94 3.21-.04.14-.09.13-.09.19-.14.09-.18.18-2.45 4.58-3.35 2.45-.05.18-.13.09-.28 1.36-1.49.91-2.04 3.13-3.76 2.09-.09.09-.09.09-.5 1.05-1.22.4-3.36 2.86-5.35 2.09-3.57 1.18-1.86 1.22-1.31.68-4.71 1-2.9 1.36-3.99-.68-.13.09ZM896.14 307.37v-.18l-2.9-3.54-5.35-2-2.4-1.18-.14.04-.13-.09-5.3 1.22-2.54.32-3.53 1.59-4.26 2.27-1 .5-.82.86-2.59 3.58-2.63 4.44-.04.82-.95 3.94-.59 2.95.05.09-.05.14.64 1.86 3.21 5.94.14.09.05.09 4.57 2.27.13-.05.14.09 1.86-.46 6.02-.09 1.04-.54 3.4-1.18 2.13-1.32 1.27-.41 3.17-2.89 4.22-3.36.5-.81 2.04-4.85 1.04-2.09v-.13l.05-.09-.5-5.03.13-2.67-.08-.13Zm-1.41 9.74-2.08 4.93-.45.64-3.94 3.12-3.17 2.9-1.27.41-2 1.27-3.26 1.08-1.27.54-5.71.09-1.77.41-4.3-2.13-3.08-5.62-.59-1.81.59-2.76.95-3.94.05-.91 2.45-4.08 2.54-3.44.86-.91.68-.32 4.22-2.27 3.58-1.54 2.27-.23 5.26-1.22 2.17 1.09 5.35 2 2.58 3.17-.14 2.45.45 5.12-.95 1.95ZM717.77 202.66l-.59 3.95.08.13v.19l4.62 5.21.27-.09.23.18 3.44-1.54 4.08.64.18-.14.18.05 2.36-1.86 5.44-1.86.55-.5 3.76-3.54 3.49-2.13 1.72-2.18 2.27-3.71 3.17-4.22.14-.5.54-1.09 1.45-4.66.55-1.46v-.18l-.68-6.39v-1.31l-.05-.23-1.4-2.72-5.89-5.21-1.95-.95h-.14l-.13-.04-8.02.77-.41.23-4.44 2.76-2.81 1.59-1.86 1.68-1.81 1.81-1.67 2.54-2.54 3.22-1.36 2.17-1.36 4.94-1.31 2.95v3.76l-1.27 3.85.05.14-.05.13 1.18 3.62Zm.95-7.65.05-3.9 1.18-2.45 1.45-5.17 1.14-1.81 2.58-3.26 1.67-2.54 1.73-1.72 1.81-1.63 2.67-1.49 4.98-2.99 7.48-.63 1.86.91 5.66 5.12 1.18 2.31v1.18l.68 6.39-.49 1.36-1.41 4.58-.59 1.13-.22.63-2.95 3.85-2.22 3.72-1.81 2.22-3.31 1.99-3.67 3.49-.77.54-5.35 1.81-2.17 1.77-4.03-.64-.09.04h-.14l-3.26 1.5-4.25-4.8.54-3.81v-.18l-1.18-3.62 1.27-3.9Z\",\n className: \"background_map_svg__cls-3\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m591.36 5.17.95 2.54 2.13 5.25 4.17 7.79 6.21 7.79.68.64 8.43 7.2 11.37 7.79 3.49 2.22 7.75 5.26 7.66 6.34 1.36 1.49 2.9 4.31v.05l2.54 3.4.95 1.63 3.35 6.12 4.44 7.88 6.26 7.75 1.59 1.63 7.84 5.58.91.59 6.8 5.44 1.9 2.31.99 2.81 2.27 4.85.41 5.53.45 2.03-.72 5.35-.05 2.4-.95 4.3-.5 3.31-.76 3.17-1.18 4.58-.32 1.63-1.67 5.3-.14.77-.05.14-1.17 6.3-.32 1.41-.73 5.34-.49 2.4-.14 4.76-.27 3.08.22 4.71.05 3.08.72 7.8 1.18 7.74 1.13 5.35 1.13 2.54 3.94 7.74 2.81 5.71 2.4 2.22 2.95 5.26 1.59 2.44.73 3 1.46 4.48-.23 1.18v.09l.76 6.48-.31 1.59.18 6.12-.36 1.45-.55 6.34-.18.63-.77 3.54-2.17 11.28-.68 4.85-.64 2.9-.18 4.04-.68 3.71v.14l.41 3.71-.22 3.99v.13l1.63 5.17.55 2.67 2.04 3.4.13.09.09.09 5.26 1.95 2.44 1.36.13-.05.14.09 5.66-1 1.99.27h.14l4.98-.95 2.68.05 4.39-.63 3.4.04 4.21-.18 3.49.22 5.03.55 2.63.41 7.93 2.21 7.66 2.09 2.54.5 5.26.91 3.94.45 3.9.14 3.99-.04 3.85-.91 3.04.04.19-.04 4.48-1.86 1.68.54h.23l5.75-1.45 3.27 3.03 4.21 2.54.32 1.45-.05.23.05.13v.09l2.76 7.48.36 3.35 1.59 4.26 1.41 6.48.4 1.22 1.32 7.79v.36l.04 7.25-.45 2.72-.68 4.31-.18.63-1.9 5.08-1.9 2.63-1.23 1.9-1.72 1.32-2.31 2.22-4.35 2.18-.68.46-.32.08-4.8 2.31-2.95.91-2.9 1.08-5.75 2.09-1.63.86-3.22 2.18-2.22 2.21-1.59 1.86-.81 1.81-.77 4.66v3.26l.45 5.07.5 2.59.63 6.3.27 1.4.54 7.7-.13 6.98v.18l.18 8.47.63 4.49.77 4.08 1.54 6.93.27 2.63.73 5.16.5 3.81.54 3.94 1.81 7.93 1.63 3.13 3.53 4.67 4.36 3.49 5.66 4.35 2.08 1.36 7.84 6.3c.23.27.41.5.59.73l5.93 6.98 1.09 1.63c1.22 2.04 2.4 4.12 3.58 6.07l2.81 6.48.72 1.27.64 1.63 2.98 6.12 1.59 4.62 1.32 3.04 1.77 7.7.05.55.81 7.25.28 7.75.76 7.8 1.05 2.94 1.63 5.03 3.36 4.71 3.08 3.08 12.46 8.7 7.43 6.85 6.66 7.7 1.45 1.54 6.07 6.25 1.72 1.41 6.16 4.76 2.27 1.63 7.16 3.85 6.48 3.94 1.27.64 1.86 1.18 5.89 3.26 3.9 2.67 3.9 2.18 6.07 3.85 1.63.91 7.84 5.57v.59-.59l.5-.68-7.79-5.58-1.68-.9-6.07-3.9-3.85-2.17-3.94-2.63-5.89-3.31-1.86-1.18-1.31-.63-6.48-3.99-7.07-3.76-8.38-6.34-1.63-1.36-7.52-7.74-6.71-7.8-7.44-6.79-12.41-8.65-3.04-3.04-3.35-4.76-1.5-4.71-1.04-2.9-.77-7.57-.27-7.8-.86-7.88-1.76-7.7-1.36-3.21-1.59-4.63-2.99-6.11-.63-1.63-.73-1.36-2.81-6.44a589.67 589.67 0 0 0-3.67-6.16l-1.04-1.63-6.02-7.07c-.19-.27-.37-.5-.55-.73l-.18-.18-7.84-6.3-2.08-1.36-5.67-4.35-4.3-3.44-3.31-4.35-1.63-3.26c-.14-.63-.27-1.27-.41-1.9l-1.36-5.66-.54-3.93-.5-3.81-.72-5.17-.28-2.58-1.59-7.2c-.04-.23-.04-.41-.08-.59l-.64-3.31-.64-4.4-.13-8.52.09-6.98-.54-7.79-.27-1.45-.64-6.3-.49-2.58-.46-5.12-.05-2.94.82-4.76.72-1.45 1.45-1.72 2.03-2.09 3.12-2.17 1.59-.81 8.57-3.13 2.94-.91 5.39-2.53.54-.36 4.62-2.35 2.17-2.13 2.04-1.59 1.09-1.81 2.08-2.85 1.86-5.03.18-.73.73-4.4.46-2.72-.05-7.38.05-.41-1.32-7.84-.45-1.31-1.4-6.48-1.59-4.35-.41-3.35-2.72-7.47v-.32l-.36-1.72-.13-.14-.05-.18-4.35-2.58-3.36-3.13-.22.05-.18-.13-5.85 1.49-1.68-.54-.14.04-.18-.04-4.53 1.9-3.03-.05-3.9.91h-3.85l-3.8-.08-3.9-.46-7.74-1.41-7.84-2.08-7.7-2.17-2.72-.45-5.12-.54-3.44-.23-4.35.13h-3.31l-4.39.59-2.81-.05-5.03 1-2-.27h-.13l-5.57.95-2.22-1.27-5.3-1.95-1.95-3.26-.45-2.35-1.63-5.21.22-3.85-.41-3.85.68-3.58.18-4.03.59-2.9.72-4.89 1.55-7.79.59-3.49.77-3.4.22-.82.5-6.21.41-1.68-.18-6.03.32-1.63v-.14l-.77-6.43.22-1.22-.05-.09.05-.09-1.45-4.53-.86-3.35-1.54-2.31-3.12-5.53-2.35-2.22-2.63-5.39-3.99-7.7-1.09-2.49-1.09-5.16-.18-1.32-1-6.39-.22-2.54-.5-5.21-.04-3.08-.23-4.62.27-3.08.14-4.58.49-2.49.68-5.3.32-1.41 1.27-6.61 1.77-5.85.36-1.63 1.18-4.62.77-3.17.5-3.31.96-4.49.04-2.31.73-5.44v-.18l-.45-1.95-.45-5.89-2.27-4.66-1.13-3.17-1.95-2.36-6.84-5.48-1-.59-7.65-5.44-1.55-1.63-6.38-7.88-4.26-7.56-3.36-6.17-.95-1.63-2.72-3.67-2.72-4.08-1.4-1.63-7.85-6.48-7.79-5.3-3.45-2.22-11.33-7.75-8.97-7.61-6.12-7.7-4.17-7.75-3.04-7.75-1.59-4.71-1.4-3.09-.81.37L589.84.5l1.59 4.76ZM938.05 914.72l-3.72-.23-4.8.18-5.66-1.99-3.08-.82-3.17-2.12-5.3-4.04-4.67-4.67-8.15-8.65-4.71-6.43-1.9-2.41-1.77-4.08c-.72-1.45-1.4-2.95-2.08-4.44l-.05-.18-1.27-8.52-.54-8.75-1.49-8.83-2.67-8.84-5.39-8.83-.14-.09-.05-.13-.4-.27-8.7-4.76-7.66-2.58-1.13-.5-2.13-.63-6.62-1.63-2.72-1-5.98-1.91-7.7-4.12-.95-.73-7.84-8.06-.91-1.77-3.67-6.84-5.25-8.97-8.79-5.49-8.83-3.03-1.14-.28-10.06-2.31-6.34-1.27-5.44-1.81-3.45-.86-4.71-2.49-3.81-3.94-2.81-4.67-.55-3.26-1.45-5.21.18-4.71-.32-3.9.45-4.66.45-8.25.6-4.62-.41-3.94.41-4.85-.05-.14v-.14l-3.85-7.48-.32-1.18-.13-.13-.05-.19-.91-.54h-.28l-.18-.14-.45.09h-.09l-8.06-.95-.14.05-.09-.05-1.09.31-7.57.6-4.35.59-3.67.63h-.73l-7.11.95-10.33.46-8.65-.5-8.7-1.99-1-.45-7.71-3.08-7.88-4.62-.86-.73-8.06-7.97-6.98-8.79-6.47-8.61-4.44-8.83-.22-1.63-1.13-6.98-.41-1.45-.77-7.43-2.67-4.94-1.81-3.8-2.04-2.68-5.53-6.21-3.31-3.03-6.52-5.76-2.22-1.81-7.43-6.98-1.22-2.08-2.54-6.34.23-2.17-.36-6.49.04-.08 2.08-8.61 2.63-8.7.49-6.17.59-2.63-.04-.14.04-.09-1.54-7.12v-1.54l-.09-.14v-.18l-1.64-2.08-.18-.05-.09-.13-2.72-.64-5.93-3.03h-.18l-.09-.09-5.3.45-3.35-.59-.09.04-.09-.04-4.89.9-3.76.14-4.04.95-4.8.77-11.64 3.27-4.49 1.4-7.16 1.63-2.99.77-4.31.63-4.58 1.09-2.95.13-5.7.86-2.36-.23-6.34.27-2.85-.77-5.93-.72-6.12-2.63-2.54-.77-2.9-1.67-5.62-5.08-3.31-3.53c-1.86-2.09-3.67-4.13-5.48-6.21l-2.31-2.58-6.53-5.66-8.74-7.02-6.21-4.89-2.49-2.9-4.3-5.75-4.39-9.88-3.26-7.52-3-6.25-1.13-2.54-1.4-2.63-4.3-6.3-4.62-3.71-6.8-3.08-1.99-1.09h-.05l-3.62-.95-5.3-.91-8.79-.95-1.95-.09-6.84-.23-2.13.05-6.65.5-1.59.05-7.11.99h-.64l-8.33 1.18-7.66.36-1 .27-8.56-1.13-.23-.04-8.56-3.54-7.06-5.21-1.5-1.18-8.92-7.79-8.75-5.26-7.97-2.49-.86-.36-4.12-.5-4.76-.45-8.83.09-8.79.82-7.25 1.04-1.63.14-6.12.91-2.58.27-8.7 1.05-4.57.36-4.21.49-3.85.19-4.89.72-2.99.19-5.8 1.08-1.68.19-6.97 2.08-6.03 2.9-3.08 2.85c-.59.41-1.08.77-1.59 1.09l-.14.13-1.09 1.49-2.85 3.49-2.22 5.35-.41.73-.68 2.49-1.59 4.08-.36 1.54-1.68 5.21-.95 3.53-1.09 3.13-2.17 5.62-.86 1.67-2.72 4.27-2.08 2.72-1.86 2.08-6.34 6.66-2.31 2.17-4.17 4.62-3.76 5.07-3.26 5.62-2.81 5.98-.95 2.9-1.45 3.49-1.54 5.3-.55 1.4-2 6.84-2.08 6.62-.73 2.67-1.4 3.94-1.59 4.81-.68 1.68-6.16 15.86-1.05 3.17-4.94 12.55-2.72 6.02-2.99 5.71-1.31 2.17-1.86 3.36-1.32 1.95-2.08 3.35-3.44 4.17-.86 1.18-3.4 4.48-4.53 5.21-5.03 7.88-1.4 2.36-2.4 4.21-.95 2.27-3.4 8.79-4.44 12.46-3.13 10.65-2.13 6.62-1.86 5.3-1.63 5.16-.91 3.62-1.19 6.75-.23 2.08-.49 5.98.09 8.93.31 2.63.14 6.57.27 2.13-.14 6.75.09 2-.41 6.39-.09 2.35-1 8.79-1.81 12.18-1.04 5.3-.32 2.09-2.08 9.79-1.04 5.62-1.27 6.43-1.77 6.94-2.13 6.57-2.72 6.34-2.67 5.66-1.9 2.95-1.36 2.53-2.63 3.72-.9 1.45-.78.99-2.62 4.39-3.17 4.39-3.67 6.3-1.72 2.44-1.54 3.17L48.97 889l-2.4 3.3-1.18 1.77-4.03 4.66-4.66 4.03-5.17 3.49-6.71 3.35-5.16 2.27-2.27.81-3.99 1.68-4.8 1.54-1.72.68-6.98 2.13.22.95.28-.09 6.75-2.04 1.77-.68 4.75-1.55 3.99-1.68 2.31-.81 6.12-2.67 5.85-3 5.25-3.58 4.76-4.08 4.13-4.72 1.31-1.9 2.36-3.31 6.44-11.14 1.49-3.04 1.68-2.49 3.67-6.25 3.17-4.44 2.59-4.31.81-.99.95-1.54 2.58-3.72 1.4-2.58 1.86-2.94 2.94-6.12 2.54-6.02 2.22-6.61 1.13-4.62v-.04l.05-.14.59-2.22 1.45-7.3.86-4.84 2.09-9.74.36-2.13 1.04-5.26 1.81-12.27.95-8.74.09-2.45.41-6.34-.04-2.08.13-6.7-.27-2.18-.14-6.61-.32-2.63-.14-8.79.73-8.02 1.18-6.65.86-3.58 1.27-3.94 2.22-6.48 2.13-6.66 3.13-10.6 4.49-12.46 3.35-8.75.91-2.17 2.36-4.17 1.4-2.35 4.94-7.75.45-.54 4.08-4.66 4.25-5.71 3.45-4.17 3.44-5.35 1.95-3.45 1.27-2.12 3.03-5.75c.68-1.49 1.32-2.9 1.95-4.35l.81-1.72 4.93-12.64 1.09-3.17 6.8-17.49 1.59-4.85 1.45-3.93.73-2.68 1.99-6.25.68-2.59 1.36-4.63.54-1.36 1.54-5.3 1.45-3.44.91-2.85 2.76-5.89 3.22-5.58 3.67-4.98 4.17-4.62 2.27-2.22 6.44-6.66 1.86-2.13 2.09-2.77 2.76-4.25.95-1.86 2.22-5.66 1.13-3.12.91-3.58 1.68-5.17.36-1.49 1.58-4.08.73-2.54.32-.59 2.32-5.49 2.67-3.17 1.18-1.59 1.36-.95 3.31-3 5.53-2.63 1.4-.45 5.34-1.63 1.77-.19 5.71-1.13 3.04-.18 4.89-.68 3.85-.22 4.21-.5 4.58-.32 11.32-1.36 6.34-.95h.04l1.32-.09 7.7-1.04 8.02-.77 8.97-.13 4.76.45 4.03.5.68.32 8.02 2.49.9.55c2.4 1.45 4.85 2.94 7.3 4.39l.49.27 8.66 7.66 1.54 1.23 7.25 5.35 8.88 3.62.09-.05.18.05 8.61 1.17.09-.04h.09l.95-.22 7.88-.41 7.93-1.14h.64l7.2-1 1.59-.04 6.61-.54h2.13l8.7.32 8.74.91 5.21.86 3.58.95 1.86 1.04 6.8 3.04 4.48 3.72 4.04 5.93 1.4 2.54 1.13 2.58 2.99 6.21 3.76 8.74 3.99 8.79 4.35 5.8 2.58 3.08 6.26 4.9 8.74 7.02 6.39 5.57 7.79 8.79 3.31 3.54 5.85 5.25 3.04 1.77 2.49.76 6.48 2.72 5.75.68 3.08.77 6.25-.22 2.45.22h.18l5.57-.86 3.09-.14 4.53-1.08 4.3-.64 3.08-.82 7.16-1.63 7.34-2.22 6.3-1.68 2.41-.72 4.8-.77 4.08-1 3.58-.09 5.03-.91 3.31.6 5.39-.46 5.93 3.08 2.63.63 1.41 1.81v1.41l1.54 7.16-.54 2.49-.55 6.25-.45 1.45-2.04 6.71-2.22 9.24v.18l.36 6.3-.27 2.36.04.13v.09l2.54 6.44 1.49 2.53 7.43 6.89 2.22 1.86 9.74 8.7 5.49 6.21 1.99 2.58 1.81 3.76 2.63 4.93.68 6.94.41 1.59 1.49 8.92.23.54c1.41 2.68 2.76 5.39 4.12 8.15l.09.14 6.57 8.75 6.93 8.79 8.2 8.06.86.77 7.97 4.72 8.83 3.58 2.22.54 6.61 1.54 8.88.54 2.04-.09 8.38-.36 7.07-.96h.72l3.81-.68 3.89-.45 8.07-.68 1.13-.32 8.15.95.09-.05.09.05.27-.05.68.36.27 1.13 3.85 7.43-.36 4.62.4 4.03-.59 4.53-.5 8.29-.41 4.66.27 3.94-.14 4.85v.13l1.41 5.16.63 3.71 2.95 4.71 4.17 4.22 4.8 2.54 3.4.82 5.44 1.86 6.48 1.27 2.31.54 8.65 2 .5.18 8.38 2.85 8.56 5.35 4.98 8.65 3.67 6.8 1.08 2.08 7.8 7.98 1.04.81 7.84 4.21 6.16 2 2.68 1 8.69 2.26 1.18.45 7.52 2.54 8.97 4.89.36.73 4.98 8.11 2.58 8.47 1.54 8.7v1.13l.5 7.7.27 1.86 1.08 7.07 2.49 5.35 1.5 3.39 1.95 2.49 4.62 6.34 8.29 8.84 4.67 4.66 5.44 4.12 3.58 2.36 2.9.73 5.98 2.08 4.76-.23 3.81.27v-.99ZM815.44 299.84l-.04-.59 6.7-.09 1.05.05h.13l5.35-1.54 2.44-.77 3.17-1.4 3.99-2.95v-.32h.54l.14-.09 4.67-3.08 3.26-3.67.55-.45.32-.54 3.59-3.27 2.62-4.35.46-.54.23-.41 3.3-3.67 1.49-3.22 1.13-1.9 1.86-4.81.4-.86 1.59-6.12.32-2.04.36-7.79-.86-6.02-.18-1.77-1.59-4.72-1.27-3.26-3.53-4.71-2.13-3.04-.96-.95-2.31-1.41-5.62-3.76-7.88-2.35-7.75-.45-.95.14-6.93 1.13-5.71 1.86-2.17 1-3.08 1.59-4.44 3.4-4.12 3.72-3.31 4.57-.73 1.36-2.26 3.49-.86 2.27-1.4 3.31-1.23 4.49-.41 1.76-1 6.07-.45 7.79.05.09.49 7.7.37 1.18 1.22 6.61 1.95 4.35 1.13 3.49 2.35 4.26 3.22 3.62 4.8 4.4 6.07 1.85 1.81.77.04.59Zm-7.56-4.03-4.48-4.13-3.17-3.57-2.22-3.99-1.13-3.48-1.95-4.4-1.23-6.47-.36-1.23-.49-7.52.4-7.7 1-6.07.36-1.68 1.22-4.4 2.27-5.57 2.13-3.35.68-1.27.63-.77 2.72-3.8 3.81-3.45.54-.4 3.99-3.13 5.03-2.49 5.58-1.81 1.81-.27 5.89-1 7.79.5 7.66 2.31 5.39 3.63 2.27 1.36.72.72 2.17 3.08 3.58 4.76 1.08 3 1.63 4.62.13 1.67.86 5.85-.36 7.74-.27 1.9-1.63 6.21-.32.55-1.81 4.8-1.18 1.9-1.54 3.35-3.17 3.49-.27.5-.31.36-2.81 4.53-3.62 3.31-.23.45-.46.32-3.3 3.71-4.81 3.08-4.31 3.17-2.94 1.32-2.49.81-5.21 1.49-.95-.09-6.71.13-1.54-.68-6.07-1.9Z\",\n className: \"background_map_svg__cls-3\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m574.37 5.39 5.8 7.65 1.9 2.54 3.13 5.16 5.07 7.79 7.16 7.8.27.22 7.79 4.67 4.49 2.94 3.26 1.72 5.3 3.53 3.85 2.49 6.39 4.08 7.66 5.53 5.8 5.8 1.95 2.27 3.67 5.44 4.71 7.75 1.32 1.9-.05.04 3.99 5.85 1.9 2.57 7.84 8.25 5.57 4.66 2.13 2.49 3.98 5.35 1.36 5.16.95 2.36-.04 6.25.23 1.41-.81 5.71v1.9l-1 4.8-.41 2.99-1.72 7.79-.41 2.18-1.31 5.57-.86 4.71-.45 3.09-.46 7.79.09 7.79.36 7.75.41 4.66.46 3.13 1.59 7.79 1.95 7.79 2.17 7.7 1.63 6.34c.22.54.4 1 .59 1.36l.22.91 1.86 6.89.55 3.21.81 4.53.59 4.62.5 3.04.18 5.34.19 2.36-.45 5.07-.14 2.67-.68 4.26-.45 3.54-.54 3.21-.86 4.53-.27 2.09-1 5.66-.63 7.79.59 7.84.4 1.54 1.9 6.3 4.49 8.11.73.5 7.34 4.94 6.16.63 1.63.09h.18l4.67-1.49 3.08-.86 2.76-1.04 4.98-1.49.91-.36 6.12-1.59.68-.05 5.89-1.08 7.57-.18 1.91.13 7.29 1.36 1.86.45 6.39 1.36 11.06 1.9 4.48.45 4.44.68h3.36l5.93 1.54 1.77.04 2.68 1.63 4.93 4.49 2.09 3.26 1.27 3.35 2.03 4.35 1.77 7.65.05 7.16-.05.45-1.4 5.62-.82 1.86-1.99 3.13-3.99 3.58-4.57 2.85-5.62 2.17-5.93 1.9-6.03 2.17-4.71 2.67-4.26 3.9-.49 1-1.95 4.53-.37 3.36v4.08l.55 3.8.91 5.44.59 2.27 1.27 7.93.45 4.3.45 3.22v.45l.18 7.97.45 7.16.19 1.27 1.31 6.53.5 3.04 1.04 4.66.5 4.62.45 3.13.82 7.88 1.04 7.66.86 2.76 2.63 5.25 5.26 5.49 2.81 2.31 4.98 3.17 7.7 5.39 7.8 6.97 5.62 7.57 2.09 3.53 2.27 4.17 1.45 3.81 1.9 3.9 2.09 6.57.54 1.14.18.77 2.04 7.11.18 2.81.4 4.8.09 3.44v4.3l.23 3.68.09 4.12.91 4.71.5 3.08 2.63 6.03 1.32 1.9 6.57 5.76 2.85 2.13 4.94 2.99 7.7 5.71 6.89 6.75c.27.27.59.59.86.82l6.66 6.93 1.18 1.09 8.02 6.7 7.57 4.35 5.75 3.44 1.99 1 2.44 1.4 5.3 2.72 4.08 2.63 3.67 2 5.57 3.49 2.22 1.27 1.54 1 6.16 3.76 5.12 3.94 2.67 2.27.55-.68-2.68-2.22-5.08-3.98-7.79-4.8-2.27-1.27-5.52-3.48-3.67-2-4.08-2.58-5.34-2.76-2.45-1.41-1.95-.99-5.89-3.54-7.34-4.21-8.01-6.66-1.13-1.04-6.62-6.93c-.36-.27-.63-.55-.95-.86l-6.85-6.71-1.44-1.04-6.34-4.76-4.94-3.04-2.81-2.04-6.48-5.71-1.22-1.68-2.58-5.93-.45-2.95-.91-4.58-.09-4.12-.22-3.63v-4.35l-.05-3.44-.63-7.79-2.22-7.79-.54-1.27-2.08-6.52-1.95-4-1.45-3.8-2.31-4.3-2.04-3.53-5.89-7.84-7.7-6.88-7.79-5.53-4.94-3.13-2.76-2.21-5.26-5.53-2.4-4.85-.86-2.68-.13-.91-.91-6.79-.81-7.75-.45-3.17-.5-4.57-1.05-4.71-.5-3.08-1.32-6.48-.18-1.23-.41-7.07v-.04l-.04-.18v-.45l-.18-7.29v-.46l-.45-3.35-.5-4.62-1.22-7.61-.59-2.31-1.41-9.06-.05-3.99.41-3.44 1.81-4.17.54-1 .86-.77 3.13-2.81 4.53-2.59 5.93-2.17 5.89-1.86 5.62-2.17 4.89-3.03 4.22-3.81 1.95-3.04.86-1.99 1.49-5.89.04-.54-.04-7.43-1.81-7.75-2-4.3-1.36-3.49-2.21-3.44-4.94-4.49-3.17-1.9-1.81-.04-5.98-1.54h-3.22l-4.44-.68-4.49-.45-11.01-1.9-8.25-1.81-7.34-1.32-1.99-.18-7.66.18-6.61 1.13-6.25 1.59-.95.41-4.98 1.45-2.76 1.05-3.08.86-4.67 1.49-1.49-.09-6.03-.63-7.7-5.25-4.26-7.8-2.27-7.66-.59-7.57.64-7.66 1-5.71.27-2.08.86-4.58.54-3.22.45-3.49.68-4.26.14-2.77.46-5.03-.19-2.49-.18-5.3-.49-3.17-.59-4.62-.81-4.57-.55-3.22-2.09-7.79-.59-1.36-2.27-8.66-1.58-5.48-1.91-7.7-1.49-7.34-.49-3.49-.45-4.99v-.27l-.36-7.11-.05-7.74v-.91l.05-.09.4-7.11.36-2.63.91-4.66 1.32-5.57.41-2.22 1.67-7.75.41-3.03 1-4.71.04-2.04.82-5.76v-.13l-.18-1.27.05-6.43-.05-.13-.95-2.27-1.54-5.62-3.94-5.3-2.13-2.45-5.66-4.76-7.75-8.15-1.9-2.54-5.21-7.75-4.76-7.79-3.67-5.44-2-2.35-5.8-5.85-2.72-2-5.12-3.62-10.24-6.61-5.3-3.49-3.26-1.76-4.49-2.95-7.84-4.71-7.12-7.7-5.12-7.79-3.13-5.12-1.9-2.68L575 4.73l-7.75-6.34-2.31-1.5-.51.77 2.22 1.36 7.8 6.39ZM823.11 292.59V292v.59-.59h.18l7.75-1.95 3.76-1.77 4.98-3.08.59-.68 3.58-2.81 2.81-3.04 1.08-1.04.5-.86 2.95-3.35 2.94-4.85.36-.73 2.53-4.17 1-2.58.95-3.4.96-4.44.4-7.8-.54-2.62-.77-5.35-2.72-5.98-.73-1.86-1.08-1.45-7.16-6.39-.82-.54-7.88-2.9-3.49-.18-4.26-.36h-.13l-3.4.5-4.35.77-2.04.68-5.85 2.72-4.31 2.81-4.12 3.9-3.35 4.31-2.76 5.16-1.18 3.17-1.04 2.4-.27 1.05-1.18 5.34-.4 2.49-.36 7.79.76 5.34.14 2.44 2.35 7.89.14.09.04.14 4.85 7.61 2.95 3.13 5.48 2.54 2.45 1.32 7.7.59v.59Zm-7.7-2.08-2-1.14-5.57-2.67-2.54-2.67-4.98-7.84-2.32-7.66-.14-2.31-.77-5.25.18-2.99.18-4.67.41-2.44 1.4-6.25 1-2.45 1.18-3.08 2.62-4.94 3.44-4.48.41-.36 3.44-3.22 4.22-2.76 5.71-2.72 1.9-.63 4.39-.77 3.36-.5 4.21.36 3.54.22 7.66 2.9.45.27 7.11 6.3 1.09 1.45.59 1.63 2.72 6.02.72 5.08.5 2.53v.05l-.32 7.52-.95 4.39-.95 3.31-.91 2.4-2.54 4.21-.59 1.09-2.63 4.35-2.9 3.36-.68 1.04-.91.82-2.72 2.99-3.62 2.85-.77.82-4.58 2.81-3.76 1.77-1.77.41-5.79 1.49-.36-.05-7.39-.59Z\",\n className: \"background_map_svg__cls-3\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m547.32 1.59 5.62 3.76 5.93 4.4 7.7 6.12 7.7 7.44 7.79 9.92 2.31 3.08 5.48 5.98 2.58 1.86 5.35 2.76 7.7 3.04 3.58 1.99 4.17 2.18 8.2 5.57 7.3 4.8 3.89 2.95 3.81 2.94 4.17 4.72 3.58 4.48 2.17 3.22 3.76 5.93 1.86 2.72c1.54 2.04 3.08 4.04 4.62 6.12l.63.77 2.54 3.21 4.35 4.53 3.4 4.17 3.26 3.67 2.86 6.03.91 1.68 1.22 7.47-.04.45-.18 7.56-.32 2.36-.59 5.03-1.09 6.16-.18 1.63-1.32 7.79-1.13 7.75-.45 7.79.05 7.79.36 7.75.68 7.88.91 7.66 1.18 7.79 1.54 8.79 1.63 6.71.36 1.95 1.09 8.83.36 4.71.45 3.85.36 3.85.45 7.7-.31 7.75-.45 3.94-.37 3.76-.45 3.12-.86 6.93-.59 7.21-.18 6.12.09 1.59.54 6.21.5 2.67 1.27 5.17 3.17 7.79.77 1.27 5.7 6.61 2.13 2.13 7.98 5.62 7.79 1.68 1.68.09 6.7-1.14 5.98-1.85 1.41-.55 4.12-1.72 3.63-1.45 1.77-.86 5.66-1.99 6.48-1.18 1.45-.05 6.52.28 1.18.18 7.79 1.13h.09l7.61 1.41 2.22.54 5.53 1.05 4.57 1.36 3.26.68 5.17 2.54 2.4 2.08 3.66 5.53 2.32 7.57-.23 5.76-.22 1.9-1.63 3.62-2.72 3.89-.59.59-4.8 2.68-3.4 1.45-7.79 2.85-5.76 2.04-2 1.04-3.44 1.49-4.39 3.63-2.85 5.12-.19 2.59-.5 4.44 1.18 9.06.54 2.13 1.68 7.88v.05l1.86 7.52.22 2.22 1 5.49.09 3.31.36 4.48.19 3.85.41 3.94.77 5.03.59 2.76 1.41 7.7 2.76 23.29.95 2.99 1.44 4.98 3.44 5.12 2.59 2.67 5.3 3.99 5.62 3.85 2.13 1.22 4.8 3.53 2.9 1.95 1.08.96 6.62 6.84.63.81.91 1.59 4.08 6.12 3.71 7.7.77 2.44 2.13 5.26 1.27 5.89.49 1.9.45 7.66v7.79l.09 6.85v.91l.77 7.7v.09l.05.14c.05.22.09.45.14.63l2.99 7.25 4.89 6.12 1.9 1.68 5.93 3.85 7.7 5.17 8.11 6.47 7.38 6.93.77.82 7.07 6.43 1.59 1.36 6.21 4.08 6.07 3.71 3.71 2c1.95.99 3.85 1.95 5.75 2.9l4.94 2.85 2.81 1.41 3.58 2.17 4.17 2.27 3.13 1.95 4.62 2.81 7.75 5.21 2.63 2.27.09.09 5.07 4.17.55-.68-5.08-4.17-2.68-2.31-.54-.41-7.25-4.89-4.76-2.86-3.03-1.9-4.17-2.32-3.58-2.13-2.85-1.4-4.94-2.85-5.75-2.94-3.71-1.95-6.03-3.71-6.12-3.99-1.59-1.36-6.98-6.39-.81-.81-7.75-7.29-7.79-6.17-7.79-5.25-5.8-3.76-1.81-1.59-4.94-6.17-2.81-6.79-.18-.91v-.09l-.73-7.38v-.95l-.14-6.8.05-1.04v-6.76l-.5-7.79-.54-2.08-1.22-5.71-2.13-5.44-.77-2.35-3.76-7.84-4.13-6.2-.91-1.59-.63-.9-6.75-6.94-1.09-.99-2.99-2-4.8-3.53-2.18-1.27-5.61-3.81-5.12-3.85-2.49-2.59-3.44-5.21-1.4-4.66-.91-2.9-2.77-23.19-1.4-7.79-.59-2.77-.77-4.94-.41-3.94-.14-3.81-.4-4.48-.05-3.27-1.04-5.62-.22-2.17-1.91-7.75v-.13l-1.68-7.7-.49-2.04-1.18-8.93.5-4.49.19-2.45 2.85-4.9 4.12-3.31 3.17-1.36 1.95-1 13.55-4.93 3.44-1.45 5.03-2.81.77-.72 2.67-3.85 1.86-4.17.18-1.81.27-5.93-.05-.18-2.44-7.84-3.85-5.71-2.49-2.13-5.49-2.72-3.12-.59-4.58-1.36-5.71-1.13-2.09-.5-7.74-1.4H761l-.95-.19-7.88-1.13-6.66-.27h-1.45l-6.61 1.22-.68.22-5.12 1.81-1.81.86-3.67 1.46-4.12 1.72-1.36.49-5.89 1.86-.41.05-6.16 1.09-1.41-.05-7.88-1.76-7.43-5.3-2.13-2.08-5.62-6.49-.73-1.13-3.13-7.7-1.27-5.12-.5-2.59-.55-6.11v-.27l-.08-1.32.18-6.12.59-7.11.32-2.22.5-4.72.49-3.08.36-3.85.45-3.89.32-7.79-.19-3.31-.27-4.53-.36-3.85-.45-3.85-.36-4.71-1.09-8.88-.36-1.99-1.59-6.66-.22-1.27-1.36-7.57-.23-1.81-.91-5.89-.36-3.08-.59-4.66-.63-7.75-.41-7.75-.04-7.74.45-7.7 1.08-7.75 1.36-7.74.18-1.63 1.04-6.17 1-7.7.13-7.25.05-.55v-.13l-1.32-7.88-.91-1.59-2.99-6.26-3.22-3.62-3.4-4.12-4.35-4.57-2.54-3.17-5.21-6.85-1.81-2.72-3.8-5.93-2.17-3.22-3.63-4.57-4.17-4.72-3.94-3.08-3.89-2.94-7.34-4.85c-.14-.09-.28-.18-.41-.27l-7.8-5.3-4.25-2.17-3.54-2-3.39-1.4-4.35-1.68-5.16-2.62-2.45-1.81-5.48-5.89-2.32-3.13-7.79-9.88-7.79-7.52-7.8-6.21c-2-1.45-3.98-2.94-5.94-4.39L547.8.96l-3.98-2.85-1.32-1.13-.54.68 1.32 1.08 3.98 2.9ZM823.28 286.07l7.84-1.86 4.89-2.54 2.9-1.63 1.86-1.45 1.68-1.81 2.22-2.13 3.62-4.17 3-4.89 2.17-4.44 2.18-7.88.32-7.84-1.27-6.3-.45-1.72-.77-1.09-4.08-6.75-2.72-2.4-4.36-2-3.57-1.86-7.75-.73h-.13l-7.74 1.41-3.95 1.67-3.94 2.22-1.04.68-1.09 1-.09.09-2.9 2.67-3.54 4.35-.41.76-2.27 4.45-1.27 3.4-.64 2.54-1.13 5.25-.27 7.84v.13l.41 1.46 1.09 6.39 2.4 4.94 1.09 2.76c.59.86 1.18 1.68 1.72 2.44l.09.09 7.84 5.58.22.05 7.66 1.32.09-.05.09.05Zm-7.88-2.27-7.52-5.39c-.5-.72-.99-1.4-1.5-2.13l-.04-.09-1.04-2.63-2.45-5.08-1-6.07-.4-1.54.31-7.7 1.09-5.12.55-2.45 1.27-3.31 2.58-5.03.73-.95 2.72-3.3 3.9-3.72.99-.63 3.9-2.17 3.89-1.68 7.57-1.36.9.13 6.84.63 3.22 1.72 4.4 2.04 2.49 2.27 4.71 7.7 1.59 7.52-.09 1.13-.27 6.57-2.04 7.61-2.13 4.31-2.86 4.76-3.62 4.17-2.22 2.13-1.58 1.72-1.72 1.41-2.95 1.63-5.08 2.54-7.38 1.73-7.75-1.36Z\",\n className: \"background_map_svg__cls-3\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m538.8 5.34 4.48 4.13 4.4 3.63 3.4 2.95 5.8 4.8 9.2 7.8 7.93 7.7 7.16 7.74 1 .86 7.75 6.48 1.09.49 6.79 2.77 7.66 2.44 7.75 4.22 5.93 4.16 9.61 6.53 3.81 3.13 3.85 3.21 3.71 4.44 4.08 5.26 5.21 7.7 2.58 3.62 5.39 6.71 2.4 3.08 3.9 4.57 4.58 7.85.13.72 2.08 6.84-.04 2.9.59 4.8-.41 3.09-.09 4.53-.45 2.67-.59 5.12-.31 1.77-.95 6.03-.77 5.34-.27 2.41-.32 7.79v7.79l.27 7.75.32 5.25.22 2.76v.05l.86 7.48 1.04 7.79.5 2.58 1.4 9.2.45 3.67.41 4.94v2.81l.27 5.08-.14 2.68.32 5.35v2.4l.18 5.53-.18 7.56-.68 10.1-.41 4.3-.09 3.49-.32 3.85.05 3.9-.09 3.81.19 4.03.27 4.26.46 3.49 1.09 5.84.5 2 1.49 4.35 1.49 3.45 2.58 4.12 2.45 3.72 1.31 1.63 6.17 6.21 1.63 1.54 6.12 4.53 1.72 1.18 1.54.59 6.3 2.13 2.9.73 4.94.18 3.49.41 4.35-.54 2.98-.09 4.85-1.76 1.04-.28 1-.77 3.9-1.99 1.95-1.22 7.79-4.04 2.72-.45 4.26-.49 8.38.45 7.52 1.9 7.75 2.99 5.17 2.9 2.4 3.26 1.99 4.12-.22 1.54-1.36 6.02-4.53 3.17-3.35 2.18-1.46.72-2.4 1.41-2.9.95-.95.41-4.98 1.45-2.94 1.54-2.72.82-2.81 2.54-1.59 1.04-.72 1.36-2.36 3.27-.05.22-.09 2.27-.36 5.03v.13l.63 2.68.95 6.61.37 1.18.81 3.35 1.36 5.8 1.9 6.34.86 4.12 1 3.58.95 6.16.37 1.54.49 7.02.81 8.97 1.54 7.38.36 1.95 1.27 5.75.45 3.63.64 4.12 1.18 13.19.14 2.36 1.59 7.93.64 1.27 4.3 6.52 3.54 3.49 5.71 4.35 5.84 3.76 4.04 2.36 2.26 1.63 5.44 4.26 3.35 3.44 4.35 5.3 1.54 2.31 1.5 3.08 2.63 4.67 2.98 7.66.28 1.22 1.72 6.66.18 2.94.37 4.62-.05 7.79.05 3.45-.05 4.3.36 3.8.28 3.99 1.36 5.48.5 2.36-.5.36.55-.27 1.86 3.62 3.3 4.22 4.58 3.67 6.12 4.17 1.67 1.04 3.67 2.63 4.03 2.63 7.75 6.16 3.17 2.99 4.62 4.12 3.94 3.67 3.85 2.95 7.84 5.26.86.45 6.89 3.58 6.02 3.31 1.72.86 1.86.95v.05l5.89 2.95 5.03 2.99 2.72 1.54 4.58 2.95.04.04 3.17 1.9 7.7 5.3 4.26 3.67 3.53 3.3.59-.63-3.53-3.3-4.26-3.68-7.79-5.39-3.21-1.9-4.58-3-2.81-1.59-4.94-2.95-5.98-2.98-1.81-1-1.72-.81-6.07-3.36-7.75-4.03-7.7-5.12-3.76-2.95-3.98-3.67-4.58-4.12-3.17-3-7.79-6.16-4.13-2.72-3.66-2.59-1.68-1.08-6.02-4.08-4.58-3.67-3.08-3.9-1.91-3.71-.45-2.22-1.36-5.3-.22-4.03-.41-3.71.04-4.35-.04-3.4.04-7.8-.54-7.79-1.72-6.61-.27-1.18-3.04-7.84-2.63-4.76-1.49-3.03-1.59-2.44-4.4-5.4-3.45-3.49-5.7-4.44-2.09-1.54-4.12-2.45-5.76-3.67-5.57-4.26-3.53-3.49-4.17-6.29-.63-1.36-.09-.64-1.45-6.84-.13-2.41-.46-5.44-.73-7.75-.63-4.17-.45-3.62-1.27-5.84-.36-1.9-1.59-7.75-1.22-15.49-.37-1.63-.95-6.16-1.09-3.63-.82-4.12-1.9-6.34-.31-1.49-1.09-4.35-.77-3.36-.32-1.04-.95-6.66-.68-2.72.41-4.94.04-2.22 2.22-3.08.76-1.41 1.22-.72 2.95-2.63 2.59-.73 2.94-1.59 4.8-1.36 1-.4 3.08-1 2.36-1.4 1.45-.73 3.44-2.27 4.62-3.27.32-.4 1.36-6.03.27-1.77-.04-.14v-.13l-2.04-4.17-2.81-3.76-5.12-2.81-7.84-3.08-7.98-2-8.2-.45-4.44.49-2.94.59-7.84 4.03-1.95 1.22-3.9 2-1.22.82-.59.13-5.03 1.81-2.67.05-4.31.54-3.4-.4-4.8-.19-2.86-.68-7.79-2.68-1.54-1.08-6.02-4.44-1.63-1.59-6.07-6.07-1.27-1.59-2.49-3.71-2.45-3.94-1.54-3.44-1.45-4.26-.5-1.95-1.08-5.76-.45-3.48-.27-4.26-.18-3.95.08-3.8-.04-3.85.32-3.9.14-3.44.36-4.26.73-10.19.18-7.57-.22-5.57.05-2.36v-.18l-.32-5.17.09-2.62-.27-5.17v-2.95l-.41-4.84-.45-3.71-1.41-9.2-.45-2.63-.91-6.48-1.04-8.88v-.05l-.22-2.58-.32-5.48.05-.09-.05-.13-.22-7.25-.04-7.74.32-7.75.27-2.31.68-4.76 1.36-8.38.59-5.17.45-2.63.09-4.53.41-3.21-.54-4.76v-3.17l-2.09-6.75-.23-1.13-4.57-7.74-3.99-4.67-2.49-3.26-5.26-6.48-2.58-3.67-5.21-7.66-4.13-5.35-3.67-4.39-3.98-3.4-3.81-3.08-7.79-5.3-7.8-5.44-7.79-4.3-7.79-2.49-6.76-2.72-1-.5-8.56-7.11-6.85-7.48-8.38-8.11-7.2-6.17-7.75-6.39-3.44-2.94-4.3-3.58-4.49-4.16-3.31-2.81-5.07-4.94-.63.64 5.12 4.89 3.27 2.85ZM832.98 279.14l6.53-3.8 3.08-2.85 2.36-2.72 2.9-4.08 1.49-2.54.77-1.5 2.27-8.34-.09-3.58.19-4.35-1.72-5.39-.81-3.03-2.22-3.31-5.93-4.98-2.68-1.41-7.93-1.04h-.36l-8.11 1.59-5.66 3.3-2.54 1.81-1.95 1.81-1.68 2-1.9 2.81-2.9 5.08c-.04.08-.04.18-.08.27l-1.91 7.93-.05 6.02-.09 2.04v.32l2.04 7.97.22.5 6.43 7.8 2.22 1.67 1.54.32 6.57 1.95.14-.04.13.04 2.9-.63 5.39-.86 1.45-.77ZM849.16 253l-1.95 7.29-.63 1.27-1.4 2.32-2.63 3.8-2.22 2.54-2.63 2.49-3.99 2.35-3.35 1.81-4.76.73-2.35.54-5.98-1.77-1.18-.22-1.13-.91-5.94-7.21-1.86-7.25.05-1.86.05-5.62 1.77-7.43 2.63-4.62 1.76-2.53 1.36-1.68 1.59-1.54 2.36-1.68 5.08-2.99 7.2-1.4 7.34.99 1.59.86 5.39 4.49 1.76 2.63.59 2.44 1.59 4.81-.14 3.98.05 3.35Z\",\n className: \"background_map_svg__cls-3\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m534.72 12.82 7.79 7.57 7.84 6.79 7.75 6.48 4.13 3.63 3.57 2.9 5.39 4.85 2.36 1.86 6.48 5.85 1.45 1.22 7.79 5.71 2.85 1.13 5.39 1.86 7.66 2.17 7.39 4.17 15.4 10.83 4.53 3.94 3.08 2.72 3.9 4.8 3.76 4.85 6.71 9.51c.27.36.54.73.77 1.08l6.12 7.75 4.89 7.61 1.4 4.3 1.32 3.17.77 6.39.23 1.05-.14 6.66.05.82-.59 6.3v1.41l-.77 5.52-.13 2.22-.54 4.85-.19 2.99-.22 4.49-.04 3.4.04 7.79.32 7.79.41 7.75.59 7.79.72 7.84.77 7.65.68 7.7.09 7.84-.27 7.61-.18 15.4-.77 15.54-.18 6.66.05 7.84.45 9.02.86 7.93 1.81 7.79 1.08 3.13 1.81 4.8 3.13 5.89 1.49 2.27 6.48 8.12 8.2 7.7 7.56 5.34 5.66 2.62 4.08 1.64 6.21 1.45 4.62 1.59 3.22.45 7.52 2.22h.5l1.77.45 5.21 2.77 2.85 3.76-.77 2.22.05.19-.09.22 1.76 5.07-.14 4.12 1.22 3.76 2 7.66 2.57 7.79.73 3.12 1.54 4.72 1.68 6.3.5 1.45 1.04 3.99 1.08 3.67.18 1.36 1.49 6.25.23 3.08.64 4.62.36 4.13.5 3.8.91 5.57 1.77 9.34 1.27 8.93.68 7.03.5 7.74.5 2.54.95 5.53 3.76 8.02 1 1.36 6.93 6.89 1.22.9 7.75 4.85 7.66 4.84 6.03 4.94 1.54 1.4 5.17 6.07 2.4 3.62 2.17 3.85 1.41 3.66 1.77 3.9 1.9 7.66.5 7.39-.14 7.79-.04 7.84.49 7.79 1.64 7.98.36-.09.18.27-.4.23 2.17 4.22 1.68 3.57.18.27c.64.68 1.27 1.4 1.86 2.08l7.39 5.93 2.08 1.41 6.34 3.99 7.66 5.44 7.71 6.25 6.75 6.07c.36.32.72.59 1.04.86l7.93 6.17 1.31.91 6.57 3.8 8.25 4.45 7.3 3.48 8.65 4.67 6.75 3.8 7.7 4.98 7.56 5.62 8.7 8.2 2.17-2.31-8.74-8.25-7.84-5.85-7.84-5.12c-2.31-1.27-4.58-2.54-6.85-3.8l-8.79-4.81-7.75-3.72-7.71-4.12-6.38-3.72-1.17-.77-8.79-6.88-6.71-6.07-7.84-6.39-7.85-5.53-7.88-5.03-7.39-5.84-1.68-1.95c-.5-1.05-1-2.09-1.49-3.17l-2.13-4.22-1.54-7.33-.45-7.52.05-7.66v-.09l.09-7.88-.54-7.88-1.95-7.93-1.9-4.26-1.41-3.67-2.35-4.3-2.49-3.77-5.44-6.38-1.81-1.72-6.16-5.03-7.93-5.03-7.66-4.8-.82-.59-6.66-6.52-.72-.96-3.49-7.42-.82-5.12-.49-2.22-.5-7.74-.68-6.84.05-.18-.77-4.85-.45-3.76-1.86-10.06-.91-5.39-.49-3.67-.36-4.08-.64-4.62-.22-3.08-1.49-6.53-.23-1.36-1.13-3.99-1.04-3.99-.5-1.45-1.67-6.3-1.55-4.62-.72-3.13-2.54-7.88-2.04-7.66-1.08-3.17.08-4.17-1.59-4.94.91-2.67-.18-.32.05-.32-4.21-5.52-5.89-3.08-2.72-.72h-.46l-6.98-2.09-3.3-.45-4.44-1.54-6.07-1.41-3.89-1.59-5.17-2.35-7.57-5.3-7.75-7.34-6.12-7.66-1.36-2.04-2.9-5.48-1.81-4.71-.95-2.81-1.68-6.98-.14-.63-.81-7.61-.41-8.79-.04-7.75.22-7.47.68-14.86.18-15.31.27-7.61-.09-8.07-.68-8.33-.91-8.61-.59-6.25-.55-7.75-.45-7.52.05-.14-.32-7.8-.09-7.7.09-3.31.18-4.35.18-2.86.54-4.89.13-2.13.78-5.53v-1.54l.63-6.39-.09-1 .14-6.93-.28-1.18-.81-6.75-1.4-3.44-1.49-4.62-5.17-8.12-6.21-7.84c-.22-.32-.49-.63-.72-1l-6.71-9.51-3.85-4.94-3.94-4.89-3.4-3.08-4.62-3.99-15.59-11.01-7.88-4.44-8.02-2.32-5.3-1.81-2.31-.91-7.44-5.38-1.31-1.14-6.48-5.89-2.4-1.86-5.35-4.85c-1.22-1-2.45-2-3.62-2.94l-4.12-3.63-7.75-6.44-7.7-6.7-7.74-7.53-7.75-7.79-6.88-7.42-2.31 2.17 6.88 7.43 7.8 7.88ZM846.71 253l-.32-7.79-.68-1.13-3.67-6.75-3.27-2.72-3.17-.59-4.58-1.18-.09.04-.09-.04-7.88 1.9-1.63.96-2.22 1.63-2.09 2-1.95 1.95-1.59 2.36-.9 1.59-2.4 7.84v.18l.18 3.08-.04 4.62.04.18 2.81 5.89.77 2 1.32 1.4 2.08.86 5.62 2.81h.14l.13.05.04.54-.04-.54 4.12-.77 3.81-.32 2.45-1.5 4.39-2.44 1.04-.82 2.95-4.08 2.12-3.13.6-2.09 1.99-5.66-.04-.14.04-.18Zm-.91.27-1.9 5.39-.63 2.17-1.95 2.81-2.99 4.12-.68.5-6.84 3.94-3.44.22-4.12.77-5.48-2.72-2.09-.86-1.04-1.27-.63-1.63-2.76-6.03v-4.35l-.18-3.12 2.32-7.66.81-1.46 1.49-2.17 2-2 1.9-1.9 2.22-1.58 1.63-.96 7.52-1.76 4.39 1.09 3.17.59 2.98 2.63 3.45 6.43.63 1.09.27 7.56-.05.14Z\",\n className: \"background_map_svg__cls-3\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m527.74 12.73 7.98 8.15 8.01 7.7 9.11 7.8 9.47 7.75 4.3 3.17 7.75 6.12 7.79 6.66 7.93 5.44 6.07 1.95 1.72.49 7.75 1.95 7.57 4.22 7.79 5.62 7.7 5.66 7.75 6.98 7.79 9.78 8.33 11.65 1.13 1.76 3.99 5.89 3.31 7.84c.08.46.13.91.18 1.36l1.49 6.25-.09 2.85.41 4.71-.27 3.12-.05 4.67-.36 2.68-.32 5.12-.23 2.09-.45 7.34-.14 6.12v1.54l.19 7.93.22 6.07.45 7.75.54 7.84.27 3.13.32 4.57.46 3.94.63 8.38.09 3.17.05 4.62-.22 3.08-.14 4.3-.4 3.44-.05 3.85-.41 3.9-.05 3.44-.4 4.31-.09 2.94-.45 4.8-.46 9.88.14 7.88.41 5.58.09 2.72.91 8.69.68 4.17 1.04 5.3.55 2.49 1.9 6.07.68 1.72.73 1.4 3.53 6.39 2.9 4.3 2.86 3.53 4.93 5.48 2.45 2.31 5.34 4.76 4.08 3.03 3.76 2.54 5.26 2.67 2.58 1.13 3.8 1.45 3.85 1.63 3.67 1.95 4.08 1.63 4.08 2.45 3.66 3.31 3.27 4.44 2.53 5.76 1.18 1.9.68 1.36 2.86 6.29 1.4 4.31 1.55 3.44 2.62 8.43 2.36 7.11 1.08 4.12 1.19 3.58 1.45 6.8.27.9 2.36 17.18 1.27 6.16.63 3.58.86 4.12.59 5.03.41 2.72.68 7.75.32 7.74.91 7.93.5 1.45 2.81 6.3 5.03 6.57 1.36 1.31 6.53 4.8 4.76 3.03 2.99 1.77 5.53 3.76 2.17 1.36 1.05.82 6.66 6.16 1.32 1.49 2.49 3.81 2.76 3.89 1.18 2.36 2.4 5.3.81 3.26 1.32 4.58.55 7.56-.14 7.75v4.98l-.09 2.81.27 5.12v2.68l1 6.12.13 1.67 1.49 4.08 1.86 3.9 5.98 6.66 1.41 1.13 6.48 4.44 7.71 5.12 8.11 5.93 7.43 6.03 1.9 1.76 5.89 4.71 3.85 3.04 3.9 2.72 8.83 5.07 6.76 3.22 15.49 7.79 8.2 4.94 7.3 4.75 3.44 2.54 4.31 3.44 4.44 4.26 3.31 3.44.63-.59-3.26-3.45-4.53-4.3-4.34-3.48-3.45-2.54-7.79-5.12-7.75-4.62-7.79-3.98-7.79-3.85-6.71-3.17-2.31-1.32-6.44-3.71-3.85-2.72-3.89-2.99-5.8-4.71-1.95-1.77-7.79-6.3-7.79-5.71-7.75-5.17c-2.13-1.45-4.26-2.89-6.39-4.35l-1.27-1.04-6.07-6.7c-.54-1.22-1.13-2.41-1.63-3.58l-1.49-4.03-.14-1.49-1-6.03v-2.72l-.27-5.07.09-2.81.13-12.73-.54-7.79-1.31-4.57-.81-3.26-2.45-5.48-1.18-2.36-2.86-4.03-2.49-3.76-1.31-1.59-6.8-6.25-1.05-.86-2.31-1.45-5.48-3.71-3.04-1.77c-1.59-1-3.13-2.04-4.66-2.99l-6.39-4.71-1.31-1.22-4.99-6.52-2.72-6.07-.5-1.54-.04-.4-.86-7.16-.05-1.5-.27-6.29-.64-7.8-.41-2.81-.63-4.98-.91-4.26-.59-3.49-1.28-6.17-1.31-9.29-1.04-7.79-.27-1.05-1.46-6.74-1.18-3.68-1.09-4.12-2.53-7.74-2.45-7.79-1.58-3.49-1.36-4.26-2.9-6.43-.73-1.41-1.13-1.76-2.58-5.94-3.4-4.62-3.67-3.3-4.22-2.54-4.12-1.63-3.63-1.99-3.99-1.63-3.85-1.49-2.49-1.04-5.12-2.63-3.76-2.54-3.98-2.99-5.4-4.76-2.36-2.22-4.93-5.48-2.81-3.44-2.85-4.22-4.22-7.7-.63-1.72-1.9-5.98-.55-2.45-1.04-5.3-.68-4.12-.86-8.61-.14-2.86-.4-5.39v-2.22l-.14-5.66.45-9.83.46-4.8.14-2.94.36-4.31.05-3.4.41-3.9.04-3.85.41-3.44.13-4.35.23-3.08-.04-4.71-.09-3.17-.64-8.47-.4-3.9-.36-4.58-.28-3.17-.54-7.74-.45-7.7.05-.09-.05-.13-.23-5.89-.18-9.42.14-6.12.45-7.25.23-2.13.32-5.07c.14-.91.27-1.76.36-2.67l.05-4.67.32-3.08-.45-4.85.09-2.95-1.49-6.29c-.05-.55-.13-1.04-.18-1.54l-.04-.09-3.27-7.74-5.21-7.84-8.42-11.69-3.04-3.85-4.76-5.94-2.04-1.86-5.76-5.26-7.79-5.71-7.8-5.62-7.93-4.39-9.38-2.41-6.12-1.99-7.57-5.21-7.79-6.66-7.79-6.15-4.3-3.13-3.49-2.95-5.93-4.85-9.1-7.74-8.21-7.84-7.38-7.66-7.02-7.75-6.89-7.75-.63.59 5.8 6.62 7.74 8.56ZM840.1 246.43l-.09-1.23-.91-1.54-.13-.04-.09-.14-2.72-1.22-5.03-2.62-.18.04-.14-.09-3.98 1.41-3.95 1.13-3.13 3.12-1.4 3.3-2.17 4.44.04.14-.09.14.32 1.4.68 6.3.09.13.04.13 5.62 5.4h.18l.19.13v.54-.54l4.71-.55 2.94.14.13-.09h.18l2.72-2.17 4.12-2.81.41-.78.68-1 1.36-4.8.5-1.41-.05-.09.05-.09-.9-6.7Zm-.41 7.97-1.45 4.89-.5.77-.27.59-3.99 2.67-2.67 2.17-2.77-.18-4.71.55-5.35-5.12-.68-6.12-.27-1.4 2.09-4.26 1.49-3.35 2.76-2.76 3.68-1 3.85-1.36 4.81 2.54 2.72 1.22.77 1.32.04.81.91 6.75-.46 1.27Z\",\n className: \"background_map_svg__cls-3\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m520.72 13.05 7.02 7.61.18.18 7.88 7.74 8.52 7.8 9.24 7.75 10.24 7.74 2.81 2.08 7.25 5.66 8.29 7.12.99.68 6.94 4.35 7.75 2.04 7.84 1.86.77.45 6.75 3.63 4.31 3.17 11.23 8.61 7.43 6.89 8.07 9.97 3.94 5.44 3.8 5.98 1.13 1.67.95 2.18 2.77 5.66 1.54 6.34.45 1.36.68 7.61-.04 7.52v.14l-.46 7.16v.63l-.41 6.71-.09 7.66.13 7.93.27 8.02.86 16.35v.09l1.23 16.67.22 7.88-.5 7.25-.86 6.75-.59.05.59.09-.18 1.95-1 12.41-.13 1-.45 6.21-.18 1.54-.36 7.79.13 5.8.09 1.99.45 6.34.87 8.7 1.4 9.1 1.59 6.98 2.49 7.79 2.9 6.25.86 1.54 5.3 7.79 1.63 2.09 5.25 5.75 2.58 2.54 5.84 5.21 1.95 1.58 5.39 3.85 2.4 1.63 14.78 7.7.77.32.82.45 6.84 4.58 3.36 3.08 4.35 5.21 1.54 2.49 1.72 3.26 2.81 4.49 1.68 3.35 1.95 4.3.91 2.9 1.9 4.9 2.99 9.69 1.9 5.76.55 2.49 1.44 5.21.6 4.67.59 3.13.77 5.84.31 1.95 1.46 7.65v.09l.18.86 1.36 6.84.23 1.45v.27l.91 6.03.68 7.75.14 3.35.09 4.39.49 3.94.28 3.85 2.04 6.3.4 1.54 1.18 2.09 4.34 5.8c1.18 1.14 2.36 2.17 3.49 3.22l6.44 4.66 3.53 2.13 5.62 3.27 3.44 2.36 4.26 3.04 4.94 4.62 2.76 3.17 3.17 4.49 3.26 6.48.73 1.36 2.27 7.66.13 1.72.45 5.85-.32 15.54.09 2.08.05 5.71.41 2.54.5 5.25 1.77 4.8.91 3.17 2.13 2.99 4.25 4.76 3.58 3.04 9.47 6.44 6.07 4.12 7.74 5.76 4.85 3.98 2.94 2.31 7.8 6.25 7.74 5.34 2.86 1.63 4.98 2.59 7.75 3.67 3.08 1.5 4.67 2.17 7.75 3.99 7.75 4.58 7.75 5.34 3.48 2.9 4.26 3.4 7.74 8.07v.59-.59l.63-.59-6.89-7.25-.91-.86-4.25-3.45-3.54-2.9-.81-.59-6.98-4.81-7.75-4.57-7.79-4.04-4.71-2.17-3.08-1.49-7.75-3.63-4.93-2.58-2.77-1.59-7.74-5.35-10.74-8.56-4.85-3.94-7.74-5.84-7.75-5.21-7.75-5.3-3.49-2.9-4.17-4.66-2.17-3.08-.81-2.85-1.72-4.81-.5-5.12-.36-2.4-.09-5.75-.09-2.04.18-5.62.18-9.93-.63-7.79-2.31-7.84-.78-1.4-3.21-6.44-3.26-4.58-2.81-3.26-4.98-4.67-4.4-3.17-3.44-2.31-9.11-5.39-6.34-4.62-3.4-3.04-4.26-5.71-1.18-2.08-.36-1.4-2.04-6.26-.27-3.71c-.19-1.36-.32-2.63-.5-3.85l-.08-4.44-.14-3.35-.68-7.8-1.09-7.79-1.63-7.88-1.72-9.52-.72-5.85-.63-3.26-.59-4.48-1.45-5.35-.54-2.45-2.49-7.8-2.44-7.74-1.9-4.9-.86-2.9-1.99-4.44-1.68-3.36-2.86-4.49-1.72-3.31-1.54-2.49-4.44-5.3-3.4-3.22-6.93-4.62-.91-.5-.82-.32-14.63-7.7-2.44-1.63c-1.77-1.28-3.58-2.54-5.35-3.77l-1.9-1.54-5.8-5.21-2.57-2.54-5.17-5.71-1.63-2-5.26-7.7-.81-1.54-2.85-6.17-2.49-7.7-1.59-6.93-1.36-8.65-.9-9.06-.55-8.29-.13-5.71.36-7.74.18-1.59.45-6.17.14-.99 1-12.42.18-1.94v-.19l.86-6.7.5-7.29v-1.54l-.18-6.44-1.32-16.9.04-.05-.45-7.61v-.09l-.04-.36-.36-8.06.05-.09-.05-.13-.22-6.84-.18-8.88.09-7.61.45-6.7-.05-.63.46-7.11v-.28l.04-7.52-.04-.28v-.04l-.68-7.48-.41-1.36-1.59-6.48-2.81-5.66-.91-2.13-1.23-1.86-3.76-5.98-4.03-5.48-1.81-2.31-5.98-7.44-7.79-7.25-1.13-.9-10.19-7.74-4.27-3.13-7.93-4.31-7.71-1.81-1.99-.59-5.8-1.49-7.57-4.8-8.34-7.12-7.25-5.71-2.85-2.08-10.15-7.7-9.24-7.8-8.79-7.97-7.79-7.7-6.97-7.52-6.66-7.84-6.75-7.7-.68.59 6.8 7.75 6.66 7.74Z\",\n className: \"background_map_svg__cls-3\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m507.63 5.3 4.57 5.53 8.61 10.01 7.84 7.74 14.68 13.23 2.72 2.36 5.03 4.08 4.66 3.62 10.33 7.8 16.08 13.23 3.63 2.27 4.35 2.4 2.9.59 12.64 2.81 7.52 4.17 7.79 6.03 7.75 6.12 7.71 7.11 1.36 1.72c1.45 1.81 2.85 3.67 4.31 5.48l1.81 2.22 5.07 7.7 3.76 7.79.27 1 2.17 6.71.32 3.49.73 4.04v4.39l.27 3.35-.27 4.4.04 3.4-.27 4.13-.09 7.7.18 7.93.41 11.37.81 15.45.81 13.96.19 7.93-.41 7.29-.23 1.81-.49 5.17-.46 2.54c-.13 1.54-.27 2.99-.36 4.44l-.59 3.36-.22 3.57-.64 4.17-.18 2.81-.63 4.94-.36 7.79v1.9l.49 8.29.63 5.39.32 3.3 1.32 9.06.54 3.17 1.68 7.79.95 3.08 1.49 4.71 1.32 2.81c.72 1.67 1.49 3.31 2.22 4.98l2.77 4.66 2.13 3.12 5.71 7.07.68.77 7.93 7.75 6.98 5.62 7.79 5.48 7.98 4.71 7.52 4.49 3.94 2.99 3.76 3.26 3.9 4.4 3.8 4.85 1.81 2.85 1.81 3.62 2.36 4.08 1.77 4.35 1.31 3.4.63 1.95 2.08 5.8 1.72 5.76.68 1.99 2.04 7.66.14.91 1.32 6.88.32 2.49.86 5.3.76 4.12 2.22 11.37 1.04 7.39.73 8.06.18 7.74.59 7.93.5 1.54 1.68 6.25 4.71 8.25 7.66 6.93.73.49 14.82 8.98 5.03 3.76 2.72 1.9.77.77 6.8 7.79 4.3 7.7 1.87 5.94.59 1.72.63 7.56-.45 15.54.05 6.84-.05.9.73 7.98.22.86 1.99 6.98 5.39 7.7.5.49 7.75 6.44 1.36.95 6.48 4.26 5.03 3.49 2.68 1.95 7.61 5.8 9.88 7.75 5.85 4.44 4.94 3.35 2.85 1.77 3.4 1.63 4.39 2.27 4.53 2.13 3.26 1.36 7.75 3.58 7.7 3.98 3.22 1.95 4.53 2.67 2.81 1.9 4.94 3.62 4.93 4.08 2.81 2.54 4.89 5.17 2.85 3.67.68-.54-2.8-3.63-4.98-5.25-2.86-2.62-5.03-4.13-4.94-3.57-2.81-1.95-7.75-4.62-7.84-4.08-7.75-3.54-3.22-1.4-4.53-2.08-4.44-2.31-3.26-1.54-2.85-1.77-4.89-3.31-5.85-4.44-1.95-1.54-7.88-6.21-7.65-5.8-2.72-1.95-5.03-3.49-7.75-5.17-8.15-6.84-.68-1.09-4.67-6.66-2.13-7.7-.68-7.44.05-.9-.05-6.88.05-.86.41-14.68-.68-7.93-.59-1.68-1.86-6.03-4.39-7.88-6.8-7.79-.86-.82-2.81-1.99-5.03-3.76-15.46-9.43-7.88-7.16-.32-.59-4.03-7.25-1.59-6.03-.54-1.63-.45-7.06-.28-8.29-.63-7.8-1.13-7.79-2.18-11.33v-.04l-.05-.18-.77-3.94-.86-5.25-.32-2.49-1.41-7.74-2.08-7.84-.68-1.99-1.77-5.75-2.08-5.8-.59-1.95-1.36-3.49-1.77-4.3-2.35-4.17-1.81-3.63-1.86-2.94-3.89-4.89-3.9-4.44-3.85-3.36-3.99-3.04-7.93-4.8-7.61-4.39-7.75-5.44-6.93-5.62-7.88-7.7-6.26-7.7-2.12-3.08-2.72-4.57-3.49-7.75-1.54-4.67-.91-3.04-1.68-7.74-.54-3.13-1.27-9.01-.31-3.35-.63-5.34-.5-8.25-.05-1.81.36-7.74.64-4.94.18-2.81.63-4.12.23-3.58.59-3.35.32-4.39.5-2.54.49-5.26.23-1.76.41-7.43-.19-7.97-.36-6.12v-.09l-.05-.18-.05-1.81-.36-5.71v-.23l-.41-7.52v-.23l-.36-7.61-.45-11.28-.14-7.88.04-7.66.27-4.12-.05-3.44.27-4.3-.27-3.45.05-4.34-.77-4.17-.32-3.63-2.17-6.7-.32-1.13-3.81-7.84-5.16-7.79-7.48-9.47-7.79-7.25-8.38-6.66-7.15-5.48-7.98-4.44-15.54-3.4-4.03-2.22-3.49-2.17-16.13-13.32-10.33-7.74-4.62-3.58-5.12-4.12-2.63-2.31-14.64-13.19-7.79-7.74-6.7-7.75-6.48-7.79-3.22-3.63-3.85-4.13-.63.59 3.85 4.13 3.17 3.63Z\",\n className: \"background_map_svg__cls-3\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m501.42 5.3 2.99 3.44 3.58 4.3 4.21 5.3 2.13 2.45 5.67 6.16 1.63 1.63 6.12 5.3 2.72 2.45 5.07 4.35 3.76 3.45 4.04 3.49 7.74 6.34 8.97 6.84 6.57 5.12 10.93 9.24 4.62 3.53 7.98 4.31 9.51 1.76 6.03 1.28 7.52 4.3 15.54 12.42 7.71 7.2 3.12 3.89 5.39 7.66.81 1.63 3.17 6.02 2.67 7.8 1.36 7.57v1.17l.54 6.57-.09 1.59.09 6.21-.09 1.54-.05 7.75.18 7.93.27 8.06 1.63 32.62.23 7.93-.13 3.99-.19 3.4-.59 4.3-.23 2.63-.95 5.12-.14 1.54-1.04 6.2-1.04 7.8-.81 7.75-.37 7.79.41 7.8.86 7.79 1.13 8.47 1.22 7.07 1.73 7.79 2.31 7.74 1.81 4.39 1.54 3.45 2.22 3.76 2.32 4.03 1.76 2.45 4.26 5.34 3.53 3.85 3.98 3.95 3.81 3.3 7.79 6.25 7.79 5.53 7.75 4.85 5.03 3.36 2.68 1.99 6.34 5.75 1.36 1.32 5.3 6.34 2.44 3.54 2.36 4.12 1.72 4.08 1.68 3.67 2.85 7.75.36 1.22 2.22 6.52 1.22 4.67.91 3.03 1.27 6.88 1.63 9.38 2.9 14.77 1.13 7.7.63 7.75.09 5.48-.04 2.27.36 5.8v1.95l1.86 7.93.13.36 3.63 7.43 4.22 5.03 3.17 2.85 4.66 3.17 15.5 9.24 4.12 3.08 3.58 3.13 4.03 4.53 3.71 5.62 1.18 2.17.49 1.59c.73 2 1.41 3.99 2.13 5.94v.14l.36 4.08.32 3.49-.36 11.96-.22 3.58.04 3.95-.18 3.8.36 4.17.04 3.63 1.45 5.66.36 2.27 1.77 3.22 2.99 4.58 4.85 4.85 3.71 3.03 4.12 2.94 7.34 4.8 8.16 5.93 15.54 12.01 7.8 5.67 7.79 4.76 5.61 2.72 2.22.95 7.75 3.22 7.84 3.62 7.61 3.85 7.7 4.71 7.8 5.75 1.27 1.05 6.48 5.93 1.68 1.77 5.98 7.75.04.04v-.04l.78-.32-.19-.27-5.89-7.66-1.76-1.86-6.48-5.98-1.31-1.09-7.79-5.71-1.5-1-6.3-3.8-7.79-3.94-7.79-3.58-9.93-4.17-5.53-2.67-7.74-4.76-7.8-5.62-15.54-12.01-8.21-5.93-7.33-4.8-4.08-2.95-3.58-2.95-4.85-4.8-2.85-4.44-1.81-3.27-.27-1.9-1.46-5.71-.05-3.45-.36-4.12.19-3.8-.05-3.98.27-3.58.36-11.97-.36-3.58-.36-4.21-2.18-6.16-.49-1.68-1.22-2.22-3.72-5.66-4.12-4.62-3.67-3.22-4.17-3.12-15.5-9.25-4.57-3.13-3.09-2.72-4.21-5.03-3.67-7.66.54-.18-.6.04-1.72-7.52v-1.86l-.36-5.75v-2.31l-.09-5.57-.63-7.7-1.13-7.79-2.9-14.82-1.45-8.43-1.45-7.79-.9-3.08-1.27-4.71-3.44-10.15-1.95-5.39-1.77-3.72-1.62-4.03-2.45-4.26-2.45-3.58-5.34-6.43-1.45-1.41-6.39-5.75-2.72-2.04-5.17-3.45-7.65-4.76-7.75-5.53-7.74-6.2-3.76-3.26-3.98-3.94-3.49-3.81-4.21-5.25-1.73-2.4-2.31-4.03-2.17-3.67-1.59-3.58-1.72-4.12-.73-2.54-1.59-5.21-1.72-7.74-1.23-7.02-.72-5.08.04-.09-.04-.13-.41-3.17-.95-9.01v-.28l-.32-6.12.09-1.63.27-6.12.13-1.18.77-7.02.41-3.54.49-3.3 1.09-6.66.09-1.54.95-5.12.27-2.63.59-4.3.23-3.53.08-3.99-.18-7.98-.22-3.48v-.27l-.19-4.4-.22-3.12.05-.05-.05-.18-.36-7.52v-.23l-1-23.11-.14-6.2.04-1.54v-6.16l.09-1.54-.09-6.21.09-1.54-.5-6.66v-1.13l-1.45-7.84-2.62-7.84-4.04-7.79-.86-1.27-4.67-6.52-3.12-3.94-4.17-3.9-3.62-3.4-15.54-12.46-7.98-4.53-7.75-1.59-7.79-1.45-7.52-4.03-4.62-3.58-10.96-9.24c-2.17-1.72-4.39-3.4-6.57-5.12l-1.18-.91-7.75-5.94-7.74-6.29-3.99-3.49-3.81-3.44-5.07-4.35-2.67-2.44-6.12-5.26-1.63-1.63-5.66-6.12-2.08-2.45-4.21-5.3-3.58-4.31-3.03-3.48-4.76-5.03-2.8-2.72-.6.64 2.77 2.67 4.75 5.04ZM924.41 841.41l-.5-.18-4.26-5.34-1.4-1.59.59-6.16v-.36l-.19-.68 1.36-5.25.05-2.41 1.04-4.3.36-3.31 1.13-7.88-.04-3.13.49-4.57v-.37l-.68-3.3.18-4.35-3.45-7.02-.18-1.22-.13-.14v-.18l-1.54-1.54-.22-.05-.14-.09-1.32-.18-6.48-2.85-4.8-.68-3.09-.86-7.06-1.49-2.17-.64-5.94-2.31-6.75-5.12-.36-.45-3.67-6.66-1.91-5.71-.91-2.08-1.22-2.95-2.36-4.89-5.75-8.07-7.97-6.43-2.68-1.72-5.17-2.94-7.33-4.35c-.14-.09-.28-.14-.37-.23l-7.7-5.35-3.26-2.49-4.22-4.98-1.86-2.4-1.13-2.94-2.22-4.44-2.45-7.98-3.08-7.65-4.98-7.98-6.8-7.97-8.83-7.16-1.36-.91-6.62-4.03-7.97-3.9-7.7-3.26-5.48-2.13-6.3-2.27-3.49-1.72-4.89-3.04-2.85-1.49-1.9-1.27-5.57-5.12-2.27-2.44-6.62-7.79-6.75-6.3-2.31-1.72-5.75-3.76-7.61-3.98-7.65-5.67-2-1.86-2.31-4.39-1.86-2.99-1.13-2.54-1.86-4.98-.27-2.04-1.22-5.34.31-2.9-.05-4.66.19-3.08-.28-4.85-.95-4.39v-.05l-1.04-3.67-2.68-6.52-.72-1.54-4.71-7.89-2.49-3.71-3.44-4.26-4.44-4.57-4.03-3.36-3.94-2.85-8.02-4.53-7.84-3.54-5.03-2.04-6.89-2.72-3.49-1.63-3.53-1.86-4.12-2.13-3.49-2.04-4.35-2.76-7.84-4.26-2-.9-5.98-2.13-16.68-5.66-6.57-2.04-3.31-1.22-4.4-1.45-7.25-2.95-7.97-4.68-3.53-2.67-2.95-7.07.05-6.66v-.59l.54-6.48.14-1.04 1.36-4.72 1.09-2.58 1.36-2 2.27-2.4 1.31-1.68 1.41-1.4 2.08-2.99 2.85-3.04.82-1.08.91-1 .04-.23.09-.14.18-6.3.41-1.99-.13-.19.04-.27-2.17-3.13-5.39-5.25-6.2-3.49-4.39-2.31-3.26-2.04-4.35-3.17-5.53-4.48-2-2.77-3.63-4.66-2.76-7.34-1.04-10.42-.86-5.25-4.85-8.34-2.58-1.76-6.39-5.98-1.54-.86-2.63-1.86-5.03-3.4-2.13-1.72-13.73-7.57-.86-.36-7.2-2.17-7.85-1.77-15.49-2.95-7.62-1.72-7.7-2.13-4.67-1.68-3.03-.95-5.07-2.09-2.45-1.49-7.71-5.07-1.4-1.05-6.3-7.2-1.18-7.07 1.04-8.25 1-6.88 2.67-15.63.05-.27v-.09l-1.5-7.93-.18-.54-7.11-8.02-8.65-7.8-1.63-1.63-7.74-6.44-8.66-7.43-3.85-7.29-3.26-14.91 1.36-6.84 3.26-2.85 3.13-2.49 2.94-1.9 3.13-1.72 1.67-1.04 3.22-1.86 4.85-3.17 3.71-4.3 7.62-7.84 3.48-3.4 4.71-3.76 3.81-4.08-.28-.28.14-.27.41.27 3.13-4.57 1.86-3.4.81-2 2.04-4.12.73-1.77 1.13-6.07.72-2.03-.04-.19.04-.13-1.49-6.93-.22-1.46-1.09-1.49-5.12-6.57-.23-.18a33.89 33.89 0 0 0-2.35-1.81L395.07 89.2l-5.71-5.44-2.59-2.26-5.39-7.48.05-.14-1.41-6.66.36-.95 1.59-3.27.82-2.04.41-.68 3-2.67 2.98-2.08 1.4-1.27 1.73-1.32 4.62-2.86c1-.72 1.95-1.4 2.95-2.17l4.35-3.45 3.71-4.48 1.86-3.22 1.04-2.22 1.54-5.85.13-.95-.18-7.25-.23-1.32-1.67-6.8-3.58-8.06-4.76-8.79-2.85 1.49 4.71 8.65 3.35 7.52 1.86 7.43.14 6.88v.41l-1.41 5.3-.86 1.99-1.59 2.76-3.31 4.03-4.16 3.35-2.76 2.04-4.63 2.86-1.95 1.49-1.31 1.13-2.99 2.08-3.8 3.4-.55 1.09-.91 2.17-1.59 3.3-.73 1.81.05.19-.09.18 1.81 8.52.18.18c.18.23.36.45.49.59l5.12 7.11 2.85 2.54 5.66 5.44 20.25 15.54 4.89 6.25.68.91 1.45 7.07-.49 1.41-1.13 6.03-.59 1.4-2.04 4.17-.73 1.86-1.68 3.08-3.12 4.53-3.49 3.76-4.57 3.67-3.85 3.62-7.66 7.93-3.58 4.12-4.31 2.81-3.21 1.86-1.68 1.04-3.08 1.77-3.13 1.95-3.35 2.68-4.17 3.71-.27.86-1.41 7.39v.41l3.45 15.81 4.48 8.38 9.24 7.88c2.49 2.08 4.98 4.17 7.38 6.12l1.63 1.58 8.47 7.71 6.62 7.38 1.31 7.02-2.63 15.54-1.13 7.52-.72 6.16-.28 1.54v.36l1.45 8.38 7.02 8.06 1.77 1.36 7.84 5.17 2.54 1.54 5.57 2.36 3.13.95 4.66 1.67 7.84 2.22 7.98 1.81 15.35 2.9 7.66 1.72 6.75 1.99.68.32 13.28 7.25 2.13 1.68 5.16 3.49 2.58 1.86 1.4.81 6.21 5.81 2.49 1.81 4.12 7.2.68 4.4 1.08 10.6 3.08 8.29 3.85 4.99 2.22 3.08 5.89 4.8 4.53 3.31 3.44 2.12 4.49 2.41 5.85 3.22 4.71 4.62 1.49 2.13-.18.91-.19 5.89-1.04 1.31-2.9 3.04-1.99 2.9-1.41 1.4-1.45 1.81-2.22 2.36-1.63 2.4-1.41 3.13-1.49 5.07-.23 1.54-.54 7.25v.09l-.09 7.2 3.67 8.75 4.12 3.08 8.34 4.93 7.65 3.13 4.44 1.49 3.35 1.22 7.75 2.45 15.49 5.21 5.76 2.08 1.72.77 7.71 4.17 4.35 2.72 3.57 2.13 4.22 2.18 3.58 1.86 3.58 1.72 11.96 4.76 7.66 3.45 7.66 4.35 3.8 2.72 3.76 3.08 4.26 4.44 3.26 3.99 2.4 3.58 4.57 7.61.68 1.45 2.49 6.12 1 3.44.91 3.99.22 4.57-.13 3.03.04 4.49-.36 3.08v.41l1.27 5.53.32 2.22 2 5.48 1.22 2.72 1.95 3.17 2.67 4.98 2.41 2.17 7.84 5.8 7.8 4.12 5.57 3.63 2.04 1.49 6.48 6.07 6.71 7.84 2.31 2.45 5.66 5.3 2.31 1.59 2.99 1.54 4.94 3.08 3.67 1.81 6.57 2.4 5.39 2.09 7.7 3.27 7.56 3.71 6.48 3.94 1.13.77 8.43 6.75 6.49 7.56 4.76 7.52 3.08 7.66 2.31 7.66 2.31 4.62 1.31 3.35 2.17 2.86 4.44 5.26 3.62 2.81 7.88 5.48 7.79 4.58 5.12 2.94 2.5 1.59 7.52 6.02 5.21 7.3 2.27 4.71 1.22 2.94.82 1.95 1.95 5.66 3.85 7.21.81 1.04 7.52 5.71 6.48 2.59 2.44.68 7.03 1.49 3.03.91 4.8.63 6.48 2.85.95.18.27.27.14.86 3.26 6.48-.18 4.12.68 3.36-.45 4.39.04 3.08-1.08 7.75-.36 3.03-1.05 4.53-.04 2.36-1.41 5.39-.05.37v.18l.19.86-.68 7.02.18.22v.23l2.09 2.36 4.48 5.66.41.36 1.68.59.59.09 7.74 2.21.32-.31.32-.14.72-2.44-8.42-2.44-.64-.09Z\",\n className: \"background_map_svg__cls-3\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m495.8 7.66 5.39 6.12 10.15 12.54 2.86 3.08 5.02 4.81 3.63 3.08 4.17 3.22 5.25 4.53 2.5 1.99 7.79 6.93 8.2 6.62 9.97 7.7 5.12 4.25 7.83 6.76 5.99 4.57 1.86 1.32 8.11 3.85 6.25 1.09 9.33 1.94 7.3 4.31 15.4 12.5 6.16 5.8 1.45 1.5 4.4 5.98 3.21 5.57 1 1.95.59 1.63 2.26 5.89 1 4.98.68 2.63.55 6.21.18 1.41.13 6.57.09 1.08-.05 6.71.24 7.97.35 8.11.77 16.13v.09l.68 15.36.28 8.83-.23 7.39-.91 6.71-1.04 6.61-.27 1.18-.77 5.57-.45 2.22-.55 4.62-.54 3.18-.36 3.71-.59 4.12-.41 7.8v.04l.45 7.93.41 3.71 1.59 11.88 1.31 7.83 1.72 7.89 2.27 7.75 1.95 4.75 1.17 3.13 2.13 4.03 2.23 3.94 5.66 7.93 7.84 8.38 8.56 7.44 7.16 5.61 7.79 5.66 7.7 5.13 3.99 3.12 3.67 2.72 7.66 7.34.86 1.04 2.26 3.31 3.17 4.39 1.23 2.18 2.49 5.3 1.49 4.08 1.45 3.67 2.82 8.24 2.08 7.02.58 3.36.96 4.35 1.36 7.84 3.07 15.41 1.14 7.65.64 7.66.04 2.67-.09 5.16.18 2.72v4.94l.86 3.9.64 4.21 3.3 8.11 6.3 8.07 2.17 1.85 4.63 2.94 3.3 2.27 1.86 1.09 5.89 3.17 7.62 4.72 7.61 6.7.4.45 5.26 7.66 1.76 4.44 1.05 2.9.68 7.34-.27 7.66-.46 7.84v.99l-.32 6.8.1.81.09 6.94.31 1.4 1.04 6.93 2.82 4.99 1.31 2.94 1.77 2.18 5.98 5.93 2.04 1.64 4.39 2.94 3.4 2.4 7.7 5.34 4.62 3.31 3.13 2.49 7.79 5.94 2.22 1.63 7.34 5.48 5.98 4.22 6.62 3.67 1.4.68 1.04.41 6.8 2.89 6.44 2.54 8.96 3.94 7.61 3.85 7.66 4.85 5.26 3.9 2.4 1.99 6.11 5.62 1.51 1.72 4.48 5.76 2.99 5.8v.26h.14l.54 1 2.81-1.45-3.63-7.11-4.84-6.25-1.59-1.82-6.39-5.93-2.54-2.04-5.39-4.03-7.88-4.99-7.84-3.98-9.15-4.03-6.39-2.54-6.84-2.9-.91-.32-1.27-.63-6.3-3.49-5.93-4.12-17.27-13.01-3.11-2.53-4.72-3.4-7.75-5.3-3.39-2.45-4.27-2.86-1.76-1.35-5.8-5.8-1.46-1.72-1.13-2.59-2.67-4.89-.95-6.21-.27-1.17-.09-6.8-.05-.64.32-6.7-.04-1 .41-6.34.31-9.25.05-.08-.77-7.84-1.18-3.45-1.9-4.79-5.49-8.03-.68-.77-7.88-6.98-8.06-5.03-5.99-3.21-1.62-1-3.32-2.22-4.39-2.81-1.81-1.54-5.8-7.38-3.08-7.48-.55-3.85-.81-3.62-.05-4.76-.13-2.72.04-5.07-.04-2.82-.64-7.88-1.13-7.84-3.08-15.27v-.13l-1.36-7.88-.96-4.4-.67-3.44-2.27-7.84-2.67-7.84-1.54-3.71-1.5-4.12-2.58-5.54-1.26-2.3-3.36-4.68-2.27-3.34-1.08-1.23-7.89-7.66-3.89-2.9-4.04-3.12-7.74-5.16-7.7-5.63-7.07-5.52-8.34-7.2-7.75-8.39-5.25-7.29-2.27-4.03-1.85-3.49-1.19-3.13-1.9-4.53-1.99-6.98-1.9-8.29-1.32-7.7-1.53-11.83-.37-3.58-.32-4.57.05-.14-.18-2.9.36-7.56.55-4.08.36-3.63.54-3.17.59-4.53.4-2.22.78-5.53.27-1.13 1.09-6.84.9-6.84.28-7.66-.23-8.02-.73-16.26v-.23l-.77-15.5-.31-7.74-.28-8.79v-6.75l-.09-1.13-.09-6.57-.22-1.64-.55-6.2-.73-2.95-.95-4.98-2.44-6.3-.54-1.68-1.23-2.36-3.26-5.66-4.62-6.29-1.72-1.82-6.3-5.94-7.75-6.29-7.8-6.39-8.24-4.84-9.79-2-5.84-1-7.29-3.44-1.77-1.22-5.84-4.49-7.8-6.75-5.16-4.26-10.02-7.79-8.06-6.48-7.84-6.93-2.49-2.04-5.3-4.53-4.17-3.22-3.49-2.99-4.89-4.62-2.72-2.95-10.15-12.54-5.48-6.21-1.59-1.64-6.25-6.06-2.9-2.54-2.13 2.4L488.1.13l7.7 7.53z\",\n className: \"background_map_svg__cls-3\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m414.79 8.79 1.81 4.03 1.95 7.43.77 8.02-.81 7.33-1.9 5.58-1.27 2.35-1.49 2.49-3.54 4.17-1.08 1.04-2.68 3.04-2.99 3.13-1.81 1.72-2.13 3.94-1.81 4.03.14 2.32.5 5.61 5.07 7.88 7.8 6.89 1.13.86 6.66 4.49 5.07 3.26 2.63 2.04 6.25 5.75 1.41 2.72 1.99 4.76-.18 1.67.04 5.89-.59 1.18-1.22 3.49-.91 2.13-.27.91-2.18 4.4-1.36 3.35-.72 2.36-2 5.44-2.17 5.75-1.04 1.9-1.49 3.31-2.85 4.94-3.13 4.53-2.13 2.67-1.18 1.67-1.81 1.77-2.04 2.08-2.72 2.18-1.49 1.36-1.45 1.04-2.85 2.44-3.77 2.9-.59.68-.63.95-2.72 3.54-1.54 2.86-.68 2.9-.36 4.9.5 3.17.91 4.8 3.99 7.8.64.77 5.57 7.02 7.25 7.79 2.04 1.73 7.11 6.03.63.63 7.29 7.07.36 1.54 1.41 6.03-1.5 7.48-.04.18-1.05 7.75-.22 6.39-.13 1.4.9 7.98.63 1.36 3.71 6.52 4.17 3.71 4.76 4.04 3.08 1.63 7.79 3.58 6.44 2.62 1.4.36 7.79 1.63 7.7 1.76 7.74 2.04 7.75 2.72 1.36.59 6.39 2.63 7.79 3.44 7.74 3.58 7.84 2.49 7.89 1.95 7.56 2.54 4.3 1.81 3.44 1.32 3.85 2.08 2.22 6.07.68 1.4-1.18 5.62-.72 9.83.72 5.8.14 2.13 1.89 4.12 1.95 3.81 5.89 5.75 1.9 2 5.89 3.89 5.39 3.85 2.36 1.86 6.21 5.8 1.45 7.47-2.31 5.35-.68 2.35-2.04 2.49-2.62 3.58-1.18 1.44-3.17 3.49-3.76 4.49-2.67 4.71-1.36 2.99-.64 2.99-.81 4.89v.14l.32 2.31.32 5.39.05.22 5.12 6.88.95 1 6.94 3.44 5.75 2.27 2.04.91 3.45 1.18 4.39 1.32 1.76.49 10.51 2.68 3.26.77 9.47 2.49 5.94 2.41 5.25 2.81 2.45 1.13 7.79 4.98 5.98 4.13 1.86.95 7.7 4.26 4.21 2.58 3.53 1.95 7.75 5.08 7.7 6.61 1.45 1.72 6.3 8.74 7.74 14.05 3.58 8.11 1.81 5.39.63 2.31 1.72 10.38 1 5.3.95 1.86 2.4 5.84 3.49 5.21 1.95 2.63 5.85 6.12 1.81 1.72 5.98 4.53 3.8 3.22 3.9 3.22 4.21 4.48 3.54 4.04 2.94 3.71 6.7 7.79 5.98 5.3 3.31 2.49 4.53 2.54c1.63.77 3.22 1.54 4.76 2.27l6.07 2.99 4.66 2 4.3 2.27 3.4 1.67 2.76 1.81 5.03 2.95 6.43 4.76 9.42 7.7 7.11 7.66 4.8 7.7 3.17 7.93 2.81 7.61 4.58 7.8.45.54 7.07 7.34.77.59 7.84 5.3 2.94 1.9 4.76 2.9 7.65 5.21 7.07 7.25.63.86 3.85 6.84 3.27 7.21.68 1.54 3.71 6.85 4.22 4.98 4.53 2.9 3.26 1.59 7.84 1.86 3.85.41h.13l3.81-.36 3.72.27.13-.08h.14l3.94-2.54 1.09.18.09-.41.41-.05-.05-1 3.54-2.72.05-.18.13-.14.54-4.76 1.09-1.27 1.17-3.26 1.04-2.4.09-1 1.86-4.66.46-2.95.86-3.53.49-4.21.54-2.54.64-5.21.36-1.54 1.09-6.75.23-7.38-.09-.41-1.95-7.43-3.99-7.88-1.67-2.08-4.98-5.76-2.81-2.59-6.3-5.21-1.49-1.09-7.8-5.03-3.22-1.68-4.58-2.31-4.22-1.86-3.62-1.49-7.74-2.95-1.45-.63-6.25-2.22-7.84-3.76-7.62-4.63-4.57-3.4-3.21-2.31-6.75-5.44-4.94-3.9-5.03-3.85-14.31-9.51-7.62-6.03-6.43-7.7-1.41-3.13-1.72-4.48v-1.59l-.86-6.02.18-2.36-.04-5.26.27-2.27.27-5.52.18-1.77.5-7.29.27-6.53-.86-7.93-1.4-3.21-1.81-4.53-2.77-4-3.4-3.89-4.44-3.99-5.71-3.85-2.13-1.32-2.86-1.54-9.34-4.9-3.26-2.04-6.84-5.71-.81-1.04-4.26-6.62-1.86-5.98-.68-1.73-1.09-7.61v-7.8l.09-7.65-.73-8.61-1.49-9.24-2.63-13.23-1.4-7.79-1.68-7.75-2.36-7.79-2.76-7.75-2.45-6.12-.76-1.72-4.26-7.75-2.81-3.89-3.44-3.94-4.35-4.31-4.3-3.49-3.53-2.76-7.16-5.03-8.34-6.07-7.74-6.07-4.17-3.35-3.57-3.08-4.94-4.62-2.81-3.04-3.94-4.67-5.21-7.66-1.36-2.85-2.57-4.89-2.9-7.7-.19-.77-2.04-6.98-.68-3.44-.95-4.3-1.27-7.75-.91-6.57-1.13-8.98-.45-7.61.4-7.7L646 261l.95-5.75.27-1.95.91-4.62.45-3.12.77-3.4 1.09-6.7.63-5.48.14-1.59.13-7.61-.22-7.97-.59-13.91c-.05-.77-.05-1.46-.09-2.17v-.14l-.05-.18-.4-7.93v-.27l-.22-4.85-.23-3.17-.18-4.58-.23-3.53-.09-4.31-.18-3.76v-3.89l-.32-4.17-.04-3.58-.77-5.03-.28-2.77-1.9-7.79-.63-1.59c-.91-2.09-1.81-4.17-2.72-6.26l-4.66-7.84-.41-.54-7.84-8.06-7.79-6.25-7.74-6.48-3.68-2.31c-1.4-.86-2.76-1.72-4.17-2.54l-.14-.05-3.49-.73-4.26-.95-7.79-1.22-4.98-2.04-2.54-1.18-7.75-5.39-10.28-8.88-5.3-4.44-7.75-6.12-7.79-6.34-7.75-6.88-7.79-6.39-1.27-.86-6.48-4.9-3.49-2.81-4.21-3.99-3.36-3.76-6.25-7.74-6.47-7.79-7.7-7.75-7.34-6.44-1.63-1.36-.54.68 1.59 1.31 7.29 6.44 7.66 7.7 8.29 10.02 4.44 5.48 3.35 3.76 4.3 4.03 3.54 2.85 6.48 4.94 1.22.86 7.79 6.34 7.8 6.93 7.74 6.34 7.79 6.12 5.25 4.39 10.29 8.88 7.79 5.44 2.72 1.27 5.12 2.13 7.79 1.22 4.26.95 3.57.72 7.52 4.66 7.79 6.53 7.75 6.21 7.66 7.88.41.5.54 1 4.08 6.71c.95 2.17 1.86 4.25 2.72 6.29l.55 1.36.18.87 1.77 6.84.23 2.81.77 4.98.08 3.58.32 4.17v3.85l.18 3.94.09 4.17.22 3.58.18 4.57.23 3.17.22 5.03.41 8.2.73 16.22.22 7.93-.18 7.57-.09 1.5-.64 5.44-1.08 6.66-.77 3.4-.45 3.17-.91 4.57-.22 2.04-1 5.76-1.04 7.75-.45 7.79.55 7.89v.04l1.08 8.88.91 6.52 1.26 7.8.96 4.3.68 3.45 2.22 7.79 2.9 7.79 2.63 4.94 1.36 2.86 1.5 2.31 3.8 5.53 3.99 4.71 2.81 3.08 4.98 4.62 3.67 3.17 4.13 3.35 7.79 6.07 7.75 5.71 7.75 5.39 3.54 2.72 4.21 3.49 4.3 4.21 3.4 3.89 2.76 3.76 4.21 7.75.77 1.68 2.45 6.03 2.72 7.75 2.27 7.47 1.76 7.98.32 1.81 1.09 5.98 2.63 13.23 1.45 9.2.77 8.47-.09 7.79v7.84l1.13 7.84.63 1.59 2 6.25 4.21 6.52 1 1.28 6.84 5.71 3.35 2.13 12.23 6.44 2.08 1.31 5.58 3.76 4.39 3.9 3.36 3.8 2.72 4 1.77 4.39 1.4 3.27.81 7.48-.36 7.79-.41 5.98-.18 1.77-.28 5.53-.27 2.22.04 5.34-.18 2.45-.59.08h.59l.86 5.89.05 1.95 1.72 4.48 1.54 3.4 6.57 7.79 7.56 5.98 2.72 1.81 11.64 7.75 4.98 3.81 11.73 9.33 3.27 2.35 4.48 3.4 7.84 4.75 7.79 3.72 6.3 2.21 1.49.68 2.13.82 5.62 2.08 3.58 1.5 4.12 1.81 7.75 3.98 7.75 4.98 1.45 1.05 6.25 5.16 2.77 2.54 4.98 5.75 1.49 1.9 1.68 3.17.14.09v.18l2.26 4.39 1.91 7.57-.23 7.25-1.05 6.62-.31 1.49-.68 5.25-.55 2.54-.45 4.16-.91 3.54-.45 2.99-1.9 4.89-.09 1-.91 2.04-1.27 3.35-1 1.08v.14l-.09.09-.54 4.72-3.58 2.76v.22l-.13.13v.68l-.68-.09-.14.04h-.18l-3.99 2.54-3.49-.22h-.09l-.09-.05-3.85.41-3.62-.41-7.84-1.86-2.99-1.41-4.62-2.99-3.85-4.58-3.76-6.8-.77-1.81-3.13-6.93-3.9-6.88-.63-.95-7.16-7.39-.59-.45-7.25-4.89-4.76-2.9-2.99-1.9-8.43-5.75-7.43-7.79-.41-.73-4.04-6.8-2.95-7.88.6-.18-.6.09-3.08-7.61-4.85-7.84-7.16-7.79-9.56-7.79-6.48-4.85-5.07-2.94-2.72-1.81-3.54-1.72-4.26-2.26-4.71-2-6.07-2.98-4.71-2.27-4.39-2.45-3.31-2.44-5.84-5.21-6.75-7.79-2.9-3.72-3.57-4.04-4.22-4.48-7.79-6.53-5.94-4.53-1.81-1.72-5.75-5.93-1.95-2.68-3.35-4.98-2.45-5.89-1-2-1.31-7.52-.05-.45-1.27-7.38-.68-2.4-1.76-5.39-3.67-8.29-4.03-7.29a655.52 655.52 0 0 1-3.72-6.75l-.73-1.04-5.62-7.8-1.49-1.72-6.94-6.12-.91-.68-1.95-1.27c-1.95-1.31-3.89-2.58-5.84-3.85l-3.58-1.99-4.17-2.58-7.8-4.26-1.72-.86-6.03-4.17-7.74-4.94-2.54-1.22-5.25-2.81-5.98-2.45-1.9-.55-7.74-1.99-3.27-.73-12.23-3.17-4.39-1.31-3.31-1.13-2.08-.91-5.66-2.27-7.02-3.49-.59-.68-5.03-6.8-.32-5.21-.32-2.4.82-4.76.59-2.9 1.27-2.81 2.9-4.98 3.44-4.08 3.17-3.44 1.18-1.45 2.68-3.62 2.27-2.86.59-2.17 2.32-5.44-.05-.18.09-.23v-.14l-1.49-7.57-.09-.09-.04-.13-6.3-5.89-2.36-1.86-5.44-3.9-5.89-3.9-1.81-1.9-5.89-5.84-1.81-3.49-1.86-4.13-.09-1.76-.72-5.8.22-2.41.49-7.2 1.18-5.8-.04-.14V346l-.68-1.45-2.26-6.25-.14-.09-.05-.18-4.03-2.09-3.49-1.4-4.31-1.81-7.93-2.58-7.61-1.9-2.95-.99h-.05l-.13-.05-4.57-1.4-6.93-3.27-8.66-3.81-7.74-3.22-7.8-2.72-7.79-2.08-7.8-1.72-9.01-1.95-6.39-2.63-7.79-3.58-3.04-1.59-4.62-3.94-4.17-3.76-3.49-6.2-.63-1.41v-.45l-.86-7.12.13-1.31.23-6.3.19-1.04.91-6.93 1.49-7.57v-.19l-1.81-7.74-.09-.22-8.02-7.75-9.11-7.71-7.25-7.75-6.07-7.7-4.04-7.8-.81-4.44v-.09l-.05-.18-.45-2.81.36-4.67.68-2.99 1.36-2.44 3.89-5.12 3.63-2.81 2.85-2.45 1.41-1.04 1.54-1.4 2.72-2.13 2.17-2.17 1.77-1.73 1.27-1.76 2.13-2.68 3.17-4.62 2.85-4.93 1.49-3.35 1.05-1.86 2.27-5.8 1.99-5.58.73-2.31 1.31-3.31 2.22-4.44.23-.9.91-2.13 1.22-3.44.68-1.49-.05-5.84.23-1.86-.04-.09v-.14l-2.04-4.8-1.63-3.08-6.25-5.71-2.62-2.08-5.17-3.31-6.61-4.44-1.09-.81-7.79-6.89-4.85-7.61-.59-7.52 1.72-3.67 2.13-3.99 1.59-1.4 3.08-3.17 2.62-3.04 1.09-1 .99-1.13 2.59-3.12 1.59-2.59 1.32-2.4 1.99-5.89.82-7.47-.68-7.8-.14-.45-1.9-7.34-1.86-4.21-1.54-3.62-4.35-7.8-.77.41 4.3 7.7 1.54 3.63Z\",\n className: \"background_map_svg__cls-3\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m423.08 9.29 1.4 3.53 1.72 7.48 1 8.56v.04l-.18 7.07-1.27 6.71-2.04 5.53-1.86 3.13-.86 2.13-2.94 4.53-.96 1.18-1.36 4.49-1.4 3.22v.14l-.04.14.63 3.72.36 3.99.09.22 3.63 4.53 3.13 3.27 4.71 3.26 7.75 5.12 7.7 5.93 1.27 1.23 2.68 3.85 2.67 3.89 1.09 5.21.32 2.22-.05.22-1.22 6.52-.13 1-2.22 4.26-1.36 3.31-1.05 2-2.76 5.79-1.55 5.58-.63 2.22-.68 4.17-.91 3.62-.41 2.81-1.45 4.89-.14 1.22-1.81 5.89-.32.59-1.45 5.35-1.18 2.4-1.08 3.35-2.72 4.85-.46.63-2.58 3.9-2.49 2.81-.86 1.77-1.86 3.31-1 1.63-.5 1v.18l-.05.14 1.36 7.88 3.9 7.7 3.67 7.8 5.71 7.89 2.54 2.03 7.84 5.71 7.66 6.17 1.72 1.49 2.31 7.56-.09 3.94-.31 3.72.49 4.26.09 3.58 1.72 6.07.36 1.86 1.41 2.77 2.63 4.98 5.16 6.03 1.68 1.81 6.21 4.58 4.66 3.26 3.13 1.32 7.75 3.54 5.66 2.94 2.13.77 1.4.63 14.18 5.66 2.22.73 5.57 1.58 22.57 5.44 2.67.72 5.71 1.77 7.7 3.44 3.76 2.49 3.94 4.31 2.35 3.26.5 2.76.49 4.76v3.35l-.59 4.4.04.09-.04.09 1.09 3.81.63 4.03 3.94 7.75 4.49 7.79 2.63 3.22 3.22 4.53 4.58 4.21 3.12 3.49 4.94 7.66-.05.36-.36 7.47-2.27 5.12-.86 2.17-1.77 2.81-3.26 4.49-3.35 4.35-3.31 3.9c-.08.18-.18.32-.22.41l-.41.64-2.49 4.25-1.45 2.67-.54 3.26-.91 4.44.05.14v.13l1.54 3.94 1.27 3.99 2.63 2.31 7.79 5.03 1.14.45 6.75 1.9 2.45.54 9.74 1.95 3.35.45 5.98 1.09 1.77.18 7.84 1.59 7.7 2.67 7.7 4.8 7.61 7.21.77.81 7.07 6.03 1.9 1.72 5.85 4.22 4.39 3.58 3.31 2.59 5.03 5.07 2.68 3.22 2.72 4.49 4.25 7.8 4.36 7.74 4.25 7.38 3.81 8.02 2.4 6.25 2.9 9.29 1.27 2.63 1.86 5.12 3.31 5.34 1.63 2.54 6.8 7.79 8.06 7.75 6.84 6.94 6.98 8.56 5.71 7.75 2.86 3.22 4.71 4.57 3.08 2.41 7.84 4.93.86.5 6.89 3.17 7.02 3.85.68.27.68.45 7.07 4.12 4.17 3.58 3.63 2.58 6.85 5.39c.31.22.63.5.95.77l4.12 3.17 5.08 3.67 6.8 7.66.32.77 3.49 6.76 2.72 7.84 3.22 7.74 5.3 7.84v.05l7.74 7.02 1 .81 6.85 4.58 7.7 5.3 6.84 5.57.86.87 5.07 6.79 6.48 11.55 1.99 3.94 1.99 3.17 4.99 4.71c.91.63 1.72 1.22 2.58 1.81l.45.32 2.67.68 5.21 1.49 3.85-.31 3.99-1.09 2.31-.86 1.85-2.03 2.27-1.45 1.63-1.63 2.27-2.58.86-2.27 1.81-2.72 2.22-5.67 1.59-6.2.09-.91 1.18-5.58.27-2.17 1.05-4.3.54-3.54.27-3.44.14-4.39v-.09l-1.9-7.74-2.63-5.08-1.59-2.81-6.21-7.12-.72-.72-7.21-5.94-2.67-1.86-5.03-3.26-7.84-4.08-1-.45-6.84-2.85-4.39-1.63-11.01-3.63-.73-.32-7.02-2.54-6.84-3.58-.91-.32-1.22-.63-6.48-4.08-4.12-3.63-3.67-2.76-5.57-5.03c-.73-.54-1.5-1.13-2.22-1.68-2.45-1.9-4.89-3.76-7.34-5.62l-.63-.45-7.57-4.39-5.12-3.35-2.59-1.86-6.57-5.8-1.13-1.45-3.94-6.35-.91-4.66-1.13-2.99v-5.85l-.27-1.76.49-5.71-.04-1.9.63-5.25.14-2.54.54-4.58.45-7.25.18-3.76-.91-7.93-2.98-6.84-.55-.96-6.84-7.84-.5-.45-7.8-5.39-12.28-6.43-3.26-1.5-3.12-1.76-4.53-3.53-4.08-4.22-4.08-7.66-.05-.36-2.22-7.34-.09-2.68-.73-4.93.22-3.26v-4.44l.19-3.13.09-4.66-.18-3.27-.4-4.53-.54-4.17-.55-3.62-1.04-5.75-3.4-17.53-1.86-7.98-2.31-7.56-2.22-6.12-.68-1.67-.68-1.41-2.85-6.34-3.57-6.29-1.09-1.55-6.93-7.84-7.61-6.34-1.95-1.46-5.84-4.17-7.75-5.76-15.54-12.23-1.22-1.04-6.48-6.03-1.72-1.68-6.34-7.7-.59-.95-4.44-6.75-3.68-7.7-.59-1.95-2.17-5.8-1.27-5.39-.68-2.36-1.73-8.97-1.22-7.84-1.22-8.88-.68-5.26-.5-7.7.22-3.4.23-4.31.45-2.76.63-5.03.36-1.67 1.14-6.62 1.27-6.52 1.36-6.34 1.14-6.66.41-3.22.23-3.99.09-3.8v-3.85l-.32-11.69-.36-7.74-.27-4.76.05-.09-.05-.13-.14-2.81-.32-5.21v-.04l-.04-.19-.09-2.31-.86-13.95v-1.54l-.37-6.57v-1.18l-.54-7.75-.59-3.8-.72-4.03-2.31-7.8-2.68-5.71-.91-2.09-1.22-2.04-4.57-5.84-3.26-3.35-5.17-4.44-10.37-8.56-7.93-5.07-7.8-1.77-7.79-1.14-1.49-.63-6.02-2.31-6.07-3.81-1.72-1.18-7.74-6.53-8.93-7.79-6.62-5.26c-.99-.86-1.99-1.68-2.95-2.49l-4.8-3.94-4.17-3.81-3.63-3.22-7.79-6.39-8.69-5.93-6.75-5.35-2.4-2.31-5.34-6.12-7.8-9.61-7.79-8.33-7.97-7.11-7.57-6.12-2.09-1.59-.54.68 2.04 1.58 7.79 6.3 7.7 6.85 7.75 8.29 7.79 9.6 5.35 6.12 2.44 2.36 6.85 5.44 8.65 5.89 7.79 6.39 3.62 3.21 4.12 3.81 7.8 6.44 6.62 5.3 8.92 7.7 7.8 6.57 1.77 1.27 6.03 3.8 7.84 3.04 7.79 1.18 7.79 1.81 7.57 4.8 10.37 8.56 5.12 4.39 3.17 3.31 4.53 5.7 1.18 1.91.9 2.13 2.62 5.57 2.31 7.7.73 4.03.55 3.67.04.63.55 7.12v1.18l.36 8.15 1.72 29.5.36 7.74.32 11.69v3.8l-.09 3.81-.23 3.9-.4 3.17-1.09 6.62-1.27 5.71-1.54 7.74-.99 6.07-.32 1.68-.68 5.07-.45 2.72-.45 7.79.5 7.8.95 7.79 1.08 7.79 1.27 7.75 1.54 7.75.68 2.4 1.27 5.39 2.22 5.85.55 1.9 3.71 7.84 5.49 8.29 5.98 7.3 1.81 1.81 6.52 5.98 1.27 1.09 15.54 12.28 7.75 5.76 7.75 5.57 7.56 6.34 6.85 7.66 1.04 1.54 3.54 6.16 3.54 7.74.68 1.63 2.17 6.07.95 3.17c.49 1.54.95 3.09 1.45 4.58l1.76 7.75 3 15.5 1.45 7.75.55 3.58.54 4.12.41 4.53.13 3.17-.05 4.62-.18 3.17v4.39l-.23 3.36.72 4.93.09 2.86 2.17 7.25.14.68.45.86 3.81 7.02 4.04 4.17 4.62 3.62 3.27 1.81 3.35 1.54 12.1 6.34 7.7 5.35.45.36 6.84 7.8.41.81 2.99 6.84.86 7.48-.18 3.76-.45 7.25-.55 4.54-.13 2.54-.63 5.21.05 1.95-.5 5.85.22 1.72.09 6.21 1.09 2.76 1.04 5.08 3.9 6.25 1.18 1.54 6.66 5.93 2.67 1.9 5.17 3.4 7.52 4.35 10.15 7.7 5.58 5.03 3.62 2.76 4.12 3.63 6.62 4.17 1.27.68.91.27 6.84 3.58 7.07 2.58.72.32 1 .36 10.06 3.31 4.48 1.68 7.7 3.17 7.75 4.08 5.03 3.21 2.67 1.9 7.03 5.8.72.68 6.17 7.06 1.54 2.72 2.59 4.98 1.86 7.57-.14 4.26-.27 3.35-.55 3.49-1 4.26-.27 2.22-1.18 5.58-.08.86-1.59 6.12-.32.81-1.91 4.85-1.81 2.72-.91 2.31-2.13 2.35-.04.09-1.45 1.45-2.36 1.49-1.76 1.95-1.9.73-3.81 1-3.8.31-5.03-1.45-2.72-.73-2.58-1.81-4.98-4.71-1.81-2.94-1.99-3.95-6.52-11.6-5.12-6.88-.95-.96-6.88-5.61-7.8-5.39-6.8-4.53-.9-.77-7.75-7.02-5.16-7.65-3.63-8.79-2.22-6.61-3.53-6.8-.45-1.09-.59-.72-6.3-7.02-1.49-1.09c-1.22-.86-2.45-1.72-3.62-2.59l-4.12-3.17c-.32-.23-.59-.45-.86-.72l-.32-.23-6.61-5.21-3.53-2.54-4.22-3.58-7.79-4.62-.77-.36-7.02-3.85-6.89-3.17-8.56-5.35-3.03-2.31-4.71-4.57-2.76-3.13-5.76-7.8-7.02-8.56-7.75-7.88-7.11-6.84-6.71-7.66-1.68-2.54-3.26-5.26-1.81-5.03-1.22-2.58-1.4-4.44-1.59-4.98v-.05l-2.32-6.11-3.67-7.8-4.49-7.75-3.53-6.3-5.12-9.34-2.63-4.35-2.81-3.4-5.03-5.12-3.45-2.68-4.35-3.53-5.8-4.17-1.95-1.81-6.97-5.93-.77-.81-7.89-7.43-7.74-4.8-8.06-2.72-7.61-1.54-1.81-.18-5.98-1.08-3.36-.5-9.69-1.89-2.41-.55-6.61-1.86-1.09-.45-1.36-.91-6.25-3.94-2.62-2.31-1.09-3.63-1.49-3.94.81-4.31.63-3.35 1.27-2.31 3.13-5.3 3.22-3.76 3.9-5.07 2.8-3.85 1.77-2.76.91-2.36 2.49-5.61.27-7.75-.45-.95-4.57-7.07-3.21-3.62-4.62-4.27-3.13-4.39-2.58-3.17-4.48-7.79-3.9-7.75-.59-3.71-1.05-3.85.55-4.25.05-3.49-.55-4.89-.59-3.13-2.4-3.3-4.12-4.49-3.77-2.49-7.79-3.54-5.89-1.86-2.67-.73-22.56-5.38-7.75-2.27-15.54-6.3-2.04-.77-5.66-2.94-7.8-3.54-3.12-1.32-4.58-3.17-6.16-4.53-6.66-7.7-2.59-4.89-1.36-2.76-.32-1.59-1.73-6.12-.09-3.4-.5-4.17.32-3.72.13-4.08-.04-.13-2.54-7.93-1.76-1.59-7.98-6.39-7.56-5.53-2.54-2.09-5.48-7.61-3.68-7.7-3.89-7.84-1.27-7.43 3.27-5.75.95-1.86 2.27-2.59 3.17-4.61.22-.5c.91-1.54 1.72-3.04 2.59-4.53l1.04-3.22 1.18-2.4 1.45-5.35.32-.63 1.86-5.98.14-1.22 1.45-4.94.41-2.86.91-3.57.68-4.13.68-2.27 1.5-5.44 3.71-7.79 1.4-3.31 2.36-4.62.09-.86 1.32-6.84-.05-.09.05-.05-.37-2.31-1.17-5.66-2.72-3.81-2.72-3.94-1.32-1.22-7.79-6.02-7.75-5.17-4.71-3.22-2.95-3.08-3.58-4.44-.36-3.85-.59-3.72 1.36-3.08 1.45-4.57.68-.86 3.09-4.71.81-2.04 1.86-3.09 2.13-5.75 1.32-6.94.18-7.16v-.18l.05-.09-.05-.36-.91-7.8-1.76-7.79-1.45-3.63-1.41-4.17-4.16-7.84-.73.41 4.08 7.61 1.36 4.21Z\",\n className: \"background_map_svg__cls-3\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m431.37 5.21.86 5.44.68 2.13 1.13 7.43.91 8.02v.54l.04 7.25-.68 7.57-1.31 6.25-.59 1.54-.96 4.89-1.22 2.85v.14l-.04.09.27 3.76-.54 3.9.08.09-.04.14 3.04 6.25.68 1.63.91.86 7.79 7.02.27.18 7.43 6.26 1.14 1.14 6.34 7.84 3.22 7.61.81 7.57-1.49 7.7-3.35 6.84-4.17 8.52-1.9 7.98-.73 7.7-.27 7.74.18 7.8.14 1.9.45 6.02.54 8.56-.41 6.75-.82 7.7-.22 7.43.05.41.41 3.85.4 4.39 1.59 7.48 4.62 7.89 9.11 7.74v.05l8.7 7.66 2.94 7.47.95 5.08.32 2.85 2.45 5.8.95 2 2.54 3.49 2.99 4.3 5.98 7.8 3.13 3.31 3.76 4.44 4.08 3.36 5.71 4.48 2.13 1.09 7.8 3.35 9.47 3.35 8.47 2.4 13.14 3.98 7.66 2.99 7.74 4.35 1.81 1.32 5.89 5.16 2.72 2.86 5.3 7.84 2.36 7.57 1.32 3.94.72 3.94 4.12 7.75 1.81 2.85 2.95 4.85 1.95 4.03 1.59 3.76 3.76 7.75 2.45 3.31 3.09 4.39 3.8 7.7-.63 7.66-1.63 4.44-1.4 3.17-.95 2.35-2.27 3.36-.63 1.22-.5.73-2.22 4.53-2.76 3.4-.36 1.36-1.27 1.95-1.32 3.04-.86 1.27v.14l-.05.13.28 5.84-.28 1.81.09.14v.22l2.27 2.31 4.81 2.54 3.08 1.81 5.84 1.22 2.27.27 8.21.41 6.93.19 1.18.22 6.71.91 3.48 1.59 4.17 1.68 2.76 2.4 4.9 4.03 2.72 3.67 4.94 6.07 1.09 1.63 6.71 7.88v.05h.05l7.74 7.65 7.52 7.75 5.58 7.66 2.35 3.9 2.18 3.85 3.93 7.75 1.68 2.9 7.7 12.59 3.9 7.7 3.9 9.97 2.22 5.62 2.95 5.16 1.31 2.58 1.36 1.95 4.4 5.89 7.16 7.79 3.99 4.12 3.31 3.63 4.44 4.98 2.18 2.72 5.75 7.79 6.89 7.75.77.72 2.54 1.86 5.25 3.72 3.08 1.59 4.76 2.26 4.85 2.59 2.99.82 3.54 2.09 4.17 2.04 5.84 5.66 1.77 1.36 6.07 6.34 1.77 1.36 4.76 3.44 3.04 1.9 7.8 4.48 7.29 4.49.23.32 2.95 7.06-.09 2.77.05.13 1.44 4.85 1.32 5.66.68 2.17 1.49 3.35 1.95 4.45 6.16 7.84 9.38 7.84 5.89 4.12 4.66 3.63 3.04 2.49 5.12 5.12 2.63 3.62 2.9 4.12 4.84 8.56 5.66 7.02 2.36 2.17 2.99.95 4.76 1.86h.14l.13.04 3.99-.91 3.9-1.09 1.81-1.13 1.76-1.81 2.32-1.99 1.99-2.31 1.45-2.17 2.27-5.57 1-3.67.77-2.36 1.22-5.35.32-.86.81-3.17.86-3.85.5-6.44.05-1.4v-.09l-1.9-7.79-.72-1.27-3.77-6.57-2.85-3.31-4.57-4.53-3.26-2.68-7.8-5.53-.86-.49-6.98-3.44-8.15-3.54-10.97-3.53-4.21-.91c-2.17-.68-4.31-1.36-6.44-2.04l-.14-.05-1.18-.13-3.99-1.05-3.67-1.22-2.81-1.41c-1.68-.27-3.31-.59-4.93-.86l-.23-.09-6.85-4.08-.72-.59-5.39-7.12-2.31-2-6.21-5.8-1.63-1.18-3.35-2.22-4.4-2.17-3.94-2.27-3.8-1.86-5.71-3.71-2.13-.46-2.04-1.73-4.03-6.07-1.36-1.68-2.59-7.43.28-2.08v-.18l-1.09-5.44.54-2.62v-5.08l.5-2.17.5-5.48.36-1.41 1.4-10.01.45-4.21.5-7.8-1.05-8.11-4.03-7.61-3.76-4.25-4.26-3.62-3.58-2.49-7.84-4.08-2.95-1.22-4.76-2.22-5.12-2.85-2.63-1.13-2.4-1.54-5.26-5.57-1.59-2.13-.72-2.17-2.68-5.48-.95-5.85-.55-1.86-.22-6.62-.18-.99.45-6.43v-1.27l.36-6.12.05-1.68-.46-7.8-1.04-7.79-1.77-9.29-2.76-14-1.81-7.75-1.63-5.25-.91-2.54-3.12-7.79-3.76-8.02-5.17-7.57-2.68-3.04-5.07-4.8-2.72-2.27-8.75-6.44-6.8-4.94-7.79-5.89-7.7-6.07-6.39-5.39-1.4-1.31-6.44-6.39-6.25-7.7-2.77-4.62-1.99-3.22-1.14-3.04-2.17-4.53-2.41-8.33-1.76-7.12-.32-2.13-1.18-5.62-.45-3.71-.68-4.08-.59-4.94-1.36-10.51-.5-7.7.54-7.7.86-5.48.32-2.27.81-4.3.59-3.45.72-3.03.91-4.71.45-1.72 1.36-6.34 1.27-7.52.45-7.79v-6.34l-.27-9.2-.32-7.74-.95-15.63v-.09l-1.23-16.63-.36-6.43-.32-2-.5-5.8-.76-3.31-.82-4.49-2.08-6.16-.5-1.63-1.13-2.49-3.27-5.39-4.58-5.66-2.12-2.13-9.06-7.79-4.4-3.67-7.93-5.17-7.8-1.95-7.74-1.13-7.62-2.63-1.81-1-5.89-3.53-5.25-4.22-2.53-2.13-7.8-6.89-15.49-12.91-1.36-1.32-6.44-5.89-2.21-1.86-5.58-4.58-5.03-3.21-10.46-7.02-.82-.68-6.93-6.8-.81-.91-6.93-8.42-7.79-8.61-7.8-7.16-3.85-2.99-3.95-2.95-1.49-1-6.25-4.48-4.85-3.26-.49.72 4.8 3.22 6.25 4.53 1.5.95 3.94 2.95 3.81 2.95 7.74 7.07 8.25 9.24 6.43 7.8.86.91 6.93 6.84.86.73 10.56 7.11 4.94 3.13 7.79 6.44 7.74 7.15 15.59 12.96 7.74 6.89 2.58 2.17 5.21 4.17 5.98 3.62 1.86 1 7.8 2.76 7.79 1.13 7.84 1.95 7.52 4.98 4.39 3.62 9.02 7.75 2.04 2.04 4.53 5.62 3.22 5.3 1.09 2.32.5 1.68 2.09 6.03.81 4.57.72 3.17.55 5.8.27 1.95.4 6.48 1.23 16.9v.04l.54 8.07.4 7.29.32 7.74.27 9.2v6.29l-.45 7.7-1.32 7.7-1.32 6.11-.4 1.68-.96 4.76-.68 2.99-.59 3.49-.86 4.26-.32 2.36-.86 5.44-.54 7.79.5 7.8 1.95 15.54.68 4.08.45 3.67 1.18 5.71.28 2.09 1.95 7.79 2.22 7.75 2.22 4.62 1.22 3.17 2 3.26 2.76 4.58 6.3 7.79 6.57 6.52 1.4 1.27 6.39 5.44 7.75 6.12 7.79 5.89 7.75 5.62 7.75 5.76 2.68 2.22 5.03 4.76 2.58 2.9 5.34 7.88 3.54 7.56 3.12 7.7.86 2.54 1.63 5.21 1.81 7.75 1.49 7.75 1.54 7.74 1.49 7.89 1 7.56.5 7.7-.05 1.68-.36 6.12v1.27l-.46 6.49.14.95.27 6.84.55 1.77 1 6.16 2.62 5.3.91 2.54 1.54 2.04 5.44 5.75 2.44 1.54 2.63 1.18 5.16 2.86 4.85 2.27 2.9 1.22 7.7 4.04 3.53 2.4 4.17 3.53 3.71 4.22 4.04 7.7.86 7.43-.45 7.79-1 7.84-.86 6.21-.32 1.4-.49 5.48-.55 2.27v5.12l-.54 2.68v.18l1.09 5.49-.27 2.13v.18l2.76 7.89 1.32 1.49 4.22 6.34 2.26 1.81 2.27.55 5.39 3.53 3.85 1.9 3.9 2.22 4.35 2.13 4.89 3.31 6.21 5.79 2.31 2.04 5.44 7.11.72.64 7.29 4.3 5.17.9 2.49 1.31 3.85 1.27 3.99 1.04 1.13.13.59.19 6.03 1.9 4.17.95 3.58 1.18 7.57 2.4.18.05 7.75 3.35 7.7 3.9 7.7 5.44 3.22 2.62 4.53 4.49 2.85 3.26 4.35 7.7 1.86 7.57-.55 7.61-.81 3.81-.81 3.08-.27.81-1.27 5.39-.76 2.4-.95 3.58-2.31 5.57-1.27 1.95-1.9 2.22-2.32 1.99-1.76 1.81-1.77 1.05-3.57.99-3.9.91-4.63-1.81-2.94-.95-1.99-1.91-5.57-6.88-4.85-8.61-3-4.21-2.62-3.57-5.16-5.26-3.17-2.58-4.62-3.62-5.89-4.12-9.38-7.74-5.98-7.75-3.35-7.52-.68-2.13-1.32-5.66-1.46-4.85.09-2.76-.04-.18-2.95-7.11-.6-.86-7.33-4.4-7.79-4.49-2.95-1.86-6.39-4.67-6.12-6.39-1.76-1.4-6.12-5.85-4.04-1.95-3.8-2.22-2.95-.82-4.71-2.49-4.71-2.27-2.99-1.49-7.7-5.48-.72-.68-6.89-7.75-5.71-7.74-2.21-2.76-4.44-5.03-3.36-3.62-3.99-4.12-7.07-7.7-5.66-7.66-1.36-2.67-2.89-5.08-3.63-9.2-2.49-6.34-3.9-7.8-7.74-12.69-1.63-2.81-4-7.74c-.72-1.32-1.45-2.59-2.17-3.9l-2.36-3.9-5.7-7.84-7.52-7.75-.09-.09-7.8-7.7-.45-.54-6.03-7.12-1.13-1.63-4.94-6.16-2.85-3.72-7.93-6.66-4.12-1.63-3.76-1.72-6.57-.82-1.18-.27-7.07-.18-.73-.05-7.42-.36-2.18-.27-5.89-1.27-2.81-1.63-4.85-2.63-1.91-1.95.27-1.63-.27-5.84.82-1.18 1.22-2.95 1.49-2.31.27-1.27 2.67-3.22 2.17-4.44.51-.72.68-1.22 2.36-3.54.91-2.36 1.4-3.17 1.72-4.76.68-7.75-.05-.09v-.14l-3.9-7.75-3.12-4.57-2.36-3.13-3.76-7.79-1.59-3.72-2-4.08-2.99-4.94-1.77-2.81-4.12-7.79-.64-3.57-1.31-4.08-2.45-7.8-.32-.45-4.98-7.38-2.81-3-5.48-4.85-2.36-1.72-7.8-4.39-7.84-3.08-2.08-.68-11.15-3.35-8.38-2.36-2.67-1-6.75-2.36-7.7-3.26-1.99-1.04-5.76-4.48-3.9-3.17-3.8-4.49-3.08-3.26-5.98-7.75-2.99-4.3-2.44-3.35-.95-2.04-2.45-5.8-.22-2.54-.95-5.12-2.31-5.98-.91-1.99-1.04-.95-7.98-6.98-8.87-7.66-4.4-7.61-1.54-7.16-.77-8.47.22-7.43.18-1.5.59-5.57.45-7.34-.5-8.29-.09-.49-.59-7.79v-.23l-.18-7.38.04-.32.23-7.52.72-7.79 1.86-7.66 1.68-3.4c.68-1.4 1.4-2.81 2.09-4.21l.54-1.09.86-1.72 2.45-5.12 1.45-7.75v-.14l-.86-7.88-3.35-7.79-6.34-7.8-1.18-1.22-7.79-6.57-8.61-7.7-.5-1.36-2.99-6.21.5-3.85-.27-3.77 1.22-2.89.91-4.72.59-1.54 1.4-6.48.68-7.7-.04-7.25v-.54l-.82-7.8-1.17-7.75-.68-2.17-.9-5.61-2.4-5.58-.45-2.17-.86.19.45 2.27 2.4 5.57Z\",\n className: \"background_map_svg__cls-3\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m922.01 708.12-1.36-5.26-3.9-6.93-.63-.95-7.21-7.17-.91-.72-6.93-4.8-5.21-2.94-2.63-1.32-2.31-1-5.49-2.03-6.57-2.22-8.97-2.13-1.32-.41-6.43-.81-3.09-.77-4.71.27-3.04-.32-.22.04-4.85 2.72-.09.22-.32.23-2.99 4.71-.09 3.17.5 5.03.59 2.85 2.22 4.81 1.54 3.12 6.66 7.75 7.43 6.07 2.08 1.77 5.67 4.4 3.49 3.31 4.3 4.35 3.08 3.31 4.62 6.7.86 1.09 5.62 7.75 1.45 1.72 2.9 1.36 4.85 2.54h.19l.13.05 7.93-2.36 1.72-1.49 1.54-1.77 1.99-2.58 2.63-4.48.27-.81 1.9-5.62.5-2.13 1.32-3.8 1.04-3.99.36-2.44.45-5.39v-.14l-.59-2.53Zm-.73 7.88-.32 2.36-1.04 3.94-1.32 3.81-.5 2.13-2.09 6.25-2.58 4.39-1.95 2.58-1.45 1.63-1.77 1.54-7.38 2.13-4.67-2.45-2.98-1.45-1.09-1.31-5.61-7.79-.86-1.04-4.57-6.7-3.4-3.63-4.13-4.17-3.48-3.31-5.8-4.49-2.04-1.77-7.29-5.93-6.71-7.8-1.36-2.85-2.17-4.8-.6-2.54-.45-4.93.05-3.13 2.9-4.49 4.76-2.72 2.81.32 4.85-.27 2.86.72 6.39.81 1.36.45 8.92 2.09 6.57 2.22 5.44 1.99 2.31 1 2.59 1.31c1.72.95 3.44 1.95 5.07 2.86l7.16 4.93.59.5 7.07 7.02.63.91 3.85 6.88 1.31 5.08.59 2.49-.46 5.21ZM441.79 59.39l.41 1.73 1.77 6.2 3.76 5.39 1.49 2.36.86.81 6.43 6.98 1.32 1.31 5.39 6.34 2.31 3.49 2.4 4.17 2.72 7.84.86 7.57-.64 5.25-.4 2.45-1.36 3.4-2.45 5.3-1.13 2.22-2.17 4.58-1 4.57-.72 3.17v3.94l-.19 3.89.82 4.53.27 3.26 1.99 6.8.22 1 .77 2.4 3.44 8.83 1.45 4.26 1.68 7.7.41 6.98v.13l.04.54-.59 7.93-.23 7.66 1.49 7.8.09.14v.13l4.48 7.8 3.36 2.89 4.85 4.81 2.9 2.98 4.31 4.81 3.4 6.12.96 1.54 1.68 2.63 2.9 5.12 2.31 2.8 11.15 12.74c1.45 1.86 2.9 3.72 4.35 5.57l1.77 2.22 6.02 5.8 2.22 1.99 5.66 3.44 7.79 4.35 7.75 3.4 7.48 3.58 1.32.77 6.65 3.8 7.75 5.62 6.57 6.03 6.89 7.66 2.03 2.9 3.49 4.8 8.2 15.58 5.12 7.75 4.39 7.66 2.04 4.98 1.04 2.85 3.13 7.7 3.58 5.89 1.09 1.86 3.4 7.84.23 4.44-.13 3.04-.41 4.21-1.04 3.49v.19l.4 3.48-.9 4.13.05.13-.05.14 2.49 5.12.28 2.49.13.14.04.18 2.36 1.68 2.76 1.09 5.03 2.76 4.89 2.27 2.9 1.18 7.75 5.17 1.13 1.22 6.44 8.74 3.44 6.75 4.49 7.74 4.8 7.79 2.86 3.49 2.99 4.31 4.76 5.57 1.45 2.22 5.66 7.71 5.34 7.7 3.08 5.53 1.32 2.22 4.21 7.8 2.22 3.57 3.22 4.17 5.12 7.84.22.68 3.22 6.88 1.86 5.89.68 1.9 3.44 7.79 4.98 7.79.59.82 5.62 6.98 9.92 10.78 4.12 4.71 3.68 4.57 3.12 3.22 4.72 5.34 3.94 2.49 3.94 2.72 3.94 1.17v.6-.6l4.13-.04 2.63-1.22.04-.18.19-.14.49-2.49 2.09-2.67.81-5.21.63-1.04 1.13-4.3.41-2v-.49l1.4-5.85.14-1.72 1.13-4.71.45-3.08.73-3.53.86-6.93.4-5.12-1.13-8.01-4.48-7.93-7.85-6.71-1.76-1.04-6.07-3.08-5.39-2.27-6.84-2.4-3.21-1.41-4.08-2.63-3.81-1.72-2.44-2-4.17-6.71-.73-1-2.49-7.52.05-2.22-.91-5.48.32-2.85-.18-4.85.41-2.63.4-5.12.28-2 .36-5.76v-1.68l-.36-6.16-.22-2.22-1.32-9.1-.82-4.21-.95-5.39-1.99-10.15-.5-2.18-1.59-5.61-.76-2.36-1.9-5.44-3.13-7.74-.4-.91-3.81-6.89-3.98-5.75-1.77-2.08-6.07-5.75-2.58-2.04-5.21-3.85-5.49-3.95-8.88-6.57-8.93-6.53-7.74-6.3-4.35-3.81-7.7-7.7-3.44-4.53-2.72-3.26-2.76-5.44-1.41-2.31-.81-2.13-2.13-5.53-.32-2.4-1.58-5.21-.73-4.8-.72-2.95-.91-6.44-.27-1.32-1-7.79.05-.05-.13-.82-2-14.59-.13-2.17-.36-5.48.23-2.36.4-5.39.32-1.59 1.18-6.71.37-1.63 1.08-5.58 1.27-5.44.45-2.31 1.05-3.95 1.36-6.39.9-5.26.18-1.49.46-7.39-.05-7.74-.23-8.02-.27-6.43-.5-7.75-.54-7.8-.27-2.9-.36-4.85-.36-3.62-.27-4.12-.49-4.4-.18-3.35-.81-5.39-.23-2.4-1.81-7.79-.36-1.14-2.95-6.71-4.85-7.66-.18-.09-.04-.13-7.75-7.8-7.65-6.48-1.95-1.31-5.98-3.94-7.75-2.09-7.7-1.17-7.7-2.45-4.3-2.35-3.4-1.73-2.44-1.76-5.34-4.21-7.8-6.84-7.75-6.57-7.74-6.66-7.8-7.43-7.79-6.57-7.79-4.81-5.8-3.44-1.9-1.23-7.75-6.34-7.74-8.47-7.79-8.79-7.8-7.3-4.53-3.35-3.26-2.32-7.79-4.44-6.39-2.95-1.49-.36-8.02-1.27-.18.18h-.22l-.18.18-4.35 2.81-.09.13-.14.13-1.09 4.85-.55 1.32-.18 6.39-.14 1 .09 6.84-.09 1-.04 6.8-.36 7.74-.73 7.7-.13 7.34-.09.41v.18Zm.91-.36.19-7.57.72-7.06.41-8.34.04-6.75.05-1-.09-6.84.14-.86.22-6.61.5-1.05 1.04-4.76 4.53-2.89.63.13 6.93 1.04 1.31.32 6.39 2.94 7.7 4.35 3.31 2.31 4.39 3.27 7.75 7.25 8.29 9.42 7.34 7.93 7.74 6.34 2 1.31 5.84 3.45 7.66 4.71 7.79 6.57 7.74 7.39 7.8 6.71 7.75 6.57 7.79 6.89 5.39 4.21 2.4 1.76 3.58 1.81 4.25 2.31 7.84 2.54.77.14 6.93 1.05 2.54.72 5.3 1.45 7.57 5.03 7.79 6.57 7.7 7.79 4.76 7.39 2.95 6.71.32.95.09.49 1.72 7.25.23 2.4.81 5.35.18 3.4.45 4.39.32 4.12.36 3.63.32 4.85.32 2.9.91 13.82.4 8.15.23 7.98v7.7l-.4 7.29-.14 1.45-.91 5.21-1.4 6.34-1 3.99-.45 2.31-1.27 5.44-1.09 5.58-.5 2.17-1.4 7.79-.68 7.79.54 7.8 2.13 15.77.95 7.52.27 1.36.91 6.43.72 2.95.73 4.8 1.54 5.21.41 2.53 2.99 7.84 1.41 2.27 2.81 5.52 2.76 3.36 3.4 4.49 7.79 7.79 4.4 3.85 4.84 3.94c.95.81 1.95 1.59 2.94 2.4l17.81 13.14 5.48 3.9 5.21 3.8 2.49 2.04 6.02 5.66 1.72 2 3.94 5.66 3.76 6.89.68 1.54 2.86 7.07 2.67 7.7 1.54 5.62.63 2.72 1.41 7.25v.05l.5 2.36.91 5.25.81 4.21 1.32 9.06.18 2.17.41 6.12v1.59l-.36 5.76-.27 2-.41 5.08-.46 2.67.22 4.81-.32 2.94v.14l.9 5.44-.09 2.22.05.18 2.67 7.89.64.86 4.4 6.98 2.58 1.99 3.71 1.73 4.08 2.63 3.36 1.45 6.84 2.4 5.35 2.27 6.03 3.08 1.63.91 7.88 6.8 4.26 7.66 1 7.52-.36 5.03-.86 6.85-.73 3.53-.41 3.08-1.13 4.67-.18 1.77-1.41 5.98-.04.55-.36 1.76-1.13 4.35-.68 1.14-.73 5.07-2.08 2.67-.5 2.4-2.45 1.09h-3.63l-3.81-1.18-3.67-2.58-3.94-2.54-4.53-5.12-3.12-3.21-3.67-4.53-4.17-4.85-9.82-10.65-6.17-7.7-1-1.59-3.94-6.12-3.44-7.75-.68-1.86-1.81-5.89-3.21-6.89-.36-1-.55-.73-4.58-7.02-3.17-4.17-2.22-3.53-4.21-7.79-1.32-2.22-3.08-5.53-4.71-6.88-6.39-8.65-1.41-2.09-4.76-5.66-2.99-4.31-2.81-3.4-4.93-8.06-4.36-7.43-3.4-6.75-.77-1.09-5.75-7.75-1.32-1.45-7.84-5.26-2.99-1.18-4.8-2.27-5.03-2.72-2.81-1.13-2.09-1.5-.36-2.62-2.4-4.94.91-4.03v-.09l.05-.09-.45-3.49 1.05-3.44.4-4.26.13-3.08-.27-4.94-3.44-7.75-1.05-1.95-3.58-5.71-3.13-7.79-1.04-2.86-2.04-4.94-4.44-7.79-5.12-7.74-8.2-15.54-5.53-7.79-6.98-7.79-6.66-6.03-2.36-1.77-5.44-3.94-6.75-3.85-1.32-.81-1.09-.54-6.43-3.08-7.85-3.4-7.65-4.26-5.49-3.31-2.22-2.04-5.94-5.71-1.81-2.22c-1.45-1.86-2.89-3.67-4.3-5.53l-11.18-12.77-2.18-2.63-2.95-5.16-2.63-4.17-3.44-6.25-4.39-4.81-2.9-3.03-4.89-4.81-3.35-2.99-4.35-7.66-1.45-7.57v-.04l.27-7.75.54-7.61-.05-.86v-.05l-.41-6.93-.27-1.45-1.4-6.34-1.49-4.35-3.45-8.88-.72-2.22-.19-1-2.04-6.84-.27-3.17-.77-4.53.13-3.81v-3.85l.73-3.12.99-4.62 3.22-6.53 2.44-5.3 1.41-3.58.45-2.49.63-5.39-.18-1.99-.68-5.85-2.72-7.84-2.49-4.36-2.31-3.53-5.48-6.43-1.36-1.36-6.44-6.97-.81-.82-1.45-2.22-3.76-5.48-2.04-7.48.04-.27Z\",\n className: \"background_map_svg__cls-3\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m917.25 702.86-.5-.9-4.71-6.97-3.13-3.13-5.71-4.71-2.13-1.49-3.4-1.9-4.48-2.22-5.03-2.17-4.21-1.55-10.24-2.4-3.85-.32-4.9-.63h-.09l-2.86.5-4.39.27-3.54 2.31-1.22.63-.09.09-.14.09-.63 1.31-.72 5.21.27 2.76 3.58 7.88 6.97 7.75 7.34 6.25 1.54 1.54 6.2 5.75 1.95 1.95 5.84 6.34 1.45 1.4 6.39 7.97 7.75 5.12.23-.05.18.09v.59-.59l3.81-1.4 4.17-1.95.86-1.13 2.99-4.85 1.76-3.76.86-1.36 1.32-2.72 1-2.85.27-1 .86-5.71.18-2.13v-.14l-1.81-7.79Zm.77 9.88-.86 5.62-.23.95-.95 2.72-1.27 2.68-.86 1.32-1.77 3.8-2.95 4.76-.81 1.09-3.8 1.76-3.63 1.32-7.56-4.98-6.21-7.8c-.49-.49-1-.95-1.49-1.4l-5.8-6.34-2-2-6.21-5.75-1.54-1.54-7.3-6.17-6.97-7.84-3.45-7.65-.23-2.32v-.04l.77-5.17.45-.91 1.04-.49 3.62-2.31 3.99-.22 2.9-.5 4.8.63 3.72.27 10.19 2.4 4.13 1.49 5.25 2.32 4.26 2.08 3.26 1.86 2.13 1.45 5.61 4.62 2.99 2.99 4.71 6.93.45.91 1.76 7.52-.18 1.95ZM453.39 64.34l1.31 3.3 5.44 8.07 4.53 5.35 7.62 10.1 3.85 7.42 2.4 7.53 1.04 7.48-.45 7.38-1.54 5.17-.95 2.4-1.09 3.13-2.12 4.67-1.63 8.24.45 8.07 2.5 7.97 2.99 5.66 1.13 2.31 4.12 7.66 3.36 7.52 1.63 7.48.36 7.61-.27 7.79.18 7.93 1.95 8.07 4.57 8.07 7.29 8.02 6.66 7.65 2.58 3.36 3.67 4.48 4.17 4.67 3.08 3.12 7.21 7.7 5.17 6.03 1.4 1.73 6.75 7.79 9.37 7.93 6.07 3.9 5.39 3.94 2.31 1.54 7.57 6.12 7.84 7.12 8.48 8.25 6.97 7.75 6.48 7.61 1.22 1.86 4.45 5.84 3.35 4.94 2.36 2.85 4.89 7.57 3.31 7.52 1.18 4.22 1.13 3.62 2.9 7.75 4.3 7.88 3.72 7.7 1.27 7.39.77 2.81.63 5.35 4.57 6.88.96 1.22 7.06 5.76 2.49 2.13 5.03 4.67 2.18 2.81 4.53 7.61.86 1.63 2.45 6.07 1.95 4.35 1.5 3.44 1.9 3.63 1.95 4.21 4.53 7.88 1.32 1.81 3.4 5.89 5.21 7.84 5.57 7.7 1.49 2.17 4.35 5.53 3.3 5.76 1.76 2.08 3.58 5.3 2.54 3.44 7.66 6.98 3.99 6.98-.36 3.25-.05.28.05.04-.05.13 1.13 3.95.68 5.57.63 2.36 3.53 7.98.54.86c1.27 1.81 2.54 3.67 3.81 5.44l1.17 1.81 6.66 7.93 7.07 7.61 2.41 2.81 5.52 5.03 2.58 2.58 4.71 2.27 3.62 1.5.23-.05.18.05 5.03-1.36 3.85-2.49 1.18-1.9.36-1.18 2.18-3.98 1.14-3.58 1.04-2.09 2.17-6.89 1.22-5.84.81-7.07.19-2.09-1.18-8.33-1.18-2.13-4.49-5.98-3.63-3.17-8.02-4.63-11.59-4.08-4.27-.72-6.47-2-1.54.05-4.94-1.54-2.08-1.23-5.58-5.8-1.59-7.25-.72-7.29.13-.36.41-7.61.77-7.06v-.55l1.04-6.11.09-1.54.68-5.48.18-2.49-.05-5.35-.18-2.54-.55-6.07-1.31-9.11-.5-2.72-1.45-7.12-1.45-6.3-2.17-7.84-2.72-8.11-3.58-7.66-4.35-7.88-6.66-7.89-1.45-1.4-8.47-6.66-11.51-7.75-11.78-8.38-7.07-5.21-11.33-9.47-4.17-4.17-4.16-3.62-3.4-4.53-2.27-2.95-.86-2.99-.09-.22c-.77-1.41-1.45-2.72-2.17-4.08l-1.27-6.89-.36-.91-.41-2.98-.77-4.35v-.77l-1.17-7.07-.14-2.04-.91-5.66-.23-3.35-.63-4.49-.41-4.3-.49-3.49-.64-5.39-.31-2.22-.41-7.61.68-7.56.91-4.53.54-3.13.77-3.22.99-4.49 3.72-14.05 1.41-6.48.5-2.99.41-4.04.27-3.85.09-3.72-.05-7.79-.08-4.12-.37-7.8-.49-7.74-.59-7.79-1.45-15.54-.86-7.79-.27-2-1.09-5.84-.63-1.86-1.81-6.07-3.81-7.98-.68-1.08-5.66-7.03-2.36-2.36-6.16-5.57-1.68-1.45-8.02-5.39-3.81-1.27-4.26-1.22-7.74-1.27-3.67-1.13-3.94-1.13-7.47-3.54-2.77-2-4.89-3.4-1.81-1.49-9.02-7.75-4.67-3.98-4.25-3.76-3.45-2.99-4.71-4.71-3.13-2.95-5.48-4.89-2.32-1.95-5.39-3.36-2.63-1.54-7.66-4.08-6.75-4.62-.82-.64-7.57-6.93-7.93-8.52-7.79-7.43-1.36-.95-6.65-4.12-8.02-3.13-.82-.18-.27-.04h-.04l-.14-.04-3.71.63-3.45.54-.95.68-3.49 4.49-.68 3.13-1.04 3.03-.55 4.98-.36 2.36-.36 7.43-.22 6.03 1 8.01 1.95 4.72Zm185.49 134.61.36 7.75.09 4.07.05 7.74-.09 3.54-.27 3.77-.36 3.8-.5 2.85-1.36 6.3-3.72 14.04-1 4.58-.81 3.26-.54 3.22-.91 4.53-.76 7.97.45 8.02.36 2.4.63 5.44.46 3.36.41 4.35.63 4.39.23 3.35.91 5.58.09 2.04 1.18 6.93.04.77.77 4.76.5 3.22.32.95 1.27 7.16.09.18c.77 1.36 1.49 2.77 2.27 4.17l1.09 3.63 2.53 3.17 3.54 4.71 4.35 3.85 4.17 4.16 11.55 9.66 7.97 5.93 11.05 7.79 11.41 7.7 8.25 6.48 1.13 1.04 6.48 7.7 4.12 7.44 3.4 7.34 2.72 7.93 2.13 7.7 1.4 6.25 1.45 7.02 1.76 11.55.54 5.93.18 2.36.04 5.17-.18 2.27-.68 5.48-.09 1.46-1.04 6.29v.55l-.86 7.29-.32 6.98-.18.59v.05l-.05.13.81 7.84-.04.13 1.95 8.52 6.43 6.61 2.68 1.63 5.98 1.86 1.54-.05 5.89 1.81 4.21.73 11.06 3.85 7.52 4.25 3.26 2.81 4.12 5.49.95 1.72.95 7.2-.13 1.73-.81 6.8-1.36 6.43-1.77 5.49-1 2.08-1.18 3.63-2.27 4.17-.32 1.04-.73 1.09-2.63 1.68-3.76.99-2.67-1.09-4.31-2.09-2.09-2.12-5.39-4.9-2.4-2.76-7.12-7.7-6.44-7.66-5.21-7.52-3.36-7.52-.54-1.95-.68-5.58-1.09-3.85.49-3.8-.08-.19v-.23l-4.81-8.29-7.65-6.85-2.36-3.31-3.54-5.21-1.63-1.9-3.35-5.75-.09-.14c-1.49-1.95-2.95-3.8-4.4-5.61l-7.74-10.93-4.35-6.57-3.4-5.93-1.36-1.86-4.39-7.57-1.95-4.17-1.86-3.58-1.45-3.4-1.95-4.35-2.49-6.07-.95-1.86-4.62-7.8-2.36-3.08-5.4-5.08-2.62-2.22-6.75-5.48-.68-.86-4.17-6.3-.5-4.53-.81-2.95-1.13-6.88-.22-.95-3.9-8.11-4.17-7.61-2.85-7.66-1.13-3.44-1.13-4.26-3.49-7.97-5.12-7.97-2.45-2.9-3.31-4.94-4.44-5.8-1.22-1.86-6.85-8.11-6.88-7.65-8.61-8.38-7.84-7.12-7.79-6.3-2.49-1.63-5.35-3.94-5.89-3.81-9.01-7.56-6.71-7.66-1.41-1.72-5.21-6.12-7.29-7.8-3.04-3.08-4.07-4.58-3.58-4.39-2.63-3.4-6.75-7.79-7.07-7.7-4.21-7.39-1.77-7.39-.18-7.38.32-7.88-.37-7.79-1.72-8.02-1.09-2.63-2.49-5.53-4.17-7.7-1.13-2.31-2.81-5.26-2.45-7.66-.31-7.25 1.45-7.43 2-4.35 1.13-3.22 1.04-2.49 1.63-5.44.54-8.2-1.14-7.98-2.49-8.02-4.03-7.93-7.98-10.56-4.39-5.21-5.21-7.65-1.18-3.08-1.86-4.35-.59-5.53-.28-1.72.18-5.84.36-7.2.32-2.27.5-4.63 1-2.81.59-2.85 2.86-3.49 2.58-.36 3.22-.54 7.61 2.9 6.57 4.04.95.63 7.61 7.21 8.02 8.61 7.75 7.12.99.76 6.84 4.76 7.88 4.17 2.54 1.49 5.03 3.09 2.27 1.9 5.39 4.81 3.03 2.9 4.76 4.75 3.58 3.09 4.21 3.76 4.76 3.98 8.97 7.79 1.95 1.59 4.98 3.44 2.76 2.04 1.77.91 6.25 2.9 4.3 1.27 3.67 1.18 7.84 1.27 4.16 1.22 3.36 1.05 7.38 5.03 1.59 1.32 6.07 5.48 2.13 2.13 5.44 6.7.45.72 3.67 7.57 1.81 6.12.54 1.45 1.04 5.76.32 2.13 1.54 15.18.73 7.75.59 7.75.5 7.7Z\",\n className: \"background_map_svg__cls-3\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m913.45 707.3-1.31-4.44.45-.4-.5.31-3.12-4.89-2.4-2.89-5.44-4.4-5.94-3.49-1.95-.95-1.68-.73-11.1-3.31-2.85-.14-5.71-.59-.09.04h-.09l-2.04.72-3.89 1.05-.09.14-.14.04-2.81 3.85v.13l-.09.14.09 1.27 2.31 6.74 4.35 5.07 2.04 2.68 5.75 5.71 1.86 2.09 5.93 5.93 7.88 7.47 4.53 2.13 3.22 1.95.19-.04.22.08 1.31-.63 2.03-1.27 2.95-1.5 1.63-1.18 2.08-3.21 1-2.09 1.22-3.62.86-4.25-.04-.09.04-.09-.68-3.35Zm-.99 7.47-1.18 3.49-.95 2.04-2.13 3.26-1.17.82-3 1.49-1.99 1.27-1.18.54-2.95-1.81-4.66-2.22-7.61-7.25-5.89-5.93-1.9-2.09-5.66-5.62-2.04-2.72-4.39-5.12-2.17-6.47-.04-.82 2.63-3.62 3.71-1 2.08-.72 5.53.54 2.85.14 10.83 3.22 1.72.72 1.86.96 5.8 3.4 5.35 4.26 2.31 2.81 3.17 4.94 1.22 4.21.63 3.27-.76 4.03ZM737.02 555.79l3.08 7.79 5.62 7.84 6.66 7.71.59.63 7.97 6.34 4.57 1 3.17.81v.59-.59l.19-.04.13.04.54-.27.73-.59 4.07-2.49 2.63-2.58.95-1.91.32-1 1.81-4.71.86-3.22.68-3.08.73-4.62-.05-.05.05-.09-.45-2.9-.96-5.03-3.98-5.3-3.12-2.54-4.81-2.67-4.17-1.54-3.67-1-6.12-.91-1.77.14-5.89.27-2.13 1.09-3.58.81-.13.09-.13.05-3.36 4.67-.72 4.62-.41 1.99v.14l.09.5Zm.82-.59.36-1.86.73-4.53 3.08-4.25 3.63-.82.36.5-.27-.55 1.99-1.04 5.66-.22h.05l1.59-.13 5.89.91 3.58.95 4.08 1.45 4.66 2.59 3.09 2.53 3.85 5.12 1.27 7.56-.68 4.44-.68 3.17-.82 3-1.81 4.76-.28.86-1 1.95-2.4 2.31-3.9 2.4-1.09.77-3.04-.81-4.48-1-7.61-6.07-7.21-8.25-5.57-7.79-3.04-7.75v-.18ZM641.06 377.32l1.18 5.89.68 1.95 1.27 2.49 2.9 5.3 2.49 5.39 1.18 2.27 1.18 3.86c.4 1.31.86 2.62 1.31 3.94l3.63 7.93 2.86 3.22 3.71 4.53 4.04 4.3 2.31 3.31 2.4 4.76 1.59 3 1.45 3.44 4.35 12.1 3.26 7.75 3.31 7.75 3.85 7.79.77 1.41 3.8 6.39 3.99 6.07 1.45 1.72 6.48 7.52.63.32 7.07 4.98.22-.05.19.09 3.62-1.36.18-.14 2.77-3.62.81-.63.59-.95 1.72-4.62.23-1.59 1.5-4.63.68-3.22.72-3.03.72-4.81.19-2.13-.14-7.93-.95-8.69-1.49-9.29-2.31-10.96-.77-2.9-2.68-7.47-2.13-5.12-3-6.93-.49-.86-.86-1.36-4.44-6.44-2.04-2.44-5.71-5.39-2.13-1.63-5.12-3.49-2.68-1.63-2.54-1.41c-1.72-1.04-3.49-2.04-5.26-3.08l-8.06-4.62-7.38-3.98-15.68-11.51-.68-.36-7.16-1.04-1.63.09-.14.27-.27.05-.36 1.45-1.68 4.22v.08l-.05.14.54 3.58Zm1.99-7.66.32-1.27 1.14-.09 7.16 1.08.54.27 15.4 11.37 7.97 4.35 7.61 4.35c1.95 1.13 3.9 2.27 5.89 3.39l1.86 1.05 2.63 1.63 5.07 3.45 2.04 1.59 5.66 5.3 1.99 2.35 5.25 7.75.46.77c1.04 2.35 2.03 4.66 3.04 6.93l2.08 5.07 2.63 7.39.82 2.99 2.26 10.83 1.49 9.2.32 3.17.63 5.48.13 7.84-.18 2.08-.73 4.72-.72 3.03-.77 3.49-1.36 4.21-.27 1.77-1.63 4.39-.59.91-.81.59-2.58 3.49-3.3 1.27-6.89-4.85-.72-.45-7.57-8.88-3.99-6.02-4.58-7.75-3.8-7.74-6.57-15.45-4.35-12.09-1.45-3.49-1.59-3.04-2.41-4.71-2.4-3.44-4.08-4.39-3.67-4.53-2.94-3.31-3.45-7.52c-.45-1.36-.86-2.68-1.31-3.94l-1.13-3.81-1.22-2.4-2.54-5.44-2.9-5.3-1.18-2.36-.68-1.86-1.18-5.85-.5-3.49 1.63-4.08ZM636.8 183.36l-.86-7.79-.99-7.75-.55-2.81-.63-4.94-1.18-4.62-.59-3.17-2.54-7.16-.32-.68-4.93-7.79-2.58-3.17-4.62-4.66-3.21-2.95-7.93-5.61-7.75-2.54-3.98-.73-3.76-.73-7.7-2.22-7.7-3.17-7.74-4.81-10.61-8.29-4.94-4.17-3.93-3.57-3.81-3.35-4.21-4.4-3.58-3.54-4.44-4.25-3.36-2.9-8.01-4.94-7.52-3.26-7.71-4.3-7.79-5.12-3.62-2.72-4.16-3.71-5.21-4.03c-.86-.77-1.73-1.5-2.54-2.22l-.09-.09-4.08-1.86-3.8-.72-.09.04-.09-.04-3.67 1.13-.09.09-.13.04-3.49 4.53-.68 2.94-.63 3.49-.05.68.86 7.84.14.41 3.3 7.47 4.58 7.79.86 1.32 4.8 6.44 5.08 7.65 2.45 5.94.86 1.76 2.18 7.7 1.22 7.75.09 2.49v5.16l-.23 2.22-1.23 5.53-.08.81-.9 3.26-.73 2.85-.32.91-.59 6.07-.27 1.63v.13l1.04 7.84.87 2.09 2.54 5.71 5.25 8.88 3.99 6.61 3.94 7.88 1.5 7.43.4 9.93.09 5.61.45 2.72.63 5.21 2.31 5.53.81 2.22 1.41 2.13 3.94 5.71L520 235l2.18 2.95 5.98 7.74 7.39 7.79 7.75 7.56.64.73 7.11 9.06 4.26 5.84 7.07 7.8 4.26 3.85 3.76 3.94 3.98 3.62 3.58 4.08 4.21 4.3 3.35 3.49 4.44 4.26 3.76 3.49 3.98 3.89 4.53 3.85 3.27 3.21 5.89 4.53 1.95 1.86 4.13 2.36 3.67 1.54.18-.04.13.04 4.26-1.4.09-.19.18-.09 1.54-4.22.86-.91.09-.23 1-6.7.09-7.79-.05-.18.59-.19-.59.05-.4-7.38v-.46l-.64-7.38v-1.04l-.78-6.75-.13-1.95-.81-5.71v-2.86l-.32-4.93.41-2.63.59-4.98.4-1.73 1.68-6.98 1.63-6.84 1.36-4.8.77-2.94 1-3.04 1.72-6.02 1.54-6.39v-.05l.05-.18.73-7.7.18-7.8-.09-7.75-.32-7.79-.77-10.83-.45-4.67Zm.77 31.04-.19 7.75-.77 7.66v.27l-1.49 6.21-1.76 5.98-.95 3.04-.77 2.99-1.36 4.76-3.76 15.54-.59 5.12-.41 2.68.27 5.03.05 2.81.81 5.79.14 2.04.76 6.57v1.09l.63 7.29v.45l.41 7.8-.05 7.57-.95 6.66-1 1.13-1.45 3.99-3.86 1.32-3.4-1.41-4.21-2.4-1.72-1.68-5.89-4.53-3.26-3.21-4.53-3.85-3.99-3.9-3.81-3.54-4.39-4.21-3.35-3.49-4.17-4.25-3.58-4.08-4.03-3.67-3.76-3.95-4.22-3.8-6.98-7.7-4.3-5.89-1.45-1.9-6.34-7.93-7.8-7.61-7.29-7.7-.41-.54-7.79-10.15-3.8-4.8-5.3-7.79-.77-2.08-2.31-5.62-.59-5.03-.46-2.49-.05-5.66-.13-2.09.04-.04-.04-.19-.32-7.61-1.54-7.79-3.95-7.88-9.24-15.45-3.4-7.79-.09-.82-.9-6.75.27-1.55.63-6.21.22-.59.73-2.99.9-3.17.13-.91 1.23-5.53.23-2.31v-5.3l-.09-2.49-1-6.39v-.08l-.05-.14-.18-1.22-2.22-7.93-.86-1.77-2.45-5.89-5.16-7.84-5.62-7.7-4.53-7.7-3.31-7.57-.95-7.7.05-.59.59-3.49.68-2.85.55-.64 2.72-3.58 3.44-1 3.58.68 3.98 1.81 2.4 2.13 5.21 4.03 4.17 3.71 3.67 2.76 7.88 5.21 7.7 4.27 7.71 3.35 7.7 4.71 3.35 2.95 4.4 4.21 3.58 3.54 4.21 4.39 3.85 3.4 3.94 3.58 4.94 4.17 10.65 8.33 7.79 4.81 7.84 3.27 7.79 2.27 3.85.76 3.85.68 7.84 2.63 7.52 5.35 3.22 2.89 4.53 4.62 2.54 3.04 4.89 7.7.27.59 2.54 7.02.59 3.22 1.18 4.53.63 4.98.55 2.81 1 7.75 1.27 12.41.77 10.83.36 7.74.09 7.75Z\",\n className: \"background_map_svg__cls-3\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m906.19 702.72-5.12-6.48-1.86-1.36-5.98-2.72-4.44-1.63h-3.45l-4.66-.36-.14.14h-.22l-3.04 3.22-.77.63v.19l-.14.18.09.95.68 1.04c1.22 2.27 2.49 4.49 3.71 6.7l6.66 7.79 5.34 4.94 7.8 3.49.18-.14.22.09.27-.14.59-.41 3.76-3.4c.91-1.49 1.86-2.99 2.76-4.48l.05-.22v-.55l-2.31-7.47Zm1.36 8.06c-.86 1.36-1.67 2.72-2.54 4.08l-.09.13-4.08 3.58-7.61-3.44-5.03-4.62-2.58-3.08-4.04-4.76-3.66-6.53-.86-1.32.73-.59 3.03-3.22 4.44.36 3.54.04 4.08 1.5 5.76 2.63 1.94 1.4 4.94 6.34 2.13 7.25-.09.23ZM746.22 556.83c.68 2.27 1.4 4.49 2.08 6.7l.05.14 4.57 6.34 1.54 1.45 6.3 5.07.22.14 5.76.63.05.59v-.59l2.04-.05.14-.09.13-.05c.91-.77 1.77-1.54 2.63-2.36l.36-.32 2.27-3.04 1-1.63 1.63-3.94.5-2.41v-.13l-.45-3.08-1.27-4.71-.09-.09-.04-.14-6.66-5.3-6.66-2.49-1.54-.41-3.94.36-3.36.41-.41.22-4.53 2.95-2.44 4.4v.18l-.05.09.18 1.14Zm2.99-5.26 4.67-2.9 2.99-.36 3.85-.32 1.22.27 6.75 2.58 6.26 5.03 1.22 4.44.45 3.08-.41 2.04-1.58 3.85-1 1.59-2.17 2.99-.32.27c-.77.68-1.55 1.4-2.31 2.13l-.18.13-1.77.05-5.66-.63-6.16-4.94-1.36-1.32-4.62-6.43-1.99-6.39-.18-1.04 2.31-4.12ZM670.1 416.29l4.66 7.75 4.66 7.61 2.99 7.75 3.08 10.33 1.77 5.21 2.86 7.79.63 1.45 2.94 6.34 3.95 7.75.91 1.58 4.85 6.26 3.13 3.71 6.12 2.54 1.67.55.23-.19.22.04 3.13-3.53 2.95-4.93 1.77-4.3.4-1.86.54-6.84v-.95l-.23-7.11-.68-6.8-.27-1.95-1.59-7.52-.6-2.45-1.54-5.34-1.86-5.8-1.95-5.44-2.17-4.31-2-4.17-2.04-3.62-1.59-2.49-4.76-5.35-3.08-2.9-7.84-5.26-.77-.45-7.06-2.63-4.98-1.59-.09.05-.09-.05-2.72.5-4.44.05-.13.23-.22.05-2.17 4.26-.5.73-.09.22-.22 7.07.05.59 2.17 7.43Zm-1.14-14.91.45-.59 2.09-4.21h4.12l2.81-.54 4.8 1.54 6.89 2.54.77.45 7.7 5.12 3.08 2.85 4.62 5.25 1.59 2.45 2.04 3.58 1.99 4.17 2.13 4.21 1.94 5.44 1.81 5.75 1.55 5.3.59 2.45 1.63 7.74.23 1.68.59 6.07.31 8.52-.49 6.84-.36 1.59-1.72 4.21-2.86 4.8-2.95 3.4-1.31-.41-6.07-2.54-2.86-3.49-4.76-6.07-.9-1.59-3.9-7.74-3.54-7.75-2.9-7.75-1.72-5.16-3.13-10.33-2.95-7.75-9.42-15.63-2.13-7.43.22-6.98ZM634.99 196.64l-.45-5.53-.73-7.75-.5-3.94-.41-3.85-.82-5.12-.31-2.63-1.27-6.71-.13-1.04-.91-3.54-1.45-4.3-1.54-2.99-2.27-4.8-2.58-3.94-3.26-3.94-4.53-4.62-4.03-3.17-3.9-2.77-4.25-1.59-3.54-1.36-7.25-1.59-8.2-2.22-2.9-1.13-4.84-1.68-6.12-3.22-1.59-.91-3.36-2.36c-1.49-1-2.99-2-4.49-2.95l-2.22-1.54-5.49-4.17-4.25-3.53-3.45-3.12-4.3-4.62-3.54-3.67-4.17-4.08-3.58-3.4-7.88-4.89-.81-.36-6.93-2.17-5.04-2-2.76-.36-8.02-2.49-7.65.09-.09.32-.32.09-.68 7.07.04.09v.14l.27.59 3.89 7.7 2.09 5.71 1.13 2.09.95 3.27 1.22 4.34.23 1.54 1.45 6.25.5 3.49.68 4.21.36 4.44.18 3.31-.09 4.44-.41 3.26-.18 3.9-.63 3.85.09 3.44-.13 4.35.86 4.26.68 3.63 3.62 7.84 4.44 7.79 2.72 4.31 2.04 3.39 2.17 4.26 1.72 3.54 1.77 7.47.76 8.02.91 7.61.77 2.44 1.36 5.49 4.4 7.74 5.66 7.79 1.72 2.54 3.49 5.21 5.57 7.75 6.53 6.97 7.15 8.52 5.12 7.79 3.22 4.44 2.22 3.3 5.53 6.8.68 1 6.02 7.74 6.85 7.75 2.08 2.18 7.74 7.38 7.93 5.93 7.75 3.27h.14l.04.04v.09l.05.5v-.59l2.89-.18.14-.14h.13l2.9-2.94 1.09-.73.04-.14.14-.09.76-2.4.73-3.89v-.73l.4-6.71-.08-1.13-.14-6.89-.63-8.52-.14-7.8 1.13-7.65 1.86-7.75 2.31-7.74 2.63-7.79 2.4-7.75 1.13-4.04.91-3.76.4-2.67.59-5.12.18-1.95.18-7.57-.13-7.89-.41-8.2Zm-.55 23.6-.13 1.86-.59 5.12-.36 2.58-.95 3.8-1.08 3.95-2.49 8.02-2.54 7.47-2.31 7.74-1.9 7.98-1.13 7.61.04.09-.04.04v.09l.09 7.61.68 8.61.13 6.89.09 1-.41 6.75v.68l-.68 3.71-.72 2.32-1.09.68-2.81 2.9-2.67.18-7.7-3.3-7.57-5.71-7.74-7.34-2.04-2.13-6.8-7.75-6.03-7.7-.63-.95-5.57-6.8-2.22-3.35-3.17-4.44-5.17-7.74-7.2-8.61-6.43-6.89-5.62-7.75-3.44-5.25-1.77-2.54-5.62-7.7-4.39-7.79-1.32-5.21-.68-2.26-.76-6.93-.19-.86-.77-8.02-1.76-7.61-1.81-3.63-2.18-4.21-2.12-3.58-2.63-4.17-4.39-7.7-.63-1.4-2.99-6.44-.63-3.49-.81-4.08.13-4.31-.13-3.3.63-3.85.18-3.95.41-3.26.09-4.53-.18-3.35-.36-4.49-.68-4.39-.5-3.36-1.45-6.3-.22-1.49-1.27-4.57v-.05l-.95-3.17-1.09-2.08-2.13-5.71-4.12-8.29.63-6.57 7.16-.08 7.74 2.44 2.9.41 4.85 1.95 6.88 2.13.77.36 7.75 4.76 3.58 3.35 4.13 4.08 3.53 3.67 4.25 4.62 3.54 3.17 4.26 3.58 5.53 4.22 2.31 1.49 4.44 2.94 3.31 2.36 1.67.95 6.12 3.21 4.98 1.77 2.86 1.13 8.33 2.27 7.12 1.54 3.53 1.36 4.3 1.59 3.67 2.63 3.9 3.08 4.53 4.57 3.22 3.85 2.49 3.81 2.31 4.85 1.45 2.85 1.45 4.26.86 3.4.19 1.08 1.27 6.71.32 2.63.77 5.12.45 3.85.49 3.89.73 7.75.41 5.52.45 8.15.13 7.85-.23 7.56Z\",\n className: \"background_map_svg__cls-3\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m688.95 423.9 1.81 4.98 1.41 2.72-.22 1.09v.19l1.63 6.57.09 2.8 1.22 4.94 1.45 5.57.76 2.22 1.41 3.67 2.81 4.13 3.67 6.43 1.32 2.04.18.05.13.14.86.22.09-.05.09.05v.54-.54l6.61-1.32.09-.13h.14l.41-.86.68-6.03-.09-7.88-.59-4.85-1.45-5.08-2.95-6.34-3.45-8.39-4.71-7.16-3.22-5.98-2.94-1.95-5.03-2.31h-2.22l-.18.18-.22.05-1.18 2.44v4.35l.05.18 1.54 3.31Zm-.72-7.75.95-1.9 2 .09 4.53 2.04 2.9 1.95 2.99 5.66c1.59 2.4 3.13 4.81 4.66 7.16l.05.14.45.99 2.94 7.21 2.9 6.25 1.41 4.89.59 4.76.09 7.75-.68 6.34-2 .45-4.44.82-.63-.14-1.18-1.81-3.67-6.44-2.81-4.12-2.09-5.66-1.49-5.76-1.18-4.71-.09-2.81-1.63-6.57.23-1.08-.05-.13v-.14l-1.4-2.72-1.77-4.98-1.59-3.48v-4.04ZM631.68 198.9l-.54-7.8-.77-7.75-1.08-8.02v-.05l-1.5-7.52-.72-2.36-1.32-5.39-2.4-6.12-.55-1.68-1.13-2.22-3.94-5.66-3.9-4.62-3.49-3.17-4.35-3.39-7.84-3.63-3.13-.86-6.3-1.59-6.12-1.54-4.85-1.67-2.9-.77-5.12-2.13-2.58-1.18-2.99-1.77-4.81-2.45-4.3-2.35-3.44-2.09-6.57-4.44-1.13-.68-.64-.45-7.84-7.75-7.2-7.43-1.18-.45-6.75-2.49-2.63-.18-.13.09h-.13l-4.49 3.27-.04.18-.13.08-.64 2.86-.68 3.57v.05l-.04.09.4 8.2.73 7.88v.5l.63 7.29.23 7.79.32 7.74.68 7.8 1.68 7.79 3.17 7.84 3.95 7.75 4.53 7.79 3.8 7.62 1.77 5.66.54 2.13 1.76 7.75 2.18 7.79 2.08 4.44 1.4 3.35 2 3 3.31 4.85 4.44 5.93 1.22 1.77 4.81 7.93v.05l1.72 2.63 2.85 4.94 5.39 7.74 7.29 11.6 2.13 3.9 4.63 7.74 1.04 1.54 4.8 6.25 2.99 3.81 7.79 7.38 7.53 4.12.4.14.19-.05.18.05 4.9-2.63.09-.14.09-.09 2.09-4.8.41-.68.45-4.08.22-2.99-.04-.09v-.18l.68-6.8v-.91l1.36-5.48.41-2.13 2.53-7.8 2.54-6.43.32-1.08 2.77-7.98 3.48-8.97 1.22-3.49.82-3.13.95-6.02.23-1.77.36-5.44.09-2.36.09-5.25-.05-2.54-.27-7.74Zm-.73 17.85-.36 5.34-.23 1.76-.91 5.94-.81 3.04-1.22 3.48-3.53 9.02-2.63 7.7-.41 1.27-2.54 6.48-2.54 7.75-.45 2.27-1.36 5.66v.81l-.68 6.89v.27l-.22 3.17-.41 3.76-.22.37-2.13 4.8-4.63 2.49-7.52-4.12-7.57-7.16-3.04-3.8-4.76-6.25-1-1.45-4.62-7.75-2.13-3.89-2.36-3.89-5.39-8.52-4.93-6.93-2.85-4.94-1.87-2.86-4.66-7.74-1.27-1.81-4.44-5.98-5.26-7.7-1.36-3.31-2.04-4.3-2.13-7.7-1.81-7.84-.59-2.17-1.72-5.62-3.94-7.93-4.48-7.66-3.9-7.7-3.08-7.65-1.72-7.7-.68-7.75-.55-15.54-.59-7.29v-.45l-.45-4.63v-.22l-.28-3.04-.4-8.29.68-3.44.59-2.72 4.26-3.13 2.44.23 7.66 2.9 6.84 7.11 7.84 7.79.73.54 1.22.68 6.57 4.44 3.49 2.13 4.35 2.4 4.76 2.4 2.95 1.77 2.72 1.23 5.12 2.13 2.95.82 4.85 1.67 7.79 1.99 4.71 1.18 2.95.77 1.63.77 6.2 2.81 4.13 3.26 3.44 3.08 3.85 4.62 3.85 5.53 1.09 2.08.59 1.72 2.36 5.98 1.36 5.53v.04l.68 2.17 1.54 7.75 1.13 8.74.68 6.75.54 7.75.27 7.74.05 2.49-.18 7.62Z\",\n className: \"background_map_svg__cls-3\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m622.98 191.11-.91-7.79-.36-2.13-1.45-5.66-2.67-7.79-3.76-8.06-6.44-7.57-1.36-1.41-7.84-5.35-2.63-1.13-5.21-1.86-2.68-.77-5.12-1.32-5.16-1.22-2.68-.32-6.52-1.09-1.22.05-7.02-.45-.82.18-6.3.81-1.68 1.18-3.08 1.76-.18.18-2.67 5.3-.54 7.2 1.04 6.34.72 3.31 1.55 4.48 3.81 8.61 3.26 6.93 3.68 8.98 3.04 6.57 3.48 6.48c.23.45.41.86.63 1.31l8.38 14.5 4.49 8.75 3.3 6.61.63 1.13 4.76 7.88 2.49 3.85 5.49 3.93 2.31 1.5.18-.05.23.09v.59-.59l.95-.45 5.75-2.13.95-.23.14-.14.14-.04 2.59-3.81 3.35-4.31 1.86-1.95 1.4-2.72.78-1.45 1.85-3.72 2.09-4.03 1.67-4.76.73-3.13.86-6.25.14-1.54.27-5.8.04-2-.13-7.74-.59-7.8Zm-.19 17.49-.4 7.29-.86 6.16-.68 3-1.59 4.62-2.13 4.03-1.81 3.76-.82 1.41-1.45 2.81-1.63 1.67-3.44 4.39-2.49 3.72-1.13.27-6.34 2.45-2.04-1.32-5.53-4.03-2.32-3.63-5.29-8.83-3.27-6.66-4.53-8.74-8.34-14.5c-.27-.45-.46-.86-.68-1.27l-3.49-6.49-2.99-6.57-.86-1.99-2.81-6.93-3.27-6.94-.9-2.03-2.86-6.48-1.54-4.39-.72-3.31-1.05-6.21.64-7.16 2.45-4.85 2.95-1.67 1.67-1.18 5.94-.68.81-.23 6.89.46 1.22-.05 6.48 1.09 2.58.32 5.16 1.22 5.08 1.27 2.63.77 5.17 1.81 2.44 1.04 7.84 5.35c.41.41.86.86 1.22 1.27l6.57 7.79 3.45 7.57 2.67 7.7 1.45 5.62.36 2.13.91 7.7.54 7.75.19 7.74-.05 1.95Z\",\n className: \"background_map_svg__cls-3\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m608.03 191.11-1.72-7.84-.23-.59-5.66-7.3-2.27-2.44-4.53-2.22-3.31-.77h-.18l-4.44.86-.09.13-.19.05-2.72 4.39-.22.59.05.09-.05.14 1.63 7.29.68 2.76 5.03 11.24.91 1.58.95 1.86 3.67 5.93 2.27 3.85.14.05.09.14 5.62 1.77 2.26.22.14-.28.32-.04 1.36-4.4.31-1.45.68-5.44.05-2.4-.28-5.66-.27-2.13Zm-.36 10.06-.64 5.35-.32 1.36-1.27 4.13-1.81-.18-5.39-1.68-2.13-3.72-3.67-5.84-.95-1.86-.86-1.54-4.98-11.06-.68-2.81-1.63-7.25 2.72-4.44 4.12-.81 3.17.72 4.44 2.22 1.95 2.13 5.67 7.43 1.72 7.84.32 2.08.27 5.62-.05 2.31Z\",\n className: \"background_map_svg__cls-3\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m617.59 194.73-.36-3.62-1.31-7.79-2.04-7.97-4.26-7.66-3.53-5.03-3.17-2.85-4.66-3.58-7.89-3.66-2.4-.59-5.44-1.22-1.41-.19-7.84.14-3.35 1.27-2.41 1.05-3.93 4.07-1.05 2.9-.72 3.17.13 4.76.95 4.22 1.18 3.62 3.58 8.93 2.99 6.66 4.03 8.2 4.16 7.33 5.44 10.02 2.99 5.48 2.54 4.8 2.22 2.99 5.62 5.98h.19l.18.13 5.48-.32 2.17.23.19-.18h.22l2.54-3.13 2.63-2.68 1.09-1.49 1.59-2.13 1.49-4.25 1.22-5.12.5-2.72.5-4.08.27-3.72.05-3.76-.09-4.03-.27-4.17Zm-.54 11.88-.28 3.66-.45 4.04-.54 2.67-1.13 4.98-1.59 4.35-1.4 1.86-.95 1.41-2.67 2.63-2.49 3.08-1.9-.18-5.48.31-5.39-5.71-2.13-2.9-2.58-4.85-8.43-15.5-4.12-7.34-4.03-8.15-2.99-6.61-3.53-8.83-1.18-3.54-.91-4.08-.18-4.67.63-2.94 1.13-2.95 3.76-3.71 1.99-.86 3.4-1.23 7.38-.13 1.36.18 5.39 1.18 2.27.59 7.79 3.63 4.53 3.44 3.12 2.81 3.35 4.8 4.3 7.79 1.95 7.62 1.27 7.7.36 3.63.32 4.12.09 3.98-.04 3.72Z\",\n className: \"background_map_svg__cls-3\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m627.78 197.22-.49-6.12-1-7.79-1.27-7.74-1.72-7.8-1.63-5.48-1.04-2.35-4.4-7.8-2.35-3.35-4.4-4.49-3.45-3.13-7.84-4.49-.73-.22-10.06-2.95-4.85-1.22-5.8-1.68-1.95-.36-7.7-2.36-1.55-.72-6.25-1.95-5.93-2.41-1.86-.45-4.63-1.45-3.08-1.05-2.27-1.04-5.66-.72-3.08-.22-.14.18h-.22l-2.32 3.03-1.22 1-.05.13-.13.14-1.18 6.62v7.79l.05 1.08.63 7.38 1.4 7.21.86 2.9 1.72 4.9 3.49 8.11 3.94 7.47 3.9 7.66 2.81 7.88 1.81 4.9.86 2.76 1.95 4.35 1.59 3.44 2.45 4.08 2.13 3.72 1.63 2.35 3.36 5.39 4.39 7.2 4.21 8.29 11.32 20.75 7.88 11.69 3.81 2.59 3.99 2.54.18-.09.18.09 4.58-1.77 3.26-1.95.18-.23.86-1.72.27-.82 4.26-7.79.86-1.45 1.5-2.31 1.13-2.95 2.35-5.35 2.49-5.21 1.81-3.17 1.13-2.95 2.72-7.7.77-3.22.91-4.62.28-2 .59-7.2.14-6.39-.04-1.31-.37-8.11Zm-.59 15.72-.59 7.16-.27 1.95-.86 4.58-.77 3.12-3.04 8.52-.76 1.95-1.77 3.22-.91 1.81-1.68 3.49-2.36 5.39-1.13 2.89-1.4 2.17-.91 1.5-4.22 7.79-.32.82-.81 1.72-3 1.76-4.39 1.77-3.72-2.4-3.85-2.63-7.61-11.33-11.29-20.71-4.26-8.34-4.39-7.2-3.4-5.44-1.59-2.31-2.13-3.76-2.4-3.94-1.63-3.49-1.86-4.22-.91-2.81-1.86-4.98-2.54-7.2c-.09-.18-.13-.41-.22-.59l-.36-.77-3.53-7.02-4.22-8.06-3.21-7.34-1.68-4.89-.81-2.81-1.45-7.12-.68-8.47.05-7.65 1.08-6.39 1.27-1 2.18-2.95 2.76.23 5.7.77 1.95.91 3.17 1.09 4.66 1.49 1.76.36 5.94 2.45 6.21 1.9 1.54.72 7.84 2.4 1.95.41 5.84 1.68 4.81 1.22 10.56 3.04.59.36 7.25 4.13 3.3 2.99 4.26 4.35 2.31 3.31 4.39 7.7 1.04 2.26 1.59 5.39.41 2.09 1.31 5.66 1.28 7.79.95 7.7.55 6.12.36 9.37-.09 6.3ZM434.77 923.33l-4.89-2.27-7.43-2.63-1.36-.63-1.09-.45-7.7-2.91-8.57-5.48-8.51-7.93-9.11-5.66-4.26-3.17-4.53-3.26-4.94-5.35-3.71-4.71-9.42-12.83-15.91-17.57-1.04-1-8.97-6.84-4.44-1.05-4.35-.76h-.18l-5.98.76-2.95.51-8.74 4.25-5.71 4.08-3.17 2.63-3.22 2.99-4.35 4.39-1.27 1.36-4.34 6.25-1.55 3-2.94 6.02-.05.32-1.04 8.38.59 8.83.45 2.41 1.86 6.61 2.99 4.76 2.22 3.98-.36.55.45-.45 1.77 1.76 9.65 7.07 7.97 4.31 8.84 3.71 2.39.82.32-.95-2.26-.77-1.5-.64-7.25-3.04-8.74-4.71-2.17-1.68-6.53-4.75-1.77-1.85-2.17-3.82-3.04-4.84-1.67-6.21-.45-2.22-.05-.54-.54-8.25.09-.86 1-7.61 2.8-5.89 1.45-2.81 4.31-6.16 1.18-1.36 4.39-4.4 3.17-2.94 3.04-2.58 5.57-3.94 9.16-4.36 2.26-.4 5.97-.77 4.17.77 4.49 1.13 8.48 6.48.99 1 15.9 17.48 9.43 12.83 3.67 4.71 5.12 5.53 8.83 6.43 8.92 5.58 8.57 7.92 1.23.91 7.61 4.76 8.79 3.35 1.31.68 7.48 2.63 4.94 2.26 3.71 1.45 3.81 2.35.54-.81-3.76-2.36-3.9-1.53zM631.54 848.48l-.22-.36-6.16-8.43-2.27-1.81-9.38-6.98-8.29-3.71-5.8-2.09-11.74-4.08-1.81-.72-6.98-2.4-6.66-2.45-6.53-2.13-6.2-1.81-6.94-1.81-5.25-1.59-3.44-.91-6.12-2.63-2.67-.95-1.72-.73-7.11-2.17-4.35-.41-4.62.5-3.22.59-6.2 2.85-.6.37-4.44 3.35-3.3 2.9-1.4 1.13-1.95 1.4-2.72 2.54-2.67 1.63-2.68 1.72-6.07 2.81-8.43.95-8.7-3.62-8.61-5.93.09.04-.27-.18c-2.81-2.17-5.71-4.35-8.61-6.57l-3.53-2.17-5.48-2.9-3.22-.36-5.53-.77h-.19l-3.44.54-5.3.95-1.99.59-3.94 1.95-1.91 1.08-1.17.95-3.49 3.31-2.54 3.53-.99 1.95-2.22 7.03v.13l.68 8.75.14.54 2.27 8.3 1.54 4.3 1.49 4.48 4.3 8.83 3.54 4.85 3.99 5.66 5.75 6.98 2.99 4.76 3.4 4.12 8.24 8.74 5.98 4.58 5.85 4.25 2.85 2.22 6.48 6.57 2.99 8.42.27 1.09.41 7.61 1-.05-.46-7.7-.27-1.18-3.22-8.97-6.57-6.57-2.9-2.22-5.8-4.25-5.85-4.4-2.86-3.13-5.39-5.66-3.31-3.93-2.98-4.76-5.8-7.07-3.99-5.66-3.44-4.71-1.36-2.67-2.9-6.03-3.03-8.74-2.36-8.61-.68-8.83 2.08-6.57.86-1.81 2.45-3.4 3.44-3.31 1-.82 1.9-1.13 3.76-1.86 1.86-.59 5.34-.95 3.4-.5 5.49.72 3.26.41 5.03 2.72 3.44 2.13c2.9 2.22 5.75 4.35 8.61 6.52l.36.27 8.61 5.93 9.06 3.76 1-.04 8.07-1 5.89-2.76 2.81-1.86 2.62-1.59 2.81-2.58 1.95-1.45 1.45-1.13 3.27-2.9 4.94-3.62.45-.19 5.61-2.63 2.99-.54 4.49-.5 4.03.41 7.06 2.13 1.72.73 2.67.95 6.12 2.63 3.58.95 5.25 1.59 6.93 1.81 6.17 1.81 6.48 2.08 6.7 2.45 6.89 2.36 1.86.76 17.49 6.17 8.29 3.72 9.15 6.79 2.27 1.9 6.29 8.66 2.17 8.56.05 1.95-.45 6.48-.32 1.36-2.49 7.34-2.49 5.21-1.54 3.57-1.27 2.49-2.98 6.3-2.4 5.71-1.18 2.99-1.45 3.08-2.85 5.61-.13.27-3.76 4.58-4.44 4.17-.5.32-4.8 3.22-3.9 2.31-1.67.86-2.36 1.68.59.81 2.17-1.58 1.68-.91 3.99-2.31 5.26-3.54 4.62-4.26 4.17-5.21 2.81-5.53 1.46-3.12 1.22-3.04 3.03-7.02 3.62-7.53 1.54-3.53 2.45-5.16 2.54-7.43.36-1.4.45-6.66-.04-2.22-2.4-9.1ZM882.91 390.06l1.23-4.95.58-.77 1-1.76 2.67-2.18 2.13-2.76 2.18-.59.63-.41 5.71-1.04 2.09-1.32 3.76-.68 3.89-3.03.45-.04.1-.1.13-.04.54-.5 5.17-1.27.09-.14.14-.04 1.22-1.58 3.62-.91.09-.13.19-.05 2.4-3.67.95-.36.09-.14.13-.05.37-.68 4.26-2.13.04-.17.18-.1.77-4.21 1.36-.99.05-.19.14-.09.85-6.7.09-.14.14-1.22-.86-.1-.14 1.14-.13.23-.82 6.48-1.31.94-.05.19-.13.09-.77 4.16-4.17 2.09-.09.14-.14.04-.31.64-.96.36-.09.14-.13.04-2.36 3.62-3.62.91-.09.09-.14.05-1.23 1.63-5.34 1.4-.49.46-.64.13-3.9 3.08-3.85.64-2.09 1.31-5.66 1.09-.63.36-2.04.59-.09.09-.14.04-2.17 2.81-2.86 2.36-.86 1.58-.81 1.18-1.13 4.94-.78 2.81-.18 7.84.05 4.08v3.67l.13 4.21-.09 3.53.19 4.22-.37 3.53.32 4.17-.4 3.58v.14l.67 4.39-.05 3.26.1.23 3.26 4.94 2.63 2.94 5.16 3.27 5.67 4.48 2.08 1.72 5.48 6.03 2.22 3.85 2.04 3.8.45 2.32 1.82 5.39.31 4.48.41 3.04.09 7.75-.36 7.74-.41 4.31-.63 3.44-.5 3.31-1.95 4.49-.13 1.26-1.14 2.18-.9 3.44-.5.63-.05.19-.09.09.22 6.38-.45 1.23.05.18-.05.14 1.86 4.21 3.86 3.76 4.21 1.95 1.81-.05 5.89 1.14h.14l2.62-.28 5.04.45.08-.85-5.03-.46-2.76.27-5.98-1.13h-1.72l-3.94-1.85-3.58-3.63-1.63-3.72.45-1.31-.18-6.3.63-.86.87-3.35 1.17-2.45.14-1.22 1.94-4.44.46-3.21.64-3.4.4-4.45.41-7.75-.1-7.79-.45-3.12-.36-4.85-1.76-5.07-.5-2.68-2.08-3.76-2.27-3.99-5.53-6.02-2.17-1.86-5.67-4.49-5.3-3.35-2.31-2.62-3.22-4.85v-3.08l-.68-4.54.41-3.44v-.14l-.32-4.07.36-3.54-.17-4.3.08-3.54-.13-4.21v-3.67l-.05-4.08.18-7.79.73-2.71zM893.79 69.05c1.04.13 2.17.22 3.3.22 8.7 0 18.94-4.22 26.87-7.84a66.39 66.39 0 0 0 5.66-2.94l.59-.31v-3.72l-1.72 1.04a80.226 80.226 0 0 1-5.84 3.03c-7.66 3.49-17.49 7.57-25.56 7.57-1 0-1.95-.09-2.85-.22-8.29-1.13-18.71-5.49-23.11-14.14-4.31-8.43-5.98-27.59-3.45-38.7 1.32-5.66 3.71-10.74 7.21-15.13l1.49-1.9h-4.12l-.59.82c-3.4 4.53-5.76 9.74-7.07 15.49-2.72 11.69-.86 31.89 3.67 40.87 4.98 9.74 16.45 14.58 25.51 15.86Z\",\n className: \"background_map_svg__cls-3\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m834.84 20.48.05.23c1.99 8.79 4.08 17.94 8.7 26.68.82 1.5 1.59 3.08 2.4 4.71 5.07 10.06 10.82 21.48 21.38 27 10.33 5.44 27.55 7.34 39.14 7.34 3.76 0 7.3-.18 10.42-.55 4.17-.45 8.25-1.36 12.1-2.58v-.91c-3.85 1.27-7.97 2.13-12.19 2.63-3.12.36-6.61.55-10.37.55-15.14 0-30.31-2.86-38.7-7.25-10.33-5.39-15.99-16.68-20.98-26.6-.86-1.63-1.63-3.22-2.45-4.71-4.53-8.7-6.61-17.76-8.65-26.55v-.18c-.46-1.86-.87-3.67-1.32-5.48-1.45-5.94-2.63-11.83-3.53-17.54v-.09h-.86c.91 5.8 2.08 11.78 3.58 17.86.41 1.76.86 3.62 1.27 5.44Z\",\n className: \"background_map_svg__cls-3\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M852.28 30.67c1.81 11.05 3.72 22.43 9.11 29.95 6.21 8.65 18.4 14.04 27.5 17.04 8.83 2.89 17.98 3.17 26.68.72 4.49-1.22 9.02-3.26 13.46-6.02v-1c-4.53 2.85-9.1 4.94-13.68 6.21a45.354 45.354 0 0 1-11.78 1.58c-4.8 0-9.65-.77-14.41-2.35-9.02-2.95-20.98-8.2-27.05-16.67-5.3-7.34-7.15-18.67-8.97-29.59l-.04-.27c-.28-1.72-.55-3.31-.82-4.89-1.58-9.02-2.53-18.49-2.8-28.18h-.86c.27 9.74 1.22 19.25 2.81 28.32.27 1.67.59 3.39.86 5.17Z\",\n className: \"background_map_svg__cls-3\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M905.93 51.42c.32 0 .63 0 .95-.04 6.53-.32 14-3.45 22.16-9.34V41c-8.2 5.98-15.67 9.2-22.2 9.51-.27.05-.59.05-.86.05-9.97 0-22.34-8.01-23.38-18.35-.91-8.56 2.72-20.39 10.74-35.02h-1l-.13.28c-7.84 14.5-11.38 26.23-10.47 34.84 1.09 10.92 13.68 19.12 24.2 19.12ZM812.18 52.69c1.41 2.36 2.86 4.85 4.26 7.3 5.25 9.19 10.65 18.62 18.71 25.09 8.84 7.11 20.57 12.23 38.02 16.59 6.71 1.67 14.9 1.9 22.83 2.13 9.38.23 19.03.5 26.46 3.13 2.22.77 4.4 1.68 6.57 2.68v-.95c-2.04-.95-4.17-1.81-6.3-2.54-7.52-2.68-17.26-2.94-26.68-3.22-7.89-.18-16.04-.41-22.65-2.08-17.31-4.3-28.96-9.38-37.7-16.4-7.93-6.39-13.32-15.77-18.54-24.87l-.09-.14c-1.36-2.4-2.77-4.8-4.17-7.16-6.57-10.87-13.87-24.96-18.54-35.97-2.9-6.8-5.16-13.14-6.7-18.94l-.04-.14h-.86c1.54 5.94 3.8 12.46 6.79 19.44 4.71 11.01 12.01 25.19 18.62 36.06ZM741.28 52.37c6.98 5.66 13.59 11.01 18.04 16.86 4.12 5.48 5.98 11.74 7.79 17.8 1.95 6.62 3.8 12.83 8.29 17.54 4.8 5.03 12.41 7.98 19.71 10.88 6.03 2.35 11.73 4.58 15.9 7.84 3.89 3.08 5.57 6.53 7.34 10.24 2.49 5.16 5.03 10.51 13.86 15.41 6.17 3.44 16.45 5.93 27.32 8.52 15.63 3.81 33.39 8.06 42.05 16.18 8.88 8.29 11.23 23.74 13.37 37.38 1.36 8.7 2.49 16.17 5.12 20.3 2.85 4.53 5.89 7.48 8.97 8.79v-.96c-2.81-1.31-5.57-4.12-8.2-8.29-2.54-3.99-3.71-11.37-5.03-19.94-2.13-13.82-4.53-29.41-13.64-37.92-8.79-8.25-26.69-12.55-42.46-16.35-10.78-2.63-20.98-5.08-27.05-8.43-8.61-4.8-11.1-10.01-13.54-15.08-1.81-3.76-3.49-7.34-7.57-10.51-4.31-3.35-10.06-5.62-16.13-7.98-7.25-2.85-14.72-5.8-19.39-10.69-4.35-4.53-6.16-10.64-8.07-17.13-1.86-6.16-3.72-12.5-7.97-18.08-4.49-5.98-11.15-11.32-18.17-17.04-6.25-5.07-12.78-10.33-17.58-16.03-9.93-11.78-18.08-24.6-24.24-38.15l-.77.36c6.17 13.59 14.36 26.51 24.38 38.38 4.85 5.75 11.37 11.01 17.67 16.13Z\",\n className: \"background_map_svg__cls-3\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M748.84 24.83c4.81 4.58 9.34 8.83 12.64 12.19 2.86 2.86 5.53 5.08 7.88 7.02 4.85 3.99 8.66 7.11 12.05 13.86 2.27 4.58 3.35 11.2 4.44 18.21 1.36 8.47 2.76 17.26 6.57 22.47 4.21 5.85 10.56 7.93 17.26 10.11 4.22 1.4 8.56 2.86 12.73 5.3 4.4 2.63 8.43 5.62 12.69 8.75 6.07 4.48 12.96 9.56 22.11 14.41 6.39 3.4 15.27 6.84 24.69 10.46 13.18 5.08 26.77 10.33 33.26 15.5 6.79 5.44 6.84 11.91 6.88 17.63.05 3.48.09 6.7 1.59 9.29 1.59 2.67 3.4 4.98 5.39 6.93v-1.22a32.811 32.811 0 0 1-4.62-6.16c-1.4-2.36-1.45-5.49-1.45-8.83-.05-5.89-.14-12.6-7.25-18.31-6.57-5.21-20.25-10.51-33.48-15.63-9.38-3.63-18.26-7.07-24.6-10.42-9.06-4.8-15.95-9.87-21.98-14.31-4.3-3.17-8.38-6.17-12.78-8.79-4.26-2.54-8.65-3.99-12.91-5.39-6.57-2.17-12.78-4.21-16.86-9.79-3.67-5.03-5.03-13.73-6.39-22.11-1.13-7.11-2.18-13.78-4.53-18.44-3.44-6.93-7.56-10.29-12.28-14.18-2.44-2.04-4.98-4.13-7.79-6.98-3.31-3.31-7.88-7.61-12.69-12.14-7.25-6.89-14.72-14-18.03-17.85-3.03-3.49-3.12-4.21-2.62-5.07.32-.54.77-1.32.59-2.95-.05-.36-.09-.73-.14-1.13v-.05h-.86c.05.46.09.87.14 1.27.13 1.36-.18 1.9-.45 2.41-.73 1.22-.86 1.95 2.67 6.12 3.35 3.85 10.87 10.96 18.12 17.85Z\",\n className: \"background_map_svg__cls-3\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M760.26 3.4c1.36 4.44 5.21 8.57 9.24 13 2.86 3.08 5.8 6.34 8.2 9.92l.22.32c6.02 9.02 13.55 20.21 18.17 30.22 1.81 4.04 2.49 8.61 3.17 13.01 1.05 6.93 2.04 13.5 7.02 18.49 4.81 4.8 13.19 7.47 21.29 10.06 5.71 1.81 11.6 3.71 15.95 6.25 4.89 2.81 8.97 6.66 12.91 10.42 4.62 4.35 8.97 8.52 14.45 11.01 5.84 2.68 11.91 3.17 18.35 3.76 4.71.41 9.61.82 14.32 2.18 8.97 2.67 19.53 7.11 25.01 9.56l1.63.72v-3.49l-.68-.32c-5.48-2.4-16.04-6.88-25.05-9.51-5.03-1.45-10.06-1.9-14.95-2.36-6.16-.5-11.96-1-17.26-3.44-5.03-2.27-9.19-6.26-13.64-10.42-4.08-3.85-8.24-7.84-13.45-10.87-4.67-2.72-10.74-4.67-16.59-6.53-7.8-2.45-15.81-5.03-20.03-9.29-4.26-4.26-5.16-10.29-6.12-16.72-.72-4.61-1.45-9.37-3.44-13.82-4.76-10.28-12.32-21.56-18.39-30.67l-.22-.32c-2.54-3.81-5.58-7.11-8.53-10.33-3.8-4.13-7.38-8.02-8.52-11.78a17.88 17.88 0 0 1-.9-5.26v-1.18h-3.22l.04 1.23c.05 1.99.36 4.08 1 6.16Z\",\n className: \"background_map_svg__cls-3\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M842.09 70.04c1.05 1.18 2.09 2.36 3.13 3.54 6.84 7.74 13.91 15.77 24.33 19.8 11.74 4.53 30.22 4.53 42.46 4.53h2.03c5.12 0 10.2-.23 15-.73v-.91c-4.8.5-9.83.77-15 .77h-1.9c-12.23 0-30.72 0-42.27-4.49-10.24-3.94-17.22-11.88-23.97-19.52l-.23-.28c-1.04-1.18-2-2.26-2.95-3.31-7.74-8.61-13.78-15.76-19.98-29.17-5.39-11.55-10.42-25.97-15.04-42.96v-.14h-.91c4.63 17.17 9.74 31.81 15.13 43.45 6.3 13.5 12.6 20.98 20.16 29.4Z\",\n className: \"background_map_svg__cls-3\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M889.25 315.48h-9.29v-9.29c0-.49-.55-.95-1.18-.95s-1.18.45-1.18.95v9.29h-9.29c-.54 0-.95.55-.95 1.18s.41 1.18.95 1.18h9.29v9.29c0 .55.54.95 1.18.95s1.18-.4 1.18-.95v-9.29h9.29c.5 0 .95-.54.95-1.18s-.45-1.18-.95-1.18ZM520.09 871.4h-10.47v-10.51c0-.59-.59-1.09-1.31-1.09-.77 0-1.36.49-1.36 1.09v10.51h-10.47c-.59 0-1.08.59-1.08 1.32s.49 1.31 1.08 1.31h10.47v10.51c0 .54.59 1.04 1.36 1.04.72 0 1.31-.5 1.31-1.04v-10.51h10.47c.59 0 1.08-.59 1.08-1.31s-.49-1.32-1.08-1.32Z\",\n className: \"background_map_svg__cls-5\"\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M897.86 845.48s-.45.09-1.09.18c-.68.09-1.5.32-2.36.5-1.72.36-3.4.77-3.4.77l.5 2.27s1.68-.41 3.35-.77c.86-.18 1.68-.41 2.31-.5.63-.09 1.08-.19 1.08-.19l-.41-2.26ZM888.16 847.57s-.22.04-.54.13c-.31.09-.72.23-1.13.32-.86.27-1.67.5-1.67.5l.59 2.22s.86-.22 1.68-.45c.41-.13.81-.22 1.13-.32.31-.09.5-.13.5-.13l-.55-2.27ZM882 849.34s-.41.09-1.04.28c-.64.18-1.5.45-2.32.72-1.63.59-3.3 1.14-3.3 1.14l.77 2.22s1.63-.59 3.26-1.13c.82-.27 1.63-.54 2.27-.73.59-.18.99-.27.99-.27l-.63-2.22ZM872.58 852.46s-.45.13-1.05.36c-.59.28-1.4.59-2.22.91-1.63.68-3.27 1.32-3.27 1.32l.91 2.13s1.63-.64 3.21-1.27c.82-.31 1.59-.63 2.18-.91.59-.23 1.04-.36 1.04-.36l-.82-2.17ZM863.43 856.22l-3.17 1.5 1 2.08 3.08-1.45-.91-2.13zM857.63 858.94s-.41.18-1 .5c-.59.31-1.36.72-2.13 1.18-.77.41-1.54.81-2.08 1.18-.6.36-.95.59-.95.59l1.22 1.99s.36-.27.91-.59c.55-.36 1.32-.72 2.04-1.18.77-.41 1.49-.82 2.04-1.09.59-.36.95-.49.95-.49l-.99-2.09ZM848.97 863.97s-.36.27-.91.63-1.27.86-1.95 1.41c-1.45.99-2.85 2.04-2.85 2.04l1.4 1.86s1.41-1.04 2.77-2.04c.72-.49 1.4-1 1.95-1.36.54-.36.86-.59.86-.59l-1.27-1.95ZM841 869.86s-.68.54-1.36 1.13c-.36.27-.68.54-.95.72-.27.23-.4.36-.4.36l1.49 1.77s.13-.14.41-.36c.22-.19.59-.46.9-.73l1.36-1.08-1.45-1.81ZM836.06 873.98s-.32.32-.81.72c-.45.45-1.13 1-1.77 1.63-1.27 1.18-2.54 2.4-2.54 2.4l1.59 1.68s1.27-1.22 2.54-2.4c.59-.59 1.27-1.13 1.73-1.54.49-.45.81-.73.81-.73l-1.54-1.77ZM828.81 880.78s-1.22 1.22-2.44 2.49c-1.23 1.22-2.41 2.49-2.41 2.49l1.68 1.59s1.18-1.27 2.4-2.49c1.22-1.22 2.41-2.44 2.41-2.44l-1.63-1.63ZM821.97 887.89s-.59.63-1.18 1.27c-.59.68-1.18 1.32-1.18 1.32l1.77 1.54s.54-.63 1.13-1.27c.59-.63 1.18-1.27 1.18-1.27l-1.72-1.59ZM817.71 892.65s-.27.36-.72.81c-.41.49-1 1.18-1.54 1.86-1.13 1.32-2.22 2.68-2.22 2.68l1.81 1.45s1.08-1.32 2.17-2.63c.54-.68 1.13-1.36 1.54-1.81.46-.5.73-.82.73-.82l-1.77-1.54ZM811.37 900.26s-1.08 1.36-2.17 2.76c-.55.68-1.04 1.36-1.45 1.86-.4.54-.63.86-.63.86l1.81 1.45.68-.91c.36-.5.91-1.18 1.44-1.86 1.05-1.36 2.13-2.72 2.13-2.72l-1.81-1.45ZM805.34 908.1s-.54.68-1.04 1.41c-.5.68-1 1.4-1 1.4l1.85 1.36s.5-.72 1-1.4c.54-.73 1.04-1.41 1.04-1.41l-1.86-1.36ZM801.58 913.27s-.23.36-.59.91c-.37.55-.86 1.22-1.36 1.95-.5.72-1 1.45-1.36 2-.37.54-.59.91-.59.91l1.9 1.27s.27-.36.64-.86c.36-.54.81-1.27 1.31-1.99.5-.73 1-1.41 1.36-1.95.37-.54.6-.91.6-.91l-1.9-1.31ZM796.1 921.51s-.27.36-.63.91c-.32.54-.81 1.27-1.27 2.04-.9 1.49-1.81 2.94-1.81 2.94l1.99 1.22s.91-1.49 1.81-2.95c.45-.76.91-1.49 1.27-2.04.32-.54.6-.91.6-.91l-1.95-1.22ZM530.55 734.3l5.48 3.58-2.94 4.53-5.48-3.53 2.94-4.58zM507.86 722.11l1.17.77-.63 1-1.18-.81.64-.96zM481.94 713.05l3.99 2.58-2.14 3.36-4.03-2.63 2.18-3.31z\",\n className: \"background_map_svg__cls-4\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m480.58 708.7 3.8 2.5-2.03 3.17-3.86-2.5 2.09-3.17zM518.82 712.46l7.33 4.76-3.94 6.12-7.38-4.8 3.99-6.08zM711.6 489.36h7.62v6.3h-7.62zM725.83 475.14h12.78v10.6h-12.78zM728.05 507.13h1.13v.95h-1.13zM585.15 540.66h2.9v2.4h-2.9zM614.01 541.15h1.68v1.4h-1.68zM614.28 573.27h1.13v.96h-1.13zM616.09 557.6h5.34v4.44h-5.34zM614.96 587.42h7.61v6.3h-7.61zM563.67 558.51h4.8v3.98h-4.8zM599.15 601.91h9.06v7.48h-9.06zM615.64 598.97h1.41v1.17h-1.41zM855.05 518.77l-1.27 1.09-.86-1.04 1.27-1.09.86 1.04zM872.13 529.87l-4.08 3.49-2.9-3.4 4.07-3.44 2.91 3.35zM862.29 571.737l5.617-4.803 3.99 4.666-5.615 4.803zM876.61 558.78l-4.48 3.85-3.22-3.76 4.53-3.85 3.17 3.76zM892.79 574.5l-6.89 5.84-4.89-5.7 6.88-5.84 4.9 5.7zM822.47 93.06h1.45v1.18h-1.45zM820.48 123.28h5.44v4.49h-5.44zM795.87 115.67h4.67v3.9h-4.67zM826.41 101.04h8.79v7.25h-8.79zM828.27 138.91h12.78v10.56h-12.78zM822.33 162.56h6.57V168h-6.57zM355.12 444.56l-2.63 5.98-4.94-2.13 2.59-6.03 4.98 2.18zM491.77 937.19c-.41-1.85-.86-3.72-1.32-5.62l2.27-.54c.45 1.9.91 3.8 1.32 5.66l-2.27.49Zm-1.81-7.88-.54-2.27 2.21-.54.55 2.27-2.22.54Zm-1.09-4.53c-.45-1.86-.95-3.71-1.4-5.61l2.27-.55c.45 1.91.91 3.76 1.36 5.62l-2.22.54Zm-2-7.84c-.45-1.86-.95-3.76-1.4-5.62l2.22-.59c.5 1.86.99 3.76 1.44 5.61l-2.27.59Zm-2.04-7.88-.59-2.22 2.27-.59.59 2.22-2.26.59Zm-1.18-4.49c-.5-1.81-1.04-3.71-1.54-5.57l2.22-.64c.55 1.9 1.04 3.76 1.54 5.62l-2.22.59Zm-2.17-7.79c-.54-1.86-1.09-3.72-1.63-5.57l2.22-.63c.55 1.86 1.09 3.71 1.63 5.58l-2.22.63Zm-2.27-7.8-.68-2.17 2.22-.68.68 2.22-2.22.63Zm-1.36-4.39c-.59-1.86-1.13-3.72-1.72-5.53l2.17-.73c.59 1.86 1.18 3.71 1.76 5.58l-2.22.68Zm-2.45-7.75c-.59-1.86-1.22-3.66-1.81-5.52l2.17-.73c.64 1.86 1.22 3.67 1.86 5.53l-2.22.72Zm-2.59-7.7c-.22-.72-.49-1.45-.72-2.17l2.17-.77c.28.73.5 1.45.77 2.17l-2.22.78Zm-1.49-4.4c-.63-1.81-1.31-3.62-1.95-5.44l2.17-.76c.63 1.81 1.32 3.62 1.95 5.44l-2.17.76Zm-2.76-7.61c-.68-1.81-1.36-3.62-2.09-5.39l2.18-.86c.72 1.81 1.4 3.63 2.08 5.44l-2.17.81Zm-2.9-7.57c-.27-.72-.59-1.4-.86-2.12l2.13-.86c.32.72.59 1.45.86 2.17l-2.13.81Zm-1.72-4.25c-.77-1.81-1.49-3.58-2.27-5.35l2.13-.91c.77 1.76 1.54 3.53 2.27 5.35l-2.13.91Zm-3.17-7.47c-.77-1.77-1.59-3.53-2.4-5.26l2.13-.99c.82 1.76 1.59 3.54 2.4 5.3l-2.13.96Zm-3.36-7.39c-.36-.68-.68-1.36-.99-2.09l2.08-1c.32.73.68 1.41 1 2.13l-2.09.95Zm-2.04-4.12c-.86-1.76-1.72-3.49-2.58-5.16l2.04-1.09c.91 1.72 1.76 3.44 2.63 5.21l-2.09 1.04Zm-3.67-7.2c-.91-1.73-1.86-3.4-2.81-5.08l2.04-1.14c.91 1.68 1.86 3.4 2.81 5.12l-2.04 1.09Zm-3.94-7.07c-.41-.63-.81-1.32-1.22-1.95l2-1.23c.41.68.81 1.36 1.22 2l-1.99 1.18Zm-2.4-3.95c-1.04-1.63-2.08-3.26-3.13-4.8l1.91-1.32c1.04 1.54 2.13 3.22 3.17 4.9l-1.95 1.22Zm-4.44-6.71c-1.13-1.58-2.27-3.17-3.4-4.66l1.86-1.4c1.13 1.54 2.32 3.13 3.45 4.76l-1.9 1.31Zm-4.81-6.47-1.45-1.81 1.81-1.45 1.45 1.86-1.81 1.4Zm-2.9-3.63-3.58-4.53 1.81-1.45 3.63 4.54-1.86 1.45Zm-5.03-6.39-3.58-4.53 1.81-1.46 3.57 4.58-1.81 1.41Zm-5.03-6.34-1.4-1.81 1.81-1.45 1.4 1.81-1.81 1.45Zm-2.85-3.68-3.58-4.53 1.81-1.45 3.58 4.58-1.81 1.4Zm-5.03-6.39-3.57-4.53 1.81-1.45 3.57 4.57-1.81 1.41Zm-5.03-6.39-1.4-1.81 1.81-1.45 1.45 1.86-1.86 1.4Zm-2.85-3.62-3.54-4.57 1.81-1.46 3.58 4.58-1.86 1.44Zm-4.98-6.43c-1.18-1.55-2.36-3.09-3.54-4.58l1.86-1.4c1.13 1.49 2.31 3.04 3.53 4.57l-1.86 1.41Zm-4.94-6.44-1.4-1.81 1.81-1.45 1.4 1.86-1.81 1.41Zm-2.86-3.67c-1.18-1.54-2.36-3.08-3.49-4.62l1.81-1.41c1.18 1.54 2.36 3.08 3.53 4.62l-1.86 1.4Zm-4.89-6.48c-1.18-1.54-2.36-3.08-3.49-4.62l1.81-1.4c1.17 1.55 2.31 3.08 3.49 4.63l-1.81 1.4Zm-4.89-6.48-1.41-1.86 1.86-1.41 1.4 1.86-1.86 1.4Zm-2.77-3.71c-1.18-1.59-2.36-3.13-3.49-4.67l1.9-1.36c1.13 1.54 2.27 3.08 3.45 4.62l-1.86 1.4Zm-4.85-6.57c-1.14-1.54-2.27-3.12-3.4-4.67l1.86-1.36c1.14 1.54 2.27 3.13 3.4 4.66l-1.86 1.36Zm-4.76-6.57-1.36-1.9 1.9-1.31 1.36 1.86-1.9 1.36Zm-2.72-3.76c-1.08-1.63-2.22-3.21-3.31-4.76l1.9-1.36c1.09 1.58 2.17 3.17 3.3 4.76l-1.9 1.36Zm-4.61-6.7c-1.13-1.59-2.22-3.22-3.26-4.81l1.9-1.27c1.08 1.59 2.17 3.17 3.26 4.76l-1.9 1.32Zm-4.58-6.7-1.27-1.95 1.9-1.27 1.31 1.9-1.95 1.32Zm-2.54-3.9c-1.09-1.63-2.13-3.27-3.17-4.89l1.95-1.23c1.04 1.59 2.08 3.22 3.13 4.85l-1.9 1.27Zm-4.4-6.84c-1.04-1.68-2.08-3.36-3.03-4.99l2-1.18c.95 1.63 1.95 3.26 2.99 4.94l-1.95 1.23Zm-4.26-6.98c-.36-.68-.77-1.36-1.18-1.99l2.04-1.18c.36.68.77 1.32 1.13 2l-1.99 1.18Zm-2.31-4.03c-1-1.73-1.95-3.39-2.86-5.07l2.04-1.09c.91 1.63 1.85 3.3 2.81 5.03l-2 1.13Zm-3.95-7.16c-.9-1.72-1.81-3.49-2.67-5.16l2.08-1.05c.81 1.68 1.72 3.4 2.63 5.17l-2.04 1.04Zm-3.66-7.25c-.36-.73-.68-1.45-1-2.13l2.08-.95c.32.68.68 1.36 1 2.09l-2.08 1Zm-1.95-4.26c-.82-1.81-1.59-3.63-2.31-5.34l2.17-.91c.68 1.76 1.45 3.53 2.22 5.3l-2.08.95Zm-3.17-7.53c-.68-1.9-1.36-3.71-1.95-5.52l2.18-.73c.59 1.77 1.27 3.58 1.95 5.39l-2.17.86Zm-2.68-7.74c-.22-.77-.45-1.49-.68-2.27l2.27-.63c.18.73.41 1.45.63 2.22l-2.22.68Zm-1.27-4.53c-.5-1.9-.96-3.85-1.32-5.71l2.31-.45c.31 1.86.77 3.71 1.22 5.57l-2.22.59Zm-1.72-8.02c-.32-1.99-.54-3.94-.73-5.84l2.31-.19c.18 1.86.41 3.76.73 5.67l-2.31.36Zm-.86-8.2c-.04-.77-.09-1.58-.09-2.35l2.32-.05c0 .76.04 1.54.09 2.27l-2.31.13Zm2.22-4.66-2.32-.05c.05-1.99.14-3.94.36-5.89l2.32.27c-.23 1.86-.32 3.76-.36 5.66Zm.63-7.93-2.27-.36c.27-1.9.68-3.85 1.13-5.75l2.27.54a54.93 54.93 0 0 0-1.13 5.57Zm1.72-7.75-2.22-.68c.23-.72.46-1.49.68-2.22l2.22.72c-.27.72-.45 1.45-.68 2.17Zm1.4-4.35-2.13-.81c.64-1.81 1.45-3.63 2.31-5.39l2.09 1c-.86 1.72-1.59 3.49-2.27 5.21Zm3.27-7.25-2.04-1.09c.86-1.68 1.86-3.4 2.89-5.08l2 1.23c-1.04 1.63-2 3.3-2.86 4.94Zm4.08-6.88-1.95-1.27c.45-.64.86-1.32 1.36-1.95l1.86 1.36c-.41.59-.86 1.22-1.27 1.86Zm2.62-3.72-1.86-1.4c1.13-1.49 2.36-3.08 3.63-4.58l1.77 1.45c-1.22 1.54-2.45 3.04-3.54 4.53Zm5.03-6.25-1.72-1.54c1.22-1.4 2.58-2.86 3.94-4.31l1.68 1.63c-1.36 1.4-2.68 2.81-3.9 4.21Zm5.53-5.85-1.68-1.67c.54-.55 1.13-1.09 1.68-1.64l1.63 1.68c-.59.54-1.13 1.09-1.63 1.63Zm3.26-3.22-1.59-1.68c1.4-1.31 2.86-2.62 4.35-3.94l1.54 1.77c-1.5 1.27-2.95 2.59-4.31 3.85Zm6.02-5.39-1.49-1.76c1.4-1.18 2.95-2.45 4.49-3.72l1.45 1.81c-1.54 1.27-3.04 2.49-4.44 3.67Zm6.25-5.07-1.45-1.86c.63-.45 1.22-.95 1.86-1.4l1.4 1.81c-.59.49-1.22.95-1.81 1.45Zm3.68-2.86-1.41-1.81c1.49-1.18 3.08-2.31 4.66-3.48l1.36 1.9c-1.59 1.13-3.12 2.27-4.62 3.4Zm6.52-4.76-1.36-1.9c1.54-1.09 3.17-2.18 4.81-3.31l1.27 1.9c-1.59 1.13-3.17 2.22-4.71 3.31Zm6.66-4.57-1.32-1.95c.63-.41 1.27-.87 1.95-1.27l1.27 1.95c-.63.41-1.27.81-1.9 1.27Zm3.85-2.54-1.27-1.95c1.59-1.04 3.22-2.13 4.89-3.17l1.22 1.99c-1.63 1.04-3.26 2.09-4.85 3.13Zm6.8-4.4-1.22-1.95c1.63-1 3.26-2.04 4.94-3.04l1.23 1.95c-1.68 1.04-3.31 2.04-4.94 3.03Zm6.93-4.21-1.22-2c.68-.41 1.36-.81 2-1.18l1.22 1.99c-.68.36-1.36.77-2 1.18Zm3.94-2.36-1.18-2c1.67-1 3.35-1.95 5.03-2.94l1.18 1.99c-1.72 1-3.35 1.95-5.03 2.95Zm7.02-4.08-1.13-2.04 1.72-.95c1.09-.63 2.17-1.27 3.26-1.9l1.17 1.99c-1.08.64-2.22 1.27-3.31 1.9l-1.72 1Zm7.07-4.08-1.17-2 2-1.18 1.18 1.99-2 1.18Zm3.99-2.36-1.18-1.99c1.63-.99 3.31-1.99 4.94-2.99l1.22 1.95a301.92 301.92 0 0 1-4.98 3.03Zm6.93-4.21-1.18-1.99 4.94-3.04 1.17 1.99-4.93 3.04Zm6.93-4.26-1.22-1.95 2-1.22 1.22 2-2 1.18Zm3.94-2.4-1.18-1.99c1.63-.99 3.26-1.99 4.94-2.99l1.18 2c-1.63.99-3.31 1.99-4.93 2.98Zm6.93-4.17-1.17-1.99c1.63-1 3.31-2 4.98-2.95l1.18 1.99c-1.68 1-3.3 1.95-4.98 2.95Zm6.98-4.12-1.13-2 1.99-1.18 1.18 2.04-2.04 1.14Zm4.03-2.27-1.13-2.04c1.68-.9 3.36-1.86 5.08-2.81l1.13 2.04c-1.72.95-3.4 1.86-5.07 2.81Zm7.11-3.9-1.09-2.04c1.68-.91 3.4-1.81 5.12-2.67l1.08 2.04c-1.76.91-3.44 1.77-5.12 2.67Zm7.16-3.71-1.04-2.09c.68-.32 1.4-.68 2.08-1l1.05 2.09c-.73.32-1.41.68-2.09 1Zm4.13-2.04-1-2.09c1.72-.81 3.49-1.63 5.25-2.49l1 2.13c-1.77.81-3.53 1.63-5.25 2.45Zm7.34-3.4-.95-2.13c1.77-.77 3.53-1.54 5.35-2.31l.91 2.13c-1.81.77-3.57 1.54-5.3 2.32Zm7.43-3.22-.9-2.13c.72-.32 1.45-.59 2.17-.91l.86 2.18c-.73.27-1.45.54-2.13.86Zm4.26-1.76-.86-2.13c1.77-.73 3.58-1.41 5.44-2.09l.81 2.13c-1.81.73-3.62 1.41-5.39 2.09Zm7.56-2.86-.81-2.17c1.81-.68 3.62-1.31 5.48-1.99l.77 2.22c-1.86.63-3.67 1.27-5.44 1.95Zm7.61-2.72-.77-2.17c.77-.27 1.49-.49 2.22-.77l.73 2.22c-.73.23-1.45.49-2.17.72Zm4.39-1.45-.72-2.18c1.81-.59 3.67-1.18 5.53-1.76l.68 2.22c-1.86.59-3.68 1.13-5.49 1.73Zm7.7-2.41-.63-2.22c1.81-.55 3.67-1.04 5.57-1.59l.63 2.22c-1.9.54-3.76 1.09-5.58 1.59Zm7.8-2.17-.63-2.27c.76-.18 1.49-.41 2.27-.59l.59 2.22c-.73.23-1.49.41-2.22.63Zm4.44-1.22-.54-2.22c1.81-.5 3.71-.95 5.61-1.41l.54 2.22c-1.9.45-3.76.95-5.62 1.4Zm7.88-1.95-.54-2.27c1.86-.4 3.76-.86 5.66-1.27l.5 2.27c-1.9.41-3.77.86-5.62 1.27Zm7.89-1.76-.5-2.27 2.27-.5.5 2.27-2.27.5Zm4.53-1-.45-2.27c1.86-.36 3.76-.77 5.67-1.13l.45 2.27c-1.9.36-3.81.77-5.67 1.13Zm7.93-1.54-.41-2.31c1.86-.36 3.76-.68 5.7-1.04l.41 2.27c-1.95.36-3.85.72-5.71 1.08Zm7.97-1.45-.41-2.31 2.32-.41.36 2.32-2.27.4Zm4.57-.77-.41-2.31c1.9-.32 3.8-.63 5.76-.9l.36 2.27c-1.95.32-3.85.63-5.71.95Zm7.98-1.27-.32-2.31c1.9-.27 3.8-.54 5.75-.81l.32 2.27c-1.95.27-3.85.55-5.76.86Zm8.02-1.18-.32-2.27 2.31-.32.32 2.27-2.31.32Zm4.62-.59-.31-2.32c1.9-.22 3.8-.49 5.75-.72l.27 2.31c-1.9.22-3.85.45-5.71.73Zm8.02-1-.27-2.31c1.9-.22 3.85-.45 5.76-.63l.27 2.27c-1.95.22-3.85.45-5.75.68Zm8.06-.91-.27-2.31 2.31-.22.28 2.31-2.32.22Zm4.58-.5-.23-2.27c1.9-.22 3.85-.41 5.8-.59l.23 2.32c-1.95.18-3.9.36-5.8.54Zm8.11-.73-.23-2.31c1.9-.18 3.85-.36 5.8-.54l.18 2.31c-1.95.18-3.85.36-5.75.54Zm8.07-.72-.19-2.31 2.31-.18.19 2.31-2.31.19Zm4.62-.36-.18-2.31c1.9-.13 3.85-.27 5.8-.4l.14 2.31c-1.95.13-3.85.27-5.75.41Zm8.07-.54-.14-2.32c1.91-.14 3.85-.27 5.81-.4l.13 2.31c-1.95.13-3.9.27-5.8.41Zm8.11-.55-.13-2.31 2.31-.14.14 2.31-2.32.14Zm4.62-.23-.13-2.35c1.9-.09 3.85-.18 5.8-.27l.13 2.31c-1.95.09-3.89.18-5.8.32Zm8.11-.41-.14-2.35c1.54-.05 3.04-.14 4.58-.18.36 0 .78-.04 1.14-.09l.27 2.31c-.45.04-.9.08-1.31.08-1.54.09-3.04.14-4.53.23Zm8.24-.72-.45-2.27c.68-.14 1.41-.32 2.13-.55l.68 2.22c-.81.23-1.59.45-2.36.59Zm4.62-1.32-.77-2.17c1.68-.59 3.45-1.31 5.26-2.17l1 2.08c-1.9.91-3.76 1.68-5.48 2.27Zm7.57-3.3-1.04-2.08c1.68-.81 3.31-1.77 4.98-2.77l1.22 1.95c-1.73 1.04-3.45 2.04-5.17 2.9Zm7.16-4.17-1.27-1.9c.64-.46 1.27-.86 1.9-1.32l1.31 1.95c-.63.41-1.31.86-1.95 1.27Zm3.85-2.67-1.36-1.86c1.59-1.13 3.08-2.35 4.49-3.53l1.5 1.77c-1.4 1.22-2.99 2.45-4.63 3.62Zm6.39-5.21-1.59-1.72c1.49-1.41 2.8-2.77 3.89-4.08l1.77 1.45c-1.14 1.41-2.49 2.86-4.08 4.35Zm5.52-6.3-1.9-1.26c.45-.68.81-1.32 1.08-1.91l2.09 1.04c-.32.68-.77 1.41-1.27 2.13Zm2.18-4.39-2.18-.81c.63-1.81 1.32-3.67 2.04-5.44l2.18.86c-.73 1.72-1.41 3.53-2.04 5.39Zm2.9-7.52-2.17-.91c.77-1.81 1.59-3.58 2.36-5.34l2.13 1c-.82 1.72-1.59 3.49-2.32 5.26Zm3.3-7.34-2.08-1c.32-.72.68-1.4 1.04-2.13l2.04 1.08c-.32.68-.68 1.36-1 2.04Zm2.09-4.08-2.04-1.08c.91-1.77 1.86-3.44 2.85-5.12l2 1.18c-.95 1.63-1.9 3.31-2.81 5.03Zm3.98-6.97-1.95-1.22c1-1.68 2.08-3.31 3.17-4.89l1.9 1.31a120.24 120.24 0 0 0-3.13 4.8Zm4.49-6.66-1.9-1.36c.45-.63.95-1.27 1.4-1.9l1.86 1.4c-.45.63-.91 1.22-1.36 1.86Zm2.76-3.67-1.81-1.45c1.18-1.5 2.45-3 3.72-4.49l1.76 1.54c-1.27 1.45-2.49 2.9-3.67 4.39Zm5.17-6.12-1.68-1.54c1.27-1.45 2.63-2.85 4.03-4.21l1.63 1.63c-1.36 1.36-2.68 2.72-3.98 4.12Zm5.66-5.71-1.63-1.68c.59-.55 1.18-1.09 1.72-1.63l1.59 1.72c-.59.54-1.13 1.04-1.67 1.59Zm3.4-3.08-1.54-1.77c1.45-1.27 2.95-2.54 4.49-3.76l1.45 1.81c-1.49 1.22-2.99 2.45-4.39 3.72Zm6.2-5.12-1.4-1.81c1.49-1.18 3.08-2.36 4.66-3.49l1.36 1.9c-1.59 1.13-3.17 2.27-4.62 3.4Zm6.52-4.71-1.32-1.9c.64-.45 1.27-.91 1.9-1.31l1.32 1.9c-.64.45-1.27.86-1.91 1.32Zm3.81-2.58-1.27-1.95c1.68-1.04 3.31-2.08 4.94-3.13l1.23 2c-1.59 1-3.22 2.04-4.9 3.08Zm6.84-4.3-1.18-1.99c1.59-.95 3.17-1.9 4.71-2.86l.22-.13 1.22 2-.27.13c-1.54.95-3.09 1.9-4.71 2.85Zm6.98-4.21-1.23-2c.68-.4 1.31-.77 1.99-1.18l1.18 1.95c-.64.41-1.32.82-1.95 1.23Zm3.93-2.45-1.22-1.95c1.86-1.13 3.4-2.17 4.84-3.12l1.27 1.9c-1.41 1-3.03 2.04-4.9 3.17Zm6.85-4.48-1.36-1.91c1.72-1.17 3.17-2.31 4.53-3.44l1.49 1.76c-1.4 1.18-2.95 2.36-4.66 3.58Zm6.43-5.12-1.54-1.73c.55-.5 1.09-1.04 1.63-1.54l1.63 1.63c-.55.55-1.13 1.09-1.72 1.63Zm3.35-3.4-1.72-1.54a29.4 29.4 0 0 0 3.31-4.44l1.99 1.22c-1 1.63-2.22 3.21-3.58 4.76Zm4.76-6.85-2.08-1.08c.86-1.63 1.54-3.35 2.04-5.12l2.22.6c-.54 1.95-1.27 3.85-2.17 5.61Zm2.77-8.06-1.54-.22-.72-.19.41-2.17 2.26.45-.4 2.13Zm.86-4.39-2.27-.49c.41-1.95.81-3.81 1.22-5.66l2.27.49c-.41 1.81-.82 3.72-1.22 5.66Zm1.72-7.93-2.27-.49c.45-1.95.86-3.85 1.32-5.66l2.26.55c-.45 1.81-.86 3.66-1.32 5.61Zm1.86-7.84-2.27-.59c.22-.77.4-1.49.59-2.22l2.27.55c-.22.77-.41 1.49-.59 2.27Zm1.18-4.49-2.27-.59c.54-1.94 1.04-3.8 1.59-5.61l2.22.68c-.54 1.76-1.04 3.63-1.54 5.52Zm2.22-7.74-2.22-.68c.59-1.9 1.18-3.76 1.81-5.53l2.17.77c-.59 1.72-1.18 3.53-1.76 5.44Zm2.53-7.61-2.17-.77c.27-.77.55-1.49.82-2.22l2.17.86c-.27.68-.54 1.4-.82 2.13Zm1.68-4.26-2.17-.91c.77-1.86 1.59-3.67 2.4-5.3l2.08 1c-.81 1.63-1.59 3.36-2.31 5.21Zm3.3-7.25-2.04-1.04a69.64 69.64 0 0 1 2.94-5.08l1.95 1.22a63.43 63.43 0 0 0-2.85 4.89Zm4.13-6.75-1.9-1.36c.45-.64.95-1.27 1.4-1.86l1.81 1.41c-.45.59-.91 1.18-1.31 1.81Zm2.76-3.54-1.77-1.54c1.32-1.49 2.68-2.86 4.17-4.17l1.54 1.72c-1.41 1.27-2.72 2.54-3.94 3.99Zm5.66-5.39-1.45-1.81c1.49-1.18 3.08-2.27 4.85-3.36l1.22 2c-1.68 1-3.22 2.04-4.62 3.17Zm6.57-4.35-1.13-1.99c.68-.41 1.36-.77 2.08-1.13l1.09 2.04-2.04 1.08Zm4.08-2.08-1.04-2.08c1.68-.86 3.4-1.68 5.21-2.49l1 2.08a89.12 89.12 0 0 0-5.17 2.49Zm7.25-3.49-.95-2.08c1.67-.77 3.4-1.58 5.21-2.45l.99 2.09c-1.81.86-3.53 1.67-5.25 2.44Zm7.34-3.49-1.04-2.08c.68-.32 1.36-.68 2.04-1.04l1.08 2.04c-.73.36-1.4.72-2.08 1.08Zm4.12-2.17-1.09-2.04c1.72-.9 3.35-1.86 4.98-2.81l1.18 2c-1.68.95-3.31 1.9-5.07 2.85Zm7.07-4.07-1.22-1.99c1.59-1 3.22-2.04 4.8-3.13l1.32 1.9c-1.63 1.08-3.27 2.17-4.89 3.22Zm6.8-4.57-1.36-1.86c.63-.45 1.22-.91 1.86-1.36l1.36 1.86c-.64.45-1.22.95-1.86 1.36Zm3.76-2.77-1.45-1.86c1.49-1.14 3.03-2.31 4.49-3.58l1.49 1.81c-1.49 1.22-3.04 2.45-4.53 3.63Zm6.3-5.17-1.5-1.71c1.41-1.23 2.85-2.54 4.31-3.85l1.54 1.72c-1.45 1.31-2.9 2.63-4.35 3.85Zm6.07-5.44-1.59-1.68c.54-.54 1.09-1.04 1.63-1.59l1.63 1.63c-.54.55-1.13 1.09-1.68 1.63Zm3.36-3.26-1.63-1.63c1.32-1.32 2.67-2.72 4.03-4.13l1.68 1.63c-1.36 1.4-2.72 2.81-4.07 4.12Zm5.66-5.85-1.68-1.59c1.27-1.36 2.54-2.76 3.85-4.25l1.72 1.54c-1.32 1.5-2.63 2.95-3.89 4.3Zm5.44-6.02-1.73-1.54c.51-.59 1-1.18 1.5-1.77l1.76 1.55c-.49.59-1 1.17-1.54 1.76Zm3.03-3.53-1.76-1.49c1.22-1.45 2.45-2.94 3.67-4.49l1.81 1.49c-1.27 1.54-2.49 3.04-3.71 4.49Zm5.17-6.3-1.81-1.44c1.18-1.5 2.35-2.99 3.58-4.58l1.81 1.45c-1.22 1.54-2.41 3.08-3.58 4.57Zm4.98-6.43-1.86-1.41c.5-.59.95-1.22 1.4-1.86l1.86 1.4c-.45.64-.9 1.22-1.4 1.86Zm2.81-3.71-1.86-1.41c1.09-1.5 2.22-3.08 3.39-4.67l1.87 1.36c-1.14 1.63-2.27 3.17-3.4 4.72Zm4.76-6.62-1.9-1.31c1.09-1.54 2.22-3.13 3.31-4.76l1.95 1.31c-1.13 1.63-2.27 3.22-3.35 4.76Zm4.67-6.66-1.95-1.32c.45-.63.86-1.27 1.31-1.9l1.9 1.32c-.41.63-.86 1.27-1.27 1.9Z\",\n className: \"background_map_svg__cls-4\"\n}))));\nexport { SvgBackgroundMap as ReactComponent };\nexport default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogIHZpZXdCb3g9IjAgMCA5MjcuOSA5MjcuOSI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSwKICAgICAgLmNscy0yIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuY2xzLTIgewogICAgICAgIGNsaXAtcGF0aDogdXJsKCNjbGlwcGF0aC0xKTsKICAgICAgfQoKICAgICAgLmNscy0zIHsKICAgICAgICBmaWxsOiByZ2IoMzksIDM5LCA0Mik7CiAgICAgIH0KCiAgICAgIC5jbHMtNCB7CiAgICAgICAgZmlsbDogcmdiKDM5LCAzOSwgNDIpOwogICAgICB9CgogICAgICAuY2xzLTUgewogICAgICAgIGZpbGw6IHJnYigzOSwgMzksIDQyKTsKICAgICAgICBmaWxsLXJ1bGU6IGV2ZW5vZGQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8Y2xpcFBhdGggaWQ9ImNsaXBwYXRoLTEiPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSI5MjcuOSIgaGVpZ2h0PSI5MjcuOSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgogIDxnIGlkPSJMYXllcl8xLTIiIGRhdGEtbmFtZT0iTGF5ZXIgMSI+CiAgICA8ZyBjbGFzcz0iY2xzLTIiPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTkxNC45NSw5MTIuNjhsLjc3LTEuMTMuOTUtLjksMi41My0zLjEzLDIuNzItMi41OSwxLjA5LTEuNTksMS40LTEuMTMsMi40LTIuNzIsMy4zMS0yLjQuNjgtMS4zMiwxLjMxLS44Ni0uNDUtLjczLTEuNTksMS4wNS0uNjgsMS4zNi0zLjE3LDIuMjctMi4zMSwyLjYzLTEuNjgsMS40LTEsMS41LTIuNjMsMi40OS0yLjU0LDMuMDktMS4wOSwxLjA0LS42OCwxLjA4LTIuODEsMy4zNWMtMS4wNCwxLjQtMi4xMywyLjgxLTMuMjYsNC4yNiwwLC4wNSwwLDAsMC0uMDVsLS4xMy4yNy0zLjQ0LDQuMTItMi42MywzLjU4LjcyLjUsMi41OS0zLjU0LDMuNjMtNC4zOXMwLS4wNC4wNC0uMDRsMy4yMi00LjIyLDIuNzItMy4yNloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtOTI3Ljk1LDkwOC41MWw0LjEzLTMuODEtLjQxLS43Ny0uMzIuMjItMy45NCwzLjY3LTMuNjcsMy45OS0uMjcuMzItMy4xNyw0LjIxYy0uOTUsMS4xOC0xLjk1LDIuMzYtMi45LDMuNDlsLS41Ljc3LS44Ni45LTIuNjcsMy40LTIuMzYsMi42Ny42OC41OXYuNTktLjU5bDIuMzEtMi42NywyLjY4LTMuNC44MS0uODYuNTQtLjgyLDIuOTUtMy41MywzLjUzLTQuNjMsMy40NC0zLjc2WiIgLz4KICAgICAgPHBvbHlnb24gY2xhc3M9ImNscy0zIgogICAgICAgIHBvaW50cz0iOTI5LjAzIDkxNy4yOSA5MjYuOTUgOTE5Ljg4IDkyNS44MiA5MjIuMDEgOTIzLjc4IDkyNC4zNyA5MjIuNTEgOTI2LjIyIDkyMS4yNCA5MjcuNTggOTIxLjg4IDkyOC4xNyA5MjEuODggOTI4LjE3IDkyMy4xNCA5MjYuODYgOTI0LjQ2IDkyNC45NSA5MjYuNTQgOTIyLjUxIDkyNy42MyA5MjAuNDcgOTI5LjY3IDkxNy44NCA5MzIuMjUgOTEzLjk1IDkzMS41MiA5MTMuNDUgOTI5LjAzIDkxNy4yOSIgLz4KICAgICAgPHBvbHlnb24gY2xhc3M9ImNscy0zIgogICAgICAgIHBvaW50cz0iOTIzLjY5IDgyNy41NCA5MjYuNDEgODM0Ljk4IDkyNi41OSA4MzUuMiA5MzEuNjIgODM4LjkyIDkzMi4xNiA4MzguMjQgOTI3LjE4IDgzNC41NyA5MjQuNSA4MjcuMDkgOTI0LjUgODI3IDkyNC41IDgyNi45MSA5MjQuNSA4MjYuODIgOTI0LjQ2IDgxOS4zOSA5MjQuNSA4MTkuMTYgOTI1LjI3IDgxMi4zMiA5MjUuMjIgODExLjY5IDkyNi4yMiA4MDMuOCA5MjYuNjggNzk4LjI4IDkyNy4wOSA3OTYuMTUgOTI3LjI2IDc5MC45OCA5MjguMTMgNzg4LjQ1IDkyOC4xMyA3ODguMzUgOTI4LjEzIDc4OC4yNiA5MjcuNzcgNzgzLjg3IDkyOS42NyA3ODAuNzggOTI5LjY3IDc4MC42MSA5MjkuNzEgNzgwLjQ3IDkyOS4zNSA3NzcuODQgOTMxLjk4IDc3Ny4zNSA5MzEuNzkgNzc2LjQ4IDkyOC43NiA3NzcuMDcgOTI4Ljc2IDc3Ny40MyA5MjguNCA3NzcuNTcgOTI4Ljg1IDc4MC40NyA5MjYuOTUgNzgzLjUgOTI2Ljk1IDc4My42OSA5MjYuOSA3ODMuNzggOTI3LjI2IDc4OC4yNiA5MjYuMzYgNzkwLjk4IDkyNi4yNyA3OTUuOTIgOTI1LjgyIDc5OC4wOSA5MjUuMzcgODAzLjcyIDkyNS4zNyA4MDMuODkgOTI1LjMyIDgwMy45NCA5MjQuMzcgODExLjUgOTI0LjQxIDgxMi4xNCA5MjMuNiA4MTkuMyA5MjMuNjQgODI3LjA5IDkyMy42IDgyNy4xOCA5MjMuNjkgODI3LjU0IiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTkwNy44NywzNy41MWM0Ljg1LS41LDExLjk2LTQuNTMsMjEuMTYtMTEuOTF2LTEuMDljLTkuMzMsNy41Mi0xNi40OSwxMS42NC0yMS4yNSwxMi4xNS0uMjMuMDQtLjQxLjA0LS42My4wNC0yLjQsMC00LjAzLTEuNTktNC45OC0yLjktMi42OC0zLjc2LTMuNzYtMTEuMDUtLjY4LTE3LjcxLDIuNDktNS4zOSw3LjItMTEuNzQsMTQuMDUtMTguOWgtMS4yMmwtLjM2LjQxYy02LjM5LDYuNzktMTAuODMsMTIuOTEtMTMuMjcsMTguMTItMy4yMiw2Ljk3LTIuMDQsMTQuNjMuODEsMTguNTcsMS42MywyLjMxLDMuOTQsMy40OSw2LjM5LDMuMjJaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiCiAgICAgICAgZD0ibTkzMy45Myw4NDQuNzJzLS40LS4wNS0xLjA4LS4xOGMtLjY0LS4xMy0xLjUtLjM2LTIuMzYtLjQ5LTEuNzItLjMyLTMuNDktLjUtMy40OS0uNWwtLjI3LDIuMzFzMS42Ny4xOCwzLjM1LjQ5Yy44Ni4xNCwxLjY4LjMyLDIuMzEuNDUuNjMuMTQsMS4wNC4xOCwxLjA0LjE4bC41LTIuMjdaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiCiAgICAgICAgZD0ibTkyNC4wMSw4NDMuMjJzLS40MS0uMDUtMS4wOS0uMDUtMS41NC0uMDQtMi40NS0uMDRjLTEuNzYuMDktMy40OS4xOC0zLjQ5LjE4bC4wOSwyLjMyczEuNzMtLjA5LDMuNDUtLjE5Yy44MS4wNSwxLjY4LjA1LDIuMzEuMDUuNjMuMDUsMS4wNC4wOSwxLjA0LjA5bC4xNC0yLjM2WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im05MTQuMDQsODQzLjQ1cy0uODYuMDUtMS43Mi4wOWMtLjg2LjA5LTEuNzcuMTgtMS43Ny4xOGwuMjMsMi4zMXMuODYtLjA5LDEuNzItLjE4Yy44Ni0uMDUsMS43Mi0uMDksMS43Mi0uMDlsLS4xOC0yLjMxWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im05MDcuNjUsODQ0LjA0cy0xLjcyLjE4LTMuNDQuMzZjLTEuNzIuMzItMy40NS41OS0zLjQ1LjU5bC4zNywyLjMxczEuNjctLjMxLDMuNC0uNTljMS43Mi0uMTgsMy40LS4zNiwzLjQtLjM2bC0uMjgtMi4zMVoiIC8+CiAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtNCIgcG9pbnRzPSI4OTMuNTEgNTYxLjcyIDg5Mi40MyA1NjIuNjggODkxLjY1IDU2MS43NyA4OTIuNzQgNTYwLjgyIDg5My41MSA1NjEuNzIiIC8+CiAgICAgIDxyZWN0IGNsYXNzPSJjbHMtNCIgeD0iMTc3LjE5IiB5PSI3NzguNTciIHdpZHRoPSIxLjMyIiBoZWlnaHQ9IjEuNTgiCiAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTU4Mi41MyA1MzIuNjcpIHJvdGF0ZSgtNTkuMTcpIiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTYwLjc1IDgxNC4wNSAxNTUuNSA4MTAuOTEgMTU4LjA4IDgwNi41MiAxNjMuMzMgODA5LjY5IDE2MC43NSA4MTQuMDUiIC8+CiAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtNCIgcG9pbnRzPSIxODkuMzggODIwLjMgMTg0LjgxIDgxNy41NyAxODcuMDggODEzLjgyIDE5MS42NSA4MTYuNTQgMTg5LjM4IDgyMC4zIiAvPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTQiIHg9IjE1OS45NyIgeT0iNzgwLjY4IiB3aWR0aD0iOC4yMyIgaGVpZ2h0PSI5LjkyIgogICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01OTQuODggNTI0LjYyKSByb3RhdGUoLTU5LjIyKSIgLz4KICAgICAgPHBvbHlnb24gY2xhc3M9ImNscy00IiBwb2ludHM9IjE0MC42NCA4MzAuNTggMTI4LjI2IDgyMy4yIDEzNC4zOCA4MTIuOTYgMTQ2Ljc1IDgyMC4zIDE0MC42NCA4MzAuNTgiIC8+CiAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtNCIgcG9pbnRzPSIxMzUuNyA4NTEuOTcgMTI5LjM1IDg0OC4yIDEzMi40OCA4NDIuOTEgMTM4LjgyIDg0Ni43MSAxMzUuNyA4NTEuOTciIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNSIKICAgICAgICBkPSJtNzQ2LjU0LDE4Ni4zMWgtOS4yOXYtOS4yOWMwLS41NC0uNTUtLjk1LTEuMTgtLjk1LS42OCwwLTEuMTguNDEtMS4xOC45NXY5LjI5aC05LjI5Yy0uNTQsMC0uOTUuNTQtLjk1LDEuMTdzLjQsMS4xOC45NSwxLjE4aDkuMjl2OS4yOWMwLC41LjQ5Ljk1LDEuMTguOTUuNjMsMCwxLjE4LS40NSwxLjE4LS45NXYtOS4yOWg5LjI5Yy40OSwwLC45MS0uNTQuOTEtMS4xOHMtLjQxLTEuMTctLjkxLTEuMTdaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTc3NS41Myw5MTguNDNsLTMuNjgtMS43Mi0yLjYyLS44Ni0xMi41LTMuNzEtMi40LS41OS00LjQ5LTEuODYtNC4xMi0yLjEzLTguMTYtNi42MS0uNTQtLjY4LTUuMDMtNy45My0zLjcxLTEwLjA2LTMuMTMtNy4zOC01LjcxLTguNDctLjM2LS40LTguNTItNS44LTQuNzEtMy4wMy00LjA0LTIuMDQtNi44NC00LjcxLTEuOS0xLjE4LTEtLjg2LTcuNzQtNi4yNS0yLjQ1LTIuNC02LjM0LTUuNTMtMy40OS0zLjI2LTUuMy00Ljc2LTQuNjYtMy45OC00LjEyLTMuNjItNi4zLTUuMTctOS45Mi03LjQyLTEwLjA2LTcuNjYtMi44Ni0yLjM2LTUuOTMtNS4zOS0zLjktMy40LTQuODktMy44NS03LjU3LTQuOTQtMi40OS0xLjIyLTcuNTctMy4wOC02LjM5LTIuMDgtMi40NS0uNzMtOS4xLTEuOTktMTAuNjEtMS43Ny0xMC4wMS0xLjIyLTUuMzUtLjUtNC43MS0uOTEtNC4xNy0uNzMtOC44My0zLjU3LTguNjUtMy45OS03LjIxLTMuMDgtMy44NS0xLjQ1LTYuMzQtMi4zNi00LjIxLTEuODEtNC41OC0xLjcyLTguNzQtMy45NC0yLjI3LTEuMTgtNi40OC0yLjk5LTYuOTgtMy40OS0xLjg2LS44Ni04Ljc5LTMuMzEtOC43OS0yLjI3LTguODMtLjk1LTYuNjEuODEtMi40LjIyLTQuNTMsMS43Ny00LjIxLDEuNC0yLjA4LDEuMDktNC41MywyLjA0LTEuMzIuODEtLjkuNDEtNC43NiwyLjY3LTMuOTksMS40OS0yLjEzLDEuMTgtNi43LDIuNDktNS4zOSwyLjk0LTMuMzEsMS4xOC0yLjgxLDEuNDUtNy44NCwyLjktNC43MSwyLjA4LTIuMTguNzItNC4yNSwxLjYzLTQuNDksMS40NS04LjkzLDIuNTgtMS4xMy4yMy03LjM4LDIuMDQtNS44Ljk1LTcuNDMsMS40LTQuMzUsMS04LjgzLDIuOTUtLjg2LjQ5LTQuODUsMi45OS0zLjIxLDEuNTQtMi4xMywxLjkxLTMuNzEsMi4zMS0xLjYzLDEuMzYtMS4xOC42My0zLjYzLDMuMjctNS44LDMuNDktNC4zMSwzLjc2LTMuODUsMi4yNy0xLjQsMS4yNy0yLjIyLDEuNDktMi42MiwyLjQxLTIuNTQsMS42Ny0yLjI3LDIuMzYtMy4xNywyLjM2LTEuNTksMS42OC0xLjc3LDEuMzYtMi43MiwyLjktMy41MywyLjgxLTEuMTgsMS4yNy0xLjM2LDEuMTMtMy4wOCwzLjEzLTQuMzksMy4yMi0uNTkuNTktLjY4LjUtMy44OSwzLjY2LTQuODUsMy4yMi0xLC43Ny0zLjk0LDMuOC0zLjg1LDIuOS0xLjA1Ljk1Yy0uNDkuMzYtLjk1LjY4LTEuMzYsMWwtLjE4LjE0LTIuNzcsMy40NC0zLjQ4LDMuNDQtLjg2LDEtLjkxLjkxLTIuNzIsNC4zNS0zLjI3LDQuNDktMy40OSw2LjM0LTEuNDUsMi40NC0xLjUsMy40NC0yLjU4LDUuMzQtLjg2LDIuMTMtMi4xMyw0LjM1LTEuNDUsMi4yMi0xLjcyLDMuMzEtMy40LDQuNzEtLjUuNjMtMy44NSw0LjMtNC44NSw0LjMxLS4xOS4xMy00LjE2LDMuOS00LjgsMy44OS0xLjM2Ljk2LTMuNCwzLjAzLTQuOTgsMy42Ny0zLjg5LDEuOTktMS43MiwxLjEzLTEuMTkuNTUtNC4zLDIuNjgtNC41OCwxLjktMS40OSwxLjA4LTIuOTksMS40MS40NS45MSwzLjIyLTEuNTksMS40NS0xLjA1LDQuMjYtMS43Miw0LjM1LTIuNzIsMS4xOC0uNTUsMS43Ni0xLjEzLDMuOS0xLjk5LDIuMDQtMS40NiwzLjA4LTIuMzEsMy4zNS0zLjAzLDEuNC0uOTYsNC44NS0zLjk0LDQuNjMtNC4yNiw0LjYyLTQuMDgsNC40OS01LjA4LDMuNC00LjcxLDEuNzItMy4zNSwxLjQ5LTIuMjIsMi4xOC00LjQ4LjkxLTIuMDksMi41OC01LjM5LDEuNDEtMy4zNSwxLjQ1LTIuNDUsMy40NC02LjI2LDMuMjctNC41MywyLjc2LTQuMzUuNzctLjc3Ljg2LTEsMy40NC0zLjQ0LDIuOS0zLjQ5LDEuMzEtMSwxLjA0LS45NSwzLjg1LTIuOSwzLjg1LTMuNzYsNS44OS0zLjk5LDMuOTQtMy42Ny42OC0uNS41NC0uNTksNC40NC0zLjIyLDMuMTMtMy4yMiwxLjM2LTEuMDgsMS4xMy0xLjI3LDMuNTgtMi43NiwyLjY4LTIuOSwxLjc3LTEuNCwxLjU5LTEuNjgsMy4xNy0yLjM2LDIuMzUtMi40NCwyLjQxLTEuNDksMi42My0yLjQ1LDIuMjEtMS40NSwxLjUtMS40LDMuNzEtMi4xMyw0LjMxLTMuNzYuNTQtLjM2LDUuMzUtMy4yMiwzLjYzLTMuMjYsMS4yMi0uNjMsMS41NC0xLjI3LDMuNjctMi4zMSwyLjM2LTIuMDgsMi45LTEuMzIsNS42MS0zLjQ0LDguNzQtMyw0LjM1LS45OSw3LjM4LTEuNDEsNS44LS45NSwxLjY0LS40MSwxNi4wNC00LjQ0LDQuNDQtMS40NSw2LjM5LTIuMzYsNC43MS0yLjEzLDEuNDUtLjUsNi4zOS0yLjM1LDIuODUtMS40NSwzLjMtMS4xOCw1LjU3LTMuMDRzMCwuMDUsMCwuMDVsLjE5LS4wOSw2LjMtMi4zNiwyLjE4LTEuMTcsMy45NC0xLjUsNC45LTIuNzIuODYtLjM3LDEuMzItLjgxLDQuNTctMi4wOCwxLjkxLTEsNC4zLTEuNSw0LjU3LTEuNzcsMi4wOS0uMTQsNi40OC0uODEsMS42My4yMyw2Ljk0LjYzLDguNzQsMi4yNyw4Ljc5LDMuMzEsMS44MS44MSw2Ljk0LDMuNDksNi40OCwyLjk5LDIuMzEsMS4xOCw4Ljc5LDQsNC41MywxLjY3LDQuMjYsMS44NiwxMC4xOSwzLjgxLDcuMywzLjEzLDguOTMsNC4wOCw4LjY1LDMuNDksNC4yMS43Miw0LjY2LjkxLDUuNTMuNTQsMTAuMDEsMS4yMiwxMS4wMSwxLjg2LDguNDcsMS44NiwyLjQuNzIsNi4yNSwyLDcuNjEsMy4wOCwyLjMxLDEuMTMsNy41Miw0Ljk0LDQuODUsMy44MSwzLjk0LDMuMzYsNS44OSw1LjM5LDIuODUsMi40LDguNzksNi43NSwxMS4yNCw4LjM4LDYuMjksNS4xMiw0LjA4LDMuNjMsNC42NywzLjk4LDguNzksNy45OCw2LjMsNS41MywyLjQ0LDIuNGMyLjY4LDIuMTcsNS4zLDQuMjUsNy44OSw2LjM5bC45MS43NywyLjA0LDEuMjcsNi43OSw0LjcxLDQuMDMsMi4wNCw0LjcxLDMuMDQsOC41Miw1Ljg0LDUuOCw4LjQ3LDMuMDQsNy4yNS45MSwyLjMxYy45NiwyLjYzLDEuOTEsNS4yNiwyLjg1LDcuODhsNS4wOCw3Ljk3LjY4LjkxLDguMiw2LjYyLDQuMywyLjI3LDQuNTgsMS45LDIuNDkuNTksMTIuNjksMy44Yy44MS4yOCwxLjU5LjUxLDIuMjcuNzNsMy42NywxLjcyLDUuMDQsMi43Miw4LjA2LDYuMDIuNTktLjgxLTguMDItNS45My01LjE2LTIuODZaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTkzMi4zNCwzMDQuMTVsLS44Ni0uMDUtLjE0LDMuMTd2LjIzbC0uNjgsNy42NS0uNTksNi4yNi0uMzYsMS40NS0uNTksNS41My0xLjA5LDIuMzEtLjM2LDMuODEtMi45LDMuOTQtLjA4LjgxLS45NiwxLjA0LTEuNjgsMy45NC0yLjM1LDEuODEtMS4xNCwyLjQtMi41OCwxLjQxLTEuNDEsMi4zMS0zLjAzLDEuNTktMS4yNywxLjg2LTEuOTkuNzYtMi40LDIuNDktNS4zLDEuODEtLjQ1LjI4LTEuMzYuNDUtMy41NCwyLjQ0LTIuNC41LTMuMDMsMS43Ny00LjU4LDEtMS40NS42OC01LjI1LDEuMzYtLjcyLjUtLjQxLjE0LTQuMDgsMi45OS0zLjc2LDIuMjItMS4wOS44Ni0xLjI3LDEuMjctMS4zMiw0LjMtLjk1LDMuNDQtLjgyLDcuODQtLjA1LDIuNDktLjM2LDcuMzgtLjU5LDUuOC0uMDksMS4xOC0xLjQ5LDYuMzQtMi4wNCw1LjY3LTEuNjgsMS45NS0xLjQsMi42Ny0yLjQ1LDIuMTMtMS40NSwxLjU4LTIuMTcsMS4zNi0xLjYzLDIuNC0yLjU0LDIuNTMtMS4yMiwxLjU1LTEuMTgsMS4yNy0uMTMuMjItLjcyLDQuNTgtLjY0LDMuMTMuMDkuMTQtLjA1LjE4LDMuNzcsNy4zNC41NC41OSw3LjQzLDMuNDksNS4zLDEuOSw2LjE2LDIuNDEsMy45OSwxLjIyLDIuNTgsMS4yMyw1LjE3LDIuMTcsNC42NywyLjk5LDIuOTksMi43NiwzLjg1LDUuMDMsMS4xOCw0LjguODEsMi43Ni4zNiw3LjU3LS4xMyw3LjY2LTEsNS4wNy0uNzcsMi43Mi0xLjQ1LDIuODEtMi44MSwzLjM2LS41NC43Ny0uNTkuNjMtMi45LDMuNTgtMy42NywzLjUzLS42My44MS0xLjksNS4zNS0uNTksMi40NC0uMDUsNC44NS4zMiwzLjA4Ljk5LDYuMDcsMS43Myw2LjQ4LDEuMTgsMy4wNC44NywyLjA0LDIuNjcsNS43NiwzLjEzLDMuODksMy45LDMuOTksMy45NSwzLjA0LDUuNDQsNC42NiwyLjI2LDIuNTgsNC44NSw1LjI2LDIuOSw1LjEyLDIuMDksMi41Myw1LjgsOC4wMi4zNi4yMyw3LjQ4LDMuMDgsNC43NiwxLjMyLjEzLS4wNWguMThsMy4wNC0xLjI3LS4zMi0uODEtMi45NCwxLjI3LTQuNDktMS4yNy03LjctMy4xNy01LjU3LTcuODQtMi4wNC0yLjQxLTIuOTUtNS4zLTQuODktNS4zLTIuMjctMi41NC01LjU3LTQuOC0zLjgxLTIuOTUtMy44NS0zLjg5LTMuMDgtMy44NS0zLjQ5LTcuNjEtMS4xMy0yLjk1Yy0uNDEtMS42Mi0uODYtMy4yMS0xLjI3LTQuNzZsLS40MS0xLjY3LTEuMDQtNi4wMy0uMzItMi45NC4wOS00LjgxLjUtMi4yMiwxLjktNS4zNCw0LjA0LTMuOTgsMy41OC00LjI2LjU5LS44MiwyLjg5LTMuNDksMS41LTIuOTQuNzYtMi43NiwxLTUuMTIuMjItNy44LS40LTcuOTMtLjg2LTIuNjctMS4yNy01LjIxLTMuODUtNC45NC0zLjA4LTIuODUtNC43Ni0zLjEzLTUuMzUtMi4yMi0yLjQ5LTEuMjItNC4wOC0xLjI3LTYuMDMtMi4zMS01LjM5LTEuOTUtNy40My0zLjQ5LTMuODUtNy40My41OS0yLjk5LjczLTQuNDksMS4wNC0xLjE4LDEuMjItMS40OSwyLjU0LTIuNDksMS44MS0yLjU0LDIuMDgtMS4zNiwxLjMyLTEuNDUsMi43Ni0yLjQsMS4zMi0yLjYzLDEuNzctMi4xMywyLjA4LTUuOTMsMS40NS02LjEydi0uMTNsLjcyLTYuOTMuMzItNy40OC4wNC0yLjQxLjgyLTcuNjUuOTEtMy41MywxLjI3LTQuMTcsMS45OS0xLjcyLDMuNzEtMi4yMiw0LjE3LTIuOTkuMzYtLjE0Ljg2LS41NCw1LjAzLTEuMjcsMS40Ni0uNjgsNC43Ni0xLjA0LDMuMDQtMS43NywyLjQ5LS41NCwzLjQ5LTIuNDUsMS4zNi0uNDUuNDUtLjI3LDUuMy0xLjg2LDIuNTQtMi41MywxLjc2LS42NC4wOS0uMTMuMDktLjA1LDEuMjctMS44NiwzLjA4LTEuNjMsMS40MS0yLjI3LDIuNDQtMS4zMi4wNS0uMDkuMTQtLjA5LDEuMTMtMi40NSwyLjM2LTEuODEsMS44MS00LjAzLjgxLS45MS4wNC0uMTQuMDktLjA4LjA5LS44NiwyLjg1LTMuOTUuNDYtMy45OCwxLjA5LTIuMjcuNDktNS4zLjQxLTEuNDkuNzItNy4wNi41NC03LjEydi0uMTNsLjE0LTMuMjJaIiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTMiCiAgICAgICAgcG9pbnRzPSI2NTkuODEgMTMuMTggNjY3LjUyIDIwLjUyIDY3MC4xIDIzLjM4IDY3NC44NiAyOC41NCA2ODAuMjkgMzYuMjkgNjgzLjAyIDQyLjcyIDY4My42OSA0My45NSA2ODQuMjQgNDUuMjIgNjg3LjU5IDUxLjc0IDY5MC45IDU2LjY4IDY5NC4zIDU5LjYyIDY5OC42OSA2Mi4wNyA3MDMuMzYgNjQuMzQgNzA2LjQ0IDY1LjYgNzA5Ljk3IDY3LjQ3IDcxNC4yOCA2OS40NSA3MjAuMyA3NS4wOCA3MjEuODQgNzYuOCA3MjUuOTYgODIuODIgNzI4IDg4Ljg5IDcyOC43NyA5MC41MiA3MjkuNTQgOTQuOTYgNzMwLjQgOTguMDkgNzMwLjU5IDk5LjEzIDczMi4xMyAxMDguNDcgNzMyLjgxIDExMy43NiA3MzUuNjYgMTE5LjggNzM2LjIxIDEyMS40NyA3MzYuMzQgMTIxLjU2IDczNi4zOCAxMjEuNjkgNzM3LjQ3IDEyMi41MSA3MzcuNyAxMjIuNiA3MzguNTYgMTIyLjY5IDc0NS40MSAxMjQuNSA3NDguNTIgMTI0LjgyIDc1My4xOSAxMjUuNTQgNzU3LjgxIDEyNi4zNiA3NjAuODUgMTI2LjczIDc2OC43NCAxMjkuMDggNzY5Ljc4IDEyOS40OSA3NzYuNDQgMTMyLjA3IDc4My40NiAxMzcuMTUgNzgzLjk2IDEzNy42IDc4OS4zOSAxNDQuODkgNzkyLjA3IDE1Mi44MiA3OTMuNzkgMTYwLjE2IDc5NS4xMSAxNjcuOTYgNzk2LjY5IDE3Mi45NCA3OTcuMjggMTc1Ljg4IDc5OS41NCAxNzkuMDYgNzk5Ljc3IDE3OS4wNiA4MDAgMTc5LjIzIDgwMi40IDE3OC41NSA4MDcuNTIgMTc5Ljg3IDgwNy42NSAxNzkuODMgODA3Ljc5IDE3OS44NyA4MTAuNiAxNzguODMgODE1LjQ0IDE3OC42NSA4MTcuMzkgMTc4LjEgODI0LjU2IDE3Ny40NyA4MzAuOSAxNzcuMjkgODMyLjIxIDE3Ny4zOCA4MzguNiAxNzcuNTYgODQwLjQ2IDE3Ny44OCA4NDYuNDQgMTc4LjQ3IDg0OS44OCAxNzkuNiA4NTQuMTkgMTgwLjQyIDg1OS45IDE4My43NiA4NjEuOCAxODQuNzYgODY5LjA5IDE5MS40NyA4NzcuMiAxOTkuMzUgODg0LjM2IDIwNi44MyA4ODkuNjIgMjE0LjY3IDg5Mi40NyAyMjIuNDEgODkyLjY1IDIyMy4xOCA4OTQuOTIgMjMwLjA3IDg5NS4xIDIzMi40MyA4OTYuMDkgMjM3LjY4IDg5Ny4yMyAyNDUuNDcgODk4Ljc3IDI1MS42NCA4OTkuMTcgMjUzLjQgOTAwLjU4IDI1NS43MiA5MDguNDYgMjYwLjc1IDkxMC41NSAyNjEuMzMgOTE2LjMgMjYyLjU2IDkxOS4wMiAyNjQuMTkgOTIzLjk2IDI2Ni4yNyA5MjYuNSAyNjkuMDQgOTI3LjgxIDI3Mi44OSA5MzAuMTIgMjc2Ljc0IDkzMS4yNiAyODQuMzEgOTMxLjQ4IDI4OC4xMiA5MzEuNDggMjg3LjUyIDkzMi4zNCAyODcuNDggOTMyLjA3IDI4My45IDkzMC44NSAyNzYuMTkgOTI4LjU4IDI3Mi41MyA5MjcuMTMgMjY4LjQgOTI0LjMyIDI2NS40MSA5MTkuNTIgMjYzLjQ2IDkxNi40NCAyNjEuNjUgOTEwLjgyIDI2MC41MiA5MDguNzQgMjU5Ljg4IDkwNy4wMiAyNTguNzUgOTAxLjE3IDI1NS4wNCA4OTkuOTQgMjUyLjkxIDg5OS42MyAyNTEuNSA4OTguMDkgMjQ1LjM4IDg5Ni45NiAyMzcuNSA4OTYgMjMyLjM5IDg5NS43NyAyMjkuODkgODkzLjUxIDIyMyA4OTMuMjQgMjIxLjk2IDg5My4wNiAyMjEuNiA4OTAuMzkgMjE0LjI2IDg4NS4wOSAyMDYuNDIgODc3LjcgMTk4LjU4IDg2OS42OCAxOTAuODQgODYyLjMgMTg0LjA0IDg2MC4zNSAxODMuMDQgODU0LjMyIDE3OS41MSA4NTAuMiAxNzguNzQgODQ2LjYyIDE3Ny42MSA4NDAuNjQgMTc3LjA2IDgzOC43OCAxNzYuNzQgODMwLjk5IDE3Ni40MyA4MjQuNTYgMTc2LjU2IDgyMy4xNSAxNzYuNyA4MTcuMzkgMTc3LjI1IDgxNS4yNyAxNzcuNzkgODEwLjI0IDE3OC4wMSA4MDcuNjEgMTc5LjAxIDgwMi40OSAxNzcuNyA4MDIuMzYgMTc3Ljc0IDgwMi4yNiAxNzcuNyA4MDAuMDQgMTc4LjMzIDc5OC4wNSAxNzUuMzQgNzk3LjU1IDE3Mi44IDc5NS45NiAxNjcuODcgNzk0LjY1IDE2MC4wMyA3OTIuODQgMTUyLjE5IDc5MC4xMiAxNDQuMzUgNzg0LjY5IDEzNy4xNSA3ODQuMDkgMTM2LjU2IDc3Ni44NCAxMzEuMyA3NjkuMDEgMTI4LjIyIDc2OC40MiAxMjguMTMgNzYxLjE3IDEyNS45MSA3NTggMTI1LjUgNzUzLjM3IDEyNC42OSA3NDguNjcgMTIzLjk2IDc0NS42NyAxMjMuNjkgNzM4Ljc0IDEyMS44MyA3MzcuOTMgMTIxLjc0IDczNy4wMiAxMjEuMDYgNzM2LjUyIDExOS41NyA3MzMuNTcgMTEzLjM2IDczMi45OSAxMDguMzggNzMxLjI2IDk4IDczMC40IDk0Ljg3IDcyOS41OSA5MC4xMiA3MjguODcgODguNjcgNzI2LjY5IDgyLjMzIDcyMi41NyA3Ni4zNCA3MjAuOTggNzQuNTMgNzE0LjY0IDY4LjY0IDcxMC4zOCA2Ni42OSA3MDYuODkgNjQuODMgNzAzLjc2IDYzLjU2IDY5OS4xNCA2MS4zIDY5NC43OSA1OC45IDY5MS40NCA1NiA2ODguNDEgNTEuMzggNjg1LjA1IDQ0LjkgNjg0LjQ2IDQzLjYzIDY4My44MyA0Mi40NSA2ODEuMDcgMzUuODkgNjc1LjU4IDI4IDY3MC43OCAyMi44NCA2NjguMTYgMTkuOTQgNjYwLjI3IDEyLjQyIDY1Mi42MSA0LjU3IDY0Ni4zMSAtMi45OSA2NDUuNjMgLTIuNDUgNjUyLjE2IDUuMyA2NTkuODEgMTMuMTgiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtODUxLjc0LDkxOC40OGwtMi40OS0xLjU4LTcuMTEtNC4yMi0zLjU4LTIuODEtNS4xMi01Ljg1LTIuMjctMi44Ni0yLjc2LTUuMDctMi4xMy0zLjY3LTEuNTktMy40OS0zLjA0LTUuMy01Ljc2LTEwLjMzLTUuNjYtNy4yNS0zLjIyLTIuNjgtNy42MS02LjE2LTEuMTMtLjY4LTMuMzUtMi42My01LjM0LTMuOTgtOC43OS05LjAyLTEtMS4xOC03Ljg0LTcuMi0yLjQ1LTEuNjMtNi40NC0yLjg2LTMuOS0xLjA4LTQuOTMtMS40OS03LjUyLTIuMDljLS40LS4xMy0uODEtLjIyLTEuMjItLjM2bC04LjctMi41OC0zLTEuMjctNS43NS0yLTguNy00LjQ0LTIuNDUtMS43Mi02LjMtNC4yMi0yLjU0LTIuMDktNi4yMS01LjgtMi43Ni0yLjktNy4xNS04Ljc1LTcuNTctMTAuNDctNi4wNy03LjExLTIuODUtMi43Ni03Ljg0LTYuMDMtMi4wOC0xLjE4LTcuNjItNC4xNy01Ljk4LTMuNDgtMi43Ny0xLjQxLTMuODUtMi40LTQuOTMtMi44MS0zLjMxLTIuMTMtMTQuNTQtOS4wMS04LjQ3LTQuOTgtNS42MS0zLjQ5LTExLjk3LTguNDItOC42NS02LjYyLTMuNDktMi40NC0xMS4wNi04Ljc1LTIuOTktMi41OC03LjQ4LTYuMTctMS4zMi0xLTIuODUtMS44Ni01LjkzLTMuNzEtMy40LTIuMjItNS4zLTMuMjItNi41Ny01LjQ4LTIuMjItMi4wOS03LjI5LTYuNjUtMS41OS0xLjU5LTguOTMtNS4yMS04Ljg4LTEuNzctNy44OC40MS0uODEtLjA1aC0uMTNsLTYuNTMsMS40MS0yLjE3LjE4LTQuOTgsMS40OS03LjIsMS41OS01LjM0LDEtMi40LS4wOS02LjIxLS4xNC0zLjE3LS40OS01LjYyLS44Mi0xNy41Ny0yLjc3LTguNzktMS4xOC04LjI1LS4zNi0uNTkuMDQtNy4yLDEuMDQtMS42My4zMi01LjQ5LDEuMzYtMy4zMSwxLTMuNTMuOTUtNi41NywyLjIyLTYuMywyLjQ5LTUuOTgsMi44MS0zLjksMi4xMy0yLjAzLjYzLTYuNzEsMi41NC04LjQ3LS4zNmgtLjI3bC04LjYxLTIuMDgtOC44My0xLjMyLTMuMDMuMThoLTUuOTRsLTIuMjcuNjgtNi40MywxLjE3LS44Mi4yOC03LjIsMS41OS0uNzMuMDgtNi44OCwxLjA1LTEuODYuMDktNS40NCwxLjUtMy41My45NS0yLjg1LDEuNjMtNS4xMiwzLjcyLS45MS43My0zLjQ1LDMuODEtMy43Niw1LjEyLTMuMyw1LjQ5LTIuOTUsNS44NC00LjE3LDkuMjktMy45NSw4Ljg4LTIuODksNS44LTMuMjIsNS40NC0zLjc2LDQuOTgtMy42Miw0LjAzLTEuMDksMS4wNC00LjAzLDMuNTgtMy41OCwyLjk0LTI2LjMyLDE5LjQtNS42MiwzLjljLTEuMDQuNjgtMi4wOCwxLjM2LTMuMTIsMi4wOGwtMS44NiwxLjIzLTYuODksNC4yMS0zLjk5LDIuNDEtNy41MiwzLjk4LTMuOTQsMi4wNC0yLjE3LDEtMy42NywxLjk1LTQuOTgsMi40LTIuNCwxLjQtNi4zOSwzLjcyLTMuMDQsMi4wOWMtMS40Ljk5LTIuODUsMS45OS00LjMsMi45NWwtMS40OSwxLjA4LTQuMDgsMy42Ny00LjcxLDQuMDMtNC4wOCw0Ljc2LTMuOCw0LjA4Yy0uMTQuMTQtLjI4LjMyLS4zNy40NmwtLjU0LjU0LTMuMTMsNC43MS0yLjIyLDMuMDgtMS4zNiwyLjA4LTIuMTIsMi44MS0xLjI3LDIuNTgtLjc3LDEuMzEtMi4xOCw0LjQ5LTIuNTgsNC4yNi0uNTksMS4yNy0xLjQsMi4xMy0xLjU0LDMuNzYtLjkxLDEuNjMtMS45LDQuMzUtMi41OSw0LjM5LS41NCwxLjIyLTEuMzIsMi4zNi0xLjQ0LDMuNjctLjc3LDEuNTQtMS40OSw1LjA4LTEuMzYsMy43Mi0uNzMsMy4wMy0xLjU5LDUuNzUtMS40LDUuOTgtLjU5LDIuOTUtMS40NSw2LjUzLTIsNi42MS0xLjk5LDQuMTItLjY4LDEuODYtMS45OSwzLjEyLTEuMjIsMi4zNi0xLjA0LDEuMzIuNzcuNjMsMS0xLjI3LDEuMzEtMi40NSwxLjk1LTMuMTMuODItMiwxLjk1LTQuMTIsMi4wOC02Ljc1LDIuMDQtOS41MiwxLjQxLTUuOTgsMS41OS01Ljc2LjY4LTIuOSwxLjM2LTMuOCwxLjQ1LTQuOS43Ny0xLjU0LDEuNDUtMy42MiwxLjMyLTIuMzYuNS0xLjIyLDIuNTgtNC4zOSwxLjkxLTQuMzkuOTEtMS42NCwxLjU0LTMuNjcsMS4zNi0yLjEzLjY4LTEuMzIsMi41NC00LjI1LDIuMjItNC41My45NS0xLjcyYy4zNi0uNzMuNjgtMS40MS45OS0xLjk5bDIuMTMtMi45LDEuMzYtMi4wOCwyLjIyLTMuMDgsMi45OS00LjUzLjU1LS41OSw0LjIxLTQuNTgsMy45OS00LjYyLDQuNzYtNC4xMiwzLjk5LTMuNTguNjMtLjQ1LDguMTEtNS42MiwyLjQtMS4zNiw2LjM0LTMuNzEsNC45OC0yLjQ1LDMuNzYtMS45OSwyLjA0LS45NSw1Ljg1LTIuOTUsNS43LTMuMDgsNy45OC00Ljc2LDQuODUtMy4xMiwzLjM1LTIuMjcsNS40NC0zLjcxLDI2LjI4LTE5LjM5LDMuNjItMi45NSw1LjIyLTQuNzYsMy42Ni00LjA0LDMuNzYtNS4wMywxLjQtMi4yNywyLTMuNDksMi44Ni01LjY2LDguMTEtMTguMTcsMi45LTUuOCwzLjI2LTUuMzksMy42Ny00Ljk5LDMuNC0zLjc2LjgxLS43Miw1LjA3LTMuNjMsMi44NS0xLjY4LDMuMjctLjgxLDUuMzktMS40NSwxLjY4LS4xMyw3LjctMS4wOSw3LjI1LTEuNTkuNzYtLjI3LDYuNDktMS4yMiwyLjQ0LS42OGg1LjU3bDMtLjEzLDguNjUsMS4yNyw4Ljk3LDIuMTNoLjE0bDguNTYuMzYsMS44Ni0uNjhoLjA0bDUuMDMtMS45LDItLjYzLDQuMDQtMi4xNyw1LjkzLTIuNzdjMS4wNC0uNCwyLjA0LS44MSwyLjk5LTEuMjJsMy40NS0xLjM2LDEuMTMtLjMxLDUuMjEtMS44MSwzLjU0LS45MSwzLjI2LTEsNS40OC0xLjQxLDEuNTktLjMxLDcuNjEtMS4wNSw4LjIuMzYsOC43NCwxLjE0LDguNzQsMS4zNiw4Ljc5LDEuNCw1LjYyLjgxLDMuMTIuNSw4Ljg0LjI3LDUuNTMtMS4wNCw3LjItMS41NCw0Ljk4LTEuNDksMi4wNC0uMTgsNi42Mi0xLjQuNzIuMDQsNy45OC0uNDEuNDEuMDksOC4zNCwxLjY4LDguNjEsNS4wNywxLjM2LDEuNDEsOS40Nyw4Ljc0LDYuNjIsNS41Myw1LjQ0LDMuMzEsMy4zOSwyLjIyLDUuOTMsMy43MiwyLjc3LDEuODEsMS4zMS45NSw3LjQzLDYuMTYsMy4wOCwyLjYyLDExLjAxLDguNzUsMy40OSwyLjQ1LDguMiw2LjMsMTIuNTEsOC44Myw1LjY2LDMuNDQsOC42MSw1LjEyLDE3LjY3LDExLjAxLDQuOTMsMi44MSwzLjg1LDIuNCwyLjgxLDEuNDUsNS45OCwzLjQ5LDkuNTYsNS4yMSw4LjAyLDYuMjEsMi41NCwyLjQ5LDUuOTgsNy4wMiwxLjIyLDEuNzIsNi4zOSw4Ljc0LDcuMiw4Ljc5LDIuODEsMi45OSw2LjI1LDUuOCwyLjU0LDIuMTMsNi4zOSw0LjI2LDIuNDQsMS43MiwxLjMxLjczLDcuNTMsMy44MSw1LjgsMi4wNCwyLjk4LDEuMjcsOC43OSwyLjYyLDguNzksMi40MSw0LjksMS41NCwzLjc2LDEsNi4zLDIuODEsMi4zNiwxLjQ5LDcuNzUsNy4xNiwxLjA0LDEuMTgsOC43OSw5LjA2LDUuNDksNC4wOCwzLjMxLDIuNTgsMS4wOS42OCwxMC44Myw4Ljc5LDUuNDQsNi45OCwxLjksMy40OSwzLjg5LDYuODgsMyw1LjIxLDEuNTQsMy40OSwyLjIyLDMuNzYsMi43Niw1LjA3LDIuMzIsMi45OSw1LjE2LDUuODUsMy43MSwyLjk1LDcuMTYsNC4zLDEuNzMsMS4wOS44Ni41LDcuNzksNC4xMiw3LjIxLDQuNjIuNTQtLjgxLTcuMi00LjYyLTcuODQtNC4xMloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNjIxLjMsNS4yMWwuNTQsMSw0LjA0LDYuOCwyLjgsMy42NywzLjY4LDQuMTcsNC4xNywzLjYyLDUuMjEsNC4xNywyLjU4LDEuNTgsNC43MiwzLjE3LDIuOTgsMS44MSwxLjQ1LDEuMTQsNi4yNSw1Ljg5LDEuNSwxLjg2LDEuMjcsMi42OCwyLjg1LDQuODksMi4xMyw1LjY2LDEuNTQsMy43MiwyLjg2LDYuMjEsMy40LDUuMjUsMi42MywyLjYzLDUuMjUsMy4yMiw2LjA3LDIuODYsMy44OSwxLjc2LDUuNDgsMi44Niw2LjM0LDQuODksMS4zNiwxLjk5LDIuOTksNS42Mi41NCwzLjM5LDEuMTMsNC4yNnY0LjU4bC4xOCwyLjktLjU0LDQuMzktLjUsMy4zNi0uNjgsMy4wMy0xLjk1LDQuOC0uMTgsMS4xMy0uOTksMS44Ni0uOTYsMy42Ny0uNDUsMS4xMy0uNDksNS45My0uNzMsMS42OC4wNS4xNC0uMDUuMTQsMS4wNSw2LjEyLS41NCwxLjM2LjEzLjIzLS4wOS4yMiwyLjEzLDIuNzIuMzItLjIyLjM2LjI3LDEuMTgtMS4zMiw2LjMtLjU0LjA5LS4wOS4xMy0uMDUuNDUtLjMxLjg2LS40MSwzLjQtMi44NSwzLjAzLS40MSwyLjcyLTEuNzYsNC45LTEuMjcuOTEtLjM2LDQuNDQtMSwxLjg2LS41OS41LS4wNCw2LjEyLS45NSwxLjU0LS4wOSw3Ljg0LjU5LDQuMDMsMS4wOCwzLjYzLDEuMDksMy42MiwyLjYzLDQuMDMsMi40OSwxLjMxLDEuNDUsMS4wOSwyLjQ1LDMuMDQsNS4yNSwxLjQ5LDYuOTMuMjIuNzMuNTUsNy42NnYuMDlsLS4xNCwxLjQ5LS40NSw1LjgtMS40LDUuOTgtLjc3LDEuOS0xLjIyLDMuOTgtMi40LDMuODUtLjI3LDEuMDktMS4yMiwxLjQ1LTEuNTksMy41OC0xLjE4LDEuNTQtMS41NCwzLjUzLTMuMzUsMy40OS0uNDUuNjMtMi40OSw1LjAzLTIuNCwyLjg2LS43NywxLjc3LTEuNjcsMS44MS0xLjQ1LDIuNTQtMS4yNywxLjU0LTEuNjgsMy41NC0zLjQsNC41Ny0yLjU0LDQuODktMS42MywyLjU0LTEuMDQsMi40NC0yLjU4LDMuOTktLjczLDEuMzEtMi4wOSw0Ljg5LTEuNzIsMi44Ni0uODIsMi42Mi0yLjQ1LDQuNC0uMzYuOTEtLjg2LDYuNjEtLjM2LDEuMDkuMDUuMTQtLjA1LjE4LDEuNTksMy4yNiwzLjU4LDQuNjYsNC40LDIuMzYsNy43OSwzLjE3LDUuODksMi4yNywyLjg2Ljk1LDYuODQsMS41OSwyLjk5LjRoLjA5bDUuMDMtLjYzLDEuNTktMS4wOSwyLjktNS4wOC40NS00LjE3LjU5LTIuNDktLjEzLTUuMy4yOC0yLjM2LS4wOS01LjQ0LjEzLTIuMjcuMTMtNS41My4xMy0xLjk1LjYtNy4wNywxLjIyLTYuNjEuMTQtLjM2LjkxLTYuMjEuMzEtLjk1LDEuMDktNS41OCwxLjIyLTIuMjIuNzctMy4zNSwzLjQ4LTMuNzIuMzItLjU5LDIuMzEtNC45OCwzLjYzLTIuODEuMzYtLjksMS4wOC0uNjMsMi40MS0zLjg1LDMuMzEtMi4zMS43Mi0xLjE4LDEuMjctLjY4LDIuODEtMy4wOCw1LjYyLTIuNjgsNC4zNS0yLjY3LDIuNTgtLjczLDMuMDgtMS4xNCw0LjU4LS44NiwyLjA0LS4yMyw1LjY2LS40MSwxLjc3LjA5LDUuODkuMTgsMi41OS41OSw1LjMuNzcsNS41NywyLjM2LDIuMTMuNjgsMS44MSwxLjM2LDUuNzEsMy45LDMuNzIsMy43Niw2LjYxLDcuNyw1LjEyLDguMDIsMy40OCw3LjQ4LjYsMy45NC45NSwzLjU4LjM2LDUuNDguMjcsMi4zMS4xNCw1Ljc2LS4wNSwxLjk5LjMyLDUuOTQtLjE4LDEuNzZ2LjEzbDEuMzIsNy4xMi0uMDkuNS4wNS4xNHYuMTRsLjc3LDEuMzYsNC4xMiwyLjksMy43NiwyLjk1LDEuOTUuNzYsNS43NSwxLjU0LDIuNzIsMS4xM2MxLjcyLjQ5LDMuMzYsMSw0Ljk4LDEuNDlsLjEzLjA1LDUuMjEsMy40OCwyLjM2LDIuNjMsMi41NCw0Ljk4LjM2LDIuODEsMS4xOCw0Ljc2LS4wOSw0LjAzLjE5LDMuNTgtLjQ5LDMuOC0uNiwzLjk0LS41OSwyLjQ1LTIuMTMsNS43NS0uNC41OS0yLjA5LDQuMzktMS41LDIuMTgtMS41NCwyLjcyLS4xOC4xOGMtLjgxLjgxLTEuNTksMS41OS0yLjQsMi40bC0xLDEuMzItMS4xOCwxLjA5LTIuNTksMy4wOC0yLjk1LDEuODYtMS41NCwxLjI3LTIuOTUsMS41OS0xLjksMS4zNi0xLjI3LjQ2LTMuNzIsMi00LjAzLDEuMzYtMS43Ny42OC02LjA3LDEuOS01LjY2LDEuODYtMS45NS41LTQuNTMuNzYtMy4xNy43Ny0zLjQuMzYtNC4zOSwxLjM2LTEuOTUuMjctNS4xNiwyLjc2LTQuMTIsMy44NS0xLjcyLDMuMDgtLjg2LDIuMTgtMS44Niw1Ljc1LS4yNywxLjIyLS45Niw1LjM5LS4zMSwxLjA0LTEuMDUsNS41My0uOTEsMi4xNy0xLjA4LDMuNTgtMy4wNCw0LjUzLS4yNy4yMy0zLjYyLDMuNDgtNC45LDIuNjMtMi4yNy44MS04LjYxLDMuODUtNC44OSwyLjk0LTEsMS4wOC0yLjQsMy41NC0xLjYzLDQuMzQtLjQxLDEuNTUtLjgxLDcuMDItLjE4LDcuMTF2LjU0bC42Myw4LjM4LDEuMDUsNi42Mi4zMiwyLjUzLjg2LDUuMjEuODYsNy43OSwyLjM2LDcuOTMsMS4yNywxLjksNC45NCw1Ljg5LDguNDIsNy43NCwyLjE3LDIuNCw1LjEyLDUuMzksMi42Miw0LjMxLDIuMzEsMy40NC44MSwzLjA0LDIuMjIsNC40OSwyLjEzLDcuNjEuMjMuNTQsMy4zNSw3LjQzLDEuODYsNS4yNiwxLjIzLDIuNDksMS4zNiwzLjY3LDEuODEsNC4wMy43NiwyLjYzLDEuODEsNS4wOC44Niw1LjM5LjQxLDIuNDUsMS43Miw3Ljc1LjM2Ljg2LDQuMzUsNy4wMywzLjU0LDMuNDksNS4wMyw0LjM5LDIuNzIsMi4wNCw2LjIxLDUuNjIsMS40OSwxLjc3LDQuMyw1Ljg5LDMuOCw3Ljg0Ljk1LDEuMjcsNC45NCw2LjUzLDEuNjMsMS40OSw3LjAyLDYuMy43My41LDEuNzMsMS4yMiw2LjA3LDMuODksMi45NSwyLjE3LDQuODUsMi44NSw3LjA2LDQuOTQuNjQuMzIsMS42OCwxLjI3LDYuMTYsMy45OS40NS0uNzItNi4wNy0zLjk0LTEuNjMtMS4yMi0uNzItLjQxLTcuMDctNC45LTQuOC0yLjg2LTIuOTQtMi4yMi02LjA3LTMuODUtMS43Mi0xLjIyLS42My0uNDEtOC41Ni03LjctNS44LTcuNy0zLjgxLTcuNzUtNC40LTYuMDctMS41NC0xLjgxLTYuMy01LjcxLTIuNzItMi4wNC00Ljk4LTQuMzUtMy40OS0zLjQ0LTQuMjEtNi43OS0uMzYtLjgyLS4wNS0uMzItMS42My03LjMtMS4yNy03Ljc5LTEuODYtNS4xNy0uNzMtMi42Mi0xLjg2LTQuMTItMS4zMi0zLjY4LTEuMjItMi40OS0xLjktNS4yNS0zLjQ5LTcuODktMi4xNy03LjYxLTIuMjItNC40OS0uOTUtMy4zOS0yLjMxLTMuMzUtMi42Ny00LjQtNy4yOS03LjgtOC40Mi03LjctNC45LTUuODQtMS4yNy0xLjk1LTIuMjItNy40OC0uODYtNy43OS0uODYtNS4zLS4zMi0yLjQ5LTEuMDQtNi41Ny0uNjQtOC44NC4xOC03LjA3Ljc3LTYuODQuNDEtMS40NSwxLjYzLTQuMzUsMi4yMi0zLjI2LDEtMS4wNCw0LjU4LTIuODEsOC41Ni0zLjgxLDIuMzEtLjg2LDUuMjYtMi44MSwzLjQ0LTMuNC41NS0uNSwzLjEyLTQuNzUsMS4wNS0zLjQ1Ljk1LTIuMzEsMS01LjQ0LjMyLTEuMDQsMS4yNy02LjcxLDEuODEtNS42Ni43OC0yLjA0LDEuODEtMy4xMiwzLjk0LTMuNjIsNC45OC0yLjU5LDEuNTUtLjE4LDQuNDktMS40LDMuMzEtLjMyLDMuMjctLjgxLDQuNTMtLjc3LDEuOTktLjU1LDYuMDctMS45NSw1Ljc1LTEuODEsMS43Mi0uNjgsNC4wMy0xLjMxLDMuNzYtMiwxLjU0LS42MywxLjktMS4zNiwyLjktMS41NCwxLjQ5LTEuMjIsMy4yMS0yLjA0LDIuNDUtMi45OSwxLjEzLTEuMDksMS4wNS0xLjM2LDIuNzItMi43MiwxLjU0LTIuNjgsMS40NS0yLjE3LDIuMTMtNC40LjU0LS44NiwyLjA4LTUuNjYuNTktMi41OC42My00LjA0LjUtMy43Ni0uMTktMy43Mi4wOS00LjEydi0uMDlsLTEuMTgtNC43MS0uNDUtMy4xMy0yLjU4LTUuMDgtMi41NC0yLjgxLTUuNDgtMy42Ny01LjAzLTEuNDktMi43Mi0xLjA5LTUuOC0xLjU5LTEuOTktLjc3LTMuNDktMi44MS00LjA4LTIuODYtLjUtLjk5LjA1LS40MXYtLjEzbC0xLjMyLTcuMTYuMTgtMS42My0uMzItNi4wNy4wNC0yLS4xNC01LjgtLjI3LTIuMzYtLjM2LTUuNDQtLjk1LTMuNjctLjY4LTQuMjItMy42Mi03Ljg4LTQuOTgtNy43LTYuNzEtNy43OS0zLjc2LTMuNzYtNy45My01LjU3LTItLjYtNS43MS0yLjQ0LTUuMy0uNzctMi41OC0uNTUtNy44NC0uMzItNS43Ni4zNi0yLjA4LjI3LTQuNjMuODYtMy4xNywxLjEzLTIuODYuODEtNC4zLDIuNzItLjYzLjIzLTUuMjEsMi41OC0yLjgxLDMuMDgtMS4xMy41NC0uMTguMTgtLjgxLDEuMjctMy4zMSwyLjMyLTIuMjcsMy43Ni0uOTEuNS0uMDkuMTQtLjE0LjA0LS40Ljk1LTMuNTgsMi44MS0yLjc2LDUuNzEtMy40NSwzLjcxLS44NiwzLjQ5LTEuMjMsMi4yNy0xLDUuMzktLjMyLjkxLS45MSw2LjIxLS4xMy41di4xM2wtLjA1LjEzLTEuMjIsNi4zNC0uNTksNy4yMS0uMTQsMi0uMTQsNS40OC0uMTMsMi4yNy4wOSw1LjM5LS4yNywyLjM1LjEzLDUuMy0uNTQsMi40LS41NSw0LjMxLTIuNzIsNC42Ny0xLjM2LjgxLTQuNTcuNTUtMi44MS0uNDEtNi43MS0xLjU0LTEuMDQtLjM2LTEuODYtLjU5LTUuODktMi4yNi03LjctMy4xMy00LjM1LTIuNC0zLjMxLTQuMzEtMS40NS0zLjA0LjM2LS45OS45NS02Ljg0LDIuNjgtNC45NC44MS0yLjU5LDEuNjMtMi43NiwyLjA5LTQuODUuNzItMS4zMiwyLjU0LTMuOTQsMS4wOC0yLjQ5LDEuNjMtMi41NCwyLjc2LTUuMywzLjIyLTQuMjEsMS42Ny0zLjUzLDEuMTMtMS40MSwxLjU0LTIuNjMsMS43Ny0xLjk1Ljc3LTEuODEsMi4zMi0yLjY4LDIuODktNS42NiwzLjU0LTMuNjMsMS40OS0zLjUzLDEuMTMtMS40OSwxLjYzLTMuNjcsMS4yMi0xLjQ1LjMyLTEuMjIsMi4zNi0zLjcyLDEuMjItMy45NC43My0xLjk1LDEuNDktNS44OS41OS03Ljc5di0uMThsLS41NC03LjY2LS4yMy0uNjgtMS41OS03LjI5LTIuOTktNS4wNy0xLjI3LTIuNzctMS40MS0xLjQ5LTQuMDMtMi41My0zLjk0LTIuNzctMy41OC0xLjA0LTQuMy0xLjE4LTcuNzQtLjU0LTEuNjMuMDktNi44LDEtMS44MS41OS00LjQ0LDEtLjk1LjM2LTUuMjEsMS40LTIuNjMsMS43Mi0yLjg1LjMyLS4yMy4wOS0zLjU0LDIuOTUtLjkxLjQxLS4yNy4yNy02LjM0LjU0LS4wOS4xM2gtLjE4bC0uOTYsMS4wNC0xLjYzLTIuMTMuNDktMS4yN3YtLjEzbC4wNS0uMDktMS4wOS02LjEyLjc3LTEuODYuNS01Ljk0LjMyLS44MSwxLTMuNzIsMS4wOC0yLjA4LjE4LTEuMTMsMS44MS00LjQ5Ljc3LTMuMjEuNS0zLjQ0LjU0LTQuMzUtLjE4LTMuMDh2LTQuODVsLTEuMTMtNC4wOC0uNjMtMy43Ni0zLTUuNTMtMS41OS0yLjM2LTYuMjktNC44NC01LjY2LTIuOTUtMy45NS0xLjc3LTUuOTMtMi44MS01LjIxLTMuMTctMi40OS0yLjQ5LTMuMjYtNS4wMy0yLjg1LTYuMjEtMS41NC0zLjcxLTIuMTMtNS42Mi0yLjg1LTQuOTQtMS4zNi0yLjgxLTEuNDktMS45LTYuMzktNi4wMy0xLjQ1LTEuMTgtMy4wOC0xLjg2LTQuNzEtMy4xNy0yLjQ5LTEuNTQtNS4yMS00LjEyLTQuMDgtMy41NC0zLjYyLTQuMTItMi43Ny0zLjU4LTQuNTctNy43NC0uNDEtLjc4LTIuNTgtNi45OC0uODIuMzIsMi41OCw2LjkzLjQ1Ljg2WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im04ODUuOTUsOTE3LjU3bC03Ljk4LTcuMTYtMi4yNy0xLjc3LTYuNTItNC41My01LjYyLTQuMDgtMi45LTIuODEtNS4xNi01LjcxLTMuNzItOC4xNS0yLjM2LTguNTItMS42My04LjkzLTIuMTMtOC43NC0yLjI3LTQuNTMtNC4wMy01LjIxLTUuMzktMy40NS0xNy40OS04LjE1LTguNTYtNS45My05LjE2LTguNy04LjQ3LTYuOTgtMy4xMy0xLjk5LTUuOTQtMy4xMy00LjY2LTEuNDUtNC4zNS0xLjQ5LTguOTctMS44MS04LjUyLTEuODEtOC42MS0zLjA4LTguNjUtNC42Mi04LjM4LTYuNzUtMS44Ni0xLjc3LTMuOTQtNS44LTEuODYtMi42My0uNzctMS43My0zLjMxLTYuNzUtMi44NS04LjctMi42My01LjYyLTIuNTQtMy45NC02Ljg4LTQuNDQtNy40OC0zLjEyLTEuNTktLjc3LTIuMDktLjc4LTYuNjYtMi4wNC0zLjQ0LTEuMzEtNS4zLTEuODYtOC41Mi00LjAzLTguNzUtNS4xMi04Ljc0LTUuNTItOC43LTUuODktOC42MS03LjM5LTEuNDEtMS4zMS0xNS45OS0xOC4zLTYuNjEtNy44NC0yLjEzLTIuOTQtNS4wOC02LjAzLTMuOC0zLjg1LTcuMTEtNS40NC0yLjA5LTEuMjMtOC42OS00LjYyLTQuMzktMi41OC00LjEzLTIuOS02LjAzLTUuNTMtMi40LTMuMjEtMy4zMS01LjIxLTMuOTgtOC41Ni0xLjMyLTMuODEtMi4zMS01LjEyLTcuMjEtOS4xNS0xLjQ5LS41NC03Ljg5LTEuNTQtLjM2LS4wOS0xLjMyLjIzLTcuNDguMDktMS4xMy4yMi03Ljg4LjgyLTguODMsMS42OC04LjcsMi00LjU3LjgxLTQuMDQuODYtMy40NC4yMi01LjE3LjY4LTIuODYtLjEzLTUuNzEuMTMtMy4yMi0uNDktNS4zOS0uNjQtNS4xMi0xLjI3LTMuNDktLjczLTguMzMtMi40OS04Ljg4LTMuNTgtNy43OS00LjM5LTkuNzQtNS4yNS03LjEyLTIuNjgtNi4wMy0xLjk1LTQuNDktMS41OS0zLjQ0LTEuNzYtNS4yNi0yLjU0LTUuNDQtMi44MS0zLjQtMS42Ny05LjA2LTIuNzItNC45OC0uNTQtNC4xMi0uNTktNS4yMS4yMy0zLjc2LS4xOS00LjUzLjk1LTQuNDkuNDEtMy4wNCwxLjA5LTUuODQsMS40LTEuMjIuNDktMi45OSwxLjA5LTMuMjIsMS41LTEuNDkuNDUtNC41OCwyLjU0LTQuNTMsMi4zMS0zLjQ4LDIuMTMtMy4xMywyLjIyLTIuMjcsMS40NS0zLjA4LDIuMTctMy44NSwzLjA0LTEuOSwxLjU0LTMuOSwyLjk1aC0uMDVsLTQuOTMsMy45OS01LjU4LDIuOTQtMi43NiwxLjQ5LTMuMjIuNzMtNC45OCwxLjQ5LTEuOTUtLjE0LTYuMzkuMDktMi40OS0uNC02LjQ3LS41OS0zLjEzLS4wNS01LjguMzItMi41NC40OS03LjI1LDIuNTQtNC45NCw0LjYyLTMuMjEsNS45OC0xLjIzLDQuNTgtLjYzLDIuODEtLjc3LDguMzguMDUsOC45Ny4xNCwxLjE4LS4xOCw3LjQzLjA1LDEuMDgtMS4zNiw4LjUyLTEuMjcsNC41Ny0xLjQxLDMuOTUtLjkxLDIuMjItMi45OSw1LjQ0LTMuNTgsNC44MS00LjIxLDQuNjItNC40OSwzLjc2LTMuOTksMy4wNC04LjY1LDUuMjUtMy4yNiwxLjgxLTUuNTcsMy4yNi01LjQ0LDMuNTMtNS4wNywzLjktMS42MywxLjUtMy4xMiwyLjYzLTQuNTMsNC4zNS0xLjYzLDEuODEtMi42OCwyLjYzLTUuOTgsNi4xMi0yLjY3LDIuNTgtMi41OCwyLjMxYy0uNjguNjMtMS4zNiwxLjIyLTIsMS44MWwtMi4zNiwxLjk1LTQuMzUsMy40NC04LjgzLDcuNjEtMy4zNSwzLjU4LTIuNDksMy4xMy0xLjQ5LDEuNjctMS42MywyLjA5LS4wOS4xNGMtLjY4LDEuMTMtMS4zMiwyLjE3LTEuOTQsMy4zMWwtMy4xMyw1Ljc2LTIuOSw1Ljk4LTEsMi40OS0zLjM1LDExLjAxLS44MiwzLjE3LTEuMTgsMy41NC0xLjUsNS4yMS0xLjk1LDUuOTgtLjYzLDIuMjctMi44MSw5LjI5LTEuMzYsMy44OS0yLjM2LDYuMjEtMS41NSwzLjM2LTEuMDgsMi43Ni0yLjYzLDUuOTgtMi4wOSwzLjktLjg2LDEuOTUtMi4wOSwzLjk0LS44NiwxLjg2LS41LjkxLTIuMTcsNS4zNC0xLjYzLDMuNTQtLjkxLDIuOTQtMiw2LjA3LTEuOSw3LjUyLS40LDEuMjItMS40NSw1LjY2LTIuMjIsNi4zNC0yLjcyLDUuNjItMy40NCw0Ljk4LTQuMDMsNC4zOS0xLjY4LDEuMzYtMi44MSwyLjcyLTUuMzUsMy43MiwyLjA0LDIuOTQsNS4zOS0zLjcxLDMuMDgtMi45LDEuNjMtMS4zMiw0LjM5LTQuNzYsMy44MS01LjQ0LDIuOTUtNi4wNywyLjM2LTYuOCwxLjQ1LTUuNjIuNDYtMS4yNywxLjg1LTcuNDcsMi4wNC02LjEyLjczLTIuNTQsMS42OC0zLjU4LDIuMDQtNS4wNy41NC0uOTUuODYtMS45LDIuMDktMy45NC44Ni0xLjk1LDIuMDgtMy45LDIuNzItNi4yNSwxLjA0LTIuNjcsMS41OS0zLjM2LDIuNDUtNi40MywxLjM2LTMuOTksMi43Mi04LjgzLjc3LTIuODEsMS45LTUuODksMS41NC01LjI1LDEuMTctMy41My44Mi0zLjIyLDMuMjYtMTAuNzQuOTEtMi4yNywyLjgxLTUuODQsMy4wNC01LjYyLDEuODEtMy4wNCwxLjQ5LTEuOTUsMS40OS0xLjY4LDIuNDktMy4wOCwzLjA0LTMuMjYsOC42NS03LjUyLDQuMzktMy40LDIuNDUtMi4wOCw0LjYyLTQuMjIsMi43Ni0yLjU4LDYuMDItNi4yMSwyLjY4LTIuNjMsMS42My0xLjc3LDQuMzUtNC4yMSwzLjEyLTIuNjMsMS41LTEuNDEsNC44OS0zLjcyLDUuMjEtMy40LDUuNTMtMy4yMiwzLjI2LTEuODEsOC44My01LjM5LDQuMjYtMy4yMiw0LjktNC4xNyw0LjMtNC43MSwzLjgxLTUuMDMuOTEtMS41LDIuNC00LjUzLDEtMi40LDEuNDUtNC4xNywxLjM2LTQuNzYsMS40NC05LjA2LS4wNS0xLjQ1LjE5LTcuNTItLjA5LTEuMjItLjA5LTguNjUuNjgtNy44NC42NC0yLjcyLDEuMDgtNC4wOCwyLjktNS4yNSw0LjA3LTMuNzIsNS44OS0xLjk5LDEuOTQtLjQ1LDUuNTctLjI4aDIuOWw2LjE2LjU1LDIuNTguNDUsNi43LS4wOSwyLjI3LjE4LDUuNjItMS41OSwzLjY3LS44NiwzLjE3LTEuNzIsNS45OC0zLjE3LDQuOC0zLjg5LDQuMTctMy4wOSw1LjcxLTQuNTcsMi45NS0yLjA4LDIuMjctMS40NSwzLjAzLTIuMTdjLjczLS40MSwxLjM2LS44MiwyLTEuMjNsMS4yNy0uNzcsNC41My0yLjI3LDQuMTctMi4zNiwxLjM2LS40NSwzLjM2LTEuNDksMy4wMy0xLjA5LjkxLS40LDUuNzEtMS4zNiwyLjk1LTEuMDksNC4wOC0uMzYsNC4zNS0uOSwzLjUzLjEzLDQuOS0uMjIsNC4xMi41OSw0LjQ5LjQ1LDguMzgsMi41LDMuMzEsMS42Myw1LjQ0LDIuODFjMS43Ni44NiwzLjUzLDEuNzIsNS4yNSwyLjQ5bDMuNDUsMS44MSw0LjkzLDEuNzYsNS45OCwxLjk1LDYuNjEsMi40NSw4Ljc1LDQuNzYsOC43NCw0Ljg1LDkuNDcsMy44OSw4LjU2LDIuNTQsMy41OC43Niw1LjE2LDEuMjIsNS42Ni43MywzLjM2LjU0LDUuOTgtLjE4LDIuOTkuMTgsNS40NC0uNzMsMy40LS4xOCw0LjQ5LS45NSw0LjYxLS44Niw4LjU2LTEuOSw4Ljc0LTEuNjgsNy44NC0uODYuNzctLjEzLDcuNDgtLjA5LDEuMjMtLjE4LDcuMTEsMS40LjU5LjE5LDYuMDcsNy44NCwyLjA4LDQuNTMsMS4zMiwzLjgxLDQuMTIsOC45MywzLjU4LDUuNjYsMi40OSwzLjQsNi41Miw2LjAzLDQuNTMsMy4yMiw0LjU4LDIuNzIsOC42OSw0LjU4LDEuOSwxLjEzLDYuNTcsNC45OCwzLjYyLDMuNzIsNC44OSw1Ljc2LDIuMTMsMi45OSw3LjM5LDguNzksOC4xNSw5LjM4LDcuMzQsOC4yNCwxLjU5LDEuNTQsOC44Myw3LjUyLDguOTMsNi4wNyw4LjgzLDUuNjIsOC44NCw1LjE3LDguOTcsNC4yMSw1LjM5LDEuOTUsMy40NCwxLjMxLDYuNzEsMi4wNCwxLjgxLjYzLDEuNjguODEsNi45OCwyLjg1LDYuMzQsNC4xNywxLjcyLDIuNzIsMi40NSw1LjIxLDIuOSw4Ljc1LDMuNCw3LjA3Ljg2LDEuODYsNi4xNiw5LjAyLDIuMjcsMi4yMiw4Ljc0LDcuMDIsOS4xMSw0Ljg5LDguOTcsMy4yNiwxMC40MiwyLjIyLDcuMiwxLjQ1LDQuMzUsMS40OSw0LjE3LDEuMjcsNS43LDIuOTUsMi43MiwxLjcyLDguNjYsNy4xNiw4LjkyLDguNDcsOC44Myw2LjE3LDYuMTYsMi44NSw1LjQ4LDIuNjMsNS45OCwyLjc2LDQuOTgsMy4yMiwzLjEzLDQuMDMsMi4wNCwzLjk5LDIuMDgsOC4zMywxLjU5LDguODgsMi40LDguNzksNC4xNyw5LjE1LDUuNTcsNi4yMSwzLjA0LDIuOTksNS45OCw0LjM1LDYuNDgsNC41MywyLjEzLDEuNTksNy43NCw3LjAzLjg2LjgxLDcuNzQsOC44MywyLjcyLTIuMzYtNy44LTguODgtLjk5LTFaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTYwNy42MiwxMy4zN2w0LjgxLDguMDIsNy4yNSw3Ljk3LDguNDIsNi40NywyLjEzLDEuNTQsMTMuMjgsOC42MSw3LjUzLDYuOTMsNC40NCw3LjA3LDMuNzYsOC4zMywzLjcxLDcuMywzLjU4LDUuNTcsMi40OSwyLjQ5LDUuNjYsNC4zNSw3Ljc1LDMuOTksMS43NywxLjMyLDUuODQsNC4xMiwxLjU5LDEuNjMsMS4zNiwyLjk0LDIuNTQsNC40NCwxLjA1LDYuNTcuMjIuNzItLjMyLDYuNzEuMDQuNzctMS4xOCw1LjU4LS4yNywxLjktMi4wOCw3LjgtLjQ5LDIuNjctMS43Myw0LjktLjE4LDEuMTctLjksMi4zNi0uNzcsMy40OS0uMjMuODItLjkxLDUuOTQtLjU0LDEuODEtLjQxLDUuMTItLjU5LDIuNzItLjA0LjMyLjI3LDQuNjItLjIyLDMuMjIuOTUsNS40OC4yMywyLjQsMS45OSw4LjA3LjQxLDEuMTMuMjIuMTMuMDkuMjMsOC44MywzLjc2LjM2LS4zMi40NS4wOSwyLjEzLTIuODYsMS0xLjc3LDEuOS0zLjA4LDMuMjctNC41OCwyLjY4LTUuMTcsMS44MS0yLjcyLDEuMTgtMS45NSwxLjgxLTEuNzIsMS43Mi0yLjE4LDMuNzEtMy45LDIuMjItMS41NCwxLjk5LTEuNjMsMy4zNi0yLjEzLDEuMjctLjkxLDUuMDMtMi4yMiwzLjE3LTEuMDksNy40My0xLjA0LDIuNzIuNzIsNC42Mi44MSw1LjYyLDMuNjcsMS4zNiwxLjU0LDIuOTgsNS41OC42NCwzLjY2Ljk5LDMuNjMtLjI3LDQuNDQtLjA0LDIuOTktLjk1LDMuMTctMS40NSw0LjEyLS41NCwxLjI3LTEuNDUsMi40NS0xLjQxLDIuNDktMi43Miw0LjcxLTMuNDgsNC44NS0zLjA5LDMuOTgtMi42NywzLjEzLS43NywxLjE3LTEuMTQsMS4zNi0yLjY3LDIuNTQtMi40LDIuNjctMi42NywzLjIyLTIuMjcsMi4wOC0zLjY3LDQuNjItMi4wNCwzLjA4LTEuMDgsMS4xNC0uMTkuMThjLS4zMi40OS0uNTQuOTUtLjcyLDEuMjJsLTIuNDUsMy4zNS0zLjM1LDYuMTctMi40LDMuNzYtMSwyLjQ5LTEuNTgsMi45OS0xLjk5LDQuODEtMi44MSw1Ljk3LS43MiwyLTEuMjIsMy45NS0xLjMyLDQuMDh2Mi43NmwtLjYzLDQuOTh2LjU0bDEuMTcsMy4yNy44Miw0LjQ0LjE4LjU1LDQuMjYsNC41Nyw2LjU3LDIuNDksMS40MS43MywzLjIyLjcyLDQuODkuNzIsNy43LDEuMjdjLjgyLjE0LDEuNTkuMzEsMi4zNi40OWw1LjIxLDEuMTgsNS45NCwyLjE4LDEuNzcuNTksMy4yNiwxLjI3LDQuNzEsMS40LDEuODYuMzYsNi4wMiwxLDMuMDguMDksNS4xMi0uNTQsMi4zNS0uNjMsMi43Ny0xLjkxLDIuMjItMi4wOCwxLjQ1LTMuNDUsMS4xMy0yLjU0LjA5LTguMDYtLjIzLS44Ny0xLjA0LTcuNjF2LS40NWwtMS4xOC03LjN2LTEuNzJsLS41OS02LjAydi0yLjIybC0uMTQtNS4zOS4wOS0yLjIyLjU5LTcuMDIsMS4xOC02LjQ0LjQxLTEuMDgsMS4wNC01LjAzLjQxLTEuMDgsMS40NS00LjgxLDEuNTktMi42Mi45NS0yLjMxLDItMi4yMiwxLjIyLTIuMTcuNzMtLjgxLDIuMzEtMy42NywzLjM1LTIuNzIuNjMtLjcyLjU1LS40MSwzLjIyLTMuNTgsMy4yNi0xLjk1LDEuMjItLjkxLDIuNzItMS4xOCwyLjI3LTEuNDksNS4yMS0yLDMuNC0uNzYsMi44MS0uNDUsNC43MS0uNDEsNy42Ni4zMiwzLjU4LjkxLDMuODkuNzIsNy4zOSwzLjQ5LDIuNzYsMi40LDQuNjcsMy44NS42My42OCwxLjksMi42OCwzLjk0LDQuOTgsMy45OSw3LjU3Ljc3LDMuNTcsMS4xMywzLjkuNDUsNS4zNS4yOCwyLjA0LS4wOSw1LjUzLS40NSw3LjExLS41LDIuNTQtLjQsNC40LTEuNDUsMy40OC4wOSwyLjc3LTIuOTUsNC44LS41LDYuODUtLjY4LjU5LjE0LjQxLS4yNy4zNiwxLjg2LDMuOC41NC0uMTMuMzYuNDUsMS44MS0uODYsNS41MiwyLC4zNy4wOWguMDhsLjE0LjA0LDMuMjYtLjU5LDQuMjYuNDUsNC4yMS41NSwzLjI3LjU0LDcuNDMsMi42Myw2LjQzLDcuMjUuNiwyLjI3Ljg2LDQuNzYtLjg2LDcuNDMtMi43Nyw3LjI1LTEuNjgsMi44MS0zLjI2LDQuMzUtMy43NiwzLjU4LTMuMzEsMi41NC0yLjU4LDEuNjMtMy4xNywxLjgxLTEuNzIuNzctNy43LDIuODEtMS44MS4yNy01LjU3LDEuNC0uMzItLjA0LTcuMDYuMTMtLjM2LS4xMy03LjItMS40LTQuNC0yLjU0LTMuMDgtMS4xNy0zLjI2LTEuODctNC40OC00LjU3aC0uMjhsLS4yMi0uMTgtNC42Mi41LTQuMTIuODItLjE4LjEzLS4yMy4wOS0xLjY3LDIuNC0uNjMsMS43Mi0xLjE4LDQuNzYtLjA1LjIydi4wNWwtLjA0LjA5LjI3LDMuMDMtLjY4LDQuMjYuMzYsMy40NC0uODEsMy41NC0uMjcsMy45OS0uNjgsMi44NS0xLjIyLDYuMzQtMS41OSw0LjgtLjM2LDEuMzYtMS44Niw1LjI2LTEuNjcsMS45NS0xLjMyLDIuNC0yLDEuNDktMS44MSwxLjk1LTMuMTcsMS40OS0xLjU5LDEuMDQtLjczLjIyLTQuMjYsMi4xMy0zLjQ0Ljk1LTIuNCwxLjA0LTUuOCwyLjA0LS44Mi41LTMuNzEsMy42Ny0yLjY3LDQuNTgtLjQxLDEuMTMtLjU0LDcuNjF2LjA5bC4yMiw3LjQzdi42NGwuMjMsNy4wNi0uMjgsNy43OWgwdi4wNWwuMTQsNy43OSwxLjUsNy45OC40LDIuNTgsMS4xNCw1LjEyLjM2LDQuMDMuNTQsMy43Ni44Niw1LjM1LjQ1LDIuNDUsMS45NSw1LjI2LDEuNTQsMy4wMyw2LjYxLDcuMTYsMSwuOTUsNi44LDUuMDMsMi45LDIuNjgsNC42Nyw0LjgsMi4xMiwyLjYzLDIuNDksNC43MSwyLDIuOTQsMSwyLjIyLDIuOTgsNS40OCwyLjA5LDUuMDgsMS40LDIuNjcsMS4yNywzLjI2LDIuMjcsNC40NCwxLjQxLDMuNzYsMS44MSwzLjg1Yy42MywyLjU0LDEuMjcsNS4wMywxLjksNy40M2wxLDcuODQuNzcsNy43LjU5LDIuMjcsMS4zMiw1Ljg0LDQuNzYsOC40NywxMC4yLDcuODQsNS40NCwzLjk0LDMuODksMy41OCwzLjYzLDQuNDksMi4xMywzLjEzLDUuNzYsOC4wNyw3Ljg0LDcuNzQsNy45Nyw1LjM1YzEuMTguODYsMi4zNiwxLjY4LDMuNTQsMi40OWw0LjMxLDIuMjcsNi41Nyw0LjM1LDEuMTMuNjQuODYuNTksNi45Myw0LjAzLDUuNjIsMy43MSwyLjEzLDEuMTgsNC40OCwzLjIyLDMuMzYsMi4xMy4yMy0uNDFoMS41NHYtLjI3bC45MS0xLjQ1LTQuMjItMi41OS00LjQ4LTMuMjYtMi4yNy0xLjIyLTUuNTctMy43Mi02Ljg5LTQuMDMtLjgxLS41NC0xLjIzLS42OC02LjU3LTQuMzUtNC4yMi0yLjIyYy0xLjIyLS44MS0yLjM2LTEuNjMtMy41NC0yLjQ1bC03LjY1LTUuMTItNy41Ny03LjQ3LTUuNTMtNy43OS0yLjE3LTMuMTctMy43Ni00LjY3LTQuMjEtMy45LTUuNjYtNC4xMi05Ljc0LTcuNTctNC4xMi03LjM0LTEuMjMtNS40NC0uNDktMS44Ni0uNzctNy43NS0uNzctNS43MS0uMTgtMS45OS0yLjA0LTguMDItMS45NS00LjIyLTEuMzYtMy43MS0yLjMxLTQuNTMtMS4yMi0zLjIyLTEuNDUtMi42Ny0yLjEzLTUuMTItMi45OS01LjYyLTEtMi4yMi0yLjA0LTMuMDQtMi41NC00LjgtMi40OS0zLjEzLTQuODUtNS4wMy0yLjk5LTIuNzYtNi44NC01LjAzLS44Ny0uNzctNi4yLTYuOC0xLjIyLTIuMzUtMS44MS00LjcxLTEuMzEtNy42Ni0uNS0zLjYzLS4zNi00LjA4LTEuMTgtNS4zLS40MS0yLjYzLTEuNDUtNy40OC0uMTMtNy42Ni4zMi03Ljg0LS4yNy03LjExdi0uNjRsLS4yMi03LjI5LjUtNy4xMS4xOC0uNDUsMi4yNy0zLjk0LDMuMTctMy4xNyw1Ljc2LTIuMDgsMi4yMi0uOTUsMy40LS45OSw0LjM5LTIuMTMsMS4xMy0uMzYsMS41OS0xLjA1LDMuOS0xLjksMS43Mi0yLDIuNTgtMiwxLjMyLTIuNDQsMS45NS0yLjQsMi4wOC01Ljg5LjI3LTEuMTgsMS41OS00LjgsMS4zMS02LjYyLjY4LTIuODUuMjgtNC4wMy44Ni0zLjc2LjA1LS4yM2gwdi0uMTNsLS4zNi0zLjQuNjMtNC4yMS0uMjItMy4wNCwxLjA5LTQuMzUuNDUtMS4yMy44Ni0xLjE4LDIuODYtLjU5LDMuMzUtLjMxLDMuODUsMy45My4yOC0uMjcuMzIuMTQtLjIzLjQxLDMuMzYsMS45LDMuMDgsMS4xNCw1LjAzLDIuODUsNy4wNywxLjMxLDEsLjM3LDcuMTYtLjE5LjgxLjA5aC4xNGw1Ljg1LTEuNDUsMS45NS0uMzIsOC4xNS0yLjk1LDEuOTEtLjg2LDMuNDktMS45NSwyLjcyLTEuNzIsMy40OS0yLjY3LDQuMTItMy45NCwzLjU0LTQuNjYsMS44Ni0zLjA0LDMuMTItOC4xNS45NS03Ljk4di0uMzFsLS45NS01LjI2LS44Ni0zLjI2LTcuNjYtOC40Ny04LjAyLTIuODEtMy44LS42OC00LjMtLjU0LTQuNTMtLjQ5aC0uMzJsLTMsLjU0LTYuMTItMi4yMi0uMjIuMDktLjI3LS4wOS0uNDUuMjMuMjMtLjE4LjUtNy4yNSwyLjc2LTQuNDguMjctLjczLS4xNC0yLjc2LDEuNS0zLjQuMzItNC4zNS41NS0yLjUzLjQ1LTcuNTcuMDktNS43Ni0uMjctMi4zNS0uNDYtNS40OC0xLjIyLTQuMTItLjg2LTMuOTQtNC4yMS04LjA3LTQuMTMtNS4yNi0xLjk1LTIuNjctLjgxLS45NS00Ljk4LTQuMTItMy4wNC0yLjY3LTguMTUtMy44Ni00LjE3LS43Ni0zLjc2LS45NS04LjE1LS4zNi01LjA4LjQxLTMuMDQuNDUtMy42Mi44MS01LjgsMi4yMi0yLjIyLDEuNS0yLjksMS4yNy0xLjQ1LDEtMy41NywyLjIyLTMuMjIsMy41OC0uNTQuMzYtLjczLjgxLTMuNzYsMy4xMy0yLjI3LDMuNjctLjg2LDEtMS4xMywyLjA4LTIuMzEsMi41OS0uODcsMi4yMi0xLjcyLDIuOS0xLjU0LDUuMDgtLjQsMS4wOS0xLjA5LDUuMTItLjQ1LDEuMzItMS4yNyw2Ljc1LS41OSw3LjI1LS4wOSwyLjMxLjE0LDUuNTItLjA1LDIuMjcuNTksNi4wNy4wNSwxLjY4LDEuMTMsNy4zNCwxLjEzLDguNDcuMTguNjgtLjA5LDcuMTItLjYzLDEuMjJjLS41LDEuMjItLjk1LDIuMzYtMS40NSwzLjUzbC0xLjQxLDEuMzYtMi40LDEuNjMtMS4yMi4zMS00Ljc2LjU0LTIuNTgtLjA5LTUuOTQtLjk1LTEuNTktLjMyLTQuNDgtMS4zMS0zLjI3LTEuMjctMS43Ny0uNTktNS45My0yLjIyLTUuNDktMS4yNy0yLjQ0LS40OS02LjY2LTEuMDkuMDQtLjE4LTEuMzYtLjA1LTUuMDMtLjcyLTIuNDUtLjU1LS45OS0uNTQtNi4zNC0yLjQ0LTMuMTMtMy4zNi0uNjgtNC4wMy0xLjEzLTMuMTcuNTktNC43MXYtMi42M2wyLjM1LTcuNDMuNjQtMS43MiwyLjgxLTUuOTgsMS45NS00LjY2LDEuNTktMi45NS44Ni0yLjMxLDIuNC0zLjgxLDMuMjItNS45MywyLjQ1LTMuMzYuNzctMS4xNywxLjA5LTEuMTMsMi4xMy0zLjI2LDMuMy00LjE3LDIuMjctMi4wOCwyLjg1LTMuNDksMi4zMS0yLjQ5LDIuNjMtMi40OSwxLjMxLTEuNTkuODYtMS4yMiwyLjYzLTMuMTMsMy41NC00LjUzLDMuMjItNC41MywyLjg1LTQuOTgsMS4zNi0yLjQ0LDEuNDUtMi40Ljc2LTEuNzMsMS41LTQuMywxLjEzLTMuNjcuMDQtMy4zMS4zMi00LjY3di0uMzZsLTEuMDktMy44NS0uNzItNC4yNi0zLjM1LTYuMTEtMS45LTIuMTMtNi43NS00LjQ0LTQuODUtLjc3LTIuOTktLjgxLS4zMi0uMDVoMGwtLjE0LS4wNC01LjAzLjc3LTIuOS4zNi0zLjc2LDEuMjMtNS40NCwyLjQtMS41OSwxLjA5LTMuMzEsMi4xMi0yLjEzLDEuNzMtMi4zNSwxLjU5LTIuNDEsMi41OC0xLjYzLDEuNjMtMS42MywyLjEzLTIuMDksMS45OS0xLjM2LDIuMTctMS44MSwyLjcyLTIuNjcsNS4xNy0zLjIyLDQuNTMtMS45OSwzLjIxLS44NiwxLjU5LS45NSwxLjIzLTUuOTQtMi41NC0xLjg2LTcuMzgtLjIzLTIuNDUtLjkxLTUuMjUuMTgtMi45OS0uMjctNC41My41OS0yLjQ5LjQxLTUuMTYuNDUtMS42My45MS01LjkzLjI3LS43Ny42OC0zLjMxLjk1LTIuNTQuMjItMS4yMiwxLjYzLTQuNzYuNjMtMi45LDIuMDQtNy44LjMxLTIuMDQsMS4yNy02LjA3LS4wNS0uODIuMjgtNy4wNi0uMjMtLjk1LTEuMjMtNy4zNC0yLjY3LTQuNTgtMS42OC0zLjUzLTEuODYtMS45LTYuMTUtNC4zOS0xLjc3LTEuMzYtNy44LTMuOTktNS4zNC00LjAzLTIuMTctMi4xNy0zLjMxLTUuMTctMy45OS03LjgtMy40LTcuNjEtNC42Ny03LjU3LS40OS0uNTktNy41Ny02LjkzLTEuNTgtMS4xMy0xMS45Ny03LjctMi4wOC0xLjQ5LTcuOTctNi4wNy02Ljk0LTcuNTYtNC41My03LjQ3LTIuOS03LjItLjQ1LTEuNDEtMi4xNy03Ljg0LTMuMDguOTEsMi40OSw4Ljg4LDMuMTcsNy44OVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtOTA1LjUyLDkxOC41N2wtMS45NS0xLjk5LTUuOTMtNi43NS0yLjktMi45NS04Ljc5LTcuNzQtOC4xNS02LjkzLTUuNjYtOC42Ni0yLjcyLTguNDctMS41OS04Ljc5LTEuMzItOC43NC0uNzItMi44Ni0xLjM2LTYuMDctNS4wMy04Ljk3LTguNTYtNS40LTcuNjYtMy4zOS0xLjktLjY4LTcuOTgtMi44NS03Ljc5LTQuMTctLjkxLS40MS0uODEtLjU0LTcuOTMtNi41Ny0yLjMyLTIuMTMtNi40Ny03LjI1LTguNzktOC43OS0yLjQ1LTEuNTktNi40NC0yLjk5LTMuOC0uODEtNS4wOC0xLjM2LTYuMTItMS0xMC45Mi0yLjEzLTEuNzItLjUtNy40OC0yLjk1LTcuMzgtNS44LTEuMDktMS40NS00LjE2LTcuMTYtMS40NS01LjQ0LS45MS0zLjA0LS45MS03LjQ4LS42OC05LjM0LjA0LS42OC0uNjgtNC4zLTEuMjctNC42Mi0uMTMtLjA5LS4wNS0uMTMtNy43NC02LjQ0LTcuNTctMS40MS0xLjI3LS40NS04LjctLjMxLTMuNTctLjI4LTUuNTMtLjMyLTguMjUtMS41NC0zLjEyLTEuMTMtNS42Mi0xLjc3LTguNzQtNC4yMS0uODItLjQ2LTcuOTgtNC4zNS01LjUzLTMuNjItMy4xNy0yLjQtNy4wNy02LjI1LTcuNzUtOC43OS02Ljk4LTguNy01Ljg5LTguNy03LjI5LTEzLjE0LTMuMTMtNC40NC01LjcxLTYuODQtMi4zNS0xLjk5LTYuNDgtNS44NC0zLjktMi45NS00Ljg1LTQuMDMtNC44NS00LjYyLTMuOC00LjY2LTIuNDktNC4xMy0uNTQtMi44NS0xLjYzLTUuNjIsMS41NC0xMS42OSwxLjU5LTUuNjZ2LS4xNGwuMDUtLjE0LS40NS0xLjkuNjMtNi42Ni0uMTQtLjE4di0uMjNsLTcuNDMtNy4yMS0uMTgtLjA0LS4xOC0uMDktNy4yOS0uMDktMS4yNy0uNDktLjE4LjA0LS4xMy0uMDQtNi4zLDEuNC0yLjMxLS4xM2gtLjE4bC00LjgsMS41NC0zLjkuNTQtMy40NCwxLTUuMzQsMS4xMy05LjM0LDEuNzItNy41MiwxLjI3LTcuODguOTVoMGwtMS40NS4yMi02LjU3LjQxLTIuMTguMzItNi4yNS0uMDQtMi41OC4yNy02LjU3LS42OC0yLjEzLjA1LS4wOS0uMDUtOC41Ni0yLjA4LS4wOS0uMDktOC41Ni0zLjk5LTguMTUtNC41OC0xOC4xMy0xNS0zLjk5LTIuNTgtNC44NS0yLjY3LTguNzktMy43Ni00Ljg5LTIuMzEtMy44NS0yLjM1LTYuNjYtNi4zOS0xLjk5LTMuNjMtMi45LTQuOTQtMi45LTUuODQtMS4yMi0yLjktMS43My0yLjU4LS4xNC0uMDktLjA5LS4wOS0zLjk0LTEuNTQtNC43Ni0yLjU4LS4xOC4wNS0uMTktLjA5LTUuMjUsMS40LTMuNjIuMTQtMy4wNCwxLjk1LTUuOCwyLjQ5LTEsLjcyLTQuMjUsMy4zMS0zLjQ0LDEuODYtMS45LDEuNjctNC45OCwzLjYzLTEuODYsMS0zLjU4LDIuNC02LjUyLDMuNTgtNy4zNCwzLjM2LTQuMDgsMS40LTQuNzYsMS45NS0xLjYzLjMyLTUuNTMsMS43Mi0xLjQxLjM2LTcuMiwxLjI3LTEuNzcuNTQtNS45My41LTIuNzYuNjNoLTUuMzVsLTMuMjYuNDFoLS4wNGwtNS41Ny0uNDUtMy4xMy4wNC02Ljk3LTEuNTQtMS43Ny0uMzYtMy4xNy0xLjMyLTUuNDQtMy4wNC05LjAyLTMuOTQtOC43OS4xOS04Ljg4LDIuNDktMy4xMiwxLjA0LTUuNzYsMS40MS0xLjA5LjY4LTUuOTMsMi43Ni0xLjg2LjgxLTguNzUsOC4wNi0zLjM1LDMuODEtNS40NCw2LjY2LTIuNDksMi45NS0xLjksMi40NC0yLjA0LDIuNC0zLjgxLDQuOTgtMy40NCw1LjM0LTIuNzYsNC44OS0uMzcuODYtLjgyLDIuMTMtMi4wOCw1Ljg1LTIuMzIsOC43OS0uNzIsMy42Ny0xLjIzLDUuMDctLjM2LDIuMDgtMS40OSw2LjcxLTEuNDEsNy44OS0uMjMuODYtMS40LDYuMTYtLjkxLDIuNDktMS40OSwzLjcxLTMuNDUsNS40NC0uMzYuMzYtMy42NywzLjk5LTEwLjA2LDcuNDQtMy43MSwyLjI2LTEuNTksMS4zMS0yLjE3LDEuNTktNS4wMywzLjk1LTUuMDMsNC44NS0zLjgsNC4xMi0zLjQ1LDQuNzEtMi4xMywzLjI3LTMuNDQsNS41Mi0yLjY4LDUuODktMS40OSwyLjktMS40LDIuOTUtMy4xMyw1Ljg0LTIuNzYsNS44NC0yLjksNS44OS0zLjA0LDYuNzEtMS44Miw2LjA3LS4yNywxLjc3LTEuMzYsNS4zOS0uNDEsMy40LS44Niw0LjEyLS41OSw0LjYyLS41OSwyLjk1LS45MSw1LjgtLjQsMS42My0xLjU5LDcuODQtMS4zNiw4LjExLTEsNi4zOS0uNDUsMi4zNi0uNzcsNS4xNy0uNzMsMy41OC0uNjgsMy44MS0xLjA0LDQuOTQtMiw4Ljc0LS43MiwyLjU0LTEuMjcsNC45NC0yLjA4LDYuNjEtMi40NSw2LjI1LTIuOTQsNS45OS0uNTktLjMyaDBsLjUuNDFzLjA1LS4wNC4wOS0uMDlsLTIuNzYsNS43NS0xLjcyLDIuODEtMS4zNiwyLjktMy40NSw1Ljg1LTIuNjIsNS42Mi0xLjgxLDMuMTctMS4wNCwyLjgxLTIuNzYsNS45OC0yLjM1LDYuMzktMS4xNCwyLjM1LTEuNDksMy43Ni0zLDUuNjEtLjc3LDEuMDktMi43Miw0LjEyLTIuNTQsMi44MS0xLjYzLDEuNjgtNC44NSwzLjg1LTQuODksMy4xNy02LjEyLDMuMzEtMy4zNiwxLjQ5LTIuNzIsMS4xMy02LjAzLDIuMDktMi4xNy42OC4yNy45NWgwdi42My0uNjNsMi4xNy0uNjgsNi4wNy0yLjA4LDIuNzYtMS4xOCwzLjM2LTEuNSw1LjgtMy4wOCw1LjM1LTMuNDUsNC44OS0zLjksMS43Ny0xLjgxLDIuNTQtMi44MSwzLjU4LTUuMjUsMy4wOC01Ljc1LDEuNDktMy44MSwxLjEzLTIuMzUsMi4zNi02LjM5LDIuODEtNS45OC45NS0yLjcyLDEuODEtMy4yMSwyLjg2LTUuODksMy4yMi01LjU3LDEuMzYtMi44MSwxLjcyLTIuODEsMi45LTYuMTIsMi44Ni01Ljc2LDIuNDktNi4zLDIuMTMtNi43LDEuMjItNC45NC43Ni0yLjU4LDIuMDQtOC43OSwxLTQuOTguNjgtMy43Ni43My0zLjYzLjgyLTUuMTIuNDUtMi40OSwxLjE4LTcuNDMsMS4zMi03LjcsMS44MS04LjY2LjkxLTUuODQuNTktMi45NS41OS00LjYyLjg2LTQuMTMuNDEtMy4zNSwxLjM2LTUuMzkuMjgtMS43MiwxLjc2LTUuOTguMzctLjkxLDIuNjItNS43NiwyLjktNS44OSwyLjk1LTYuMjUsMi45NS01LjM5LDEuNDEtMi45OSwxLjQ5LTIuODYsMi44MS02LjExLDUuMzgtOC40NywzLjMxLTQuNTcsMy43Ni00LjEzLDQuOTMtNC43Niw1LjAzLTMuOTQsMi4xNy0xLjYzLDEuNDktMS4yMywzLjcyLTIuMjYsNS4wMy0zLjY3LjU0LjQxLS40LS41LDQuOTgtMy42Nyw0LjI1LTQuNjIsMy40OS01LjM5LDEuNTktMy45NC45MS0yLjQ5LDEuNjgtNy4xNiwxLjM2LTcuNDMsMS41NC03LjE2LjMyLTIuMDksMS4yNy01LjA3LjczLTMuNjcsMi4yNy04Ljc0LDMuMjEtOC42NiwyLjcyLTQuODQsMy40LTUuMjYsMy43Ni00Ljk4LDIuMDQtMi4zNiwxLjktMi40OSwyLjQ5LTIuOSwxLjQ5LTEuOSwxLjI4LTEuNDksMi42Ny0zLjI3LDMuMjYtMy43MSw4LjgzLTguMTEsMS40OS0uNjMsNS45OC0yLjc2LDEuMjMtLjczLDUuMzgtMS4zMSwzLjE3LTEuMDUsOC44My0yLjQ0LDguNTItLjIyLDguNjEsMy44NSw1LjQ0LDIuOTksMy40LDEuNDUsMS44MS4zNiw3LjI1LDEuNTgsMy4xMi0uMDQsNS40OS40Ni4wOC0uMDUuMDUuMDUsMy4xNy0uNDEsNS41My0uMDQsMi42Ny0uNTksNi4xMi0uNTQsMS42My0uNSw3LjQ3LTEuMzEsMS4zMS0uMzYsNS4zNS0xLjcyLDEuODEtLjMxLDQuOC0yLDQuMDMtMS40LDcuNDMtMy4zNSwxLjQtLjY4LDUuMTctMi45NSwzLjU4LTIuMzYsMS44Ni0xLDUuMTItMy43MSwxLjk1LTEuNzMsMy4yNy0xLjcyLDUuNDgtNC4xNyw1LjUyLTIuMzEsMy4wOS0yLDMuNC0uMDksNS4xNi0xLjM2LDQuNDksMi40OSwzLjk4LDEuNTQsMS40OSwyLjIyLDEuMjcsMi45NSwyLjk1LDUuODksMi45NCw1LjEyLDIuMTMsMy43Niw2Ljc1LDYuNDQsMy45LDIuNCw0Ljk4LDIuMzYsOC43NCwzLjc2LDQuNzYsMi42MywzLjksMi40OSwxOC4xMiwxNSw4LjI5LDQuNjcsOC44Myw0LjEyaC4wOWwuMjcuMDksOC40NywyLjEzaDIuMTdsNi42Ni42OGguMThsMi40LS4yNyw2LjI1LjA0LDIuMjctLjMyLDYuNTMtLjQsOS40Ny0xLjIyLDguMTEtMS4zMiw4Ljc5LTEuNjgsNS4zNi0xLjE0LDMuMzUtLjk1LDMuODUtLjU0LDQuOTgtMS41NCwyLjMxLjE0aC4xM2w2LjIxLTEuNDUsMS40OS41NCw3LjEyLjA1LDcuMTEsNi45My0uNjMsNi41M3YuMThsLjQ1LDEuODYtMS41OSw1LjQ4LTEuNTksMTEuOTYuMDQuMDktLjA0LjEzLDEuNjMsNS41Ny42OCwzLjI2LDIuNDksNC4wNCwzLjksNC44LDQuOTMsNC43Niw0Ljg5LDQuMDgsMy44NSwyLjksNi40OCw1LjgsMi4yMiwxLjksNS43MSw2Ljc1LDMuMDMsNC4zOSw3LjI5LDEzLjE0LDEuNDksMi4yNyw0LjQ5LDYuNTIsNy4wMiw4Ljc5LDcuNzQsOC43NCw3LjE2LDYuMzQsMy4yMiwyLjQ5LDUuNjEsMy42Nyw4Ljc5LDQuOCw4Ljc5LDQuMjYsNS44LDEuODYsMi45OSwxLjA5LDguODgsMS42OCw5LjA2LjU0di42OGwuMDUtLjY4LDguNTIuMzcuODIuMzEsNy43NSwxLjQ1LDcuMjksNi4xMiwxLjE4LDQuMy42OCw0LjA4LS4wNS43Ny42OCw5LjQ3LjksNy40My45NSwzLjIyLDEuNTQsNS43NSw0LjEyLDcuMDcsMS4yNywxLjcyLS4zMi42My40LS41NCw3LjY2LDUuOTMsNy40MywyLjksMS4zNi40NSwxMS41MSwyLjIxLDYuMDIsMSw1LjAzLDEuMzYsMy44LjgxLDYuMTcsMi44NiwyLjQ0LDEuNTQsOC42Niw4LjY2LDYuNDgsNy4yNSwyLjMxLDIuMjIsNy45OCw2LjU3Ljg1LjU5LDEuMDUuNSw3Ljc5LDQuMTcsOS45MiwzLjU4LDcuNTIsMy4zMSw4LjU2LDUuMzksNC43Niw4LjY1LDEuMjIsNS44LjcyLDIuNzIsMS4zMiw4Ljc4Ljc4LDQuMjdjLjI3LDEuNDkuNTQsMi45OC44MSw0LjQ4bDIuOSw4Ljk4LDUuOCw4Ljc5LDguMiw2LjkzLDIuMDQsMS44Niw2LjY2LDUuOCwyLjg1LDIuOSw1LjkzLDYuOCwyLjA0LDIuMDRjMi4yNywyLjA0LDQuNDksNC4wOCw2Ljc1LDYuMTJsLjEzLjA5LDYuNTMsMi42My4zNi0uOTEtNi40OC0yLjY4Yy0yLjIyLTItNC40NC0zLjk4LTYuNjItNS45M1oiIC8+CiAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtMyIKICAgICAgICBwb2ludHM9Ijg2Mi4xNiA5MjUuOTUgODYyLjAyIDkyNS44NiA4NjAuMyA5MjUuNjggODU0LjM3IDkyMy42NCA4NTQuMjggOTIzLjY5IDg1NC4xNCA5MjMuNjQgODUxLjA2IDkyNC4yMyA4NDYuNDggOTI0LjIzIDg0My44MSA5MjQuODYgODM3LjE1IDkyNS45NSA4MzAuNzYgOTI3LjI2IDgyOS40OSA5MjcuNDUgODI5LjYzIDkyOC4zMSA4MzEuMDMgOTI4LjEzIDgzNy4yNCA5MjYuODEgODQzLjk1IDkyNS43MyA4NDYuNTggOTI1LjE0IDg1MS4wMiA5MjUuMDkgODU0LjE5IDkyNC41IDg2MC4xMiA5MjYuNTkgODYxLjggOTI2LjczIDg2My4yNCA5MjguMjIgODYzLjg4IDkyNy41OCA4NjIuMzQgOTI2IDg2Mi4xNiA5MjUuOTUiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtODE1LjM1LDMxMi4yNmwuMDktLjA1aC4xNGwzLTEuNCw0LjcxLTEsMS4zNi0uNjgsMS45OS0xLjMxLDMuMzEtMS4wNSw1Ljc2LTIuMjcsMy4zNS0yLjg1LDEtLjMyLjA5LS4xNC4xOC0uMDkuNTQtMS4wOCwzLjg1LTIuMTcsMi4wOC0zLjEzLDEuNDUtLjg2LjA0LS4xOC4xNC0uMDkuMjctMS40LDMuNDQtMi41NCwyLjQtNC41Ny4xOS0uMDUuMDQtLjE4LjI4LS4xOC4wNC0uMTguMTQtLjE4LDMuODUtMy4yMiwxLjktNC40OS42NC0uNzMuNzItMS41LDIuNDktMy4xNy42NC0yLjQsMS42My0yLjk0LDEuNTktNi4zLjk1LTYuODkuMjctNy4yNS0uODItNy43OS0uNTktMS43Mi0xLjY4LTYuMjEtNC42Mi03Ljc5LTcuNjYtNy42Ni0uMzYtLjIyLTcuNjEtNC4yMi01LjM1LTEuMjItMi40LS43My03Ljc1LS4zNmgtLjE4bC01LjguNjgtMS45OS4zMi00LjM2LDEuMTgtNS40OCwyLjQtMi41OSwxLjktMi4xNywxLjA5LTEuMDkuODYtMy41NywyLjU0LTIuNzcsMy4zMS0uODEuNzctLjY4Ljk1LTMuMDQsMy4zMS0xLjQ1LDIuODUtMS4zMiwyLjA0LTIuMzEsNS43MS0yLjA5LDUuNTMtMS4zNiw2LjQ3LS40OSwzLjcyLS40NSw3Ljc5LjIzLDMuNC4wOSw0LjM5LjczLDQuMjIuMzIsMy41MywxLjcyLDYuMjUuMjMsMS41NCwxLjMyLDQuMTIsMS40OSwzLjc2LDEuOTUsMy40LDEuNjMsNC4zLDIuODYsNi4yMSwyLjQ0LDEuNzcsNS4yNiw1LjcxLjI3LS4wOS4yNy4xOCwzLjQ5LTIuMDQsMy45OS42OFptLTQuMTItMS40OWwtLjE4LS4wNS0zLjMxLDEuOTktNS4wOC01LjUyLTIuNDQtMS43Ny0yLjYzLTUuODQtMS41OS00LjMtMS45OS0zLjQ1LTEuNDktMy42Ni0xLjIzLTMuOTQtLjIzLTEuNTktMS43Mi02LjE2LS4zMi0zLjU4LS43OC00LjEyLS4wOS00LjQ0LS4yMy0zLjMxLjQ1LTcuNzQuNDUtMy42MywxLjM2LTYuMzRjLjY4LTEuODYsMS4zNi0zLjY3LDIuMDktNS40OGwuMTgtLjQxYy4wNS0uMDQuMDUtLjA5LjA1LS4xNGwyLjAzLTUuMTYsMS4yNy0xLjk1LDEuNTQtMi45NCwyLjgtMy4wOC43Ny0xLjA0LjY4LS42LDIuOTQtMy40OCwzLjMxLTIuMzYsMS4xMy0uODYsMi0xLDIuNzItMS45OSw1LjIxLTIuMjcsNC4yNi0xLjE4LDEuOTUtLjMxLDUuOC0uNjgsMS4zMi4wOSw2LjQzLjI3LDIuMjIuNjgsNS40OCwxLjI3LDcuNDgsNC4yMSw3LjY2LDcuNjEsNC41Myw3LjY2LDEuNTksNS45My41OSwxLjczLjgyLDcuNTYtLjI3LDcuMi0uOTEsNi43MS0xLjU5LDYuMjUtMS42MywyLjk0LS43MywyLjQ5LTIuMjcsMi43Ny0uODYsMS43Ni0uNjguNzctMS43Nyw0LjM1LTMuOTQsMy4yMS0uMDQuMTQtLjA5LjEzLS4wOS4xOS0uMTQuMDktLjE4LjE4LTIuNDUsNC41OC0zLjM1LDIuNDUtLjA1LjE4LS4xMy4wOS0uMjgsMS4zNi0xLjQ5LjkxLTIuMDQsMy4xMy0zLjc2LDIuMDktLjA5LjA5LS4wOS4wOS0uNSwxLjA1LTEuMjIuNC0zLjM2LDIuODYtNS4zNSwyLjA5LTMuNTcsMS4xOC0xLjg2LDEuMjItMS4zMS42OC00LjcxLDEtMi45LDEuMzYtMy45OS0uNjgtLjEzLjA5WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im04OTYuMTQsMzA3LjM3di0uMThsLTIuOS0zLjU0LTUuMzUtMi0yLjQtMS4xOC0uMTQuMDQtLjEzLS4wOS01LjMsMS4yMi0yLjU0LjMyLTMuNTMsMS41OS00LjI2LDIuMjctMSwuNS0uODIuODYtMi41OSwzLjU4LTIuNjMsNC40NC0uMDQuODItLjk1LDMuOTQtLjU5LDIuOTUuMDUuMDktLjA1LjE0LjY0LDEuODYsMy4yMSw1Ljk0LjE0LjA5LjA1LjA5LDQuNTcsMi4yNy4xMy0uMDUuMTQuMDksMS44Ni0uNDYsNi4wMi0uMDksMS4wNC0uNTQsMy40LTEuMTgsMi4xMy0xLjMyLDEuMjctLjQxLDMuMTctMi44OSw0LjIyLTMuMzYuNS0uODEsMi4wNC00Ljg1LDEuMDQtMi4wOXYtLjEzbC4wNS0uMDktLjUtNS4wMy4xMy0yLjY3LS4wOC0uMTNabS0xLjQxLDkuNzRsLTIuMDgsNC45My0uNDUuNjQtMy45NCwzLjEyLTMuMTcsMi45LTEuMjcuNDEtMiwxLjI3LTMuMjYsMS4wOC0xLjI3LjU0LTUuNzEuMDktMS43Ny40MS00LjMtMi4xMy0zLjA4LTUuNjItLjU5LTEuODEuNTktMi43Ni45NS0zLjk0LjA1LS45MSwyLjQ1LTQuMDgsMi41NC0zLjQ0Ljg2LS45MS42OC0uMzIsNC4yMi0yLjI3LDMuNTgtMS41NCwyLjI3LS4yMyw1LjI2LTEuMjIsMi4xNywxLjA5LDUuMzUsMiwyLjU4LDMuMTctLjE0LDIuNDUuNDUsNS4xMi0uOTUsMS45NVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNzE3Ljc3LDIwMi42NmwtLjU5LDMuOTUuMDguMTN2LjE5bDQuNjIsNS4yMS4yNy0uMDkuMjMuMThoMGwzLjQ0LTEuNTQsNC4wOC42NC4xOC0uMTQuMTguMDUsMi4zNi0xLjg2LDUuNDQtMS44Ni41NS0uNSwzLjc2LTMuNTQsMy40OS0yLjEzLDEuNzItMi4xOCwyLjI3LTMuNzEsMy4xNy00LjIyLjE0LS41LjU0LTEuMDksMS40NS00LjY2LjU1LTEuNDZ2LS4xOGwtLjY4LTYuMzl2LTEuMzFsLS4wNS0uMjMtMS40LTIuNzItNS44OS01LjIxLTEuOTUtLjk1aC0uMTRsLS4xMy0uMDQtOC4wMi43Ny0uNDEuMjMtNC40NCwyLjc2LTIuODEsMS41OS0xLjg2LDEuNjgtMS44MSwxLjgxLTEuNjcsMi41NC0yLjU0LDMuMjItMS4zNiwyLjE3LTEuMzYsNC45NC0xLjMxLDIuOTV2My43NmwtMS4yNywzLjg1LjA1LjE0LS4wNS4xMywxLjE4LDMuNjJabS45NS03LjY1bC4wNS0zLjksMS4xOC0yLjQ1LDEuNDUtNS4xNywxLjE0LTEuODEsMi41OC0zLjI2LDEuNjctMi41NCwxLjczLTEuNzIsMS44MS0xLjYzLDIuNjctMS40OSw0Ljk4LTIuOTksNy40OC0uNjMsMS44Ni45MSw1LjY2LDUuMTIsMS4xOCwyLjMxdjEuMThsLjY4LDYuMzktLjQ5LDEuMzYtMS40MSw0LjU4LS41OSwxLjEzLS4yMi42My0yLjk1LDMuODUtMi4yMiwzLjcyLTEuODEsMi4yMi0zLjMxLDEuOTktMy42NywzLjQ5LS43Ny41NC01LjM1LDEuODEtMi4xNywxLjc3LTQuMDMtLjY0LS4wOS4wNGgtLjE0bC0zLjI2LDEuNS00LjI1LTQuOC41NC0zLjgxdi0uMThsLTEuMTgtMy42MiwxLjI3LTMuOVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNTkxLjM2LDUuMTdsLjk1LDIuNTQsMi4xMyw1LjI1LDQuMTcsNy43OSw2LjIxLDcuNzkuNjguNjQsOC40Myw3LjIsMTEuMzcsNy43OSwzLjQ5LDIuMjIsNy43NSw1LjI2LDcuNjYsNi4zNCwxLjM2LDEuNDksMi45LDQuMzF2LjA1bDIuNTQsMy40Ljk1LDEuNjMsMy4zNSw2LjEyLDQuNDQsNy44OCw2LjI2LDcuNzUsMS41OSwxLjYzLDcuODQsNS41OC45MS41OSw2LjgsNS40NCwxLjksMi4zMS45OSwyLjgxLDIuMjcsNC44NS40MSw1LjUzLjQ1LDIuMDMtLjcyLDUuMzUtLjA1LDIuNC0uOTUsNC4zLS41LDMuMzEtLjc2LDMuMTctMS4xOCw0LjU4LS4zMiwxLjYzLTEuNjcsNS4zLS4xNC43N2gwbC0uMDUuMTQtMS4xNyw2LjMtLjMyLDEuNDEtLjczLDUuMzQtLjQ5LDIuNC0uMTQsNC43Ni0uMjcsMy4wOC4yMiw0LjcxLjA1LDMuMDguNzIsNy44LDEuMTgsNy43NCwxLjEzLDUuMzUsMS4xMywyLjU0LDMuOTQsNy43NCwyLjgxLDUuNzEsMi40LDIuMjIsMi45NSw1LjI2LDEuNTksMi40NC43MywzLDEuNDYsNC40OC0uMjMsMS4xOHYuMDlsLjc2LDYuNDgtLjMxLDEuNTkuMTgsNi4xMi0uMzYsMS40NS0uNTUsNi4zNC0uMTguNjMtLjc3LDMuNTQtMi4xNywxMS4yOC0uNjgsNC44NS0uNjQsMi45LS4xOCw0LjA0LS42OCwzLjcxdi4xNGwuNDEsMy43MS0uMjIsMy45OXYuMTNsMS42Myw1LjE3LjU1LDIuNjcsMi4wNCwzLjQuMTMuMDkuMDkuMDksNS4yNiwxLjk1LDIuNDQsMS4zNi4xMy0uMDUuMTQuMDksNS42Ni0xLDEuOTkuMjdoLjE0bDQuOTgtLjk1LDIuNjguMDUsNC4zOS0uNjMsMy40LjA0LDQuMjEtLjE4LDMuNDkuMjIsNS4wMy41NSwyLjYzLjQxLDcuOTMsMi4yMSw3LjY2LDIuMDksMi41NC41LDUuMjYuOTEsMy45NC40NSwzLjkuMTQsMy45OS0uMDQsMy44NS0uOTEsMy4wNC4wNC4xOS0uMDQsNC40OC0xLjg2LDEuNjguNTRoLjIzbDUuNzUtMS40NSwzLjI3LDMuMDMsNC4yMSwyLjU0LjMyLDEuNDUtLjA1LjIzLjA1LjEzdi4wOWwyLjc2LDcuNDguMzYsMy4zNSwxLjU5LDQuMjYsMS40MSw2LjQ4LjQsMS4yMiwxLjMyLDcuNzl2LjM2bC4wNCw3LjI1LS40NSwyLjcyLS42OCw0LjMxLS4xOC42My0xLjksNS4wOC0xLjksMi42My0xLjIzLDEuOS0xLjcyLDEuMzItMi4zMSwyLjIyLTQuMzUsMi4xOC0uNjguNDYtLjMyLjA4LTQuOCwyLjMxLTIuOTUuOTEtMi45LDEuMDgtNS43NSwyLjA5LTEuNjMuODYtMy4yMiwyLjE4LTIuMjIsMi4yMS0xLjU5LDEuODYtLjgxLDEuODEtLjc3LDQuNjZ2My4yNmwuNDUsNS4wNy41LDIuNTkuNjMsNi4zLjI3LDEuNC41NCw3LjctLjEzLDYuOTh2LjE4aDBsLjE4LDguNDcuNjMsNC40OS43Nyw0LjA4LDEuNTQsNi45My4yNywyLjYzLjczLDUuMTYuNSwzLjgxLjU0LDMuOTQsMS44MSw3LjkzLDEuNjMsMy4xMywzLjUzLDQuNjcsNC4zNiwzLjQ5LDUuNjYsNC4zNSwyLjA4LDEuMzYsNy44NCw2LjNjLjIzLjI3LjQxLjUuNTkuNzNsNS45Myw2Ljk4LDEuMDksMS42M2MxLjIyLDIuMDQsMi40LDQuMTIsMy41OCw2LjA3bDIuODEsNi40OC43MiwxLjI3LjY0LDEuNjMsMi45OCw2LjEyLDEuNTksNC42MiwxLjMyLDMuMDQsMS43Nyw3LjcuMDUuNTUuODEsNy4yNS4yOCw3Ljc1Ljc2LDcuOCwxLjA1LDIuOTQsMS42Myw1LjAzLDMuMzYsNC43MSwzLjA4LDMuMDgsMTIuNDYsOC43LDcuNDMsNi44NSw2LjY2LDcuNywxLjQ1LDEuNTQsNi4wNyw2LjI1LDEuNzIsMS40MSw2LjE2LDQuNzYsMi4yNywxLjYzLDcuMTYsMy44NSw2LjQ4LDMuOTQsMS4yNy42NCwxLjg2LDEuMTgsNS44OSwzLjI2LDMuOSwyLjY3LDMuOSwyLjE4LDYuMDcsMy44NSwxLjYzLjkxLDcuODQsNS41N3YuNTktLjU5bC41LS42OC03Ljc5LTUuNTgtMS42OC0uOS02LjA3LTMuOS0zLjg1LTIuMTctMy45NC0yLjYzLTUuODktMy4zMS0xLjg2LTEuMTgtMS4zMS0uNjMtNi40OC0zLjk5LTcuMDctMy43Ni04LjM4LTYuMzQtMS42My0xLjM2LTcuNTItNy43NC02LjcxLTcuOC03LjQ0LTYuNzktMTIuNDEtOC42NS0zLjA0LTMuMDQtMy4zNS00Ljc2LTEuNS00LjcxLTEuMDQtMi45LS43Ny03LjU3LS4yNy03LjgtLjg2LTcuODgtMS43Ni03LjctMS4zNi0zLjIxLTEuNTktNC42My0yLjk5LTYuMTEtLjYzLTEuNjMtLjczLTEuMzYtMi44MS02LjQ0Yy0xLjIyLTIuMDgtMi40NC00LjEyLTMuNjctNi4xNmwtMS4wNC0xLjYzLTYuMDItNy4wN2MtLjE5LS4yNy0uMzctLjUtLjU1LS43M2wtLjE4LS4xOC03Ljg0LTYuMy0yLjA4LTEuMzYtNS42Ny00LjM1LTQuMy0zLjQ0LTMuMzEtNC4zNS0xLjYzLTMuMjZjLS4xNC0uNjMtLjI3LTEuMjctLjQxLTEuOWwtMS4zNi01LjY2LS41NC0zLjkzLS41LTMuODEtLjcyLTUuMTctLjI4LTIuNTgtMS41OS03LjJjLS4wNC0uMjMtLjA0LS40MS0uMDgtLjU5bC0uNjQtMy4zMS0uNjQtNC40LS4xMy04LjUyLjA5LTYuOTgtLjU0LTcuNzktLjI3LTEuNDUtLjY0LTYuMy0uNDktMi41OC0uNDYtNS4xMi0uMDUtMi45NC44Mi00Ljc2LjcyLTEuNDUsMS40NS0xLjcyLDIuMDMtMi4wOSwzLjEyLTIuMTcsMS41OS0uODEsOC41Ny0zLjEzLDIuOTQtLjkxLDUuMzktMi41My41NC0uMzYsNC42Mi0yLjM1LDIuMTctMi4xMywyLjA0LTEuNTksMS4wOS0xLjgxLDIuMDgtMi44NSwxLjg2LTUuMDMuMTgtLjczLjczLTQuNC40Ni0yLjcyLS4wNS03LjM4LjA1LS40MS0xLjMyLTcuODQtLjQ1LTEuMzEtMS40LTYuNDgtMS41OS00LjM1LS40MS0zLjM1LTIuNzItNy40N3YtLjMybC0uMzYtMS43Mi0uMTMtLjE0LS4wNS0uMTgtNC4zNS0yLjU4LTMuMzYtMy4xMy0uMjIuMDUtLjE4LS4xMy01Ljg1LDEuNDktMS42OC0uNTQtLjE0LjA0LS4xOC0uMDQtNC41MywxLjktMy4wMy0uMDUtMy45LjkxaC0zLjg1bC0zLjgtLjA4LTMuOS0uNDYtNy43NC0xLjQxLTcuODQtMi4wOC03LjctMi4xNy0yLjcyLS40NS01LjEyLS41NC0zLjQ0LS4yMy00LjM1LjEzaC0zLjMxbC00LjM5LjU5LTIuODEtLjA1LTUuMDMsMS0yLS4yN2gtLjEzbC01LjU3Ljk1LTIuMjItMS4yNy01LjMtMS45NS0xLjk1LTMuMjYtLjQ1LTIuMzUtMS42My01LjIxLjIyLTMuODUtLjQxLTMuODUuNjgtMy41OC4xOC00LjAzLjU5LTIuOS43Mi00Ljg5LDEuNTUtNy43OS41OS0zLjQ5Ljc3LTMuNC4yMi0uODIuNS02LjIxLjQxLTEuNjgtLjE4LTYuMDMuMzItMS42M3YtLjE0bC0uNzctNi40My4yMi0xLjIyLS4wNS0uMDkuMDUtLjA5LTEuNDUtNC41My0uODYtMy4zNS0xLjU0LTIuMzEtMy4xMi01LjUzLTIuMzUtMi4yMi0yLjYzLTUuMzktMy45OS03LjctMS4wOS0yLjQ5LTEuMDktNS4xNi0uMTgtMS4zMi0xLTYuMzktLjIyLTIuNTQtLjUtNS4yMS0uMDQtMy4wOC0uMjMtNC42Mi4yNy0zLjA4LjE0LTQuNTguNDktMi40OS42OC01LjMuMzItMS40MSwxLjI3LTYuNjEsMS43Ny01Ljg1LjM2LTEuNjMsMS4xOC00LjYyLjc3LTMuMTcuNS0zLjMxLjk2LTQuNDkuMDQtMi4zMS43My01LjQ0di0uMThsLS40NS0xLjk1LS40NS01Ljg5LTIuMjctNC42Ni0xLjEzLTMuMTctMS45NS0yLjM2LTYuODQtNS40OC0xLS41OS03LjY1LTUuNDQtMS41NS0xLjYzLTYuMzgtNy44OC00LjI2LTcuNTYtMy4zNi02LjE3LS45NS0xLjYzLTIuNzItMy42Ny0yLjcyLTQuMDgtMS40LTEuNjMtNy44NS02LjQ4LTcuNzktNS4zLTMuNDUtMi4yMi0xMS4zMy03Ljc1LTguOTctNy42MS02LjEyLTcuNy00LjE3LTcuNzUtMy4wNC03Ljc1LTEuNTktNC43MS0xLjQtMy4wOS0uODEuMzcsMS4zNiwyLjk1LDEuNTksNC43NloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtOTM4LjA1LDkxNC43MmwtMy43Mi0uMjMtNC44LjE4LTUuNjYtMS45OS0zLjA4LS44Mi0zLjE3LTIuMTItNS4zLTQuMDQtNC42Ny00LjY3LTguMTUtOC42NS00LjcxLTYuNDMtMS45LTIuNDEtMS43Ny00LjA4Yy0uNzItMS40NS0xLjQtMi45NS0yLjA4LTQuNDRsLS4wNS0uMTgtMS4yNy04LjUyLS41NC04Ljc1LTEuNDktOC44My0yLjY3LTguODQtNS4zOS04LjgzLS4xNC0uMDktLjA1LS4xMy0uNC0uMjctOC43LTQuNzYtNy42Ni0yLjU4LTEuMTMtLjUtMi4xMy0uNjMtNi42Mi0xLjYzLTIuNzItMS01Ljk4LTEuOTEtNy43LTQuMTItLjk1LS43My03Ljg0LTguMDYtLjkxLTEuNzctMy42Ny02Ljg0LTUuMjUtOC45Ny04Ljc5LTUuNDktOC44My0zLjAzLTEuMTQtLjI4LTEwLjA2LTIuMzEtNi4zNC0xLjI3LTUuNDQtMS44MS0zLjQ1LS44Ni00LjcxLTIuNDktMy44MS0zLjk0LTIuODEtNC42Ny0uNTUtMy4yNi0xLjQ1LTUuMjEuMTgtNC43MS0uMzItMy45LjQ1LTQuNjYuNDUtOC4yNS42LTQuNjItLjQxLTMuOTQuNDEtNC44NS0uMDUtLjE0di0uMTRsLTMuODUtNy40OC0uMzItMS4xOC0uMTMtLjEzLS4wNS0uMTktLjkxLS41NGgtLjI4bC0uMTgtLjE0LS40NS4wOWgtLjA5bC04LjA2LS45NS0uMTQuMDUtLjA5LS4wNS0xLjA5LjMxLTcuNTcuNi00LjM1LjU5LTMuNjcuNjNoLS43M2wtNy4xMS45NS0xMC4zMy40Ni04LjY1LS41LTguNy0xLjk5LTEtLjQ1LTcuNzEtMy4wOC03Ljg4LTQuNjItLjg2LS43My04LjA2LTcuOTctNi45OC04Ljc5LTYuNDctOC42MS00LjQ0LTguODMtLjIyLTEuNjMtMS4xMy02Ljk4LS40MS0xLjQ1LS43Ny03LjQzLTIuNjctNC45NC0xLjgxLTMuOC0yLjA0LTIuNjgtNS41My02LjIxLTMuMzEtMy4wMy02LjUyLTUuNzYtMi4yMi0xLjgxLTcuNDMtNi45OC0xLjIyLTIuMDgtMi41NC02LjM0LjIzLTIuMTctLjM2LTYuNDkuMDQtLjA4LDIuMDgtOC42MSwyLjYzLTguNy40OS02LjE3LjU5LTIuNjMtLjA0LS4xNC4wNC0uMDktMS41NC03LjEydi0xLjU0bC0uMDktLjE0di0uMThsLTEuNjQtMi4wOC0uMTgtLjA1LS4wOS0uMTMtMi43Mi0uNjQtNS45My0zLjAzaC0uMThsLS4wOS0uMDktNS4zLjQ1LTMuMzUtLjU5LS4wOS4wNC0uMDktLjA0LTQuODkuOS0zLjc2LjE0LTQuMDQuOTUtNC44Ljc3LTExLjY0LDMuMjctNC40OSwxLjQtNy4xNiwxLjYzLTIuOTkuNzctNC4zMS42My00LjU4LDEuMDktMi45NS4xMy01LjcuODYtMi4zNi0uMjMtNi4zNC4yNy0yLjg1LS43Ny01LjkzLS43Mi02LjEyLTIuNjMtMi41NC0uNzctMi45LTEuNjctNS42Mi01LjA4LTMuMzEtMy41M2MtMS44Ni0yLjA5LTMuNjctNC4xMy01LjQ4LTYuMjFsLTIuMzEtMi41OC02LjUzLTUuNjYtOC43NC03LjAyLTYuMjEtNC44OS0yLjQ5LTIuOS00LjMtNS43NS00LjM5LTkuODgtMy4yNi03LjUyLTMtNi4yNS0xLjEzLTIuNTQtMS40LTIuNjMtNC4zLTYuMy00LjYyLTMuNzEtNi44LTMuMDgtMS45OS0xLjA5aC0uMDVsLTMuNjItLjk1LTUuMy0uOTEtOC43OS0uOTUtMS45NS0uMDktNi44NC0uMjMtMi4xMy4wNS02LjY1LjUtMS41OS4wNS03LjExLjk5aC0uNjRsLTguMzMsMS4xOC03LjY2LjM2LTEsLjI3LTguNTYtMS4xM2gwbC0uMjMtLjA0LTguNTYtMy41NC03LjA2LTUuMjEtMS41LTEuMTgtOC45Mi03Ljc5LTguNzUtNS4yNi03Ljk3LTIuNDktLjg2LS4zNi00LjEyLS41LTQuNzYtLjQ1LTguODMuMDktOC43OS44Mi03LjI1LDEuMDQtMS42My4xNGgwbC02LjEyLjkxLTIuNTguMjctOC43LDEuMDUtNC41Ny4zNi00LjIxLjQ5LTMuODUuMTktNC44OS43Mi0yLjk5LjE5LTUuOCwxLjA4LTEuNjguMTktNi45NywyLjA4LTYuMDMsMi45LTMuMDgsMi44NWMtLjU5LjQxLTEuMDguNzctMS41OSwxLjA5bC0uMTQuMTMtMS4wOSwxLjQ5LTIuODUsMy40OS0yLjIyLDUuMzUtLjQxLjczLS42OCwyLjQ5LTEuNTksNC4wOC0uMzYsMS41NC0xLjY4LDUuMjEtLjk1LDMuNTMtMS4wOSwzLjEzLTIuMTcsNS42Mi0uODYsMS42Ny0yLjcyLDQuMjctMi4wOCwyLjcyLTEuODYsMi4wOC02LjM0LDYuNjYtMi4zMSwyLjE3LTQuMTcsNC42Mi0zLjc2LDUuMDctMy4yNiw1LjYyLTIuODEsNS45OC0uOTUsMi45LTEuNDUsMy40OS0xLjU0LDUuMy0uNTUsMS40LTIsNi44NC0yLjA4LDYuNjItLjczLDIuNjctMS40LDMuOTQtMS41OSw0LjgxLS42OCwxLjY4LTYuMTYsMTUuODYtMS4wNSwzLjE3LTQuOTQsMTIuNTUtMi43Miw2LjAyLTIuOTksNS43MS0xLjMxLDIuMTctMS44NiwzLjM2LTEuMzIsMS45NS0yLjA4LDMuMzUtMy40NCw0LjE3LS44NiwxLjE4LTMuNCw0LjQ4LTQuNTMsNS4yMS01LjAzLDcuODgtMS40LDIuMzYtMi40LDQuMjEtLjk1LDIuMjctMy40LDguNzktNC40NCwxMi40Ni0zLjEzLDEwLjY1LTIuMTMsNi42Mi0xLjg2LDUuMy0xLjYzLDUuMTYtLjkxLDMuNjItMS4xOSw2Ljc1LS4yMywyLjA4LS40OSw1Ljk4LjA5LDguOTMuMzEsMi42My4xNCw2LjU3LjI3LDIuMTMtLjE0LDYuNzUuMDksMi0uNDEsNi4zOS0uMDksMi4zNS0xLDguNzktMS44MSwxMi4xOC0xLjA0LDUuMy0uMzIsMi4wOS0yLjA4LDkuNzktMS4wNCw1LjYyLTEuMjcsNi40My0xLjc3LDYuOTQtMi4xMyw2LjU3LTIuNzIsNi4zNC0yLjY3LDUuNjYtMS45LDIuOTUtMS4zNiwyLjUzLTIuNjMsMy43Mi0uOSwxLjQ1LS43OC45OS0yLjYyLDQuMzktMy4xNyw0LjM5LTMuNjcsNi4zLTEuNzIsMi40NC0xLjU0LDMuMTctNi4zNCwxMS4wNi0yLjQsMy4zLTEuMTgsMS43Ny00LjAzLDQuNjYtNC42Niw0LjAzLTUuMTcsMy40OS02LjcxLDMuMzUtNS4xNiwyLjI3LTIuMjcuODEtMy45OSwxLjY4LTQuOCwxLjU0LTEuNzIuNjgtNi45OCwyLjEzLjIyLjk1LjI4LS4wOSw2Ljc1LTIuMDQsMS43Ny0uNjgsNC43NS0xLjU1LDMuOTktMS42OCwyLjMxLS44MSw2LjEyLTIuNjcsNS44NS0zLDUuMjUtMy41OCw0Ljc2LTQuMDgsNC4xMy00LjcyLDEuMzEtMS45LDIuMzYtMy4zMSw2LjQ0LTExLjE0LDEuNDktMy4wNCwxLjY4LTIuNDksMy42Ny02LjI1LDMuMTctNC40NCwyLjU5LTQuMzEuODEtLjk5Ljk1LTEuNTQsMi41OC0zLjcyLDEuNC0yLjU4LDEuODYtMi45NCwyLjk0LTYuMTIsMi41NC02LjAyLDIuMjItNi42MSwxLjEzLTQuNjJ2LS4wNGwuMDUtLjE0LjU5LTIuMjIsMS40NS03LjMuODYtNC44NCwyLjA5LTkuNzQuMzYtMi4xMywxLjA0LTUuMjYsMS44MS0xMi4yNy45NS04Ljc0LjA5LTIuNDUuNDEtNi4zNC0uMDQtMi4wOC4xMy02LjctLjI3LTIuMTgtLjE0LTYuNjEtLjMyLTIuNjMtLjE0LTguNzkuNzMtOC4wMiwxLjE4LTYuNjUuODYtMy41OCwxLjI3LTMuOTQsMi4yMi02LjQ4LDIuMTMtNi42NiwzLjEzLTEwLjYsNC40OS0xMi40NiwzLjM1LTguNzUuOTEtMi4xNywyLjM2LTQuMTcsMS40LTIuMzUsNC45NC03Ljc1LjQ1LS41NCw0LjA4LTQuNjYsNC4yNS01LjcxLDMuNDUtNC4xNywzLjQ0LTUuMzUsMS45NS0zLjQ1LDEuMjctMi4xMiwzLjAzLTUuNzVjLjY4LTEuNDksMS4zMi0yLjksMS45NS00LjM1bC44MS0xLjcyLDQuOTMtMTIuNjQsMS4wOS0zLjE3LDYuOC0xNy40OSwxLjU5LTQuODUsMS40NS0zLjkzLjczLTIuNjgsMS45OS02LjI1LjY4LTIuNTksMS4zNi00LjYzLjU0LTEuMzYsMS41NC01LjMsMS40NS0zLjQ0LjkxLTIuODUsMi43Ni01Ljg5LDMuMjItNS41OCwzLjY3LTQuOTgsNC4xNy00LjYyLDIuMjctMi4yMiw2LjQ0LTYuNjYsMS44Ni0yLjEzLDIuMDktMi43NywyLjc2LTQuMjUuOTUtMS44NiwyLjIyLTUuNjYsMS4xMy0zLjEyLjkxLTMuNTgsMS42OC01LjE3LjM2LTEuNDksMS41OC00LjA4LjczLTIuNTQuMzItLjU5LDIuMzItNS40OSwyLjY3LTMuMTcsMS4xOC0xLjU5LDEuMzYtLjk1LDMuMzEtMyw1LjUzLTIuNjMsMS40LS40NSw1LjM0LTEuNjMsMS43Ny0uMTksNS43MS0xLjEzLDMuMDQtLjE4LDQuODktLjY4LDMuODUtLjIyLDQuMjEtLjUsNC41OC0uMzIsMTEuMzItMS4zNiw2LjM0LS45NWguMDRsMS4zMi0uMDksNy43LTEuMDQsOC4wMi0uNzcsOC45Ny0uMTMsNC43Ni40NSw0LjAzLjUuNjguMzIsOC4wMiwyLjQ5LjkuNTVjMi40LDEuNDUsNC44NSwyLjk0LDcuMyw0LjM5bC40OS4yNyw4LjY2LDcuNjYsMS41NCwxLjIzLDcuMjUsNS4zNSw4Ljg4LDMuNjIuMDktLjA1LjE4LjA1LDguNjEsMS4xNy4wOS0uMDRoLjA5bC45NS0uMjIsNy44OC0uNDEsNy45My0xLjE0aC42NGw3LjItMSwxLjU5LS4wNCw2LjYxLS41NGgyLjEzbDguNy4zMiw4Ljc0LjkxLDUuMjEuODYsMy41OC45NSwxLjg2LDEuMDQsNi44LDMuMDQsNC40OCwzLjcyLDQuMDQsNS45MywxLjQsMi41NCwxLjEzLDIuNTgsMi45OSw2LjIxLDMuNzYsOC43NCwzLjk5LDguNzksNC4zNSw1LjgsMi41OCwzLjA4LDYuMjYsNC45LDguNzQsNy4wMiw2LjM5LDUuNTcsNy43OSw4Ljc5LDMuMzEsMy41NCw1Ljg1LDUuMjUsMy4wNCwxLjc3LDIuNDkuNzYsNi40OCwyLjcyLDUuNzUuNjgsMy4wOC43Nyw2LjI1LS4yMiwyLjQ1LjIyaC4xOGw1LjU3LS44NiwzLjA5LS4xNCw0LjUzLTEuMDgsNC4zLS42NCwzLjA4LS44Miw3LjE2LTEuNjMsNy4zNC0yLjIyLDYuMy0xLjY4LDIuNDEtLjcyLDQuOC0uNzcsNC4wOC0xLDMuNTgtLjA5LDUuMDMtLjkxLDMuMzEuNiw1LjM5LS40Niw1LjkzLDMuMDgsMi42My42MywxLjQxLDEuODF2MS40MWwxLjU0LDcuMTYtLjU0LDIuNDktLjU1LDYuMjUtLjQ1LDEuNDUtMi4wNCw2LjcxLTIuMjIsOS4yNHYuMThsLjM2LDYuMy0uMjcsMi4zNi4wNC4xM3YuMDlsMi41NCw2LjQ0LDEuNDksMi41Myw3LjQzLDYuODksMi4yMiwxLjg2LDkuNzQsOC43LDUuNDksNi4yMSwxLjk5LDIuNTgsMS44MSwzLjc2LDIuNjMsNC45My42OCw2Ljk0LjQxLDEuNTksMS40OSw4LjkyLjIzLjU0YzEuNDEsMi42OCwyLjc2LDUuMzksNC4xMiw4LjE1bC4wOS4xNCw2LjU3LDguNzUsNi45Myw4Ljc5LDguMiw4LjA2Ljg2Ljc3LDcuOTcsNC43Miw4LjgzLDMuNTgsMi4yMi41NCw2LjYxLDEuNTQsOC44OC41NCwyLjA0LS4wOSw4LjM4LS4zNiw3LjA3LS45NmguNzJsMy44MS0uNjgsMy44OS0uNDUsOC4wNy0uNjgsMS4xMy0uMzIsOC4xNS45NS4wOS0uMDUuMDkuMDUuMjctLjA1LjY4LjM2LjI3LDEuMTMsMy44NSw3LjQzLS4zNiw0LjYyLjQsNC4wMy0uNTksNC41My0uNSw4LjI5LS40MSw0LjY2LjI3LDMuOTQtLjE0LDQuODV2LjEzbDEuNDEsNS4xNi42MywzLjcxLDIuOTUsNC43MSw0LjE3LDQuMjIsNC44LDIuNTQsMy40LjgyLDUuNDQsMS44Niw2LjQ4LDEuMjcsMi4zMS41NCw4LjY1LDIsLjUuMTgsOC4zOCwyLjg1LDguNTYsNS4zNSw0Ljk4LDguNjUsMy42Nyw2LjgsMS4wOCwyLjA4LDcuOCw3Ljk4LDEuMDQuODEsNy44NCw0LjIxLDYuMTYsMiwyLjY4LDEsOC42OSwyLjI2LDEuMTguNDUsNy41MiwyLjU0LDguOTcsNC44OS4zNi43Myw0Ljk4LDguMTEsMi41OCw4LjQ3LDEuNTQsOC43djEuMTNsLjUsNy43LjI3LDEuODYsMS4wOCw3LjA3LDIuNDksNS4zNSwxLjUsMy4zOSwxLjk1LDIuNDksNC42Miw2LjM0LDguMjksOC44NCw0LjY3LDQuNjYsNS40NCw0LjEyLDMuNTgsMi4zNiwyLjkuNzMsNS45OCwyLjA4LDQuNzYtLjIzLDMuODEuMjd2LS45OVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtODE1LjQ0LDI5OS44NGwtLjA0LS41OSw2LjctLjA5LDEuMDUuMDVoLjEzbDUuMzUtMS41NCwyLjQ0LS43NywzLjE3LTEuNCwzLjk5LTIuOTV2LS4zMmguNTRsLjE0LS4wOSw0LjY3LTMuMDgsMy4yNi0zLjY3LjU1LS40NS4zMi0uNTQsMy41OS0zLjI3LDIuNjItNC4zNS40Ni0uNTQuMjMtLjQxLDMuMy0zLjY3LDEuNDktMy4yMiwxLjEzLTEuOSwxLjg2LTQuODEuNC0uODYsMS41OS02LjEyLjMyLTIuMDQuMzYtNy43OS0uODYtNi4wMi0uMTgtMS43Ny0xLjU5LTQuNzItMS4yNy0zLjI2LTMuNTMtNC43MS0yLjEzLTMuMDQtLjk2LS45NS0yLjMxLTEuNDEtNS42Mi0zLjc2LTcuODgtMi4zNS03Ljc1LS40NS0uOTUuMTQtNi45MywxLjEzLTUuNzEsMS44Ni0yLjE3LDEtMy4wOCwxLjU5LTQuNDQsMy40LTQuMTIsMy43Mi0zLjMxLDQuNTctLjczLDEuMzYtMi4yNiwzLjQ5LS44NiwyLjI3LTEuNCwzLjMxLTEuMjMsNC40OS0uNDEsMS43Ni0xLDYuMDctLjQ1LDcuNzkuMDUuMDkuNDksNy43LjM3LDEuMTgsMS4yMiw2LjYxLDEuOTUsNC4zNSwxLjEzLDMuNDksMi4zNSw0LjI2LDMuMjIsMy42Miw0LjgsNC40LDYuMDcsMS44NSwxLjgxLjc3LjA0LjU5Wm0tNy41Ni00LjAzbC00LjQ4LTQuMTMtMy4xNy0zLjU3LTIuMjItMy45OS0xLjEzLTMuNDgtMS45NS00LjQtMS4yMy02LjQ3LS4zNi0xLjIzLS40OS03LjUyLjQtNy43LDEtNi4wNy4zNi0xLjY4LDEuMjItNC40LDIuMjctNS41NywyLjEzLTMuMzUuNjgtMS4yNy42My0uNzcsMi43Mi0zLjgsMy44MS0zLjQ1LjU0LS40LDMuOTktMy4xMyw1LjAzLTIuNDksNS41OC0xLjgxLDEuODEtLjI3LDUuODktMSw3Ljc5LjUsNy42NiwyLjMxLDUuMzksMy42MywyLjI3LDEuMzYuNzIuNzIsMi4xNywzLjA4LDMuNTgsNC43NiwxLjA4LDMsMS42Myw0LjYyLjEzLDEuNjcuODYsNS44NS0uMzYsNy43NC0uMjcsMS45LTEuNjMsNi4yMS0uMzIuNTUtMS44MSw0LjgtMS4xOCwxLjktMS41NCwzLjM1LTMuMTcsMy40OS0uMjcuNS0uMzEuMzYtMi44MSw0LjUzLTMuNjIsMy4zMS0uMjMuNDUtLjQ2LjMyLTMuMywzLjcxLTQuODEsMy4wOC00LjMxLDMuMTctMi45NCwxLjMyLTIuNDkuODEtNS4yMSwxLjQ5LS45NS0uMDktNi43MS4xMy0xLjU0LS42OC02LjA3LTEuOVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNTc0LjM3LDUuMzlsNS44LDcuNjUsMS45LDIuNTQsMy4xMyw1LjE2LDUuMDcsNy43OSw3LjE2LDcuOC4yNy4yMiw3Ljc5LDQuNjcsNC40OSwyLjk0LDMuMjYsMS43Miw1LjMsMy41MywzLjg1LDIuNDksNi4zOSw0LjA4LDcuNjYsNS41Myw1LjgsNS44LDEuOTUsMi4yNywzLjY3LDUuNDQsNC43MSw3Ljc1LDEuMzIsMS45LS4wNS4wNCwzLjk5LDUuODUsMS45LDIuNTcsNy44NCw4LjI1LDUuNTcsNC42NiwyLjEzLDIuNDksMy45OCw1LjM1LDEuMzYsNS4xNi45NSwyLjM2LS4wNCw2LjI1LjIzLDEuNDEtLjgxLDUuNzF2MS45bC0xLDQuOC0uNDEsMi45OS0xLjcyLDcuNzktLjQxLDIuMTgtMS4zMSw1LjU3LS44Niw0LjcxLS40NSwzLjA5LS40Niw3Ljc5LjA5LDcuNzkuMzYsNy43NS40MSw0LjY2LjQ2LDMuMTMsMS41OSw3Ljc5LDEuOTUsNy43OSwyLjE3LDcuNywxLjYzLDYuMzRjLjIyLjU0LjQsMSwuNTksMS4zNmwuMjIuOTEsMS44Niw2Ljg5LjU1LDMuMjEuODEsNC41My41OSw0LjYyLjUsMy4wNC4xOCw1LjM0LjE5LDIuMzYtLjQ1LDUuMDctLjE0LDIuNjctLjY4LDQuMjYtLjQ1LDMuNTQtLjU0LDMuMjEtLjg2LDQuNTMtLjI3LDIuMDktMSw1LjY2LS42Myw3Ljc5LjU5LDcuODQuNCwxLjU0LDEuOSw2LjMsNC40OSw4LjExLjczLjUsNy4zNCw0Ljk0LDYuMTYuNjMsMS42My4wOWguMThsNC42Ny0xLjQ5LDMuMDgtLjg2LDIuNzYtMS4wNCw0Ljk4LTEuNDkuOTEtLjM2LDYuMTItMS41OS42OC0uMDUsNS44OS0xLjA4LDcuNTctLjE4LDEuOTEuMTMsNy4yOSwxLjM2LDEuODYuNDUsNi4zOSwxLjM2LDExLjA2LDEuOSw0LjQ4LjQ1LDQuNDQuNjhoMy4zNmw1LjkzLDEuNTQsMS43Ny4wNCwyLjY4LDEuNjMsNC45Myw0LjQ5LDIuMDksMy4yNiwxLjI3LDMuMzUsMi4wMyw0LjM1LDEuNzcsNy42NS4wNSw3LjE2LS4wNS40NS0xLjQsNS42Mi0uODIsMS44Ni0xLjk5LDMuMTMtMy45OSwzLjU4LTQuNTcsMi44NS01LjYyLDIuMTctNS45MywxLjktNi4wMywyLjE3LTQuNzEsMi42Ny00LjI2LDMuOS0uNDksMS0xLjk1LDQuNTMtLjM3LDMuMzZ2NC4wOGwuNTUsMy44LjkxLDUuNDQuNTksMi4yNywxLjI3LDcuOTMuNDUsNC4zLjQ1LDMuMjJ2LjQ1bC4xOCw3Ljk3LjQ1LDcuMTYuMTksMS4yNywxLjMxLDYuNTMuNSwzLjA0LDEuMDQsNC42Ni41LDQuNjIuNDUsMy4xMy44Miw3Ljg4LDEuMDQsNy42Ni44NiwyLjc2LDIuNjMsNS4yNSw1LjI2LDUuNDksMi44MSwyLjMxLDQuOTgsMy4xNyw3LjcsNS4zOSw3LjgsNi45Nyw1LjYyLDcuNTcsMi4wOSwzLjUzLDIuMjcsNC4xNywxLjQ1LDMuODEsMS45LDMuOSwyLjA5LDYuNTcuNTQsMS4xNC4xOC43NywyLjA0LDcuMTEuMTgsMi44MS40LDQuOC4wOSwzLjQ0djQuM2wuMjMsMy42OC4wOSw0LjEyLjkxLDQuNzEuNSwzLjA4LDIuNjMsNi4wMywxLjMyLDEuOSw2LjU3LDUuNzYsMi44NSwyLjEzLDQuOTQsMi45OSw3LjcsNS43MSw2Ljg5LDYuNzVjLjI3LjI3LjU5LjU5Ljg2LjgybDYuNjYsNi45MywxLjE4LDEuMDksOC4wMiw2LjcsNy41Nyw0LjM1LDUuNzUsMy40NCwxLjk5LDEsMi40NCwxLjQsNS4zLDIuNzIsNC4wOCwyLjYzLDMuNjcsMiw1LjU3LDMuNDksMi4yMiwxLjI3LDEuNTQsMSw2LjE2LDMuNzYsNS4xMiwzLjk0LDIuNjcsMi4yNy41NS0uNjgtMi42OC0yLjIyLTUuMDgtMy45OC03Ljc5LTQuOC0yLjI3LTEuMjctNS41Mi0zLjQ4LTMuNjctMi00LjA4LTIuNTgtNS4zNC0yLjc2LTIuNDUtMS40MS0xLjk1LS45OS01Ljg5LTMuNTQtNy4zNC00LjIxLTguMDEtNi42Ni0xLjEzLTEuMDQtNi42Mi02LjkzYy0uMzYtLjI3LS42My0uNTUtLjk1LS44NmwtNi44NS02LjcxLTEuNDQtMS4wNC02LjM0LTQuNzYtNC45NC0zLjA0LTIuODEtMi4wNC02LjQ4LTUuNzEtMS4yMi0xLjY4LTIuNTgtNS45My0uNDUtMi45NS0uOTEtNC41OC0uMDktNC4xMi0uMjItMy42M3YtNC4zNWwtLjA1LTMuNDQtLjYzLTcuNzktMi4yMi03Ljc5LS41NC0xLjI3LTIuMDgtNi41Mi0xLjk1LTQtMS40NS0zLjgtMi4zMS00LjMtMi4wNC0zLjUzLTUuODktNy44NC03LjctNi44OC03Ljc5LTUuNTMtNC45NC0zLjEzLTIuNzYtMi4yMS01LjI2LTUuNTMtMi40LTQuODUtLjg2LTIuNjgtLjEzLS45MS0uOTEtNi43OS0uODEtNy43NS0uNDUtMy4xNy0uNS00LjU3LTEuMDUtNC43MS0uNS0zLjA4LTEuMzItNi40OC0uMTgtMS4yMy0uNDEtNy4wN3YtLjA0bC0uMDQtLjE4di0uNDVsLS4xOC03LjI5di0uNDZsLS40NS0zLjM1LS41LTQuNjItMS4yMi03LjYxLS41OS0yLjMxLTEuNDEtOS4wNi0uMDUtMy45OS40MS0zLjQ0LDEuODEtNC4xNy41NC0xLC44Ni0uNzcsMy4xMy0yLjgxLDQuNTMtMi41OSw1LjkzLTIuMTcsNS44OS0xLjg2LDUuNjItMi4xNyw0Ljg5LTMuMDMsNC4yMi0zLjgxLDEuOTUtMy4wNC44Ni0xLjk5LDEuNDktNS44OS4wNC0uNTQtLjA0LTcuNDMtMS44MS03Ljc1LTItNC4zLTEuMzYtMy40OS0yLjIxLTMuNDQtNC45NC00LjQ5LTMuMTctMS45LTEuODEtLjA0LTUuOTgtMS41NGgtMy4yMmwtNC40NC0uNjgtNC40OS0uNDUtMTEuMDEtMS45LTguMjUtMS44MS03LjM0LTEuMzItMS45OS0uMTgtNy42Ni4xOC02LjYxLDEuMTMtNi4yNSwxLjU5LS45NS40MS00Ljk4LDEuNDUtMi43NiwxLjA1LTMuMDguODYtNC42NywxLjQ5LTEuNDktLjA5LTYuMDMtLjYzLTcuNy01LjI1LTQuMjYtNy44LTIuMjctNy42Ni0uNTktNy41Ny42NC03LjY2LDEtNS43MS4yNy0yLjA4Ljg2LTQuNTguNTQtMy4yMi40NS0zLjQ5LjY4LTQuMjYuMTQtMi43Ny40Ni01LjAzLS4xOS0yLjQ5LS4xOC01LjMtLjQ5LTMuMTctLjU5LTQuNjItLjgxLTQuNTctLjU1LTMuMjItMi4wOS03Ljc5LS41OS0xLjM2LTIuMjctOC42Ni0xLjU4LTUuNDgtMS45MS03LjctMS40OS03LjM0LS40OS0zLjQ5LS40NS00Ljk5di0uMjdsLS4zNi03LjExLS4wNS03Ljc0di0uOTFsLjA1LS4wOS40LTcuMTEuMzYtMi42My45MS00LjY2LDEuMzItNS41Ny40MS0yLjIyLDEuNjctNy43NS40MS0zLjAzLDEtNC43MS4wNC0yLjA0LjgyLTUuNzZ2LS4xM2wtLjE4LTEuMjcuMDUtNi40My0uMDUtLjEzLS45NS0yLjI3LTEuNTQtNS42Mi0zLjk0LTUuMy0yLjEzLTIuNDUtNS42Ni00Ljc2LTcuNzUtOC4xNS0xLjktMi41NC01LjIxLTcuNzUtNC43Ni03Ljc5LTMuNjctNS40NC0yLTIuMzUtNS44LTUuODUtMi43Mi0yLTUuMTItMy42Mi0xMC4yNC02LjYxLTUuMy0zLjQ5LTMuMjYtMS43Ni00LjQ5LTIuOTUtNy44NC00LjcxLTcuMTItNy43LTUuMTItNy43OS0zLjEzLTUuMTItMS45LTIuNjgtNS45OC03Ljc5LTcuNzUtNi4zNC0yLjMxLTEuNS0uNTEuNzcsMi4yMiwxLjM2LDcuOCw2LjM5WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im04MjMuMTEsMjkyLjU5di0uNTkuNTloMHYtLjU5aC4xOGw3Ljc1LTEuOTUsMy43Ni0xLjc3LDQuOTgtMy4wOC41OS0uNjgsMy41OC0yLjgxLDIuODEtMy4wNCwxLjA4LTEuMDQuNS0uODYsMi45NS0zLjM1LDIuOTQtNC44NS4zNi0uNzMsMi41My00LjE3LDEtMi41OC45NS0zLjQuOTYtNC40NC40LTcuOC0uNTQtMi42Mi0uNzctNS4zNS0yLjcyLTUuOTgtLjczLTEuODYtMS4wOC0xLjQ1LTcuMTYtNi4zOS0uODItLjU0LTcuODgtMi45LTMuNDktLjE4LTQuMjYtLjM2aC0uMTNsLTMuNC41LTQuMzUuNzctMi4wNC42OC01Ljg1LDIuNzItNC4zMSwyLjgxLTQuMTIsMy45LTMuMzUsNC4zMS0yLjc2LDUuMTYtMS4xOCwzLjE3LTEuMDQsMi40LS4yNywxLjA1LTEuMTgsNS4zNC0uNCwyLjQ5LS4zNiw3Ljc5Ljc2LDUuMzQuMTQsMi40NCwyLjM1LDcuODkuMTQuMDkuMDQuMTQsNC44NSw3LjYxLDIuOTUsMy4xMyw1LjQ4LDIuNTQsMi40NSwxLjMyLDcuNy41OXYuNTlabS03LjctMi4wOGwtMi0xLjE0LTUuNTctMi42Ny0yLjU0LTIuNjctNC45OC03Ljg0LTIuMzItNy42Ni0uMTQtMi4zMS0uNzctNS4yNS4xOC0yLjk5LjE4LTQuNjcuNDEtMi40NCwxLjQtNi4yNSwxLTIuNDUsMS4xOC0zLjA4LDIuNjItNC45NCwzLjQ0LTQuNDguNDEtLjM2LDMuNDQtMy4yMiw0LjIyLTIuNzYsNS43MS0yLjcyLDEuOS0uNjMsNC4zOS0uNzcsMy4zNi0uNSw0LjIxLjM2LDMuNTQuMjIsNy42NiwyLjkuNDUuMjcsNy4xMSw2LjMsMS4wOSwxLjQ1LjU5LDEuNjMsMi43Miw2LjAyLjcyLDUuMDguNSwyLjUzdi4wNWwtLjMyLDcuNTItLjk1LDQuMzktLjk1LDMuMzEtLjkxLDIuNC0yLjU0LDQuMjEtLjU5LDEuMDktMi42Myw0LjM1LTIuOSwzLjM2LS42OCwxLjA0LS45MS44Mi0yLjcyLDIuOTktMy42MiwyLjg1LS43Ny44Mi00LjU4LDIuODEtMy43NiwxLjc3LTEuNzcuNDEtNS43OSwxLjQ5LS4zNi0uMDUtNy4zOS0uNTlaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTU0Ny4zMiwxLjU5bDUuNjIsMy43Niw1LjkzLDQuNCw3LjcsNi4xMiw3LjcsNy40NCw3Ljc5LDkuOTIsMi4zMSwzLjA4LDUuNDgsNS45OCwyLjU4LDEuODYsNS4zNSwyLjc2LDcuNywzLjA0LDMuNTgsMS45OSw0LjE3LDIuMTgsOC4yLDUuNTcsNy4zLDQuOCwzLjg5LDIuOTUsMy44MSwyLjk0LDQuMTcsNC43MiwzLjU4LDQuNDgsMi4xNywzLjIyLDMuNzYsNS45MywxLjg2LDIuNzJjMS41NCwyLjA0LDMuMDgsNC4wNCw0LjYyLDYuMTJsLjYzLjc3LDIuNTQsMy4yMSw0LjM1LDQuNTMsMy40LDQuMTcsMy4yNiwzLjY3LDIuODYsNi4wMy45MSwxLjY4LDEuMjIsNy40Ny0uMDQuNDUtLjE4LDcuNTYtLjMyLDIuMzYtLjU5LDUuMDMtMS4wOSw2LjE2LS4xOCwxLjYzLTEuMzIsNy43OS0xLjEzLDcuNzUtLjQ1LDcuNzkuMDUsNy43OS4zNiw3Ljc1LjY4LDcuODguOTEsNy42NiwxLjE4LDcuNzksMS41NCw4Ljc5LDEuNjMsNi43MS4zNiwxLjk1LDEuMDksOC44My4zNiw0LjcxLjQ1LDMuODUuMzYsMy44NS40NSw3LjctLjMxLDcuNzUtLjQ1LDMuOTQtLjM3LDMuNzYtLjQ1LDMuMTItLjg2LDYuOTMtLjU5LDcuMjEtLjE4LDYuMTIuMDksMS41OS41NCw2LjIxLjUsMi42NywxLjI3LDUuMTcsMy4xNyw3Ljc5Ljc3LDEuMjcsNS43LDYuNjEsMi4xMywyLjEzLDcuOTgsNS42Miw3Ljc5LDEuNjgsMS42OC4wOSw2LjctMS4xNCw1Ljk4LTEuODUsMS40MS0uNTUsNC4xMi0xLjcyLDMuNjMtMS40NSwxLjc3LS44Niw1LjY2LTEuOTksNi40OC0xLjE4LDEuNDUtLjA1LDYuNTIuMjgsMS4xOC4xOCw3Ljc5LDEuMTNoLjA5bDcuNjEsMS40MSwyLjIyLjU0LDUuNTMsMS4wNSw0LjU3LDEuMzYsMy4yNi42OCw1LjE3LDIuNTQsMi40LDIuMDgsMy42Niw1LjUzLDIuMzIsNy41Ny0uMjMsNS43Ni0uMjIsMS45LTEuNjMsMy42Mi0yLjcyLDMuODktLjU5LjU5LTQuOCwyLjY4LTMuNCwxLjQ1LTcuNzksMi44NS01Ljc2LDIuMDQtMiwxLjA0LTMuNDQsMS40OS00LjM5LDMuNjMtMi44NSw1LjEyLS4xOSwyLjU5LS41LDQuNDQsMS4xOCw5LjA2LjU0LDIuMTMsMS42OCw3Ljg4di4wNWwxLjg2LDcuNTIuMjIsMi4yMiwxLDUuNDkuMDksMy4zMS4zNiw0LjQ4LjE5LDMuODUuNDEsMy45NC43Nyw1LjAzLjU5LDIuNzYsMS40MSw3LjcsMi43NiwyMy4yOS45NSwyLjk5LDEuNDQsNC45OCwzLjQ0LDUuMTIsMi41OSwyLjY3LDUuMywzLjk5LDUuNjIsMy44NSwyLjEzLDEuMjIsNC44LDMuNTMsMi45LDEuOTUsMS4wOC45Niw2LjYyLDYuODQuNjMuODEuOTEsMS41OSw0LjA4LDYuMTIsMy43MSw3LjcuNzcsMi40NCwyLjEzLDUuMjYsMS4yNyw1Ljg5aDBsLjQ5LDEuOS40NSw3LjY2djcuNzlsLjA5LDYuODV2LjkxbC43Nyw3Ljd2LjA5bC4wNS4xNGMuMDUuMjIuMDkuNDUuMTQuNjNsMi45OSw3LjI1LDQuODksNi4xMiwxLjksMS42OCw1LjkzLDMuODUsNy43LDUuMTcsOC4xMSw2LjQ3LDcuMzgsNi45My43Ny44Miw3LjA3LDYuNDMsMS41OSwxLjM2LDYuMjEsNC4wOCw2LjA3LDMuNzEsMy43MSwyYzEuOTUuOTksMy44NSwxLjk1LDUuNzUsMi45bDQuOTQsMi44NSwyLjgxLDEuNDEsMy41OCwyLjE3LDQuMTcsMi4yNywzLjEzLDEuOTUsNC42MiwyLjgxLDcuNzUsNS4yMSwyLjYzLDIuMjcuMDkuMDksNS4wNyw0LjE3LjU1LS42OC01LjA4LTQuMTctMi42OC0yLjMxLS41NC0uNDEtNy4yNS00Ljg5LTQuNzYtMi44Ni0zLjAzLTEuOS00LjE3LTIuMzItMy41OC0yLjEzLTIuODUtMS40LTQuOTQtMi44NS01Ljc1LTIuOTQtMy43MS0xLjk1LTYuMDMtMy43MS02LjEyLTMuOTktMS41OS0xLjM2LTYuOTgtNi4zOS0uODEtLjgxaDBsLTcuNzUtNy4yOS03Ljc5LTYuMTctNy43OS01LjI1LTUuOC0zLjc2LTEuODEtMS41OS00Ljk0LTYuMTctMi44MS02Ljc5LS4xOC0uOTF2LS4wOWwtLjczLTcuMzh2LS45NWwtLjE0LTYuOC4wNS0xLjA0di02Ljc2bC0uNS03Ljc5LS41NC0yLjA4LTEuMjItNS43MS0yLjEzLTUuNDQtLjc3LTIuMzUtMy43Ni03Ljg0LTQuMTMtNi4yLS45MS0xLjU5LS42My0uOS02Ljc1LTYuOTQtMS4wOS0uOTktMi45OS0yLTQuOC0zLjUzLTIuMTgtMS4yNy01LjYxLTMuODEtNS4xMi0zLjg1LTIuNDktMi41OS0zLjQ0LTUuMjEtMS40LTQuNjYtLjkxLTIuOS0yLjc3LTIzLjE5LTEuNC03Ljc5LS41OS0yLjc3LS43Ny00Ljk0LS40MS0zLjk0LS4xNC0zLjgxLS40LTQuNDgtLjA1LTMuMjctMS4wNC01LjYyLS4yMi0yLjE3LTEuOTEtNy43NWgwdi0uMTNsLTEuNjgtNy43LS40OS0yLjA0LTEuMTgtOC45My41LTQuNDkuMTktMi40NSwyLjg1LTQuOSw0LjEyLTMuMzEsMy4xNy0xLjM2LDEuOTUtMSwxMy41NS00LjkzLDMuNDQtMS40NSw1LjAzLTIuODEuNzctLjcyLDIuNjctMy44NSwxLjg2LTQuMTcuMTgtMS44MS4yNy01LjkzLS4wNS0uMTgtMi40NC03Ljg0LTMuODUtNS43MS0yLjQ5LTIuMTMtNS40OS0yLjcyLTMuMTItLjU5LTQuNTgtMS4zNi01LjcxLTEuMTMtMi4wOS0uNS03Ljc0LTEuNGgtLjE0bC0uOTUtLjE5LTcuODgtMS4xMy02LjY2LS4yN2gtMS40NWwtNi42MSwxLjIyLS42OC4yMi01LjEyLDEuODEtMS44MS44Ni0zLjY3LDEuNDYtNC4xMiwxLjcyLTEuMzYuNDktNS44OSwxLjg2LS40MS4wNS02LjE2LDEuMDktMS40MS0uMDUtNy44OC0xLjc2LTcuNDMtNS4zLTIuMTMtMi4wOC01LjYyLTYuNDktLjczLTEuMTMtMy4xMy03LjctMS4yNy01LjEyLS41LTIuNTktLjU1LTYuMTF2LS4yN2wtLjA4LTEuMzIuMTgtNi4xMi41OS03LjExLjMyLTIuMjIuNS00LjcyLjQ5LTMuMDguMzYtMy44NS40NS0zLjg5LjMyLTcuNzktLjE5LTMuMzEtLjI3LTQuNTMtLjM2LTMuODUtLjQ1LTMuODUtLjM2LTQuNzEtMS4wOS04Ljg4LS4zNi0xLjk5LTEuNTktNi42Ni0uMjItMS4yNy0xLjM2LTcuNTctLjIzLTEuODEtLjkxLTUuODktLjM2LTMuMDgtLjU5LTQuNjYtLjYzLTcuNzUtLjQxLTcuNzUtLjA0LTcuNzQuNDUtNy43LDEuMDgtNy43NSwxLjM2LTcuNzQuMTgtMS42MywxLjA0LTYuMTcsMS03LjcuMTMtNy4yNS4wNS0uNTV2LS4xM2wtMS4zMi03Ljg4LS45MS0xLjU5LTIuOTktNi4yNi0zLjIyLTMuNjItMy40LTQuMTItNC4zNS00LjU3LTIuNTQtMy4xNy01LjIxLTYuODUtMS44MS0yLjcyLTMuOC01LjkzLTIuMTctMy4yMi0zLjYzLTQuNTctNC4xNy00LjcyLTMuOTQtMy4wOC0zLjg5LTIuOTQtNy4zNC00Ljg1Yy0uMTQtLjA5LS4yOC0uMTgtLjQxLS4yN2wtNy44LTUuMy00LjI1LTIuMTctMy41NC0yLTMuMzktMS40LTQuMzUtMS42OC01LjE2LTIuNjItMi40NS0xLjgxLTUuNDgtNS44OS0yLjMyLTMuMTMtNy43OS05Ljg4LTcuNzktNy41Mi03LjgtNi4yMWMtMi0xLjQ1LTMuOTgtMi45NC01Ljk0LTQuMzlsLTUuNjItMy43Ni0zLjk4LTIuODUtMS4zMi0xLjEzLS41NC42OCwxLjMyLDEuMDgsMy45OCwyLjlaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTgyMy4yOCwyODYuMDdsNy44NC0xLjg2LDQuODktMi41NCwyLjktMS42MywxLjg2LTEuNDUsMS42OC0xLjgxLDIuMjItMi4xMywzLjYyLTQuMTcsMy00Ljg5LDIuMTctNC40NCwyLjE4LTcuODguMzItNy44NC0xLjI3LTYuMy0uNDUtMS43Mi0uNzctMS4wOS00LjA4LTYuNzUtMi43Mi0yLjQtNC4zNi0yLTMuNTctMS44Ni03Ljc1LS43M2gtLjEzbC03Ljc0LDEuNDEtMy45NSwxLjY3LTMuOTQsMi4yMi0xLjA0LjY4LTEuMDksMS0uMDkuMDktMi45LDIuNjctMy41NCw0LjM1LS40MS43Ni0yLjI3LDQuNDUtMS4yNywzLjQtLjY0LDIuNTQtMS4xMyw1LjI1LS4yNyw3Ljg0di4xM2wuNDEsMS40NiwxLjA5LDYuMzksMi40LDQuOTQsMS4wOSwyLjc2Yy41OS44NiwxLjE4LDEuNjgsMS43MiwyLjQ0bC4wOS4wOSw3Ljg0LDUuNTguMjIuMDUsNy42NiwxLjMyLjA5LS4wNS4wOS4wNVptLTcuODgtMi4yN2wtNy41Mi01LjM5Yy0uNS0uNzItLjk5LTEuNC0xLjUtMi4xM2wtLjA0LS4wOS0xLjA0LTIuNjMtMi40NS01LjA4LTEtNi4wNy0uNC0xLjU0LjMxLTcuNywxLjA5LTUuMTIuNTUtMi40NSwxLjI3LTMuMzEsMi41OC01LjAzLjczLS45NSwyLjcyLTMuMywzLjktMy43Mi45OS0uNjMsMy45LTIuMTcsMy44OS0xLjY4LDcuNTctMS4zNi45LjEzLDYuODQuNjMsMy4yMiwxLjcyLDQuNCwyLjA0LDIuNDksMi4yNyw0LjcxLDcuNywxLjU5LDcuNTItLjA5LDEuMTMtLjI3LDYuNTctMi4wNCw3LjYxLTIuMTMsNC4zMS0yLjg2LDQuNzYtMy42Miw0LjE3LTIuMjIsMi4xMy0xLjU4LDEuNzItMS43MiwxLjQxLTIuOTUsMS42My01LjA4LDIuNTQtNy4zOCwxLjczLTcuNzUtMS4zNloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNTM4LjgsNS4zNGw0LjQ4LDQuMTMsNC40LDMuNjMsMy40LDIuOTUsNS44LDQuOCw5LjIsNy44LDcuOTMsNy43LDcuMTYsNy43NCwxLC44Niw3Ljc1LDYuNDgsMS4wOS40OSw2Ljc5LDIuNzcsNy42NiwyLjQ0LDcuNzUsNC4yMiw1LjkzLDQuMTYsOS42MSw2LjUzLDMuODEsMy4xMywzLjg1LDMuMjEsMy43MSw0LjQ0LDQuMDgsNS4yNiw1LjIxLDcuNywyLjU4LDMuNjIsNS4zOSw2LjcxLDIuNCwzLjA4LDMuOSw0LjU3LDQuNTgsNy44NS4xMy43MiwyLjA4LDYuODQtLjA0LDIuOS41OSw0LjgtLjQxLDMuMDktLjA5LDQuNTMtLjQ1LDIuNjctLjU5LDUuMTItLjMxLDEuNzctLjk1LDYuMDMtLjc3LDUuMzQtLjI3LDIuNDEtLjMyLDcuNzl2Ny43OWwuMjcsNy43NS4zMiw1LjI1LjIyLDIuNzZoMHYuMDVsLjg2LDcuNDgsMS4wNCw3Ljc5LjUsMi41OCwxLjQsOS4yLjQ1LDMuNjcuNDEsNC45NHYyLjgxbC4yNyw1LjA4LS4xNCwyLjY4LjMyLDUuMzV2Mi40bC4xOCw1LjUzLS4xOCw3LjU2LS42OCwxMC4xLS40MSw0LjMtLjA5LDMuNDktLjMyLDMuODUuMDUsMy45LS4wOSwzLjgxLjE5LDQuMDMuMjcsNC4yNi40NiwzLjQ5LDEuMDksNS44NC41LDIsMS40OSw0LjM1LDEuNDksMy40NSwyLjU4LDQuMTIsMi40NSwzLjcyLDEuMzEsMS42Myw2LjE3LDYuMjEsMS42MywxLjU0LDYuMTIsNC41MywxLjcyLDEuMTgsMS41NC41OSw2LjMsMi4xMywyLjkuNzMsNC45NC4xOCwzLjQ5LjQxLDQuMzUtLjU0LDIuOTgtLjA5LDQuODUtMS43NiwxLjA0LS4yOCwxLS43NywzLjktMS45OSwxLjk1LTEuMjIsNy43OS00LjA0LDIuNzItLjQ1LDQuMjYtLjQ5LDguMzguNDUsNy41MiwxLjksNy43NSwyLjk5LDUuMTcsMi45LDIuNCwzLjI2LDEuOTksNC4xMi0uMjIsMS41NC0xLjM2LDYuMDItNC41MywzLjE3LTMuMzUsMi4xOC0xLjQ2LjcyLTIuNCwxLjQxLTIuOS45NS0uOTUuNDEtNC45OCwxLjQ1LTIuOTQsMS41NC0yLjcyLjgyLTIuODEsMi41NC0xLjU5LDEuMDQtLjcyLDEuMzYtMi4zNiwzLjI3LS4wNS4yMi0uMDksMi4yNy0uMzYsNS4wM3YuMTNsLjYzLDIuNjguOTUsNi42MS4zNywxLjE4LjgxLDMuMzUsMS4zNiw1LjgsMS45LDYuMzQuODYsNC4xMiwxLDMuNTguOTUsNi4xNi4zNywxLjU0LjQ5LDcuMDIuODEsOC45NywxLjU0LDcuMzguMzYsMS45NSwxLjI3LDUuNzUuNDUsMy42My42NCw0LjEyLDEuMTgsMTMuMTkuMTQsMi4zNiwxLjU5LDcuOTMuNjQsMS4yNyw0LjMsNi41MiwzLjU0LDMuNDksNS43MSw0LjM1LDUuODQsMy43Niw0LjA0LDIuMzYsMi4yNiwxLjYzLDUuNDQsNC4yNiwzLjM1LDMuNDQsNC4zNSw1LjMsMS41NCwyLjMxLDEuNSwzLjA4LDIuNjMsNC42NywyLjk4LDcuNjYuMjgsMS4yMiwxLjcyLDYuNjYuMTgsMi45NC4zNyw0LjYyLS4wNSw3Ljc5LjA1LDMuNDUtLjA1LDQuMy4zNiwzLjguMjgsMy45OSwxLjM2LDUuNDguNSwyLjM2LS41LjM2LjU1LS4yNywxLjg2LDMuNjIsMy4zLDQuMjIsNC41OCwzLjY3LDYuMTIsNC4xNywxLjY3LDEuMDQsMy42NywyLjYzLDQuMDMsMi42Myw3Ljc1LDYuMTYsMy4xNywyLjk5LDQuNjIsNC4xMiwzLjk0LDMuNjcsMy44NSwyLjk1LDcuODQsNS4yNi44Ni40NSw2Ljg5LDMuNTgsNi4wMiwzLjMxLDEuNzIuODYsMS44Ni45NXYuMDVsNS44OSwyLjk1LDUuMDMsMi45OSwyLjcyLDEuNTQsNC41OCwyLjk1LjA0LjA0LDMuMTcsMS45LDcuNyw1LjMsNC4yNiwzLjY3LDMuNTMsMy4zaDBsLjU5LS42My0zLjUzLTMuMy00LjI2LTMuNjgtNy43OS01LjM5LTMuMjEtMS45LTQuNTgtMy0yLjgxLTEuNTktNC45NC0yLjk1LTUuOTgtMi45OC0xLjgxLTEtMS43Mi0uODEtNi4wNy0zLjM2LTcuNzUtNC4wMy03LjctNS4xMi0zLjc2LTIuOTUtMy45OC0zLjY3LTQuNTgtNC4xMi0zLjE3LTMtNy43OS02LjE2LTQuMTMtMi43Mi0zLjY2LTIuNTktMS42OC0xLjA4LTYuMDItNC4wOC00LjU4LTMuNjctMy4wOC0zLjktMS45MS0zLjcxLS40NS0yLjIyLTEuMzYtNS4zLS4yMi00LjAzLS40MS0zLjcxLjA0LTQuMzUtLjA0LTMuNC4wNC03LjgtLjU0LTcuNzktMS43Mi02LjYxLS4yNy0xLjE4LTMuMDQtNy44NC0yLjYzLTQuNzYtMS40OS0zLjAzLTEuNTktMi40NC00LjQtNS40LTMuNDUtMy40OS01LjctNC40NC0yLjA5LTEuNTQtNC4xMi0yLjQ1LTUuNzYtMy42Ny01LjU3LTQuMjYtMy41My0zLjQ5LTQuMTctNi4yOS0uNjMtMS4zNi0uMDktLjY0LTEuNDUtNi44NC0uMTMtMi40MS0uNDYtNS40NC0uNzMtNy43NS0uNjMtNC4xNy0uNDUtMy42Mi0xLjI3LTUuODQtLjM2LTEuOS0xLjU5LTcuNzUtMS4yMi0xNS40OS0uMzctMS42My0uOTUtNi4xNi0xLjA5LTMuNjMtLjgyLTQuMTItMS45LTYuMzQtLjMxLTEuNDktMS4wOS00LjM1LS43Ny0zLjM2LS4zMi0xLjA0LS45NS02LjY2LS42OC0yLjcyLjQxLTQuOTQuMDQtMi4yMiwyLjIyLTMuMDguNzYtMS40MSwxLjIyLS43MiwyLjk1LTIuNjMsMi41OS0uNzMsMi45NC0xLjU5LDQuOC0xLjM2LDEtLjQsMy4wOC0xLDIuMzYtMS40LDEuNDUtLjczLDMuNDQtMi4yNyw0LjYyLTMuMjcuMzItLjQsMS4zNi02LjAzLjI3LTEuNzctLjA0LS4xNHYtLjEzbC0yLjA0LTQuMTctMi44MS0zLjc2LTUuMTItMi44MS03Ljg0LTMuMDgtNy45OC0yLTguMi0uNDUtNC40NC40OS0yLjk0LjU5LTcuODQsNC4wMy0xLjk1LDEuMjItMy45LDItMS4yMi44Mi0uNTkuMTMtNS4wMywxLjgxLTIuNjcuMDUtNC4zMS41NC0zLjQtLjQtNC44LS4xOS0yLjg2LS42OC03Ljc5LTIuNjgtMS41NC0xLjA4LTYuMDItNC40NC0xLjYzLTEuNTktNi4wNy02LjA3LTEuMjctMS41OS0yLjQ5LTMuNzEtMi40NS0zLjk0LTEuNTQtMy40NC0xLjQ1LTQuMjYtLjUtMS45NS0xLjA4LTUuNzYtLjQ1LTMuNDgtLjI3LTQuMjYtLjE4LTMuOTUuMDgtMy44LS4wNC0zLjg1LjMyLTMuOS4xNC0zLjQ0LjM2LTQuMjYuNzMtMTAuMTkuMTgtNy41Ny0uMjItNS41Ny4wNS0yLjM2di0uMThsLS4zMi01LjE3LjA5LTIuNjItLjI3LTUuMTd2LTIuOTVoMGwtLjQxLTQuODQtLjQ1LTMuNzEtMS40MS05LjItLjQ1LTIuNjMtLjkxLTYuNDgtMS4wNC04Ljg4di0uMDVsLS4yMi0yLjU4LS4zMi01LjQ4LjA1LS4wOS0uMDUtLjEzLS4yMi03LjI1LS4wNC03Ljc0LjMyLTcuNzUuMjctMi4zMS42OC00Ljc2LDEuMzYtOC4zOC41OS01LjE3LjQ1LTIuNjMuMDktNC41My40MS0zLjIxLS41NC00Ljc2di0zLjE3bC0yLjA5LTYuNzUtLjIzLTEuMTMtNC41Ny03Ljc0LTMuOTktNC42Ny0yLjQ5LTMuMjYtNS4yNi02LjQ4LTIuNTgtMy42Ny01LjIxLTcuNjYtNC4xMy01LjM1LTMuNjctNC4zOS0zLjk4LTMuNC0zLjgxLTMuMDgtNy43OS01LjMtNy44LTUuNDQtNy43OS00LjMtNy43OS0yLjQ5LTYuNzYtMi43Mi0xLS41LTguNTYtNy4xMS02Ljg1LTcuNDgtOC4zOC04LjExLTcuMi02LjE3LTcuNzUtNi4zOS0zLjQ0LTIuOTQtNC4zLTMuNTgtNC40OS00LjE2LTMuMzEtMi44MS01LjA3LTQuOTQtLjYzLjY0LDUuMTIsNC44OSwzLjI3LDIuODVaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTgzMi45OCwyNzkuMTRsNi41My0zLjgsMy4wOC0yLjg1LDIuMzYtMi43MiwyLjktNC4wOCwxLjQ5LTIuNTQuNzctMS41LDIuMjctOC4zNC0uMDktMy41OC4xOS00LjM1LTEuNzItNS4zOS0uODEtMy4wMy0yLjIyLTMuMzEtNS45My00Ljk4LTIuNjgtMS40MS03LjkzLTEuMDRoLS4zNmwtOC4xMSwxLjU5LTUuNjYsMy4zLTIuNTQsMS44MS0xLjk1LDEuODEtMS42OCwyLTEuOSwyLjgxLTIuOSw1LjA4Yy0uMDQuMDgtLjA0LjE4LS4wOC4yN2wtMS45MSw3LjkzLS4wNSw2LjAyLS4wOSwyLjA0di4zMmwyLjA0LDcuOTcuMjIuNSw2LjQzLDcuOCwyLjIyLDEuNjcsMS41NC4zMiw2LjU3LDEuOTUuMTQtLjA0LjEzLjA0LDIuOS0uNjMsNS4zOS0uODYsMS40NS0uNzdabTE2LjE4LTI2LjE0bC0xLjk1LDcuMjktLjYzLDEuMjctMS40LDIuMzItMi42MywzLjgtMi4yMiwyLjU0LTIuNjMsMi40OS0zLjk5LDIuMzUtMy4zNSwxLjgxLTQuNzYuNzMtMi4zNS41NC01Ljk4LTEuNzctMS4xOC0uMjItMS4xMy0uOTEtNS45NC03LjIxLTEuODYtNy4yNS4wNS0xLjg2LjA1LTUuNjIsMS43Ny03LjQzLDIuNjMtNC42MiwxLjc2LTIuNTMsMS4zNi0xLjY4LDEuNTktMS41NCwyLjM2LTEuNjgsNS4wOC0yLjk5LDcuMi0xLjQsNy4zNC45OSwxLjU5Ljg2LDUuMzksNC40OSwxLjc2LDIuNjMuNTksMi40NCwxLjU5LDQuODEtLjE0LDMuOTguMDUsMy4zNVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNTM0LjcyLDEyLjgybDcuNzksNy41Nyw3Ljg0LDYuNzksNy43NSw2LjQ4LDQuMTMsMy42MywzLjU3LDIuOSw1LjM5LDQuODUsMi4zNiwxLjg2LDYuNDgsNS44NSwxLjQ1LDEuMjIsNy43OSw1LjcxLDIuODUsMS4xMyw1LjM5LDEuODYsNy42NiwyLjE3LDcuMzksNC4xNywxNS40LDEwLjgzLDQuNTMsMy45NCwzLjA4LDIuNzIsMy45LDQuOCwzLjc2LDQuODUsNi43MSw5LjUxYy4yNy4zNi41NC43My43NywxLjA4bDYuMTIsNy43NSw0Ljg5LDcuNjEsMS40LDQuMywxLjMyLDMuMTcuNzcsNi4zOS4yMywxLjA1LS4xNCw2LjY2LjA1LjgyLS41OSw2LjN2MS40MWwtLjc3LDUuNTItLjEzLDIuMjItLjU0LDQuODUtLjE5LDIuOTktLjIyLDQuNDktLjA0LDMuNC4wNCw3Ljc5LjMyLDcuNzkuNDEsNy43NS41OSw3Ljc5LjcyLDcuODQuNzcsNy42NS42OCw3LjcuMDksNy44NC0uMjcsNy42MS0uMTgsMTUuNC0uNzcsMTUuNTQtLjE4LDYuNjYuMDUsNy44NC40NSw5LjAyLjg2LDcuOTMsMS44MSw3Ljc5LDEuMDgsMy4xMywxLjgxLDQuOCwzLjEzLDUuODksMS40OSwyLjI3LDYuNDgsOC4xMiw4LjIsNy43LDcuNTYsNS4zNCw1LjY2LDIuNjIsNC4wOCwxLjY0LDYuMjEsMS40NSw0LjYyLDEuNTksMy4yMi40NSw3LjUyLDIuMjJoLjVsMS43Ny40NSw1LjIxLDIuNzcsMi44NSwzLjc2LS43NywyLjIyLjA1LjE5LS4wOS4yMiwxLjc2LDUuMDctLjE0LDQuMTIsMS4yMiwzLjc2LDIsNy42NiwyLjU3LDcuNzkuNzMsMy4xMiwxLjU0LDQuNzIsMS42OCw2LjMuNSwxLjQ1LDEuMDQsMy45OSwxLjA4LDMuNjcuMTgsMS4zNiwxLjQ5LDYuMjUuMjMsMy4wOC42NCw0LjYyLjM2LDQuMTMuNSwzLjguOTEsNS41NywxLjc3LDkuMzQsMS4yNyw4LjkzLjY4LDcuMDMuNSw3Ljc0LjUsMi41NC45NSw1LjUzLDMuNzYsOC4wMiwxLDEuMzYsNi45Myw2Ljg5LDEuMjIuOSw3Ljc1LDQuODUsNy42Niw0Ljg0LDYuMDMsNC45NCwxLjU0LDEuNCw1LjE3LDYuMDcsMi40LDMuNjIsMi4xNywzLjg1LDEuNDEsMy42NiwxLjc3LDMuOSwxLjksNy42Ni41LDcuMzktLjE0LDcuNzloMGwtLjA0LDcuODQuNDksNy43OSwxLjY0LDcuOTguMzYtLjA5LjE4LjI3LS40LjIzLDIuMTcsNC4yMiwxLjY4LDMuNTcuMTguMjdjLjY0LjY4LDEuMjcsMS40LDEuODYsMi4wOGw3LjM5LDUuOTMsMi4wOCwxLjQxLDYuMzQsMy45OSw3LjY2LDUuNDQsNy43MSw2LjI1LDYuNzUsNi4wN2MuMzYuMzIuNzIuNTksMS4wNC44Nmw3LjkzLDYuMTcsMS4zMS45MSw2LjU3LDMuOCw4LjI1LDQuNDUsNy4zLDMuNDgsOC42NSw0LjY3LDYuNzUsMy44LDcuNyw0Ljk4LDcuNTYsNS42Miw4LjcsOC4yLDIuMTctMi4zMS04Ljc0LTguMjUtNy44NC01Ljg1LTcuODQtNS4xMmMtMi4zMS0xLjI3LTQuNTgtMi41NC02Ljg1LTMuOGwtOC43OS00LjgxLTcuNzUtMy43Mi03LjcxLTQuMTItNi4zOC0zLjcyLTEuMTctLjc3LTguNzktNi44OC02LjcxLTYuMDctNy44NC02LjM5LTcuODUtNS41My03Ljg4LTUuMDMtNy4zOS01Ljg0LTEuNjgtMS45NWMtLjUtMS4wNS0xLTIuMDktMS40OS0zLjE3bC0yLjEzLTQuMjItMS41NC03LjMzLS40NS03LjUyLjA1LTcuNjZ2LS4wOWwuMDktNy44OC0uNTQtNy44OC0xLjk1LTcuOTMtMS45LTQuMjYtMS40MS0zLjY3LTIuMzUtNC4zLTIuNDktMy43Ny01LjQ0LTYuMzgtMS44MS0xLjcyLTYuMTYtNS4wMy03LjkzLTUuMDMtNy42Ni00LjgtLjgyLS41OS02LjY2LTYuNTItLjcyLS45Ni0zLjQ5LTcuNDItLjgyLTUuMTItLjQ5LTIuMjItLjUtNy43NC0uNjgtNi44NC4wNS0uMTgtLjc3LTQuODUtLjQ1LTMuNzYtMS44Ni0xMC4wNi0uOTEtNS4zOS0uNDktMy42Ny0uMzYtNC4wOC0uNjQtNC42Mi0uMjItMy4wOC0xLjQ5LTYuNTMtLjIzLTEuMzYtMS4xMy0zLjk5LTEuMDQtMy45OS0uNS0xLjQ1LTEuNjctNi4zLTEuNTUtNC42Mi0uNzItMy4xMy0yLjU0LTcuODgtMi4wNC03LjY2LTEuMDgtMy4xNy4wOC00LjE3LTEuNTktNC45NC45MS0yLjY3LS4xOC0uMzIuMDUtLjMyLTQuMjEtNS41Mi01Ljg5LTMuMDgtMi43Mi0uNzJoLS40NmwtNi45OC0yLjA5LTMuMy0uNDUtNC40NC0xLjU0LTYuMDctMS40MS0zLjg5LTEuNTktNS4xNy0yLjM1LTcuNTctNS4zLTcuNzUtNy4zNC02LjEyLTcuNjYtMS4zNi0yLjA0LTIuOS01LjQ4LTEuODEtNC43MS0uOTUtMi44MS0xLjY4LTYuOTgtLjE0LS42My0uODEtNy42MS0uNDEtOC43OS0uMDQtNy43NS4yMi03LjQ3LjY4LTE0Ljg2LjE4LTE1LjMxLjI3LTcuNjEtLjA5LTguMDctLjY4LTguMzMtLjkxLTguNjEtLjU5LTYuMjUtLjU1LTcuNzUtLjQ1LTcuNTIuMDUtLjE0LS4zMi03LjgtLjA5LTcuNy4wOS0zLjMxLjE4LTQuMzUuMTgtMi44Ni41NC00Ljg5LjEzLTIuMTMuNzgtNS41M3YtMS41NGwuNjMtNi4zOS0uMDktMSwuMTQtNi45My0uMjgtMS4xOC0uODEtNi43NS0xLjQtMy40NC0xLjQ5LTQuNjItNS4xNy04LjEyLTYuMjEtNy44NGMtLjIyLS4zMi0uNDktLjYzLS43Mi0xbC02LjcxLTkuNTEtMy44NS00Ljk0LTMuOTQtNC44OS0zLjQtMy4wOC00LjYyLTMuOTktMTUuNTktMTEuMDEtNy44OC00LjQ0LTguMDItMi4zMi01LjMtMS44MS0yLjMxLS45MS03LjQ0LTUuMzgtMS4zMS0xLjE0LTYuNDgtNS44OS0yLjQtMS44Ni01LjM1LTQuODVjLTEuMjItMS0yLjQ1LTItMy42Mi0yLjk0bC00LjEyLTMuNjMtNy43NS02LjQ0LTcuNy02LjctNy43NC03LjUzLTcuNzUtNy43OS02Ljg4LTcuNDItMi4zMSwyLjE3LDYuODgsNy40Myw3LjgsNy44OFoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtODQ2LjcxLDI1M2wtLjMyLTcuNzktLjY4LTEuMTMtMy42Ny02Ljc1LTMuMjctMi43Mi0zLjE3LS41OS00LjU4LTEuMTgtLjA5LjA0LS4wOS0uMDQtNy44OCwxLjktMS42My45Ni0yLjIyLDEuNjMtMi4wOSwyLTEuOTUsMS45NS0xLjU5LDIuMzYtLjksMS41OS0yLjQsNy44NHYuMThsLjE4LDMuMDgtLjA0LDQuNjIuMDQuMTgsMi44MSw1Ljg5Ljc3LDIsMS4zMiwxLjQsMi4wOC44Niw1LjYyLDIuODFoLjE0bC4xMy4wNS4wNC41NGgwbC0uMDQtLjU0LDQuMTItLjc3LDMuODEtLjMyLDIuNDUtMS41LDQuMzktMi40NCwxLjA0LS44MiwyLjk1LTQuMDgsMi4xMi0zLjEzLjYtMi4wOSwxLjk5LTUuNjYtLjA0LS4xNC4wNC0uMThabS0uOTEuMjdsLTEuOSw1LjM5LS42MywyLjE3LTEuOTUsMi44MS0yLjk5LDQuMTItLjY4LjUtNi44NCwzLjk0LTMuNDQuMjItNC4xMi43Ny01LjQ4LTIuNzItMi4wOS0uODYtMS4wNC0xLjI3LS42My0xLjYzLTIuNzYtNi4wM3YtNC4zNWwtLjE4LTMuMTIsMi4zMi03LjY2LjgxLTEuNDYsMS40OS0yLjE3LDItMiwxLjktMS45LDIuMjItMS41OCwxLjYzLS45Niw3LjUyLTEuNzYsNC4zOSwxLjA5LDMuMTcuNTksMi45OCwyLjYzLDMuNDUsNi40My42MywxLjA5LjI3LDcuNTYtLjA1LjE0WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im01MjcuNzQsMTIuNzNsNy45OCw4LjE1LDguMDEsNy43LDkuMTEsNy44LDkuNDcsNy43NSw0LjMsMy4xNyw3Ljc1LDYuMTIsNy43OSw2LjY2LDcuOTMsNS40NCw2LjA3LDEuOTUsMS43Mi40OSw3Ljc1LDEuOTUsNy41Nyw0LjIyLDcuNzksNS42Miw3LjcsNS42Niw3Ljc1LDYuOTgsNy43OSw5Ljc4LDguMzMsMTEuNjUsMS4xMywxLjc2LDMuOTksNS44OSwzLjMxLDcuODRjLjA4LjQ2LjEzLjkxLjE4LDEuMzZsMS40OSw2LjI1LS4wOSwyLjg1LjQxLDQuNzEtLjI3LDMuMTItLjA1LDQuNjctLjM2LDIuNjgtLjMyLDUuMTItLjIzLDIuMDktLjQ1LDcuMzQtLjE0LDYuMTJ2MS41NGwuMTksNy45My4yMiw2LjA3LjQ1LDcuNzUuNTQsNy44NC4yNywzLjEzLjMyLDQuNTcuNDYsMy45NC42Myw4LjM4LjA5LDMuMTcuMDUsNC42Mi0uMjIsMy4wOC0uMTQsNC4zLS40LDMuNDQtLjA1LDMuODUtLjQxLDMuOS0uMDUsMy40NC0uNCw0LjMxLS4wOSwyLjk0LS40NSw0LjgtLjQ2LDkuODguMTQsNy44OC40MSw1LjU4LjA5LDIuNzIuOTEsOC42OS42OCw0LjE3LDEuMDQsNS4zLjU1LDIuNDksMS45LDYuMDcuNjgsMS43Mi43MywxLjQsMy41Myw2LjM5LDIuOSw0LjMsMi44NiwzLjUzLDQuOTMsNS40OCwyLjQ1LDIuMzEsNS4zNCw0Ljc2LDQuMDgsMy4wMywzLjc2LDIuNTQsNS4yNiwyLjY3LDIuNTgsMS4xMywzLjgsMS40NSwzLjg1LDEuNjMsMy42NywxLjk1LDQuMDgsMS42Myw0LjA4LDIuNDUsMy42NiwzLjMxLDMuMjcsNC40NCwyLjUzLDUuNzYsMS4xOCwxLjkuNjgsMS4zNiwyLjg2LDYuMjksMS40LDQuMzEsMS41NSwzLjQ0LDIuNjIsOC40MywyLjM2LDcuMTEsMS4wOCw0LjEyLDEuMTksMy41OCwxLjQ1LDYuOC4yNy45LDIuMzYsMTcuMTgsMS4yNyw2LjE2LjYzLDMuNTguODYsNC4xMi41OSw1LjAzLjQxLDIuNzIuNjgsNy43NS4zMiw3Ljc0LjkxLDcuOTMuNSwxLjQ1LDIuODEsNi4zLDUuMDMsNi41NywxLjM2LDEuMzEsNi41Myw0LjgsNC43NiwzLjAzLDIuOTksMS43Nyw1LjUzLDMuNzYsMi4xNywxLjM2LDEuMDUuODIsNi42Niw2LjE2LDEuMzIsMS40OSwyLjQ5LDMuODEsMi43NiwzLjg5LDEuMTgsMi4zNiwyLjQsNS4zLjgxLDMuMjYsMS4zMiw0LjU4LjU1LDcuNTYtLjE0LDcuNzV2NC45OGwtLjA5LDIuODEuMjcsNS4xMnYyLjY4bDEsNi4xMi4xMywxLjY3LDEuNDksNC4wOCwxLjg2LDMuOSw1Ljk4LDYuNjYsMS40MSwxLjEzLDYuNDgsNC40NCw3LjcxLDUuMTIsOC4xMSw1LjkzLDcuNDMsNi4wMywxLjksMS43Niw1Ljg5LDQuNzEsMy44NSwzLjA0LDMuOSwyLjcyLDguODMsNS4wNyw2Ljc2LDMuMjIsMTUuNDksNy43OSw4LjIsNC45NCw3LjMsNC43NSwzLjQ0LDIuNTQsNC4zMSwzLjQ0LDQuNDQsNC4yNiwzLjMxLDMuNDQuNjMtLjU5LTMuMjYtMy40NS00LjUzLTQuMy00LjM0LTMuNDgtMy40NS0yLjU0LTcuNzktNS4xMi03Ljc1LTQuNjItNy43OS0zLjk4LTcuNzktMy44NS02LjcxLTMuMTctMi4zMS0xLjMyLTYuNDQtMy43MS0zLjg1LTIuNzItMy44OS0yLjk5LTUuOC00LjcxLTEuOTUtMS43Ny03Ljc5LTYuMy03Ljc5LTUuNzEtNy43NS01LjE3Yy0yLjEzLTEuNDUtNC4yNi0yLjg5LTYuMzktNC4zNWwtMS4yNy0xLjA0LTYuMDctNi43Yy0uNTQtMS4yMi0xLjEzLTIuNDEtMS42My0zLjU4bC0xLjQ5LTQuMDMtLjE0LTEuNDktMS02LjAzdi0yLjcybC0uMjctNS4wNy4wOS0yLjgxLjEzLTEyLjczLS41NC03Ljc5LTEuMzEtNC41Ny0uODEtMy4yNi0yLjQ1LTUuNDgtMS4xOC0yLjM2LTIuODYtNC4wMy0yLjQ5LTMuNzYtMS4zMS0xLjU5LTYuOC02LjI1LTEuMDUtLjg2LTIuMzEtMS40NS01LjQ4LTMuNzEtMy4wNC0xLjc3Yy0xLjU5LTEtMy4xMy0yLjA0LTQuNjYtMi45OWwtNi4zOS00LjcxLTEuMzEtMS4yMi00Ljk5LTYuNTItMi43Mi02LjA3LS41LTEuNTQtLjA0LS40LS44Ni03LjE2LS4wNS0xLjUtLjI3LTYuMjktLjY0LTcuOC0uNDEtMi44MS0uNjMtNC45OC0uOTEtNC4yNi0uNTktMy40OS0xLjI4LTYuMTctMS4zMS05LjI5LTEuMDQtNy43OS0uMjctMS4wNS0xLjQ2LTYuNzQtMS4xOC0zLjY4LTEuMDktNC4xMi0yLjUzLTcuNzQtMi40NS03Ljc5LTEuNTgtMy40OS0xLjM2LTQuMjYtMi45LTYuNDMtLjczLTEuNDEtMS4xMy0xLjc2LTIuNTgtNS45NC0zLjQtNC42Mi0zLjY3LTMuMy00LjIyLTIuNTQtNC4xMi0xLjYzLTMuNjMtMS45OS0zLjk5LTEuNjMtMy44NS0xLjQ5LTIuNDktMS4wNC01LjEyLTIuNjMtMy43Ni0yLjU0LTMuOTgtMi45OS01LjQtNC43Ni0yLjM2LTIuMjItNC45My01LjQ4LTIuODEtMy40NC0yLjg1LTQuMjItNC4yMi03LjctLjYzLTEuNzItMS45LTUuOTgtLjU1LTIuNDUtMS4wNC01LjMtLjY4LTQuMTItLjg2LTguNjEtLjE0LTIuODYtLjQtNS4zOXYtMi4yMmwtLjE0LTUuNjYuNDUtOS44My40Ni00LjguMTQtMi45NC4zNi00LjMxLjA1LTMuNC40MS0zLjkuMDQtMy44NS40MS0zLjQ0LjEzLTQuMzUuMjMtMy4wOC0uMDQtNC43MS0uMDktMy4xNy0uNjQtOC40Ny0uNC0zLjktLjM2LTQuNTgtLjI4LTMuMTctLjU0LTcuNzQtLjQ1LTcuNy4wNS0uMDktLjA1LS4xMy0uMjMtNS44OS0uMTgtOS40Mi4xNC02LjEyLjQ1LTcuMjUuMjMtMi4xMy4zMi01LjA3Yy4xNC0uOTEuMjctMS43Ni4zNi0yLjY3bC4wNS00LjY3LjMyLTMuMDgtLjQ1LTQuODUuMDktMi45NS0xLjQ5LTYuMjljLS4wNS0uNTUtLjEzLTEuMDQtLjE4LTEuNTRsLS4wNC0uMDktMy4yNy03Ljc0LTUuMjEtNy44NC04LjQyLTExLjY5LTMuMDQtMy44NS00Ljc2LTUuOTQtMi4wNC0xLjg2LTUuNzYtNS4yNi03Ljc5LTUuNzEtNy44LTUuNjItNy45My00LjM5LTkuMzgtMi40MS02LjEyLTEuOTktNy41Ny01LjIxLTcuNzktNi42Ni03Ljc5LTYuMTUtNC4zLTMuMTMtMy40OS0yLjk1LTUuOTMtNC44NS05LjEtNy43NC04LjIxLTcuODQtNy4zOC03LjY2LTcuMDItNy43NS02Ljg5LTcuNzUtLjYzLjU5LDUuOCw2LjYyLDcuNzQsOC41NloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtODQwLjEsMjQ2LjQzbC0uMDktMS4yMy0uOTEtMS41NC0uMTMtLjA0LS4wOS0uMTQtMi43Mi0xLjIyLTUuMDMtMi42Mi0uMTguMDQtLjE0LS4wOS0zLjk4LDEuNDEtMy45NSwxLjEzLTMuMTMsMy4xMi0xLjQsMy4zLTIuMTcsNC40NC4wNC4xNC0uMDkuMTQuMzIsMS40LjY4LDYuMy4wOS4xMy4wNC4xMyw1LjYyLDUuNGguMThsLjE5LjEzdi41NC0uNTRsNC43MS0uNTUsMi45NC4xNC4xMy0uMDloLjE4bDIuNzItMi4xNyw0LjEyLTIuODEuNDEtLjc4LjY4LTEsMS4zNi00LjguNS0xLjQxLS4wNS0uMDkuMDUtLjA5LS45LTYuN1ptLS40MSw3Ljk3bC0xLjQ1LDQuODktLjUuNzctLjI3LjU5LTMuOTksMi42Ny0yLjY3LDIuMTctMi43Ny0uMTgtNC43MS41NS01LjM1LTUuMTItLjY4LTYuMTItLjI3LTEuNCwyLjA5LTQuMjYsMS40OS0zLjM1LDIuNzYtMi43NiwzLjY4LTEsMy44NS0xLjM2LDQuODEsMi41NCwyLjcyLDEuMjIuNzcsMS4zMi4wNC44MS45MSw2Ljc1LS40NiwxLjI3WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im01MjAuNzIsMTMuMDVsNy4wMiw3LjYxaDBsLjE4LjE4LDcuODgsNy43NCw4LjUyLDcuOCw5LjI0LDcuNzUsMTAuMjQsNy43NCwyLjgxLDIuMDgsNy4yNSw1LjY2LDguMjksNy4xMi45OS42OCw2Ljk0LDQuMzUsNy43NSwyLjA0LDcuODQsMS44Ni43Ny40NSw2Ljc1LDMuNjMsNC4zMSwzLjE3LDExLjIzLDguNjEsNy40Myw2Ljg5LDguMDcsOS45NywzLjk0LDUuNDQsMy44LDUuOTgsMS4xMywxLjY3Ljk1LDIuMTgsMi43Nyw1LjY2LDEuNTQsNi4zNC40NSwxLjM2LjY4LDcuNjEtLjA0LDcuNTJ2LjE0bC0uNDYsNy4xNnYuNjNsLS40MSw2LjcxLS4wOSw3LjY2LjEzLDcuOTMuMjcsOC4wMi44NiwxNi4zNXYuMDlsMS4yMywxNi42Ny4yMiw3Ljg4LS41LDcuMjUtLjg2LDYuNzUtLjU5LjA1LjU5LjA5LS4xOCwxLjk1LTEsMTIuNDEtLjEzLDEtLjQ1LDYuMjEtLjE4LDEuNTQtLjM2LDcuNzkuMTMsNS44LjA5LDEuOTkuNDUsNi4zNC44Nyw4LjcsMS40LDkuMSwxLjU5LDYuOTgsMi40OSw3Ljc5LDIuOSw2LjI1Ljg2LDEuNTQsNS4zLDcuNzksMS42MywyLjA5LDUuMjUsNS43NSwyLjU4LDIuNTQsNS44NCw1LjIxLDEuOTUsMS41OCw1LjM5LDMuODUsMi40LDEuNjMsMTQuNzgsNy43Ljc3LjMyLjgyLjQ1LDYuODQsNC41OCwzLjM2LDMuMDgsNC4zNSw1LjIxLDEuNTQsMi40OSwxLjcyLDMuMjYsMi44MSw0LjQ5LDEuNjgsMy4zNSwxLjk1LDQuMy45MSwyLjksMS45LDQuOSwyLjk5LDkuNjksMS45LDUuNzYuNTUsMi40OWgwbDEuNDQsNS4yMS42LDQuNjdoMGwuNTksMy4xMy43Nyw1Ljg0LjMxLDEuOTUsMS40Niw3LjY1di4wOWwuMTguODYsMS4zNiw2Ljg0LjIzLDEuNDV2LjI3bC45MSw2LjAzLjY4LDcuNzUuMTQsMy4zNS4wOSw0LjM5LjQ5LDMuOTQuMjgsMy44NSwyLjA0LDYuMy40LDEuNTQsMS4xOCwyLjA5LDQuMzQsNS44YzEuMTgsMS4xNCwyLjM2LDIuMTcsMy40OSwzLjIybDYuNDQsNC42NiwzLjUzLDIuMTMsNS42MiwzLjI3LDMuNDQsMi4zNiw0LjI2LDMuMDQsNC45NCw0LjYyLDIuNzYsMy4xNywzLjE3LDQuNDksMy4yNiw2LjQ4LjczLDEuMzYsMi4yNyw3LjY2LjEzLDEuNzIuNDUsNS44NS0uMzIsMTUuNTQuMDksMi4wOC4wNSw1LjcxLjQxLDIuNTQuNSw1LjI1LDEuNzcsNC44LjkxLDMuMTcsMi4xMywyLjk5LDQuMjUsNC43NiwzLjU4LDMuMDQsOS40Nyw2LjQ0LDYuMDcsNC4xMiw3Ljc0LDUuNzYsNC44NSwzLjk4LDIuOTQsMi4zMSw3LjgsNi4yNSw3Ljc0LDUuMzQsMi44NiwxLjYzLDQuOTgsMi41OSw3Ljc1LDMuNjcsMy4wOCwxLjUsNC42NywyLjE3LDcuNzUsMy45OSw3Ljc1LDQuNTgsNy43NSw1LjM0LDMuNDgsMi45LDQuMjYsMy40LDcuNzQsOC4wN3YuNTktLjU5aDBsLjYzLS41OS02Ljg5LTcuMjUtLjkxLS44Ni00LjI1LTMuNDUtMy41NC0yLjktLjgxLS41OS02Ljk4LTQuODEtNy43NS00LjU3LTcuNzktNC4wNC00LjcxLTIuMTctMy4wOC0xLjQ5LTcuNzUtMy42My00LjkzLTIuNTgtMi43Ny0xLjU5LTcuNzQtNS4zNS0xMC43NC04LjU2LTQuODUtMy45NC03Ljc0LTUuODQtNy43NS01LjIxLTcuNzUtNS4zLTMuNDktMi45LTQuMTctNC42Ni0yLjE3LTMuMDgtLjgxLTIuODUtMS43Mi00LjgxLS41LTUuMTItLjM2LTIuNC0uMDktNS43NS0uMDktMi4wNC4xOC01LjYyLjE4LTkuOTMtLjYzLTcuNzktMi4zMS03Ljg0LS43OC0xLjQtMy4yMS02LjQ0LTMuMjYtNC41OC0yLjgxLTMuMjYtNC45OC00LjY3LTQuNC0zLjE3LTMuNDQtMi4zMS05LjExLTUuMzktNi4zNC00LjYyLTMuNC0zLjA0LTQuMjYtNS43MS0xLjE4LTIuMDgtLjM2LTEuNC0yLjA0LTYuMjYtLjI3LTMuNzFjLS4xOS0xLjM2LS4zMi0yLjYzLS41LTMuODVsLS4wOC00LjQ0LS4xNC0zLjM1LS42OC03LjgtMS4wOS03Ljc5LTEuNjMtNy44OC0xLjcyLTkuNTItLjcyLTUuODUtLjYzLTMuMjYtLjU5LTQuNDgtMS40NS01LjM1LS41NC0yLjQ1LTIuNDktNy44LTIuNDQtNy43NC0xLjktNC45LS44Ni0yLjktMS45OS00LjQ0LTEuNjgtMy4zNi0yLjg2LTQuNDktMS43Mi0zLjMxLTEuNTQtMi40OS00LjQ0LTUuMy0zLjQtMy4yMi02LjkzLTQuNjItLjkxLS41LS44Mi0uMzItMTQuNjMtNy43LTIuNDQtMS42M2MtMS43Ny0xLjI4LTMuNTgtMi41NC01LjM1LTMuNzdsLTEuOS0xLjU0LTUuOC01LjIxLTIuNTctMi41NC01LjE3LTUuNzEtMS42My0yLTUuMjYtNy43LS44MS0xLjU0LTIuODUtNi4xNy0yLjQ5LTcuNy0xLjU5LTYuOTMtMS4zNi04LjY1LS45LTkuMDYtLjU1LTguMjktLjEzLTUuNzEuMzYtNy43NC4xOC0xLjU5LjQ1LTYuMTcuMTQtLjk5LDEtMTIuNDIuMTgtMS45NHYtLjE5bC44Ni02LjcuNS03LjI5di0xLjU0bC0uMTgtNi40NC0xLjMyLTE2LjkuMDQtLjA1LS40NS03LjYxdi0uMDlsLS4wNC0uMzYtLjM2LTguMDYuMDUtLjA5LS4wNS0uMTMtLjIyLTYuODQtLjE4LTguODguMDktNy42MS40NS02LjctLjA1LS42My40Ni03LjExdi0uMjNoMHYtLjA1bC4wNC03LjUyLS4wNC0uMjh2LS4wNGwtLjY4LTcuNDgtLjQxLTEuMzYtMS41OS02LjQ4LTIuODEtNS42Ni0uOTEtMi4xMy0xLjIzLTEuODYtMy43Ni01Ljk4LTQuMDMtNS40OC0xLjgxLTIuMzEtNS45OC03LjQ0LTcuNzktNy4yNS0xLjEzLS45LTEwLjE5LTcuNzQtNC4yNy0zLjEzLTcuOTMtNC4zMS03LjcxLTEuODEtMS45OS0uNTktNS44LTEuNDktNy41Ny00LjgtOC4zNC03LjEyLTcuMjUtNS43MS0yLjg1LTIuMDgtMTAuMTUtNy43LTkuMjQtNy44LTguNzktNy45Ny03Ljc5LTcuNy02Ljk3LTcuNTItNi42Ni03Ljg0LTYuNzUtNy43LS42OC41OSw2LjgsNy43NSw2LjY2LDcuNzRaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTUwNy42Myw1LjNsNC41Nyw1LjUzLDguNjEsMTAuMDEsNy44NCw3Ljc0LDE0LjY4LDEzLjIzLDIuNzIsMi4zNiw1LjAzLDQuMDgsNC42NiwzLjYyLDEwLjMzLDcuOCwxNi4wOCwxMy4yMywzLjYzLDIuMjcsNC4zNSwyLjQsMi45LjU5LDEyLjY0LDIuODEsNy41Miw0LjE3LDcuNzksNi4wMyw3Ljc1LDYuMTIsNy43MSw3LjExLDEuMzYsMS43MmMxLjQ1LDEuODEsMi44NSwzLjY3LDQuMzEsNS40OGwxLjgxLDIuMjIsNS4wNyw3LjcsMy43Niw3Ljc5LjI3LDEsMi4xNyw2LjcxLjMyLDMuNDkuNzMsNC4wNHY0LjM5bC4yNywzLjM1LS4yNyw0LjQuMDQsMy40LS4yNyw0LjEzLS4wOSw3LjcuMTgsNy45My40MSwxMS4zNy44MSwxNS40NS44MSwxMy45Ni4xOSw3LjkzLS40MSw3LjI5LS4yMywxLjgxLS40OSw1LjE3LS40NiwyLjU0Yy0uMTMsMS41NC0uMjcsMi45OS0uMzYsNC40NGwtLjU5LDMuMzYtLjIyLDMuNTctLjY0LDQuMTctLjE4LDIuODEtLjYzLDQuOTQtLjM2LDcuNzl2MS45bC40OSw4LjI5LjYzLDUuMzkuMzIsMy4zLDEuMzIsOS4wNi41NCwzLjE3LDEuNjgsNy43OS45NSwzLjA4LDEuNDksNC43MSwxLjMyLDIuODFjLjcyLDEuNjcsMS40OSwzLjMxLDIuMjIsNC45OGwyLjc3LDQuNjYsMi4xMywzLjEyLDUuNzEsNy4wNy42OC43Nyw3LjkzLDcuNzUsNi45OCw1LjYyLDcuNzksNS40OCw3Ljk4LDQuNzEsNy41Miw0LjQ5LDMuOTQsMi45OSwzLjc2LDMuMjYsMy45LDQuNCwzLjgsNC44NSwxLjgxLDIuODUsMS44MSwzLjYyLDIuMzYsNC4wOCwxLjc3LDQuMzUsMS4zMSwzLjQuNjMsMS45NSwyLjA4LDUuOCwxLjcyLDUuNzYuNjgsMS45OSwyLjA0LDcuNjYuMTQuOTEsMS4zMiw2Ljg4LjMyLDIuNDkuODYsNS4zLjc2LDQuMTIsMi4yMiwxMS4zNywxLjA0LDcuMzkuNzMsOC4wNi4xOCw3Ljc0LjU5LDcuOTMuNSwxLjU0LDEuNjgsNi4yNSw0LjcxLDguMjUsNy42Niw2LjkzLjczLjQ5LDE0LjgyLDguOTgsNS4wMywzLjc2LDIuNzIsMS45Ljc3Ljc3LDYuOCw3Ljc5LDQuMyw3LjcsMS44Nyw1Ljk0LjU5LDEuNzIuNjMsNy41Ni0uNDUsMTUuNTQuMDUsNi44NC0uMDUuOS43Myw3Ljk4LjIyLjg2LDEuOTksNi45OCw1LjM5LDcuNy41LjQ5LDcuNzUsNi40NCwxLjM2Ljk1LDYuNDgsNC4yNiw1LjAzLDMuNDksMi42OCwxLjk1LDcuNjEsNS44LDkuODgsNy43NSw1Ljg1LDQuNDQsNC45NCwzLjM1LDIuODUsMS43NywzLjQsMS42Myw0LjM5LDIuMjcsNC41MywyLjEzLDMuMjYsMS4zNiw3Ljc1LDMuNTgsNy43LDMuOTgsMy4yMiwxLjk1LDQuNTMsMi42NywyLjgxLDEuOSw0Ljk0LDMuNjIsNC45Myw0LjA4LDIuODEsMi41NCw0Ljg5LDUuMTcsMi44NSwzLjY3aDBsLjY4LS41NC0yLjgtMy42My00Ljk4LTUuMjUtMi44Ni0yLjYyLTUuMDMtNC4xMy00Ljk0LTMuNTctMi44MS0xLjk1LTcuNzUtNC42Mi03Ljg0LTQuMDgtNy43NS0zLjU0LTMuMjItMS40LTQuNTMtMi4wOC00LjQ0LTIuMzEtMy4yNi0xLjU0LTIuODUtMS43Ny00Ljg5LTMuMzEtNS44NS00LjQ0LTEuOTUtMS41NC03Ljg4LTYuMjEtNy42NS01LjgtMi43Mi0xLjk1LTUuMDMtMy40OS03Ljc1LTUuMTctOC4xNS02Ljg0LS42OC0xLjA5LTQuNjctNi42Ni0yLjEzLTcuNy0uNjgtNy40NC4wNS0uOS0uMDUtNi44OC4wNS0uODYuNDEtMTQuNjgtLjY4LTcuOTMtLjU5LTEuNjgtMS44Ni02LjAzLTQuMzktNy44OC02LjgtNy43OS0uODYtLjgyLTIuODEtMS45OS01LjAzLTMuNzYtMTUuNDYtOS40My03Ljg4LTcuMTYtLjMyLS41OS00LjAzLTcuMjUtMS41OS02LjAzLS41NC0xLjYzLS40NS03LjA2LS4yOC04LjI5LS42My03LjgtMS4xMy03Ljc5LTIuMTgtMTEuMzN2LS4wNGwtLjA1LS4xOC0uNzctMy45NC0uODYtNS4yNS0uMzItMi40OS0xLjQxLTcuNzQtMi4wOC03Ljg0LS42OC0xLjk5LTEuNzctNS43NS0yLjA4LTUuOC0uNTktMS45NS0xLjM2LTMuNDktMS43Ny00LjMtMi4zNS00LjE3LTEuODEtMy42My0xLjg2LTIuOTQtMy44OS00Ljg5LTMuOS00LjQ0LTMuODUtMy4zNi0zLjk5LTMuMDQtNy45My00LjgtNy42MS00LjM5LTcuNzUtNS40NC02LjkzLTUuNjItNy44OC03LjctNi4yNi03LjctMi4xMi0zLjA4LTIuNzItNC41Ny0zLjQ5LTcuNzUtMS41NC00LjY3LS45MS0zLjA0LTEuNjgtNy43NC0uNTQtMy4xMy0xLjI3LTkuMDEtLjMxLTMuMzUtLjYzLTUuMzQtLjUtOC4yNS0uMDUtMS44MS4zNi03Ljc0LjY0LTQuOTQuMTgtMi44MS42My00LjEyLjIzLTMuNTguNTktMy4zNS4zMi00LjM5LjUtMi41NC40OS01LjI2LjIzLTEuNzYuNDEtNy40My0uMTktNy45Ny0uMzYtNi4xMnYtLjA5bC0uMDUtLjE4LS4wNS0xLjgxLS4zNi01Ljcxdi0uMjNsLS40MS03LjUydi0uMjNsLS4zNi03LjYxLS40NS0xMS4yOC0uMTQtNy44OC4wNC03LjY2LjI3LTQuMTItLjA1LTMuNDQuMjctNC4zLS4yNy0zLjQ1LjA1LTQuMzQtLjc3LTQuMTctLjMyLTMuNjMtMi4xNy02LjctLjMyLTEuMTMtMy44MS03Ljg0LTUuMTYtNy43OS03LjQ4LTkuNDctNy43OS03LjI1LTguMzgtNi42Ni03LjE1LTUuNDgtNy45OC00LjQ0LTE1LjU0LTMuNC00LjAzLTIuMjItMy40OS0yLjE3LTE2LjEzLTEzLjMyLTEwLjMzLTcuNzQtNC42Mi0zLjU4LTUuMTItNC4xMi0yLjYzLTIuMzEtMTQuNjQtMTMuMTktNy43OS03Ljc0LTYuNy03Ljc1LTYuNDgtNy43OS0zLjIyLTMuNjMtMy44NS00LjEzLS42My41OSwzLjg1LDQuMTMsMy4xNywzLjYzWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im01MDEuNDIsNS4zbDIuOTksMy40NCwzLjU4LDQuMyw0LjIxLDUuMywyLjEzLDIuNDUsNS42Nyw2LjE2LDEuNjMsMS42Myw2LjEyLDUuMywyLjcyLDIuNDUsNS4wNyw0LjM1LDMuNzYsMy40NSw0LjA0LDMuNDksNy43NCw2LjM0LDguOTcsNi44NCw2LjU3LDUuMTIsMTAuOTMsOS4yNCw0LjYyLDMuNTMsNy45OCw0LjMxLDkuNTEsMS43Niw2LjAzLDEuMjgsNy41Miw0LjMsMTUuNTQsMTIuNDIsNy43MSw3LjIsMy4xMiwzLjg5LDUuMzksNy42Ni44MSwxLjYzLDMuMTcsNi4wMiwyLjY3LDcuOCwxLjM2LDcuNTd2MS4xN2wuNTQsNi41Ny0uMDksMS41OS4wOSw2LjIxLS4wOSwxLjU0LS4wNSw3Ljc1LjE4LDcuOTMuMjcsOC4wNiwxLjYzLDMyLjYyLjIzLDcuOTMtLjEzLDMuOTktLjE5LDMuNC0uNTksNC4zLS4yMywyLjYzLS45NSw1LjEyLS4xNCwxLjU0LTEuMDQsNi4yLTEuMDQsNy44LS44MSw3Ljc1LS4zNyw3Ljc5LjQxLDcuOC44Niw3Ljc5LDEuMTMsOC40NywxLjIyLDcuMDcsMS43Myw3Ljc5LDIuMzEsNy43NCwxLjgxLDQuMzksMS41NCwzLjQ1LDIuMjIsMy43NiwyLjMyLDQuMDMsMS43NiwyLjQ1LDQuMjYsNS4zNCwzLjUzLDMuODUsMy45OCwzLjk1LDMuODEsMy4zLDcuNzksNi4yNSw3Ljc5LDUuNTMsNy43NSw0Ljg1LDUuMDMsMy4zNiwyLjY4LDEuOTksNi4zNCw1Ljc1LDEuMzYsMS4zMiw1LjMsNi4zNCwyLjQ0LDMuNTQsMi4zNiw0LjEyLDEuNzIsNC4wOCwxLjY4LDMuNjcsMi44NSw3Ljc1LjM2LDEuMjIsMi4yMiw2LjUyLDEuMjIsNC42Ny45MSwzLjAzLDEuMjcsNi44OCwxLjYzLDkuMzgsMi45LDE0Ljc3LDEuMTMsNy43LjYzLDcuNzUuMDksNS40OC0uMDQsMi4yNy4zNiw1Ljh2MS45NWwxLjg2LDcuOTMuMTMuMzYsMy42Myw3LjQzLDQuMjIsNS4wMywzLjE3LDIuODUsNC42NiwzLjE3LDE1LjUsOS4yNCw0LjEyLDMuMDgsMy41OCwzLjEzLDQuMDMsNC41MywzLjcxLDUuNjIsMS4xOCwyLjE3LjQ5LDEuNTljLjczLDIsMS40MSwzLjk5LDIuMTMsNS45NHYuMTRsLjM2LDQuMDguMzIsMy40OS0uMzYsMTEuOTYtLjIyLDMuNTguMDQsMy45NS0uMTgsMy44LjM2LDQuMTcuMDQsMy42MywxLjQ1LDUuNjYuMzYsMi4yNywxLjc3LDMuMjIsMi45OSw0LjU4LDQuODUsNC44NSwzLjcxLDMuMDMsNC4xMiwyLjk0LDcuMzQsNC44LDguMTYsNS45MywxNS41NCwxMi4wMSw3LjgsNS42Nyw3Ljc5LDQuNzYsNS42MSwyLjcyLDIuMjIuOTUsNy43NSwzLjIyLDcuODQsMy42Miw3LjYxLDMuODUsNy43LDQuNzEsNy44LDUuNzUsMS4yNywxLjA1LDYuNDgsNS45MywxLjY4LDEuNzcsNS45OCw3Ljc1LjA0LjA0di0uMDRsLjc4LS4zMi0uMTktLjI3LTUuODktNy42Ni0xLjc2LTEuODYtNi40OC01Ljk4LTEuMzEtMS4wOS03Ljc5LTUuNzEtMS41LTEtNi4zLTMuOC03Ljc5LTMuOTQtNy43OS0zLjU4LTkuOTMtNC4xNy01LjUzLTIuNjctNy43NC00Ljc2LTcuOC01LjYyLTE1LjU0LTEyLjAxLTguMjEtNS45My03LjMzLTQuOC00LjA4LTIuOTUtMy41OC0yLjk1LTQuODUtNC44LTIuODUtNC40NC0xLjgxLTMuMjctLjI3LTEuOS0xLjQ2LTUuNzEtLjA1LTMuNDUtLjM2LTQuMTIuMTktMy44LS4wNS0zLjk4LjI3LTMuNTguMzYtMTEuOTctLjM2LTMuNTgtLjM2LTQuMjEtMi4xOC02LjE2LS40OS0xLjY4LTEuMjItMi4yMi0zLjcyLTUuNjYtNC4xMi00LjYyLTMuNjctMy4yMi00LjE3LTMuMTItMTUuNS05LjI1LTQuNTctMy4xMy0zLjA5LTIuNzItNC4yMS01LjAzLTMuNjctNy42Ni41NC0uMTgtLjYuMDQtMS43Mi03LjUydi0xLjg2bC0uMzYtNS43NXYtMi4zMWwtLjA5LTUuNTdoMGwtLjYzLTcuNy0xLjEzLTcuNzktMi45LTE0LjgyLTEuNDUtOC40My0xLjQ1LTcuNzktLjktMy4wOC0xLjI3LTQuNzEtMy40NC0xMC4xNS0xLjk1LTUuMzktMS43Ny0zLjcyLTEuNjItNC4wMy0yLjQ1LTQuMjYtMi40NS0zLjU4LTUuMzQtNi40My0xLjQ1LTEuNDEtNi4zOS01Ljc1LTIuNzItMi4wNC01LjE3LTMuNDUtNy42NS00Ljc2LTcuNzUtNS41My03Ljc0LTYuMi0zLjc2LTMuMjYtMy45OC0zLjk0LTMuNDktMy44MS00LjIxLTUuMjUtMS43My0yLjQtMi4zMS00LjAzLTIuMTctMy42Ny0xLjU5LTMuNTgtMS43Mi00LjEyLS43My0yLjU0LTEuNTktNS4yMS0xLjcyLTcuNzQtMS4yMy03LjAyLS43Mi01LjA4LjA0LS4wOS0uMDQtLjEzLS40MS0zLjE3LS45NS05LjAxdi0uMjhsLS4zMi02LjEyLjA5LTEuNjMuMjctNi4xMi4xMy0xLjE4Ljc3LTcuMDIuNDEtMy41NC40OS0zLjMsMS4wOS02LjY2LjA5LTEuNTQuOTUtNS4xMi4yNy0yLjYzLjU5LTQuMy4yMy0zLjUzLjA4LTMuOTktLjE4LTcuOTgtLjIyLTMuNDh2LS4yN2wtLjE5LTQuNC0uMjItMy4xMi4wNS0uMDUtLjA1LS4xOC0uMzYtNy41MnYtLjIzbC0xLTIzLjExLS4xNC02LjIuMDQtMS41NHYtNi4xNmwuMDktMS41NC0uMDktNi4yMS4wOS0xLjU0LS41LTYuNjZ2LTEuMTNsLTEuNDUtNy44NC0yLjYyLTcuODQtNC4wNC03Ljc5LS44Ni0xLjI3LTQuNjctNi41Mi0zLjEyLTMuOTQtNC4xNy0zLjloMGwtMy42Mi0zLjQtMTUuNTQtMTIuNDYtNy45OC00LjUzLTcuNzUtMS41OS03Ljc5LTEuNDUtNy41Mi00LjAzLTQuNjItMy41OC0xMC45Ni05LjI0Yy0yLjE3LTEuNzItNC4zOS0zLjQtNi41Ny01LjEybC0xLjE4LS45MS03Ljc1LTUuOTQtNy43NC02LjI5LTMuOTktMy40OS0zLjgxLTMuNDQtNS4wNy00LjM1LTIuNjctMi40NC02LjEyLTUuMjYtMS42My0xLjYzLTUuNjYtNi4xMi0yLjA4LTIuNDUtNC4yMS01LjMtMy41OC00LjMxLTMuMDMtMy40OC00Ljc2LTUuMDMtMi44LTIuNzItLjYuNjQsMi43NywyLjY3LDQuNzUsNS4wNFoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtOTI0LjQxLDg0MS40MWwtLjUtLjE4LTQuMjYtNS4zNC0xLjQtMS41OS41OS02LjE2di0uMjdoMHYtLjA5bC0uMTktLjY4LDEuMzYtNS4yNS4wNS0yLjQxLDEuMDQtNC4zLjM2LTMuMzEsMS4xMy03Ljg4LS4wNC0zLjEzLjQ5LTQuNTd2LS4zN2wtLjY4LTMuMy4xOC00LjM1LTMuNDUtNy4wMi0uMTgtMS4yMi0uMTMtLjE0di0uMThsLTEuNTQtMS41NC0uMjItLjA1LS4xNC0uMDktMS4zMi0uMTgtNi40OC0yLjg1LTQuOC0uNjgtMy4wOS0uODYtNy4wNi0xLjQ5LTIuMTctLjY0LTUuOTQtMi4zMS02Ljc1LTUuMTItLjM2LS40NS0zLjY3LTYuNjYtMS45MS01LjcxLS45MS0yLjA4LTEuMjItMi45NS0yLjM2LTQuODktNS43NS04LjA3LTcuOTctNi40My0yLjY4LTEuNzItNS4xNy0yLjk0LTcuMzMtNC4zNWMtLjE0LS4wOS0uMjgtLjE0LS4zNy0uMjNsLTcuNy01LjM1LTMuMjYtMi40OS00LjIyLTQuOTgtMS44Ni0yLjQtMS4xMy0yLjk0LTIuMjItNC40NC0yLjQ1LTcuOTgtMy4wOC03LjY1LTQuOTgtNy45OC02LjgtNy45Ny04LjgzLTcuMTYtMS4zNi0uOTEtNi42Mi00LjAzLTcuOTctMy45LTcuNy0zLjI2LTUuNDgtMi4xMy02LjMtMi4yNy0zLjQ5LTEuNzItNC44OS0zLjA0LTIuODUtMS40OS0xLjktMS4yNy01LjU3LTUuMTItMi4yNy0yLjQ0LTYuNjItNy43OS02Ljc1LTYuMy0yLjMxLTEuNzItNS43NS0zLjc2LTcuNjEtMy45OC03LjY1LTUuNjctMi0xLjg2LTIuMzEtNC4zOS0xLjg2LTIuOTktMS4xMy0yLjU0LTEuODYtNC45OC0uMjctMi4wNC0xLjIyLTUuMzQuMzEtMi45LS4wNS00LjY2LjE5LTMuMDgtLjI4LTQuODUtLjk1LTQuMzl2LS4wNWwtMS4wNC0zLjY3LTIuNjgtNi41Mi0uNzItMS41NC00LjcxLTcuODktMi40OS0zLjcxLTMuNDQtNC4yNi00LjQ0LTQuNTctNC4wMy0zLjM2LTMuOTQtMi44NS04LjAyLTQuNTMtNy44NC0zLjU0LTUuMDMtMi4wNC02Ljg5LTIuNzItMy40OS0xLjYzLTMuNTMtMS44Ni00LjEyLTIuMTMtMy40OS0yLjA0LTQuMzUtMi43Ni03Ljg0LTQuMjYtMi0uOS01Ljk4LTIuMTMtMTYuNjgtNS42Ni02LjU3LTIuMDQtMy4zMS0xLjIyLTQuNC0xLjQ1LTcuMjUtMi45NS03Ljk3LTQuNjgtMy41My0yLjY3LTIuOTUtNy4wNy4wNS02LjY2aDB2LS41OWwuNTQtNi40OC4xNC0xLjA0LDEuMzYtNC43MiwxLjA5LTIuNTgsMS4zNi0yLDIuMjctMi40LDEuMzEtMS42OCwxLjQxLTEuNCwyLjA4LTIuOTksMi44NS0zLjA0LjgyLTEuMDguOTEtMSwuMDQtLjIzLjA5LS4xNC4xOC02LjMuNDEtMS45OS0uMTMtLjE5LjA0LS4yNy0yLjE3LTMuMTMtNS4zOS01LjI1LTYuMi0zLjQ5LTQuMzktMi4zMS0zLjI2LTIuMDQtNC4zNS0zLjE3LTUuNTMtNC40OC0yLTIuNzctMy42My00LjY2LTIuNzYtNy4zNC0xLjA0LTEwLjQyLS44Ni01LjI1LTQuODUtOC4zNC0yLjU4LTEuNzYtNi4zOS01Ljk4LTEuNTQtLjg2LTIuNjMtMS44Ni01LjAzLTMuNC0yLjEzLTEuNzItMTMuNzMtNy41Ny0uODYtLjM2LTcuMi0yLjE3LTcuODUtMS43Ny0xNS40OS0yLjk1LTcuNjItMS43Mi03LjctMi4xMy00LjY3LTEuNjgtMy4wMy0uOTUtNS4wNy0yLjA5LTIuNDUtMS40OS03LjcxLTUuMDctMS40LTEuMDUtNi4zLTcuMi0xLjE4LTcuMDcsMS4wNC04LjI1LDEtNi44OCwyLjY3LTE1LjYzLjA1LS4yN2gwdi0uMDlsLTEuNS03LjkzLS4xOC0uNTQtNy4xMS04LjAyLTguNjUtNy44LTEuNjMtMS42My03Ljc0LTYuNDQtOC42Ni03LjQzLTMuODUtNy4yOS0zLjI2LTE0LjkxLDEuMzYtNi44NCwzLjI2LTIuODUsMy4xMy0yLjQ5LDIuOTQtMS45LDMuMTMtMS43MiwxLjY3LTEuMDQsMy4yMi0xLjg2LDQuODUtMy4xNywzLjcxLTQuMyw3LjYyLTcuODQsMy40OC0zLjQsNC43MS0zLjc2LDMuODEtNC4wOC0uMjgtLjI4LjE0LS4yNy40MS4yNywzLjEzLTQuNTcsMS44Ni0zLjQuODEtMiwyLjA0LTQuMTIuNzMtMS43NywxLjEzLTYuMDcuNzItMi4wMy0uMDQtLjE5LjA0LS4xMy0xLjQ5LTYuOTMtLjIyLTEuNDYtMS4wOS0xLjQ5LTUuMTItNi41Ny0uMjMtLjE4Yy0uODEtLjY4LTEuNTgtMS4yNy0yLjM1LTEuODFsLTE3LjgxLTEzLjY4LTUuNzEtNS40NC0yLjU5LTIuMjYtNS4zOS03LjQ4LjA1LS4xNC0xLjQxLTYuNjYuMzYtLjk1LDEuNTktMy4yNy44Mi0yLjA0LjQxLS42OCwzLTIuNjcsMi45OC0yLjA4LDEuNC0xLjI3LDEuNzMtMS4zMiw0LjYyLTIuODZjMS0uNzIsMS45NS0xLjQsMi45NS0yLjE3bDQuMzUtMy40NSwzLjcxLTQuNDgsMS44Ni0zLjIyLDEuMDQtMi4yMiwxLjU0LTUuODUuMTMtLjk1LS4xOC03LjI1LS4yMy0xLjMyLTEuNjctNi44LTMuNTgtOC4wNi00Ljc2LTguNzktMi44NSwxLjQ5LDQuNzEsOC42NSwzLjM1LDcuNTIsMS44Niw3LjQzLjE0LDYuODh2LjQxbC0xLjQxLDUuMy0uODYsMS45OS0xLjU5LDIuNzYtMy4zMSw0LjAzLTQuMTYsMy4zNS0yLjc2LDIuMDQtNC42MywyLjg2LTEuOTUsMS40OS0xLjMxLDEuMTMtMi45OSwyLjA4LTMuOCwzLjQtLjU1LDEuMDktLjkxLDIuMTctMS41OSwzLjMtLjczLDEuODEuMDUuMTktLjA5LjE4LDEuODEsOC41Mi4xOC4xOGMuMTguMjMuMzYuNDUuNDkuNTlsNS4xMiw3LjExLDIuODUsMi41NCw1LjY2LDUuNDQsMjAuMjUsMTUuNTQsNC44OSw2LjI1LjY4LjkxLDEuNDUsNy4wNy0uNDksMS40MS0xLjEzLDYuMDMtLjU5LDEuNC0yLjA0LDQuMTctLjczLDEuODYtMS42OCwzLjA4LTMuMTIsNC41My0zLjQ5LDMuNzYtNC41NywzLjY3LTMuODUsMy42Mi03LjY2LDcuOTMtMy41OCw0LjEyLTQuMzEsMi44MS0zLjIxLDEuODYtMS42OCwxLjA0LTMuMDgsMS43Ny0zLjEzLDEuOTUtMy4zNSwyLjY4LTQuMTcsMy43MS0uMjcuODYtMS40MSw3LjM5di40MWwzLjQ1LDE1LjgxLDQuNDgsOC4zOCw5LjI0LDcuODhjMi40OSwyLjA4LDQuOTgsNC4xNyw3LjM4LDYuMTJsMS42MywxLjU4LDguNDcsNy43MSw2LjYyLDcuMzgsMS4zMSw3LjAyLTIuNjMsMTUuNTQtMS4xMyw3LjUyLS43Miw2LjE2LS4yOCwxLjU0di4zNmwxLjQ1LDguMzgsNy4wMiw4LjA2LDEuNzcsMS4zNiw3Ljg0LDUuMTcsMi41NCwxLjU0LDUuNTcsMi4zNiwzLjEzLjk1LDQuNjYsMS42Nyw3Ljg0LDIuMjIsNy45OCwxLjgxLDE1LjM1LDIuOSw3LjY2LDEuNzIsNi43NSwxLjk5LjY4LjMyLDEzLjI4LDcuMjUsMi4xMywxLjY4LDUuMTYsMy40OSwyLjU4LDEuODYsMS40LjgxLDYuMjEsNS44MSwyLjQ5LDEuODEsNC4xMiw3LjIuNjgsNC40LDEuMDgsMTAuNiwzLjA4LDguMjksMy44NSw0Ljk5LDIuMjIsMy4wOCw1Ljg5LDQuOCw0LjUzLDMuMzEsMy40NCwyLjEyLDQuNDksMi40MSw1Ljg1LDMuMjIsNC43MSw0LjYyLDEuNDksMi4xMy0uMTguOTEtLjE5LDUuODktMS4wNCwxLjMxLTIuOSwzLjA0LTEuOTksMi45LTEuNDEsMS40LTEuNDUsMS44MS0yLjIyLDIuMzYtMS42MywyLjQtMS40MSwzLjEzLTEuNDksNS4wNy0uMjMsMS41NC0uNTQsNy4yNXYuMDlsLS4wOSw3LjIsMy42Nyw4Ljc1LDQuMTIsMy4wOCw4LjM0LDQuOTMsNy42NSwzLjEzLDQuNDQsMS40OSwzLjM1LDEuMjIsNy43NSwyLjQ1LDE1LjQ5LDUuMjEsNS43NiwyLjA4LDEuNzIuNzcsNy43MSw0LjE3LDQuMzUsMi43MiwzLjU3LDIuMTMsNC4yMiwyLjE4LDMuNTgsMS44NiwzLjU4LDEuNzIsMTEuOTYsNC43Niw3LjY2LDMuNDUsNy42Niw0LjM1LDMuOCwyLjcyLDMuNzYsMy4wOCw0LjI2LDQuNDQsMy4yNiwzLjk5LDIuNCwzLjU4LDQuNTcsNy42MS42OCwxLjQ1LDIuNDksNi4xMiwxLDMuNDQuOTEsMy45OS4yMiw0LjU3LS4xMywzLjAzLjA0LDQuNDktLjM2LDMuMDh2LjQxbDEuMjcsNS41My4zMiwyLjIyLDIsNS40OCwxLjIyLDIuNzIsMS45NSwzLjE3LDIuNjcsNC45OCwyLjQxLDIuMTcsNy44NCw1LjgsNy44LDQuMTIsNS41NywzLjYzLDIuMDQsMS40OSw2LjQ4LDYuMDcsNi43MSw3Ljg0LDIuMzEsMi40NSw1LjY2LDUuMywyLjMxLDEuNTksMi45OSwxLjU0LDQuOTQsMy4wOCwzLjY3LDEuODEsNi41NywyLjQsNS4zOSwyLjA5LDcuNywzLjI3LDcuNTYsMy43MSw2LjQ4LDMuOTQsMS4xMy43Nyw4LjQzLDYuNzUsNi40OSw3LjU2LDQuNzYsNy41MiwzLjA4LDcuNjYsMi4zMSw3LjY2LDIuMzEsNC42MiwxLjMxLDMuMzUsMi4xNywyLjg2LDQuNDQsNS4yNiwzLjYyLDIuODEsNy44OCw1LjQ4LDcuNzksNC41OCw1LjEyLDIuOTQsMi41LDEuNTksNy41Miw2LjAyLDUuMjEsNy4zLDIuMjcsNC43MSwxLjIyLDIuOTQuODIsMS45NSwxLjk1LDUuNjYsMy44NSw3LjIxLjgxLDEuMDQsNy41Miw1LjcxLDYuNDgsMi41OSwyLjQ0LjY4LDcuMDMsMS40OSwzLjAzLjkxLDQuOC42Myw2LjQ4LDIuODUuOTUuMTguMjcuMjcuMTQuODYsMy4yNiw2LjQ4LS4xOCw0LjEyLjY4LDMuMzYtLjQ1LDQuMzkuMDQsMy4wOC0xLjA4LDcuNzUtLjM2LDMuMDMtMS4wNSw0LjUzLS4wNCwyLjM2LTEuNDEsNS4zOS0uMDUuMzd2LjE4bC4xOS44Ni0uNjgsNy4wMi4xOC4yMnYuMjNsMi4wOSwyLjM2LDQuNDgsNS42Ni40MS4zNiwxLjY4LjU5LjU5LjA5LDcuNzQsMi4yMS4zMi0uMzEuMzItLjE0LjcyLTIuNDQtOC40Mi0yLjQ0LS42NC0uMDlaIiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTMiCiAgICAgICAgcG9pbnRzPSI0OTUuOCA3LjY2IDUwMS4xOSAxMy43OCA1MTEuMzQgMjYuMzIgNTE0LjIgMjkuNCA1MTkuMjIgMzQuMjEgNTIyLjg1IDM3LjI5IDUyNy4wMiA0MC41MSA1MzIuMjcgNDUuMDQgNTM0Ljc3IDQ3LjAzIDU0Mi41NiA1My45NiA1NTAuNzYgNjAuNTggNTYwLjczIDY4LjI4IDU2NS44NSA3Mi41MyA1NzMuNjggNzkuMjkgNTc5LjY3IDgzLjg2IDU4MS41MyA4NS4xOCA1ODkuNjQgODkuMDMgNTk1Ljg5IDkwLjEyIDYwNS4yMiA5Mi4wNiA2MTIuNTIgOTYuMzcgNjI3LjkyIDEwOC44NyA2MzQuMDggMTE0LjY3IDYzNS41MyAxMTYuMTcgNjM5LjkzIDEyMi4xNSA2NDMuMTQgMTI3LjcyIDY0NC4xNCAxMjkuNjcgNjQ0LjczIDEzMS4zIDY0Ni45OSAxMzcuMTkgNjQ3Ljk5IDE0Mi4xNyA2NDguNjcgMTQ0LjggNjQ5LjIyIDE1MS4wMSA2NDkuNCAxNTIuNDIgNjQ5LjUzIDE1OC45OSA2NDkuNjIgMTYwLjA3IDY0OS41NyAxNjYuNzggNjQ5LjgxIDE3NC43NSA2NTAuMTYgMTgyLjg2IDY1MC45MyAxOTguOTkgNjUwLjkzIDE5OS4wOCA2NTEuNjEgMjE0LjQ0IDY1MS44OSAyMjMuMjcgNjUxLjY2IDIzMC42NiA2NTAuNzUgMjM3LjM3IDY0OS43MSAyNDMuOTggNjQ5LjQ0IDI0NS4xNiA2NDguNjcgMjUwLjczIDY0OC4yMiAyNTIuOTUgNjQ3LjY3IDI1Ny41NyA2NDcuMTMgMjYwLjc1IDY0Ni43NyAyNjQuNDYgNjQ2LjE4IDI2OC41OCA2NDUuNzcgMjc2LjM4IDY0NS43NyAyNzYuNDIgNjQ2LjIyIDI4NC4zNSA2NDYuNjMgMjg4LjA2IDY0OC4yMiAyOTkuOTQgNjQ5LjUzIDMwNy43NyA2NTEuMjUgMzE1LjY2IDY1My41MiAzMjMuNDEgNjU1LjQ3IDMyOC4xNiA2NTYuNjQgMzMxLjI5IDY1OC43NyAzMzUuMzIgNjYxIDMzOS4yNiA2NjYuNjYgMzQ3LjE5IDY3NC41IDM1NS41NyA2ODMuMDYgMzYzLjAxIDY5MC4yMiAzNjguNjIgNjk4LjAxIDM3NC4yOCA3MDUuNzEgMzc5LjQxIDcwOS43IDM4Mi41MyA3MTMuMzcgMzg1LjI1IDcyMS4wMyAzOTIuNTkgNzIxLjg5IDM5My42MyA3MjQuMTUgMzk2Ljk0IDcyNy4zMiA0MDEuMzMgNzI4LjU1IDQwMy41MSA3MzEuMDQgNDA4LjgxIDczMi41MyA0MTIuODkgNzMzLjk4IDQxNi41NiA3MzYuOCA0MjQuOCA3MzguODggNDMxLjgyIDczOS40NiA0MzUuMTggNzQwLjQyIDQzOS41MyA3NDEuNzggNDQ3LjM3IDc0NC44NSA0NjIuNzggNzQ1Ljk5IDQ3MC40MyA3NDYuNjMgNDc4LjA5IDc0Ni42NyA0ODAuNzYgNzQ2LjU4IDQ4NS45MiA3NDYuNzYgNDg4LjY0IDc0Ni43NiA0OTMuNTggNzQ3LjYyIDQ5Ny40OCA3NDguMjYgNTAxLjY5IDc1MS41NiA1MDkuOCA3NTcuODYgNTE3Ljg3IDc2MC4wMyA1MTkuNzIgNzY0LjY2IDUyMi42NiA3NjcuOTYgNTI0LjkzIDc2OS44MiA1MjYuMDIgNzc1LjcxIDUyOS4xOSA3ODMuMzMgNTMzLjkxIDc5MC45NCA1NDAuNjEgNzkxLjM0IDU0MS4wNiA3OTYuNiA1NDguNzIgNzk4LjM2IDU1My4xNiA3OTkuNDEgNTU2LjA2IDgwMC4wOSA1NjMuNCA3OTkuODIgNTcxLjA2IDc5OS4zNiA1NzguOSA3OTkuMzYgNTc5Ljg5IDc5OS4wNCA1ODYuNjkgNzk5LjE0IDU4Ny41IDc5OS4yMyA1OTQuNDQgNzk5LjU0IDU5NS44NCA4MDAuNTggNjAyLjc3IDgwMy40IDYwNy43NiA4MDQuNzEgNjEwLjcgODA2LjQ4IDYxMi44OCA4MTIuNDYgNjE4LjgxIDgxNC41IDYyMC40NSA4MTguODkgNjIzLjM5IDgyMi4yOSA2MjUuNzkgODI5Ljk5IDYzMS4xMyA4MzQuNjEgNjM0LjQ0IDgzNy43NCA2MzYuOTMgODQ1LjUzIDY0Mi44NyA4NDcuNzUgNjQ0LjUgODU1LjA5IDY0OS45OCA4NjEuMDcgNjU0LjIgODY3LjY5IDY1Ny44NyA4NjkuMDkgNjU4LjU1IDg3MC4xMyA2NTguOTYgODc2LjkzIDY2MS44NSA4ODMuMzcgNjY0LjM5IDg5Mi4zMyA2NjguMzMgODk5Ljk0IDY3Mi4xOCA5MDcuNiA2NzcuMDMgOTEyLjg2IDY4MC45MyA5MTUuMjYgNjgyLjkyIDkyMS4zNyA2ODguNTQgOTIyLjg4IDY5MC4yNiA5MjcuMzYgNjk2LjAyIDkzMC4zNSA3MDEuODIgOTMwLjM1IDcwMi4wOCA5MzAuNDkgNzAyLjA4IDkzMS4wMyA3MDMuMDggOTMzLjg0IDcwMS42MyA5MzAuMjEgNjk0LjUyIDkyNS4zNyA2ODguMjcgOTIzLjc4IDY4Ni40NSA5MTcuMzkgNjgwLjUyIDkxNC44NSA2NzguNDggOTA5LjQ2IDY3NC40NSA5MDEuNTggNjY5LjQ2IDg5My43NCA2NjUuNDggODg0LjU5IDY2MS40NSA4NzguMiA2NTguOTEgODcxLjM2IDY1Ni4wMSA4NzAuNDUgNjU1LjY5IDg2OS4xOCA2NTUuMDYgODYyLjg4IDY1MS41NyA4NTYuOTUgNjQ3LjQ1IDgzOS42OCA2MzQuNDQgODM2LjU3IDYzMS45MSA4MzEuODUgNjI4LjUxIDgyNC4xIDYyMy4yMSA4MjAuNzEgNjIwLjc2IDgxNi40NCA2MTcuOSA4MTQuNjggNjE2LjU1IDgwOC44OCA2MTAuNzUgODA3LjQyIDYwOS4wMyA4MDYuMjkgNjA2LjQ0IDgwMy42MiA2MDEuNTUgODAyLjY3IDU5NS4zNCA4MDIuNCA1OTQuMTcgODAyLjMxIDU4Ny4zNyA4MDIuMjYgNTg2LjczIDgwMi41OCA1ODAuMDMgODAyLjU0IDU3OS4wMyA4MDIuOTUgNTcyLjY5IDgwMy4yNiA1NjMuNDQgODAzLjMxIDU2My4zNiA4MDIuNTQgNTU1LjUyIDgwMS4zNiA1NTIuMDcgNzk5LjQ2IDU0Ny4yOCA3OTMuOTcgNTM5LjI1IDc5My4yOSA1MzguNDggNzg1LjQxIDUzMS41IDc3Ny4zNSA1MjYuNDcgNzcxLjM2IDUyMy4yNiA3NjkuNzQgNTIyLjI2IDc2Ni40MiA1MjAuMDQgNzYyLjAzIDUxNy4yMyA3NjAuMjIgNTE1LjY5IDc1NC40MiA1MDguMzEgNzUxLjM0IDUwMC44MyA3NTAuNzkgNDk2Ljk4IDc0OS45OCA0OTMuMzYgNzQ5LjkzIDQ4OC42IDc0OS44IDQ4NS44OCA3NDkuODQgNDgwLjgxIDc0OS44IDQ3Ny45OSA3NDkuMTYgNDcwLjExIDc0OC4wMyA0NjIuMjcgNzQ0Ljk1IDQ0NyA3NDQuOTUgNDQ2Ljg3IDc0My41OSA0MzguOTkgNzQyLjYzIDQzNC41OSA3NDEuOTYgNDMxLjE1IDczOS42OSA0MjMuMzEgNzM3LjAyIDQxNS40NyA3MzUuNDggNDExLjc2IDczMy45OCA0MDcuNjQgNzMxLjQgNDAyLjEgNzMwLjE0IDM5OS44IDcyNi43OCAzOTUuMTIgNzI0LjUxIDM5MS43OCA3MjMuNDMgMzkwLjU1IDcxNS41NCAzODIuODkgNzExLjY1IDM3OS45OSA3MDcuNjEgMzc2Ljg3IDY5OS44NyAzNzEuNzEgNjkyLjE3IDM2Ni4wOCA2ODUuMSAzNjAuNTYgNjc2Ljc2IDM1My4zNiA2NjkuMDEgMzQ0Ljk3IDY2My43NiAzMzcuNjggNjYxLjQ5IDMzMy42NSA2NTkuNjQgMzMwLjE2IDY1OC40NSAzMjcuMDMgNjU2LjU1IDMyMi41IDY1NC41NiAzMTUuNTIgNjUyLjY2IDMwNy4yMyA2NTEuMzQgMjk5LjUzIDY0OS44MSAyODcuNyA2NDkuNDQgMjg0LjEyIDY0OS4xMiAyNzkuNTUgNjQ5LjE3IDI3OS40MSA2NDguOTkgMjc2LjUxIDY0OS4zNSAyNjguOTUgNjQ5LjkgMjY0Ljg3IDY1MC4yNiAyNjEuMjQgNjUwLjggMjU4LjA3IDY1MS4zOSAyNTMuNTQgNjUxLjc5IDI1MS4zMiA2NTIuNTcgMjQ1Ljc5IDY1Mi44NCAyNDQuNjYgNjUzLjkzIDIzNy44MiA2NTQuODMgMjMwLjk4IDY1NS4xMSAyMjMuMzIgNjU0Ljg4IDIxNS4zIDY1NC4xNSAxOTkuMDQgNjU0LjE1IDE5OC44MSA2NTMuMzggMTgzLjMxIDY1My4wNyAxNzUuNTcgNjUyLjc5IDE2Ni43OCA2NTIuNzkgMTYwLjAzIDY1Mi43IDE1OC45IDY1Mi42MSAxNTIuMzMgNjUyLjM5IDE1MC42OSA2NTEuODQgMTQ0LjQ5IDY1MS4xMSAxNDEuNTQgNjUwLjE2IDEzNi41NiA2NDcuNzIgMTMwLjI2IDY0Ny4xOCAxMjguNTggNjQ1Ljk1IDEyNi4yMiA2NDIuNjkgMTIwLjU2IDYzOC4wNyAxMTQuMjcgNjM2LjM1IDExMi40NSA2MzAuMDUgMTA2LjUxIDYyMi4zIDEwMC4yMiA2MTQuNSA5My44MyA2MDYuMjYgODguOTkgNTk2LjQ3IDg2Ljk5IDU5MC42MyA4NS45OSA1ODMuMzQgODIuNTUgNTgxLjU3IDgxLjMzIDU3NS43MyA3Ni44NCA1NjcuOTMgNzAuMDkgNTYyLjc3IDY1LjgzIDU1Mi43NSA1OC4wNCA1NDQuNjkgNTEuNTYgNTM2Ljg1IDQ0LjYzIDUzNC4zNiA0Mi41OSA1MjkuMDYgMzguMDYgNTI0Ljg5IDM0Ljg0IDUyMS40IDMxLjg1IDUxNi41MSAyNy4yMyA1MTMuNzkgMjQuMjggNTAzLjY0IDExLjc0IDQ5OC4xNiA1LjUzIDQ5Ni41NyAzLjg5IDQ5MC4zMiAtMi4xNyA0ODcuNDIgLTQuNzEgNDg1LjI5IC0yLjMxIDQ4OC4xIC4xMyA0OTUuOCA3LjY2IiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTQxNC43OSw4Ljc5bDEuODEsNC4wMywxLjk1LDcuNDMuNzcsOC4wMi0uODEsNy4zMy0xLjksNS41OC0xLjI3LDIuMzUtMS40OSwyLjQ5LTMuNTQsNC4xNy0xLjA4LDEuMDQtMi42OCwzLjA0LTIuOTksMy4xMy0xLjgxLDEuNzItMi4xMywzLjk0LTEuODEsNC4wMy4xNCwyLjMyLjUsNS42MSw1LjA3LDcuODgsNy44LDYuODksMS4xMy44Niw2LjY2LDQuNDksNS4wNywzLjI2LDIuNjMsMi4wNCw2LjI1LDUuNzUsMS40MSwyLjcyLDEuOTksNC43Ni0uMTgsMS42Ny4wNCw1Ljg5LS41OSwxLjE4LTEuMjIsMy40OS0uOTEsMi4xMy0uMjcuOTEtMi4xOCw0LjQtMS4zNiwzLjM1LS43MiwyLjM2LTIsNS40NC0yLjE3LDUuNzUtMS4wNCwxLjktMS40OSwzLjMxLTIuODUsNC45NC0zLjEzLDQuNTMtMi4xMywyLjY3LTEuMTgsMS42Ny0xLjgxLDEuNzctMi4wNCwyLjA4LTIuNzIsMi4xOC0xLjQ5LDEuMzYtMS40NSwxLjA0LTIuODUsMi40NC0zLjc3LDIuOS0uNTkuNjgtLjYzLjk1LTIuNzIsMy41NC0xLjU0LDIuODYtLjY4LDIuOS0uMzYsNC45LjUsMy4xNy45MSw0LjgsMy45OSw3LjguNjQuNzcsNS41Nyw3LjAyLDcuMjUsNy43OSwyLjA0LDEuNzMsNy4xMSw2LjAzLjYzLjYzLDcuMjksNy4wNy4zNiwxLjU0LDEuNDEsNi4wMy0xLjUsNy40OGgwbC0uMDQuMTgtMS4wNSw3Ljc1LS4yMiw2LjM5LS4xMywxLjQuOSw3Ljk4LjYzLDEuMzYsMy43MSw2LjUyLDQuMTcsMy43MSw0Ljc2LDQuMDQsMy4wOCwxLjYzLDcuNzksMy41OCw2LjQ0LDIuNjIsMS40LjM2LDcuNzksMS42Myw3LjcsMS43Niw3Ljc0LDIuMDQsNy43NSwyLjcyLDEuMzYuNTksNi4zOSwyLjYzLDcuNzksMy40NCw3Ljc0LDMuNTgsNy44NCwyLjQ5LDcuODksMS45NSw3LjU2LDIuNTQsNC4zLDEuODEsMy40NCwxLjMyLDMuODUsMi4wOCwyLjIyLDYuMDcuNjgsMS40LTEuMTgsNS42Mi0uNzIsOS44My43Miw1LjguMTQsMi4xMywxLjg5LDQuMTIsMS45NSwzLjgxLDUuODksNS43NSwxLjksMiw1Ljg5LDMuODksNS4zOSwzLjg1LDIuMzYsMS44Niw2LjIxLDUuOCwxLjQ1LDcuNDctMi4zMSw1LjM1LS42OCwyLjM1LTIuMDQsMi40OS0yLjYyLDMuNTgtMS4xOCwxLjQ0LTMuMTcsMy40OS0zLjc2LDQuNDktMi42Nyw0LjcxLTEuMzYsMi45OS0uNjQsMi45OS0uODEsNC44OXYuMTRsLjMyLDIuMzEuMzIsNS4zOS4wNS4yMiw1LjEyLDYuODguOTUsMSw2Ljk0LDMuNDQsNS43NSwyLjI3LDIuMDQuOTEsMy40NSwxLjE4LDQuMzksMS4zMiwxLjc2LjQ5LDEwLjUxLDIuNjgsMy4yNi43Nyw5LjQ3LDIuNDksNS45NCwyLjQxLDUuMjUsMi44MSwyLjQ1LDEuMTMsNy43OSw0Ljk4LDUuOTgsNC4xMywxLjg2Ljk1LDcuNyw0LjI2LDQuMjEsMi41OCwzLjUzLDEuOTUsNy43NSw1LjA4LDcuNyw2LjYxLDEuNDUsMS43Miw2LjMsOC43NCw3Ljc0LDE0LjA1LDMuNTgsOC4xMSwxLjgxLDUuMzkuNjMsMi4zMSwxLjcyLDEwLjM4LDEsNS4zLjk1LDEuODYsMi40LDUuODQsMy40OSw1LjIxLDEuOTUsMi42Myw1Ljg1LDYuMTIsMS44MSwxLjcyLDUuOTgsNC41MywzLjgsMy4yMiwzLjksMy4yMiw0LjIxLDQuNDgsMy41NCw0LjA0LDIuOTQsMy43MSw2LjcsNy43OSw1Ljk4LDUuMywzLjMxLDIuNDksNC41MywyLjU0YzEuNjMuNzcsMy4yMiwxLjU0LDQuNzYsMi4yN2w2LjA3LDIuOTksNC42NiwyLDQuMywyLjI3LDMuNCwxLjY3LDIuNzYsMS44MSw1LjAzLDIuOTUsNi40Myw0Ljc2LDkuNDIsNy43LDcuMTEsNy42Niw0LjgsNy43LDMuMTcsNy45MywyLjgxLDcuNjEsNC41OCw3LjguNDUuNTQsNy4wNyw3LjM0Ljc3LjU5LDcuODQsNS4zLDIuOTQsMS45LDQuNzYsMi45LDcuNjUsNS4yMSw3LjA3LDcuMjUuNjMuODYsMy44NSw2Ljg0LDMuMjcsNy4yMS42OCwxLjU0LDMuNzEsNi44NSw0LjIyLDQuOTgsNC41MywyLjksMy4yNiwxLjU5LDcuODQsMS44NiwzLjg1LjQxaC4xM2wzLjgxLS4zNiwzLjcyLjI3LjEzLS4wOGguMTRsMy45NC0yLjU0LDEuMDkuMTguMDktLjQxLjQxLS4wNS0uMDUtMSwzLjU0LTIuNzIuMDUtLjE4LjEzLS4xNC41NC00Ljc2LDEuMDktMS4yNywxLjE3LTMuMjYsMS4wNC0yLjQuMDktMSwxLjg2LTQuNjYuNDYtMi45NS44Ni0zLjUzLjQ5LTQuMjEuNTQtMi41NC42NC01LjIxLjM2LTEuNTQsMS4wOS02Ljc1LjIzLTcuMzgtLjA5LS40MS0xLjk1LTcuNDMtMy45OS03Ljg4LTEuNjctMi4wOC00Ljk4LTUuNzYtMi44MS0yLjU5LTYuMy01LjIxLTEuNDktMS4wOS03LjgtNS4wMy0zLjIyLTEuNjgtNC41OC0yLjMxLTQuMjItMS44Ni0zLjYyLTEuNDktNy43NC0yLjk1LTEuNDUtLjYzLTYuMjUtMi4yMi03Ljg0LTMuNzYtNy42Mi00LjYzLTQuNTctMy40LTMuMjEtMi4zMS02Ljc1LTUuNDQtNC45NC0zLjktNS4wMy0zLjg1LTE0LjMxLTkuNTEtNy42Mi02LjAzLTYuNDMtNy43LTEuNDEtMy4xMy0xLjcyLTQuNDh2LTEuNTlsLS44Ni02LjAyLjE4LTIuMzYtLjA0LTUuMjYuMjctMi4yNy4yNy01LjUyLjE4LTEuNzcuNS03LjI5LjI3LTYuNTMtLjg2LTcuOTMtMS40LTMuMjEtMS44MS00LjUzLTIuNzctNC0zLjQtMy44OS00LjQ0LTMuOTktNS43MS0zLjg1LTIuMTMtMS4zMi0yLjg2LTEuNTQtOS4zNC00LjktMy4yNi0yLjA0LTYuODQtNS43MS0uODEtMS4wNC00LjI2LTYuNjItMS44Ni01Ljk4LS42OC0xLjczLTEuMDktNy42MXYtNy44bC4wOS03LjY1LS43My04LjYxLTEuNDktOS4yNC0yLjYzLTEzLjIzLTEuNC03Ljc5LTEuNjgtNy43NS0yLjM2LTcuNzktMi43Ni03Ljc1LTIuNDUtNi4xMi0uNzYtMS43Mi00LjI2LTcuNzUtMi44MS0zLjg5LTMuNDQtMy45NC00LjM1LTQuMzEtNC4zLTMuNDktMy41My0yLjc2LTcuMTYtNS4wMy04LjM0LTYuMDctNy43NC02LjA3LTQuMTctMy4zNS0zLjU3LTMuMDgtNC45NC00LjYyLTIuODEtMy4wNC0zLjk0LTQuNjctNS4yMS03LjY2LTEuMzYtMi44NS0yLjU3LTQuODktMi45LTcuNy0uMTktLjc3LTIuMDQtNi45OC0uNjgtMy40NC0uOTUtNC4zLTEuMjctNy43NS0uOTEtNi41Ny0xLjEzLTguOTgtLjQ1LTcuNjEuNC03LjcsMS4wNS03Ljc5Ljk1LTUuNzUuMjctMS45NS45MS00LjYyLjQ1LTMuMTIuNzctMy40LDEuMDktNi43LjYzLTUuNDguMTQtMS41OS4xMy03LjYxLS4yMi03Ljk3LS41OS0xMy45MWMtLjA1LS43Ny0uMDUtMS40Ni0uMDktMi4xN3YtLjE0bC0uMDUtLjE4LS40LTcuOTN2LS4yN2wtLjIyLTQuODUtLjIzLTMuMTctLjE4LTQuNTgtLjIzLTMuNTMtLjA5LTQuMzEtLjE4LTMuNzZ2LTMuODlsLS4zMi00LjE3LS4wNC0zLjU4LS43Ny01LjAzLS4yOC0yLjc3LTEuOS03Ljc5LS42My0xLjU5Yy0uOTEtMi4wOS0xLjgxLTQuMTctMi43Mi02LjI2bC00LjY2LTcuODQtLjQxLS41NC03Ljg0LTguMDYtNy43OS02LjI1LTcuNzQtNi40OC0zLjY4LTIuMzFjLTEuNC0uODYtMi43Ni0xLjcyLTQuMTctMi41NGwtLjE0LS4wNS0zLjQ5LS43My00LjI2LS45NS03Ljc5LTEuMjItNC45OC0yLjA0LTIuNTQtMS4xOC03Ljc1LTUuMzktMTAuMjgtOC44OC01LjMtNC40NC03Ljc1LTYuMTItNy43OS02LjM0LTcuNzUtNi44OC03Ljc5LTYuMzktMS4yNy0uODYtNi40OC00LjktMy40OS0yLjgxLTQuMjEtMy45OS0zLjM2LTMuNzYtNi4yNS03Ljc0LTYuNDctNy43OS03LjctNy43NS03LjM0LTYuNDQtMS42My0xLjM2LS41NC42OCwxLjU5LDEuMzEsNy4yOSw2LjQ0LDcuNjYsNy43LDguMjksMTAuMDIsNC40NCw1LjQ4LDMuMzUsMy43Niw0LjMsNC4wMywzLjU0LDIuODUsNi40OCw0Ljk0LDEuMjIuODYsNy43OSw2LjM0LDcuOCw2LjkzLDcuNzQsNi4zNCw3Ljc5LDYuMTIsNS4yNSw0LjM5LDEwLjI5LDguODgsNy43OSw1LjQ0LDIuNzIsMS4yNyw1LjEyLDIuMTMsNy43OSwxLjIyLDQuMjYuOTUsMy41Ny43Miw3LjUyLDQuNjYsNy43OSw2LjUzLDcuNzUsNi4yMSw3LjY2LDcuODguNDEuNS41NCwxLDQuMDgsNi43MWMuOTUsMi4xNywxLjg2LDQuMjUsMi43Miw2LjI5bC41NSwxLjM2LjE4Ljg3aDBsMS43Nyw2Ljg0LjIzLDIuODEuNzcsNC45OC4wOCwzLjU4LjMyLDQuMTd2My44NWwuMTgsMy45NC4wOSw0LjE3LjIyLDMuNTguMTgsNC41Ny4yMywzLjE3LjIyLDUuMDMuNDEsOC4yLjczLDE2LjIyLjIyLDcuOTMtLjE4LDcuNTctLjA5LDEuNS0uNjQsNS40NC0xLjA4LDYuNjYtLjc3LDMuNC0uNDUsMy4xNy0uOTEsNC41Ny0uMjIsMi4wNC0xLDUuNzYtMS4wNCw3Ljc1LS40NSw3Ljc5LjU1LDcuODl2LjA0bDEuMDgsOC44OC45MSw2LjUyLDEuMjYsNy44Ljk2LDQuMy42OCwzLjQ1LDIuMjIsNy43OSwyLjksNy43OSwyLjYzLDQuOTQsMS4zNiwyLjg2LDEuNSwyLjMxLDMuOCw1LjUzLDMuOTksNC43MSwyLjgxLDMuMDgsNC45OCw0LjYyLDMuNjcsMy4xNyw0LjEzLDMuMzUsNy43OSw2LjA3LDcuNzUsNS43MSw3Ljc1LDUuMzksMy41NCwyLjcyLDQuMjEsMy40OSw0LjMsNC4yMSwzLjQsMy44OSwyLjc2LDMuNzYsNC4yMSw3Ljc1Ljc3LDEuNjgsMi40NSw2LjAzLDIuNzIsNy43NSwyLjI3LDcuNDcsMS43Niw3Ljk4LjMyLDEuODEsMS4wOSw1Ljk4LDIuNjMsMTMuMjMsMS40NSw5LjIuNzcsOC40Ny0uMDksNy43OXY3Ljg0bDEuMTMsNy44NC42MywxLjU5LDIsNi4yNSw0LjIxLDYuNTIsMSwxLjI4LDYuODQsNS43MSwzLjM1LDIuMTMsMTIuMjMsNi40NCwyLjA4LDEuMzEsNS41OCwzLjc2LDQuMzksMy45LDMuMzYsMy44LDIuNzIsNCwxLjc3LDQuMzksMS40LDMuMjcuODEsNy40OC0uMzYsNy43OS0uNDEsNS45OC0uMTgsMS43Ny0uMjgsNS41My0uMjcsMi4yMi4wNCw1LjM0LS4xOCwyLjQ1LS41OS4wOGguNTlsLjg2LDUuODkuMDUsMS45NSwxLjcyLDQuNDgsMS41NCwzLjQsNi41Nyw3Ljc5LDcuNTYsNS45OCwyLjcyLDEuODEsMTEuNjQsNy43NSw0Ljk4LDMuODEsMTEuNzMsOS4zMywzLjI3LDIuMzUsNC40OCwzLjQsNy44NCw0Ljc1LDcuNzksMy43Miw2LjMsMi4yMSwxLjQ5LjY4LDIuMTMuODIsNS42MiwyLjA4LDMuNTgsMS41LDQuMTIsMS44MSw3Ljc1LDMuOTgsNy43NSw0Ljk4LDEuNDUsMS4wNSw2LjI1LDUuMTYsMi43NywyLjU0LDQuOTgsNS43NSwxLjQ5LDEuOSwxLjY4LDMuMTcuMTQuMDl2LjE4bDIuMjYsNC4zOSwxLjkxLDcuNTctLjIzLDcuMjUtMS4wNSw2LjYyLS4zMSwxLjQ5LS42OCw1LjI1LS41NSwyLjU0LS40NSw0LjE2LS45MSwzLjU0LS40NSwyLjk5LTEuOSw0Ljg5LS4wOSwxLS45MSwyLjA0LTEuMjcsMy4zNS0xLDEuMDh2LjE0bC0uMDkuMDktLjU0LDQuNzItMy41OCwyLjc2di4yMmwtLjEzLjEzdi42OGwtLjY4LS4wOS0uMTQuMDRoLS4xOGwtMy45OSwyLjU0LTMuNDktLjIyaC0uMDlsLS4wOS0uMDUtMy44NS40MS0zLjYyLS40MS03Ljg0LTEuODYtMi45OS0xLjQxLTQuNjItMi45OS0zLjg1LTQuNTgtMy43Ni02LjgtLjc3LTEuODEtMy4xMy02LjkzLTMuOS02Ljg4LS42My0uOTUtNy4xNi03LjM5LS41OS0uNDUtNy4yNS00Ljg5LTQuNzYtMi45LTIuOTktMS45LTguNDMtNS43NS03LjQzLTcuNzktLjQxLS43My00LjA0LTYuOC0yLjk1LTcuODguNi0uMThoMGwtLjYuMDktMy4wOC03LjYxLTQuODUtNy44NC03LjE2LTcuNzktOS41Ni03Ljc5LTYuNDgtNC44NS01LjA3LTIuOTQtMi43Mi0xLjgxLTMuNTQtMS43Mi00LjI2LTIuMjYtNC43MS0yLTYuMDctMi45OC00LjcxLTIuMjctNC4zOS0yLjQ1LTMuMzEtMi40NC01Ljg0LTUuMjEtNi43NS03Ljc5LTIuOS0zLjcyLTMuNTctNC4wNC00LjIyLTQuNDgtNy43OS02LjUzLTUuOTQtNC41My0xLjgxLTEuNzItNS43NS01LjkzLTEuOTUtMi42OC0zLjM1LTQuOTgtMi40NS01Ljg5LTEtMi0xLjMxLTcuNTItLjA1LS40NS0xLjI3LTcuMzgtLjY4LTIuNC0xLjc2LTUuMzktMy42Ny04LjI5LTQuMDMtNy4yOWMtMS4yNy0yLjI3LTIuNDktNC40OS0zLjcyLTYuNzVsLS43My0xLjA0LTUuNjItNy44LTEuNDktMS43Mi02Ljk0LTYuMTItLjkxLS42OC0xLjk1LTEuMjdjLTEuOTUtMS4zMS0zLjg5LTIuNTgtNS44NC0zLjg1bC0zLjU4LTEuOTktNC4xNy0yLjU4LTcuOC00LjI2LTEuNzItLjg2LTYuMDMtNC4xNy03Ljc0LTQuOTQtMi41NC0xLjIyLTUuMjUtMi44MS01Ljk4LTIuNDUtMS45LS41NS03Ljc0LTEuOTktMy4yNy0uNzMtMTIuMjMtMy4xNy00LjM5LTEuMzEtMy4zMS0xLjEzLTIuMDgtLjkxLTUuNjYtMi4yNy03LjAyLTMuNDktLjU5LS42OC01LjAzLTYuOC0uMzItNS4yMS0uMzItMi40LjgyLTQuNzYuNTktMi45LDEuMjctMi44MSwyLjktNC45OCwzLjQ0LTQuMDgsMy4xNy0zLjQ0LDEuMTgtMS40NSwyLjY4LTMuNjIsMi4yNy0yLjg2LjU5LTIuMTcsMi4zMi01LjQ0LS4wNS0uMTguMDktLjIzdi0uMTRsLTEuNDktNy41Ny0uMDktLjA5LS4wNC0uMTMtNi4zLTUuODktMi4zNi0xLjg2LTUuNDQtMy45LTUuODktMy45LTEuODEtMS45LTUuODktNS44NC0xLjgxLTMuNDktMS44Ni00LjEzLS4wOS0xLjc2LS43Mi01LjguMjItMi40MS40OS03LjIsMS4xOC01LjgtLjA0LS4xNHYtLjE0bC0uNjgtMS40NS0yLjI2LTYuMjUtLjE0LS4wOS0uMDUtLjE4LTQuMDMtMi4wOS0zLjQ5LTEuNC00LjMxLTEuODEtNy45My0yLjU4LTcuNjEtMS45LTIuOTUtLjk5aC0uMDVsLS4xMy0uMDUtNC41Ny0xLjQtNi45My0zLjI3LTguNjYtMy44MWgwbC03Ljc0LTMuMjItNy44LTIuNzItNy43OS0yLjA4LTcuOC0xLjcyLTkuMDEtMS45NS02LjM5LTIuNjMtNy43OS0zLjU4LTMuMDQtMS41OS00LjYyLTMuOTQtNC4xNy0zLjc2LTMuNDktNi4yLS42My0xLjQxdi0uNDVsLS44Ni03LjEyLjEzLTEuMzEuMjMtNi4zLjE5LTEuMDQuOTEtNi45MywxLjQ5LTcuNTd2LS4xOWwtMS44MS03Ljc0LS4wOS0uMjItOC4wMi03Ljc1LTkuMTEtNy43MS03LjI1LTcuNzUtNi4wNy03LjctNC4wNC03LjgtLjgxLTQuNDR2LS4wOWwtLjA1LS4xOC0uNDUtMi44MS4zNi00LjY3LjY4LTIuOTksMS4zNi0yLjQ0LDMuODktNS4xMiwzLjYzLTIuODEsMi44NS0yLjQ1LDEuNDEtMS4wNCwxLjU0LTEuNCwyLjcyLTIuMTMsMi4xNy0yLjE3LDEuNzctMS43MywxLjI3LTEuNzYsMi4xMy0yLjY4LDMuMTctNC42MiwyLjg1LTQuOTMsMS40OS0zLjM1LDEuMDUtMS44NiwyLjI3LTUuOCwxLjk5LTUuNTguNzMtMi4zMSwxLjMxLTMuMzEsMi4yMi00LjQ0LjIzLS45LjkxLTIuMTMsMS4yMi0zLjQ0LjY4LTEuNDktLjA1LTUuODQuMjMtMS44Ni0uMDQtLjA5di0uMTRsLTIuMDQtNC44LTEuNjMtMy4wOC02LjI1LTUuNzEtMi42Mi0yLjA4LTUuMTctMy4zMS02LjYxLTQuNDQtMS4wOS0uODEtNy43OS02Ljg5LTQuODUtNy42MS0uNTktNy41MiwxLjcyLTMuNjcsMi4xMy0zLjk5LDEuNTktMS40LDMuMDgtMy4xNywyLjYyLTMuMDQsMS4wOS0xLC45OS0xLjEzLDIuNTktMy4xMiwxLjU5LTIuNTksMS4zMi0yLjQsMS45OS01Ljg5LjgyLTcuNDctLjY4LTcuOC0uMTQtLjQ1LTEuOS03LjM0LTEuODYtNC4yMS0xLjU0LTMuNjItNC4zNS03LjgtLjc3LjQxLDQuMyw3LjcsMS41NCwzLjYzWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im00MjMuMDgsOS4yOWwxLjQsMy41MywxLjcyLDcuNDgsMSw4LjU2di4wNGwtLjE4LDcuMDctMS4yNyw2LjcxLTIuMDQsNS41My0xLjg2LDMuMTMtLjg2LDIuMTMtMi45NCw0LjUzLS45NiwxLjE4LTEuMzYsNC40OS0xLjQsMy4yMnYuMTRsLS4wNC4xNC42MywzLjcyLjM2LDMuOTkuMDkuMjIsMy42Myw0LjUzLDMuMTMsMy4yNyw0LjcxLDMuMjYsNy43NSw1LjEyLDcuNyw1LjkzLDEuMjcsMS4yMywyLjY4LDMuODUsMi42NywzLjg5LDEuMDksNS4yMS4zMiwyLjIyLS4wNS4yMi0xLjIyLDYuNTItLjEzLDEtMi4yMiw0LjI2LTEuMzYsMy4zMS0xLjA1LDItMi43Niw1Ljc5LTEuNTUsNS41OC0uNjMsMi4yMi0uNjgsNC4xNy0uOTEsMy42Mi0uNDEsMi44MS0xLjQ1LDQuODktLjE0LDEuMjItMS44MSw1Ljg5LS4zMi41OS0xLjQ1LDUuMzUtMS4xOCwyLjQtMS4wOCwzLjM1LTIuNzIsNC44NS0uNDYuNjMtMi41OCwzLjktMi40OSwyLjgxLS44NiwxLjc3LTEuODYsMy4zMS0xLDEuNjMtLjUsMXYuMThsLS4wNS4xNCwxLjM2LDcuODgsMy45LDcuNywzLjY3LDcuOCw1LjcxLDcuODksMi41NCwyLjAzLDcuODQsNS43MSw3LjY2LDYuMTcsMS43MiwxLjQ5LDIuMzEsNy41Ni0uMDksMy45NC0uMzEsMy43Mi40OSw0LjI2LjA5LDMuNTgsMS43Miw2LjA3LjM2LDEuODYsMS40MSwyLjc3LDIuNjMsNC45OCw1LjE2LDYuMDMsMS42OCwxLjgxLDYuMjEsNC41OCw0LjY2LDMuMjYsMy4xMywxLjMyLDcuNzUsMy41NCw1LjY2LDIuOTQsMi4xMy43NywxLjQuNjMsMTQuMTgsNS42NiwyLjIyLjczLDUuNTcsMS41OCwyMi41Nyw1LjQ0LDIuNjcuNzIsNS43MSwxLjc3LDcuNywzLjQ0LDMuNzYsMi40OSwzLjk0LDQuMzEsMi4zNSwzLjI2LjUsMi43Ni40OSw0Ljc2djMuMzVsLS41OSw0LjQuMDQuMDktLjA0LjA5LDEuMDksMy44MS42Myw0LjAzLDMuOTQsNy43NSw0LjQ5LDcuNzksMi42MywzLjIyLDMuMjIsNC41Myw0LjU4LDQuMjEsMy4xMiwzLjQ5LDQuOTQsNy42Ni0uMDUuMzYtLjM2LDcuNDctMi4yNyw1LjEyLS44NiwyLjE3LTEuNzcsMi44MS0zLjI2LDQuNDktMy4zNSw0LjM1LTMuMzEsMy45Yy0uMDguMTgtLjE4LjMyLS4yMi40MWwtLjQxLjY0LTIuNDksNC4yNS0xLjQ1LDIuNjctLjU0LDMuMjYtLjkxLDQuNDQuMDUuMTR2LjEzbDEuNTQsMy45NCwxLjI3LDMuOTksMi42MywyLjMxLDcuNzksNS4wMywxLjE0LjQ1LDYuNzUsMS45LDIuNDUuNTQsOS43NCwxLjk1LDMuMzUuNDUsNS45OCwxLjA5LDEuNzcuMTgsNy44NCwxLjU5LDcuNywyLjY3LDcuNyw0LjgsNy42MSw3LjIxLjc3LjgxLDcuMDcsNi4wMywxLjksMS43Miw1Ljg1LDQuMjIsNC4zOSwzLjU4LDMuMzEsMi41OSw1LjAzLDUuMDcsMi42OCwzLjIyLDIuNzIsNC40OSw0LjI1LDcuOCw0LjM2LDcuNzQsNC4yNSw3LjM4LDMuODEsOC4wMiwyLjQsNi4yNSwyLjksOS4yOSwxLjI3LDIuNjMsMS44Niw1LjEyLDMuMzEsNS4zNCwxLjYzLDIuNTQsNi44LDcuNzksOC4wNiw3Ljc1LDYuODQsNi45NCw2Ljk4LDguNTYsNS43MSw3Ljc1LDIuODYsMy4yMiw0LjcxLDQuNTcsMy4wOCwyLjQxLDcuODQsNC45M2gwbC44Ni41LDYuODksMy4xNyw3LjAyLDMuODUuNjguMjcuNjguNDUsNy4wNyw0LjEyLDQuMTcsMy41OCwzLjYzLDIuNTgsNi44NSw1LjM5Yy4zMS4yMi42My41Ljk1Ljc3bDQuMTIsMy4xNyw1LjA4LDMuNjcsNi44LDcuNjYuMzIuNzcsMy40OSw2Ljc2LDIuNzIsNy44NCwzLjIyLDcuNzQsNS4zLDcuODR2LjA1bDcuNzQsNy4wMiwxLC44MSw2Ljg1LDQuNTgsNy43LDUuMyw2Ljg0LDUuNTcuODYuODcsNS4wNyw2Ljc5LDYuNDgsMTEuNTUsMS45OSwzLjk0LDEuOTksMy4xNyw0Ljk5LDQuNzFjLjkxLjYzLDEuNzIsMS4yMiwyLjU4LDEuODFsLjQ1LjMyLDIuNjcuNjgsNS4yMSwxLjQ5LDMuODUtLjMxLDMuOTktMS4wOSwyLjMxLS44NiwxLjg1LTIuMDMsMi4yNy0xLjQ1LDEuNjMtMS42MywyLjI3LTIuNTguODYtMi4yNywxLjgxLTIuNzIsMi4yMi01LjY3LDEuNTktNi4yLjA5LS45MSwxLjE4LTUuNTguMjctMi4xNywxLjA1LTQuMy41NC0zLjU0LjI3LTMuNDQuMTQtNC4zOXYtLjA5bC0xLjktNy43NC0yLjYzLTUuMDgtMS41OS0yLjgxLTYuMjEtNy4xMi0uNzItLjcyLTcuMjEtNS45NC0yLjY3LTEuODYtNS4wMy0zLjI2LTcuODQtNC4wOC0xLS40NS02Ljg0LTIuODUtNC4zOS0xLjYzLTExLjAxLTMuNjMtLjczLS4zMi03LjAyLTIuNTQtNi44NC0zLjU4LS45MS0uMzItMS4yMi0uNjMtNi40OC00LjA4LTQuMTItMy42My0zLjY3LTIuNzYtNS41Ny01LjAzYy0uNzMtLjU0LTEuNS0xLjEzLTIuMjItMS42OC0yLjQ1LTEuOS00Ljg5LTMuNzYtNy4zNC01LjYybC0uNjMtLjQ1LTcuNTctNC4zOS01LjEyLTMuMzUtMi41OS0xLjg2LTYuNTctNS44LTEuMTMtMS40NS0zLjk0LTYuMzUtLjkxLTQuNjYtMS4xMy0yLjk5di01Ljg1bC0uMjctMS43Ni40OS01LjcxLS4wNC0xLjkuNjMtNS4yNS4xNC0yLjU0LjU0LTQuNTguNDUtNy4yNS4xOC0zLjc2LS45MS03LjkzLTIuOTgtNi44NC0uNTUtLjk2LTYuODQtNy44NC0uNS0uNDUtNy44LTUuMzktMTIuMjgtNi40My0zLjI2LTEuNS0zLjEyLTEuNzYtNC41My0zLjUzLTQuMDgtNC4yMi00LjA4LTcuNjYtLjA1LS4zNi0yLjIyLTcuMzQtLjA5LTIuNjgtLjczLTQuOTMuMjItMy4yNnYtNC40NGwuMTktMy4xMy4wOS00LjY2LS4xOC0zLjI3LS40LTQuNTMtLjU0LTQuMTctLjU1LTMuNjItMS4wNC01Ljc1LTMuNC0xNy41My0xLjg2LTcuOTgtMi4zMS03LjU2LTIuMjItNi4xMi0uNjgtMS42Ny0uNjgtMS40MS0yLjg1LTYuMzQtMy41Ny02LjI5LTEuMDktMS41NS02LjkzLTcuODQtNy42MS02LjM0LTEuOTUtMS40Ni01Ljg0LTQuMTctNy43NS01Ljc2LTE1LjU0LTEyLjIzLTEuMjItMS4wNC02LjQ4LTYuMDMtMS43Mi0xLjY4LTYuMzQtNy43LS41OS0uOTUtNC40NC02Ljc1LTMuNjgtNy43LS41OS0xLjk1LTIuMTctNS44LTEuMjctNS4zOS0uNjgtMi4zNi0xLjczLTguOTctMS4yMi03Ljg0LTEuMjItOC44OC0uNjgtNS4yNi0uNS03LjcuMjItMy40LjIzLTQuMzEuNDUtMi43Ni42My01LjAzLjM2LTEuNjcsMS4xNC02LjYyLDEuMjctNi41MiwxLjM2LTYuMzQsMS4xNC02LjY2LjQxLTMuMjIuMjMtMy45OS4wOS0zLjh2LTMuODVsLS4zMi0xMS42OS0uMzYtNy43NC0uMjctNC43Ni4wNS0uMDktLjA1LS4xMy0uMTQtMi44MS0uMzItNS4yMXYtLjA0bC0uMDQtLjE5LS4wOS0yLjMxLS44Ni0xMy45NXYtMS41NGwtLjM3LTYuNTd2LTEuMThsLS41NC03Ljc1LS41OS0zLjgtLjcyLTQuMDMtMi4zMS03LjgtMi42OC01LjcxLS45MS0yLjA5LTEuMjItMi4wNC00LjU3LTUuODQtMy4yNi0zLjM1LTUuMTctNC40NC0xMC4zNy04LjU2LTcuOTMtNS4wNy03LjgtMS43Ny03Ljc5LTEuMTQtMS40OS0uNjMtNi4wMi0yLjMxLTYuMDctMy44MS0xLjcyLTEuMTgtNy43NC02LjUzLTguOTMtNy43OS02LjYyLTUuMjZjLS45OS0uODYtMS45OS0xLjY4LTIuOTUtMi40OWwtNC44LTMuOTQtNC4xNy0zLjgxLTMuNjMtMy4yMi03Ljc5LTYuMzktOC42OS01LjkzLTYuNzUtNS4zNS0yLjQtMi4zMS01LjM0LTYuMTItNy44LTkuNjEtNy43OS04LjMzLTcuOTctNy4xMS03LjU3LTYuMTItMi4wOS0xLjU5LS41NC42OCwyLjA0LDEuNTgsNy43OSw2LjMsNy43LDYuODUsNy43NSw4LjI5LDcuNzksOS42LDUuMzUsNi4xMiwyLjQ0LDIuMzYsNi44NSw1LjQ0LDguNjUsNS44OSw3Ljc5LDYuMzksMy42MiwzLjIxLDQuMTIsMy44MSw3LjgsNi40NCw2LjYyLDUuMyw4LjkyLDcuNyw3LjgsNi41NywxLjc3LDEuMjcsNi4wMywzLjgsNy44NCwzLjA0LDcuNzksMS4xOCw3Ljc5LDEuODEsNy41Nyw0LjgsMTAuMzcsOC41Niw1LjEyLDQuMzksMy4xNywzLjMxLDQuNTMsNS43LDEuMTgsMS45MS45LDIuMTMsMi42Miw1LjU3LDIuMzEsNy43LjczLDQuMDMuNTUsMy42Ny4wNC42My41NSw3LjEydjEuMThsLjM2LDguMTUsMS43MiwyOS41LjM2LDcuNzQuMzIsMTEuNjl2My44bC0uMDksMy44MS0uMjMsMy45LS40LDMuMTctMS4wOSw2LjYyLTEuMjcsNS43MS0xLjU0LDcuNzQtLjk5LDYuMDctLjMyLDEuNjgtLjY4LDUuMDctLjQ1LDIuNzItLjQ1LDcuNzkuNSw3LjguOTUsNy43OSwxLjA4LDcuNzksMS4yNyw3Ljc1LDEuNTQsNy43NS42OCwyLjQsMS4yNyw1LjM5LDIuMjIsNS44NS41NSwxLjksMy43MSw3Ljg0LDUuNDksOC4yOSw1Ljk4LDcuMywxLjgxLDEuODEsNi41Miw1Ljk4LDEuMjcsMS4wOSwxNS41NCwxMi4yOCw3Ljc1LDUuNzYsNy43NSw1LjU3LDcuNTYsNi4zNCw2Ljg1LDcuNjYsMS4wNCwxLjU0LDMuNTQsNi4xNiwzLjU0LDcuNzQuNjgsMS42MywyLjE3LDYuMDcuOTUsMy4xN2MuNDksMS41NC45NSwzLjA5LDEuNDUsNC41OGwxLjc2LDcuNzUsMywxNS41LDEuNDUsNy43NS41NSwzLjU4LjU0LDQuMTIuNDEsNC41My4xMywzLjE3LS4wNSw0LjYyLS4xOCwzLjE3djQuMzlsLS4yMywzLjM2LjcyLDQuOTMuMDksMi44NiwyLjE3LDcuMjUuMTQuNjguNDUuODYsMy44MSw3LjAyLDQuMDQsNC4xNyw0LjYyLDMuNjIsMy4yNywxLjgxLDMuMzUsMS41NCwxMi4xLDYuMzQsNy43LDUuMzUuNDUuMzYsNi44NCw3LjguNDEuODEsMi45OSw2Ljg0Ljg2LDcuNDgtLjE4LDMuNzYtLjQ1LDcuMjUtLjU1LDQuNTQtLjEzLDIuNTQtLjYzLDUuMjEuMDUsMS45NS0uNSw1Ljg1LjIyLDEuNzIuMDksNi4yMSwxLjA5LDIuNzYsMS4wNCw1LjA4LDMuOSw2LjI1LDEuMTgsMS41NCw2LjY2LDUuOTMsMi42NywxLjksNS4xNywzLjQsNy41Miw0LjM1LDEwLjE1LDcuNyw1LjU4LDUuMDMsMy42MiwyLjc2LDQuMTIsMy42Myw2LjYyLDQuMTcsMS4yNy42OC45MS4yNyw2Ljg0LDMuNTgsNy4wNywyLjU4LjcyLjMyLDEsLjM2LDEwLjA2LDMuMzEsNC40OCwxLjY4LDcuNywzLjE3LDcuNzUsNC4wOCw1LjAzLDMuMjEsMi42NywxLjksNy4wMyw1LjguNzIuNjgsNi4xNyw3LjA2LDEuNTQsMi43MiwyLjU5LDQuOTgsMS44Niw3LjU3LS4xNCw0LjI2LS4yNywzLjM1LS41NSwzLjQ5LTEsNC4yNi0uMjcsMi4yMi0xLjE4LDUuNTgtLjA4Ljg2LTEuNTksNi4xMi0uMzIuODEtMS45MSw0Ljg1LTEuODEsMi43Mi0uOTEsMi4zMS0yLjEzLDIuMzVoMGwtLjA0LjA5LTEuNDUsMS40NS0yLjM2LDEuNDktMS43NiwxLjk1LTEuOS43My0zLjgxLDEtMy44LjMxLTUuMDMtMS40NS0yLjcyLS43My0yLjU4LTEuODEtNC45OC00LjcxLTEuODEtMi45NC0xLjk5LTMuOTUtNi41Mi0xMS42LTUuMTItNi44OC0uOTUtLjk2LTYuODgtNS42MS03LjgtNS4zOS02LjgtNC41My0uOS0uNzctNy43NS03LjAyLTUuMTYtNy42NS0zLjYzLTguNzktMi4yMi02LjYxLTMuNTMtNi44LS40NS0xLjA5LS41OS0uNzItNi4zLTcuMDItMS40OS0xLjA5Yy0xLjIyLS44Ni0yLjQ1LTEuNzItMy42Mi0yLjU5bC00LjEyLTMuMTdjLS4zMi0uMjMtLjU5LS40NS0uODYtLjcybC0uMzItLjIzLTYuNjEtNS4yMS0zLjUzLTIuNTQtNC4yMi0zLjU4LTcuNzktNC42Mi0uNzctLjM2LTcuMDItMy44NS02Ljg5LTMuMTctOC41Ni01LjM1LTMuMDMtMi4zMS00LjcxLTQuNTctMi43Ni0zLjEzLTUuNzYtNy44LTcuMDItOC41Ni03Ljc1LTcuODgtNy4xMS02Ljg0LTYuNzEtNy42Ni0xLjY4LTIuNTQtMy4yNi01LjI2LTEuODEtNS4wMy0xLjIyLTIuNTgtMS40LTQuNDQtMS41OS00Ljk4di0uMDVsLTIuMzItNi4xMS0zLjY3LTcuOC00LjQ5LTcuNzUtMy41My02LjMtNS4xMi05LjM0LTIuNjMtNC4zNS0yLjgxLTMuNC01LjAzLTUuMTItMy40NS0yLjY4LTQuMzUtMy41My01LjgtNC4xNy0xLjk1LTEuODEtNi45Ny01LjkzLS43Ny0uODEtNy44OS03LjQzLTcuNzQtNC44LTguMDYtMi43Mi03LjYxLTEuNTQtMS44MS0uMTgtNS45OC0xLjA4LTMuMzYtLjUtOS42OS0xLjg5LTIuNDEtLjU1LTYuNjEtMS44Ni0xLjA5LS40NS0xLjM2LS45MS02LjI1LTMuOTQtMi42Mi0yLjMxLTEuMDktMy42My0xLjQ5LTMuOTQuODEtNC4zMS42My0zLjM1LDEuMjctMi4zMSwzLjEzLTUuMywzLjIyLTMuNzYsMy45LTUuMDcsMi44LTMuODUsMS43Ny0yLjc2LjkxLTIuMzYsMi40OS01LjYxLjI3LTcuNzUtLjQ1LS45NS00LjU3LTcuMDctMy4yMS0zLjYyLTQuNjItNC4yNy0zLjEzLTQuMzktMi41OC0zLjE3LTQuNDgtNy43OS0zLjktNy43NS0uNTktMy43MS0xLjA1LTMuODUuNTUtNC4yNS4wNS0zLjQ5LS41NS00Ljg5LS41OS0zLjEzLTIuNC0zLjMtNC4xMi00LjQ5LTMuNzctMi40OS03Ljc5LTMuNTQtNS44OS0xLjg2LTIuNjctLjczLTIyLjU2LTUuMzgtNy43NS0yLjI3LTE1LjU0LTYuMy0yLjA0LS43Ny01LjY2LTIuOTQtNy44LTMuNTQtMy4xMi0xLjMyLTQuNTgtMy4xNy02LjE2LTQuNTMtNi42Ni03LjctMi41OS00Ljg5LTEuMzYtMi43Ni0uMzItMS41OS0xLjczLTYuMTItLjA5LTMuNC0uNS00LjE3LjMyLTMuNzIuMTMtNC4wOC0uMDQtLjEzLTIuNTQtNy45My0xLjc2LTEuNTktNy45OC02LjM5LTcuNTYtNS41My0yLjU0LTIuMDktNS40OC03LjYxLTMuNjgtNy43LTMuODktNy44NC0xLjI3LTcuNDMsMy4yNy01Ljc1Ljk1LTEuODYsMi4yNy0yLjU5LDMuMTctNC42MS4yMi0uNWMuOTEtMS41NCwxLjcyLTMuMDQsMi41OS00LjUzbDEuMDQtMy4yMiwxLjE4LTIuNCwxLjQ1LTUuMzUuMzItLjYzLDEuODYtNS45OC4xNC0xLjIyLDEuNDUtNC45NC40MS0yLjg2LjkxLTMuNTcuNjgtNC4xMy42OC0yLjI3LDEuNS01LjQ0LDMuNzEtNy43OSwxLjQtMy4zMSwyLjM2LTQuNjIuMDktLjg2LDEuMzItNi44NC0uMDUtLjA5LjA1LS4wNS0uMzctMi4zMS0xLjE3LTUuNjYtMi43Mi0zLjgxLTIuNzItMy45NC0xLjMyLTEuMjItNy43OS02LjAyLTcuNzUtNS4xNy00LjcxLTMuMjItMi45NS0zLjA4LTMuNTgtNC40NC0uMzYtMy44NS0uNTktMy43MiwxLjM2LTMuMDgsMS40NS00LjU3LjY4LS44NiwzLjA5LTQuNzEuODEtMi4wNCwxLjg2LTMuMDksMi4xMy01Ljc1LDEuMzItNi45NC4xOC03LjE2di0uMThsLjA1LS4wOS0uMDUtLjM2LS45MS03LjgtMS43Ni03Ljc5LTEuNDUtMy42My0xLjQxLTQuMTctNC4xNi03Ljg0LS43My40MSw0LjA4LDcuNjEsMS4zNiw0LjIxWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im00MzEuMzcsNS4yMWwuODYsNS40NC42OCwyLjEzLDEuMTMsNy40My45MSw4LjAydi41NGwuMDQsNy4yNS0uNjgsNy41Ny0xLjMxLDYuMjUtLjU5LDEuNTQtLjk2LDQuODktMS4yMiwyLjg1di4xNGwtLjA0LjA5LjI3LDMuNzYtLjU0LDMuOS4wOC4wOS0uMDQuMTQsMy4wNCw2LjI1LjY4LDEuNjMuOTEuODYsNy43OSw3LjAyaDBsLjI3LjE4LDcuNDMsNi4yNiwxLjE0LDEuMTQsNi4zNCw3Ljg0LDMuMjIsNy42MS44MSw3LjU3LTEuNDksNy43LTMuMzUsNi44NC00LjE3LDguNTItMS45LDcuOTgtLjczLDcuNy0uMjcsNy43NC4xOCw3LjhoMGwuMTQsMS45LjQ1LDYuMDIuNTQsOC41Ni0uNDEsNi43NS0uODIsNy43LS4yMiw3LjQzLjA1LjQxLjQxLDMuODUuNCw0LjM5LDEuNTksNy40OCw0LjYyLDcuODksOS4xMSw3Ljc0di4wNWw4LjcsNy42NiwyLjk0LDcuNDcuOTUsNS4wOC4zMiwyLjg1LDIuNDUsNS44Ljk1LDIsMi41NCwzLjQ5LDIuOTksNC4zLDUuOTgsNy44LDMuMTMsMy4zMSwzLjc2LDQuNDQsNC4wOCwzLjM2LDUuNzEsNC40OCwyLjEzLDEuMDksNy44LDMuMzUsOS40NywzLjM1LDguNDcsMi40LDEzLjE0LDMuOTgsNy42NiwyLjk5LDcuNzQsNC4zNSwxLjgxLDEuMzIsNS44OSw1LjE2LDIuNzIsMi44Niw1LjMsNy44NCwyLjM2LDcuNTcsMS4zMiwzLjk0LjcyLDMuOTQsNC4xMiw3Ljc1LDEuODEsMi44NSwyLjk1LDQuODUsMS45NSw0LjAzLDEuNTksMy43NiwzLjc2LDcuNzUsMi40NSwzLjMxLDMuMDksNC4zOSwzLjgsNy43LS42Myw3LjY2LTEuNjMsNC40NC0xLjQsMy4xNy0uOTUsMi4zNS0yLjI3LDMuMzYtLjYzLDEuMjItLjUuNzMtMi4yMiw0LjUzLTIuNzYsMy40LS4zNiwxLjM2LTEuMjcsMS45NS0xLjMyLDMuMDQtLjg2LDEuMjd2LjE0bC0uMDUuMTMuMjgsNS44NC0uMjgsMS44MS4wOS4xNHYuMjJsMi4yNywyLjMxLDQuODEsMi41NCwzLjA4LDEuODEsNS44NCwxLjIyLDIuMjcuMjcsOC4yMS40MSw2LjkzLjE5LDEuMTguMjIsNi43MS45MSwzLjQ4LDEuNTksNC4xNywxLjY4LDIuNzYsMi40LDQuOSw0LjAzLDIuNzIsMy42Nyw0Ljk0LDYuMDcsMS4wOSwxLjYzLDYuNzEsNy44OGgwdi4wNWguMDVsNy43NCw3LjY1LDcuNTIsNy43NSw1LjU4LDcuNjYsMi4zNSwzLjksMi4xOCwzLjg1LDMuOTMsNy43NSwxLjY4LDIuOSw3LjcsMTIuNTksMy45LDcuNywzLjksOS45NywyLjIyLDUuNjIsMi45NSw1LjE2LDEuMzEsMi41OCwxLjM2LDEuOTUsNC40LDUuODksNy4xNiw3Ljc5LDMuOTksNC4xMiwzLjMxLDMuNjMsNC40NCw0Ljk4LDIuMTgsMi43Miw1Ljc1LDcuNzksNi44OSw3Ljc1Ljc3LjcyLDIuNTQsMS44Niw1LjI1LDMuNzIsMy4wOCwxLjU5LDQuNzYsMi4yNiw0Ljg1LDIuNTksMi45OS44MiwzLjU0LDIuMDksNC4xNywyLjA0LDUuODQsNS42NiwxLjc3LDEuMzYsNi4wNyw2LjM0LDEuNzcsMS4zNiw0Ljc2LDMuNDQsMy4wNCwxLjksNy44LDQuNDgsNy4yOSw0LjQ5LjIzLjMyLDIuOTUsNy4wNi0uMDksMi43Ny4wNS4xMywxLjQ0LDQuODUsMS4zMiw1LjY2LjY4LDIuMTcsMS40OSwzLjM1LDEuOTUsNC40NSw2LjE2LDcuODQsOS4zOCw3Ljg0LDUuODksNC4xMiw0LjY2LDMuNjMsMy4wNCwyLjQ5LDUuMTIsNS4xMiwyLjYzLDMuNjIsMi45LDQuMTIsNC44NCw4LjU2LDUuNjYsNy4wMiwyLjM2LDIuMTcsMi45OS45NSw0Ljc2LDEuODZoLjE0bC4xMy4wNGgwbDMuOTktLjkxLDMuOS0xLjA5LDEuODEtMS4xMywxLjc2LTEuODEsMi4zMi0xLjk5LDEuOTktMi4zMSwxLjQ1LTIuMTcsMi4yNy01LjU3LDEtMy42Ny43Ny0yLjM2LDEuMjItNS4zNS4zMi0uODYuODEtMy4xNy44Ni0zLjg1LjUtNi40NC4wNS0xLjR2LS4wOWwtMS45LTcuNzktLjcyLTEuMjctMy43Ny02LjU3LTIuODUtMy4zMS00LjU3LTQuNTMtMy4yNi0yLjY4LTcuOC01LjUzLS44Ni0uNDktNi45OC0zLjQ0LTguMTUtMy41NC0xMC45Ny0zLjUzLTQuMjEtLjkxYy0yLjE3LS42OC00LjMxLTEuMzYtNi40NC0yLjA0bC0uMTQtLjA1LTEuMTgtLjEzLTMuOTktMS4wNS0zLjY3LTEuMjItMi44MS0xLjQxYy0xLjY4LS4yNy0zLjMxLS41OS00LjkzLS44NmwtLjIzLS4wOS02Ljg1LTQuMDgtLjcyLS41OS01LjM5LTcuMTItMi4zMS0yLTYuMjEtNS44LTEuNjMtMS4xOC0zLjM1LTIuMjItNC40LTIuMTctMy45NC0yLjI3LTMuOC0xLjg2LTUuNzEtMy43MS0yLjEzLS40Ni0yLjA0LTEuNzMtNC4wMy02LjA3LTEuMzYtMS42OC0yLjU5LTcuNDMuMjgtMi4wOHYtLjE4bC0xLjA5LTUuNDQuNTQtMi42MnYtNS4wOGwuNS0yLjE3LjUtNS40OC4zNi0xLjQxLDEuNC0xMC4wMS40NS00LjIxLjUtNy44LTEuMDUtOC4xMS00LjAzLTcuNjEtMy43Ni00LjI1LTQuMjYtMy42Mi0zLjU4LTIuNDktNy44NC00LjA4LTIuOTUtMS4yMi00Ljc2LTIuMjItNS4xMi0yLjg1LTIuNjMtMS4xMy0yLjQtMS41NC01LjI2LTUuNTctMS41OS0yLjEzLS43Mi0yLjE3LTIuNjgtNS40OC0uOTUtNS44NS0uNTUtMS44Ni0uMjItNi42Mi0uMTgtLjk5LjQ1LTYuNDN2LTEuMjdsLjM2LTYuMTIuMDUtMS42OC0uNDYtNy44LTEuMDQtNy43OWgwbC0xLjc3LTkuMjktMi43Ni0xNC0xLjgxLTcuNzUtMS42My01LjI1LS45MS0yLjU0LTMuMTItNy43OS0zLjc2LTguMDItNS4xNy03LjU3LTIuNjgtMy4wNC01LjA3LTQuOC0yLjcyLTIuMjctOC43NS02LjQ0LTYuOC00Ljk0LTcuNzktNS44OS03LjctNi4wNy02LjM5LTUuMzktMS40LTEuMzEtNi40NC02LjM5LTYuMjUtNy43LTIuNzctNC42Mi0xLjk5LTMuMjItMS4xNC0zLjA0LTIuMTctNC41My0yLjQxLTguMzMtMS43Ni03LjEyLS4zMi0yLjEzLTEuMTgtNS42Mi0uNDUtMy43MS0uNjgtNC4wOC0uNTktNC45NC0xLjM2LTEwLjUxLS41LTcuNy41NC03LjcuODYtNS40OC4zMi0yLjI3LjgxLTQuMy41OS0zLjQ1LjcyLTMuMDMuOTEtNC43MS40NS0xLjcyLDEuMzYtNi4zNCwxLjI3LTcuNTIuNDUtNy43OXYtNi4zNGwtLjI3LTkuMi0uMzItNy43NC0uOTUtMTUuNjN2LS4wOWwtMS4yMy0xNi42My0uMzYtNi40My0uMzItMi0uNS01LjgtLjc2LTMuMzEtLjgyLTQuNDktMi4wOC02LjE2LS41LTEuNjMtMS4xMy0yLjQ5LTMuMjctNS4zOS00LjU4LTUuNjYtMi4xMi0yLjEzLTkuMDYtNy43OS00LjQtMy42Ny03LjkzLTUuMTctNy44LTEuOTUtNy43NC0xLjEzLTcuNjItMi42My0xLjgxLTEtNS44OS0zLjUzLTUuMjUtNC4yMi0yLjUzLTIuMTMtNy44LTYuODktMTUuNDktMTIuOTEtMS4zNi0xLjMyLTYuNDQtNS44OS0yLjIxLTEuODYtNS41OC00LjU4LTUuMDMtMy4yMS0xMC40Ni03LjAyLS44Mi0uNjgtNi45My02LjgtLjgxLS45MS02LjkzLTguNDItNy43OS04LjYxLTcuOC03LjE2LTMuODUtMi45OS0zLjk1LTIuOTUtMS40OS0xLTYuMjUtNC40OC00Ljg1LTMuMjYtLjQ5LjcyLDQuOCwzLjIyLDYuMjUsNC41MywxLjUuOTUsMy45NCwyLjk1LDMuODEsMi45NSw3Ljc0LDcuMDcsOC4yNSw5LjI0LDYuNDMsNy44Ljg2LjkxLDYuOTMsNi44NC44Ni43MywxMC41Niw3LjExLDQuOTQsMy4xMyw3Ljc5LDYuNDQsNy43NCw3LjE1LDE1LjU5LDEyLjk2LDcuNzQsNi44OSwyLjU4LDIuMTcsNS4yMSw0LjE3LDUuOTgsMy42MiwxLjg2LDEsNy44LDIuNzYsNy43OSwxLjEzLDcuODQsMS45NSw3LjUyLDQuOTgsNC4zOSwzLjYyLDkuMDIsNy43NSwyLjA0LDIuMDQsNC41Myw1LjYyLDMuMjIsNS4zLDEuMDksMi4zMi41LDEuNjgsMi4wOSw2LjAzLjgxLDQuNTcuNzIsMy4xNy41NSw1LjguMjcsMS45NS40LDYuNDgsMS4yMywxNi45di4wNGwuNTQsOC4wNy40LDcuMjkuMzIsNy43NC4yNyw5LjJ2Ni4yOWwtLjQ1LDcuNy0xLjMyLDcuNy0xLjMyLDYuMTEtLjQsMS42OC0uOTYsNC43Ni0uNjgsMi45OS0uNTksMy40OS0uODYsNC4yNi0uMzIsMi4zNi0uODYsNS40NC0uNTQsNy43OS41LDcuOCwxLjk1LDE1LjU0LjY4LDQuMDguNDUsMy42NywxLjE4LDUuNzEuMjgsMi4wOSwxLjk1LDcuNzksMi4yMiw3Ljc1LDIuMjIsNC42MiwxLjIyLDMuMTcsMiwzLjI2LDIuNzYsNC41OCw2LjMsNy43OSw2LjU3LDYuNTIsMS40LDEuMjcsNi4zOSw1LjQ0LDcuNzUsNi4xMiw3Ljc5LDUuODksNy43NSw1LjYyLDcuNzUsNS43NiwyLjY4LDIuMjIsNS4wMyw0Ljc2LDIuNTgsMi45LDUuMzQsNy44OCwzLjU0LDcuNTYsMy4xMiw3LjcuODYsMi41NCwxLjYzLDUuMjEsMS44MSw3Ljc1LDEuNDksNy43NSwxLjU0LDcuNzQsMS40OSw3Ljg5LDEsNy41Ni41LDcuNy0uMDUsMS42OC0uMzYsNi4xMnYxLjI3bC0uNDYsNi40OS4xNC45NS4yNyw2Ljg0LjU1LDEuNzcsMSw2LjE2LDIuNjIsNS4zLjkxLDIuNTQsMS41NCwyLjA0LDUuNDQsNS43NSwyLjQ0LDEuNTQsMi42MywxLjE4LDUuMTYsMi44Niw0Ljg1LDIuMjcsMi45LDEuMjIsNy43LDQuMDQsMy41MywyLjQsNC4xNywzLjUzLDMuNzEsNC4yMiw0LjA0LDcuNy44Niw3LjQzLS40NSw3Ljc5LTEsNy44NC0uODYsNi4yMS0uMzIsMS40LS40OSw1LjQ4LS41NSwyLjI3djUuMTJsLS41NCwyLjY4di4xOGwxLjA5LDUuNDktLjI3LDIuMTN2LjE4bDIuNzYsNy44OSwxLjMyLDEuNDksNC4yMiw2LjM0LDIuMjYsMS44MSwyLjI3LjU1LDUuMzksMy41MywzLjg1LDEuOSwzLjksMi4yMiw0LjM1LDIuMTMsNC44OSwzLjMxLDYuMjEsNS43OSwyLjMxLDIuMDQsNS40NCw3LjExLjcyLjY0LDcuMjksNC4zLDUuMTcuOSwyLjQ5LDEuMzEsMy44NSwxLjI3LDMuOTksMS4wNCwxLjEzLjEzLjU5LjE5LDYuMDMsMS45LDQuMTcuOTUsMy41OCwxLjE4LDcuNTcsMi40aDBsLjE4LjA1LDcuNzUsMy4zNSw3LjcsMy45LDcuNyw1LjQ0LDMuMjIsMi42Miw0LjUzLDQuNDksMi44NSwzLjI2LDQuMzUsNy43LDEuODYsNy41Ny0uNTUsNy42MS0uODEsMy44MS0uODEsMy4wOC0uMjcuODEtMS4yNyw1LjM5LS43NiwyLjQtLjk1LDMuNTgtMi4zMSw1LjU3LTEuMjcsMS45NS0xLjksMi4yMi0yLjMyLDEuOTktMS43NiwxLjgxLTEuNzcsMS4wNS0zLjU3Ljk5LTMuOS45MS00LjYzLTEuODEtMi45NC0uOTUtMS45OS0xLjkxLTUuNTctNi44OC00Ljg1LTguNjEtMy00LjIxLTIuNjItMy41Ny01LjE2LTUuMjYtMy4xNy0yLjU4LTQuNjItMy42Mi01Ljg5LTQuMTItOS4zOC03Ljc0LTUuOTgtNy43NS0zLjM1LTcuNTItLjY4LTIuMTMtMS4zMi01LjY2LTEuNDYtNC44NS4wOS0yLjc2LS4wNC0uMTgtMi45NS03LjExLS42LS44Ni03LjMzLTQuNC03Ljc5LTQuNDktMi45NS0xLjg2LTYuMzktNC42Ny02LjEyLTYuMzktMS43Ni0xLjQtNi4xMi01Ljg1LTQuMDQtMS45NS0zLjgtMi4yMi0yLjk1LS44Mi00LjcxLTIuNDktNC43MS0yLjI3LTIuOTktMS40OS03LjctNS40OC0uNzItLjY4LTYuODktNy43NS01LjcxLTcuNzQtMi4yMS0yLjc2LTQuNDQtNS4wMy0zLjM2LTMuNjItMy45OS00LjEyLTcuMDctNy43LTUuNjYtNy42Ni0xLjM2LTIuNjctMi44OS01LjA4LTMuNjMtOS4yLTIuNDktNi4zNC0zLjktNy44LTcuNzQtMTIuNjktMS42My0yLjgxLTQtNy43NGMtLjcyLTEuMzItMS40NS0yLjU5LTIuMTctMy45bC0yLjM2LTMuOS01LjctNy44NC03LjUyLTcuNzVoMGwtLjA5LS4wOS03LjgtNy43LS40NS0uNTQtNi4wMy03LjEyLTEuMTMtMS42My00Ljk0LTYuMTYtMi44NS0zLjcyLTcuOTMtNi42Ni00LjEyLTEuNjMtMy43Ni0xLjcyLTYuNTctLjgyLTEuMTgtLjI3LTcuMDctLjE4LS43My0uMDUtNy40Mi0uMzYtMi4xOC0uMjctNS44OS0xLjI3LTIuODEtMS42My00Ljg1LTIuNjMtMS45MS0xLjk1LjI3LTEuNjMtLjI3LTUuODQuODItMS4xOCwxLjIyLTIuOTUsMS40OS0yLjMxLjI3LTEuMjcsMi42Ny0zLjIyLDIuMTctNC40NC41MS0uNzIuNjgtMS4yMiwyLjM2LTMuNTQuOTEtMi4zNiwxLjQtMy4xNywxLjcyLTQuNzYuNjgtNy43NS0uMDUtLjA5di0uMTRsLTMuOS03Ljc1LTMuMTItNC41Ny0yLjM2LTMuMTMtMy43Ni03Ljc5LTEuNTktMy43Mi0yLTQuMDgtMi45OS00Ljk0LTEuNzctMi44MS00LjEyLTcuNzktLjY0LTMuNTctMS4zMS00LjA4LTIuNDUtNy44LS4zMi0uNDUtNC45OC03LjM4LTIuODEtMy01LjQ4LTQuODUtMi4zNi0xLjcyLTcuOC00LjM5LTcuODQtMy4wOC0yLjA4LS42OC0xMS4xNS0zLjM1LTguMzgtMi4zNi0yLjY3LTEtNi43NS0yLjM2LTcuNy0zLjI2LTEuOTktMS4wNC01Ljc2LTQuNDgtMy45LTMuMTctMy44LTQuNDktMy4wOC0zLjI2LTUuOTgtNy43NS0yLjk5LTQuMy0yLjQ0LTMuMzUtLjk1LTIuMDQtMi40NS01LjgtLjIyLTIuNTQtLjk1LTUuMTItMi4zMS01Ljk4LS45MS0xLjk5LTEuMDQtLjk1LTcuOTgtNi45OC04Ljg3LTcuNjYtNC40LTcuNjEtMS41NC03LjE2LS43Ny04LjQ3LjIyLTcuNDMuMTgtMS41LjU5LTUuNTcuNDUtNy4zNC0uNS04LjI5LS4wOS0uNDktLjU5LTcuNzloMHYtLjIzbC0uMTgtNy4zOC4wNC0uMzIuMjMtNy41Mi43Mi03Ljc5LDEuODYtNy42NiwxLjY4LTMuNGMuNjgtMS40LDEuNC0yLjgxLDIuMDktNC4yMWwuNTQtMS4wOS44Ni0xLjcyLDIuNDUtNS4xMiwxLjQ1LTcuNzV2LS4xNGwtLjg2LTcuODgtMy4zNS03Ljc5LTYuMzQtNy44LTEuMTgtMS4yMi03Ljc5LTYuNTctOC42MS03LjctLjUtMS4zNi0yLjk5LTYuMjEuNS0zLjg1LS4yNy0zLjc3LDEuMjItMi44OS45MS00LjcyLjU5LTEuNTQsMS40LTYuNDguNjgtNy43LS4wNC03LjI1di0uNTRsLS44Mi03LjgtMS4xNy03Ljc1LS42OC0yLjE3LS45LTUuNjEtMi40LTUuNTgtLjQ1LTIuMTctLjg2LjE5LjQ1LDIuMjcsMi40LDUuNTdaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTkyMi4wMSw3MDguMTJsLTEuMzYtNS4yNi0zLjktNi45My0uNjMtLjk1LTcuMjEtNy4xNy0uOTEtLjcyLTYuOTMtNC44LTUuMjEtMi45NC0yLjYzLTEuMzItMi4zMS0xLTUuNDktMi4wMy02LjU3LTIuMjItOC45Ny0yLjEzLTEuMzItLjQxLTYuNDMtLjgxLTMuMDktLjc3LTQuNzEuMjctMy4wNC0uMzItLjIyLjA0LTQuODUsMi43Mi0uMDkuMjItLjMyLjIzLTIuOTksNC43MS0uMDksMy4xNy41LDUuMDMuNTksMi44NSwyLjIyLDQuODEsMS41NCwzLjEyLDYuNjYsNy43NSw3LjQzLDYuMDcsMi4wOCwxLjc3LDUuNjcsNC40LDMuNDksMy4zMSw0LjMsNC4zNSwzLjA4LDMuMzEsNC42Miw2LjcuODYsMS4wOSw1LjYyLDcuNzUsMS40NSwxLjcyLDIuOSwxLjM2LDQuODUsMi41NGguMTlsLjEzLjA1LDcuOTMtMi4zNiwxLjcyLTEuNDksMS41NC0xLjc3LDEuOTktMi41OCwyLjYzLTQuNDguMjctLjgxLDEuOS01LjYyLjUtMi4xMywxLjMyLTMuOCwxLjA0LTMuOTkuMzYtMi40NC40NS01LjM5di0uMTRsLS41OS0yLjUzWm0tLjczLDcuODhsLS4zMiwyLjM2LTEuMDQsMy45NC0xLjMyLDMuODEtLjUsMi4xMy0yLjA5LDYuMjUtMi41OCw0LjM5LTEuOTUsMi41OC0xLjQ1LDEuNjMtMS43NywxLjU0LTcuMzgsMi4xMy00LjY3LTIuNDUtMi45OC0xLjQ1LTEuMDktMS4zMS01LjYxLTcuNzktLjg2LTEuMDQtNC41Ny02LjctMy40LTMuNjMtNC4xMy00LjE3LTMuNDgtMy4zMS01LjgtNC40OS0yLjA0LTEuNzctNy4yOS01LjkzLTYuNzEtNy44LTEuMzYtMi44NS0yLjE3LTQuOC0uNi0yLjU0LS40NS00LjkzLjA1LTMuMTMsMi45LTQuNDksNC43Ni0yLjcyLDIuODEuMzIsNC44NS0uMjcsMi44Ni43Miw2LjM5LjgxLDEuMzYuNDUsOC45MiwyLjA5LDYuNTcsMi4yMiw1LjQ0LDEuOTksMi4zMSwxLDIuNTksMS4zMWMxLjcyLjk1LDMuNDQsMS45NSw1LjA3LDIuODZsNy4xNiw0LjkzLjU5LjUsNy4wNyw3LjAyLjYzLjkxLDMuODUsNi44OCwxLjMxLDUuMDguNTksMi40OS0uNDYsNS4yMVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNDQxLjc5LDU5LjM5bC40MSwxLjczLDEuNzcsNi4yLDMuNzYsNS4zOSwxLjQ5LDIuMzYuODYuODEsNi40Myw2Ljk4LDEuMzIsMS4zMSw1LjM5LDYuMzQsMi4zMSwzLjQ5LDIuNCw0LjE3LDIuNzIsNy44NC44Niw3LjU3LS42NCw1LjI1LS40LDIuNDUtMS4zNiwzLjQtMi40NSw1LjMtMS4xMywyLjIyLTIuMTcsNC41OC0xLDQuNTctLjcyLDMuMTd2My45NGwtLjE5LDMuODkuODIsNC41My4yNywzLjI2LDEuOTksNi44LjIyLDEsLjc3LDIuNCwzLjQ0LDguODMsMS40NSw0LjI2LDEuNjgsNy43LjQxLDYuOThoMHYuMTNsLjA0LjU0LS41OSw3LjkzLS4yMyw3LjY2LDEuNDksNy44LjA5LjE0di4xM2w0LjQ4LDcuOCwzLjM2LDIuODksNC44NSw0LjgxLDIuOSwyLjk4LDQuMzEsNC44MSwzLjQsNi4xMi45NiwxLjU0LDEuNjgsMi42MywyLjksNS4xMiwyLjMxLDIuOCwxMS4xNSwxMi43NGMxLjQ1LDEuODYsMi45LDMuNzIsNC4zNSw1LjU3bDEuNzcsMi4yMiw2LjAyLDUuOCwyLjIyLDEuOTksNS42NiwzLjQ0LDcuNzksNC4zNSw3Ljc1LDMuNCw3LjQ4LDMuNTgsMS4zMi43Nyw2LjY1LDMuOCw3Ljc1LDUuNjIsNi41Nyw2LjAzLDYuODksNy42NiwyLjAzLDIuOSwzLjQ5LDQuOCw4LjIsMTUuNTgsNS4xMiw3Ljc1LDQuMzksNy42NiwyLjA0LDQuOTgsMS4wNCwyLjg1LDMuMTMsNy43LDMuNTgsNS44OSwxLjA5LDEuODYsMy40LDcuODQuMjMsNC40NC0uMTMsMy4wNC0uNDEsNC4yMS0xLjA0LDMuNDl2LjE5bC40LDMuNDgtLjksNC4xMy4wNS4xMy0uMDUuMTQsMi40OSw1LjEyLjI4LDIuNDkuMTMuMTQuMDQuMTgsMi4zNiwxLjY4LDIuNzYsMS4wOSw1LjAzLDIuNzYsNC44OSwyLjI3LDIuOSwxLjE4LDcuNzUsNS4xNywxLjEzLDEuMjIsNi40NCw4Ljc0LDMuNDQsNi43NSw0LjQ5LDcuNzQsNC44LDcuNzksMi44NiwzLjQ5LDIuOTksNC4zMSw0Ljc2LDUuNTcsMS40NSwyLjIyLDUuNjYsNy43MSw1LjM0LDcuNywzLjA4LDUuNTMsMS4zMiwyLjIyLDQuMjEsNy44LDIuMjIsMy41NywzLjIyLDQuMTcsNS4xMiw3Ljg0LjIyLjY4LDMuMjIsNi44OCwxLjg2LDUuODkuNjgsMS45LDMuNDQsNy43OSw0Ljk4LDcuNzkuNTkuODIsNS42Miw2Ljk4LDkuOTIsMTAuNzgsNC4xMiw0LjcxLDMuNjgsNC41NywzLjEyLDMuMjIsNC43Miw1LjM0LDMuOTQsMi40OSwzLjk0LDIuNzIsMy45NCwxLjE3di42LS42bDQuMTMtLjA0LDIuNjMtMS4yMi4wNC0uMTguMTktLjE0LjQ5LTIuNDksMi4wOS0yLjY3LjgxLTUuMjEuNjMtMS4wNCwxLjEzLTQuMy40MS0ydi0uNDlsMS40LTUuODUuMTQtMS43MiwxLjEzLTQuNzEuNDUtMy4wOC43My0zLjUzLjg2LTYuOTMuNC01LjEyLTEuMTMtOC4wMS00LjQ4LTcuOTMtNy44NS02LjcxLTEuNzYtMS4wNC02LjA3LTMuMDgtNS4zOS0yLjI3LTYuODQtMi40LTMuMjEtMS40MS00LjA4LTIuNjMtMy44MS0xLjcyLTIuNDQtMi00LjE3LTYuNzEtLjczLTEtMi40OS03LjUyLjA1LTIuMjItLjkxLTUuNDguMzItMi44NS0uMTgtNC44NS40MS0yLjYzLjQtNS4xMi4yOC0yLC4zNi01Ljc2di0xLjY4bC0uMzYtNi4xNi0uMjItMi4yMi0xLjMyLTkuMS0uODItNC4yMS0uOTUtNS4zOS0xLjk5LTEwLjE1LS41LTIuMTgtMS41OS01LjYxLS43Ni0yLjM2LTEuOS01LjQ0LTMuMTMtNy43NC0uNC0uOTEtMy44MS02Ljg5LTMuOTgtNS43NS0xLjc3LTIuMDgtNi4wNy01Ljc1LTIuNTgtMi4wNC01LjIxLTMuODUtNS40OS0zLjk1LTguODgtNi41Ny04LjkzLTYuNTMtNy43NC02LjMtNC4zNS0zLjgxLTcuNy03LjctMy40NC00LjUzLTIuNzItMy4yNi0yLjc2LTUuNDQtMS40MS0yLjMxLS44MS0yLjEzLTIuMTMtNS41My0uMzItMi40LTEuNTgtNS4yMS0uNzMtNC44LS43Mi0yLjk1LS45MS02LjQ0LS4yNy0xLjMyLTEtNy43OS4wNS0uMDUtLjEzLS44Mi0yLTE0LjU5LS4xMy0yLjE3LS4zNi01LjQ4LjIzLTIuMzYuNC01LjM5LjMyLTEuNTksMS4xOC02LjcxLjM3LTEuNjMsMS4wOC01LjU4LDEuMjctNS40NC40NS0yLjMxLDEuMDUtMy45NSwxLjM2LTYuMzkuOS01LjI2LjE4LTEuNDkuNDYtNy4zOS0uMDUtNy43NC0uMjMtOC4wMi0uMjctNi40My0uNS03Ljc1LS41NC03LjgtLjI3LTIuOS0uMzYtNC44NS0uMzYtMy42Mi0uMjctNC4xMi0uNDktNC40LS4xOC0zLjM1LS44MS01LjM5LS4yMy0yLjQtMS44MS03Ljc5LS4zNi0xLjE0LTIuOTUtNi43MS00Ljg1LTcuNjYtLjE4LS4wOS0uMDQtLjEzLTcuNzUtNy44LTcuNjUtNi40OC0xLjk1LTEuMzEtNS45OC0zLjk0LTcuNzUtMi4wOS03LjctMS4xNy03LjctMi40NS00LjMtMi4zNS0zLjQtMS43My0yLjQ0LTEuNzYtNS4zNC00LjIxLTcuOC02Ljg0LTcuNzUtNi41Ny03Ljc0LTYuNjYtNy44LTcuNDMtNy43OS02LjU3LTcuNzktNC44MS01LjgtMy40NC0xLjktMS4yMy03Ljc1LTYuMzQtNy43NC04LjQ3LTcuNzktOC43OS03LjgtNy4zLTQuNTMtMy4zNS0zLjI2LTIuMzItNy43OS00LjQ0LTYuMzktMi45NS0xLjQ5LS4zNi04LjAyLTEuMjctLjE4LjE4aC0uMjJsLS4xOC4xOC00LjM1LDIuODEtLjA5LjEzLS4xNC4xMy0xLjA5LDQuODUtLjU1LDEuMzItLjE4LDYuMzktLjE0LDEsLjA5LDYuODQtLjA5LDEtLjA0LDYuOC0uMzYsNy43NC0uNzMsNy43LS4xMyw3LjM0LS4wOS40MXYuMThabS45MS0uMzZsLjE5LTcuNTcuNzItNy4wNi40MS04LjM0LjA0LTYuNzUuMDUtMS0uMDktNi44NC4xNC0uODYuMjItNi42MS41LTEuMDUsMS4wNC00Ljc2LDQuNTMtMi44OS42My4xMyw2LjkzLDEuMDQsMS4zMS4zMiw2LjM5LDIuOTQsNy43LDQuMzUsMy4zMSwyLjMxLDQuMzksMy4yNyw3Ljc1LDcuMjUsOC4yOSw5LjQyLDcuMzQsNy45Myw3Ljc0LDYuMzQsMiwxLjMxLDUuODQsMy40NSw3LjY2LDQuNzEsNy43OSw2LjU3LDcuNzQsNy4zOSw3LjgsNi43MSw3Ljc1LDYuNTcsNy43OSw2Ljg5LDUuMzksNC4yMSwyLjQsMS43NiwzLjU4LDEuODEsNC4yNSwyLjMxLDcuODQsMi41NC43Ny4xNCw2LjkzLDEuMDUsMi41NC43Miw1LjMsMS40NSw3LjU3LDUuMDMsNy43OSw2LjU3LDcuNyw3Ljc5LDQuNzYsNy4zOSwyLjk1LDYuNzEuMzIuOTUuMDkuNDksMS43Miw3LjI1LjIzLDIuNC44MSw1LjM1LjE4LDMuNC40NSw0LjM5LjMyLDQuMTIuMzYsMy42My4zMiw0Ljg1LjMyLDIuOS45MSwxMy44Mi40LDguMTUuMjMsNy45OHY3LjdsLS40LDcuMjktLjE0LDEuNDUtLjkxLDUuMjEtMS40LDYuMzQtMSwzLjk5LS40NSwyLjMxLTEuMjcsNS40NC0xLjA5LDUuNTgtLjUsMi4xNy0xLjQsNy43OS0uNjgsNy43OS41NCw3LjgsMi4xMywxNS43Ny45NSw3LjUyLjI3LDEuMzYuOTEsNi40My43MiwyLjk1LjczLDQuOCwxLjU0LDUuMjEuNDEsMi41MywyLjk5LDcuODQsMS40MSwyLjI3LDIuODEsNS41MiwyLjc2LDMuMzYsMy40LDQuNDksNy43OSw3Ljc5LDQuNCwzLjg1LDQuODQsMy45NGMuOTUuODEsMS45NSwxLjU5LDIuOTQsMi40bDE3LjgxLDEzLjE0LDUuNDgsMy45LDUuMjEsMy44LDIuNDksMi4wNCw2LjAyLDUuNjYsMS43MiwyLDMuOTQsNS42NiwzLjc2LDYuODkuNjgsMS41NCwyLjg2LDcuMDcsMi42Nyw3LjcsMS41NCw1LjYyLjYzLDIuNzIsMS40MSw3LjI1di4wNWwuNSwyLjM2LjkxLDUuMjUuODEsNC4yMSwxLjMyLDkuMDYuMTgsMi4xNy40MSw2LjEydjEuNTlsLS4zNiw1Ljc2LS4yNywyLS40MSw1LjA4LS40NiwyLjY3LjIyLDQuODEtLjMyLDIuOTR2LjE0bC45LDUuNDQtLjA5LDIuMjIuMDUuMTgsMi42Nyw3Ljg5LjY0Ljg2LDQuNCw2Ljk4LDIuNTgsMS45OSwzLjcxLDEuNzMsNC4wOCwyLjYzLDMuMzYsMS40NSw2Ljg0LDIuNCw1LjM1LDIuMjcsNi4wMywzLjA4LDEuNjMuOTEsNy44OCw2LjgsNC4yNiw3LjY2LDEsNy41Mi0uMzYsNS4wMy0uODYsNi44NS0uNzMsMy41My0uNDEsMy4wOC0xLjEzLDQuNjctLjE4LDEuNzctMS40MSw1Ljk4LS4wNC41NS0uMzYsMS43Ni0xLjEzLDQuMzUtLjY4LDEuMTQtLjczLDUuMDctMi4wOCwyLjY3LS41LDIuNC0yLjQ1LDEuMDloLTMuNjNsLTMuODEtMS4xOC0zLjY3LTIuNTgtMy45NC0yLjU0LTQuNTMtNS4xMi0zLjEyLTMuMjEtMy42Ny00LjUzLTQuMTctNC44NS05LjgyLTEwLjY1LTYuMTctNy43LTEtMS41OS0zLjk0LTYuMTItMy40NC03Ljc1LS42OC0xLjg2LTEuODEtNS44OS0zLjIxLTYuODktLjM2LTEtLjU1LS43My00LjU4LTcuMDItMy4xNy00LjE3LTIuMjItMy41My00LjIxLTcuNzktMS4zMi0yLjIyLTMuMDgtNS41My00LjcxLTYuODgtNi4zOS04LjY1LTEuNDEtMi4wOS00Ljc2LTUuNjYtMi45OS00LjMxLTIuODEtMy40LTQuOTMtOC4wNi00LjM2LTcuNDMtMy40LTYuNzUtLjc3LTEuMDktNS43NS03Ljc1LTEuMzItMS40NS03Ljg0LTUuMjYtMi45OS0xLjE4LTQuOC0yLjI3LTUuMDMtMi43Mi0yLjgxLTEuMTMtMi4wOS0xLjUtLjM2LTIuNjItMi40LTQuOTQuOTEtNC4wM3YtLjA5bC4wNS0uMDktLjQ1LTMuNDksMS4wNS0zLjQ0LjQtNC4yNi4xMy0zLjA4LS4yNy00Ljk0LTMuNDQtNy43NS0xLjA1LTEuOTUtMy41OC01LjcxLTMuMTMtNy43OS0xLjA0LTIuODYtMi4wNC00Ljk0LTQuNDQtNy43OS01LjEyLTcuNzQtOC4yLTE1LjU0LTUuNTMtNy43OS02Ljk4LTcuNzktNi42Ni02LjAzLTIuMzYtMS43Ny01LjQ0LTMuOTQtNi43NS0zLjg1LTEuMzItLjgxLTEuMDktLjU0LTYuNDMtMy4wOC03Ljg1LTMuNGgwbC03LjY1LTQuMjYtNS40OS0zLjMxLTIuMjItMi4wNC01Ljk0LTUuNzEtMS44MS0yLjIyYy0xLjQ1LTEuODYtMi44OS0zLjY3LTQuMy01LjUzbC0xMS4xOC0xMi43Ny0yLjE4LTIuNjMtMi45NS01LjE2LTIuNjMtNC4xNy0zLjQ0LTYuMjUtNC4zOS00LjgxLTIuOS0zLjAzLTQuODktNC44MS0zLjM1LTIuOTktNC4zNS03LjY2LTEuNDUtNy41N3YtLjA0bC4yNy03Ljc1LjU0LTcuNjEtLjA1LS44NnYtLjA1bC0uNDEtNi45My0uMjctMS40NS0xLjQtNi4zNC0xLjQ5LTQuMzUtMy40NS04Ljg4LS43Mi0yLjIyLS4xOS0xLTIuMDQtNi44NC0uMjctMy4xNy0uNzctNC41My4xMy0zLjgxdi0zLjg1bC43My0zLjEyLjk5LTQuNjIsMy4yMi02LjUzLDIuNDQtNS4zLDEuNDEtMy41OC40NS0yLjQ5LjYzLTUuMzktLjE4LTEuOTktLjY4LTUuODUtMi43Mi03Ljg0LTIuNDktNC4zNi0yLjMxLTMuNTMtNS40OC02LjQzLTEuMzYtMS4zNi02LjQ0LTYuOTctLjgxLS44Mi0xLjQ1LTIuMjItMy43Ni01LjQ4LTIuMDQtNy40OC4wNC0uMjdaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTkxNy4yNSw3MDIuODZsLS41LS45LTQuNzEtNi45Ny0zLjEzLTMuMTMtNS43MS00LjcxLTIuMTMtMS40OS0zLjQtMS45LTQuNDgtMi4yMi01LjAzLTIuMTctNC4yMS0xLjU1LTEwLjI0LTIuNC0zLjg1LS4zMi00LjktLjYzaC0uMDlsLTIuODYuNS00LjM5LjI3LTMuNTQsMi4zMS0xLjIyLjYzLS4wOS4wOS0uMTQuMDktLjYzLDEuMzEtLjcyLDUuMjEuMjcsMi43NiwzLjU4LDcuODgsNi45Nyw3Ljc1LDcuMzQsNi4yNSwxLjU0LDEuNTQsNi4yLDUuNzUsMS45NSwxLjk1LDUuODQsNi4zNCwxLjQ1LDEuNCw2LjM5LDcuOTcsNy43NSw1LjEyLjIzLS4wNS4xOC4wOXYuNTktLjU5aDBsMy44MS0xLjQsNC4xNy0xLjk1Ljg2LTEuMTMsMi45OS00Ljg1LDEuNzYtMy43Ni44Ni0xLjM2LDEuMzItMi43MiwxLTIuODUuMjctMSwuODYtNS43MS4xOC0yLjEzdi0uMTRsLTEuODEtNy43OVptLjc3LDkuODhsLS44Niw1LjYyLS4yMy45NS0uOTUsMi43Mi0xLjI3LDIuNjgtLjg2LDEuMzItMS43NywzLjgtMi45NSw0Ljc2LS44MSwxLjA5LTMuOCwxLjc2LTMuNjMsMS4zMi03LjU2LTQuOTgtNi4yMS03LjhjLS40OS0uNDktMS0uOTUtMS40OS0xLjRsLTUuOC02LjM0LTItMi02LjIxLTUuNzUtMS41NC0xLjU0LTcuMy02LjE3LTYuOTctNy44NC0zLjQ1LTcuNjUtLjIzLTIuMzJ2LS4wNGwuNzctNS4xNy40NS0uOTEsMS4wNC0uNDksMy42Mi0yLjMxLDMuOTktLjIyLDIuOS0uNSw0LjguNjMsMy43Mi4yNywxMC4xOSwyLjQsNC4xMywxLjQ5LDUuMjUsMi4zMiw0LjI2LDIuMDgsMy4yNiwxLjg2LDIuMTMsMS40NSw1LjYxLDQuNjIsMi45OSwyLjk5LDQuNzEsNi45My40NS45MSwxLjc2LDcuNTItLjE4LDEuOTVaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTQ1My4zOSw2NC4zNGwxLjMxLDMuMyw1LjQ0LDguMDcsNC41Myw1LjM1LDcuNjIsMTAuMSwzLjg1LDcuNDIsMi40LDcuNTMsMS4wNCw3LjQ4LS40NSw3LjM4LTEuNTQsNS4xNy0uOTUsMi40LTEuMDksMy4xMy0yLjEyLDQuNjctMS42Myw4LjI0LjQ1LDguMDcsMi41LDcuOTcsMi45OSw1LjY2LDEuMTMsMi4zMSw0LjEyLDcuNjYsMy4zNiw3LjUyLDEuNjMsNy40OC4zNiw3LjYxLS4yNyw3Ljc5LjE4LDcuOTMsMS45NSw4LjA3LDQuNTcsOC4wNyw3LjI5LDguMDIsNi42Niw3LjY1LDIuNTgsMy4zNiwzLjY3LDQuNDgsNC4xNyw0LjY3LDMuMDgsMy4xMiw3LjIxLDcuNyw1LjE3LDYuMDMsMS40LDEuNzMsNi43NSw3Ljc5LDkuMzcsNy45Myw2LjA3LDMuOSw1LjM5LDMuOTQsMi4zMSwxLjU0LDcuNTcsNi4xMiw3Ljg0LDcuMTIsOC40OCw4LjI1LDYuOTcsNy43NSw2LjQ4LDcuNjEsMS4yMiwxLjg2LDQuNDUsNS44NCwzLjM1LDQuOTQsMi4zNiwyLjg1LDQuODksNy41NywzLjMxLDcuNTIsMS4xOCw0LjIyLDEuMTMsMy42MiwyLjksNy43NSw0LjMsNy44OCwzLjcyLDcuNywxLjI3LDcuMzkuNzcsMi44MS42Myw1LjM1LDQuNTcsNi44OC45NiwxLjIyLDcuMDYsNS43NiwyLjQ5LDIuMTMsNS4wMyw0LjY3LDIuMTgsMi44MSw0LjUzLDcuNjEuODYsMS42MywyLjQ1LDYuMDcsMS45NSw0LjM1LDEuNSwzLjQ0LDEuOSwzLjYzLDEuOTUsNC4yMSw0LjUzLDcuODgsMS4zMiwxLjgxLDMuNCw1Ljg5LDUuMjEsNy44NCw1LjU3LDcuNywxLjQ5LDIuMTcsNC4zNSw1LjUzLDMuMyw1Ljc2LDEuNzYsMi4wOCwzLjU4LDUuMywyLjU0LDMuNDQsNy42Niw2Ljk4LDMuOTksNi45OC0uMzYsMy4yNS0uMDUuMjguMDUuMDQtLjA1LjEzLDEuMTMsMy45NS42OCw1LjU3LjYzLDIuMzYsMy41Myw3Ljk4LjU0Ljg2YzEuMjcsMS44MSwyLjU0LDMuNjcsMy44MSw1LjQ0bDEuMTcsMS44MSw2LjY2LDcuOTMsNy4wNyw3LjYxLDIuNDEsMi44MSw1LjUyLDUuMDMsMi41OCwyLjU4LDQuNzEsMi4yNywzLjYyLDEuNS4yMy0uMDUuMTguMDUsNS4wMy0xLjM2LDMuODUtMi40OSwxLjE4LTEuOS4zNi0xLjE4LDIuMTgtMy45OCwxLjE0LTMuNTgsMS4wNC0yLjA5LDIuMTctNi44OSwxLjIyLTUuODQuODEtNy4wNy4xOS0yLjA5LTEuMTgtOC4zMy0xLjE4LTIuMTMtNC40OS01Ljk4LTMuNjMtMy4xNy04LjAyLTQuNjMtMTEuNTktNC4wOC00LjI3LS43Mi02LjQ3LTItMS41NC4wNS00Ljk0LTEuNTQtMi4wOC0xLjIzLTUuNTgtNS44LTEuNTktNy4yNS0uNzItNy4yOS4xMy0uMzYuNDEtNy42MS43Ny03LjA2di0uNTVsMS4wNC02LjExLjA5LTEuNTQuNjgtNS40OC4xOC0yLjQ5LS4wNS01LjM1LS4xOC0yLjU0LS41NS02LjA3LTEuMzEtOS4xMS0uNS0yLjcyLTEuNDUtNy4xMi0xLjQ1LTYuMy0yLjE3LTcuODQtMi43Mi04LjExLTMuNTgtNy42Ni00LjM1LTcuODgtNi42Ni03Ljg5LTEuNDUtMS40LTguNDctNi42Ni0xMS41MS03Ljc1LTExLjc4LTguMzgtNy4wNy01LjIxLTExLjMzLTkuNDctNC4xNy00LjE3LTQuMTYtMy42Mi0zLjQtNC41My0yLjI3LTIuOTUtLjg2LTIuOTktLjA5LS4yMmMtLjc3LTEuNDEtMS40NS0yLjcyLTIuMTctNC4wOGwtMS4yNy02Ljg5LS4zNi0uOTEtLjQxLTIuOTgtLjc3LTQuMzV2LS43N2wtMS4xNy03LjA3LS4xNC0yLjA0LS45MS01LjY2LS4yMy0zLjM1LS42My00LjQ5LS40MS00LjMtLjQ5LTMuNDktLjY0LTUuMzktLjMxLTIuMjItLjQxLTcuNjEuNjgtNy41Ni45MS00LjUzLjU0LTMuMTMuNzctMy4yMi45OS00LjQ5LDMuNzItMTQuMDUsMS40MS02LjQ4LjUtMi45OS40MS00LjA0LjI3LTMuODUuMDktMy43Mi0uMDUtNy43OS0uMDgtNC4xMi0uMzctNy44LS40OS03Ljc0LS41OS03Ljc5LTEuNDUtMTUuNTQtLjg2LTcuNzktLjI3LTItMS4wOS01Ljg0LS42My0xLjg2LTEuODEtNi4wNy0zLjgxLTcuOTgtLjY4LTEuMDgtNS42Ni03LjAzLTIuMzYtMi4zNi02LjE2LTUuNTctMS42OC0xLjQ1LTguMDItNS4zOS0zLjgxLTEuMjctNC4yNi0xLjIyLTcuNzQtMS4yNy0zLjY3LTEuMTMtMy45NC0xLjEzLTcuNDctMy41NC0yLjc3LTItNC44OS0zLjQtMS44MS0xLjQ5LTkuMDItNy43NS00LjY3LTMuOTgtNC4yNS0zLjc2LTMuNDUtMi45OS00LjcxLTQuNzEtMy4xMy0yLjk1LTUuNDgtNC44OS0yLjMyLTEuOTUtNS4zOS0zLjM2LTIuNjMtMS41NC03LjY2LTQuMDgtNi43NS00LjYyLS44Mi0uNjQtNy41Ny02LjkzLTcuOTMtOC41Mi03Ljc5LTcuNDMtMS4zNi0uOTUtNi42NS00LjEyLTguMDItMy4xMy0uODItLjE4LS4yNy0uMDRoLS4wNGwtLjE0LS4wNC0zLjcxLjYzLTMuNDUuNTQtLjk1LjY4LTMuNDksNC40OS0uNjgsMy4xMy0xLjA0LDMuMDMtLjU1LDQuOTgtLjM2LDIuMzYtLjM2LDcuNDMtLjIyLDYuMDMsMSw4LjAxLDEuOTUsNC43MlptMTg1LjQ5LDEzNC42MWwuMzYsNy43NS4wOSw0LjA3LjA1LDcuNzQtLjA5LDMuNTQtLjI3LDMuNzctLjM2LDMuOC0uNSwyLjg1LTEuMzYsNi4zLTMuNzIsMTQuMDQtMSw0LjU4LS44MSwzLjI2LS41NCwzLjIyLS45MSw0LjUzLS43Niw3Ljk3LjQ1LDguMDIuMzYsMi40LjYzLDUuNDQuNDYsMy4zNi40MSw0LjM1LjYzLDQuMzkuMjMsMy4zNS45MSw1LjU4LjA5LDIuMDQsMS4xOCw2LjkzLjA0Ljc3Ljc3LDQuNzYuNSwzLjIyLjMyLjk1LDEuMjcsNy4xNi4wOS4xOGMuNzcsMS4zNiwxLjQ5LDIuNzcsMi4yNyw0LjE3bDEuMDksMy42MywyLjUzLDMuMTcsMy41NCw0LjcxLDQuMzUsMy44NSw0LjE3LDQuMTYsMTEuNTUsOS42Niw3Ljk3LDUuOTMsMTEuMDUsNy43OSwxMS40MSw3LjcsOC4yNSw2LjQ4LDEuMTMsMS4wNCw2LjQ4LDcuNyw0LjEyLDcuNDQsMy40LDcuMzQsMi43Miw3LjkzLDIuMTMsNy43LDEuNCw2LjI1aDBsMS40NSw3LjAyLDEuNzYsMTEuNTUuNTQsNS45My4xOCwyLjM2LjA0LDUuMTctLjE4LDIuMjctLjY4LDUuNDgtLjA5LDEuNDYtMS4wNCw2LjI5di41NWwtLjg2LDcuMjktLjMyLDYuOTgtLjE4LjU5di4wNWwtLjA1LjEzLjgxLDcuODQtLjA0LjEzLDEuOTUsOC41Miw2LjQzLDYuNjEsMi42OCwxLjYzLDUuOTgsMS44NiwxLjU0LS4wNSw1Ljg5LDEuODEsNC4yMS43MywxMS4wNiwzLjg1LDcuNTIsNC4yNSwzLjI2LDIuODEsNC4xMiw1LjQ5Ljk1LDEuNzIuOTUsNy4yLS4xMywxLjczLS44MSw2LjgtMS4zNiw2LjQzLTEuNzcsNS40OS0xLDIuMDgtMS4xOCwzLjYzLTIuMjcsNC4xNy0uMzIsMS4wNC0uNzMsMS4wOS0yLjYzLDEuNjgtMy43Ni45OS0yLjY3LTEuMDktNC4zMS0yLjA5LTIuMDktMi4xMi01LjM5LTQuOS0yLjQtMi43Ni03LjEyLTcuNy02LjQ0LTcuNjYtNS4yMS03LjUyLTMuMzYtNy41Mi0uNTQtMS45NS0uNjgtNS41OC0xLjA5LTMuODUuNDktMy44LS4wOC0uMTl2LS4yM2wtNC44MS04LjI5LTcuNjUtNi44NS0yLjM2LTMuMzEtMy41NC01LjIxLTEuNjMtMS45LTMuMzUtNS43NS0uMDktLjE0Yy0xLjQ5LTEuOTUtMi45NS0zLjgtNC40LTUuNjFsLTcuNzQtMTAuOTMtNC4zNS02LjU3LTMuNC01LjkzLTEuMzYtMS44Ni00LjM5LTcuNTctMS45NS00LjE3LTEuODYtMy41OC0xLjQ1LTMuNC0xLjk1LTQuMzUtMi40OS02LjA3LS45NS0xLjg2LTQuNjItNy44LTIuMzYtMy4wOC01LjQtNS4wOC0yLjYyLTIuMjItNi43NS01LjQ4LS42OC0uODYtNC4xNy02LjMtLjUtNC41My0uODEtMi45NS0xLjEzLTYuODgtLjIyLS45NS0zLjktOC4xMS00LjE3LTcuNjEtMi44NS03LjY2LTEuMTMtMy40NC0xLjEzLTQuMjYtMy40OS03Ljk3LTUuMTItNy45Ny0yLjQ1LTIuOS0zLjMxLTQuOTQtNC40NC01LjgtMS4yMi0xLjg2LTYuODUtOC4xMS02Ljg4LTcuNjUtOC42MS04LjM4LTcuODQtNy4xMi03Ljc5LTYuMy0yLjQ5LTEuNjMtNS4zNS0zLjk0LTUuODktMy44MS05LjAxLTcuNTYtNi43MS03LjY2LTEuNDEtMS43Mi01LjIxLTYuMTItNy4yOS03LjgtMy4wNC0zLjA4LTQuMDctNC41OC0zLjU4LTQuMzktMi42My0zLjQtNi43NS03Ljc5LTcuMDctNy43LTQuMjEtNy4zOS0xLjc3LTcuMzktLjE4LTcuMzguMzItNy44OC0uMzctNy43OS0xLjcyLTguMDItMS4wOS0yLjYzLTIuNDktNS41My00LjE3LTcuNy0xLjEzLTIuMzEtMi44MS01LjI2LTIuNDUtNy42Ni0uMzEtNy4yNSwxLjQ1LTcuNDMsMi00LjM1LDEuMTMtMy4yMiwxLjA0LTIuNDksMS42My01LjQ0LjU0LTguMi0xLjE0LTcuOTgtMi40OS04LjAyLTQuMDMtNy45My03Ljk4LTEwLjU2LTQuMzktNS4yMS01LjIxLTcuNjUtMS4xOC0zLjA4LTEuODYtNC4zNS0uNTktNS41My0uMjgtMS43Mi4xOC01Ljg0LjM2LTcuMi4zMi0yLjI3LjUtNC42MywxLTIuODEuNTktMi44NSwyLjg2LTMuNDksMi41OC0uMzYsMy4yMi0uNTQsNy42MSwyLjksNi41Nyw0LjA0Ljk1LjYzLDcuNjEsNy4yMSw4LjAyLDguNjEsNy43NSw3LjEyLjk5Ljc2LDYuODQsNC43Niw3Ljg4LDQuMTcsMi41NCwxLjQ5LDUuMDMsMy4wOSwyLjI3LDEuOSw1LjM5LDQuODEsMy4wMywyLjksNC43Niw0Ljc1LDMuNTgsMy4wOSw0LjIxLDMuNzYsNC43NiwzLjk4LDguOTcsNy43OSwxLjk1LDEuNTksNC45OCwzLjQ0LDIuNzYsMi4wNCwxLjc3LjkxLDYuMjUsMi45LDQuMywxLjI3LDMuNjcsMS4xOCw3Ljg0LDEuMjcsNC4xNiwxLjIyLDMuMzYsMS4wNSw3LjM4LDUuMDMsMS41OSwxLjMyLDYuMDcsNS40OCwyLjEzLDIuMTMsNS40NCw2LjcuNDUuNzIsMy42Nyw3LjU3LDEuODEsNi4xMi41NCwxLjQ1LDEuMDQsNS43Ni4zMiwyLjEzLDEuNTQsMTUuMTguNzMsNy43NS41OSw3Ljc1LjUsNy43WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im05MTMuNDUsNzA3LjNsLTEuMzEtNC40NC40NS0uNC0uNS4zMS0zLjEyLTQuODktMi40LTIuODktNS40NC00LjQtNS45NC0zLjQ5LTEuOTUtLjk1LTEuNjgtLjczLTExLjEtMy4zMS0yLjg1LS4xNC01LjcxLS41OS0uMDkuMDRoLS4wOWwtMi4wNC43Mi0zLjg5LDEuMDUtLjA5LjE0LS4xNC4wNC0yLjgxLDMuODV2LjEzbC0uMDkuMTQuMDksMS4yNywyLjMxLDYuNzQsNC4zNSw1LjA3LDIuMDQsMi42OCw1Ljc1LDUuNzEsMS44NiwyLjA5LDUuOTMsNS45Myw3Ljg4LDcuNDcsNC41MywyLjEzLDMuMjIsMS45NS4xOS0uMDQuMjIuMDhoMGwxLjMxLS42MywyLjAzLTEuMjcsMi45NS0xLjUsMS42My0xLjE4LDIuMDgtMy4yMSwxLTIuMDksMS4yMi0zLjYyLjg2LTQuMjUtLjA0LS4wOS4wNC0uMDktLjY4LTMuMzVabS0uOTksNy40N2wtMS4xOCwzLjQ5LS45NSwyLjA0LTIuMTMsMy4yNi0xLjE3LjgyLTMsMS40OS0xLjk5LDEuMjctMS4xOC41NC0yLjk1LTEuODEtNC42Ni0yLjIyLTcuNjEtNy4yNS01Ljg5LTUuOTMtMS45LTIuMDktNS42Ni01LjYyLTIuMDQtMi43Mi00LjM5LTUuMTItMi4xNy02LjQ3LS4wNC0uODIsMi42My0zLjYyLDMuNzEtMSwyLjA4LS43Miw1LjUzLjU0LDIuODUuMTQsMTAuODMsMy4yMiwxLjcyLjcyLDEuODYuOTYsNS44LDMuNCw1LjM1LDQuMjYsMi4zMSwyLjgxLDMuMTcsNC45NCwxLjIyLDQuMjEuNjMsMy4yNy0uNzYsNC4wM1oiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNzM3LjAyLDU1NS43OWwzLjA4LDcuNzksNS42Miw3Ljg0LDYuNjYsNy43MWgwbC41OS42Myw3Ljk3LDYuMzQsNC41NywxLDMuMTcuODF2LjU5LS41OWwuMTktLjA0LjEzLjA0LjU0LS4yNy43My0uNTksNC4wNy0yLjQ5LDIuNjMtMi41OC45NS0xLjkxLjMyLTEsMS44MS00LjcxLjg2LTMuMjIuNjgtMy4wOC43My00LjYyLS4wNS0uMDUuMDUtLjA5LS40NS0yLjktLjk2LTUuMDMtMy45OC01LjMtMy4xMi0yLjU0LTQuODEtMi42Ny00LjE3LTEuNTQtMy42Ny0xLTYuMTItLjkxLTEuNzcuMTQtNS44OS4yNy0yLjEzLDEuMDktMy41OC44MS0uMTMuMDktLjEzLjA1LTMuMzYsNC42Ny0uNzIsNC42Mi0uNDEsMS45OXYuMTRsLjA5LjVabS44Mi0uNTlsLjM2LTEuODYuNzMtNC41MywzLjA4LTQuMjUsMy42My0uODIuMzYuNS0uMjctLjU1LDEuOTktMS4wNCw1LjY2LS4yMmguMDVsMS41OS0uMTMsNS44OS45MSwzLjU4Ljk1LDQuMDgsMS40NSw0LjY2LDIuNTksMy4wOSwyLjUzLDMuODUsNS4xMiwxLjI3LDcuNTYtLjY4LDQuNDQtLjY4LDMuMTctLjgyLDMtMS44MSw0Ljc2LS4yOC44Ni0xLDEuOTUtMi40LDIuMzEtMy45LDIuNC0xLjA5Ljc3LTMuMDQtLjgxLTQuNDgtMS03LjYxLTYuMDctNy4yMS04LjI1LTUuNTctNy43OS0zLjA0LTcuNzV2LS4xOFoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNjQxLjA2LDM3Ny4zMmwxLjE4LDUuODkuNjgsMS45NSwxLjI3LDIuNDksMi45LDUuMywyLjQ5LDUuMzksMS4xOCwyLjI3LDEuMTgsMy44NmMuNCwxLjMxLjg2LDIuNjIsMS4zMSwzLjk0bDMuNjMsNy45MywyLjg2LDMuMjIsMy43MSw0LjUzLDQuMDQsNC4zLDIuMzEsMy4zMSwyLjQsNC43NiwxLjU5LDMsMS40NSwzLjQ0LDQuMzUsMTIuMSwzLjI2LDcuNzUsMy4zMSw3Ljc1LDMuODUsNy43OS43NywxLjQxLDMuOCw2LjM5LDMuOTksNi4wNywxLjQ1LDEuNzIsNi40OCw3LjUyLjYzLjMyLDcuMDcsNC45OC4yMi0uMDUuMTkuMDksMy42Mi0xLjM2LjE4LS4xNCwyLjc3LTMuNjIuODEtLjYzLjU5LS45NSwxLjcyLTQuNjIuMjMtMS41OSwxLjUtNC42My42OC0zLjIyLjcyLTMuMDMuNzItNC44MS4xOS0yLjEzLS4xNC03LjkzLS45NS04LjY5LTEuNDktOS4yOS0yLjMxLTEwLjk2LS43Ny0yLjktMi42OC03LjQ3LTIuMTMtNS4xMmMtMS0yLjMxLTItNC42Mi0zLTYuOTNsLS40OS0uODYtLjg2LTEuMzYtNC40NC02LjQ0LTIuMDQtMi40NC01LjcxLTUuMzktMi4xMy0xLjYzLTUuMTItMy40OS0yLjY4LTEuNjMtMi41NC0xLjQxYy0xLjcyLTEuMDQtMy40OS0yLjA0LTUuMjYtMy4wOGwtOC4wNi00LjYyLTcuMzgtMy45OC0xNS42OC0xMS41MS0uNjgtLjM2LTcuMTYtMS4wNC0xLjYzLjA5LS4xNC4yNy0uMjcuMDUtLjM2LDEuNDUtMS42OCw0LjIydi4wOGwtLjA1LjE0LjU0LDMuNThabTEuOTktNy42NmwuMzItMS4yNywxLjE0LS4wOSw3LjE2LDEuMDguNTQuMjcsMTUuNCwxMS4zNyw3Ljk3LDQuMzUsNy42MSw0LjM1YzEuOTUsMS4xMywzLjksMi4yNyw1Ljg5LDMuMzlsMS44NiwxLjA1LDIuNjMsMS42Myw1LjA3LDMuNDUsMi4wNCwxLjU5LDUuNjYsNS4zLDEuOTksMi4zNSw1LjI1LDcuNzUuNDYuNzdjMS4wNCwyLjM1LDIuMDMsNC42NiwzLjA0LDYuOTNsMi4wOCw1LjA3LDIuNjMsNy4zOS44MiwyLjk5LDIuMjYsMTAuODMsMS40OSw5LjIuMzIsMy4xNy42Myw1LjQ4LjEzLDcuODQtLjE4LDIuMDgtLjczLDQuNzItLjcyLDMuMDMtLjc3LDMuNDktMS4zNiw0LjIxLS4yNywxLjc3LTEuNjMsNC4zOS0uNTkuOTEtLjgxLjU5LTIuNTgsMy40OS0zLjMsMS4yNy02Ljg5LTQuODUtLjcyLS40NS03LjU3LTguODgtMy45OS02LjAyLTQuNTgtNy43NS0zLjgtNy43NC02LjU3LTE1LjQ1LTQuMzUtMTIuMDktMS40NS0zLjQ5LTEuNTktMy4wNC0yLjQxLTQuNzEtMi40LTMuNDQtNC4wOC00LjM5LTMuNjctNC41My0yLjk0LTMuMzEtMy40NS03LjUyYy0uNDUtMS4zNi0uODYtMi42OC0xLjMxLTMuOTRsLTEuMTMtMy44MS0xLjIyLTIuNC0yLjU0LTUuNDQtMi45LTUuMy0xLjE4LTIuMzYtLjY4LTEuODYtMS4xOC01Ljg1LS41LTMuNDksMS42My00LjA4WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im02MzYuOCwxODMuMzZsLS44Ni03Ljc5LS45OS03Ljc1LS41NS0yLjgxLS42My00Ljk0LTEuMTgtNC42Mi0uNTktMy4xNy0yLjU0LTcuMTYtLjMyLS42OC00LjkzLTcuNzktMi41OC0zLjE3LTQuNjItNC42Ni0zLjIxLTIuOTUtNy45My01LjYxLTcuNzUtMi41NC0zLjk4LS43My0zLjc2LS43My03LjctMi4yMi03LjctMy4xNy03Ljc0LTQuODEtMTAuNjEtOC4yOS00Ljk0LTQuMTctMy45My0zLjU3LTMuODEtMy4zNS00LjIxLTQuNC0zLjU4LTMuNTQtNC40NC00LjI1LTMuMzYtMi45LTguMDEtNC45NC03LjUyLTMuMjYtNy43MS00LjMtNy43OS01LjEyLTMuNjItMi43Mi00LjE2LTMuNzEtNS4yMS00LjAzYy0uODYtLjc3LTEuNzMtMS41LTIuNTQtMi4yMmwtLjA5LS4wOS00LjA4LTEuODYtMy44LS43Mi0uMDkuMDQtLjA5LS4wNC0zLjY3LDEuMTMtLjA5LjA5LS4xMy4wNC0zLjQ5LDQuNTMtLjY4LDIuOTQtLjYzLDMuNDktLjA1LjY4Ljg2LDcuODQuMTQuNDEsMy4zLDcuNDcsNC41OCw3Ljc5Ljg2LDEuMzIsNC44LDYuNDQsNS4wOCw3LjY1LDIuNDUsNS45NC44NiwxLjc2LDIuMTgsNy43LDEuMjIsNy43NS4wOSwyLjQ5djUuMTZsLS4yMywyLjIyLTEuMjMsNS41My0uMDguODEtLjksMy4yNi0uNzMsMi44NS0uMzIuOTEtLjU5LDYuMDctLjI3LDEuNjN2LjEzbDEuMDQsNy44NC44NywyLjA5LDIuNTQsNS43MSw1LjI1LDguODgsMy45OSw2LjYxLDMuOTQsNy44OCwxLjUsNy40My40LDkuOTMuMDksNS42MS40NSwyLjcyLjYzLDUuMjEsMi4zMSw1LjUzLjgxLDIuMjIsMS40MSwyLjEzLDMuOTQsNS43MSwzLjg1LDQuODUsMi4xOCwyLjk1LDUuOTgsNy43NCw3LjM5LDcuNzksNy43NSw3LjU2LjY0LjczLDcuMTEsOS4wNiw0LjI2LDUuODQsNy4wNyw3LjgsNC4yNiwzLjg1LDMuNzYsMy45NCwzLjk4LDMuNjIsMy41OCw0LjA4LDQuMjEsNC4zLDMuMzUsMy40OSw0LjQ0LDQuMjYsMy43NiwzLjQ5LDMuOTgsMy44OSw0LjUzLDMuODUsMy4yNywzLjIxLDUuODksNC41MywxLjk1LDEuODYsNC4xMywyLjM2LDMuNjcsMS41NC4xOC0uMDQuMTMuMDRoMGw0LjI2LTEuNC4wOS0uMTkuMTgtLjA5LDEuNTQtNC4yMi44Ni0uOTEuMDktLjIzLDEtNi43LjA5LTcuNzktLjA1LS4xOC41OS0uMTktLjU5LjA1LS40LTcuMzh2LS40NmwtLjY0LTcuMzh2LTEuMDRsLS43OC02Ljc1LS4xMy0xLjk1LS44MS01Ljcxdi0yLjg2bC0uMzItNC45My40MS0yLjYzLjU5LTQuOTguNC0xLjczLDEuNjgtNi45OCwxLjYzLTYuODQsMS4zNi00LjguNzctMi45NCwxLTMuMDQsMS43Mi02LjAyLDEuNTQtNi4zOXYtLjA1bC4wNS0uMTguNzMtNy43LjE4LTcuOC0uMDktNy43NS0uMzItNy43OS0uNzctMTAuODMtLjQ1LTQuNjdabS43NywzMS4wNGwtLjE5LDcuNzUtLjc3LDcuNjZ2LjI3bC0xLjQ5LDYuMjEtMS43Niw1Ljk4LS45NSwzLjA0LS43NywyLjk5LTEuMzYsNC43Ni0zLjc2LDE1LjU0LS41OSw1LjEyLS40MSwyLjY4LjI3LDUuMDMuMDUsMi44MS44MSw1Ljc5LjE0LDIuMDQuNzYsNi41N3YxLjA5bC42Myw3LjI5di40NWwuNDEsNy44LS4wNSw3LjU3LS45NSw2LjY2LTEsMS4xMy0xLjQ1LDMuOTktMy44NiwxLjMyLTMuNC0xLjQxLTQuMjEtMi40LTEuNzItMS42OC01Ljg5LTQuNTMtMy4yNi0zLjIxLTQuNTMtMy44NS0zLjk5LTMuOS0zLjgxLTMuNTQtNC4zOS00LjIxLTMuMzUtMy40OS00LjE3LTQuMjUtMy41OC00LjA4LTQuMDMtMy42Ny0zLjc2LTMuOTUtNC4yMi0zLjgtNi45OC03LjctNC4zLTUuODktMS40NS0xLjktNi4zNC03LjkzLTcuOC03LjYxLTcuMjktNy43LS40MS0uNTQtNy43OS0xMC4xNS0zLjgtNC44LTUuMy03Ljc5LS43Ny0yLjA4LTIuMzEtNS42Mi0uNTktNS4wMy0uNDYtMi40OS0uMDUtNS42Ni0uMTMtMi4wOS4wNC0uMDQtLjA0LS4xOS0uMzItNy42MS0xLjU0LTcuNzktMy45NS03Ljg4LTkuMjQtMTUuNDUtMy40LTcuNzktLjA5LS44Mi0uOS02Ljc1LjI3LTEuNTUuNjMtNi4yMS4yMi0uNTkuNzMtMi45OS45LTMuMTcuMTMtLjkxLDEuMjMtNS41My4yMy0yLjMxdi01LjNsLS4wOS0yLjQ5LTEtNi4zOXYtLjA4bC0uMDUtLjE0LS4xOC0xLjIyLTIuMjItNy45My0uODYtMS43Ny0yLjQ1LTUuODktNS4xNi03Ljg0LTUuNjItNy43LTQuNTMtNy43LTMuMzEtNy41Ny0uOTUtNy43LjA1LS41OS41OS0zLjQ5LjY4LTIuODUuNTUtLjY0LDIuNzItMy41OCwzLjQ0LTEsMy41OC42OCwzLjk4LDEuODEsMi40LDIuMTMsNS4yMSw0LjAzLDQuMTcsMy43MSwzLjY3LDIuNzYsNy44OCw1LjIxLDcuNyw0LjI3LDcuNzEsMy4zNSw3LjcsNC43MSwzLjM1LDIuOTUsNC40LDQuMjEsMy41OCwzLjU0LDQuMjEsNC4zOSwzLjg1LDMuNCwzLjk0LDMuNTgsNC45NCw0LjE3LDEwLjY1LDguMzMsNy43OSw0LjgxLDcuODQsMy4yNyw3Ljc5LDIuMjcsMy44NS43NiwzLjg1LjY4LDcuODQsMi42Myw3LjUyLDUuMzUsMy4yMiwyLjg5LDQuNTMsNC42MiwyLjU0LDMuMDQsNC44OSw3LjcuMjcuNTksMi41NCw3LjAyLjU5LDMuMjIsMS4xOCw0LjUzLjYzLDQuOTguNTUsMi44MSwxLDcuNzUsMS4yNywxMi40MS43NywxMC44My4zNiw3Ljc0LjA5LDcuNzVaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTkwNi4xOSw3MDIuNzJsLTUuMTItNi40OC0xLjg2LTEuMzYtNS45OC0yLjcyLTQuNDQtMS42M2gtMy40NWwtNC42Ni0uMzYtLjE0LjE0aC0uMjJsLTMuMDQsMy4yMi0uNzcuNjN2LjE5bC0uMTQuMTguMDkuOTUuNjgsMS4wNGMxLjIyLDIuMjcsMi40OSw0LjQ5LDMuNzEsNi43bDYuNjYsNy43OSw1LjM0LDQuOTQsNy44LDMuNDkuMTgtLjE0LjIyLjA5LjI3LS4xNC41OS0uNDEsMy43Ni0zLjRjLjkxLTEuNDksMS44Ni0yLjk5LDIuNzYtNC40OGwuMDUtLjIydi0uNTVsLTIuMzEtNy40N1ptMS4zNiw4LjA2Yy0uODYsMS4zNi0xLjY3LDIuNzItMi41NCw0LjA4bC0uMDkuMTMtNC4wOCwzLjU4LTcuNjEtMy40NC01LjAzLTQuNjItMi41OC0zLjA4LTQuMDQtNC43Ni0zLjY2LTYuNTMtLjg2LTEuMzIuNzMtLjU5LDMuMDMtMy4yMiw0LjQ0LjM2LDMuNTQuMDQsNC4wOCwxLjUsNS43NiwyLjYzLDEuOTQsMS40LDQuOTQsNi4zNCwyLjEzLDcuMjUtLjA5LjIzWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im03NDYuMjIsNTU2LjgzYy42OCwyLjI3LDEuNCw0LjQ5LDIuMDgsNi43bC4wNS4xNCw0LjU3LDYuMzQsMS41NCwxLjQ1LDYuMyw1LjA3LjIyLjE0LDUuNzYuNjMuMDUuNTl2LS41OWwyLjA0LS4wNS4xNC0uMDkuMTMtLjA1Yy45MS0uNzcsMS43Ny0xLjU0LDIuNjMtMi4zNmwuMzYtLjMyLDIuMjctMy4wNCwxLTEuNjMsMS42My0zLjk0LjUtMi40MXYtLjEzbC0uNDUtMy4wOC0xLjI3LTQuNzEtLjA5LS4wOS0uMDQtLjE0LTYuNjYtNS4zLTYuNjYtMi40OS0xLjU0LS40MS0zLjk0LjM2LTMuMzYuNDEtLjQxLjIyLTQuNTMsMi45NS0yLjQ0LDQuNHYuMThsLS4wNS4wOS4xOCwxLjE0Wm0yLjk5LTUuMjZsNC42Ny0yLjksMi45OS0uMzYsMy44NS0uMzIsMS4yMi4yNyw2Ljc1LDIuNTgsNi4yNiw1LjAzLDEuMjIsNC40NC40NSwzLjA4LS40MSwyLjA0LTEuNTgsMy44NS0xLDEuNTktMi4xNywyLjk5LS4zMi4yN2MtLjc3LjY4LTEuNTUsMS40LTIuMzEsMi4xM2wtLjE4LjEzLTEuNzcuMDUtNS42Ni0uNjMtNi4xNi00Ljk0LTEuMzYtMS4zMi00LjYyLTYuNDMtMS45OS02LjM5LS4xOC0xLjA0LDIuMzEtNC4xMloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNjcwLjEsNDE2LjI5bDQuNjYsNy43NSw0LjY2LDcuNjEsMi45OSw3Ljc1LDMuMDgsMTAuMzMsMS43Nyw1LjIxLDIuODYsNy43OS42MywxLjQ1LDIuOTQsNi4zNCwzLjk1LDcuNzUuOTEsMS41OCw0Ljg1LDYuMjYsMy4xMywzLjcxLDYuMTIsMi41NCwxLjY3LjU1aDBsLjIzLS4xOS4yMi4wNCwzLjEzLTMuNTMsMi45NS00LjkzLDEuNzctNC4zLjQtMS44Ni41NC02Ljg0di0uOTVsLS4yMy03LjExLS42OC02LjgtLjI3LTEuOTUtMS41OS03LjUyLS42LTIuNDUtMS41NC01LjM0LTEuODYtNS44LTEuOTUtNS40NC0yLjE3LTQuMzEtMi00LjE3LTIuMDQtMy42Mi0xLjU5LTIuNDktNC43Ni01LjM1LTMuMDgtMi45LTcuODQtNS4yNi0uNzctLjQ1LTcuMDYtMi42My00Ljk4LTEuNTktLjA5LjA1LS4wOS0uMDUtMi43Mi41LTQuNDQuMDUtLjEzLjIzLS4yMi4wNS0yLjE3LDQuMjYtLjUuNzMtLjA5LjIyLS4yMiw3LjA3LjA1LjU5LDIuMTcsNy40M1ptLTEuMTQtMTQuOTFsLjQ1LS41OSwyLjA5LTQuMjFoNC4xMmwyLjgxLS41NCw0LjgsMS41NCw2Ljg5LDIuNTQuNzcuNDUsNy43LDUuMTIsMy4wOCwyLjg1LDQuNjIsNS4yNSwxLjU5LDIuNDUsMi4wNCwzLjU4LDEuOTksNC4xNywyLjEzLDQuMjEsMS45NCw1LjQ0LDEuODEsNS43NSwxLjU1LDUuMy41OSwyLjQ1LDEuNjMsNy43NC4yMywxLjY4LjU5LDYuMDcuMzEsOC41Mi0uNDksNi44NC0uMzYsMS41OS0xLjcyLDQuMjEtMi44Niw0LjgtMi45NSwzLjQtMS4zMS0uNDEtNi4wNy0yLjU0LTIuODYtMy40OS00Ljc2LTYuMDctLjktMS41OS0zLjktNy43NC0zLjU0LTcuNzUtMi45LTcuNzUtMS43Mi01LjE2LTMuMTMtMTAuMzMtMi45NS03Ljc1LTkuNDItMTUuNjMtMi4xMy03LjQzLjIyLTYuOThaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTYzNC45OSwxOTYuNjRsLS40NS01LjUzLS43My03Ljc1LS41LTMuOTQtLjQxLTMuODUtLjgyLTUuMTItLjMxLTIuNjMtMS4yNy02LjcxLS4xMy0xLjA0LS45MS0zLjU0LTEuNDUtNC4zLTEuNTQtMi45OS0yLjI3LTQuOC0yLjU4LTMuOTQtMy4yNi0zLjk0LTQuNTMtNC42Mi00LjAzLTMuMTctMy45LTIuNzctNC4yNS0xLjU5LTMuNTQtMS4zNi03LjI1LTEuNTktOC4yLTIuMjItMi45LTEuMTMtNC44NC0xLjY4LTYuMTItMy4yMi0xLjU5LS45MS0zLjM2LTIuMzZjLTEuNDktMS0yLjk5LTItNC40OS0yLjk1bC0yLjIyLTEuNTQtNS40OS00LjE3LTQuMjUtMy41My0zLjQ1LTMuMTItNC4zLTQuNjItMy41NC0zLjY3LTQuMTctNC4wOC0zLjU4LTMuNC03Ljg4LTQuODktLjgxLS4zNi02LjkzLTIuMTctNS4wNC0yLTIuNzYtLjM2LTguMDItMi40OS03LjY1LjA5LS4wOS4zMi0uMzIuMDktLjY4LDcuMDcuMDQuMDl2LjE0bC4yNy41OSwzLjg5LDcuNywyLjA5LDUuNzEsMS4xMywyLjA5Ljk1LDMuMjcsMS4yMiw0LjM0LjIzLDEuNTQsMS40NSw2LjI1LjUsMy40OS42OCw0LjIxLjM2LDQuNDQuMTgsMy4zMS0uMDksNC40NC0uNDEsMy4yNi0uMTgsMy45LS42MywzLjg1LjA5LDMuNDQtLjEzLDQuMzUuODYsNC4yNi42OCwzLjYzLDMuNjIsNy44NCw0LjQ0LDcuNzksMi43Miw0LjMxLDIuMDQsMy4zOSwyLjE3LDQuMjYsMS43MiwzLjU0LDEuNzcsNy40Ny43Niw4LjAyLjkxLDcuNjEuNzcsMi40NCwxLjM2LDUuNDksNC40LDcuNzQsNS42Niw3Ljc5LDEuNzIsMi41NCwzLjQ5LDUuMjEsNS41Nyw3Ljc1LDYuNTMsNi45Nyw3LjE1LDguNTIsNS4xMiw3Ljc5LDMuMjIsNC40NCwyLjIyLDMuMyw1LjUzLDYuOC42OCwxLDYuMDIsNy43NCw2Ljg1LDcuNzUsMi4wOCwyLjE4LDcuNzQsNy4zOCw3LjkzLDUuOTMsNy43NSwzLjI3aC4xNGwuMDQuMDR2LjA5bC4wNS41di0uNTlsMi44OS0uMTguMTQtLjE0aC4xM2wyLjktMi45NCwxLjA5LS43My4wNC0uMTQuMTQtLjA5Ljc2LTIuNC43My0zLjg5di0uNzNsLjQtNi43MS0uMDgtMS4xMy0uMTQtNi44OS0uNjMtOC41Mi0uMTQtNy44LDEuMTMtNy42NSwxLjg2LTcuNzUsMi4zMS03Ljc0LDIuNjMtNy43OSwyLjQtNy43NSwxLjEzLTQuMDQuOTEtMy43Ni40LTIuNjcuNTktNS4xMi4xOC0xLjk1LjE4LTcuNTctLjEzLTcuODktLjQxLTguMlptLS41NSwyMy42bC0uMTMsMS44Ni0uNTksNS4xMi0uMzYsMi41OC0uOTUsMy44LTEuMDgsMy45NS0yLjQ5LDguMDItMi41NCw3LjQ3LTIuMzEsNy43NC0xLjksNy45OC0xLjEzLDcuNjEuMDQuMDktLjA0LjA0di4wOWwuMDksNy42MS42OCw4LjYxLjEzLDYuODkuMDksMS0uNDEsNi43NXYuNjhsLS42OCwzLjcxLS43MiwyLjMyLTEuMDkuNjgtMi44MSwyLjktMi42Ny4xOC03LjctMy4zLTcuNTctNS43MS03Ljc0LTcuMzQtMi4wNC0yLjEzLTYuOC03Ljc1LTYuMDMtNy43LS42My0uOTUtNS41Ny02LjgtMi4yMi0zLjM1LTMuMTctNC40NC01LjE3LTcuNzQtNy4yLTguNjEtNi40My02Ljg5LTUuNjItNy43NS0zLjQ0LTUuMjUtMS43Ny0yLjU0LTUuNjItNy43LTQuMzktNy43OS0xLjMyLTUuMjEtLjY4LTIuMjYtLjc2LTYuOTMtLjE5LS44Ni0uNzctOC4wMi0xLjc2LTcuNjEtMS44MS0zLjYzLTIuMTgtNC4yMS0yLjEyLTMuNTgtMi42My00LjE3LTQuMzktNy43LS42My0xLjQtMi45OS02LjQ0LS42My0zLjQ5LS44MS00LjA4LjEzLTQuMzEtLjEzLTMuMy42My0zLjg1LjE4LTMuOTUuNDEtMy4yNi4wOS00LjUzLS4xOC0zLjM1LS4zNi00LjQ5LS42OC00LjM5LS41LTMuMzYtMS40NS02LjMtLjIyLTEuNDktMS4yNy00LjU3di0uMDVsLS45NS0zLjE3LTEuMDktMi4wOC0yLjEzLTUuNzEtNC4xMi04LjI5LjYzLTYuNTcsNy4xNi0uMDgsNy43NCwyLjQ0LDIuOS40MSw0Ljg1LDEuOTUsNi44OCwyLjEzLjc3LjM2LDcuNzUsNC43NiwzLjU4LDMuMzUsNC4xMyw0LjA4LDMuNTMsMy42Nyw0LjI1LDQuNjIsMy41NCwzLjE3LDQuMjYsMy41OCw1LjUzLDQuMjIsMi4zMSwxLjQ5LDQuNDQsMi45NCwzLjMxLDIuMzYsMS42Ny45NSw2LjEyLDMuMjEsNC45OCwxLjc3LDIuODYsMS4xMyw4LjMzLDIuMjcsNy4xMiwxLjU0LDMuNTMsMS4zNiw0LjMsMS41OSwzLjY3LDIuNjMsMy45LDMuMDgsNC41Myw0LjU3LDMuMjIsMy44NSwyLjQ5LDMuODEsMi4zMSw0Ljg1LDEuNDUsMi44NSwxLjQ1LDQuMjYuODYsMy40LjE5LDEuMDgsMS4yNyw2LjcxLjMyLDIuNjMuNzcsNS4xMi40NSwzLjg1LjQ5LDMuODkuNzMsNy43NS40MSw1LjUyLjQ1LDguMTUuMTMsNy44NS0uMjMsNy41NloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNjg4Ljk1LDQyMy45bDEuODEsNC45OCwxLjQxLDIuNzItLjIyLDEuMDl2LjE5bDEuNjMsNi41Ny4wOSwyLjgsMS4yMiw0Ljk0LDEuNDUsNS41Ny43NiwyLjIyLDEuNDEsMy42NywyLjgxLDQuMTMsMy42Nyw2LjQzLDEuMzIsMi4wNC4xOC4wNS4xMy4xNC44Ni4yMi4wOS0uMDUuMDkuMDV2LjU0LS41NGw2LjYxLTEuMzIuMDktLjEzaC4xNGwuNDEtLjg2LjY4LTYuMDMtLjA5LTcuODgtLjU5LTQuODUtMS40NS01LjA4LTIuOTUtNi4zNC0zLjQ1LTguMzktNC43MS03LjE2LTMuMjItNS45OC0yLjk0LTEuOTUtNS4wMy0yLjMxaC0yLjIybC0uMTguMTgtLjIyLjA1LTEuMTgsMi40NHY0LjM1bC4wNS4xOCwxLjU0LDMuMzFabS0uNzItNy43NWwuOTUtMS45LDIsLjA5LDQuNTMsMi4wNCwyLjksMS45NSwyLjk5LDUuNjZjMS41OSwyLjQsMy4xMyw0LjgxLDQuNjYsNy4xNmwuMDUuMTQuNDUuOTksMi45NCw3LjIxLDIuOSw2LjI1LDEuNDEsNC44OS41OSw0Ljc2LjA5LDcuNzUtLjY4LDYuMzQtMiwuNDUtNC40NC44Mi0uNjMtLjE0LTEuMTgtMS44MS0zLjY3LTYuNDQtMi44MS00LjEyLTIuMDktNS42Ni0xLjQ5LTUuNzYtMS4xOC00LjcxLS4wOS0yLjgxLTEuNjMtNi41Ny4yMy0xLjA4LS4wNS0uMTN2LS4xNGwtMS40LTIuNzItMS43Ny00Ljk4LTEuNTktMy40OHYtNC4wNFoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNjMxLjY4LDE5OC45bC0uNTQtNy44LS43Ny03Ljc1LTEuMDgtOC4wMnYtLjA1bC0xLjUtNy41Mi0uNzItMi4zNi0xLjMyLTUuMzktMi40LTYuMTItLjU1LTEuNjgtMS4xMy0yLjIyLTMuOTQtNS42Ni0zLjktNC42Mi0zLjQ5LTMuMTctNC4zNS0zLjM5LTcuODQtMy42My0zLjEzLS44Ni02LjMtMS41OS02LjEyLTEuNTQtNC44NS0xLjY3LTIuOS0uNzctNS4xMi0yLjEzLTIuNTgtMS4xOC0yLjk5LTEuNzctNC44MS0yLjQ1LTQuMy0yLjM1LTMuNDQtMi4wOS02LjU3LTQuNDQtMS4xMy0uNjgtLjY0LS40NS03Ljg0LTcuNzUtNy4yLTcuNDMtMS4xOC0uNDUtNi43NS0yLjQ5LTIuNjMtLjE4LS4xMy4wOWgtLjEzbC00LjQ5LDMuMjctLjA0LjE4LS4xMy4wOC0uNjQsMi44Ni0uNjgsMy41N3YuMDVsLS4wNC4wOS40LDguMi43Myw3Ljg4di41bC42Myw3LjI5LjIzLDcuNzkuMzIsNy43NC42OCw3LjgsMS42OCw3Ljc5LDMuMTcsNy44NCwzLjk1LDcuNzUsNC41Myw3Ljc5LDMuOCw3LjYyLDEuNzcsNS42Ni41NCwyLjEzLDEuNzYsNy43NSwyLjE4LDcuNzksMi4wOCw0LjQ0LDEuNCwzLjM1LDIsMywzLjMxLDQuODUsNC40NCw1LjkzLDEuMjIsMS43Nyw0LjgxLDcuOTN2LjA1bDEuNzIsMi42MywyLjg1LDQuOTQsNS4zOSw3Ljc0LDcuMjksMTEuNiwyLjEzLDMuOSw0LjYzLDcuNzQsMS4wNCwxLjU0LDQuOCw2LjI1LDIuOTksMy44MSw3Ljc5LDcuMzgsNy41Myw0LjEyLjQuMTRoMGwuMTktLjA1LjE4LjA1LDQuOS0yLjYzLjA5LS4xNC4wOS0uMDksMi4wOS00LjguNDEtLjY4LjQ1LTQuMDguMjItMi45OS0uMDQtLjA5di0uMThsLjY4LTYuOHYtLjkxbDEuMzYtNS40OC40MS0yLjEzLDIuNTMtNy44LDIuNTQtNi40My4zMi0xLjA4LDIuNzctNy45OCwzLjQ4LTguOTcsMS4yMi0zLjQ5LjgyLTMuMTMuOTUtNi4wMi4yMy0xLjc3LjM2LTUuNDQuMDktMi4zNi4wOS01LjI1LS4wNS0yLjU0LS4yNy03Ljc0Wm0tLjczLDE3Ljg1bC0uMzYsNS4zNC0uMjMsMS43Ni0uOTEsNS45NC0uODEsMy4wNC0xLjIyLDMuNDgtMy41Myw5LjAyLTIuNjMsNy43LS40MSwxLjI3LTIuNTQsNi40OC0yLjU0LDcuNzUtLjQ1LDIuMjctMS4zNiw1LjY2di44MWwtLjY4LDYuODl2LjI3bC0uMjIsMy4xNy0uNDEsMy43Ni0uMjIuMzctMi4xMyw0LjgtNC42MywyLjQ5LTcuNTItNC4xMi03LjU3LTcuMTYtMy4wNC0zLjgtNC43Ni02LjI1LTEtMS40NS00LjYyLTcuNzUtMi4xMy0zLjg5LTIuMzYtMy44OS01LjM5LTguNTItNC45My02LjkzLTIuODUtNC45NC0xLjg3LTIuODYtNC42Ni03Ljc0LTEuMjctMS44MS00LjQ0LTUuOTgtNS4yNi03LjctMS4zNi0zLjMxLTIuMDQtNC4zLTIuMTMtNy43LTEuODEtNy44NC0uNTktMi4xNy0xLjcyLTUuNjItMy45NC03LjkzLTQuNDgtNy42Ni0zLjktNy43LTMuMDgtNy42NS0xLjcyLTcuNy0uNjgtNy43NS0uNTUtMTUuNTQtLjU5LTcuMjl2LS40NWwtLjQ1LTQuNjN2LS4yMmwtLjI4LTMuMDQtLjQtOC4yOS42OC0zLjQ0LjU5LTIuNzIsNC4yNi0zLjEzLDIuNDQuMjMsNy42NiwyLjksNi44NCw3LjExLDcuODQsNy43OS43My41NCwxLjIyLjY4LDYuNTcsNC40NGgwbDMuNDksMi4xMyw0LjM1LDIuNGgwbDQuNzYsMi40LDIuOTUsMS43NywyLjcyLDEuMjMsNS4xMiwyLjEzLDIuOTUuODIsNC44NSwxLjY3LDcuNzksMS45OSw0LjcxLDEuMTgsMi45NS43NywxLjYzLjc3LDYuMiwyLjgxLDQuMTMsMy4yNiwzLjQ0LDMuMDgsMy44NSw0LjYyLDMuODUsNS41MywxLjA5LDIuMDguNTksMS43MiwyLjM2LDUuOTgsMS4zNiw1LjUzdi4wNGwuNjgsMi4xNywxLjU0LDcuNzUsMS4xMyw4Ljc0LjY4LDYuNzUuNTQsNy43NS4yNyw3Ljc0LjA1LDIuNDktLjE4LDcuNjJaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTYyMi45OCwxOTEuMTFsLS45MS03Ljc5LS4zNi0yLjEzLTEuNDUtNS42Ni0yLjY3LTcuNzktMy43Ni04LjA2LTYuNDQtNy41Ny0xLjM2LTEuNDEtNy44NC01LjM1LTIuNjMtMS4xMy01LjIxLTEuODYtMi42OC0uNzctNS4xMi0xLjMyLTUuMTYtMS4yMi0yLjY4LS4zMi02LjUyLTEuMDktMS4yMi4wNS03LjAyLS40NS0uODIuMTgtNi4zLjgxLTEuNjgsMS4xOC0zLjA4LDEuNzYtLjE4LjE4LTIuNjcsNS4zLS41NCw3LjIsMS4wNCw2LjM0LjcyLDMuMzEsMS41NSw0LjQ4LDMuODEsOC42MSwzLjI2LDYuOTMsMy42OCw4Ljk4LDMuMDQsNi41NywzLjQ4LDYuNDhjLjIzLjQ1LjQxLjg2LjYzLDEuMzFsOC4zOCwxNC41LDQuNDksOC43NSwzLjMsNi42MS42MywxLjEzLDQuNzYsNy44OCwyLjQ5LDMuODUsNS40OSwzLjkzLDIuMzEsMS41LjE4LS4wNS4yMy4wOXYuNTktLjU5aDBsLjk1LS40NSw1Ljc1LTIuMTMuOTUtLjIzLjE0LS4xNC4xNC0uMDQsMi41OS0zLjgxLDMuMzUtNC4zMSwxLjg2LTEuOTUsMS40LTIuNzIuNzgtMS40NSwxLjg1LTMuNzIsMi4wOS00LjAzLDEuNjctNC43Ni43My0zLjEzLjg2LTYuMjUuMTQtMS41NC4yNy01LjguMDQtMi0uMTMtNy43NC0uNTktNy44Wm0tLjE5LDE3LjQ5bC0uNCw3LjI5LS44Niw2LjE2LS42OCwzLTEuNTksNC42Mi0yLjEzLDQuMDMtMS44MSwzLjc2LS44MiwxLjQxLTEuNDUsMi44MS0xLjYzLDEuNjctMy40NCw0LjM5LTIuNDksMy43Mi0xLjEzLjI3LTYuMzQsMi40NS0yLjA0LTEuMzItNS41My00LjAzLTIuMzItMy42My01LjI5LTguODMtMy4yNy02LjY2LTQuNTMtOC43NC04LjM0LTE0LjVjLS4yNy0uNDUtLjQ2LS44Ni0uNjgtMS4yN2wtMy40OS02LjQ5LTIuOTktNi41Ny0uODYtMS45OS0yLjgxLTYuOTMtMy4yNy02Ljk0LS45LTIuMDMtMi44Ni02LjQ4LTEuNTQtNC4zOS0uNzItMy4zMS0xLjA1LTYuMjEuNjQtNy4xNiwyLjQ1LTQuODUsMi45NS0xLjY3LDEuNjctMS4xOCw1Ljk0LS42OC44MS0uMjMsNi44OS40NiwxLjIyLS4wNSw2LjQ4LDEuMDksMi41OC4zMiw1LjE2LDEuMjIsNS4wOCwxLjI3LDIuNjMuNzcsNS4xNywxLjgxLDIuNDQsMS4wNCw3Ljg0LDUuMzVjLjQxLjQxLjg2Ljg2LDEuMjIsMS4yN2w2LjU3LDcuNzksMy40NSw3LjU3LDIuNjcsNy43LDEuNDUsNS42Mi4zNiwyLjEzLjkxLDcuNy41NCw3Ljc1LjE5LDcuNzQtLjA1LDEuOTVaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTYwOC4wMywxOTEuMTFsLTEuNzItNy44NC0uMjMtLjU5LTUuNjYtNy4zLTIuMjctMi40NC00LjUzLTIuMjItMy4zMS0uNzdoLS4xOGwtNC40NC44Ni0uMDkuMTMtLjE5LjA1LTIuNzIsNC4zOS0uMjIuNTkuMDUuMDktLjA1LjE0LDEuNjMsNy4yOS42OCwyLjc2LDUuMDMsMTEuMjQuOTEsMS41OC45NSwxLjg2LDMuNjcsNS45MywyLjI3LDMuODUuMTQuMDUuMDkuMTQsNS42MiwxLjc3LDIuMjYuMjIuMTQtLjI4LjMyLS4wNCwxLjM2LTQuNC4zMS0xLjQ1LjY4LTUuNDQuMDUtMi40LS4yOC01LjY2LS4yNy0yLjEzWm0tLjM2LDEwLjA2bC0uNjQsNS4zNS0uMzIsMS4zNi0xLjI3LDQuMTMtMS44MS0uMTgtNS4zOS0xLjY4LTIuMTMtMy43Mi0zLjY3LTUuODQtLjk1LTEuODYtLjg2LTEuNTQtNC45OC0xMS4wNi0uNjgtMi44MS0xLjYzLTcuMjUsMi43Mi00LjQ0LDQuMTItLjgxLDMuMTcuNzIsNC40NCwyLjIyLDEuOTUsMi4xMyw1LjY3LDcuNDMsMS43Miw3Ljg0LjMyLDIuMDguMjcsNS42Mi0uMDUsMi4zMVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNjE3LjU5LDE5NC43M2wtLjM2LTMuNjItMS4zMS03Ljc5LTIuMDQtNy45Ny00LjI2LTcuNjYtMy41My01LjAzLTMuMTctMi44NS00LjY2LTMuNTgtNy44OS0zLjY2LTIuNC0uNTktNS40NC0xLjIyLTEuNDEtLjE5LTcuODQuMTQtMy4zNSwxLjI3LTIuNDEsMS4wNS0zLjkzLDQuMDctMS4wNSwyLjktLjcyLDMuMTcuMTMsNC43Ni45NSw0LjIyLDEuMTgsMy42MiwzLjU4LDguOTMsMi45OSw2LjY2LDQuMDMsOC4yLDQuMTYsNy4zMyw1LjQ0LDEwLjAyaDBsMi45OSw1LjQ4LDIuNTQsNC44LDIuMjIsMi45OSw1LjYyLDUuOThoLjE5bC4xOC4xMyw1LjQ4LS4zMiwyLjE3LjIzLjE5LS4xOGguMjJsMi41NC0zLjEzLDIuNjMtMi42OCwxLjA5LTEuNDksMS41OS0yLjEzLDEuNDktNC4yNSwxLjIyLTUuMTIuNS0yLjcyLjUtNC4wOC4yNy0zLjcyLjA1LTMuNzYtLjA5LTQuMDMtLjI3LTQuMTdabS0uNTQsMTEuODhsLS4yOCwzLjY2LS40NSw0LjA0LS41NCwyLjY3LTEuMTMsNC45OC0xLjU5LDQuMzUtMS40LDEuODYtLjk1LDEuNDEtMi42NywyLjYzLTIuNDksMy4wOC0xLjktLjE4LTUuNDguMzEtNS4zOS01LjcxLTIuMTMtMi45LTIuNTgtNC44NS04LjQzLTE1LjUtNC4xMi03LjM0LTQuMDMtOC4xNS0yLjk5LTYuNjEtMy41My04LjgzLTEuMTgtMy41NC0uOTEtNC4wOC0uMTgtNC42Ny42My0yLjk0LDEuMTMtMi45NSwzLjc2LTMuNzEsMS45OS0uODYsMy40LTEuMjMsNy4zOC0uMTMsMS4zNi4xOCw1LjM5LDEuMTgsMi4yNy41OSw3Ljc5LDMuNjMsNC41MywzLjQ0LDMuMTIsMi44MSwzLjM1LDQuOCw0LjMsNy43OSwxLjk1LDcuNjIsMS4yNyw3LjcuMzYsMy42My4zMiw0LjEyLjA5LDMuOTgtLjA0LDMuNzJaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTYyNy43OCwxOTcuMjJsLS40OS02LjEyLTEtNy43OS0xLjI3LTcuNzQtMS43Mi03LjgtMS42My01LjQ4LTEuMDQtMi4zNS00LjQtNy44LTIuMzUtMy4zNS00LjQtNC40OS0zLjQ1LTMuMTMtNy44NC00LjQ5LS43My0uMjItMTAuMDYtMi45NS00Ljg1LTEuMjItNS44LTEuNjgtMS45NS0uMzYtNy43LTIuMzYtMS41NS0uNzItNi4yNS0xLjk1LTUuOTMtMi40MS0xLjg2LS40NS00LjYzLTEuNDUtMy4wOC0xLjA1LTIuMjctMS4wNC01LjY2LS43Mi0zLjA4LS4yMi0uMTQuMThoLS4yMmwtMi4zMiwzLjAzLTEuMjIsMS0uMDUuMTMtLjEzLjE0LTEuMTgsNi42MnY3Ljc5bC4wNSwxLjA4LjYzLDcuMzgsMS40LDcuMjEuODYsMi45LDEuNzIsNC45LDMuNDksOC4xMSwzLjk0LDcuNDcsMy45LDcuNjYsMi44MSw3Ljg4LDEuODEsNC45Ljg2LDIuNzYsMS45NSw0LjM1LDEuNTksMy40NCwyLjQ1LDQuMDgsMi4xMywzLjcyLDEuNjMsMi4zNSwzLjM2LDUuMzksNC4zOSw3LjIsNC4yMSw4LjI5LDExLjMyLDIwLjc1LDcuODgsMTEuNjksMy44MSwyLjU5LDMuOTksMi41NC4xOC0uMDkuMTguMDksNC41OC0xLjc3LDMuMjYtMS45NS4xOC0uMjMuODYtMS43Mi4yNy0uODIsNC4yNi03Ljc5Ljg2LTEuNDUsMS41LTIuMzEsMS4xMy0yLjk1LDIuMzUtNS4zNSwyLjQ5LTUuMjEsMS44MS0zLjE3LDEuMTMtMi45NSwyLjcyLTcuNy43Ny0zLjIyLjkxLTQuNjIuMjgtMiwuNTktNy4yLjE0LTYuMzktLjA0LTEuMzEtLjM3LTguMTFabS0uNTksMTUuNzJsLS41OSw3LjE2LS4yNywxLjk1LS44Niw0LjU4LS43NywzLjEyLTMuMDQsOC41Mi0uNzYsMS45NS0xLjc3LDMuMjItLjkxLDEuODEtMS42OCwzLjQ5LTIuMzYsNS4zOS0xLjEzLDIuODktMS40LDIuMTctLjkxLDEuNS00LjIyLDcuNzktLjMyLjgyLS44MSwxLjcyLTMsMS43Ni00LjM5LDEuNzctMy43Mi0yLjQtMy44NS0yLjYzLTcuNjEtMTEuMzMtMTEuMjktMjAuNzEtNC4yNi04LjM0LTQuMzktNy4yLTMuNC01LjQ0LTEuNTktMi4zMS0yLjEzLTMuNzYtMi40LTMuOTQtMS42My0zLjQ5LTEuODYtNC4yMi0uOTEtMi44MS0xLjg2LTQuOTgtMi41NC03LjJjLS4wOS0uMTgtLjEzLS40MS0uMjItLjU5bC0uMzYtLjc3LTMuNTMtNy4wMi00LjIyLTguMDYtMy4yMS03LjM0LTEuNjgtNC44OS0uODEtMi44MS0xLjQ1LTcuMTItLjY4LTguNDcuMDUtNy42NSwxLjA4LTYuMzksMS4yNy0xLDIuMTgtMi45NSwyLjc2LjIzLDUuNy43NywxLjk1LjkxLDMuMTcsMS4wOSw0LjY2LDEuNDksMS43Ni4zNiw1Ljk0LDIuNDUsNi4yMSwxLjksMS41NC43Miw3Ljg0LDIuNCwxLjk1LjQxLDUuODQsMS42OCw0LjgxLDEuMjIsMTAuNTYsMy4wNC41OS4zNiw3LjI1LDQuMTMsMy4zLDIuOTksNC4yNiw0LjM1LDIuMzEsMy4zMSw0LjM5LDcuNywxLjA0LDIuMjYsMS41OSw1LjM5LjQxLDIuMDksMS4zMSw1LjY2LDEuMjgsNy43OS45NSw3LjcuNTUsNi4xMi4zNiw5LjM3LS4wOSw2LjNaIiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTMiCiAgICAgICAgcG9pbnRzPSI0MzQuNzcgOTIzLjMzIDQyOS44OCA5MjEuMDYgNDIyLjQ1IDkxOC40MyA0MjEuMDkgOTE3LjggNDIwIDkxNy4zNSA0MTIuMyA5MTQuNDQgNDAzLjczIDkwOC45NiAzOTUuMjIgOTAxLjAzIDM4Ni4xMSA4OTUuMzcgMzgxLjg1IDg5Mi4yIDM3Ny4zMiA4ODguOTQgMzcyLjM4IDg4My41OSAzNjguNjcgODc4Ljg4IDM1OS4yNSA4NjYuMDUgMzQzLjM0IDg0OC40OCAzNDIuMyA4NDcuNDggMzMzLjMzIDg0MC42NCAzMjguODkgODM5LjU5IDMyNC41NCA4MzguODMgMzI0LjQ0IDgzOC44MyAzMjQuMzYgODM4LjgzIDMxOC4zOCA4MzkuNTkgMzE1LjQzIDg0MC4xIDMwNi42OSA4NDQuMzUgMzAwLjk4IDg0OC40MyAyOTcuODEgODUxLjA2IDI5NC41OSA4NTQuMDUgMjkwLjI0IDg1OC40NCAyODguOTcgODU5LjggMjg0LjYzIDg2Ni4wNSAyODMuMDggODY5LjA1IDI4MC4xNCA4NzUuMDcgMjgwLjA5IDg3NS4zOSAyNzkuMDUgODgzLjc3IDI3OS42NCA4OTIuNiAyODAuMDkgODk1LjAxIDI4MS45NSA5MDEuNjIgMjg0Ljk0IDkwNi4zOCAyODcuMTYgOTEwLjM2IDI4Ni44IDkxMC45MSAyODcuMjUgOTEwLjQ2IDI4OS4wMiA5MTIuMjIgMjk4LjY3IDkxOS4yOSAzMDYuNjQgOTIzLjYgMzE1LjQ4IDkyNy4zMSAzMTcuODcgOTI4LjEzIDMxOC4xOSA5MjcuMTggMzE1LjkzIDkyNi40MSAzMTQuNDMgOTI1Ljc3IDMwNy4xOCA5MjIuNzMgMjk4LjQ0IDkxOC4wMiAyOTYuMjcgOTE2LjM0IDI4OS43NCA5MTEuNTkgMjg3Ljk3IDkwOS43NCAyODUuOCA5MDUuOTIgMjgyLjc2IDkwMS4wOCAyODEuMDkgODk0Ljg3IDI4MC42NCA4OTIuNjUgMjgwLjU5IDg5Mi4xMSAyODAuMDUgODgzLjg2IDI4MC4xNCA4ODMgMjgxLjE0IDg3NS4zOSAyODMuOTQgODY5LjUgMjg1LjM5IDg2Ni42OSAyODkuNyA4NjAuNTMgMjkwLjg4IDg1OS4xNyAyOTUuMjcgODU0Ljc3IDI5OC40NCA4NTEuODMgMzAxLjQ4IDg0OS4yNSAzMDcuMDUgODQ1LjMxIDMxNi4yMSA4NDAuOTUgMzE4LjQ3IDg0MC41NSAzMjQuNDQgODM5Ljc4IDMyOC42MSA4NDAuNTUgMzMzLjEgODQxLjY4IDM0MS41OCA4NDguMTYgMzQyLjU3IDg0OS4xNiAzNTguNDcgODY2LjY0IDM2Ny45IDg3OS40NyAzNzEuNTcgODg0LjE4IDM3Ni42OSA4ODkuNzEgMzg1LjUyIDg5Ni4xNCAzOTQuNDQgOTAxLjcyIDQwMy4wMSA5MDkuNjQgNDA0LjI0IDkxMC41NSA0MTEuODUgOTE1LjMxIDQyMC42NCA5MTguNjYgNDIxLjk1IDkxOS4zNCA0MjkuNDMgOTIxLjk3IDQzNC4zNyA5MjQuMjMgNDM4LjA4IDkyNS42OCA0NDEuODkgOTI4LjAzIDQ0Mi40MyA5MjcuMjIgNDM4LjY3IDkyNC44NiA0MzQuNzcgOTIzLjMzIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTYzMS41NCw4NDguNDhsLS4yMi0uMzYtNi4xNi04LjQzLTIuMjctMS44MS05LjM4LTYuOTgtOC4yOS0zLjcxLTUuOC0yLjA5LTExLjc0LTQuMDgtMS44MS0uNzItNi45OC0yLjQtNi42Ni0yLjQ1LTYuNTMtMi4xMy02LjItMS44MS02Ljk0LTEuODEtNS4yNS0xLjU5LTMuNDQtLjkxLTYuMTItMi42My0yLjY3LS45NS0xLjcyLS43My03LjExLTIuMTctNC4zNS0uNDEtNC42Mi41LTMuMjIuNTktNi4yLDIuODUtLjYuMzctNC40NCwzLjM1LTMuMywyLjktMS40LDEuMTMtMS45NSwxLjQtMi43MiwyLjU0LTIuNjcsMS42My0yLjY4LDEuNzItNi4wNywyLjgxLTguNDMuOTUtOC43LTMuNjItOC42MS01LjkzLjA5LjA0LS4yNy0uMThjLTIuODEtMi4xNy01LjcxLTQuMzUtOC42MS02LjU3bC0zLjUzLTIuMTctNS40OC0yLjktMy4yMi0uMzYtNS41My0uNzdoLS4xOWwtMy40NC41NC01LjMuOTUtMS45OS41OS0zLjk0LDEuOTUtMS45MSwxLjA4LTEuMTcuOTUtMy40OSwzLjMxLTIuNTQsMy41My0uOTksMS45NS0yLjIyLDcuMDN2LjEzbC42OCw4Ljc1LjE0LjU0LDIuMjcsOC4zLDEuNTQsNC4zLDEuNDksNC40OCw0LjMsOC44MywzLjU0LDQuODUsMy45OSw1LjY2LDUuNzUsNi45OCwyLjk5LDQuNzYsMy40LDQuMTIsOC4yNCw4Ljc0LDUuOTgsNC41OCw1Ljg1LDQuMjUsMi44NSwyLjIyLDYuNDgsNi41NywyLjk5LDguNDIuMjcsMS4wOS40MSw3LjYxLDEtLjA1LS40Ni03LjctLjI3LTEuMTgtMy4yMi04Ljk3LTYuNTctNi41Ny0yLjktMi4yMi01LjgtNC4yNS01Ljg1LTQuNC0yLjg2LTMuMTMtNS4zOS01LjY2LTMuMzEtMy45My0yLjk4LTQuNzYtNS44LTcuMDctMy45OS01LjY2LTMuNDQtNC43MS0xLjM2LTIuNjctMi45LTYuMDMtMy4wMy04Ljc0LTIuMzYtOC42MS0uNjgtOC44MywyLjA4LTYuNTcuODYtMS44MSwyLjQ1LTMuNCwzLjQ0LTMuMzEsMS0uODIsMS45LTEuMTMsMy43Ni0xLjg2LDEuODYtLjU5LDUuMzQtLjk1LDMuNC0uNSw1LjQ5LjcyLDMuMjYuNDEsNS4wMywyLjcyLDMuNDQsMi4xM2MyLjksMi4yMiw1Ljc1LDQuMzUsOC42MSw2LjUyaDBsLjM2LjI3LDguNjEsNS45Myw5LjA2LDMuNzYsMS0uMDQsOC4wNy0xLDUuODktMi43NiwyLjgxLTEuODYsMi42Mi0xLjU5LDIuODEtMi41OCwxLjk1LTEuNDUsMS40NS0xLjEzLDMuMjctMi45LDQuOTQtMy42Mi40NS0uMTksNS42MS0yLjYzLDIuOTktLjU0LDQuNDktLjUsNC4wMy40MSw3LjA2LDIuMTMsMS43Mi43MywyLjY3Ljk1LDYuMTIsMi42MywzLjU4Ljk1LDUuMjUsMS41OSw2LjkzLDEuODEsNi4xNywxLjgxLDYuNDgsMi4wOCw2LjcsMi40NSw2Ljg5LDIuMzYsMS44Ni43NiwxNy40OSw2LjE3LDguMjksMy43Miw5LjE1LDYuNzksMi4yNywxLjksNi4yOSw4LjY2LDIuMTcsOC41Ni4wNSwxLjk1LS40NSw2LjQ4LS4zMiwxLjM2LTIuNDksNy4zNC0yLjQ5LDUuMjEtMS41NCwzLjU3LTEuMjcsMi40OS0yLjk4LDYuMy0yLjQsNS43MS0xLjE4LDIuOTktMS40NSwzLjA4LTIuODUsNS42MS0uMTMuMjctMy43Niw0LjU4LTQuNDQsNC4xNy0uNS4zMi00LjgsMy4yMi0zLjksMi4zMS0xLjY3Ljg2LTIuMzYsMS42OC41OS44MSwyLjE3LTEuNTgsMS42OC0uOTEsMy45OS0yLjMxLDUuMjYtMy41NCw0LjYyLTQuMjYsNC4xNy01LjIxLDIuODEtNS41MywxLjQ2LTMuMTIsMS4yMi0zLjA0LDMuMDMtNy4wMiwzLjYyLTcuNTMsMS41NC0zLjUzLDIuNDUtNS4xNiwyLjU0LTcuNDMuMzYtMS40LjQ1LTYuNjYtLjA0LTIuMjItMi40LTkuMVoiIC8+CiAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtMyIKICAgICAgICBwb2ludHM9Ijg4Mi45MSAzOTAuMDYgODg0LjE0IDM4NS4xMSA4ODQuNzIgMzg0LjM0IDg4NS43MiAzODIuNTggODg4LjM5IDM4MC40IDg5MC41MiAzNzcuNjQgODkyLjcgMzc3LjA1IDg5My4zMyAzNzYuNjQgODk5LjA0IDM3NS42IDkwMS4xMyAzNzQuMjggOTA0Ljg5IDM3My42IDkwOC43OCAzNzAuNTcgOTA5LjIzIDM3MC41MyA5MDkuMzMgMzcwLjQzIDkwOS40NiAzNzAuMzkgOTEwIDM2OS44OSA5MTUuMTcgMzY4LjYyIDkxNS4yNiAzNjguNDggOTE1LjQgMzY4LjQ0IDkxNi42MiAzNjYuODYgOTIwLjI0IDM2NS45NSA5MjAuMzMgMzY1LjgyIDkyMC41MiAzNjUuNzcgOTIyLjkyIDM2Mi4xIDkyMy44NyAzNjEuNzQgOTIzLjk2IDM2MS42IDkyNC4wOSAzNjEuNTUgOTI0LjQ2IDM2MC44NyA5MjguNzIgMzU4Ljc0IDkyOC43NiAzNTguNTcgOTI4Ljk0IDM1OC40NyA5MjkuNzEgMzU0LjI2IDkzMS4wNyAzNTMuMjcgOTMxLjEyIDM1My4wOCA5MzEuMjYgMzUyLjk5IDkzMi4xMSAzNDYuMjkgOTMyLjIgMzQ2LjE1IDkzMi4zNCAzNDQuOTMgOTMxLjQ4IDM0NC44MyA5MzEuMzQgMzQ1Ljk3IDkzMS4yMSAzNDYuMiA5MzAuMzkgMzUyLjY4IDkyOS4wOCAzNTMuNjIgOTI5LjAzIDM1My44MSA5MjguOSAzNTMuOSA5MjguMTMgMzU4LjA2IDkyMy45NiAzNjAuMTUgOTIzLjg3IDM2MC4yOSA5MjMuNzMgMzYwLjMzIDkyMy40MiAzNjAuOTcgOTIyLjQ2IDM2MS4zMyA5MjIuMzcgMzYxLjQ3IDkyMi4yNCAzNjEuNTEgOTE5Ljg4IDM2NS4xMyA5MTYuMjYgMzY2LjA0IDkxNi4xNyAzNjYuMTMgOTE2LjAzIDM2Ni4xOCA5MTQuOCAzNjcuODEgOTA5LjQ2IDM2OS4yMSA5MDguOTcgMzY5LjY3IDkwOC4zMyAzNjkuOCA5MDQuNDMgMzcyLjg4IDkwMC41OCAzNzMuNTIgODk4LjQ5IDM3NC44MyA4OTIuODMgMzc1LjkyIDg5Mi4yIDM3Ni4yOCA4OTAuMTYgMzc2Ljg3IDg5MC4wNyAzNzYuOTYgODg5LjkzIDM3NyA4ODcuNzYgMzc5LjgxIDg4NC45IDM4Mi4xNyA4ODQuMDQgMzgzLjc1IDg4My4yMyAzODQuOTMgODgyLjEgMzg5Ljg3IDg4MS4zMiAzOTIuNjggODgxLjE0IDQwMC41MiA4ODEuMTkgNDA0LjYgODgxLjE5IDQwOC4yNyA4ODEuMzIgNDEyLjQ4IDg4MS4yMyA0MTYuMDEgODgxLjQyIDQyMC4yMyA4ODEuMDUgNDIzLjc2IDg4MS4zNyA0MjcuOTMgODgwLjk3IDQzMS41MSA4ODAuOTcgNDMxLjU1IDg4MC45NyA0MzEuNjUgODgxLjY0IDQzNi4wNCA4ODEuNTkgNDM5LjMgODgxLjY5IDQzOS41MyA4ODQuOTUgNDQ0LjQ3IDg4Ny41OCA0NDcuNDEgODkyLjc0IDQ1MC42OCA4OTguNDEgNDU1LjE2IDkwMC40OSA0NTYuODggOTA1Ljk3IDQ2Mi45MSA5MDguMTkgNDY2Ljc2IDkxMC4yMyA0NzAuNTYgOTEwLjY4IDQ3Mi44OCA5MTIuNSA0NzguMjcgOTEyLjgxIDQ4Mi43NSA5MTMuMjIgNDg1Ljc5IDkxMy4zMSA0OTMuNTQgOTEyLjk1IDUwMS4yOCA5MTIuNTQgNTA1LjU5IDkxMS45MSA1MDkuMDMgOTExLjQxIDUxMi4zNCA5MDkuNDYgNTE2LjgzIDkwOS4zMyA1MTguMDkgOTA4LjE5IDUyMC4yNyA5MDcuMjkgNTIzLjcxIDkwNi43OSA1MjQuMzQgOTA2Ljc0IDUyNC41MyA5MDYuNjUgNTI0LjYyIDkwNi44NyA1MzEgOTA2LjQyIDUzMi4yMyA5MDYuNDcgNTMyLjQxIDkwNi40MiA1MzIuNTUgOTA4LjI4IDUzNi43NiA5MTIuMTQgNTQwLjUyIDkxNi4zNSA1NDIuNDcgOTE4LjE2IDU0Mi40MiA5MjQuMDUgNTQzLjU2IDkyNC4wOSA1NDMuNTYgOTI0LjE5IDU0My41NiA5MjYuODEgNTQzLjI4IDkzMS44NSA1NDMuNzMgOTMxLjkzIDU0Mi44OCA5MjYuOSA1NDIuNDIgOTI0LjE0IDU0Mi42OSA5MTguMTYgNTQxLjU2IDkxNi40NCA1NDEuNTYgOTEyLjUgNTM5LjcxIDkwOC45MiA1MzYuMDggOTA3LjI5IDUzMi4zNiA5MDcuNzQgNTMxLjA1IDkwNy41NiA1MjQuNzUgOTA4LjE5IDUyMy44OSA5MDkuMDYgNTIwLjU0IDkxMC4yMyA1MTguMDkgOTEwLjM3IDUxNi44NyA5MTIuMzEgNTEyLjQzIDkxMi43NyA1MDkuMjIgOTEzLjQxIDUwNS44MiA5MTMuODEgNTAxLjM3IDkxNC4yMiA0OTMuNjIgOTE0LjEyIDQ4NS44MyA5MTMuNjcgNDgyLjcxIDkxMy4zMSA0NzcuODYgOTExLjU1IDQ3Mi43OSA5MTEuMDUgNDcwLjExIDkwOC45NyA0NjYuMzUgOTA2LjcgNDYyLjM2IDkwMS4xNyA0NTYuMzQgODk5IDQ1NC40OCA4OTMuMzMgNDQ5Ljk5IDg4OC4wMyA0NDYuNjQgODg1LjcyIDQ0NC4wMiA4ODIuNSA0MzkuMTcgODgyLjUgNDM2LjA5IDg4MS44MiA0MzEuNTUgODgyLjIzIDQyOC4xMSA4ODIuMjMgNDI4LjAyIDg4Mi4yMyA0MjcuOTcgODgxLjkxIDQyMy45IDg4Mi4yNyA0MjAuMzYgODgyLjEgNDE2LjA2IDg4Mi4xOCA0MTIuNTIgODgyLjA1IDQwOC4zMSA4ODIuMDUgNDA0LjY0IDg4MiA0MDAuNTYgODgyLjE4IDM5Mi43NyA4ODIuOTEgMzkwLjA2IiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTg5My43OSw2OS4wNWMxLjA0LjEzLDIuMTcuMjIsMy4zLjIyLDguNywwLDE4Ljk0LTQuMjIsMjYuODctNy44NCwxLjc3LS44MSwzLjYyLTEuNzYsNS42Ni0yLjk0bC41OS0uMzF2LTMuNzJsLTEuNzIsMS4wNGMtMS45OSwxLjEzLTMuOTgsMi4xNy01Ljg0LDMuMDMtNy42NiwzLjQ5LTE3LjQ5LDcuNTctMjUuNTYsNy41Ny0xLDAtMS45NS0uMDktMi44NS0uMjItOC4yOS0xLjEzLTE4LjcxLTUuNDktMjMuMTEtMTQuMTQtNC4zMS04LjQzLTUuOTgtMjcuNTktMy40NS0zOC43LDEuMzItNS42NiwzLjcxLTEwLjc0LDcuMjEtMTUuMTNsMS40OS0xLjloLTQuMTJsLS41OS44MmMtMy40LDQuNTMtNS43Niw5Ljc0LTcuMDcsMTUuNDktMi43MiwxMS42OS0uODYsMzEuODksMy42Nyw0MC44Nyw0Ljk4LDkuNzQsMTYuNDUsMTQuNTgsMjUuNTEsMTUuODZaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTgzNC44NCwyMC40OGwuMDUuMjNjMS45OSw4Ljc5LDQuMDgsMTcuOTQsOC43LDI2LjY4LjgyLDEuNSwxLjU5LDMuMDgsMi40LDQuNzEsNS4wNywxMC4wNiwxMC44MiwyMS40OCwyMS4zOCwyNywxMC4zMyw1LjQ0LDI3LjU1LDcuMzQsMzkuMTQsNy4zNCwzLjc2LDAsNy4zLS4xOCwxMC40Mi0uNTUsNC4xNy0uNDUsOC4yNS0xLjM2LDEyLjEtMi41OHYtLjkxYy0zLjg1LDEuMjctNy45NywyLjEzLTEyLjE5LDIuNjMtMy4xMi4zNi02LjYxLjU1LTEwLjM3LjU1LTE1LjE0LDAtMzAuMzEtMi44Ni0zOC43LTcuMjUtMTAuMzMtNS4zOS0xNS45OS0xNi42OC0yMC45OC0yNi42LS44Ni0xLjYzLTEuNjMtMy4yMi0yLjQ1LTQuNzEtNC41My04LjctNi42MS0xNy43Ni04LjY1LTI2LjU1di0uMThjLS40Ni0xLjg2LS44Ny0zLjY3LTEuMzItNS40OC0xLjQ1LTUuOTQtMi42My0xMS44My0zLjUzLTE3LjU0di0uMDloLS44NmMuOTEsNS44LDIuMDgsMTEuNzgsMy41OCwxNy44Ni40MSwxLjc2Ljg2LDMuNjIsMS4yNyw1LjQ0WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im04NTIuMjgsMzAuNjdjMS44MSwxMS4wNSwzLjcyLDIyLjQzLDkuMTEsMjkuOTUsNi4yMSw4LjY1LDE4LjQsMTQuMDQsMjcuNSwxNy4wNCw4LjgzLDIuODksMTcuOTgsMy4xNywyNi42OC43Miw0LjQ5LTEuMjIsOS4wMi0zLjI2LDEzLjQ2LTYuMDJ2LTFjLTQuNTMsMi44NS05LjEsNC45NC0xMy42OCw2LjIxLTMuODUsMS4wNC03Ljg0LDEuNTgtMTEuNzgsMS41OC00LjgsMC05LjY1LS43Ny0xNC40MS0yLjM1LTkuMDItMi45NS0yMC45OC04LjItMjcuMDUtMTYuNjctNS4zLTcuMzQtNy4xNS0xOC42Ny04Ljk3LTI5LjU5bC0uMDQtLjI3Yy0uMjgtMS43Mi0uNTUtMy4zMS0uODItNC44OS0xLjU4LTkuMDItMi41My0xOC40OS0yLjgtMjguMThoLS44NmMuMjcsOS43NCwxLjIyLDE5LjI1LDIuODEsMjguMzIuMjcsMS42Ny41OSwzLjM5Ljg2LDUuMTdaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTkwNS45Myw1MS40MmgwYy4zMiwwLC42MywwLC45NS0uMDQsNi41My0uMzIsMTQtMy40NSwyMi4xNi05LjM0di0xLjA0Yy04LjIsNS45OC0xNS42Nyw5LjItMjIuMiw5LjUxLS4yNy4wNS0uNTkuMDUtLjg2LjA1LTkuOTcsMC0yMi4zNC04LjAxLTIzLjM4LTE4LjM1LS45MS04LjU2LDIuNzItMjAuMzksMTAuNzQtMzUuMDJoLTFsLS4xMy4yOGMtNy44NCwxNC41LTExLjM4LDI2LjIzLTEwLjQ3LDM0Ljg0LDEuMDksMTAuOTIsMTMuNjgsMTkuMTIsMjQuMiwxOS4xMloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtODEyLjE4LDUyLjY5YzEuNDEsMi4zNiwyLjg2LDQuODUsNC4yNiw3LjMsNS4yNSw5LjE5LDEwLjY1LDE4LjYyLDE4LjcxLDI1LjA5LDguODQsNy4xMSwyMC41NywxMi4yMywzOC4wMiwxNi41OSw2LjcxLDEuNjcsMTQuOSwxLjksMjIuODMsMi4xMyw5LjM4LjIzLDE5LjAzLjUsMjYuNDYsMy4xMywyLjIyLjc3LDQuNCwxLjY4LDYuNTcsMi42OHYtLjk1Yy0yLjA0LS45NS00LjE3LTEuODEtNi4zLTIuNTQtNy41Mi0yLjY4LTE3LjI2LTIuOTQtMjYuNjgtMy4yMi03Ljg5LS4xOC0xNi4wNC0uNDEtMjIuNjUtMi4wOC0xNy4zMS00LjMtMjguOTYtOS4zOC0zNy43LTE2LjQtNy45My02LjM5LTEzLjMyLTE1Ljc3LTE4LjU0LTI0Ljg3bC0uMDktLjE0Yy0xLjM2LTIuNC0yLjc3LTQuOC00LjE3LTcuMTYtNi41Ny0xMC44Ny0xMy44Ny0yNC45Ni0xOC41NC0zNS45Ny0yLjktNi44LTUuMTYtMTMuMTQtNi43LTE4Ljk0bC0uMDQtLjE0aC0uODZjMS41NCw1Ljk0LDMuOCwxMi40Niw2Ljc5LDE5LjQ0LDQuNzEsMTEuMDEsMTIuMDEsMjUuMTksMTguNjIsMzYuMDZaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTc0MS4yOCw1Mi4zN2M2Ljk4LDUuNjYsMTMuNTksMTEuMDEsMTguMDQsMTYuODYsNC4xMiw1LjQ4LDUuOTgsMTEuNzQsNy43OSwxNy44LDEuOTUsNi42MiwzLjgsMTIuODMsOC4yOSwxNy41NCw0LjgsNS4wMywxMi40MSw3Ljk4LDE5LjcxLDEwLjg4LDYuMDMsMi4zNSwxMS43Myw0LjU4LDE1LjksNy44NCwzLjg5LDMuMDgsNS41Nyw2LjUzLDcuMzQsMTAuMjQsMi40OSw1LjE2LDUuMDMsMTAuNTEsMTMuODYsMTUuNDEsNi4xNywzLjQ0LDE2LjQ1LDUuOTMsMjcuMzIsOC41MiwxNS42MywzLjgxLDMzLjM5LDguMDYsNDIuMDUsMTYuMTgsOC44OCw4LjI5LDExLjIzLDIzLjc0LDEzLjM3LDM3LjM4LDEuMzYsOC43LDIuNDksMTYuMTcsNS4xMiwyMC4zLDIuODUsNC41Myw1Ljg5LDcuNDgsOC45Nyw4Ljc5di0uOTZjLTIuODEtMS4zMS01LjU3LTQuMTItOC4yLTguMjktMi41NC0zLjk5LTMuNzEtMTEuMzctNS4wMy0xOS45NC0yLjEzLTEzLjgyLTQuNTMtMjkuNDEtMTMuNjQtMzcuOTItOC43OS04LjI1LTI2LjY5LTEyLjU1LTQyLjQ2LTE2LjM1LTEwLjc4LTIuNjMtMjAuOTgtNS4wOC0yNy4wNS04LjQzLTguNjEtNC44LTExLjEtMTAuMDEtMTMuNTQtMTUuMDgtMS44MS0zLjc2LTMuNDktNy4zNC03LjU3LTEwLjUxLTQuMzEtMy4zNS0xMC4wNi01LjYyLTE2LjEzLTcuOTgtNy4yNS0yLjg1LTE0LjcyLTUuOC0xOS4zOS0xMC42OS00LjM1LTQuNTMtNi4xNi0xMC42NC04LjA3LTE3LjEzLTEuODYtNi4xNi0zLjcyLTEyLjUtNy45Ny0xOC4wOC00LjQ5LTUuOTgtMTEuMTUtMTEuMzItMTguMTctMTcuMDQtNi4yNS01LjA3LTEyLjc4LTEwLjMzLTE3LjU4LTE2LjAzLTkuOTMtMTEuNzgtMTguMDgtMjQuNi0yNC4yNC0zOC4xNWwtLjc3LjM2YzYuMTcsMTMuNTksMTQuMzYsMjYuNTEsMjQuMzgsMzguMzgsNC44NSw1Ljc1LDExLjM3LDExLjAxLDE3LjY3LDE2LjEzWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy0zIgogICAgICAgIGQ9Im03NDguODQsMjQuODNjNC44MSw0LjU4LDkuMzQsOC44MywxMi42NCwxMi4xOSwyLjg2LDIuODYsNS41Myw1LjA4LDcuODgsNy4wMiw0Ljg1LDMuOTksOC42Niw3LjExLDEyLjA1LDEzLjg2LDIuMjcsNC41OCwzLjM1LDExLjIsNC40NCwxOC4yMSwxLjM2LDguNDcsMi43NiwxNy4yNiw2LjU3LDIyLjQ3LDQuMjEsNS44NSwxMC41Niw3LjkzLDE3LjI2LDEwLjExLDQuMjIsMS40LDguNTYsMi44NiwxMi43Myw1LjMsNC40LDIuNjMsOC40Myw1LjYyLDEyLjY5LDguNzUsNi4wNyw0LjQ4LDEyLjk2LDkuNTYsMjIuMTEsMTQuNDEsNi4zOSwzLjQsMTUuMjcsNi44NCwyNC42OSwxMC40NiwxMy4xOCw1LjA4LDI2Ljc3LDEwLjMzLDMzLjI2LDE1LjUsNi43OSw1LjQ0LDYuODQsMTEuOTEsNi44OCwxNy42My4wNSwzLjQ4LjA5LDYuNywxLjU5LDkuMjksMS41OSwyLjY3LDMuNCw0Ljk4LDUuMzksNi45M3YtMS4yMmMtMS42OC0xLjc3LTMuMjYtMy44MS00LjYyLTYuMTYtMS40LTIuMzYtMS40NS01LjQ5LTEuNDUtOC44My0uMDUtNS44OS0uMTQtMTIuNi03LjI1LTE4LjMxLTYuNTctNS4yMS0yMC4yNS0xMC41MS0zMy40OC0xNS42My05LjM4LTMuNjMtMTguMjYtNy4wNy0yNC42LTEwLjQyLTkuMDYtNC44LTE1Ljk1LTkuODctMjEuOTgtMTQuMzEtNC4zLTMuMTctOC4zOC02LjE3LTEyLjc4LTguNzktNC4yNi0yLjU0LTguNjUtMy45OS0xMi45MS01LjM5LTYuNTctMi4xNy0xMi43OC00LjIxLTE2Ljg2LTkuNzktMy42Ny01LjAzLTUuMDMtMTMuNzMtNi4zOS0yMi4xMS0xLjEzLTcuMTEtMi4xOC0xMy43OC00LjUzLTE4LjQ0LTMuNDQtNi45My03LjU2LTEwLjI5LTEyLjI4LTE0LjE4LTIuNDQtMi4wNC00Ljk4LTQuMTMtNy43OS02Ljk4LTMuMzEtMy4zMS03Ljg4LTcuNjEtMTIuNjktMTIuMTQtNy4yNS02Ljg5LTE0LjcyLTE0LTE4LjAzLTE3Ljg1LTMuMDMtMy40OS0zLjEyLTQuMjEtMi42Mi01LjA3LjMyLS41NC43Ny0xLjMyLjU5LTIuOTUtLjA1LS4zNi0uMDktLjczLS4xNC0xLjEzdi0uMDVoLS44NmMuMDUuNDYuMDkuODcuMTQsMS4yNy4xMywxLjM2LS4xOCwxLjktLjQ1LDIuNDEtLjczLDEuMjItLjg2LDEuOTUsMi42Nyw2LjEyLDMuMzUsMy44NSwxMC44NywxMC45NiwxOC4xMiwxNy44NVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIKICAgICAgICBkPSJtNzYwLjI2LDMuNGMxLjM2LDQuNDQsNS4yMSw4LjU3LDkuMjQsMTMsMi44NiwzLjA4LDUuOCw2LjM0LDguMiw5LjkybC4yMi4zMmM2LjAyLDkuMDIsMTMuNTUsMjAuMjEsMTguMTcsMzAuMjIsMS44MSw0LjA0LDIuNDksOC42MSwzLjE3LDEzLjAxLDEuMDUsNi45MywyLjA0LDEzLjUsNy4wMiwxOC40OSw0LjgxLDQuOCwxMy4xOSw3LjQ3LDIxLjI5LDEwLjA2LDUuNzEsMS44MSwxMS42LDMuNzEsMTUuOTUsNi4yNSw0Ljg5LDIuODEsOC45Nyw2LjY2LDEyLjkxLDEwLjQyLDQuNjIsNC4zNSw4Ljk3LDguNTIsMTQuNDUsMTEuMDEsNS44NCwyLjY4LDExLjkxLDMuMTcsMTguMzUsMy43Niw0LjcxLjQxLDkuNjEuODIsMTQuMzIsMi4xOCw4Ljk3LDIuNjcsMTkuNTMsNy4xMSwyNS4wMSw5LjU2bDEuNjMuNzJ2LTMuNDlsLS42OC0uMzJjLTUuNDgtMi40LTE2LjA0LTYuODgtMjUuMDUtOS41MS01LjAzLTEuNDUtMTAuMDYtMS45LTE0Ljk1LTIuMzYtNi4xNi0uNS0xMS45Ni0xLTE3LjI2LTMuNDQtNS4wMy0yLjI3LTkuMTktNi4yNi0xMy42NC0xMC40Mi00LjA4LTMuODUtOC4yNC03Ljg0LTEzLjQ1LTEwLjg3LTQuNjctMi43Mi0xMC43NC00LjY3LTE2LjU5LTYuNTMtNy44LTIuNDUtMTUuODEtNS4wMy0yMC4wMy05LjI5LTQuMjYtNC4yNi01LjE2LTEwLjI5LTYuMTItMTYuNzItLjcyLTQuNjEtMS40NS05LjM3LTMuNDQtMTMuODItNC43Ni0xMC4yOC0xMi4zMi0yMS41Ni0xOC4zOS0zMC42N2wtLjIyLS4zMmMtMi41NC0zLjgxLTUuNTgtNy4xMS04LjUzLTEwLjMzLTMuOC00LjEzLTcuMzgtOC4wMi04LjUyLTExLjc4LS41OS0xLjc3LS44Ni0zLjU0LS45LTUuMjZ2LTEuMThoLTMuMjJsLjA0LDEuMjNjLjA1LDEuOTkuMzYsNC4wOCwxLDYuMTZaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiCiAgICAgICAgZD0ibTg0Mi4wOSw3MC4wNGMxLjA1LDEuMTgsMi4wOSwyLjM2LDMuMTMsMy41NCw2Ljg0LDcuNzQsMTMuOTEsMTUuNzcsMjQuMzMsMTkuOCwxMS43NCw0LjUzLDMwLjIyLDQuNTMsNDIuNDYsNC41M2gyLjAzYzUuMTIsMCwxMC4yLS4yMywxNS0uNzN2LS45MWMtNC44LjUtOS44My43Ny0xNSwuNzdoLTEuOWMtMTIuMjMsMC0zMC43MiwwLTQyLjI3LTQuNDktMTAuMjQtMy45NC0xNy4yMi0xMS44OC0yMy45Ny0xOS41MmwtLjIzLS4yOGMtMS4wNC0xLjE4LTItMi4yNi0yLjk1LTMuMzEtNy43NC04LjYxLTEzLjc4LTE1Ljc2LTE5Ljk4LTI5LjE3LTUuMzktMTEuNTUtMTAuNDItMjUuOTctMTUuMDQtNDIuOTZ2LS4xNGgtLjkxYzQuNjMsMTcuMTcsOS43NCwzMS44MSwxNS4xMyw0My40NSw2LjMsMTMuNSwxMi42LDIwLjk4LDIwLjE2LDI5LjRaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTUiCiAgICAgICAgZD0ibTg4OS4yNSwzMTUuNDhoLTkuMjl2LTkuMjljMC0uNDktLjU1LS45NS0xLjE4LS45NXMtMS4xOC40NS0xLjE4Ljk1djkuMjloLTkuMjljLS41NCwwLS45NS41NS0uOTUsMS4xOHMuNDEsMS4xOC45NSwxLjE4aDkuMjl2OS4yOWMwLC41NS41NC45NSwxLjE4Ljk1czEuMTgtLjQsMS4xOC0uOTV2LTkuMjloOS4yOWMuNSwwLC45NS0uNTQuOTUtMS4xOHMtLjQ1LTEuMTgtLjk1LTEuMThaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTUiCiAgICAgICAgZD0ibTUyMC4wOSw4NzEuNGgtMTAuNDd2LTEwLjUxYzAtLjU5LS41OS0xLjA5LTEuMzEtMS4wOS0uNzcsMC0xLjM2LjQ5LTEuMzYsMS4wOXYxMC41MWgtMTAuNDdjLS41OSwwLTEuMDguNTktMS4wOCwxLjMycy40OSwxLjMxLDEuMDgsMS4zMWgxMC40N3YxMC41MWMwLC41NC41OSwxLjA0LDEuMzYsMS4wNC43MiwwLDEuMzEtLjUsMS4zMS0xLjA0di0xMC41MWgxMC40N2MuNTksMCwxLjA4LS41OSwxLjA4LTEuMzFzLS40OS0xLjMyLTEuMDgtMS4zMloiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNCIKICAgICAgICBkPSJtODk3Ljg2LDg0NS40OHMtLjQ1LjA5LTEuMDkuMThjLS42OC4wOS0xLjUuMzItMi4zNi41LTEuNzIuMzYtMy40Ljc3LTMuNC43N2wuNSwyLjI3czEuNjgtLjQxLDMuMzUtLjc3Yy44Ni0uMTgsMS42OC0uNDEsMi4zMS0uNS42My0uMDksMS4wOC0uMTksMS4wOC0uMTlsLS40MS0yLjI2WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im04ODguMTYsODQ3LjU3cy0uMjIuMDQtLjU0LjEzYy0uMzEuMDktLjcyLjIzLTEuMTMuMzItLjg2LjI3LTEuNjcuNS0xLjY3LjVsLjU5LDIuMjJzLjg2LS4yMiwxLjY4LS40NWMuNDEtLjEzLjgxLS4yMiwxLjEzLS4zMi4zMS0uMDkuNS0uMTMuNS0uMTNsLS41NS0yLjI3WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im04ODIsODQ5LjM0cy0uNDEuMDktMS4wNC4yOGMtLjY0LjE4LTEuNS40NS0yLjMyLjcyLTEuNjMuNTktMy4zLDEuMTQtMy4zLDEuMTRsLjc3LDIuMjJzMS42My0uNTksMy4yNi0xLjEzYy44Mi0uMjcsMS42My0uNTQsMi4yNy0uNzMuNTktLjE4Ljk5LS4yNy45OS0uMjdsLS42My0yLjIyWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im04NzIuNTgsODUyLjQ2cy0uNDUuMTMtMS4wNS4zNmMtLjU5LjI4LTEuNC41OS0yLjIyLjkxLTEuNjMuNjgtMy4yNywxLjMyLTMuMjcsMS4zMmwuOTEsMi4xM3MxLjYzLS42NCwzLjIxLTEuMjdjLjgyLS4zMSwxLjU5LS42MywyLjE4LS45MS41OS0uMjMsMS4wNC0uMzYsMS4wNC0uMzZsLS44Mi0yLjE3WiIgLz4KICAgICAgPHBvbHlnb24gY2xhc3M9ImNscy00IiBwb2ludHM9Ijg2My40MyA4NTYuMjIgODYwLjI2IDg1Ny43MiA4NjEuMjYgODU5LjggODY0LjM0IDg1OC4zNSA4NjMuNDMgODU2LjIyIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiCiAgICAgICAgZD0ibTg1Ny42Myw4NTguOTRzLS40MS4xOC0xLC41Yy0uNTkuMzEtMS4zNi43Mi0yLjEzLDEuMTgtLjc3LjQxLTEuNTQuODEtMi4wOCwxLjE4LS42LjM2LS45NS41OS0uOTUuNTlsMS4yMiwxLjk5cy4zNi0uMjcuOTEtLjU5Yy41NS0uMzYsMS4zMi0uNzIsMi4wNC0xLjE4Ljc3LS40MSwxLjQ5LS44MiwyLjA0LTEuMDkuNTktLjM2Ljk1LS40OS45NS0uNDlsLS45OS0yLjA5WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im04NDguOTcsODYzLjk3cy0uMzYuMjctLjkxLjYzYy0uNTUuMzYtMS4yNy44Ni0xLjk1LDEuNDEtMS40NS45OS0yLjg1LDIuMDQtMi44NSwyLjA0bDEuNCwxLjg2czEuNDEtMS4wNCwyLjc3LTIuMDRjLjcyLS40OSwxLjQtMSwxLjk1LTEuMzYuNTQtLjM2Ljg2LS41OS44Ni0uNTlsLTEuMjctMS45NVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNCIKICAgICAgICBkPSJtODQxLDg2OS44NnMtLjY4LjU0LTEuMzYsMS4xM2MtLjM2LjI3LS42OC41NC0uOTUuNzItLjI3LjIzLS40LjM2LS40LjM2bDEuNDksMS43N3MuMTMtLjE0LjQxLS4zNmMuMjItLjE5LjU5LS40Ni45LS43My42OC0uNTQsMS4zNi0xLjA4LDEuMzYtMS4wOGwtMS40NS0xLjgxWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im04MzYuMDYsODczLjk4cy0uMzIuMzItLjgxLjcyYy0uNDUuNDUtMS4xMywxLTEuNzcsMS42My0xLjI3LDEuMTgtMi41NCwyLjQtMi41NCwyLjRsMS41OSwxLjY4czEuMjctMS4yMiwyLjU0LTIuNGMuNTktLjU5LDEuMjctMS4xMywxLjczLTEuNTQuNDktLjQ1LjgxLS43My44MS0uNzNsLTEuNTQtMS43N1oiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNCIKICAgICAgICBkPSJtODI4LjgxLDg4MC43OHMtMS4yMiwxLjIyLTIuNDQsMi40OWMtMS4yMywxLjIyLTIuNDEsMi40OS0yLjQxLDIuNDlsMS42OCwxLjU5czEuMTgtMS4yNywyLjQtMi40OWMxLjIyLTEuMjIsMi40MS0yLjQ0LDIuNDEtMi40NGwtMS42My0xLjYzWiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im04MjEuOTcsODg3Ljg5cy0uNTkuNjMtMS4xOCwxLjI3Yy0uNTkuNjgtMS4xOCwxLjMyLTEuMTgsMS4zMmwxLjc3LDEuNTRzLjU0LS42MywxLjEzLTEuMjdjLjU5LS42MywxLjE4LTEuMjcsMS4xOC0xLjI3bC0xLjcyLTEuNTlaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiCiAgICAgICAgZD0ibTgxNy43MSw4OTIuNjVzLS4yNy4zNi0uNzIuODFjLS40MS40OS0xLDEuMTgtMS41NCwxLjg2LTEuMTMsMS4zMi0yLjIyLDIuNjgtMi4yMiwyLjY4bDEuODEsMS40NXMxLjA4LTEuMzIsMi4xNy0yLjYzYy41NC0uNjgsMS4xMy0xLjM2LDEuNTQtMS44MS40Ni0uNS43My0uODIuNzMtLjgybC0xLjc3LTEuNTRaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiCiAgICAgICAgZD0ibTgxMS4zNyw5MDAuMjZzLTEuMDgsMS4zNi0yLjE3LDIuNzZjLS41NS42OC0xLjA0LDEuMzYtMS40NSwxLjg2LS40LjU0LS42My44Ni0uNjMuODZsMS44MSwxLjQ1cy4yNy0uMzYuNjgtLjkxYy4zNi0uNS45MS0xLjE4LDEuNDQtMS44NiwxLjA1LTEuMzYsMi4xMy0yLjcyLDIuMTMtMi43MmwtMS44MS0xLjQ1WiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im04MDUuMzQsOTA4LjFzLS41NC42OC0xLjA0LDEuNDFjLS41LjY4LTEsMS40LTEsMS40bDEuODUsMS4zNnMuNS0uNzIsMS0xLjRjLjU0LS43MywxLjA0LTEuNDEsMS4wNC0xLjQxbC0xLjg2LTEuMzZaIiAvPgogICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiCiAgICAgICAgZD0ibTgwMS41OCw5MTMuMjdzLS4yMy4zNi0uNTkuOTFjLS4zNy41NS0uODYsMS4yMi0xLjM2LDEuOTUtLjUuNzItMSwxLjQ1LTEuMzYsMi0uMzcuNTQtLjU5LjkxLS41OS45MWwxLjksMS4yN3MuMjctLjM2LjY0LS44NmMuMzYtLjU0LjgxLTEuMjcsMS4zMS0xLjk5LjUtLjczLDEtMS40MSwxLjM2LTEuOTUuMzctLjU0LjYtLjkxLjYtLjkxbC0xLjktMS4zMVoiIC8+CiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNCIKICAgICAgICBkPSJtNzk2LjEsOTIxLjUxcy0uMjcuMzYtLjYzLjkxYy0uMzIuNTQtLjgxLDEuMjctMS4yNywyLjA0LS45LDEuNDktMS44MSwyLjk0LTEuODEsMi45NGwxLjk5LDEuMjJzLjkxLTEuNDksMS44MS0yLjk1Yy40NS0uNzYuOTEtMS40OSwxLjI3LTIuMDQuMzItLjU0LjYtLjkxLjYtLjkxbC0xLjk1LTEuMjJaIiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iNTMwLjU1IDczNC4zIDUzNi4wMyA3MzcuODggNTMzLjA5IDc0Mi40MSA1MjcuNjEgNzM4Ljg4IDUzMC41NSA3MzQuMyIgLz4KICAgICAgPHBvbHlnb24gY2xhc3M9ImNscy00IiBwb2ludHM9IjUwNy44NiA3MjIuMTEgNTA5LjAzIDcyMi44OCA1MDguNCA3MjMuODggNTA3LjIyIDcyMy4wNyA1MDcuODYgNzIyLjExIiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iNDgxLjk0IDcxMy4wNSA0ODUuOTMgNzE1LjYzIDQ4My43OSA3MTguOTkgNDc5Ljc2IDcxNi4zNiA0ODEuOTQgNzEzLjA1IiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iNDgwLjU4IDcwOC43IDQ4NC4zOCA3MTEuMiA0ODIuMzUgNzE0LjM3IDQ3OC40OSA3MTEuODcgNDgwLjU4IDcwOC43IiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iNTE4LjgyIDcxMi40NiA1MjYuMTUgNzE3LjIyIDUyMi4yMSA3MjMuMzQgNTE0LjgzIDcxOC41NCA1MTguODIgNzEyLjQ2IiAvPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTQiIHg9IjcxMS42IiB5PSI0ODkuMzYiIHdpZHRoPSI3LjYyIiBoZWlnaHQ9IjYuMyIgLz4KICAgICAgPHJlY3QgY2xhc3M9ImNscy00IiB4PSI3MjUuODMiIHk9IjQ3NS4xNCIgd2lkdGg9IjEyLjc4IiBoZWlnaHQ9IjEwLjYiIC8+CiAgICAgIDxyZWN0IGNsYXNzPSJjbHMtNCIgeD0iNzI4LjA1IiB5PSI1MDcuMTMiIHdpZHRoPSIxLjEzIiBoZWlnaHQ9Ii45NSIgLz4KICAgICAgPHJlY3QgY2xhc3M9ImNscy00IiB4PSI1ODUuMTUiIHk9IjU0MC42NiIgd2lkdGg9IjIuOSIgaGVpZ2h0PSIyLjQiIC8+CiAgICAgIDxyZWN0IGNsYXNzPSJjbHMtNCIgeD0iNjE0LjAxIiB5PSI1NDEuMTUiIHdpZHRoPSIxLjY4IiBoZWlnaHQ9IjEuNCIgLz4KICAgICAgPHJlY3QgY2xhc3M9ImNscy00IiB4PSI2MTQuMjgiIHk9IjU3My4yNyIgd2lkdGg9IjEuMTMiIGhlaWdodD0iLjk2IiAvPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTQiIHg9IjYxNi4wOSIgeT0iNTU3LjYiIHdpZHRoPSI1LjM0IiBoZWlnaHQ9IjQuNDQiIC8+CiAgICAgIDxyZWN0IGNsYXNzPSJjbHMtNCIgeD0iNjE0Ljk2IiB5PSI1ODcuNDIiIHdpZHRoPSI3LjYxIiBoZWlnaHQ9IjYuMyIgLz4KICAgICAgPHJlY3QgY2xhc3M9ImNscy00IiB4PSI1NjMuNjciIHk9IjU1OC41MSIgd2lkdGg9IjQuOCIgaGVpZ2h0PSIzLjk4IiAvPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTQiIHg9IjU5OS4xNSIgeT0iNjAxLjkxIiB3aWR0aD0iOS4wNiIgaGVpZ2h0PSI3LjQ4IiAvPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTQiIHg9IjYxNS42NCIgeT0iNTk4Ljk3IiB3aWR0aD0iMS40MSIgaGVpZ2h0PSIxLjE3IiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iODU1LjA1IDUxOC43NyA4NTMuNzggNTE5Ljg2IDg1Mi45MiA1MTguODIgODU0LjE5IDUxNy43MyA4NTUuMDUgNTE4Ljc3IiAvPgogICAgICA8cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iODcyLjEzIDUyOS44NyA4NjguMDUgNTMzLjM2IDg2NS4xNSA1MjkuOTYgODY5LjIyIDUyNi41MiA4NzIuMTMgNTI5Ljg3IiAvPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTQiIHg9Ijg2My40IiB5PSI1NjguNiIgd2lkdGg9IjcuMzkiIGhlaWdodD0iNi4xNCIKICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzLjQzIDcwMC44Mikgcm90YXRlKC00MC41NCkiIC8+CiAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtNCIgcG9pbnRzPSI4NzYuNjEgNTU4Ljc4IDg3Mi4xMyA1NjIuNjMgODY4LjkxIDU1OC44NyA4NzMuNDQgNTU1LjAyIDg3Ni42MSA1NTguNzgiIC8+CiAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtNCIgcG9pbnRzPSI4OTIuNzkgNTc0LjUgODg1LjkgNTgwLjM0IDg4MS4wMSA1NzQuNjQgODg3Ljg5IDU2OC44IDg5Mi43OSA1NzQuNSIgLz4KICAgICAgPHJlY3QgY2xhc3M9ImNscy00IiB4PSI4MjIuNDciIHk9IjkzLjA2IiB3aWR0aD0iMS40NSIgaGVpZ2h0PSIxLjE4IiAvPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTQiIHg9IjgyMC40OCIgeT0iMTIzLjI4IiB3aWR0aD0iNS40NCIgaGVpZ2h0PSI0LjQ5IiAvPgogICAgICA8cmVjdCBjbGFzcz0iY2xzLTQiIHg9Ijc5NS44NyIgeT0iMTE1LjY3IiB3aWR0aD0iNC42NyIgaGVpZ2h0PSIzLjkiIC8+CiAgICAgIDxyZWN0IGNsYXNzPSJjbHMtNCIgeD0iODI2LjQxIiB5PSIxMDEuMDQiIHdpZHRoPSI4Ljc5IiBoZWlnaHQ9IjcuMjUiIC8+CiAgICAgIDxyZWN0IGNsYXNzPSJjbHMtNCIgeD0iODI4LjI3IiB5PSIxMzguOTEiIHdpZHRoPSIxMi43OCIgaGVpZ2h0PSIxMC41NiIgLz4KICAgICAgPHJlY3QgY2xhc3M9ImNscy00IiB4PSI4MjIuMzMiIHk9IjE2Mi41NiIgd2lkdGg9IjYuNTciIGhlaWdodD0iNS40NCIgLz4KICAgICAgPHBvbHlnb24gY2xhc3M9ImNscy00IiBwb2ludHM9IjM1NS4xMiA0NDQuNTYgMzUyLjQ5IDQ1MC41NCAzNDcuNTUgNDQ4LjQxIDM1MC4xNCA0NDIuMzggMzU1LjEyIDQ0NC41NiIgLz4KICAgICAgPHBhdGggY2xhc3M9ImNscy00IgogICAgICAgIGQ9Im00OTEuNzcsOTM3LjE5Yy0uNDEtMS44NS0uODYtMy43Mi0xLjMyLTUuNjJsMi4yNy0uNTRjLjQ1LDEuOS45MSwzLjgsMS4zMiw1LjY2bC0yLjI3LjQ5Wm0tMS44MS03Ljg4bC0uNTQtMi4yNywyLjIxLS41NC41NSwyLjI3LTIuMjIuNTRabS0xLjA5LTQuNTNjLS40NS0xLjg2LS45NS0zLjcxLTEuNC01LjYxbDIuMjctLjU1Yy40NSwxLjkxLjkxLDMuNzYsMS4zNiw1LjYybC0yLjIyLjU0Wm0tMi03Ljg0Yy0uNDUtMS44Ni0uOTUtMy43Ni0xLjQtNS42MmwyLjIyLS41OWMuNSwxLjg2Ljk5LDMuNzYsMS40NCw1LjYxbC0yLjI3LjU5Wm0tMi4wNC03Ljg4bC0uNTktMi4yMiwyLjI3LS41OS41OSwyLjIyLTIuMjYuNTlabS0xLjE4LTQuNDljLS41LTEuODEtMS4wNC0zLjcxLTEuNTQtNS41N2wyLjIyLS42NGMuNTUsMS45LDEuMDQsMy43NiwxLjU0LDUuNjJsLTIuMjIuNTlabS0yLjE3LTcuNzljLS41NC0xLjg2LTEuMDktMy43Mi0xLjYzLTUuNTdsMi4yMi0uNjNjLjU1LDEuODYsMS4wOSwzLjcxLDEuNjMsNS41OGwtMi4yMi42M1ptLTIuMjctNy44bC0uNjgtMi4xNywyLjIyLS42OC42OCwyLjIyLTIuMjIuNjNabS0xLjM2LTQuMzljLS41OS0xLjg2LTEuMTMtMy43Mi0xLjcyLTUuNTNsMi4xNy0uNzNjLjU5LDEuODYsMS4xOCwzLjcxLDEuNzYsNS41OGwtMi4yMi42OFptLTIuNDUtNy43NWMtLjU5LTEuODYtMS4yMi0zLjY2LTEuODEtNS41MmwyLjE3LS43M2MuNjQsMS44NiwxLjIyLDMuNjcsMS44Niw1LjUzbC0yLjIyLjcyWm0tMi41OS03LjdjLS4yMi0uNzItLjQ5LTEuNDUtLjcyLTIuMTdsMi4xNy0uNzdjLjI4LjczLjUsMS40NS43NywyLjE3bC0yLjIyLjc4Wm0tMS40OS00LjRjLS42My0xLjgxLTEuMzEtMy42Mi0xLjk1LTUuNDRsMi4xNy0uNzZjLjYzLDEuODEsMS4zMiwzLjYyLDEuOTUsNS40NGwtMi4xNy43NlptLTIuNzYtNy42MWMtLjY4LTEuODEtMS4zNi0zLjYyLTIuMDktNS4zOWwyLjE4LS44NmMuNzIsMS44MSwxLjQsMy42MywyLjA4LDUuNDRsLTIuMTcuODFabS0yLjktNy41N2MtLjI3LS43Mi0uNTktMS40LS44Ni0yLjEybDIuMTMtLjg2Yy4zMi43Mi41OSwxLjQ1Ljg2LDIuMTdsLTIuMTMuODFabS0xLjcyLTQuMjVjLS43Ny0xLjgxLTEuNDktMy41OC0yLjI3LTUuMzVsMi4xMy0uOTFjLjc3LDEuNzYsMS41NCwzLjUzLDIuMjcsNS4zNWwtMi4xMy45MVptLTMuMTctNy40N2MtLjc3LTEuNzctMS41OS0zLjUzLTIuNC01LjI2bDIuMTMtLjk5Yy44MiwxLjc2LDEuNTksMy41NCwyLjQsNS4zbC0yLjEzLjk2Wm0tMy4zNi03LjM5Yy0uMzYtLjY4LS42OC0xLjM2LS45OS0yLjA5bDIuMDgtMWMuMzIuNzMuNjgsMS40MSwxLDIuMTNsLTIuMDkuOTVabS0yLjA0LTQuMTJjLS44Ni0xLjc2LTEuNzItMy40OS0yLjU4LTUuMTZsMi4wNC0xLjA5Yy45MSwxLjcyLDEuNzYsMy40NCwyLjYzLDUuMjFsLTIuMDksMS4wNFptLTMuNjctNy4yYy0uOTEtMS43My0xLjg2LTMuNC0yLjgxLTUuMDhsMi4wNC0xLjE0Yy45MSwxLjY4LDEuODYsMy40LDIuODEsNS4xMmwtMi4wNCwxLjA5Wm0tMy45NC03LjA3Yy0uNDEtLjYzLS44MS0xLjMyLTEuMjItMS45NWwyLTEuMjNjLjQxLjY4LjgxLDEuMzYsMS4yMiwybC0xLjk5LDEuMThabS0yLjQtMy45NWMtMS4wNC0xLjYzLTIuMDgtMy4yNi0zLjEzLTQuOGwxLjkxLTEuMzJjMS4wNCwxLjU0LDIuMTMsMy4yMiwzLjE3LDQuOWwtMS45NSwxLjIyWm0tNC40NC02LjcxYy0xLjEzLTEuNTgtMi4yNy0zLjE3LTMuNC00LjY2bDEuODYtMS40YzEuMTMsMS41NCwyLjMyLDMuMTMsMy40NSw0Ljc2bC0xLjksMS4zMVptLTQuODEtNi40N2wtMS40NS0xLjgxLDEuODEtMS40NSwxLjQ1LDEuODYtMS44MSwxLjRabS0yLjktMy42M2wtMy41OC00LjUzLDEuODEtMS40NSwzLjYzLDQuNTQtMS44NiwxLjQ1Wm0tNS4wMy02LjM5bC0zLjU4LTQuNTMsMS44MS0xLjQ2LDMuNTcsNC41OC0xLjgxLDEuNDFabS01LjAzLTYuMzRsLTEuNC0xLjgxLDEuODEtMS40NSwxLjQsMS44MS0xLjgxLDEuNDVabS0yLjg1LTMuNjhsLTMuNTgtNC41MywxLjgxLTEuNDUsMy41OCw0LjU4LTEuODEsMS40Wm0tNS4wMy02LjM5bC0zLjU3LTQuNTMsMS44MS0xLjQ1LDMuNTcsNC41Ny0xLjgxLDEuNDFabS01LjAzLTYuMzlsLTEuNC0xLjgxLDEuODEtMS40NSwxLjQ1LDEuODYtMS44NiwxLjRabS0yLjg1LTMuNjJsLTMuNTQtNC41NywxLjgxLTEuNDYsMy41OCw0LjU4LTEuODYsMS40NFptLTQuOTgtNi40M2MtMS4xOC0xLjU1LTIuMzYtMy4wOS0zLjU0LTQuNThsMS44Ni0xLjRjMS4xMywxLjQ5LDIuMzEsMy4wNCwzLjUzLDQuNTdsLTEuODYsMS40MVptLTQuOTQtNi40NGwtMS40LTEuODEsMS44MS0xLjQ1LDEuNCwxLjg2LTEuODEsMS40MVptLTIuODYtMy42N2MtMS4xOC0xLjU0LTIuMzYtMy4wOC0zLjQ5LTQuNjJsMS44MS0xLjQxYzEuMTgsMS41NCwyLjM2LDMuMDgsMy41Myw0LjYybC0xLjg2LDEuNFptLTQuODktNi40OGMtMS4xOC0xLjU0LTIuMzYtMy4wOC0zLjQ5LTQuNjJsMS44MS0xLjRjMS4xNywxLjU1LDIuMzEsMy4wOCwzLjQ5LDQuNjNsLTEuODEsMS40Wm0tNC44OS02LjQ4bC0xLjQxLTEuODYsMS44Ni0xLjQxLDEuNCwxLjg2LTEuODYsMS40Wm0tMi43Ny0zLjcxYy0xLjE4LTEuNTktMi4zNi0zLjEzLTMuNDktNC42N2wxLjktMS4zNmMxLjEzLDEuNTQsMi4yNywzLjA4LDMuNDUsNC42MmwtMS44NiwxLjRabS00Ljg1LTYuNTdjLTEuMTQtMS41NC0yLjI3LTMuMTItMy40LTQuNjdsMS44Ni0xLjM2YzEuMTQsMS41NCwyLjI3LDMuMTMsMy40LDQuNjZsLTEuODYsMS4zNlptLTQuNzYtNi41N2wtMS4zNi0xLjksMS45LTEuMzEsMS4zNiwxLjg2LTEuOSwxLjM2Wm0tMi43Mi0zLjc2Yy0xLjA4LTEuNjMtMi4yMi0zLjIxLTMuMzEtNC43NmwxLjktMS4zNmMxLjA5LDEuNTgsMi4xNywzLjE3LDMuMyw0Ljc2bC0xLjksMS4zNlptLTQuNjEtNi43Yy0xLjEzLTEuNTktMi4yMi0zLjIyLTMuMjYtNC44MWwxLjktMS4yN2MxLjA4LDEuNTksMi4xNywzLjE3LDMuMjYsNC43NmwtMS45LDEuMzJabS00LjU4LTYuN2wtMS4yNy0xLjk1LDEuOS0xLjI3LDEuMzEsMS45LTEuOTUsMS4zMlptLTIuNTQtMy45Yy0xLjA5LTEuNjMtMi4xMy0zLjI3LTMuMTctNC44OWwxLjk1LTEuMjNjMS4wNCwxLjU5LDIuMDgsMy4yMiwzLjEzLDQuODVsLTEuOSwxLjI3Wm0tNC40LTYuODRjLTEuMDQtMS42OC0yLjA4LTMuMzYtMy4wMy00Ljk5bDItMS4xOGMuOTUsMS42MywxLjk1LDMuMjYsMi45OSw0Ljk0bC0xLjk1LDEuMjNabS00LjI2LTYuOThjLS4zNi0uNjgtLjc3LTEuMzYtMS4xOC0xLjk5bDIuMDQtMS4xOGMuMzYuNjguNzcsMS4zMiwxLjEzLDJsLTEuOTksMS4xOFptLTIuMzEtNC4wM2MtMS0xLjczLTEuOTUtMy4zOS0yLjg2LTUuMDdsMi4wNC0xLjA5Yy45MSwxLjYzLDEuODUsMy4zLDIuODEsNS4wM2wtMiwxLjEzWm0tMy45NS03LjE2Yy0uOS0xLjcyLTEuODEtMy40OS0yLjY3LTUuMTZsMi4wOC0xLjA1Yy44MSwxLjY4LDEuNzIsMy40LDIuNjMsNS4xN2wtMi4wNCwxLjA0Wm0tMy42Ni03LjI1Yy0uMzYtLjczLS42OC0xLjQ1LTEtMi4xM2wyLjA4LS45NWMuMzIuNjguNjgsMS4zNiwxLDIuMDlsLTIuMDgsMVptLTEuOTUtNC4yNmMtLjgyLTEuODEtMS41OS0zLjYzLTIuMzEtNS4zNGwyLjE3LS45MWMuNjgsMS43NiwxLjQ1LDMuNTMsMi4yMiw1LjNsLTIuMDguOTVabS0zLjE3LTcuNTNjLS42OC0xLjktMS4zNi0zLjcxLTEuOTUtNS41MmwyLjE4LS43M2MuNTksMS43NywxLjI3LDMuNTgsMS45NSw1LjM5bC0yLjE3Ljg2Wm0tMi42OC03Ljc0Yy0uMjItLjc3LS40NS0xLjQ5LS42OC0yLjI3bDIuMjctLjYzYy4xOC43My40MSwxLjQ1LjYzLDIuMjJsLTIuMjIuNjhabS0xLjI3LTQuNTNjLS41LTEuOS0uOTYtMy44NS0xLjMyLTUuNzFsMi4zMS0uNDVjLjMxLDEuODYuNzcsMy43MSwxLjIyLDUuNTdsLTIuMjIuNTlabS0xLjcyLTguMDJjLS4zMi0xLjk5LS41NC0zLjk0LS43My01Ljg0bDIuMzEtLjE5Yy4xOCwxLjg2LjQxLDMuNzYuNzMsNS42N2wtMi4zMS4zNlptLS44Ni04LjJjLS4wNC0uNzctLjA5LTEuNTgtLjA5LTIuMzVsMi4zMi0uMDVjMCwuNzYuMDQsMS41NC4wOSwyLjI3bC0yLjMxLjEzWm0yLjIyLTQuNjZsLTIuMzItLjA1Yy4wNS0xLjk5LjE0LTMuOTQuMzYtNS44OWwyLjMyLjI3Yy0uMjMsMS44Ni0uMzIsMy43Ni0uMzYsNS42NlptLjYzLTcuOTNsLTIuMjctLjM2Yy4yNy0xLjkuNjgtMy44NSwxLjEzLTUuNzVsMi4yNy41NGMtLjQ2LDEuODEtLjg2LDMuNzEtMS4xMyw1LjU3Wm0xLjcyLTcuNzVsLTIuMjItLjY4Yy4yMy0uNzIuNDYtMS40OS42OC0yLjIybDIuMjIuNzJjLS4yNy43Mi0uNDUsMS40NS0uNjgsMi4xN1ptMS40LTQuMzVsLTIuMTMtLjgxYy42NC0xLjgxLDEuNDUtMy42MywyLjMxLTUuMzlsMi4wOSwxYy0uODYsMS43Mi0xLjU5LDMuNDktMi4yNyw1LjIxWm0zLjI3LTcuMjVsLTIuMDQtMS4wOWMuODYtMS42OCwxLjg2LTMuNCwyLjg5LTUuMDhsMiwxLjIzYy0xLjA0LDEuNjMtMiwzLjMtMi44Niw0Ljk0Wm00LjA4LTYuODhsLTEuOTUtMS4yN2MuNDUtLjY0Ljg2LTEuMzIsMS4zNi0xLjk1bDEuODYsMS4zNmMtLjQxLjU5LS44NiwxLjIyLTEuMjcsMS44NlptMi42Mi0zLjcybC0xLjg2LTEuNGMxLjEzLTEuNDksMi4zNi0zLjA4LDMuNjMtNC41OGwxLjc3LDEuNDVjLTEuMjIsMS41NC0yLjQ1LDMuMDQtMy41NCw0LjUzWm01LjAzLTYuMjVsLTEuNzItMS41NGMxLjIyLTEuNCwyLjU4LTIuODYsMy45NC00LjMxbDEuNjgsMS42M2MtMS4zNiwxLjQtMi42OCwyLjgxLTMuOSw0LjIxWm01LjUzLTUuODVsLTEuNjgtMS42N2MuNTQtLjU1LDEuMTMtMS4wOSwxLjY4LTEuNjRsMS42MywxLjY4Yy0uNTkuNTQtMS4xMywxLjA5LTEuNjMsMS42M1ptMy4yNi0zLjIybC0xLjU5LTEuNjhjMS40LTEuMzEsMi44Ni0yLjYyLDQuMzUtMy45NGwxLjU0LDEuNzdjLTEuNSwxLjI3LTIuOTUsMi41OS00LjMxLDMuODVabTYuMDItNS4zOWwtMS40OS0xLjc2YzEuNC0xLjE4LDIuOTUtMi40NSw0LjQ5LTMuNzJsMS40NSwxLjgxYy0xLjU0LDEuMjctMy4wNCwyLjQ5LTQuNDQsMy42N1ptNi4yNS01LjA3bC0xLjQ1LTEuODZjLjYzLS40NSwxLjIyLS45NSwxLjg2LTEuNGwxLjQsMS44MWMtLjU5LjQ5LTEuMjIuOTUtMS44MSwxLjQ1Wm0zLjY4LTIuODZsLTEuNDEtMS44MWMxLjQ5LTEuMTgsMy4wOC0yLjMxLDQuNjYtMy40OGwxLjM2LDEuOWMtMS41OSwxLjEzLTMuMTIsMi4yNy00LjYyLDMuNFptNi41Mi00Ljc2bC0xLjM2LTEuOWMxLjU0LTEuMDksMy4xNy0yLjE4LDQuODEtMy4zMWwxLjI3LDEuOWMtMS41OSwxLjEzLTMuMTcsMi4yMi00LjcxLDMuMzFabTYuNjYtNC41N2wtMS4zMi0xLjk1Yy42My0uNDEsMS4yNy0uODcsMS45NS0xLjI3bDEuMjcsMS45NWMtLjYzLjQxLTEuMjcuODEtMS45LDEuMjdabTMuODUtMi41NGwtMS4yNy0xLjk1YzEuNTktMS4wNCwzLjIyLTIuMTMsNC44OS0zLjE3bDEuMjIsMS45OWMtMS42MywxLjA0LTMuMjYsMi4wOS00Ljg1LDMuMTNabTYuOC00LjRsLTEuMjItMS45NWMxLjYzLTEsMy4yNi0yLjA0LDQuOTQtMy4wNGwxLjIzLDEuOTVjLTEuNjgsMS4wNC0zLjMxLDIuMDQtNC45NCwzLjAzWm02LjkzLTQuMjFsLTEuMjItMmMuNjgtLjQxLDEuMzYtLjgxLDItMS4xOGwxLjIyLDEuOTljLS42OC4zNi0xLjM2Ljc3LTIsMS4xOFptMy45NC0yLjM2bC0xLjE4LTJjMS42Ny0xLDMuMzUtMS45NSw1LjAzLTIuOTRsMS4xOCwxLjk5Yy0xLjcyLDEtMy4zNSwxLjk1LTUuMDMsMi45NVptNy4wMi00LjA4bC0xLjEzLTIuMDQsMS43Mi0uOTVjMS4wOS0uNjMsMi4xNy0xLjI3LDMuMjYtMS45bDEuMTcsMS45OWMtMS4wOC42NC0yLjIyLDEuMjctMy4zMSwxLjlsLTEuNzIsMVptNy4wNy00LjA4bC0xLjE3LTIsMi0xLjE4LDEuMTgsMS45OS0yLDEuMThabTMuOTktMi4zNmwtMS4xOC0xLjk5YzEuNjMtLjk5LDMuMzEtMS45OSw0Ljk0LTIuOTlsMS4yMiwxLjk1Yy0xLjY4LDEuMDQtMy4zMSwyLjA0LTQuOTgsMy4wM1ptNi45My00LjIxbC0xLjE4LTEuOTksNC45NC0zLjA0LDEuMTcsMS45OS00LjkzLDMuMDRabTYuOTMtNC4yNmwtMS4yMi0xLjk1LDItMS4yMiwxLjIyLDItMiwxLjE4Wm0zLjk0LTIuNGwtMS4xOC0xLjk5YzEuNjMtLjk5LDMuMjYtMS45OSw0Ljk0LTIuOTlsMS4xOCwyYy0xLjYzLjk5LTMuMzEsMS45OS00LjkzLDIuOThabTYuOTMtNC4xN2wtMS4xNy0xLjk5YzEuNjMtMSwzLjMxLTIsNC45OC0yLjk1bDEuMTgsMS45OWMtMS42OCwxLTMuMywxLjk1LTQuOTgsMi45NVptNi45OC00LjEybC0xLjEzLTIsMS45OS0xLjE4LDEuMTgsMi4wNC0yLjA0LDEuMTRabTQuMDMtMi4yN2wtMS4xMy0yLjA0YzEuNjgtLjksMy4zNi0xLjg2LDUuMDgtMi44MWwxLjEzLDIuMDRjLTEuNzIuOTUtMy40LDEuODYtNS4wNywyLjgxWm03LjExLTMuOWwtMS4wOS0yLjA0YzEuNjgtLjkxLDMuNC0xLjgxLDUuMTItMi42N2wxLjA4LDIuMDRjLTEuNzYuOTEtMy40NCwxLjc3LTUuMTIsMi42N1ptNy4xNi0zLjcxbC0xLjA0LTIuMDljLjY4LS4zMiwxLjQtLjY4LDIuMDgtMWwxLjA1LDIuMDljLS43My4zMi0xLjQxLjY4LTIuMDksMVptNC4xMy0yLjA0bC0xLTIuMDljMS43Mi0uODEsMy40OS0xLjYzLDUuMjUtMi40OWwxLDIuMTNjLTEuNzcuODEtMy41MywxLjYzLTUuMjUsMi40NVptNy4zNC0zLjRsLS45NS0yLjEzYzEuNzctLjc3LDMuNTMtMS41NCw1LjM1LTIuMzFsLjkxLDIuMTNjLTEuODEuNzctMy41NywxLjU0LTUuMywyLjMyWm03LjQzLTMuMjJsLS45LTIuMTNjLjcyLS4zMiwxLjQ1LS41OSwyLjE3LS45MWwuODYsMi4xOGMtLjczLjI3LTEuNDUuNTQtMi4xMy44NlptNC4yNi0xLjc2bC0uODYtMi4xM2MxLjc3LS43MywzLjU4LTEuNDEsNS40NC0yLjA5bC44MSwyLjEzYy0xLjgxLjczLTMuNjIsMS40MS01LjM5LDIuMDlabTcuNTYtMi44NmwtLjgxLTIuMTdjMS44MS0uNjgsMy42Mi0xLjMxLDUuNDgtMS45OWwuNzcsMi4yMmMtMS44Ni42My0zLjY3LDEuMjctNS40NCwxLjk1Wm03LjYxLTIuNzJsLS43Ny0yLjE3Yy43Ny0uMjcsMS40OS0uNDksMi4yMi0uNzdsLjczLDIuMjJjLS43My4yMy0xLjQ1LjQ5LTIuMTcuNzJabTQuMzktMS40NWwtLjcyLTIuMThjMS44MS0uNTksMy42Ny0xLjE4LDUuNTMtMS43NmwuNjgsMi4yMmMtMS44Ni41OS0zLjY4LDEuMTMtNS40OSwxLjczWm03LjctMi40MWwtLjYzLTIuMjJjMS44MS0uNTUsMy42Ny0xLjA0LDUuNTctMS41OWwuNjMsMi4yMmMtMS45LjU0LTMuNzYsMS4wOS01LjU4LDEuNTlabTcuOC0yLjE3bC0uNjMtMi4yN2MuNzYtLjE4LDEuNDktLjQxLDIuMjctLjU5bC41OSwyLjIyYy0uNzMuMjMtMS40OS40MS0yLjIyLjYzWm00LjQ0LTEuMjJsLS41NC0yLjIyYzEuODEtLjUsMy43MS0uOTUsNS42MS0xLjQxbC41NCwyLjIyYy0xLjkuNDUtMy43Ni45NS01LjYyLDEuNFptNy44OC0xLjk1bC0uNTQtMi4yN2MxLjg2LS40LDMuNzYtLjg2LDUuNjYtMS4yN2wuNSwyLjI3Yy0xLjkuNDEtMy43Ny44Ni01LjYyLDEuMjdabTcuODktMS43NmwtLjUtMi4yNywyLjI3LS41LjUsMi4yNy0yLjI3LjVabTQuNTMtMWwtLjQ1LTIuMjdjMS44Ni0uMzYsMy43Ni0uNzcsNS42Ny0xLjEzbC40NSwyLjI3Yy0xLjkuMzYtMy44MS43Ny01LjY3LDEuMTNabTcuOTMtMS41NGwtLjQxLTIuMzFjMS44Ni0uMzYsMy43Ni0uNjgsNS43LTEuMDRsLjQxLDIuMjdjLTEuOTUuMzYtMy44NS43Mi01LjcxLDEuMDhabTcuOTctMS40NWwtLjQxLTIuMzEsMi4zMi0uNDEuMzYsMi4zMi0yLjI3LjRabTQuNTctLjc3bC0uNDEtMi4zMWMxLjktLjMyLDMuOC0uNjMsNS43Ni0uOWwuMzYsMi4yN2MtMS45NS4zMi0zLjg1LjYzLTUuNzEuOTVabTcuOTgtMS4yN2wtLjMyLTIuMzFjMS45LS4yNywzLjgtLjU0LDUuNzUtLjgxbC4zMiwyLjI3Yy0xLjk1LjI3LTMuODUuNTUtNS43Ni44NlptOC4wMi0xLjE4bC0uMzItMi4yNywyLjMxLS4zMi4zMiwyLjI3LTIuMzEuMzJabTQuNjItLjU5bC0uMzEtMi4zMmMxLjktLjIyLDMuOC0uNDksNS43NS0uNzJsLjI3LDIuMzFjLTEuOS4yMi0zLjg1LjQ1LTUuNzEuNzNabTguMDItMWwtLjI3LTIuMzFjMS45LS4yMiwzLjg1LS40NSw1Ljc2LS42M2wuMjcsMi4yN2MtMS45NS4yMi0zLjg1LjQ1LTUuNzUuNjhabTguMDYtLjkxbC0uMjctMi4zMSwyLjMxLS4yMi4yOCwyLjMxLTIuMzIuMjJabTQuNTgtLjVsLS4yMy0yLjI3YzEuOS0uMjIsMy44NS0uNDEsNS44LS41OWwuMjMsMi4zMmMtMS45NS4xOC0zLjkuMzYtNS44LjU0Wm04LjExLS43M2wtLjIzLTIuMzFjMS45LS4xOCwzLjg1LS4zNiw1LjgtLjU0bC4xOCwyLjMxYy0xLjk1LjE4LTMuODUuMzYtNS43NS41NFptOC4wNy0uNzJsLS4xOS0yLjMxLDIuMzEtLjE4LjE5LDIuMzEtMi4zMS4xOVptNC42Mi0uMzZsLS4xOC0yLjMxYzEuOS0uMTMsMy44NS0uMjcsNS44LS40bC4xNCwyLjMxYy0xLjk1LjEzLTMuODUuMjctNS43NS40MVptOC4wNy0uNTRsLS4xNC0yLjMyYzEuOTEtLjE0LDMuODUtLjI3LDUuODEtLjRsLjEzLDIuMzFjLTEuOTUuMTMtMy45LjI3LTUuOC40MVptOC4xMS0uNTVsLS4xMy0yLjMxLDIuMzEtLjE0LjE0LDIuMzEtMi4zMi4xNFptNC42Mi0uMjNsLS4xMy0yLjM1YzEuOS0uMDksMy44NS0uMTgsNS44LS4yN2wuMTMsMi4zMWMtMS45NS4wOS0zLjg5LjE4LTUuOC4zMlptOC4xMS0uNDFsLS4xNC0yLjM1YzEuNTQtLjA1LDMuMDQtLjE0LDQuNTgtLjE4LjM2LDAsLjc4LS4wNCwxLjE0LS4wOWwuMjcsMi4zMWMtLjQ1LjA0LS45LjA4LTEuMzEuMDgtMS41NC4wOS0zLjA0LjE0LTQuNTMuMjNabTguMjQtLjcybC0uNDUtMi4yN2MuNjgtLjE0LDEuNDEtLjMyLDIuMTMtLjU1bC42OCwyLjIyYy0uODEuMjMtMS41OS40NS0yLjM2LjU5Wm00LjYyLTEuMzJsLS43Ny0yLjE3YzEuNjgtLjU5LDMuNDUtMS4zMSw1LjI2LTIuMTdsMSwyLjA4Yy0xLjkuOTEtMy43NiwxLjY4LTUuNDgsMi4yN1ptNy41Ny0zLjNsLTEuMDQtMi4wOGMxLjY4LS44MSwzLjMxLTEuNzcsNC45OC0yLjc3bDEuMjIsMS45NWMtMS43MywxLjA0LTMuNDUsMi4wNC01LjE3LDIuOVptNy4xNi00LjE3bC0xLjI3LTEuOWMuNjQtLjQ2LDEuMjctLjg2LDEuOS0xLjMybDEuMzEsMS45NWMtLjYzLjQxLTEuMzEuODYtMS45NSwxLjI3Wm0zLjg1LTIuNjdsLTEuMzYtMS44NmMxLjU5LTEuMTMsMy4wOC0yLjM1LDQuNDktMy41M2wxLjUsMS43N2MtMS40LDEuMjItMi45OSwyLjQ1LTQuNjMsMy42MlptNi4zOS01LjIxbC0xLjU5LTEuNzJjMS40OS0xLjQxLDIuOC0yLjc3LDMuODktNC4wOGwxLjc3LDEuNDVjLTEuMTQsMS40MS0yLjQ5LDIuODYtNC4wOCw0LjM1Wm01LjUyLTYuM2wtMS45LTEuMjZjLjQ1LS42OC44MS0xLjMyLDEuMDgtMS45MWwyLjA5LDEuMDRjLS4zMi42OC0uNzcsMS40MS0xLjI3LDIuMTNabTIuMTgtNC4zOWwtMi4xOC0uODFjLjYzLTEuODEsMS4zMi0zLjY3LDIuMDQtNS40NGwyLjE4Ljg2Yy0uNzMsMS43Mi0xLjQxLDMuNTMtMi4wNCw1LjM5Wm0yLjktNy41MmwtMi4xNy0uOTFjLjc3LTEuODEsMS41OS0zLjU4LDIuMzYtNS4zNGwyLjEzLDFjLS44MiwxLjcyLTEuNTksMy40OS0yLjMyLDUuMjZabTMuMy03LjM0bC0yLjA4LTFjLjMyLS43Mi42OC0xLjQsMS4wNC0yLjEzbDIuMDQsMS4wOGMtLjMyLjY4LS42OCwxLjM2LTEsMi4wNFptMi4wOS00LjA4bC0yLjA0LTEuMDhjLjkxLTEuNzcsMS44Ni0zLjQ0LDIuODUtNS4xMmwyLDEuMThjLS45NSwxLjYzLTEuOSwzLjMxLTIuODEsNS4wM1ptMy45OC02Ljk3bC0xLjk1LTEuMjJjMS0xLjY4LDIuMDgtMy4zMSwzLjE3LTQuODlsMS45LDEuMzFjLTEuMDUsMS41NC0yLjEzLDMuMTctMy4xMyw0LjhabTQuNDktNi42NmwtMS45LTEuMzZjLjQ1LS42My45NS0xLjI3LDEuNC0xLjlsMS44NiwxLjRjLS40NS42My0uOTEsMS4yMi0xLjM2LDEuODZabTIuNzYtMy42N2wtMS44MS0xLjQ1YzEuMTgtMS41LDIuNDUtMywzLjcyLTQuNDlsMS43NiwxLjU0Yy0xLjI3LDEuNDUtMi40OSwyLjktMy42Nyw0LjM5Wm01LjE3LTYuMTJsLTEuNjgtMS41NGMxLjI3LTEuNDUsMi42My0yLjg1LDQuMDMtNC4yMWwxLjYzLDEuNjNjLTEuMzYsMS4zNi0yLjY4LDIuNzItMy45OCw0LjEyWm01LjY2LTUuNzFsLTEuNjMtMS42OGMuNTktLjU1LDEuMTgtMS4wOSwxLjcyLTEuNjNsMS41OSwxLjcyYy0uNTkuNTQtMS4xMywxLjA0LTEuNjcsMS41OVptMy40LTMuMDhsLTEuNTQtMS43N2MxLjQ1LTEuMjcsMi45NS0yLjU0LDQuNDktMy43NmwxLjQ1LDEuODFjLTEuNDksMS4yMi0yLjk5LDIuNDUtNC4zOSwzLjcyWm02LjItNS4xMmwtMS40LTEuODFjMS40OS0xLjE4LDMuMDgtMi4zNiw0LjY2LTMuNDlsMS4zNiwxLjljLTEuNTksMS4xMy0zLjE3LDIuMjctNC42MiwzLjRabTYuNTItNC43MWwtMS4zMi0xLjljLjY0LS40NSwxLjI3LS45MSwxLjktMS4zMWwxLjMyLDEuOWMtLjY0LjQ1LTEuMjcuODYtMS45MSwxLjMyWm0zLjgxLTIuNThsLTEuMjctMS45NWMxLjY4LTEuMDQsMy4zMS0yLjA4LDQuOTQtMy4xM2wxLjIzLDJjLTEuNTksMS0zLjIyLDIuMDQtNC45LDMuMDhabTYuODQtNC4zbC0xLjE4LTEuOTljMS41OS0uOTUsMy4xNy0xLjksNC43MS0yLjg2bC4yMi0uMTMsMS4yMiwyLS4yNy4xM2MtMS41NC45NS0zLjA5LDEuOS00LjcxLDIuODVabTYuOTgtNC4yMWwtMS4yMy0yYy42OC0uNCwxLjMxLS43NywxLjk5LTEuMThsMS4xOCwxLjk1Yy0uNjQuNDEtMS4zMi44Mi0xLjk1LDEuMjNabTMuOTMtMi40NWwtMS4yMi0xLjk1YzEuODYtMS4xMywzLjQtMi4xNyw0Ljg0LTMuMTJsMS4yNywxLjljLTEuNDEsMS0zLjAzLDIuMDQtNC45LDMuMTdabTYuODUtNC40OGwtMS4zNi0xLjkxYzEuNzItMS4xNywzLjE3LTIuMzEsNC41My0zLjQ0bDEuNDksMS43NmMtMS40LDEuMTgtMi45NSwyLjM2LTQuNjYsMy41OFptNi40My01LjEybC0xLjU0LTEuNzNjLjU1LS41LDEuMDktMS4wNCwxLjYzLTEuNTRsMS42MywxLjYzYy0uNTUuNTUtMS4xMywxLjA5LTEuNzIsMS42M1ptMy4zNS0zLjRsLTEuNzItMS41NGMxLjI3LTEuNCwyLjQtMi45NCwzLjMxLTQuNDRsMS45OSwxLjIyYy0xLDEuNjMtMi4yMiwzLjIxLTMuNTgsNC43NlptNC43Ni02Ljg1bC0yLjA4LTEuMDhjLjg2LTEuNjMsMS41NC0zLjM1LDIuMDQtNS4xMmwyLjIyLjZjLS41NCwxLjk1LTEuMjcsMy44NS0yLjE3LDUuNjFabTIuNzctOC4wNmwtMS41NC0uMjItLjcyLS4xOS40MS0yLjE3LDIuMjYuNDUtLjQsMi4xM1ptLjg2LTQuMzlsLTIuMjctLjQ5Yy40MS0xLjk1LjgxLTMuODEsMS4yMi01LjY2bDIuMjcuNDljLS40MSwxLjgxLS44MiwzLjcyLTEuMjIsNS42NlptMS43Mi03LjkzbC0yLjI3LS40OWMuNDUtMS45NS44Ni0zLjg1LDEuMzItNS42NmwyLjI2LjU1Yy0uNDUsMS44MS0uODYsMy42Ni0xLjMyLDUuNjFabTEuODYtNy44NGwtMi4yNy0uNTljLjIyLS43Ny40LTEuNDkuNTktMi4yMmwyLjI3LjU1Yy0uMjIuNzctLjQxLDEuNDktLjU5LDIuMjdabTEuMTgtNC40OWwtMi4yNy0uNTljLjU0LTEuOTQsMS4wNC0zLjgsMS41OS01LjYxbDIuMjIuNjhjLS41NCwxLjc2LTEuMDQsMy42My0xLjU0LDUuNTJabTIuMjItNy43NGwtMi4yMi0uNjhjLjU5LTEuOSwxLjE4LTMuNzYsMS44MS01LjUzbDIuMTcuNzdjLS41OSwxLjcyLTEuMTgsMy41My0xLjc2LDUuNDRabTIuNTMtNy42MWwtMi4xNy0uNzdjLjI3LS43Ny41NS0xLjQ5LjgyLTIuMjJsMi4xNy44NmMtLjI3LjY4LS41NCwxLjQtLjgyLDIuMTNabTEuNjgtNC4yNmwtMi4xNy0uOTFjLjc3LTEuODYsMS41OS0zLjY3LDIuNC01LjNsMi4wOCwxYy0uODEsMS42My0xLjU5LDMuMzYtMi4zMSw1LjIxWm0zLjMtNy4yNWwtMi4wNC0xLjA0Yy45NS0xLjgxLDEuOTUtMy41MywyLjk0LTUuMDhsMS45NSwxLjIyYy0uOTksMS41NC0xLjk1LDMuMTctMi44NSw0Ljg5Wm00LjEzLTYuNzVsLTEuOS0xLjM2Yy40NS0uNjQuOTUtMS4yNywxLjQtMS44NmwxLjgxLDEuNDFjLS40NS41OS0uOTEsMS4xOC0xLjMxLDEuODFabTIuNzYtMy41NGwtMS43Ny0xLjU0YzEuMzItMS40OSwyLjY4LTIuODYsNC4xNy00LjE3bDEuNTQsMS43MmMtMS40MSwxLjI3LTIuNzIsMi41NC0zLjk0LDMuOTlabTUuNjYtNS4zOWwtMS40NS0xLjgxYzEuNDktMS4xOCwzLjA4LTIuMjcsNC44NS0zLjM2bDEuMjIsMmMtMS42OCwxLTMuMjIsMi4wNC00LjYyLDMuMTdabTYuNTctNC4zNWwtMS4xMy0xLjk5Yy42OC0uNDEsMS4zNi0uNzcsMi4wOC0xLjEzbDEuMDksMi4wNGMtLjY4LjM2LTEuMzYuNzItMi4wNCwxLjA4Wm00LjA4LTIuMDhsLTEuMDQtMi4wOGMxLjY4LS44NiwzLjQtMS42OCw1LjIxLTIuNDlsMSwyLjA4Yy0xLjgxLjgxLTMuNTQsMS42My01LjE3LDIuNDlabTcuMjUtMy40OWwtLjk1LTIuMDhjMS42Ny0uNzcsMy40LTEuNTgsNS4yMS0yLjQ1bC45OSwyLjA5Yy0xLjgxLjg2LTMuNTMsMS42Ny01LjI1LDIuNDRabTcuMzQtMy40OWwtMS4wNC0yLjA4Yy42OC0uMzIsMS4zNi0uNjgsMi4wNC0xLjA0bDEuMDgsMi4wNGMtLjczLjM2LTEuNC43Mi0yLjA4LDEuMDhabTQuMTItMi4xN2wtMS4wOS0yLjA0YzEuNzItLjksMy4zNS0xLjg2LDQuOTgtMi44MWwxLjE4LDJjLTEuNjguOTUtMy4zMSwxLjktNS4wNywyLjg1Wm03LjA3LTQuMDdsLTEuMjItMS45OWMxLjU5LTEsMy4yMi0yLjA0LDQuOC0zLjEzbDEuMzIsMS45Yy0xLjYzLDEuMDgtMy4yNywyLjE3LTQuODksMy4yMlptNi44LTQuNTdsLTEuMzYtMS44NmMuNjMtLjQ1LDEuMjItLjkxLDEuODYtMS4zNmwxLjM2LDEuODZjLS42NC40NS0xLjIyLjk1LTEuODYsMS4zNlptMy43Ni0yLjc3bC0xLjQ1LTEuODZjMS40OS0xLjE0LDMuMDMtMi4zMSw0LjQ5LTMuNThsMS40OSwxLjgxYy0xLjQ5LDEuMjItMy4wNCwyLjQ1LTQuNTMsMy42M1ptNi4zLTUuMTdsLTEuNS0xLjcxYzEuNDEtMS4yMywyLjg1LTIuNTQsNC4zMS0zLjg1bDEuNTQsMS43MmMtMS40NSwxLjMxLTIuOSwyLjYzLTQuMzUsMy44NVptNi4wNy01LjQ0bC0xLjU5LTEuNjhjLjU0LS41NCwxLjA5LTEuMDQsMS42My0xLjU5bDEuNjMsMS42M2MtLjU0LjU1LTEuMTMsMS4wOS0xLjY4LDEuNjNabTMuMzYtMy4yNmwtMS42My0xLjYzYzEuMzItMS4zMiwyLjY3LTIuNzIsNC4wMy00LjEzbDEuNjgsMS42M2MtMS4zNiwxLjQtMi43MiwyLjgxLTQuMDcsNC4xMlptNS42Ni01Ljg1bC0xLjY4LTEuNTljMS4yNy0xLjM2LDIuNTQtMi43NiwzLjg1LTQuMjVsMS43MiwxLjU0Yy0xLjMyLDEuNS0yLjYzLDIuOTUtMy44OSw0LjNabTUuNDQtNi4wMmwtMS43My0xLjU0Yy41MS0uNTksMS0xLjE4LDEuNS0xLjc3bDEuNzYsMS41NWMtLjQ5LjU5LTEsMS4xNy0xLjU0LDEuNzZabTMuMDMtMy41M2wtMS43Ni0xLjQ5YzEuMjItMS40NSwyLjQ1LTIuOTQsMy42Ny00LjQ5bDEuODEsMS40OWMtMS4yNywxLjU0LTIuNDksMy4wNC0zLjcxLDQuNDlabTUuMTctNi4zbC0xLjgxLTEuNDRjMS4xOC0xLjUsMi4zNS0yLjk5LDMuNTgtNC41OGwxLjgxLDEuNDVjLTEuMjIsMS41NC0yLjQxLDMuMDgtMy41OCw0LjU3Wm00Ljk4LTYuNDNsLTEuODYtMS40MWMuNS0uNTkuOTUtMS4yMiwxLjQtMS44NmwxLjg2LDEuNGMtLjQ1LjY0LS45LDEuMjItMS40LDEuODZabTIuODEtMy43MWwtMS44Ni0xLjQxYzEuMDktMS41LDIuMjItMy4wOCwzLjM5LTQuNjdsMS44NywxLjM2Yy0xLjE0LDEuNjMtMi4yNywzLjE3LTMuNCw0LjcyWm00Ljc2LTYuNjJsLTEuOS0xLjMxYzEuMDktMS41NCwyLjIyLTMuMTMsMy4zMS00Ljc2bDEuOTUsMS4zMWMtMS4xMywxLjYzLTIuMjcsMy4yMi0zLjM1LDQuNzZabTQuNjctNi42NmwtMS45NS0xLjMyYy40NS0uNjMuODYtMS4yNywxLjMxLTEuOWwxLjksMS4zMmMtLjQxLjYzLS44NiwxLjI3LTEuMjcsMS45WiIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPg==\";","import { classes } from \"portal/utils/theme\";\nimport { Container, ContainerProps } from \"@mui/material\";\nimport { withErrorBoundary } from \"portal/components/ErrorBoundary\";\nimport backgroundMap from \"portal/images/background_map.svg\";\nimport React, { FunctionComponent, PropsWithChildren } from \"react\";\n\nexport const mapBackgroundStyle = {\n backgroundImage: `url(${backgroundMap})`,\n backgroundAttachment: \"fixed\",\n backgroundPosition: \"bottom right\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\",\n};\n\ninterface Props extends PropsWithChildren {\n maxWidth?: ContainerProps[\"maxWidth\"];\n}\n/**\n * Basic page wrapper for portal.\n * Handles breakpoints, scrolling, default layout, etc\n */\nconst _Page: FunctionComponent = ({ maxWidth = \"xl\", children }) => {\n return (\n \n \n {children}\n \n \n );\n};\n\nexport const Page = withErrorBoundary({}, _Page);\n\n/**\n * Wrapper for an element inside a Page that removes the Page's\n * scroll behavior\n *\n * Can be dynamically disabled to allow scrolling for specific breakpoints\n */\ninterface NoScrollProps extends PropsWithChildren {\n className?: string;\n disable?: boolean;\n}\nexport const NoScroll: FunctionComponent = ({\n className,\n children,\n disable,\n}) => {\n return disable ? (\n children\n ) : (\n \n {children}\n \n );\n};\n","import { Alert, Backdrop, Box, Button, CircularProgress } from \"@mui/material\";\nimport { BG_BACKDROP, classes } from \"portal/utils/theme\";\nimport { FetchBaseQueryError } from \"@reduxjs/toolkit/query\";\nimport { formatError } from \"portal/state/portalApi\";\nimport { ReactComponent as Logo } from \"portal/images/logo_stack.svg\";\nimport { mapBackgroundStyle } from \"./Page\";\nimport { SerializedError } from \"@reduxjs/toolkit\";\nimport { useTranslation } from \"react-i18next\";\nimport BrokenIcon from \"@mui/icons-material/HeartBrokenOutlined\";\nimport React, { FunctionComponent } from \"react\";\n\ninterface Props {\n error?: string | SerializedError | FetchBaseQueryError;\n failed?: boolean;\n loading?: boolean;\n overlay?: boolean;\n variant?: \"opaque\" | \"translucent\";\n}\n\nexport const Loading: FunctionComponent = ({\n error,\n failed,\n loading = true,\n overlay,\n variant = \"opaque\",\n}) => {\n const { t } = useTranslation();\n const loadingContent = (\n \n \n {failed ? (\n }\n action={\n \n }\n >\n
    {t(\"components.Loading.failed\")}
    \n {error && (\n
    \n {formatError(t, error)}\n
    \n )}\n \n ) : (\n \n )}\n
    \n );\n if (!loading) {\n return;\n }\n return overlay ? (\n \n {loadingContent}\n \n ) : (\n \n {loadingContent}\n \n );\n};\n","import { AdvancedAlmanac } from \"./AdvancedAlmanac\";\nimport { Alert, Button, IconButton, Typography } from \"@mui/material\";\nimport { AlmanacConfig } from \"protos/almanac/almanac\";\nimport { BasicAlmanac } from \"./BasicAlmanac\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { ConfigCrop } from \"protos/portal/configs\";\nimport { ConfirmationDialog } from \"../ConfirmationDialog\";\nimport { cropToConfigCrop, getCrops, SortedCrops } from \"portal/utils/crops\";\nimport { EditableTypography } from \"../EditableTypography\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { Loading } from \"portal/components/Loading\";\nimport { LOCALSTORAGE_ALMANAC_MODE } from \"portal/utils/localStorage\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { RED_BUTTON, WHITE_BUTTON } from \"portal/utils/theme\";\nimport { skipToken } from \"@reduxjs/toolkit/query\";\nimport { titleCase } from \"portal/utils/strings\";\nimport { useAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport {\n useDeleteAlmanacMutation,\n useDeleteGlobalAlmanacMutation,\n useGetAlmanacQuery,\n useGetConfigQuery,\n useGetGlobalAlmanacQuery,\n useGetRobotQuery,\n useListCropsQuery,\n useListRobotCropsQuery,\n useSetAlmanacMutation,\n useSetGlobalAlmanacMutation,\n} from \"portal/state/portalApi\";\nimport { useLocalStorage } from \"@uidotdev/usehooks\";\nimport {\n useMutationPopups,\n useQueryPopups,\n} from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport DeleteIcon from \"@mui/icons-material/DeleteOutlined\";\nimport ParentIcon from \"@mui/icons-material/ArrowBackOutlined\";\nimport React, { FunctionComponent, useMemo, useState } from \"react\";\n\ninterface Props {\n adminEditing?: boolean;\n parentLink?: string;\n serial?: string;\n uuid: string;\n useGetQuery: typeof useGetAlmanacQuery | typeof useGetGlobalAlmanacQuery;\n useDeleteMutation:\n | typeof useDeleteAlmanacMutation\n | typeof useDeleteGlobalAlmanacMutation;\n useSetMutation:\n | typeof useSetAlmanacMutation\n | typeof useSetGlobalAlmanacMutation;\n}\n\nexport const Almanac: FunctionComponent = ({\n adminEditing = false,\n uuid,\n parentLink,\n serial,\n useGetQuery,\n useDeleteMutation,\n useSetMutation,\n}) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n\n const canEnableCrops = useAuthorizationRequired([\n buildPermission(\n PermissionAction.update,\n PermissionResource.crops_advanced,\n PermissionDomain.all\n ),\n ]);\n\n // robots\n const { data: summary } = useQueryPopups(\n useGetRobotQuery(serial ? { serial } : skipToken),\n {\n errorVariant: \"warning\",\n }\n );\n\n // crops\n const {\n data: config,\n isError: isConfigError,\n error: configError,\n } = useQueryPopups(useGetConfigQuery(serial ? { serial } : skipToken), {\n errorVariant: \"warning\",\n });\n\n const {\n data: allCrops,\n isError: isAllCropsError,\n error: allCropsError,\n } = useQueryPopups(\n useListCropsQuery(undefined, {\n skip: !isUndefined(serial),\n })\n );\n\n const {\n data: robotCrops,\n isError: isCropsError,\n error: cropsError,\n } = useQueryPopups(useListRobotCropsQuery(serial ? { serial } : skipToken));\n\n const sortedCrops = useMemo(() => {\n if (!serial) {\n if (!allCrops) {\n return;\n }\n const archived: ConfigCrop[] = [];\n const all: ConfigCrop[] = [];\n for (const crop of allCrops) {\n const configCrop = cropToConfigCrop(crop);\n if (crop.archived) {\n archived.push(configCrop);\n }\n all.push(configCrop);\n }\n return {\n all,\n enabled: all,\n disabled: [],\n archived,\n pinnedAndEnabledCrops: 0,\n };\n }\n\n if (!config) {\n return;\n }\n\n return getCrops(serial, config.config, robotCrops);\n }, [serial, config, robotCrops, allCrops]);\n const crops = canEnableCrops ? sortedCrops?.all : sortedCrops?.enabled;\n\n // view state\n const [isAdvanced, setAdvanced] = useLocalStorage(\n LOCALSTORAGE_ALMANAC_MODE,\n false\n );\n\n // local changes\n const [updatedAlmanac, setUpdatedAlmanac] = useState<\n AlmanacConfig | undefined\n >();\n\n // remote data\n const {\n data: freezedAlmanac,\n isError: isAlmanacError,\n error: almanacError,\n } = useQueryPopups(useGetQuery({ uuid }));\n\n // mutations\n const [deleteAlmanac] = useMutationPopups(useDeleteMutation(), {\n success: titleCase(\n t(\"utils.actions.deletedLong\", {\n subject: t(\"models.almanacs.almanac_one\"),\n })\n ),\n });\n\n const [updateAlmanac] = useMutationPopups(useSetMutation(), {\n success: titleCase(\n t(\"utils.actions.savedLong\", {\n subject: t(\"models.almanacs.almanac_one\"),\n })\n ),\n });\n\n // confirmation dialog\n const [confirmDelete, setConfirmDelete] = useState(false);\n\n // unfreezed almanac state\n const unfreezedAlmanac = useMemo(\n () =>\n freezedAlmanac ? JSON.parse(JSON.stringify(freezedAlmanac)) : undefined,\n [freezedAlmanac]\n );\n\n // visible state\n const almanac = updatedAlmanac ?? unfreezedAlmanac;\n const isActive =\n !isUndefined(almanac?.id) &&\n almanac.id === summary?.robot?.health?.fieldConfig?.activeAlmanacId;\n\n const canRead = useAuthorizationRequired(\n adminEditing\n ? [\n buildPermission(\n PermissionAction.read,\n PermissionResource.almanacs,\n PermissionDomain.templates\n ),\n ]\n : [\n buildPermission(\n PermissionAction.read,\n PermissionResource.almanacs,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.almanacs,\n PermissionDomain.customer\n ),\n ]\n );\n const canUpdate =\n useAuthorizationRequired(\n adminEditing\n ? [\n buildPermission(\n PermissionAction.update,\n PermissionResource.almanacs,\n PermissionDomain.templates\n ),\n ]\n : [\n buildPermission(\n PermissionAction.update,\n PermissionResource.almanacs,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.almanacs,\n PermissionDomain.customer\n ),\n ]\n ) &&\n (!almanac?.protected || adminEditing);\n\n if (!canRead) {\n return;\n }\n\n if (!almanac || !crops) {\n return (\n \n );\n }\n\n return (\n
    \n {canUpdate && adminEditing && (\n \n {t(\"components.almanac.warnings.admin\")}\n \n )}\n\n {isActive && (\n \n {t(\"components.almanac.warnings.production\")}\n \n )}\n\n {almanac.protected && !adminEditing && (\n \n {t(\"components.almanac.warnings.carbon\")}\n \n )}\n\n {/* Header */}\n
    \n {/* Left Controls */}\n
    \n {/* Breadcrumb */}\n {parentLink && (\n \n \n \n )}\n\n {/* Mode switcher */}\n \n
    \n\n {/* Title */}\n {canUpdate ? (\n {\n const newAlmanac = {\n ...almanac,\n name,\n };\n setUpdatedAlmanac(newAlmanac);\n await updateAlmanac({ serial, almanac: newAlmanac });\n setUpdatedAlmanac(undefined);\n }}\n />\n ) : (\n {almanac.name}\n )}\n\n {/* Right Controls */}\n
    \n {canUpdate && (\n setConfirmDelete(true)}\n startIcon={}\n >\n {t(\"utils.actions.delete\")}\n \n )}\n {confirmDelete && (\n \n {t(\n \"components.ConfirmationDialog.delete.descriptionActive\",\n {\n subject: t(\"models.almanacs.almanac_one\"),\n }\n )}\n \n ) : (\n t(\"components.ConfirmationDialog.delete.description\", {\n subject: t(\"models.almanacs.almanac_one\"),\n })\n )\n }\n destructive\n yesText={t(\"utils.actions.delete\", {\n subject: almanac.name,\n })}\n yesDisabled={isActive}\n onClose={() => setConfirmDelete(false)}\n onYes={async () => {\n await deleteAlmanac({ uuid: almanac.id });\n if (parentLink) {\n navigate(parentLink);\n }\n }}\n />\n )}\n
    \n
    \n\n {/* Main View */}\n {isAdvanced ? (\n {\n setUpdatedAlmanac(newAlmanac);\n await updateAlmanac({ serial, almanac: newAlmanac });\n setUpdatedAlmanac(undefined);\n }}\n />\n ) : (\n {\n setUpdatedAlmanac(newAlmanac);\n await updateAlmanac({ serial, almanac: newAlmanac });\n setUpdatedAlmanac(undefined);\n }}\n />\n )}\n
    \n );\n};\n","import { carbon } from \"portal/utils/theme\";\nimport { useMemo } from \"react\";\nimport { useWindowSize } from \"@uidotdev/usehooks\";\n\nexport enum Breakpoint {\n xs = carbon.breakpoints.values.xs,\n sm = carbon.breakpoints.values.sm,\n md = carbon.breakpoints.values.md,\n lg = carbon.breakpoints.values.lg,\n xl = carbon.breakpoints.values.xl,\n}\n\nconst widthToBreakpoint = (width: number): Breakpoint => {\n if (width >= Breakpoint.xl) {\n return Breakpoint.xl;\n } else if (width >= Breakpoint.lg) {\n return Breakpoint.lg;\n } else if (width >= Breakpoint.md) {\n return Breakpoint.md;\n } else if (width >= Breakpoint.sm) {\n return Breakpoint.sm;\n } else {\n return Breakpoint.xs;\n }\n};\n\n/**\n * Hook to get the current MUI breakpoint based on the window width\n */\nexport const useBreakpoint = (): Breakpoint => {\n const { width } = useWindowSize();\n return useMemo(\n () => widthToBreakpoint(width ?? Breakpoint.sm),\n [width]\n );\n};\n","import { Breakpoint, useBreakpoint } from \"portal/utils/hooks/useBreakpoint\";\nimport { classes } from \"portal/utils/theme\";\nimport {\n DataGridPremium,\n DataGridPremiumProps,\n GridColumnHeaderParams,\n GridRenderCellParams,\n GridRowIdGetter,\n GridRowModel,\n GridToolbarContainer,\n GridValidRowModel,\n useGridApiRef,\n} from \"@mui/x-data-grid-premium\";\nimport { DateTime } from \"luxon\";\nimport { DATETIME_EXCEL } from \"portal/utils/dates\";\nimport { debounce } from \"portal/utils/timing\";\nimport { GridApiPremium } from \"@mui/x-data-grid-premium/models/gridApiPremium\";\nimport { i18n as I18n } from \"i18next\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport { Paper, Skeleton, Tooltip } from \"@mui/material\";\nimport { range } from \"portal/utils/arrays\";\nimport { withErrorBoundary } from \"./ErrorBoundary\";\nimport ErrorIcon from \"@mui/icons-material/WarningOutlined\";\nimport React, {\n FunctionComponent,\n MutableRefObject,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n RefAttributes,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\n\nexport const booleanValueFormatter = (value: boolean): string =>\n value ? \"TRUE\" : \"FALSE\";\n\nexport const renderHeaderWithoutUnits = ({\n colDef,\n}: GridColumnHeaderParams): string | undefined =>\n colDef.headerName?.replace(/ \\(.*\\)$/, \"\");\n\nexport const excelFormatter = (value: DateTime | undefined): string =>\n value ? value.toFormat(DATETIME_EXCEL) : \"\";\n\nexport const getRenderDateTime =\n (i18n: I18n, variant: \"relative\" | \"short\" | \"localtime\") =>\n ({\n value,\n }: GridRenderCellParams): ReactNode =>\n value ? (\n \n \n {(() => {\n switch (variant) {\n case \"relative\": {\n return value.toRelative({\n locale: i18n.language,\n });\n }\n case \"short\": {\n return value.toLocaleString(DateTime.DATETIME_SHORT, {\n locale: i18n.language,\n });\n }\n case \"localtime\": {\n return value.toLocaleString(\n { ...DateTime.TIME_SIMPLE, weekday: \"short\", day: \"numeric\" },\n { locale: i18n.language }\n );\n }\n }\n })()}\n \n \n ) : undefined;\n\n/**\n * Wrapper for DataGrid:\n * * Default Carbon styles\n * * Auto column sizing\n * * Custom loading graphic\n * * total/average footer\n */\nfunction _CarbonDataGrid({\n averages,\n classes: gridClasses,\n columns,\n dimensionClasses,\n getRowId,\n header,\n errorMessage,\n loading = false,\n onColumnOrderChange,\n pinnedColumns,\n pinnedRows: inputPinnedRows,\n rows,\n slotProps: inputSlotProps,\n slots: inputSlots,\n totals,\n ...props\n}: DataGridPremiumProps &\n RefAttributes & {\n averages?: R | undefined;\n dimensionClasses?: string;\n getRowId: GridRowIdGetter;\n header?: ReactNode;\n totals?: R | undefined;\n errorMessage?: ReactNode;\n }): ReactElement {\n const ref = useRef(null);\n // MUI types are not correct here, it can be null\n const apiRef = useGridApiRef() as MutableRefObject;\n\n const autosizeOptions = useMemo(\n () => ({\n columns: columns\n .filter((column) => isUndefined(column.width))\n .map(({ field }) => field),\n includeHeaders: true,\n expand: true,\n includeOutliers: true,\n }),\n [columns]\n );\n const slots = useMemo(\n () => ({\n ...inputSlots,\n panel: Paper,\n toolbar: header ? CarbonToolbar : undefined,\n }),\n [inputSlots, header]\n );\n\n const slotProps = useMemo(\n () => ({\n ...inputSlotProps,\n toolbar: { ...inputSlotProps?.toolbar, children: header },\n }),\n [inputSlotProps, header]\n );\n const autosize = useCallback(() => {\n if (apiRef.current && \"autosizeColumns\" in apiRef.current) {\n apiRef.current.autosizeColumns(autosizeOptions);\n }\n }, [apiRef, autosizeOptions]);\n\n // auto resize on scroll in case new virtualized rows are larger (or smaller)\n useEffect(() => {\n ref.current\n ?.querySelector(\".MuiDataGrid-virtualScroller\")\n ?.addEventListener(\"scroll\", debounce(autosize));\n }, [autosize, ref]);\n\n const breakpoint = useBreakpoint();\n const isSmall = breakpoint <= Breakpoint.sm;\n\n // extra bottom rows\n const extraBottom = useMemo(() => {\n const extraBottom: R[] = [];\n let totalsRow: R | undefined;\n if (totals) {\n totalsRow = structuredClone(totals);\n extraBottom.push(totalsRow);\n }\n\n let averagesRow: R | undefined;\n if (averages) {\n averagesRow = structuredClone(averages);\n extraBottom.push(averagesRow);\n }\n return extraBottom;\n }, [totals, averages]);\n const allRows = useMemo(\n () => (isSmall ? [...(rows ?? []), ...extraBottom] : rows),\n [rows, extraBottom, isSmall]\n );\n\n const pinnedRows = useMemo(\n () => ({\n ...inputPinnedRows,\n bottom: isSmall\n ? []\n : [...(inputPinnedRows?.bottom ?? []), ...extraBottom],\n }),\n [inputPinnedRows, extraBottom, isSmall]\n );\n const classesProps = useMemo(\n () => ({\n cell: \"border-zinc-500 outline-none\",\n root: classes(\"border-0 flex-1 h-full\", dimensionClasses, \"bg-zinc-700\", {\n invisible: loading,\n }),\n footerContainer: \"border-0\",\n sortIcon: \"text-white\",\n groupingCriteriaCellToggle: \"text-white\",\n toolbarContainer: \"text-white\",\n ...gridClasses,\n }),\n [gridClasses, dimensionClasses, loading]\n );\n\n useEffect(autosize, [autosize]);\n\n // global error state\n if (errorMessage) {\n return (\n \n
    \n \n {errorMessage}\n
    \n
    \n );\n }\n\n return (\n <>\n {loading && }\n \n ref={ref}\n // MUI types are not correct here but MUI doesn't know that\n apiRef={apiRef as MutableRefObject}\n autosizeOptions={autosizeOptions}\n columnBufferPx={1000}\n getRowId={getRowId}\n columns={columns}\n rows={allRows}\n slots={slots}\n slotProps={slotProps}\n pinnedColumns={pinnedColumns}\n pinnedRows={pinnedRows}\n classes={classesProps}\n onColumnOrderChange={onColumnOrderChange}\n disableColumnReorder={!onColumnOrderChange}\n {...props}\n />\n \n );\n}\n\n// wrap with error boundary. No runtime problems but I can't figure out\n// how to pass generic types through the wrapper component\nexport const CarbonDataGrid = withErrorBoundary(\n {},\n _CarbonDataGrid\n) as typeof _CarbonDataGrid;\n\n// carbon style table toolbar\ninterface CarbonToolbarProps extends PropsWithChildren {\n className?: string;\n}\n\nconst CarbonToolbar: FunctionComponent = ({\n className,\n children,\n}) => (\n \n \n {children}\n \n \n);\n\n// grid style skeleton loader\ninterface CarbonDataGridLoadingProps {\n className?: string;\n}\nconst CarbonDataGridLoading: FunctionComponent = ({\n className,\n}) => (\n
    \n {range(10).map((index) => (\n \n ))}\n
    \n);\n\n// carbon style table footer\nexport const CarbonFooter: FunctionComponent = ({\n children,\n}) => (\n \n {children}\n \n);\n","import { AlmanacConfig } from \"protos/almanac/almanac\";\nimport { BLUE_LOADING_BUTTON, TEXT_FIELD_DARK } from \"portal/utils/theme\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from \"@mui/material\";\nimport { capitalize, titleCase } from \"portal/utils/strings\";\nimport { Field, Form, Formik } from \"formik\";\nimport { getDefaultAlmanac } from \"portal/utils/almanac\";\nimport { GlobalHotKeys } from \"react-hotkeys\";\nimport { LoadingButton } from \"@mui/lab\";\nimport { object, string } from \"yup\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { TextField } from \"formik-mui\";\nimport { useMutationPopups } from \"portal/utils/hooks/useApiPopups\";\nimport { useNavigate } from \"react-router-dom\";\nimport {\n useSetAlmanacMutation,\n useSetGlobalAlmanacMutation,\n} from \"portal/state/portalApi\";\nimport { useTranslation } from \"react-i18next\";\nimport { v4 as uuid } from \"uuid\";\nimport { withAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport AddIcon from \"@mui/icons-material/AddOutlined\";\nimport React, { FunctionComponent, useState } from \"react\";\n\ninterface Props {\n hotkey?: string;\n serial?: string;\n basePath: string;\n useSetMutation:\n | typeof useSetAlmanacMutation\n | typeof useSetGlobalAlmanacMutation;\n}\nconst _NewAlmanac: FunctionComponent = ({\n hotkey,\n serial,\n basePath,\n useSetMutation,\n}) => {\n const navigate = useNavigate();\n const { t } = useTranslation();\n\n const [isOpen, setOpen] = useState(false);\n\n const [setAlmanac] = useMutationPopups(useSetMutation(), {\n success: capitalize(\n t(\"utils.actions.createdLong\", {\n subject: t(\"models.almanacs.almanac_one\"),\n })\n ),\n });\n\n return (\n <>\n {hotkey && (\n setOpen(true),\n }}\n />\n )}\n }\n onClick={() => setOpen(true)}\n >\n \n {titleCase(\n t(\"utils.actions.newLong\", {\n subject: t(\"models.almanacs.almanac_one\"),\n })\n )}\n \n {t(\"utils.actions.new\")}\n \n setOpen(false)}>\n \n {titleCase(\n t(\"utils.actions.newLong\", {\n subject: t(\"models.almanacs.almanac_one\"),\n })\n )}\n \n {\n if (!serial) {\n return;\n }\n const id = uuid();\n await setAlmanac({\n serial,\n almanac: AlmanacConfig.fromPartial({\n ...getDefaultAlmanac(t),\n id,\n name,\n }),\n });\n navigate(`${basePath}/${id}`);\n }}\n >\n {({ submitForm, isSubmitting, dirty }) => (\n
    \n \n \n \n \n setOpen(false)}\n >\n {t(\"utils.actions.cancel\")}\n \n }\n >\n {t(\"utils.actions.create\")}\n \n \n
    \n )}\n \n
    \n \n );\n};\n\nexport const NewAlmanac = withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.update,\n PermissionResource.almanacs,\n PermissionDomain.self\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.almanacs,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.almanacs,\n PermissionDomain.all\n ),\n ],\n _NewAlmanac\n);\n","import {\n classes,\n SMALL_TEXT_FIELD,\n SMALL_TEXT_FIELD_DARK,\n} from \"portal/utils/theme\";\nimport { GlobalHotKeys } from \"react-hotkeys\";\nimport { IconButton, InputAdornment, TextField } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport { withErrorBoundary } from \"portal/components/ErrorBoundary\";\nimport { WithSkeleton } from \"portal/components/WithSkeleton\";\nimport ClearIcon from \"@mui/icons-material/ClearOutlined\";\nimport React, { FunctionComponent, useRef } from \"react\";\n\ninterface SearchFieldProps {\n dark?: boolean;\n success?: boolean;\n value: string;\n onChange: (newSearch: string) => void;\n onSelect?: () => void;\n label?: string;\n className?: string;\n placeholder?: string;\n}\n\nconst _SearchField: FunctionComponent = ({\n dark = false,\n success = true,\n value,\n onChange,\n label,\n onSelect,\n className,\n placeholder,\n}) => {\n const { t } = useTranslation();\n const inputRef = useRef();\n\n return (\n <>\n {\n inputRef.current?.focus();\n event?.preventDefault();\n },\n }}\n />\n \n {\n event.preventDefault();\n onSelect?.();\n }}\n >\n onChange(event.target.value)}\n InputProps={{\n ...(dark ? SMALL_TEXT_FIELD_DARK : SMALL_TEXT_FIELD).InputProps,\n endAdornment: (\n \n onChange(\"\")} edge=\"end\">\n \n \n \n ),\n }}\n />\n \n \n \n );\n};\n\nexport const SearchField = withErrorBoundary(\n { i18nKey: \"components.header.search.failed\", small: true },\n _SearchField\n);\n","import { Dispatch, SetStateAction, useMemo, useState } from \"react\";\nimport Fuse from \"fuse.js\";\n\n/**\n * Hook to contain the shared logic for fuzzy searching over a list of items\n * using a Fuse.js index.\n *\n * Includes search field state management for use with \n */\n\ninterface FuzzySearchProps {\n items: T[];\n defaultSearchText?: string;\n options?: Fuse.IFuseOptions;\n}\n\ninterface FuzzySearchState {\n results: T[];\n searchText: string;\n setSearchText: Dispatch>;\n}\n\nexport const useFuzzySearch = ({\n items,\n defaultSearchText = \"\",\n options,\n}: FuzzySearchProps): FuzzySearchState => {\n const [searchText, setSearchText] = useState(defaultSearchText);\n\n const fuse = useMemo>(() => {\n return new Fuse(items, {\n threshold: 0.1,\n shouldSort: true,\n includeMatches: true,\n keys: [\"name\"],\n ...options,\n });\n }, [items, options]);\n\n const results = useMemo(() => {\n if (searchText.length === 0) {\n return items;\n }\n return fuse.search(searchText).map((result) => result.item);\n }, [fuse, items, searchText]);\n\n return {\n results,\n searchText,\n setSearchText,\n };\n};\n","import { Almanac } from \"portal/components/almanac/Almanac\";\nimport { AlmanacConfig } from \"protos/almanac/almanac\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { capitalize } from \"portal/utils/strings\";\nimport { CarbonDataGrid } from \"portal/components/CarbonDataGrid\";\nimport { classes } from \"portal/utils/theme\";\nimport { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { NewAlmanac } from \"portal/components/almanac/NewAlmanac\";\nimport { NoScroll } from \"../Page\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { SearchField } from \"../header/SearchField\";\nimport { skipToken } from \"@reduxjs/toolkit/query\";\nimport {\n useDeleteAlmanacMutation,\n useDeleteGlobalAlmanacMutation,\n useGetAlmanacQuery,\n useGetGlobalAlmanacQuery,\n useGetRobotQuery,\n useListAlmanacsForRobotQuery,\n useListGlobalAlmanacsQuery,\n useSetAlmanacMutation,\n useSetGlobalAlmanacMutation,\n} from \"portal/state/portalApi\";\nimport { useFuzzySearch } from \"portal/utils/hooks/useFuzzySearch\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { useQueryPopups } from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport { withAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport React, { FunctionComponent } from \"react\";\n\nconst CELL_PADDING_CLASS = \"py-4\";\n\nconst defaultColumn: Partial = {\n disableColumnMenu: true,\n cellClassName: () => CELL_PADDING_CLASS,\n};\n\ninterface Props {\n adminEditing?: boolean;\n serial?: string;\n basePath: string;\n useListQuery:\n | typeof useListAlmanacsForRobotQuery\n | typeof useListGlobalAlmanacsQuery;\n useGetQuery: typeof useGetAlmanacQuery | typeof useGetGlobalAlmanacQuery;\n useDeleteMutation:\n | typeof useDeleteAlmanacMutation\n | typeof useDeleteGlobalAlmanacMutation;\n useSetMutation:\n | typeof useSetAlmanacMutation\n | typeof useSetGlobalAlmanacMutation;\n}\n\nconst _AlmanacList: FunctionComponent = ({\n adminEditing = false,\n serial,\n basePath,\n useListQuery,\n useGetQuery,\n useDeleteMutation,\n useSetMutation,\n}) => {\n const { t } = useTranslation();\n\n const { data: summary, isSuccess } = useQueryPopups(\n useGetRobotQuery(serial ? { serial } : skipToken),\n {\n errorVariant: \"warning\",\n }\n );\n\n const { data: almanacs, isSuccess: hasLoaded } = useQueryPopups(\n useListQuery({ serial })\n );\n\n const navigate = useNavigate();\n const { pathname } = useLocation();\n let uuid: string = \"\";\n if (!pathname.endsWith(basePath)) {\n uuid = pathname.replace(`${basePath}/`, \"\");\n }\n\n const { searchText, setSearchText, results } = useFuzzySearch({\n items: almanacs ?? [],\n });\n\n const columns: readonly GridColDef[] = [\n {\n ...defaultColumn,\n field: \"name\",\n headerName: t(\"models.almanacs.fields.name\"),\n },\n {\n ...defaultColumn,\n field: \"isActive\",\n headerName: t(\"utils.descriptors.active\"),\n cellClassName: ({ row: almanac }) => {\n const isActive =\n almanac.id === summary?.robot?.health?.fieldConfig?.activeAlmanacId;\n return classes(\n CELL_PADDING_CLASS,\n isActive ? \"font-bold bg-green-500 text-white\" : \"text-gray-500\"\n );\n },\n valueGetter: (value, almanac) => {\n if (!isSuccess) {\n return t(\"components.Loading.placeholder\");\n }\n const isActive =\n almanac.id === summary.robot?.health?.fieldConfig?.activeAlmanacId;\n return isActive\n ? t(\"utils.descriptors.active\")\n : t(\"utils.descriptors.inactive\");\n },\n },\n ];\n\n if (uuid) {\n return (\n \n );\n }\n\n return (\n \n
    \n \n header={\n <>\n \n \n \n }\n className=\"flex flex-1\"\n rows={results}\n getRowId={({ id }) => id}\n columns={columns}\n columnVisibilityModel={{\n isActive: typeof serial === \"string\",\n }}\n getRowHeight={() => \"auto\"}\n hideFooter\n onRowClick={({ row: almanac }) =>\n navigate(`${basePath}/${almanac.id}`)\n }\n disableRowSelectionOnClick\n getRowClassName={() => \"cursor-pointer\"}\n loading={!hasLoaded}\n />\n
    \n
    \n );\n};\n\nexport const AlmanacList = withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.read,\n PermissionResource.almanacs,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.almanacs,\n PermissionDomain.all\n ),\n ],\n _AlmanacList\n);\n","import { Category } from \"protos/category_profile/category_profile\";\nimport {\n ExpandedCategoryCollectionRequest,\n UnsavedCategory,\n} from \"protos/portal/category_profile\";\nimport { TFunction } from \"i18next\";\nimport { titleCase } from \"./strings\";\nimport { v4 as uuid } from \"uuid\";\n\nexport interface PaginationParameters {\n page: number;\n pageSize: number;\n}\n\n// for M1, the robot will be able to match categories to the previous static ones specifically by matching the English name.\nexport const getDefaultCategoryNames = (\n t: TFunction,\n i18n: boolean = true\n): string[] => {\n return i18n\n ? [\n t(\"models.weeds.categories.broadleaf\"),\n t(\"models.weeds.categories.grass\"),\n t(\"models.weeds.categories.offshoot\"),\n t(\"models.weeds.categories.purslane\"),\n t(\"models.crops.crop_one\"),\n ].map((categoryName) => titleCase(categoryName))\n : [\"Broadleaf\", \"Grass\", \"Offshoot\", \"Purslane\", \"Crop\"];\n};\n\n// helps enforce that specifically named categories exist\nexport const hasStrictCategories = (\n values: { name: string }[],\n requiredCategories: string[]\n): boolean => {\n const actual = new Set(values.map((v) => v.name));\n return requiredCategories.every((name) => actual.has(name));\n};\n\nexport const getDefaultCategoryCollectionProfile = (\n t: TFunction,\n i18n: boolean = true,\n isProtected: boolean = false\n): ExpandedCategoryCollectionRequest => {\n const categories = getDefaultCategoryNames(t, i18n).map((name) =>\n UnsavedCategory.fromPartial({\n id: uuid(),\n name,\n chipIds: [],\n protected: isProtected,\n })\n );\n return ExpandedCategoryCollectionRequest.fromPartial({\n profile: {\n id: uuid(),\n name: \"\",\n protected: isProtected,\n categoryIds: categories.map(({ id }) => id),\n },\n categories,\n });\n};\n\nexport interface CategorizationMap {\n chip: Record; // chip id to category id\n labelPoint: Record; // label point id to category id\n}\n\n/** Creates a convenience lookup for which images are categorized */\nexport const imagesToCategoryIds = (\n profile: ExpandedCategoryCollectionRequest | undefined\n): CategorizationMap => {\n const categoryMap: CategorizationMap = { chip: {}, labelPoint: {} };\n if (!profile) {\n return categoryMap;\n }\n for (const { id, chipIds, labelPointIds } of profile.categories) {\n for (const chipId of chipIds) {\n categoryMap.chip[chipId] = id;\n }\n for (const labelPointId of labelPointIds) {\n categoryMap.labelPoint[labelPointId] = id;\n }\n }\n return categoryMap;\n};\n\nexport const categoryCollectionProfileImageToggle = (\n profile: ExpandedCategoryCollectionRequest,\n activeCategoryId: string | undefined,\n {\n chipId,\n labelPointId,\n }: {\n chipId?: string;\n labelPointId: string;\n }\n): ExpandedCategoryCollectionRequest => {\n if (!activeCategoryId || (!chipId && !labelPointId)) {\n return profile;\n }\n\n const updatedCategories = profile.categories.map((category) => {\n const isActiveCategory = category.id === activeCategoryId;\n\n const updatedChipIds = [...category.chipIds];\n if (chipId) {\n const existingIndex = category.chipIds.indexOf(chipId);\n if (existingIndex > -1) {\n // remove the chip id\n updatedChipIds.splice(existingIndex, 1);\n } else if (isActiveCategory) {\n // add the chip id to the active category\n updatedChipIds.push(chipId);\n }\n }\n\n const updatedLabelPointIds = [...category.labelPointIds];\n if (!chipId && labelPointId) {\n const existingIndex = category.labelPointIds.indexOf(labelPointId);\n if (existingIndex > -1) {\n // remove the label point id\n updatedLabelPointIds.splice(existingIndex, 1);\n } else if (isActiveCategory) {\n // add the label point id to the active category\n updatedLabelPointIds.push(labelPointId);\n }\n }\n\n return UnsavedCategory.fromJSON({\n ...category,\n chipIds: [...new Set(updatedChipIds)],\n labelPointIds: [...new Set(updatedLabelPointIds)],\n });\n });\n return {\n ...profile,\n categories: updatedCategories,\n };\n};\n\nexport const getPointDetectionThumbnailPaddingFactor = (\n radius: number\n): number => (radius < 30 ? 0.5 : 0.1);\n\nexport interface CategoryOption extends Category {\n profile: string;\n}\n\n// used to differentiate input values of plain text string vs a fully fledged Category object\nexport const isCategoryNameOnly = (value: Category | string): value is string =>\n typeof value === \"string\";\n\nexport const getCategoryOptionLabel = (\n t: TFunction,\n { name, chipIds }: CategoryOption\n): string => {\n const chipInfo =\n chipIds.length > 0\n ? ` (${chipIds.length} ${t(\"models.images.image\", {\n count: chipIds.length,\n })})`\n : \"\";\n return `${name}${chipInfo}`;\n};\n","import React, { FunctionComponent } from \"react\";\n\ninterface PointLabelOverlayProps {\n dimensions: { width: number; height: number };\n padding: number;\n}\nexport const PointLabelOverlay: FunctionComponent = ({\n dimensions: { width, height },\n padding,\n}) => {\n const x = width / 2;\n const y = height / 2;\n const r = (width - padding) / 2;\n return (\n \n \n \n \n \n );\n};\n","import { Pagination, ResultsCountType } from \"protos/veselka/pagination\";\n\nexport type ResultsMetadata = {\n data: {\n ids: Set;\n data: T[];\n };\n areAllResultsLoaded: boolean;\n loadableImagesCount: number;\n totalResultCount?: {\n type: ResultsCountType;\n count: number;\n };\n};\n\n/**\n * Processes new paginated results to be used for infinite scroll\n */\nexport const processImageResults = (\n previousState: ResultsMetadata,\n currentQueryResult?: {\n data: T[];\n pagination?: Pagination;\n }\n): ResultsMetadata => {\n if (!currentQueryResult || !currentQueryResult.pagination) {\n return previousState;\n }\n const nextData = {\n ids: new Set(previousState.data.ids),\n data: [...previousState.data.data],\n };\n for (const result of currentQueryResult.data) {\n const { id } = result;\n if (!previousState.data.ids.has(id)) {\n nextData.ids.add(id);\n nextData.data.push(result);\n }\n }\n\n const { countType, totalRecords: reportedTotalRecords } =\n currentQueryResult.pagination;\n const noMoreResults = currentQueryResult.data.length === 0;\n const inferTotalCount =\n countType === ResultsCountType.ESTIMATED && noMoreResults;\n\n return {\n data: nextData,\n areAllResultsLoaded:\n noMoreResults ||\n nextData.data.length >= currentQueryResult.pagination.totalRecords,\n loadableImagesCount: nextData.data.filter(({ image }) => image).length,\n totalResultCount: {\n type: inferTotalCount ? ResultsCountType.PRECISE : countType,\n count: inferTotalCount ? nextData.data.length : reportedTotalRecords,\n },\n };\n};\n","import { Button } from \"@mui/material\";\nimport React, { FC } from \"react\";\nimport RemoveIcon from \"@mui/icons-material/Close\";\n\ninterface RemoveImageOverlayProps {\n dimensions: { width: number; height: number };\n onClick: () => void;\n}\nexport const RemoveImageOverlay: FC = ({\n dimensions,\n onClick,\n}) => {\n return (\n \n \n \n );\n};\n","import React, { FunctionComponent } from \"react\";\n\ninterface IconImageProps {\n icon: (className: string) => React.ReactNode;\n}\n\nexport const IconImage: FunctionComponent = ({ icon }) => (\n
    \n {icon(\"text-gray-400 text-xl\")}\n
    \n);\n","import { ButtonBase, Tooltip } from \"@mui/material\";\nimport { IconImage } from \"./IconImage\";\nimport BrokenImageIcon from \"@mui/icons-material/BrokenImage\";\nimport ImageNotSupportedIcon from \"@mui/icons-material/ImageNotSupported\";\nimport React, { FunctionComponent, useCallback, useState } from \"react\";\n\nexport interface ImageProperties {\n id: string;\n alt?: string;\n src?: string;\n isSrcLoading?: boolean;\n isSrcError?: boolean;\n tooltip?: string;\n onClick?: () => void;\n renderOverlay?: () => React.ReactNode;\n}\ninterface ImageProps {\n image?: ImageProperties;\n dimensions: {\n width: number;\n height: number;\n };\n onImageLoaded?: (id: string) => void;\n}\n\nenum LoadingState {\n NOT_LOADED,\n SUCCESS,\n ERROR,\n}\nexport const Image: FunctionComponent = ({\n image,\n dimensions,\n onImageLoaded,\n}) => {\n const [loadingState, setLoadingState] = useState(\n LoadingState.NOT_LOADED\n );\n\n const onLoad = useCallback(\n (id: string, success: boolean) => {\n setLoadingState(success ? LoadingState.SUCCESS : LoadingState.ERROR);\n onImageLoaded?.(id);\n },\n [onImageLoaded]\n );\n\n if (!image) {\n return (\n }\n />\n );\n }\n\n if (loadingState === LoadingState.ERROR || image.isSrcError) {\n return (\n }\n />\n );\n }\n\n const { id, alt, src, tooltip, renderOverlay, onClick } = image;\n return (\n <>\n {tooltip}\n ) : undefined\n }\n placement=\"bottom\"\n >\n \n {src && (\n {\n onLoad(id, true);\n }}\n onError={() => {\n onLoad(id, false);\n }}\n />\n )}\n \n \n\n {loadingState === LoadingState.NOT_LOADED || image.isSrcLoading ? (\n \n ) : undefined}\n {renderOverlay?.()}\n \n );\n};\n","import { DateTime } from \"luxon\";\nimport { Image } from \"protos/portal/veselka\";\nimport { isUndefined } from \"./identity\";\nimport { Point } from \"./geo\";\n\nexport const getImageLocation = (image: Image): [string, Point | undefined] => {\n const { geohash } = image;\n let point: Point | undefined;\n\n if (image.geoJson) {\n const geo = JSON.parse(image.geoJson);\n const latitude = geo?.lla?.lat;\n const longitude = geo?.lla?.lng;\n point = [latitude, longitude];\n }\n\n return [geohash, point];\n};\n\nexport const getImageDate = (image: Image): DateTime | undefined => {\n if (image.capturedAt) {\n return DateTime.fromMillis(image.capturedAt);\n }\n if (image.geoJson) {\n const geo = JSON.parse(image.geoJson);\n const timestamp = geo?.lla?.timestamp_ms || geo?.ecef?.timestamp_ms;\n if (timestamp) {\n return DateTime.fromMillis(timestamp);\n }\n }\n const match = image.url.match(\n /(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d)-(\\d\\d)-(\\d\\d)/\n );\n if (match) {\n const [, year, month, day, hour, minute, second] = match;\n if (\n isUndefined(year) ||\n isUndefined(month) ||\n isUndefined(day) ||\n isUndefined(hour) ||\n isUndefined(minute) ||\n isUndefined(second)\n ) {\n return undefined;\n }\n return DateTime.fromObject({\n year: Number.parseInt(year),\n month: Number.parseInt(month),\n day: Number.parseInt(day),\n hour: Number.parseInt(hour),\n minute: Number.parseInt(minute),\n second: Number.parseInt(second),\n });\n }\n\n return undefined;\n};\n\nexport const splitS3Url = (s3Url: string): { bucket: string; key: string } => {\n // s3://bucket/arbitrary/key\n const match = s3Url.match(/^s3:\\/\\/([^/]+)\\/(.+)$/);\n const error = new Error(\"Invalid S3 URL\");\n if (!match) {\n throw error;\n }\n const [, bucket, key] = match;\n if (!bucket || !key) {\n throw error;\n }\n return { bucket, key };\n};\n","import {\n CropThumbnailRequest,\n ImageOp,\n useGetCropThumbnailQuery,\n} from \"portal/state/s3CacheProxyApi\";\nimport { Image, ImageProperties } from \"./Image\";\nimport { skipToken } from \"@reduxjs/toolkit/query\";\nimport { splitS3Url } from \"portal/utils/images\";\nimport { theme } from \"portal/utils/theme\";\nimport React, { FunctionComponent } from \"react\";\n\nexport type ThumbnailImageItem = ImageProperties &\n Omit & {\n url: string;\n };\n\ninterface ThumbnailImageProps {\n image?: ThumbnailImageItem;\n dimensions: {\n width: number;\n height: number;\n };\n onImageLoaded?: (id: string) => void;\n}\n\nconst assembleRequestParameters = ({\n url,\n x,\n y,\n width,\n height,\n fill,\n}: ThumbnailImageItem): CropThumbnailRequest => {\n const { bucket, key } = splitS3Url(url);\n return {\n op: ImageOp.CROP,\n bucket,\n key,\n x,\n y,\n width,\n height,\n fill: fill ?? theme.colors.gray[\"600\"],\n };\n};\n\nexport const ThumbnailImage: FunctionComponent = ({\n image,\n dimensions,\n onImageLoaded,\n}) => {\n const {\n data: fetchedImageSource,\n isLoading: isFetchingImageSource,\n error: fetchingImageSourceError,\n } = useGetCropThumbnailQuery(\n image ? assembleRequestParameters(image) : skipToken\n );\n\n return (\n \n );\n};\n","import {\n getPointDetectionThumbnailPaddingFactor,\n PaginationParameters,\n} from \"portal/utils/categoryCollectionProfile\";\nimport { LabelPoint } from \"protos/veselka/label_point\";\nimport { ThumbnailBaseInfo } from \"./ImageCategorizationOptions\";\nimport { UnsavedThumbnail } from \"./CategorizedImages\";\nimport { useCallback, useRef } from \"react\";\n\ninterface MetaState {\n saved: boolean;\n loading: boolean;\n updated: Date;\n}\ninterface OrderedCategorizedImage {\n thumbnail?: ThumbnailBaseInfo & { chipId?: string };\n state: MetaState;\n}\n\n/**\n * Helper hook to the CategorizedImages component that processes both unsaved thumbnail selection\n * and saved chip ids (accounting for their loading status)\n * to construct renderable thumbnail data as well as order them.\n */\nexport const useCategorizedImages = (): {\n combineThumbnails: (\n isLoading: boolean,\n currentPagination: PaginationParameters,\n newSavedLabelPointResponse: LabelPoint[],\n unsavedThumbnailSelection: UnsavedThumbnail[],\n allChipIds: string[],\n allChipIdsUpdatedOn?: Date\n ) => OrderedCategorizedImage[];\n} => {\n const allFetchedData = useRef>(new Map());\n\n const combineThumbnails = useCallback(\n (\n isLoading: boolean,\n { page, pageSize }: PaginationParameters,\n newSavedLabelPointResponse: LabelPoint[],\n unsavedThumbnailSelection: UnsavedThumbnail[],\n allChipIds: string[],\n allChipIdsUpdatedOn?: Date\n ): OrderedCategorizedImage[] => {\n const chipsLastUpdated = allChipIdsUpdatedOn || new Date();\n const loadedPage = Math.max(isLoading ? page - 1 : page, 0);\n const loadedChipIds = allChipIds.slice(0, loadedPage * pageSize);\n\n for (const labelPoint of newSavedLabelPointResponse) {\n if (labelPoint.chipId) {\n allFetchedData.current.set(labelPoint.chipId, labelPoint);\n }\n }\n\n // saved and loaded\n const loadedChipThumbnails: OrderedCategorizedImage[] = loadedChipIds.map(\n (chipId) => {\n const state = {\n saved: true,\n updated: chipsLastUpdated,\n loading: false,\n };\n const match = allFetchedData.current.get(chipId);\n if (!match || !match.image) {\n return {\n thumbnail: undefined,\n state,\n };\n }\n const { id: pointLabelId, x, y, radius, image } = match;\n const padding = Math.ceil(\n radius * getPointDetectionThumbnailPaddingFactor(radius)\n );\n const imageCropDimensions = (radius + padding) * 2;\n return {\n thumbnail: {\n id: pointLabelId,\n url: image.url,\n x: Math.ceil(x - (radius + padding)),\n y: Math.ceil(y - (radius + padding)),\n width: Math.ceil(imageCropDimensions),\n height: Math.ceil(imageCropDimensions),\n radius,\n chipId: match.chipId,\n },\n state,\n };\n }\n );\n\n // saved and loading\n const unLoadedCount = allChipIds.length - loadedPage * pageSize;\n const loadingCount = isLoading ? Math.min(pageSize, unLoadedCount) : 0;\n const now = new Date();\n const loadingChips: OrderedCategorizedImage[] = Array.from({\n length: loadingCount,\n }).map(() => ({\n thumbnail: undefined,\n state: {\n saved: true,\n updated: now,\n loading: true,\n },\n }));\n\n // unsaved\n const unsaved: OrderedCategorizedImage[] = unsavedThumbnailSelection.map(\n ({ updated, ...thumbnail }) => ({\n thumbnail,\n state: {\n saved: false,\n loading: false,\n updated,\n },\n })\n );\n return [...unsaved, ...loadedChipThumbnails, ...loadingChips].sort(\n (a, b) => a.state.updated.getTime() - b.state.updated.getTime()\n );\n },\n []\n );\n return { combineThumbnails };\n};\n","import { useCallback, useEffect, useRef } from \"react\";\n\nexport const useInfiniteScroll = (\n isLoading: boolean,\n onLoadMore: () => void\n): ((node: T | null) => void) => {\n const observer = useRef(undefined);\n\n const cleanup = (): void => {\n if (observer.current) {\n observer.current.disconnect();\n observer.current = undefined;\n }\n };\n\n useEffect(() => cleanup, []);\n\n return useCallback(\n (node: T | null) => {\n if (isLoading) {\n return;\n }\n cleanup();\n\n observer.current = new IntersectionObserver((entries) => {\n // this hook only supports monitoring one element\n if (entries[0]?.isIntersecting) {\n onLoadMore();\n }\n });\n\n if (node) {\n observer.current.observe(node);\n }\n },\n [isLoading, onLoadMore]\n );\n};\n","import {\n getPointDetectionThumbnailPaddingFactor,\n PaginationParameters,\n} from \"portal/utils/categoryCollectionProfile\";\nimport { IconButton, Skeleton, Tooltip } from \"@mui/material\";\nimport { LabelPoint } from \"protos/veselka/label_point\";\nimport { PointLabelOverlay } from \"./imageOverlays/PointLabelOverlay\";\nimport {\n processImageResults,\n ResultsMetadata,\n} from \"../images/processImageResults\";\nimport { RadioChipOption } from \"../RadioChips\";\nimport { RemoveImageOverlay } from \"./imageOverlays/RemoveImageOverlay\";\nimport { theme } from \"portal/utils/theme\";\nimport { ThumbnailBaseInfo } from \"./ImageCategorizationOptions\";\nimport { ThumbnailImage } from \"../images/ThumbnailImage\";\nimport { useCategorizedImages } from \"./useCategorizedImages\";\nimport { useInfiniteScroll } from \"../images/useInfiniteScroll\";\nimport { useLazyListLabelPointsQuery } from \"portal/state/portalApi\";\nimport { useLazyPopups } from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport { useUserPreferences } from \"portal/state/store\";\nimport MoreIcon from \"@mui/icons-material/Add\";\nimport React, {\n FunctionComponent,\n PropsWithChildren,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\n\nconst DEFAULT_PAGINATION: PaginationParameters = { page: 1, pageSize: 25 };\n\nconst initialResultsState: ResultsMetadata = {\n data: {\n ids: new Set(),\n data: [],\n },\n areAllResultsLoaded: false,\n loadableImagesCount: 0,\n};\n\nexport type UnsavedThumbnail = ThumbnailBaseInfo & {\n updated: Date;\n};\n\ninterface Props {\n category: RadioChipOption;\n chipIds: string[];\n chipIdsUpdatedOn?: Date;\n unsavedThumbnails?: UnsavedThumbnail[];\n dimensions: { width: number; height: number };\n onRemove?: (\n id: { chipId?: string; labelPointId: string },\n thumbnail: ThumbnailBaseInfo\n ) => void;\n}\nexport const CategorizedImages: FunctionComponent = ({\n category,\n chipIds,\n chipIdsUpdatedOn,\n unsavedThumbnails = [],\n dimensions,\n onRemove,\n}) => {\n const { t } = useTranslation();\n const userPreferences = useUserPreferences();\n\n const [pagination, setPagination] =\n useState(DEFAULT_PAGINATION);\n const [isLoading, setIsLoading] = useState(true);\n const [isError, setIsError] = useState(false);\n const [resultsState, setResultsState] =\n useState>(initialResultsState);\n const { combineThumbnails } = useCategorizedImages();\n\n const [getLabelPoints] = useLazyPopups(useLazyListLabelPointsQuery());\n\n const fetchChipLabelPoints = useCallback(\n async (\n { page: currentPage, pageSize: currentPageSize }: PaginationParameters,\n chipIds: string[]\n ) => {\n const offset = (currentPage - 1) * currentPageSize;\n const pageOfChipIds = chipIds.slice(offset, offset + currentPageSize + 1);\n if (pageOfChipIds.length === 0) {\n return;\n }\n setIsLoading(true);\n const { data: labelPointResults, isError: fetchError } =\n await getLabelPoints({\n page: 1, // This is always 1 because we're doing FE pagination via chunking the chipId parameters\n pageSize: currentPageSize,\n chipIds: pageOfChipIds,\n });\n\n const sortedResults = labelPointResults\n ? [...labelPointResults.data].sort(\n (a, b) =>\n pageOfChipIds.indexOf(a.chipId) - pageOfChipIds.indexOf(b.chipId)\n )\n : undefined;\n\n if (fetchError) {\n setIsError(true);\n } else {\n const pageOfResults = sortedResults?.slice(0, currentPageSize) ?? [];\n setResultsState((previous) =>\n processImageResults(previous, {\n pagination: labelPointResults?.pagination\n ? {\n ...labelPointResults.pagination,\n totalRecords:\n offset + labelPointResults.pagination.totalRecords, // provide the total previously loaded results plus the current total records which includes the +1 request that indicates whether there is more\n }\n : undefined,\n data: pageOfResults,\n })\n );\n }\n setIsLoading(false);\n },\n [getLabelPoints]\n );\n\n const loadMore = useCallback(() => {\n if (!isLoading && !resultsState.areAllResultsLoaded && !isError) {\n const newPagination = { ...pagination, page: pagination.page + 1 };\n fetchChipLabelPoints(newPagination, chipIds);\n setPagination(newPagination);\n }\n }, [\n isLoading,\n resultsState.areAllResultsLoaded,\n isError,\n fetchChipLabelPoints,\n pagination,\n chipIds,\n ]);\n\n useEffect(() => {\n setResultsState(initialResultsState);\n setPagination(DEFAULT_PAGINATION);\n fetchChipLabelPoints(DEFAULT_PAGINATION, chipIds);\n }, [chipIds, fetchChipLabelPoints]);\n\n const allThumbnails = combineThumbnails(\n isLoading,\n pagination,\n resultsState.data.data,\n unsavedThumbnails,\n chipIds,\n chipIdsUpdatedOn\n );\n\n const loadMoreRef = useInfiniteScroll(isLoading, loadMore);\n\n return (\n
    \n
    \n \n );\n};\n\ninterface ImageWrapperProps extends PropsWithChildren {\n dimensions: { width: number; height: number };\n}\nconst ImageWrapper: FunctionComponent = ({\n dimensions,\n children,\n}) => (\n
    \n {children}\n
    \n);\n","import { theme } from \"portal/utils/theme\";\nimport { titleCase } from \"portal/utils/strings\";\nimport { Tooltip } from \"@mui/material\";\nimport React, { FunctionComponent } from \"react\";\n\ninterface CategoryImageOverlayProps {\n name: string;\n dimensions: {\n width: number;\n height: number;\n };\n color?: {\n bg: string;\n text?: string;\n };\n}\nexport const CategoryImageOverlay: FunctionComponent<\n CategoryImageOverlayProps\n> = ({\n name,\n dimensions,\n color = {\n bg: theme.colors.carbon.orange,\n text: theme.colors.white,\n },\n}) => (\n \n
    \n \n \n {name.toLocaleUpperCase()}\n

    \n
    \n
    \n \n);\n","import { Skeleton } from \"@mui/material\";\nimport { ThumbnailImage, ThumbnailImageItem } from \"./ThumbnailImage\";\nimport React, {\n FunctionComponent,\n PropsWithChildren,\n useCallback,\n useRef,\n} from \"react\";\n\ninterface ImageGridProps extends PropsWithChildren {\n loadingItemCount: number;\n loading?: boolean;\n dimensions: {\n width: number;\n height: number;\n };\n thumbnailImages: Array;\n onImagesLoaded?: (loadedCount: number) => void;\n}\nexport const ImageGrid: FunctionComponent = ({\n loadingItemCount,\n loading,\n thumbnailImages,\n dimensions,\n onImagesLoaded,\n}) => {\n const imagesLoaded = useRef>(new Set());\n\n const onImageLoaded = useCallback(\n (id: string): void => {\n imagesLoaded.current.add(id);\n onImagesLoaded?.(imagesLoaded.current.size);\n },\n [onImagesLoaded]\n );\n\n return (\n
    \n {thumbnailImages.map((thumbnail, index) => (\n \n \n
    \n ))}\n {loading\n ? Array.from({ length: loadingItemCount })\n .fill(undefined)\n .map((_, index) => (\n \n ))\n : undefined}\n \n );\n};\n","import { Button, Typography } from \"@mui/material\";\nimport { titleCase } from \"portal/utils/strings\";\nimport { useTranslation } from \"react-i18next\";\nimport React, { FunctionComponent } from \"react\";\n\ninterface LoadMoreImagesButtonProps {\n isInitialRequestLoading: boolean;\n canLoadMore: boolean;\n onClick: () => void;\n}\nexport const LoadMoreImagesButton: FunctionComponent<\n LoadMoreImagesButtonProps\n> = ({ isInitialRequestLoading, canLoadMore, onClick }) => {\n const { t } = useTranslation();\n if (isInitialRequestLoading) {\n return (\n \n {titleCase(t(\"components.Loading.placeholder\"))}\n \n );\n }\n return canLoadMore ? (\n \n ) : (\n \n {titleCase(t(\"utils.lists.noMoreResults\"))}\n \n );\n};\n","import {\n CategorizationMap,\n getPointDetectionThumbnailPaddingFactor,\n PaginationParameters,\n} from \"portal/utils/categoryCollectionProfile\";\nimport { CategoryImageOverlay } from \"./imageOverlays/CategoryImageOverlay\";\nimport { ImageGrid } from \"../images/ImageGrid\";\nimport { LabelPoint } from \"protos/veselka/label_point\";\nimport { LabelPointFilter } from \"./LabelPointFilters\";\nimport { LoadMoreImagesButton } from \"./LoadMoreImagesButton\";\nimport { PointLabelOverlay } from \"./imageOverlays/PointLabelOverlay\";\nimport {\n processImageResults,\n ResultsMetadata,\n} from \"../images/processImageResults\";\nimport { RadioChipOption } from \"../RadioChips\";\nimport { ThumbnailImageItem } from \"../images/ThumbnailImage\";\nimport { useInfiniteScroll } from \"../images/useInfiniteScroll\";\nimport { useLazyListLabelPointsQuery } from \"portal/state/portalApi\";\nimport { useLazyPopups } from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport { useUserPreferences } from \"portal/state/store\";\nimport React, {\n FunctionComponent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nexport type ThumbnailBaseInfo = Pick<\n ThumbnailImageItem,\n \"id\" | \"x\" | \"y\" | \"width\" | \"height\" | \"url\"\n> & {\n radius: number;\n};\n\ninterface Props {\n isSaving: boolean;\n filters: LabelPointFilter;\n categoryOptions: RadioChipOption[];\n categorizationMap: CategorizationMap;\n dimensions: { width: number; height: number };\n onImageClick: (\n id: { chipId?: string; labelPointId: string },\n thumbnail: ThumbnailBaseInfo\n ) => void;\n}\nconst DEFAULT_PAGINATION: PaginationParameters = { page: 1, pageSize: 50 };\n\nconst initialResultsState: ResultsMetadata = {\n data: {\n ids: new Set(),\n data: [],\n },\n areAllResultsLoaded: false,\n loadableImagesCount: 0,\n};\n\nexport const ImageCategorizationOptions: FunctionComponent = ({\n isSaving,\n filters,\n categoryOptions,\n categorizationMap,\n dimensions,\n onImageClick,\n}) => {\n const { t } = useTranslation();\n const userPreferences = useUserPreferences();\n\n const [imagesRendered, setImagesRendered] = useState(0);\n const [pagination, setPagination] =\n useState(DEFAULT_PAGINATION);\n const [resultsState, setResultsState] =\n useState>(initialResultsState);\n\n const [getLabelPoints] = useLazyPopups(useLazyListLabelPointsQuery());\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n\n const fetchResults = useCallback(\n async (\n pagination: PaginationParameters,\n filterParameters: LabelPointFilter\n ) => {\n setIsLoading(true);\n const { data: labelPointResults, isError: fetchError } =\n await getLabelPoints({\n ...pagination,\n crops: filterParameters.crops.map((c) => c.id),\n robots: filterParameters.robots.map((r) => r.id),\n capturedAt: filterParameters.capturedAt,\n });\n\n if (fetchError) {\n setIsError(true);\n } else {\n setResultsState((previous) =>\n processImageResults(previous, labelPointResults)\n );\n setPagination((previous) => ({\n ...previous,\n page: previous.page + 1,\n }));\n }\n\n setIsLoading(false);\n },\n [getLabelPoints]\n );\n\n // Automatically fetch more results when infinite scrolling\n const loadMore = useCallback(() => {\n if (\n !isLoading &&\n !resultsState.areAllResultsLoaded &&\n !isError &&\n imagesRendered >= resultsState.loadableImagesCount\n ) {\n fetchResults(pagination, filters);\n }\n }, [\n isLoading,\n resultsState.areAllResultsLoaded,\n resultsState.loadableImagesCount,\n isError,\n imagesRendered,\n fetchResults,\n pagination,\n filters,\n ]);\n\n const loadMoreRef = useInfiniteScroll(\n isLoading || imagesRendered < resultsState.loadableImagesCount,\n loadMore\n );\n\n // Reset results and refetch when filters change or when save completes\n useEffect(() => {\n if (!isSaving) {\n setResultsState(initialResultsState);\n setPagination(DEFAULT_PAGINATION);\n fetchResults(DEFAULT_PAGINATION, filters);\n }\n }, [filters, fetchResults, isSaving]);\n\n const thumbnailImages: Array = useMemo(\n () =>\n resultsState.data.data.map(({ id, x, y, radius, image, chipId }) => {\n if (!image) {\n return;\n }\n const paddingFactor = getPointDetectionThumbnailPaddingFactor(radius);\n const padding = Math.ceil(radius * paddingFactor);\n const imageCropDimensions = (radius + padding) * 2;\n const assignedCategoryId =\n (chipId ? categorizationMap.chip[chipId] : undefined) ??\n categorizationMap.labelPoint[id];\n const category = categoryOptions.find(\n (c) => c.id === assignedCategoryId\n );\n\n const baseThumbnail = {\n id,\n url: image.url,\n x: Math.ceil(x - (radius + padding)),\n y: Math.ceil(y - (radius + padding)),\n width: Math.ceil(imageCropDimensions),\n height: Math.ceil(imageCropDimensions),\n radius,\n };\n\n return {\n ...baseThumbnail,\n onClick: () => {\n onImageClick({ chipId, labelPointId: id }, baseThumbnail);\n },\n renderOverlay: () => (\n <>\n {userPreferences.categoryCollection.showLabels && (\n \n )}\n {category && (\n \n )}\n \n ),\n };\n }),\n [\n categorizationMap.chip,\n categorizationMap.labelPoint,\n categoryOptions,\n dimensions,\n onImageClick,\n resultsState.data.data,\n userPreferences.categoryCollection.showLabels,\n ]\n );\n\n return (\n <>\n \n {!isLoading && resultsState.data.data.length === 0 ? (\n

    {t(\"utils.lists.noResults\")}

    \n ) : (\n
    \n fetchResults(pagination, filters)}\n />\n
    \n )}\n \n );\n};\n","import { classes } from \"portal/utils/theme\";\nimport { IconButton, Slider, Tooltip } from \"@mui/material\";\nimport { titleCase } from \"portal/utils/strings\";\nimport { useTranslation } from \"react-i18next\";\nimport clsx from \"clsx\";\nimport ImageIcon from \"@mui/icons-material/Image\";\nimport React, { FunctionComponent, PropsWithChildren } from \"react\";\n\ninterface ImageSizeSliderProps {\n className?: string;\n value: number;\n onChange: (size: number) => void;\n max: number;\n min: number;\n}\nexport const ImageSizeSlider: FunctionComponent = ({\n className,\n value,\n onChange,\n max,\n min,\n}) => {\n const { t } = useTranslation();\n const onValueChange = (_: Event, value: number | number[]): void => {\n onChange(value as number);\n };\n const step = 10;\n return (\n
    \n onChange(Math.max(value - step, min))}\n >\n \n \n \n onChange(Math.min(value + step, max))}\n >\n \n \n
    \n );\n};\n\ninterface ActionIconButtonProps extends PropsWithChildren {\n className?: string;\n tooltip: string;\n disabled?: boolean;\n onClick: () => void;\n}\nconst ActionIconButton: FunctionComponent = ({\n className,\n tooltip,\n disabled,\n onClick,\n children,\n}) => {\n const defaultClassnames = \"w-6 h-6 text-inherit\";\n return (\n \n \n \n {children}\n \n \n \n );\n};\n","import { classes } from \"portal/utils/theme\";\nimport { DATE_PATH_FORMAT } from \"portal/utils/dates\";\nimport {\n DateRange,\n DateRangePicker,\n DateRangePickerProps,\n MultiInputDateRangeField,\n} from \"@mui/x-date-pickers-pro\";\nimport { DateTime } from \"luxon\";\nimport { useShadowValue } from \"portal/utils/hooks/useShadowValue\";\nimport { useTranslation } from \"react-i18next\";\nimport { withErrorBoundary } from \"portal/components/ErrorBoundary\";\nimport React, { FunctionComponent } from \"react\";\n\nexport const getDateRangeDescription = (range: DateRange): string =>\n `${range[0]?.toFormat(DATE_PATH_FORMAT)} - ${range[1]?.toFormat(\n DATE_PATH_FORMAT\n )}`;\n\nconst _CarbonDateRangePicker: FunctionComponent<\n DateRangePickerProps & {\n openEnded?: boolean;\n }\n> = ({\n slots,\n slotProps,\n value: externalValue,\n readOnly,\n onChange,\n openEnded = false,\n ...props\n}) => {\n const { t } = useTranslation();\n\n const [value, setValue, { skipRender }] = useShadowValue<\n DateRange | undefined\n >(externalValue);\n\n if (skipRender) {\n return;\n }\n\n return (\n \n readOnly={readOnly}\n localeText={{\n start: t(\"components.DateRangePicker.startDate\"),\n end: t(\"components.DateRangePicker.endDate\"),\n clearButtonLabel: t(\"components.DateRangePicker.clear\"),\n }}\n slots={{\n field: MultiInputDateRangeField,\n ...slots,\n }}\n value={value ?? externalValue}\n onChange={([startDate, endDate], event) => {\n setValue([startDate, endDate]);\n if (!openEnded && (!startDate || !endDate)) {\n return;\n }\n\n if (\n (startDate && !startDate.isValid) ||\n (endDate && !endDate.isValid)\n ) {\n return;\n }\n onChange?.([startDate, endDate], event);\n }}\n slotProps={{\n fieldRoot: {\n className: classes(\"group flex gap-2\", props.className, {\n \"Mui-readOnly\": readOnly,\n }),\n },\n fieldSeparator: {\n className: \"hidden\",\n },\n ...slotProps,\n }}\n {...props}\n />\n );\n};\n\nexport const CarbonDateRangePicker = withErrorBoundary(\n {\n i18nKey: \"components.DateRangePicker.error\",\n small: true,\n },\n _CarbonDateRangePicker\n);\n","import { useState } from \"react\";\n\n/**\n * Hook that shadows a prop from component state\n * Its value is unconditionally overwritten by the input prop when it changes\n * But it can also be set manually by the component\n *\n * This is useful when the component needs to modify the prop internally to\n * support a wider range of values than the parent component can handle (for\n * example, allowing blanks temporarily in the input)\n *\n * Also returns a `skipRender` option if the prop was changed this render\n * This can be used to short-circuit the render in the component that will\n * need to be redone\n *\n **/\nexport const useShadowValue = (\n input: T\n): [T, (value: T) => void, { skipRender: boolean }] => {\n // this is the value and setter we expose to the caller\n const [shadowedValue, setShadowedValue] = useState(input);\n\n // keep track of the last unique input value\n const [lastInput, setLastInput] = useState(input);\n // if the input changes update the shadowed value unconditionally\n if (input !== lastInput) {\n setLastInput(input);\n setShadowedValue(input);\n // let the caller know that they can skip the render\n return [input, setShadowedValue, { skipRender: true }];\n }\n\n return [shadowedValue, setShadowedValue, { skipRender: false }];\n};\n","import { isUndefined } from \"./identity\";\n\nexport const round = (input: number, decimals: number = 0): number => {\n const scale = Math.pow(10, decimals);\n return Math.round((input + Number.EPSILON) * scale) / scale;\n};\n\nexport const isEven = (input: number): boolean => input % 2 === 0;\nexport const isOdd = (input: number): boolean => input % 2 === 1;\n\nexport const mean = (input: number[]): number | undefined => {\n if (input.length === 0) {\n return;\n }\n const total = sum(input);\n return total / input.length;\n};\n\nexport const constrain = (input: number, min: number, max: number): number => {\n return Math.min(Math.max(input, min), max);\n};\n\nexport const sum = (input: number[]): number => {\n let sum = 0;\n for (const number of input) {\n sum += number;\n }\n return sum;\n};\n\n// input MUST BE SORTED\nexport const percentile = (\n input: number[],\n target: number\n): number | undefined => {\n if (input.length === 0) {\n return;\n }\n if (target === 0) {\n return input[0];\n }\n if (target === 100) {\n return input.at(-1);\n }\n const index = (input.length - 1) * (target / 100);\n const lower = Math.floor(index);\n const upper = lower + 1;\n const weight = index % 1;\n const lowerValue = input[lower];\n const upperValue = input[upper];\n\n if (isUndefined(lowerValue) || isUndefined(upperValue)) {\n return undefined;\n }\n\n if (upper >= input.length) {\n return lowerValue;\n }\n return lowerValue * (1 - weight) + upperValue * weight;\n};\n\nexport const randomBetween = (minimum: number, maximum: number): number =>\n Math.floor(Math.random() * (maximum - minimum + 1) + minimum);\n\nexport const clamp = (min: number, max: number, value: number): number =>\n Math.min(Math.max(value, min), max);\n","import { clamp, mean } from \"./math\";\nimport { convert, MeasurementSystem, UnitNumberType } from \"./units/units\";\nimport {\n CycleSlot,\n getAsPercentOfCategorized,\n Metric,\n MetricValidation,\n} from \"./metrics\";\nimport { DailyMetricResponse } from \"protos/portal/metrics\";\nimport { isUndefined } from \"./identity\";\nimport { keys } from \"./objects\";\nimport { ParseKeys, TFunction } from \"i18next\";\nimport { titleCase } from \"portal/utils/strings\";\n\nexport const isCertifiedMetricId = (\n id: string\n): id is Exclude => {\n console.debug(DailyMetricResponse.fromPartial({}));\n return keys(DailyMetricResponse.fromPartial({})).includes(\n id as keyof DailyMetricResponse\n );\n};\n\nexport const getMetricName = (t: TFunction, metric: Metric): string =>\n titleCase(\n // carbon.actions.compareKeys.ignoreDynamic\n t(`utils.metrics.certified.metrics.${metric.id}`)\n );\n\nconst DEFAULT_METRIC: Pick<\n Metric,\n \"type\" | \"canAverage\" | \"canTotal\" | \"getValue\" | \"validation\"\n> = {\n type: \"string\",\n canAverage: true,\n canTotal: true,\n getValue: (value: any) => value,\n validation: MetricValidation.PENDING,\n};\n\nexport const METRIC_ACRES_WEEDED: Metric = {\n ...DEFAULT_METRIC,\n id: \"acresWeeded\",\n type: \"number\",\n units: \"ac\",\n validation: MetricValidation.VALIDATED,\n cycleSlot: CycleSlot.AREA,\n};\n\nexport const METRIC_AVERAGE_SPEED: Metric = {\n ...DEFAULT_METRIC,\n id: \"avgSpeedMph\",\n type: \"number\",\n units: \"mph\",\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n cycleSlot: CycleSlot.SPEED,\n};\n\nexport const METRIC_AVERAGE_WEED_SIZE: Metric = {\n ...DEFAULT_METRIC,\n id: \"avgWeedSizeMm\",\n type: \"number\",\n units: \"mm\",\n toUnits: \"mm\",\n cycle: {\n [MeasurementSystem.imperial]: [\"in\", \"mm\"],\n [MeasurementSystem.metric]: [\"mm\"],\n },\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n cycleSlot: CycleSlot.SIZE,\n};\n\nexport const METRIC_AVERAGE_CROP_SIZE: Metric = {\n ...DEFAULT_METRIC,\n id: \"avgCropSizeMm\",\n type: \"number\",\n units: \"mm\",\n toUnits: \"mm\",\n cycle: {\n [MeasurementSystem.imperial]: [\"in\", \"mm\"],\n [MeasurementSystem.metric]: [\"mm\"],\n },\n canTotal: false,\n cycleSlot: CycleSlot.SIZE,\n};\n\nexport const METRIC_AVERAGE_TARGETABLE_REQ_LASER_TIME: Metric = {\n ...DEFAULT_METRIC,\n id: \"avgTargetableReqLaserTime\",\n type: \"number\",\n units: \"ms\",\n toUnits: \"ms\",\n cycle: {\n [MeasurementSystem.imperial]: [\"ms\"],\n [MeasurementSystem.metric]: [\"ms\"],\n },\n canTotal: false,\n cycleSlot: CycleSlot.SHOOT,\n};\n\nexport const METRIC_AVERAGE_UNTARGETABLE_REQ_LASER_TIME: Metric = {\n ...DEFAULT_METRIC,\n id: \"avgUntargetableReqLaserTime\",\n type: \"number\",\n units: \"ms\",\n toUnits: \"ms\",\n cycle: {\n [MeasurementSystem.imperial]: [\"ms\"],\n [MeasurementSystem.metric]: [\"ms\"],\n },\n canTotal: false,\n validation: MetricValidation.INTERNAL,\n cycleSlot: CycleSlot.SHOOT,\n};\n\nexport const METRIC_BANDING_CONFIG: Metric = {\n ...DEFAULT_METRIC,\n id: \"bandingConfigName\",\n type: \"string\",\n canTotal: false,\n canAverage: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_BANDING_ENABLED: Metric = {\n ...DEFAULT_METRIC,\n id: \"bandingEnabled\",\n type: \"boolean\",\n truei18nKey: \"utils.descriptors.enabled\",\n falsei18nKey: \"utils.descriptors.disabled\",\n canTotal: false,\n canAverage: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_COVERAGE_SPEED: Metric = {\n ...DEFAULT_METRIC,\n id: \"coverageSpeedAcresHr\",\n type: \"number\",\n units: \"ac/h\",\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n cycleSlot: CycleSlot.COVERAGE,\n};\n\nexport const METRIC_DISTANCE_WEEDED: Metric = {\n ...DEFAULT_METRIC,\n id: \"distanceWeededMeters\",\n type: \"number\",\n units: \"mi\",\n getValue: (value) => (value ? convert(value).from(\"m\").to(\"mi\") : undefined),\n cycleSlot: CycleSlot.DISTANCE,\n};\n\nexport const METRIC_KILLED_WEEDS: Metric = {\n ...DEFAULT_METRIC,\n type: \"number\",\n id: \"killedWeeds\",\n units: UnitNumberType.COUNT,\n};\n\nexport const METRIC_MISSED_WEEDS: Metric = {\n ...DEFAULT_METRIC,\n type: \"number\",\n id: \"missedWeeds\",\n units: UnitNumberType.COUNT,\n};\n\nexport const METRIC_SKIPPED_WEEDS: Metric = {\n ...DEFAULT_METRIC,\n type: \"number\",\n id: \"skippedWeeds\",\n units: UnitNumberType.COUNT,\n};\n\nexport const METRIC_TIME_EFFICIENCY: Metric = {\n ...DEFAULT_METRIC,\n id: \"timeEfficiency\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n getValue: (value) => value * 100,\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_TOTAL_WEEDS: Metric = {\n ...DEFAULT_METRIC,\n id: \"totalWeeds\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n getValue: (value, { notWeeding }, canReadInternalMetrics = false) => {\n if (isUndefined(value)) {\n return value;\n }\n if (canReadInternalMetrics) {\n return value;\n }\n return value - notWeeding;\n },\n validation: MetricValidation.INTERNAL,\n};\n\nexport const METRIC_TOTAL_WEEDS_IN_BAND: Metric = {\n ...DEFAULT_METRIC,\n id: \"totalWeedsInBand\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n getValue: (value, { killedWeeds, missedWeeds }) => {\n if (!isUndefined(value)) {\n return value;\n }\n if (killedWeeds && missedWeeds) {\n return killedWeeds + missedWeeds;\n }\n },\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_UPTIME: Metric = {\n ...DEFAULT_METRIC,\n id: \"uptimeSeconds\",\n type: \"number\",\n isDuration: true,\n units: \"h\",\n cycle: {\n imperial: [\"h\", \"min\", \"s\"],\n metric: [\"h\", \"min\", \"s\"],\n },\n getValue: (value) => (value ? convert(value).from(\"s\").to(\"h\") : undefined),\n validation: MetricValidation.VALIDATED,\n cycleSlot: CycleSlot.TIME,\n};\n\nexport const METRIC_WEED_DENSITY: Metric = {\n ...DEFAULT_METRIC,\n id: \"weedDensitySqFt\",\n type: \"number\",\n units: \"/ft2\",\n unitsDelimiter: \"\",\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n cycleSlot: CycleSlot.DENSITY,\n};\n\nexport const METRIC_CROP_DENSITY: Metric = {\n ...DEFAULT_METRIC,\n id: \"cropDensitySqFt\",\n type: \"number\",\n units: \"/ft2\",\n unitsDelimiter: \"\",\n canTotal: false,\n cycleSlot: CycleSlot.DENSITY,\n};\n\nexport const METRIC_WEEDING_EFFICIENCY: Metric = {\n ...DEFAULT_METRIC,\n id: \"weedingEfficiency\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n getValue: (value) => value * 100,\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_WEEDING_TIME: Metric = {\n ...DEFAULT_METRIC,\n id: \"weedingUptimeSeconds\",\n type: \"number\",\n isDuration: true,\n units: \"h\",\n cycle: {\n imperial: [\"h\", \"min\", \"s\"],\n metric: [\"h\", \"min\", \"s\"],\n },\n getValue: (value) => (value ? convert(value).from(\"s\").to(\"h\") : undefined),\n validation: MetricValidation.VALIDATED,\n cycleSlot: CycleSlot.TIME,\n};\n\nexport const METRIC_TARGET_WEEDING_TIME: Metric = {\n ...DEFAULT_METRIC,\n id: \"targetWeedingTimeSeconds\",\n type: \"number\",\n isDuration: true,\n units: \"h\",\n cycle: {\n imperial: [\"h\", \"min\", \"s\"],\n metric: [\"h\", \"min\", \"s\"],\n },\n getValue: (value) => (value ? convert(value).from(\"s\").to(\"h\") : undefined),\n validation: MetricValidation.PENDING,\n cycleSlot: CycleSlot.TIME,\n};\n\nexport const METRIC_COUNT_BROADLEAF: Metric = {\n ...DEFAULT_METRIC,\n id: \"weedsTypeCountBroadleaf\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n decimalPlaces: 0,\n getValue: getAsPercentOfCategorized,\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_COUNT_GRASS: Metric = {\n ...DEFAULT_METRIC,\n id: \"weedsTypeCountGrass\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n decimalPlaces: 0,\n getValue: getAsPercentOfCategorized,\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_COUNT_PURSLANE: Metric = {\n ...DEFAULT_METRIC,\n id: \"weedsTypeCountPurslane\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n decimalPlaces: 0,\n getValue: getAsPercentOfCategorized,\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_COUNT_OFFSHOOT: Metric = {\n ...DEFAULT_METRIC,\n id: \"weedsTypeCountOffshoot\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n decimalPlaces: 0,\n getValue: getAsPercentOfCategorized,\n canTotal: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const METRIC_NOT_WEEDING_WEEDS: Metric = {\n ...DEFAULT_METRIC,\n id: \"notWeedingWeeds\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n validation: MetricValidation.INTERNAL,\n};\n\nexport const METRIC_NOT_WEEDING: Metric = {\n ...DEFAULT_METRIC,\n id: \"notWeeding\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n getValue: (value, { notWeedingWeeds }) =>\n notWeedingWeeds === 0 ? value : notWeedingWeeds,\n validation: MetricValidation.INTERNAL,\n};\n\nexport const METRIC_THINNED_CROPS: Metric = {\n ...DEFAULT_METRIC,\n id: \"thinnedCrops\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n};\n\nexport const METRIC_SKIPPED_CROPS: Metric = {\n ...DEFAULT_METRIC,\n id: \"skippedCrops\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n};\n\nexport const METRIC_MISSED_CROPS: Metric = {\n ...DEFAULT_METRIC,\n id: \"missedCrops\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n};\n\nexport const METRIC_TOTAL_CROPS: Metric = {\n ...DEFAULT_METRIC,\n id: \"totalCrops\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n validation: MetricValidation.INTERNAL,\n};\n\nexport const METRIC_VALID_CROPS: Metric = {\n ...DEFAULT_METRIC,\n id: \"validCrops\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n getValue: (value, metrics) => {\n if (value) {\n return value;\n }\n return METRIC_TOTAL_CROPS.getValue(metrics.totalCrops, metrics);\n },\n};\n\nexport const METRIC_KEPT_CROPS: Metric = {\n ...DEFAULT_METRIC,\n id: \"keptCrops\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n};\n\nexport const METRIC_NOT_THINNING: Metric = {\n ...DEFAULT_METRIC,\n id: \"notThinning\",\n type: \"number\",\n units: UnitNumberType.COUNT,\n validation: MetricValidation.INTERNAL,\n};\n\nexport const METRIC_BANDING_PERCENTAGE: Metric = {\n ...DEFAULT_METRIC,\n id: \"bandingPercentage\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n canTotal: false,\n getValue: (value) => clamp(0, 100, value),\n};\n\nexport const METRIC_THINNING_EFFICIENCY: Metric = {\n ...DEFAULT_METRIC,\n id: \"thinningEfficiency\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n getValue: (value) => value * 100,\n canTotal: false,\n};\n\nexport const METRIC_OPERATOR_EFFECTIVENESS: Metric = {\n ...DEFAULT_METRIC,\n id: \"operatorEffectiveness\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n getValue: (value) => value * 100,\n canTotal: false,\n validation: MetricValidation.PENDING,\n};\n\nexport const METRIC_OVERALL_EFFICIENCY: Metric = {\n ...DEFAULT_METRIC,\n id: \"overallEfficiency\",\n type: \"number\",\n units: UnitNumberType.PERCENT,\n unitsDelimiter: \"\",\n getValue: (value, metrics) => {\n const weeding = METRIC_WEEDING_EFFICIENCY.getValue(\n metrics.weedingEfficiency,\n metrics\n );\n const thinning = METRIC_THINNING_EFFICIENCY.getValue(\n metrics.thinningEfficiency,\n metrics\n );\n if (weeding && !thinning) {\n return weeding;\n } else if (thinning && !weeding) {\n return thinning;\n } else if (thinning && weeding) {\n return mean([weeding, thinning]);\n }\n },\n canTotal: false,\n};\n\nexport const METRIC_CROP: Metric = {\n ...DEFAULT_METRIC,\n id: \"crop\",\n type: \"string\",\n getValue: (value, { crop, cropId }) => crop || cropId,\n canTotal: false,\n canAverage: false,\n validation: MetricValidation.VALIDATED,\n};\n\nexport const CERTIFIED_METRICS = [\n METRIC_CROP,\n METRIC_UPTIME,\n METRIC_WEEDING_TIME,\n METRIC_TARGET_WEEDING_TIME,\n METRIC_TIME_EFFICIENCY,\n METRIC_ACRES_WEEDED,\n METRIC_COVERAGE_SPEED,\n METRIC_AVERAGE_SPEED,\n METRIC_OPERATOR_EFFECTIVENESS,\n METRIC_DISTANCE_WEEDED,\n METRIC_BANDING_CONFIG,\n METRIC_BANDING_ENABLED,\n METRIC_AVERAGE_WEED_SIZE,\n METRIC_AVERAGE_CROP_SIZE,\n METRIC_AVERAGE_TARGETABLE_REQ_LASER_TIME,\n METRIC_WEED_DENSITY,\n METRIC_COUNT_BROADLEAF,\n METRIC_COUNT_GRASS,\n METRIC_COUNT_PURSLANE,\n METRIC_COUNT_OFFSHOOT,\n METRIC_TOTAL_WEEDS,\n METRIC_TOTAL_WEEDS_IN_BAND,\n METRIC_KILLED_WEEDS,\n METRIC_WEEDING_EFFICIENCY,\n METRIC_SKIPPED_WEEDS,\n METRIC_MISSED_WEEDS,\n METRIC_NOT_WEEDING,\n METRIC_CROP_DENSITY,\n METRIC_THINNED_CROPS,\n METRIC_SKIPPED_CROPS,\n METRIC_MISSED_CROPS,\n METRIC_TOTAL_CROPS,\n METRIC_VALID_CROPS,\n METRIC_KEPT_CROPS,\n METRIC_NOT_THINNING,\n METRIC_BANDING_PERCENTAGE,\n METRIC_THINNING_EFFICIENCY,\n METRIC_OVERALL_EFFICIENCY,\n];\n\nexport interface MetricGroup {\n i18nKey: ParseKeys;\n metrics: Metric[];\n}\n\nexport const METRIC_GROUPS: MetricGroup[] = [\n {\n i18nKey: \"utils.metrics.groups.performance\",\n metrics: [\n METRIC_OVERALL_EFFICIENCY,\n METRIC_WEEDING_EFFICIENCY,\n METRIC_THINNING_EFFICIENCY,\n METRIC_OPERATOR_EFFECTIVENESS,\n METRIC_AVERAGE_TARGETABLE_REQ_LASER_TIME,\n METRIC_AVERAGE_UNTARGETABLE_REQ_LASER_TIME,\n ],\n },\n {\n i18nKey: \"utils.metrics.groups.usage\",\n metrics: [\n METRIC_UPTIME,\n METRIC_WEEDING_TIME,\n METRIC_TARGET_WEEDING_TIME,\n METRIC_TIME_EFFICIENCY,\n ],\n },\n {\n i18nKey: \"utils.metrics.groups.coverage\",\n metrics: [\n METRIC_ACRES_WEEDED,\n METRIC_COVERAGE_SPEED,\n METRIC_AVERAGE_SPEED,\n METRIC_DISTANCE_WEEDED,\n ],\n },\n {\n i18nKey: \"models.crops.crop_other\",\n metrics: [\n METRIC_CROP_DENSITY,\n METRIC_AVERAGE_CROP_SIZE,\n METRIC_TOTAL_CROPS,\n METRIC_VALID_CROPS,\n METRIC_THINNED_CROPS,\n METRIC_KEPT_CROPS,\n METRIC_SKIPPED_CROPS,\n METRIC_NOT_THINNING,\n METRIC_MISSED_CROPS,\n ],\n },\n {\n i18nKey: \"models.weeds.weed_other\",\n metrics: [\n METRIC_WEED_DENSITY,\n METRIC_AVERAGE_WEED_SIZE,\n METRIC_TOTAL_WEEDS,\n METRIC_TOTAL_WEEDS_IN_BAND,\n METRIC_KILLED_WEEDS,\n METRIC_SKIPPED_WEEDS,\n METRIC_NOT_WEEDING,\n METRIC_MISSED_WEEDS,\n METRIC_COUNT_BROADLEAF,\n METRIC_COUNT_GRASS,\n METRIC_COUNT_PURSLANE,\n METRIC_COUNT_OFFSHOOT,\n ],\n },\n {\n i18nKey: \"utils.metrics.groups.field\",\n metrics: [\n METRIC_CROP,\n METRIC_BANDING_CONFIG,\n METRIC_BANDING_PERCENTAGE,\n METRIC_BANDING_ENABLED,\n ],\n },\n];\n\nexport const VALIDATED_METRICS = CERTIFIED_METRICS.filter(\n (metric) => metric.validation === MetricValidation.VALIDATED\n);\n\nconst metricsById: Map = new Map();\nfor (const metric of CERTIFIED_METRICS) {\n metricsById.set(metric.id, metric);\n}\n\nexport const getMetricById = (\n key: keyof DailyMetricResponse\n): Metric | undefined => metricsById.get(key);\n","import { CarbonUser } from \"./auth\";\nimport { DateRange, PickersShortcutsItem } from \"@mui/x-date-pickers-pro\";\nimport { DateTime } from \"luxon\";\nimport { i18n as I18n, TFunction } from \"i18next\";\nimport { isUndefined } from \"./identity\";\nimport {\n METRIC_ACRES_WEEDED,\n METRIC_AVERAGE_WEED_SIZE,\n METRIC_BANDING_ENABLED,\n METRIC_COVERAGE_SPEED,\n METRIC_CROP,\n METRIC_KILLED_WEEDS,\n METRIC_TOTAL_WEEDS_IN_BAND,\n METRIC_WEED_DENSITY,\n METRIC_WEEDING_EFFICIENCY,\n METRIC_WEEDING_TIME,\n} from \"portal/utils/certifiedMetrics\";\nimport {\n ReportInstanceResponse,\n ReportMode,\n reportModeFromJSON,\n ReportResponse,\n} from \"protos/portal/reports\";\nimport { Slug } from \"./routing\";\nimport { useStableDateRange } from \"./hooks/useStable\";\n\nexport const GROUP_COLORS = [\n \"bg-amber-700\",\n \"bg-cyan-700\",\n \"bg-emerald-700\",\n \"bg-violet-700\",\n \"bg-red-700\",\n \"bg-indigo-700\",\n \"bg-lime-700\",\n \"bg-fuchsia-700\",\n \"bg-yellow-700\",\n \"bg-rose-700\",\n \"bg-teal-700\",\n \"bg-purple-700\",\n];\n\nexport const PINNED_COLUMN_DATE = \"date\";\nexport const PINNED_COLUMN_JOB = \"job\";\nexport const PINNED_COLUMN_ROBOT = \"robot\";\n\nexport const DEFAULT_COLUMNS = [\n METRIC_CROP,\n METRIC_WEEDING_TIME,\n METRIC_ACRES_WEEDED,\n METRIC_COVERAGE_SPEED,\n METRIC_BANDING_ENABLED,\n METRIC_AVERAGE_WEED_SIZE,\n METRIC_WEED_DENSITY,\n METRIC_TOTAL_WEEDS_IN_BAND,\n METRIC_KILLED_WEEDS,\n METRIC_WEEDING_EFFICIENCY,\n].map((metric) => metric.id);\n\nexport type ReportProperty = keyof ReportResponse;\nexport type ReportInstanceProperty = keyof ReportInstanceResponse;\n\nexport const toNewInstance = (\n user: CarbonUser,\n report: ReportResponse\n): ReportInstanceResponse =>\n ReportInstanceResponse.fromPartial({\n authorId: user.userId ?? \"\",\n endDate: report.endDate,\n name: report.name,\n orderAsc: report.orderAsc,\n orderBy: report.orderBy,\n reportId: report.db?.id,\n robotIds: report.robotIds,\n showAverage: report.showAverage,\n showTotal: report.showTotal,\n slug: Slug.NEW,\n startDate: report.startDate,\n visibleColumns: report.visibleColumns,\n automated: false,\n authorName: user.name ?? user.email,\n mode: report.mode,\n });\n\nexport const isNewReport = (report?: ReportResponse): boolean =>\n !isUndefined(report) && (!report.slug || report.slug === Slug.NEW);\n\nexport const isNewInstance = (instance?: ReportInstanceResponse): boolean =>\n !isUndefined(instance) && (!instance.slug || instance.slug === Slug.NEW);\n\nexport const secondsToRange = (\n startSeconds: number | undefined,\n endSeconds: number | undefined\n): DateRange => [\n isUndefined(startSeconds)\n ? DEFAULT_DATE_RANGE[0]\n : DateTime.fromSeconds(startSeconds),\n isUndefined(endSeconds)\n ? DEFAULT_DATE_RANGE[1]\n : DateTime.fromSeconds(endSeconds),\n];\n\nexport const DEFAULT_REPORT: ReportResponse = ReportResponse.fromPartial({\n automateWeekly: false,\n endDate: DateTime.local().toUnixInteger(),\n mode: reportModeFromJSON(ReportMode.REPORT_MODE_JOBS),\n orderAsc: true,\n showAverage: true,\n showTotal: true,\n slug: Slug.NEW,\n startDate: DateTime.local().minus({ days: 3 }).toUnixInteger(),\n visibleColumns: DEFAULT_COLUMNS,\n});\n\nexport const getDateRangeShortcuts = (\n t: TFunction\n): PickersShortcutsItem>[] => [\n {\n label: t(\"components.DateRangePicker.thisWeek\"),\n getValue: () => {\n const today = DateTime.local();\n return [today.startOf(\"week\"), today];\n },\n },\n {\n label: t(\"components.DateRangePicker.lastWeek\"),\n getValue: () => {\n const today = DateTime.local();\n const previousWeek = today.minus({ days: 7 });\n return [previousWeek.startOf(\"week\"), previousWeek.endOf(\"week\")];\n },\n },\n {\n label: t(\"components.DateRangePicker.last7days\"),\n getValue: () => {\n const today = DateTime.local();\n return [today.minus({ days: 7 }), today];\n },\n },\n {\n label: t(\"components.DateRangePicker.thisMonth\"),\n getValue: () => {\n const today = DateTime.local();\n return [today.startOf(\"month\"), today];\n },\n },\n {\n label: t(\"components.DateRangePicker.lastMonth\"),\n getValue: () => {\n const today = DateTime.local();\n const previousMonth = today.minus({ days: 30 });\n return [previousMonth.startOf(\"month\"), previousMonth.endOf(\"month\")];\n },\n },\n];\n\nexport const DEFAULT_DATE_RANGE: DateRange = [\n DateTime.local().minus({ days: 3 }),\n DateTime.local(),\n];\n\nexport const useDateRange = (\n inputDateRange: DateRange = DEFAULT_DATE_RANGE\n): DateRange => useStableDateRange(inputDateRange);\n\nexport const isBlankValue = (value: any): boolean => {\n if (Array.isArray(value)) {\n return value.filter((v) => !isBlankValue(v)).length === 0;\n }\n return Boolean(isUndefined(value) || value === \"\" || Number.isNaN(value));\n};\n\nexport const formatWeeklyDay = (\n t: TFunction,\n i18n: I18n,\n weekday?: number\n): string => {\n if (!weekday || weekday < 0 || weekday > 6) {\n return t(\"components.DateRangePicker.invalid\");\n }\n return DateTime.local()\n .set({ weekday })\n .toLocaleString({ weekday: \"long\" }, { locale: i18n.language });\n};\n\nexport const formatWeeklyHour = (\n t: TFunction,\n i18n: I18n,\n hour?: number\n): string => {\n if (!hour || hour < 0 || hour > 24) {\n return t(\"components.DateRangePicker.invalid\");\n }\n return DateTime.local()\n .set({ hour, minute: 0 })\n .toLocaleString(DateTime.TIME_SIMPLE, { locale: i18n.language });\n};\n","import {\n Autocomplete,\n AutocompleteProps,\n Chip,\n InputAdornment,\n TextField,\n TextFieldProps,\n} from \"@mui/material\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { CarbonDateRangePicker } from \"../CarbonDateRangePicker\";\nimport { ConfigCrop } from \"protos/portal/configs\";\nimport { cropToConfigCrop, getCrops, SortedCrops } from \"portal/utils/crops\";\nimport { DateRange } from \"@mui/lab\";\nimport { DateTime } from \"luxon\";\nimport { getAutocompleteText } from \"portal/utils/forms\";\nimport { getDateRangeShortcuts } from \"portal/utils/reports\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { skipToken } from \"@reduxjs/toolkit/query\";\nimport {\n SMALL_AUTOCOMPLETE_DARK,\n SMALL_TEXT_FIELD_DARK,\n} from \"portal/utils/theme\";\nimport { titleCase } from \"portal/utils/strings\";\nimport { useAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport {\n useGetConfigQuery,\n useListCropsQuery,\n useListRobotCropsQuery,\n useListRobotsQuery,\n} from \"portal/state/portalApi\";\nimport { useQueryPopups } from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport React, { FunctionComponent, useMemo } from \"react\";\nimport WarningIcon from \"@mui/icons-material/WarningAmber\";\n\nexport interface Entity {\n id: string;\n name: string;\n}\n\nexport interface LabelPointFilter {\n crops: Entity[];\n robots: Entity[];\n capturedAt: DateRange | undefined;\n}\ninterface LabelPointFiltersProps {\n serial?: string;\n filters: LabelPointFilter;\n onChange: (filters: LabelPointFilter) => void;\n}\n\nexport const LabelPointFilters: FunctionComponent = ({\n serial,\n filters,\n onChange,\n}) => {\n const { t } = useTranslation();\n\n const canSeeAllCrops = useAuthorizationRequired([\n buildPermission(\n PermissionAction.update,\n PermissionResource.crops_basic,\n PermissionDomain.all\n ),\n ]);\n\n // crops\n const {\n data: config,\n isFetching: isConfigLoading,\n isError: isConfigError,\n } = useQueryPopups(useGetConfigQuery(serial ? { serial } : skipToken), {\n errorVariant: \"warning\",\n });\n\n const {\n data: allCrops,\n isFetching: isCropsLoading,\n isError: isAllCropsError,\n } = useQueryPopups(\n useListCropsQuery(undefined, {\n skip: !isUndefined(serial),\n })\n );\n\n const {\n data: robotCrops,\n isFetching: isRobotLoading,\n isError: isCropsError,\n } = useQueryPopups(useListRobotCropsQuery(serial ? { serial } : skipToken));\n\n const sortedCrops = useMemo(() => {\n if (!serial) {\n if (!allCrops) {\n return;\n }\n const archived: ConfigCrop[] = [];\n const all: ConfigCrop[] = [];\n for (const crop of allCrops) {\n const configCrop = cropToConfigCrop(crop);\n if (crop.archived) {\n archived.push(configCrop);\n }\n all.push(configCrop);\n }\n return {\n all,\n enabled: all,\n disabled: [],\n archived,\n pinnedAndEnabledCrops: 0,\n };\n }\n\n if (!config) {\n return;\n }\n\n return getCrops(serial, config.config, robotCrops);\n }, [serial, config, robotCrops, allCrops]);\n const crops = canSeeAllCrops ? sortedCrops?.all : sortedCrops?.enabled;\n\n // robots\n const {\n data: robotSummaries,\n isLoading: isRobotsLoading,\n error: robotError,\n } = useQueryPopups(useListRobotsQuery({}), {\n errorVariant: \"warning\",\n });\n\n const robots = useMemo(() => {\n if (!robotSummaries) {\n return;\n }\n const allRobots = [];\n for (const robotSummary of robotSummaries) {\n const { robot } = robotSummary;\n if (!robot) {\n continue;\n }\n const { serial } = robot;\n allRobots.push({\n id: serial,\n name: serial,\n });\n }\n return allRobots;\n }, [robotSummaries]);\n\n const classNames = \"md:max-w-1/3\";\n return (\n
    \n
    \n ({\n id,\n name: commonName,\n }))}\n value={filters.crops}\n onChange={(value) => onChange({ ...filters, crops: value })}\n />\n
    \n
    \n onChange({ ...filters, robots: value })}\n />\n
    \n
    \n {\n onChange({ ...filters, capturedAt: newRange });\n }}\n />\n
    \n
    \n );\n};\n\ntype FilterProps = Pick<\n AutocompleteProps,\n \"loading\" | \"options\" | \"value\"\n> & {\n onChange: (value: Entity[]) => void;\n loadingError: boolean;\n label: TextFieldProps[\"label\"];\n};\n\nconst Filter: FunctionComponent = ({\n loading,\n options,\n value,\n label,\n onChange,\n loadingError,\n}) => {\n const { t } = useTranslation();\n return (\n option.name}\n isOptionEqualToValue={(option, value) => option.id === value.id}\n limitTags={3}\n renderTags={(tagValue, getTagProps) => {\n return tagValue.map((option, index) => (\n \n ));\n }}\n onChange={(_: React.SyntheticEvent, value) => {\n onChange(value);\n }}\n renderInput={(parameters: TextFieldProps) => (\n \n \n \n ) : undefined,\n }}\n />\n )}\n />\n );\n};\n","import {\n Chip,\n MenuItem,\n Select,\n SelectChangeEvent,\n Skeleton,\n} from \"@mui/material\";\nimport { SELECT_DARK, theme } from \"portal/utils/theme\";\nimport React, { CSSProperties, FunctionComponent, useMemo } from \"react\";\n\nexport interface RadioChipOption {\n id: string;\n name: string;\n color?: {\n bg: string;\n text?: string;\n };\n}\ninterface RadioChipsProps {\n isLoading: boolean;\n options: RadioChipOption[];\n activeId?: string;\n setActiveId: (id: string) => void;\n createLabel: (option: { id: string; name: string }) => string;\n}\nexport const RadioChips: FunctionComponent = ({\n isLoading = false,\n options,\n activeId,\n setActiveId,\n createLabel,\n}) => {\n const colorsStyle = (\n isActive: boolean,\n color?: RadioChipOption[\"color\"]\n ): CSSProperties => ({\n borderColor: !isActive && color?.bg ? color.bg : theme.colors.white,\n color: isActive && color?.text ? color.text : theme.colors.white,\n backgroundColor: isActive\n ? color?.bg ?? theme.colors.carbon.orange\n : undefined,\n });\n\n const activeCategory = useMemo(\n () => options.find((o) => o.id === activeId),\n [activeId, options]\n );\n\n return (\n <>\n
    \n {isLoading ? (\n
    \n {Array.from({ length: 5 })\n .fill(undefined)\n .map((_, index) => (\n
    \n \n
    \n ))}\n
    \n ) : (\n
    \n {options.map(({ id, name, color }) => (\n {\n setActiveId(id);\n }}\n />\n ))}\n
    \n )}\n
    \n
    \n \n {...SELECT_DARK}\n className=\"w-full rounded-full border-solid border-1\"\n style={colorsStyle(true, activeCategory?.color)}\n size=\"small\"\n defaultValue={options[0] ? options[0].id : \"\"}\n value={activeId ?? \"\"}\n onChange={(event: SelectChangeEvent) => {\n setActiveId(event.target.value as string);\n }}\n >\n {options.map(({ name, id }) => (\n \n {createLabel({ id, name })}\n \n ))}\n \n
    \n \n );\n};\n","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgLogoIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"currentColor\",\n viewBox: \"0 0 700 700\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0v700h700V0Zm600 600H100V100h500Z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M550 450H250V250h200v100l100-100V150H150v400h400z\"\n})));\nexport { SvgLogoIcon as ReactComponent };\nexport default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA3MDAgNzAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgPHBhdGggZD0iTTAsMFY3MDBINzAwVjBaTTYwMCw2MDBIMTAwVjEwMEg2MDBaIiAvPgogIDxwb2x5Z29uIHBvaW50cz0iNTUwIDQ1MCAyNTAgNDUwIDI1MCAyNTAgNDUwIDI1MCA0NTAgMzUwIDU1MCAyNTAgNTUwIDE1MCAxNTAgMTUwIDE1MCA1NTAgNTUwIDU1MCIgLz4KPC9zdmc+\";","import { array, object, string } from \"yup\";\nimport { Autocomplete, TextField } from \"formik-mui\";\nimport {\n type AutocompleteRenderGroupParams,\n type AutocompleteRenderOptionState,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n TextField as TextFieldMui,\n TextFieldProps,\n} from \"@mui/material\";\nimport {\n BLUE_LOADING_BUTTON,\n classes,\n TEXT_FIELD_DARK,\n} from \"portal/utils/theme\";\nimport { buildPermission, getCustomerId } from \"portal/utils/auth\";\nimport { ReactComponent as CarbonLogo } from \"portal/images/logo_icon.svg\";\nimport { Category } from \"protos/category_profile/category_profile\";\nimport {\n type CategoryOption,\n getCategoryOptionLabel,\n getDefaultCategoryNames,\n hasStrictCategories,\n isCategoryNameOnly,\n} from \"portal/utils/categoryCollectionProfile\";\nimport {\n ExpandedCategoryCollectionRequest,\n ExpandedCategoryCollectionResponse,\n UnsavedCategory,\n} from \"protos/portal/category_profile\";\nimport { Field, Form, Formik } from \"formik\";\nimport { getAutocompleteText } from \"portal/utils/forms\";\nimport { GlobalHotKeys } from \"react-hotkeys\";\nimport { LoadingButton } from \"@mui/lab\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { titleCase } from \"portal/utils/strings\";\nimport { useSelf } from \"portal/state/store\";\nimport { useTranslation } from \"react-i18next\";\nimport { v4 as uuid } from \"uuid\";\nimport { withAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport CopyIcon from \"@mui/icons-material/ContentCopy\";\nimport DeleteIcon from \"@mui/icons-material/CloseOutlined\";\nimport React, { FunctionComponent, useState } from \"react\";\n\n// this count enforces M1 requirement of strict categories\nconst REQUIRED_CATEGORY_COUNT = 5;\n\ninterface Props {\n triggerButton: (onClick: () => void) => React.ReactNode;\n hotkey?: {\n sequence: string;\n key: string;\n };\n title: string;\n okText: string;\n okIcon?: JSX.Element;\n initialValue: ExpandedCategoryCollectionResponse;\n onSubmit: (value: ExpandedCategoryCollectionRequest) => void;\n areOptionsLoading?: boolean;\n categoryOptions: CategoryOption[];\n}\nconst _SetCategoryCollectionProfile: FunctionComponent = ({\n triggerButton,\n hotkey,\n title,\n okText,\n okIcon,\n initialValue,\n onSubmit,\n areOptionsLoading = false,\n categoryOptions,\n}) => {\n const { user } = useSelf();\n const customerId = getCustomerId(user);\n const customerIdString = customerId ? String(customerId) : undefined;\n\n const dialogTitle = titleCase(title);\n const { t } = useTranslation();\n const [isOpen, setOpen] = useState(false);\n\n // For M1 we specifically need the 5 specific categories to be named in English\n const SHOULD_INTERNATIONALIZE = false;\n const requiredCategories = getDefaultCategoryNames(\n t,\n SHOULD_INTERNATIONALIZE\n );\n\n return (\n <>\n {hotkey && (\n setOpen(true),\n }}\n />\n )}\n {triggerButton(() => {\n setOpen(true);\n })}\n setOpen(false)}\n PaperProps={{\n className: \"min-w-1/3\",\n }}\n >\n {dialogTitle}\n hasStrictCategories(values, requiredCategories)\n ),\n })}\n onSubmit={({ name, categories }) => {\n // overwrite ids passed in to make sure that we enforce COPYING the categories as opposed to directly LINKING them\n const newCategories = categories.map((category) => ({\n ...category,\n id: uuid(),\n }));\n\n const newProfileData = {\n name,\n categoryIds: newCategories.map(({ id }) => id),\n };\n const newProfile = initialValue.profile\n ? {\n ...initialValue.profile,\n ...newProfileData,\n }\n : {\n ...newProfileData,\n id: uuid(),\n protected: false,\n customerId: customerIdString,\n };\n return onSubmit({\n profile: newProfile,\n categories: newCategories.map(({ profile, ...category }) =>\n UnsavedCategory.fromPartial(category)\n ),\n });\n }}\n >\n {({\n submitForm,\n isSubmitting,\n dirty,\n values,\n setFieldValue,\n setFieldTouched,\n touched,\n errors,\n }) => (\n
    \n \n \n \n a.profile.localeCompare(b.profile)\n )}\n getOptionLabel={(option: CategoryOption) =>\n getCategoryOptionLabel(t, option)\n }\n groupBy={(option: CategoryOption) => option.profile}\n renderGroup={({\n key,\n group,\n children,\n }: AutocompleteRenderGroupParams) => {\n const isProtected = categoryOptions.some(\n (category) =>\n category.profile === group && category.protected\n );\n\n return (\n
  • \n \n
    {group}
    \n {isProtected && }\n \n
      {children}
    \n
  • \n );\n }}\n renderOption={(\n props: AutocompleteRenderOptionState,\n option: CategoryOption\n ) => {\n const isSelected = values.categories.some(\n (cat) =>\n cat.name === option.name &&\n cat.profile === option.profile\n );\n\n return (\n \n {getCategoryOptionLabel(t, option)}\n \n );\n }}\n value={values.categories}\n isOptionEqualToValue={(\n option: CategoryOption,\n value: CategoryOption\n ) => option.id === value.id}\n renderTags={(\n tagValue: CategoryOption[],\n getTagProps: any\n ) => {\n return tagValue.map((option, index) => (\n \n ) : undefined\n }\n onDelete={() => {\n setFieldValue(\n \"categories\",\n values.categories.filter(\n (value) => value.id !== option.id\n )\n );\n }}\n />\n ));\n }}\n onChange={(\n _: React.SyntheticEvent,\n value: Array\n ) => {\n const newCategories = value.map((category) =>\n isCategoryNameOnly(category)\n ? Category.fromPartial({\n id: uuid(),\n name: category,\n customerId: customerIdString,\n protected: initialValue.profile?.protected,\n })\n : category\n );\n setFieldValue(\"categories\", newCategories);\n setFieldTouched(\"categories\", true);\n }}\n renderInput={(parameters: TextFieldProps) => (\n \n )}\n />\n
    \n {values.categories.map((category) => {\n const chipText =\n category.chipIds.length > 0\n ? ` (${category.chipIds.length} ${titleCase(\n t(\"models.images.image\", {\n count: category.chipIds.length,\n })\n )})`\n : \"\";\n\n return (\n
    \n

    \n {category.name}\n {!category.profile && (\n {chipText}\n )}\n {category.profile && (\n <>\n \n {\" \"}\n {category.profile}\n \n \n {chipText}\n \n \n )}\n

    \n {\n setFieldValue(\n \"categories\",\n values.categories.filter(\n (value) => value.id !== category.id\n )\n );\n }}\n >\n \n \n
    \n );\n })}\n
    \n
    \n \n setOpen(false)}\n >\n {t(\"utils.actions.cancel\")}\n \n \n {okText}\n \n \n
    \n )}\n \n \n \n );\n};\n\nexport const SetCategoryCollectionProfile = withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.update,\n PermissionResource.plant_category_profiles,\n PermissionDomain.self\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.plant_category_profiles,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.plant_category_profiles,\n PermissionDomain.all\n ),\n ],\n _SetCategoryCollectionProfile\n);\n","import { Button, Tooltip } from \"@mui/material\";\nimport { classes } from \"portal/utils/theme\";\nimport { useTranslation } from \"react-i18next\";\nimport LabelIcon from \"@mui/icons-material/Adjust\";\nimport React, { FunctionComponent } from \"react\";\n\ninterface ShowLabelsButtonProps {\n showLabels: boolean;\n onClick: () => void;\n}\nexport const ShowLabelsButton: FunctionComponent = ({\n showLabels,\n onClick,\n}) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n \n \n \n \n );\n};\n","import {\n Alert,\n Button,\n capitalize,\n Card,\n IconButton,\n Tab,\n Typography,\n} from \"@mui/material\";\nimport {\n BLUE_LOADING_BUTTON,\n CHIP_COLORS,\n RED_BUTTON,\n} from \"portal/utils/theme\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { CategorizedImages, UnsavedThumbnail } from \"./CategorizedImages\";\nimport {\n categoryCollectionProfileImageToggle,\n imagesToCategoryIds,\n} from \"portal/utils/categoryCollectionProfile\";\nimport { ConfirmationDialog } from \"../ConfirmationDialog\";\nimport { ExpandedCategoryCollectionRequest } from \"protos/portal/category_profile\";\nimport { findWhere } from \"portal/utils/arrays\";\nimport {\n ImageCategorizationOptions,\n ThumbnailBaseInfo,\n} from \"./ImageCategorizationOptions\";\nimport { ImageSizeSlider } from \"../images/ImageSizeSlider\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport { LabelPointFilter, LabelPointFilters } from \"./LabelPointFilters\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { Loading } from \"../Loading\";\nimport { LoadingButton, TabContext, TabList, TabPanel } from \"@mui/lab\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { RadioChipOption, RadioChips } from \"../RadioChips\";\nimport { SetCategoryCollectionProfile } from \"./SetCategoryCollectionProfile\";\nimport { ShowLabelsButton } from \"./ShowLabelsButton\";\nimport { skipToken } from \"@reduxjs/toolkit/query\";\nimport { titleCase } from \"portal/utils/strings\";\nimport {\n updateCategoryCollectionShowLabels,\n updateCategoryCollectionThumbnailSize,\n} from \"portal/state/userPreferences\";\nimport { useAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport {\n useDeleteCustomerCategoryCollectionProfileMutation,\n useDeleteGlobalCategoryCollectionProfileMutation,\n useGetCustomerCategoryCollectionProfileQuery,\n useGetGlobalCategoryCollectionProfileQuery,\n useGetRobotQuery,\n useListCustomerCategoryCollectionProfilesQuery,\n useListGlobalCategoryCollectionProfilesQuery,\n useSetCustomerCategoryCollectionProfileMutation,\n useSetGlobalCategoryCollectionProfileMutation,\n} from \"portal/state/portalApi\";\nimport { useDispatch } from \"react-redux\";\nimport {\n useMutationPopups,\n useQueryPopups,\n} from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport { useUserPreferences } from \"portal/state/store\";\nimport DeleteIcon from \"@mui/icons-material/DeleteOutlined\";\nimport EditIcon from \"@mui/icons-material/ModeEditOutlined\";\nimport ParentIcon from \"@mui/icons-material/ArrowBackOutlined\";\nimport React, {\n FunctionComponent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport SaveIcon from \"@mui/icons-material/SaveOutlined\";\nimport SortIcon from \"@mui/icons-material/Sort\";\n\nenum ImageViewTabs {\n ALL = \"All\",\n CATEGORIZED = \"Categorized\",\n}\n\ninterface Props {\n adminEditing?: boolean;\n parentLink?: string;\n uuid: string;\n serial?: string;\n useGetQuery:\n | typeof useGetGlobalCategoryCollectionProfileQuery\n | typeof useGetCustomerCategoryCollectionProfileQuery;\n useSetMutation:\n | typeof useSetGlobalCategoryCollectionProfileMutation\n | typeof useSetCustomerCategoryCollectionProfileMutation;\n useDeleteMutation:\n | typeof useDeleteGlobalCategoryCollectionProfileMutation\n | typeof useDeleteCustomerCategoryCollectionProfileMutation;\n}\n\nexport const CategoryCollectionProfile: FunctionComponent = ({\n adminEditing = false,\n uuid,\n serial,\n parentLink,\n useGetQuery,\n useSetMutation,\n useDeleteMutation,\n}) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const dispatch = useDispatch();\n const userPreferences = useUserPreferences();\n const dimensions = useMemo(\n () => ({\n width: userPreferences.categoryCollection.thumbnailSize,\n height: userPreferences.categoryCollection.thumbnailSize,\n }),\n [userPreferences.categoryCollection.thumbnailSize]\n );\n\n const { data: summary } = useQueryPopups(\n useGetRobotQuery(serial ? { serial } : skipToken),\n { errorVariant: \"warning\" }\n );\n\n const {\n data: customerCategoryCollectionProfiles,\n isSuccess: hasCustomerOptionsLoaded,\n } = useQueryPopups(\n useListCustomerCategoryCollectionProfilesQuery(\n serial ? { serial } : skipToken\n )\n );\n const {\n data: globalCategoryCollectionProfiles,\n isSuccess: hasGlobalOptionsLoaded,\n } = useQueryPopups(useListGlobalCategoryCollectionProfilesQuery({ serial }));\n\n const crossProfileCategoryOptions = useMemo(() => {\n const options = [];\n const availableProfiles = [\n ...(customerCategoryCollectionProfiles ?? []),\n ...(globalCategoryCollectionProfiles ?? []),\n ];\n for (const { categories, profile } of availableProfiles) {\n options.push(\n ...categories.map((c) => ({\n ...c,\n profile: profile?.name ?? t(\"utils.descriptors.unknown\"),\n }))\n );\n }\n return options;\n }, [customerCategoryCollectionProfiles, globalCategoryCollectionProfiles, t]);\n\n // local changes\n const [imageTab, setImageTab] = useState(ImageViewTabs.ALL);\n const [filters, setFilters] = useState({\n crops: [],\n robots: [],\n capturedAt: undefined,\n });\n\n const [\n updatedCategoryCollectionProfile,\n setUpdatedCategoryCollectionProfile,\n ] = useState();\n const [unsavedCategorizedThumbnails, setUnsavedCategorizedThumbnails] =\n useState<{ [categoryId: string]: UnsavedThumbnail[] }>({});\n\n const resetUnsavedChanges = useCallback(() => {\n setUpdatedCategoryCollectionProfile(undefined);\n setUnsavedCategorizedThumbnails({});\n }, []);\n\n // remote data\n const {\n data: freezedCategoryCollectionProfile,\n isFetching,\n isError,\n error,\n fulfilledTimeStamp: freezedCategoryCollectionProfileUpdated,\n } = useQueryPopups(useGetQuery({ uuid, serial }));\n\n // mutations\n const [updateCategoryCollectionProfile, { isLoading: isSaving }] =\n useMutationPopups(useSetMutation(), {\n success: capitalize(\n t(\"utils.actions.savedLong\", {\n subject: titleCase(\n t(\"models.categoryCollectionProfiles.categoryCollectionProfile_one\")\n ),\n })\n ),\n });\n\n const [deleteCategoryCollectionProfile] = useMutationPopups(\n useDeleteMutation(),\n {\n success: capitalize(\n t(\"utils.actions.deletedLong\", {\n subject: t(\n \"models.categoryCollectionProfiles.categoryCollectionProfile_one\"\n ),\n })\n ),\n }\n );\n\n // confirmation dialog\n const [confirmDelete, setConfirmDelete] = useState(false);\n const [activeCategoryId, setActiveCategoryId] = useState<\n string | undefined\n >();\n\n useEffect(() => {\n if (\n !activeCategoryId &&\n freezedCategoryCollectionProfile &&\n freezedCategoryCollectionProfile.categories.length > 0 &&\n freezedCategoryCollectionProfile.categories[0]\n ) {\n setActiveCategoryId(freezedCategoryCollectionProfile.categories[0].id);\n }\n }, [activeCategoryId, freezedCategoryCollectionProfile]);\n\n // unfreezed state\n const unfreezedCategoryCollectionProfile = useMemo<\n ExpandedCategoryCollectionRequest | undefined\n >(\n () =>\n freezedCategoryCollectionProfile\n ? ExpandedCategoryCollectionRequest.fromPartial(\n structuredClone(freezedCategoryCollectionProfile)\n )\n : undefined,\n [freezedCategoryCollectionProfile]\n );\n\n // visible state\n const categoryCollectionProfile =\n updatedCategoryCollectionProfile ?? unfreezedCategoryCollectionProfile;\n const isActive =\n !isUndefined(categoryCollectionProfile?.profile?.id) &&\n categoryCollectionProfile.profile.id ===\n summary?.robot?.health?.fieldConfig?.activeCategoryCollectionId;\n\n const categoryOptions = useMemo(\n () =>\n (categoryCollectionProfile?.categories ?? []).map(\n ({ id, name }, index) => ({\n id,\n name,\n color: CHIP_COLORS[index % CHIP_COLORS.length],\n })\n ),\n [categoryCollectionProfile?.categories]\n );\n\n const activeCategory = useMemo(\n () => categoryOptions.find(({ id }) => id === activeCategoryId),\n [activeCategoryId, categoryOptions]\n );\n\n const categorizationMap = useMemo(\n () => imagesToCategoryIds(categoryCollectionProfile),\n [categoryCollectionProfile]\n );\n\n const createCategoryRadioChipLabel = useCallback(\n ({ id, name }: RadioChipOption): string => {\n if (!categoryCollectionProfile) {\n return \"\";\n }\n const match = findWhere(categoryCollectionProfile.categories, {\n id,\n });\n if (!match) {\n return name;\n }\n const { chipIds, labelPointIds } = match;\n const count =\n chipIds.length + labelPointIds.length > 0\n ? ` (${chipIds.length + labelPointIds.length})`\n : \"\";\n return capitalize(`${name}${count}`);\n },\n [categoryCollectionProfile]\n );\n\n const onImageToggle = useCallback(\n (\n { chipId, labelPointId }: { chipId?: string; labelPointId: string },\n thumbnail: ThumbnailBaseInfo\n ) => {\n if (!categoryCollectionProfile) {\n return;\n }\n const updated: ExpandedCategoryCollectionRequest =\n categoryCollectionProfileImageToggle(\n categoryCollectionProfile,\n activeCategoryId,\n { chipId, labelPointId }\n );\n\n if (!chipId && labelPointId) {\n const shouldAdd = updated.categories.some((c) =>\n c.labelPointIds.includes(labelPointId)\n );\n setUnsavedCategorizedThumbnails((previous) => {\n if (!activeCategoryId) {\n return previous;\n }\n const previousCategoryThumbnails = previous[activeCategoryId] ?? [];\n previous[activeCategoryId] = shouldAdd\n ? [\n ...previousCategoryThumbnails,\n { ...thumbnail, updated: new Date() },\n ]\n : previousCategoryThumbnails.filter((t) => t.id !== labelPointId);\n return previous;\n });\n }\n\n setUpdatedCategoryCollectionProfile(updated);\n },\n [activeCategoryId, categoryCollectionProfile]\n );\n\n const canRead = useAuthorizationRequired(\n adminEditing\n ? [\n buildPermission(\n PermissionAction.read,\n PermissionResource.plant_category_profiles,\n PermissionDomain.templates\n ),\n ]\n : [\n buildPermission(\n PermissionAction.read,\n PermissionResource.plant_category_profiles,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.plant_category_profiles,\n PermissionDomain.customer\n ),\n ]\n );\n const canUpdate =\n useAuthorizationRequired(\n adminEditing\n ? [\n buildPermission(\n PermissionAction.update,\n PermissionResource.plant_category_profiles,\n PermissionDomain.templates\n ),\n ]\n : [\n buildPermission(\n PermissionAction.update,\n PermissionResource.plant_category_profiles,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.plant_category_profiles,\n PermissionDomain.customer\n ),\n ]\n ) &&\n (!categoryCollectionProfile?.profile?.protected || adminEditing);\n\n if (!canRead) {\n return;\n }\n\n if (!categoryCollectionProfile || !categoryCollectionProfile.profile) {\n return ;\n }\n\n const EditButton: FunctionComponent = () => (\n (\n \n \n \n )}\n hotkey={{ sequence: \"ec\", key: \"EDIT_CATEGORY_COLLECTION_PROFILE\" }}\n title={t(\"utils.actions.editLong\", {\n subject: t(\n \"models.categoryCollectionProfiles.categoryCollectionProfile_one\"\n ),\n })}\n okText={t(\"utils.actions.next\")}\n initialValue={{ ...categoryCollectionProfile }}\n areOptionsLoading={\n !(serial && hasCustomerOptionsLoaded) || !hasGlobalOptionsLoaded\n }\n categoryOptions={crossProfileCategoryOptions}\n onSubmit={(newProfile) => {\n setUpdatedCategoryCollectionProfile(newProfile);\n }}\n />\n );\n\n return (\n
    \n {canUpdate && adminEditing && (\n \n {t(\"components.categoryCollectionProfile.warnings.admin\")}\n \n )}\n {isActive && (\n \n {t(\"components.categoryCollectionProfile.warnings.production\")}\n \n )}\n {updatedCategoryCollectionProfile &&\n updatedCategoryCollectionProfile !==\n unfreezedCategoryCollectionProfile && (\n \n {t(\"components.categoryCollectionProfile.warnings.unsavedChanges\")}\n \n )}\n {categoryCollectionProfile.profile.protected && !adminEditing && (\n \n {t(\"components.categoryCollectionProfile.warnings.protected\")}\n \n )}\n {/* Header */}\n
    \n {/* Left Controls */}\n
    \n {/* Breadcrumb */}\n {parentLink && (\n \n \n \n )}\n
    \n\n {/* Title */}\n
    \n \n {categoryCollectionProfile.profile.name}\n \n {canUpdate && }\n
    \n\n {/* Right Controls */}\n
    \n {canUpdate && (\n setConfirmDelete(true)}\n startIcon={}\n >\n {t(\"utils.actions.delete\")}\n \n )}\n {confirmDelete && (\n \n {t(\n \"components.ConfirmationDialog.delete.descriptionActive\",\n {\n subject: t(\n \"models.categoryCollectionProfiles.categoryCollectionProfile_one\"\n ),\n }\n )}\n \n ) : (\n capitalize(\n t(\"components.ConfirmationDialog.delete.description\", {\n subject: t(\n \"models.categoryCollectionProfiles.categoryCollectionProfile_one\"\n ),\n })\n )\n )\n }\n destructive\n yesText={t(\"utils.actions.delete\", {\n subject: categoryCollectionProfile.profile.name,\n })}\n yesDisabled={isActive}\n onClose={() => setConfirmDelete(false)}\n onYes={async () => {\n if (!categoryCollectionProfile.profile) {\n return;\n }\n const result = await deleteCategoryCollectionProfile({\n uuid: categoryCollectionProfile.profile.id,\n serial,\n });\n if (parentLink && !result.error) {\n navigate(parentLink);\n }\n }}\n />\n )}\n {canUpdate && (\n <>\n {\n resetUnsavedChanges();\n }}\n >\n {t(\"utils.actions.cancel\")}\n \n {\n if (!categoryCollectionProfile.profile) {\n return;\n }\n setUpdatedCategoryCollectionProfile(\n categoryCollectionProfile\n );\n const result = await updateCategoryCollectionProfile({\n serial,\n expandedCategoryCollection: categoryCollectionProfile,\n });\n if (!result.error) {\n resetUnsavedChanges();\n }\n }}\n disabled={!updatedCategoryCollectionProfile}\n startIcon={}\n >\n {t(\"utils.actions.save\")}\n \n \n )}\n
    \n
    \n\n {/* Main View */}\n \n \n
    \n {\n setImageTab(newValue);\n }}\n className=\"text-white\"\n >\n \n \n \n
    \n {\n dispatch(updateCategoryCollectionThumbnailSize(size));\n }}\n />\n {\n dispatch(\n updateCategoryCollectionShowLabels(\n !userPreferences.categoryCollection.showLabels\n )\n );\n }}\n />\n
    \n
    \n \n
    \n \n {canUpdate && (\n
    \n \n
    \n )}\n
    \n {activeCategory && (\n
    \n id === activeCategoryId\n )?.chipIds ?? []\n }\n chipIdsUpdatedOn={\n freezedCategoryCollectionProfileUpdated\n ? new Date(freezedCategoryCollectionProfileUpdated)\n : undefined\n }\n unsavedThumbnails={\n activeCategoryId\n ? unsavedCategorizedThumbnails[activeCategoryId] ?? []\n : []\n }\n dimensions={dimensions}\n onRemove={onImageToggle}\n />\n
    \n )}\n
    \n \n
    \n \n \n {t(\"components.categoryCollectionProfile.images.sortedBy\", {\n sortBy: t(\n \"components.categoryCollectionProfile.images.sortBy.latest\"\n ),\n })}\n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n {categoryOptions.map((categoryOption) => (\n id === categoryOption.id\n )?.chipIds ?? []\n }\n dimensions={dimensions}\n onRemove={onImageToggle}\n />\n ))}\n
    \n
    \n
    \n
    \n
    \n );\n};\n","import { buildPermission } from \"portal/utils/auth\";\nimport { Button } from \"@mui/material\";\nimport { capitalize, titleCase } from \"portal/utils/strings\";\nimport { CarbonDataGrid } from \"portal/components/CarbonDataGrid\";\nimport { CategoryCollection } from \"protos/category_profile/category_profile\";\nimport { CategoryCollectionProfile } from \"./CategoryCollectionProfile\";\nimport { ExpandedCategoryCollectionRequest } from \"protos/portal/category_profile\";\nimport { getDefaultCategoryCollectionProfile } from \"portal/utils/categoryCollectionProfile\";\nimport { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { NoScroll } from \"../Page\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { SearchField } from \"../header/SearchField\";\nimport { SetCategoryCollectionProfile } from \"./SetCategoryCollectionProfile\";\nimport { skipToken } from \"@reduxjs/toolkit/query\";\nimport {\n useDeleteCustomerCategoryCollectionProfileMutation,\n useDeleteGlobalCategoryCollectionProfileMutation,\n useGetCustomerCategoryCollectionProfileQuery,\n useGetGlobalCategoryCollectionProfileQuery,\n useGetRobotQuery,\n useListCustomerCategoryCollectionProfilesQuery,\n useListGlobalCategoryCollectionProfilesQuery,\n useSetCustomerCategoryCollectionProfileMutation,\n useSetGlobalCategoryCollectionProfileMutation,\n} from \"portal/state/portalApi\";\nimport { useFuzzySearch } from \"portal/utils/hooks/useFuzzySearch\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport {\n useMutationPopups,\n useQueryPopups,\n} from \"portal/utils/hooks/useApiPopups\";\nimport { useTranslation } from \"react-i18next\";\nimport { withAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport AddIcon from \"@mui/icons-material/AddOutlined\";\nimport React, { FunctionComponent, useMemo, useState } from \"react\";\n\nconst defaultColumn: Partial = {\n disableColumnMenu: true,\n flex: 1,\n};\n\ninterface Props {\n adminEditing?: boolean;\n serial?: string;\n basePath: string;\n useListQuery:\n | typeof useListGlobalCategoryCollectionProfilesQuery\n | typeof useListCustomerCategoryCollectionProfilesQuery;\n useGetQuery:\n | typeof useGetGlobalCategoryCollectionProfileQuery\n | typeof useGetCustomerCategoryCollectionProfileQuery;\n useSetMutation:\n | typeof useSetGlobalCategoryCollectionProfileMutation\n | typeof useSetCustomerCategoryCollectionProfileMutation;\n useDeleteMutation:\n | typeof useDeleteGlobalCategoryCollectionProfileMutation\n | typeof useDeleteCustomerCategoryCollectionProfileMutation;\n}\n\nconst _CategoryCollectionProfileList: FunctionComponent = ({\n adminEditing = false,\n serial,\n basePath,\n useListQuery,\n useGetQuery,\n useSetMutation,\n useDeleteMutation,\n}) => {\n const { t } = useTranslation();\n\n const { data: summary, isSuccess: isRobotSuccess } = useQueryPopups(\n useGetRobotQuery(serial ? { serial } : skipToken),\n { errorVariant: \"warning\" }\n );\n\n const { data: categoryCollectionProfiles, isSuccess: hasLoaded } =\n useQueryPopups(useListQuery({ serial }));\n\n const {\n data: globalCategoryCollectionProfiles,\n isSuccess: hasGlobalOptionsLoaded,\n } = useQueryPopups(\n useListGlobalCategoryCollectionProfilesQuery(\n serial ? { serial } : skipToken\n )\n );\n\n const [setCategoryCollectionProfile] = useMutationPopups(useSetMutation(), {\n success: capitalize(\n t(\"utils.actions.createdLong\", {\n subject: t(\n \"models.categoryCollectionProfiles.categoryCollectionProfile_one\"\n ),\n })\n ),\n });\n\n const navigate = useNavigate();\n const { pathname } = useLocation();\n let uuid: string = \"\";\n if (!pathname.endsWith(basePath)) {\n uuid = pathname.replace(`${basePath}/`, \"\");\n }\n // For M1 we specifically need the 5 specific categories to be named in English\n const SHOULD_INTERNATIONALIZE = false;\n const [defaultProfile, setDefaultProfile] =\n useState(\n getDefaultCategoryCollectionProfile(\n t,\n SHOULD_INTERNATIONALIZE,\n !serial && adminEditing\n )\n );\n\n const categoryCollections: CategoryCollection[] = useMemo(() => {\n const profiles = [];\n for (const { profile } of categoryCollectionProfiles ?? []) {\n if (profile) {\n profiles.push(profile);\n }\n }\n return profiles;\n }, [categoryCollectionProfiles]);\n\n const categoryOptions = useMemo(() => {\n const options = [];\n // adding carbon options if it's a customer based view\n const availableProfiles = [\n ...(categoryCollectionProfiles ?? []),\n ...(globalCategoryCollectionProfiles ?? []),\n ];\n for (const { categories, profile } of availableProfiles) {\n options.push(\n ...categories.map((c) => ({\n ...c,\n profile: profile?.name ?? t(\"utils.descriptors.unknown\"),\n }))\n );\n }\n return options;\n }, [categoryCollectionProfiles, globalCategoryCollectionProfiles, t]);\n\n const { searchText, setSearchText, results } =\n useFuzzySearch({\n items: categoryCollections,\n });\n\n const columns: readonly GridColDef[] = useMemo(\n () => [\n {\n ...defaultColumn,\n field: \"name\",\n headerName: titleCase(\n t(\"models.categoryCollectionProfiles.fields.name\")\n ),\n },\n {\n ...defaultColumn,\n field: \"isActive\",\n headerName: t(\"utils.descriptors.active\"),\n cellClassName: ({ row: profile }) => {\n const isActive =\n profile.id ===\n summary?.robot?.health?.fieldConfig?.activeCategoryCollectionId;\n return isActive\n ? \"font-bold bg-green-500 text-white\"\n : \"text-gray-500\";\n },\n valueGetter: (value, profile) => {\n if (!isRobotSuccess) {\n return t(\"components.Loading.placeholder\");\n }\n const isActive =\n profile.id ===\n summary.robot?.health?.fieldConfig?.activeCategoryCollectionId;\n return isActive\n ? t(\"utils.descriptors.active\")\n : t(\"utils.descriptors.inactive\");\n },\n },\n ],\n [\n isRobotSuccess,\n summary?.robot?.health?.fieldConfig?.activeCategoryCollectionId,\n t,\n ]\n );\n\n if (uuid) {\n return (\n \n );\n }\n\n return (\n \n
    \n \n header={\n <>\n \n (\n }\n onClick={onClick}\n >\n \n {titleCase(\n t(\"utils.actions.newLong\", {\n subject: t(\n \"models.categoryCollectionProfiles.categoryCollectionProfile_one\"\n ),\n })\n )}\n \n {t(\"utils.actions.new\")}\n \n )}\n hotkey={{\n sequence: \"n\",\n key: \"NEW_CATEGORY_COLLECTION_PROFILE\",\n }}\n title={t(\"utils.actions.newLong\", {\n subject: t(\n \"models.categoryCollectionProfiles.categoryCollectionProfile_one\"\n ),\n })}\n okText={t(\"utils.actions.create\")}\n okIcon={}\n initialValue={{ ...defaultProfile }}\n areOptionsLoading={Boolean(\n !hasLoaded || (serial && !hasGlobalOptionsLoaded)\n )}\n categoryOptions={categoryOptions}\n onSubmit={async (newProfile) => {\n const result = await setCategoryCollectionProfile({\n expandedCategoryCollection: newProfile,\n serial,\n });\n if (!result.error) {\n setDefaultProfile(\n getDefaultCategoryCollectionProfile(\n t,\n SHOULD_INTERNATIONALIZE,\n !serial && adminEditing\n )\n );\n navigate(\n `${basePath}/${\n (newProfile.profile as CategoryCollection).id\n }`\n );\n }\n }}\n />\n \n }\n className=\"flex flex-1\"\n rows={results}\n getRowId={({ id }) => id}\n columns={columns}\n columnVisibilityModel={{\n isActive: typeof serial === \"string\",\n }}\n hideFooter\n onRowClick={({ row: categoryCollectionProfile }) =>\n navigate(`${basePath}/${categoryCollectionProfile.id}`)\n }\n disableRowSelectionOnClick\n getRowClassName={() => \"cursor-pointer\"}\n loading={!hasLoaded}\n />\n
    \n
    \n );\n};\n\nexport const CategoryCollectionProfileList = withAuthorizationRequired(\n [\n buildPermission(\n PermissionAction.read,\n PermissionResource.plant_category_profiles,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.plant_category_profiles,\n PermissionDomain.all\n ),\n ],\n _CategoryCollectionProfileList\n);\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgLogoOpsCenter = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n \"data-name\": \"Layer 2\",\n viewBox: \"0 0 377.85 108.73\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n \"data-name\": \"Layer 1-2\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 .63v106.26h106.26V.63H0Zm91.08 91.08h-75.9v-75.9h75.9v75.9Z\",\n style: {\n fill: \"#fff\",\n strokeWidth: 0\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M83.49 68.94H37.95V38.58h30.36v15.18l15.18-15.18V23.4H22.77v60.72h60.72V68.94z\",\n style: {\n fill: \"#fff\",\n strokeWidth: 0\n }\n}), /*#__PURE__*/React.createElement(\"g\", {\n style: {\n isolation: \"isolate\"\n }\n}, /*#__PURE__*/React.createElement(\"g\", {\n style: {\n isolation: \"isolate\"\n }\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.71 49.71c-8.8.79-16.1 1.18-21.9 1.18-3.87 0-6.71-.91-8.52-2.72-1.81-1.81-2.72-4.65-2.72-8.52V20.71c0-4.14.94-7.15 2.81-9.03 1.87-1.87 4.88-2.81 9.02-2.81h21.3v8.29h-18.94c-2.37 0-3.55 1.18-3.55 3.55v18.94c0 .91.27 1.63.8 2.16.53.53 1.21.8 2.04.8s1.74 0 2.72-.03c.99-.02 2.01-.05 3.08-.09l3.23-.12c1.08-.04 2.49-.12 4.2-.24s3.86-.26 6.42-.41v7.99ZM173.84 50.3H162.3l15.68-41.43h11.84L205.5 50.3h-11.54l-2.66-7.4h-14.79l-2.66 7.4Zm5.33-15.09h9.47l-4.73-13.91-4.73 13.91ZM208.46 8.87h24.86c4.14 0 7.15.94 9.03 2.81 1.87 1.88 2.81 4.88 2.81 9.03v5.33c0 3.28-.54 5.82-1.63 7.63-1.09 1.82-2.81 3.02-5.18 3.61l7.4 13.02h-11.54l-6.81-12.43h-8.29V50.3h-10.65V8.87Zm26.04 11.84c0-2.37-1.18-3.55-3.55-3.55h-11.84v12.43h11.84c2.37 0 3.55-1.18 3.55-3.55v-5.33ZM251.07 8.87h23.67c3.87 0 6.71.88 8.52 2.63 1.81 1.76 2.72 4.43 2.72 8.02 0 2.37-.51 4.29-1.54 5.77-1.03 1.48-2.29 2.52-3.79 3.11 3.2.87 5.37 3 6.51 6.39.39 1.22.59 2.64.59 4.26 0 3.87-.91 6.71-2.72 8.52-1.81 1.82-4.66 2.72-8.52 2.72h-25.45V8.87Zm24.26 11.84c0-2.37-1.18-3.55-3.55-3.55h-10.06v8.29h10.06c2.37 0 3.55-1.18 3.55-3.55v-1.18Zm1.78 16.57c0-2.37-1.18-3.55-3.55-3.55h-11.84v8.29h11.84c2.37 0 3.55-1.18 3.55-3.55v-1.18ZM330.37 39.06c0 4.14-.94 7.15-2.81 9.02-1.87 1.88-4.88 2.81-9.03 2.81h-14.79c-4.14 0-7.15-.94-9.02-2.81-1.88-1.87-2.81-4.88-2.81-9.02V20.12c0-4.14.94-7.15 2.81-9.03s4.88-2.81 9.02-2.81h14.79c4.14 0 7.15.94 9.03 2.81 1.87 1.88 2.81 4.88 2.81 9.03v18.94Zm-10.65-18.94c0-2.37-1.18-3.55-3.55-3.55h-10.06c-2.37 0-3.55 1.18-3.55 3.55v18.94c0 2.37 1.18 3.55 3.55 3.55h10.06c2.37 0 3.55-1.18 3.55-3.55V20.12ZM372.39 50.3h-11.24l-14.2-24.86V50.3H336.3V8.87h11.24l14.2 24.86V8.87h10.65V50.3Z\",\n style: {\n fill: \"#fff\",\n strokeWidth: 0\n }\n})), /*#__PURE__*/React.createElement(\"g\", {\n style: {\n isolation: \"isolate\"\n }\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M153.46 90.2c0 2.77-.63 4.77-1.88 6.03-1.25 1.25-3.26 1.88-6.03 1.88h-9.88c-2.77 0-4.77-.63-6.03-1.88-1.25-1.25-1.88-3.26-1.88-6.03V77.56c0-2.77.62-4.77 1.88-6.03 1.25-1.25 3.26-1.88 6.03-1.88h9.88c2.77 0 4.77.63 6.03 1.88 1.25 1.25 1.88 3.26 1.88 6.03V90.2Zm-7.11-12.64c0-1.58-.79-2.37-2.37-2.37h-6.72c-1.58 0-2.37.79-2.37 2.37V90.2c0 1.58.79 2.37 2.37 2.37h6.72c1.58 0 2.37-.79 2.37-2.37V77.56ZM157.41 70.05H174c2.77 0 4.77.63 6.03 1.88 1.25 1.25 1.88 3.26 1.88 6.03v3.95c0 2.77-.63 4.77-1.88 6.03-1.25 1.25-3.26 1.88-6.03 1.88h-9.48v7.9h-7.11V70.06Zm17.38 7.9c0-1.58-.79-2.37-2.37-2.37h-7.9v8.69h7.9c1.58 0 2.37-.79 2.37-2.37v-3.95ZM184.64 91.98c7.22.39 12.1.59 14.66.59.61 0 1.09-.18 1.44-.53s.53-.84.53-1.44v-3.56h-9.09c-2.77 0-4.77-.62-6.03-1.88-1.25-1.25-1.88-3.26-1.88-6.03v-1.19c0-2.77.63-4.77 1.88-6.03 1.25-1.25 3.26-1.88 6.03-1.88h13.87v5.53h-12.29c-1.58 0-2.37.79-2.37 2.37v.79c0 1.58.79 2.37 2.37 2.37h7.11c2.58 0 4.48.61 5.69 1.82s1.82 3.11 1.82 5.69v1.98c0 2.58-.61 4.48-1.82 5.69s-3.11 1.82-5.69 1.82c-1.34 0-2.77-.03-4.27-.08l-3.63-.16c-2.69-.13-5.47-.32-8.34-.55v-5.33ZM245.12 97.31c-5.87.53-10.75.79-14.62.79-2.58 0-4.48-.61-5.69-1.82s-1.82-3.11-1.82-5.69V77.95c0-2.77.62-4.77 1.88-6.03 1.25-1.25 3.26-1.88 6.03-1.88h14.22v5.53h-12.64c-1.58 0-2.37.79-2.37 2.37v12.64c0 .61.18 1.09.53 1.44s.81.53 1.36.53 1.16 0 1.82-.02c.66-.01 1.34-.03 2.05-.06.71-.03 1.43-.05 2.15-.08s1.66-.08 2.81-.16 2.57-.17 4.29-.28v5.33ZM270.21 97.71h-21.93V70.05h21.93v5.53h-14.82v5.33h11.66v5.53h-11.66v5.73h14.82v5.53ZM297.47 97.71h-7.51l-9.48-16.59v16.59h-7.11V70.05h7.51l9.48 16.59V70.05h7.11v27.66ZM315.65 97.71h-7.11V75.58h-8.3v-5.53h23.71v5.53h-8.3v22.13ZM348.64 97.71h-21.93V70.05h21.93v5.53h-14.82v5.33h11.66v5.53h-11.66v5.73h14.82v5.53ZM351.8 70.05h16.59c2.77 0 4.77.63 6.03 1.88 1.25 1.25 1.88 3.26 1.88 6.03v3.56c0 2.19-.36 3.89-1.09 5.1-.72 1.21-1.88 2.02-3.46 2.41l4.94 8.69h-7.7l-4.54-8.3h-5.53v8.3h-7.11V70.06Zm17.38 7.9c0-1.58-.79-2.37-2.37-2.37h-7.9v8.3h7.9c1.58 0 2.37-.79 2.37-2.37v-3.56Z\",\n style: {\n fill: \"#fff\",\n strokeWidth: 0\n }\n})))));\nexport { SvgLogoOpsCenter as ReactComponent };\nexport default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iYSIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNzcuODUgMTA4LjczIj4KICA8ZyBpZD0iYiIgZGF0YS1uYW1lPSJMYXllciAxLTIiPgogICAgPGc+CiAgICAgIDxnPgogICAgICAgIDxwYXRoIGQ9Im0wLC42M3YxMDYuMjZoMTA2LjI2Vi42M0gwWm05MS4wOCw5MS4wOEgxNS4xOFYxNS44MWg3NS45djc1LjlaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+CiAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4My40OSA2OC45NCAzNy45NSA2OC45NCAzNy45NSAzOC41OCA2OC4zMSAzOC41OCA2OC4zMSA1My43NiA4My40OSAzOC41OCA4My40OSAyMy40IDIyLjc3IDIzLjQgMjIuNzcgODQuMTIgODMuNDkgODQuMTIgODMuNDkgNjguOTQiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2Utd2lkdGg6IDBweDsiLz4KICAgICAgPC9nPgogICAgICA8ZyBzdHlsZT0iaXNvbGF0aW9uOiBpc29sYXRlOyI+CiAgICAgICAgPGcgc3R5bGU9Imlzb2xhdGlvbjogaXNvbGF0ZTsiPgogICAgICAgICAgPHBhdGggZD0ibTE2MS43MSw0OS43MWMtOC44Ljc5LTE2LjEsMS4xOC0yMS45LDEuMTgtMy44NywwLTYuNzEtLjkxLTguNTItMi43Mi0xLjgxLTEuODEtMi43Mi00LjY1LTIuNzItOC41MnYtMTguOTRjMC00LjE0Ljk0LTcuMTUsMi44MS05LjAzLDEuODctMS44Nyw0Ljg4LTIuODEsOS4wMi0yLjgxaDIxLjN2OC4yOWgtMTguOTRjLTIuMzcsMC0zLjU1LDEuMTgtMy41NSwzLjU1djE4Ljk0YzAsLjkxLjI3LDEuNjMuOCwyLjE2LjUzLjUzLDEuMjEuOCwyLjA0LjhzMS43NCwwLDIuNzItLjAzYy45OS0uMDIsMi4wMS0uMDUsMy4wOC0uMDksMS4wNy0uMDQsMi4xNC0uMDgsMy4yMy0uMTIsMS4wOC0uMDQsMi40OS0uMTIsNC4yLS4yNHMzLjg2LS4yNiw2LjQyLS40MXY3Ljk5WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgICAgPHBhdGggZD0ibTE3My44NCw1MC4zaC0xMS41NGwxNS42OC00MS40M2gxMS44NGwxNS42OCw0MS40M2gtMTEuNTRsLTIuNjYtNy40aC0xNC43OWwtMi42Niw3LjRabTUuMzMtMTUuMDloOS40N2wtNC43My0xMy45MS00LjczLDEzLjkxWiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgICAgPHBhdGggZD0ibTIwOC40Niw4Ljg3aDI0Ljg2YzQuMTQsMCw3LjE1Ljk0LDkuMDMsMi44MSwxLjg3LDEuODgsMi44MSw0Ljg4LDIuODEsOS4wM3Y1LjMzYzAsMy4yOC0uNTQsNS44Mi0xLjYzLDcuNjMtMS4wOSwxLjgyLTIuODEsMy4wMi01LjE4LDMuNjFsNy40LDEzLjAyaC0xMS41NGwtNi44MS0xMi40M2gtOC4yOXYxMi40M2gtMTAuNjVWOC44N1ptMjYuMDQsMTEuODRjMC0yLjM3LTEuMTgtMy41NS0zLjU1LTMuNTVoLTExLjg0djEyLjQzaDExLjg0YzIuMzcsMCwzLjU1LTEuMTgsMy41NS0zLjU1di01LjMzWiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgICAgPHBhdGggZD0ibTI1MS4wNyw4Ljg3aDIzLjY3YzMuODcsMCw2LjcxLjg4LDguNTIsMi42MywxLjgxLDEuNzYsMi43Miw0LjQzLDIuNzIsOC4wMiwwLDIuMzctLjUxLDQuMjktMS41NCw1Ljc3LTEuMDMsMS40OC0yLjI5LDIuNTItMy43OSwzLjExLDMuMi44Nyw1LjM3LDMsNi41MSw2LjM5LjM5LDEuMjIuNTksMi42NC41OSw0LjI2LDAsMy44Ny0uOTEsNi43MS0yLjcyLDguNTItMS44MSwxLjgyLTQuNjYsMi43Mi04LjUyLDIuNzJoLTI1LjQ1VjguODdabTI0LjI2LDExLjg0YzAtMi4zNy0xLjE4LTMuNTUtMy41NS0zLjU1aC0xMC4wNnY4LjI5aDEwLjA2YzIuMzcsMCwzLjU1LTEuMTgsMy41NS0zLjU1di0xLjE4Wm0xLjc4LDE2LjU3YzAtMi4zNy0xLjE4LTMuNTUtMy41NS0zLjU1aC0xMS44NHY4LjI5aDExLjg0YzIuMzcsMCwzLjU1LTEuMTgsMy41NS0zLjU1di0xLjE4WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgICAgPHBhdGggZD0ibTMzMC4zNywzOS4wNmMwLDQuMTQtLjk0LDcuMTUtMi44MSw5LjAyLTEuODcsMS44OC00Ljg4LDIuODEtOS4wMywyLjgxaC0xNC43OWMtNC4xNCwwLTcuMTUtLjk0LTkuMDItMi44MS0xLjg4LTEuODctMi44MS00Ljg4LTIuODEtOS4wMnYtMTguOTRjMC00LjE0Ljk0LTcuMTUsMi44MS05LjAzczQuODgtMi44MSw5LjAyLTIuODFoMTQuNzljNC4xNCwwLDcuMTUuOTQsOS4wMywyLjgxLDEuODcsMS44OCwyLjgxLDQuODgsMi44MSw5LjAzdjE4Ljk0Wm0tMTAuNjUtMTguOTRjMC0yLjM3LTEuMTgtMy41NS0zLjU1LTMuNTVoLTEwLjA2Yy0yLjM3LDAtMy41NSwxLjE4LTMuNTUsMy41NXYxOC45NGMwLDIuMzcsMS4xOCwzLjU1LDMuNTUsMy41NWgxMC4wNmMyLjM3LDAsMy41NS0xLjE4LDMuNTUtMy41NXYtMTguOTRaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+CiAgICAgICAgICA8cGF0aCBkPSJtMzcyLjM5LDUwLjNoLTExLjI0bC0xNC4yLTI0Ljg2djI0Ljg2aC0xMC42NVY4Ljg3aDExLjI0bDE0LjIsMjQuODZWOC44N2gxMC42NXY0MS40M1oiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2Utd2lkdGg6IDBweDsiLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcgc3R5bGU9Imlzb2xhdGlvbjogaXNvbGF0ZTsiPgogICAgICAgICAgPHBhdGggZD0ibTE1My40Niw5MC4yYzAsMi43Ny0uNjMsNC43Ny0xLjg4LDYuMDMtMS4yNSwxLjI1LTMuMjYsMS44OC02LjAzLDEuODhoLTkuODhjLTIuNzcsMC00Ljc3LS42My02LjAzLTEuODgtMS4yNS0xLjI1LTEuODgtMy4yNi0xLjg4LTYuMDN2LTEyLjY0YzAtMi43Ny42Mi00Ljc3LDEuODgtNi4wMywxLjI1LTEuMjUsMy4yNi0xLjg4LDYuMDMtMS44OGg5Ljg4YzIuNzcsMCw0Ljc3LjYzLDYuMDMsMS44OCwxLjI1LDEuMjUsMS44OCwzLjI2LDEuODgsNi4wM3YxMi42NFptLTcuMTEtMTIuNjRjMC0xLjU4LS43OS0yLjM3LTIuMzctMi4zN2gtNi43MmMtMS41OCwwLTIuMzcuNzktMi4zNywyLjM3djEyLjY0YzAsMS41OC43OSwyLjM3LDIuMzcsMi4zN2g2LjcyYzEuNTgsMCwyLjM3LS43OSwyLjM3LTIuMzd2LTEyLjY0WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgICAgPHBhdGggZD0ibTE1Ny40MSw3MC4wNWgxNi41OWMyLjc3LDAsNC43Ny42Myw2LjAzLDEuODgsMS4yNSwxLjI1LDEuODgsMy4yNiwxLjg4LDYuMDN2My45NWMwLDIuNzctLjYzLDQuNzctMS44OCw2LjAzLTEuMjUsMS4yNS0zLjI2LDEuODgtNi4wMywxLjg4aC05LjQ4djcuOWgtNy4xMXYtMjcuNjZabTE3LjM4LDcuOWMwLTEuNTgtLjc5LTIuMzctMi4zNy0yLjM3aC03Ljl2OC42OWg3LjljMS41OCwwLDIuMzctLjc5LDIuMzctMi4zN3YtMy45NVoiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2Utd2lkdGg6IDBweDsiLz4KICAgICAgICAgIDxwYXRoIGQ9Im0xODQuNjQsOTEuOThjNy4yMi4zOSwxMi4xLjU5LDE0LjY2LjU5LjYxLDAsMS4wOS0uMTgsMS40NC0uNTNzLjUzLS44NC41My0xLjQ0di0zLjU2aC05LjA5Yy0yLjc3LDAtNC43Ny0uNjItNi4wMy0xLjg4LTEuMjUtMS4yNS0xLjg4LTMuMjYtMS44OC02LjAzdi0xLjE5YzAtMi43Ny42My00Ljc3LDEuODgtNi4wMywxLjI1LTEuMjUsMy4yNi0xLjg4LDYuMDMtMS44OGgxMy44N3Y1LjUzaC0xMi4yOWMtMS41OCwwLTIuMzcuNzktMi4zNywyLjM3di43OWMwLDEuNTguNzksMi4zNywyLjM3LDIuMzdoNy4xMWMyLjU4LDAsNC40OC42MSw1LjY5LDEuODIsMS4yMSwxLjIxLDEuODIsMy4xMSwxLjgyLDUuNjl2MS45OGMwLDIuNTgtLjYxLDQuNDgtMS44Miw1LjY5cy0zLjExLDEuODItNS42OSwxLjgyYy0xLjM0LDAtMi43Ny0uMDMtNC4yNy0uMDhsLTMuNjMtLjE2Yy0yLjY5LS4xMy01LjQ3LS4zMi04LjM0LS41NXYtNS4zM1oiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2Utd2lkdGg6IDBweDsiLz4KICAgICAgICAgIDxwYXRoIGQ9Im0yNDUuMTIsOTcuMzFjLTUuODcuNTMtMTAuNzUuNzktMTQuNjIuNzktMi41OCwwLTQuNDgtLjYxLTUuNjktMS44MnMtMS44Mi0zLjExLTEuODItNS42OXYtMTIuNjRjMC0yLjc3LjYyLTQuNzcsMS44OC02LjAzLDEuMjUtMS4yNSwzLjI2LTEuODgsNi4wMy0xLjg4aDE0LjIydjUuNTNoLTEyLjY0Yy0xLjU4LDAtMi4zNy43OS0yLjM3LDIuMzd2MTIuNjRjMCwuNjEuMTgsMS4wOS41MywxLjQ0cy44MS41MywxLjM2LjUzLDEuMTYsMCwxLjgyLS4wMmMuNjYtLjAxLDEuMzQtLjAzLDIuMDUtLjA2LjcxLS4wMywxLjQzLS4wNSwyLjE1LS4wOHMxLjY2LS4wOCwyLjgxLS4xNiwyLjU3LS4xNyw0LjI5LS4yOHY1LjMzWiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgICAgPHBhdGggZD0ibTI3MC4yMSw5Ny43MWgtMjEuOTN2LTI3LjY2aDIxLjkzdjUuNTNoLTE0LjgydjUuMzNoMTEuNjZ2NS41M2gtMTEuNjZ2NS43M2gxNC44MnY1LjUzWiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgICAgPHBhdGggZD0ibTI5Ny40Nyw5Ny43MWgtNy41MWwtOS40OC0xNi41OXYxNi41OWgtNy4xMXYtMjcuNjZoNy41MWw5LjQ4LDE2LjU5di0xNi41OWg3LjExdjI3LjY2WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgICAgPHBhdGggZD0ibTMxNS42NSw5Ny43MWgtNy4xMXYtMjIuMTNoLTguM3YtNS41M2gyMy43MXY1LjUzaC04LjN2MjIuMTNaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+CiAgICAgICAgICA8cGF0aCBkPSJtMzQ4LjY0LDk3LjcxaC0yMS45M3YtMjcuNjZoMjEuOTN2NS41M2gtMTQuODJ2NS4zM2gxMS42NnY1LjUzaC0xMS42NnY1LjczaDE0LjgydjUuNTNaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+CiAgICAgICAgICA8cGF0aCBkPSJtMzUxLjgsNzAuMDVoMTYuNTljMi43NywwLDQuNzcuNjMsNi4wMywxLjg4LDEuMjUsMS4yNSwxLjg4LDMuMjYsMS44OCw2LjAzdjMuNTZjMCwyLjE5LS4zNiwzLjg5LTEuMDksNS4xLS43MiwxLjIxLTEuODgsMi4wMi0zLjQ2LDIuNDFsNC45NCw4LjY5aC03LjdsLTQuNTQtOC4zaC01LjUzdjguM2gtNy4xMXYtMjcuNjZabTE3LjM4LDcuOWMwLTEuNTgtLjc5LTIuMzctMi4zNy0yLjM3aC03Ljl2OC4zaDcuOWMxLjU4LDAsMi4zNy0uNzksMi4zNy0yLjM3di0zLjU2WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+\";","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgConfluence = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1.3em\",\n height: \"1.3em\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M.87 18.257c-.248.382-.53.875-.763 1.245a.764.764 0 0 0 .255 1.04l4.965 3.054a.764.764 0 0 0 1.058-.26c.199-.332.454-.763.733-1.221 1.967-3.247 3.945-2.853 7.508-1.146l4.957 2.337a.764.764 0 0 0 1.028-.382l2.364-5.346a.764.764 0 0 0-.382-1 599.851 599.851 0 0 1-4.965-2.361C10.911 10.97 5.224 11.185.87 18.257zM23.131 5.743c.249-.405.531-.875.764-1.25a.764.764 0 0 0-.256-1.034L18.675.404a.764.764 0 0 0-1.058.26 66.14 66.14 0 0 1-.734 1.225c-1.966 3.246-3.945 2.85-7.508 1.146L4.437.694a.764.764 0 0 0-1.027.382L1.046 6.422a.764.764 0 0 0 .382 1c1.039.49 3.105 1.467 4.965 2.361 6.698 3.246 12.392 3.029 16.738-4.04z\"\n})));\nexport { SvgConfluence as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgaGVpZ2h0PSIxLjNlbSIgd2lkdGg9IjEuM2VtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDx0aXRsZT5Db25mbHVlbmNlPC90aXRsZT4KICA8cGF0aAogICAgZmlsbD0iY3VycmVudENvbG9yIgogICAgZD0iTS44NyAxOC4yNTdjLS4yNDguMzgyLS41My44NzUtLjc2MyAxLjI0NWEuNzY0Ljc2NCAwIDAgMCAuMjU1IDEuMDRsNC45NjUgMy4wNTRhLjc2NC43NjQgMCAwIDAgMS4wNTgtLjI2Yy4xOTktLjMzMi40NTQtLjc2My43MzMtMS4yMjEgMS45NjctMy4yNDcgMy45NDUtMi44NTMgNy41MDgtMS4xNDZsNC45NTcgMi4zMzdhLjc2NC43NjQgMCAwIDAgMS4wMjgtLjM4MmwyLjM2NC01LjM0NmEuNzY0Ljc2NCAwIDAgMC0uMzgyLTEgNTk5Ljg1MSA1OTkuODUxIDAgMCAxLTQuOTY1LTIuMzYxQzEwLjkxMSAxMC45NyA1LjIyNCAxMS4xODUuODcgMTguMjU3ek0yMy4xMzEgNS43NDNjLjI0OS0uNDA1LjUzMS0uODc1Ljc2NC0xLjI1YS43NjQuNzY0IDAgMCAwLS4yNTYtMS4wMzRMMTguNjc1LjQwNGEuNzY0Ljc2NCAwIDAgMC0xLjA1OC4yNmMtLjE5NS4zMzUtLjQ1MS43NjMtLjczNCAxLjIyNS0xLjk2NiAzLjI0Ni0zLjk0NSAyLjg1LTcuNTA4IDEuMTQ2TDQuNDM3LjY5NGEuNzY0Ljc2NCAwIDAgMC0xLjAyNy4zODJMMS4wNDYgNi40MjJhLjc2NC43NjQgMCAwIDAgLjM4MiAxYzEuMDM5LjQ5IDMuMTA1IDEuNDY3IDQuOTY1IDIuMzYxIDYuNjk4IDMuMjQ2IDEyLjM5MiAzLjAyOSAxNi43MzgtNC4wNHoiIC8+Cjwvc3ZnPgo=\";","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgArrow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n \"data-name\": \"Layer 2\",\n viewBox: \"0 0 832.57 1665.17\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n \"data-name\": \"Layer 1\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M832.57 0 0 832.59l832.57 832.59V1427.3l-594.7-594.71 594.7-594.71V0Z\",\n style: {\n fill: \"currentColor\",\n strokeWidth: 0\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M832.57 594.71 594.71 832.59l237.86 237.88v237.88L356.81 832.59l475.76-475.77v237.89z\",\n style: {\n fill: \"currentColor\",\n strokeWidth: 0\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m356.81 832.59 475.76-475.77v237.89L594.71 832.59l237.86 237.88v237.88L356.81 832.59z\",\n style: {\n fill: \"currentColor\",\n strokeWidth: 0\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M832.57 0v237.88l-594.7 594.71 594.7 594.7v237.88L0 832.59 832.57 0z\",\n style: {\n fill: \"currentColor\",\n strokeWidth: 0\n }\n})));\nexport { SvgArrow as ReactComponent };\nexport default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iYiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA4MzIuNTcgMTY2NS4xNyI+CiAgPGcgaWQ9ImMiIGRhdGEtbmFtZT0iTGF5ZXIgMSI+CiAgICA8Zz4KICAgICAgPHBhdGggZD0ibTgzMi41NywwTDAsODMyLjU5bDgzMi41Nyw4MzIuNTl2LTIzNy44OEwyMzcuODcsODMyLjU5LDgzMi41NywyMzcuODhWMFoiCiAgICAgICAgc3R5bGU9ImZpbGw6IGN1cnJlbnRDb2xvcjsgc3Ryb2tlLXdpZHRoOiAwcHg7IiAvPgogICAgICA8cG9seWdvbgogICAgICAgIHBvaW50cz0iODMyLjU3IDU5NC43MSA1OTQuNzEgODMyLjU5IDgzMi41NyAxMDcwLjQ3IDgzMi41NyAxMzA4LjM1IDM1Ni44MSA4MzIuNTkgODMyLjU3IDM1Ni44MiA4MzIuNTcgNTk0LjcxIgogICAgICAgIHN0eWxlPSJmaWxsOiBjdXJyZW50Q29sb3I7IHN0cm9rZS13aWR0aDogMHB4OyIgLz4KICAgICAgPHBvbHlnb24KICAgICAgICBwb2ludHM9IjM1Ni44MSA4MzIuNTkgODMyLjU3IDM1Ni44MiA4MzIuNTcgNTk0LjcxIDU5NC43MSA4MzIuNTkgODMyLjU3IDEwNzAuNDcgODMyLjU3IDEzMDguMzUgMzU2LjgxIDgzMi41OSIKICAgICAgICBzdHlsZT0iZmlsbDogY3VycmVudENvbG9yOyBzdHJva2Utd2lkdGg6IDBweDsiIC8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iODMyLjU3IDAgODMyLjU3IDIzNy44OCAyMzcuODcgODMyLjU5IDgzMi41NyAxNDI3LjI5IDgzMi41NyAxNjY1LjE3IDAgODMyLjU5IDgzMi41NyAwIgogICAgICAgIHN0eWxlPSJmaWxsOiBjdXJyZW50Q29sb3I7IHN0cm9rZS13aWR0aDogMHB4OyIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=\";","export const GROUP_CARBON = \"Carbon Mode\";\nexport const GROUP_FLEET = \"Fleet\";\nexport const GROUP_REPORTS = \"Reports\";\nexport const GROUP_NAVIGATION = \"Navigation\";\nexport const GROUP_ROBOT = \"Robot\";\n","import { Breakpoint, useBreakpoint } from \"portal/utils/hooks/useBreakpoint\";\nimport { ReactComponent as CarbonArrow } from \"portal/images/arrow.svg\";\nimport { ReactComponent as CarbonLogo } from \"portal/images/logo_ops_center.svg\";\nimport { classes } from \"portal/utils/theme\";\nimport {\n Divider,\n FormControlLabel,\n IconButton,\n List,\n ListItemButton,\n SwipeableDrawer,\n Switch,\n Tooltip,\n} from \"@mui/material\";\nimport { FeedbackContextProvider, FeedbackDialog } from \"./FeedbackDialog\";\nimport { GlobalHotKeys } from \"react-hotkeys\";\nimport { GROUP_CARBON } from \"portal/utils/hotkeys\";\nimport { isInternal as isActuallyInternal } from \"portal/utils/auth\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { LOCALSTORAGE_DRAWER_EXPANDED } from \"portal/utils/localStorage\";\nimport { setCustomerMode } from \"portal/state/self\";\nimport { useDispatch } from \"react-redux\";\nimport { useLocalStorage } from \"@uidotdev/usehooks\";\nimport { useSelf } from \"portal/state/store\";\nimport { useTranslation } from \"react-i18next\";\nimport { withErrorBoundary } from \"portal/components/ErrorBoundary\";\nimport FeedbackIcon from \"@mui/icons-material/FeedbackOutlined\";\nimport React, {\n FunctionComponent,\n ReactElement,\n useMemo,\n useState,\n} from \"react\";\n\ninterface BaseNavItem {\n label: ReactElement | string;\n icon?: ReactElement;\n}\n\ninterface LinkNavItem extends BaseNavItem {\n href: string;\n}\n\ninterface ActionNavItem extends BaseNavItem {\n onClick: () => void;\n}\n\ninterface Divider {\n type: \"divider\";\n}\n\nexport type NavItem = LinkNavItem | ActionNavItem | Divider;\n\nconst isActionItem = (item: NavItem): item is ActionNavItem =>\n \"onClick\" in item;\n\n// const AVATAR_SIZE = 80;\nexport interface DrawerProps {\n items?: NavItem[];\n}\n\nconst _Drawer: FunctionComponent = (props: DrawerProps) => {\n const { items: inputItems = [] } = props;\n const { user, isInternal } = useSelf();\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const location = useLocation();\n\n const items = useMemo(() => {\n return [\n ...inputItems,\n {\n label: t(\"components.FeedbackDialog.feedback\"),\n icon: ,\n onClick: () => setFeedbackOpen(true),\n },\n ];\n }, [inputItems, t]);\n\n const [isFeedbackOpen, setFeedbackOpen] = useState(false);\n const [isExpanded, setExpanded] = useLocalStorage(\n LOCALSTORAGE_DRAWER_EXPANDED,\n false\n );\n\n const breakpoint = useBreakpoint();\n const isSmall = breakpoint <= Breakpoint.sm;\n\n return (\n <>\n setExpanded(false)}\n onOpen={() => setExpanded(true)}\n classes={{\n paper: classes(\n \"pt-16 transition-all\",\n \"overflow-x-hidden\",\n isExpanded || isSmall ? \"w-60\" : \"w-16\"\n ),\n }}\n variant={isSmall ? \"temporary\" : \"permanent\"}\n >\n {isSmall && }\n \n {items.map((item, index) => {\n if (\"type\" in item) {\n return ;\n }\n return (\n \n \n
    \n {item.icon}\n
    \n {isExpanded && (\n \n {item.label}\n \n )}\n \n \n );\n })}\n
    \n {isActuallyInternal(user) && isExpanded && (\n <>\n dispatch(setCustomerMode(isInternal)),\n }}\n />\n \n dispatch(setCustomerMode(checked))\n }\n color=\"secondary\"\n />\n }\n label={t(\"components.drawer.customerMode\")}\n />\n \n )}\n \n \n setFeedbackOpen(open)}\n required\n commentText={t(\"components.FeedbackDialog.feedback\")}\n />\n \n {!isSmall && (\n setExpanded(!isExpanded)}\n sx={{ zIndex: (theme) => theme.zIndex.drawer + 1 }}\n >\n \n \n )}\n \n );\n};\n\nexport const Drawer = withErrorBoundary(\n { i18nKey: \"components.drawer.error\" },\n _Drawer\n);\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgFarm = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1.3em\",\n height: \"1.3em\",\n fill: \"currentColor\",\n \"data-name\": \"Layer 1\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m23.496 8.766-3.334-5.001a2.995 2.995 0 0 0-1.314-1.094L13.181.242a3.015 3.015 0 0 0-2.363 0L5.152 2.671c-.537.23-.991.608-1.314 1.093L.504 8.765A2.99 2.99 0 0 0 0 10.43V24h24V10.43c0-.595-.174-1.17-.504-1.664Zm-9.917 9.325L17 15.292v5.598l-3.421-2.799ZM15.198 22H8.801L12 19.383 15.199 22Zm-3.199-5.201L8.578 14h6.842l-3.421 2.799Zm-5-1.507 3.421 2.799-3.421 2.799v-5.598Zm15 6.708h-3v-7c0-1.654-1.346-3-3-3H8c-1.654 0-3 1.346-3 3v7H2V10.43c0-.198.058-.39.168-.555l3.335-5.002a.985.985 0 0 1 .438-.364l5.666-2.428c.251-.107.538-.107.788 0l5.666 2.428a1 1 0 0 1 .438.365l3.334 5.002c.11.165.168.356.168.554V22ZM12 4c-1.654 0-3 1.346-3 3s1.346 3 3 3 3-1.346 3-3-1.346-3-3-3Zm0 4c-.551 0-1-.449-1-1s.449-1 1-1 1 .449 1 1-.449 1-1 1Z\"\n})));\nexport { SvgFarm as ReactComponent };\nexport default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJMYXllcl8xIiBkYXRhLW5hbWU9IkxheWVyIDEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaGVpZ2h0PSIxLjNlbSIKICB3aWR0aD0iMS4zZW0iIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgPHBhdGgKICAgIGQ9Ik0yMy40OTYsOC43NjZsLTMuMzM0LTUuMDAxYy0uMzIzLS40ODUtLjc3OC0uODY0LTEuMzE0LTEuMDk0TDEzLjE4MSwuMjQyYy0uNzUxLS4zMjEtMS42MTItLjMyMi0yLjM2MywwTDUuMTUyLDIuNjcxYy0uNTM3LC4yMy0uOTkxLC42MDgtMS4zMTQsMS4wOTNMLjUwNCw4Ljc2NWMtLjMzLC40OTUtLjUwNCwxLjA3LS41MDQsMS42NjV2MTMuNTdIMjRWMTAuNDNjMC0uNTk1LS4xNzQtMS4xNy0uNTA0LTEuNjY0Wm0tOS45MTcsOS4zMjVsMy40MjEtMi43OTl2NS41OThsLTMuNDIxLTIuNzk5Wm0xLjYxOSwzLjkwOWgtNi4zOTdsMy4xOTktMi42MTcsMy4xOTksMi42MTdabS0zLjE5OS01LjIwMWwtMy40MjEtMi43OTloNi44NDJsLTMuNDIxLDIuNzk5Wm0tNS0xLjUwN2wzLjQyMSwyLjc5OS0zLjQyMSwyLjc5OXYtNS41OThabTE1LDYuNzA4aC0zdi03YzAtMS42NTQtMS4zNDYtMy0zLTNIOGMtMS42NTQsMC0zLDEuMzQ2LTMsM3Y3SDJWMTAuNDNjMC0uMTk4LC4wNTgtLjM5LC4xNjgtLjU1NWwzLjMzNS01LjAwMmMuMTA3LS4xNjIsLjI1OS0uMjg4LC40MzgtLjM2NGw1LjY2Ni0yLjQyOGMuMjUxLS4xMDcsLjUzOC0uMTA3LC43ODgsMGw1LjY2NiwyLjQyOGMuMTc5LC4wNzcsLjMzLC4yMDMsLjQzOCwuMzY1bDMuMzM0LDUuMDAyYy4xMSwuMTY1LC4xNjgsLjM1NiwuMTY4LC41NTR2MTEuNTdaTTEyLDRjLTEuNjU0LDAtMywxLjM0Ni0zLDNzMS4zNDYsMywzLDMsMy0xLjM0NiwzLTMtMS4zNDYtMy0zLTNabTAsNGMtLjU1MSwwLTEtLjQ0OS0xLTFzLjQ0OS0xLDEtMSwxLC40NDksMSwxLS40NDksMS0xLDFaIiAvPgo8L3N2Zz4=\";","import { isEmpty, keys } from \"../objects\";\nimport { isUndefined } from \"../identity\";\nimport { useSelf } from \"portal/state/store\";\n\nexport enum FeatureFlag {\n REPORTS = \"reports\",\n ALMANAC = \"almanac\",\n JOBS = \"jobs\",\n UNVALIDATED_METRICS = \"unvalidatedMetrics\",\n SPATIAL = \"spatial\",\n TARGET_VELOCITY_ESTIMATOR = \"velocityEstimator\",\n EXPLORE = \"explore\",\n CATEGORY_COLLECTION = \"categoryCollection\",\n}\n\nexport const toggleableByFlag: Record = {\n [FeatureFlag.REPORTS]: false,\n [FeatureFlag.ALMANAC]: true,\n [FeatureFlag.JOBS]: false,\n [FeatureFlag.UNVALIDATED_METRICS]: true,\n [FeatureFlag.SPATIAL]: true,\n [FeatureFlag.TARGET_VELOCITY_ESTIMATOR]: true,\n [FeatureFlag.EXPLORE]: true,\n [FeatureFlag.CATEGORY_COLLECTION]: true,\n};\n\ninterface FeatureFlagState {\n isEnabled: boolean | undefined;\n isLoading: boolean;\n}\n\n/**\n * Hook to get the value and loading status of a given feature flag for the current user.\n * Returns isLoading based on whether we have resolved the user state yet\n */\nexport const useFeatureFlag = (flag: FeatureFlag): FeatureFlagState => {\n const { user, isInternal, customer } = useSelf();\n\n // loading\n if (!user) {\n return { isEnabled: undefined, isLoading: true };\n }\n\n // internal user\n if (isInternal) {\n return { isEnabled: true, isLoading: false };\n }\n\n // no customer assigned\n if (isUndefined(customer) || isEmpty(customer)) {\n return { isEnabled: false, isLoading: false };\n }\n\n return {\n isEnabled: (keys(customer.featureFlags) as FeatureFlag[]).includes(flag),\n isLoading: false,\n };\n};\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgSlayerSideOutlined = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlSpace: \"preserve\",\n width: \"2em\",\n height: \"2em\",\n fill: \"currentColor\",\n style: {\n enableBackground: \"new 0 0 48 48\"\n },\n viewBox: \"0 0 48 48\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.5 23 19.2 8H11c-1.7 0-3 1.3-3 3v12c0 1.7 1.3 3 3 3h23v-3h-6.5zm-15.2 0c-1 0-1.3-.3-1.3-1.4v-9.1c0-1.1.4-1.5 1.5-1.5h5.3l6.6 12.1-12.1-.1zM34 28c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zm0 9c-1.6 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.4 3-3 3zM14 28c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zm0 9c-1.6 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.4 3-3 3z\"\n})));\nexport { SvgSlayerSideOutlined as ReactComponent };\nexport default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iYSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQogIHZpZXdCb3g9IjAgMCA0OCA0OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDggNDg7IiB4bWw6c3BhY2U9InByZXNlcnZlIiBoZWlnaHQ9IjJlbSIgd2lkdGg9IjJlbSINCiAgZmlsbD0iY3VycmVudENvbG9yIj4NCiAgPHBhdGggZD0iTTI3LjUsMjNMMTkuMiw4SDExYy0xLjcsMC0zLDEuMy0zLDN2MTJjMCwxLjcsMS4zLDMsMywzaDIzdi0zSDI3LjV6IE0xMi4zLDIzYy0xLDAtMS4zLTAuMy0xLjMtMS40di05LjENCgljMC0xLjEsMC40LTEuNSwxLjUtMS41aDUuM2w2LjYsMTIuMUwxMi4zLDIzeiIgLz4NCiAgPHBhdGgNCiAgICBkPSJNMzQsMjhjLTMuMywwLTYsMi43LTYsNnMyLjcsNiw2LDZzNi0yLjcsNi02UzM3LjMsMjgsMzQsMjh6IE0zNCwzN2MtMS42LDAtMy0xLjMtMy0zczEuMy0zLDMtM3MzLDEuMywzLDNTMzUuNiwzNywzNCwzN3oiIC8+DQogIDxwYXRoDQogICAgZD0iTTE0LDI4Yy0zLjMsMC02LDIuNy02LDZzMi43LDYsNiw2czYtMi43LDYtNlMxNy4zLDI4LDE0LDI4eiBNMTQsMzdjLTEuNiwwLTMtMS4zLTMtM3MxLjMtMywzLTNzMywxLjMsMywzUzE1LjYsMzcsMTQsMzd6IiAvPg0KPC9zdmc+\";","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nconst SvgJira = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1.3em\",\n height: \"1.3em\",\n viewBox: \"0 0 496 512\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90-76-75.7 76-75.7 76 75.7-76 75.7z\"\n})));\nexport { SvgJira as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OTYgNTEyIiBoZWlnaHQ9IjEuM2VtIiB3aWR0aD0iMS4zZW0iPgogIDxwYXRoCiAgICBkPSJNNDkwIDI0MS43QzQxNy4xIDE2OSAzMjAuNiA3MS44IDI0OC41IDAgODMgMTY0LjkgNiAyNDEuNyA2IDI0MS43Yy03LjkgNy45LTcuOSAyMC43IDAgMjguN0MxMzguOCA0MDIuNyA2Ny44IDMzMS45IDI0OC41IDUxMmMzNzkuNC0zNzggMTUuNy0xNi43IDI0MS41LTI0MS43IDgtNy45IDgtMjAuNyAwLTI4LjZ6bS0yNDEuNSA5MGwtNzYtNzUuNyA3Ni03NS43IDc2IDc1LjctNzYgNzUuN3oiCiAgICBmaWxsPSJjdXJyZW50Q29sb3IiIC8+Cjwvc3ZnPg==\";","import { AppBar, IconButton, Toolbar, Typography } from \"@mui/material\";\nimport { Breakpoint, useBreakpoint } from \"portal/utils/hooks/useBreakpoint\";\nimport { buildPermission } from \"portal/utils/auth\";\nimport { capitalize, titleCase } from \"portal/utils/strings\";\nimport { carbon, classes } from \"portal/utils/theme\";\nimport { ReactComponent as CarbonLogo } from \"portal/images/logo_ops_center.svg\";\nimport { ReactComponent as ConfluenceIcon } from \"portal/images/icons/confluence.svg\";\nimport { Drawer, NavItem } from \"../Drawer\";\nimport { ReactComponent as FarmIcon } from \"portal/images/icons/farm.svg\";\nimport { FeatureFlag, useFeatureFlag } from \"portal/utils/hooks/useFeatureFlag\";\nimport { ReactComponent as FleetIcon } from \"portal/images/icons/slayer_side_outlined.svg\";\nimport { GlobalHotKeys, GlobalHotKeysProps, KeyMap } from \"react-hotkeys\";\nimport { GROUP_NAVIGATION } from \"portal/utils/hotkeys\";\nimport { Helmet } from \"react-helmet\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport { ReactComponent as JiraIcon } from \"portal/images/icons/jira.svg\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { LOCALSTORAGE_DRAWER_EXPANDED } from \"portal/utils/localStorage\";\nimport { Path } from \"portal/utils/routing\";\nimport {\n PermissionAction,\n PermissionDomain,\n PermissionResource,\n} from \"protos/portal/auth\";\nimport { useAuthorizationRequired } from \"../auth/WithAuthorizationRequired\";\nimport { useLocalStorage } from \"@uidotdev/usehooks\";\nimport { useTranslation } from \"react-i18next\";\nimport { withErrorBoundary } from \"portal/components/ErrorBoundary\";\nimport { WithSkeleton } from \"../WithSkeleton\";\nimport AdminSettingsIcon from \"@mui/icons-material/AdminPanelSettingsOutlined\";\nimport CloseMenuIcon from \"@mui/icons-material/MenuOpenOutlined\";\nimport ExternalIcon from \"@mui/icons-material/OpenInNewOutlined\";\nimport MenuIcon from \"@mui/icons-material/MenuOutlined\";\nimport ParentIcon from \"@mui/icons-material/ArrowBackOutlined\";\nimport React, { FunctionComponent, ReactNode } from \"react\";\nimport ReportIcon from \"@mui/icons-material/AssessmentOutlined\";\nimport SettingsIcon from \"@mui/icons-material/SettingsOutlined\";\nimport SupportIcon from \"@mui/icons-material/HelpCenterOutlined\";\nimport UploadIcon from \"@mui/icons-material/CloudUploadOutlined\";\nimport UsersIcon from \"@mui/icons-material/GroupsOutlined\";\n\ninterface Props {\n children?: ReactNode;\n hideDrawer?: boolean;\n hideMascot?: boolean;\n hideTitle?: boolean;\n parentLink?: string;\n subtitle?: string;\n title?: string;\n pageTitle?: string;\n}\n\nconst _Header: FunctionComponent = ({\n children,\n hideDrawer = false,\n hideTitle = false,\n parentLink,\n subtitle,\n title,\n pageTitle,\n}) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n\n const breakpoint = useBreakpoint();\n const isSmall = breakpoint <= Breakpoint.sm;\n\n const [isExpanded, setExpanded] = useLocalStorage(\n LOCALSTORAGE_DRAWER_EXPANDED,\n false\n );\n\n const keyHandlers: GlobalHotKeysProps[\"handlers\"] = {\n GO_SETTINGS: () => navigate(Path.SETTINGS),\n GO_ADMIN: () => navigate(Path.ADMIN),\n GO_CUSTOMERS: () => navigate(Path.CUSTOMERS),\n GO_FLEET: () => navigate(Path.FLEET),\n GO_KNOWLEDGE: () => navigate(Path.KNOWLEDGE),\n GO_OFFLINE: () => navigate(Path.OFFLINE),\n GO_REPORTS: () => navigate(Path.REPORTS),\n GO_USERS: () => navigate(Path.USERS),\n };\n const keyMap: KeyMap = {};\n const drawerItems: NavItem[] = [];\n\n // settings\n const isSettingsAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.portal_settings,\n PermissionDomain.self\n ),\n ]);\n if (isSettingsAuthorized) {\n drawerItems.push({\n label: t(\"views.settings.title\"),\n href: Path.SETTINGS,\n icon: ,\n });\n\n keyMap.GO_SETTINGS = {\n group: GROUP_NAVIGATION,\n name: t(\"utils.actions.goToLong\", {\n subject: t(\"views.settings.title\"),\n }),\n action: \"keyup\",\n sequence: \"g s\",\n };\n }\n\n // fleet\n const isRobotsAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.robots,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.robots,\n PermissionDomain.customer\n ),\n ]);\n if (isRobotsAuthorized) {\n drawerItems.push({\n label: t(\"views.fleet.title\"),\n icon: ,\n href: Path.FLEET,\n });\n keyMap.GO_FLEET = {\n group: GROUP_NAVIGATION,\n name: t(\"utils.actions.goToLong\", {\n subject: t(\"views.fleet.title\"),\n }),\n action: \"keyup\",\n sequence: \"g f\",\n };\n }\n\n // reports\n const { isEnabled: hasReports } = useFeatureFlag(FeatureFlag.REPORTS);\n const isReportsAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.reports,\n PermissionDomain.self\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.reports,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.reports,\n PermissionDomain.customer\n ),\n ]);\n if (hasReports && isReportsAuthorized) {\n drawerItems.push({\n label: titleCase(t(\"models.reports.report_other\")),\n icon: ,\n href: Path.REPORTS,\n });\n keyMap.GO_REPORTS = {\n group: GROUP_NAVIGATION,\n name: t(\"utils.actions.goToLong\", {\n subject: capitalize(t(\"models.reports.report_other\")),\n }),\n action: \"keyup\",\n sequence: \"g r\",\n };\n }\n\n // users\n const isUsersAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.users,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.users,\n PermissionDomain.customer\n ),\n ]);\n if (isUsersAuthorized) {\n drawerItems.push({\n label: titleCase(t(\"models.users.user_other\")),\n icon: ,\n href: Path.USERS,\n });\n keyMap.GO_USERS = {\n group: GROUP_NAVIGATION,\n name: t(\"utils.actions.goToLong\", {\n subject: capitalize(t(\"models.users.user_other\")),\n }),\n action: \"keyup\",\n sequence: \"g u\",\n };\n }\n\n // customers\n const isCustomersAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.customers,\n PermissionDomain.all\n ),\n ]);\n if (isCustomersAuthorized) {\n drawerItems.push({\n label: titleCase(t(\"models.customers.customer_other\")),\n icon: ,\n href: Path.CUSTOMERS,\n });\n keyMap.GO_CUSTOMERS = {\n group: GROUP_NAVIGATION,\n name: t(\"utils.actions.goToLong\", {\n subject: capitalize(t(\"models.customers.customer_other\")),\n }),\n action: \"keyup\",\n sequence: \"g c\",\n };\n }\n\n // knowledge\n const isGuidesAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.guides,\n PermissionDomain.all\n ),\n ]);\n if (isGuidesAuthorized) {\n drawerItems.push({\n label: t(\"views.knowledge.title\"),\n icon: ,\n href: Path.KNOWLEDGE,\n });\n keyMap.GO_KNOWLEDGE = {\n group: GROUP_NAVIGATION,\n name: t(\"utils.actions.goToLong\", {\n subject: t(\"views.knowledge.title\"),\n }),\n action: \"keyup\",\n sequence: \"g k\",\n };\n }\n\n // offline\n const isOfflineAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.update,\n PermissionResource.uploads,\n PermissionDomain.self\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.uploads,\n PermissionDomain.customer\n ),\n buildPermission(\n PermissionAction.update,\n PermissionResource.uploads,\n PermissionDomain.all\n ),\n ]);\n if (isOfflineAuthorized) {\n drawerItems.push({\n label: t(\"views.offline.title\"),\n icon: ,\n href: Path.OFFLINE,\n });\n keyMap.GO_OFFLINE = {\n group: GROUP_NAVIGATION,\n name: t(\"utils.actions.goToLong\", {\n subject: t(\"views.offline.title\"),\n }),\n action: \"keyup\",\n sequence: \"g o\",\n };\n }\n\n // admin\n const isAdminAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.admin_cloud,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.admin_alarms,\n PermissionDomain.all\n ),\n buildPermission(\n PermissionAction.read,\n PermissionResource.configs,\n PermissionDomain.templates\n ),\n ]);\n if (isAdminAuthorized) {\n drawerItems.push({\n label: t(\"views.admin.title\"),\n icon: ,\n href: Path.ADMIN,\n });\n keyMap.GO_ADMIN = {\n group: GROUP_NAVIGATION,\n name: t(\"utils.actions.goToLong\", {\n subject: t(\"views.admin.title\"),\n }),\n action: \"keyup\",\n sequence: \"g d\",\n };\n }\n\n // shortcuts\n const isShortcutsAuthorized = useAuthorizationRequired([\n buildPermission(\n PermissionAction.read,\n PermissionResource.shortcuts_internal,\n PermissionDomain.all\n ),\n ]);\n if (isShortcutsAuthorized) {\n drawerItems.push(\n {\n label: (\n // not need to localize proper noun\n // eslint-disable-next-line i18next/no-literal-string\n
    \n Jira \n
    \n ),\n icon: ,\n href: \"https://carbonrobotics.atlassian.net/jira/your-work\",\n },\n {\n label: (\n // not need to localize proper noun\n // eslint-disable-next-line i18next/no-literal-string\n
    \n Confluence{\" \"}\n \n
    \n ),\n icon: ,\n href: \"https://carbonrobotics.atlassian.net/wiki/spaces/Home/overview\",\n }\n );\n }\n\n if (!pageTitle) {\n pageTitle = title;\n if (subtitle) {\n pageTitle += ` ${subtitle}`;\n }\n }\n\n return (\n <>\n \n {title && (\n \n \n {/* no need to localize proper nouns */}\n {/* eslint-disable-next-line i18next/no-literal-string */}\n {pageTitle} - Carbon Robotics\n \n \n )}\n theme.zIndex.drawer + 1 }}\n >\n \n {!isSmall && (\n \n \n \n )}\n {!hideDrawer && isSmall && (\n setExpanded(!isExpanded)}\n >\n {isExpanded ? : }\n \n )}\n\n {parentLink && (\n \n \n \n )}\n \n {hideTitle ? (\n <>\n ) : (\n \n {title}\n \n )}\n \n
    \n {children}\n
    \n \n \n {!hideDrawer && }\n \n );\n};\n\nexport const Header = withErrorBoundary(\n {\n i18nKey: \"components.header.failed\",\n small: true,\n },\n _Header\n);\n","import {\n Badge,\n Button,\n Menu,\n MenuItem,\n MenuItemProps,\n Tab,\n TabProps,\n Tabs,\n TabsProps,\n} from \"@mui/material\";\nimport { classes } from \"portal/utils/theme\";\nimport { isObject, values } from \"portal/utils/objects\";\nimport { isUndefined } from \"portal/utils/identity\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport DropdownIcon from \"@mui/icons-material/ArrowDropDownOutlined\";\nimport React, {\n FunctionComponent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\n// const OVERFLOW_BUFFER = 100;\n\ninterface NavPage {\n count?: number;\n label: string;\n to: string;\n hidden?: boolean;\n}\n\nconst trimVariables = (path: string): string => {\n const result: string[] = [];\n for (const segment of path.split(\"/\")) {\n if (segment.startsWith(\":\") || segment.startsWith(\"*\")) {\n break;\n }\n result.push(segment);\n }\n return result.join(\"/\");\n};\n\n/**\n * Responsive subnav component for use in header\n * Shows tabs for large screens and dropdown menu for small ones\n */\ninterface ResponsiveSubnavProps\n extends Omit {\n onChange?: (index: number, name: string) => void;\n pages: NavPage[];\n}\nexport const ResponsiveSubnav: FunctionComponent = ({\n className,\n pages,\n onChange,\n ...props\n}) => {\n const { t } = useTranslation();\n const [hasResized, setHasResized] = useState(false);\n const [visibilityMap, setVisibilityMap] = useState>(\n {}\n );\n const visiblePages = useMemo(\n () => pages.filter((page) => !page.hidden),\n [pages]\n );\n const hasOverflow = values(visibilityMap).includes(false);\n\n // adjust overflow menu when available width changes\n const lastObserverRef = useRef(undefined);\n const makeIntersectionObserver = useCallback(\n (): IntersectionObserver =>\n new IntersectionObserver(\n (entries) => {\n const visibilityUpdates: Record = {};\n for (const entry of entries) {\n const { target, isIntersecting } = entry;\n if (!(target instanceof HTMLElement)) {\n continue;\n }\n const key = target.dataset.observable;\n if (key !== undefined) {\n visibilityUpdates[key] = isIntersecting;\n }\n }\n setVisibilityMap((old) => ({ ...old, ...visibilityUpdates }));\n setHasResized(true);\n },\n {\n root: document.querySelector(\".MuiToolbar-root\"),\n threshold: 1,\n }\n ),\n []\n );\n const containerRef: React.RefCallback = useCallback(\n (container) => {\n const lastObserver = lastObserverRef.current;\n if (lastObserver) {\n lastObserver.disconnect();\n lastObserverRef.current = undefined;\n }\n if (container) {\n const observer = makeIntersectionObserver();\n for (const item of container.querySelectorAll(\"[data-observable]\")) {\n observer.observe(item);\n }\n lastObserverRef.current = observer;\n }\n },\n [makeIntersectionObserver]\n );\n\n const { pathname } = useLocation();\n const currentIndex = visiblePages.findLastIndex((page) =>\n page.to.endsWith(\"*\")\n ? pathname.startsWith(page.to.slice(0, -2))\n : pathname.startsWith(page.to)\n );\n const currentPage = visiblePages[currentIndex];\n useEffect(() => {\n if (isObject(currentPage) && \"props\" in currentPage) {\n onChange?.(currentIndex, currentPage.label);\n }\n }, [currentIndex, currentPage, onChange, visiblePages]);\n const [menuAnchor, setMenuAnchor] = useState();\n\n if (!currentPage) {\n return;\n }\n\n return (\n \n \n {visiblePages.map((page) => (\n \n ))}\n \n {hasOverflow && (\n <>\n setMenuAnchor(event.currentTarget)}\n variant=\"text\"\n className={classes(\" text-white font-bold\")}\n endIcon={}\n >\n {t(\"components.ResponsiveSubnav.more\")}\n \n setMenuAnchor(undefined)}\n open={!isUndefined(menuAnchor)}\n anchorEl={menuAnchor}\n className={classes(\" text-white\")}\n >\n {visiblePages.map((page) => (\n setMenuAnchor(undefined)}\n />\n ))}\n \n \n )}\n \n );\n};\n\n/**\n * Wrapper around MUI Tab component\n * * adds count badge\n * * support wildcard paths\n */\nconst CarbonTab: FunctionComponent = ({\n className,\n count = 0,\n hidden,\n label,\n to,\n ...props\n}) => (\n