@kando-env/kando-ui 1.2.354-alpha.13 → 1.2.354-alpha.2

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.
Files changed (672) hide show
  1. package/lib/Router.js +42 -81
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +23 -33
  3. package/lib/Widgets/EventsRow/EventsRow.js +25 -37
  4. package/lib/Widgets/Map/GraphUtils.js +3 -3
  5. package/lib/Widgets/Map/Map.js +70 -90
  6. package/lib/Widgets/Map/MapUtils.js +43 -43
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +52 -76
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +23 -24
  9. package/lib/Widgets/Map/areas/AreaUtils.js +48 -48
  10. package/lib/Widgets/Map/areas/Patterns.js +4 -4
  11. package/lib/Widgets/Map/edges/Edge.js +24 -31
  12. package/lib/Widgets/Map/edges/Edges.js +19 -23
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +23 -44
  14. package/lib/Widgets/Map/events/Event.js +17 -17
  15. package/lib/Widgets/Map/events/EventIndicator.js +57 -52
  16. package/lib/Widgets/Map/events/EventPath.js +24 -22
  17. package/lib/Widgets/Map/events/EventUtils.js +55 -78
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +17 -18
  19. package/lib/Widgets/Map/events/PointOfEvent.js +32 -37
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +30 -37
  21. package/lib/Widgets/Map/events/Snail.js +19 -20
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +93 -86
  23. package/lib/Widgets/Map/map/FloatingGraph.js +22 -18
  24. package/lib/Widgets/Map/map/GraphDateButton.js +25 -17
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +13 -12
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +16 -15
  27. package/lib/Widgets/Map/points/PointIcon.js +15 -13
  28. package/lib/Widgets/Map/points/PointMarker.js +71 -87
  29. package/lib/Widgets/Map/points/PointMarkers.js +45 -66
  30. package/lib/Widgets/Map/points/PointUtils.js +69 -75
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +28 -45
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +11 -10
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +10 -11
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +3 -3
  35. package/lib/Widgets/MostPolluting/Areas/Areas.js +28 -57
  36. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +3 -3
  37. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  38. package/lib/Widgets/MostPolluting/Areas/styles.js +3 -3
  39. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +11 -8
  40. package/lib/Widgets/MostPolluting/Factories/Factories.js +33 -64
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +14 -17
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +7 -7
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +12 -10
  44. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +3 -3
  45. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +2 -2
  46. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  47. package/lib/Widgets/MostPolluting/Factories/styles.js +3 -3
  48. package/lib/Widgets/MostPolluting/MostPolluting.js +21 -27
  49. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +21 -22
  50. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +6 -4
  51. package/lib/Widgets/MostPolluting/ShowMore/styles.js +6 -4
  52. package/lib/Widgets/MostPolluting/assets/index.js +11 -11
  53. package/lib/Widgets/MostPolluting/components/ChangePercent.js +19 -13
  54. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +35 -30
  55. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +34 -31
  56. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +39 -35
  57. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +27 -26
  58. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +52 -48
  59. package/lib/Widgets/MostPolluting/models.js +1 -1
  60. package/lib/Widgets/MostPolluting/styles.js +3 -3
  61. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +7 -5
  62. package/lib/Widgets/PotentialImpactSummary/Icon.js +8 -7
  63. package/lib/Widgets/PotentialImpactSummary/index.js +19 -27
  64. package/lib/Widgets/PotentialImpactSummary/index.test.js +48 -52
  65. package/lib/Widgets/PotentialImpactSummary/styles.js +7 -7
  66. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  67. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +9 -7
  68. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +22 -17
  69. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +35 -32
  70. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +26 -24
  71. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +35 -37
  72. package/lib/Widgets/QualitySummary/QualitySummary.js +9 -13
  73. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +4 -4
  74. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  75. package/lib/Widgets/QualitySummary/styles.js +23 -15
  76. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +12 -13
  77. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +25 -24
  78. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +29 -24
  79. package/lib/Widgets/UtilityInformation/UtilityInformation.js +23 -40
  80. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  81. package/lib/Widgets/UtilityInformation/styles.js +31 -22
  82. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +3 -3
  83. package/lib/assets/icons/TopNavbar/index.js +7 -7
  84. package/lib/assets/icons/TrendSvg.js +6 -6
  85. package/lib/assets/icons/index.js +16 -16
  86. package/lib/assets/icons/kandoStepper/index.js +6 -6
  87. package/lib/assets/icons/siteTypes/index.js +2 -2
  88. package/lib/components/ApplyButton/ApplyButton.js +8 -8
  89. package/lib/components/ApplyButton/index.js +1 -1
  90. package/lib/components/Backdrop/Backdrop.js +6 -4
  91. package/lib/components/ContentLoader/ContentLoader.js +11 -9
  92. package/lib/components/ContentLoader/index.js +2 -2
  93. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +10 -9
  94. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +3 -5
  95. package/lib/components/CustomInputs/DoubleTabs/styles.js +20 -12
  96. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +12 -19
  97. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +6 -4
  98. package/lib/components/CustomInputs/Search/Search.js +39 -60
  99. package/lib/components/CustomInputs/Search/index.js +1 -1
  100. package/lib/components/CustomInputs/Select/Select.js +42 -55
  101. package/lib/components/CustomInputs/Select/Select.stories.js +4 -6
  102. package/lib/components/DamageType/DamageType.js +35 -56
  103. package/lib/components/DamageType/index.js +1 -1
  104. package/lib/components/DataLoaderError/DataLoaderError.js +8 -6
  105. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +9 -10
  106. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +71 -72
  107. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +27 -37
  108. package/lib/components/DischargeHeatmap/HighchartsOptions.js +11 -12
  109. package/lib/components/DischargeHeatmap/index.js +1 -1
  110. package/lib/components/DischargeHeatmap/mocks/handlers.js +3 -3
  111. package/lib/components/DischargeHeatmap/popupText.js +9 -9
  112. package/lib/components/DischargeHeatmap/titles.js +3 -3
  113. package/lib/components/DischargeHeatmap/types.js +1 -1
  114. package/lib/components/ErrorBoundary.js +27 -41
  115. package/lib/components/Events/Events.js +28 -45
  116. package/lib/components/Events/index.js +1 -1
  117. package/lib/components/Graph/Graph.js +67 -86
  118. package/lib/components/Graph/index.js +1 -1
  119. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +17 -21
  120. package/lib/components/Header/Breadcrumbs/index.js +1 -1
  121. package/lib/components/Header/DoubleTabs/DoubleTabs.js +18 -26
  122. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +3 -5
  123. package/lib/components/Header/DoubleTabs/styles.js +4 -4
  124. package/lib/components/Header/Header.js +2 -2
  125. package/lib/components/Header/Header.stories.js +3 -5
  126. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +82 -197
  127. package/lib/components/Header/InfoBar/InfoBar.js +66 -95
  128. package/lib/components/Header/InfoBar/Search/Control.js +9 -9
  129. package/lib/components/Header/InfoBar/Search/GroupLabel.js +6 -4
  130. package/lib/components/Header/InfoBar/Search/Search.js +14 -19
  131. package/lib/components/Header/InfoBar/Search/SearchContainer.js +15 -27
  132. package/lib/components/Header/InfoBar/Search/index.js +1 -1
  133. package/lib/components/Header/InfoBar/Search/searchStyle.js +41 -49
  134. package/lib/components/Header/InfoBar/TimeFilter.js +11 -14
  135. package/lib/components/Header/InfoBar/types.js +1 -1
  136. package/lib/components/Header/KandoNavbar/KandoNavbar.js +65 -90
  137. package/lib/components/Header/KandoNavbar/index.js +1 -1
  138. package/lib/components/Header/Slideshow/Slideshow.js +67 -89
  139. package/lib/components/Header/Slideshow/index.js +1 -1
  140. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +6 -4
  141. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +21 -23
  142. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +23 -21
  143. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +35 -41
  144. package/lib/components/Header/Toolbar/Toolbar.js +58 -76
  145. package/lib/components/InfoBar/InfoBar.js +10 -23
  146. package/lib/components/InfoBar/InfoBar.stories.js +3 -5
  147. package/lib/components/KandoModal/KandoModal.js +23 -37
  148. package/lib/components/KandoModal/index.js +1 -1
  149. package/lib/components/Link.js +8 -7
  150. package/lib/components/Links/CustomRedirect/CustomRedirect.js +9 -8
  151. package/lib/components/Links/StyledLink/StyledLink.js +12 -12
  152. package/lib/components/Links/StyledNavLink/StyledNavLink.js +11 -10
  153. package/lib/components/LiveEvents/CarouselSlide.js +9 -7
  154. package/lib/components/LiveEvents/LiveEvents.js +5 -3
  155. package/lib/components/LiveEvents/index.js +1 -1
  156. package/lib/components/LoaderByPercent/LoaderByPercent.js +36 -28
  157. package/lib/components/Map/Map.js +19 -22
  158. package/lib/components/Map/index.js +1 -1
  159. package/lib/components/Modal/Modal.js +9 -9
  160. package/lib/components/NarrowHeader.js +17 -31
  161. package/lib/components/PointInfo/PointInfo.js +18 -16
  162. package/lib/components/PointInfo/index.js +1 -1
  163. package/lib/components/PopupModal/PopupModal.js +12 -16
  164. package/lib/components/PopupModal/PopupModal.stories.js +15 -19
  165. package/lib/components/Sector/Sector.js +8 -6
  166. package/lib/components/Sector/Sector.test.js +23 -24
  167. package/lib/components/Sector/index.js +1 -1
  168. package/lib/components/Sector/sectorIcons.js +2 -2
  169. package/lib/components/SevereEvent/Eta/Eta.js +48 -51
  170. package/lib/components/SevereEvent/Eta/styles.js +10 -6
  171. package/lib/components/SevereEvent/SevereEvent.js +27 -34
  172. package/lib/components/Spinner/Spinner.js +7 -7
  173. package/lib/components/Spinner/Spinner.stories.js +4 -6
  174. package/lib/components/Spinner/index.js +1 -1
  175. package/lib/components/Spinner/styles.js +20 -12
  176. package/lib/components/Tabs/Tabs.js +18 -27
  177. package/lib/components/Tabs/Tabs.stories.js +4 -6
  178. package/lib/components/Tabs/assets/index.js +6 -6
  179. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +12 -15
  180. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +34 -45
  181. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +19 -31
  182. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +1 -1
  183. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +16 -21
  184. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +11 -11
  185. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +1 -1
  186. package/lib/components/TimeRangeSelector/TimeRangeList.js +23 -24
  187. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +16 -24
  188. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +28 -29
  189. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +4 -6
  190. package/lib/components/TimeRangeSelector/constants.js +3 -3
  191. package/lib/components/TimeRangeSelector/index.js +1 -1
  192. package/lib/components/Toggle/Toggle.js +10 -15
  193. package/lib/components/Toggle/index.js +1 -1
  194. package/lib/components/TrendGraph/TrendGraph.js +22 -38
  195. package/lib/components/TrendGraph/index.js +1 -1
  196. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +24 -31
  197. package/lib/components/TrendGraphNVL/index.js +1 -1
  198. package/lib/development-environment/index.js +8 -12
  199. package/lib/development-environment/mock/browser.js +2 -4
  200. package/lib/development-environment/mock/get.js +8 -10
  201. package/lib/development-environment/mock/handlers.js +2 -2
  202. package/lib/development-environment/mock/mockBus.js +4 -4
  203. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +2 -2
  204. package/lib/development-environment/mock/mockObjects/areaInformation.js +2 -2
  205. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +2 -2
  206. package/lib/development-environment/mock/mockObjects/areaSitesData.js +2 -2
  207. package/lib/development-environment/mock/mockObjects/areasJson.js +2 -2
  208. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +2 -2
  209. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +2 -2
  210. package/lib/development-environment/mock/mockObjects/data-menuData.js +2 -2
  211. package/lib/development-environment/mock/mockObjects/data-search.js +2 -2
  212. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +2 -2
  213. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +2 -2
  214. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +2 -2
  215. package/lib/development-environment/mock/mockObjects/eventsJson.js +2 -2
  216. package/lib/development-environment/mock/mockObjects/metascore.js +2 -2
  217. package/lib/development-environment/mock/mockObjects/permissionsJson.js +2 -2
  218. package/lib/development-environment/mock/mockObjects/pointsJson.js +2 -2
  219. package/lib/development-environment/mock/mockObjects/site-info.js +2 -2
  220. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +2 -2
  221. package/lib/development-environment/togly/ToglyDashboard.js +13 -22
  222. package/lib/development-environment/togly/ToglyItem.js +25 -28
  223. package/lib/development-environment/togly/flags.js +1 -1
  224. package/lib/development-environment/togly/init.js +3 -3
  225. package/lib/development-environment/togly/macro.js +13 -9
  226. package/lib/development-environment/togly/useDoubleKeyDown.js +7 -9
  227. package/lib/development-environment/togly/useLocalStorage.js +13 -18
  228. package/lib/hooks/useApi.js +19 -55
  229. package/lib/hooks/useApiWithDashboardQuery.js +30 -49
  230. package/lib/hooks/useClickOutside.js +3 -3
  231. package/lib/hooks/useInitializeHeaders.js +5 -5
  232. package/lib/hooks/useKandoFetch.js +15 -28
  233. package/lib/hooks/useMap.js +22 -34
  234. package/lib/hooks/useNavContext.js +22 -26
  235. package/lib/hooks/useQueryURL.js +1 -1
  236. package/lib/hooks/useRemoveExistingLayers.js +6 -6
  237. package/lib/hooks/useUpdateEventBodyTail.js +13 -17
  238. package/lib/hooks/useUserTimeZone.js +33 -30
  239. package/lib/hooks/useUserTimeZone.test.js +19 -22
  240. package/lib/hooks/useWindowSize.js +7 -14
  241. package/lib/index.js +11 -12
  242. package/lib/macros/getVersion.js +2 -2
  243. package/lib/models/IAction.js +1 -1
  244. package/lib/models/IAppState.js +1 -1
  245. package/lib/pages/AreaPage/AreaPage.js +34 -67
  246. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +15 -16
  247. package/lib/pages/AreaPage/Dashboard/Dashboard.js +23 -24
  248. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +17 -25
  249. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +4 -4
  250. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +7 -7
  251. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +9 -9
  252. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +3 -3
  253. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  254. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +2 -2
  255. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +4 -4
  256. package/lib/pages/AssessmentPage/AssessmentPage.js +37 -43
  257. package/lib/pages/CannyWidget/Feedback.js +13 -13
  258. package/lib/pages/CovidPage/CovidPage.js +8 -13
  259. package/lib/pages/CovidPage/components/Body.js +25 -27
  260. package/lib/pages/CovidPage/components/Map.js +27 -37
  261. package/lib/pages/CovidPage/components/Sidebar.js +14 -13
  262. package/lib/pages/CovidPage/components/Summary.js +19 -26
  263. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +24 -31
  264. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +1 -1
  265. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +51 -73
  266. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +1 -1
  267. package/lib/pages/CovidPage/components/areas/Area.js +24 -35
  268. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +44 -43
  269. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +32 -35
  270. package/lib/pages/CovidPage/components/areas/AreasList.js +29 -41
  271. package/lib/pages/CovidPage/components/areas/Sort.js +11 -14
  272. package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -11
  273. package/lib/pages/DashboardMap/AreaCard.js +26 -26
  274. package/lib/pages/DashboardMap/AssessmentIcon.js +7 -6
  275. package/lib/pages/DashboardMap/Capacity.js +34 -85
  276. package/lib/pages/DashboardMap/FactoryCard.js +28 -24
  277. package/lib/pages/DashboardMap/HighchartsOptions.js +5 -4
  278. package/lib/pages/DashboardMap/List.js +77 -96
  279. package/lib/pages/DashboardMap/ListContext.js +15 -19
  280. package/lib/pages/DashboardMap/Loader.js +2 -2
  281. package/lib/pages/DashboardMap/SeverityBadge.js +10 -18
  282. package/lib/pages/DashboardMap/WWTPMap.js +61 -67
  283. package/lib/pages/DashboardMap/WaterDischarge.js +8 -8
  284. package/lib/pages/DashboardMap/Widget.js +53 -70
  285. package/lib/pages/DashboardMap/index.js +1 -1
  286. package/lib/pages/DashboardMap/utils.js +41 -50
  287. package/lib/pages/EventsPage/Body/Body.js +20 -15
  288. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +17 -19
  289. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +27 -35
  290. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +8 -6
  291. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +11 -7
  292. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +21 -30
  293. package/lib/pages/EventsPage/DragAndDropArea/index.js +1 -1
  294. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +52 -63
  295. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +19 -31
  296. package/lib/pages/EventsPage/EventsPage.js +7 -10
  297. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +25 -37
  298. package/lib/pages/EventsPage/events/MoreInfo.js +17 -16
  299. package/lib/pages/EventsPage/events/Sidebar.js +21 -16
  300. package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +7 -7
  301. package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +18 -20
  302. package/lib/pages/EventsPage/events/event_info/Contaminants/index.js +1 -1
  303. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +30 -35
  304. package/lib/pages/EventsPage/events/event_info/EventDetails.js +32 -29
  305. package/lib/pages/EventsPage/events/event_info/EventInfo.js +41 -40
  306. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +4 -4
  307. package/lib/pages/EventsPage/events/event_info/EventSection.js +16 -18
  308. package/lib/pages/EventsPage/events/event_info/EventSection.test.js +43 -38
  309. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +39 -46
  310. package/lib/pages/EventsPage/events/event_info/Header/Header.js +6 -4
  311. package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +28 -31
  312. package/lib/pages/EventsPage/events/event_info/Header/index.js +1 -1
  313. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +4 -4
  314. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +29 -36
  315. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +4 -6
  316. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +22 -21
  317. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +12 -19
  318. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +5 -3
  319. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/index.js +1 -1
  320. package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +11 -9
  321. package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +21 -25
  322. package/lib/pages/EventsPage/events/event_info/SamplingList/index.js +1 -1
  323. package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +11 -7
  324. package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +6 -6
  325. package/lib/pages/EventsPage/events/event_info/SeverityScore/index.js +1 -1
  326. package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +5 -3
  327. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +2 -2
  328. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +12 -10
  329. package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +6 -4
  330. package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +10 -12
  331. package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +5 -3
  332. package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +7 -5
  333. package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +7 -5
  334. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +6 -4
  335. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +11 -9
  336. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +18 -18
  337. package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +6 -6
  338. package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +7 -5
  339. package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +17 -15
  340. package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +4 -4
  341. package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +10 -8
  342. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +16 -11
  343. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +11 -10
  344. package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +2 -2
  345. package/lib/pages/EventsPage/events/event_info/Timelines/index.js +1 -1
  346. package/lib/pages/EventsPage/events/event_info/Timelines/style.js +3 -3
  347. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +24 -37
  348. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +29 -36
  349. package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +11 -9
  350. package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +15 -17
  351. package/lib/pages/EventsPage/events/event_info/sources/Source.js +25 -28
  352. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +21 -24
  353. package/lib/pages/EventsPage/events/event_info/styles.js +20 -12
  354. package/lib/pages/EventsPage/events/events_list/EventItem.js +17 -18
  355. package/lib/pages/EventsPage/events/events_list/EventUtils.js +10 -10
  356. package/lib/pages/EventsPage/events/events_list/EventsList.js +114 -134
  357. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +38 -53
  358. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +72 -108
  359. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +53 -70
  360. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +38 -41
  361. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +29 -36
  362. package/lib/pages/EventsPage/events/events_list/Sort.js +13 -16
  363. package/lib/pages/ImportFileWizard/FileUploadRespones.js +12 -19
  364. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +6 -4
  365. package/lib/pages/ImportFileWizard/ImportFile.js +20 -22
  366. package/lib/pages/ImportFileWizard/ResponseBody.js +24 -33
  367. package/lib/pages/ImportFileWizard/ValidationForm.js +21 -20
  368. package/lib/pages/ImportFileWizard/ValidationResponse.js +21 -21
  369. package/lib/pages/ImportFileWizard/importFileUtils.js +2 -2
  370. package/lib/pages/ImportFileWizard/index.js +1 -1
  371. package/lib/pages/ImportGisPage/ImportGisContainer.js +21 -24
  372. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +21 -23
  373. package/lib/pages/ImportGisPage/importGisUtils.js +12 -20
  374. package/lib/pages/ImportGisProcess/index.js +12 -15
  375. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +7 -12
  376. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +17 -19
  377. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +3 -3
  378. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +28 -57
  379. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +6 -8
  380. package/lib/pages/NotificationsPage/Notification/Notification.js +16 -12
  381. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  382. package/lib/pages/NotificationsPage/Notifications.mock.js +2 -2
  383. package/lib/pages/NotificationsPage/Notifications.stories.js +4 -6
  384. package/lib/pages/NotificationsPage/NotificationsPage.js +18 -36
  385. package/lib/pages/NotificationsPage/assets/index.js +10 -10
  386. package/lib/pages/NotificationsPageV2/NotificationsPage.js +70 -93
  387. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +93 -62
  388. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +126 -137
  389. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +71 -71
  390. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +90 -87
  391. package/lib/pages/NotificationsPageV2/notificationUtils.js +39 -33
  392. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  393. package/lib/pages/OldSitePage/OldSitePage.js +56 -131
  394. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +5 -5
  395. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +3 -5
  396. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +8 -6
  397. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +18 -20
  398. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +9 -7
  399. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +12 -18
  400. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +16 -12
  401. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +3 -5
  402. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +17 -11
  403. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +51 -63
  404. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +9 -7
  405. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +29 -53
  406. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +4 -4
  407. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
  408. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +11 -10
  409. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +10 -11
  410. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +26 -22
  411. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +26 -28
  412. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  413. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +4 -4
  414. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +15 -9
  415. package/lib/pages/ProfilePage/Container.js +2 -2
  416. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +23 -39
  417. package/lib/pages/ProfilePage/ProfilePage.js +111 -199
  418. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +25 -33
  419. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +18 -15
  420. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +27 -29
  421. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +56 -116
  422. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +17 -20
  423. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +12 -10
  424. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +38 -40
  425. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +25 -26
  426. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +16 -16
  427. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +13 -15
  428. package/lib/pages/SamplingsPage/DesktopActions/index.js +1 -1
  429. package/lib/pages/SamplingsPage/NavigationDropdown.js +42 -29
  430. package/lib/pages/SamplingsPage/NewSamplingAction.js +74 -97
  431. package/lib/pages/SamplingsPage/SamplingMobileModal.js +123 -97
  432. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +21 -22
  433. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +34 -22
  434. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +35 -58
  435. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +15 -18
  436. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +8 -6
  437. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +107 -191
  438. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +47 -53
  439. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +42 -38
  440. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +42 -38
  441. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +19 -20
  442. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +3 -3
  443. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +10 -6
  444. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +51 -52
  445. package/lib/pages/SamplingsPage/SamplingsMobileList.js +21 -28
  446. package/lib/pages/SamplingsPage/SamplingsPage.js +25 -31
  447. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +49 -57
  448. package/lib/pages/SamplingsPage/index.js +1 -1
  449. package/lib/pages/SamplingsPage/samplingsPageUtils.js +67 -75
  450. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +6 -4
  451. package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +14 -13
  452. package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +10 -13
  453. package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +16 -16
  454. package/lib/pages/SitePage/PollutionContributor/index.js +1 -1
  455. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +3 -5
  456. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +14 -10
  457. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -8
  458. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +26 -23
  459. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +14 -17
  460. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +36 -32
  461. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +9 -7
  462. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +15 -24
  463. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +16 -12
  464. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +3 -5
  465. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +17 -11
  466. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +58 -70
  467. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +9 -7
  468. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +15 -26
  469. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +5 -5
  470. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
  471. package/lib/pages/SitePage/SamplingParameters/body/Body.js +8 -8
  472. package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +29 -37
  473. package/lib/pages/SitePage/SamplingParameters/body/index.js +1 -1
  474. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +11 -11
  475. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +10 -11
  476. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +53 -53
  477. package/lib/pages/SitePage/SamplingParameters/dataParser.js +29 -38
  478. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +11 -9
  479. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  480. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +4 -4
  481. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +15 -9
  482. package/lib/pages/SitePage/SiteInformation/EmptyState.js +11 -7
  483. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +31 -31
  484. package/lib/pages/SitePage/SitePage.js +34 -73
  485. package/lib/pages/UploadLabResult/index.js +13 -13
  486. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +26 -35
  487. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +6 -8
  488. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +9 -8
  489. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +3 -5
  490. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +46 -47
  491. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +10 -6
  492. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +2 -2
  493. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +4 -6
  494. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +10 -9
  495. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  496. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +15 -12
  497. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +7 -7
  498. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +2 -2
  499. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +16 -24
  500. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +29 -30
  501. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +15 -16
  502. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +7 -13
  503. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +26 -30
  504. package/lib/pages/WbeDashboard/ExpandableComponent.js +9 -8
  505. package/lib/pages/WbeDashboard/GraphWrapper.js +28 -34
  506. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +17 -19
  507. package/lib/pages/WbeDashboard/SearchInput.js +15 -20
  508. package/lib/pages/WbeDashboard/SummaryGraph.js +50 -76
  509. package/lib/pages/WbeDashboard/SummaryGraphModal.js +19 -17
  510. package/lib/pages/WbeDashboard/Tabs.js +10 -10
  511. package/lib/pages/WbeDashboard/WbeDashboardPage.js +144 -206
  512. package/lib/pages/WbeDashboard/WbeSummaryBar.js +39 -47
  513. package/lib/pages/WwtpPage/DashboardCard.js +23 -20
  514. package/lib/pages/WwtpPage/DischargePatternCard.js +14 -23
  515. package/lib/pages/WwtpPage/InletsCard/InletsBar.js +25 -21
  516. package/lib/pages/WwtpPage/InletsCard/InletsCard.js +19 -18
  517. package/lib/pages/WwtpPage/InletsCard/index.js +1 -1
  518. package/lib/pages/WwtpPage/Map.js +5 -3
  519. package/lib/pages/WwtpPage/OrganicCard.js +2 -2
  520. package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +2 -2
  521. package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +6 -4
  522. package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +9 -8
  523. package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +18 -14
  524. package/lib/pages/WwtpPage/PotentialSaving/index.js +1 -1
  525. package/lib/pages/WwtpPage/PotentialSaving/types.js +1 -1
  526. package/lib/pages/WwtpPage/PredictionCard.js +2 -2
  527. package/lib/pages/WwtpPage/TrendCard.js +18 -19
  528. package/lib/pages/WwtpPage/UpgradeBox.js +2 -2
  529. package/lib/pages/WwtpPage/WwtpPage.js +7 -7
  530. package/lib/pages/WwtpPage/WwtpPageContainer.js +21 -16
  531. package/lib/pages/WwtpPage/index.js +1 -1
  532. package/lib/providers/Slideshow/SlideshowContext.js +11 -9
  533. package/lib/providers/Slideshow/SlideshowProvider.js +22 -38
  534. package/lib/providers/Slideshow/SlideshowRunner.js +17 -19
  535. package/lib/providers/UrlHistory/UrlHistoryContext.js +6 -4
  536. package/lib/providers/UrlHistory/UrlHistoryProvider.js +12 -11
  537. package/lib/providers/UrlHistory/index.js +3 -3
  538. package/lib/providers/UrlHistory/useLastVisited.js +4 -4
  539. package/lib/react-app-env.d.js +1 -1
  540. package/lib/store/ImportGis/action.js +1 -1
  541. package/lib/store/ImportGis/actionTypes.js +2 -2
  542. package/lib/store/ImportGis/actionsCreator.js +7 -5
  543. package/lib/store/ImportGis/models/gisImports.js +1 -1
  544. package/lib/store/ImportGis/reducer.js +40 -29
  545. package/lib/store/WBE/actionTypes.js +2 -2
  546. package/lib/store/WBE/actions.js +1 -1
  547. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  548. package/lib/store/WBE/models/IWBE.js +1 -1
  549. package/lib/store/WBE/models/IWBEState.js +1 -1
  550. package/lib/store/WBE/reducer.js +13 -9
  551. package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +24 -14
  552. package/lib/store/WWTPDashboard/types.js +1 -1
  553. package/lib/store/areas/actionTypes.js +4 -4
  554. package/lib/store/areas/actions.js +7 -13
  555. package/lib/store/areas/models/IArea.js +1 -1
  556. package/lib/store/areas/models/IAreasState.js +1 -1
  557. package/lib/store/areas/reducer.js +8 -6
  558. package/lib/store/context/actionTypes.js +3 -3
  559. package/lib/store/context/actions.js +3 -3
  560. package/lib/store/context/contextMiddlewares.js +14 -16
  561. package/lib/store/context/models/INavContext.js +1 -1
  562. package/lib/store/context/models/INavContextState.js +1 -1
  563. package/lib/store/context/reducer.js +13 -9
  564. package/lib/store/dashboard/dashboardSlice.js +18 -10
  565. package/lib/store/dashboard/periodType.js +1 -1
  566. package/lib/store/edges/actionTypes.js +5 -5
  567. package/lib/store/edges/actions.js +4 -8
  568. package/lib/store/edges/models/IEdge.js +1 -1
  569. package/lib/store/edges/models/IEdgesState.js +1 -1
  570. package/lib/store/edges/reducer.js +13 -17
  571. package/lib/store/events/actionTypes.js +17 -17
  572. package/lib/store/events/actions.js +3 -7
  573. package/lib/store/events/models/IEvent.js +1 -1
  574. package/lib/store/events/models/IEventsState.js +1 -1
  575. package/lib/store/events/models/ISource.js +1 -1
  576. package/lib/store/events/reducer.js +42 -49
  577. package/lib/store/filters/IFilter.js +1 -1
  578. package/lib/store/filters/IFilterItem.js +1 -1
  579. package/lib/store/global/actionTypes.js +11 -11
  580. package/lib/store/global/actions.js +8 -6
  581. package/lib/store/global/models/IGlobalState.js +1 -1
  582. package/lib/store/global/reducer.js +11 -10
  583. package/lib/store/permissions/permissionsSlice.js +12 -8
  584. package/lib/store/points/actionTypes.js +3 -3
  585. package/lib/store/points/actions.js +3 -7
  586. package/lib/store/points/models/IGroup.js +1 -1
  587. package/lib/store/points/models/IPoint.js +1 -1
  588. package/lib/store/points/models/IPointsState.js +1 -1
  589. package/lib/store/points/reducer.js +7 -5
  590. package/lib/store/rootActionTypes.js +2 -2
  591. package/lib/store/rootActions.js +1 -1
  592. package/lib/store/rootReducer.js +17 -12
  593. package/lib/store/rootStore.js +5 -5
  594. package/lib/store/samplings/action.js +1 -1
  595. package/lib/store/samplings/actionTypes.js +2 -2
  596. package/lib/store/samplings/actionsCreator.js +1 -1
  597. package/lib/store/samplings/models/Samplings.js +1 -1
  598. package/lib/store/samplings/reducer.js +16 -14
  599. package/lib/styles/StylesLayout.js +5 -3
  600. package/lib/styles/theme/theme.js +26 -27
  601. package/lib/test/mocks/browser.js +2 -4
  602. package/lib/test/test-utils.js +17 -15
  603. package/lib/ui-kit/Button/Button.js +127 -79
  604. package/lib/ui-kit/Button/Button.test.js +27 -32
  605. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  606. package/lib/ui-kit/Checkbox/Checkbox.js +30 -20
  607. package/lib/ui-kit/ContentCard/ContentCard.js +14 -17
  608. package/lib/ui-kit/Dashboard/Dashboard.js +38 -25
  609. package/lib/ui-kit/Dashboard/index.js +1 -1
  610. package/lib/ui-kit/DropDown/DropDown.js +22 -23
  611. package/lib/ui-kit/DropDown/DropDown.test.js +12 -12
  612. package/lib/ui-kit/DropDown/DropDownItem.js +24 -21
  613. package/lib/ui-kit/DropDown/DropdownToggle.js +12 -8
  614. package/lib/ui-kit/EmptyState/EmptyState.js +5 -3
  615. package/lib/ui-kit/IconAction/IconAction.js +7 -5
  616. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +46 -62
  617. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +57 -48
  618. package/lib/ui-kit/InletsPie/InletsPie.js +15 -13
  619. package/lib/ui-kit/InletsPie/index.js +1 -1
  620. package/lib/ui-kit/InletsPie/options.js +6 -6
  621. package/lib/ui-kit/KandoList/KandoList.js +14 -12
  622. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  623. package/lib/ui-kit/KandoTable/KandoTable.js +48 -40
  624. package/lib/ui-kit/KandoTable/KandoTable.test.js +20 -26
  625. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  626. package/lib/ui-kit/Layout/Layout.js +6 -4
  627. package/lib/ui-kit/MobileInput/MobileInput.js +55 -49
  628. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +13 -16
  629. package/lib/ui-kit/ModalConfirmation/index.js +1 -1
  630. package/lib/ui-kit/OrganicEvents/GaugeChart.js +7 -5
  631. package/lib/ui-kit/OrganicEvents/OrganicEvents.js +6 -6
  632. package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +27 -20
  633. package/lib/ui-kit/OrganicEvents/TextInfo.js +15 -10
  634. package/lib/ui-kit/OrganicEvents/index.js +1 -1
  635. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +10 -8
  636. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +14 -17
  637. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +3 -3
  638. package/lib/ui-kit/ScoreGauge/ScoreGauge.js +20 -19
  639. package/lib/ui-kit/ScoreGauge/constant.js +3 -3
  640. package/lib/ui-kit/ScoreGauge/index.js +1 -1
  641. package/lib/ui-kit/TimeLineChart/TrendChart.js +54 -42
  642. package/lib/ui-kit/TimeLineChart/index.js +1 -1
  643. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +8 -7
  644. package/lib/ui-kit/Tooltip/Tooltip.js +14 -8
  645. package/lib/ui-kit/index.js +8 -8
  646. package/lib/ui-kit/kandoStepper/KandoStepper.js +11 -11
  647. package/lib/ui-kit/siteName/SiteName.js +11 -8
  648. package/lib/utilities/ActionUtility.js +7 -7
  649. package/lib/utilities/Alert.js +21 -17
  650. package/lib/utilities/Analytics.js +11 -11
  651. package/lib/utilities/Array.js +4 -5
  652. package/lib/utilities/Enum.js +15 -51
  653. package/lib/utilities/ErrorBoundary.js +27 -41
  654. package/lib/utilities/File.js +40 -69
  655. package/lib/utilities/GetDir.js +8 -7
  656. package/lib/utilities/KandoDate.js +7 -15
  657. package/lib/utilities/KandoModal.js +16 -26
  658. package/lib/utilities/LocalStorage.js +5 -7
  659. package/lib/utilities/ThousandsToK.js +2 -2
  660. package/lib/utilities/TimeFormat.js +21 -20
  661. package/lib/utilities/Truncate.js +16 -24
  662. package/lib/utilities/edgesMath.js +14 -15
  663. package/lib/utilities/i18n.js +3 -3
  664. package/lib/utilities/kql.js +10 -12
  665. package/lib/utilities/map/icons.js +3 -3
  666. package/lib/utilities/polylinedecorator.js +87 -112
  667. package/lib/utilities/scoreToData.js +10 -10
  668. package/lib/utilities/scoreToData.test.js +5 -5
  669. package/lib/utilities/time.js +8 -8
  670. package/lib/utilities/uploadToS3.js +11 -11
  671. package/lib/utilities/urls.js +16 -14
  672. package/package.json +1 -1
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
8
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
12
9
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
13
10
  var _react = _interopRequireWildcard(require("react"));
