@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,57 +1,33 @@
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.ProfilePage = void 0;
11
-
12
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
13
-
14
10
  var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
15
-
16
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
17
-
18
12
  var _react = _interopRequireWildcard(require("react"));
19
-
20
13
  var _Select = require("components/CustomInputs/Select/Select");
21
-
22
14
  var _i18n = _interopRequireDefault(require("utilities/i18n"));
23
-
24
15
  var _PasswordModal = require("./PasswordModal/PasswordModal");
25
-
26
16
  var _pen = require("@svgr/webpack?-svgo!./pen.svg");
27
-
28
17
  var _cancel = require("@svgr/webpack?-svgo!./cancel.svg");
29
-
30
18
  var _reactPhoneInput = _interopRequireDefault(require("react-phone-input-2"));
31
-
32
19
  require("react-phone-input-2/lib/style.css");
33
-
34
20
  var _TelegramModal = require("./TelegramModal/TelegramModal");
35
-
36
21
  var _axios = _interopRequireDefault(require("axios"));
37
-
38
22
  var _Container = require("./Container");
39
-
40
23
  var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
41
-
42
24
  var _Analytics = require("../../utilities/Analytics");
43
-
44
25
  var _reactRedux = require("react-redux");
45
-
46
26
  var _reactToastify = require("react-toastify");
47
-
48
27
  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); }
