@kando-env/kando-ui 1.2.235 → 1.2.236

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 (592) hide show
  1. package/lib/Router.js +4 -66
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +11 -41
  3. package/lib/Widgets/EventsRow/EventsRow.js +14 -41
  4. package/lib/Widgets/Map/GraphUtils.js +1 -4
  5. package/lib/Widgets/Map/Map.js +117 -62
  6. package/lib/Widgets/Map/Map.scss +67 -0
  7. package/lib/Widgets/Map/MapUtils.js +28 -67
  8. package/lib/Widgets/Map/areas/AreaPolygon.js +7 -27
  9. package/lib/Widgets/Map/areas/AreaPolygons.js +10 -23
  10. package/lib/Widgets/Map/edges/Edge.js +10 -31
  11. package/lib/Widgets/Map/edges/Edge.scss +7 -2
  12. package/lib/Widgets/Map/edges/Edges.js +24 -18
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +7 -22
  14. package/lib/Widgets/Map/events/Event.js +7 -23
  15. package/lib/Widgets/Map/events/EventIndicator.js +20 -43
  16. package/lib/Widgets/Map/events/EventPath.js +5 -20
  17. package/lib/Widgets/Map/events/EventUtils.js +26 -69
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +10 -17
  19. package/lib/Widgets/Map/events/PointOfEvent.js +11 -37
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +4 -14
  21. package/lib/Widgets/Map/events/Snail.js +7 -19
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +15 -54
  23. package/lib/Widgets/Map/map/FloatingGraph.js +3 -19
  24. package/lib/Widgets/Map/map/GraphDateButton.js +3 -9
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +5 -11
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +4 -10
  27. package/lib/Widgets/Map/points/PointIcon.js +44 -0
  28. package/lib/Widgets/Map/points/PointIcon.scss +230 -0
  29. package/lib/Widgets/Map/points/PointMarker.js +22 -35
  30. package/lib/Widgets/Map/points/PointMarkers.js +62 -26
  31. package/lib/Widgets/Map/points/PointUtils.js +85 -106
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +15 -49
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +4 -19
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +1 -13
  35. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +1 -5
  36. package/lib/Widgets/MostPolluting/Areas/Areas.js +19 -53
  37. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +1 -1
  38. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  39. package/lib/Widgets/MostPolluting/Areas/styles.js +1 -7
  40. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +3 -11
  41. package/lib/Widgets/MostPolluting/Factories/Factories.js +30 -64
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +4 -21
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +1 -10
  44. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +4 -17
  45. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +3 -7
  46. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +1 -1
  47. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  48. package/lib/Widgets/MostPolluting/Factories/styles.js +1 -7
  49. package/lib/Widgets/MostPolluting/MostPolluting.js +22 -18
  50. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +13 -17
  51. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +2 -9
  52. package/lib/Widgets/MostPolluting/ShowMore/styles.js +1 -5
  53. package/lib/Widgets/MostPolluting/assets/index.js +17 -28
  54. package/lib/Widgets/MostPolluting/components/ChangePercent.js +1 -16
  55. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +15 -26
  56. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +4 -26
  57. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +25 -33
  58. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +4 -20
  59. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +29 -43
  60. package/lib/Widgets/MostPolluting/models.js +1 -1
  61. package/lib/Widgets/MostPolluting/styles.js +1 -7
  62. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +2 -9
  63. package/lib/Widgets/PotentialImpactSummary/Icon.js +1 -11
  64. package/lib/Widgets/PotentialImpactSummary/index.js +7 -29
  65. package/lib/Widgets/PotentialImpactSummary/index.test.js +17 -36
  66. package/lib/Widgets/PotentialImpactSummary/styles.js +2 -15
  67. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  68. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +4 -10
  69. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +7 -21
  70. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +19 -29
  71. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +15 -24
  72. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +7 -21
  73. package/lib/Widgets/QualitySummary/QualitySummary.js +8 -24
  74. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +2 -2
  75. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  76. package/lib/Widgets/QualitySummary/styles.js +2 -15
  77. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +9 -20
  78. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +9 -34
  79. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +9 -18
  80. package/lib/Widgets/UtilityInformation/UtilityInformation.js +22 -45
  81. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  82. package/lib/Widgets/UtilityInformation/styles.js +2 -22
  83. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +2 -2
  84. package/lib/assets/icons/index.js +5 -8
  85. package/lib/assets/icons/kandoStepper/index.js +9 -14
  86. package/lib/assets/icons/pin/pin-matash-white.svg +8 -42
  87. package/lib/assets/icons/plus_v.svg +13 -0
  88. package/lib/assets/icons/water_reuse.svg +27 -0
  89. package/lib/assets/map/pin-matash-clicked.svg +12 -0
  90. package/lib/assets/map/pin-matash-white.svg +8 -28
  91. package/lib/assets/map/pin-plant-clicked.svg +10 -0
  92. package/lib/assets/map/pin-plant-white.svg +6 -28
  93. package/lib/assets/map/pin-suction-clicked.svg +10 -0
  94. package/lib/assets/map/pin-suction.svg +6 -23
  95. package/lib/assets/map/pin-water-clicked.svg +11 -0
  96. package/lib/assets/map/pin-water.svg +7 -17
  97. package/lib/assets/point_icons/WWTP-icon.svg +8 -21
  98. package/lib/assets/point_icons/factory-icon.svg +6 -21
  99. package/lib/assets/point_icons/pump-station-icon.svg +6 -16
  100. package/lib/components/ApplyButton/ApplyButton.js +5 -11
  101. package/lib/components/ApplyButton/index.js +1 -4
  102. package/lib/components/Backdrop/Backdrop.js +2 -8
  103. package/lib/components/ContentLoader/ContentLoader.js +7 -12
  104. package/lib/components/ContentLoader/index.js +1 -2
  105. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +7 -14
  106. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +2 -8
  107. package/lib/components/CustomInputs/DoubleTabs/styles.js +2 -10
  108. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +5 -18
  109. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +1 -5
  110. package/lib/components/CustomInputs/Search/Search.js +13 -38
  111. package/lib/components/CustomInputs/Search/index.js +1 -4
  112. package/lib/components/CustomInputs/Select/Select.js +33 -33
  113. package/lib/components/CustomInputs/Select/Select.stories.js +2 -8
  114. package/lib/components/DamageType/DamageType.js +37 -76
  115. package/lib/components/DamageType/index.js +1 -4
  116. package/lib/components/DataLoaderError/DataLoaderError.js +4 -10
  117. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +6 -16
  118. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +17 -37
  119. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +12 -37
  120. package/lib/components/DischargeHeatmap/HighchartsOptions.js +6 -10
  121. package/lib/components/DischargeHeatmap/index.js +1 -4
  122. package/lib/components/DischargeHeatmap/mocks/handlers.js +3 -4
  123. package/lib/components/DischargeHeatmap/popupText.js +1 -16
  124. package/lib/components/DischargeHeatmap/titles.js +1 -8
  125. package/lib/components/DischargeHeatmap/types.js +1 -1
  126. package/lib/components/ErrorBoundary.js +3 -15
  127. package/lib/components/Events/Events.js +5 -30
  128. package/lib/components/Events/index.js +1 -4
  129. package/lib/components/Graph/Graph.js +31 -74
  130. package/lib/components/Graph/index.js +1 -4
  131. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +1 -7
  132. package/lib/components/Header/Breadcrumbs/index.js +1 -4
  133. package/lib/components/Header/DoubleTabs/DoubleTabs.js +14 -30
  134. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +2 -8
  135. package/lib/components/Header/DoubleTabs/styles.js +2 -10
  136. package/lib/components/Header/Header.js +1 -7
  137. package/lib/components/Header/Header.stories.js +2 -8
  138. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +1 -11
  139. package/lib/components/Header/InfoBar/InfoBar.js +10 -30
  140. package/lib/components/Header/InfoBar/Search/Control.js +2 -13
  141. package/lib/components/Header/InfoBar/Search/GroupLabel.js +1 -12
  142. package/lib/components/Header/InfoBar/Search/Search.js +5 -26
  143. package/lib/components/Header/InfoBar/Search/SearchContainer.js +4 -21
  144. package/lib/components/Header/InfoBar/Search/index.js +1 -4
  145. package/lib/components/Header/InfoBar/Search/searchStyle.js +1 -4
  146. package/lib/components/Header/KandoNavbar/KandoNavbar.js +46 -91
  147. package/lib/components/Header/KandoNavbar/index.js +1 -4
  148. package/lib/components/Header/Slideshow/Slideshow.js +31 -67
  149. package/lib/components/Header/Slideshow/index.js +1 -4
  150. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +1 -7
  151. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +2 -15
  152. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +1 -15
  153. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +7 -24
  154. package/lib/components/Header/Toolbar/Toolbar.js +46 -84
  155. package/lib/components/InfoBar/InfoBar.js +8 -23
  156. package/lib/components/InfoBar/InfoBar.stories.js +2 -8
  157. package/lib/components/KandoModal/KandoModal.js +19 -42
  158. package/lib/components/KandoModal/index.js +1 -4
  159. package/lib/components/Link.js +2 -11
  160. package/lib/components/Links/CustomRedirect/CustomRedirect.js +3 -12
  161. package/lib/components/Links/StyledLink/StyledLink.js +6 -16
  162. package/lib/components/Links/StyledNavLink/StyledNavLink.js +4 -14
  163. package/lib/components/LiveEvents/CarouselSlide.js +5 -11
  164. package/lib/components/LiveEvents/LiveEvents.js +1 -10
  165. package/lib/components/LiveEvents/index.js +1 -4
  166. package/lib/components/LoaderByPercent/LoaderByPercent.js +13 -23
  167. package/lib/components/Map/Map.js +12 -26
  168. package/lib/components/Map/index.js +1 -4
  169. package/lib/components/Modal/Modal.js +3 -10
  170. package/lib/components/NarrowHeader.js +1 -12
  171. package/lib/components/PointInfo/PointInfo.js +10 -22
  172. package/lib/components/PointInfo/index.js +1 -4
  173. package/lib/components/PopupModal/PopupModal.js +6 -17
  174. package/lib/components/PopupModal/PopupModal.stories.js +2 -11
  175. package/lib/components/Sector/Sector.js +4 -13
  176. package/lib/components/Sector/Sector.test.js +3 -8
  177. package/lib/components/Sector/index.js +1 -4
  178. package/lib/components/Sector/sectorIcons.js +1 -27
  179. package/lib/components/SevereEvent/Eta/Eta.js +20 -40
  180. package/lib/components/SevereEvent/Eta/styles.js +1 -5
  181. package/lib/components/SevereEvent/SevereEvent.js +15 -36
  182. package/lib/components/Spinner/Spinner.js +5 -10
  183. package/lib/components/Spinner/Spinner.stories.js +2 -8
  184. package/lib/components/Spinner/index.js +1 -4
  185. package/lib/components/Spinner/styles.js +1 -9
  186. package/lib/components/Tabs/Tabs.js +4 -24
  187. package/lib/components/Tabs/Tabs.stories.js +2 -8
  188. package/lib/components/Tabs/assets/index.js +1 -6
  189. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +2 -12
  190. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +12 -43
  191. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +12 -36
  192. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +1 -4
  193. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +9 -29
  194. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +4 -9
  195. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +1 -4
  196. package/lib/components/TimeRangeSelector/TimeRangeList.js +4 -13
  197. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +11 -24
  198. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +11 -36
  199. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +2 -10
  200. package/lib/components/TimeRangeSelector/constants.js +2 -2
  201. package/lib/components/TimeRangeSelector/index.js +1 -4
  202. package/lib/components/Toggle/Toggle.js +7 -21
  203. package/lib/components/Toggle/index.js +1 -4
  204. package/lib/components/TrendGraph/TrendGraph.js +16 -49
  205. package/lib/components/TrendGraph/index.js +1 -4
  206. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +13 -37
  207. package/lib/components/TrendGraphNVL/index.js +1 -4
  208. package/lib/development-environment/index.js +1 -13
  209. package/lib/development-environment/mock/browser.js +1 -8
  210. package/lib/development-environment/mock/get.js +1 -5
  211. package/lib/development-environment/mock/handlers.js +1 -26
  212. package/lib/development-environment/mock/mockBus.js +2 -7
  213. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +1 -1
  214. package/lib/development-environment/mock/mockObjects/areaInformation.js +1 -1
  215. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +1 -1
  216. package/lib/development-environment/mock/mockObjects/areaSitesData.js +1 -1
  217. package/lib/development-environment/mock/mockObjects/areasJson.js +1 -1
  218. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +1 -1
  219. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +1 -1
  220. package/lib/development-environment/mock/mockObjects/data-menuData.js +1 -1
  221. package/lib/development-environment/mock/mockObjects/data-search.js +1 -1
  222. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +1 -1
  223. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +1 -1
  224. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +1 -1
  225. package/lib/development-environment/mock/mockObjects/eventsJson.js +1 -1
  226. package/lib/development-environment/mock/mockObjects/metascore.js +1 -1
  227. package/lib/development-environment/mock/mockObjects/permissionsJson.js +1 -1
  228. package/lib/development-environment/mock/mockObjects/pointsJson.js +1 -1
  229. package/lib/development-environment/mock/mockObjects/site-info.js +1 -1
  230. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +1 -1
  231. package/lib/development-environment/togly/ToglyDashboard.js +4 -22
  232. package/lib/development-environment/togly/ToglyItem.js +5 -25
  233. package/lib/development-environment/togly/flags.js +1 -1
  234. package/lib/development-environment/togly/init.js +1 -6
  235. package/lib/development-environment/togly/macro.js +7 -9
  236. package/lib/development-environment/togly/useDoubleKeyDown.js +1 -8
  237. package/lib/development-environment/togly/useLocalStorage.js +12 -19
  238. package/lib/hooks/useApi.js +10 -29
  239. package/lib/hooks/useApiWithDashboardQuery.js +10 -30
  240. package/lib/hooks/useClickOutside.js +1 -5
  241. package/lib/hooks/useInitializeHeaders.js +1 -7
  242. package/lib/hooks/useKandoFetch.js +13 -27
  243. package/lib/hooks/useMap.js +11 -52
  244. package/lib/hooks/useNavContext.js +13 -22
  245. package/lib/hooks/useQueryURL.js +1 -4
  246. package/lib/hooks/useRemoveExistingLayers.js +2 -7
  247. package/lib/hooks/useUpdateEventBodyTail.js +1 -10
  248. package/lib/hooks/useUserTimeZone.js +1 -9
  249. package/lib/hooks/useUserTimeZone.test.js +1 -9
  250. package/lib/hooks/useWindowSize.js +14 -19
  251. package/lib/i18n/en.json +39 -11
  252. package/lib/i18n/en_uk.json +26 -3
  253. package/lib/i18n/fr.json +25 -2
  254. package/lib/i18n/he.json +32 -2
  255. package/lib/i18n/it.json +25 -2
  256. package/lib/index.js +21 -29
  257. package/lib/macros/getVersion.js +2 -3
  258. package/lib/models/IAction.js +1 -1
  259. package/lib/models/IAppState.js +1 -1
  260. package/lib/pages/AreaPage/AreaPage.js +5 -34
  261. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +6 -17
  262. package/lib/pages/AreaPage/Dashboard/Dashboard.js +2 -23
  263. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +11 -35
  264. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +6 -8
  265. package/lib/pages/AreaPage/Dashboard/Sites/Sites.js +46 -65
  266. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +1 -10
  267. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +3 -15
  268. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +3 -7
  269. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  270. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +1 -1
  271. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +2 -10
  272. package/lib/pages/AssessmentPage/AssessmentPage.js +5 -30
  273. package/lib/pages/CannyWidget/Feedback.js +10 -25
  274. package/lib/pages/CovidPage/CovidPage.js +1 -14
  275. package/lib/pages/CovidPage/components/Body.js +9 -33
  276. package/lib/pages/CovidPage/components/Map.js +20 -38
  277. package/lib/pages/CovidPage/components/Sidebar.js +4 -18
  278. package/lib/pages/CovidPage/components/Summary.js +8 -29
  279. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +13 -37
  280. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +1 -4
  281. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +13 -41
  282. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +1 -4
  283. package/lib/pages/CovidPage/components/areas/Area.js +6 -33
  284. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +4 -45
  285. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +5 -18
  286. package/lib/pages/CovidPage/components/areas/AreasList.js +14 -33
  287. package/lib/pages/CovidPage/components/areas/Sort.js +5 -19
  288. package/lib/pages/CovidPage/components/nvlStatusHelper.js +2 -11
  289. package/lib/pages/EventsPage/Body/Body.js +2 -19
  290. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +11 -28
  291. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +11 -31
  292. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +4 -11
  293. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +3 -11
  294. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +5 -10
  295. package/lib/pages/EventsPage/DragAndDropArea/index.js +1 -4
  296. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +26 -36
  297. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +5 -24
  298. package/lib/pages/EventsPage/EventsPage.js +1 -13
  299. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +9 -32
  300. package/lib/pages/EventsPage/events/MoreInfo.js +1 -19
  301. package/lib/pages/EventsPage/events/Sidebar.js +5 -18
  302. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +5 -29
  303. package/lib/pages/EventsPage/events/event_info/EventDetails.js +8 -32
  304. package/lib/pages/EventsPage/events/event_info/EventInfo.js +14 -42
  305. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +2 -14
  306. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +10 -40
  307. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +1 -12
  308. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +8 -30
  309. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +1 -8
  310. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/LineChartYear/LineChartYear.js +7 -27
  311. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/MockHistoryInformation.js +2 -10
  312. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +5 -21
  313. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsLineChart.js +4 -23
  314. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +4 -22
  315. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +6 -33
  316. package/lib/pages/EventsPage/events/event_info/samplings/Sampling.js +3 -15
  317. package/lib/pages/EventsPage/events/event_info/samplings/Samplings.js +2 -10
  318. package/lib/pages/EventsPage/events/event_info/sources/Source.js +8 -31
  319. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +4 -20
  320. package/lib/pages/EventsPage/events/events_list/EventItem.js +3 -24
  321. package/lib/pages/EventsPage/events/events_list/EventUtils.js +2 -13
  322. package/lib/pages/EventsPage/events/events_list/EventsList.js +54 -111
  323. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +11 -32
  324. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +35 -96
  325. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +10 -55
  326. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +5 -17
  327. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +15 -38
  328. package/lib/pages/EventsPage/events/events_list/Sort.js +4 -23
  329. package/lib/pages/ImportFileWizard/FileUploadRespones.js +4 -19
  330. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +2 -8
  331. package/lib/pages/ImportFileWizard/ImportFile.js +10 -29
  332. package/lib/pages/ImportFileWizard/ResponseBody.js +3 -12
  333. package/lib/pages/ImportFileWizard/ValidationForm.js +7 -27
  334. package/lib/pages/ImportFileWizard/ValidationResponse.js +6 -30
  335. package/lib/pages/ImportFileWizard/importFileUtils.js +1 -2
  336. package/lib/pages/ImportFileWizard/index.js +1 -4
  337. package/lib/pages/ImportGisPage/ImportGisContainer.js +7 -27
  338. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +10 -27
  339. package/lib/pages/ImportGisPage/importGisUtils.js +1 -13
  340. package/lib/pages/ImportGisProcess/index.js +4 -18
  341. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +5 -19
  342. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +3 -10
  343. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +1 -8
  344. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +25 -58
  345. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +2 -8
  346. package/lib/pages/NotificationsPage/Notification/Notification.js +8 -16
  347. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  348. package/lib/pages/NotificationsPage/Notifications.mock.js +1 -1
  349. package/lib/pages/NotificationsPage/Notifications.stories.js +2 -10
  350. package/lib/pages/NotificationsPage/NotificationsPage.js +11 -35
  351. package/lib/pages/NotificationsPage/assets/index.js +15 -24
  352. package/lib/pages/NotificationsPageV2/NotificationsPage.js +35 -83
  353. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +4 -24
  354. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +27 -46
  355. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +18 -49
  356. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +4 -47
  357. package/lib/pages/NotificationsPageV2/notificationUtils.js +2 -30
  358. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  359. package/lib/pages/OldSitePage/OldSitePage.js +16 -77
  360. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +3 -16
  361. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +2 -8
  362. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +4 -9
  363. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +5 -12
  364. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +2 -12
  365. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +7 -23
  366. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +6 -20
  367. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +4 -10
  368. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +2 -12
  369. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +9 -24
  370. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +4 -12
  371. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +28 -59
  372. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  373. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
  374. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +3 -18
  375. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +2 -15
  376. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +8 -16
  377. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +1 -16
  378. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  379. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +2 -10
  380. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +2 -7
  381. package/lib/pages/ProfilePage/Container.js +2 -6
  382. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +16 -43
  383. package/lib/pages/ProfilePage/ProfilePage.js +172 -115
  384. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +9 -32
  385. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +7 -17
  386. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +3 -14
  387. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +18 -48
  388. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +4 -21
  389. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +7 -15
  390. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +8 -29
  391. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +6 -25
  392. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +9 -21
  393. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +1 -13
  394. package/lib/pages/SamplingsPage/DesktopActions/index.js +1 -4
  395. package/lib/pages/SamplingsPage/NavigationDropdown.js +3 -21
  396. package/lib/pages/SamplingsPage/NewSamplingAction.js +38 -84
  397. package/lib/pages/SamplingsPage/SamplingMobileModal.js +12 -65
  398. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +5 -19
  399. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +2 -13
  400. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +22 -56
  401. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +4 -20
  402. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +1 -14
  403. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +40 -112
  404. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +11 -42
  405. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +14 -47
  406. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +15 -49
  407. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +5 -21
  408. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +2 -8
  409. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +1 -11
  410. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +7 -36
  411. package/lib/pages/SamplingsPage/SamplingsMobileList.js +10 -34
  412. package/lib/pages/SamplingsPage/SamplingsPage.js +14 -39
  413. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +14 -48
  414. package/lib/pages/SamplingsPage/index.js +1 -3
  415. package/lib/pages/SamplingsPage/samplingsPageUtils.js +7 -30
  416. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +2 -10
  417. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +2 -8
  418. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +3 -17
  419. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +6 -11
  420. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +15 -23
  421. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +7 -16
  422. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +18 -27
  423. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +2 -12
  424. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +9 -26
  425. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +6 -20
  426. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +4 -10
  427. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +2 -12
  428. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +9 -24
  429. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +4 -12
  430. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +32 -68
  431. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  432. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
  433. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +4 -19
  434. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +2 -15
  435. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +17 -38
  436. package/lib/pages/SitePage/SamplingParameters/dataParser.js +13 -29
  437. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +3 -7
  438. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  439. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +2 -10
  440. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +2 -8
  441. package/lib/pages/SitePage/SiteInformation/ContributorItem.js +5 -12
  442. package/lib/pages/SitePage/SiteInformation/EmptyState.js +1 -10
  443. package/lib/pages/SitePage/SiteInformation/PollutionContributor.js +5 -15
  444. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +17 -48
  445. package/lib/pages/SitePage/SiteInformation/style.js +2 -8
  446. package/lib/pages/SitePage/SitePage.js +10 -49
  447. package/lib/pages/UploadLabResult/index.js +1 -8
  448. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +9 -37
  449. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +2 -9
  450. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +2 -16
  451. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +2 -8
  452. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +9 -35
  453. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +1 -5
  454. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +1 -7
  455. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +1 -10
  456. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +7 -16
  457. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  458. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +1 -10
  459. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +1 -5
  460. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +3 -25
  461. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +13 -19
  462. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +9 -18
  463. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +5 -20
  464. package/lib/pages/WbeDashboard/ExpandableComponent.js +6 -14
  465. package/lib/pages/WbeDashboard/GraphWrapper.js +8 -28
  466. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +6 -19
  467. package/lib/pages/WbeDashboard/SearchInput.js +4 -22
  468. package/lib/pages/WbeDashboard/SummaryGraph.js +56 -76
  469. package/lib/pages/WbeDashboard/SummaryGraphModal.js +1 -13
  470. package/lib/pages/WbeDashboard/Tabs.js +4 -9
  471. package/lib/pages/WbeDashboard/WbeDashboardPage.js +60 -154
  472. package/lib/pages/WbeDashboard/WbeSummaryBar.js +19 -49
  473. package/lib/providers/Slideshow/SlideshowContext.js +3 -5
  474. package/lib/providers/Slideshow/SlideshowProvider.js +16 -31
  475. package/lib/providers/Slideshow/SlideshowRunner.js +7 -17
  476. package/lib/providers/UrlHistory/UrlHistoryContext.js +3 -7
  477. package/lib/providers/UrlHistory/UrlHistoryProvider.js +1 -13
  478. package/lib/providers/UrlHistory/index.js +5 -8
  479. package/lib/providers/UrlHistory/useLastVisited.js +1 -7
  480. package/lib/react-app-env.d.js +1 -1
  481. package/lib/store/ImportGis/action.js +1 -1
  482. package/lib/store/ImportGis/actionTypes.js +1 -2
  483. package/lib/store/ImportGis/actionsCreator.js +7 -17
  484. package/lib/store/ImportGis/models/gisImports.js +1 -1
  485. package/lib/store/ImportGis/reducer.js +1 -17
  486. package/lib/store/WBE/actionTypes.js +1 -1
  487. package/lib/store/WBE/actions.js +1 -3
  488. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  489. package/lib/store/WBE/models/IWBE.js +1 -1
  490. package/lib/store/WBE/models/IWBEState.js +1 -1
  491. package/lib/store/WBE/reducer.js +2 -9
  492. package/lib/store/areas/actionTypes.js +2 -2
  493. package/lib/store/areas/actions.js +2 -11
  494. package/lib/store/areas/models/IArea.js +1 -1
  495. package/lib/store/areas/models/IAreasState.js +1 -1
  496. package/lib/store/areas/reducer.js +1 -9
  497. package/lib/store/context/actionTypes.js +2 -2
  498. package/lib/store/context/actions.js +2 -6
  499. package/lib/store/context/contextMiddlewares.js +1 -9
  500. package/lib/store/context/models/INavContext.js +1 -1
  501. package/lib/store/context/models/INavContextState.js +1 -1
  502. package/lib/store/context/reducer.js +2 -9
  503. package/lib/store/dashboard/dashboardSlice.js +1 -3
  504. package/lib/store/dashboard/periodType.js +1 -1
  505. package/lib/store/edges/actionTypes.js +2 -2
  506. package/lib/store/edges/actions.js +3 -9
  507. package/lib/store/edges/models/IEdge.js +1 -1
  508. package/lib/store/edges/models/IEdgesState.js +1 -1
  509. package/lib/store/edges/reducer.js +2 -16
  510. package/lib/store/events/actionTypes.js +2 -2
  511. package/lib/store/events/actions.js +12 -30
  512. package/lib/store/events/models/IEvent.js +1 -1
  513. package/lib/store/events/models/IEventsState.js +1 -1
  514. package/lib/store/events/models/ISource.js +1 -1
  515. package/lib/store/events/reducer.js +3 -41
  516. package/lib/store/filters/IFilter.js +1 -1
  517. package/lib/store/filters/IFilterItem.js +1 -1
  518. package/lib/store/global/actionTypes.js +2 -2
  519. package/lib/store/global/actions.js +8 -20
  520. package/lib/store/global/models/IGlobalState.js +1 -1
  521. package/lib/store/global/reducer.js +2 -18
  522. package/lib/store/permissions/permissionsSlice.js +3 -6
  523. package/lib/store/points/actionTypes.js +2 -2
  524. package/lib/store/points/actions.js +1 -5
  525. package/lib/store/points/models/IGroup.js +1 -1
  526. package/lib/store/points/models/IPoint.js +1 -1
  527. package/lib/store/points/models/IPointsState.js +1 -1
  528. package/lib/store/points/reducer.js +1 -7
  529. package/lib/store/rootActionTypes.js +1 -1
  530. package/lib/store/rootActions.js +1 -3
  531. package/lib/store/rootReducer.js +4 -23
  532. package/lib/store/rootStore.js +4 -12
  533. package/lib/store/samplings/action.js +1 -1
  534. package/lib/store/samplings/actionTypes.js +1 -2
  535. package/lib/store/samplings/actionsCreator.js +2 -5
  536. package/lib/store/samplings/models/Samplings.js +1 -1
  537. package/lib/store/samplings/reducer.js +1 -9
  538. package/lib/styles/StylesLayout.js +1 -7
  539. package/lib/styles/theme/theme.js +2 -4
  540. package/lib/test/mocks/browser.js +3 -7
  541. package/lib/test/test-utils.js +11 -21
  542. package/lib/ui-kit/Button/Button.js +15 -23
  543. package/lib/ui-kit/Button/Button.test.js +6 -26
  544. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  545. package/lib/ui-kit/Checkbox/Checkbox.js +7 -21
  546. package/lib/ui-kit/DropDown/DropDown.js +5 -16
  547. package/lib/ui-kit/DropDown/DropDown.test.js +6 -12
  548. package/lib/ui-kit/DropDown/DropDownItem.js +5 -13
  549. package/lib/ui-kit/DropDown/DropdownToggle.js +2 -13
  550. package/lib/ui-kit/IconAction/IconAction.js +3 -9
  551. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +16 -54
  552. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +24 -28
  553. package/lib/ui-kit/KandoList/KandoList.js +5 -16
  554. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  555. package/lib/ui-kit/KandoTable/KandoTable.js +23 -35
  556. package/lib/ui-kit/KandoTable/KandoTable.test.js +1 -16
  557. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  558. package/lib/ui-kit/Layout/Layout.js +1 -8
  559. package/lib/ui-kit/MobileInput/MobileInput.js +18 -33
  560. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +8 -14
  561. package/lib/ui-kit/ModalConfirmation/index.js +1 -3
  562. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +5 -10
  563. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +3 -11
  564. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +4 -11
  565. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +5 -14
  566. package/lib/ui-kit/Tooltip/Tooltip.js +3 -8
  567. package/lib/ui-kit/index.js +1 -15
  568. package/lib/ui-kit/kandoStepper/KandoStepper.js +2 -7
  569. package/lib/utilities/ActionUtility.js +1 -2
  570. package/lib/utilities/Alert.js +2 -10
  571. package/lib/utilities/Analytics.js +2 -12
  572. package/lib/utilities/Array.js +2 -6
  573. package/lib/utilities/Enum.js +12 -16
  574. package/lib/utilities/ErrorBoundary.js +3 -18
  575. package/lib/utilities/File.js +5 -24
  576. package/lib/utilities/GetDir.js +4 -8
  577. package/lib/utilities/KandoDate.js +1 -7
  578. package/lib/utilities/KandoModal.js +7 -22
  579. package/lib/utilities/LocalStorage.js +2 -13
  580. package/lib/utilities/ThousandsToK.js +1 -3
  581. package/lib/utilities/TimeFormat.js +6 -19
  582. package/lib/utilities/Truncate.js +7 -27
  583. package/lib/utilities/edgesMath.js +9 -26
  584. package/lib/utilities/i18n.js +1 -14
  585. package/lib/utilities/kql.js +3 -10
  586. package/lib/utilities/map/icons.js +19 -20
  587. package/lib/utilities/polylinedecorator.js +383 -0
  588. package/lib/utilities/scoreToColor.js +1 -8
  589. package/lib/utilities/time.js +2 -9
  590. package/lib/utilities/uploadToS3.js +1 -9
  591. package/lib/utilities/urls.js +6 -14
  592. package/package.json +9 -4