@@ -27,70 +24,72 @@ var _EventInfo = _interopRequireDefault(require("../event_info/EventInfo"));
27
24
  var _MoreInfo = _interopRequireDefault(require("../MoreInfo"));
28
25
  var _FilterContainer = _interopRequireDefault(require("./Filter/FilterContainer"));
29
26
  var _Sort = _interopRequireDefault(require("./Sort"));
30
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
32
29
  /* eslint-disable etc/no-commented-out-code */
33
30
 
34
31
  function mapStateToProps(state) {
35
- var events_data = state.events_data,
36
- global_data = state.global_data,
37
- edges_data = state.edges_data,
38
- points_data = state.points_data,
39
- areas_data = state.areas_data,
40
- nav_context_data = state.nav_context_data;
32
+ const {
33
+ events_data,
34
+ global_data,
35
+ edges_data,
36
+ points_data,
37
+ areas_data,
38
+ nav_context_data
39
+ } = state;
41
40
  return {
42
- events_data: events_data,
43
- global_data: global_data,
44
- edges_data: edges_data,
45
- points_data: points_data,
46
- areas_data: areas_data,
47
- nav_context_data: nav_context_data
41
+ events_data,
42
+ global_data,
43
+ edges_data,
44
+ points_data,
45
+ areas_data,
46
+ nav_context_data
48
47
  };
49
48
  }