49
-
50
28
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
51
-
52
29
  var ProfilePage = function ProfilePage() {
53
30
  var timezonesArray = _momentTimezone.default.tz.names();
54
-
55
31
  var dateTimeFormatOptions = [{
56
32
  value: 'us',
57
33
  label: 'United States',
@@ -96,22 +72,40 @@ var ProfilePage = function ProfilePage() {
96
72
  value: 'it',
97
73
  label: 'Italiano'
98
74
  }];
99
-
100
75
  var _useState = (0, _react.useState)(localeOptions[0]),
101
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
102
- locale = _useState2[0],
103
- setLocale = _useState2[1];
104
-
76
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
77
+ locale = _useState2[0],
78
+ setLocale = _useState2[1];
105
79
  var _useState3 = (0, _react.useState)(dateTimeFormatOptions[0]),
106
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
107
- dateTimeFormat = _useState4[0],
108
- setDateTimeFormat = _useState4[1];
109
-
80
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
81
+ dateTimeFormat = _useState4[0],
82
+ setDateTimeFormat = _useState4[1];
110
83
  var _useState5 = (0, _react.useState)(timezones[20]),
111
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
112
- timezone = _useState6[0],
113
- setTimezone = _useState6[1];
114
-
84
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
85
+ timezone = _useState6[0],
86
+ setTimezone = _useState6[1];
87
+ var _useState7 = (0, _react.useState)([{
88
+ value: '',
89
+ label: ''
90
+ }]),
91
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
92
+ departments = _useState8[0],
93
+ setDepartments = _useState8[1];
94
+ var _useState9 = (0, _react.useState)([{
95
+ value: '',
96
+ label: ''
97
+ }]),
98
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
99
+ businessRoles = _useState10[0],
100
+ setBusinessRoles = _useState10[1];
101
+ var _useState11 = (0, _react.useState)(departments[0]),
102
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
103
+ department = _useState12[0],
104
+ setDepartment = _useState12[1];
105
+ var _useState13 = (0, _react.useState)(businessRoles[0]),
106
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
107
+ businessRole = _useState14[0],
108
+ setBusinessRole = _useState14[1];
115
109
  var initialParamsState = {
116
110
  first_name: '',
117
111
  last_name: '',
@@ -120,54 +114,49 @@ var ProfilePage = function ProfilePage() {
120
114
  time_zone: '',
121
115
  date_time_format: '',
122
116
  locale: '',
123
- telegram_name: ''
117
+ telegram_name: '',
118
+ other_business_role_name: '',
119
+ other_department_name: '',
120
+ business_role: '',
121
+ department: ''
124
122
  };
125
-
126
- var _useState7 = (0, _react.useState)(false),
127
- _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
128
- isTelegramOpen = _useState8[0],
129
- setIsTelegramOpen = _useState8[1];
130
-
131
- var _useState9 = (0, _react.useState)(false),
132
- _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
133
- showPasswordModal = _useState10[0],
134
- setShowPasswordModal = _useState10[1];
135
-
136
- var _useState11 = (0, _react.useState)(false),
137
- _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
138
- submitting = _useState12[0],
139
- setSubmitting = _useState12[1];
140
-
141
- var _useState13 = (0, _react.useState)(false),
142
- _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
143
- showSuccessMessage = _useState14[0],
144
- setShowSuccessMessage = _useState14[1];
145
-
146
123
  var _useState15 = (0, _react.useState)(false),
147
- _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
148
- showErrorMessage = _useState16[0],
149
- setShowErrorMessage = _useState16[1];
150
-
151
- var _useState17 = (0, _react.useState)({
152
- show: false,
153
- status: '',
154
- message: ''
155
- }),
156
- _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
157
- showTelegramResponseMessage = _useState18[0],
158
- setShowTelegramResponseMessage = _useState18[1];
159
-
160
- var _useState19 = (0, _react.useState)(initialParamsState),
161
- _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
162
- params = _useState20[0],
163
- setParams = _useState20[1];
164
-
124
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
125
+ isTelegramOpen = _useState16[0],
126
+ setIsTelegramOpen = _useState16[1];
127
+ var _useState17 = (0, _react.useState)(false),
128
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
129
+ showPasswordModal = _useState18[0],
130
+ setShowPasswordModal = _useState18[1];
131
+ var _useState19 = (0, _react.useState)(false),
132
+ _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
133
+ submitting = _useState20[0],
134
+ setSubmitting = _useState20[1];
135
+ var _useState21 = (0, _react.useState)(false),
136
+ _useState22 = (0, _slicedToArray2.default)(_useState21, 2),
137
+ showSuccessMessage = _useState22[0],
138
+ setShowSuccessMessage = _useState22[1];
139
+ var _useState23 = (0, _react.useState)(false),
140
+ _useState24 = (0, _slicedToArray2.default)(_useState23, 2),
141
+ showErrorMessage = _useState24[0],
142
+ setShowErrorMessage = _useState24[1];
143
+ var _useState25 = (0, _react.useState)({
144
+ show: false,
145
+ status: '',
146
+ message: ''
147
+ }),
148
+ _useState26 = (0, _slicedToArray2.default)(_useState25, 2),
149
+ showTelegramResponseMessage = _useState26[0],
150
+ setShowTelegramResponseMessage = _useState26[1];
151
+ var _useState27 = (0, _react.useState)(initialParamsState),
152
+ _useState28 = (0, _slicedToArray2.default)(_useState27, 2),
153
+ params = _useState28[0],
154
+ setParams = _useState28[1];
165
155
  var handleOnChange = function handleOnChange(e) {
166
156
  if (typeof e === 'string') {
167
157
  if (e.startsWith('9720')) {
168
158
  e = e.replace(/(9720)/g, '972');
169
159
  }
170
-
171
160
  setParams(function (prevState) {
172
161
  return (0, _objectSpread3.default)((0, _objectSpread3.default)({}, prevState), {}, {
173
162
  phone: e
@@ -175,30 +164,44 @@ var ProfilePage = function ProfilePage() {
175
164
  });
176
165
  } else {
177
166
  var _e$target = e.target,
178
- value = _e$target.value,
179
- name = _e$target.name;
167
+ value = _e$target.value,
168
+ name = _e$target.name;
180
169
  setParams(function (prevState) {
181
170
  return (0, _objectSpread3.default)((0, _objectSpread3.default)({}, prevState), {}, (0, _defineProperty2.default)({}, name, value));
182
171
  });
183
172
  }
184
173
  };
185
-
174
+ var handleBusinessRoleChange = function handleBusinessRoleChange(e) {
175
+ if (e.target !== null) {
176
+ setParams((0, _objectSpread3.default)((0, _objectSpread3.default)({}, params), {}, {
177
+ business_role: e.value,
178
+ other_business_role_name: e.target.value
179
+ }));
180
+ }
181
+ };
182
+ var handleDepartmentChange = function handleDepartmentChange(e) {
183
+ if (e.target !== null) {
184
+ setParams((0, _objectSpread3.default)((0, _objectSpread3.default)({}, params), {}, {
185
+ department: e.value,
186
+ other_department_name: e.target.value
187
+ }));
188
+ }
189
+ };
186
190
  var getParamsWithAggregatedValues = function getParamsWithAggregatedValues() {
187
191
  return (0, _objectSpread3.default)((0, _objectSpread3.default)({}, params), {}, {
188
192
  date_time_format: dateTimeFormat.value,
189
193
  locale: locale.value,
190
- time_zone: timezone.value
194
+ time_zone: timezone.value,
195
+ department_id: department === undefined ? null : department.value,
196
+ business_role_id: businessRole === undefined ? null : businessRole.value
191
197
  });
192
198
  };
193
-
194
199
  var waterAuthorityName = (0, _reactRedux.useSelector)(function (state) {
195
200
  return state.global_data.waterAuthorityName;
196
201
  });
197
-
198
202
  var showToast = function showToast(data) {
199
203
  var username = data.username;
200
204
  var error = data.error;
201
-
202
205
  if (data.status === 'success') {
203
206
  _reactToastify.toast.success(_i18n.default.t("my_profile_tab.telegram_messages.".concat(data.message), {
204
207
  username: username
@@ -214,15 +217,13 @@ var ProfilePage = function ProfilePage() {
214
217
  });
215
218
  }
216
219
  };
217
-
218
220
  var handleSubmit = function handleSubmit(e) {
219
221
  e.preventDefault();
220
222
  setSubmitting(true);
221
-
222
223
  _axios.default.put('/profiles', {
223
224
  user: getParamsWithAggregatedValues()
224
225
  }).then(function (resp) {
225
- if (resp.data.errors === null) {
226
+ if (resp.data.user.errors === null) {
226
227
  document.querySelectorAll('.error-message').forEach(function (p) {
227
228
  return p.innerHTML = '';
228
229
  });
@@ -251,8 +252,7 @@ var ProfilePage = function ProfilePage() {
251
252
  document.querySelectorAll('.error-message').forEach(function (p) {
252
253
  return p.innerHTML = '';
253
254
  });
254
- var errors = resp.data.errors;
255
-
255
+ var errors = resp.data.user.errors;
256
256
  for (var error in errors) {
257
257
  var findElement = document.querySelector("input[name='".concat(error, "']"));
258
258
  var parent = findElement.closest('.field');
@@ -260,10 +260,8 @@ var ProfilePage = function ProfilePage() {
260
260
  findInput.classList.add('invalid-field');
261
261
  parent.querySelector('.error-message').innerHTML = _i18n.default.t("dashboard_v2.profile.errors.".concat(error));
262
262
  }
263
-
264
263
  setShowSuccessMessage(false);
265
264
  }
266
-
267
265
  setSubmitting(false);
268
266
  }).catch(function (error) {
269
267
  setShowErrorMessage(true);
@@ -274,30 +272,28 @@ var ProfilePage = function ProfilePage() {
274
272
  }, 6000);
275
273
  });
276
274
  };
277
-
278
275
  (0, _react.useEffect)(function () {
279
276
  (0, _Analytics.analyticsTrack)('Viewed Profile Page', {
280
277
  utility_name: waterAuthorityName
281
- }); // @ts-ignore
282
-
278
+ });
279
+ // @ts-ignore
283
280
  var token = document.querySelector('[name=csrf-token]').content;
284
281
  _axios.default.defaults.headers.common['X-CSRF-TOKEN'] = token;
285
282
  _axios.default.defaults.headers.common['Content-Type'] = 'application/js';
286
-
287
- _axios.default.get('/profiles/resource').then(function (resp) {
288
- setParams(resp.data);
289
- var findLocale = localeOptions.find(function (e) {
290
- return e.value === resp.data.locale;
291
- });
292
- var findDateTimeFormat = dateTimeFormatOptions.find(function (e) {
293
- return e.value === resp.data.date_time_format;
294
- });
295
- var findTimezone = timezones.find(function (e) {
296
- return e.value === resp.data.time_zone;
297
- });
298
- setLocale(findLocale);
299
- setDateTimeFormat(findDateTimeFormat);
300
- setTimezone(findTimezone);
283
+ _axios.default.get("/profiles/resource").then(function (resp) {
284
+ setParams(resp.data.user);
285
+ var findProperty = function findProperty(object, property) {
286
+ return object.find(function (e) {
287
+ return e.value === property;
288
+ });
289
+ };
290
+ setLocale(findProperty(localeOptions, resp.data.user.locale));
291
+ setDateTimeFormat(findProperty(dateTimeFormatOptions, resp.data.user.date_time_format));
292
+ setTimezone(findProperty(timezones, resp.data.user.time_zone));
293
+ setBusinessRole(findProperty(resp.data.business_roles, resp.data.user.business_role_id));
294
+ setDepartment(findProperty(resp.data.departments, resp.data.user.department_id));
295
+ setDepartments(resp.data.departments);
296
+ setBusinessRoles(resp.data.business_roles);
301
297
  }).catch(function (error) {
302
298
  return alert(error);
303
299
  });
@@ -378,7 +374,69 @@ var ProfilePage = function ProfilePage() {
378
374
  }
379
375
  }), /*#__PURE__*/_react.default.createElement("p", {
380
376
  className: 'error-message'
377
+ })), departments[0].value !== '' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
378
+ className: "field"
379
+ }, /*#__PURE__*/_react.default.createElement("div", {
380
+ className: "label"
381
+ }, _i18n.default.t('dashboard_v2.profile.department')), /*#__PURE__*/_react.default.createElement("div", {
382
+ className: "my-input"
383
+ }, /*#__PURE__*/_react.default.createElement(_Select.Select, {
384
+ setValue: setDepartment,
385
+ value: {
386
+ label: _i18n.default.t("dashboard_v2.profile.departments.".concat(department === null || department === void 0 ? void 0 : department.label)),
387
+ value: department === null || department === void 0 ? void 0 : department.value
388
+ },
389
+ options: departments,
390
+ cancelTextWidth: true,
391
+ translate: {
392
+ options: departments,
393
+ translation_key: 'dashboard_v2.profile.departments'
394
+ }
395
+ }))), /*#__PURE__*/_react.default.createElement("div", {
396
+ className: "field"
397
+ }, /*#__PURE__*/_react.default.createElement("div", {
398
+ className: "label"
399
+ }, _i18n.default.t('dashboard_v2.profile.business_role')), /*#__PURE__*/_react.default.createElement("div", {
400
+ className: "my-input"
401
+ }, /*#__PURE__*/_react.default.createElement(_Select.Select, {
402
+ setValue: setBusinessRole,
403
+ value: {
404
+ label: _i18n.default.t("dashboard_v2.profile.business_roles.".concat(businessRole === null || businessRole === void 0 ? void 0 : businessRole.label)),
405
+ value: businessRole === null || businessRole === void 0 ? void 0 : businessRole.value
406
+ },
407
+ options: businessRoles,
408
+ cancelTextWidth: true,
409
+ translate: {
410
+ options: businessRoles,
411
+ translation_key: 'dashboard_v2.profile.business_roles'
412
+ }
413
+ })))), departments[0].value !== '' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
414
+ className: "field ".concat(department && (department === null || department === void 0 ? void 0 : department.value) === departments[departments.length - 1].value ? '' : 'field--hidden')
415
+ }, /*#__PURE__*/_react.default.createElement("div", {
416
+ className: "label"
417
+ }, _i18n.default.t('dashboard_v2.profile.department_alt')), /*#__PURE__*/_react.default.createElement("input", {
418
+ readOnly: false,
419
+ type: "text",
420
+ className: "my-input",
421
+ name: 'other_department_name',
422
+ value: params.other_department_name,
423
+ onChange: function onChange(e) {
424
+ return handleDepartmentChange(e);
425
+ }
381
426
  })), /*#__PURE__*/_react.default.createElement("div", {
427
+ className: "field ".concat(businessRole && (businessRole === null || businessRole === void 0 ? void 0 : businessRole.value) === businessRoles[businessRoles.length - 1].value ? '' : 'field--hidden', " ")
428
+ }, /*#__PURE__*/_react.default.createElement("div", {
429
+ className: "label"
430
+ }, _i18n.default.t('dashboard_v2.profile.business_role_alt')), /*#__PURE__*/_react.default.createElement("input", {
431
+ readOnly: false,
432
+ type: "text",
433
+ className: "my-input",
434
+ name: 'other_business_role_name',
435
+ value: params.other_business_role_name,
436
+ onChange: function onChange(e) {
437
+ return handleBusinessRoleChange(e);
438
+ }
439
+ }))), /*#__PURE__*/_react.default.createElement("div", {
382
440
  className: "field"
383
441
  }, /*#__PURE__*/_react.default.createElement("div", {
384
442
  className: "change-password",
@@ -472,8 +530,8 @@ var ProfilePage = function ProfilePage() {
472
530
  onClick: function onClick() {
473
531
  _axios.default.get("/telegram/send_test_message.json").then(function (resp) {
474
532
  setShowTelegramResponseMessage({
475
- status: resp.data.status[0].toUpperCase() + resp.data.status.substring(1),
476
- message: resp.data.message,
533
+ status: resp.data.user.status[0].toUpperCase() + resp.data.user.status.substring(1),
534
+ message: resp.data.user.message,
477
535
  show: true
478
536
  });
479
537
  setTimeout(function () {
@@ -483,7 +541,7 @@ var ProfilePage = function ProfilePage() {
483
541
  show: false
484
542
  });
485
543
  }, 6000);
486
- showToast(resp.data);
544
+ showToast(resp.data.user);
487
545
  }).catch(function (error) {
488
546
  return alert(error);
489
547
  });
@@ -505,6 +563,5 @@ var ProfilePage = function ProfilePage() {
505
563
  handleSubmit: handleSubmit
506
564
  }));
507
565
  };
508
-
509
566
  exports.ProfilePage = ProfilePage;
510
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWdlcy9Qcm9maWxlUGFnZS9Qcm9maWxlUGFnZS50c3giXSwibmFtZXMiOlsiUHJvZmlsZVBhZ2UiLCJ0aW1lem9uZXNBcnJheSIsIm1vbWVudCIsInR6IiwibmFtZXMiLCJkYXRlVGltZUZvcm1hdE9wdGlvbnMiLCJ2YWx1ZSIsImxhYmVsIiwiZm9ybWF0IiwibW9udGgiLCJkYXkiLCJ5ZWFyIiwiaG91ciIsIm1pbnV0ZSIsImhvdXIxMiIsInRpbWV6b25lcyIsIm1hcCIsInQiLCJsb2NhbGVPcHRpb25zIiwibG9jYWxlIiwic2V0TG9jYWxlIiwiZGF0ZVRpbWVGb3JtYXQiLCJzZXREYXRlVGltZUZvcm1hdCIsInRpbWV6b25lIiwic2V0VGltZXpvbmUiLCJpbml0aWFsUGFyYW1zU3RhdGUiLCJmaXJzdF9uYW1lIiwibGFzdF9uYW1lIiwicGhvbmUiLCJlbWFpbCIsInRpbWVfem9uZSIsImRhdGVfdGltZV9mb3JtYXQiLCJ0ZWxlZ3JhbV9uYW1lIiwiaXNUZWxlZ3JhbU9wZW4iLCJzZXRJc1RlbGVncmFtT3BlbiIsInNob3dQYXNzd29yZE1vZGFsIiwic2V0U2hvd1Bhc3N3b3JkTW9kYWwiLCJzdWJtaXR0aW5nIiwic2V0U3VibWl0dGluZyIsInNob3dTdWNjZXNzTWVzc2FnZSIsInNldFNob3dTdWNjZXNzTWVzc2FnZSIsInNob3dFcnJvck1lc3NhZ2UiLCJzZXRTaG93RXJyb3JNZXNzYWdlIiwic2hvdyIsInN0YXR1cyIsIm1lc3NhZ2UiLCJzaG93VGVsZWdyYW1SZXNwb25zZU1lc3NhZ2UiLCJzZXRTaG93VGVsZWdyYW1SZXNwb25zZU1lc3NhZ2UiLCJwYXJhbXMiLCJzZXRQYXJhbXMiLCJoYW5kbGVPbkNoYW5nZSIsImUiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsInByZXZTdGF0ZSIsInRhcmdldCIsIm5hbWUiLCJnZXRQYXJhbXNXaXRoQWdncmVnYXRlZFZhbHVlcyIsIndhdGVyQXV0aG9yaXR5TmFtZSIsInN0YXRlIiwiZ2xvYmFsX2RhdGEiLCJzaG93VG9hc3QiLCJkYXRhIiwidXNlcm5hbWUiLCJlcnJvciIsInRvYXN0Iiwic3VjY2VzcyIsImkxOG4iLCJwb3NpdGlvbiIsImhhbmRsZVN1Ym1pdCIsInByZXZlbnREZWZhdWx0IiwiYXhpb3MiLCJwdXQiLCJ1c2VyIiwidGhlbiIsInJlc3AiLCJlcnJvcnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwicCIsImlubmVySFRNTCIsImNsYXNzTGlzdCIsInJlbW92ZSIsIkpTT04iLCJwYXJzZSIsImZpbmRMb2NhbGUiLCJmaW5kIiwiZmluZERhdGVUaW1lRm9ybWF0IiwiZmluZFRpbWV6b25lIiwic2V0VGltZW91dCIsImZpbmRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhcmVudCIsImNsb3Nlc3QiLCJmaW5kSW5wdXQiLCJhZGQiLCJjYXRjaCIsInV0aWxpdHlfbmFtZSIsInRva2VuIiwiY29udGVudCIsImRlZmF1bHRzIiwiaGVhZGVycyIsImNvbW1vbiIsImdldCIsImFsZXJ0IiwidW5kZWZpbmVkIiwiRGF0ZSIsInRvTG9jYWxlRGF0ZVN0cmluZyIsInRvVXBwZXJDYXNlIiwic3Vic3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRU8sSUFBTUEsV0FBVyxHQUFHLFNBQWRBLFdBQWMsR0FBTTtBQUMvQixNQUFNQyxjQUFjLEdBQUdDLHdCQUFPQyxFQUFQLENBQVVDLEtBQVYsRUFBdkI7O0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsQ0FDNUI7QUFDRUMsSUFBQUEsS0FBSyxFQUFFLElBRFQ7QUFFRUMsSUFBQUEsS0FBSyxFQUFFLGVBRlQ7QUFHRUMsSUFBQUEsTUFBTSxFQUFFO0FBQ05DLE1BQUFBLEtBQUssRUFBRSxPQUREO0FBRU5DLE1BQUFBLEdBQUcsRUFBRSxTQUZDO0FBR05DLE1BQUFBLElBQUksRUFBRSxTQUhBO0FBSU5DLE1BQUFBLElBQUksRUFBRSxTQUpBO0FBS05DLE1BQUFBLE1BQU0sRUFBRTtBQUxGO0FBSFYsR0FENEIsRUFZNUI7QUFDRVAsSUFBQUEsS0FBSyxFQUFFLElBRFQ7QUFFRUMsSUFBQUEsS0FBSyxFQUFFLFFBRlQ7QUFHRUMsSUFBQUEsTUFBTSxFQUFFO0FBQ05FLE1BQUFBLEdBQUcsRUFBRSxTQURDO0FBRU5ELE1BQUFBLEtBQUssRUFBRSxTQUZEO0FBR05FLE1BQUFBLElBQUksRUFBRSxTQUhBO0FBSU5DLE1BQUFBLElBQUksRUFBRSxTQUpBO0FBS05DLE1BQUFBLE1BQU0sRUFBRSxTQUxGO0FBTU5DLE1BQUFBLE1BQU0sRUFBRTtBQU5GO0FBSFYsR0FaNEIsQ0FBOUI7QUEwQkEsTUFBTUMsU0FBUyxHQUFHZCxjQUFjLENBQUNlLEdBQWYsQ0FBbUIsVUFBQ0MsQ0FBRCxFQUFPO0FBQzFDLFdBQU87QUFBRVgsTUFBQUEsS0FBSyxFQUFFVyxDQUFUO0FBQVlWLE1BQUFBLEtBQUssRUFBRVU7QUFBbkIsS0FBUDtBQUNELEdBRmlCLENBQWxCO0FBSUEsTUFBTUMsYUFBYSxHQUFHLENBQ3BCO0FBQUVaLElBQUFBLEtBQUssRUFBRSxJQUFUO0FBQWVDLElBQUFBLEtBQUssRUFBRTtBQUF0QixHQURvQixFQUVwQjtBQUFFRCxJQUFBQSxLQUFLLEVBQUUsT0FBVDtBQUFrQkMsSUFBQUEsS0FBSyxFQUFFO0FBQXpCLEdBRm9CLEVBR3BCO0FBQUVELElBQUFBLEtBQUssRUFBRSxJQUFUO0FBQWVDLElBQUFBLEtBQUssRUFBRTtBQUF0QixHQUhvQixFQUlwQjtBQUFFRCxJQUFBQSxLQUFLLEVBQUUsSUFBVDtBQUFlQyxJQUFBQSxLQUFLLEVBQUU7QUFBdEIsR0FKb0IsRUFLcEI7QUFBRUQsSUFBQUEsS0FBSyxFQUFFLElBQVQ7QUFBZUMsSUFBQUEsS0FBSyxFQUFFO0FBQXRCLEdBTG9CLENBQXRCOztBQVFBLGtCQUE0QixxQkFHekJXLGFBQWEsQ0FBQyxDQUFELENBSFksQ0FBNUI7QUFBQTtBQUFBLE1BQU9DLE1BQVA7QUFBQSxNQUFlQyxTQUFmOztBQUtBLG1CQUE0QyxxQkFJekNmLHFCQUFxQixDQUFDLENBQUQsQ0FKb0IsQ0FBNUM7QUFBQTtBQUFBLE1BQU9nQixjQUFQO0FBQUEsTUFBdUJDLGlCQUF2Qjs7QUFNQSxtQkFBZ0MscUJBRzdCUCxTQUFTLENBQUMsRUFBRCxDQUhvQixDQUFoQztBQUFBO0FBQUEsTUFBT1EsUUFBUDtBQUFBLE1BQWlCQyxXQUFqQjs7QUFLQSxNQUFNQyxrQkFBa0IsR0FBRztBQUN6QkMsSUFBQUEsVUFBVSxFQUFFLEVBRGE7QUFFekJDLElBQUFBLFNBQVMsRUFBRSxFQUZjO0FBR3pCQyxJQUFBQSxLQUFLLEVBQUUsRUFIa0I7QUFJekJDLElBQUFBLEtBQUssRUFBRSxFQUprQjtBQUt6QkMsSUFBQUEsU0FBUyxFQUFFLEVBTGM7QUFNekJDLElBQUFBLGdCQUFnQixFQUFFLEVBTk87QUFPekJaLElBQUFBLE1BQU0sRUFBRSxFQVBpQjtBQVF6QmEsSUFBQUEsYUFBYSxFQUFFO0FBUlUsR0FBM0I7O0FBV0EsbUJBQTRDLHFCQUFrQixLQUFsQixDQUE1QztBQUFBO0FBQUEsTUFBT0MsY0FBUDtBQUFBLE1BQXVCQyxpQkFBdkI7O0FBQ0EsbUJBQWtELHFCQUFrQixLQUFsQixDQUFsRDtBQUFBO0FBQUEsTUFBT0MsaUJBQVA7QUFBQSxNQUEwQkMsb0JBQTFCOztBQUNBLG9CQUFvQyxxQkFBa0IsS0FBbEIsQ0FBcEM7QUFBQTtBQUFBLE1BQU9DLFVBQVA7QUFBQSxNQUFtQkMsYUFBbkI7O0FBQ0Esb0JBQW9ELHFCQUFrQixLQUFsQixDQUFwRDtBQUFBO0FBQUEsTUFBT0Msa0JBQVA7QUFBQSxNQUEyQkMscUJBQTNCOztBQUNBLG9CQUFnRCxxQkFBa0IsS0FBbEIsQ0FBaEQ7QUFBQTtBQUFBLE1BQU9DLGdCQUFQO0FBQUEsTUFBeUJDLG1CQUF6Qjs7QUFDQSxvQkFDRSxxQkFJRztBQUNEQyxJQUFBQSxJQUFJLEVBQUUsS0FETDtBQUVEQyxJQUFBQSxNQUFNLEVBQUUsRUFGUDtBQUdEQyxJQUFBQSxPQUFPLEVBQUU7QUFIUixHQUpILENBREY7QUFBQTtBQUFBLE1BQU9DLDJCQUFQO0FBQUEsTUFBb0NDLDhCQUFwQzs7QUFVQSxvQkFBNEIscUJBU3pCdEIsa0JBVHlCLENBQTVCO0FBQUE7QUFBQSxNQUFPdUIsTUFBUDtBQUFBLE1BQWVDLFNBQWY7O0FBV0EsTUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixDQUFDQyxDQUFELEVBQU87QUFDNUIsUUFBSSxPQUFPQSxDQUFQLEtBQWEsUUFBakIsRUFBMkI7QUFDekIsVUFBSUEsQ0FBQyxDQUFDQyxVQUFGLENBQWEsTUFBYixDQUFKLEVBQTBCO0FBQ3hCRCxRQUFBQSxDQUFDLEdBQUdBLENBQUMsQ0FBQ0UsT0FBRixDQUFVLFNBQVYsRUFBcUIsS0FBckIsQ0FBSjtBQUNEOztBQUNESixNQUFBQSxTQUFTLENBQUMsVUFBQ0ssU0FBRDtBQUFBLDJFQUNMQSxTQURLO0FBRVIxQixVQUFBQSxLQUFLLEVBQUV1QjtBQUZDO0FBQUEsT0FBRCxDQUFUO0FBSUQsS0FSRCxNQVFPO0FBQ0wsc0JBQXdCQSxDQUFDLENBQUNJLE1BQTFCO0FBQUEsVUFBUWpELEtBQVIsYUFBUUEsS0FBUjtBQUFBLFVBQWVrRCxJQUFmLGFBQWVBLElBQWY7QUFDQVAsTUFBQUEsU0FBUyxDQUFDLFVBQUNLLFNBQUQ7QUFBQSwyRUFDTEEsU0FESyx5Q0FFUEUsSUFGTyxFQUVBbEQsS0FGQTtBQUFBLE9BQUQsQ0FBVDtBQUlEO0FBQ0YsR0FoQkQ7O0FBa0JBLE1BQU1tRCw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQWdDLEdBQU07QUFDMUMsdUVBQ0tULE1BREw7QUFFRWpCLE1BQUFBLGdCQUFnQixFQUFFVixjQUFjLENBQUNmLEtBRm5DO0FBR0VhLE1BQUFBLE1BQU0sRUFBRUEsTUFBTSxDQUFDYixLQUhqQjtBQUlFd0IsTUFBQUEsU0FBUyxFQUFFUCxRQUFRLENBQUNqQjtBQUp0QjtBQU1ELEdBUEQ7O0FBU0EsTUFBTW9ELGtCQUFrQixHQUFHLDZCQUN6QixVQUFDQyxLQUFEO0FBQUEsV0FBV0EsS0FBSyxDQUFDQyxXQUFOLENBQWtCRixrQkFBN0I7QUFBQSxHQUR5QixDQUEzQjs7QUFJQSxNQUFNRyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDQyxJQUFELEVBQVU7QUFDMUIsUUFBTUMsUUFBUSxHQUFHRCxJQUFJLENBQUNDLFFBQXRCO0FBQ0EsUUFBTUMsS0FBSyxHQUFHRixJQUFJLENBQUNFLEtBQW5COztBQUNBLFFBQUlGLElBQUksQ0FBQ2xCLE1BQUwsS0FBZ0IsU0FBcEIsRUFBK0I7QUFDN0JxQiwyQkFBTUMsT0FBTixDQUNFQyxjQUFLbEQsQ0FBTCw0Q0FBMkM2QyxJQUFJLENBQUNqQixPQUFoRCxHQUEyRDtBQUN6RGtCLFFBQUFBLFFBQVEsRUFBUkE7QUFEeUQsT0FBM0QsQ0FERixFQUlFO0FBQ0VLLFFBQUFBLFFBQVEsRUFBRTtBQURaLE9BSkY7QUFRRCxLQVRELE1BU087QUFDTEgsMkJBQU1ELEtBQU4sQ0FDRUcsY0FBS2xELENBQUwsNENBQTJDNkMsSUFBSSxDQUFDakIsT0FBaEQsR0FBMkQ7QUFDekRtQixRQUFBQSxLQUFLLEVBQUVBLEtBRGtEO0FBRXpERCxRQUFBQSxRQUFRLEVBQUVBO0FBRitDLE9BQTNELENBREYsRUFLRTtBQUNFSyxRQUFBQSxRQUFRLEVBQUU7QUFEWixPQUxGO0FBU0Q7QUFDRixHQXZCRDs7QUF5QkEsTUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ2xCLENBQUQsRUFBTztBQUMxQkEsSUFBQUEsQ0FBQyxDQUFDbUIsY0FBRjtBQUNBaEMsSUFBQUEsYUFBYSxDQUFDLElBQUQsQ0FBYjs7QUFDQWlDLG1CQUNHQyxHQURILENBQ08sV0FEUCxFQUNvQjtBQUFFQyxNQUFBQSxJQUFJLEVBQUVoQiw2QkFBNkI7QUFBckMsS0FEcEIsRUFFR2lCLElBRkgsQ0FFUSxVQUFDQyxJQUFELEVBQVU7QUFDZCxVQUFJQSxJQUFJLENBQUNiLElBQUwsQ0FBVWMsTUFBVixLQUFxQixJQUF6QixFQUErQjtBQUM3QkMsUUFBQUEsUUFBUSxDQUNMQyxnQkFESCxDQUNvQixnQkFEcEIsRUFFR0MsT0FGSCxDQUVXLFVBQUNDLENBQUQ7QUFBQSxpQkFBUUEsQ0FBQyxDQUFDQyxTQUFGLEdBQWMsRUFBdEI7QUFBQSxTQUZYO0FBSUFKLFFBQUFBLFFBQVEsQ0FDTEMsZ0JBREgsQ0FDb0IsZ0JBRHBCLEVBRUdDLE9BRkgsQ0FFVyxVQUFDQyxDQUFEO0FBQUEsaUJBQU9BLENBQUMsQ0FBQ0UsU0FBRixDQUFZQyxNQUFaLENBQW1CLGVBQW5CLENBQVA7QUFBQSxTQUZYO0FBR0EsWUFBSVYsSUFBSSxHQUFHVyxJQUFJLENBQUNDLEtBQUwsQ0FBV1YsSUFBSSxDQUFDYixJQUFMLENBQVVXLElBQXJCLENBQVg7QUFDQSxZQUFNYSxVQUFVLEdBQUdwRSxhQUFhLENBQUNxRSxJQUFkLENBQW1CLFVBQUNwQyxDQUFEO0FBQUEsaUJBQU9BLENBQUMsQ0FBQzdDLEtBQUYsS0FBWW1FLElBQUksQ0FBQ3RELE1BQXhCO0FBQUEsU0FBbkIsQ0FBbkI7QUFDQSxZQUFNcUUsa0JBQWtCLEdBQUduRixxQkFBcUIsQ0FBQ2tGLElBQXRCLENBQ3pCLFVBQUNwQyxDQUFEO0FBQUEsaUJBQU9BLENBQUMsQ0FBQzdDLEtBQUYsS0FBWW1FLElBQUksQ0FBQzFDLGdCQUF4QjtBQUFBLFNBRHlCLENBQTNCO0FBR0EsWUFBTTBELFlBQVksR0FBRzFFLFNBQVMsQ0FBQ3dFLElBQVYsQ0FDbkIsVUFBQ3BDLENBQUQ7QUFBQSxpQkFBT0EsQ0FBQyxDQUFDN0MsS0FBRixLQUFZbUUsSUFBSSxDQUFDM0MsU0FBeEI7QUFBQSxTQURtQixDQUFyQjtBQUlBbUIsUUFBQUEsU0FBUyxDQUFDd0IsSUFBRCxDQUFUO0FBQ0FyRCxRQUFBQSxTQUFTLENBQUNrRSxVQUFELENBQVQ7QUFDQWhFLFFBQUFBLGlCQUFpQixDQUFDa0Usa0JBQUQsQ0FBakI7QUFDQWhFLFFBQUFBLFdBQVcsQ0FBQ2lFLFlBQUQsQ0FBWDtBQUNBakQsUUFBQUEscUJBQXFCLENBQUMsSUFBRCxDQUFyQjtBQUNBa0QsUUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZmxELFVBQUFBLHFCQUFxQixDQUFDLEtBQUQsQ0FBckI7QUFDRCxTQUZTLEVBRVAsSUFGTyxDQUFWO0FBR0QsT0F6QkQsTUF5Qk87QUFDTHFDLFFBQUFBLFFBQVEsQ0FDTEMsZ0JBREgsQ0FDb0IsZ0JBRHBCLEVBRUdDLE9BRkgsQ0FFVyxVQUFDQyxDQUFEO0FBQUEsaUJBQVFBLENBQUMsQ0FBQ0MsU0FBRixHQUFjLEVBQXRCO0FBQUEsU0FGWDtBQUdBLFlBQUlMLE1BQU0sR0FBR0QsSUFBSSxDQUFDYixJQUFMLENBQVVjLE1BQXZCOztBQUNBLGFBQUssSUFBTVosS0FBWCxJQUFvQlksTUFBcEIsRUFBNEI7QUFDMUIsY0FBSWUsV0FBVyxHQUFHZCxRQUFRLENBQUNlLGFBQVQsdUJBQXNDNUIsS0FBdEMsUUFBbEI7QUFDQSxjQUFJNkIsTUFBTSxHQUFHRixXQUFXLENBQUVHLE9BQWIsQ0FBcUIsUUFBckIsQ0FBYjtBQUNBLGNBQUlDLFNBQVMsR0FBR0YsTUFBTSxDQUFFRCxhQUFSLENBQXNCLE9BQXRCLENBQWhCO0FBQ0FHLFVBQUFBLFNBQVMsQ0FBRWIsU0FBWCxDQUFxQmMsR0FBckIsQ0FBeUIsZUFBekI7QUFDQUgsVUFBQUEsTUFBTSxDQUFFRCxhQUFSLENBQXNCLGdCQUF0QixFQUF5Q1gsU0FBekMsR0FBcURkLGNBQUtsRCxDQUFMLHVDQUNwQitDLEtBRG9CLEVBQXJEO0FBR0Q7O0FBQ0R4QixRQUFBQSxxQkFBcUIsQ0FBQyxLQUFELENBQXJCO0FBQ0Q7O0FBRURGLE1BQUFBLGFBQWEsQ0FBQyxLQUFELENBQWI7QUFDRCxLQTlDSCxFQStDRzJELEtBL0NILENBK0NTLFVBQUNqQyxLQUFELEVBQVc7QUFDaEJ0QixNQUFBQSxtQkFBbUIsQ0FBQyxJQUFELENBQW5CO0FBQ0FGLE1BQUFBLHFCQUFxQixDQUFDLEtBQUQsQ0FBckI7QUFDQUYsTUFBQUEsYUFBYSxDQUFDLEtBQUQsQ0FBYjtBQUNBb0QsTUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZmhELFFBQUFBLG1CQUFtQixDQUFDLEtBQUQsQ0FBbkI7QUFDRCxPQUZTLEVBRVAsSUFGTyxDQUFWO0FBR0QsS0F0REg7QUF1REQsR0ExREQ7O0FBNERBLHdCQUFVLFlBQU07QUFDZCxtQ0FBZSxxQkFBZixFQUFzQztBQUNwQ3dELE1BQUFBLFlBQVksRUFBRXhDO0FBRHNCLEtBQXRDLEVBRGMsQ0FJZDs7QUFDQSxRQUFNeUMsS0FBSyxHQUFHdEIsUUFBUSxDQUFDZSxhQUFULENBQXVCLG1CQUF2QixFQUE2Q1EsT0FBM0Q7QUFDQTdCLG1CQUFNOEIsUUFBTixDQUFlQyxPQUFmLENBQXVCQyxNQUF2QixDQUE4QixjQUE5QixJQUFnREosS0FBaEQ7QUFDQTVCLG1CQUFNOEIsUUFBTixDQUFlQyxPQUFmLENBQXVCQyxNQUF2QixDQUE4QixjQUE5QixJQUFnRCxnQkFBaEQ7O0FBQ0FoQyxtQkFDR2lDLEdBREgsQ0FDTyxvQkFEUCxFQUVHOUIsSUFGSCxDQUVRLFVBQUNDLElBQUQsRUFBVTtBQUNkMUIsTUFBQUEsU0FBUyxDQUFDMEIsSUFBSSxDQUFDYixJQUFOLENBQVQ7QUFDQSxVQUFNd0IsVUFBVSxHQUFHcEUsYUFBYSxDQUFDcUUsSUFBZCxDQUNqQixVQUFDcEMsQ0FBRDtBQUFBLGVBQU9BLENBQUMsQ0FBQzdDLEtBQUYsS0FBWXFFLElBQUksQ0FBQ2IsSUFBTCxDQUFVM0MsTUFBN0I7QUFBQSxPQURpQixDQUFuQjtBQUdBLFVBQU1xRSxrQkFBa0IsR0FBR25GLHFCQUFxQixDQUFDa0YsSUFBdEIsQ0FDekIsVUFBQ3BDLENBQUQ7QUFBQSxlQUFPQSxDQUFDLENBQUM3QyxLQUFGLEtBQVlxRSxJQUFJLENBQUNiLElBQUwsQ0FBVS9CLGdCQUE3QjtBQUFBLE9BRHlCLENBQTNCO0FBR0EsVUFBTTBELFlBQVksR0FBRzFFLFNBQVMsQ0FBQ3dFLElBQVYsQ0FDbkIsVUFBQ3BDLENBQUQ7QUFBQSxlQUFPQSxDQUFDLENBQUM3QyxLQUFGLEtBQVlxRSxJQUFJLENBQUNiLElBQUwsQ0FBVWhDLFNBQTdCO0FBQUEsT0FEbUIsQ0FBckI7QUFHQVYsTUFBQUEsU0FBUyxDQUFDa0UsVUFBRCxDQUFUO0FBQ0FoRSxNQUFBQSxpQkFBaUIsQ0FBQ2tFLGtCQUFELENBQWpCO0FBQ0FoRSxNQUFBQSxXQUFXLENBQUNpRSxZQUFELENBQVg7QUFDRCxLQWhCSCxFQWlCR1EsS0FqQkgsQ0FpQlMsVUFBQ2pDLEtBQUQ7QUFBQSxhQUFXeUMsS0FBSyxDQUFDekMsS0FBRCxDQUFoQjtBQUFBLEtBakJUO0FBa0JELEdBMUJELEVBMEJHLEVBMUJIO0FBNEJBLHNCQUNFLDZCQUFDLG9CQUFELHFCQUNFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixLQUErQkcsY0FBS2xELENBQUwsQ0FBTyw0QkFBUCxDQUEvQixDQURGLGVBRUU7QUFBTSxJQUFBLE1BQU0sRUFBQyxFQUFiO0FBQWdCLElBQUEsUUFBUSxFQUFFLGtCQUFDa0MsQ0FBRDtBQUFBLGFBQU9rQixZQUFZLENBQUNsQixDQUFELENBQW5CO0FBQUE7QUFBMUIsa0JBQ0U7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLGtCQUNFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixLQUNHZ0IsY0FBS2xELENBQUwsQ0FBTyx1Q0FBUCxDQURILENBREYsZUFJRTtBQUFTLElBQUEsU0FBUyxFQUFDO0FBQW5CLGtCQUNFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixrQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsS0FDR2tELGNBQUtsRCxDQUFMLENBQU8saUNBQVAsQ0FESCxDQURGLGVBSUU7QUFDRSxJQUFBLElBQUksRUFBQyxNQURQO0FBRUUsSUFBQSxTQUFTLEVBQUMsVUFGWjtBQUdFLElBQUEsSUFBSSxFQUFFLFlBSFI7QUFJRSxJQUFBLEtBQUssRUFBRStCLE1BQU0sQ0FBQ3RCLFVBSmhCO0FBS0UsSUFBQSxRQUFRLEVBQUUsa0JBQUN5QixDQUFEO0FBQUEsYUFBT0QsY0FBYyxDQUFDQyxDQUFELENBQXJCO0FBQUE7QUFMWixJQUpGLGVBV0U7QUFBRyxJQUFBLFNBQVMsRUFBRTtBQUFkLElBWEYsQ0FERixlQWNFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixrQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsS0FDR2dCLGNBQUtsRCxDQUFMLENBQU8sZ0NBQVAsQ0FESCxDQURGLGVBSUU7QUFDRSxJQUFBLElBQUksRUFBQyxNQURQO0FBRUUsSUFBQSxTQUFTLEVBQUMsVUFGWjtBQUdFLElBQUEsSUFBSSxFQUFFLFdBSFI7QUFJRSxJQUFBLEtBQUssRUFBRStCLE1BQU0sQ0FBQ3JCLFNBSmhCO0FBS0UsSUFBQSxRQUFRLEVBQUUsa0JBQUN3QixDQUFEO0FBQUEsYUFBT0QsY0FBYyxDQUFDQyxDQUFELENBQXJCO0FBQUE7QUFMWixJQUpGLGVBV0U7QUFBRyxJQUFBLFNBQVMsRUFBRTtBQUFkLElBWEYsQ0FkRixlQTJCRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsa0JBQ0U7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLEtBQ0dnQixjQUFLbEQsQ0FBTCxDQUFPLDRCQUFQLENBREgsQ0FERixlQUlFO0FBQ0UsSUFBQSxRQUFRLEVBQUUsSUFEWjtBQUVFLElBQUEsSUFBSSxFQUFDLE1BRlA7QUFHRSxJQUFBLFNBQVMsRUFBQyxVQUhaO0FBSUUsSUFBQSxJQUFJLEVBQUUsT0FKUjtBQUtFLElBQUEsS0FBSyxFQUFFK0IsTUFBTSxDQUFDbkI7QUFMaEIsSUFKRixlQVdFO0FBQUcsSUFBQSxTQUFTLEVBQUU7QUFBZCxJQVhGLENBM0JGLGVBd0NFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixrQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsS0FDR3NDLGNBQUtsRCxDQUFMLENBQU8sNEJBQVAsQ0FESCxDQURGLGVBSUUsNkJBQUMsd0JBQUQ7QUFDRSxJQUFBLE9BQU8sRUFBRSxJQURYO0FBRUUsSUFBQSxZQUFZLEVBQUVrRCxjQUFLbEQsQ0FBTCxDQUFPLFdBQVAsQ0FGaEI7QUFHRSxJQUFBLFVBQVUsRUFBQyxhQUhiO0FBSUUsSUFBQSxjQUFjLEVBQUMsVUFKakI7QUFLRSxJQUFBLFdBQVcsRUFBQyxVQUxkO0FBTUUsSUFBQSxhQUFhLEVBQUMsZ0JBTmhCO0FBT0UsSUFBQSxLQUFLLEVBQUUrQixNQUFNLENBQUNwQixLQVBoQjtBQVFFLElBQUEsWUFBWSxNQVJkO0FBU0UsSUFBQSxpQkFBaUIsRUFBRXVDLGNBQUtsRCxDQUFMLENBQU8sUUFBUCxDQVRyQjtBQVVFLElBQUEsbUJBQW1CLEVBQUUsS0FWdkI7QUFXRSxJQUFBLFFBQVEsRUFBRSxrQkFBQ1gsS0FBRCxFQUFXO0FBQ25CNEMsTUFBQUEsY0FBYyxDQUFDNUMsS0FBRCxDQUFkO0FBQ0QsS0FiSDtBQWNFLElBQUEsVUFBVSxFQUFFO0FBQUVrRCxNQUFBQSxJQUFJLEVBQUU7QUFBUjtBQWRkLElBSkYsZUFvQkU7QUFBRyxJQUFBLFNBQVMsRUFBRTtBQUFkLElBcEJGLENBeENGLGVBOERFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixrQkFDRTtBQUNFLElBQUEsU0FBUyxFQUFDLGlCQURaO0FBRUUsSUFBQSxPQUFPLEVBQUU7QUFBQSxhQUFNcEIsb0JBQW9CLENBQUMsSUFBRCxDQUExQjtBQUFBO0FBRlgsa0JBSUUsNkJBQUMsbUJBQUQ7QUFBUSxJQUFBLEtBQUssRUFBQyxNQUFkO0FBQXFCLElBQUEsTUFBTSxFQUFDLE1BQTVCO0FBQW1DLElBQUEsSUFBSSxFQUFDO0FBQXhDLElBSkYsRUFLRyxJQUxILEVBTUcrQixjQUFLbEQsQ0FBTCxDQUFPLHNDQUFQLENBTkgsQ0FERixDQTlERixDQUpGLGVBNkVFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixLQUF3QmtELGNBQUtsRCxDQUFMLENBQU8sK0JBQVAsQ0FBeEIsQ0E3RUYsZUE4RUU7QUFBUyxJQUFBLFNBQVMsRUFBQztBQUFuQixrQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsa0JBQ0U7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLEtBQ0drRCxjQUFLbEQsQ0FBTCxDQUFPLGdDQUFQLENBREgsTUFERixlQUlFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixrQkFDRSw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxRQUFRLEVBQUVPLFdBRFo7QUFFRSxJQUFBLEtBQUssRUFBRUQsUUFGVDtBQUdFLElBQUEsT0FBTyxFQUFFUixTQUhYO0FBSUUsSUFBQSxlQUFlO0FBSmpCLElBREYsQ0FKRixDQURGLGVBY0U7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLGtCQUNFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixLQUNHb0QsY0FBS2xELENBQUwsQ0FBTyx1Q0FBUCxDQURILE1BREYsZUFJRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsa0JBQ0UsNkJBQUMsY0FBRDtBQUNFLElBQUEsT0FBTyxFQUFFWixxQkFEWDtBQUVFLElBQUEsS0FBSyxFQUFFZ0IsY0FGVDtBQUdFLElBQUEsUUFBUSxFQUFFQyxpQkFIWjtBQUlFLElBQUEsZUFBZTtBQUpqQixJQURGLENBSkYsZUFZRTtBQUFLLElBQUEsU0FBUyxFQUFFO0FBQWhCLEtBQ0dELGNBQWMsS0FBS3FGLFNBQW5CLElBQ0MsSUFBSUMsSUFBSixHQUFXQyxrQkFBWCxDQUE4QixPQUE5QixFQUF1Q3ZGLGNBQWMsQ0FBQ2IsTUFBdEQsQ0FGSixDQVpGLENBZEYsZUErQkU7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLGtCQUNFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixLQUNHMkQsY0FBS2xELENBQUwsQ0FBTywrQkFBUCxDQURILE1BREYsZUFJRTtBQUFLLElBQUEsU0FBUyxFQUFFO0FBQWhCLGtCQUNFLDZCQUFDLGNBQUQ7QUFDRSxJQUFBLE9BQU8sRUFBRUMsYUFEWDtBQUVFLElBQUEsS0FBSyxFQUFFQyxNQUZUO0FBR0UsSUFBQSxRQUFRLEVBQUVDLFNBSFo7QUFJRSxJQUFBLGVBQWU7QUFKakIsSUFERixDQUpGLENBL0JGLGVBNENFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixLQUNHNEIsTUFBTSxDQUFDaEIsYUFBUCxLQUF5QixFQUF6QixpQkFDQztBQUFHLElBQUEsU0FBUyxFQUFDLFVBQWI7QUFBd0IsSUFBQSxPQUFPLEVBQUU7QUFBQSxhQUFNRSxpQkFBaUIsQ0FBQyxJQUFELENBQXZCO0FBQUE7QUFBakMsS0FDR2lDLGNBQUtsRCxDQUFMLENBQU8sMENBQVAsQ0FESCxDQUZKLEVBTUcrQixNQUFNLENBQUNoQixhQUFQLEtBQXlCLEVBQXpCLGlCQUNDLHlFQUNFO0FBQUssSUFBQSxTQUFTLEVBQUM7QUFBZixrQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsS0FDR21DLGNBQUtsRCxDQUFMLENBQU8sb0NBQVAsQ0FESCxlQUVFO0FBQ0UsSUFBQSxTQUFTLEVBQUMsT0FEWjtBQUVFLElBQUEsT0FBTyxFQUFFO0FBQUEsYUFBTWlCLGlCQUFpQixDQUFDLElBQUQsQ0FBdkI7QUFBQTtBQUZYLGtCQUlFLDZCQUFDLG1CQUFEO0FBQVEsSUFBQSxLQUFLLEVBQUMsTUFBZDtBQUFxQixJQUFBLE1BQU0sRUFBQyxNQUE1QjtBQUFtQyxJQUFBLElBQUksRUFBQztBQUF4QyxJQUpGLEVBSXVELEdBSnZELEVBS0dpQyxjQUFLbEQsQ0FBTCxDQUFPLGtDQUFQLENBTEgsQ0FGRixDQURGLGVBV0U7QUFBSyxJQUFBLFNBQVMsRUFBRTtBQUFoQixrQkFDRTtBQUNFLElBQUEsUUFBUSxFQUFFLElBRFo7QUFFRSxJQUFBLElBQUksRUFBQyxNQUZQO0FBR0UsSUFBQSxTQUFTLEVBQUMsVUFIWjtBQUlFLElBQUEsSUFBSSxFQUFFLGVBSlI7QUFLRSxJQUFBLEtBQUssRUFBRStCLE1BQU0sQ0FBQ2hCO0FBTGhCLElBREYsZUFRRTtBQUNFLElBQUEsU0FBUyxFQUFFLHdDQURiO0FBRUUsSUFBQSxPQUFPLEVBQUUsaUJBQUNtQixDQUFELEVBQU87QUFDZEYsTUFBQUEsU0FBUyxDQUFDLFVBQUNLLFNBQUQ7QUFBQSwyRUFDTEEsU0FESztBQUVSdEIsVUFBQUEsYUFBYSxFQUFFO0FBRlA7QUFBQSxPQUFELENBQVQ7QUFJRDtBQVBILGtCQVNFLDZCQUFDLHNCQUFELE9BVEYsQ0FSRixDQVhGLGVBK0JFO0FBQUcsSUFBQSxTQUFTLEVBQUU7QUFBZCxJQS9CRixDQURGLGVBa0NFLHVEQUNFO0FBQ0UsSUFBQSxTQUFTLEVBQUUsZUFEYjtBQUVFLElBQUEsT0FBTyxFQUFFLG1CQUFNO0FBQ2J1QyxxQkFDR2lDLEdBREgscUNBRUc5QixJQUZILENBRVEsVUFBQ0MsSUFBRCxFQUFVO0FBQ2Q1QixRQUFBQSw4QkFBOEIsQ0FBQztBQUM3QkgsVUFBQUEsTUFBTSxFQUNKK0IsSUFBSSxDQUFDYixJQUFMLENBQVVsQixNQUFWLENBQWlCLENBQWpCLEVBQW9CaUUsV0FBcEIsS0FDQWxDLElBQUksQ0FBQ2IsSUFBTCxDQUFVbEIsTUFBVixDQUFpQmtFLFNBQWpCLENBQTJCLENBQTNCLENBSDJCO0FBSTdCakUsVUFBQUEsT0FBTyxFQUFFOEIsSUFBSSxDQUFDYixJQUFMLENBQVVqQixPQUpVO0FBSzdCRixVQUFBQSxJQUFJLEVBQUU7QUFMdUIsU0FBRCxDQUE5QjtBQU9BK0MsUUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZjNDLFVBQUFBLDhCQUE4QixDQUFDO0FBQzdCSCxZQUFBQSxNQUFNLEVBQUUsRUFEcUI7QUFFN0JDLFlBQUFBLE9BQU8sRUFBRSxFQUZvQjtBQUc3QkYsWUFBQUEsSUFBSSxFQUFFO0FBSHVCLFdBQUQsQ0FBOUI7QUFLRCxTQU5TLEVBTVAsSUFOTyxDQUFWO0FBT0FrQixRQUFBQSxTQUFTLENBQUNjLElBQUksQ0FBQ2IsSUFBTixDQUFUO0FBQ0QsT0FsQkgsRUFtQkdtQyxLQW5CSCxDQW1CUyxVQUFDakMsS0FBRDtBQUFBLGVBQVd5QyxLQUFLLENBQUN6QyxLQUFELENBQWhCO0FBQUEsT0FuQlQ7QUFvQkQ7QUF2QkgsS0F5QkcsQ0FBQ2xCLDJCQUEyQixDQUFDSCxJQUE3QixJQUNDd0IsY0FBS2xELENBQUwsQ0FBTyw0Q0FBUCxDQTFCSixFQTJCRzZCLDJCQUEyQixDQUFDSCxJQUE1QixJQUNDRywyQkFBMkIsQ0FBQ0YsTUE1QmhDLENBREYsQ0FsQ0YsQ0FQSixDQTVDRixDQTlFRixlQXVNRTtBQUFRLElBQUEsSUFBSSxFQUFFLFFBQWQ7QUFBd0IsSUFBQSxTQUFTLEVBQUUsTUFBbkM7QUFBMkMsSUFBQSxRQUFRLEVBQUVQO0FBQXJELEtBQ0csQ0FBQ0EsVUFBRCxJQUNDLENBQUNFLGtCQURGLElBRUMsQ0FBQ0UsZ0JBRkYsSUFHQzBCLGNBQUtsRCxDQUFMLENBQU8sNkJBQVAsQ0FKSixFQUtHb0IsVUFBVSxJQUNULENBQUNFLGtCQURGLElBRUMsQ0FBQ0UsZ0JBRkYsSUFHQzBCLGNBQUtsRCxDQUFMLENBQU8saUNBQVAsQ0FSSixFQVNHc0Isa0JBQWtCLElBQUk0QixjQUFLbEQsQ0FBTCxDQUFPLDhCQUFQLENBVHpCLEVBVUd3QixnQkFBZ0IsSUFBSTBCLGNBQUtsRCxDQUFMLENBQU8sNEJBQVAsQ0FWdkIsQ0F2TUYsQ0FERixDQUZGLEVBeU5Ha0IsaUJBQWlCLGlCQUNoQiw2QkFBQyw0QkFBRDtBQUNFLElBQUEsS0FBSyxFQUFFO0FBQUEsYUFBTUMsb0JBQW9CLENBQUMsS0FBRCxDQUExQjtBQUFBLEtBRFQ7QUFFRSxJQUFBLElBQUksRUFBRSxnQkFBTSxDQUFFO0FBRmhCLElBMU5KLEVBK05HSCxjQUFjLGlCQUNiLDZCQUFDLDRCQUFEO0FBQ0UsSUFBQSxLQUFLLEVBQUU7QUFBQSxhQUFNQyxpQkFBaUIsQ0FBQyxLQUFELENBQXZCO0FBQUEsS0FEVDtBQUVFLElBQUEsY0FBYyxFQUFFZ0IsY0FGbEI7QUFHRSxJQUFBLFlBQVksRUFBRW1CO0FBSGhCLElBaE9KLENBREY7QUF5T0QsQ0F0ZE0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ3NyYy9jb21wb25lbnRzL0N1c3RvbUlucHV0cy9TZWxlY3QvU2VsZWN0JztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBQYXNzd29yZE1vZGFsIH0gZnJvbSAnLi9QYXNzd29yZE1vZGFsL1Bhc3N3b3JkTW9kYWwnO1xuaW1wb3J0IHsgUmVhY3RDb21wb25lbnQgYXMgUGVuU3ZnIH0gZnJvbSAnLi9wZW4uc3ZnJztcbmltcG9ydCB7IFJlYWN0Q29tcG9uZW50IGFzIENhbmNlbCB9IGZyb20gJy4vY2FuY2VsLnN2Zyc7XG5pbXBvcnQgUGhvbmVJbnB1dCBmcm9tICdyZWFjdC1waG9uZS1pbnB1dC0yJztcbmltcG9ydCAncmVhY3QtcGhvbmUtaW5wdXQtMi9saWIvc3R5bGUuY3NzJztcbmltcG9ydCB7IFRlbGVncmFtTW9kYWwgfSBmcm9tICcuL1RlbGVncmFtTW9kYWwvVGVsZWdyYW1Nb2RhbCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAnLi9Db250YWluZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgYW5hbHl0aWNzVHJhY2sgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvQW5hbHl0aWNzJztcbmltcG9ydCB7IHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdyZWFjdC10b2FzdGlmeSc7XG5cbmV4cG9ydCBjb25zdCBQcm9maWxlUGFnZSA9ICgpID0+IHtcbiAgY29uc3QgdGltZXpvbmVzQXJyYXkgPSBtb21lbnQudHoubmFtZXMoKTtcbiAgY29uc3QgZGF0ZVRpbWVGb3JtYXRPcHRpb25zID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiAndXMnLFxuICAgICAgbGFiZWw6ICdVbml0ZWQgU3RhdGVzJyxcbiAgICAgIGZvcm1hdDoge1xuICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICBtaW51dGU6ICdudW1lcmljJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ2V1JyxcbiAgICAgIGxhYmVsOiAnRXVyb3BlJyxcbiAgICAgIGZvcm1hdDoge1xuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IHRpbWV6b25lcyA9IHRpbWV6b25lc0FycmF5Lm1hcCgodCkgPT4ge1xuICAgIHJldHVybiB7IHZhbHVlOiB0LCBsYWJlbDogdCB9O1xuICB9KTtcblxuICBjb25zdCBsb2NhbGVPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6ICdlbicsIGxhYmVsOiAnRW5nbGlzaCcgfSxcbiAgICB7IHZhbHVlOiAnZW5fdWsnLCBsYWJlbDogJ0VuZ2xpc2ggKFVLKScgfSxcbiAgICB7IHZhbHVlOiAnaGUnLCBsYWJlbDogJ9ei15HXqNeZ16onIH0sXG4gICAgeyB2YWx1ZTogJ2ZyJywgbGFiZWw6ICdGcmFuw6dhaXMnIH0sXG4gICAgeyB2YWx1ZTogJ2l0JywgbGFiZWw6ICdJdGFsaWFubycgfSxcbiAgXTtcblxuICBjb25zdCBbbG9jYWxlLCBzZXRMb2NhbGVdID0gdXNlU3RhdGU8e1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfT4obG9jYWxlT3B0aW9uc1swXSk7XG5cbiAgY29uc3QgW2RhdGVUaW1lRm9ybWF0LCBzZXREYXRlVGltZUZvcm1hdF0gPSB1c2VTdGF0ZTx7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGZvcm1hdDogb2JqZWN0O1xuICB9PihkYXRlVGltZUZvcm1hdE9wdGlvbnNbMF0pO1xuXG4gIGNvbnN0IFt0aW1lem9uZSwgc2V0VGltZXpvbmVdID0gdXNlU3RhdGU8e1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfT4odGltZXpvbmVzWzIwXSk7XG5cbiAgY29uc3QgaW5pdGlhbFBhcmFtc1N0YXRlID0ge1xuICAgIGZpcnN0X25hbWU6ICcnLFxuICAgIGxhc3RfbmFtZTogJycsXG4gICAgcGhvbmU6ICcnLFxuICAgIGVtYWlsOiAnJyxcbiAgICB0aW1lX3pvbmU6ICcnLFxuICAgIGRhdGVfdGltZV9mb3JtYXQ6ICcnLFxuICAgIGxvY2FsZTogJycsXG4gICAgdGVsZWdyYW1fbmFtZTogJycsXG4gIH07XG5cbiAgY29uc3QgW2lzVGVsZWdyYW1PcGVuLCBzZXRJc1RlbGVncmFtT3Blbl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzaG93UGFzc3dvcmRNb2RhbCwgc2V0U2hvd1Bhc3N3b3JkTW9kYWxdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbc3VibWl0dGluZywgc2V0U3VibWl0dGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzaG93U3VjY2Vzc01lc3NhZ2UsIHNldFNob3dTdWNjZXNzTWVzc2FnZV0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzaG93RXJyb3JNZXNzYWdlLCBzZXRTaG93RXJyb3JNZXNzYWdlXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3Nob3dUZWxlZ3JhbVJlc3BvbnNlTWVzc2FnZSwgc2V0U2hvd1RlbGVncmFtUmVzcG9uc2VNZXNzYWdlXSA9XG4gICAgdXNlU3RhdGU8e1xuICAgICAgc2hvdzogYm9vbGVhbjtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIH0+KHtcbiAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgc3RhdHVzOiAnJyxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgIH0pO1xuICBjb25zdCBbcGFyYW1zLCBzZXRQYXJhbXNdID0gdXNlU3RhdGU8e1xuICAgIGZpcnN0X25hbWU6IHN0cmluZztcbiAgICBsYXN0X25hbWU6IHN0cmluZztcbiAgICBwaG9uZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgdGltZV96b25lOiBzdHJpbmc7XG4gICAgZGF0ZV90aW1lX2Zvcm1hdDogc3RyaW5nO1xuICAgIGxvY2FsZTogc3RyaW5nO1xuICAgIHRlbGVncmFtX25hbWU6IHN0cmluZztcbiAgfT4oaW5pdGlhbFBhcmFtc1N0YXRlKTtcblxuICBjb25zdCBoYW5kbGVPbkNoYW5nZSA9IChlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGUuc3RhcnRzV2l0aCgnOTcyMCcpKSB7XG4gICAgICAgIGUgPSBlLnJlcGxhY2UoLyg5NzIwKS9nLCAnOTcyJyk7XG4gICAgICB9XG4gICAgICBzZXRQYXJhbXMoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICBwaG9uZTogZSxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbmFtZSB9ID0gZS50YXJnZXQ7XG4gICAgICBzZXRQYXJhbXMoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICBbbmFtZV06IHZhbHVlLFxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRQYXJhbXNXaXRoQWdncmVnYXRlZFZhbHVlcyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgZGF0ZV90aW1lX2Zvcm1hdDogZGF0ZVRpbWVGb3JtYXQudmFsdWUsXG4gICAgICBsb2NhbGU6IGxvY2FsZS52YWx1ZSxcbiAgICAgIHRpbWVfem9uZTogdGltZXpvbmUudmFsdWUsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCB3YXRlckF1dGhvcml0eU5hbWUgPSB1c2VTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLmdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5TmFtZSxcbiAgKTtcblxuICBjb25zdCBzaG93VG9hc3QgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHVzZXJuYW1lID0gZGF0YS51c2VybmFtZTtcbiAgICBjb25zdCBlcnJvciA9IGRhdGEuZXJyb3I7XG4gICAgaWYgKGRhdGEuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgIGkxOG4udChgbXlfcHJvZmlsZV90YWIudGVsZWdyYW1fbWVzc2FnZXMuJHtkYXRhLm1lc3NhZ2V9YCwge1xuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIHBvc2l0aW9uOiAndG9wLWNlbnRlcicsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b2FzdC5lcnJvcihcbiAgICAgICAgaTE4bi50KGBteV9wcm9maWxlX3RhYi50ZWxlZ3JhbV9tZXNzYWdlcy4ke2RhdGEubWVzc2FnZX1gLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcC1jZW50ZXInLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgc2V0U3VibWl0dGluZyh0cnVlKTtcbiAgICBheGlvc1xuICAgICAgLnB1dCgnL3Byb2ZpbGVzJywgeyB1c2VyOiBnZXRQYXJhbXNXaXRoQWdncmVnYXRlZFZhbHVlcygpIH0pXG4gICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICBpZiAocmVzcC5kYXRhLmVycm9ycyA9PT0gbnVsbCkge1xuICAgICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbCgnLmVycm9yLW1lc3NhZ2UnKVxuICAgICAgICAgICAgLmZvckVhY2goKHApID0+IChwLmlubmVySFRNTCA9ICcnKSk7XG5cbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbnZhbGlkLWZpZWxkJylcbiAgICAgICAgICAgIC5mb3JFYWNoKChwKSA9PiBwLmNsYXNzTGlzdC5yZW1vdmUoJ2ludmFsaWQtZmllbGQnKSk7XG4gICAgICAgICAgbGV0IHVzZXIgPSBKU09OLnBhcnNlKHJlc3AuZGF0YS51c2VyKTtcbiAgICAgICAgICBjb25zdCBmaW5kTG9jYWxlID0gbG9jYWxlT3B0aW9ucy5maW5kKChlKSA9PiBlLnZhbHVlID09PSB1c2VyLmxvY2FsZSk7XG4gICAgICAgICAgY29uc3QgZmluZERhdGVUaW1lRm9ybWF0ID0gZGF0ZVRpbWVGb3JtYXRPcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAoZSkgPT4gZS52YWx1ZSA9PT0gdXNlci5kYXRlX3RpbWVfZm9ybWF0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZmluZFRpbWV6b25lID0gdGltZXpvbmVzLmZpbmQoXG4gICAgICAgICAgICAoZSkgPT4gZS52YWx1ZSA9PT0gdXNlci50aW1lX3pvbmUsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHNldFBhcmFtcyh1c2VyKTtcbiAgICAgICAgICBzZXRMb2NhbGUoZmluZExvY2FsZSEpO1xuICAgICAgICAgIHNldERhdGVUaW1lRm9ybWF0KGZpbmREYXRlVGltZUZvcm1hdCEpO1xuICAgICAgICAgIHNldFRpbWV6b25lKGZpbmRUaW1lem9uZSEpO1xuICAgICAgICAgIHNldFNob3dTdWNjZXNzTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dTdWNjZXNzTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgfSwgNjAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCcuZXJyb3ItbWVzc2FnZScpXG4gICAgICAgICAgICAuZm9yRWFjaCgocCkgPT4gKHAuaW5uZXJIVE1MID0gJycpKTtcbiAgICAgICAgICBsZXQgZXJyb3JzID0gcmVzcC5kYXRhLmVycm9ycztcbiAgICAgICAgICBmb3IgKGNvbnN0IGVycm9yIGluIGVycm9ycykge1xuICAgICAgICAgICAgbGV0IGZpbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbbmFtZT0nJHtlcnJvcn0nXWApO1xuICAgICAgICAgICAgbGV0IHBhcmVudCA9IGZpbmRFbGVtZW50IS5jbG9zZXN0KCcuZmllbGQnKTtcbiAgICAgICAgICAgIGxldCBmaW5kSW5wdXQgPSBwYXJlbnQhLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgICAgICBmaW5kSW5wdXQhLmNsYXNzTGlzdC5hZGQoJ2ludmFsaWQtZmllbGQnKTtcbiAgICAgICAgICAgIHBhcmVudCEucXVlcnlTZWxlY3RvcignLmVycm9yLW1lc3NhZ2UnKSEuaW5uZXJIVE1MID0gaTE4bi50KFxuICAgICAgICAgICAgICBgZGFzaGJvYXJkX3YyLnByb2ZpbGUuZXJyb3JzLiR7ZXJyb3J9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFNob3dTdWNjZXNzTWVzc2FnZShmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRTdWJtaXR0aW5nKGZhbHNlKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHNldFNob3dFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgIHNldFNob3dTdWNjZXNzTWVzc2FnZShmYWxzZSk7XG4gICAgICAgIHNldFN1Ym1pdHRpbmcoZmFsc2UpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRTaG93RXJyb3JNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgfSwgNjAwMCk7XG4gICAgICB9KTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFuYWx5dGljc1RyYWNrKCdWaWV3ZWQgUHJvZmlsZSBQYWdlJywge1xuICAgICAgdXRpbGl0eV9uYW1lOiB3YXRlckF1dGhvcml0eU5hbWUsXG4gICAgfSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHRva2VuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25hbWU9Y3NyZi10b2tlbl0nKSEuY29udGVudDtcbiAgICBheGlvcy5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vblsnWC1DU1JGLVRPS0VOJ10gPSB0b2tlbjtcbiAgICBheGlvcy5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vblsnQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanMnO1xuICAgIGF4aW9zXG4gICAgICAuZ2V0KCcvcHJvZmlsZXMvcmVzb3VyY2UnKVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgc2V0UGFyYW1zKHJlc3AuZGF0YSk7XG4gICAgICAgIGNvbnN0IGZpbmRMb2NhbGUgPSBsb2NhbGVPcHRpb25zLmZpbmQoXG4gICAgICAgICAgKGUpID0+IGUudmFsdWUgPT09IHJlc3AuZGF0YS5sb2NhbGUsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZpbmREYXRlVGltZUZvcm1hdCA9IGRhdGVUaW1lRm9ybWF0T3B0aW9ucy5maW5kKFxuICAgICAgICAgIChlKSA9PiBlLnZhbHVlID09PSByZXNwLmRhdGEuZGF0ZV90aW1lX2Zvcm1hdCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZmluZFRpbWV6b25lID0gdGltZXpvbmVzLmZpbmQoXG4gICAgICAgICAgKGUpID0+IGUudmFsdWUgPT09IHJlc3AuZGF0YS50aW1lX3pvbmUsXG4gICAgICAgICk7XG4gICAgICAgIHNldExvY2FsZShmaW5kTG9jYWxlISk7XG4gICAgICAgIHNldERhdGVUaW1lRm9ybWF0KGZpbmREYXRlVGltZUZvcm1hdCEpO1xuICAgICAgICBzZXRUaW1lem9uZShmaW5kVGltZXpvbmUhKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBhbGVydChlcnJvcikpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoZWFkZXItdGl0bGVcIj57aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS50aXRsZScpfTwvZGl2PlxuICAgICAgPGZvcm0gYWN0aW9uPVwiXCIgb25TdWJtaXQ9eyhlKSA9PiBoYW5kbGVTdWJtaXQoZSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5wZXJzb25hbC1kZXRhaWxzJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicGVyc29uYWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmZpcnN0X25hbWUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgbmFtZT17J2ZpcnN0X25hbWUnfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtwYXJhbXMuZmlyc3RfbmFtZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZU9uQ2hhbmdlKGUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9eydlcnJvci1tZXNzYWdlJ30+PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpZWxkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5sYXN0X25hbWUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgbmFtZT17J2xhc3RfbmFtZSd9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3BhcmFtcy5sYXN0X25hbWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVPbkNoYW5nZShlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXsnZXJyb3ItbWVzc2FnZSd9PjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZCBmaWVsZC0tcmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmVtYWlsJyl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICByZWFkT25seT17dHJ1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXktaW5wdXRcIlxuICAgICAgICAgICAgICAgIG5hbWU9eydlbWFpbCd9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3BhcmFtcy5lbWFpbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXsnZXJyb3ItbWVzc2FnZSd9PjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUucGhvbmUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxQaG9uZUlucHV0XG4gICAgICAgICAgICAgICAgY291bnRyeT17J2lsJ31cbiAgICAgICAgICAgICAgICBsb2NhbGl6YXRpb249e2kxOG4udCgnY291bnRyaWVzJyl9XG4gICAgICAgICAgICAgICAgaW5wdXRDbGFzcz1cInBob25lLWlucHV0XCJcbiAgICAgICAgICAgICAgICBjb250YWluZXJDbGFzcz1cIm15LXBob25lXCJcbiAgICAgICAgICAgICAgICBidXR0b25DbGFzcz1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBkcm9wZG93bkNsYXNzPVwicGhvbmUtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtwYXJhbXMucGhvbmV9XG4gICAgICAgICAgICAgICAgZW5hYmxlU2VhcmNoXG4gICAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9e2kxOG4udCgnc2VhcmNoJyl9XG4gICAgICAgICAgICAgICAgY291bnRyeUNvZGVFZGl0YWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaGFuZGxlT25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17eyBuYW1lOiAncGhvbmUnIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17J2Vycm9yLW1lc3NhZ2UnfT48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImNoYW5nZS1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1Bhc3N3b3JkTW9kYWwodHJ1ZSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGVuU3ZnIHdpZHRoPVwiMTJweFwiIGhlaWdodD1cIjEycHhcIiBmaWxsPVwiI2YwMTM0Y1wiIC8+XG4gICAgICAgICAgICAgICAgeycgICd9XG4gICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUuY2hhbmdlLXBhc3N3b3JkJyl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj57aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5zZXR0aW5ncycpfTwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInNldHRpbmdzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpZWxkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS50aW1lLXpvbmUnKX0qXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm15LWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgc2V0VmFsdWU9e3NldFRpbWV6b25lfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RpbWV6b25lfVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dGltZXpvbmVzfVxuICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dFdpZHRoXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmRhdGUtdGltZS1mb3JtYXQnKX0qXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm15LWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZGF0ZVRpbWVGb3JtYXRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2RhdGVUaW1lRm9ybWF0fVxuICAgICAgICAgICAgICAgICAgc2V0VmFsdWU9e3NldERhdGVUaW1lRm9ybWF0fVxuICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dFdpZHRoXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnZGF0ZS10aW1lLWZvcm1hdCd9PlxuICAgICAgICAgICAgICAgIHtkYXRlVGltZUZvcm1hdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCBkYXRlVGltZUZvcm1hdC5mb3JtYXQpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUubGFuZ3VhZ2UnKX0qXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J215LWlucHV0J30+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17bG9jYWxlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICBzZXRWYWx1ZT17c2V0TG9jYWxlfVxuICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dFdpZHRoXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGQgZmllbGQtLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAge3BhcmFtcy50ZWxlZ3JhbV9uYW1lID09PSAnJyAmJiAoXG4gICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwidGVsZWdyYW1cIiBvbkNsaWNrPXsoKSA9PiBzZXRJc1RlbGVncmFtT3Blbih0cnVlKX0+XG4gICAgICAgICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5jb25uZWN0LXRvLXRlbGVncmFtJyl9XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7cGFyYW1zLnRlbGVncmFtX25hbWUgIT09ICcnICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUudGVsZWdyYW1fbmFtZScpfVxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzVGVsZWdyYW1PcGVuKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQZW5Tdmcgd2lkdGg9XCIxMnB4XCIgaGVpZ2h0PVwiMTJweFwiIGZpbGw9XCIjZjAxMzRjXCIgLz57JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUuY2hhbmdlLW5hbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsndGVsZWdyYW0tZXhpc3RpbmctaW5wdXQnfT5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXktaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17J3RlbGVncmFtX25hbWUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BhcmFtcy50ZWxlZ3JhbV9uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsndGVsZWdyYW0tZXhpc3RpbmctaW5wdXRfX2NhbmNlbC1idXR0b24nfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFyYW1zKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbGVncmFtX25hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDYW5jZWwgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17J2Vycm9yLW1lc3NhZ2UnfT48L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsndGVsZWdyYW0gb3Blbid9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldChgL3RlbGVncmFtL3NlbmRfdGVzdF9tZXNzYWdlLmpzb25gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dUZWxlZ3JhbVJlc3BvbnNlTWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YS5zdGF0dXNbMF0udG9VcHBlckNhc2UoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YS5zdGF0dXMuc3Vic3RyaW5nKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzcC5kYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd1RlbGVncmFtUmVzcG9uc2VNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNjAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RvYXN0KHJlc3AuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGFsZXJ0KGVycm9yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHshc2hvd1RlbGVncmFtUmVzcG9uc2VNZXNzYWdlLnNob3cgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUuc2VuZF90ZWxlZ3JhbV9tZXNzYWdlJyl9XG4gICAgICAgICAgICAgICAgICAgICAge3Nob3dUZWxlZ3JhbVJlc3BvbnNlTWVzc2FnZS5zaG93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93VGVsZWdyYW1SZXNwb25zZU1lc3NhZ2Uuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9eydzdWJtaXQnfSBjbGFzc05hbWU9eydzYXZlJ30gZGlzYWJsZWQ9e3N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgeyFzdWJtaXR0aW5nICYmXG4gICAgICAgICAgICAgICFzaG93U3VjY2Vzc01lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgIXNob3dFcnJvck1lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgaTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5zdWJtaXQnKX1cbiAgICAgICAgICAgIHtzdWJtaXR0aW5nICYmXG4gICAgICAgICAgICAgICFzaG93U3VjY2Vzc01lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgIXNob3dFcnJvck1lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgaTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5zdWJtaXR0aW5nJyl9XG4gICAgICAgICAgICB7c2hvd1N1Y2Nlc3NNZXNzYWdlICYmIGkxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUuc3VjY2VzcycpfVxuICAgICAgICAgICAge3Nob3dFcnJvck1lc3NhZ2UgJiYgaTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5lcnJvcicpfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cblxuICAgICAge3Nob3dQYXNzd29yZE1vZGFsICYmIChcbiAgICAgICAgPFBhc3N3b3JkTW9kYWxcbiAgICAgICAgICBjbG9zZT17KCkgPT4gc2V0U2hvd1Bhc3N3b3JkTW9kYWwoZmFsc2UpfVxuICAgICAgICAgIHNhdmU9eygpID0+IHt9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtpc1RlbGVncmFtT3BlbiAmJiAoXG4gICAgICAgIDxUZWxlZ3JhbU1vZGFsXG4gICAgICAgICAgY2xvc2U9eygpID0+IHNldElzVGVsZWdyYW1PcGVuKGZhbHNlKX1cbiAgICAgICAgICBoYW5kbGVPbkNoYW5nZT17aGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgaGFuZGxlU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvQ29udGFpbmVyPlxuICApO1xufTtcbiJdfQ==
567
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfU2VsZWN0IiwiX2kxOG4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1Bhc3N3b3JkTW9kYWwiLCJfcGVuIiwiX2NhbmNlbCIsIl9yZWFjdFBob25lSW5wdXQiLCJfVGVsZWdyYW1Nb2RhbCIsIl9heGlvcyIsIl9Db250YWluZXIiLCJfbW9tZW50VGltZXpvbmUiLCJfQW5hbHl0aWNzIiwiX3JlYWN0UmVkdXgiLCJfcmVhY3RUb2FzdGlmeSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiUHJvZmlsZVBhZ2UiLCJ0aW1lem9uZXNBcnJheSIsIm1vbWVudCIsInR6IiwibmFtZXMiLCJkYXRlVGltZUZvcm1hdE9wdGlvbnMiLCJ2YWx1ZSIsImxhYmVsIiwiZm9ybWF0IiwibW9udGgiLCJkYXkiLCJ5ZWFyIiwiaG91ciIsIm1pbnV0ZSIsImhvdXIxMiIsInRpbWV6b25lcyIsIm1hcCIsInQiLCJsb2NhbGVPcHRpb25zIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwibG9jYWxlIiwic2V0TG9jYWxlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJkYXRlVGltZUZvcm1hdCIsInNldERhdGVUaW1lRm9ybWF0IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0aW1lem9uZSIsInNldFRpbWV6b25lIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJkZXBhcnRtZW50cyIsInNldERlcGFydG1lbnRzIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwiYnVzaW5lc3NSb2xlcyIsInNldEJ1c2luZXNzUm9sZXMiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiZGVwYXJ0bWVudCIsInNldERlcGFydG1lbnQiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiYnVzaW5lc3NSb2xlIiwic2V0QnVzaW5lc3NSb2xlIiwiaW5pdGlhbFBhcmFtc1N0YXRlIiwiZmlyc3RfbmFtZSIsImxhc3RfbmFtZSIsInBob25lIiwiZW1haWwiLCJ0aW1lX3pvbmUiLCJkYXRlX3RpbWVfZm9ybWF0IiwidGVsZWdyYW1fbmFtZSIsIm90aGVyX2J1c2luZXNzX3JvbGVfbmFtZSIsIm90aGVyX2RlcGFydG1lbnRfbmFtZSIsImJ1c2luZXNzX3JvbGUiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaXNUZWxlZ3JhbU9wZW4iLCJzZXRJc1RlbGVncmFtT3BlbiIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJzaG93UGFzc3dvcmRNb2RhbCIsInNldFNob3dQYXNzd29yZE1vZGFsIiwiX3VzZVN0YXRlMTkiLCJfdXNlU3RhdGUyMCIsInN1Ym1pdHRpbmciLCJzZXRTdWJtaXR0aW5nIiwiX3VzZVN0YXRlMjEiLCJfdXNlU3RhdGUyMiIsInNob3dTdWNjZXNzTWVzc2FnZSIsInNldFNob3dTdWNjZXNzTWVzc2FnZSIsIl91c2VTdGF0ZTIzIiwiX3VzZVN0YXRlMjQiLCJzaG93RXJyb3JNZXNzYWdlIiwic2V0U2hvd0Vycm9yTWVzc2FnZSIsIl91c2VTdGF0ZTI1Iiwic2hvdyIsInN0YXR1cyIsIm1lc3NhZ2UiLCJfdXNlU3RhdGUyNiIsInNob3dUZWxlZ3JhbVJlc3BvbnNlTWVzc2FnZSIsInNldFNob3dUZWxlZ3JhbVJlc3BvbnNlTWVzc2FnZSIsIl91c2VTdGF0ZTI3IiwiX3VzZVN0YXRlMjgiLCJwYXJhbXMiLCJzZXRQYXJhbXMiLCJoYW5kbGVPbkNoYW5nZSIsImUiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsInByZXZTdGF0ZSIsIl9vYmplY3RTcHJlYWQzIiwiX2UkdGFyZ2V0IiwidGFyZ2V0IiwibmFtZSIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJoYW5kbGVCdXNpbmVzc1JvbGVDaGFuZ2UiLCJoYW5kbGVEZXBhcnRtZW50Q2hhbmdlIiwiZ2V0UGFyYW1zV2l0aEFnZ3JlZ2F0ZWRWYWx1ZXMiLCJkZXBhcnRtZW50X2lkIiwidW5kZWZpbmVkIiwiYnVzaW5lc3Nfcm9sZV9pZCIsIndhdGVyQXV0aG9yaXR5TmFtZSIsInVzZVNlbGVjdG9yIiwic3RhdGUiLCJnbG9iYWxfZGF0YSIsInNob3dUb2FzdCIsImRhdGEiLCJ1c2VybmFtZSIsImVycm9yIiwidG9hc3QiLCJzdWNjZXNzIiwiaTE4biIsImNvbmNhdCIsInBvc2l0aW9uIiwiaGFuZGxlU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJheGlvcyIsInB1dCIsInVzZXIiLCJ0aGVuIiwicmVzcCIsImVycm9ycyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJwIiwiaW5uZXJIVE1MIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiSlNPTiIsInBhcnNlIiwiZmluZExvY2FsZSIsImZpbmQiLCJmaW5kRGF0ZVRpbWVGb3JtYXQiLCJmaW5kVGltZXpvbmUiLCJzZXRUaW1lb3V0IiwiZmluZEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicGFyZW50IiwiY2xvc2VzdCIsImZpbmRJbnB1dCIsImFkZCIsImNhdGNoIiwidXNlRWZmZWN0IiwiYW5hbHl0aWNzVHJhY2siLCJ1dGlsaXR5X25hbWUiLCJ0b2tlbiIsImNvbnRlbnQiLCJkZWZhdWx0cyIsImhlYWRlcnMiLCJjb21tb24iLCJmaW5kUHJvcGVydHkiLCJvYmplY3QiLCJwcm9wZXJ0eSIsImJ1c2luZXNzX3JvbGVzIiwiYWxlcnQiLCJjcmVhdGVFbGVtZW50IiwiQ29udGFpbmVyIiwiY2xhc3NOYW1lIiwiYWN0aW9uIiwib25TdWJtaXQiLCJ0eXBlIiwib25DaGFuZ2UiLCJyZWFkT25seSIsImNvdW50cnkiLCJsb2NhbGl6YXRpb24iLCJpbnB1dENsYXNzIiwiY29udGFpbmVyQ2xhc3MiLCJidXR0b25DbGFzcyIsImRyb3Bkb3duQ2xhc3MiLCJlbmFibGVTZWFyY2giLCJzZWFyY2hQbGFjZWhvbGRlciIsImNvdW50cnlDb2RlRWRpdGFibGUiLCJpbnB1dFByb3BzIiwiRnJhZ21lbnQiLCJTZWxlY3QiLCJzZXRWYWx1ZSIsIm9wdGlvbnMiLCJjYW5jZWxUZXh0V2lkdGgiLCJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGlvbl9rZXkiLCJsZW5ndGgiLCJvbkNsaWNrIiwiUmVhY3RDb21wb25lbnQiLCJ3aWR0aCIsImhlaWdodCIsImZpbGwiLCJEYXRlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwidG9VcHBlckNhc2UiLCJzdWJzdHJpbmciLCJkaXNhYmxlZCIsIlBhc3N3b3JkTW9kYWwiLCJjbG9zZSIsInNhdmUiLCJUZWxlZ3JhbU1vZGFsIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWdlcy9Qcm9maWxlUGFnZS9Qcm9maWxlUGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICdzcmMvY29tcG9uZW50cy9DdXN0b21JbnB1dHMvU2VsZWN0L1NlbGVjdCc7XG5pbXBvcnQgaTE4biBmcm9tICdzcmMvdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHsgUGFzc3dvcmRNb2RhbCB9IGZyb20gJy4vUGFzc3dvcmRNb2RhbC9QYXNzd29yZE1vZGFsJztcbmltcG9ydCB7IFJlYWN0Q29tcG9uZW50IGFzIFBlblN2ZyB9IGZyb20gJy4vcGVuLnN2Zyc7XG5pbXBvcnQgeyBSZWFjdENvbXBvbmVudCBhcyBDYW5jZWwgfSBmcm9tICcuL2NhbmNlbC5zdmcnO1xuaW1wb3J0IFBob25lSW5wdXQgZnJvbSAncmVhY3QtcGhvbmUtaW5wdXQtMic7XG5pbXBvcnQgJ3JlYWN0LXBob25lLWlucHV0LTIvbGliL3N0eWxlLmNzcyc7XG5pbXBvcnQgeyBUZWxlZ3JhbU1vZGFsIH0gZnJvbSAnLi9UZWxlZ3JhbU1vZGFsL1RlbGVncmFtTW9kYWwnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJy4vQ29udGFpbmVyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7IGFuYWx5dGljc1RyYWNrIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0FuYWx5dGljcyc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAncmVhY3QtdG9hc3RpZnknO1xuXG5leHBvcnQgY29uc3QgUHJvZmlsZVBhZ2UgPSAoKSA9PiB7XG4gIGNvbnN0IHRpbWV6b25lc0FycmF5ID0gbW9tZW50LnR6Lm5hbWVzKCk7XG4gIGNvbnN0IGRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJ3VzJyxcbiAgICAgIGxhYmVsOiAnVW5pdGVkIFN0YXRlcycsXG4gICAgICBmb3JtYXQ6IHtcbiAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdldScsXG4gICAgICBsYWJlbDogJ0V1cm9wZScsXG4gICAgICBmb3JtYXQ6IHtcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiAnbnVtZXJpYycsXG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICBtaW51dGU6ICdudW1lcmljJyxcbiAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCB0aW1lem9uZXMgPSB0aW1lem9uZXNBcnJheS5tYXAoKHQpID0+IHtcbiAgICByZXR1cm4geyB2YWx1ZTogdCwgbGFiZWw6IHQgfTtcbiAgfSk7XG5cbiAgY29uc3QgbG9jYWxlT3B0aW9ucyA9IFtcbiAgICB7IHZhbHVlOiAnZW4nLCBsYWJlbDogJ0VuZ2xpc2gnIH0sXG4gICAgeyB2YWx1ZTogJ2VuX3VrJywgbGFiZWw6ICdFbmdsaXNoIChVSyknIH0sXG4gICAgeyB2YWx1ZTogJ2hlJywgbGFiZWw6ICfXoteR16jXmdeqJyB9LFxuICAgIHsgdmFsdWU6ICdmcicsIGxhYmVsOiAnRnJhbsOnYWlzJyB9LFxuICAgIHsgdmFsdWU6ICdpdCcsIGxhYmVsOiAnSXRhbGlhbm8nIH0sXG4gIF07XG5cbiAgY29uc3QgW2xvY2FsZSwgc2V0TG9jYWxlXSA9IHVzZVN0YXRlPHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH0+KGxvY2FsZU9wdGlvbnNbMF0pO1xuXG4gIGNvbnN0IFtkYXRlVGltZUZvcm1hdCwgc2V0RGF0ZVRpbWVGb3JtYXRdID0gdXNlU3RhdGU8e1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBmb3JtYXQ6IG9iamVjdDtcbiAgfT4oZGF0ZVRpbWVGb3JtYXRPcHRpb25zWzBdKTtcblxuICBjb25zdCBbdGltZXpvbmUsIHNldFRpbWV6b25lXSA9IHVzZVN0YXRlPHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH0+KHRpbWV6b25lc1syMF0pO1xuXG4gIGNvbnN0IFtkZXBhcnRtZW50cywgc2V0RGVwYXJ0bWVudHNdID0gdXNlU3RhdGU8XG4gICAge1xuICAgICAgdmFsdWU6IHN0cmluZztcbiAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgfVtdXG4gID4oW3sgdmFsdWU6ICcnLCBsYWJlbDogJycgfV0pO1xuXG4gIGNvbnN0IFtidXNpbmVzc1JvbGVzLCBzZXRCdXNpbmVzc1JvbGVzXSA9IHVzZVN0YXRlPFxuICAgIHtcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgICBsYWJlbDogc3RyaW5nO1xuICAgIH1bXVxuICA+KFt7IHZhbHVlOiAnJywgbGFiZWw6ICcnIH1dKTtcblxuICBjb25zdCBbZGVwYXJ0bWVudCwgc2V0RGVwYXJ0bWVudF0gPSB1c2VTdGF0ZTxhbnk+KGRlcGFydG1lbnRzWzBdKTtcblxuICBjb25zdCBbYnVzaW5lc3NSb2xlLCBzZXRCdXNpbmVzc1JvbGVdID0gdXNlU3RhdGU8YW55PihidXNpbmVzc1JvbGVzWzBdKTtcblxuICBjb25zdCBpbml0aWFsUGFyYW1zU3RhdGUgPSB7XG4gICAgZmlyc3RfbmFtZTogJycsXG4gICAgbGFzdF9uYW1lOiAnJyxcbiAgICBwaG9uZTogJycsXG4gICAgZW1haWw6ICcnLFxuICAgIHRpbWVfem9uZTogJycsXG4gICAgZGF0ZV90aW1lX2Zvcm1hdDogJycsXG4gICAgbG9jYWxlOiAnJyxcbiAgICB0ZWxlZ3JhbV9uYW1lOiAnJyxcbiAgICBvdGhlcl9idXNpbmVzc19yb2xlX25hbWU6ICcnLFxuICAgIG90aGVyX2RlcGFydG1lbnRfbmFtZTogJycsXG4gICAgYnVzaW5lc3Nfcm9sZTogJycsXG4gICAgZGVwYXJ0bWVudDogJycsXG4gIH07XG5cbiAgY29uc3QgW2lzVGVsZWdyYW1PcGVuLCBzZXRJc1RlbGVncmFtT3Blbl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzaG93UGFzc3dvcmRNb2RhbCwgc2V0U2hvd1Bhc3N3b3JkTW9kYWxdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbc3VibWl0dGluZywgc2V0U3VibWl0dGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzaG93U3VjY2Vzc01lc3NhZ2UsIHNldFNob3dTdWNjZXNzTWVzc2FnZV0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzaG93RXJyb3JNZXNzYWdlLCBzZXRTaG93RXJyb3JNZXNzYWdlXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3Nob3dUZWxlZ3JhbVJlc3BvbnNlTWVzc2FnZSwgc2V0U2hvd1RlbGVncmFtUmVzcG9uc2VNZXNzYWdlXSA9XG4gICAgdXNlU3RhdGU8e1xuICAgICAgc2hvdzogYm9vbGVhbjtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIH0+KHtcbiAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgc3RhdHVzOiAnJyxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgIH0pO1xuICBjb25zdCBbcGFyYW1zLCBzZXRQYXJhbXNdID0gdXNlU3RhdGU8e1xuICAgIGZpcnN0X25hbWU6IHN0cmluZztcbiAgICBsYXN0X25hbWU6IHN0cmluZztcbiAgICBwaG9uZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgdGltZV96b25lOiBzdHJpbmc7XG4gICAgZGF0ZV90aW1lX2Zvcm1hdDogc3RyaW5nO1xuICAgIGxvY2FsZTogc3RyaW5nO1xuICAgIHRlbGVncmFtX25hbWU6IHN0cmluZztcbiAgICBvdGhlcl9idXNpbmVzc19yb2xlX25hbWU6IHN0cmluZztcbiAgICBvdGhlcl9kZXBhcnRtZW50X25hbWU6IHN0cmluZztcbiAgfT4oaW5pdGlhbFBhcmFtc1N0YXRlKTtcblxuICBjb25zdCBoYW5kbGVPbkNoYW5nZSA9IChlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGUuc3RhcnRzV2l0aCgnOTcyMCcpKSB7XG4gICAgICAgIGUgPSBlLnJlcGxhY2UoLyg5NzIwKS9nLCAnOTcyJyk7XG4gICAgICB9XG4gICAgICBzZXRQYXJhbXMoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICBwaG9uZTogZSxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbmFtZSB9ID0gZS50YXJnZXQ7XG4gICAgICBzZXRQYXJhbXMoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICBbbmFtZV06IHZhbHVlLFxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVCdXNpbmVzc1JvbGVDaGFuZ2UgPSAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldCAhPT0gbnVsbCkge1xuICAgICAgc2V0UGFyYW1zKHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBidXNpbmVzc19yb2xlOiBlLnZhbHVlLFxuICAgICAgICBvdGhlcl9idXNpbmVzc19yb2xlX25hbWU6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZURlcGFydG1lbnRDaGFuZ2UgPSAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldCAhPT0gbnVsbCkge1xuICAgICAgc2V0UGFyYW1zKHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBkZXBhcnRtZW50OiBlLnZhbHVlLFxuICAgICAgICBvdGhlcl9kZXBhcnRtZW50X25hbWU6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFBhcmFtc1dpdGhBZ2dyZWdhdGVkVmFsdWVzID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBkYXRlX3RpbWVfZm9ybWF0OiBkYXRlVGltZUZvcm1hdC52YWx1ZSxcbiAgICAgIGxvY2FsZTogbG9jYWxlLnZhbHVlLFxuICAgICAgdGltZV96b25lOiB0aW1lem9uZS52YWx1ZSxcbiAgICAgIGRlcGFydG1lbnRfaWQ6IGRlcGFydG1lbnQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBhcnRtZW50LnZhbHVlLFxuICAgICAgYnVzaW5lc3Nfcm9sZV9pZDogYnVzaW5lc3NSb2xlID09PSB1bmRlZmluZWQgPyBudWxsIDogYnVzaW5lc3NSb2xlLnZhbHVlLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3Qgd2F0ZXJBdXRob3JpdHlOYW1lID0gdXNlU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5nbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eU5hbWUsXG4gICk7XG5cbiAgY29uc3Qgc2hvd1RvYXN0ID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB1c2VybmFtZSA9IGRhdGEudXNlcm5hbWU7XG4gICAgY29uc3QgZXJyb3IgPSBkYXRhLmVycm9yO1xuICAgIGlmIChkYXRhLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICBpMThuLnQoYG15X3Byb2ZpbGVfdGFiLnRlbGVncmFtX21lc3NhZ2VzLiR7ZGF0YS5tZXNzYWdlfWAsIHtcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcC1jZW50ZXInLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9hc3QuZXJyb3IoXG4gICAgICAgIGkxOG4udChgbXlfcHJvZmlsZV90YWIudGVsZWdyYW1fbWVzc2FnZXMuJHtkYXRhLm1lc3NhZ2V9YCwge1xuICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgcG9zaXRpb246ICd0b3AtY2VudGVyJyxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHNldFN1Ym1pdHRpbmcodHJ1ZSk7XG4gICAgYXhpb3NcbiAgICAgIC5wdXQoJy9wcm9maWxlcycsIHsgdXNlcjogZ2V0UGFyYW1zV2l0aEFnZ3JlZ2F0ZWRWYWx1ZXMoKSB9KVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgaWYgKHJlc3AuZGF0YS51c2VyLmVycm9ycyA9PT0gbnVsbCkge1xuICAgICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbCgnLmVycm9yLW1lc3NhZ2UnKVxuICAgICAgICAgICAgLmZvckVhY2goKHApID0+IChwLmlubmVySFRNTCA9ICcnKSk7XG5cbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbnZhbGlkLWZpZWxkJylcbiAgICAgICAgICAgIC5mb3JFYWNoKChwKSA9PiBwLmNsYXNzTGlzdC5yZW1vdmUoJ2ludmFsaWQtZmllbGQnKSk7XG4gICAgICAgICAgbGV0IHVzZXIgPSBKU09OLnBhcnNlKHJlc3AuZGF0YS51c2VyKTtcbiAgICAgICAgICBjb25zdCBmaW5kTG9jYWxlID0gbG9jYWxlT3B0aW9ucy5maW5kKChlKSA9PiBlLnZhbHVlID09PSB1c2VyLmxvY2FsZSk7XG4gICAgICAgICAgY29uc3QgZmluZERhdGVUaW1lRm9ybWF0ID0gZGF0ZVRpbWVGb3JtYXRPcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAoZSkgPT4gZS52YWx1ZSA9PT0gdXNlci5kYXRlX3RpbWVfZm9ybWF0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZmluZFRpbWV6b25lID0gdGltZXpvbmVzLmZpbmQoXG4gICAgICAgICAgICAoZSkgPT4gZS52YWx1ZSA9PT0gdXNlci50aW1lX3pvbmUsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHNldFBhcmFtcyh1c2VyKTtcbiAgICAgICAgICBzZXRMb2NhbGUoZmluZExvY2FsZSEpO1xuICAgICAgICAgIHNldERhdGVUaW1lRm9ybWF0KGZpbmREYXRlVGltZUZvcm1hdCEpO1xuICAgICAgICAgIHNldFRpbWV6b25lKGZpbmRUaW1lem9uZSEpO1xuICAgICAgICAgIHNldFNob3dTdWNjZXNzTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dTdWNjZXNzTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgfSwgNjAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCcuZXJyb3ItbWVzc2FnZScpXG4gICAgICAgICAgICAuZm9yRWFjaCgocCkgPT4gKHAuaW5uZXJIVE1MID0gJycpKTtcbiAgICAgICAgICBsZXQgZXJyb3JzID0gcmVzcC5kYXRhLnVzZXIuZXJyb3JzO1xuICAgICAgICAgIGZvciAoY29uc3QgZXJyb3IgaW4gZXJyb3JzKSB7XG4gICAgICAgICAgICBsZXQgZmluZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBpbnB1dFtuYW1lPScke2Vycm9yfSddYCk7XG4gICAgICAgICAgICBsZXQgcGFyZW50ID0gZmluZEVsZW1lbnQhLmNsb3Nlc3QoJy5maWVsZCcpO1xuICAgICAgICAgICAgbGV0IGZpbmRJbnB1dCA9IHBhcmVudCEucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgICAgIGZpbmRJbnB1dCEuY2xhc3NMaXN0LmFkZCgnaW52YWxpZC1maWVsZCcpO1xuICAgICAgICAgICAgcGFyZW50IS5xdWVyeVNlbGVjdG9yKCcuZXJyb3ItbWVzc2FnZScpIS5pbm5lckhUTUwgPSBpMThuLnQoXG4gICAgICAgICAgICAgIGBkYXNoYm9hcmRfdjIucHJvZmlsZS5lcnJvcnMuJHtlcnJvcn1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0U2hvd1N1Y2Nlc3NNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFN1Ym1pdHRpbmcoZmFsc2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgc2V0U2hvd0Vycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgc2V0U2hvd1N1Y2Nlc3NNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgc2V0U3VibWl0dGluZyhmYWxzZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNldFNob3dFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICB9LCA2MDAwKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYW5hbHl0aWNzVHJhY2soJ1ZpZXdlZCBQcm9maWxlIFBhZ2UnLCB7XG4gICAgICB1dGlsaXR5X25hbWU6IHdhdGVyQXV0aG9yaXR5TmFtZSxcbiAgICB9KTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbmFtZT1jc3JmLXRva2VuXScpIS5jb250ZW50O1xuICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uWydYLUNTUkYtVE9LRU4nXSA9IHRva2VuO1xuICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qcyc7XG4gICAgYXhpb3NcbiAgICAgIC5nZXQoYC9wcm9maWxlcy9yZXNvdXJjZWApXG4gICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICBzZXRQYXJhbXMocmVzcC5kYXRhLnVzZXIpO1xuICAgICAgICBjb25zdCBmaW5kUHJvcGVydHkgPSAob2JqZWN0LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgIHJldHVybiBvYmplY3QuZmluZCgoZSkgPT4gZS52YWx1ZSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB9O1xuICAgICAgICBzZXRMb2NhbGUoZmluZFByb3BlcnR5KGxvY2FsZU9wdGlvbnMsIHJlc3AuZGF0YS51c2VyLmxvY2FsZSkpO1xuICAgICAgICBzZXREYXRlVGltZUZvcm1hdChcbiAgICAgICAgICBmaW5kUHJvcGVydHkoZGF0ZVRpbWVGb3JtYXRPcHRpb25zLCByZXNwLmRhdGEudXNlci5kYXRlX3RpbWVfZm9ybWF0KSxcbiAgICAgICAgKTtcbiAgICAgICAgc2V0VGltZXpvbmUoZmluZFByb3BlcnR5KHRpbWV6b25lcywgcmVzcC5kYXRhLnVzZXIudGltZV96b25lKSk7XG4gICAgICAgIHNldEJ1c2luZXNzUm9sZShcbiAgICAgICAgICBmaW5kUHJvcGVydHkoXG4gICAgICAgICAgICByZXNwLmRhdGEuYnVzaW5lc3Nfcm9sZXMsXG4gICAgICAgICAgICByZXNwLmRhdGEudXNlci5idXNpbmVzc19yb2xlX2lkLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHNldERlcGFydG1lbnQoXG4gICAgICAgICAgZmluZFByb3BlcnR5KHJlc3AuZGF0YS5kZXBhcnRtZW50cywgcmVzcC5kYXRhLnVzZXIuZGVwYXJ0bWVudF9pZCksXG4gICAgICAgICk7XG4gICAgICAgIHNldERlcGFydG1lbnRzKHJlc3AuZGF0YS5kZXBhcnRtZW50cyk7XG4gICAgICAgIHNldEJ1c2luZXNzUm9sZXMocmVzcC5kYXRhLmJ1c2luZXNzX3JvbGVzKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBhbGVydChlcnJvcikpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoZWFkZXItdGl0bGVcIj57aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS50aXRsZScpfTwvZGl2PlxuICAgICAgPGZvcm0gYWN0aW9uPVwiXCIgb25TdWJtaXQ9eyhlKSA9PiBoYW5kbGVTdWJtaXQoZSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5wZXJzb25hbC1kZXRhaWxzJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicGVyc29uYWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmZpcnN0X25hbWUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgbmFtZT17J2ZpcnN0X25hbWUnfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtwYXJhbXMuZmlyc3RfbmFtZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZU9uQ2hhbmdlKGUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9eydlcnJvci1tZXNzYWdlJ30+PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpZWxkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5sYXN0X25hbWUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgbmFtZT17J2xhc3RfbmFtZSd9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3BhcmFtcy5sYXN0X25hbWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVPbkNoYW5nZShlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXsnZXJyb3ItbWVzc2FnZSd9PjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZCBmaWVsZC0tcmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmVtYWlsJyl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICByZWFkT25seT17dHJ1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXktaW5wdXRcIlxuICAgICAgICAgICAgICAgIG5hbWU9eydlbWFpbCd9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3BhcmFtcy5lbWFpbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXsnZXJyb3ItbWVzc2FnZSd9PjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUucGhvbmUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxQaG9uZUlucHV0XG4gICAgICAgICAgICAgICAgY291bnRyeT17J2lsJ31cbiAgICAgICAgICAgICAgICBsb2NhbGl6YXRpb249e2kxOG4udCgnY291bnRyaWVzJyl9XG4gICAgICAgICAgICAgICAgaW5wdXRDbGFzcz1cInBob25lLWlucHV0XCJcbiAgICAgICAgICAgICAgICBjb250YWluZXJDbGFzcz1cIm15LXBob25lXCJcbiAgICAgICAgICAgICAgICBidXR0b25DbGFzcz1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBkcm9wZG93bkNsYXNzPVwicGhvbmUtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtwYXJhbXMucGhvbmV9XG4gICAgICAgICAgICAgICAgZW5hYmxlU2VhcmNoXG4gICAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9e2kxOG4udCgnc2VhcmNoJyl9XG4gICAgICAgICAgICAgICAgY291bnRyeUNvZGVFZGl0YWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaGFuZGxlT25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17eyBuYW1lOiAncGhvbmUnIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17J2Vycm9yLW1lc3NhZ2UnfT48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtkZXBhcnRtZW50c1swXS52YWx1ZSAhPT0gJycgJiYgKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUuZGVwYXJ0bWVudCcpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm15LWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZT17c2V0RGVwYXJ0bWVudH1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGkxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGRhc2hib2FyZF92Mi5wcm9maWxlLmRlcGFydG1lbnRzLiR7ZGVwYXJ0bWVudD8ubGFiZWx9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZGVwYXJ0bWVudD8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtkZXBhcnRtZW50c31cbiAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGRlcGFydG1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25fa2V5OiAnZGFzaGJvYXJkX3YyLnByb2ZpbGUuZGVwYXJ0bWVudHMnLFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmJ1c2luZXNzX3JvbGUnKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteS1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWU9e3NldEJ1c2luZXNzUm9sZX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGkxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGRhc2hib2FyZF92Mi5wcm9maWxlLmJ1c2luZXNzX3JvbGVzLiR7YnVzaW5lc3NSb2xlPy5sYWJlbH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBidXNpbmVzc1JvbGU/LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17YnVzaW5lc3NSb2xlc31cbiAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGJ1c2luZXNzUm9sZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbl9rZXk6ICdkYXNoYm9hcmRfdjIucHJvZmlsZS5idXNpbmVzc19yb2xlcycsXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZGVwYXJ0bWVudHNbMF0udmFsdWUgIT09ICcnICYmIChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmaWVsZCAke1xuICAgICAgICAgICAgICAgICAgICBkZXBhcnRtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIGRlcGFydG1lbnQ/LnZhbHVlID09PVxuICAgICAgICAgICAgICAgICAgICAgIGRlcGFydG1lbnRzW2RlcGFydG1lbnRzLmxlbmd0aCAtIDFdLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2ZpZWxkLS1oaWRkZW4nXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmRlcGFydG1lbnRfYWx0Jyl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICByZWFkT25seT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXktaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPXsnb3RoZXJfZGVwYXJ0bWVudF9uYW1lJ31cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BhcmFtcy5vdGhlcl9kZXBhcnRtZW50X25hbWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlRGVwYXJ0bWVudENoYW5nZShlKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmllbGQgJHtcbiAgICAgICAgICAgICAgICAgICAgYnVzaW5lc3NSb2xlICYmXG4gICAgICAgICAgICAgICAgICAgIGJ1c2luZXNzUm9sZT8udmFsdWUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgYnVzaW5lc3NSb2xlc1tidXNpbmVzc1JvbGVzLmxlbmd0aCAtIDFdLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2ZpZWxkLS1oaWRkZW4nXG4gICAgICAgICAgICAgICAgICB9IGB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5idXNpbmVzc19yb2xlX2FsdCcpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHk9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm15LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT17J290aGVyX2J1c2luZXNzX3JvbGVfbmFtZSd9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwYXJhbXMub3RoZXJfYnVzaW5lc3Nfcm9sZV9uYW1lfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUJ1c2luZXNzUm9sZUNoYW5nZShlKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImNoYW5nZS1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1Bhc3N3b3JkTW9kYWwodHJ1ZSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGVuU3ZnIHdpZHRoPVwiMTJweFwiIGhlaWdodD1cIjEycHhcIiBmaWxsPVwiI2YwMTM0Y1wiIC8+XG4gICAgICAgICAgICAgICAgeycgICd9XG4gICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUuY2hhbmdlLXBhc3N3b3JkJyl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj57aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5zZXR0aW5ncycpfTwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInNldHRpbmdzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpZWxkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS50aW1lLXpvbmUnKX0qXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm15LWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgc2V0VmFsdWU9e3NldFRpbWV6b25lfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RpbWV6b25lfVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dGltZXpvbmVzfVxuICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dFdpZHRoXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmRhdGUtdGltZS1mb3JtYXQnKX0qXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm15LWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZGF0ZVRpbWVGb3JtYXRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2RhdGVUaW1lRm9ybWF0fVxuICAgICAgICAgICAgICAgICAgc2V0VmFsdWU9e3NldERhdGVUaW1lRm9ybWF0fVxuICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dFdpZHRoXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnZGF0ZS10aW1lLWZvcm1hdCd9PlxuICAgICAgICAgICAgICAgIHtkYXRlVGltZUZvcm1hdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCBkYXRlVGltZUZvcm1hdC5mb3JtYXQpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUubGFuZ3VhZ2UnKX0qXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J215LWlucHV0J30+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17bG9jYWxlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICBzZXRWYWx1ZT17c2V0TG9jYWxlfVxuICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dFdpZHRoXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGQgZmllbGQtLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAge3BhcmFtcy50ZWxlZ3JhbV9uYW1lID09PSAnJyAmJiAoXG4gICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwidGVsZWdyYW1cIiBvbkNsaWNrPXsoKSA9PiBzZXRJc1RlbGVncmFtT3Blbih0cnVlKX0+XG4gICAgICAgICAgICAgICAgICB7aTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5jb25uZWN0LXRvLXRlbGVncmFtJyl9XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7cGFyYW1zLnRlbGVncmFtX25hbWUgIT09ICcnICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUudGVsZWdyYW1fbmFtZScpfVxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzVGVsZWdyYW1PcGVuKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQZW5Tdmcgd2lkdGg9XCIxMnB4XCIgaGVpZ2h0PVwiMTJweFwiIGZpbGw9XCIjZjAxMzRjXCIgLz57JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZGFzaGJvYXJkX3YyLnByb2ZpbGUuY2hhbmdlLW5hbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsndGVsZWdyYW0tZXhpc3RpbmctaW5wdXQnfT5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXktaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17J3RlbGVncmFtX25hbWUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BhcmFtcy50ZWxlZ3JhbV9uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsndGVsZWdyYW0tZXhpc3RpbmctaW5wdXRfX2NhbmNlbC1idXR0b24nfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFyYW1zKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbGVncmFtX25hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDYW5jZWwgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17J2Vycm9yLW1lc3NhZ2UnfT48L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsndGVsZWdyYW0gb3Blbid9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldChgL3RlbGVncmFtL3NlbmRfdGVzdF9tZXNzYWdlLmpzb25gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dUZWxlZ3JhbVJlc3BvbnNlTWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YS51c2VyLnN0YXR1c1swXS50b1VwcGVyQ2FzZSgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5kYXRhLnVzZXIuc3RhdHVzLnN1YnN0cmluZygxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3AuZGF0YS51c2VyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd1RlbGVncmFtUmVzcG9uc2VNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNjAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RvYXN0KHJlc3AuZGF0YS51c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gYWxlcnQoZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgeyFzaG93VGVsZWdyYW1SZXNwb25zZU1lc3NhZ2Uuc2hvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5zZW5kX3RlbGVncmFtX21lc3NhZ2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICB7c2hvd1RlbGVncmFtUmVzcG9uc2VNZXNzYWdlLnNob3cgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUZWxlZ3JhbVJlc3BvbnNlTWVzc2FnZS5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT17J3N1Ym1pdCd9IGNsYXNzTmFtZT17J3NhdmUnfSBkaXNhYmxlZD17c3VibWl0dGluZ30+XG4gICAgICAgICAgICB7IXN1Ym1pdHRpbmcgJiZcbiAgICAgICAgICAgICAgIXNob3dTdWNjZXNzTWVzc2FnZSAmJlxuICAgICAgICAgICAgICAhc2hvd0Vycm9yTWVzc2FnZSAmJlxuICAgICAgICAgICAgICBpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLnN1Ym1pdCcpfVxuICAgICAgICAgICAge3N1Ym1pdHRpbmcgJiZcbiAgICAgICAgICAgICAgIXNob3dTdWNjZXNzTWVzc2FnZSAmJlxuICAgICAgICAgICAgICAhc2hvd0Vycm9yTWVzc2FnZSAmJlxuICAgICAgICAgICAgICBpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLnN1Ym1pdHRpbmcnKX1cbiAgICAgICAgICAgIHtzaG93U3VjY2Vzc01lc3NhZ2UgJiYgaTE4bi50KCdkYXNoYm9hcmRfdjIucHJvZmlsZS5zdWNjZXNzJyl9XG4gICAgICAgICAgICB7c2hvd0Vycm9yTWVzc2FnZSAmJiBpMThuLnQoJ2Rhc2hib2FyZF92Mi5wcm9maWxlLmVycm9yJyl9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuXG4gICAgICB7c2hvd1Bhc3N3b3JkTW9kYWwgJiYgKFxuICAgICAgICA8UGFzc3dvcmRNb2RhbFxuICAgICAgICAgIGNsb3NlPXsoKSA9PiBzZXRTaG93UGFzc3dvcmRNb2RhbChmYWxzZSl9XG4gICAgICAgICAgc2F2ZT17KCkgPT4ge319XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge2lzVGVsZWdyYW1PcGVuICYmIChcbiAgICAgICAgPFRlbGVncmFtTW9kYWxcbiAgICAgICAgICBjbG9zZT17KCkgPT4gc2V0SXNUZWxlZ3JhbU9wZW4oZmFsc2UpfVxuICAgICAgICAgIGhhbmRsZU9uQ2hhbmdlPXtoYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICBoYW5kbGVTdWJtaXQ9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9Db250YWluZXI+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