@kando-env/kando-ui 1.2.228-alpha.78 → 1.2.228-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Router.js +66 -8
- package/lib/Widgets/EventsCarousel/EventsCarousel.js +41 -11
- package/lib/Widgets/EventsRow/EventsRow.js +41 -14
- package/lib/Widgets/Map/GraphUtils.js +4 -1
- package/lib/Widgets/Map/Map.js +93 -93
- package/lib/Widgets/Map/MapUtils.js +56 -5
- package/lib/Widgets/Map/areas/AreaPolygon.js +27 -7
- package/lib/Widgets/Map/areas/AreaPolygons.js +21 -8
- package/lib/Widgets/Map/edges/Edge.js +30 -9
- package/lib/Widgets/Map/edges/Edge.scss +2 -2
- package/lib/Widgets/Map/edges/Edges.js +20 -11
- package/lib/Widgets/Map/edges/arrows/Arrows.js +22 -7
- package/lib/Widgets/Map/events/Event.js +23 -7
- package/lib/Widgets/Map/events/EventIndicator.js +42 -19
- package/lib/Widgets/Map/events/EventPath.js +20 -5
- package/lib/Widgets/Map/events/EventUtils.js +54 -4
- package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +19 -5
- package/lib/Widgets/Map/events/PointOfEvent.js +34 -5
- package/lib/Widgets/Map/events/PointsForSpecificEvent.js +14 -4
- package/lib/Widgets/Map/events/Snail.js +19 -7
- package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +54 -15
- package/lib/Widgets/Map/map/FloatingGraph.js +19 -3
- package/lib/Widgets/Map/map/GraphDateButton.js +9 -3
- package/lib/Widgets/Map/matchGraph/MatchGraph.js +11 -5
- package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +10 -4
- package/lib/Widgets/Map/points/PointIcon.js +16 -3
- package/lib/Widgets/Map/points/PointIcon.scss +0 -2
- package/lib/Widgets/Map/points/PointMarker.js +26 -11
- package/lib/Widgets/Map/points/PointMarkers.js +84 -60
- package/lib/Widgets/Map/points/PointUtils.js +114 -32
- package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +53 -19
- package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +19 -4
- package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +13 -1
- package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +5 -1
- package/lib/Widgets/MostPolluting/Areas/Areas.js +53 -19
- package/lib/Widgets/MostPolluting/Areas/areas.mock.js +1 -1
- package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
- package/lib/Widgets/MostPolluting/Areas/styles.js +7 -1
- package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +11 -3
- package/lib/Widgets/MostPolluting/Factories/Factories.js +64 -30
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +21 -4
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +10 -1
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +17 -4
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +7 -3
- package/lib/Widgets/MostPolluting/Factories/factories.mock.js +1 -1
- package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
- package/lib/Widgets/MostPolluting/Factories/styles.js +7 -1
- package/lib/Widgets/MostPolluting/MostPolluting.js +24 -37
- package/lib/Widgets/MostPolluting/MostPolluting.stories.js +17 -13
- package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +9 -2
- package/lib/Widgets/MostPolluting/ShowMore/styles.js +5 -1
- package/lib/Widgets/MostPolluting/assets/index.js +28 -17
- package/lib/Widgets/MostPolluting/components/ChangePercent.js +16 -1
- package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +26 -15
- package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +26 -4
- package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +33 -25
- package/lib/Widgets/MostPolluting/components/PotentialImpact.js +20 -4
- package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +43 -29
- package/lib/Widgets/MostPolluting/models.js +1 -1
- package/lib/Widgets/MostPolluting/styles.js +7 -1
- package/lib/Widgets/PotentialImpactSummary/Back/Back.js +9 -2
- package/lib/Widgets/PotentialImpactSummary/Icon.js +11 -1
- package/lib/Widgets/PotentialImpactSummary/index.js +29 -7
- package/lib/Widgets/PotentialImpactSummary/index.test.js +36 -17
- package/lib/Widgets/PotentialImpactSummary/styles.js +15 -2
- package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
- package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +10 -4
- package/lib/Widgets/QualitySummary/PieChart/PieChart.js +21 -7
- package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +29 -19
- package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +24 -15
- package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +21 -7
- package/lib/Widgets/QualitySummary/QualitySummary.js +24 -8
- package/lib/Widgets/QualitySummary/qualitySummary.mock.js +2 -2
- package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
- package/lib/Widgets/QualitySummary/styles.js +15 -2
- package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +20 -9
- package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +34 -9
- package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +18 -9
- package/lib/Widgets/UtilityInformation/UtilityInformation.js +59 -30
- package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
- package/lib/Widgets/UtilityInformation/styles.js +22 -2
- package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +2 -2
- package/lib/assets/icons/index.js +8 -5
- package/lib/assets/icons/kandoStepper/index.js +14 -9
- package/lib/components/ApplyButton/ApplyButton.js +11 -5
- package/lib/components/ApplyButton/index.js +4 -1
- package/lib/components/Backdrop/Backdrop.js +8 -2
- package/lib/components/ContentLoader/ContentLoader.js +12 -7
- package/lib/components/ContentLoader/index.js +2 -1
- package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +14 -7
- package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +8 -2
- package/lib/components/CustomInputs/DoubleTabs/styles.js +10 -2
- package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +18 -5
- package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +5 -1
- package/lib/components/CustomInputs/Search/Search.js +38 -13
- package/lib/components/CustomInputs/Search/index.js +4 -1
- package/lib/components/CustomInputs/Select/Select.js +34 -14
- package/lib/components/CustomInputs/Select/Select.stories.js +8 -2
- package/lib/components/DamageType/DamageType.js +76 -37
- package/lib/components/DamageType/index.js +4 -1
- package/lib/components/DataLoaderError/DataLoaderError.js +10 -4
- package/lib/components/DischargeHeatmap/DischargeHeatmap.js +16 -6
- package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +37 -17
- package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +37 -12
- package/lib/components/DischargeHeatmap/HighchartsOptions.js +10 -6
- package/lib/components/DischargeHeatmap/index.js +4 -1
- package/lib/components/DischargeHeatmap/mocks/handlers.js +4 -3
- package/lib/components/DischargeHeatmap/popupText.js +16 -1
- package/lib/components/DischargeHeatmap/titles.js +8 -1
- package/lib/components/DischargeHeatmap/types.js +1 -1
- package/lib/components/ErrorBoundary.js +15 -3
- package/lib/components/Events/Events.js +30 -5
- package/lib/components/Events/index.js +4 -1
- package/lib/components/Graph/Graph.js +74 -31
- package/lib/components/Graph/index.js +4 -1
- package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +7 -1
- package/lib/components/Header/Breadcrumbs/index.js +4 -1
- package/lib/components/Header/DoubleTabs/DoubleTabs.js +30 -14
- package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +8 -2
- package/lib/components/Header/DoubleTabs/styles.js +10 -2
- package/lib/components/Header/Header.js +7 -1
- package/lib/components/Header/Header.stories.js +8 -2
- package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +11 -1
- package/lib/components/Header/InfoBar/InfoBar.js +30 -4
- package/lib/components/Header/InfoBar/Search/Control.js +13 -2
- package/lib/components/Header/InfoBar/Search/GroupLabel.js +12 -1
- package/lib/components/Header/InfoBar/Search/Search.js +26 -5
- package/lib/components/Header/InfoBar/Search/SearchContainer.js +21 -4
- package/lib/components/Header/InfoBar/Search/index.js +4 -1
- package/lib/components/Header/InfoBar/Search/searchStyle.js +4 -1
- package/lib/components/Header/KandoNavbar/KandoNavbar.js +91 -46
- package/lib/components/Header/KandoNavbar/index.js +4 -1
- package/lib/components/Header/Slideshow/Slideshow.js +67 -31
- package/lib/components/Header/Slideshow/index.js +4 -1
- package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +7 -1
- package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +15 -2
- package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +15 -1
- package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +24 -7
- package/lib/components/Header/Toolbar/Toolbar.js +84 -46
- package/lib/components/InfoBar/InfoBar.js +23 -8
- package/lib/components/InfoBar/InfoBar.stories.js +8 -2
- package/lib/components/KandoModal/KandoModal.js +42 -19
- package/lib/components/KandoModal/index.js +4 -1
- package/lib/components/Link.js +11 -2
- package/lib/components/Links/CustomRedirect/CustomRedirect.js +12 -3
- package/lib/components/Links/StyledLink/StyledLink.js +16 -6
- package/lib/components/Links/StyledNavLink/StyledNavLink.js +14 -4
- package/lib/components/LiveEvents/CarouselSlide.js +11 -5
- package/lib/components/LiveEvents/LiveEvents.js +10 -1
- package/lib/components/LiveEvents/index.js +4 -1
- package/lib/components/LoaderByPercent/LoaderByPercent.js +23 -13
- package/lib/components/Map/Map.js +26 -12
- package/lib/components/Map/index.js +4 -1
- package/lib/components/Modal/Modal.js +10 -3
- package/lib/components/NarrowHeader.js +12 -1
- package/lib/components/PointInfo/PointInfo.js +22 -10
- package/lib/components/PointInfo/index.js +4 -1
- package/lib/components/PopupModal/PopupModal.js +17 -6
- package/lib/components/PopupModal/PopupModal.stories.js +11 -2
- package/lib/components/Sector/Sector.js +13 -4
- package/lib/components/Sector/Sector.test.js +8 -3
- package/lib/components/Sector/index.js +4 -1
- package/lib/components/Sector/sectorIcons.js +27 -1
- package/lib/components/SevereEvent/Eta/Eta.js +39 -14
- package/lib/components/SevereEvent/Eta/styles.js +5 -1
- package/lib/components/SevereEvent/SevereEvent.js +36 -15
- package/lib/components/Spinner/Spinner.js +10 -5
- package/lib/components/Spinner/Spinner.stories.js +8 -2
- package/lib/components/Spinner/index.js +4 -1
- package/lib/components/Spinner/styles.js +9 -1
- package/lib/components/Tabs/Tabs.js +24 -4
- package/lib/components/Tabs/Tabs.stories.js +8 -2
- package/lib/components/Tabs/assets/index.js +6 -1
- package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +12 -2
- package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +43 -12
- package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +36 -12
- package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +4 -1
- package/lib/components/TimeRangeSelector/TimeRangeHelper.js +29 -9
- package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +9 -4
- package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +4 -1
- package/lib/components/TimeRangeSelector/TimeRangeList.js +13 -4
- package/lib/components/TimeRangeSelector/TimeRangeOptions.js +24 -11
- package/lib/components/TimeRangeSelector/TimeRangeSelector.js +36 -11
- package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +10 -2
- package/lib/components/TimeRangeSelector/constants.js +2 -2
- package/lib/components/TimeRangeSelector/index.js +4 -1
- package/lib/components/Toggle/Toggle.js +21 -7
- package/lib/components/Toggle/index.js +4 -1
- package/lib/components/TrendGraph/TrendGraph.js +49 -16
- package/lib/components/TrendGraph/index.js +4 -1
- package/lib/components/TrendGraphNVL/TrendGraphNVL.js +36 -11
- package/lib/components/TrendGraphNVL/index.js +4 -1
- package/lib/development-environment/index.js +13 -1
- package/lib/development-environment/mock/browser.js +8 -1
- package/lib/development-environment/mock/get.js +5 -1
- package/lib/development-environment/mock/handlers.js +26 -1
- package/lib/development-environment/mock/mockBus.js +7 -2
- package/lib/development-environment/mock/mockObjects/area-trends-graph.js +1 -1
- package/lib/development-environment/mock/mockObjects/areaInformation.js +1 -1
- package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +1 -1
- package/lib/development-environment/mock/mockObjects/areaSitesData.js +1 -1
- package/lib/development-environment/mock/mockObjects/areasJson.js +1 -1
- package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +1 -1
- package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +1 -1
- package/lib/development-environment/mock/mockObjects/data-menuData.js +1 -1
- package/lib/development-environment/mock/mockObjects/data-search.js +1 -1
- package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +1 -1
- package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +1 -1
- package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +1 -1
- package/lib/development-environment/mock/mockObjects/eventsJson.js +1 -1
- package/lib/development-environment/mock/mockObjects/metascore.js +1 -1
- package/lib/development-environment/mock/mockObjects/permissionsJson.js +1 -1
- package/lib/development-environment/mock/mockObjects/pointsJson.js +1 -1
- package/lib/development-environment/mock/mockObjects/site-info.js +1 -1
- package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +1 -1
- package/lib/development-environment/togly/ToglyDashboard.js +22 -4
- package/lib/development-environment/togly/ToglyItem.js +25 -5
- package/lib/development-environment/togly/flags.js +1 -1
- package/lib/development-environment/togly/init.js +6 -1
- package/lib/development-environment/togly/macro.js +9 -7
- package/lib/development-environment/togly/useDoubleKeyDown.js +8 -1
- package/lib/development-environment/togly/useLocalStorage.js +19 -12
- package/lib/hooks/useApi.js +29 -10
- package/lib/hooks/useApiWithDashboardQuery.js +30 -10
- package/lib/hooks/useClickOutside.js +5 -1
- package/lib/hooks/useInitializeHeaders.js +7 -1
- package/lib/hooks/useKandoFetch.js +27 -13
- package/lib/hooks/useMap.js +35 -8
- package/lib/hooks/useNavContext.js +22 -13
- package/lib/hooks/useQueryURL.js +4 -1
- package/lib/hooks/useRemoveExistingLayers.js +7 -2
- package/lib/hooks/useUpdateEventBodyTail.js +10 -1
- package/lib/hooks/useUserTimeZone.js +9 -1
- package/lib/hooks/useUserTimeZone.test.js +9 -1
- package/lib/hooks/useWindowSize.js +19 -14
- package/lib/i18n/en.json +0 -9
- package/lib/i18n/en_uk.json +1 -1
- package/lib/i18n/he.json +1 -4
- package/lib/index.js +29 -20
- package/lib/macros/getVersion.js +3 -2
- package/lib/models/IAction.js +1 -1
- package/lib/models/IAppState.js +1 -1
- package/lib/pages/AreaPage/AreaPage.js +38 -13
- package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +17 -6
- package/lib/pages/AreaPage/Dashboard/Dashboard.js +23 -2
- package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +35 -11
- package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +8 -6
- package/lib/pages/AreaPage/Dashboard/Sites/Sites.js +65 -46
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +10 -1
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +15 -3
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +7 -3
- package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
- package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +1 -1
- package/lib/pages/AreaPage/Dashboard/Sites/styles.js +10 -2
- package/lib/pages/AssessmentPage/AssessmentPage.js +30 -5
- package/lib/pages/CannyWidget/Feedback.js +25 -10
- package/lib/pages/CovidPage/CovidPage.js +14 -1
- package/lib/pages/CovidPage/components/Body.js +33 -9
- package/lib/pages/CovidPage/components/Map.js +38 -20
- package/lib/pages/CovidPage/components/Sidebar.js +18 -4
- package/lib/pages/CovidPage/components/Summary.js +29 -8
- package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +36 -11
- package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +4 -1
- package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +42 -14
- package/lib/pages/CovidPage/components/TrendPopupContent/index.js +4 -1
- package/lib/pages/CovidPage/components/areas/Area.js +33 -6
- package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +45 -4
- package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +18 -5
- package/lib/pages/CovidPage/components/areas/AreasList.js +33 -14
- package/lib/pages/CovidPage/components/areas/Sort.js +19 -5
- package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -2
- package/lib/pages/EventsPage/Body/Body.js +19 -2
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +28 -11
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +31 -11
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +11 -4
- package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +11 -3
- package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +10 -5
- package/lib/pages/EventsPage/DragAndDropArea/index.js +4 -1
- package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +34 -9
- package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +21 -2
- package/lib/pages/EventsPage/EventsPage.js +13 -1
- package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +32 -9
- package/lib/pages/EventsPage/events/MoreInfo.js +19 -1
- package/lib/pages/EventsPage/events/Sidebar.js +18 -5
- package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +29 -5
- package/lib/pages/EventsPage/events/event_info/EventDetails.js +32 -8
- package/lib/pages/EventsPage/events/event_info/EventInfo.js +41 -12
- package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +14 -2
- package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +40 -10
- package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +12 -1
- package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +30 -8
- package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +8 -1
- package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/LineChartYear/LineChartYear.js +27 -7
- package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/MockHistoryInformation.js +10 -2
- package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +21 -5
- package/lib/pages/EventsPage/events/event_info/charts/EventDetailsLineChart.js +23 -4
- package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +22 -4
- package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +33 -6
- package/lib/pages/EventsPage/events/event_info/samplings/Sampling.js +15 -3
- package/lib/pages/EventsPage/events/event_info/samplings/Samplings.js +10 -2
- package/lib/pages/EventsPage/events/event_info/sources/Source.js +31 -8
- package/lib/pages/EventsPage/events/event_info/sources/Sources.js +20 -4
- package/lib/pages/EventsPage/events/events_list/EventItem.js +24 -3
- package/lib/pages/EventsPage/events/events_list/EventUtils.js +13 -2
- package/lib/pages/EventsPage/events/events_list/EventsList.js +102 -38
- package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +32 -11
- package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +96 -31
- package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +55 -10
- package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +17 -5
- package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +38 -15
- package/lib/pages/EventsPage/events/events_list/Sort.js +23 -4
- package/lib/pages/ImportFileWizard/FileUploadRespones.js +19 -4
- package/lib/pages/ImportFileWizard/ImportButtomButtons.js +8 -2
- package/lib/pages/ImportFileWizard/ImportFile.js +29 -10
- package/lib/pages/ImportFileWizard/ResponseBody.js +12 -3
- package/lib/pages/ImportFileWizard/ValidationForm.js +27 -7
- package/lib/pages/ImportFileWizard/ValidationResponse.js +30 -6
- package/lib/pages/ImportFileWizard/importFileUtils.js +2 -1
- package/lib/pages/ImportFileWizard/index.js +4 -1
- package/lib/pages/ImportGisPage/ImportGisContainer.js +27 -7
- package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +27 -10
- package/lib/pages/ImportGisPage/importGisUtils.js +13 -1
- package/lib/pages/ImportGisProcess/index.js +18 -4
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +19 -5
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +10 -3
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +8 -1
- package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +58 -25
- package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +8 -2
- package/lib/pages/NotificationsPage/Notification/Notification.js +16 -8
- package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
- package/lib/pages/NotificationsPage/Notifications.mock.js +1 -1
- package/lib/pages/NotificationsPage/Notifications.stories.js +10 -2
- package/lib/pages/NotificationsPage/NotificationsPage.js +35 -11
- package/lib/pages/NotificationsPage/assets/index.js +24 -15
- package/lib/pages/NotificationsPageV2/NotificationsPage.js +83 -35
- package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +24 -4
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +41 -16
- package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +49 -18
- package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +47 -4
- package/lib/pages/NotificationsPageV2/notificationUtils.js +30 -2
- package/lib/pages/OldSitePage/IDashboardData.js +1 -1
- package/lib/pages/OldSitePage/OldSitePage.js +77 -16
- package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +16 -3
- package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +8 -2
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -4
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +12 -5
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -2
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +23 -7
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +20 -6
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +10 -4
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -2
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +24 -9
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +12 -4
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +59 -28
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
- package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +18 -3
- package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +15 -2
- package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +16 -8
- package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +16 -1
- package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
- package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +10 -2
- package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +7 -2
- package/lib/pages/ProfilePage/Container.js +5 -1
- package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +43 -16
- package/lib/pages/ProfilePage/ProfilePage.js +130 -73
- package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +32 -9
- package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +17 -7
- package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +14 -3
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +44 -7
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +21 -4
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +15 -7
- package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +29 -8
- package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +25 -6
- package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +21 -9
- package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +13 -1
- package/lib/pages/SamplingsPage/DesktopActions/index.js +4 -1
- package/lib/pages/SamplingsPage/NavigationDropdown.js +21 -3
- package/lib/pages/SamplingsPage/NewSamplingAction.js +84 -38
- package/lib/pages/SamplingsPage/SamplingMobileModal.js +65 -12
- package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +19 -5
- package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +13 -2
- package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +56 -22
- package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +20 -4
- package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +14 -1
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +107 -34
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +42 -11
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +47 -14
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +49 -15
- package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +21 -5
- package/lib/pages/SamplingsPage/SamplingProperties/styles.js +8 -2
- package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +11 -1
- package/lib/pages/SamplingsPage/SamplingsMobileItem.js +36 -7
- package/lib/pages/SamplingsPage/SamplingsMobileList.js +34 -10
- package/lib/pages/SamplingsPage/SamplingsPage.js +39 -14
- package/lib/pages/SamplingsPage/SamplingsPageContainer.js +48 -14
- package/lib/pages/SamplingsPage/index.js +3 -1
- package/lib/pages/SamplingsPage/samplingsPageUtils.js +30 -7
- package/lib/pages/SitePage/DischargePattern/DischargePattern.js +10 -2
- package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +8 -2
- package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +17 -3
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +11 -6
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +23 -15
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +16 -7
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +27 -18
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -2
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +26 -9
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +20 -6
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +10 -4
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -2
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +24 -9
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +12 -4
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +68 -32
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
- package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +19 -4
- package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +15 -2
- package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +38 -17
- package/lib/pages/SitePage/SamplingParameters/dataParser.js +29 -13
- package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +7 -3
- package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
- package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +10 -2
- package/lib/pages/SitePage/SamplingParameters/styles/styles.js +8 -2
- package/lib/pages/SitePage/SiteInformation/ContributorItem.js +12 -5
- package/lib/pages/SitePage/SiteInformation/EmptyState.js +10 -1
- package/lib/pages/SitePage/SiteInformation/PollutionContributor.js +15 -5
- package/lib/pages/SitePage/SiteInformation/SiteInformation.js +48 -17
- package/lib/pages/SitePage/SiteInformation/style.js +8 -2
- package/lib/pages/SitePage/SitePage.js +49 -10
- package/lib/pages/UploadLabResult/index.js +8 -1
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +59 -19
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +9 -2
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +16 -2
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +8 -2
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +35 -9
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +5 -1
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +7 -1
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +10 -1
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +16 -7
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
- package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +15 -22
- package/lib/pages/UtilityDashboardPage/TopBar/styles.js +5 -1
- package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +30 -17
- package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +19 -13
- package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +18 -8
- package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +20 -5
- package/lib/pages/WbeDashboard/ExpandableComponent.js +12 -2
- package/lib/pages/WbeDashboard/GraphWrapper.js +27 -6
- package/lib/pages/WbeDashboard/IndividualTinyGraph.js +19 -6
- package/lib/pages/WbeDashboard/SearchInput.js +22 -4
- package/lib/pages/WbeDashboard/SummaryGraph.js +49 -16
- package/lib/pages/WbeDashboard/SummaryGraphModal.js +13 -1
- package/lib/pages/WbeDashboard/Tabs.js +9 -3
- package/lib/pages/WbeDashboard/WbeDashboardPage.js +114 -25
- package/lib/pages/WbeDashboard/WbeSummaryBar.js +43 -9
- package/lib/providers/Slideshow/SlideshowContext.js +5 -3
- package/lib/providers/Slideshow/SlideshowProvider.js +31 -16
- package/lib/providers/Slideshow/SlideshowRunner.js +17 -7
- package/lib/providers/UrlHistory/UrlHistoryContext.js +7 -3
- package/lib/providers/UrlHistory/UrlHistoryProvider.js +13 -1
- package/lib/providers/UrlHistory/index.js +8 -5
- package/lib/providers/UrlHistory/useLastVisited.js +7 -1
- package/lib/react-app-env.d.js +1 -1
- package/lib/store/ImportGis/action.js +1 -1
- package/lib/store/ImportGis/actionTypes.js +2 -1
- package/lib/store/ImportGis/actionsCreator.js +17 -7
- package/lib/store/ImportGis/models/gisImports.js +1 -1
- package/lib/store/ImportGis/reducer.js +17 -1
- package/lib/store/WBE/actionTypes.js +1 -1
- package/lib/store/WBE/actions.js +3 -1
- package/lib/store/WBE/models/IAreaWBE.js +1 -1
- package/lib/store/WBE/models/IWBE.js +1 -1
- package/lib/store/WBE/models/IWBEState.js +1 -1
- package/lib/store/WBE/reducer.js +9 -2
- package/lib/store/areas/actionTypes.js +2 -2
- package/lib/store/areas/actions.js +11 -2
- package/lib/store/areas/models/IArea.js +1 -1
- package/lib/store/areas/models/IAreasState.js +1 -1
- package/lib/store/areas/reducer.js +9 -1
- package/lib/store/context/actionTypes.js +2 -2
- package/lib/store/context/actions.js +6 -2
- package/lib/store/context/contextMiddlewares.js +9 -1
- package/lib/store/context/models/INavContext.js +1 -1
- package/lib/store/context/models/INavContextState.js +1 -1
- package/lib/store/context/reducer.js +9 -2
- package/lib/store/dashboard/dashboardSlice.js +3 -1
- package/lib/store/dashboard/periodType.js +1 -1
- package/lib/store/edges/actionTypes.js +2 -2
- package/lib/store/edges/actions.js +9 -3
- package/lib/store/edges/models/IEdge.js +1 -1
- package/lib/store/edges/models/IEdgesState.js +1 -1
- package/lib/store/edges/reducer.js +16 -2
- package/lib/store/events/actionTypes.js +2 -2
- package/lib/store/events/actions.js +28 -10
- package/lib/store/events/models/IEvent.js +1 -1
- package/lib/store/events/models/IEventsState.js +1 -1
- package/lib/store/events/models/ISource.js +1 -1
- package/lib/store/events/reducer.js +41 -3
- package/lib/store/filters/IFilter.js +1 -1
- package/lib/store/filters/IFilterItem.js +1 -1
- package/lib/store/global/actionTypes.js +2 -2
- package/lib/store/global/actions.js +20 -8
- package/lib/store/global/models/IGlobalState.js +1 -1
- package/lib/store/global/reducer.js +18 -2
- package/lib/store/permissions/permissionsSlice.js +6 -1
- package/lib/store/points/actionTypes.js +2 -2
- package/lib/store/points/actions.js +5 -1
- package/lib/store/points/models/IGroup.js +1 -1
- package/lib/store/points/models/IPoint.js +1 -1
- package/lib/store/points/models/IPointsState.js +1 -1
- package/lib/store/points/reducer.js +7 -1
- package/lib/store/rootActionTypes.js +1 -1
- package/lib/store/rootActions.js +3 -1
- package/lib/store/rootReducer.js +23 -4
- package/lib/store/rootStore.js +12 -4
- package/lib/store/samplings/action.js +1 -1
- package/lib/store/samplings/actionTypes.js +2 -1
- package/lib/store/samplings/actionsCreator.js +5 -2
- package/lib/store/samplings/models/Samplings.js +1 -1
- package/lib/store/samplings/reducer.js +9 -1
- package/lib/styles/StylesLayout.js +7 -1
- package/lib/styles/theme/theme.js +4 -2
- package/lib/test/mocks/browser.js +7 -3
- package/lib/test/test-utils.js +21 -11
- package/lib/ui-kit/Button/Button.js +23 -15
- package/lib/ui-kit/Button/Button.test.js +26 -6
- package/lib/ui-kit/Button/ButtonUtils.js +1 -1
- package/lib/ui-kit/Checkbox/Checkbox.js +21 -7
- package/lib/ui-kit/DropDown/DropDown.js +16 -5
- package/lib/ui-kit/DropDown/DropDown.test.js +12 -6
- package/lib/ui-kit/DropDown/DropDownItem.js +13 -5
- package/lib/ui-kit/DropDown/DropdownToggle.js +13 -2
- package/lib/ui-kit/IconAction/IconAction.js +9 -3
- package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +54 -16
- package/lib/ui-kit/InfoTooltip/InfoTooltip.js +28 -24
- package/lib/ui-kit/KandoList/KandoList.js +16 -5
- package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
- package/lib/ui-kit/KandoTable/KandoTable.js +36 -22
- package/lib/ui-kit/KandoTable/KandoTable.test.js +16 -1
- package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
- package/lib/ui-kit/Layout/Layout.js +8 -1
- package/lib/ui-kit/MobileInput/MobileInput.js +33 -18
- package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +14 -8
- package/lib/ui-kit/ModalConfirmation/index.js +3 -1
- package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +10 -5
- package/lib/ui-kit/SamplingStatus/SamplingStatus.js +11 -3
- package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +11 -4
- package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +14 -5
- package/lib/ui-kit/Tooltip/Tooltip.js +8 -3
- package/lib/ui-kit/index.js +15 -1
- package/lib/ui-kit/kandoStepper/KandoStepper.js +7 -2
- package/lib/utilities/ActionUtility.js +2 -1
- package/lib/utilities/Alert.js +10 -2
- package/lib/utilities/Analytics.js +12 -2
- package/lib/utilities/Array.js +6 -2
- package/lib/utilities/Enum.js +16 -12
- package/lib/utilities/ErrorBoundary.js +18 -3
- package/lib/utilities/File.js +24 -5
- package/lib/utilities/GetDir.js +8 -4
- package/lib/utilities/KandoDate.js +7 -1
- package/lib/utilities/KandoModal.js +22 -7
- package/lib/utilities/LocalStorage.js +13 -2
- package/lib/utilities/ThousandsToK.js +3 -1
- package/lib/utilities/TimeFormat.js +19 -6
- package/lib/utilities/Truncate.js +27 -7
- package/lib/utilities/edgesMath.js +25 -5
- package/lib/utilities/i18n.js +14 -1
- package/lib/utilities/kql.js +10 -3
- package/lib/utilities/map/icons.js +18 -1
- package/lib/utilities/scoreToColor.js +8 -1
- package/lib/utilities/time.js +9 -2
- package/lib/utilities/uploadToS3.js +9 -1
- package/lib/utilities/urls.js +12 -27
- package/package.json +1 -3
- package/lib/pages/UtilityDashboardPage/TopBar/constants.js +0 -17
- package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +0 -67
|
@@ -1,70 +1,95 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
|
-
exports.
|
|
8
|
+
exports.addLayerGroup = exports.removeLayerGroup = exports.bindPopupToMarker = exports.handleMarkerClick = exports.popupContent = exports.createSamplingIcons = exports.createObservationIconPoint = exports.createSamplingIconPoint = exports.markerBelongsToSource = exports.markerBelongsToSelectedSource = exports.belongsToSourceBackground = exports.selectedBackground = exports.combinedWWTPIcon = exports.combinedCollectorsIcon = exports.combinedPumpStationIcon = exports.combinedFactoryIcon = exports.standardBackground = exports.matchIconToPoint = exports.createManholePoint = exports.createBubblePoint = exports.isCollectorFocused = void 0;
|
|
9
|
+
|
|
8
10
|
var _lineChart = _interopRequireDefault(require("../../../assets/line-chart.svg"));
|
|
11
|
+
|
|
9
12
|
var _leaflet = _interopRequireDefault(require("leaflet"));
|
|
13
|
+
|
|
10
14
|
var _i18n = _interopRequireDefault(require("../../../utilities/i18n"));
|
|
15
|
+
|
|
11
16
|
var _blueCircle = _interopRequireDefault(require("../../../assets/point_icons/blue-circle.svg"));
|
|
17
|
+
|
|
12
18
|
var _samplingIcon = _interopRequireDefault(require("../../../assets/point_icons/sampling-icon.svg"));
|
|
19
|
+
|
|
13
20
|
var _pinkCircle = _interopRequireDefault(require("../../../assets/point_icons/pink-circle.svg"));
|
|
21
|
+
|
|
14
22
|
var _observationIcon = _interopRequireDefault(require("../../../assets/point_icons/observation-icon.svg"));
|
|
23
|
+
|
|
15
24
|
var _redPinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/red-pin-red-shadow.png"));
|
|
25
|
+
|
|
16
26
|
var _whitePinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-red-shadow.png"));
|
|
27
|
+
|
|
17
28
|
var _whitePinBlackShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-black-shadow.png"));
|
|
29
|
+
|
|
18
30
|
var _yellowCircle = _interopRequireDefault(require("../../../assets/point_icons/yellow-circle.svg"));
|
|
31
|
+
|
|
19
32
|
var _factoryIcon = _interopRequireDefault(require("../../../assets/point_icons/factory-icon.svg"));
|
|
33
|
+
|
|
20
34
|
var _greenCircle = _interopRequireDefault(require("../../../assets/point_icons/green-circle.svg"));
|
|
35
|
+
|
|
21
36
|
var _pumpStationIcon = _interopRequireDefault(require("../../../assets/point_icons/pump-station-icon.svg"));
|
|
37
|
+
|
|
22
38
|
var _pinWater = _interopRequireDefault(require("../../../assets/map/pin-water.svg"));
|
|
39
|
+
|
|
23
40
|
var _brightBlueCircle = _interopRequireDefault(require("../../../assets/point_icons/bright-blue-circle.svg"));
|
|
41
|
+
|
|
24
42
|
var _WWTPIcon = _interopRequireDefault(require("../../../assets/point_icons/WWTP-icon.svg"));
|
|
43
|
+
|
|
25
44
|
var _waterNoBackground = _interopRequireDefault(require("../../../assets/point_icons/water-no-background.svg"));
|
|
45
|
+
|
|
26
46
|
var _whitePoint = _interopRequireDefault(require("../../../assets/white-point.png"));
|
|
47
|
+
|
|
27
48
|
var _MapUtils = require("../MapUtils");
|
|
49
|
+
|
|
28
50
|
var _PointIcon = require("./PointIcon");
|
|
51
|
+
|
|
29
52
|
var _water_reuse = _interopRequireDefault(require("../../../assets/icons/water_reuse.svg"));
|
|
53
|
+
|
|
30
54
|
var isCollectorFocused = function isCollectorFocused(point, event) {
|
|
31
55
|
var _event$observations;
|
|
56
|
+
|
|
32
57
|
return (event === null || event === void 0 ? void 0 : (_event$observations = event.observations) === null || _event$observations === void 0 ? void 0 : _event$observations.length) === 1 && point.id === event.observations[0].point_id;
|
|
33
58
|
};
|
|
59
|
+
|
|
34
60
|
exports.isCollectorFocused = isCollectorFocused;
|
|
61
|
+
|
|
35
62
|
var buildManholeTootipString = function buildManholeTootipString(point) {
|
|
36
63
|
var string = "".concat(point.group.name, " ");
|
|
64
|
+
|
|
37
65
|
if (point.group.type === 'Groups::Factory') {
|
|
38
66
|
string += "<br/>Sector-TBD: ".concat(point.group.sector_name);
|
|
39
67
|
string += "<br/>Water Consumption-TBD: ".concat(point.group.water_consumption_per_day);
|
|
40
68
|
} else {
|
|
41
69
|
string = "".concat(point.name);
|
|
42
70
|
}
|
|
43
|
-
return string;
|
|
44
|
-
};
|
|
45
71
|
|
|
46
|
-
|
|
72
|
+
return string;
|
|
73
|
+
}; // @ts-ignore
|
|
47
74
|
// iconSize: [width, height],
|
|
48
75
|
// IconAnchor: [(-right)(+left), (-down)(+up)]
|
|
76
|
+
|
|
77
|
+
|
|
49
78
|
var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered, layerGroup) {
|
|
50
79
|
var subtitle = point.group.type === 'Groups::Factory' ? point.group.sector_name : '';
|
|
80
|
+
|
|
51
81
|
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
52
|
-
icon: (0, _PointIcon.getPointIconByType)(point.group.type, point.name, subtitle, false, false),
|
|
82
|
+
icon: (0, _PointIcon.getPointIconByType)(point.group.type, point.name, subtitle, false, false, 0),
|
|
53
83
|
riseOnHover: false
|
|
54
|
-
});
|
|
55
|
-
// @ts-ignore
|
|
84
|
+
}); // @ts-ignore
|
|
56
85
|
// pointCustomIcon.bindTooltip(buildManholeTootipString(point));
|
|
86
|
+
|
|
87
|
+
|
|
57
88
|
pointCustomIcon['kando_object_id'] = point.id;
|
|
58
89
|
pointCustomIcon['kando_object'] = 'Point';
|
|
59
90
|
if (hovered) pointCustomIcon['kando_object'] = 'PointHovered';
|
|
60
91
|
layerGroup.addLayer(pointCustomIcon);
|
|
61
|
-
if (point.group.type === 'Groups::Factory') {
|
|
62
|
-
bindPopupToMarker(point, pointCustomIcon);
|
|
63
92
|
|
|
64
|
-
//The following is being called for every point, we should do that on the layerGroup level which will happen once
|
|
65
|
-
//It is noticed when there are thousands of points
|
|
66
|
-
handleMarkerClick(map, point, pointCustomIcon);
|
|
67
|
-
}
|
|
68
93
|
if (point.relatedEventsAmount) {
|
|
69
94
|
var _pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
70
95
|
icon: _leaflet.default.divIcon({
|
|
@@ -75,22 +100,28 @@ var createBubblePoint = function createBubblePoint(markerLocation, point, map, h
|
|
|
75
100
|
riseOnHover: false,
|
|
76
101
|
opacity: hovered ? 1 : 0
|
|
77
102
|
});
|
|
103
|
+
|
|
78
104
|
_pointCustomIcon['kando_object_id'] = point.id;
|
|
79
105
|
_pointCustomIcon['kando_object'] = 'IconNumber';
|
|
80
|
-
if (hovered) _pointCustomIcon['kando_object'] = 'IconNumberHovered';
|
|
106
|
+
if (hovered) _pointCustomIcon['kando_object'] = 'IconNumberHovered'; // @ts-ignore
|
|
107
|
+
//layerGroup.addLayer(pointCustomIcon);
|
|
81
108
|
}
|
|
82
109
|
};
|
|
110
|
+
|
|
83
111
|
exports.createBubblePoint = createBubblePoint;
|
|
112
|
+
|
|
84
113
|
var createManholePoint = function createManholePoint(markerLocation, point, map, hovered, layerGroup) {
|
|
85
|
-
var pointIcon =
|
|
114
|
+
var pointIcon = _leaflet.default.icon({
|
|
86
115
|
iconUrl: _whitePoint.default,
|
|
87
116
|
iconSize: [9, 9],
|
|
88
117
|
iconAnchor: [4.5, 4.5]
|
|
89
118
|
});
|
|
90
|
-
|
|
119
|
+
|
|
120
|
+
var manholeIcon = _leaflet.default.marker(markerLocation, {
|
|
91
121
|
icon: pointIcon,
|
|
92
122
|
riseOnHover: true
|
|
93
123
|
});
|
|
124
|
+
|
|
94
125
|
manholeIcon.bindTooltip(buildManholeTootipString(point));
|
|
95
126
|
manholeIcon['kando_object_id'] = point.id;
|
|
96
127
|
manholeIcon['kando_object'] = 'Point';
|
|
@@ -98,7 +129,9 @@ var createManholePoint = function createManholePoint(markerLocation, point, map,
|
|
|
98
129
|
if (hovered) manholeIcon['kando_object'] = 'PointHovered';
|
|
99
130
|
layerGroup.addLayer(manholeIcon);
|
|
100
131
|
};
|
|
132
|
+
|
|
101
133
|
exports.createManholePoint = createManholePoint;
|
|
134
|
+
|
|
102
135
|
var matchIconToPoint = function matchIconToPoint(point, event) {
|
|
103
136
|
switch (point.group.type) {
|
|
104
137
|
case 'Groups::Factory':
|
|
@@ -111,7 +144,9 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
|
|
|
111
144
|
combinedFactoryIcon.unshift(standardBackground());
|
|
112
145
|
}
|
|
113
146
|
}
|
|
147
|
+
|
|
114
148
|
return combinedFactoryIcon;
|
|
149
|
+
|
|
115
150
|
case 'Groups::PumpStation':
|
|
116
151
|
if (combinedPumpStationIcon.length === 2) {
|
|
117
152
|
if (markerBelongsToSelectedSource(event, point)) {
|
|
@@ -122,7 +157,9 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
|
|
|
122
157
|
combinedPumpStationIcon.unshift(standardBackground());
|
|
123
158
|
}
|
|
124
159
|
}
|
|
160
|
+
|
|
125
161
|
return combinedPumpStationIcon;
|
|
162
|
+
|
|
126
163
|
case 'Groups::WastewaterTreatmentPlant':
|
|
127
164
|
if (combinedWWTPIcon.length === 2) {
|
|
128
165
|
if (markerBelongsToSelectedSource(event, point)) {
|
|
@@ -133,7 +170,9 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
|
|
|
133
170
|
combinedWWTPIcon.unshift(standardBackground());
|
|
134
171
|
}
|
|
135
172
|
}
|
|
173
|
+
|
|
136
174
|
return combinedWWTPIcon;
|
|
175
|
+
|
|
137
176
|
case 'Groups::Collectors':
|
|
138
177
|
if (isCollectorFocused(point, event)) {
|
|
139
178
|
return [_leaflet.default.icon({
|
|
@@ -147,12 +186,16 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
|
|
|
147
186
|
popupAnchor: [0, -30]
|
|
148
187
|
})];
|
|
149
188
|
}
|
|
189
|
+
|
|
150
190
|
return combinedCollectorsIcon;
|
|
191
|
+
|
|
151
192
|
default:
|
|
152
193
|
return null;
|
|
153
194
|
}
|
|
154
195
|
};
|
|
196
|
+
|
|
155
197
|
exports.matchIconToPoint = matchIconToPoint;
|
|
198
|
+
|
|
156
199
|
var standardBackground = function standardBackground() {
|
|
157
200
|
var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
158
201
|
var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
@@ -163,6 +206,7 @@ var standardBackground = function standardBackground() {
|
|
|
163
206
|
popupAnchor: [0, -30]
|
|
164
207
|
});
|
|
165
208
|
};
|
|
209
|
+
|
|
166
210
|
exports.standardBackground = standardBackground;
|
|
167
211
|
var combinedFactoryIcon = [_leaflet.default.icon({
|
|
168
212
|
iconUrl: _yellowCircle.default,
|
|
@@ -207,6 +251,7 @@ var combinedWWTPIcon = [_leaflet.default.icon({
|
|
|
207
251
|
popupAnchor: [0, -30]
|
|
208
252
|
})];
|
|
209
253
|
exports.combinedWWTPIcon = combinedWWTPIcon;
|
|
254
|
+
|
|
210
255
|
var selectedBackground = function selectedBackground() {
|
|
211
256
|
return _leaflet.default.icon({
|
|
212
257
|
iconUrl: _redPinRedShadow.default,
|
|
@@ -215,7 +260,9 @@ var selectedBackground = function selectedBackground() {
|
|
|
215
260
|
popupAnchor: [0, -30]
|
|
216
261
|
});
|
|
217
262
|
};
|
|
263
|
+
|
|
218
264
|
exports.selectedBackground = selectedBackground;
|
|
265
|
+
|
|
219
266
|
var belongsToSourceBackground = function belongsToSourceBackground() {
|
|
220
267
|
return _leaflet.default.icon({
|
|
221
268
|
iconUrl: _whitePinRedShadow.default,
|
|
@@ -224,24 +271,32 @@ var belongsToSourceBackground = function belongsToSourceBackground() {
|
|
|
224
271
|
popupAnchor: [0, -30]
|
|
225
272
|
});
|
|
226
273
|
};
|
|
274
|
+
|
|
227
275
|
exports.belongsToSourceBackground = belongsToSourceBackground;
|
|
276
|
+
|
|
228
277
|
var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
|
|
229
278
|
var source;
|
|
279
|
+
|
|
230
280
|
if (event !== null && event !== undefined) {
|
|
231
281
|
source = event.sources.filter(function (source) {
|
|
232
282
|
return source.point_id === point.id;
|
|
233
283
|
})[0];
|
|
234
284
|
}
|
|
285
|
+
|
|
235
286
|
return event !== null && source && event.selected_source === source.point_id;
|
|
236
287
|
};
|
|
288
|
+
|
|
237
289
|
exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
|
|
290
|
+
|
|
238
291
|
var markerBelongsToSource = function markerBelongsToSource(event, point) {
|
|
239
292
|
if (event === undefined) return;
|
|
240
293
|
return event !== null && event.sources.filter(function (source) {
|
|
241
294
|
return source.point_id === point.id;
|
|
242
295
|
})[0];
|
|
243
296
|
};
|
|
297
|
+
|
|
244
298
|
exports.markerBelongsToSource = markerBelongsToSource;
|
|
299
|
+
|
|
245
300
|
var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
|
|
246
301
|
// iconSize: [width, height],
|
|
247
302
|
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
@@ -257,6 +312,7 @@ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, s
|
|
|
257
312
|
popupAnchor: [0, -30]
|
|
258
313
|
})];
|
|
259
314
|
var thirdIcon = false;
|
|
315
|
+
|
|
260
316
|
if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
|
|
261
317
|
samplingIcon.unshift(selectedBackground());
|
|
262
318
|
} else if (markerBelongsToSource(event, point) && !secondaryIcon) {
|
|
@@ -265,11 +321,13 @@ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, s
|
|
|
265
321
|
thirdIcon = true;
|
|
266
322
|
samplingIcon.unshift(standardBackground(secondaryIcon, thirdIcon));
|
|
267
323
|
}
|
|
324
|
+
|
|
268
325
|
samplingIcon.forEach(function (icon, index) {
|
|
269
326
|
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
270
327
|
icon: icon,
|
|
271
328
|
riseOnHover: false
|
|
272
329
|
});
|
|
330
|
+
|
|
273
331
|
pointCustomIcon.bindTooltip(buildManholeTootipString(point));
|
|
274
332
|
pointCustomIcon['kando_index_object'] = index;
|
|
275
333
|
pointCustomIcon['kando_few_layer_icon'] = true;
|
|
@@ -281,7 +339,9 @@ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, s
|
|
|
281
339
|
layerGroup.addLayer(pointCustomIcon);
|
|
282
340
|
});
|
|
283
341
|
};
|
|
342
|
+
|
|
284
343
|
exports.createSamplingIconPoint = createSamplingIconPoint;
|
|
344
|
+
|
|
285
345
|
var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
|
|
286
346
|
// iconSize: [width, height],
|
|
287
347
|
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
@@ -296,6 +356,7 @@ var createObservationIconPoint = function createObservationIconPoint(markerLocat
|
|
|
296
356
|
iconAnchor: secondaryIcon ? [-8, 38] : [5, 30],
|
|
297
357
|
popupAnchor: [0, -30]
|
|
298
358
|
})];
|
|
359
|
+
|
|
299
360
|
if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
|
|
300
361
|
observationIcon.unshift(selectedBackground());
|
|
301
362
|
} else if (markerBelongsToSource(event, point) && !secondaryIcon) {
|
|
@@ -303,11 +364,13 @@ var createObservationIconPoint = function createObservationIconPoint(markerLocat
|
|
|
303
364
|
} else {
|
|
304
365
|
observationIcon.unshift(standardBackground(secondaryIcon));
|
|
305
366
|
}
|
|
367
|
+
|
|
306
368
|
observationIcon.forEach(function (icon, index) {
|
|
307
369
|
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
308
370
|
icon: icon,
|
|
309
371
|
riseOnHover: false
|
|
310
372
|
});
|
|
373
|
+
|
|
311
374
|
pointCustomIcon.bindTooltip(buildManholeTootipString(point));
|
|
312
375
|
pointCustomIcon['kando_index_object'] = index;
|
|
313
376
|
pointCustomIcon['kando_few_layer_icon'] = true;
|
|
@@ -319,16 +382,21 @@ var createObservationIconPoint = function createObservationIconPoint(markerLocat
|
|
|
319
382
|
layerGroup.addLayer(pointCustomIcon);
|
|
320
383
|
});
|
|
321
384
|
};
|
|
385
|
+
|
|
322
386
|
exports.createObservationIconPoint = createObservationIconPoint;
|
|
387
|
+
|
|
323
388
|
var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered, layerGroup) {
|
|
324
389
|
var sampledPointIds = event.samplings.map(function (s) {
|
|
325
390
|
return s.point_id;
|
|
326
391
|
});
|
|
392
|
+
|
|
327
393
|
if (event !== null && event.samplings.length !== 0 && sampledPointIds.includes(point.id)) {
|
|
328
394
|
createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered, layerGroup);
|
|
329
395
|
}
|
|
330
396
|
};
|
|
397
|
+
|
|
331
398
|
exports.createSamplingIcons = createSamplingIcons;
|
|
399
|
+
|
|
332
400
|
var popupContent = function popupContent(obs, point) {
|
|
333
401
|
if (obs === null) {
|
|
334
402
|
return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(point.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <hr/>\n \n <div id=\"sector\"></div>\n </div>\n </div>\n ");
|
|
@@ -336,22 +404,34 @@ var popupContent = function popupContent(obs, point) {
|
|
|
336
404
|
return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(obs.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <div class=\"popup-content__severity\">\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.severity"), "</p>\n <span class=\"").concat('popup-content__severity--' + obs.severity, "\">\n <b class=\"popup-content__severity-b\">\n ").concat(_i18n.default.t("events_overview.severities.".concat(obs.severity)), "\n </b>\n </span>\n </div>\n \n <hr class=\"popup-content__hr\" />\n\n <div class=\"popup-content__discharge-time\">\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.first_seen"), ":</p>\n <span><b id=\"first-seen-popup\"></b></span>\n </div>\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.last_seen"), ":</p>\n <span><b id=\"last-seen-popup\"></b></span>\n </div> \n </div>\n </div>\n </div>\n ");
|
|
337
405
|
}
|
|
338
406
|
};
|
|
407
|
+
|
|
339
408
|
exports.popupContent = popupContent;
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
409
|
+
|
|
410
|
+
var handleMarkerClick = function handleMarkerClick(map, point, layerGroup) {
|
|
411
|
+
var setIcon = function setIcon(element, clicked) {
|
|
412
|
+
element.layer.setIcon((0, _PointIcon.getPointIconByType)(point.group.type, point.name, point.group.sector_name, clicked, false, 0));
|
|
413
|
+
};
|
|
414
|
+
|
|
415
|
+
layerGroup.on('click', function (originallyClickedElement) {
|
|
416
|
+
map.on('zoomstart', function () {
|
|
417
|
+
map.closePopup();
|
|
418
|
+
});
|
|
419
|
+
setIcon(originallyClickedElement, true);
|
|
420
|
+
map.on('click', function (anyPotentialMapElement) {
|
|
421
|
+
if (anyPotentialMapElement._leaflet_id !== originallyClickedElement.layer._leaflet_id) {
|
|
422
|
+
setIcon(originallyClickedElement, false);
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
layerGroup.on('popupclose', function () {
|
|
426
|
+
setTimeout(function () {
|
|
427
|
+
setIcon(originallyClickedElement, false);
|
|
428
|
+
}, 50);
|
|
429
|
+
});
|
|
352
430
|
});
|
|
353
431
|
};
|
|
432
|
+
|
|
354
433
|
exports.handleMarkerClick = handleMarkerClick;
|
|
434
|
+
|
|
355
435
|
var bindPopupToMarker = function bindPopupToMarker(point, layerGroup) {
|
|
356
436
|
var content = "\n <div class='main-content'>\n <div class='main-content__header'>\n <div class=\"main-content__header__titles\">\n <div class='main-content__header__titles__title'>".concat(point.name, "</div>\n <div class='main-content__header__titles__subtitle'>").concat(point.group.sector_name, "</div>\n </div>\n </div>\n \n <div class='main-content__body'>\n <div class='main-content__body__item'>\n <div class='main-content__body__item__icon'>\n <img src='").concat(_water_reuse.default, "' />\n </div>\n <div class='main-content__body__item__titles'>\n <div class='main-content__body__item__titles__title'>").concat(point.group.water_consumption_per_day, " ").concat(_i18n.default.t('million_gallons_day'), "</div>\n <div class='main-content__body__item__titles__subtitle'>").concat(_i18n.default.t('water_discharge'), "</div>\n </div>\n </div>\n </div>\n </div>\n ");
|
|
357
437
|
layerGroup.bindPopup(content, {
|
|
@@ -361,20 +441,22 @@ var bindPopupToMarker = function bindPopupToMarker(point, layerGroup) {
|
|
|
361
441
|
closeButton: false
|
|
362
442
|
});
|
|
363
443
|
};
|
|
444
|
+
|
|
364
445
|
exports.bindPopupToMarker = bindPopupToMarker;
|
|
446
|
+
|
|
365
447
|
var removeLayerGroup = function removeLayerGroup(map, layerGroup) {
|
|
366
448
|
if (map.hasLayer(layerGroup)) {
|
|
367
449
|
map.removeLayer(layerGroup);
|
|
368
450
|
}
|
|
369
451
|
};
|
|
452
|
+
|
|
370
453
|
exports.removeLayerGroup = removeLayerGroup;
|
|
454
|
+
|
|
371
455
|
var addLayerGroup = function addLayerGroup(map, layerGroup) {
|
|
372
456
|
if (!map.hasLayer(layerGroup)) {
|
|
373
457
|
map.addLayer(layerGroup);
|
|
374
|
-
} else {
|
|
375
|
-
removeLayerGroup(map, layerGroup);
|
|
376
|
-
addLayerGroup(map, layerGroup);
|
|
377
458
|
}
|
|
378
459
|
};
|
|
460
|
+
|
|
379
461
|
exports.addLayerGroup = addLayerGroup;
|
|
380
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwicG9pbnQiLCJldmVudCIsIl9ldmVudCRvYnNlcnZhdGlvbnMiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJpZCIsInBvaW50X2lkIiwiZXhwb3J0cyIsImJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyIsInN0cmluZyIsImNvbmNhdCIsImdyb3VwIiwibmFtZSIsInR5cGUiLCJzZWN0b3JfbmFtZSIsIndhdGVyX2NvbnN1bXB0aW9uX3Blcl9kYXkiLCJjcmVhdGVCdWJibGVQb2ludCIsIm1hcmtlckxvY2F0aW9uIiwibWFwIiwiaG92ZXJlZCIsImxheWVyR3JvdXAiLCJzdWJ0aXRsZSIsInBvaW50Q3VzdG9tSWNvbiIsIkwiLCJtYXJrZXIiLCJpY29uIiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwicmlzZU9uSG92ZXIiLCJhZGRMYXllciIsImJpbmRQb3B1cFRvTWFya2VyIiwiaGFuZGxlTWFya2VyQ2xpY2siLCJyZWxhdGVkRXZlbnRzQW1vdW50IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJpY29uQW5jaG9yIiwiZXZlbnRzQ291bnRJY29uIiwiX3pvb20iLCJvcGFjaXR5IiwiY3JlYXRlTWFuaG9sZVBvaW50IiwicG9pbnRJY29uIiwiSWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsIk1hcmtlciIsImJpbmRUb29sdGlwIiwibWF0Y2hJY29uVG9Qb2ludCIsImNvbWJpbmVkRmFjdG9yeUljb24iLCJtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSIsInVuc2hpZnQiLCJzZWxlY3RlZEJhY2tncm91bmQiLCJtYXJrZXJCZWxvbmdzVG9Tb3VyY2UiLCJiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kIiwic3RhbmRhcmRCYWNrZ3JvdW5kIiwiY29tYmluZWRQdW1wU3RhdGlvbkljb24iLCJjb21iaW5lZFdXVFBJY29uIiwicmVkUGluUmVkU2hhZG93Iiwid2F0ZXJJY29uTm9CYWNrZ3JvdW5kIiwicG9wdXBBbmNob3IiLCJjb21iaW5lZENvbGxlY3RvcnNJY29uIiwic2Vjb25kYXJ5IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwidGhpcmQiLCJ3aGl0ZVBpbkJsYWNrU2hhZG93IiwieWVsbG93Q2lyY2xlVVJMIiwicGxhbnRJY29uVVJMIiwiZ3JlZW5DaXJjbGVVUkwiLCJwdW1wU3RhdGlvbkljb25VUkwiLCJjb2xsZWN0b3JJY29uIiwiYnJpZ2h0Qmx1ZUNpcmNsZVVSTCIsIldXVFBJY29uVVJMIiwid2hpdGVQaW5SZWRTaGFkb3ciLCJzb3VyY2UiLCJzb3VyY2VzIiwiZmlsdGVyIiwic2VsZWN0ZWRfc291cmNlIiwiY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQiLCJzZWNvbmRhcnlJY29uIiwic2FtcGxpbmdJY29uIiwiYmx1ZUNpcmNsZVVSTCIsInNhbXBsaW5nSWNvblVSTCIsInRoaXJkSWNvbiIsImZvckVhY2giLCJpbmRleCIsImNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50Iiwib2JzZXJ2YXRpb25JY29uIiwicGlua0NpcmNsZVVSTCIsIm9ic2VydmF0aW9uSWNvblVSTCIsImNyZWF0ZVNhbXBsaW5nSWNvbnMiLCJzYW1wbGVkUG9pbnRJZHMiLCJzYW1wbGluZ3MiLCJzIiwiaW5jbHVkZXMiLCJwb3B1cENvbnRlbnQiLCJvYnMiLCJHcmFwaEljb24iLCJpMThuIiwidCIsInNldmVyaXR5Iiwic2V0SWNvbiIsImVsZW1lbnQiLCJjbGlja2VkIiwib24iLCJjbG9zZVBvcHVwIiwiY29udGVudCIsIndhdGVyUmV1c2VJY29uIiwiYmluZFBvcHVwIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImNsb3NlQnV0dG9uIiwicmVtb3ZlTGF5ZXJHcm91cCIsImhhc0xheWVyIiwicmVtb3ZlTGF5ZXIiLCJhZGRMYXllckdyb3VwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL1dpZGdldHMvTWFwL3BvaW50cy9Qb2ludFV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5pbXBvcnQgeyBldmVudHNDb3VudEljb24gfSBmcm9tICcuLi9NYXBVdGlscyc7XG5pbXBvcnQgeyBnZXRQb2ludEljb25CeVR5cGUgfSBmcm9tICcuL1BvaW50SWNvbic7XG5pbXBvcnQgd2F0ZXJSZXVzZUljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2ljb25zL3dhdGVyX3JldXNlLnN2Zyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbmNvbnN0IGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzdHJpbmcgPSBgJHtwb2ludC5ncm91cC5uYW1lfSBgO1xuXG4gIGlmIChwb2ludC5ncm91cC50eXBlID09PSAnR3JvdXBzOjpGYWN0b3J5Jykge1xuICAgIHN0cmluZyArPSBgPGJyLz5TZWN0b3ItVEJEOiAke3BvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lfWA7XG4gICAgc3RyaW5nICs9IGA8YnIvPldhdGVyIENvbnN1bXB0aW9uLVRCRDogJHtwb2ludC5ncm91cC53YXRlcl9jb25zdW1wdGlvbl9wZXJfZGF5fWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyaW5nID0gYCR7cG9pbnQubmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbi8vIEB0cy1pZ25vcmVcbi8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4vLyBJY29uQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG5leHBvcnQgY29uc3QgY3JlYXRlQnViYmxlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgY29uc3Qgc3VidGl0bGUgPVxuICAgIHBvaW50Lmdyb3VwLnR5cGUgPT09ICdHcm91cHM6OkZhY3RvcnknID8gcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWUgOiAnJztcbiAgbGV0IHBvaW50Q3VzdG9tSWNvbjogTC5NYXJrZXIgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIHBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBwb2ludC5uYW1lLFxuICAgICAgc3VidGl0bGUsXG4gICAgICBmYWxzZSxcbiAgICAgIGZhbHNlLFxuICAgICksXG4gICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG5cbiAgbGF5ZXJHcm91cC5hZGRMYXllcihwb2ludEN1c3RvbUljb24pO1xuICBpZiAocG9pbnQuZ3JvdXAudHlwZSA9PT0gJ0dyb3Vwczo6RmFjdG9yeScpIHtcbiAgICBiaW5kUG9wdXBUb01hcmtlcihwb2ludCwgcG9pbnRDdXN0b21JY29uKTtcblxuICAgIC8vVGhlIGZvbGxvd2luZyBpcyBiZWluZyBjYWxsZWQgZm9yIGV2ZXJ5IHBvaW50LCB3ZSBzaG91bGQgZG8gdGhhdCBvbiB0aGUgbGF5ZXJHcm91cCBsZXZlbCB3aGljaCB3aWxsIGhhcHBlbiBvbmNlXG4gICAgLy9JdCBpcyBub3RpY2VkIHdoZW4gdGhlcmUgYXJlIHRob3VzYW5kcyBvZiBwb2ludHNcbiAgICBoYW5kbGVNYXJrZXJDbGljayhtYXAsIHBvaW50LCBwb2ludEN1c3RvbUljb24pO1xuICB9XG5cbiAgaWYgKHBvaW50LnJlbGF0ZWRFdmVudHNBbW91bnQpIHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IEwuZGl2SWNvbih7XG4gICAgICAgIGNsYXNzTmFtZTogYFxuICAgICAgICAgICR7XG4gICAgICAgICAgICBwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID49IDEwMFxuICAgICAgICAgICAgICA/ICdjaXJjbGUtZXZlbnRzLWFtb3VudCBjaXJjbGUtZXZlbnRzLWFtb3VudC0tdHJpZGlnaXQnXG4gICAgICAgICAgICAgIDogJ2NpcmNsZS1ldmVudHMtYW1vdW50J1xuICAgICAgICAgIH0gXG4gICAgICAgICAgJHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID4gMiA/ICdhbGVydC1jb2xvcicgOiAnJ31cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGh0bWw6IGA8cD4ke3BvaW50LnJlbGF0ZWRFdmVudHNBbW91bnR9PC9wPmAsXG4gICAgICAgIGljb25BbmNob3I6IGV2ZW50c0NvdW50SWNvbihtYXAuX3pvb20pLmljb25BbmNob3IsXG4gICAgICB9KSxcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICAgIG9wYWNpdHk6IGhvdmVyZWQgPyAxIDogMCxcbiAgICB9KTtcblxuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXInO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXJIb3ZlcmVkJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbmhvbGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgcG9pbnRJY29uID0gbmV3IEwuSWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQb2ludCxcbiAgICBpY29uU2l6ZTogWzksIDldLFxuICAgIGljb25BbmNob3I6IFs0LjUsIDQuNV0sXG4gIH0pO1xuICBsZXQgbWFuaG9sZUljb246IGFueSA9IG5ldyBMLk1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IHBvaW50SWNvbixcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG4gIG1hbmhvbGVJY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyhwb2ludCkpO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50JztcbiAgbWFuaG9sZUljb25bJ2thbmRvX3BvaW50X3R5cGUnXSA9ICdNYW5ob2xlJztcbiAgaWYgKGhvdmVyZWQpIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludEhvdmVyZWQnO1xuICBsYXllckdyb3VwLmFkZExheWVyKG1hbmhvbGVJY29uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaEljb25Ub1BvaW50ID0gKHBvaW50OiBJUG9pbnQsIGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgc3dpdGNoIChwb2ludC5ncm91cC50eXBlKSB7XG4gICAgY2FzZSAnR3JvdXBzOjpGYWN0b3J5JzpcbiAgICAgIGlmIChjb21iaW5lZEZhY3RvcnlJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZEZhY3RvcnlJY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6UHVtcFN0YXRpb24nOlxuICAgICAgaWYgKGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbjtcbiAgICBjYXNlICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc6XG4gICAgICBpZiAoY29tYmluZWRXV1RQSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRXV1RQSWNvbjtcblxuICAgIGNhc2UgJ0dyb3Vwczo6Q29sbGVjdG9ycyc6XG4gICAgICBpZiAoaXNDb2xsZWN0b3JGb2N1c2VkKHBvaW50LCBldmVudCkpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgICAgICAgICAgaWNvblNpemU6IFswLCAwXSxcbiAgICAgICAgICAgIGljb25BbmNob3I6IFszMCwgNTJdLFxuICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgTC5pY29uKHtcbiAgICAgICAgICAgIGljb25Vcmw6IHdhdGVySWNvbk5vQmFja2dyb3VuZCxcbiAgICAgICAgICAgIGljb25TaXplOiBbMCwgMF0sXG5cbiAgICAgICAgICAgIGljb25BbmNob3I6IFsyMiwgNDRdLFxuICAgICAgICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRDb2xsZWN0b3JzSWNvbjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHN0YW5kYXJkQmFja2dyb3VuZCA9IChcbiAgc2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UsXG4gIHRoaXJkOiBib29sZWFuID0gZmFsc2UsXG4pID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQaW5CbGFja1NoYWRvdyxcbiAgICBpY29uU2l6ZTogc2Vjb25kYXJ5ID8gWzAsIDBdIDogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IHNlY29uZGFyeSAmJiB0aGlyZCA/IFstMiwgMTldIDogc2Vjb25kYXJ5ID8gWy0yLCA0NF0gOiBbMjAsIDQyXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkRmFjdG9yeUljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogeWVsbG93Q2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogcGxhbnRJY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzUsIDMwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkUHVtcFN0YXRpb25JY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGdyZWVuQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogcHVtcFN0YXRpb25JY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzcsIDMyXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkQ29sbGVjdG9yc0ljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogY29sbGVjdG9ySWNvbixcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuXG4gICAgaWNvbkFuY2hvcjogWzI1LCA1MF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFdXVFBJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGJyaWdodEJsdWVDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBXV1RQSWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs4LCAzMV0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RlZEJhY2tncm91bmQgPSAoKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHJlZFBpblJlZFNoYWRvdyxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMzIsIDU0XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlID0gKGV2ZW50OiBJRXZlbnQsIHBvaW50OiBJUG9pbnQpID0+IHtcbiAgbGV0IHNvdXJjZTtcblxuICBpZiAoZXZlbnQgIT09IG51bGwgJiYgZXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHNvdXJjZSA9IGV2ZW50LnNvdXJjZXMuZmlsdGVyKChzb3VyY2UpID0+IHNvdXJjZS5wb2ludF9pZCA9PT0gcG9pbnQuaWQpWzBdO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50ICE9PSBudWxsICYmIHNvdXJjZSAmJiBldmVudC5zZWxlY3RlZF9zb3VyY2UgPT09IHNvdXJjZS5wb2ludF9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXJrZXJCZWxvbmdzVG9Tb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICByZXR1cm4gKFxuICAgIGV2ZW50ICE9PSBudWxsICYmXG4gICAgZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTYW1wbGluZ0ljb25Qb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBzZWNvbmRhcnlJY29uOiBib29sZWFuLFxuICBtYXAsXG4gIHBvaW50OiBJUG9pbnQsXG4gIGV2ZW50OiBJRXZlbnQsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICAvLyBpY29uU2l6ZTogW3dpZHRoLCBoZWlnaHRdLFxuICAvLyBJY29uIEFuY2hvcjogWygtcmlnaHQpKCtsZWZ0KSwgKC1kb3duKSgrdXApXVxuICBsZXQgc2FtcGxpbmdJY29uID0gW1xuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBibHVlQ2lyY2xlVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy03LCAxNV0gOiBbMTAuNywgMzMuN10sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHNhbXBsaW5nSWNvblVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstOCwgMTNdIDogWzUsIDMwXSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgXTtcblxuICBsZXQgdGhpcmRJY29uID0gZmFsc2U7XG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlyZEljb24gPSB0cnVlO1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uLCB0aGlyZEljb24pKTtcbiAgfVxuXG4gIHNhbXBsaW5nSWNvbi5mb3JFYWNoKChpY29uLCBpbmRleCkgPT4ge1xuICAgIGxldCBwb2ludEN1c3RvbUljb246IGFueSA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBpY29uLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBvaW50Q3VzdG9tSWNvbi5iaW5kVG9vbHRpcChidWlsZE1hbmhvbGVUb290aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gdGhpcmRJY29uID8gZmFsc2UgOiBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IHRoaXJkSWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBvYnNlcnZhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBpbmtDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDQwXSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICB9XG5cbiAgb2JzZXJ2YXRpb25JY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IGZhbHNlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbkhvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29ucyA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBldmVudDogSUV2ZW50LFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQsXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIGxldCBzYW1wbGVkUG9pbnRJZHMgPSBldmVudC5zYW1wbGluZ3MubWFwKChzKSA9PiBzLnBvaW50X2lkKTtcbiAgaWYgKFxuICAgIGV2ZW50ICE9PSBudWxsICYmXG4gICAgZXZlbnQuc2FtcGxpbmdzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHNhbXBsZWRQb2ludElkcy5pbmNsdWRlcyhwb2ludC5pZClcbiAgKSB7XG4gICAgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQoXG4gICAgICBtYXJrZXJMb2NhdGlvbixcbiAgICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQsIGV2ZW50KSAhPT0gbnVsbCxcbiAgICAgIG1hcCxcbiAgICAgIHBvaW50LFxuICAgICAgZXZlbnQsXG4gICAgICBob3ZlcmVkLFxuICAgICAgbGF5ZXJHcm91cCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdXBDb250ZW50ID0gKG9iczogYW55LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke3BvaW50LmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke3BvaW50Lmdyb3VwLm5hbWV9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxoci8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9XG59O1xuXG5sZXQgc2V0SWNvbiA9IChlbGVtZW50LCBjbGlja2VkLCBwb2ludCkgPT4ge1xuICBlbGVtZW50LnNldEljb24oXG4gICAgZ2V0UG9pbnRJY29uQnlUeXBlKFxuICAgICAgcG9pbnQuZ3JvdXAudHlwZSxcbiAgICAgIHBvaW50Lm5hbWUsXG4gICAgICBwb2ludC5ncm91cC5zZWN0b3JfbmFtZSxcbiAgICAgIGNsaWNrZWQsXG4gICAgICBmYWxzZSxcbiAgICApLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZU1hcmtlckNsaWNrID0gKG1hcCwgcG9pbnQsIHBvaW50Q3VzdG9tSWNvbikgPT4ge1xuICBtYXAub24oJ3pvb21zdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICBtYXAuY2xvc2VQb3B1cCgpO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ3BvcHVwY2xvc2UnLCAoKSA9PiB7XG4gICAgc2V0SWNvbihwb2ludEN1c3RvbUljb24sIGZhbHNlLCBwb2ludCk7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBvcGVuJywgKCkgPT4ge1xuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJpbmRQb3B1cFRvTWFya2VyID0gKHBvaW50LCBsYXllckdyb3VwKSA9PiB7XG4gIGxldCBjb250ZW50ID0gYFxuICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudCc+XG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fdGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5uYW1lXG4gICAgICAgICAgICAgICAgfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyX190aXRsZXNfX3N1YnRpdGxlJz4ke1xuICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keSc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW0nPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9faWNvbic+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScke3dhdGVyUmV1c2VJY29ufScgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlcyc+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlc19fdGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50Lmdyb3VwLndhdGVyX2NvbnN1bXB0aW9uX3Blcl9kYXlcbiAgICAgICAgICAgICAgICAgIH0gJHtpMThuLnQoJ21pbGxpb25fZ2FsbG9uc19kYXknKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX19zdWJ0aXRsZSc+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICd3YXRlcl9kaXNjaGFyZ2UnLFxuICAgICAgICAgICAgICAgICAgKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgO1xuXG4gIGxheWVyR3JvdXAuYmluZFBvcHVwKGNvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6ICdwb2ludC1tYXJrZXItcG9wdXAnLFxuICAgIG1pbldpZHRoOiAnMjE0cHgnLFxuICAgIG1heFdpZHRoOiAnMjE0cHgnLFxuICAgIGNsb3NlQnV0dG9uOiBmYWxzZSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKG1hcC5oYXNMYXllcihsYXllckdyb3VwKSkge1xuICAgIG1hcC5yZW1vdmVMYXllcihsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXAgPSAobWFwLCBsYXllckdyb3VwKSA9PiB7XG4gIGlmICghbWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLmFkZExheWVyKGxheWVyR3JvdXApO1xuICB9IGVsc2Uge1xuICAgIHJlbW92ZUxheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgICBhZGRMYXllckdyb3VwKG1hcCwgbGF5ZXJHcm91cCk7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ0EsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQTJDLElBQUFFLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUFBLElBQUFHLGFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUFBLElBQUFJLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUFBLElBQUFLLGdCQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFPM0MsSUFBQU0sZ0JBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLGtCQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxvQkFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQXlGLElBQUFTLGFBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFB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
|
|
462
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJuYW1lcyI6WyJpc0NvbGxlY3RvckZvY3VzZWQiLCJwb2ludCIsImV2ZW50Iiwib2JzZXJ2YXRpb25zIiwibGVuZ3RoIiwiaWQiLCJwb2ludF9pZCIsImJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyIsInN0cmluZyIsImdyb3VwIiwibmFtZSIsInR5cGUiLCJzZWN0b3JfbmFtZSIsIndhdGVyX2NvbnN1bXB0aW9uX3Blcl9kYXkiLCJjcmVhdGVCdWJibGVQb2ludCIsIm1hcmtlckxvY2F0aW9uIiwibWFwIiwiaG92ZXJlZCIsImxheWVyR3JvdXAiLCJzdWJ0aXRsZSIsInBvaW50Q3VzdG9tSWNvbiIsIkwiLCJtYXJrZXIiLCJpY29uIiwicmlzZU9uSG92ZXIiLCJhZGRMYXllciIsInJlbGF0ZWRFdmVudHNBbW91bnQiLCJkaXZJY29uIiwiY2xhc3NOYW1lIiwiaHRtbCIsImljb25BbmNob3IiLCJfem9vbSIsIm9wYWNpdHkiLCJjcmVhdGVNYW5ob2xlUG9pbnQiLCJwb2ludEljb24iLCJpY29uVXJsIiwid2hpdGVQb2ludCIsImljb25TaXplIiwibWFuaG9sZUljb24iLCJiaW5kVG9vbHRpcCIsIm1hdGNoSWNvblRvUG9pbnQiLCJjb21iaW5lZEZhY3RvcnlJY29uIiwibWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UiLCJ1bnNoaWZ0Iiwic2VsZWN0ZWRCYWNrZ3JvdW5kIiwibWFya2VyQmVsb25nc1RvU291cmNlIiwiYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCIsInN0YW5kYXJkQmFja2dyb3VuZCIsImNvbWJpbmVkUHVtcFN0YXRpb25JY29uIiwiY29tYmluZWRXV1RQSWNvbiIsInJlZFBpblJlZFNoYWRvdyIsIndhdGVySWNvbk5vQmFja2dyb3VuZCIsInBvcHVwQW5jaG9yIiwiY29tYmluZWRDb2xsZWN0b3JzSWNvbiIsInNlY29uZGFyeSIsInRoaXJkIiwid2hpdGVQaW5CbGFja1NoYWRvdyIsInllbGxvd0NpcmNsZVVSTCIsInBsYW50SWNvblVSTCIsImdyZWVuQ2lyY2xlVVJMIiwicHVtcFN0YXRpb25JY29uVVJMIiwiY29sbGVjdG9ySWNvbiIsImJyaWdodEJsdWVDaXJjbGVVUkwiLCJXV1RQSWNvblVSTCIsIndoaXRlUGluUmVkU2hhZG93Iiwic291cmNlIiwidW5kZWZpbmVkIiwic291cmNlcyIsImZpbHRlciIsInNlbGVjdGVkX3NvdXJjZSIsImNyZWF0ZVNhbXBsaW5nSWNvblBvaW50Iiwic2Vjb25kYXJ5SWNvbiIsInNhbXBsaW5nSWNvbiIsImJsdWVDaXJjbGVVUkwiLCJzYW1wbGluZ0ljb25VUkwiLCJ0aGlyZEljb24iLCJmb3JFYWNoIiwiaW5kZXgiLCJjcmVhdGVPYnNlcnZhdGlvbkljb25Qb2ludCIsIm9ic2VydmF0aW9uSWNvbiIsInBpbmtDaXJjbGVVUkwiLCJvYnNlcnZhdGlvbkljb25VUkwiLCJjcmVhdGVTYW1wbGluZ0ljb25zIiwic2FtcGxlZFBvaW50SWRzIiwic2FtcGxpbmdzIiwicyIsImluY2x1ZGVzIiwicG9wdXBDb250ZW50Iiwib2JzIiwiR3JhcGhJY29uIiwiaTE4biIsInQiLCJzZXZlcml0eSIsImhhbmRsZU1hcmtlckNsaWNrIiwic2V0SWNvbiIsImVsZW1lbnQiLCJjbGlja2VkIiwibGF5ZXIiLCJvbiIsIm9yaWdpbmFsbHlDbGlja2VkRWxlbWVudCIsImNsb3NlUG9wdXAiLCJhbnlQb3RlbnRpYWxNYXBFbGVtZW50IiwiX2xlYWZsZXRfaWQiLCJzZXRUaW1lb3V0IiwiYmluZFBvcHVwVG9NYXJrZXIiLCJjb250ZW50Iiwid2F0ZXJSZXVzZUljb24iLCJiaW5kUG9wdXAiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiY2xvc2VCdXR0b24iLCJyZW1vdmVMYXllckdyb3VwIiwiaGFzTGF5ZXIiLCJyZW1vdmVMYXllciIsImFkZExheWVyR3JvdXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7Ozs7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aUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUN2RyxLQUFELEVBQVFpQixVQUFSLEVBQXVCO0FBQ3RELE1BQUl1RixPQUFPLHNOQUtLeEcsS0FBSyxDQUFDUyxJQUxYLHlGQVFLVCxLQUFLLENBQUNRLEtBQU4sQ0FBWUcsV0FSakIsNFBBZ0JtQjhGLG9CQWhCbkIsa0xBb0JPekcsS0FBSyxDQUFDUSxLQUFOLENBQVlJLHlCQXBCbkIsY0FxQlM2RSxjQUFLQyxDQUFMLENBQU8scUJBQVAsQ0FyQlQsK0ZBc0IrREQsY0FBS0MsQ0FBTCxDQUN4RCxpQkFEd0QsQ0F0Qi9ELHlGQUFYO0FBK0JBekUsRUFBQUEsVUFBVSxDQUFDeUYsU0FBWCxDQUFxQkYsT0FBckIsRUFBOEI7QUFDNUI3RSxJQUFBQSxTQUFTLEVBQUUsb0JBRGlCO0FBRTVCZ0YsSUFBQUEsUUFBUSxFQUFFLE9BRmtCO0FBRzVCQyxJQUFBQSxRQUFRLEVBQUUsT0FIa0I7QUFJNUJDLElBQUFBLFdBQVcsRUFBRTtBQUplLEdBQTlCO0FBTUQsQ0F0Q007Ozs7QUF3Q0EsSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDL0YsR0FBRCxFQUFNRSxVQUFOLEVBQXFCO0FBQ25ELE1BQUlGLEdBQUcsQ0FBQ2dHLFFBQUosQ0FBYTlGLFVBQWIsQ0FBSixFQUE4QjtBQUM1QkYsSUFBQUEsR0FBRyxDQUFDaUcsV0FBSixDQUFnQi9GLFVBQWhCO0FBQ0Q7QUFDRixDQUpNOzs7O0FBTUEsSUFBTWdHLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQ2xHLEdBQUQsRUFBTUUsVUFBTixFQUFxQjtBQUNoRCxNQUFJLENBQUNGLEdBQUcsQ0FBQ2dHLFFBQUosQ0FBYTlGLFVBQWIsQ0FBTCxFQUErQjtBQUM3QkYsSUFBQUEsR0FBRyxDQUFDUyxRQUFKLENBQWFQLFVBQWI7QUFDRDtBQUNGLENBSk0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR3JhcGhJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9saW5lLWNoYXJ0LnN2Zyc7XG5pbXBvcnQgTCwgeyBMYXRMbmdUdXBsZSB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IGJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgc2FtcGxpbmdJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9zYW1wbGluZy1pY29uLnN2Zyc7XG5pbXBvcnQgcGlua0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcGluay1jaXJjbGUuc3ZnJztcbmltcG9ydCBvYnNlcnZhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL29ic2VydmF0aW9uLWljb24uc3ZnJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2V2ZW50cy9tb2RlbHMvSUV2ZW50JztcbmltcG9ydCByZWRQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3JlZC1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluUmVkU2hhZG93IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy93aGl0ZS1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluQmxhY2tTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1ibGFjay1zaGFkb3cucG5nJztcbmltcG9ydCB5ZWxsb3dDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3llbGxvdy1jaXJjbGUuc3ZnJztcbmltcG9ydCBwbGFudEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2ZhY3RvcnktaWNvbi5zdmcnO1xuaW1wb3J0IGdyZWVuQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9ncmVlbi1jaXJjbGUuc3ZnJztcbmltcG9ydCBwdW1wU3RhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3B1bXAtc3RhdGlvbi1pY29uLnN2Zyc7XG5pbXBvcnQgY29sbGVjdG9ySWNvbiBmcm9tICcuLi8uLi8uLi9hc3NldHMvbWFwL3Bpbi13YXRlci5zdmcnO1xuaW1wb3J0IGJyaWdodEJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JyaWdodC1ibHVlLWNpcmNsZS5zdmcnO1xuaW1wb3J0IFdXVFBJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9XV1RQLWljb24uc3ZnJztcbmltcG9ydCB3YXRlckljb25Ob0JhY2tncm91bmQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3dhdGVyLW5vLWJhY2tncm91bmQuc3ZnJztcbmltcG9ydCB3aGl0ZVBvaW50IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy93aGl0ZS1wb2ludC5wbmcnO1xuaW1wb3J0IHsgZXZlbnRzQ291bnRJY29uIH0gZnJvbSAnLi4vTWFwVXRpbHMnO1xuaW1wb3J0IHsgZ2V0UG9pbnRJY29uQnlUeXBlIH0gZnJvbSAnLi9Qb2ludEljb24nO1xuaW1wb3J0IHdhdGVyUmV1c2VJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9pY29ucy93YXRlcl9yZXVzZS5zdmcnO1xuXG5leHBvcnQgY29uc3QgaXNDb2xsZWN0b3JGb2N1c2VkID0gKHBvaW50OiBJUG9pbnQsIGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgcmV0dXJuIChcbiAgICBldmVudD8ub2JzZXJ2YXRpb25zPy5sZW5ndGggPT09IDEgJiZcbiAgICBwb2ludC5pZCA9PT0gZXZlbnQub2JzZXJ2YXRpb25zWzBdLnBvaW50X2lkXG4gICk7XG59O1xuXG5jb25zdCBidWlsZE1hbmhvbGVUb290aXBTdHJpbmcgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc3RyaW5nID0gYCR7cG9pbnQuZ3JvdXAubmFtZX0gYDtcblxuICBpZiAocG9pbnQuZ3JvdXAudHlwZSA9PT0gJ0dyb3Vwczo6RmFjdG9yeScpIHtcbiAgICBzdHJpbmcgKz0gYDxici8+U2VjdG9yLVRCRDogJHtwb2ludC5ncm91cC5zZWN0b3JfbmFtZX1gO1xuICAgIHN0cmluZyArPSBgPGJyLz5XYXRlciBDb25zdW1wdGlvbi1UQkQ6ICR7cG9pbnQuZ3JvdXAud2F0ZXJfY29uc3VtcHRpb25fcGVyX2RheX1gO1xuICB9IGVsc2Uge1xuICAgIHN0cmluZyA9IGAke3BvaW50Lm5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG4vLyBAdHMtaWdub3JlXG4vLyBpY29uU2l6ZTogW3dpZHRoLCBoZWlnaHRdLFxuLy8gSWNvbkFuY2hvcjogWygtcmlnaHQpKCtsZWZ0KSwgKC1kb3duKSgrdXApXVxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJ1YmJsZVBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHBvaW50OiBJUG9pbnQsXG4gIG1hcCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIGNvbnN0IHN1YnRpdGxlID1cbiAgICBwb2ludC5ncm91cC50eXBlID09PSAnR3JvdXBzOjpGYWN0b3J5JyA/IHBvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lIDogJyc7XG4gIGxldCBwb2ludEN1c3RvbUljb246IEwuTWFya2VyID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBnZXRQb2ludEljb25CeVR5cGUoXG4gICAgICBwb2ludC5ncm91cC50eXBlLFxuICAgICAgcG9pbnQubmFtZSxcbiAgICAgIHN1YnRpdGxlLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICAgIDAsXG4gICAgKSxcbiAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gIH0pO1xuICAvLyBAdHMtaWdub3JlXG4gIC8vIHBvaW50Q3VzdG9tSWNvbi5iaW5kVG9vbHRpcChidWlsZE1hbmhvbGVUb290aXBTdHJpbmcocG9pbnQpKTtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50JztcbiAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcblxuICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG5cbiAgaWYgKHBvaW50LnJlbGF0ZWRFdmVudHNBbW91bnQpIHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IEwuZGl2SWNvbih7XG4gICAgICAgIGNsYXNzTmFtZTogYFxuICAgICAgICAgICR7XG4gICAgICAgICAgICBwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID49IDEwMFxuICAgICAgICAgICAgICA/ICdjaXJjbGUtZXZlbnRzLWFtb3VudCBjaXJjbGUtZXZlbnRzLWFtb3VudC0tdHJpZGlnaXQnXG4gICAgICAgICAgICAgIDogJ2NpcmNsZS1ldmVudHMtYW1vdW50J1xuICAgICAgICAgIH0gXG4gICAgICAgICAgJHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID4gMiA/ICdhbGVydC1jb2xvcicgOiAnJ31cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGh0bWw6IGA8cD4ke3BvaW50LnJlbGF0ZWRFdmVudHNBbW91bnR9PC9wPmAsXG4gICAgICAgIGljb25BbmNob3I6IGV2ZW50c0NvdW50SWNvbihtYXAuX3pvb20pLmljb25BbmNob3IsXG4gICAgICB9KSxcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICAgIG9wYWNpdHk6IGhvdmVyZWQgPyAxIDogMCxcbiAgICB9KTtcblxuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXInO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXJIb3ZlcmVkJztcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgLy9sYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgbGV0IHBvaW50SWNvbiA9IEwuaWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQb2ludCxcbiAgICBpY29uU2l6ZTogWzksIDldLFxuICAgIGljb25BbmNob3I6IFs0LjUsIDQuNV0sXG4gIH0pO1xuICBsZXQgbWFuaG9sZUljb246IGFueSA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgaWNvbjogcG9pbnRJY29uLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcbiAgbWFuaG9sZUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICBtYW5ob2xlSWNvblsna2FuZG9fcG9pbnRfdHlwZSddID0gJ01hbmhvbGUnO1xuICBpZiAoaG92ZXJlZCkgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG4gIGxheWVyR3JvdXAuYWRkTGF5ZXIobWFuaG9sZUljb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoSWNvblRvUG9pbnQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICBzd2l0Y2ggKHBvaW50Lmdyb3VwLnR5cGUpIHtcbiAgICBjYXNlICdHcm91cHM6OkZhY3RvcnknOlxuICAgICAgaWYgKGNvbWJpbmVkRmFjdG9yeUljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkRmFjdG9yeUljb247XG4gICAgY2FzZSAnR3JvdXBzOjpQdW1wU3RhdGlvbic6XG4gICAgICBpZiAoY29tYmluZWRQdW1wU3RhdGlvbkljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JzpcbiAgICAgIGlmIChjb21iaW5lZFdXVFBJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFdXVFBJY29uO1xuXG4gICAgY2FzZSAnR3JvdXBzOjpDb2xsZWN0b3JzJzpcbiAgICAgIGlmIChpc0NvbGxlY3RvckZvY3VzZWQocG9pbnQsIGV2ZW50KSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzIyLCA0NF0sXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZENvbGxlY3RvcnNJY29uO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc3RhbmRhcmRCYWNrZ3JvdW5kID0gKFxuICBzZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgdGhpcmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpbkJsYWNrU2hhZG93LFxuICAgIGljb25TaXplOiBzZWNvbmRhcnkgPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwbGFudEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNSwgMzBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRQdW1wU3RhdGlvbkljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogZ3JlZW5DaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNywgMzJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRDb2xsZWN0b3JzSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBjb2xsZWN0b3JJY29uLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG5cbiAgICBpY29uQW5jaG9yOiBbMjUsIDUwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkV1dUUEljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogYnJpZ2h0Qmx1ZUNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzgsIDMxXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpblJlZFNoYWRvdyxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBzYW1wbGluZ0ljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGJsdWVDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAxM10gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGxldCB0aGlyZEljb24gPSBmYWxzZTtcbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXJkSWNvbiA9IHRydWU7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24sIHRoaXJkSWNvbikpO1xuICB9XG5cbiAgc2FtcGxpbmdJY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSB0aGlyZEljb24gPyBmYWxzZSA6IHNlY29uZGFyeUljb247XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb190aGlyZCddID0gdGhpcmRJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1NhbXBsaW5nJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZ0hvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IG9ic2VydmF0aW9uSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogcGlua0NpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgNDBdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBvYnNlcnZhdGlvbkljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDM4XSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uKSk7XG4gIH1cblxuICBvYnNlcnZhdGlvbkljb24uZm9yRWFjaCgoaWNvbiwgaW5kZXgpID0+IHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgaWNvbjogaWNvbixcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19pbmRleF9vYmplY3QnXSA9IGluZGV4O1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fZmV3X2xheWVyX2ljb24nXSA9IHRydWU7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19zZWNvbmRhcnknXSA9IHNlY29uZGFyeUljb247XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb190aGlyZCddID0gZmFsc2U7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnT2JzZXJ2YXRpb24nO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uSG92ZXJlZCc7XG4gICAgbGF5ZXJHcm91cC5hZGRMYXllcihwb2ludEN1c3RvbUljb24pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTYW1wbGluZ0ljb25zID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIGV2ZW50OiBJRXZlbnQsXG4gIHBvaW50OiBJUG9pbnQsXG4gIG1hcCxcbiAgaG92ZXJlZCxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgbGV0IHNhbXBsZWRQb2ludElkcyA9IGV2ZW50LnNhbXBsaW5ncy5tYXAoKHMpID0+IHMucG9pbnRfaWQpO1xuICBpZiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zYW1wbGluZ3MubGVuZ3RoICE9PSAwICYmXG4gICAgc2FtcGxlZFBvaW50SWRzLmluY2x1ZGVzKHBvaW50LmlkKVxuICApIHtcbiAgICBjcmVhdGVTYW1wbGluZ0ljb25Qb2ludChcbiAgICAgIG1hcmtlckxvY2F0aW9uLFxuICAgICAgbWF0Y2hJY29uVG9Qb2ludChwb2ludCwgZXZlbnQpICE9PSBudWxsLFxuICAgICAgbWFwLFxuICAgICAgcG9pbnQsXG4gICAgICBldmVudCxcbiAgICAgIGhvdmVyZWQsXG4gICAgICBsYXllckdyb3VwLFxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwb3B1cENvbnRlbnQgPSAob2JzOiBhbnksIHBvaW50OiBJUG9pbnQpID0+IHtcbiAgaWYgKG9icyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcG9wdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZ3JhcGgtaWNvbiBwb3B1cC1ncmFwaC1pY29uLSR7cG9pbnQuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7cG9pbnQuZ3JvdXAubmFtZX08L2I+PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPGhyLz5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzZWN0b3JcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke29icy5pZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke0dyYXBoSWNvbn1cIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2l0ZS1uYW1lXCI+PGI+JHtcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludC5ncm91cC5uYW1lXG4gICAgICAgICAgICAgICAgICAgIH08L2I+PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5zZXZlcml0eWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvcHVwLWNvbnRlbnRfX3NldmVyaXR5LS0nICsgb2JzLnNldmVyaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1iXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdGllcy4ke29icy5zZXZlcml0eX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJwb3B1cC1jb250ZW50X19oclwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX2Rpc2NoYXJnZS10aW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5maXJzdF9zZWVuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfTo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGIgaWQ9XCJmaXJzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcubGFzdF9zZWVuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfTo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGIgaWQ9XCJsYXN0LXNlZW4tcG9wdXBcIj48L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVNYXJrZXJDbGljayA9IChtYXAsIHBvaW50LCBsYXllckdyb3VwKSA9PiB7XG4gIGxldCBzZXRJY29uID0gKGVsZW1lbnQsIGNsaWNrZWQpID0+IHtcbiAgICBlbGVtZW50LmxheWVyLnNldEljb24oXG4gICAgICBnZXRQb2ludEljb25CeVR5cGUoXG4gICAgICAgIHBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICAgIHBvaW50Lm5hbWUsXG4gICAgICAgIHBvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lLFxuICAgICAgICBjbGlja2VkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgMCxcbiAgICAgICksXG4gICAgKTtcbiAgfTtcblxuICBsYXllckdyb3VwLm9uKCdjbGljaycsIChvcmlnaW5hbGx5Q2xpY2tlZEVsZW1lbnQpID0+IHtcbiAgICBtYXAub24oJ3pvb21zdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hcC5jbG9zZVBvcHVwKCk7XG4gICAgfSk7XG5cbiAgICBzZXRJY29uKG9yaWdpbmFsbHlDbGlja2VkRWxlbWVudCwgdHJ1ZSk7XG5cbiAgICBtYXAub24oJ2NsaWNrJywgKGFueVBvdGVudGlhbE1hcEVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgYW55UG90ZW50aWFsTWFwRWxlbWVudC5fbGVhZmxldF9pZCAhPT1cbiAgICAgICAgb3JpZ2luYWxseUNsaWNrZWRFbGVtZW50LmxheWVyLl9sZWFmbGV0X2lkXG4gICAgICApIHtcbiAgICAgICAgc2V0SWNvbihvcmlnaW5hbGx5Q2xpY2tlZEVsZW1lbnQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxheWVyR3JvdXAub24oJ3BvcHVwY2xvc2UnLCAoKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2V0SWNvbihvcmlnaW5hbGx5Q2xpY2tlZEVsZW1lbnQsIGZhbHNlKTtcbiAgICAgIH0sIDUwKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYmluZFBvcHVwVG9NYXJrZXIgPSAocG9pbnQsIGxheWVyR3JvdXApID0+IHtcbiAgbGV0IGNvbnRlbnQgPSBgXG4gICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50Jz5cbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXInPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudF9faGVhZGVyX190aXRsZXNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzX190aXRsZSc+JHtcbiAgICAgICAgICAgICAgICAgIHBvaW50Lm5hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fc3VidGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5ncm91cC5zZWN0b3JfbmFtZVxuICAgICAgICAgICAgICAgIH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX19pY29uJz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JyR7d2F0ZXJSZXVzZUljb259JyAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzJz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX190aXRsZSc+JHtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAud2F0ZXJfY29uc3VtcHRpb25fcGVyX2RheVxuICAgICAgICAgICAgICAgICAgfSAke2kxOG4udCgnbWlsbGlvbl9nYWxsb25zX2RheScpfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX190aXRsZXNfX3N1YnRpdGxlJz4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgJ3dhdGVyX2Rpc2NoYXJnZScsXG4gICAgICAgICAgICAgICAgICApfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgbGF5ZXJHcm91cC5iaW5kUG9wdXAoY29udGVudCwge1xuICAgIGNsYXNzTmFtZTogJ3BvaW50LW1hcmtlci1wb3B1cCcsXG4gICAgbWluV2lkdGg6ICcyMTRweCcsXG4gICAgbWF4V2lkdGg6ICcyMTRweCcsXG4gICAgY2xvc2VCdXR0b246IGZhbHNlLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwID0gKG1hcCwgbGF5ZXJHcm91cCkgPT4ge1xuICBpZiAobWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLnJlbW92ZUxheWVyKGxheWVyR3JvdXApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKCFtYXAuaGFzTGF5ZXIobGF5ZXJHcm91cCkpIHtcbiAgICBtYXAuYWRkTGF5ZXIobGF5ZXJHcm91cCk7XG4gIH1cbn07XG4iXX0=
|