@@ -1,118 +1,85 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.default = void 0;
11
-
12
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
13
-
14
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
15
-
16
11
  var _react = _interopRequireWildcard(require("react"));
17
-
18
12
  var _reactBootstrap = require("react-bootstrap");
19
-
20
13
  var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
21
-
22
14
  var _reactRedux = require("react-redux");
23
-
24
15
  var _reactRouterDom = require("react-router-dom");
25
-
26
16
  var _diskette = require("@svgr/webpack?-svgo!assets/icons/diskette.svg");
27
-
28
17
  var _list = require("@svgr/webpack?-svgo!assets/icons/list.svg");
29
-
30
18
  var _actions = require("store/global/actions");
31
-
32
19
  var _i18n = _interopRequireDefault(require("utilities/i18n"));
33
-
34
20
  var _kql = require("utilities/kql");
35
-
36
21
  require("./FilterStyle.scss");
37
-
38
22
  var _Filter = _interopRequireDefault(require("./Filter"));
39
-
40
23
  var _FiltersDropDown = _interopRequireDefault(require("./FiltersDropDown"));
41
-
42
24
  var _actionsCreator = require("store/samplings/actionsCreator");
43
-
44
25
  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); }
45
-
46
26
  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; }
47
-
48
27
  function mapStateToProps(state) {
49
28
  var global_data = state.global_data,
50
- nav_context_data = state.nav_context_data,
51
- points_data = state.points_data;
29
+ nav_context_data = state.nav_context_data,
30
+ points_data = state.points_data;
52
31
  return {
53
32
  global_data: global_data,
54
33
  nav_context_data: nav_context_data,
55
34
  points_data: points_data
56
35
  };
57
36
  }