50
- var EventsList = function EventsList(_ref) {
51
- var areas_data = _ref.areas_data,
52
- points_data = _ref.points_data,
53
- edges_data = _ref.edges_data,
54
- global_data = _ref.global_data,
55
- sidenavExpanded = _ref.sidenavExpanded,
56
- events_data = _ref.events_data,
57
- nav_context_data = _ref.nav_context_data;
58
- var dispatch = (0, _reactRedux.useDispatch)();
59
- var items = events_data.items,
60
- isFetching = events_data.isFetching,
61
- focusedEvent = events_data.focusedEvent,
62
- hoveredEvent = events_data.hoveredEvent,
63
- hoveredEventPaths = events_data.hoveredEventPaths,
64
- hoveredEdgePaths = events_data.hoveredEdgePaths;
65
- var waterAuthorityId = global_data.waterAuthorityId,
66
- map = global_data.map;
67
- var _useState = (0, _react.useState)(true),
68
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
69
- filterPopupOpen = _useState2[0],
70
- setFilterPopupOpen = _useState2[1];
71
- var _useState3 = (0, _react.useState)({
72
- messages: [{
73
- message: '',
74
- event_id: 0
75
- }],
76
- event_ids: []
77
- }),
78
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
79
- exceptionAlert = _useState4[0],
80
- setExceptionAlert = _useState4[1];
81
- var lastVisited = (0, _UrlHistory.useLastVisited)();
82
- var useQuery = function useQuery() {
49
+ const EventsList = _ref => {
50
+ let {
51
+ areas_data,
52
+ points_data,
53
+ edges_data,
54
+ global_data,
55
+ sidenavExpanded,
56
+ events_data,
57
+ nav_context_data
58
+ } = _ref;
59
+ const dispatch = (0, _reactRedux.useDispatch)();
60
+ const {
61
+ items,
62
+ isFetching,
63
+ focusedEvent,
64
+ hoveredEvent,
65
+ hoveredEventPaths,
66
+ hoveredEdgePaths
67
+ } = events_data;
68
+ const {
69
+ waterAuthorityId,
70
+ map
71
+ } = global_data;
72
+ const [filterPopupOpen, setFilterPopupOpen] = (0, _react.useState)(true);
73
+ const [exceptionAlert, setExceptionAlert] = (0, _react.useState)({
74
+ messages: [{
75
+ message: '',
76
+ event_id: 0
77
+ }],
78
+ event_ids: []
79
+ });
80
+ const lastVisited = (0, _UrlHistory.useLastVisited)();
81
+ const useQuery = () => {
83
82
  return new URLSearchParams((0, _reactRouterDom.useLocation)().search);
84
83
  };
85
- var history = (0, _reactRouterDom.useHistory)();
86
- var query = useQuery();
87
- var getKQLValuesFromURL = function getKQLValuesFromURL() {
84
+ const history = (0, _reactRouterDom.useHistory)();
85
+ const query = useQuery();
86
+ const getKQLValuesFromURL = () => {
88
87
  return query.get('valuesFromKQL');
89
88
  };
90
- var getEventIdFromURL = function getEventIdFromURL() {
89
+ const getEventIdFromURL = () => {
91
90
  return query.get('eventId');
92
91
  };
93
- var loader = function loader() {
92
+ const loader = () => {
94
93
  if (isFetching && items.length === 0 || areas_data.newAreas.length === 0 || points_data.isFetching || edges_data.isFetching) {
95
94
  return /*#__PURE__*/_react.default.createElement("div", {
96
95
  className: 'loader'
@@ -99,39 +98,35 @@ var EventsList = function EventsList(_ref) {
99
98
  return null;
100
99
  }
101
100
  };
102
- var handleExpansionToggle = function handleExpansionToggle() {
101
+ const handleExpansionToggle = () => {
103
102
  dispatch((0, _actions2.sideNavExpanded)(!sidenavExpanded));
104
103
  };
105
- var applyDefaultFilter = function applyDefaultFilter() {
104
+ const applyDefaultFilter = () => {
106
105
  history.push("/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&locale=").concat(nav_context_data.navContext.locale, "&valuesFromKQL="));
107
106
  dispatch((0, _actions2.setEventFilterParam)(''));
108
107
  };
109
- var validateEvent = function validateEvent(event) {
108
+ const validateEvent = event => {
110
109
  // check that all observations' edges exists. If they are not exists it's indicates that their points are
111
110
  // not in the hierarchy or doesn't have lat/lng.
112
- var invalidObservationsMessages = [];
113
- event.observations.forEach(function (observation) {
111
+ let invalidObservationsMessages = [];
112
+ event.observations.forEach(observation => {
114
113
  // if observation is root (ex. WWTP) there is no edge that its a source. so we can skip this check
115
114
  if (!observation.point_is_root) {
116
- var edge = edges_data.items.find(function (edge) {
117
- return edge.source_point_id === observation.point_id;
118
- });
115
+ let edge = edges_data.items.find(edge => edge.source_point_id === observation.point_id);
119
116
  if (edge === undefined) {
120
117
  invalidObservationsMessages.push("".concat(observation.point_name, " (").concat(observation.point_id, ") "));
121
118
  }
122
119
  }
123
120
  });
124
121
  if (invalidObservationsMessages.length !== 0) {
125
- var index = exceptionAlert.messages.findIndex(function (msg) {
126
- return msg.event_id === event.id;
127
- });
122
+ let index = exceptionAlert.messages.findIndex(msg => msg.event_id === event.id);
128
123
  if (index === -1) {
129
124
  setExceptionAlert({
130
- messages: [].concat((0, _toConsumableArray2.default)(exceptionAlert.messages), [{
125
+ messages: [...exceptionAlert.messages, {
131
126
  message: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", null, _i18n.default.t('events_overview.event_data_missing'))),
132
127
  event_id: event.id
133
- }]),
134
- event_ids: [].concat((0, _toConsumableArray2.default)(exceptionAlert.event_ids), [event.id])
128
+ }],
129
+ event_ids: [...exceptionAlert.event_ids, event.id]
135
130
  });
136
131
  }
137
132
  return false;
@@ -139,17 +134,13 @@ var EventsList = function EventsList(_ref) {
139
134
 
140
135
  // same check as above but this time for the event path. If edge doesn't exist, it's indicates that one of the
141
136
  // points downstream doesn't have lat/lng.
142
- var invalidPathMessages = [];
143
- event.path.forEach(function (path) {
144
- var edge = edges_data.items.find(function (edge) {
145
- return edge.id === path.edge_id;
146
- });
137
+ let invalidPathMessages = [];
138
+ event.path.forEach(path => {
139
+ let edge = edges_data.items.find(edge => edge.id === path.edge_id);
147
140
  if (edge === undefined) {
148
141
  console.error("edge ".concat(path.edge_id, " can not be found"));
149
- var observation = event.observations.find(function (observation) {
150
- return observation.id === path.last_observation_id;
151
- });
152
- var lastObservationPoint = 'Not found';
142
+ let observation = event.observations.find(observation => observation.id === path.last_observation_id);
143
+ let lastObservationPoint = 'Not found';
153
144
  if (observation) {
154
145
  lastObservationPoint = observation.point_name;
155
146
  console.error('lastObservationPoint', lastObservationPoint);
@@ -158,19 +149,20 @@ var EventsList = function EventsList(_ref) {
158
149
  // invalidPathMessages.push(`${lastObservationPoint} `);
159
150
  }
160
151
  });
152
+
161
153
  if (invalidPathMessages.length !== 0) {
162
154
  setExceptionAlert({
163
- messages: [].concat((0, _toConsumableArray2.default)(exceptionAlert.messages), [{
155
+ messages: [...exceptionAlert.messages, {
164
156
  message: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", null, _i18n.default.t('events_overview.event_verify_coordinates')), /*#__PURE__*/_react.default.createElement("span", null, invalidPathMessages)),
165
157
  event_id: event.id
166
- }]),
167
- event_ids: [].concat((0, _toConsumableArray2.default)(exceptionAlert.event_ids), [event.id])
158
+ }],
159
+ event_ids: [...exceptionAlert.event_ids, event.id]
168
160
  });
169
161
  return false;
170
162
  }
171
163
  return true;
172
164
  };
173
- var handleEventItemClick = function handleEventItemClick(event, ref) {
165
+ const handleEventItemClick = (event, ref) => {
174
166
  if (ref !== null) onMouseLeaveEvent();
175
167
  // if (hoveredEventPaths && map) {
176
168
  // hoveredEventPaths.forEach((path) => {
@@ -182,29 +174,29 @@ var EventsList = function EventsList(_ref) {
182
174
  dispatch((0, _actions.setFocusedEvent)(event));
183
175
  setFilterPopupOpen(false);
184
176
  if (getEventIdFromURL() === null || getEventIdFromURL() === 'null') {
185
- setTimeout(function () {
177
+ setTimeout(() => {
186
178
  history.push("/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&locale=").concat(nav_context_data.navContext.locale, "&eventId=").concat(event.id, "&valuesFromKQL=").concat(global_data.eventFilterParam, "&validEvent=").concat(validateEvent(event)));
187
179
  }, 500);
188
180
  }
189
181
  };
190
- var onMouseEnterEvent = function onMouseEnterEvent(event) {
182
+ const onMouseEnterEvent = event => {
191
183
  if (!focusedEvent && !hoveredEvent && validateEvent(event)) {
192
184
  dispatch((0, _actions.setHoveredEvent)(event));
193
185
  }
194
186
  };
195
- var onMouseLeaveEvent = function onMouseLeaveEvent() {
187
+ const onMouseLeaveEvent = () => {
196
188
  if (hoveredEvent && hoveredEventPaths && map) {
197
- hoveredEventPaths.forEach(function (path) {
189
+ hoveredEventPaths.forEach(path => {
198
190
  map.removeLayer(path);
199
191
  });
200
192
  if (hoveredEdgePaths) {
201
- hoveredEdgePaths.forEach(function (path) {
193
+ hoveredEdgePaths.forEach(path => {
202
194
  map.removeLayer(path);
203
195
  });
204
196
  }
205
- var layers = map._layers;
206
- for (var property in layers) {
207
- var kando_object = layers[property].kando_object;
197
+ let layers = map._layers;
198
+ for (const property in layers) {
199
+ const kando_object = layers[property].kando_object;
208
200
  if ((kando_object === null || kando_object === void 0 ? void 0 : kando_object.includes('EventBody')) || ['EventTail', 'SamplingPoint', 'Decorator', 'HoveredEdge', 'HoveredEdgeFront', 'FocusedEdge', 'FocusedEdgeFront'].includes(kando_object)) {
209
201
  map.removeLayer(layers[property]);
210
202
  }
@@ -214,35 +206,31 @@ var EventsList = function EventsList(_ref) {
214
206
  dispatch((0, _actions.setHoveredEventPaths)([]));
215
207
  dispatch((0, _actions.setHoveredEdgePaths)([]));
216
208
  };
217
- var isDataFetchedAndEventNotFocused = function isDataFetchedAndEventNotFocused() {
209
+ const isDataFetchedAndEventNotFocused = () => {
218
210
  return (getEventIdFromURL() === 'null' || getEventIdFromURL() === null) && focusedEvent === null && items.length !== 0 && !isFetching && !areas_data.isFetching && !points_data.isFetching && !edges_data.isFetching;
219
211
  };
220
- var setFocusedEventIfFoundInParams = function setFocusedEventIfFoundInParams() {
212
+ const setFocusedEventIfFoundInParams = () => {
221
213
  if (getEventIdFromURL() !== null && getEventIdFromURL() !== 'null' && focusedEvent === null && items.length !== 0 && !isFetching && !areas_data.isFetching && !points_data.isFetching && !edges_data.isFetching) {
222
- var event = events_data.items.find(function (e) {
223
- return e.id === parseInt(getEventIdFromURL());
224
- });
214
+ let event = events_data.items.find(e => e.id === parseInt(getEventIdFromURL()));
225
215
  if (event !== undefined) {
226
- setTimeout(function () {
216
+ setTimeout(() => {
227
217
  handleEventItemClick(event, null);
228
218
  }, 500);
229
219
  }
230
220
  }
231
221
  };
232
- var validEvent = (0, _react.useMemo)(function () {
233
- var event = events_data.items.find(function (e) {
234
- return e.id.toString() === getEventIdFromURL();
235
- });
222
+ const validEvent = (0, _react.useMemo)(() => {
223
+ let event = events_data.items.find(e => e.id.toString() === getEventIdFromURL());
236
224
  if (event !== undefined) {
237
225
  return validateEvent(event);
238
226
  } else {
239
227
  return true;
240
228
  }
241
229
  }, [events_data.focusedEvent, areas_data.isFetching, points_data.isFetching, edges_data.isFetching, events_data.isFetching]);
242
- var triggerSort = function triggerSort(sort) {
230
+ const triggerSort = sort => {
243
231
  if (global_data.activeFilter !== null && isDataFetchedAndEventNotFocused()) {
244
- var KQL;
245
- var URL;
232
+ let KQL;
233
+ let URL;
246
234
  switch (sort) {
247
235
  case 1:
248
236
  KQL = "".concat((0, _kql.buildKQLQuery)(global_data.activeFilter, 'newest'));
@@ -265,16 +253,16 @@ var EventsList = function EventsList(_ref) {
265
253
  }
266
254
  }
267
255
  };
268
- var calcEventsRealAmount = function calcEventsRealAmount() {
269
- var eventsCount = 0;
256
+ const calcEventsRealAmount = () => {
257
+ let eventsCount = 0;
270
258
  eventsCount = events_data.events_count;
271
259
  if (eventsCount > 50) eventsCount = "".concat(_i18n.default.t('events_overview.more_than'), " 50");
272
260
  return eventsCount;
273
261
  };
274
- (0, _react.useEffect)(function () {
262
+ (0, _react.useEffect)(() => {
275
263
  dispatch((0, _actions.fetchEvents)(waterAuthorityId, getKQLValuesFromURL() || 'DEFAULT', getEventIdFromURL()));
276
264
  }, [global_data.waterAuthorityId, global_data.eventFilterParam, focusedEvent]);
277
- (0, _react.useEffect)(function () {
265
+ (0, _react.useEffect)(() => {
278
266
  if (!events_data.isFetching && !edges_data.isFetching && !points_data.isFetching && !areas_data.isFetching && areas_data.newAreas.length !== 0 && points_data.items.length !== 0 && filterPopupOpen) {
279
267
  setFocusedEventIfFoundInParams();
280
268
  }
@@ -285,12 +273,10 @@ var EventsList = function EventsList(_ref) {
285
273
  className: 'event-info ' + (!hoveredEvent && focusedEvent !== null ? '' : 'event-info--collapsed')
286
274
  }, !hoveredEvent && focusedEvent !== null && /*#__PURE__*/_react.default.createElement(_EventInfo.default, {
287
275
  event: focusedEvent,
288
- reOpenFilter: function reOpenFilter() {
289
- return setFilterPopupOpen(true);
290
- }
276
+ reOpenFilter: () => setFilterPopupOpen(true)
291
277
  })), /*#__PURE__*/_react.default.createElement("div", {
292
278
  className: "toggle-expansion-button",
293
- onClick: function onClick() {
279
+ onClick: () => {
294
280
  handleExpansionToggle();
295
281
  }
296
282
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -299,7 +285,7 @@ var EventsList = function EventsList(_ref) {
299
285
  icon: sidenavExpanded ? _freeSolidSvgIcons.faCaretLeft : _freeSolidSvgIcons.faCaretRight
300
286
  }))), /*#__PURE__*/_react.default.createElement("div", {
301
287
  className: 'toggle-expansion-button-mobile',
302
- onClick: function onClick() {
288
+ onClick: () => {
303
289
  handleExpansionToggle();
304
290
  }
305
291
  }, /*#__PURE__*/_react.default.createElement("a", {
@@ -329,9 +315,7 @@ var EventsList = function EventsList(_ref) {
329
315
  className: "icons"
330
316
  }, /*#__PURE__*/_react.default.createElement("button", {
331
317
  className: "filter",
332
- onClick: function onClick() {
333
- return setFilterPopupOpen(!filterPopupOpen);
334
- }
318
+ onClick: () => setFilterPopupOpen(!filterPopupOpen)
335
319
  }, /*#__PURE__*/_react.default.createElement(_funnel.ReactComponent, {
336
320
  width: "17px",
337
321
  height: "17px",
@@ -348,27 +332,23 @@ var EventsList = function EventsList(_ref) {
348
332
  alt: "NoEventsIcon"
349
333
  }), /*#__PURE__*/_react.default.createElement("h2", null, _i18n.default.t('events_overview.filter.blankslate.header')), /*#__PURE__*/_react.default.createElement("p", null, _i18n.default.t('events_overview.filter.blankslate.body')), /*#__PURE__*/_react.default.createElement("a", {
350
334
  className: 'apply_default_filter_button',
351
- onClick: function onClick() {
352
- return applyDefaultFilter();
353
- }
335
+ onClick: () => applyDefaultFilter()
354
336
  }, _i18n.default.t('events_overview.filter.blankslate.button'))), items.length !== 0 && !areas_data.isFetching && !points_data.isFetching && !edges_data.isFetching && /*#__PURE__*/_react.default.createElement("ul", {
355
337
  className: "events "
356
- }, items.map(function (event) {
357
- return /*#__PURE__*/_react.default.createElement("li", {
358
- key: event.id,
359
- className: "event",
360
- "data-event-id": event.id
361
- }, /*#__PURE__*/_react.default.createElement(_SevereEvent.SevereEvent, {
362
- event: event,
363
- handleClick: handleEventItemClick,
364
- onMouseEnterEvent: onMouseEnterEvent,
365
- onMouseLeaveEvent: onMouseLeaveEvent,
366
- validateEvent: validateEvent,
367
- exceptionAlert: exceptionAlert
368
- }));
369
- }))));
338
+ }, items.map(event => /*#__PURE__*/_react.default.createElement("li", {
339
+ key: event.id,
340
+ className: "event",
341
+ "data-event-id": event.id
342
+ }, /*#__PURE__*/_react.default.createElement(_SevereEvent.SevereEvent, {
343
+ event: event,
344
+ handleClick: handleEventItemClick,
345
+ onMouseEnterEvent: onMouseEnterEvent,
346
+ onMouseLeaveEvent: onMouseLeaveEvent,
347
+ validateEvent: validateEvent,
348
+ exceptionAlert: exceptionAlert
349
+ }))))));
370
350
  };
371
- var connector = (0, _reactRedux.connect)(mapStateToProps);
351
+ const connector = (0, _reactRedux.connect)(mapStateToProps);
372
352
  var _default = connector(EventsList);
373
353
  exports.default = _default;
374
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnJlZVNvbGlkU3ZnSWNvbnMiLCJyZXF1aXJlIiwiX3JlYWN0Rm9udGF3ZXNvbWUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9yZWFjdFJlZHV4IiwiX3JlYWN0Um91dGVyRG9tIiwiX2Fycm93TGVmdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZnVubmVsIiwiX25vX2V2ZW50cyIsIl9TZXZlcmVFdmVudCIsIl9VcmxIaXN0b3J5IiwiX2FjdGlvbnMiLCJfYWN0aW9uczIiLCJfaTE4biIsIl9rcWwiLCJfRXZlbnRJbmZvIiwiX01vcmVJbmZvIiwiX0ZpbHRlckNvbnRhaW5lciIsIl9Tb3J0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJtYXBTdGF0ZVRvUHJvcHMiLCJzdGF0ZSIsImV2ZW50c19kYXRhIiwiZ2xvYmFsX2RhdGEiLCJlZGdlc19kYXRhIiwicG9pbnRzX2RhdGEiLCJhcmVhc19kYXRhIiwibmF2X2NvbnRleHRfZGF0YSIsIkV2ZW50c0xpc3QiLCJfcmVmIiwic2lkZW5hdkV4cGFuZGVkIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsIml0ZW1zIiwiaXNGZXRjaGluZyIsImZvY3VzZWRFdmVudCIsImhvdmVyZWRFdmVudCIsImhvdmVyZWRFdmVudFBhdGhzIiwiaG92ZXJlZEVkZ2VQYXRocyIsIndhdGVyQXV0aG9yaXR5SWQiLCJtYXAiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJmaWx0ZXJQb3B1cE9wZW4iLCJzZXRGaWx0ZXJQb3B1cE9wZW4iLCJfdXNlU3RhdGUzIiwibWVzc2FnZXMiLCJtZXNzYWdlIiwiZXZlbnRfaWQiLCJldmVudF9pZHMiLCJfdXNlU3RhdGU0IiwiZXhjZXB0aW9uQWxlcnQiLCJzZXRFeGNlcHRpb25BbGVydCIsImxhc3RWaXNpdGVkIiwidXNlTGFzdFZpc2l0ZWQiLCJ1c2VRdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsInVzZUxvY2F0aW9uIiwic2VhcmNoIiwiaGlzdG9yeSIsInVzZUhpc3RvcnkiLCJxdWVyeSIsImdldEtRTFZhbHVlc0Zyb21VUkwiLCJnZXRFdmVudElkRnJvbVVSTCIsImxvYWRlciIsImxlbmd0aCIsIm5ld0FyZWFzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImhhbmRsZUV4cGFuc2lvblRvZ2dsZSIsInNpZGVOYXZFeHBhbmRlZCIsImFwcGx5RGVmYXVsdEZpbHRlciIsInB1c2giLCJjb25jYXQiLCJuYXZDb250ZXh0IiwibmFtZSIsImxvY2FsZSIsInNldEV2ZW50RmlsdGVyUGFyYW0iLCJ2YWxpZGF0ZUV2ZW50IiwiZXZlbnQiLCJpbnZhbGlkT2JzZXJ2YXRpb25zTWVzc2FnZXMiLCJvYnNlcnZhdGlvbnMiLCJmb3JFYWNoIiwib2JzZXJ2YXRpb24iLCJwb2ludF9pc19yb290IiwiZWRnZSIsImZpbmQiLCJzb3VyY2VfcG9pbnRfaWQiLCJwb2ludF9pZCIsInVuZGVmaW5lZCIsInBvaW50X25hbWUiLCJpbmRleCIsImZpbmRJbmRleCIsIm1zZyIsImlkIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIkZyYWdtZW50IiwiaTE4biIsInQiLCJpbnZhbGlkUGF0aE1lc3NhZ2VzIiwicGF0aCIsImVkZ2VfaWQiLCJjb25zb2xlIiwiZXJyb3IiLCJsYXN0X29ic2VydmF0aW9uX2lkIiwibGFzdE9ic2VydmF0aW9uUG9pbnQiLCJoYW5kbGVFdmVudEl0ZW1DbGljayIsInJlZiIsIm9uTW91c2VMZWF2ZUV2ZW50Iiwic2V0Rm9jdXNlZEV2ZW50Iiwic2V0VGltZW91dCIsImV2ZW50RmlsdGVyUGFyYW0iLCJvbk1vdXNlRW50ZXJFdmVudCIsInNldEhvdmVyZWRFdmVudCIsInJlbW92ZUxheWVyIiwibGF5ZXJzIiwiX2xheWVycyIsInByb3BlcnR5Iiwia2FuZG9fb2JqZWN0IiwiaW5jbHVkZXMiLCJzZXRIb3ZlcmVkRXZlbnRQYXRocyIsInNldEhvdmVyZWRFZGdlUGF0aHMiLCJpc0RhdGFGZXRjaGVkQW5kRXZlbnROb3RGb2N1c2VkIiwic2V0Rm9jdXNlZEV2ZW50SWZGb3VuZEluUGFyYW1zIiwiZSIsInBhcnNlSW50IiwidmFsaWRFdmVudCIsInVzZU1lbW8iLCJ0b1N0cmluZyIsInRyaWdnZXJTb3J0Iiwic29ydCIsImFjdGl2ZUZpbHRlciIsIktRTCIsIlVSTCIsImJ1aWxkS1FMUXVlcnkiLCJjYWxjRXZlbnRzUmVhbEFtb3VudCIsImV2ZW50c0NvdW50IiwiZXZlbnRzX2NvdW50IiwidXNlRWZmZWN0IiwiZmV0Y2hFdmVudHMiLCJtb3JlSW5mbyIsImFjdGl2ZSIsInJlT3BlbkZpbHRlciIsIm9uQ2xpY2siLCJGb250QXdlc29tZUljb24iLCJpY29uIiwiZmFDYXJldExlZnQiLCJmYUNhcmV0UmlnaHQiLCJocmVmIiwiZmFBcnJvd0xlZnQiLCJMaW5rIiwidG8iLCJzcmMiLCJMZWZ0QXJyb3dJY29uIiwiaGVpZ2h0Iiwid2lkdGgiLCJhbHQiLCJldmVudHMiLCJldmVudHNGZXRjaGluZyIsIlJlYWN0Q29tcG9uZW50IiwiZmlsbCIsImZldGNoVHlwZSIsIk5vRXZlbnRzSW1hZ2UiLCJTZXZlcmVFdmVudCIsImhhbmRsZUNsaWNrIiwiY29ubmVjdG9yIiwiY29ubmVjdCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wYWdlcy9FdmVudHNQYWdlL2V2ZW50cy9ldmVudHNfbGlzdC9FdmVudHNMaXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBldGMvbm8tY29tbWVudGVkLW91dC1jb2RlICovXG5pbXBvcnQge1xuICBmYUFycm93TGVmdCxcbiAgZmFDYXJldExlZnQsXG4gIGZhQ2FyZXRSaWdodCxcbn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IEZvbnRBd2Vzb21lSWNvbiB9IGZyb20gJ0Bmb3J0YXdlc29tZS9yZWFjdC1mb250YXdlc29tZSc7XG5pbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCwgQ29ubmVjdGVkUHJvcHMsIHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgTGluaywgdXNlSGlzdG9yeSwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBMZWZ0QXJyb3dJY29uIGZyb20gJ3NyYy9hc3NldHMvaWNvbnMvYXJyb3ctbGVmdC5zdmcnO1xuaW1wb3J0IHsgUmVhY3RDb21wb25lbnQgYXMgRmlsdGVySWNvbiB9IGZyb20gJ3NyYy9hc3NldHMvaWNvbnMvZnVubmVsLnN2Zyc7XG5pbXBvcnQgTm9FdmVudHNJbWFnZSBmcm9tICdzcmMvYXNzZXRzL25vX2V2ZW50cy5zdmcnO1xuaW1wb3J0IHsgU2V2ZXJlRXZlbnQgfSBmcm9tICdzcmMvY29tcG9uZW50cy9TZXZlcmVFdmVudC9TZXZlcmVFdmVudCc7XG5pbXBvcnQgeyBJQXBwU3RhdGUgfSBmcm9tICdzcmMvbW9kZWxzL0lBcHBTdGF0ZSc7XG5pbXBvcnQgeyB1c2VMYXN0VmlzaXRlZCB9IGZyb20gJ3NyYy9wcm92aWRlcnMvVXJsSGlzdG9yeSc7XG5pbXBvcnQge1xuICBmZXRjaEV2ZW50cyxcbiAgc2V0Rm9jdXNlZEV2ZW50LFxuICBzZXRIb3ZlcmVkRWRnZVBhdGhzLFxuICBzZXRIb3ZlcmVkRXZlbnQsXG4gIHNldEhvdmVyZWRFdmVudFBhdGhzLFxufSBmcm9tICdzcmMvc3RvcmUvZXZlbnRzL2FjdGlvbnMnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnc3JjL3N0b3JlL2V2ZW50cy9tb2RlbHMvSUV2ZW50JztcbmltcG9ydCB7IHNldEV2ZW50RmlsdGVyUGFyYW0sIHNpZGVOYXZFeHBhbmRlZCB9IGZyb20gJ3NyYy9zdG9yZS9nbG9iYWwvYWN0aW9ucyc7XG5pbXBvcnQgaTE4biBmcm9tICdzcmMvdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHsgYnVpbGRLUUxRdWVyeSB9IGZyb20gJ3NyYy91dGlsaXRpZXMva3FsJztcbmltcG9ydCAnLi4vRXZlbnRzU3R5bGUuc2Nzcyc7XG5pbXBvcnQgRXZlbnRJbmZvIGZyb20gJy4uL2V2ZW50X2luZm8vRXZlbnRJbmZvJztcbmltcG9ydCBNb3JlSW5mbyBmcm9tICcuLi9Nb3JlSW5mbyc7XG5pbXBvcnQgRmlsdGVyQ29udGFpbmVyIGZyb20gJy4vRmlsdGVyL0ZpbHRlckNvbnRhaW5lcic7XG5pbXBvcnQgU29ydCBmcm9tICcuL1NvcnQnO1xuXG5mdW5jdGlvbiBtYXBTdGF0ZVRvUHJvcHMoc3RhdGU6IElBcHBTdGF0ZSkge1xuICBjb25zdCB7XG4gICAgZXZlbnRzX2RhdGEsXG4gICAgZ2xvYmFsX2RhdGEsXG4gICAgZWRnZXNfZGF0YSxcbiAgICBwb2ludHNfZGF0YSxcbiAgICBhcmVhc19kYXRhLFxuICAgIG5hdl9jb250ZXh0X2RhdGEsXG4gIH0gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIGV2ZW50c19kYXRhLFxuICAgIGdsb2JhbF9kYXRhLFxuICAgIGVkZ2VzX2RhdGEsXG4gICAgcG9pbnRzX2RhdGEsXG4gICAgYXJlYXNfZGF0YSxcbiAgICBuYXZfY29udGV4dF9kYXRhLFxuICB9O1xufVxuXG50eXBlIElQcm9wcyA9IENvbm5lY3RlZFByb3BzPHR5cGVvZiBjb25uZWN0b3I+ICYge1xuICBzaWRlbmF2RXhwYW5kZWQ6IGJvb2xlYW47XG59O1xuXG5jb25zdCBFdmVudHNMaXN0OiBSZWFjdC5GQzxJUHJvcHM+ID0gKHtcbiAgYXJlYXNfZGF0YSxcbiAgcG9pbnRzX2RhdGEsXG4gIGVkZ2VzX2RhdGEsXG4gIGdsb2JhbF9kYXRhLFxuICBzaWRlbmF2RXhwYW5kZWQsXG4gIGV2ZW50c19kYXRhLFxuICBuYXZfY29udGV4dF9kYXRhLFxufSkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IHtcbiAgICBpdGVtcyxcbiAgICBpc0ZldGNoaW5nLFxuICAgIGZvY3VzZWRFdmVudCxcbiAgICBob3ZlcmVkRXZlbnQsXG4gICAgaG92ZXJlZEV2ZW50UGF0aHMsXG4gICAgaG92ZXJlZEVkZ2VQYXRocyxcbiAgfSA9IGV2ZW50c19kYXRhO1xuICBjb25zdCB7IHdhdGVyQXV0aG9yaXR5SWQsIG1hcCB9ID0gZ2xvYmFsX2RhdGE7XG4gIGNvbnN0IFtmaWx0ZXJQb3B1cE9wZW4sIHNldEZpbHRlclBvcHVwT3Blbl0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2V4Y2VwdGlvbkFsZXJ0LCBzZXRFeGNlcHRpb25BbGVydF0gPSB1c2VTdGF0ZTx7XG4gICAgbWVzc2FnZXM6IHsgbWVzc2FnZTogYW55OyBldmVudF9pZDogbnVtYmVyIH1bXTtcbiAgICBldmVudF9pZHM6IG51bWJlcltdO1xuICB9Pih7IG1lc3NhZ2VzOiBbeyBtZXNzYWdlOiAnJywgZXZlbnRfaWQ6IDAgfV0sIGV2ZW50X2lkczogW10gfSk7XG4gIGNvbnN0IGxhc3RWaXNpdGVkID0gdXNlTGFzdFZpc2l0ZWQoKTtcblxuICBjb25zdCB1c2VRdWVyeSA9ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh1c2VMb2NhdGlvbigpLnNlYXJjaCk7XG4gIH07XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnkoKTtcbiAgY29uc3QgZ2V0S1FMVmFsdWVzRnJvbVVSTCA9ICgpID0+IHtcbiAgICByZXR1cm4gcXVlcnkuZ2V0KCd2YWx1ZXNGcm9tS1FMJyk7XG4gIH07XG4gIGNvbnN0IGdldEV2ZW50SWRGcm9tVVJMID0gKCkgPT4ge1xuICAgIHJldHVybiBxdWVyeS5nZXQoJ2V2ZW50SWQnKTtcbiAgfTtcblxuICBjb25zdCBsb2FkZXIgPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGlzRmV0Y2hpbmcgJiYgaXRlbXMubGVuZ3RoID09PSAwKSB8fFxuICAgICAgYXJlYXNfZGF0YS5uZXdBcmVhcy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHBvaW50c19kYXRhLmlzRmV0Y2hpbmcgfHxcbiAgICAgIGVkZ2VzX2RhdGEuaXNGZXRjaGluZ1xuICAgICkge1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXsnbG9hZGVyJ30+PC9kaXY+O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRXhwYW5zaW9uVG9nZ2xlID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNpZGVOYXZFeHBhbmRlZCghc2lkZW5hdkV4cGFuZGVkKSk7XG4gIH07XG5cbiAgY29uc3QgYXBwbHlEZWZhdWx0RmlsdGVyID0gKCkgPT4ge1xuICAgIGhpc3RvcnkucHVzaChcbiAgICAgIGAvJHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZX0vaW5kZXg/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7Z2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZH0mbG9jYWxlPSR7bmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZX0mdmFsdWVzRnJvbUtRTD1gLFxuICAgICk7XG4gICAgZGlzcGF0Y2goc2V0RXZlbnRGaWx0ZXJQYXJhbSgnJykpO1xuICB9O1xuXG4gIGNvbnN0IHZhbGlkYXRlRXZlbnQgPSAoZXZlbnQ6IElFdmVudCkgPT4ge1xuICAgIC8vIGNoZWNrIHRoYXQgYWxsIG9ic2VydmF0aW9ucycgZWRnZXMgZXhpc3RzLiBJZiB0aGV5IGFyZSBub3QgZXhpc3RzIGl0J3MgaW5kaWNhdGVzIHRoYXQgdGhlaXIgcG9pbnRzIGFyZVxuICAgIC8vIG5vdCBpbiB0aGUgaGllcmFyY2h5IG9yIGRvZXNuJ3QgaGF2ZSBsYXQvbG5nLlxuICAgIGxldCBpbnZhbGlkT2JzZXJ2YXRpb25zTWVzc2FnZXM6IGFueSA9IFtdO1xuICAgIGV2ZW50Lm9ic2VydmF0aW9ucy5mb3JFYWNoKChvYnNlcnZhdGlvbjogYW55KSA9PiB7XG4gICAgICAvLyBpZiBvYnNlcnZhdGlvbiBpcyByb290IChleC4gV1dUUCkgdGhlcmUgaXMgbm8gZWRnZSB0aGF0IGl0cyBhIHNvdXJjZS4gc28gd2UgY2FuIHNraXAgdGhpcyBjaGVja1xuICAgICAgaWYgKCFvYnNlcnZhdGlvbi5wb2ludF9pc19yb290KSB7XG4gICAgICAgIGxldCBlZGdlID0gZWRnZXNfZGF0YS5pdGVtcy5maW5kKFxuICAgICAgICAgIChlZGdlKSA9PiBlZGdlLnNvdXJjZV9wb2ludF9pZCA9PT0gb2JzZXJ2YXRpb24ucG9pbnRfaWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChlZGdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbnZhbGlkT2JzZXJ2YXRpb25zTWVzc2FnZXMucHVzaChcbiAgICAgICAgICAgIGAke29ic2VydmF0aW9uLnBvaW50X25hbWV9ICgke29ic2VydmF0aW9uLnBvaW50X2lkfSkgYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaW52YWxpZE9ic2VydmF0aW9uc01lc3NhZ2VzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgbGV0IGluZGV4ID0gZXhjZXB0aW9uQWxlcnQubWVzc2FnZXMuZmluZEluZGV4KFxuICAgICAgICAobXNnKSA9PiBtc2cuZXZlbnRfaWQgPT09IGV2ZW50LmlkLFxuICAgICAgKTtcblxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICBzZXRFeGNlcHRpb25BbGVydCh7XG4gICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgIC4uLmV4Y2VwdGlvbkFsZXJ0Lm1lc3NhZ2VzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtZXNzYWdlOiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxwPntpMThuLnQoJ2V2ZW50c19vdmVydmlldy5ldmVudF9kYXRhX21pc3NpbmcnKX08L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGV2ZW50X2lkOiBldmVudC5pZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBldmVudF9pZHM6IFsuLi5leGNlcHRpb25BbGVydC5ldmVudF9pZHMsIGV2ZW50LmlkXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2FtZSBjaGVjayBhcyBhYm92ZSBidXQgdGhpcyB0aW1lIGZvciB0aGUgZXZlbnQgcGF0aC4gSWYgZWRnZSBkb2Vzbid0IGV4aXN0LCBpdCdzIGluZGljYXRlcyB0aGF0IG9uZSBvZiB0aGVcbiAgICAvLyBwb2ludHMgZG93bnN0cmVhbSBkb2Vzbid0IGhhdmUgbGF0L2xuZy5cbiAgICBsZXQgaW52YWxpZFBhdGhNZXNzYWdlczogYW55ID0gW107XG4gICAgZXZlbnQucGF0aC5mb3JFYWNoKChwYXRoOiBhbnkpID0+IHtcbiAgICAgIGxldCBlZGdlID0gZWRnZXNfZGF0YS5pdGVtcy5maW5kKChlZGdlKSA9PiBlZGdlLmlkID09PSBwYXRoLmVkZ2VfaWQpO1xuICAgICAgaWYgKGVkZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBlZGdlICR7cGF0aC5lZGdlX2lkfSBjYW4gbm90IGJlIGZvdW5kYCk7XG4gICAgICAgIGxldCBvYnNlcnZhdGlvbiA9IGV2ZW50Lm9ic2VydmF0aW9ucy5maW5kKFxuICAgICAgICAgIChvYnNlcnZhdGlvbikgPT4gb2JzZXJ2YXRpb24uaWQgPT09IHBhdGgubGFzdF9vYnNlcnZhdGlvbl9pZCxcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IGxhc3RPYnNlcnZhdGlvblBvaW50ID0gJ05vdCBmb3VuZCc7XG4gICAgICAgIGlmIChvYnNlcnZhdGlvbikge1xuICAgICAgICAgIGxhc3RPYnNlcnZhdGlvblBvaW50ID0gb2JzZXJ2YXRpb24ucG9pbnRfbmFtZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdsYXN0T2JzZXJ2YXRpb25Qb2ludCcsIGxhc3RPYnNlcnZhdGlvblBvaW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGludmFsaWRQYXRoTWVzc2FnZXMucHVzaChgJHtsYXN0T2JzZXJ2YXRpb25Qb2ludH0gYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaW52YWxpZFBhdGhNZXNzYWdlcy5sZW5ndGggIT09IDApIHtcbiAgICAgIHNldEV4Y2VwdGlvbkFsZXJ0KHtcbiAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAuLi5leGNlcHRpb25BbGVydC5tZXNzYWdlcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtZXNzYWdlOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPHA+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmV2ZW50X3ZlcmlmeV9jb29yZGluYXRlcycpfTwvcD5cbiAgICAgICAgICAgICAgICA8c3Bhbj57aW52YWxpZFBhdGhNZXNzYWdlc308L3NwYW4+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBldmVudC5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBldmVudF9pZHM6IFsuLi5leGNlcHRpb25BbGVydC5ldmVudF9pZHMsIGV2ZW50LmlkXSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUV2ZW50SXRlbUNsaWNrID0gKFxuICAgIGV2ZW50OiBJRXZlbnQsXG4gICAgcmVmOiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+IHwgbnVsbCxcbiAgKSA9PiB7XG4gICAgaWYgKHJlZiAhPT0gbnVsbCkgb25Nb3VzZUxlYXZlRXZlbnQoKTtcbiAgICAvLyBpZiAoaG92ZXJlZEV2ZW50UGF0aHMgJiYgbWFwKSB7XG4gICAgLy8gICAgIGhvdmVyZWRFdmVudFBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAvLyAgICAgICAgIG1hcC5yZW1vdmVMYXllcihwYXRoKTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuICAgIC8vIGRpc3BhdGNoKHNldEhvdmVyZWRFdmVudFBhdGhzKFtdKSk7XG4gICAgLy8gZGlzcGF0Y2goc2V0SG92ZXJFdmVudEluZGljYXRvcihudWxsKSk7XG4gICAgZGlzcGF0Y2goc2V0Rm9jdXNlZEV2ZW50KGV2ZW50KSk7XG4gICAgc2V0RmlsdGVyUG9wdXBPcGVuKGZhbHNlKTtcbiAgICBpZiAoZ2V0RXZlbnRJZEZyb21VUkwoKSA9PT0gbnVsbCB8fCBnZXRFdmVudElkRnJvbVVSTCgpID09PSAnbnVsbCcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBoaXN0b3J5LnB1c2goXG4gICAgICAgICAgYC8ke25hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgICB9JmxvY2FsZT0ke25hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5sb2NhbGV9JmV2ZW50SWQ9JHtcbiAgICAgICAgICAgIGV2ZW50LmlkXG4gICAgICAgICAgfSZ2YWx1ZXNGcm9tS1FMPSR7XG4gICAgICAgICAgICBnbG9iYWxfZGF0YS5ldmVudEZpbHRlclBhcmFtXG4gICAgICAgICAgfSZ2YWxpZEV2ZW50PSR7dmFsaWRhdGVFdmVudChldmVudCl9YCxcbiAgICAgICAgKTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VFbnRlckV2ZW50ID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkRXZlbnQgJiYgIWhvdmVyZWRFdmVudCAmJiB2YWxpZGF0ZUV2ZW50KGV2ZW50KSkge1xuICAgICAgZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50KGV2ZW50KSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VMZWF2ZUV2ZW50ID0gKCkgPT4ge1xuICAgIGlmIChob3ZlcmVkRXZlbnQgJiYgaG92ZXJlZEV2ZW50UGF0aHMgJiYgbWFwKSB7XG4gICAgICBob3ZlcmVkRXZlbnRQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICAgIG1hcC5yZW1vdmVMYXllcihwYXRoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaG92ZXJlZEVkZ2VQYXRocykge1xuICAgICAgICBob3ZlcmVkRWRnZVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIocGF0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGF5ZXJzID0gbWFwLl9sYXllcnM7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVycykge1xuICAgICAgICBjb25zdCBrYW5kb19vYmplY3QgPSBsYXllcnNbcHJvcGVydHldLmthbmRvX29iamVjdDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGthbmRvX29iamVjdD8uaW5jbHVkZXMoJ0V2ZW50Qm9keScpIHx8XG4gICAgICAgICAgW1xuICAgICAgICAgICAgJ0V2ZW50VGFpbCcsXG4gICAgICAgICAgICAnU2FtcGxpbmdQb2ludCcsXG4gICAgICAgICAgICAnRGVjb3JhdG9yJyxcbiAgICAgICAgICAgICdIb3ZlcmVkRWRnZScsXG4gICAgICAgICAgICAnSG92ZXJlZEVkZ2VGcm9udCcsXG4gICAgICAgICAgICAnRm9jdXNlZEVkZ2UnLFxuICAgICAgICAgICAgJ0ZvY3VzZWRFZGdlRnJvbnQnLFxuICAgICAgICAgIF0uaW5jbHVkZXMoa2FuZG9fb2JqZWN0KVxuICAgICAgICApIHtcbiAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXJzW3Byb3BlcnR5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50KG51bGwpKTtcbiAgICBkaXNwYXRjaChzZXRIb3ZlcmVkRXZlbnRQYXRocyhbXSkpO1xuICAgIGRpc3BhdGNoKHNldEhvdmVyZWRFZGdlUGF0aHMoW10pKTtcbiAgfTtcblxuICBjb25zdCBpc0RhdGFGZXRjaGVkQW5kRXZlbnROb3RGb2N1c2VkID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAoZ2V0RXZlbnRJZEZyb21VUkwoKSA9PT0gJ251bGwnIHx8IGdldEV2ZW50SWRGcm9tVVJMKCkgPT09IG51bGwpICYmXG4gICAgICBmb2N1c2VkRXZlbnQgPT09IG51bGwgJiZcbiAgICAgIGl0ZW1zLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgIWlzRmV0Y2hpbmcgJiZcbiAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICFwb2ludHNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhZWRnZXNfZGF0YS5pc0ZldGNoaW5nXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBzZXRGb2N1c2VkRXZlbnRJZkZvdW5kSW5QYXJhbXMgPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgZ2V0RXZlbnRJZEZyb21VUkwoKSAhPT0gbnVsbCAmJlxuICAgICAgZ2V0RXZlbnRJZEZyb21VUkwoKSAhPT0gJ251bGwnICYmXG4gICAgICBmb2N1c2VkRXZlbnQgPT09IG51bGwgJiZcbiAgICAgIGl0ZW1zLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgIWlzRmV0Y2hpbmcgJiZcbiAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICFwb2ludHNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhZWRnZXNfZGF0YS5pc0ZldGNoaW5nXG4gICAgKSB7XG4gICAgICBsZXQgZXZlbnQgPSBldmVudHNfZGF0YS5pdGVtcy5maW5kKFxuICAgICAgICAoZTogSUV2ZW50KSA9PiBlLmlkID09PSBwYXJzZUludChnZXRFdmVudElkRnJvbVVSTCgpISksXG4gICAgICApO1xuICAgICAgaWYgKGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRXZlbnRJdGVtQ2xpY2soZXZlbnQsIG51bGwpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2YWxpZEV2ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IGV2ZW50ID0gZXZlbnRzX2RhdGEuaXRlbXMuZmluZChcbiAgICAgIChlKSA9PiBlLmlkLnRvU3RyaW5nKCkgPT09IGdldEV2ZW50SWRGcm9tVVJMKCksXG4gICAgKTtcblxuICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFdmVudChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwgW1xuICAgIGV2ZW50c19kYXRhLmZvY3VzZWRFdmVudCxcbiAgICBhcmVhc19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgcG9pbnRzX2RhdGEuaXNGZXRjaGluZyxcbiAgICBlZGdlc19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgZXZlbnRzX2RhdGEuaXNGZXRjaGluZyxcbiAgXSk7XG5cbiAgY29uc3QgdHJpZ2dlclNvcnQgPSAoc29ydDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKFxuICAgICAgZ2xvYmFsX2RhdGEuYWN0aXZlRmlsdGVyICE9PSBudWxsICYmXG4gICAgICBpc0RhdGFGZXRjaGVkQW5kRXZlbnROb3RGb2N1c2VkKClcbiAgICApIHtcbiAgICAgIGxldCBLUUw7XG4gICAgICBsZXQgVVJMO1xuICAgICAgc3dpdGNoIChzb3J0KSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBLUUwgPSBgJHtidWlsZEtRTFF1ZXJ5KGdsb2JhbF9kYXRhLmFjdGl2ZUZpbHRlciwgJ25ld2VzdCcpfWA7XG4gICAgICAgICAgVVJMID0gYC8ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWVcbiAgICAgICAgICB9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgICAgIH0mZXZlbnRJZD0ke2dldEV2ZW50SWRGcm9tVVJMKCl9JmxvY2FsZT0ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZVxuICAgICAgICAgIH0mdmFsdWVzRnJvbUtRTD0ke0tRTH0mdmFsaWRFdmVudD0ke3ZhbGlkRXZlbnR9YDtcbiAgICAgICAgICBoaXN0b3J5LnB1c2goVVJMKTtcbiAgICAgICAgICBkaXNwYXRjaChzZXRFdmVudEZpbHRlclBhcmFtKEtRTCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgS1FMID0gYCR7YnVpbGRLUUxRdWVyeShnbG9iYWxfZGF0YS5hY3RpdmVGaWx0ZXIsICdvbGRlc3QnKX1gO1xuICAgICAgICAgIFVSTCA9IGAvJHtcbiAgICAgICAgICAgIG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lXG4gICAgICAgICAgfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgICB9JmV2ZW50SWQ9JHtnZXRFdmVudElkRnJvbVVSTCgpfSZsb2NhbGU9JHtcbiAgICAgICAgICAgIG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5sb2NhbGVcbiAgICAgICAgICB9JnZhbHVlc0Zyb21LUUw9JHtLUUx9JnZhbGlkRXZlbnQ9JHt2YWxpZEV2ZW50fWA7XG4gICAgICAgICAgaGlzdG9yeS5wdXNoKFVSTCk7XG4gICAgICAgICAgZGlzcGF0Y2goc2V0RXZlbnRGaWx0ZXJQYXJhbShLUUwpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIEtRTCA9IGAke2J1aWxkS1FMUXVlcnkoZ2xvYmFsX2RhdGEuYWN0aXZlRmlsdGVyLCAnc2V2ZXJpdHknKX1gO1xuICAgICAgICAgIFVSTCA9IGAvJHtcbiAgICAgICAgICAgIG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lXG4gICAgICAgICAgfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgICB9JmV2ZW50SWQ9JHtnZXRFdmVudElkRnJvbVVSTCgpfSZsb2NhbGU9JHtcbiAgICAgICAgICAgIG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5sb2NhbGVcbiAgICAgICAgICB9JnZhbHVlc0Zyb21LUUw9JHtLUUx9JnZhbGlkRXZlbnQ9JHt2YWxpZEV2ZW50fWA7XG4gICAgICAgICAgaGlzdG9yeS5wdXNoKFVSTCk7XG4gICAgICAgICAgZGlzcGF0Y2goc2V0RXZlbnRGaWx0ZXJQYXJhbShLUUwpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2FsY0V2ZW50c1JlYWxBbW91bnQgPSAoKSA9PiB7XG4gICAgbGV0IGV2ZW50c0NvdW50OiBudW1iZXIgfCBzdHJpbmcgPSAwO1xuICAgIGV2ZW50c0NvdW50ID0gZXZlbnRzX2RhdGEuZXZlbnRzX2NvdW50O1xuICAgIGlmIChldmVudHNDb3VudCA+IDUwKVxuICAgICAgZXZlbnRzQ291bnQgPSBgJHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5tb3JlX3RoYW4nKX0gNTBgO1xuXG4gICAgcmV0dXJuIGV2ZW50c0NvdW50O1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2goXG4gICAgICBmZXRjaEV2ZW50cyhcbiAgICAgICAgd2F0ZXJBdXRob3JpdHlJZCxcbiAgICAgICAgZ2V0S1FMVmFsdWVzRnJvbVVSTCgpIHx8ICdERUZBVUxUJyxcbiAgICAgICAgZ2V0RXZlbnRJZEZyb21VUkwoKSxcbiAgICAgICksXG4gICAgKTtcbiAgfSwgW1xuICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWQsXG4gICAgZ2xvYmFsX2RhdGEuZXZlbnRGaWx0ZXJQYXJhbSxcbiAgICBmb2N1c2VkRXZlbnQsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgIWV2ZW50c19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICFlZGdlc19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICFwb2ludHNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhYXJlYXNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICBhcmVhc19kYXRhLm5ld0FyZWFzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgcG9pbnRzX2RhdGEuaXRlbXMubGVuZ3RoICE9PSAwICYmXG4gICAgICBmaWx0ZXJQb3B1cE9wZW5cbiAgICApIHtcbiAgICAgIHNldEZvY3VzZWRFdmVudElmRm91bmRJblBhcmFtcygpO1xuICAgIH1cbiAgfSwgW1xuICAgIGV2ZW50c19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgZWRnZXNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIHBvaW50c19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgcG9pbnRzX2RhdGEuaXRlbXMubGVuZ3RoLFxuICAgIGFyZWFzX2RhdGEuaXRlbXMubGVuZ3RoLFxuICAgIGFyZWFzX2RhdGEuaXNGZXRjaGluZyxcbiAgICBnbG9iYWxfZGF0YS5ldmVudEZpbHRlclBhcmFtLFxuICAgIGZpbHRlclBvcHVwT3BlbixcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17J3NpZGVuYXYgJyArIChzaWRlbmF2RXhwYW5kZWQgPyAnJyA6ICdzaWRlbmF2LS1jb2xsYXBzZWQnKX0+XG4gICAgICB7Z2xvYmFsX2RhdGEubW9yZUluZm8gIT09IHVuZGVmaW5lZCAmJiBnbG9iYWxfZGF0YS5tb3JlSW5mby5hY3RpdmUgJiYgKFxuICAgICAgICA8TW9yZUluZm8gLz5cbiAgICAgICl9XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAnZXZlbnQtaW5mbyAnICtcbiAgICAgICAgICAoIWhvdmVyZWRFdmVudCAmJiBmb2N1c2VkRXZlbnQgIT09IG51bGxcbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogJ2V2ZW50LWluZm8tLWNvbGxhcHNlZCcpXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgeyFob3ZlcmVkRXZlbnQgJiYgZm9jdXNlZEV2ZW50ICE9PSBudWxsICYmIChcbiAgICAgICAgICA8RXZlbnRJbmZvXG4gICAgICAgICAgICBldmVudD17Zm9jdXNlZEV2ZW50fVxuICAgICAgICAgICAgcmVPcGVuRmlsdGVyPXsoKSA9PiBzZXRGaWx0ZXJQb3B1cE9wZW4odHJ1ZSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJ0b2dnbGUtZXhwYW5zaW9uLWJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBoYW5kbGVFeHBhbnNpb25Ub2dnbGUoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJuYXYtZXhwYW5zaW9uLWljb25cIj5cbiAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICBpY29uPXtzaWRlbmF2RXhwYW5kZWQgPyBmYUNhcmV0TGVmdCA6IGZhQ2FyZXRSaWdodH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9eyd0b2dnbGUtZXhwYW5zaW9uLWJ1dHRvbi1tb2JpbGUnfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRXhwYW5zaW9uVG9nZ2xlKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxhIGhyZWY9XCIjXCI+XG4gICAgICAgICAgPEZvbnRBd2Vzb21lSWNvbiBpY29uPXtmYUFycm93TGVmdH0gLz5cbiAgICAgICAgICA8c3Bhbj4ge2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmJhY2tfdG9fZGV0YWlscycpfTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImV2ZW50cy1oZWFkZXJcIj5cbiAgICAgICAge2xhc3RWaXNpdGVkICYmICFpc0ZldGNoaW5nICYmIChcbiAgICAgICAgICA8TGluayBjbGFzc05hbWU9XCJiYWNrXCIgdG89e2xhc3RWaXNpdGVkfT5cbiAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIHNyYz17TGVmdEFycm93SWNvbn1cbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMTBweFwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTJweFwiXG4gICAgICAgICAgICAgIGFsdD1cImJhY2tcIlxuICAgICAgICAgICAgLz57JyAnfVxuICAgICAgICAgICAge2kxOG4udCgnYXJlYV9zY3JlZW4uYmFjaycpfVxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgKX1cbiAgICAgICAgPGg0PlxuICAgICAgICAgIHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5ldmVudHNfbGlzdCcpfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17J2V2ZW50cy1oZWFkZXJfX2V2ZW50c19hbW91bnQnfT5cbiAgICAgICAgICAgICh7Y2FsY0V2ZW50c1JlYWxBbW91bnQoKX0pXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2g0PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlcmluZ1wiPlxuICAgICAgICAgIHtldmVudHNfZGF0YS5pdGVtcy5sZW5ndGggIT09IDAgJiYgKFxuICAgICAgICAgICAgPFNvcnRcbiAgICAgICAgICAgICAgdHJpZ2dlclNvcnQ9e3RyaWdnZXJTb3J0fVxuICAgICAgICAgICAgICBldmVudHM9e2V2ZW50c19kYXRhLml0ZW1zfVxuICAgICAgICAgICAgICBldmVudHNGZXRjaGluZz17ZXZlbnRzX2RhdGEuaXNGZXRjaGluZ31cbiAgICAgICAgICAgICAgYWN0aXZlRmlsdGVyPXtnbG9iYWxfZGF0YS5hY3RpdmVGaWx0ZXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpY29uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRGaWx0ZXJQb3B1cE9wZW4oIWZpbHRlclBvcHVwT3Blbil9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGaWx0ZXJJY29uIHdpZHRoPVwiMTdweFwiIGhlaWdodD1cIjE3cHhcIiBmaWxsPVwiI2Y2MDA0ZlwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge3BvaW50c19kYXRhLml0ZW1zLmxlbmd0aCAhPT0gMCAmJiAhZm9jdXNlZEV2ZW50ICYmIChcbiAgICAgICAgICA8RmlsdGVyQ29udGFpbmVyXG4gICAgICAgICAgICBmaWx0ZXJQb3B1cE9wZW49e2ZpbHRlclBvcHVwT3Blbn1cbiAgICAgICAgICAgIGZldGNoVHlwZT17J0V2ZW50RmlsdGVyJ31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImV2ZW50cy1jb250YWluZXIgc2Nyb2xsYmFyIFwiPlxuICAgICAgICB7bG9hZGVyKCl9XG4gICAgICAgIHshaXNGZXRjaGluZyAmJlxuICAgICAgICAgIGl0ZW1zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICFwb2ludHNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAgICAgIWVkZ2VzX2RhdGEuaXNGZXRjaGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2V2ZW50c19fYmxhbmtzbGF0ZSd9PlxuICAgICAgICAgICAgICA8aW1nIHNyYz17Tm9FdmVudHNJbWFnZX0gYWx0PVwiTm9FdmVudHNJY29uXCIgLz5cbiAgICAgICAgICAgICAgPGgyPntpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuYmxhbmtzbGF0ZS5oZWFkZXInKX08L2gyPlxuICAgICAgICAgICAgICA8cD57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLmJsYW5rc2xhdGUuYm9keScpfTwvcD5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9eydhcHBseV9kZWZhdWx0X2ZpbHRlcl9idXR0b24nfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGFwcGx5RGVmYXVsdEZpbHRlcigpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5ibGFua3NsYXRlLmJ1dHRvbicpfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICB7aXRlbXMubGVuZ3RoICE9PSAwICYmXG4gICAgICAgICAgIWFyZWFzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgICAgICFwb2ludHNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAgICAgIWVkZ2VzX2RhdGEuaXNGZXRjaGluZyAmJiAoXG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZXZlbnRzIFwiPlxuICAgICAgICAgICAgICB7aXRlbXMubWFwKChldmVudDogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgPGxpIGtleT17ZXZlbnQuaWR9IGNsYXNzTmFtZT1cImV2ZW50XCIgZGF0YS1ldmVudC1pZD17ZXZlbnQuaWR9PlxuICAgICAgICAgICAgICAgICAgPFNldmVyZUV2ZW50XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50PXtldmVudH1cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xpY2s9e2hhbmRsZUV2ZW50SXRlbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXJFdmVudD17b25Nb3VzZUVudGVyRXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZUV2ZW50PXtvbk1vdXNlTGVhdmVFdmVudH1cbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVFdmVudD17dmFsaWRhdGVFdmVudH1cbiAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQWxlcnQ9e2V4Y2VwdGlvbkFsZXJ0fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgY29ubmVjdG9yID0gY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMpO1xuZXhwb3J0IGRlZmF1bHQgY29ubmVjdG9yKEV2ZW50c0xpc3QpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQ0EsSUFBQUEsa0JBQUEsR0FBQUMsT0FBQTtBQUtBLElBQUFDLGlCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFDQSxJ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
354
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnJlZVNvbGlkU3ZnSWNvbnMiLCJyZXF1aXJlIiwiX3JlYWN0Rm9udGF3ZXNvbWUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9yZWFjdFJlZHV4IiwiX3JlYWN0Um91dGVyRG9tIiwiX2Fycm93TGVmdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZnVubmVsIiwiX25vX2V2ZW50cyIsIl9TZXZlcmVFdmVudCIsIl9VcmxIaXN0b3J5IiwiX2FjdGlvbnMiLCJfYWN0aW9uczIiLCJfaTE4biIsIl9rcWwiLCJfRXZlbnRJbmZvIiwiX01vcmVJbmZvIiwiX0ZpbHRlckNvbnRhaW5lciIsIl9Tb3J0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIm1hcFN0YXRlVG9Qcm9wcyIsInN0YXRlIiwiZXZlbnRzX2RhdGEiLCJnbG9iYWxfZGF0YSIsImVkZ2VzX2RhdGEiLCJwb2ludHNfZGF0YSIsImFyZWFzX2RhdGEiLCJuYXZfY29udGV4dF9kYXRhIiwiRXZlbnRzTGlzdCIsIl9yZWYiLCJzaWRlbmF2RXhwYW5kZWQiLCJkaXNwYXRjaCIsInVzZURpc3BhdGNoIiwiaXRlbXMiLCJpc0ZldGNoaW5nIiwiZm9jdXNlZEV2ZW50IiwiaG92ZXJlZEV2ZW50IiwiaG92ZXJlZEV2ZW50UGF0aHMiLCJob3ZlcmVkRWRnZVBhdGhzIiwid2F0ZXJBdXRob3JpdHlJZCIsIm1hcCIsImZpbHRlclBvcHVwT3BlbiIsInNldEZpbHRlclBvcHVwT3BlbiIsInVzZVN0YXRlIiwiZXhjZXB0aW9uQWxlcnQiLCJzZXRFeGNlcHRpb25BbGVydCIsIm1lc3NhZ2VzIiwibWVzc2FnZSIsImV2ZW50X2lkIiwiZXZlbnRfaWRzIiwibGFzdFZpc2l0ZWQiLCJ1c2VMYXN0VmlzaXRlZCIsInVzZVF1ZXJ5IiwiVVJMU2VhcmNoUGFyYW1zIiwidXNlTG9jYXRpb24iLCJzZWFyY2giLCJoaXN0b3J5IiwidXNlSGlzdG9yeSIsInF1ZXJ5IiwiZ2V0S1FMVmFsdWVzRnJvbVVSTCIsImdldEV2ZW50SWRGcm9tVVJMIiwibG9hZGVyIiwibGVuZ3RoIiwibmV3QXJlYXMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiaGFuZGxlRXhwYW5zaW9uVG9nZ2xlIiwic2lkZU5hdkV4cGFuZGVkIiwiYXBwbHlEZWZhdWx0RmlsdGVyIiwicHVzaCIsImNvbmNhdCIsIm5hdkNvbnRleHQiLCJuYW1lIiwibG9jYWxlIiwic2V0RXZlbnRGaWx0ZXJQYXJhbSIsInZhbGlkYXRlRXZlbnQiLCJldmVudCIsImludmFsaWRPYnNlcnZhdGlvbnNNZXNzYWdlcyIsIm9ic2VydmF0aW9ucyIsImZvckVhY2giLCJvYnNlcnZhdGlvbiIsInBvaW50X2lzX3Jvb3QiLCJlZGdlIiwiZmluZCIsInNvdXJjZV9wb2ludF9pZCIsInBvaW50X2lkIiwidW5kZWZpbmVkIiwicG9pbnRfbmFtZSIsImluZGV4IiwiZmluZEluZGV4IiwibXNnIiwiaWQiLCJGcmFnbWVudCIsImkxOG4iLCJ0IiwiaW52YWxpZFBhdGhNZXNzYWdlcyIsInBhdGgiLCJlZGdlX2lkIiwiY29uc29sZSIsImVycm9yIiwibGFzdF9vYnNlcnZhdGlvbl9pZCIsImxhc3RPYnNlcnZhdGlvblBvaW50IiwiaGFuZGxlRXZlbnRJdGVtQ2xpY2siLCJyZWYiLCJvbk1vdXNlTGVhdmVFdmVudCIsInNldEZvY3VzZWRFdmVudCIsInNldFRpbWVvdXQiLCJldmVudEZpbHRlclBhcmFtIiwib25Nb3VzZUVudGVyRXZlbnQiLCJzZXRIb3ZlcmVkRXZlbnQiLCJyZW1vdmVMYXllciIsImxheWVycyIsIl9sYXllcnMiLCJwcm9wZXJ0eSIsImthbmRvX29iamVjdCIsImluY2x1ZGVzIiwic2V0SG92ZXJlZEV2ZW50UGF0aHMiLCJzZXRIb3ZlcmVkRWRnZVBhdGhzIiwiaXNEYXRhRmV0Y2hlZEFuZEV2ZW50Tm90Rm9jdXNlZCIsInNldEZvY3VzZWRFdmVudElmRm91bmRJblBhcmFtcyIsImUiLCJwYXJzZUludCIsInZhbGlkRXZlbnQiLCJ1c2VNZW1vIiwidG9TdHJpbmciLCJ0cmlnZ2VyU29ydCIsInNvcnQiLCJhY3RpdmVGaWx0ZXIiLCJLUUwiLCJVUkwiLCJidWlsZEtRTFF1ZXJ5IiwiY2FsY0V2ZW50c1JlYWxBbW91bnQiLCJldmVudHNDb3VudCIsImV2ZW50c19jb3VudCIsInVzZUVmZmVjdCIsImZldGNoRXZlbnRzIiwibW9yZUluZm8iLCJhY3RpdmUiLCJyZU9wZW5GaWx0ZXIiLCJvbkNsaWNrIiwiRm9udEF3ZXNvbWVJY29uIiwiaWNvbiIsImZhQ2FyZXRMZWZ0IiwiZmFDYXJldFJpZ2h0IiwiaHJlZiIsImZhQXJyb3dMZWZ0IiwiTGluayIsInRvIiwic3JjIiwiTGVmdEFycm93SWNvbiIsImhlaWdodCIsIndpZHRoIiwiYWx0IiwiZXZlbnRzIiwiZXZlbnRzRmV0Y2hpbmciLCJSZWFjdENvbXBvbmVudCIsImZpbGwiLCJmZXRjaFR5cGUiLCJOb0V2ZW50c0ltYWdlIiwiU2V2ZXJlRXZlbnQiLCJoYW5kbGVDbGljayIsImNvbm5lY3RvciIsImNvbm5lY3QiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcGFnZXMvRXZlbnRzUGFnZS9ldmVudHMvZXZlbnRzX2xpc3QvRXZlbnRzTGlzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgZXRjL25vLWNvbW1lbnRlZC1vdXQtY29kZSAqL1xuaW1wb3J0IHtcbiAgZmFBcnJvd0xlZnQsXG4gIGZhQ2FyZXRMZWZ0LFxuICBmYUNhcmV0UmlnaHQsXG59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyBGb250QXdlc29tZUljb24gfSBmcm9tICdAZm9ydGF3ZXNvbWUvcmVhY3QtZm9udGF3ZXNvbWUnO1xuaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QsIENvbm5lY3RlZFByb3BzLCB1c2VEaXNwYXRjaCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IExpbmssIHVzZUhpc3RvcnksIHVzZUxvY2F0aW9uIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgTGVmdEFycm93SWNvbiBmcm9tICdzcmMvYXNzZXRzL2ljb25zL2Fycm93LWxlZnQuc3ZnJztcbmltcG9ydCB7IFJlYWN0Q29tcG9uZW50IGFzIEZpbHRlckljb24gfSBmcm9tICdzcmMvYXNzZXRzL2ljb25zL2Z1bm5lbC5zdmcnO1xuaW1wb3J0IE5vRXZlbnRzSW1hZ2UgZnJvbSAnc3JjL2Fzc2V0cy9ub19ldmVudHMuc3ZnJztcbmltcG9ydCB7IFNldmVyZUV2ZW50IH0gZnJvbSAnc3JjL2NvbXBvbmVudHMvU2V2ZXJlRXZlbnQvU2V2ZXJlRXZlbnQnO1xuaW1wb3J0IHsgSUFwcFN0YXRlIH0gZnJvbSAnc3JjL21vZGVscy9JQXBwU3RhdGUnO1xuaW1wb3J0IHsgdXNlTGFzdFZpc2l0ZWQgfSBmcm9tICdzcmMvcHJvdmlkZXJzL1VybEhpc3RvcnknO1xuaW1wb3J0IHtcbiAgZmV0Y2hFdmVudHMsXG4gIHNldEZvY3VzZWRFdmVudCxcbiAgc2V0SG92ZXJlZEVkZ2VQYXRocyxcbiAgc2V0SG92ZXJlZEV2ZW50LFxuICBzZXRIb3ZlcmVkRXZlbnRQYXRocyxcbn0gZnJvbSAnc3JjL3N0b3JlL2V2ZW50cy9hY3Rpb25zJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ3NyYy9zdG9yZS9ldmVudHMvbW9kZWxzL0lFdmVudCc7XG5pbXBvcnQgeyBzZXRFdmVudEZpbHRlclBhcmFtLCBzaWRlTmF2RXhwYW5kZWQgfSBmcm9tICdzcmMvc3RvcmUvZ2xvYmFsL2FjdGlvbnMnO1xuaW1wb3J0IGkxOG4gZnJvbSAnc3JjL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCB7IGJ1aWxkS1FMUXVlcnkgfSBmcm9tICdzcmMvdXRpbGl0aWVzL2txbCc7XG5pbXBvcnQgJy4uL0V2ZW50c1N0eWxlLnNjc3MnO1xuaW1wb3J0IEV2ZW50SW5mbyBmcm9tICcuLi9ldmVudF9pbmZvL0V2ZW50SW5mbyc7XG5pbXBvcnQgTW9yZUluZm8gZnJvbSAnLi4vTW9yZUluZm8nO1xuaW1wb3J0IEZpbHRlckNvbnRhaW5lciBmcm9tICcuL0ZpbHRlci9GaWx0ZXJDb250YWluZXInO1xuaW1wb3J0IFNvcnQgZnJvbSAnLi9Tb3J0JztcblxuZnVuY3Rpb24gbWFwU3RhdGVUb1Byb3BzKHN0YXRlOiBJQXBwU3RhdGUpIHtcbiAgY29uc3Qge1xuICAgIGV2ZW50c19kYXRhLFxuICAgIGdsb2JhbF9kYXRhLFxuICAgIGVkZ2VzX2RhdGEsXG4gICAgcG9pbnRzX2RhdGEsXG4gICAgYXJlYXNfZGF0YSxcbiAgICBuYXZfY29udGV4dF9kYXRhLFxuICB9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICBldmVudHNfZGF0YSxcbiAgICBnbG9iYWxfZGF0YSxcbiAgICBlZGdlc19kYXRhLFxuICAgIHBvaW50c19kYXRhLFxuICAgIGFyZWFzX2RhdGEsXG4gICAgbmF2X2NvbnRleHRfZGF0YSxcbiAgfTtcbn1cblxudHlwZSBJUHJvcHMgPSBDb25uZWN0ZWRQcm9wczx0eXBlb2YgY29ubmVjdG9yPiAmIHtcbiAgc2lkZW5hdkV4cGFuZGVkOiBib29sZWFuO1xufTtcblxuY29uc3QgRXZlbnRzTGlzdDogUmVhY3QuRkM8SVByb3BzPiA9ICh7XG4gIGFyZWFzX2RhdGEsXG4gIHBvaW50c19kYXRhLFxuICBlZGdlc19kYXRhLFxuICBnbG9iYWxfZGF0YSxcbiAgc2lkZW5hdkV4cGFuZGVkLFxuICBldmVudHNfZGF0YSxcbiAgbmF2X2NvbnRleHRfZGF0YSxcbn0pID0+IHtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCB7XG4gICAgaXRlbXMsXG4gICAgaXNGZXRjaGluZyxcbiAgICBmb2N1c2VkRXZlbnQsXG4gICAgaG92ZXJlZEV2ZW50LFxuICAgIGhvdmVyZWRFdmVudFBhdGhzLFxuICAgIGhvdmVyZWRFZGdlUGF0aHMsXG4gIH0gPSBldmVudHNfZGF0YTtcbiAgY29uc3QgeyB3YXRlckF1dGhvcml0eUlkLCBtYXAgfSA9IGdsb2JhbF9kYXRhO1xuICBjb25zdCBbZmlsdGVyUG9wdXBPcGVuLCBzZXRGaWx0ZXJQb3B1cE9wZW5dID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtleGNlcHRpb25BbGVydCwgc2V0RXhjZXB0aW9uQWxlcnRdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2VzOiB7IG1lc3NhZ2U6IGFueTsgZXZlbnRfaWQ6IG51bWJlciB9W107XG4gICAgZXZlbnRfaWRzOiBudW1iZXJbXTtcbiAgfT4oeyBtZXNzYWdlczogW3sgbWVzc2FnZTogJycsIGV2ZW50X2lkOiAwIH1dLCBldmVudF9pZHM6IFtdIH0pO1xuICBjb25zdCBsYXN0VmlzaXRlZCA9IHVzZUxhc3RWaXNpdGVkKCk7XG5cbiAgY29uc3QgdXNlUXVlcnkgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXModXNlTG9jYXRpb24oKS5zZWFyY2gpO1xuICB9O1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBxdWVyeSA9IHVzZVF1ZXJ5KCk7XG4gIGNvbnN0IGdldEtRTFZhbHVlc0Zyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgndmFsdWVzRnJvbUtRTCcpO1xuICB9O1xuICBjb25zdCBnZXRFdmVudElkRnJvbVVSTCA9ICgpID0+IHtcbiAgICByZXR1cm4gcXVlcnkuZ2V0KCdldmVudElkJyk7XG4gIH07XG5cbiAgY29uc3QgbG9hZGVyID0gKCkgPT4ge1xuICAgIGlmIChcbiAgICAgIChpc0ZldGNoaW5nICYmIGl0ZW1zLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAgIGFyZWFzX2RhdGEubmV3QXJlYXMubGVuZ3RoID09PSAwIHx8XG4gICAgICBwb2ludHNfZGF0YS5pc0ZldGNoaW5nIHx8XG4gICAgICBlZGdlc19kYXRhLmlzRmV0Y2hpbmdcbiAgICApIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17J2xvYWRlcid9PjwvZGl2PjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUV4cGFuc2lvblRvZ2dsZSA9ICgpID0+IHtcbiAgICBkaXNwYXRjaChzaWRlTmF2RXhwYW5kZWQoIXNpZGVuYXZFeHBhbmRlZCkpO1xuICB9O1xuXG4gIGNvbnN0IGFwcGx5RGVmYXVsdEZpbHRlciA9ICgpID0+IHtcbiAgICBoaXN0b3J5LnB1c2goXG4gICAgICBgLyR7bmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWV9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWR9JmxvY2FsZT0ke25hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5sb2NhbGV9JnZhbHVlc0Zyb21LUUw9YCxcbiAgICApO1xuICAgIGRpc3BhdGNoKHNldEV2ZW50RmlsdGVyUGFyYW0oJycpKTtcbiAgfTtcblxuICBjb25zdCB2YWxpZGF0ZUV2ZW50ID0gKGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgICAvLyBjaGVjayB0aGF0IGFsbCBvYnNlcnZhdGlvbnMnIGVkZ2VzIGV4aXN0cy4gSWYgdGhleSBhcmUgbm90IGV4aXN0cyBpdCdzIGluZGljYXRlcyB0aGF0IHRoZWlyIHBvaW50cyBhcmVcbiAgICAvLyBub3QgaW4gdGhlIGhpZXJhcmNoeSBvciBkb2Vzbid0IGhhdmUgbGF0L2xuZy5cbiAgICBsZXQgaW52YWxpZE9ic2VydmF0aW9uc01lc3NhZ2VzOiBhbnkgPSBbXTtcbiAgICBldmVudC5vYnNlcnZhdGlvbnMuZm9yRWFjaCgob2JzZXJ2YXRpb246IGFueSkgPT4ge1xuICAgICAgLy8gaWYgb2JzZXJ2YXRpb24gaXMgcm9vdCAoZXguIFdXVFApIHRoZXJlIGlzIG5vIGVkZ2UgdGhhdCBpdHMgYSBzb3VyY2UuIHNvIHdlIGNhbiBza2lwIHRoaXMgY2hlY2tcbiAgICAgIGlmICghb2JzZXJ2YXRpb24ucG9pbnRfaXNfcm9vdCkge1xuICAgICAgICBsZXQgZWRnZSA9IGVkZ2VzX2RhdGEuaXRlbXMuZmluZChcbiAgICAgICAgICAoZWRnZSkgPT4gZWRnZS5zb3VyY2VfcG9pbnRfaWQgPT09IG9ic2VydmF0aW9uLnBvaW50X2lkLFxuICAgICAgICApO1xuICAgICAgICBpZiAoZWRnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaW52YWxpZE9ic2VydmF0aW9uc01lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICBgJHtvYnNlcnZhdGlvbi5wb2ludF9uYW1lfSAoJHtvYnNlcnZhdGlvbi5wb2ludF9pZH0pIGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWRPYnNlcnZhdGlvbnNNZXNzYWdlcy5sZW5ndGggIT09IDApIHtcbiAgICAgIGxldCBpbmRleCA9IGV4Y2VwdGlvbkFsZXJ0Lm1lc3NhZ2VzLmZpbmRJbmRleChcbiAgICAgICAgKG1zZykgPT4gbXNnLmV2ZW50X2lkID09PSBldmVudC5pZCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgc2V0RXhjZXB0aW9uQWxlcnQoe1xuICAgICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAgICAuLi5leGNlcHRpb25BbGVydC5tZXNzYWdlcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8cD57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZXZlbnRfZGF0YV9taXNzaW5nJyl9PC9wPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBldmVudF9pZDogZXZlbnQuaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZXZlbnRfaWRzOiBbLi4uZXhjZXB0aW9uQWxlcnQuZXZlbnRfaWRzLCBldmVudC5pZF0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHNhbWUgY2hlY2sgYXMgYWJvdmUgYnV0IHRoaXMgdGltZSBmb3IgdGhlIGV2ZW50IHBhdGguIElmIGVkZ2UgZG9lc24ndCBleGlzdCwgaXQncyBpbmRpY2F0ZXMgdGhhdCBvbmUgb2YgdGhlXG4gICAgLy8gcG9pbnRzIGRvd25zdHJlYW0gZG9lc24ndCBoYXZlIGxhdC9sbmcuXG4gICAgbGV0IGludmFsaWRQYXRoTWVzc2FnZXM6IGFueSA9IFtdO1xuICAgIGV2ZW50LnBhdGguZm9yRWFjaCgocGF0aDogYW55KSA9PiB7XG4gICAgICBsZXQgZWRnZSA9IGVkZ2VzX2RhdGEuaXRlbXMuZmluZCgoZWRnZSkgPT4gZWRnZS5pZCA9PT0gcGF0aC5lZGdlX2lkKTtcbiAgICAgIGlmIChlZGdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgZWRnZSAke3BhdGguZWRnZV9pZH0gY2FuIG5vdCBiZSBmb3VuZGApO1xuICAgICAgICBsZXQgb2JzZXJ2YXRpb24gPSBldmVudC5vYnNlcnZhdGlvbnMuZmluZChcbiAgICAgICAgICAob2JzZXJ2YXRpb24pID0+IG9ic2VydmF0aW9uLmlkID09PSBwYXRoLmxhc3Rfb2JzZXJ2YXRpb25faWQsXG4gICAgICAgICk7XG4gICAgICAgIGxldCBsYXN0T2JzZXJ2YXRpb25Qb2ludCA9ICdOb3QgZm91bmQnO1xuICAgICAgICBpZiAob2JzZXJ2YXRpb24pIHtcbiAgICAgICAgICBsYXN0T2JzZXJ2YXRpb25Qb2ludCA9IG9ic2VydmF0aW9uLnBvaW50X25hbWU7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignbGFzdE9ic2VydmF0aW9uUG9pbnQnLCBsYXN0T2JzZXJ2YXRpb25Qb2ludCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbnZhbGlkUGF0aE1lc3NhZ2VzLnB1c2goYCR7bGFzdE9ic2VydmF0aW9uUG9pbnR9IGApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWRQYXRoTWVzc2FnZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBzZXRFeGNlcHRpb25BbGVydCh7XG4gICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAgLi4uZXhjZXB0aW9uQWxlcnQubWVzc2FnZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWVzc2FnZTogKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxwPntpMThuLnQoJ2V2ZW50c19vdmVydmlldy5ldmVudF92ZXJpZnlfY29vcmRpbmF0ZXMnKX08L3A+XG4gICAgICAgICAgICAgICAgPHNwYW4+e2ludmFsaWRQYXRoTWVzc2FnZXN9PC9zcGFuPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBldmVudF9pZDogZXZlbnQuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZXZlbnRfaWRzOiBbLi4uZXhjZXB0aW9uQWxlcnQuZXZlbnRfaWRzLCBldmVudC5pZF0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVFdmVudEl0ZW1DbGljayA9IChcbiAgICBldmVudDogSUV2ZW50LFxuICAgIHJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50PiB8IG51bGwsXG4gICkgPT4ge1xuICAgIGlmIChyZWYgIT09IG51bGwpIG9uTW91c2VMZWF2ZUV2ZW50KCk7XG4gICAgLy8gaWYgKGhvdmVyZWRFdmVudFBhdGhzICYmIG1hcCkge1xuICAgIC8vICAgICBob3ZlcmVkRXZlbnRQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgLy8gICAgICAgICBtYXAucmVtb3ZlTGF5ZXIocGF0aCk7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH1cbiAgICAvLyBkaXNwYXRjaChzZXRIb3ZlcmVkRXZlbnRQYXRocyhbXSkpO1xuICAgIC8vIGRpc3BhdGNoKHNldEhvdmVyRXZlbnRJbmRpY2F0b3IobnVsbCkpO1xuICAgIGRpc3BhdGNoKHNldEZvY3VzZWRFdmVudChldmVudCkpO1xuICAgIHNldEZpbHRlclBvcHVwT3BlbihmYWxzZSk7XG4gICAgaWYgKGdldEV2ZW50SWRGcm9tVVJMKCkgPT09IG51bGwgfHwgZ2V0RXZlbnRJZEZyb21VUkwoKSA9PT0gJ251bGwnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaGlzdG9yeS5wdXNoKFxuICAgICAgICAgIGAvJHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZX0vaW5kZXg/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7XG4gICAgICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICAgICAgfSZsb2NhbGU9JHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlfSZldmVudElkPSR7XG4gICAgICAgICAgICBldmVudC5pZFxuICAgICAgICAgIH0mdmFsdWVzRnJvbUtRTD0ke1xuICAgICAgICAgICAgZ2xvYmFsX2RhdGEuZXZlbnRGaWx0ZXJQYXJhbVxuICAgICAgICAgIH0mdmFsaWRFdmVudD0ke3ZhbGlkYXRlRXZlbnQoZXZlbnQpfWAsXG4gICAgICAgICk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbk1vdXNlRW50ZXJFdmVudCA9IChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZEV2ZW50ICYmICFob3ZlcmVkRXZlbnQgJiYgdmFsaWRhdGVFdmVudChldmVudCkpIHtcbiAgICAgIGRpc3BhdGNoKHNldEhvdmVyZWRFdmVudChldmVudCkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbk1vdXNlTGVhdmVFdmVudCA9ICgpID0+IHtcbiAgICBpZiAoaG92ZXJlZEV2ZW50ICYmIGhvdmVyZWRFdmVudFBhdGhzICYmIG1hcCkge1xuICAgICAgaG92ZXJlZEV2ZW50UGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgICAgICBtYXAucmVtb3ZlTGF5ZXIocGF0aCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGhvdmVyZWRFZGdlUGF0aHMpIHtcbiAgICAgICAgaG92ZXJlZEVkZ2VQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICAgICAgbWFwLnJlbW92ZUxheWVyKHBhdGgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxheWVycyA9IG1hcC5fbGF5ZXJzO1xuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsYXllcnMpIHtcbiAgICAgICAgY29uc3Qga2FuZG9fb2JqZWN0ID0gbGF5ZXJzW3Byb3BlcnR5XS5rYW5kb19vYmplY3Q7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrYW5kb19vYmplY3Q/LmluY2x1ZGVzKCdFdmVudEJvZHknKSB8fFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICdFdmVudFRhaWwnLFxuICAgICAgICAgICAgJ1NhbXBsaW5nUG9pbnQnLFxuICAgICAgICAgICAgJ0RlY29yYXRvcicsXG4gICAgICAgICAgICAnSG92ZXJlZEVkZ2UnLFxuICAgICAgICAgICAgJ0hvdmVyZWRFZGdlRnJvbnQnLFxuICAgICAgICAgICAgJ0ZvY3VzZWRFZGdlJyxcbiAgICAgICAgICAgICdGb2N1c2VkRWRnZUZyb250JyxcbiAgICAgICAgICBdLmluY2x1ZGVzKGthbmRvX29iamVjdClcbiAgICAgICAgKSB7XG4gICAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyc1twcm9wZXJ0eV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGRpc3BhdGNoKHNldEhvdmVyZWRFdmVudChudWxsKSk7XG4gICAgZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50UGF0aHMoW10pKTtcbiAgICBkaXNwYXRjaChzZXRIb3ZlcmVkRWRnZVBhdGhzKFtdKSk7XG4gIH07XG5cbiAgY29uc3QgaXNEYXRhRmV0Y2hlZEFuZEV2ZW50Tm90Rm9jdXNlZCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgKGdldEV2ZW50SWRGcm9tVVJMKCkgPT09ICdudWxsJyB8fCBnZXRFdmVudElkRnJvbVVSTCgpID09PSBudWxsKSAmJlxuICAgICAgZm9jdXNlZEV2ZW50ID09PSBudWxsICYmXG4gICAgICBpdGVtcy5sZW5ndGggIT09IDAgJiZcbiAgICAgICFpc0ZldGNoaW5nICYmXG4gICAgICAhYXJlYXNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgIWVkZ2VzX2RhdGEuaXNGZXRjaGluZ1xuICAgICk7XG4gIH07XG5cbiAgY29uc3Qgc2V0Rm9jdXNlZEV2ZW50SWZGb3VuZEluUGFyYW1zID0gKCkgPT4ge1xuICAgIGlmIChcbiAgICAgIGdldEV2ZW50SWRGcm9tVVJMKCkgIT09IG51bGwgJiZcbiAgICAgIGdldEV2ZW50SWRGcm9tVVJMKCkgIT09ICdudWxsJyAmJlxuICAgICAgZm9jdXNlZEV2ZW50ID09PSBudWxsICYmXG4gICAgICBpdGVtcy5sZW5ndGggIT09IDAgJiZcbiAgICAgICFpc0ZldGNoaW5nICYmXG4gICAgICAhYXJlYXNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgIWVkZ2VzX2RhdGEuaXNGZXRjaGluZ1xuICAgICkge1xuICAgICAgbGV0IGV2ZW50ID0gZXZlbnRzX2RhdGEuaXRlbXMuZmluZChcbiAgICAgICAgKGU6IElFdmVudCkgPT4gZS5pZCA9PT0gcGFyc2VJbnQoZ2V0RXZlbnRJZEZyb21VUkwoKSEpLFxuICAgICAgKTtcbiAgICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUV2ZW50SXRlbUNsaWNrKGV2ZW50LCBudWxsKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmFsaWRFdmVudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBldmVudCA9IGV2ZW50c19kYXRhLml0ZW1zLmZpbmQoXG4gICAgICAoZSkgPT4gZS5pZC50b1N0cmluZygpID09PSBnZXRFdmVudElkRnJvbVVSTCgpLFxuICAgICk7XG5cbiAgICBpZiAoZXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHZhbGlkYXRlRXZlbnQoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIFtcbiAgICBldmVudHNfZGF0YS5mb2N1c2VkRXZlbnQsXG4gICAgYXJlYXNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIHBvaW50c19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgZWRnZXNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIGV2ZW50c19kYXRhLmlzRmV0Y2hpbmcsXG4gIF0pO1xuXG4gIGNvbnN0IHRyaWdnZXJTb3J0ID0gKHNvcnQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChcbiAgICAgIGdsb2JhbF9kYXRhLmFjdGl2ZUZpbHRlciAhPT0gbnVsbCAmJlxuICAgICAgaXNEYXRhRmV0Y2hlZEFuZEV2ZW50Tm90Rm9jdXNlZCgpXG4gICAgKSB7XG4gICAgICBsZXQgS1FMO1xuICAgICAgbGV0IFVSTDtcbiAgICAgIHN3aXRjaCAoc29ydCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgS1FMID0gYCR7YnVpbGRLUUxRdWVyeShnbG9iYWxfZGF0YS5hY3RpdmVGaWx0ZXIsICduZXdlc3QnKX1gO1xuICAgICAgICAgIFVSTCA9IGAvJHtcbiAgICAgICAgICAgIG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lXG4gICAgICAgICAgfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgICB9JmV2ZW50SWQ9JHtnZXRFdmVudElkRnJvbVVSTCgpfSZsb2NhbGU9JHtcbiAgICAgICAgICAgIG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5sb2NhbGVcbiAgICAgICAgICB9JnZhbHVlc0Zyb21LUUw9JHtLUUx9JnZhbGlkRXZlbnQ9JHt2YWxpZEV2ZW50fWA7XG4gICAgICAgICAgaGlzdG9yeS5wdXNoKFVSTCk7XG4gICAgICAgICAgZGlzcGF0Y2goc2V0RXZlbnRGaWx0ZXJQYXJhbShLUUwpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIEtRTCA9IGAke2J1aWxkS1FMUXVlcnkoZ2xvYmFsX2RhdGEuYWN0aXZlRmlsdGVyLCAnb2xkZXN0Jyl9YDtcbiAgICAgICAgICBVUkwgPSBgLyR7XG4gICAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZVxuICAgICAgICAgIH0vaW5kZXg/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7XG4gICAgICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICAgICAgfSZldmVudElkPSR7Z2V0RXZlbnRJZEZyb21VUkwoKX0mbG9jYWxlPSR7XG4gICAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlXG4gICAgICAgICAgfSZ2YWx1ZXNGcm9tS1FMPSR7S1FMfSZ2YWxpZEV2ZW50PSR7dmFsaWRFdmVudH1gO1xuICAgICAgICAgIGhpc3RvcnkucHVzaChVUkwpO1xuICAgICAgICAgIGRpc3BhdGNoKHNldEV2ZW50RmlsdGVyUGFyYW0oS1FMKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBLUUwgPSBgJHtidWlsZEtRTFF1ZXJ5KGdsb2JhbF9kYXRhLmFjdGl2ZUZpbHRlciwgJ3NldmVyaXR5Jyl9YDtcbiAgICAgICAgICBVUkwgPSBgLyR7XG4gICAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZVxuICAgICAgICAgIH0vaW5kZXg/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7XG4gICAgICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICAgICAgfSZldmVudElkPSR7Z2V0RXZlbnRJZEZyb21VUkwoKX0mbG9jYWxlPSR7XG4gICAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlXG4gICAgICAgICAgfSZ2YWx1ZXNGcm9tS1FMPSR7S1FMfSZ2YWxpZEV2ZW50PSR7dmFsaWRFdmVudH1gO1xuICAgICAgICAgIGhpc3RvcnkucHVzaChVUkwpO1xuICAgICAgICAgIGRpc3BhdGNoKHNldEV2ZW50RmlsdGVyUGFyYW0oS1FMKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNhbGNFdmVudHNSZWFsQW1vdW50ID0gKCkgPT4ge1xuICAgIGxldCBldmVudHNDb3VudDogbnVtYmVyIHwgc3RyaW5nID0gMDtcbiAgICBldmVudHNDb3VudCA9IGV2ZW50c19kYXRhLmV2ZW50c19jb3VudDtcbiAgICBpZiAoZXZlbnRzQ291bnQgPiA1MClcbiAgICAgIGV2ZW50c0NvdW50ID0gYCR7aTE4bi50KCdldmVudHNfb3ZlcnZpZXcubW9yZV90aGFuJyl9IDUwYDtcblxuICAgIHJldHVybiBldmVudHNDb3VudDtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKFxuICAgICAgZmV0Y2hFdmVudHMoXG4gICAgICAgIHdhdGVyQXV0aG9yaXR5SWQsXG4gICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSB8fCAnREVGQVVMVCcsXG4gICAgICAgIGdldEV2ZW50SWRGcm9tVVJMKCksXG4gICAgICApLFxuICAgICk7XG4gIH0sIFtcbiAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkLFxuICAgIGdsb2JhbF9kYXRhLmV2ZW50RmlsdGVyUGFyYW0sXG4gICAgZm9jdXNlZEV2ZW50LFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcbiAgICAgICFldmVudHNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhZWRnZXNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgIWFyZWFzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgYXJlYXNfZGF0YS5uZXdBcmVhcy5sZW5ndGggIT09IDAgJiZcbiAgICAgIHBvaW50c19kYXRhLml0ZW1zLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgZmlsdGVyUG9wdXBPcGVuXG4gICAgKSB7XG4gICAgICBzZXRGb2N1c2VkRXZlbnRJZkZvdW5kSW5QYXJhbXMoKTtcbiAgICB9XG4gIH0sIFtcbiAgICBldmVudHNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIGVkZ2VzX2RhdGEuaXNGZXRjaGluZyxcbiAgICBwb2ludHNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIHBvaW50c19kYXRhLml0ZW1zLmxlbmd0aCxcbiAgICBhcmVhc19kYXRhLml0ZW1zLmxlbmd0aCxcbiAgICBhcmVhc19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgZ2xvYmFsX2RhdGEuZXZlbnRGaWx0ZXJQYXJhbSxcbiAgICBmaWx0ZXJQb3B1cE9wZW4sXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9eydzaWRlbmF2ICcgKyAoc2lkZW5hdkV4cGFuZGVkID8gJycgOiAnc2lkZW5hdi0tY29sbGFwc2VkJyl9PlxuICAgICAge2dsb2JhbF9kYXRhLm1vcmVJbmZvICE9PSB1bmRlZmluZWQgJiYgZ2xvYmFsX2RhdGEubW9yZUluZm8uYWN0aXZlICYmIChcbiAgICAgICAgPE1vcmVJbmZvIC8+XG4gICAgICApfVxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgJ2V2ZW50LWluZm8gJyArXG4gICAgICAgICAgKCFob3ZlcmVkRXZlbnQgJiYgZm9jdXNlZEV2ZW50ICE9PSBudWxsXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6ICdldmVudC1pbmZvLS1jb2xsYXBzZWQnKVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIHshaG92ZXJlZEV2ZW50ICYmIGZvY3VzZWRFdmVudCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICAgPEV2ZW50SW5mb1xuICAgICAgICAgICAgZXZlbnQ9e2ZvY3VzZWRFdmVudH1cbiAgICAgICAgICAgIHJlT3BlbkZpbHRlcj17KCkgPT4gc2V0RmlsdGVyUG9wdXBPcGVuKHRydWUpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwidG9nZ2xlLWV4cGFuc2lvbi1idXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRXhwYW5zaW9uVG9nZ2xlKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibmF2LWV4cGFuc2lvbi1pY29uXCI+XG4gICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgaWNvbj17c2lkZW5hdkV4cGFuZGVkID8gZmFDYXJldExlZnQgOiBmYUNhcmV0UmlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXsndG9nZ2xlLWV4cGFuc2lvbi1idXR0b24tbW9iaWxlJ31cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUV4cGFuc2lvblRvZ2dsZSgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8YSBocmVmPVwiI1wiPlxuICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17ZmFBcnJvd0xlZnR9IC8+XG4gICAgICAgICAgPHNwYW4+IHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5iYWNrX3RvX2RldGFpbHMnKX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJldmVudHMtaGVhZGVyXCI+XG4gICAgICAgIHtsYXN0VmlzaXRlZCAmJiAhaXNGZXRjaGluZyAmJiAoXG4gICAgICAgICAgPExpbmsgY2xhc3NOYW1lPVwiYmFja1wiIHRvPXtsYXN0VmlzaXRlZH0+XG4gICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBzcmM9e0xlZnRBcnJvd0ljb259XG4gICAgICAgICAgICAgIGhlaWdodD1cIjEwcHhcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjEycHhcIlxuICAgICAgICAgICAgICBhbHQ9XCJiYWNrXCJcbiAgICAgICAgICAgIC8+eycgJ31cbiAgICAgICAgICAgIHtpMThuLnQoJ2FyZWFfc2NyZWVuLmJhY2snKX1cbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICl9XG4gICAgICAgIDxoND5cbiAgICAgICAgICB7aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZXZlbnRzX2xpc3QnKX1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9eydldmVudHMtaGVhZGVyX19ldmVudHNfYW1vdW50J30+XG4gICAgICAgICAgICAoe2NhbGNFdmVudHNSZWFsQW1vdW50KCl9KVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9oND5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXJpbmdcIj5cbiAgICAgICAgICB7ZXZlbnRzX2RhdGEuaXRlbXMubGVuZ3RoICE9PSAwICYmIChcbiAgICAgICAgICAgIDxTb3J0XG4gICAgICAgICAgICAgIHRyaWdnZXJTb3J0PXt0cmlnZ2VyU29ydH1cbiAgICAgICAgICAgICAgZXZlbnRzPXtldmVudHNfZGF0YS5pdGVtc31cbiAgICAgICAgICAgICAgZXZlbnRzRmV0Y2hpbmc9e2V2ZW50c19kYXRhLmlzRmV0Y2hpbmd9XG4gICAgICAgICAgICAgIGFjdGl2ZUZpbHRlcj17Z2xvYmFsX2RhdGEuYWN0aXZlRmlsdGVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWNvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RmlsdGVyUG9wdXBPcGVuKCFmaWx0ZXJQb3B1cE9wZW4pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RmlsdGVySWNvbiB3aWR0aD1cIjE3cHhcIiBoZWlnaHQ9XCIxN3B4XCIgZmlsbD1cIiNmNjAwNGZcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHtwb2ludHNfZGF0YS5pdGVtcy5sZW5ndGggIT09IDAgJiYgIWZvY3VzZWRFdmVudCAmJiAoXG4gICAgICAgICAgPEZpbHRlckNvbnRhaW5lclxuICAgICAgICAgICAgZmlsdGVyUG9wdXBPcGVuPXtmaWx0ZXJQb3B1cE9wZW59XG4gICAgICAgICAgICBmZXRjaFR5cGU9eydFdmVudEZpbHRlcid9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJldmVudHMtY29udGFpbmVyIHNjcm9sbGJhciBcIj5cbiAgICAgICAge2xvYWRlcigpfVxuICAgICAgICB7IWlzRmV0Y2hpbmcgJiZcbiAgICAgICAgICBpdGVtcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgICAgICFlZGdlc19kYXRhLmlzRmV0Y2hpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydldmVudHNfX2JsYW5rc2xhdGUnfT5cbiAgICAgICAgICAgICAgPGltZyBzcmM9e05vRXZlbnRzSW1hZ2V9IGFsdD1cIk5vRXZlbnRzSWNvblwiIC8+XG4gICAgICAgICAgICAgIDxoMj57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLmJsYW5rc2xhdGUuaGVhZGVyJyl9PC9oMj5cbiAgICAgICAgICAgICAgPHA+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5ibGFua3NsYXRlLmJvZHknKX08L3A+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnYXBwbHlfZGVmYXVsdF9maWx0ZXJfYnV0dG9uJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBhcHBseURlZmF1bHRGaWx0ZXIoKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuYmxhbmtzbGF0ZS5idXR0b24nKX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAge2l0ZW1zLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgICAgICFlZGdlc19kYXRhLmlzRmV0Y2hpbmcgJiYgKFxuICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImV2ZW50cyBcIj5cbiAgICAgICAgICAgICAge2l0ZW1zLm1hcCgoZXZlbnQ6IGFueSkgPT4gKFxuICAgICAgICAgICAgICAgIDxsaSBrZXk9e2V2ZW50LmlkfSBjbGFzc05hbWU9XCJldmVudFwiIGRhdGEtZXZlbnQtaWQ9e2V2ZW50LmlkfT5cbiAgICAgICAgICAgICAgICAgIDxTZXZlcmVFdmVudFxuICAgICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsaWNrPXtoYW5kbGVFdmVudEl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyRXZlbnQ9e29uTW91c2VFbnRlckV2ZW50fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmVFdmVudD17b25Nb3VzZUxlYXZlRXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRXZlbnQ9e3ZhbGlkYXRlRXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkFsZXJ0PXtleGNlcHRpb25BbGVydH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKTtcbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3RvcihFdmVudHNMaXN0KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFLQSxJQUFBQyxpQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBTCxPQUFBO0FBQWlFLElBQUFNLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQVAsT0FBQTtBQUFBLElBQUFRLE9BQUEs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