58
-
59
37
  var FilterContainer = function FilterContainer(props) {
60
38
  var global_data = props.global_data,
61
- nav_context_data = props.nav_context_data,
62
- points_data = props.points_data,
63
- filterPopupOpen = props.filterPopupOpen,
64
- applyLogic = props.applyLogic,
65
- _props$fetchType = props.fetchType,
66
- fetchType = _props$fetchType === void 0 ? 'EventFilters' : _props$fetchType;
39
+ nav_context_data = props.nav_context_data,
40
+ points_data = props.points_data,
41
+ filterPopupOpen = props.filterPopupOpen,
42
+ applyLogic = props.applyLogic,
43
+ _props$fetchType = props.fetchType,
44
+ fetchType = _props$fetchType === void 0 ? 'EventFilters' : _props$fetchType;
67
45
  var dispatch = (0, _reactRedux.useDispatch)();
68
46
  var nameInput = (0, _react.useRef)(null);
69
47
  var filterContent = (0, _react.useRef)(null);
70
-
71
48
  var _useState = (0, _react.useState)([]),
72
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
73
- filters = _useState2[0],
74
- setFilters = _useState2[1];
75
-
49
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
50
+ filters = _useState2[0],
51
+ setFilters = _useState2[1];
76
52
  var _useState3 = (0, _react.useState)([]),
77
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
78
- availableFilterItems = _useState4[0],
79
- setAvailableFilterItems = _useState4[1];
80
-
53
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
54
+ availableFilterItems = _useState4[0],
55
+ setAvailableFilterItems = _useState4[1];
81
56
  var _useState5 = (0, _react.useState)(false),
82
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
83
- rendered = _useState6[0],
84
- setRendered = _useState6[1];
85
-
57
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
58
+ rendered = _useState6[0],
59
+ setRendered = _useState6[1];
86
60
  var _useState7 = (0, _react.useState)(),
87
- _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
88
- WaId = _useState8[0],
89
- setWaId = _useState8[1]; //eslint-disable-next-line
90
-
91
-
61
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
62
+ WaId = _useState8[0],
63
+ setWaId = _useState8[1];
64
+ //eslint-disable-next-line
92
65
  var _useState9 = (0, _react.useState)(undefined),
93
- _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
94
- activeFilter = _useState10[0],
95
- setActiveFilter = _useState10[1];
96
-
66
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
67
+ activeFilter = _useState10[0],
68
+ setActiveFilter = _useState10[1];
97
69
  var _useState11 = (0, _react.useState)(undefined),
98
- _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
99
- activeFilterCopy = _useState12[0],
100
- setActiveFilterCopy = _useState12[1]; // @ts-ignore
101
-
102
-
70
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
71
+ activeFilterCopy = _useState12[0],
72
+ setActiveFilterCopy = _useState12[1];
73
+ // @ts-ignore
103
74
  var csrf = document.querySelector("meta[name='csrf-token']").getAttribute('content');
104
-
105
75
  var useQuery = function useQuery() {
106
76
  return new URLSearchParams((0, _reactRouterDom.useLocation)().search);
107
77
  };
108
-
109
78
  var history = (0, _reactRouterDom.useHistory)();
110
79
  var query = useQuery();
111
-
112
80
  var getKQLFromURL = function getKQLFromURL() {
113
81
  return query.get('valuesFromKQL');
114
82
  };
115
-
116
83
  var getPointsToFilters = function getPointsToFilters(availableFilterItems, filters) {
117
84
  var interestPointFilterItem = availableFilterItems.find(function (f) {
118
85
  return f.type === 'InterestPointFilterItem';
@@ -125,26 +92,21 @@ var FilterContainer = function FilterContainer(props) {
125
92
  name: point.group.name
126
93
  };
127
94
  });
128
-
129
95
  if (interestPointFilterItem !== undefined) {
130
96
  interestPointFilterItem.options = filteredPointsData;
131
97
  }
132
-
133
98
  filters.forEach(function (f) {
134
99
  var filterItem = f.filter_items.find(function (fi) {
135
100
  return fi.type === 'InterestPointFilterItem';
136
101
  });
137
-
138
102
  if (filterItem !== undefined) {
139
103
  filterItem.available_options = filteredPointsData;
140
104
  }
141
105
  });
142
106
  setFilters(filters);
143
107
  };
144
-
145
108
  var fetchEventFilters = function fetchEventFilters(preparedParams, method, url) {
146
109
  var filter = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
147
-
148
110
  if (csrf !== null) {
149
111
  fetch(url, {
150
112
  method: method,
@@ -158,7 +120,6 @@ var FilterContainer = function FilterContainer(props) {
158
120
  return response.json();
159
121
  }).then(function (data) {
160
122
  getPointsToFilters(data.available_filter_items, data.filters);
161
-
162
123
  if (filter !== null) {
163
124
  var saved = data.filters.find(function (f) {
164
125
  return f.name === filter.name;
@@ -169,11 +130,9 @@ var FilterContainer = function FilterContainer(props) {
169
130
  });
170
131
  }
171
132
  };
172
-
173
133
  var deepClone = function deepClone(data) {
174
134
  return JSON.parse(JSON.stringify(data));
175
135
  };
176
-
177
136
  var getData = function getData() {
178
137
  fetch("/ui_filters.json?water_authority_id=".concat(global_data.waterAuthorityId, "&filter_type=").concat(fetchType, "&valuesFromKQL=").concat(getKQLFromURL())).then(function (response) {
179
138
  return response.json();
@@ -182,7 +141,9 @@ var FilterContainer = function FilterContainer(props) {
182
141
  var jsonShallowCopy = Object.assign({}, json);
183
142
  jsonShallowCopy.filters = deepClone(jsonShallowCopy.filters);
184
143
  var active = jsonShallowCopy.displayed_filter;
185
-
144
+ if (global_data.selectedPeriod !== undefined && global_data.selectedPeriod !== null) {
145
+ active.filter_items[1].selected_options = [global_data.selectedPeriod];
146
+ }
186
147
  if (active === undefined) {
187
148
  activateFilter(jsonShallowCopy.filters[0]);
188
149
  } else {
@@ -190,17 +151,14 @@ var FilterContainer = function FilterContainer(props) {
190
151
  setActiveFilter(active);
191
152
  setActiveFilterCopy(active);
192
153
  }
193
-
194
154
  applyFilter(active);
195
155
  });
196
156
  };
197
-
198
157
  var handleFilterChange = function handleFilterChange(filter) {
199
158
  setActiveFilter(deepClone(filter));
200
159
  setActiveFilterCopy(deepClone(filter));
201
160
  filterContent.current.click();
202
161
  };
203
-
204
162
  var saveActiveFilter = function saveActiveFilter(filter) {
205
163
  var clonedFilters = deepClone(filters);
206
164
  var filterToModifyIndex = clonedFilters.indexOf(clonedFilters.find(function (f) {
@@ -218,14 +176,12 @@ var FilterContainer = function FilterContainer(props) {
218
176
  setFilters(clonedFilters);
219
177
  setActiveFilter(filter);
220
178
  setActiveFilterCopy(filter);
221
-
222
179
  if (Math.sign(filter.id) > 0) {
223
180
  fetchEventFilters(preparedParams, 'PUT', "/ui_filters/".concat(filter.id, "?water_authority_id=").concat(global_data.waterAuthorityId), filter);
224
181
  } else {
225
182
  fetchEventFilters(preparedParams, 'POST', "/ui_filters?water_authority_id=".concat(global_data.waterAuthorityId), filter);
226
183
  }
227
184
  };
228
-
229
185
  var createFilter = function createFilter(filter, name) {
230
186
  var newFilter = {
231
187
  id: -1,
@@ -238,7 +194,6 @@ var FilterContainer = function FilterContainer(props) {
238
194
  setActiveFilter(newFilter);
239
195
  saveActiveFilter(newFilter);
240
196
  };
241
-
242
197
  var deleteFilter = function deleteFilter(filter) {
243
198
  if (csrf !== null && filter.id !== -1) {
244
199
  fetch("/ui_filters/".concat(filter.id, "?water_authority_id=").concat(global_data.waterAuthorityId, "&filter_type=").concat(fetchType), {
@@ -252,7 +207,6 @@ var FilterContainer = function FilterContainer(props) {
252
207
  var active = data.filters.find(function (filter) {
253
208
  return filter.is_active === true;
254
209
  });
255
-
256
210
  if (active !== undefined) {
257
211
  setFilters(data.filters);
258
212
  setActiveFilter(active);
@@ -270,27 +224,21 @@ var FilterContainer = function FilterContainer(props) {
270
224
  });
271
225
  }
272
226
  };
273
-
274
227
  var getEventIdFromURL = function getEventIdFromURL() {
275
228
  return query.get('eventId');
276
229
  };
277
-
278
230
  var getWaIdFromURL = function getWaIdFromURL() {
279
231
  return query.get('water_authority_id');
280
232
  };
281
-
282
233
  var getKQLValuesFromURL = function getKQLValuesFromURL() {
283
234
  return query.get('valuesFromKQL');
284
235
  };
285
-
286
236
  var activateFilter = function activateFilter(filter) {
287
237
  fetchEventFilters({}, 'PUT', "/ui_filters/activate/".concat(filter.id, "?water_authority_id=").concat(global_data.waterAuthorityId, "&filter_type=").concat(fetchType), filter);
288
238
  };
289
-
290
239
  var applyFilter = function applyFilter() {
291
240
  var filter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeFilterCopy;
292
241
  var value = 'severity';
293
-
294
242
  if (nav_context_data.navContext.name === 'samplings-list') {
295
243
  value = 'newest';
296
244
  } else {
@@ -304,34 +252,29 @@ var FilterContainer = function FilterContainer(props) {
304
252
  }
305
253
  }
306
254
  }
307
-
308
255
  if (nav_context_data.navContext.name === 'events_view') {
256
+ console.warn('buildKQL', (0, _kql.buildKQLQuery)(filter, value));
309
257
  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(getEventIdFromURL(), "&valuesFromKQL=").concat((0, _kql.buildKQLQuery)(filter, value)));
310
258
  }
311
-
312
259
  if (nav_context_data.navContext.name === 'samplings-list') {
313
260
  history.push("/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&locale=").concat(nav_context_data.navContext.locale, "&valuesFromKQL=").concat((0, _kql.buildKQLQuery)(filter, value)));
314
261
  if (applyLogic !== undefined) applyLogic((0, _kql.buildKQLQuery)(filter, value));
315
262
  }
316
-
317
263
  dispatch((0, _actions.setEventFilterParam)((0, _kql.buildKQLQuery)(filter, value)));
318
- dispatch((0, _actions.setActiveFilterGlobally)(filter)); // Always reset page to 1 when a new filter is applied
319
-
264
+ dispatch((0, _actions.setActiveFilterGlobally)(filter));
265
+ // Always reset page to 1 when a new filter is applied
320
266
  dispatch((0, _actionsCreator.setSamplingData)({
321
267
  currentPage: 1,
322
268
  isFetch: false
323
269
  }));
324
270
  };
325
-
326
271
  var handleCreationClick = function handleCreationClick() {
327
272
  createFilter(activeFilterCopy, nameInput.current.value);
328
273
  nameInput.current.value = '';
329
274
  filterContent.current.click();
330
275
  };
331
-
332
276
  (0, _react.useEffect)(function () {
333
277
  setWaId(getWaIdFromURL());
334
-
335
278
  if (!rendered) {
336
279
  setRendered(true);
337
280
  getData();
@@ -343,7 +286,6 @@ var FilterContainer = function FilterContainer(props) {
343
286
  setActiveFilterCopy(filter);
344
287
  }
345
288
  }
346
-
347
289
  return function cleanup() {
348
290
  setRendered(false);
349
291
  };
@@ -418,10 +360,7 @@ var FilterContainer = function FilterContainer(props) {
418
360
  applyFilter: applyFilter
419
361
  }))));
420
362
  };
421
-
422
363
  var connector = (0, _reactRedux.connect)(mapStateToProps);
423
-
424
364
  var _default = connector(FilterContainer);
425
-
426
365
  exports.default = _default;
427
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wYWdlcy9FdmVudHNQYWdlL2V2ZW50cy9ldmVudHNfbGlzdC9GaWx0ZXIvRmlsdGVyQ29udGFpbmVyLnRzeCJdLCJuYW1lcyI6WyJtYXBTdGF0ZVRvUHJvcHMiLCJzdGF0ZSIsImdsb2JhbF9kYXRhIiwibmF2X2NvbnRleHRfZGF0YSIsInBvaW50c19kYXRhIiwiRmlsdGVyQ29udGFpbmVyIiwicHJvcHMiLCJmaWx0ZXJQb3B1cE9wZW4iLCJhcHBseUxvZ2ljIiwiZmV0Y2hUeXBlIiwiZGlzcGF0Y2giLCJuYW1lSW5wdXQiLCJmaWx0ZXJDb250ZW50IiwiZmlsdGVycyIsInNldEZpbHRlcnMiLCJhdmFpbGFibGVGaWx0ZXJJdGVtcyIsInNldEF2YWlsYWJsZUZpbHRlckl0ZW1zIiwicmVuZGVyZWQiLCJzZXRSZW5kZXJlZCIsIldhSWQiLCJzZXRXYUlkIiwidW5kZWZpbmVkIiwiYWN0aXZlRmlsdGVyIiwic2V0QWN0aXZlRmlsdGVyIiwiYWN0aXZlRmlsdGVyQ29weSIsInNldEFjdGl2ZUZpbHRlckNvcHkiLCJjc3JmIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidXNlUXVlcnkiLCJVUkxTZWFyY2hQYXJhbXMiLCJzZWFyY2giLCJoaXN0b3J5IiwicXVlcnkiLCJnZXRLUUxGcm9tVVJMIiwiZ2V0IiwiZ2V0UG9pbnRzVG9GaWx0ZXJzIiwiaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0iLCJmaW5kIiwiZiIsInR5cGUiLCJmaWx0ZXJlZFBvaW50c0RhdGEiLCJpdGVtcyIsImZpbHRlciIsInBvaW50IiwicGFydF9vZl9vYnNlcnZhdGlvbiIsIm1hcCIsImlkIiwibmFtZSIsImdyb3VwIiwib3B0aW9ucyIsImZvckVhY2giLCJmaWx0ZXJJdGVtIiwiZmlsdGVyX2l0ZW1zIiwiZmkiLCJhdmFpbGFibGVfb3B0aW9ucyIsImZldGNoRXZlbnRGaWx0ZXJzIiwicHJlcGFyZWRQYXJhbXMiLCJtZXRob2QiLCJ1cmwiLCJmZXRjaCIsImhlYWRlcnMiLCJBY2NlcHQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInRoZW4iLCJyZXNwb25zZSIsImpzb24iLCJkYXRhIiwiYXZhaWxhYmxlX2ZpbHRlcl9pdGVtcyIsInNhdmVkIiwiZGVlcENsb25lIiwicGFyc2UiLCJnZXREYXRhIiwid2F0ZXJBdXRob3JpdHlJZCIsImpzb25TaGFsbG93Q29weSIsIk9iamVjdCIsImFzc2lnbiIsImFjdGl2ZSIsImRpc3BsYXllZF9maWx0ZXIiLCJhY3RpdmF0ZUZpbHRlciIsImFwcGx5RmlsdGVyIiwiaGFuZGxlRmlsdGVyQ2hhbmdlIiwiY3VycmVudCIsImNsaWNrIiwic2F2ZUFjdGl2ZUZpbHRlciIsImNsb25lZEZpbHRlcnMiLCJmaWx0ZXJUb01vZGlmeUluZGV4IiwiaW5kZXhPZiIsImZpbHRlcl90eXBlIiwidWlfZmlsdGVyIiwiaXNfYWN0aXZlIiwiTWF0aCIsInNpZ24iLCJjcmVhdGVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJkZWxldGVGaWx0ZXIiLCJsZW5ndGgiLCJnZXRFdmVudElkRnJvbVVSTCIsImdldFdhSWRGcm9tVVJMIiwiZ2V0S1FMVmFsdWVzRnJvbVVSTCIsInZhbHVlIiwibmF2Q29udGV4dCIsImluY2x1ZGVzIiwicHVzaCIsImxvY2FsZSIsImN1cnJlbnRQYWdlIiwiaXNGZXRjaCIsImhhbmRsZUNyZWF0aW9uQ2xpY2siLCJldmVudEZpbHRlclBhcmFtIiwiY2xlYW51cCIsImkxOG4iLCJ0IiwicGFyc2VTZWxlY3RlZEl0ZW1zIiwiY29ubmVjdG9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBTUE7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUNBLFNBQVNBLGVBQVQsQ0FBeUJDLEtBQXpCLEVBQTJDO0FBQ3pDLE1BQVFDLFdBQVIsR0FBdURELEtBQXZELENBQVFDLFdBQVI7QUFBQSxN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QUFVLE1BQVY7QUFBaUIsSUFBQSxPQUFPLEVBQUMsU0FBekI7QUFBbUMsSUFBQSxFQUFFLEVBQUM7QUFBdEMsS0FDR0QsY0FBS0MsQ0FBTCxDQUFPLGlDQUFQLENBREgsQ0FERixlQUtFLDZCQUFDLGlCQUFELENBQVUsSUFBVixxQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFFO0FBQWhCLGtCQUNFLDZCQUFDLDJCQUFEO0FBQ0UsSUFBQSxXQUFXLEVBQUVELGNBQUtDLENBQUwsQ0FDWCwrQ0FEVyxDQURmO0FBSUUsa0JBQVcsa0JBSmI7QUFLRSx3QkFBaUIsY0FMbkI7QUFNRSxJQUFBLEdBQUcsRUFBRXZHLFNBTlA7QUFPRSxJQUFBLFNBQVMsRUFBRTtBQVBiLElBREYsZUFVRSx3Q0FWRixlQVdFLDZCQUFDLHNCQUFEO0FBQ0UsSUFBQSxPQUFPLEVBQUUsbUJBQU07QUFDYm1HLE1BQUFBLG1CQUFtQjtBQUNwQixLQUhIO0FBSUUsSUFBQSxPQUFPLEVBQUM7QUFKVixLQU1HRyxjQUFLQyxDQUFMLENBQU8seUJBQVAsQ0FOSCxDQVhGLENBREYsQ0FMRixDQVRGLENBWEYsQ0ExQkYsQ0FMRixDQURGLGVBcUZFO0FBQUssSUFBQSxTQUFTLEVBQUU7QUFBaEIsa0JBQ0UsNkJBQUMsZUFBRDtBQUNFLElBQUEsbUJBQW1CLEVBQUV6RixtQkFEdkI7QUFFRSxJQUFBLGdCQUFnQixFQUFFRCxnQkFGcEI7QUFHRSxJQUFBLG9CQUFvQixFQUFFVCxvQkFIeEI7QUFJRSxJQUFBLGtCQUFrQixFQUFFb0csdUJBSnRCO0FBS0UsSUFBQSxXQUFXLEVBQUVoQztBQUxmLElBREYsQ0FyRkYsQ0FOSixDQURGO0FBeUdELENBM2FEOztBQTZhQSxJQUFNaUMsU0FBUyxHQUFHLHlCQUFRcEgsZUFBUixDQUFsQjs7ZUFDZW9ILFNBQVMsQ0FBQy9HLGVBQUQsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCdXR0b24sIEZvcm1Db250cm9sIH0gZnJvbSAncmVhY3QtYm9vdHN0cmFwJztcbmltcG9ydCBEcm9wZG93biBmcm9tICdyZWFjdC1ib290c3RyYXAvRHJvcGRvd24nO1xuaW1wb3J0IHsgY29ubmVjdCwgQ29ubmVjdGVkUHJvcHMsIHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IFJlYWN0Q29tcG9uZW50IGFzIFNhdmVJY29uIH0gZnJvbSAnc3JjL2Fzc2V0cy9pY29ucy9kaXNrZXR0ZS5zdmcnO1xuaW1wb3J0IHsgUmVhY3RDb21wb25lbnQgYXMgTGlzdEljb24gfSBmcm9tICdzcmMvYXNzZXRzL2ljb25zL2xpc3Quc3ZnJztcbmltcG9ydCB7IElBcHBTdGF0ZSB9IGZyb20gJ3NyYy9tb2RlbHMvSUFwcFN0YXRlJztcbmltcG9ydCB7IElGaWx0ZXIgfSBmcm9tICdzcmMvc3RvcmUvZmlsdGVycy9JRmlsdGVyJztcbmltcG9ydCB7IElGaWx0ZXJJdGVtIH0gZnJvbSAnc3JjL3N0b3JlL2ZpbHRlcnMvSUZpbHRlckl0ZW0nO1xuaW1wb3J0IHtcbiAgc2V0QWN0aXZlRmlsdGVyR2xvYmFsbHksXG4gIHNldEV2ZW50RmlsdGVyUGFyYW0sXG59IGZyb20gJ3NyYy9zdG9yZS9nbG9iYWwvYWN0aW9ucyc7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICdzcmMvc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnc3JjL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCB7IGJ1aWxkS1FMUXVlcnksIHBhcnNlU2VsZWN0ZWRJdGVtcyB9IGZyb20gJ3NyYy91dGlsaXRpZXMva3FsJztcbmltcG9ydCAnLi9GaWx0ZXJTdHlsZS5zY3NzJztcbmltcG9ydCBGaWx0ZXIgZnJvbSAnLi9GaWx0ZXInO1xuaW1wb3J0IEZpbHRlcnNEcm9wRG93biBmcm9tICcuL0ZpbHRlcnNEcm9wRG93bic7XG5pbXBvcnQgeyBzZXRTYW1wbGluZ0RhdGEgfSBmcm9tICdzcmMvc3RvcmUvc2FtcGxpbmdzL2FjdGlvbnNDcmVhdG9yJztcbmZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogSUFwcFN0YXRlKSB7XG4gIGNvbnN0IHsgZ2xvYmFsX2RhdGEsIG5hdl9jb250ZXh0X2RhdGEsIHBvaW50c19kYXRhIH0gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIGdsb2JhbF9kYXRhLFxuICAgIG5hdl9jb250ZXh0X2RhdGEsXG4gICAgcG9pbnRzX2RhdGEsXG4gIH07XG59XG5cbnR5cGUgSVByb3BzID0gQ29ubmVjdGVkUHJvcHM8dHlwZW9mIGNvbm5lY3Rvcj4gJiB7XG4gIGZpbHRlclBvcHVwT3BlbjogYm9vbGVhbjtcbiAgZmV0Y2hUeXBlOiBzdHJpbmc7XG4gIGFwcGx5TG9naWM/OiAodmFsdWVzOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBGaWx0ZXJDb250YWluZXI6IFJlYWN0LkZDPElQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGdsb2JhbF9kYXRhLFxuICAgIG5hdl9jb250ZXh0X2RhdGEsXG4gICAgcG9pbnRzX2RhdGEsXG4gICAgZmlsdGVyUG9wdXBPcGVuLFxuICAgIGFwcGx5TG9naWMsXG4gICAgZmV0Y2hUeXBlID0gJ0V2ZW50RmlsdGVycycsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCBuYW1lSW5wdXQgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZpbHRlckNvbnRlbnQgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbZmlsdGVycywgc2V0RmlsdGVyc10gPSB1c2VTdGF0ZTxhbnk+KFtdKTtcbiAgY29uc3QgW2F2YWlsYWJsZUZpbHRlckl0ZW1zLCBzZXRBdmFpbGFibGVGaWx0ZXJJdGVtc10gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtyZW5kZXJlZCwgc2V0UmVuZGVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbV2FJZCwgc2V0V2FJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPigpO1xuICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBjb25zdCBbYWN0aXZlRmlsdGVyLCBzZXRBY3RpdmVGaWx0ZXJdID0gdXNlU3RhdGU8YW55Pih1bmRlZmluZWQpO1xuICBjb25zdCBbYWN0aXZlRmlsdGVyQ29weSwgc2V0QWN0aXZlRmlsdGVyQ29weV0gPSB1c2VTdGF0ZTxhbnk+KHVuZGVmaW5lZCk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgY3NyZiA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J2NzcmYtdG9rZW4nXVwiKVxuICAgIC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgY29uc3QgdXNlUXVlcnkgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXModXNlTG9jYXRpb24oKS5zZWFyY2gpO1xuICB9O1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBxdWVyeSA9IHVzZVF1ZXJ5KCk7XG4gIGNvbnN0IGdldEtRTEZyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgndmFsdWVzRnJvbUtRTCcpO1xuICB9O1xuXG4gIGNvbnN0IGdldFBvaW50c1RvRmlsdGVycyA9IChhdmFpbGFibGVGaWx0ZXJJdGVtczogYW55LCBmaWx0ZXJzOiBhbnkpID0+IHtcbiAgICBsZXQgaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0gPSBhdmFpbGFibGVGaWx0ZXJJdGVtcy5maW5kKFxuICAgICAgKGY6IElGaWx0ZXJJdGVtKSA9PiBmLnR5cGUgPT09ICdJbnRlcmVzdFBvaW50RmlsdGVySXRlbScsXG4gICAgKTtcbiAgICBsZXQgZmlsdGVyZWRQb2ludHNEYXRhID0gcG9pbnRzX2RhdGEuaXRlbXNcbiAgICAgIC5maWx0ZXIoKHBvaW50OiBJUG9pbnQpID0+IHBvaW50LnBhcnRfb2Zfb2JzZXJ2YXRpb24gPT09IHRydWUpXG4gICAgICAubWFwKChwb2ludDogSVBvaW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGlkOiBwb2ludC5pZCwgbmFtZTogcG9pbnQuZ3JvdXAubmFtZSB9O1xuICAgICAgfSk7XG5cbiAgICBpZiAoaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0ub3B0aW9ucyA9IGZpbHRlcmVkUG9pbnRzRGF0YTtcbiAgICB9XG5cbiAgICBmaWx0ZXJzLmZvckVhY2goKGY6IElGaWx0ZXIpID0+IHtcbiAgICAgIGxldCBmaWx0ZXJJdGVtID0gZi5maWx0ZXJfaXRlbXMuZmluZChcbiAgICAgICAgKGZpOiBJRmlsdGVySXRlbSkgPT4gZmkudHlwZSA9PT0gJ0ludGVyZXN0UG9pbnRGaWx0ZXJJdGVtJyxcbiAgICAgICk7XG5cbiAgICAgIGlmIChmaWx0ZXJJdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZmlsdGVySXRlbS5hdmFpbGFibGVfb3B0aW9ucyA9IGZpbHRlcmVkUG9pbnRzRGF0YTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNldEZpbHRlcnMoZmlsdGVycyk7XG4gIH07XG5cbiAgY29uc3QgZmV0Y2hFdmVudEZpbHRlcnMgPSAoXG4gICAgcHJlcGFyZWRQYXJhbXM6IGFueSxcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBmaWx0ZXI6IGFueSA9IG51bGwsXG4gICkgPT4ge1xuICAgIGlmIChjc3JmICE9PSBudWxsKSB7XG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICdYLUNTUkYtVG9rZW4nOiBjc3JmLFxuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwcmVwYXJlZFBhcmFtcyksXG4gICAgICB9KVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICBnZXRQb2ludHNUb0ZpbHRlcnMoZGF0YS5hdmFpbGFibGVfZmlsdGVyX2l0ZW1zLCBkYXRhLmZpbHRlcnMpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHNhdmVkID0gZGF0YS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAgIChmOiBJRmlsdGVyKSA9PiBmLm5hbWUgPT09IGZpbHRlci5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlcihzYXZlZCk7XG4gICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KHNhdmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWVwQ2xvbmUgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICB9O1xuXG4gIGNvbnN0IGdldERhdGEgPSAoKSA9PiB7XG4gICAgZmV0Y2goXG4gICAgICBgL3VpX2ZpbHRlcnMuanNvbj93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgfSZmaWx0ZXJfdHlwZT0ke2ZldGNoVHlwZX0mdmFsdWVzRnJvbUtRTD0ke2dldEtRTEZyb21VUkwoKX1gLFxuICAgIClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgZ2V0UG9pbnRzVG9GaWx0ZXJzKGpzb24uYXZhaWxhYmxlX2ZpbHRlcl9pdGVtcywganNvbi5maWx0ZXJzKTtcblxuICAgICAgICBsZXQganNvblNoYWxsb3dDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwganNvbik7XG4gICAgICAgIGpzb25TaGFsbG93Q29weS5maWx0ZXJzID0gZGVlcENsb25lKGpzb25TaGFsbG93Q29weS5maWx0ZXJzKTtcbiAgICAgICAgbGV0IGFjdGl2ZSA9IGpzb25TaGFsbG93Q29weS5kaXNwbGF5ZWRfZmlsdGVyO1xuXG4gICAgICAgIGlmIChhY3RpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGl2YXRlRmlsdGVyKGpzb25TaGFsbG93Q29weS5maWx0ZXJzWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRBdmFpbGFibGVGaWx0ZXJJdGVtcyhqc29uU2hhbGxvd0NvcHkuYXZhaWxhYmxlX2ZpbHRlcl9pdGVtcyk7XG4gICAgICAgICAgc2V0QWN0aXZlRmlsdGVyKGFjdGl2ZSk7XG4gICAgICAgICAgc2V0QWN0aXZlRmlsdGVyQ29weShhY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHlGaWx0ZXIoYWN0aXZlKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZpbHRlckNoYW5nZSA9IChmaWx0ZXI6IElGaWx0ZXIpID0+IHtcbiAgICBzZXRBY3RpdmVGaWx0ZXIoZGVlcENsb25lKGZpbHRlcikpO1xuICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoZGVlcENsb25lKGZpbHRlcikpO1xuICAgIGZpbHRlckNvbnRlbnQuY3VycmVudCEuY2xpY2soKTtcbiAgfTtcblxuICBjb25zdCBzYXZlQWN0aXZlRmlsdGVyID0gKFxuICAgIGZpbHRlcjpcbiAgICAgIHwgSUZpbHRlclxuICAgICAgfCB7XG4gICAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgZmlsdGVyX2l0ZW1zOiBJRmlsdGVySXRlbVtdO1xuICAgICAgICAgIGlzX2FjdGl2ZTogYm9vbGVhbjtcbiAgICAgICAgfSxcbiAgKSA9PiB7XG4gICAgbGV0IGNsb25lZEZpbHRlcnMgPSBkZWVwQ2xvbmUoZmlsdGVycyk7XG4gICAgbGV0IGZpbHRlclRvTW9kaWZ5SW5kZXggPSBjbG9uZWRGaWx0ZXJzLmluZGV4T2YoXG4gICAgICBjbG9uZWRGaWx0ZXJzLmZpbmQoKGY6IGFueSkgPT4gZi5pZCA9PT0gZmlsdGVyLmlkKSxcbiAgICApO1xuICAgIGxldCBwcmVwYXJlZFBhcmFtcyA9IHtcbiAgICAgIGZpbHRlcl90eXBlOiBmZXRjaFR5cGUsXG4gICAgICB1aV9maWx0ZXI6IHtcbiAgICAgICAgbmFtZTogZmlsdGVyLm5hbWUsXG4gICAgICAgIGlzX2FjdGl2ZTogZmlsdGVyLmlzX2FjdGl2ZSxcbiAgICAgICAgZmlsdGVyX2l0ZW1zOiBKU09OLnN0cmluZ2lmeShmaWx0ZXIuZmlsdGVyX2l0ZW1zKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsb25lZEZpbHRlcnNbZmlsdGVyVG9Nb2RpZnlJbmRleF0gPSBmaWx0ZXI7XG4gICAgc2V0RmlsdGVycyhjbG9uZWRGaWx0ZXJzKTtcbiAgICBzZXRBY3RpdmVGaWx0ZXIoZmlsdGVyKTtcbiAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGZpbHRlcik7XG5cbiAgICBpZiAoTWF0aC5zaWduKGZpbHRlci5pZCkgPiAwKSB7XG4gICAgICBmZXRjaEV2ZW50RmlsdGVycyhcbiAgICAgICAgcHJlcGFyZWRQYXJhbXMsXG4gICAgICAgICdQVVQnLFxuICAgICAgICBgL3VpX2ZpbHRlcnMvJHtmaWx0ZXIuaWR9P3dhdGVyX2F1dGhvcml0eV9pZD0ke2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICAgICAgZmlsdGVyLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmV0Y2hFdmVudEZpbHRlcnMoXG4gICAgICAgIHByZXBhcmVkUGFyYW1zLFxuICAgICAgICAnUE9TVCcsXG4gICAgICAgIGAvdWlfZmlsdGVycz93YXRlcl9hdXRob3JpdHlfaWQ9JHtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgICAgIGZpbHRlcixcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUZpbHRlciA9IChmaWx0ZXI6IElGaWx0ZXIsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGxldCBuZXdGaWx0ZXIgPSB7XG4gICAgICBpZDogLTEsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgZmlsdGVyX2l0ZW1zOiBmaWx0ZXIuZmlsdGVyX2l0ZW1zLFxuICAgICAgaXNfYWN0aXZlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc2V0RmlsdGVycyhbLi4uZmlsdGVycywgbmV3RmlsdGVyXSk7XG4gICAgc2V0QWN0aXZlRmlsdGVyQ29weShuZXdGaWx0ZXIpO1xuICAgIHNldEFjdGl2ZUZpbHRlcihuZXdGaWx0ZXIpO1xuICAgIHNhdmVBY3RpdmVGaWx0ZXIobmV3RmlsdGVyKTtcbiAgfTtcblxuICBjb25zdCBkZWxldGVGaWx0ZXIgPSAoZmlsdGVyOiBJRmlsdGVyKSA9PiB7XG4gICAgaWYgKGNzcmYgIT09IG51bGwgJiYgZmlsdGVyLmlkICE9PSAtMSkge1xuICAgICAgZmV0Y2goXG4gICAgICAgIGAvdWlfZmlsdGVycy8ke2ZpbHRlci5pZH0/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7Z2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZH0mZmlsdGVyX3R5cGU9JHtmZXRjaFR5cGV9YCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ1gtQ1NSRi1Ub2tlbic6IGNzcmYsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgbGV0IGFjdGl2ZSA9IGRhdGEuZmlsdGVycy5maW5kKFxuICAgICAgICAgICAgKGZpbHRlcjogSUZpbHRlcikgPT4gZmlsdGVyLmlzX2FjdGl2ZSA9PT0gdHJ1ZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGFjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZXRGaWx0ZXJzKGRhdGEuZmlsdGVycyk7XG4gICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXIoYWN0aXZlKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoYWN0aXZlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRhdGEuZmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgZ2V0RGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGF0YS5maWx0ZXJzWzBdLmlzX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlcihkYXRhLmZpbHRlcnNbMF0pO1xuICAgICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGRhdGEuZmlsdGVyc1swXSk7XG4gICAgICAgICAgICAgIHNldEZpbHRlcnMoZGF0YS5maWx0ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRFdmVudElkRnJvbVVSTCA9ICgpID0+IHtcbiAgICByZXR1cm4gcXVlcnkuZ2V0KCdldmVudElkJyk7XG4gIH07XG5cbiAgY29uc3QgZ2V0V2FJZEZyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgnd2F0ZXJfYXV0aG9yaXR5X2lkJyk7XG4gIH07XG5cbiAgY29uc3QgZ2V0S1FMVmFsdWVzRnJvbVVSTCA9ICgpID0+IHtcbiAgICByZXR1cm4gcXVlcnkuZ2V0KCd2YWx1ZXNGcm9tS1FMJyk7XG4gIH07XG5cbiAgY29uc3QgYWN0aXZhdGVGaWx0ZXIgPSAoZmlsdGVyOiBJRmlsdGVyKSA9PiB7XG4gICAgZmV0Y2hFdmVudEZpbHRlcnMoXG4gICAgICB7fSxcbiAgICAgICdQVVQnLFxuICAgICAgYC91aV9maWx0ZXJzL2FjdGl2YXRlLyR7ZmlsdGVyLmlkfT93YXRlcl9hdXRob3JpdHlfaWQ9JHtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkfSZmaWx0ZXJfdHlwZT0ke2ZldGNoVHlwZX1gLFxuICAgICAgZmlsdGVyLFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgYXBwbHlGaWx0ZXIgPSAoZmlsdGVyID0gYWN0aXZlRmlsdGVyQ29weSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9ICdzZXZlcml0eSc7XG5cbiAgICBpZiAobmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWUgPT09ICdzYW1wbGluZ3MtbGlzdCcpIHtcbiAgICAgIHZhbHVlID0gJ25ld2VzdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChnZXRLUUxWYWx1ZXNGcm9tVVJMKCkgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ09SREVSX0JZJykgJiZcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCduZXdlc3QnKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9ICduZXdlc3QnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ09SREVSX0JZJykgJiZcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCdvbGRlc3QnKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9ICdvbGRlc3QnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ09SREVSX0JZJykgJiZcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCdzZXZlcml0eScpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gJ3NldmVyaXR5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZSA9PT0gJ2V2ZW50c192aWV3Jykge1xuICAgICAgaGlzdG9yeS5wdXNoKFxuICAgICAgICBgLyR7bmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWV9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgfSZsb2NhbGU9JHtcbiAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlXG4gICAgICAgIH0mZXZlbnRJZD0ke2dldEV2ZW50SWRGcm9tVVJMKCl9JnZhbHVlc0Zyb21LUUw9JHtidWlsZEtRTFF1ZXJ5KFxuICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWUgPT09ICdzYW1wbGluZ3MtbGlzdCcpIHtcbiAgICAgIGhpc3RvcnkucHVzaChcbiAgICAgICAgYC8ke25hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICAgIH0mbG9jYWxlPSR7XG4gICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZVxuICAgICAgICB9JnZhbHVlc0Zyb21LUUw9JHtidWlsZEtRTFF1ZXJ5KGZpbHRlciwgdmFsdWUpfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAoYXBwbHlMb2dpYyAhPT0gdW5kZWZpbmVkKSBhcHBseUxvZ2ljKGJ1aWxkS1FMUXVlcnkoZmlsdGVyLCB2YWx1ZSkpO1xuICAgIH1cblxuICAgIGRpc3BhdGNoKHNldEV2ZW50RmlsdGVyUGFyYW0oYnVpbGRLUUxRdWVyeShmaWx0ZXIsIHZhbHVlKSkpO1xuICAgIGRpc3BhdGNoKHNldEFjdGl2ZUZpbHRlckdsb2JhbGx5KGZpbHRlcikpO1xuICAgIC8vIEFsd2F5cyByZXNldCBwYWdlIHRvIDEgd2hlbiBhIG5ldyBmaWx0ZXIgaXMgYXBwbGllZFxuICAgIGRpc3BhdGNoKHNldFNhbXBsaW5nRGF0YSh7IGN1cnJlbnRQYWdlOiAxLCBpc0ZldGNoOiBmYWxzZSB9KSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ3JlYXRpb25DbGljayA9ICgpID0+IHtcbiAgICBjcmVhdGVGaWx0ZXIoYWN0aXZlRmlsdGVyQ29weSwgbmFtZUlucHV0LmN1cnJlbnQhLnZhbHVlKTtcbiAgICBuYW1lSW5wdXQuY3VycmVudCEudmFsdWUgPSAnJztcbiAgICBmaWx0ZXJDb250ZW50LmN1cnJlbnQhLmNsaWNrKCk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRXYUlkKGdldFdhSWRGcm9tVVJMKCkpO1xuICAgIGlmICghcmVuZGVyZWQpIHtcbiAgICAgIHNldFJlbmRlcmVkKHRydWUpO1xuICAgICAgZ2V0RGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZ2xvYmFsX2RhdGEuZXZlbnRGaWx0ZXJQYXJhbSA9PT0gJycgJiYgZmlsdGVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgbGV0IGZpbHRlciA9IGZpbHRlcnMuZmluZCgoZmlsdGVyOiBJRmlsdGVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpbHRlci5pc19hY3RpdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgc2V0UmVuZGVyZWQoZmFsc2UpO1xuICAgIH07XG4gIH0sIFtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkLCBXYUlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2BmaWx0ZXItY29udGFpbmVyICR7XG4gICAgICAgIGZpbHRlclBvcHVwT3BlbiA/ICcnIDogJ2ZpbHRlci1jb250YWluZXItLWhpZGRlbidcbiAgICAgIH1gfVxuICAgID5cbiAgICAgIHthY3RpdmVGaWx0ZXJDb3B5ICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2ZpbHRlci1jb250YWluZXJfX2NvbnRlbnQnfSByZWY9e2ZpbHRlckNvbnRlbnR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnZmlsdGVyLWNvbnRhaW5lcl9fY29udGVudF9faGVhZGVyJ30+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3RpdGxlJ30+XG4gICAgICAgICAgICAgIDxoND57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLmZpbHRlcicpfTwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydhY3Rpb25zJ30+XG4gICAgICAgICAgICAgIDxEcm9wZG93biBjbGFzc05hbWU9eydhY3Rpb24nfT5cbiAgICAgICAgICAgICAgICA8RHJvcGRvd24uVG9nZ2xlIHZhcmlhbnQ9XCJzdWNjZXNzXCIgaWQ9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgPExpc3RJY29uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInByZXNldC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTRweFwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTRweFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMWQxZDFkXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7YWN0aXZlRmlsdGVyQ29weS5uYW1lfXsnICd9XG4gICAgICAgICAgICAgICAgICB7YWN0aXZlRmlsdGVyQ29weS5pZCA9PT0gLTEgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxiPiAoe2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci51bnNhdmVkJyl9KSA8L2I+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLlRvZ2dsZT5cblxuICAgICAgICAgICAgICAgIDxGaWx0ZXJzRHJvcERvd25cbiAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2U9e2hhbmRsZUZpbHRlckNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZpbHRlckNvcHk9e2FjdGl2ZUZpbHRlckNvcHl9XG4gICAgICAgICAgICAgICAgICBhY3RpdmF0ZUZpbHRlcj17YWN0aXZhdGVGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICBkZWxldGVGaWx0ZXI9e2RlbGV0ZUZpbHRlcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Ryb3Bkb3duPlxuXG4gICAgICAgICAgICAgIDxEcm9wZG93biBjbGFzc05hbWU9eydhY3Rpb24nfT5cbiAgICAgICAgICAgICAgICA8RHJvcGRvd24uVG9nZ2xlIHZhcmlhbnQ9XCJzdWNjZXNzXCIgaWQ9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgPFNhdmVJY29uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNhdmUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEzcHhcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEzcHhcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFkMWQxZFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5zYXZlLmxhYmVsJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uVG9nZ2xlPlxuXG4gICAgICAgICAgICAgICAgPERyb3Bkb3duLk1lbnU+XG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd24uSXRlbVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17YWN0aXZlRmlsdGVyQ29weS5pZCA9PT0gLTEgPyB0cnVlIDogZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzYXZlQWN0aXZlRmlsdGVyKGFjdGl2ZUZpbHRlckNvcHkpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLnNhdmUuZXhpc3RpbmcnKX1cbiAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uSXRlbT5cbiAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBjbGFzc05hbWU9eydhY3Rpb24gYWN0aW9uLS1zYXZlJ30+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bi5Ub2dnbGUgdmFyaWFudD1cInN1Y2Nlc3NcIiBpZD1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5zYXZlLm5ldycpfVxuICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLlRvZ2dsZT5cblxuICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24uTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J25ldy1maWx0ZXItcG9wdXAnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLnNhdmUuZmllbGRfcGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTmFtZSB0aGlzIGZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJiYXNpYy1hZGRvbjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9e25hbWVJbnB1dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ3JlYXRpb25DbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2RldmljZV9oZWFsdGhfc3RhdHVzLm9rJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bi5NZW51PlxuICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLk1lbnU+XG4gICAgICAgICAgICAgIDwvRHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnZmlsdGVyLWNvbnRhaW5lcl9fY29udGVudF9fYm9keSd9PlxuICAgICAgICAgICAgPEZpbHRlclxuICAgICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5PXtzZXRBY3RpdmVGaWx0ZXJDb3B5fVxuICAgICAgICAgICAgICBhY3RpdmVGaWx0ZXJDb3B5PXthY3RpdmVGaWx0ZXJDb3B5fVxuICAgICAgICAgICAgICBhdmFpbGFibGVGaWx0ZXJJdGVtcz17YXZhaWxhYmxlRmlsdGVySXRlbXN9XG4gICAgICAgICAgICAgIHBhcnNlU2VsZWN0ZWRJdGVtcz17cGFyc2VTZWxlY3RlZEl0ZW1zfVxuICAgICAgICAgICAgICBhcHBseUZpbHRlcj17YXBwbHlGaWx0ZXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5jb25zdCBjb25uZWN0b3IgPSBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcyk7XG5leHBvcnQgZGVmYXVsdCBjb25uZWN0b3IoRmlsdGVyQ29udGFpbmVyKTtcbiJdfQ==
366
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RCb290c3RyYXAiLCJfRHJvcGRvd24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0UmVkdXgiLCJfcmVhY3RSb3V0ZXJEb20iLCJfZGlza2V0dGUiLCJfbGlzdCIsIl9hY3Rpb25zIiwiX2kxOG4iLCJfa3FsIiwiX0ZpbHRlciIsIl9GaWx0ZXJzRHJvcERvd24iLCJfYWN0aW9uc0NyZWF0b3IiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIm1hcFN0YXRlVG9Qcm9wcyIsInN0YXRlIiwiZ2xvYmFsX2RhdGEiLCJuYXZfY29udGV4dF9kYXRhIiwicG9pbnRzX2RhdGEiLCJGaWx0ZXJDb250YWluZXIiLCJwcm9wcyIsImZpbHRlclBvcHVwT3BlbiIsImFwcGx5TG9naWMiLCJfcHJvcHMkZmV0Y2hUeXBlIiwiZmV0Y2hUeXBlIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsIm5hbWVJbnB1dCIsInVzZVJlZiIsImZpbHRlckNvbnRlbnQiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJmaWx0ZXJzIiwic2V0RmlsdGVycyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYXZhaWxhYmxlRmlsdGVySXRlbXMiLCJzZXRBdmFpbGFibGVGaWx0ZXJJdGVtcyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwicmVuZGVyZWQiLCJzZXRSZW5kZXJlZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiV2FJZCIsInNldFdhSWQiLCJfdXNlU3RhdGU5IiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlMTAiLCJhY3RpdmVGaWx0ZXIiLCJzZXRBY3RpdmVGaWx0ZXIiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiYWN0aXZlRmlsdGVyQ29weSIsInNldEFjdGl2ZUZpbHRlckNvcHkiLCJjc3JmIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidXNlUXVlcnkiLCJVUkxTZWFyY2hQYXJhbXMiLCJ1c2VMb2NhdGlvbiIsInNlYXJjaCIsImhpc3RvcnkiLCJ1c2VIaXN0b3J5IiwicXVlcnkiLCJnZXRLUUxGcm9tVVJMIiwiZ2V0UG9pbnRzVG9GaWx0ZXJzIiwiaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0iLCJmaW5kIiwiZiIsInR5cGUiLCJmaWx0ZXJlZFBvaW50c0RhdGEiLCJpdGVtcyIsImZpbHRlciIsInBvaW50IiwicGFydF9vZl9vYnNlcnZhdGlvbiIsIm1hcCIsImlkIiwibmFtZSIsImdyb3VwIiwib3B0aW9ucyIsImZvckVhY2giLCJmaWx0ZXJJdGVtIiwiZmlsdGVyX2l0ZW1zIiwiZmkiLCJhdmFpbGFibGVfb3B0aW9ucyIsImZldGNoRXZlbnRGaWx0ZXJzIiwicHJlcGFyZWRQYXJhbXMiLCJtZXRob2QiLCJ1cmwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmZXRjaCIsImhlYWRlcnMiLCJBY2NlcHQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInRoZW4iLCJyZXNwb25zZSIsImpzb24iLCJkYXRhIiwiYXZhaWxhYmxlX2ZpbHRlcl9pdGVtcyIsInNhdmVkIiwiZGVlcENsb25lIiwicGFyc2UiLCJnZXREYXRhIiwiY29uY2F0Iiwid2F0ZXJBdXRob3JpdHlJZCIsImpzb25TaGFsbG93Q29weSIsImFzc2lnbiIsImFjdGl2ZSIsImRpc3BsYXllZF9maWx0ZXIiLCJzZWxlY3RlZFBlcmlvZCIsInNlbGVjdGVkX29wdGlvbnMiLCJhY3RpdmF0ZUZpbHRlciIsImFwcGx5RmlsdGVyIiwiaGFuZGxlRmlsdGVyQ2hhbmdlIiwiY3VycmVudCIsImNsaWNrIiwic2F2ZUFjdGl2ZUZpbHRlciIsImNsb25lZEZpbHRlcnMiLCJmaWx0ZXJUb01vZGlmeUluZGV4IiwiaW5kZXhPZiIsImZpbHRlcl90eXBlIiwidWlfZmlsdGVyIiwiaXNfYWN0aXZlIiwiTWF0aCIsInNpZ24iLCJjcmVhdGVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZGVsZXRlRmlsdGVyIiwiZ2V0RXZlbnRJZEZyb21VUkwiLCJnZXRXYUlkRnJvbVVSTCIsImdldEtRTFZhbHVlc0Zyb21VUkwiLCJ2YWx1ZSIsIm5hdkNvbnRleHQiLCJpbmNsdWRlcyIsImNvbnNvbGUiLCJ3YXJuIiwiYnVpbGRLUUxRdWVyeSIsInB1c2giLCJsb2NhbGUiLCJzZXRFdmVudEZpbHRlclBhcmFtIiwic2V0QWN0aXZlRmlsdGVyR2xvYmFsbHkiLCJzZXRTYW1wbGluZ0RhdGEiLCJjdXJyZW50UGFnZSIsImlzRmV0Y2giLCJoYW5kbGVDcmVhdGlvbkNsaWNrIiwidXNlRWZmZWN0IiwiZXZlbnRGaWx0ZXJQYXJhbSIsImNsZWFudXAiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmVmIiwiaTE4biIsInQiLCJUb2dnbGUiLCJ2YXJpYW50IiwiUmVhY3RDb21wb25lbnQiLCJoZWlnaHQiLCJ3aWR0aCIsImZpbGwiLCJNZW51IiwiSXRlbSIsImRpc2FibGVkIiwib25DbGljayIsIkZvcm1Db250cm9sIiwicGxhY2Vob2xkZXIiLCJhdXRvRm9jdXMiLCJCdXR0b24iLCJwYXJzZVNlbGVjdGVkSXRlbXMiLCJjb25uZWN0b3IiLCJjb25uZWN0IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3BhZ2VzL0V2ZW50c1BhZ2UvZXZlbnRzL2V2ZW50c19saXN0L0ZpbHRlci9GaWx0ZXJDb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCdXR0b24sIEZvcm1Db250cm9sIH0gZnJvbSAncmVhY3QtYm9vdHN0cmFwJztcbmltcG9ydCBEcm9wZG93biBmcm9tICdyZWFjdC1ib290c3RyYXAvRHJvcGRvd24nO1xuaW1wb3J0IHsgY29ubmVjdCwgQ29ubmVjdGVkUHJvcHMsIHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IFJlYWN0Q29tcG9uZW50IGFzIFNhdmVJY29uIH0gZnJvbSAnc3JjL2Fzc2V0cy9pY29ucy9kaXNrZXR0ZS5zdmcnO1xuaW1wb3J0IHsgUmVhY3RDb21wb25lbnQgYXMgTGlzdEljb24gfSBmcm9tICdzcmMvYXNzZXRzL2ljb25zL2xpc3Quc3ZnJztcbmltcG9ydCB7IElBcHBTdGF0ZSB9IGZyb20gJ3NyYy9tb2RlbHMvSUFwcFN0YXRlJztcbmltcG9ydCB7IElGaWx0ZXIgfSBmcm9tICdzcmMvc3RvcmUvZmlsdGVycy9JRmlsdGVyJztcbmltcG9ydCB7IElGaWx0ZXJJdGVtIH0gZnJvbSAnc3JjL3N0b3JlL2ZpbHRlcnMvSUZpbHRlckl0ZW0nO1xuaW1wb3J0IHtcbiAgc2V0QWN0aXZlRmlsdGVyR2xvYmFsbHksXG4gIHNldEV2ZW50RmlsdGVyUGFyYW0sXG59IGZyb20gJ3NyYy9zdG9yZS9nbG9iYWwvYWN0aW9ucyc7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICdzcmMvc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnc3JjL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCB7IGJ1aWxkS1FMUXVlcnksIHBhcnNlU2VsZWN0ZWRJdGVtcyB9IGZyb20gJ3NyYy91dGlsaXRpZXMva3FsJztcbmltcG9ydCAnLi9GaWx0ZXJTdHlsZS5zY3NzJztcbmltcG9ydCBGaWx0ZXIgZnJvbSAnLi9GaWx0ZXInO1xuaW1wb3J0IEZpbHRlcnNEcm9wRG93biBmcm9tICcuL0ZpbHRlcnNEcm9wRG93bic7XG5pbXBvcnQgeyBzZXRTYW1wbGluZ0RhdGEgfSBmcm9tICdzcmMvc3RvcmUvc2FtcGxpbmdzL2FjdGlvbnNDcmVhdG9yJztcbmZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogSUFwcFN0YXRlKSB7XG4gIGNvbnN0IHsgZ2xvYmFsX2RhdGEsIG5hdl9jb250ZXh0X2RhdGEsIHBvaW50c19kYXRhIH0gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIGdsb2JhbF9kYXRhLFxuICAgIG5hdl9jb250ZXh0X2RhdGEsXG4gICAgcG9pbnRzX2RhdGEsXG4gIH07XG59XG5cbnR5cGUgSVByb3BzID0gQ29ubmVjdGVkUHJvcHM8dHlwZW9mIGNvbm5lY3Rvcj4gJiB7XG4gIGZpbHRlclBvcHVwT3BlbjogYm9vbGVhbjtcbiAgZmV0Y2hUeXBlOiBzdHJpbmc7XG4gIGFwcGx5TG9naWM/OiAodmFsdWVzOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBGaWx0ZXJDb250YWluZXI6IFJlYWN0LkZDPElQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGdsb2JhbF9kYXRhLFxuICAgIG5hdl9jb250ZXh0X2RhdGEsXG4gICAgcG9pbnRzX2RhdGEsXG4gICAgZmlsdGVyUG9wdXBPcGVuLFxuICAgIGFwcGx5TG9naWMsXG4gICAgZmV0Y2hUeXBlID0gJ0V2ZW50RmlsdGVycycsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCBuYW1lSW5wdXQgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZpbHRlckNvbnRlbnQgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbZmlsdGVycywgc2V0RmlsdGVyc10gPSB1c2VTdGF0ZTxhbnk+KFtdKTtcbiAgY29uc3QgW2F2YWlsYWJsZUZpbHRlckl0ZW1zLCBzZXRBdmFpbGFibGVGaWx0ZXJJdGVtc10gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtyZW5kZXJlZCwgc2V0UmVuZGVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbV2FJZCwgc2V0V2FJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPigpO1xuICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBjb25zdCBbYWN0aXZlRmlsdGVyLCBzZXRBY3RpdmVGaWx0ZXJdID0gdXNlU3RhdGU8YW55Pih1bmRlZmluZWQpO1xuICBjb25zdCBbYWN0aXZlRmlsdGVyQ29weSwgc2V0QWN0aXZlRmlsdGVyQ29weV0gPSB1c2VTdGF0ZTxhbnk+KHVuZGVmaW5lZCk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgY3NyZiA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J2NzcmYtdG9rZW4nXVwiKVxuICAgIC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgY29uc3QgdXNlUXVlcnkgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXModXNlTG9jYXRpb24oKS5zZWFyY2gpO1xuICB9O1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBxdWVyeSA9IHVzZVF1ZXJ5KCk7XG4gIGNvbnN0IGdldEtRTEZyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgndmFsdWVzRnJvbUtRTCcpO1xuICB9O1xuXG4gIGNvbnN0IGdldFBvaW50c1RvRmlsdGVycyA9IChhdmFpbGFibGVGaWx0ZXJJdGVtczogYW55LCBmaWx0ZXJzOiBhbnkpID0+IHtcbiAgICBsZXQgaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0gPSBhdmFpbGFibGVGaWx0ZXJJdGVtcy5maW5kKFxuICAgICAgKGY6IElGaWx0ZXJJdGVtKSA9PiBmLnR5cGUgPT09ICdJbnRlcmVzdFBvaW50RmlsdGVySXRlbScsXG4gICAgKTtcbiAgICBsZXQgZmlsdGVyZWRQb2ludHNEYXRhID0gcG9pbnRzX2RhdGEuaXRlbXNcbiAgICAgIC5maWx0ZXIoKHBvaW50OiBJUG9pbnQpID0+IHBvaW50LnBhcnRfb2Zfb2JzZXJ2YXRpb24gPT09IHRydWUpXG4gICAgICAubWFwKChwb2ludDogSVBvaW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGlkOiBwb2ludC5pZCwgbmFtZTogcG9pbnQuZ3JvdXAubmFtZSB9O1xuICAgICAgfSk7XG5cbiAgICBpZiAoaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0ub3B0aW9ucyA9IGZpbHRlcmVkUG9pbnRzRGF0YTtcbiAgICB9XG5cbiAgICBmaWx0ZXJzLmZvckVhY2goKGY6IElGaWx0ZXIpID0+IHtcbiAgICAgIGxldCBmaWx0ZXJJdGVtID0gZi5maWx0ZXJfaXRlbXMuZmluZChcbiAgICAgICAgKGZpOiBJRmlsdGVySXRlbSkgPT4gZmkudHlwZSA9PT0gJ0ludGVyZXN0UG9pbnRGaWx0ZXJJdGVtJyxcbiAgICAgICk7XG5cbiAgICAgIGlmIChmaWx0ZXJJdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZmlsdGVySXRlbS5hdmFpbGFibGVfb3B0aW9ucyA9IGZpbHRlcmVkUG9pbnRzRGF0YTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNldEZpbHRlcnMoZmlsdGVycyk7XG4gIH07XG5cbiAgY29uc3QgZmV0Y2hFdmVudEZpbHRlcnMgPSAoXG4gICAgcHJlcGFyZWRQYXJhbXM6IGFueSxcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBmaWx0ZXI6IGFueSA9IG51bGwsXG4gICkgPT4ge1xuICAgIGlmIChjc3JmICE9PSBudWxsKSB7XG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICdYLUNTUkYtVG9rZW4nOiBjc3JmLFxuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwcmVwYXJlZFBhcmFtcyksXG4gICAgICB9KVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICBnZXRQb2ludHNUb0ZpbHRlcnMoZGF0YS5hdmFpbGFibGVfZmlsdGVyX2l0ZW1zLCBkYXRhLmZpbHRlcnMpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHNhdmVkID0gZGF0YS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAgIChmOiBJRmlsdGVyKSA9PiBmLm5hbWUgPT09IGZpbHRlci5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlcihzYXZlZCk7XG4gICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KHNhdmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWVwQ2xvbmUgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICB9O1xuXG4gIGNvbnN0IGdldERhdGEgPSAoKSA9PiB7XG4gICAgZmV0Y2goXG4gICAgICBgL3VpX2ZpbHRlcnMuanNvbj93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgfSZmaWx0ZXJfdHlwZT0ke2ZldGNoVHlwZX0mdmFsdWVzRnJvbUtRTD0ke2dldEtRTEZyb21VUkwoKX1gLFxuICAgIClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgZ2V0UG9pbnRzVG9GaWx0ZXJzKGpzb24uYXZhaWxhYmxlX2ZpbHRlcl9pdGVtcywganNvbi5maWx0ZXJzKTtcblxuICAgICAgICBsZXQganNvblNoYWxsb3dDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwganNvbik7XG4gICAgICAgIGpzb25TaGFsbG93Q29weS5maWx0ZXJzID0gZGVlcENsb25lKGpzb25TaGFsbG93Q29weS5maWx0ZXJzKTtcbiAgICAgICAgbGV0IGFjdGl2ZSA9IGpzb25TaGFsbG93Q29weS5kaXNwbGF5ZWRfZmlsdGVyO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBnbG9iYWxfZGF0YS5zZWxlY3RlZFBlcmlvZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgZ2xvYmFsX2RhdGEuc2VsZWN0ZWRQZXJpb2QgIT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgYWN0aXZlLmZpbHRlcl9pdGVtc1sxXS5zZWxlY3RlZF9vcHRpb25zID0gW1xuICAgICAgICAgICAgZ2xvYmFsX2RhdGEuc2VsZWN0ZWRQZXJpb2QsXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhY3RpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGl2YXRlRmlsdGVyKGpzb25TaGFsbG93Q29weS5maWx0ZXJzWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRBdmFpbGFibGVGaWx0ZXJJdGVtcyhqc29uU2hhbGxvd0NvcHkuYXZhaWxhYmxlX2ZpbHRlcl9pdGVtcyk7XG4gICAgICAgICAgc2V0QWN0aXZlRmlsdGVyKGFjdGl2ZSk7XG4gICAgICAgICAgc2V0QWN0aXZlRmlsdGVyQ29weShhY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHlGaWx0ZXIoYWN0aXZlKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZpbHRlckNoYW5nZSA9IChmaWx0ZXI6IElGaWx0ZXIpID0+IHtcbiAgICBzZXRBY3RpdmVGaWx0ZXIoZGVlcENsb25lKGZpbHRlcikpO1xuICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoZGVlcENsb25lKGZpbHRlcikpO1xuICAgIGZpbHRlckNvbnRlbnQuY3VycmVudCEuY2xpY2soKTtcbiAgfTtcblxuICBjb25zdCBzYXZlQWN0aXZlRmlsdGVyID0gKFxuICAgIGZpbHRlcjpcbiAgICAgIHwgSUZpbHRlclxuICAgICAgfCB7XG4gICAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgZmlsdGVyX2l0ZW1zOiBJRmlsdGVySXRlbVtdO1xuICAgICAgICAgIGlzX2FjdGl2ZTogYm9vbGVhbjtcbiAgICAgICAgfSxcbiAgKSA9PiB7XG4gICAgbGV0IGNsb25lZEZpbHRlcnMgPSBkZWVwQ2xvbmUoZmlsdGVycyk7XG4gICAgbGV0IGZpbHRlclRvTW9kaWZ5SW5kZXggPSBjbG9uZWRGaWx0ZXJzLmluZGV4T2YoXG4gICAgICBjbG9uZWRGaWx0ZXJzLmZpbmQoKGY6IGFueSkgPT4gZi5pZCA9PT0gZmlsdGVyLmlkKSxcbiAgICApO1xuICAgIGxldCBwcmVwYXJlZFBhcmFtcyA9IHtcbiAgICAgIGZpbHRlcl90eXBlOiBmZXRjaFR5cGUsXG4gICAgICB1aV9maWx0ZXI6IHtcbiAgICAgICAgbmFtZTogZmlsdGVyLm5hbWUsXG4gICAgICAgIGlzX2FjdGl2ZTogZmlsdGVyLmlzX2FjdGl2ZSxcbiAgICAgICAgZmlsdGVyX2l0ZW1zOiBKU09OLnN0cmluZ2lmeShmaWx0ZXIuZmlsdGVyX2l0ZW1zKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsb25lZEZpbHRlcnNbZmlsdGVyVG9Nb2RpZnlJbmRleF0gPSBmaWx0ZXI7XG4gICAgc2V0RmlsdGVycyhjbG9uZWRGaWx0ZXJzKTtcbiAgICBzZXRBY3RpdmVGaWx0ZXIoZmlsdGVyKTtcbiAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGZpbHRlcik7XG5cbiAgICBpZiAoTWF0aC5zaWduKGZpbHRlci5pZCkgPiAwKSB7XG4gICAgICBmZXRjaEV2ZW50RmlsdGVycyhcbiAgICAgICAgcHJlcGFyZWRQYXJhbXMsXG4gICAgICAgICdQVVQnLFxuICAgICAgICBgL3VpX2ZpbHRlcnMvJHtmaWx0ZXIuaWR9P3dhdGVyX2F1dGhvcml0eV9pZD0ke2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICAgICAgZmlsdGVyLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmV0Y2hFdmVudEZpbHRlcnMoXG4gICAgICAgIHByZXBhcmVkUGFyYW1zLFxuICAgICAgICAnUE9TVCcsXG4gICAgICAgIGAvdWlfZmlsdGVycz93YXRlcl9hdXRob3JpdHlfaWQ9JHtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgICAgIGZpbHRlcixcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUZpbHRlciA9IChmaWx0ZXI6IElGaWx0ZXIsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGxldCBuZXdGaWx0ZXIgPSB7XG4gICAgICBpZDogLTEsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgZmlsdGVyX2l0ZW1zOiBmaWx0ZXIuZmlsdGVyX2l0ZW1zLFxuICAgICAgaXNfYWN0aXZlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc2V0RmlsdGVycyhbLi4uZmlsdGVycywgbmV3RmlsdGVyXSk7XG4gICAgc2V0QWN0aXZlRmlsdGVyQ29weShuZXdGaWx0ZXIpO1xuICAgIHNldEFjdGl2ZUZpbHRlcihuZXdGaWx0ZXIpO1xuICAgIHNhdmVBY3RpdmVGaWx0ZXIobmV3RmlsdGVyKTtcbiAgfTtcblxuICBjb25zdCBkZWxldGVGaWx0ZXIgPSAoZmlsdGVyOiBJRmlsdGVyKSA9PiB7XG4gICAgaWYgKGNzcmYgIT09IG51bGwgJiYgZmlsdGVyLmlkICE9PSAtMSkge1xuICAgICAgZmV0Y2goXG4gICAgICAgIGAvdWlfZmlsdGVycy8ke2ZpbHRlci5pZH0/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7Z2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZH0mZmlsdGVyX3R5cGU9JHtmZXRjaFR5cGV9YCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ1gtQ1NSRi1Ub2tlbic6IGNzcmYsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgbGV0IGFjdGl2ZSA9IGRhdGEuZmlsdGVycy5maW5kKFxuICAgICAgICAgICAgKGZpbHRlcjogSUZpbHRlcikgPT4gZmlsdGVyLmlzX2FjdGl2ZSA9PT0gdHJ1ZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGFjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZXRGaWx0ZXJzKGRhdGEuZmlsdGVycyk7XG4gICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXIoYWN0aXZlKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoYWN0aXZlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRhdGEuZmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgZ2V0RGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGF0YS5maWx0ZXJzWzBdLmlzX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlcihkYXRhLmZpbHRlcnNbMF0pO1xuICAgICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGRhdGEuZmlsdGVyc1swXSk7XG4gICAgICAgICAgICAgIHNldEZpbHRlcnMoZGF0YS5maWx0ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRFdmVudElkRnJvbVVSTCA9ICgpID0+IHtcbiAgICByZXR1cm4gcXVlcnkuZ2V0KCdldmVudElkJyk7XG4gIH07XG5cbiAgY29uc3QgZ2V0V2FJZEZyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgnd2F0ZXJfYXV0aG9yaXR5X2lkJyk7XG4gIH07XG5cbiAgY29uc3QgZ2V0S1FMVmFsdWVzRnJvbVVSTCA9ICgpID0+IHtcbiAgICByZXR1cm4gcXVlcnkuZ2V0KCd2YWx1ZXNGcm9tS1FMJyk7XG4gIH07XG5cbiAgY29uc3QgYWN0aXZhdGVGaWx0ZXIgPSAoZmlsdGVyOiBJRmlsdGVyKSA9PiB7XG4gICAgZmV0Y2hFdmVudEZpbHRlcnMoXG4gICAgICB7fSxcbiAgICAgICdQVVQnLFxuICAgICAgYC91aV9maWx0ZXJzL2FjdGl2YXRlLyR7ZmlsdGVyLmlkfT93YXRlcl9hdXRob3JpdHlfaWQ9JHtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkfSZmaWx0ZXJfdHlwZT0ke2ZldGNoVHlwZX1gLFxuICAgICAgZmlsdGVyLFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgYXBwbHlGaWx0ZXIgPSAoZmlsdGVyID0gYWN0aXZlRmlsdGVyQ29weSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9ICdzZXZlcml0eSc7XG5cbiAgICBpZiAobmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWUgPT09ICdzYW1wbGluZ3MtbGlzdCcpIHtcbiAgICAgIHZhbHVlID0gJ25ld2VzdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChnZXRLUUxWYWx1ZXNGcm9tVVJMKCkgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ09SREVSX0JZJykgJiZcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCduZXdlc3QnKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9ICduZXdlc3QnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ09SREVSX0JZJykgJiZcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCdvbGRlc3QnKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9ICdvbGRlc3QnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ09SREVSX0JZJykgJiZcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCdzZXZlcml0eScpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gJ3NldmVyaXR5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZSA9PT0gJ2V2ZW50c192aWV3Jykge1xuICAgICAgY29uc29sZS53YXJuKCdidWlsZEtRTCcsIGJ1aWxkS1FMUXVlcnkoZmlsdGVyLCB2YWx1ZSkpO1xuICAgICAgaGlzdG9yeS5wdXNoKFxuICAgICAgICBgLyR7bmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWV9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgfSZsb2NhbGU9JHtcbiAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlXG4gICAgICAgIH0mZXZlbnRJZD0ke2dldEV2ZW50SWRGcm9tVVJMKCl9JnZhbHVlc0Zyb21LUUw9JHtidWlsZEtRTFF1ZXJ5KFxuICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWUgPT09ICdzYW1wbGluZ3MtbGlzdCcpIHtcbiAgICAgIGhpc3RvcnkucHVzaChcbiAgICAgICAgYC8ke25hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICAgIH0mbG9jYWxlPSR7XG4gICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZVxuICAgICAgICB9JnZhbHVlc0Zyb21LUUw9JHtidWlsZEtRTFF1ZXJ5KGZpbHRlciwgdmFsdWUpfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAoYXBwbHlMb2dpYyAhPT0gdW5kZWZpbmVkKSBhcHBseUxvZ2ljKGJ1aWxkS1FMUXVlcnkoZmlsdGVyLCB2YWx1ZSkpO1xuICAgIH1cblxuICAgIGRpc3BhdGNoKHNldEV2ZW50RmlsdGVyUGFyYW0oYnVpbGRLUUxRdWVyeShmaWx0ZXIsIHZhbHVlKSkpO1xuICAgIGRpc3BhdGNoKHNldEFjdGl2ZUZpbHRlckdsb2JhbGx5KGZpbHRlcikpO1xuICAgIC8vIEFsd2F5cyByZXNldCBwYWdlIHRvIDEgd2hlbiBhIG5ldyBmaWx0ZXIgaXMgYXBwbGllZFxuICAgIGRpc3BhdGNoKHNldFNhbXBsaW5nRGF0YSh7IGN1cnJlbnRQYWdlOiAxLCBpc0ZldGNoOiBmYWxzZSB9KSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ3JlYXRpb25DbGljayA9ICgpID0+IHtcbiAgICBjcmVhdGVGaWx0ZXIoYWN0aXZlRmlsdGVyQ29weSwgbmFtZUlucHV0LmN1cnJlbnQhLnZhbHVlKTtcbiAgICBuYW1lSW5wdXQuY3VycmVudCEudmFsdWUgPSAnJztcbiAgICBmaWx0ZXJDb250ZW50LmN1cnJlbnQhLmNsaWNrKCk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRXYUlkKGdldFdhSWRGcm9tVVJMKCkpO1xuICAgIGlmICghcmVuZGVyZWQpIHtcbiAgICAgIHNldFJlbmRlcmVkKHRydWUpO1xuICAgICAgZ2V0RGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZ2xvYmFsX2RhdGEuZXZlbnRGaWx0ZXJQYXJhbSA9PT0gJycgJiYgZmlsdGVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgbGV0IGZpbHRlciA9IGZpbHRlcnMuZmluZCgoZmlsdGVyOiBJRmlsdGVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpbHRlci5pc19hY3RpdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgc2V0UmVuZGVyZWQoZmFsc2UpO1xuICAgIH07XG4gIH0sIFtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkLCBXYUlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2BmaWx0ZXItY29udGFpbmVyICR7XG4gICAgICAgIGZpbHRlclBvcHVwT3BlbiA/ICcnIDogJ2ZpbHRlci1jb250YWluZXItLWhpZGRlbidcbiAgICAgIH1gfVxuICAgID5cbiAgICAgIHthY3RpdmVGaWx0ZXJDb3B5ICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2ZpbHRlci1jb250YWluZXJfX2NvbnRlbnQnfSByZWY9e2ZpbHRlckNvbnRlbnR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnZmlsdGVyLWNvbnRhaW5lcl9fY29udGVudF9faGVhZGVyJ30+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3RpdGxlJ30+XG4gICAgICAgICAgICAgIDxoND57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLmZpbHRlcicpfTwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydhY3Rpb25zJ30+XG4gICAgICAgICAgICAgIDxEcm9wZG93biBjbGFzc05hbWU9eydhY3Rpb24nfT5cbiAgICAgICAgICAgICAgICA8RHJvcGRvd24uVG9nZ2xlIHZhcmlhbnQ9XCJzdWNjZXNzXCIgaWQ9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgPExpc3RJY29uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInByZXNldC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTRweFwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTRweFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMWQxZDFkXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7YWN0aXZlRmlsdGVyQ29weS5uYW1lfXsnICd9XG4gICAgICAgICAgICAgICAgICB7YWN0aXZlRmlsdGVyQ29weS5pZCA9PT0gLTEgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxiPiAoe2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci51bnNhdmVkJyl9KSA8L2I+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLlRvZ2dsZT5cblxuICAgICAgICAgICAgICAgIDxGaWx0ZXJzRHJvcERvd25cbiAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2U9e2hhbmRsZUZpbHRlckNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZpbHRlckNvcHk9e2FjdGl2ZUZpbHRlckNvcHl9XG4gICAgICAgICAgICAgICAgICBhY3RpdmF0ZUZpbHRlcj17YWN0aXZhdGVGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICBkZWxldGVGaWx0ZXI9e2RlbGV0ZUZpbHRlcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Ryb3Bkb3duPlxuXG4gICAgICAgICAgICAgIDxEcm9wZG93biBjbGFzc05hbWU9eydhY3Rpb24nfT5cbiAgICAgICAgICAgICAgICA8RHJvcGRvd24uVG9nZ2xlIHZhcmlhbnQ9XCJzdWNjZXNzXCIgaWQ9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgPFNhdmVJY29uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNhdmUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEzcHhcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEzcHhcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFkMWQxZFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5zYXZlLmxhYmVsJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uVG9nZ2xlPlxuXG4gICAgICAgICAgICAgICAgPERyb3Bkb3duLk1lbnU+XG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd24uSXRlbVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17YWN0aXZlRmlsdGVyQ29weS5pZCA9PT0gLTEgPyB0cnVlIDogZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzYXZlQWN0aXZlRmlsdGVyKGFjdGl2ZUZpbHRlckNvcHkpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLnNhdmUuZXhpc3RpbmcnKX1cbiAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uSXRlbT5cbiAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBjbGFzc05hbWU9eydhY3Rpb24gYWN0aW9uLS1zYXZlJ30+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bi5Ub2dnbGUgdmFyaWFudD1cInN1Y2Nlc3NcIiBpZD1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5zYXZlLm5ldycpfVxuICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLlRvZ2dsZT5cblxuICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24uTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J25ldy1maWx0ZXItcG9wdXAnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLnNhdmUuZmllbGRfcGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTmFtZSB0aGlzIGZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJiYXNpYy1hZGRvbjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9e25hbWVJbnB1dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ3JlYXRpb25DbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2RldmljZV9oZWFsdGhfc3RhdHVzLm9rJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bi5NZW51PlxuICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLk1lbnU+XG4gICAgICAgICAgICAgIDwvRHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnZmlsdGVyLWNvbnRhaW5lcl9fY29udGVudF9fYm9keSd9PlxuICAgICAgICAgICAgPEZpbHRlclxuICAgICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5PXtzZXRBY3RpdmVGaWx0ZXJDb3B5fVxuICAgICAgICAgICAgICBhY3RpdmVGaWx0ZXJDb3B5PXthY3RpdmVGaWx0ZXJDb3B5fVxuICAgICAgICAgICAgICBhdmFpbGFibGVGaWx0ZXJJdGVtcz17YXZhaWxhYmxlRmlsdGVySXRlbXN9XG4gICAgICAgICAgICAgIHBhcnNlU2VsZWN0ZWRJdGVtcz17cGFyc2VTZWxlY3RlZEl0ZW1zfVxuICAgICAgICAgICAgICBhcHBseUZpbHRlcj17YXBwbHlGaWx0ZXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5jb25zdCBjb25uZWN0b3IgPSBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcyk7XG5leHBvcnQgZGVmYXVsdCBjb25uZWN0b3IoRmlsdGVyQ29udGFpbmVyKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQUwsT0FBQTtBQUEyRCxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFBQSxJQUFBTyxLQUFBLEdBQUFQLE9BQUE7QUFNM0QsSUFBQVEsUUFBQSxHQUFBUixPQUFBO0FBS0EsSUFBQVMsS0FBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsSUFBQSxHQUFBVixPQUFBO0FBQ0FBLE9BQUE7QUFDQSxJQUFBVyxPQUFBLEdBQUFSLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBWSxnQkFBQSxHQUFBVCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQWEsZUFBQSxHQUFBYixPQUFBO0FBQXFFLFNBQUFjLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBaEIsd0JBQUFvQixHQUFBLEVBQUFKLFdBQUEsU0FBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFB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