@igo2/geo 16.3.0 → 17.0.0-next.10

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 (663) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/assets/images/north-direction.png +0 -0
  7. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +32 -14
  8. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +38 -19
  9. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +19 -11
  10. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +8 -62
  11. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +49 -20
  12. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +23 -11
  13. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +48 -16
  14. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +12 -71
  15. package/esm2022/lib/catalog/catalog-library/index.mjs +4 -0
  16. package/esm2022/lib/catalog/catalog.module.mjs +18 -39
  17. package/esm2022/lib/catalog/index.mjs +2 -1
  18. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
  19. package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
  20. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  21. package/esm2022/lib/catalog/shared/catalog.service.mjs +16 -9
  22. package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
  23. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +1 -1
  24. package/esm2022/lib/datasource/shared/capabilities.service.mjs +5 -5
  25. package/esm2022/lib/datasource/shared/datasource.service.mjs +11 -13
  26. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  28. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  29. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  30. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  31. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  32. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
  33. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  34. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  35. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  36. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  37. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  38. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  39. package/esm2022/lib/datasource/shared/datasources/index.mjs +1 -1
  40. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  41. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  42. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  43. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  45. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  47. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  49. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +5 -5
  50. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  52. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  53. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  55. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  57. package/esm2022/lib/datasource/shared/index.mjs +1 -1
  58. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
  59. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +6 -6
  60. package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
  61. package/esm2022/lib/datasource/utils/tilegrid.mjs +1 -1
  62. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +28 -13
  63. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +44 -19
  64. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +36 -16
  65. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +5 -2
  66. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  67. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +9 -2
  68. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +72 -41
  69. package/esm2022/lib/directions/directions.component.mjs +83 -21
  70. package/esm2022/lib/directions/directions.module.mjs +14 -73
  71. package/esm2022/lib/directions/directions.provider.mjs +16 -0
  72. package/esm2022/lib/directions/index.mjs +2 -1
  73. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  74. package/esm2022/lib/directions/shared/directions.service.mjs +37 -27
  75. package/esm2022/lib/directions/shared/directions.utils.mjs +22 -22
  76. package/esm2022/lib/directions/shared/store.mjs +2 -2
  77. package/esm2022/lib/download/download-button/download-button.component.mjs +21 -11
  78. package/esm2022/lib/download/download.module.mjs +10 -27
  79. package/esm2022/lib/download/shared/download.service.mjs +7 -7
  80. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +21 -10
  81. package/esm2022/lib/draw/draw/draw-popup.component.mjs +41 -18
  82. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +22 -9
  83. package/esm2022/lib/draw/draw/draw.component.mjs +55 -25
  84. package/esm2022/lib/draw/draw/draw.module.mjs +7 -104
  85. package/esm2022/lib/draw/drawingTool.module.mjs +8 -7
  86. package/esm2022/lib/draw/shared/draw-icon.service.mjs +7 -7
  87. package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
  88. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  89. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  90. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  91. package/esm2022/lib/environment/index.mjs +1 -1
  92. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +29 -13
  93. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +8 -7
  94. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +14 -27
  95. package/esm2022/lib/feature/feature-details/index.mjs +4 -0
  96. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +9 -9
  97. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +8 -11
  98. package/esm2022/lib/feature/feature.module.mjs +18 -12
  99. package/esm2022/lib/feature/index.mjs +3 -2
  100. package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
  101. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  102. package/esm2022/lib/feature/shared/feature.utils.mjs +2 -2
  103. package/esm2022/lib/feature/shared/index.mjs +1 -1
  104. package/esm2022/lib/feature/shared/store.mjs +2 -2
  105. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +2 -2
  106. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +2 -2
  107. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +2 -2
  108. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +2 -2
  109. package/esm2022/lib/feature/shared/strategies/loading.mjs +2 -2
  110. package/esm2022/lib/feature/shared/strategies/search.mjs +5 -5
  111. package/esm2022/lib/feature/shared/strategies/selection.mjs +2 -2
  112. package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
  113. package/esm2022/lib/filter/filter.module.mjs +47 -177
  114. package/esm2022/lib/filter/index.mjs +2 -1
  115. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +29 -15
  116. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +46 -20
  117. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +56 -25
  118. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +17 -14
  119. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +59 -34
  120. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +18 -12
  121. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +42 -18
  122. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +8 -7
  123. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +21 -12
  124. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +6 -5
  125. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +5 -5
  126. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  127. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  128. package/esm2022/lib/filter/shared/ogc-filter.mjs +46 -3
  129. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +5 -5
  130. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  131. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +9 -7
  132. package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
  133. package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
  134. package/esm2022/lib/filter/shared/time-filter.service.mjs +5 -5
  135. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +66 -28
  136. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +35 -18
  137. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +35 -16
  138. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +28 -14
  139. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +51 -24
  140. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +31 -13
  141. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +8 -7
  142. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +16 -10
  143. package/esm2022/lib/geo.module.mjs +5 -43
  144. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +7 -7
  145. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +34 -17
  146. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +12 -43
  147. package/esm2022/lib/geometry/geometry-form-field/index.mjs +4 -0
  148. package/esm2022/lib/geometry/geometry.module.mjs +9 -10
  149. package/esm2022/lib/geometry/index.mjs +2 -3
  150. package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
  151. package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
  152. package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
  153. package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
  154. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  155. package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
  156. package/esm2022/lib/import-export/export-button/export-button.component.mjs +20 -10
  157. package/esm2022/lib/import-export/import-export/import-export.component.mjs +58 -22
  158. package/esm2022/lib/import-export/import-export.module.mjs +15 -81
  159. package/esm2022/lib/import-export/index.mjs +2 -1
  160. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +19 -66
  161. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  162. package/esm2022/lib/import-export/shared/export.service.mjs +14 -8
  163. package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
  164. package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
  165. package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
  166. package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
  167. package/esm2022/lib/import-export/shared/import.service.mjs +7 -7
  168. package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
  169. package/esm2022/lib/layer/index.mjs +2 -1
  170. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +35 -16
  171. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +45 -17
  172. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +13 -11
  173. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +8 -7
  174. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +28 -13
  175. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +10 -9
  176. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +49 -18
  177. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  178. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +33 -14
  179. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +5 -5
  180. package/esm2022/lib/layer/layer.module.mjs +27 -93
  181. package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
  182. package/esm2022/lib/layer/shared/layer.service.mjs +13 -13
  183. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  184. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  185. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  186. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  187. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
  188. package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
  189. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
  190. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  191. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  192. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  193. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
  194. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  195. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  196. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +21 -11
  197. package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
  198. package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
  199. package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
  200. package/esm2022/lib/layer/utils/tile-watcher.mjs +1 -1
  201. package/esm2022/lib/layer/utils/vector-watcher.mjs +1 -1
  202. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  203. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +27 -14
  204. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +8 -8
  205. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +28 -17
  206. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +15 -11
  207. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +1 -1
  208. package/esm2022/lib/map/home-extent-button/index.mjs +1 -1
  209. package/esm2022/lib/map/index.mjs +1 -1
  210. package/esm2022/lib/map/info-section/info-section.component.mjs +7 -7
  211. package/esm2022/lib/map/map-browser/map-browser.component.mjs +8 -8
  212. package/esm2022/lib/map/map-center/map-center.component.mjs +6 -6
  213. package/esm2022/lib/map/map.module.mjs +51 -81
  214. package/esm2022/lib/map/menu-button/menu-button.component.mjs +23 -13
  215. package/esm2022/lib/map/offline-button/offline-button.component.mjs +21 -11
  216. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +23 -11
  217. package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
  218. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  219. package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
  220. package/esm2022/lib/map/shared/controllers/index.mjs +1 -1
  221. package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
  222. package/esm2022/lib/map/shared/hover-feature.directive.mjs +11 -10
  223. package/esm2022/lib/map/shared/index.mjs +1 -1
  224. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +3 -3
  225. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +10 -9
  226. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  227. package/esm2022/lib/map/shared/map.interface.mjs +1 -1
  228. package/esm2022/lib/map/shared/map.mjs +1 -1
  229. package/esm2022/lib/map/shared/map.service.mjs +5 -5
  230. package/esm2022/lib/map/shared/map.utils.mjs +1 -1
  231. package/esm2022/lib/map/shared/mapOffline.directive.mjs +11 -8
  232. package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
  233. package/esm2022/lib/map/shared/projection.service.mjs +7 -7
  234. package/esm2022/lib/map/shared/projection.utils.mjs +60 -1
  235. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +6 -6
  236. package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
  237. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +26 -16
  238. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +13 -9
  239. package/esm2022/lib/measure/index.mjs +2 -3
  240. package/esm2022/lib/measure/measure.module.mjs +8 -5
  241. package/esm2022/lib/measure/measurer/index.mjs +6 -0
  242. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +6 -5
  243. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +18 -11
  244. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +27 -13
  245. package/esm2022/lib/measure/measurer/measurer.component.mjs +40 -20
  246. package/esm2022/lib/measure/measurer/measurer.module.mjs +7 -69
  247. package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
  248. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  249. package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
  250. package/esm2022/lib/metadata/index.mjs +2 -1
  251. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +35 -18
  252. package/esm2022/lib/metadata/metadata.module.mjs +14 -31
  253. package/esm2022/lib/metadata/shared/metadata.interface.mjs +1 -1
  254. package/esm2022/lib/metadata/shared/metadata.service.mjs +5 -5
  255. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +7 -7
  256. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  257. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  258. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +8 -10
  259. package/esm2022/lib/offline/layerDB/index.mjs +1 -1
  260. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  261. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +5 -5
  262. package/esm2022/lib/offline/shared/geo-network.service.mjs +7 -7
  263. package/esm2022/lib/overlay/overlay.module.mjs +10 -8
  264. package/esm2022/lib/overlay/shared/overlay.directive.mjs +8 -7
  265. package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
  266. package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
  267. package/esm2022/lib/overlay/shared/overlay.service.mjs +5 -5
  268. package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
  269. package/esm2022/lib/print/print/print.component.mjs +8 -8
  270. package/esm2022/lib/print/print-form/print-form.component.mjs +49 -17
  271. package/esm2022/lib/print/print.module.mjs +10 -54
  272. package/esm2022/lib/print/shared/geopdf.mjs +1 -1
  273. package/esm2022/lib/print/shared/print.interface.mjs +1 -1
  274. package/esm2022/lib/print/shared/print.service.mjs +180 -127
  275. package/esm2022/lib/print/shared/print.type.mjs +1 -1
  276. package/esm2022/lib/query/query.module.mjs +7 -8
  277. package/esm2022/lib/query/shared/index.mjs +2 -1
  278. package/esm2022/lib/query/shared/query-search-source.mjs +6 -6
  279. package/esm2022/lib/query/shared/query-search-source.providers.mjs +2 -2
  280. package/esm2022/lib/query/shared/query.directive.mjs +8 -7
  281. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  282. package/esm2022/lib/query/shared/query.service.mjs +8 -10
  283. package/esm2022/lib/query/shared/query.utils.mjs +1 -1
  284. package/esm2022/lib/search/index.mjs +3 -5
  285. package/esm2022/lib/search/search-bar/search-bar.component.mjs +42 -19
  286. package/esm2022/lib/search/search-bar/search-bar.module.mjs +8 -61
  287. package/esm2022/lib/search/search-results/index.mjs +5 -0
  288. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +44 -19
  289. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +34 -18
  290. package/esm2022/lib/search/search-results/search-results-item.component.mjs +23 -12
  291. package/esm2022/lib/search/search-results/search-results.component.mjs +28 -14
  292. package/esm2022/lib/search/search-results/search-results.directive.mjs +7 -0
  293. package/esm2022/lib/search/search-results/search-results.module.mjs +8 -91
  294. package/esm2022/lib/search/search-selector/search-selector.component.mjs +27 -12
  295. package/esm2022/lib/search/search-selector/search-selector.module.mjs +8 -44
  296. package/esm2022/lib/search/search-settings/search-settings.component.mjs +40 -15
  297. package/esm2022/lib/search/search-settings/search-settings.module.mjs +7 -47
  298. package/esm2022/lib/search/search.module.mjs +24 -13
  299. package/esm2022/lib/search/shared/index.mjs +2 -1
  300. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +11 -10
  301. package/esm2022/lib/search/shared/search-source-service.providers.mjs +1 -1
  302. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  303. package/esm2022/lib/search/shared/search.enums.mjs +1 -1
  304. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  305. package/esm2022/lib/search/shared/search.provider.mjs +20 -0
  306. package/esm2022/lib/search/shared/search.service.mjs +32 -13
  307. package/esm2022/lib/search/shared/search.utils.mjs +2 -2
  308. package/esm2022/lib/search/shared/sources/cadastre.mjs +13 -10
  309. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +11 -2
  310. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  311. package/esm2022/lib/search/shared/sources/coordinates.mjs +16 -14
  312. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +14 -2
  313. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +32 -0
  314. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  315. package/esm2022/lib/search/shared/sources/icherche.mjs +28 -21
  316. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +23 -2
  317. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  318. package/esm2022/lib/search/shared/sources/ilayer.mjs +14 -12
  319. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +14 -2
  320. package/esm2022/lib/search/shared/sources/index.mjs +1 -1
  321. package/esm2022/lib/search/shared/sources/nominatim.mjs +10 -10
  322. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +10 -2
  323. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +13 -2
  324. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  325. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  326. package/esm2022/lib/search/shared/sources/storedqueries.mjs +17 -15
  327. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +17 -2
  328. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  329. package/esm2022/lib/search/shared/sources/workspace.mjs +12 -11
  330. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +11 -2
  331. package/esm2022/lib/style/index.mjs +1 -1
  332. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
  333. package/esm2022/lib/style/shared/feature/feature-style.mjs +3 -2
  334. package/esm2022/lib/style/shared/font.enum.mjs +1 -1
  335. package/esm2022/lib/style/shared/index.mjs +1 -1
  336. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
  337. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
  338. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
  339. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  340. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
  341. package/esm2022/lib/style/style-list/style-list.module.mjs +5 -5
  342. package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
  343. package/esm2022/lib/style/style-list/style-list.service.mjs +5 -5
  344. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +40 -17
  345. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +28 -14
  346. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +13 -9
  347. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  348. package/esm2022/lib/style/style-service/draw-style.service.mjs +5 -5
  349. package/esm2022/lib/style/style-service/style.service.mjs +4 -4
  350. package/esm2022/lib/style/style.module.mjs +12 -57
  351. package/esm2022/lib/toast/toast.component.mjs +21 -11
  352. package/esm2022/lib/toast/toast.module.mjs +10 -30
  353. package/esm2022/lib/utils/googleLinks.mjs +1 -1
  354. package/esm2022/lib/utils/id-generator.mjs +1 -1
  355. package/esm2022/lib/utils/osmLinks.mjs +1 -1
  356. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
  357. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +7 -7
  358. package/esm2022/lib/wkt/shared/wkt.service.mjs +19 -19
  359. package/esm2022/lib/wkt/wkt.module.mjs +8 -5
  360. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +11 -10
  361. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +8 -24
  362. package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
  363. package/esm2022/lib/workspace/shared/edition-workspace.mjs +2 -2
  364. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +19 -14
  365. package/esm2022/lib/workspace/shared/feature-workspace.mjs +2 -2
  366. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +14 -11
  367. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +2 -2
  368. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +14 -11
  369. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +12 -9
  370. package/esm2022/lib/workspace/shared/workspace.utils.mjs +4 -4
  371. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +7 -7
  372. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +8 -13
  373. package/esm2022/lib/workspace/widgets/widgets.mjs +2 -2
  374. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +9 -8
  375. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +8 -10
  376. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +7 -6
  377. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +8 -10
  378. package/esm2022/lib/workspace/workspace.module.mjs +11 -36
  379. package/esm2022/public_api.mjs +11 -12
  380. package/fesm2022/igo2-geo.mjs +23027 -22793
  381. package/fesm2022/igo2-geo.mjs.map +1 -1
  382. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +3 -3
  383. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +2 -2
  384. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +2 -2
  385. package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +2 -14
  386. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +4 -3
  387. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
  388. package/lib/catalog/catalog-library/catalog-library.component.d.ts +6 -3
  389. package/lib/catalog/catalog-library/catalog-library.module.d.ts +6 -18
  390. package/lib/catalog/catalog-library/index.d.ts +3 -0
  391. package/lib/catalog/catalog.module.d.ts +9 -9
  392. package/lib/catalog/index.d.ts +1 -0
  393. package/lib/catalog/shared/catalog.interface.d.ts +1 -1
  394. package/lib/catalog/shared/catalog.service.d.ts +3 -1
  395. package/lib/datasource/shared/datasource.service.d.ts +4 -5
  396. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +2 -3
  397. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +2 -3
  398. package/lib/datasource/shared/datasources/datasource.d.ts +1 -2
  399. package/lib/datasource/shared/datasources/feature-datasource.d.ts +2 -3
  400. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -3
  401. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +1 -2
  402. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +2 -3
  403. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +1 -2
  404. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -2
  405. package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
  406. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +4 -2
  407. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +2 -2
  408. package/lib/directions/directions-results/directions-results.component.d.ts +2 -2
  409. package/lib/directions/directions-sources/directions-source.d.ts +7 -3
  410. package/lib/directions/directions-sources/directions-source.interface.d.ts +19 -6
  411. package/lib/directions/directions-sources/directions-source.provider.d.ts +3 -1
  412. package/lib/directions/directions-sources/osrm-directions-source.d.ts +20 -11
  413. package/lib/directions/directions.component.d.ts +16 -4
  414. package/lib/directions/directions.module.d.ts +4 -16
  415. package/lib/directions/directions.provider.d.ts +3 -0
  416. package/lib/directions/index.d.ts +1 -0
  417. package/lib/directions/shared/directions.interface.d.ts +2 -9
  418. package/lib/directions/shared/directions.service.d.ts +7 -3
  419. package/lib/directions/shared/directions.utils.d.ts +2 -2
  420. package/lib/directions/shared/store.d.ts +1 -1
  421. package/lib/download/download-button/download-button.component.d.ts +1 -1
  422. package/lib/download/download.module.d.ts +4 -6
  423. package/lib/download/shared/download.service.d.ts +1 -1
  424. package/lib/draw/draw/draw-layer-popup.component.d.ts +1 -1
  425. package/lib/draw/draw/draw-popup.component.d.ts +5 -5
  426. package/lib/draw/draw/draw-shorcuts.component.d.ts +3 -1
  427. package/lib/draw/draw/draw.component.d.ts +3 -3
  428. package/lib/draw/draw/draw.module.d.ts +2 -25
  429. package/lib/draw/drawingTool.module.d.ts +3 -0
  430. package/lib/draw/shared/draw-icon.service.d.ts +1 -1
  431. package/lib/environment/environment.interface.d.ts +2 -1
  432. package/lib/feature/feature-details/feature-details.component.d.ts +8 -5
  433. package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
  434. package/lib/feature/feature-details/feature-details.module.d.ts +5 -6
  435. package/lib/feature/feature-details/index.d.ts +3 -0
  436. package/lib/feature/feature-form/feature-form.component.d.ts +2 -3
  437. package/lib/feature/feature-form/feature-form.module.d.ts +2 -4
  438. package/lib/feature/feature.module.d.ts +9 -4
  439. package/lib/feature/index.d.ts +2 -1
  440. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  441. package/lib/feature/shared/feature.utils.d.ts +1 -1
  442. package/lib/feature/shared/store.d.ts +1 -1
  443. package/lib/feature/shared/strategies/geo-properties.d.ts +1 -1
  444. package/lib/feature/shared/strategies/in-map-extent.d.ts +1 -1
  445. package/lib/feature/shared/strategies/in-map-resolution.d.ts +1 -1
  446. package/lib/feature/shared/strategies/loading-layer.d.ts +1 -1
  447. package/lib/feature/shared/strategies/loading.d.ts +1 -1
  448. package/lib/feature/shared/strategies/search.d.ts +1 -1
  449. package/lib/feature/shared/strategies/selection.d.ts +1 -1
  450. package/lib/filter/filter.module.d.ts +23 -28
  451. package/lib/filter/index.d.ts +1 -0
  452. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +3 -3
  453. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +3 -3
  454. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +5 -5
  455. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  456. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +5 -5
  457. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +3 -3
  458. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +3 -3
  459. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  460. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +3 -3
  461. package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
  462. package/lib/filter/shared/ogc-filter.d.ts +7 -0
  463. package/lib/filter/shared/ogc-filter.interface.d.ts +2 -3
  464. package/lib/filter/shared/spatial-filter.service.d.ts +2 -1
  465. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +7 -6
  466. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -3
  467. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +2 -2
  468. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  469. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +3 -3
  470. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  471. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  472. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
  473. package/lib/geo.module.d.ts +14 -24
  474. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +2 -3
  475. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
  476. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +5 -10
  477. package/lib/geometry/geometry-form-field/index.d.ts +3 -0
  478. package/lib/geometry/geometry.module.d.ts +5 -3
  479. package/lib/geometry/index.d.ts +1 -2
  480. package/lib/geometry/shared/controls/draw.d.ts +4 -4
  481. package/lib/geometry/shared/controls/slice.d.ts +4 -4
  482. package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
  483. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  484. package/lib/import-export/import-export/import-export.component.d.ts +7 -4
  485. package/lib/import-export/import-export.module.d.ts +8 -15
  486. package/lib/import-export/index.d.ts +1 -0
  487. package/lib/import-export/shared/drop-geo-file.directive.d.ts +5 -5
  488. package/lib/import-export/shared/export.service.d.ts +1 -1
  489. package/lib/import-export/shared/export.utils.d.ts +2 -2
  490. package/lib/import-export/shared/import.service.d.ts +1 -1
  491. package/lib/import-export/shared/import.utils.d.ts +2 -2
  492. package/lib/layer/index.d.ts +1 -0
  493. package/lib/layer/layer-item/layer-item.component.d.ts +2 -2
  494. package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -2
  495. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +2 -2
  496. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  497. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
  498. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +2 -2
  499. package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
  500. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  501. package/lib/layer/layer.module.d.ts +14 -18
  502. package/lib/layer/shared/layer.service.d.ts +1 -1
  503. package/lib/layer/shared/layers/image-layer.d.ts +1 -1
  504. package/lib/layer/shared/layers/layer.d.ts +1 -1
  505. package/lib/layer/shared/layers/layer.interface.d.ts +1 -1
  506. package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
  507. package/lib/layer/shared/layers/vector-layer.d.ts +4 -5
  508. package/lib/layer/shared/layers/vector-layer.interface.d.ts +1 -2
  509. package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
  510. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
  511. package/lib/layer/utils/image-watcher.d.ts +1 -1
  512. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +2 -2
  513. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  514. package/lib/map/geolocate-button/geolocate-button.component.d.ts +2 -2
  515. package/lib/map/home-extent-button/home-extent-button.component.d.ts +2 -2
  516. package/lib/map/info-section/info-section.component.d.ts +1 -1
  517. package/lib/map/map-browser/map-browser.component.d.ts +2 -2
  518. package/lib/map/map-center/map-center.component.d.ts +1 -1
  519. package/lib/map/map.module.d.ts +35 -21
  520. package/lib/map/menu-button/menu-button.component.d.ts +2 -2
  521. package/lib/map/offline-button/offline-button.component.d.ts +2 -2
  522. package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
  523. package/lib/map/shared/controllers/geolocation.d.ts +2 -1
  524. package/lib/map/shared/hover-feature.directive.d.ts +2 -2
  525. package/lib/map/shared/map-pointer-position.directive.d.ts +2 -2
  526. package/lib/map/shared/map.d.ts +2 -1
  527. package/lib/map/shared/mapOffline.directive.d.ts +3 -2
  528. package/lib/map/shared/projection.service.d.ts +1 -1
  529. package/lib/map/shared/projection.utils.d.ts +11 -0
  530. package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
  531. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +2 -2
  532. package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
  533. package/lib/measure/index.d.ts +1 -2
  534. package/lib/measure/measure.module.d.ts +3 -0
  535. package/lib/measure/measurer/index.d.ts +5 -0
  536. package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
  537. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  538. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  539. package/lib/measure/measurer/measurer.component.d.ts +4 -4
  540. package/lib/measure/measurer/measurer.module.d.ts +3 -18
  541. package/lib/measure/shared/measure.utils.d.ts +1 -1
  542. package/lib/metadata/index.d.ts +1 -0
  543. package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
  544. package/lib/metadata/metadata.module.d.ts +6 -7
  545. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
  546. package/lib/offline/geoDB/geoDB.service.d.ts +2 -3
  547. package/lib/offline/shared/geo-network.service.d.ts +1 -1
  548. package/lib/overlay/overlay.module.d.ts +4 -1
  549. package/lib/overlay/shared/overlay.directive.d.ts +1 -1
  550. package/lib/print/print/print.component.d.ts +1 -1
  551. package/lib/print/print-form/print-form.component.d.ts +5 -2
  552. package/lib/print/print.module.d.ts +4 -12
  553. package/lib/print/shared/print.interface.d.ts +1 -0
  554. package/lib/print/shared/print.service.d.ts +31 -18
  555. package/lib/query/query.module.d.ts +4 -4
  556. package/lib/query/shared/index.d.ts +1 -0
  557. package/lib/query/shared/query-search-source.providers.d.ts +1 -1
  558. package/lib/query/shared/query.directive.d.ts +1 -1
  559. package/lib/query/shared/query.interfaces.d.ts +1 -2
  560. package/lib/query/shared/query.service.d.ts +2 -3
  561. package/lib/search/index.d.ts +2 -4
  562. package/lib/search/search-bar/search-bar.component.d.ts +4 -3
  563. package/lib/search/search-bar/search-bar.module.d.ts +2 -16
  564. package/lib/search/search-results/index.d.ts +4 -0
  565. package/lib/search/search-results/save-feature-dialog.component.d.ts +2 -2
  566. package/lib/search/search-results/search-results-add-button.component.d.ts +4 -4
  567. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  568. package/lib/search/search-results/search-results.component.d.ts +3 -3
  569. package/lib/search/search-results/search-results.directive.d.ts +3 -0
  570. package/lib/search/search-results/search-results.module.d.ts +3 -21
  571. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  572. package/lib/search/search-selector/search-selector.module.d.ts +2 -11
  573. package/lib/search/search-settings/search-settings.component.d.ts +3 -2
  574. package/lib/search/search-settings/search-settings.module.d.ts +2 -12
  575. package/lib/search/search.module.d.ts +14 -7
  576. package/lib/search/shared/index.d.ts +1 -0
  577. package/lib/search/shared/search-pointer-summary.directive.d.ts +2 -2
  578. package/lib/search/shared/search-source.service.d.ts +1 -1
  579. package/lib/search/shared/search.interfaces.d.ts +12 -10
  580. package/lib/search/shared/search.provider.d.ts +8 -0
  581. package/lib/search/shared/search.service.d.ts +8 -3
  582. package/lib/search/shared/sources/cadastre.d.ts +2 -1
  583. package/lib/search/shared/sources/cadastre.providers.d.ts +6 -2
  584. package/lib/search/shared/sources/coordinates.d.ts +2 -1
  585. package/lib/search/shared/sources/coordinates.providers.d.ts +6 -2
  586. package/lib/search/shared/sources/icherche-icons.d.ts +7 -0
  587. package/lib/search/shared/sources/icherche.d.ts +2 -1
  588. package/lib/search/shared/sources/icherche.providers.d.ts +10 -14
  589. package/lib/search/shared/sources/ilayer.d.ts +2 -1
  590. package/lib/search/shared/sources/ilayer.providers.d.ts +6 -2
  591. package/lib/search/shared/sources/nominatim.d.ts +1 -1
  592. package/lib/search/shared/sources/nominatim.providers.d.ts +5 -2
  593. package/lib/search/shared/sources/source.d.ts +2 -2
  594. package/lib/search/shared/sources/source.interfaces.d.ts +16 -0
  595. package/lib/search/shared/sources/storedqueries.d.ts +2 -1
  596. package/lib/search/shared/sources/storedqueries.providers.d.ts +8 -3
  597. package/lib/search/shared/sources/workspace.d.ts +2 -1
  598. package/lib/search/shared/sources/workspace.providers.d.ts +6 -2
  599. package/lib/style/shared/vector/conversion.utils.d.ts +2 -3
  600. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +1 -1
  601. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +1 -1
  602. package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +1 -1
  603. package/lib/style/style.module.d.ts +5 -16
  604. package/lib/toast/toast.component.d.ts +2 -2
  605. package/lib/toast/toast.module.d.ts +4 -6
  606. package/lib/utils/propertyTypeDetector/propertyTypeDetector.service.d.ts +1 -1
  607. package/lib/wkt/shared/wkt.service.d.ts +1 -1
  608. package/lib/wkt/wkt.module.d.ts +3 -0
  609. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +2 -2
  610. package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +2 -6
  611. package/lib/workspace/shared/edition-workspace.d.ts +2 -2
  612. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -2
  613. package/lib/workspace/shared/feature-workspace.d.ts +1 -1
  614. package/lib/workspace/shared/feature-workspace.service.d.ts +2 -1
  615. package/lib/workspace/shared/wfs-workspace.d.ts +1 -1
  616. package/lib/workspace/shared/wfs-workspace.service.d.ts +2 -1
  617. package/lib/workspace/shared/wms-workspace.service.d.ts +2 -1
  618. package/lib/workspace/shared/workspace.utils.d.ts +2 -1
  619. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +3 -2
  620. package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +2 -6
  621. package/lib/workspace/widgets/widgets.d.ts +1 -1
  622. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +2 -2
  623. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +2 -3
  624. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +2 -2
  625. package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +2 -3
  626. package/lib/workspace/workspace.module.d.ts +5 -9
  627. package/locale/en.geo.json +824 -818
  628. package/locale/fr.geo.json +825 -819
  629. package/package.json +14 -12
  630. package/public_api.d.ts +10 -11
  631. package/src/_index.scss +2 -2
  632. package/src/geo-theme.scss +23 -23
  633. package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -22
  634. package/src/lib/catalog/catalog.theming.scss +5 -5
  635. package/src/lib/directions/directions-results/directions-results.theming.scss +10 -10
  636. package/src/lib/directions/directions.theming.scss +6 -6
  637. package/src/lib/draw/draw.theming.scss +32 -32
  638. package/src/lib/feature/feature-details/feature-details.theming.scss +16 -16
  639. package/src/lib/feature/feature.theming.scss +4 -4
  640. package/src/lib/filter/filter.theming.scss +13 -13
  641. package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
  642. package/src/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
  643. package/src/lib/layer/layer-item/layer-item.theme.scss +33 -33
  644. package/src/lib/layer/layer-legend/layer-legend.theming.scss +10 -10
  645. package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +34 -34
  646. package/src/lib/layer/layer.theming.scss +10 -10
  647. package/src/lib/map/map-browser/map-browser.theming.scss +46 -46
  648. package/src/lib/map/map.theming.scss +9 -9
  649. package/src/lib/map/menu-button/menu-button.theming.scss +20 -20
  650. package/src/lib/map/zoom-button/zoom-button.theming.scss +32 -32
  651. package/src/lib/measure/measure.theming.scss +5 -5
  652. package/src/lib/measure/measurer/measurer.theming.scss +26 -26
  653. package/src/lib/search/search-bar/search-bar.theming.scss +33 -33
  654. package/src/lib/search/search-results/search-results-item.theme.scss +20 -20
  655. package/src/lib/search/search.theming.scss +7 -7
  656. package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
  657. package/src/lib/workspace/workspace.theming.scss +6 -6
  658. package/src/style/style.scss +1 -1
  659. package/style/style.css +2 -1
  660. package/esm2022/lib/datasource/datasource.module.mjs +0 -22
  661. package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +0 -40
  662. package/lib/datasource/datasource.module.d.ts +0 -8
  663. package/lib/search/search-bar/search-url-param.directive.d.ts +0 -13
@@ -1,28 +1,39 @@
1
+ import { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
1
2
  import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, Input, Output } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { MatBadgeModule } from '@angular/material/badge';
5
+ import { MatButtonModule } from '@angular/material/button';
6
+ import { MatCheckboxModule } from '@angular/material/checkbox';
7
+ import { MatDividerModule } from '@angular/material/divider';
8
+ import { MatIconModule } from '@angular/material/icon';
9
+ import { MatMenuModule } from '@angular/material/menu';
10
+ import { MatSliderModule } from '@angular/material/slider';
11
+ import { MatTooltipModule } from '@angular/material/tooltip';
12
+ import { ListComponent, ListItemDirective } from '@igo2/common/list';
13
+ import { PanelComponent } from '@igo2/common/panel';
14
+ import { IgoLanguageModule } from '@igo2/core/language';
2
15
  import * as olextent from 'ol/extent';
3
16
  import { BehaviorSubject, EMPTY, ReplaySubject, timer } from 'rxjs';
4
17
  import { debounce } from 'rxjs/operators';
5
18
  import scrollIntoView from 'scroll-into-view-if-needed';
6
19
  import { getAllChildLayersByProperty, getRootParentByProperty } from '../../map/shared/linkedLayers.utils';
7
20
  import { IgoMap } from '../../map/shared/map';
21
+ import { LayerItemComponent } from '../layer-item/layer-item.component';
22
+ import { LayerListToolComponent } from '../layer-list-tool/layer-list-tool.component';
8
23
  import { LinkedProperties } from '../shared/layers/layer.interface';
9
24
  import { LayerListControlsEnum, LayerListDisplacement } from './layer-list.enum';
10
25
  import { LayerListSelectVisibleEnum } from './layer-list.enum';
11
26
  import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/forms";
13
- import * as i2 from "@angular/common";
14
- import * as i3 from "@angular/material/divider";
15
- import * as i4 from "@angular/material/menu";
27
+ import * as i1 from "@angular/material/checkbox";
28
+ import * as i2 from "@angular/material/divider";
29
+ import * as i3 from "@angular/material/button";
30
+ import * as i4 from "@angular/material/tooltip";
16
31
  import * as i5 from "@angular/material/icon";
17
- import * as i6 from "@angular/material/button";
18
- import * as i7 from "@angular/material/tooltip";
32
+ import * as i6 from "@angular/material/badge";
33
+ import * as i7 from "@angular/material/menu";
19
34
  import * as i8 from "@angular/material/slider";
20
- import * as i9 from "@angular/material/badge";
21
- import * as i10 from "@angular/material/checkbox";
22
- import * as i11 from "@igo2/common";
23
- import * as i12 from "../layer-item/layer-item.component";
24
- import * as i13 from "../layer-list-tool/layer-list-tool.component";
25
- import * as i14 from "@ngx-translate/core";
35
+ import * as i9 from "@angular/forms";
36
+ import * as i10 from "@ngx-translate/core";
26
37
  // TODO: This class could use a clean up. Also, some methods could be moved ealsewhere
27
38
  export class LayerListComponent {
28
39
  elRef;
@@ -761,13 +772,33 @@ export class LayerListComponent {
761
772
  }
762
773
  return layersList;
763
774
  }
764
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayerListComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
765
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayerListComponent, selector: "igo-layer-list", inputs: { layersAreAllVisible: "layersAreAllVisible", ogcButton: "ogcButton", timeButton: "timeButton", map: "map", layers: "layers", floatLabel: "floatLabel", layerFilterAndSortOptions: "layerFilterAndSortOptions", excludeBaseLayers: "excludeBaseLayers", toggleLegendOnVisibilityChange: "toggleLegendOnVisibilityChange", expandLegendOfVisibleLayers: "expandLegendOfVisibleLayers", updateLegendOnResolutionChange: "updateLegendOnResolutionChange", queryBadge: "queryBadge" }, outputs: { appliedFilterAndSort: "appliedFilterAndSort" }, queries: [{ propertyName: "templateLayerToolbar", first: true, predicate: ["igoLayerItemToolbar"], descendants: true }], ngImport: i0, template: "<igo-layer-list-tool\r\n *ngIf=\"showToolbar$ | async\"\r\n floatLabel=\"auto\"\r\n [layersAreAllVisible]=\"layersAreAllVisible\"\r\n [term]=\"layerFilterAndSortOptions.keyword\"\r\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\r\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\r\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\r\n (selection)=\"toggleSelectionMode($event)\"\r\n>\r\n</igo-layer-list-tool>\r\n\r\n<div *ngIf=\"selection\" class=\"select-all\">\r\n <mat-checkbox\r\n class=\"select-all-checkbox\"\r\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\r\n (change)=\"selectAll()\"\r\n [checked]=\"selectAllCheck\"\r\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\r\n >\r\n {{\r\n selectAllCheck\r\n ? ('igo.geo.layer.deselectAll' | translate)\r\n : ('igo.geo.layer.selectAll' | translate)\r\n }}\r\n </mat-checkbox>\r\n</div>\r\n<mat-divider></mat-divider>\r\n\r\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\r\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\r\n <igo-layer-item\r\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\r\n igoListItem\r\n [layer]=\"layer\"\r\n [activeLayer]=\"activeLayer\"\r\n [orderable]=\"orderable && !layer.baseLayer\"\r\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\r\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\r\n [queryBadge]=\"queryBadge\"\r\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\r\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\r\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\r\n [selectionMode]=\"selection\"\r\n [selectAll]=\"selectAllCheck\"\r\n [layerCheck]=\"layer.options.check\"\r\n [changeDetection]=\"layerItemChangeDetection$\"\r\n (action)=\"toggleLayerTool($event)\"\r\n (checkbox)=\"layersCheck($event)\"\r\n >\r\n </igo-layer-item>\r\n </ng-template>\r\n</igo-list>\r\n\r\n<igo-panel\r\n *ngIf=\"!selection && layerTool && activeLayer\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"activeLayer.title\"\r\n>\r\n <div class=\"igo-layer-button-group\">\r\n <button\r\n *ngIf=\"isLayerRemovable(activeLayer)\"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\r\n (click)=\"removeLayers()\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabled\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabled\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"badgeOpacity\"\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"opacity\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\r\n <mat-slider\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n discrete\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"opacity\"\r\n (input)=\"\r\n changeOpacity({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n />\r\n </mat-slider>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\r\n (click)=\"zoomLayerExtents(activeLayer)\"\r\n >\r\n <mat-icon\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"magnify-scan\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <ng-container\r\n igoLayerItemToolbar\r\n [ngTemplateOutlet]=\"templateLayerToolbar\"\r\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\r\n >\r\n </ng-container>\r\n\r\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\r\n </div>\r\n</igo-panel>\r\n\r\n<igo-panel\r\n *ngIf=\"selection && layers.length > 0\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"'igo.geo.layer.tools' | translate\"\r\n>\r\n <div class=\"actions-buttons-multi\">\r\n <button\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n isAllLayersRemovable(layersChecked)\r\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\r\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\r\n \"\r\n (click)=\"removeLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"'!'\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\r\n svgIcon=\"delete\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"eye-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN'\r\n ? ('igo.geo.layer.showSelectedLayers' | translate)\r\n : ('igo.geo.layer.hideSelectedLayers' | translate)\r\n \"\r\n (click)=\"toggleVisibility(layersChecked)\"\r\n >\r\n <mat-icon\r\n [svgIcon]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN' ? 'eye-off' : 'eye'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabledSelection\"\r\n (click)=\"lowerLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabledSelection\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabledSelection\"\r\n (click)=\"raiseLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabledSelection\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon svgIcon=\"opacity\"></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\r\n <div id=\"opacity-menu\">\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n *ngIf=\"layersChecked.length\"\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n thumbLabel\r\n showTickMarks\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [(ngModel)]=\"checkOpacity\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n (click)=\"$event.stopPropagation()\"\r\n ><input matSliderThumb />\r\n </mat-slider>\r\n </div>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"\r\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\r\n \"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\r\n (click)=\"zoomLayersExtents(layersChecked)\"\r\n >\r\n <mat-icon svgIcon=\"magnify-scan\"></mat-icon>\r\n </button>\r\n </div>\r\n</igo-panel>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i8.MatSlider, selector: "mat-slider", inputs: ["color", "disableRipple", "disabled", "discrete", "showTickMarks", "min", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i8.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i11.ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "component", type: i11.ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "component", type: i11.PanelComponent, selector: "igo-panel", inputs: ["title", "withHeader", "cursorPointer"] }, { kind: "component", type: i12.LayerItemComponent, selector: "igo-layer-item", inputs: ["activeLayer", "selectAll", "layerCheck", "layer", "toggleLegendOnVisibilityChange", "expandLegendIfVisible", "updateLegendOnResolutionChange", "orderable", "lowerDisabled", "raiseDisabled", "queryBadge", "selectionMode", "changeDetection"], outputs: ["action", "checkbox"] }, { kind: "component", type: i13.LayerListToolComponent, selector: "igo-layer-list-tool", inputs: ["layersAreAllVisible", "floatLabel", "onlyVisible", "sortAlpha", "term"], outputs: ["appliedFilterAndSort", "selection"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
775
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: LayerListComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
776
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: LayerListComponent, isStandalone: true, selector: "igo-layer-list", inputs: { layersAreAllVisible: "layersAreAllVisible", ogcButton: "ogcButton", timeButton: "timeButton", map: "map", layers: "layers", floatLabel: "floatLabel", layerFilterAndSortOptions: "layerFilterAndSortOptions", excludeBaseLayers: "excludeBaseLayers", toggleLegendOnVisibilityChange: "toggleLegendOnVisibilityChange", expandLegendOfVisibleLayers: "expandLegendOfVisibleLayers", updateLegendOnResolutionChange: "updateLegendOnResolutionChange", queryBadge: "queryBadge" }, outputs: { appliedFilterAndSort: "appliedFilterAndSort" }, queries: [{ propertyName: "templateLayerToolbar", first: true, predicate: ["igoLayerItemToolbar"], descendants: true }], ngImport: i0, template: "<igo-layer-list-tool\n *ngIf=\"showToolbar$ | async\"\n floatLabel=\"auto\"\n [layersAreAllVisible]=\"layersAreAllVisible\"\n [term]=\"layerFilterAndSortOptions.keyword\"\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\n (selection)=\"toggleSelectionMode($event)\"\n>\n</igo-layer-list-tool>\n\n<div *ngIf=\"selection\" class=\"select-all\">\n <mat-checkbox\n class=\"select-all-checkbox\"\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\n (change)=\"selectAll()\"\n [checked]=\"selectAllCheck\"\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\n >\n {{\n selectAllCheck\n ? ('igo.geo.layer.deselectAll' | translate)\n : ('igo.geo.layer.selectAll' | translate)\n }}\n </mat-checkbox>\n</div>\n<mat-divider></mat-divider>\n\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\n <igo-layer-item\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\n igoListItem\n [layer]=\"layer\"\n [activeLayer]=\"activeLayer\"\n [orderable]=\"orderable && !layer.baseLayer\"\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\n [queryBadge]=\"queryBadge\"\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\n [selectionMode]=\"selection\"\n [selectAll]=\"selectAllCheck\"\n [layerCheck]=\"layer.options.check\"\n [changeDetection]=\"layerItemChangeDetection$\"\n (action)=\"toggleLayerTool($event)\"\n (checkbox)=\"layersCheck($event)\"\n >\n </igo-layer-item>\n </ng-template>\n</igo-list>\n\n<igo-panel\n *ngIf=\"!selection && layerTool && activeLayer\"\n class=\"igo-layer-actions-container\"\n [title]=\"activeLayer.title\"\n>\n <div class=\"igo-layer-button-group\">\n <button\n *ngIf=\"isLayerRemovable(activeLayer)\"\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\n (click)=\"removeLayers()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <button\n class=\"down-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterLowerLayer' | translate)\n : ('igo.geo.layer.lowerLayer' | translate)\n \"\n [disabled]=\"lowerDisabled\"\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"lowerDisabled\"\n >arrow_downward</mat-icon\n >\n </button>\n\n <button\n class=\"up-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\n : ('igo.geo.layer.raiseLayer' | translate)\n \"\n [disabled]=\"raiseDisabled\"\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"raiseDisabled\"\n >arrow_upward</mat-icon\n >\n </button>\n\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\n <button\n class=\"opacity-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"opacityMenu\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"badgeOpacity\"\n matBadgeColor=\"primary\"\n matBadgeSize=\"medium\"\n >opacity</mat-icon\n >\n </button>\n\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\n <mat-slider\n id=\"opacity-slider\"\n color=\"primary\"\n discrete\n step=\"5\"\n [min]=\"0\"\n [max]=\"100\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n (click)=\"$event.stopPropagation()\"\n matTooltipShowDelay=\"500\"\n tooltip-position=\"below\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"opacity\"\n (input)=\"\n changeOpacity({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n />\n </mat-slider>\n </mat-menu>\n\n <button\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\n class=\"zoomLayer-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\n (click)=\"zoomLayerExtents(activeLayer)\"\n >\n <mat-icon matBadgeColor=\"primary\" matBadgeSize=\"medium\"\n >frame_inspect</mat-icon\n >\n </button>\n\n <ng-container\n igoLayerItemToolbar\n [ngTemplateOutlet]=\"templateLayerToolbar\"\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\n >\n </ng-container>\n\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\n </div>\n</igo-panel>\n\n<igo-panel\n *ngIf=\"selection && layers.length > 0\"\n class=\"igo-layer-actions-container\"\n [title]=\"'igo.geo.layer.tools' | translate\"\n>\n <div class=\"actions-buttons-multi\">\n <button\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matTooltip]=\"\n isAllLayersRemovable(layersChecked)\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\n \"\n (click)=\"removeLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"'!'\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\n >delete</mat-icon\n >\n </button>\n\n <button\n class=\"eye-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matTooltip]=\"\n statusSelectedLayersCheck === 'ALL_HIDDEN'\n ? ('igo.geo.layer.showSelectedLayers' | translate)\n : ('igo.geo.layer.hideSelectedLayers' | translate)\n \"\n (click)=\"toggleVisibility(layersChecked)\"\n >\n <mat-icon>{{\n statusSelectedLayersCheck === 'ALL_HIDDEN'\n ? 'visibility_off'\n : 'visibility'\n }}</mat-icon>\n </button>\n\n <button\n class=\"down-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterLowerLayer' | translate)\n : ('igo.geo.layer.lowerLayer' | translate)\n \"\n [disabled]=\"lowerDisabledSelection\"\n (click)=\"lowerLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"lowerDisabledSelection\"\n >arrow_downward</mat-icon\n >\n </button>\n\n <button\n class=\"up-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\n : ('igo.geo.layer.raiseLayer' | translate)\n \"\n [disabled]=\"raiseDisabledSelection\"\n (click)=\"raiseLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"raiseDisabledSelection\"\n >arrow_upward</mat-icon\n >\n </button>\n\n <button\n class=\"opacity-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matMenuTriggerFor]=\"opacityMenu\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n >\n <mat-icon>opacity</mat-icon>\n </button>\n\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\n <div id=\"opacity-menu\">\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n *ngIf=\"layersChecked.length\"\n id=\"opacity-slider\"\n color=\"primary\"\n thumbLabel\n showTickMarks\n step=\"5\"\n [min]=\"0\"\n [max]=\"100\"\n [(ngModel)]=\"checkOpacity\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n matTooltipShowDelay=\"500\"\n tooltip-position=\"below\"\n (click)=\"$event.stopPropagation()\"\n ><input matSliderThumb />\n </mat-slider>\n </div>\n </mat-menu>\n\n <button\n *ngIf=\"\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\n \"\n class=\"zoomLayer-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\n (click)=\"zoomLayersExtents(layersChecked)\"\n >\n <mat-icon>frame_inspect</mat-icon>\n </button>\n </div>\n</igo-panel>\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LayerListToolComponent, selector: "igo-layer-list-tool", inputs: ["layersAreAllVisible", "floatLabel", "onlyVisible", "sortAlpha", "term"], outputs: ["appliedFilterAndSort", "selection"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: LayerItemComponent, selector: "igo-layer-item", inputs: ["activeLayer", "selectAll", "layerCheck", "layer", "toggleLegendOnVisibilityChange", "expandLegendIfVisible", "updateLegendOnResolutionChange", "orderable", "lowerDisabled", "raiseDisabled", "queryBadge", "selectionMode", "changeDetection"], outputs: ["action", "checkbox"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "component", type: PanelComponent, selector: "igo-panel", inputs: ["title", "withHeader", "cursorPointer"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i6.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i8.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i8.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
766
777
  }
767
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayerListComponent, decorators: [{
778
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: LayerListComponent, decorators: [{
768
779
  type: Component,
769
- args: [{ selector: 'igo-layer-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-layer-list-tool\r\n *ngIf=\"showToolbar$ | async\"\r\n floatLabel=\"auto\"\r\n [layersAreAllVisible]=\"layersAreAllVisible\"\r\n [term]=\"layerFilterAndSortOptions.keyword\"\r\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\r\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\r\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\r\n (selection)=\"toggleSelectionMode($event)\"\r\n>\r\n</igo-layer-list-tool>\r\n\r\n<div *ngIf=\"selection\" class=\"select-all\">\r\n <mat-checkbox\r\n class=\"select-all-checkbox\"\r\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\r\n (change)=\"selectAll()\"\r\n [checked]=\"selectAllCheck\"\r\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\r\n >\r\n {{\r\n selectAllCheck\r\n ? ('igo.geo.layer.deselectAll' | translate)\r\n : ('igo.geo.layer.selectAll' | translate)\r\n }}\r\n </mat-checkbox>\r\n</div>\r\n<mat-divider></mat-divider>\r\n\r\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\r\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\r\n <igo-layer-item\r\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\r\n igoListItem\r\n [layer]=\"layer\"\r\n [activeLayer]=\"activeLayer\"\r\n [orderable]=\"orderable && !layer.baseLayer\"\r\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\r\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\r\n [queryBadge]=\"queryBadge\"\r\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\r\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\r\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\r\n [selectionMode]=\"selection\"\r\n [selectAll]=\"selectAllCheck\"\r\n [layerCheck]=\"layer.options.check\"\r\n [changeDetection]=\"layerItemChangeDetection$\"\r\n (action)=\"toggleLayerTool($event)\"\r\n (checkbox)=\"layersCheck($event)\"\r\n >\r\n </igo-layer-item>\r\n </ng-template>\r\n</igo-list>\r\n\r\n<igo-panel\r\n *ngIf=\"!selection && layerTool && activeLayer\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"activeLayer.title\"\r\n>\r\n <div class=\"igo-layer-button-group\">\r\n <button\r\n *ngIf=\"isLayerRemovable(activeLayer)\"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\r\n (click)=\"removeLayers()\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabled\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabled\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"badgeOpacity\"\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"opacity\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\r\n <mat-slider\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n discrete\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"opacity\"\r\n (input)=\"\r\n changeOpacity({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n />\r\n </mat-slider>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\r\n (click)=\"zoomLayerExtents(activeLayer)\"\r\n >\r\n <mat-icon\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"magnify-scan\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <ng-container\r\n igoLayerItemToolbar\r\n [ngTemplateOutlet]=\"templateLayerToolbar\"\r\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\r\n >\r\n </ng-container>\r\n\r\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\r\n </div>\r\n</igo-panel>\r\n\r\n<igo-panel\r\n *ngIf=\"selection && layers.length > 0\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"'igo.geo.layer.tools' | translate\"\r\n>\r\n <div class=\"actions-buttons-multi\">\r\n <button\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n isAllLayersRemovable(layersChecked)\r\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\r\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\r\n \"\r\n (click)=\"removeLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"'!'\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\r\n svgIcon=\"delete\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"eye-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN'\r\n ? ('igo.geo.layer.showSelectedLayers' | translate)\r\n : ('igo.geo.layer.hideSelectedLayers' | translate)\r\n \"\r\n (click)=\"toggleVisibility(layersChecked)\"\r\n >\r\n <mat-icon\r\n [svgIcon]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN' ? 'eye-off' : 'eye'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabledSelection\"\r\n (click)=\"lowerLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabledSelection\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabledSelection\"\r\n (click)=\"raiseLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabledSelection\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon svgIcon=\"opacity\"></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\r\n <div id=\"opacity-menu\">\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n *ngIf=\"layersChecked.length\"\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n thumbLabel\r\n showTickMarks\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [(ngModel)]=\"checkOpacity\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n (click)=\"$event.stopPropagation()\"\r\n ><input matSliderThumb />\r\n </mat-slider>\r\n </div>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"\r\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\r\n \"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\r\n (click)=\"zoomLayersExtents(layersChecked)\"\r\n >\r\n <mat-icon svgIcon=\"magnify-scan\"></mat-icon>\r\n </button>\r\n </div>\r\n</igo-panel>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"] }]
770
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { templateLayerToolbar: [{
780
+ args: [{ selector: 'igo-layer-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
781
+ NgIf,
782
+ LayerListToolComponent,
783
+ MatCheckboxModule,
784
+ MatDividerModule,
785
+ ListComponent,
786
+ NgFor,
787
+ LayerItemComponent,
788
+ ListItemDirective,
789
+ PanelComponent,
790
+ MatButtonModule,
791
+ MatTooltipModule,
792
+ MatIconModule,
793
+ MatBadgeModule,
794
+ MatMenuModule,
795
+ MatSliderModule,
796
+ NgTemplateOutlet,
797
+ FormsModule,
798
+ AsyncPipe,
799
+ IgoLanguageModule
800
+ ], template: "<igo-layer-list-tool\n *ngIf=\"showToolbar$ | async\"\n floatLabel=\"auto\"\n [layersAreAllVisible]=\"layersAreAllVisible\"\n [term]=\"layerFilterAndSortOptions.keyword\"\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\n (selection)=\"toggleSelectionMode($event)\"\n>\n</igo-layer-list-tool>\n\n<div *ngIf=\"selection\" class=\"select-all\">\n <mat-checkbox\n class=\"select-all-checkbox\"\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\n (change)=\"selectAll()\"\n [checked]=\"selectAllCheck\"\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\n >\n {{\n selectAllCheck\n ? ('igo.geo.layer.deselectAll' | translate)\n : ('igo.geo.layer.selectAll' | translate)\n }}\n </mat-checkbox>\n</div>\n<mat-divider></mat-divider>\n\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\n <igo-layer-item\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\n igoListItem\n [layer]=\"layer\"\n [activeLayer]=\"activeLayer\"\n [orderable]=\"orderable && !layer.baseLayer\"\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\n [queryBadge]=\"queryBadge\"\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\n [selectionMode]=\"selection\"\n [selectAll]=\"selectAllCheck\"\n [layerCheck]=\"layer.options.check\"\n [changeDetection]=\"layerItemChangeDetection$\"\n (action)=\"toggleLayerTool($event)\"\n (checkbox)=\"layersCheck($event)\"\n >\n </igo-layer-item>\n </ng-template>\n</igo-list>\n\n<igo-panel\n *ngIf=\"!selection && layerTool && activeLayer\"\n class=\"igo-layer-actions-container\"\n [title]=\"activeLayer.title\"\n>\n <div class=\"igo-layer-button-group\">\n <button\n *ngIf=\"isLayerRemovable(activeLayer)\"\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\n (click)=\"removeLayers()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <button\n class=\"down-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterLowerLayer' | translate)\n : ('igo.geo.layer.lowerLayer' | translate)\n \"\n [disabled]=\"lowerDisabled\"\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"lowerDisabled\"\n >arrow_downward</mat-icon\n >\n </button>\n\n <button\n class=\"up-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\n : ('igo.geo.layer.raiseLayer' | translate)\n \"\n [disabled]=\"raiseDisabled\"\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"raiseDisabled\"\n >arrow_upward</mat-icon\n >\n </button>\n\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\n <button\n class=\"opacity-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"opacityMenu\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"badgeOpacity\"\n matBadgeColor=\"primary\"\n matBadgeSize=\"medium\"\n >opacity</mat-icon\n >\n </button>\n\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\n <mat-slider\n id=\"opacity-slider\"\n color=\"primary\"\n discrete\n step=\"5\"\n [min]=\"0\"\n [max]=\"100\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n (click)=\"$event.stopPropagation()\"\n matTooltipShowDelay=\"500\"\n tooltip-position=\"below\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"opacity\"\n (input)=\"\n changeOpacity({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n />\n </mat-slider>\n </mat-menu>\n\n <button\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\n class=\"zoomLayer-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\n (click)=\"zoomLayerExtents(activeLayer)\"\n >\n <mat-icon matBadgeColor=\"primary\" matBadgeSize=\"medium\"\n >frame_inspect</mat-icon\n >\n </button>\n\n <ng-container\n igoLayerItemToolbar\n [ngTemplateOutlet]=\"templateLayerToolbar\"\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\n >\n </ng-container>\n\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\n </div>\n</igo-panel>\n\n<igo-panel\n *ngIf=\"selection && layers.length > 0\"\n class=\"igo-layer-actions-container\"\n [title]=\"'igo.geo.layer.tools' | translate\"\n>\n <div class=\"actions-buttons-multi\">\n <button\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matTooltip]=\"\n isAllLayersRemovable(layersChecked)\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\n \"\n (click)=\"removeLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"'!'\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\n >delete</mat-icon\n >\n </button>\n\n <button\n class=\"eye-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matTooltip]=\"\n statusSelectedLayersCheck === 'ALL_HIDDEN'\n ? ('igo.geo.layer.showSelectedLayers' | translate)\n : ('igo.geo.layer.hideSelectedLayers' | translate)\n \"\n (click)=\"toggleVisibility(layersChecked)\"\n >\n <mat-icon>{{\n statusSelectedLayersCheck === 'ALL_HIDDEN'\n ? 'visibility_off'\n : 'visibility'\n }}</mat-icon>\n </button>\n\n <button\n class=\"down-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterLowerLayer' | translate)\n : ('igo.geo.layer.lowerLayer' | translate)\n \"\n [disabled]=\"lowerDisabledSelection\"\n (click)=\"lowerLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"lowerDisabledSelection\"\n >arrow_downward</mat-icon\n >\n </button>\n\n <button\n class=\"up-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\n : ('igo.geo.layer.raiseLayer' | translate)\n \"\n [disabled]=\"raiseDisabledSelection\"\n (click)=\"raiseLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"raiseDisabledSelection\"\n >arrow_upward</mat-icon\n >\n </button>\n\n <button\n class=\"opacity-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matMenuTriggerFor]=\"opacityMenu\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n >\n <mat-icon>opacity</mat-icon>\n </button>\n\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\n <div id=\"opacity-menu\">\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n *ngIf=\"layersChecked.length\"\n id=\"opacity-slider\"\n color=\"primary\"\n thumbLabel\n showTickMarks\n step=\"5\"\n [min]=\"0\"\n [max]=\"100\"\n [(ngModel)]=\"checkOpacity\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n matTooltipShowDelay=\"500\"\n tooltip-position=\"below\"\n (click)=\"$event.stopPropagation()\"\n ><input matSliderThumb />\n </mat-slider>\n </div>\n </mat-menu>\n\n <button\n *ngIf=\"\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\n \"\n class=\"zoomLayer-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\n (click)=\"zoomLayersExtents(layersChecked)\"\n >\n <mat-icon>frame_inspect</mat-icon>\n </button>\n </div>\n</igo-panel>\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"] }]
801
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { templateLayerToolbar: [{
771
802
  type: ContentChild,
772
803
  args: ['igoLayerItemToolbar', /* TODO: add static flag */ {}]
773
804
  }], layersAreAllVisible: [{
@@ -797,4 +828,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
797
828
  }], appliedFilterAndSort: [{
798
829
  type: Output
799
830
  }] } });
800
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9sYXllci1saXN0L2xheWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXItbGlzdC9sYXllci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUNMLGVBQWUsRUFDZixLQUFLLEVBQ0wsYUFBYSxFQUViLEtBQUssRUFDTixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLGNBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU85QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUN0QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRS9ELHNGQUFzRjtBQU90RixNQUFNLE9BQU8sa0JBQWtCO0lBdUxUO0lBdExwQixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLHdCQUF3QixHQUFH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QU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDL0MsT0FBTyxVQUFVLElBQUksYUFBYSxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUM7SUFDOUQsQ0FBQztJQUVELHdCQUF3QixDQUFDLFVBQW1CO1FBQzFDLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxFQUFFO1lBQzlCLElBQUksS0FBSyxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRTtnQkFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0I7U0FDRjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7d0dBOTRCVSxrQkFBa0I7NEZBQWxCLGtCQUFrQixzc0JDcEQvQixvMldBMFZBOzs0RkR0U2Esa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNO2lHQXlCL0Msb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLDJCQUEyQixDQUFDLEVBQUU7Z0JBRzFELG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0YsR0FBRztzQkFETixLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSztnQkFtQkcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFFRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBRUcsOEJBQThCO3NCQUF0QyxLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0U2xpZGVyQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcclxuXHJcbmltcG9ydCAqIGFzIG9sZXh0ZW50IGZyb20gJ29sL2V4dGVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCxcclxuICBFTVBUWSxcclxuICBSZXBsYXlTdWJqZWN0LFxyXG4gIFN1YnNjcmlwdGlvbixcclxuICB0aW1lclxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHNjcm9sbEludG9WaWV3IGZyb20gJ3Njcm9sbC1pbnRvLXZpZXctaWYtbmVlZGVkJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0QWxsQ2hpbGRMYXllcnNCeVByb3BlcnR5LFxyXG4gIGdldFJvb3RQYXJlbnRCeVByb3BlcnR5XHJcbn0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9saW5rZWRMYXllcnMudXRpbHMnO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XHJcbmltcG9ydCB7XHJcbiAgTWV0YWRhdGFMYXllck9wdGlvbnMsXHJcbiAgTWV0YWRhdGFPcHRpb25zXHJcbn0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvc2hhcmVkL21ldGFkYXRhLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IExheWVyTGlzdENvbnRyb2xzT3B0aW9ucyB9IGZyb20gJy4uL2xheWVyLWxpc3QtdG9vbC9sYXllci1saXN0LXRvb2wuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi9zaGFyZWQvbGF5ZXJzL2xheWVyJztcclxuaW1wb3J0IHsgTGlua2VkUHJvcGVydGllcyB9IGZyb20gJy4uL3NoYXJlZC9sYXllcnMvbGF5ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBMYXllckxpc3RDb250cm9sc0VudW0sXHJcbiAgTGF5ZXJMaXN0RGlzcGxhY2VtZW50XHJcbn0gZnJvbSAnLi9sYXllci1saXN0LmVudW0nO1xyXG5pbXBvcnQgeyBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bSB9IGZyb20gJy4vbGF5ZXItbGlzdC5lbnVtJztcclxuXHJcbi8vIFRPRE86IFRoaXMgY2xhc3MgY291bGQgdXNlIGEgY2xlYW4gdXAuIEFsc28sIHNvbWUgbWV0aG9kcyBjb3VsZCBiZSBtb3ZlZCBlYWxzZXdoZXJlXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWxheWVyLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sYXllci1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sYXllci1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIExheWVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBvcmRlcmFibGUgPSB0cnVlO1xyXG4gIHRocmVzaG9sZFRvRmlsdGVyQW5kU29ydCA9IDU7XHJcblxyXG4gIGxheWVycyQ6IEJlaGF2aW9yU3ViamVjdDxMYXllcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG5cclxuICBjaGFuZ2UkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XHJcblxyXG4gIHNob3dUb29sYmFyJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHB1YmxpYyBsYXllclRvb2w6IGJvb2xlYW47XHJcblxyXG4gIHB1YmxpYyBoaWRlU2VsZWN0ZWRMYXllcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGFjdGl2ZUxheWVyJDogQmVoYXZpb3JTdWJqZWN0PExheWVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgbGF5ZXJzQ2hlY2tlZDogTGF5ZXJbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3Rpb246IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHVibGljIGxheWVySXRlbUNoYW5nZURldGVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lnb0xheWVySXRlbVRvb2xiYXInLCAvKiBUT0RPOiBhZGQgc3RhdGljIGZsYWcgKi8ge30pXHJcbiAgdGVtcGxhdGVMYXllclRvb2xiYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpIGxheWVyc0FyZUFsbFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBvZ2NCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0aW1lQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gIH1cclxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbGF5ZXJzKHZhbHVlOiBMYXllcltdKSB7XHJcbiAgICB0aGlzLl9sYXllcnMgPSB0aGlzLnJlbW92ZVByb2JsZW1MYXllckluTGlzdCh2YWx1ZSk7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgZ2V0IGxheWVycygpOiBMYXllcltdIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXllcnM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xheWVyczogTGF5ZXJbXTtcclxuXHJcbiAgc2V0IGFjdGl2ZUxheWVyKHZhbHVlOiBMYXllcikge1xyXG4gICAgdGhpcy5fYWN0aXZlTGF5ZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMuYWN0aXZlTGF5ZXIkLm5leHQodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgYWN0aXZlTGF5ZXIoKTogTGF5ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUxheWVyO1xyXG4gIH1cclxuICBwcml2YXRlIF9hY3RpdmVMYXllcjogTGF5ZXI7XHJcblxyXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xyXG5cclxuICBASW5wdXQoKSBsYXllckZpbHRlckFuZFNvcnRPcHRpb25zOiBMYXllckxpc3RDb250cm9sc09wdGlvbnMgPSB7fTtcclxuXHJcbiAgQElucHV0KCkgZXhjbHVkZUJhc2VMYXllcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgdG9nZ2xlTGVnZW5kT25WaXNpYmlsaXR5Q2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGV4cGFuZExlZ2VuZE9mVmlzaWJsZUxheWVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSB1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcXVlcnlCYWRnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgYXBwbGllZEZpbHRlckFuZFNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPExheWVyTGlzdENvbnRyb2xzT3B0aW9ucz4oKTtcclxuXHJcbiAgZ2V0IGtleXdvcmQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9rZXl3b3JkO1xyXG4gIH1cclxuICBzZXQga2V5d29yZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9rZXl3b3JkID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfa2V5d29yZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgZ2V0IG9ubHlWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29ubHlWaXNpYmxlO1xyXG4gIH1cclxuICBzZXQgb25seVZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX29ubHlWaXNpYmxlID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb25seVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IHNvcnRBbHBoYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0ZWRBbHBoYTtcclxuICB9XHJcbiAgc2V0IHNvcnRBbHBoYSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc29ydGVkQWxwaGEgPSB2YWx1ZTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zb3J0ZWRBbHBoYSA9IGZhbHNlO1xyXG5cclxuICBnZXQgb3BhY2l0eSgpIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuYWN0aXZlTGF5ZXIkLmdldFZhbHVlKCkub3BhY2l0eSAqIDEwMCk7XHJcbiAgfVxyXG4gIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVMYXllciQuZ2V0VmFsdWUoKS5vcGFjaXR5ID0gb3BhY2l0eSAvIDEwMDtcclxuICB9XHJcblxyXG4gIGdldCBiYWRnZU9wYWNpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5vcGFjaXR5ID09PSAxMDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMub3BhY2l0eTtcclxuICB9XHJcblxyXG4gIGdldCByYWlzZURpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5vcmRlcmFibGUgfHxcclxuICAgICAgdGhpcy5hY3RpdmVMYXllci5iYXNlTGF5ZXIgfHxcclxuICAgICAgdGhpcy5nZXRVcHBlckxheWVyKCkuaWQgPT09IHRoaXMuYWN0aXZlTGF5ZXIuaWQgfHxcclxuICAgICAgdGhpcy5pc1VwcGVyQmFzZWxheWVyKHRoaXMuYWN0aXZlTGF5ZXIpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgbG93ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgIHRoaXMuYWN0aXZlTGF5ZXIuYmFzZUxheWVyIHx8XHJcbiAgICAgIHRoaXMuZ2V0TG93ZXJMYXllcigpLmlkID09PSB0aGlzLmFjdGl2ZUxheWVyLmlkIHx8XHJcbiAgICAgIHRoaXMuaXNMb3dlckJhc2VsYXllcih0aGlzLmFjdGl2ZUxheWVyKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJhaXNlRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDAgfHxcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgICF0aGlzLnJhaXNhYmxlTGF5ZXJzKHRoaXMubGF5ZXJzQ2hlY2tlZCkgfHxcclxuICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9PT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvd2VyRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDAgfHxcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgICF0aGlzLmxvd2VyYWJsZUxheWVycyh0aGlzLmxheWVyc0NoZWNrZWQpIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPT09IHRydWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldCBjaGVja09wYWNpdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllcnNDaGVja2VkT3BhY2l0eSgpICogMTAwO1xyXG4gIH1cclxuICBzZXQgY2hlY2tPcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xyXG4gICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgbGF5ZXIub3BhY2l0eSA9IG9wYWNpdHkgLyAxMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGF5ZXJMaXN0RGlzcGxhY2VtZW50KCk6IHR5cGVvZiBMYXllckxpc3REaXNwbGFjZW1lbnQge1xyXG4gICAgcmV0dXJuIExheWVyTGlzdERpc3BsYWNlbWVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVPcGFjaXR5ID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBbGxDaGVjazogYm9vbGVhbjtcclxuICBwdWJsaWMgc2VsZWN0QWxsQ2hlY2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih1bmRlZmluZWQpO1xyXG4gIHByaXZhdGUgc2VsZWN0QWxsQ2hlY2skJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIHNlYXJjaCB0ZXJtIHN0cmVhbSBhbmQgdHJpZ2dlciByZXNlYXJjaGVzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZSQkID0gdGhpcy5jaGFuZ2UkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmxheWVycy5sZW5ndGggPT09IDAgPyBFTVBUWSA6IHRpbWVyKDUwKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIkLm5leHQodGhpcy5jb21wdXRlU2hvd1Rvb2xiYXIoKSk7XHJcbiAgICAgICAgdGhpcy5sYXllcnMkLm5leHQodGhpcy5jb21wdXRlTGF5ZXJzKHRoaXMubGF5ZXJzLnNsaWNlKDApKSk7XHJcbiAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyQW5kU29ydC5lbWl0KHtcclxuICAgICAgICAgIGtleXdvcmQ6IHRoaXMua2V5d29yZCxcclxuICAgICAgICAgIHNvcnRBbHBoYTogdGhpcy5zb3J0QWxwaGEsXHJcbiAgICAgICAgICBvbmx5VmlzaWJsZTogdGhpcy5vbmx5VmlzaWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrJCQgPSB0aGlzLnNlbGVjdEFsbENoZWNrJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSB2YWx1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLmxheWVycyQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubGF5ZXJzKSB7XHJcbiAgICAgICAgbGV0IGNoZWNrcyA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xyXG4gICAgICAgICAgbGF5ZXIuc3RhdHVzJC5zdWJzY3JpYmUoKHZhbFN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsU3RhdHVzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChsYXllci5vcHRpb25zLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUxheWVyID0gbGF5ZXI7XHJcbiAgICAgICAgICAgIHRoaXMubGF5ZXJUb29sID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChsYXllci5vcHRpb25zLmNoZWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrcyArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5leGNsdWRlQmFzZUxheWVycykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9XHJcbiAgICAgICAgICAgIGNoZWNrcyA9PT1cclxuICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUgJiYgbGF5LnNob3dJbkxheWVyTGlzdFxyXG4gICAgICAgICAgICApLmxlbmd0aFxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPVxyXG4gICAgICAgICAgICBjaGVja3MgPT09IHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcclxuICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY2hhbmdlJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5sYXllcnMkJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZlTGF5ZXJFeHRlbnRJc1ZhbGlkKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XHJcbiAgICBpZiAobGF5ZXIub3B0aW9ucy5zaG93QnV0dG9uWm9vbVRvRXh0ZW50ID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXllckV4dGVudCA9IGxheWVyLm9wdGlvbnMuZXh0ZW50O1xyXG4gICAgY29uc3QgbWF4TGF5ZXJab29tRXh0ZW50ID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50O1xyXG5cclxuICAgIGlmIChsYXllckV4dGVudCkge1xyXG4gICAgICBpZiAobWF4TGF5ZXJab29tRXh0ZW50KSB7XHJcbiAgICAgICAgdmFsaWQgPSBvbGV4dGVudC5jb250YWluc0V4dGVudChtYXhMYXllclpvb21FeHRlbnQsIGxheWVyRXh0ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIGFjdGl2ZUxheWVyc0V4dGVudEFyZVZhbGlkKGxheWVyczogTGF5ZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XHJcbiAgICBjb25zdCBsYXllcnNFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpO1xyXG4gICAgY29uc3QgbWF4TGF5ZXJab29tRXh0ZW50ID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50O1xyXG5cclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XHJcblxyXG4gICAgICBpZiAobGF5ZXJFeHRlbnQgJiYgIWxheWVyRXh0ZW50LmluY2x1ZGVzKEluZmluaXR5KSkge1xyXG4gICAgICAgIG9sZXh0ZW50LmV4dGVuZChsYXllcnNFeHRlbnQsIGxheWVyRXh0ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2xleHRlbnQuaXNFbXB0eShsYXllcnNFeHRlbnQpKSB7XHJcbiAgICAgIGlmIChtYXhMYXllclpvb21FeHRlbnQpIHtcclxuICAgICAgICB2YWxpZCA9IG9sZXh0ZW50LmNvbnRhaW5zRXh0ZW50KG1heExheWVyWm9vbUV4dGVudCwgbGF5ZXJzRXh0ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIHpvb21MYXllckV4dGVudHMobGF5ZXI6IExheWVyKSB7XHJcbiAgICB0aGlzLm1hcC52aWV3Q29udHJvbGxlci56b29tVG9FeHRlbnQobGF5ZXIub3B0aW9ucy5leHRlbnQpO1xyXG4gIH1cclxuXHJcbiAgem9vbUxheWVyc0V4dGVudHMobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICBjb25zdCBsYXllcnNFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpIGFzIFtcclxuICAgICAgbnVtYmVyLFxyXG4gICAgICBudW1iZXIsXHJcbiAgICAgIG51bWJlcixcclxuICAgICAgbnVtYmVyXHJcbiAgICBdO1xyXG5cclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XHJcblxyXG4gICAgICBpZiAobGF5ZXJFeHRlbnQpIHtcclxuICAgICAgICBvbGV4dGVudC5leHRlbmQobGF5ZXJzRXh0ZW50LCBsYXllckV4dGVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLnpvb21Ub0V4dGVudChsYXllcnNFeHRlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlT3BhY2l0eShldmVudDogTWF0U2xpZGVyQ2hhbmdlKSB7XHJcbiAgICB0aGlzLm9wYWNpdHkgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIGNsZWFyS2V5d29yZCgpIHtcclxuICAgIHRoaXMua2V5d29yZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldExvd2VyTGF5ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllcnNcclxuICAgICAgLmZpbHRlcigobCkgPT4gIWwuYmFzZUxheWVyKVxyXG4gICAgICAucmVkdWNlKFxyXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcHJldi56SW5kZXggPCBjdXJyZW50LnpJbmRleCA/IHByZXYgOiBjdXJyZW50O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyB6SW5kZXg6IHVuZGVmaW5lZCwgaWQ6IHVuZGVmaW5lZCB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBpc0xvd2VyQmFzZWxheWVyKGxheWVyKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sYXllcnMgJiZcclxuICAgICAgdGhpcy5sYXllcnNbaW5kZXggKyAxXSAmJlxyXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCArIDFdLmJhc2VMYXllciA9PT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXBwZXJMYXllcigpIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVyc1xyXG4gICAgICAuZmlsdGVyKChsKSA9PiAhbC5iYXNlTGF5ZXIpXHJcbiAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcclxuICAgICAgICAgIHJldHVybiBwcmV2LnpJbmRleCA+IGN1cnJlbnQuekluZGV4ID8gcHJldiA6IGN1cnJlbnQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IHpJbmRleDogdW5kZWZpbmVkLCBpZDogdW5kZWZpbmVkIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGlzVXBwZXJCYXNlbGF5ZXIobGF5ZXIpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxheWVycyAmJlxyXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCAtIDFdICYmXHJcbiAgICAgIHRoaXMubGF5ZXJzW2luZGV4IC0gMV0uYmFzZUxheWVyID09PSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3ZlQWN0aXZlTGF5ZXIoXHJcbiAgICBhY3RpdmVMYXllcjogTGF5ZXIsXHJcbiAgICBhY3Rpb250eXBlOiBMYXllckxpc3REaXNwbGFjZW1lbnQsXHJcbiAgICBmcm9tVWk6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgY29uc3Qgc29ydGVkTGF5ZXJzVG9Nb3ZlID0gW107XHJcbiAgICBnZXRSb290UGFyZW50QnlQcm9wZXJ0eSh0aGlzLm1hcCwgYWN0aXZlTGF5ZXIsIExpbmtlZFByb3BlcnRpZXMuWklOREVYKTtcclxuICAgIGxldCByb290UGFyZW50QnlQcm9wZXJ0eSA9IGdldFJvb3RQYXJlbnRCeVByb3BlcnR5KFxyXG4gICAgICB0aGlzLm1hcCxcclxuICAgICAgYWN0aXZlTGF5ZXIsXHJcbiAgICAgIExpbmtlZFByb3BlcnRpZXMuWklOREVYXHJcbiAgICApO1xyXG4gICAgaWYgKCFyb290UGFyZW50QnlQcm9wZXJ0eSkge1xyXG4gICAgICByb290UGFyZW50QnlQcm9wZXJ0eSA9IGFjdGl2ZUxheWVyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGF5ZXJzVG9Nb3ZlID0gW3Jvb3RQYXJlbnRCeVByb3BlcnR5XTtcclxuICAgIGdldEFsbENoaWxkTGF5ZXJzQnlQcm9wZXJ0eShcclxuICAgICAgdGhpcy5tYXAsXHJcbiAgICAgIHJvb3RQYXJlbnRCeVByb3BlcnR5LFxyXG4gICAgICBsYXllcnNUb01vdmUsXHJcbiAgICAgIExpbmtlZFByb3BlcnRpZXMuWklOREVYXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubGF5ZXJzLm1hcCgobGF5ZXIpID0+IHtcclxuICAgICAgaWYgKGxheWVyc1RvTW92ZS5pbmRleE9mKGxheWVyKSAhPT0gLTEpIHtcclxuICAgICAgICBzb3J0ZWRMYXllcnNUb01vdmUucHVzaChsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChhY3Rpb250eXBlID09PSBMYXllckxpc3REaXNwbGFjZW1lbnQuUmFpc2UpIHtcclxuICAgICAgdGhpcy5yYWlzZUxheWVycyhzb3J0ZWRMYXllcnNUb01vdmUsIGZyb21VaSk7XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbnR5cGUgPT09IExheWVyTGlzdERpc3BsYWNlbWVudC5Mb3dlcikge1xyXG4gICAgICB0aGlzLmxvd2VyTGF5ZXJzKHNvcnRlZExheWVyc1RvTW92ZSwgZnJvbVVpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogRm9yIHNlbGVjdGlvbiBtb2RlIGRpc2FibGVkIGF0dHJpYnV0ZVxyXG4gICAqL1xyXG4gIHJhaXNhYmxlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xyXG4gICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XHJcbiAgICBsZXQgYmFzZSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xyXG4gICAgICBjb25zdCBtYXBJbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcclxuICAgICAgY29uc3QgY3VycmVudExheWVyID0gdGhpcy5sYXllcnNbbWFwSW5kZXhdO1xyXG4gICAgICBpZiAoY3VycmVudExheWVyLmJhc2VMYXllcikge1xyXG4gICAgICAgIGJhc2UgKz0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcHJldmlvdXNMYXllciA9IHRoaXMubGF5ZXJzW21hcEluZGV4IC0gMV07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmV2aW91c0xheWVyICYmXHJcbiAgICAgICAgcHJldmlvdXNMYXllci5iYXNlTGF5ZXIgIT09IHRydWUgJiZcclxuICAgICAgICAhbGF5ZXJzLmZpbmQoKGxheSkgPT4gcHJldmlvdXNMYXllci5pZCA9PT0gbGF5LmlkKSAmJlxyXG4gICAgICAgIGN1cnJlbnRMYXllci5iYXNlTGF5ZXIgIT09IHRydWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVzcG9uc2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxheWVyc0NoZWNrZWRbMF0uYmFzZUxheWVyKSB8fFxyXG4gICAgICBiYXNlID09PSB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hlbiBtdWx0aXBsZSBsYXllcnMgaXMgc2VsZWN0ZWQgYnV0IHNvbWUgbWF5IGJlIGFsbG93IHRvIG1vdmVcclxuICAgKi9cclxuICByYWlzYWJsZUxheWVyKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChpbmRleCA8IDEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmxheWVyc1tpbmRleCAtIDFdLm9wdGlvbnMuY2hlY2spIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmFpc2FibGVMYXllcihpbmRleCAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByYWlzZUxheWVycyhsYXllcnM6IExheWVyW10sIGZyb21VaTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IGxheWVyc1RvUmFpc2UgPSBbXTtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheS5pZCA9PT0gbGF5ZXIuaWQpO1xyXG4gICAgICBpZiAodGhpcy5yYWlzYWJsZUxheWVyKGluZGV4KSkge1xyXG4gICAgICAgIGxheWVyc1RvUmFpc2UucHVzaChsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubWFwLnJhaXNlTGF5ZXJzKGxheWVyc1RvUmFpc2UpO1xyXG4gICAgaWYgKGZyb21VaSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0l0ZW1zID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnbWF0LWNoZWNrYm94LWNoZWNrZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBpdGVtRm9jdXNlZCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ2lnby1sYXllci1pdGVtLWZvY3VzZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgdGFyZ2V0VG9TY3JvbGw7XHJcbiAgICAgICAgaWYgKGNoZWNrSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0YXJnZXRUb1Njcm9sbCA9IGNoZWNrSXRlbXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtRm9jdXNlZC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gaXRlbUZvY3VzZWRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXRUb1Njcm9sbCkge1xyXG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGFyZ2V0VG9TY3JvbGwsIHtcclxuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgICAgYmxvY2s6ICdlbmQnLFxyXG4gICAgICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKlxyXG4gICAqIEZvciBzZWxlY3Rpb24gbW9kZSBkaXNhYmxlZCBhdHRyaWJ1dGVcclxuICAgKi9cclxuICBsb3dlcmFibGVMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIGxldCBiYXNlID0gMDtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IG1hcEluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xyXG4gICAgICBjb25zdCBjdXJyZW50TGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleF07XHJcbiAgICAgIGlmIChjdXJyZW50TGF5ZXIuYmFzZUxheWVyKSB7XHJcbiAgICAgICAgYmFzZSArPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBuZXh0TGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleCArIDFdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbmV4dExheWVyICYmXHJcbiAgICAgICAgbmV4dExheWVyLmJhc2VMYXllciAhPT0gdHJ1ZSAmJlxyXG4gICAgICAgICFsYXllcnMuZmluZCgobGF5KSA9PiBuZXh0TGF5ZXIuaWQgPT09IGxheS5pZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVzcG9uc2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxheWVyc0NoZWNrZWRbMF0uYmFzZUxheWVyKSB8fFxyXG4gICAgICBiYXNlID09PSB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hlbiBtdWx0aXBsZSBsYXllcnMgaXMgc2VsZWN0ZWQgYnV0IHNvbWUgbWF5IGJlIGFsbG93IHRvIG1vdmVcclxuICAgKi9cclxuICBsb3dlcmFibGVMYXllcihpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGluZGV4ID5cclxuICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUpLmxlbmd0aCAtIDJcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubGF5ZXJzW2luZGV4ICsgMV0ub3B0aW9ucy5jaGVjaykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb3dlcmFibGVMYXllcihpbmRleCArIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBsb3dlckxheWVycyhsYXllcnM6IExheWVyW10sIGZyb21VaTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IGxheWVyc1RvTG93ZXIgPSBbXTtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheS5pZCA9PT0gbGF5ZXIuaWQpO1xyXG4gICAgICBpZiAodGhpcy5sb3dlcmFibGVMYXllcihpbmRleCkpIHtcclxuICAgICAgICBsYXllcnNUb0xvd2VyLnB1c2gobGF5ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hcC5sb3dlckxheWVycyhsYXllcnNUb0xvd2VyKTtcclxuICAgIGlmIChmcm9tVWkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tJdGVtcyA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ21hdC1jaGVja2JveC1jaGVja2VkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaXRlbUZvY3VzZWQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICdpZ28tbGF5ZXItaXRlbS1mb2N1c2VkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHRhcmdldFRvU2Nyb2xsO1xyXG4gICAgICAgIGlmIChjaGVja0l0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGFyZ2V0VG9TY3JvbGwgPSBjaGVja0l0ZW1zW2NoZWNrSXRlbXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtRm9jdXNlZC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gaXRlbUZvY3VzZWRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXRUb1Njcm9sbCkge1xyXG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGFyZ2V0VG9TY3JvbGwsIHtcclxuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgICAgYmxvY2s6ICdlbmQnLFxyXG4gICAgICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIG5leHQoKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSk6IExheWVyW10ge1xyXG4gICAgbGV0IGxheWVyc091dCA9IHRoaXMuZmlsdGVyTGF5ZXJzKGxheWVycyk7XHJcbiAgICBpZiAodGhpcy5zb3J0QWxwaGEpIHtcclxuICAgICAgbGF5ZXJzT3V0ID0gdGhpcy5zb3J0TGF5ZXJzQnlUaXRsZShsYXllcnNPdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGF5ZXJzT3V0ID0gdGhpcy5zb3J0TGF5ZXJzQnlaaW5kZXgobGF5ZXJzT3V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXllcnNPdXQ7XHJcbiAgfVxyXG5cclxuICBvbktleXdvcmRDaGFuZ2UodGVybSkge1xyXG4gICAgdGhpcy5rZXl3b3JkID0gdGVybTtcclxuICB9XHJcblxyXG4gIG9uQXBwbGllZEZpbHRlckFuZFNvcnRDaGFuZ2UoYXBwbGllZEZpbHRlcjogTGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zKSB7XHJcbiAgICB0aGlzLmtleXdvcmQgPSBhcHBsaWVkRmlsdGVyLmtleXdvcmQ7XHJcbiAgICB0aGlzLm9ubHlWaXNpYmxlID0gYXBwbGllZEZpbHRlci5vbmx5VmlzaWJsZTtcclxuICAgIHRoaXMuc29ydEFscGhhID0gYXBwbGllZEZpbHRlci5zb3J0QWxwaGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckxheWVycyhsYXllcnM6IExheWVyW10pOiBMYXllcltdIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sYXllckZpbHRlckFuZFNvcnRPcHRpb25zLnNob3dUb29sYmFyID09PSBMYXllckxpc3RDb250cm9sc0VudW0ubmV2ZXJcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gbGF5ZXJzO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmtleXdvcmQgJiYgIXRoaXMub25seVZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIGxheWVycztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZWVwTGF5ZXJJZHMgPSBsYXllcnMubWFwKChsYXllcjogTGF5ZXIpID0+IGxheWVyLmlkKTtcclxuXHJcbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXI6IExheWVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxheWVyT3B0aW9ucyA9IChsYXllci5vcHRpb25zIGFzIE1ldGFkYXRhTGF5ZXJPcHRpb25zKSB8fCB7fTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5kYXRhU291cmNlLm9wdGlvbnMgfHwge307XHJcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gbGF5ZXJPcHRpb25zLm1ldGFkYXRhIHx8ICh7fSBhcyBNZXRhZGF0YU9wdGlvbnMpO1xyXG4gICAgICBjb25zdCBrZXl3b3JkcyA9IG1ldGFkYXRhLmtleXdvcmRMaXN0IHx8IFtdO1xyXG4gICAgICBjb25zdCBsYXllcktleXdvcmRzID0ga2V5d29yZHMubWFwKChrdzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGt3Lm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmtleXdvcmQgJiYgbGF5ZXIudGl0bGUpIHtcclxuICAgICAgICBjb25zdCBsb2NhbEtleXdvcmQgPSB0aGlzLmtleXdvcmRcclxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgIGNvbnN0IGxheWVyVGl0bGUgPSBsYXllci50aXRsZVxyXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZVR5cGUgPSBkYXRhU291cmNlT3B0aW9ucy50eXBlIHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAobG9jYWxLZXl3b3JkLCAnZ2knKTtcclxuICAgICAgICBjb25zdCBrZXl3b3JkSW5MaXN0ID1cclxuICAgICAgICAgIGxheWVyS2V5d29yZHMuZmluZCgoa3c6IHN0cmluZykgPT4ga2V5d29yZFJlZ2V4LnRlc3Qoa3cpKSAhPT1cclxuICAgICAgICAgIHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAha2V5d29yZFJlZ2V4LnRlc3QobGF5ZXJUaXRsZSkgJiZcclxuICAgICAgICAgICEodGhpcy5rZXl3b3JkLnRvTG93ZXJDYXNlKCkgPT09IGRhdGFTb3VyY2VUeXBlLnRvTG93ZXJDYXNlKCkpICYmXHJcbiAgICAgICAgICAha2V5d29yZEluTGlzdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBrZWVwTGF5ZXJJZHMuaW5kZXhPZihsYXllci5pZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBrZWVwTGF5ZXJJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm9ubHlWaXNpYmxlICYmIGxheWVyLnZpc2libGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBrZWVwTGF5ZXJJZHMuaW5kZXhPZihsYXllci5pZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGtlZXBMYXllcklkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGxheWVycy5maWx0ZXIoXHJcbiAgICAgIChsYXllcjogTGF5ZXIpID0+IGtlZXBMYXllcklkcy5pbmRleE9mKGxheWVyLmlkKSAhPT0gLTFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnRMYXllcnNCeVppbmRleChsYXllcnM6IExheWVyW10pIHtcclxuICAgIHJldHVybiBsYXllcnMuc29ydCgobGF5ZXIxLCBsYXllcjIpID0+IGxheWVyMi56SW5kZXggLSBsYXllcjEuekluZGV4KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc29ydExheWVyc0J5VGl0bGUobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICByZXR1cm4gbGF5ZXJzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBub3JtYWxpemUoc3RyOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBzdHJcclxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxyXG4gICAgICAudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZVNob3dUb29sYmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoICh0aGlzLmxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnMuc2hvd1Rvb2xiYXIpIHtcclxuICAgICAgY2FzZSBMYXllckxpc3RDb250cm9sc0VudW0uYWx3YXlzOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBjYXNlIExheWVyTGlzdENvbnRyb2xzRW51bS5uZXZlcjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5sYXllcnMubGVuZ3RoID49IHRoaXMudGhyZXNob2xkVG9GaWx0ZXJBbmRTb3J0IHx8XHJcbiAgICAgICAgICB0aGlzLmtleXdvcmQgfHxcclxuICAgICAgICAgIHRoaXMub25seVZpc2libGVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVMYXllclRvb2wobGF5ZXIpIHtcclxuICAgIHRoaXMudG9nZ2xlT3BhY2l0eSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMubGF5ZXJUb29sICYmIGxheWVyID09PSB0aGlzLmFjdGl2ZUxheWVyKSB7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxheWVyVG9vbCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBsYXkgb2YgdGhpcy5sYXllcnMpIHtcclxuICAgICAgbGF5Lm9wdGlvbnMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsYXllci5vcHRpb25zLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmFjdGl2ZUxheWVyID0gbGF5ZXI7XHJcbiAgfVxyXG5cclxuICByZW1vdmVMYXllcnMobGF5ZXJzPzogTGF5ZXJbXSkge1xyXG4gICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5yZW1vdmFibGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBsYXllci5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFsYXllcnMgJiYgdGhpcy5hY3RpdmVMYXllci5vcHRpb25zLnJlbW92YWJsZSAhPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5hY3RpdmVMYXllci5tYXAucmVtb3ZlTGF5ZXIodGhpcy5hY3RpdmVMYXllcik7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVWaXNpYmlsaXR5KGxheWVycz86IExheWVyW10pIHtcclxuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgICBsYXllci52aXNpYmxlID0gdGhpcy5oaWRlU2VsZWN0ZWRMYXllcnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubGF5ZXJJdGVtQ2hhbmdlRGV0ZWN0aW9uJC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaXNMYXllclJlbW92YWJsZShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsYXllci5vcHRpb25zLnJlbW92YWJsZSAhPT0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0FsbExheWVyc1JlbW92YWJsZShsYXllcnM6IExheWVyW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsYXllcnMuZXZlcnkoKGwpID0+IHRoaXMuaXNMYXllclJlbW92YWJsZShsKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjaygpOiBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bSB7XHJcbiAgICBsZXQgc3RhdHVzU2VsZWN0ZWRMYXllcnM6IExheWVyTGlzdFNlbGVjdFZpc2libGVFbnVtID1cclxuICAgICAgTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTlVMTDtcclxuICAgIGxldCBmaW5kVHJ1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGZpbmRGYWxzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTlVMTDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTUlYRUQ7XHJcbiAgICAgIHRoaXMuaGlkZVNlbGVjdGVkTGF5ZXJzID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGxheWVyMiBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgICBpZiAobGF5ZXIyLnZpc2libGUgPT09IHRydWUpIHtcclxuICAgICAgICAgIGZpbmRUcnVlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheWVyMi52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgZmluZEZhbHNlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmaW5kVHJ1ZSA9PT0gdHJ1ZSAmJiBmaW5kRmFsc2UgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnMgPSBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bS5BTExfVklTSUJMRTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmluZFRydWUgPT09IGZhbHNlICYmIGZpbmRGYWxzZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uQUxMX0hJRERFTjtcclxuICAgICAgICB0aGlzLmhpZGVTZWxlY3RlZExheWVycyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RhdHVzU2VsZWN0ZWRMYXllcnM7XHJcbiAgfVxyXG5cclxuICBsYXllcnNDaGVjayhldmVudDogeyBsYXllcjogTGF5ZXI7IGNoZWNrOiBib29sZWFuIH0pIHtcclxuICAgIGV2ZW50LmxheWVyLm9wdGlvbnMuY2hlY2sgPSBldmVudC5jaGVjaztcclxuICAgIGlmIChldmVudC5jaGVjayA9PT0gdHJ1ZSkge1xyXG4gICAgICBjb25zdCBldmVudE1hcEluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KFxyXG4gICAgICAgIChsYXllcikgPT4gZXZlbnQubGF5ZXIuaWQgPT09IGxheWVyLmlkXHJcbiAgICAgICk7XHJcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnNDaGVja2VkKSB7XHJcbiAgICAgICAgY29uc3QgbWFwSW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheSkgPT4gbGF5ZXIuaWQgPT09IGxheS5pZCk7XHJcbiAgICAgICAgaWYgKGV2ZW50TWFwSW5kZXggPCBtYXBJbmRleCkge1xyXG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnNwbGljZShcclxuICAgICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgZXZlbnQubGF5ZXJcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZUJhc2VMYXllcnMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XHJcbiAgICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGxheSkgPT4gbGF5LmJhc2VMYXllciAhPT0gdHJ1ZSAmJiBsYXkuc2hvd0luTGF5ZXJMaXN0XHJcbiAgICAgICAgICAgICAgKS5sZW5ndGhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PVxyXG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGV2ZW50LmxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnNDaGVja2VkLmZpbmRJbmRleChcclxuICAgICAgICAobGF5ZXIpID0+IGV2ZW50LmxheWVyLmlkID09PSBsYXllci5pZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leGNsdWRlQmFzZUxheWVycykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT1cclxuICAgICAgICB0aGlzLmxheWVycy5maWx0ZXIoXHJcbiAgICAgICAgICAobGF5KSA9PiBsYXkuYmFzZUxheWVyICE9PSB0cnVlICYmIGxheS5zaG93SW5MYXllckxpc3RcclxuICAgICAgICApLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuZXhjbHVkZUJhc2VMYXllcnMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XHJcbiAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKChsYXkpID0+IGxheS5zaG93SW5MYXllckxpc3QpLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdGlvbk1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWU7XHJcbiAgICB0aGlzLmFjdGl2ZUxheWVyID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcclxuICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5jaGVjaykge1xyXG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnB1c2gobGF5ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGF5ZXJzQ2hlY2tlZE9wYWNpdHkoKTogYW55IHtcclxuICAgIGlmICh0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgICBvcGFjaXR5LnB1c2gobGF5ZXIub3BhY2l0eSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9wYWNpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0QWxsQ2hlY2spIHtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZXhjbHVkZUJhc2VMYXllcnMgJiZcclxuICAgICAgICAgIGxheWVyLmJhc2VMYXllciAhPT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgbGF5ZXIuc2hvd0luTGF5ZXJMaXN0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsYXllci5vcHRpb25zLmNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGxheWVyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzICYmIGxheWVyLnNob3dJbkxheWVyTGlzdCkge1xyXG4gICAgICAgICAgbGF5ZXIub3B0aW9ucy5jaGVjayA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skLm5leHQodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XHJcbiAgICAgICAgbGF5ZXIub3B0aW9ucy5jaGVjayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrJC5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzU2Nyb2xsZWRJbnRvVmlldyhlbGVtU291cmNlLCBlbGVtKSB7XHJcbiAgICBjb25zdCBkb2NWaWV3VG9wID0gZWxlbVNvdXJjZS5zY3JvbGxUb3A7XHJcbiAgICBjb25zdCBkb2NWaWV3Qm90dG9tID0gZG9jVmlld1RvcCArIGVsZW1Tb3VyY2UuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0IGVsZW1Ub3AgPSBlbGVtLm9mZnNldFRvcDtcclxuICAgIGNvbnN0IGVsZW1Cb3R0b20gPSBlbGVtVG9wICsgZWxlbS5jbGllbnRIZWlnaHQ7XHJcbiAgICByZXR1cm4gZWxlbUJvdHRvbSA8PSBkb2NWaWV3Qm90dG9tICYmIGVsZW1Ub3AgPj0gZG9jVmlld1RvcDtcclxuICB9XHJcblxyXG4gIHJlbW92ZVByb2JsZW1MYXllckluTGlzdChsYXllcnNMaXN0OiBMYXllcltdKTogTGF5ZXJbXSB7XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVyc0xpc3QpIHtcclxuICAgICAgaWYgKGxheWVyLm9sTG9hZGluZ1Byb2JsZW0gPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLm1hcC5yZW1vdmVMYXllcihsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsYXllcnNMaXN0O1xyXG4gIH1cclxufVxyXG4iLCI8aWdvLWxheWVyLWxpc3QtdG9vbFxyXG4gICpuZ0lmPVwic2hvd1Rvb2xiYXIkIHwgYXN5bmNcIlxyXG4gIGZsb2F0TGFiZWw9XCJhdXRvXCJcclxuICBbbGF5ZXJzQXJlQWxsVmlzaWJsZV09XCJsYXllcnNBcmVBbGxWaXNpYmxlXCJcclxuICBbdGVybV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLmtleXdvcmRcIlxyXG4gIFtvbmx5VmlzaWJsZV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLm9ubHlWaXNpYmxlXCJcclxuICBbc29ydEFscGhhXT1cImxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnMuc29ydEFscGhhXCJcclxuICAoYXBwbGllZEZpbHRlckFuZFNvcnQpPVwib25BcHBsaWVkRmlsdGVyQW5kU29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAoc2VsZWN0aW9uKT1cInRvZ2dsZVNlbGVjdGlvbk1vZGUoJGV2ZW50KVwiXHJcbj5cclxuPC9pZ28tbGF5ZXItbGlzdC10b29sPlxyXG5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGlvblwiIGNsYXNzPVwic2VsZWN0LWFsbFwiPlxyXG4gIDxtYXQtY2hlY2tib3hcclxuICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveFwiXHJcbiAgICBbY29sb3JdPVwiIXNlbGVjdEFsbENoZWNrICYmIGxheWVyc0NoZWNrZWQubGVuZ3RoID4gMCA/ICdhY2NlbnQnIDogJ3ByaW1hcnknXCJcclxuICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsKClcIlxyXG4gICAgW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tcIlxyXG4gICAgW2luZGV0ZXJtaW5hdGVdPVwiIXNlbGVjdEFsbENoZWNrICYmIGxheWVyc0NoZWNrZWQubGVuZ3RoID4gMFwiXHJcbiAgPlxyXG4gICAge3tcclxuICAgICAgc2VsZWN0QWxsQ2hlY2tcclxuICAgICAgICA/ICgnaWdvLmdlby5sYXllci5kZXNlbGVjdEFsbCcgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuc2VsZWN0QWxsJyB8IHRyYW5zbGF0ZSlcclxuICAgIH19XHJcbiAgPC9tYXQtY2hlY2tib3g+XHJcbjwvZGl2PlxyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbjxpZ28tbGlzdCAjaWdvTGlzdCBbbmF2aWdhdGlvbl09XCJmYWxzZVwiIFtzZWxlY3Rpb25dPVwiZmFsc2VcIj5cclxuICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWxheWVyIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JPZl09XCJsYXllcnMkIHwgYXN5bmNcIj5cclxuICAgIDxpZ28tbGF5ZXItaXRlbVxyXG4gICAgICAqbmdJZj1cIiEoZXhjbHVkZUJhc2VMYXllcnMgJiYgbGF5ZXIuYmFzZUxheWVyKVwiXHJcbiAgICAgIGlnb0xpc3RJdGVtXHJcbiAgICAgIFtsYXllcl09XCJsYXllclwiXHJcbiAgICAgIFthY3RpdmVMYXllcl09XCJhY3RpdmVMYXllclwiXHJcbiAgICAgIFtvcmRlcmFibGVdPVwib3JkZXJhYmxlICYmICFsYXllci5iYXNlTGF5ZXJcIlxyXG4gICAgICBbbG93ZXJEaXNhYmxlZF09XCJnZXRMb3dlckxheWVyKCkuaWQgPT09IGxheWVyLmlkXCJcclxuICAgICAgW3JhaXNlRGlzYWJsZWRdPVwiZ2V0VXBwZXJMYXllcigpLmlkID09PSBsYXllci5pZFwiXHJcbiAgICAgIFtxdWVyeUJhZGdlXT1cInF1ZXJ5QmFkZ2VcIlxyXG4gICAgICBbZXhwYW5kTGVnZW5kSWZWaXNpYmxlXT1cImV4cGFuZExlZ2VuZE9mVmlzaWJsZUxheWVyc1wiXHJcbiAgICAgIFt1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2VdPVwidXBkYXRlTGVnZW5kT25SZXNvbHV0aW9uQ2hhbmdlXCJcclxuICAgICAgW3RvZ2dsZUxlZ2VuZE9uVmlzaWJpbGl0eUNoYW5nZV09XCJ0b2dnbGVMZWdlbmRPblZpc2liaWxpdHlDaGFuZ2VcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25cIlxyXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbENoZWNrXCJcclxuICAgICAgW2xheWVyQ2hlY2tdPVwibGF5ZXIub3B0aW9ucy5jaGVja1wiXHJcbiAgICAgIFtjaGFuZ2VEZXRlY3Rpb25dPVwibGF5ZXJJdGVtQ2hhbmdlRGV0ZWN0aW9uJFwiXHJcbiAgICAgIChhY3Rpb24pPVwidG9nZ2xlTGF5ZXJUb29sKCRldmVudClcIlxyXG4gICAgICAoY2hlY2tib3gpPVwibGF5ZXJzQ2hlY2soJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L2lnby1sYXllci1pdGVtPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvaWdvLWxpc3Q+XHJcblxyXG48aWdvLXBhbmVsXHJcbiAgKm5nSWY9XCIhc2VsZWN0aW9uICYmIGxheWVyVG9vbCAmJiBhY3RpdmVMYXllclwiXHJcbiAgY2xhc3M9XCJpZ28tbGF5ZXItYWN0aW9ucy1jb250YWluZXJcIlxyXG4gIFt0aXRsZV09XCJhY3RpdmVMYXllci50aXRsZVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWxheWVyLWJ1dHRvbi1ncm91cFwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImlzTGF5ZXJSZW1vdmFibGUoYWN0aXZlTGF5ZXIpXCJcclxuICAgICAgY2xhc3M9XCJkZWxldGUtYnV0dG9uXCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5yZW1vdmVMYXllcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlTGF5ZXJzKClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRlbGV0ZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZG93bi1idXR0b25cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJMb3dlckxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLmxvd2VyTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwibG93ZXJEaXNhYmxlZFwiXHJcbiAgICAgIChjbGljayk9XCJtb3ZlQWN0aXZlTGF5ZXIoYWN0aXZlTGF5ZXIsIGxheWVyTGlzdERpc3BsYWNlbWVudC5Mb3dlciwgdHJ1ZSlcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcclxuICAgICAgICBbbWF0QmFkZ2VdPVwic29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmQgPyAnIScgOiAnJ1wiXHJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxyXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImxvd2VyRGlzYWJsZWRcIlxyXG4gICAgICAgIHN2Z0ljb249XCJhcnJvdy1kb3duXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwidXAtYnV0dG9uXCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgICBzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZFxyXG4gICAgICAgICAgPyAoJ2lnby5nZW8ubGF5ZXIuZmlsdGVyUmFpc2VMYXllcicgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICA6ICgnaWdvLmdlby5sYXllci5yYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInJhaXNlRGlzYWJsZWRcIlxyXG4gICAgICAoY2xpY2spPVwibW92ZUFjdGl2ZUxheWVyKGFjdGl2ZUxheWVyLCBsYXllckxpc3REaXNwbGFjZW1lbnQuUmFpc2UsIHRydWUpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXHJcbiAgICAgICAgW21hdEJhZGdlXT1cInNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkID8gJyEnIDogJydcIlxyXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcclxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCJyYWlzZURpc2FibGVkXCJcclxuICAgICAgICBzdmdJY29uPVwiYXJyb3ctdXBcIlxyXG4gICAgICA+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gPGxhYmVsPnt7ICdpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlIH19IDwvbGFiZWw+IC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm9wYWNpdHktYnV0dG9uXCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwib3BhY2l0eU1lbnVcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJiYWRnZU9wYWNpdHlcIlxyXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgIHN2Z0ljb249XCJvcGFjaXR5XCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8bWF0LW1lbnUgI29wYWNpdHlNZW51PVwibWF0TWVudVwiIGNsYXNzPVwicGFuZWwtb3BhY2l0eS1tZW51XCI+XHJcbiAgICAgIDxtYXQtc2xpZGVyXHJcbiAgICAgICAgaWQ9XCJvcGFjaXR5LXNsaWRlclwiXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBkaXNjcmV0ZVxyXG4gICAgICAgIHN0ZXA9XCI1XCJcclxuICAgICAgICBbbWluXT1cIjBcIlxyXG4gICAgICAgIFttYXhdPVwiMTAwXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAjbmdTbGlkZXJcclxuICAgICAgICA+PGlucHV0XHJcbiAgICAgICAgICBtYXRTbGlkZXJUaHVtYlxyXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wYWNpdHlcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIlxyXG4gICAgICAgICAgICBjaGFuZ2VPcGFjaXR5KHtcclxuICAgICAgICAgICAgICBzb3VyY2U6IG5nU2xpZGVyVGh1bWIsXHJcbiAgICAgICAgICAgICAgcGFyZW50OiBuZ1NsaWRlcixcclxuICAgICAgICAgICAgICB2YWx1ZTogbmdTbGlkZXJUaHVtYi52YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgICNuZ1NsaWRlclRodW1iPVwibWF0U2xpZGVyVGh1bWJcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvbWF0LXNsaWRlcj5cclxuICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImFjdGl2ZUxheWVyRXh0ZW50SXNWYWxpZChhY3RpdmVMYXllcilcIlxyXG4gICAgICBjbGFzcz1cInpvb21MYXllci1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLnpvb21MYXllcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwiem9vbUxheWVyRXh0ZW50cyhhY3RpdmVMYXllcilcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBzdmdJY29uPVwibWFnbmlmeS1zY2FuXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgIGlnb0xheWVySXRlbVRvb2xiYXJcclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVMYXllclRvb2xiYXJcIlxyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBsYXllcjogYWN0aXZlTGF5ZXIgfVwiXHJcbiAgICA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWdvTGF5ZXJJdGVtVG9vbGJhcl1cIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvaWdvLXBhbmVsPlxyXG5cclxuPGlnby1wYW5lbFxyXG4gICpuZ0lmPVwic2VsZWN0aW9uICYmIGxheWVycy5sZW5ndGggPiAwXCJcclxuICBjbGFzcz1cImlnby1sYXllci1hY3Rpb25zLWNvbnRhaW5lclwiXHJcbiAgW3RpdGxlXT1cIidpZ28uZ2VvLmxheWVyLnRvb2xzJyB8IHRyYW5zbGF0ZVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1idXR0b25zLW11bHRpXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgaXNBbGxMYXllcnNSZW1vdmFibGUobGF5ZXJzQ2hlY2tlZClcclxuICAgICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLnJlbW92ZVNlbGVjdGVkTGF5ZXJzJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJlbW92ZVNlbGVjdGVkTGF5ZXJzUmVzdHJpY3Rpb24nIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlTGF5ZXJzKGxheWVyc0NoZWNrZWQpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXHJcbiAgICAgICAgW21hdEJhZGdlXT1cIichJ1wiXHJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxyXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImlzQWxsTGF5ZXJzUmVtb3ZhYmxlKGxheWVyc0NoZWNrZWQpXCJcclxuICAgICAgICBzdmdJY29uPVwiZGVsZXRlXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZXllLWJ1dHRvblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjayA9PT0gJ0FMTF9ISURERU4nXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5zaG93U2VsZWN0ZWRMYXllcnMnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuaGlkZVNlbGVjdGVkTGF5ZXJzJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgXCJcclxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVZpc2liaWxpdHkobGF5ZXJzQ2hlY2tlZClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBbc3ZnSWNvbl09XCJcclxuICAgICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzQ2hlY2sgPT09ICdBTExfSElEREVOJyA/ICdleWUtb2ZmJyA6ICdleWUnXHJcbiAgICAgICAgXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZG93bi1idXR0b25cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJMb3dlckxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLmxvd2VyTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwibG93ZXJEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgIChjbGljayk9XCJsb3dlckxheWVycyhsYXllcnNDaGVja2VkKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwibG93ZXJEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgICAgc3ZnSWNvbj1cImFycm93LWRvd25cIlxyXG4gICAgICA+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJ1cC1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJSYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJhaXNlTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwicmFpc2VEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgIChjbGljayk9XCJyYWlzZUxheWVycyhsYXllcnNDaGVja2VkKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwicmFpc2VEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgICAgc3ZnSWNvbj1cImFycm93LXVwXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwib3BhY2l0eS1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJsYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcGFjaXR5TWVudVwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvcGFjaXR5XCI+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxtYXQtbWVudSAjb3BhY2l0eU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJtYXQtbWVudS1vcGFjaXR5LXNsaWRlclwiPlxyXG4gICAgICA8ZGl2IGlkPVwib3BhY2l0eS1tZW51XCI+XHJcbiAgICAgICAgPCEtLSBUT0RPOiBUaGUgJ3RpY2tJbnRlcnZhbCcgcHJvcGVydHkgbm8gbG9uZ2VyIGV4aXN0cyAtLT5cclxuICAgICAgICA8bWF0LXNsaWRlclxyXG4gICAgICAgICAgKm5nSWY9XCJsYXllcnNDaGVja2VkLmxlbmd0aFwiXHJcbiAgICAgICAgICBpZD1cIm9wYWNpdHktc2xpZGVyXCJcclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0aHVtYkxhYmVsXHJcbiAgICAgICAgICBzaG93VGlja01hcmtzXHJcbiAgICAgICAgICBzdGVwPVwiNVwiXHJcbiAgICAgICAgICBbbWluXT1cIjBcIlxyXG4gICAgICAgICAgW21heF09XCIxMDBcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGVja09wYWNpdHlcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIub3BhY2l0eScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICA+PGlucHV0IG1hdFNsaWRlclRodW1iIC8+XHJcbiAgICAgICAgPC9tYXQtc2xpZGVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgIGxheWVyc0NoZWNrZWQubGVuZ3RoICE9PSAwICYmIGFjdGl2ZUxheWVyc0V4dGVudEFyZVZhbGlkKGxheWVyc0NoZWNrZWQpXHJcbiAgICAgIFwiXHJcbiAgICAgIGNsYXNzPVwiem9vbUxheWVyLWJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIuem9vbUxheWVycycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwiem9vbUxheWVyc0V4dGVudHMobGF5ZXJzQ2hlY2tlZClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm1hZ25pZnktc2NhblwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9pZ28tcGFuZWw+XHJcbiJdfQ==
831
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9sYXllci1saXN0L2xheWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXItbGlzdC9sYXllci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQW1CLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRSxPQUFP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YixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsU0FBUzt3QkFDVCxpQkFBaUI7cUJBQ2xCOytFQXlCRCxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsMkJBQTJCLENBQUMsRUFBRTtnQkFHMUQsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFHRixHQUFHO3NCQUROLEtBQUs7Z0JBVUYsTUFBTTtzQkFEVCxLQUFLO2dCQW1CRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsOEJBQThCO3NCQUF0QyxLQUFLO2dCQUVHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFFRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBGbG9hdExhYmVsVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0U2xpZGVyQ2hhbmdlLCBNYXRTbGlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZXInO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50LCBMaXN0SXRlbURpcmVjdGl2ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbi9saXN0JztcbmltcG9ydCB7IFBhbmVsQ29tcG9uZW50IH0gZnJvbSAnQGlnbzIvY29tbW9uL3BhbmVsJztcbmltcG9ydCB7IElnb0xhbmd1YWdlTW9kdWxlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5cbmltcG9ydCAqIGFzIG9sZXh0ZW50IGZyb20gJ29sL2V4dGVudCc7XG5cbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgRU1QVFksXG4gIFJlcGxheVN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgdGltZXJcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBzY3JvbGxJbnRvVmlldyBmcm9tICdzY3JvbGwtaW50by12aWV3LWlmLW5lZWRlZCc7XG5cbmltcG9ydCB7XG4gIGdldEFsbENoaWxkTGF5ZXJzQnlQcm9wZXJ0eSxcbiAgZ2V0Um9vdFBhcmVudEJ5UHJvcGVydHlcbn0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9saW5rZWRMYXllcnMudXRpbHMnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuaW1wb3J0IHtcbiAgTWV0YWRhdGFMYXllck9wdGlvbnMsXG4gIE1ldGFkYXRhT3B0aW9uc1xufSBmcm9tICcuLi8uLi9tZXRhZGF0YS9zaGFyZWQvbWV0YWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IExheWVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2xheWVyLWl0ZW0vbGF5ZXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGF5ZXJMaXN0VG9vbENvbXBvbmVudCB9IGZyb20gJy4uL2xheWVyLWxpc3QtdG9vbC9sYXllci1saXN0LXRvb2wuY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyTGlzdENvbnRyb2xzT3B0aW9ucyB9IGZyb20gJy4uL2xheWVyLWxpc3QtdG9vbC9sYXllci1saXN0LXRvb2wuaW50ZXJmYWNlJztcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vc2hhcmVkL2xheWVycy9sYXllcic7XG5pbXBvcnQgeyBMaW5rZWRQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vc2hhcmVkL2xheWVycy9sYXllci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgTGF5ZXJMaXN0Q29udHJvbHNFbnVtLFxuICBMYXllckxpc3REaXNwbGFjZW1lbnRcbn0gZnJvbSAnLi9sYXllci1saXN0LmVudW0nO1xuaW1wb3J0IHsgTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0gfSBmcm9tICcuL2xheWVyLWxpc3QuZW51bSc7XG5cbi8vIFRPRE86IFRoaXMgY2xhc3MgY291bGQgdXNlIGEgY2xlYW4gdXAuIEFsc28sIHNvbWUgbWV0aG9kcyBjb3VsZCBiZSBtb3ZlZCBlYWxzZXdoZXJlXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tbGF5ZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9sYXllci1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGF5ZXItbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTGF5ZXJMaXN0VG9vbENvbXBvbmVudCxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIExpc3RDb21wb25lbnQsXG4gICAgTmdGb3IsXG4gICAgTGF5ZXJJdGVtQ29tcG9uZW50LFxuICAgIExpc3RJdGVtRGlyZWN0aXZlLFxuICAgIFBhbmVsQ29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0QmFkZ2VNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRTbGlkZXJNb2R1bGUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgSWdvTGFuZ3VhZ2VNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMYXllckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIG9yZGVyYWJsZSA9IHRydWU7XG4gIHRocmVzaG9sZFRvRmlsdGVyQW5kU29ydCA9IDU7XG5cbiAgbGF5ZXJzJDogQmVoYXZpb3JTdWJqZWN0PExheWVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG5cbiAgY2hhbmdlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuXG4gIHNob3dUb29sYmFyJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcHVibGljIGxheWVyVG9vbDogYm9vbGVhbjtcblxuICBwdWJsaWMgaGlkZVNlbGVjdGVkTGF5ZXJzOiBib29sZWFuID0gdHJ1ZTtcbiAgYWN0aXZlTGF5ZXIkOiBCZWhhdmlvclN1YmplY3Q8TGF5ZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGxheWVyc0NoZWNrZWQ6IExheWVyW10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGlvbjogYm9vbGVhbjtcblxuICBwcml2YXRlIGNoYW5nZSQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGxheWVySXRlbUNoYW5nZURldGVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgQENvbnRlbnRDaGlsZCgnaWdvTGF5ZXJJdGVtVG9vbGJhcicsIC8qIFRPRE86IGFkZCBzdGF0aWMgZmxhZyAqLyB7fSlcbiAgdGVtcGxhdGVMYXllclRvb2xiYXI6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KCkgbGF5ZXJzQXJlQWxsVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgb2djQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSB0aW1lQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcDtcbiAgfVxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcbiAgICB0aGlzLl9tYXAgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcblxuICBASW5wdXQoKVxuICBzZXQgbGF5ZXJzKHZhbHVlOiBMYXllcltdKSB7XG4gICAgdGhpcy5fbGF5ZXJzID0gdGhpcy5yZW1vdmVQcm9ibGVtTGF5ZXJJbkxpc3QodmFsdWUpO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG4gIGdldCBsYXllcnMoKTogTGF5ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2xheWVycztcbiAgfVxuICBwcml2YXRlIF9sYXllcnM6IExheWVyW107XG5cbiAgc2V0IGFjdGl2ZUxheWVyKHZhbHVlOiBMYXllcikge1xuICAgIHRoaXMuX2FjdGl2ZUxheWVyID0gdmFsdWU7XG4gICAgdGhpcy5hY3RpdmVMYXllciQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgZ2V0IGFjdGl2ZUxheWVyKCk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlTGF5ZXI7XG4gIH1cbiAgcHJpdmF0ZSBfYWN0aXZlTGF5ZXI6IExheWVyO1xuXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuXG4gIEBJbnB1dCgpIGxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnM6IExheWVyTGlzdENvbnRyb2xzT3B0aW9ucyA9IHt9O1xuXG4gIEBJbnB1dCgpIGV4Y2x1ZGVCYXNlTGF5ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdG9nZ2xlTGVnZW5kT25WaXNpYmlsaXR5Q2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZXhwYW5kTGVnZW5kT2ZWaXNpYmxlTGF5ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdXBkYXRlTGVnZW5kT25SZXNvbHV0aW9uQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcXVlcnlCYWRnZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBhcHBsaWVkRmlsdGVyQW5kU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8TGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zPigpO1xuXG4gIGdldCBrZXl3b3JkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2tleXdvcmQ7XG4gIH1cbiAgc2V0IGtleXdvcmQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2tleXdvcmQgPSB2YWx1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9rZXl3b3JkID0gdW5kZWZpbmVkO1xuXG4gIGdldCBvbmx5VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb25seVZpc2libGU7XG4gIH1cbiAgc2V0IG9ubHlWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb25seVZpc2libGUgPSB2YWx1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9vbmx5VmlzaWJsZSA9IGZhbHNlO1xuXG4gIGdldCBzb3J0QWxwaGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRlZEFscGhhO1xuICB9XG4gIHNldCBzb3J0QWxwaGEodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zb3J0ZWRBbHBoYSA9IHZhbHVlO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX3NvcnRlZEFscGhhID0gZmFsc2U7XG5cbiAgZ2V0IG9wYWNpdHkoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5hY3RpdmVMYXllciQuZ2V0VmFsdWUoKS5vcGFjaXR5ICogMTAwKTtcbiAgfVxuICBzZXQgb3BhY2l0eShvcGFjaXR5OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZUxheWVyJC5nZXRWYWx1ZSgpLm9wYWNpdHkgPSBvcGFjaXR5IC8gMTAwO1xuICB9XG5cbiAgZ2V0IGJhZGdlT3BhY2l0eSgpIHtcbiAgICBpZiAodGhpcy5vcGFjaXR5ID09PSAxMDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3BhY2l0eTtcbiAgfVxuXG4gIGdldCByYWlzZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLm9yZGVyYWJsZSB8fFxuICAgICAgdGhpcy5hY3RpdmVMYXllci5iYXNlTGF5ZXIgfHxcbiAgICAgIHRoaXMuZ2V0VXBwZXJMYXllcigpLmlkID09PSB0aGlzLmFjdGl2ZUxheWVyLmlkIHx8XG4gICAgICB0aGlzLmlzVXBwZXJCYXNlbGF5ZXIodGhpcy5hY3RpdmVMYXllcilcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgbG93ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vcmRlcmFibGUgfHxcbiAgICAgIHRoaXMuYWN0aXZlTGF5ZXIuYmFzZUxheWVyIHx8XG4gICAgICB0aGlzLmdldExvd2VyTGF5ZXIoKS5pZCA9PT0gdGhpcy5hY3RpdmVMYXllci5pZCB8fFxuICAgICAgdGhpcy5pc0xvd2VyQmFzZWxheWVyKHRoaXMuYWN0aXZlTGF5ZXIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJhaXNlRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XG4gICAgICAhdGhpcy5yYWlzYWJsZUxheWVycyh0aGlzLmxheWVyc0NoZWNrZWQpIHx8XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID09PSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGxvd2VyRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XG4gICAgICAhdGhpcy5sb3dlcmFibGVMYXllcnModGhpcy5sYXllcnNDaGVja2VkKSB8fFxuICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBjaGVja09wYWNpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzQ2hlY2tlZE9wYWNpdHkoKSAqIDEwMDtcbiAgfVxuICBzZXQgY2hlY2tPcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnNDaGVja2VkKSB7XG4gICAgICBsYXllci5vcGFjaXR5ID0gb3BhY2l0eSAvIDEwMDtcbiAgICB9XG4gIH1cblxuICBnZXQgbGF5ZXJMaXN0RGlzcGxhY2VtZW50KCk6IHR5cGVvZiBMYXllckxpc3REaXNwbGFjZW1lbnQge1xuICAgIHJldHVybiBMYXllckxpc3REaXNwbGFjZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlT3BhY2l0eSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzZWxlY3RBbGxDaGVjazogYm9vbGVhbjtcbiAgcHVibGljIHNlbGVjdEFsbENoZWNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBzZWxlY3RBbGxDaGVjayQkOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZikge31cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBzZWFyY2ggdGVybSBzdHJlYW0gYW5kIHRyaWdnZXIgcmVzZWFyY2hlc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlJCQgPSB0aGlzLmNoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJzLmxlbmd0aCA9PT0gMCA/IEVNUFRZIDogdGltZXIoNTApO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIkLm5leHQodGhpcy5jb21wdXRlU2hvd1Rvb2xiYXIoKSk7XG4gICAgICAgIHRoaXMubGF5ZXJzJC5uZXh0KHRoaXMuY29tcHV0ZUxheWVycyh0aGlzLmxheWVycy5zbGljZSgwKSkpO1xuICAgICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJBbmRTb3J0LmVtaXQoe1xuICAgICAgICAgIGtleXdvcmQ6IHRoaXMua2V5d29yZCxcbiAgICAgICAgICBzb3J0QWxwaGE6IHRoaXMuc29ydEFscGhhLFxuICAgICAgICAgIG9ubHlWaXNpYmxlOiB0aGlzLm9ubHlWaXNpYmxlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrJCQgPSB0aGlzLnNlbGVjdEFsbENoZWNrJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmxheWVycyQkID0gdGhpcy5sYXllcnMkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sYXllcnMpIHtcbiAgICAgICAgbGV0IGNoZWNrcyA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcbiAgICAgICAgICBsYXllci5zdGF0dXMkLnN1YnNjcmliZSgodmFsU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsU3RhdHVzID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKGxheWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTGF5ZXIgPSBsYXllcjtcbiAgICAgICAgICAgIHRoaXMubGF5ZXJUb29sID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxheWVyLm9wdGlvbnMuY2hlY2spIHtcbiAgICAgICAgICAgIGNoZWNrcyArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGNsdWRlQmFzZUxheWVycykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPVxuICAgICAgICAgICAgY2hlY2tzID09PVxuICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAobGF5KSA9PiBsYXkuYmFzZUxheWVyICE9PSB0cnVlICYmIGxheS5zaG93SW5MYXllckxpc3RcbiAgICAgICAgICAgICkubGVuZ3RoXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPVxuICAgICAgICAgICAgY2hlY2tzID09PSB0aGlzLmxheWVycy5maWx0ZXIoKGxheSkgPT4gbGF5LnNob3dJbkxheWVyTGlzdCkubGVuZ3RoXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNoYW5nZSQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zZWxlY3RBbGxDaGVjayQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5sYXllcnMkJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYWN0aXZlTGF5ZXJFeHRlbnRJc1ZhbGlkKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgIGlmIChsYXllci5vcHRpb25zLnNob3dCdXR0b25ab29tVG9FeHRlbnQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XG4gICAgY29uc3QgbWF4TGF5ZXJab29tRXh0ZW50ID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50O1xuXG4gICAgaWYgKGxheWVyRXh0ZW50KSB7XG4gICAgICBpZiAobWF4TGF5ZXJab29tRXh0ZW50KSB7XG4gICAgICAgIHZhbGlkID0gb2xleHRlbnQuY29udGFpbnNFeHRlbnQobWF4TGF5ZXJab29tRXh0ZW50LCBsYXllckV4dGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIGFjdGl2ZUxheWVyc0V4dGVudEFyZVZhbGlkKGxheWVyczogTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgIGNvbnN0IGxheWVyc0V4dGVudCA9IG9sZXh0ZW50LmNyZWF0ZUVtcHR5KCk7XG4gICAgY29uc3QgbWF4TGF5ZXJab29tRXh0ZW50ID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50O1xuXG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XG5cbiAgICAgIGlmIChsYXllckV4dGVudCAmJiAhbGF5ZXJFeHRlbnQuaW5jbHVkZXMoSW5maW5pdHkpKSB7XG4gICAgICAgIG9sZXh0ZW50LmV4dGVuZChsYXllcnNFeHRlbnQsIGxheWVyRXh0ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW9sZXh0ZW50LmlzRW1wdHkobGF5ZXJzRXh0ZW50KSkge1xuICAgICAgaWYgKG1heExheWVyWm9vbUV4dGVudCkge1xuICAgICAgICB2YWxpZCA9IG9sZXh0ZW50LmNvbnRhaW5zRXh0ZW50KG1heExheWVyWm9vbUV4dGVudCwgbGF5ZXJzRXh0ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgem9vbUxheWVyRXh0ZW50cyhsYXllcjogTGF5ZXIpIHtcbiAgICB0aGlzLm1hcC52aWV3Q29udHJvbGxlci56b29tVG9FeHRlbnQobGF5ZXIub3B0aW9ucy5leHRlbnQpO1xuICB9XG5cbiAgem9vbUxheWVyc0V4dGVudHMobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgY29uc3QgbGF5ZXJzRXh0ZW50ID0gb2xleHRlbnQuY3JlYXRlRW1wdHkoKSBhcyBbXG4gICAgICBudW1iZXIsXG4gICAgICBudW1iZXIsXG4gICAgICBudW1iZXIsXG4gICAgICBudW1iZXJcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XG5cbiAgICAgIGlmIChsYXllckV4dGVudCkge1xuICAgICAgICBvbGV4dGVudC5leHRlbmQobGF5ZXJzRXh0ZW50LCBsYXllckV4dGVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLnpvb21Ub0V4dGVudChsYXllcnNFeHRlbnQpO1xuICB9XG5cbiAgY2hhbmdlT3BhY2l0eShldmVudDogTWF0U2xpZGVyQ2hhbmdlKSB7XG4gICAgdGhpcy5vcGFjaXR5ID0gZXZlbnQudmFsdWU7XG4gIH1cblxuICBjbGVhcktleXdvcmQoKSB7XG4gICAgdGhpcy5rZXl3b3JkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0TG93ZXJMYXllcigpIHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnNcbiAgICAgIC5maWx0ZXIoKGwpID0+ICFsLmJhc2VMYXllcilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXYuekluZGV4IDwgY3VycmVudC56SW5kZXggPyBwcmV2IDogY3VycmVudDtcbiAgICAgICAgfSxcbiAgICAgICAgeyB6SW5kZXg6IHVuZGVmaW5lZCwgaWQ6IHVuZGVmaW5lZCB9XG4gICAgICApO1xuICB9XG5cbiAgaXNMb3dlckJhc2VsYXllcihsYXllcikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xuICAgIGlmIChcbiAgICAgIHRoaXMubGF5ZXJzICYmXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCArIDFdICYmXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCArIDFdLmJhc2VMYXllciA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFVwcGVyTGF5ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzXG4gICAgICAuZmlsdGVyKChsKSA9PiAhbC5iYXNlTGF5ZXIpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwcmV2LnpJbmRleCA+IGN1cnJlbnQuekluZGV4ID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHsgekluZGV4OiB1bmRlZmluZWQsIGlkOiB1bmRlZmluZWQgfVxuICAgICAgKTtcbiAgfVxuXG4gIGlzVXBwZXJCYXNlbGF5ZXIobGF5ZXIpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmxheWVycyAmJlxuICAgICAgdGhpcy5sYXllcnNbaW5kZXggLSAxXSAmJlxuICAgICAgdGhpcy5sYXllcnNbaW5kZXggLSAxXS5iYXNlTGF5ZXIgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBtb3ZlQWN0aXZlTGF5ZXIoXG4gICAgYWN0aXZlTGF5ZXI6IExheWVyLFxuICAgIGFjdGlvbnR5cGU6IExheWVyTGlzdERpc3BsYWNlbWVudCxcbiAgICBmcm9tVWk6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCBzb3J0ZWRMYXllcnNUb01vdmUgPSBbXTtcbiAgICBnZXRSb290UGFyZW50QnlQcm9wZXJ0eSh0aGlzLm1hcCwgYWN0aXZlTGF5ZXIsIExpbmtlZFByb3BlcnRpZXMuWklOREVYKTtcbiAgICBsZXQgcm9vdFBhcmVudEJ5UHJvcGVydHkgPSBnZXRSb290UGFyZW50QnlQcm9wZXJ0eShcbiAgICAgIHRoaXMubWFwLFxuICAgICAgYWN0aXZlTGF5ZXIsXG4gICAgICBMaW5rZWRQcm9wZXJ0aWVzLlpJTkRFWFxuICAgICk7XG4gICAgaWYgKCFyb290UGFyZW50QnlQcm9wZXJ0eSkge1xuICAgICAgcm9vdFBhcmVudEJ5UHJvcGVydHkgPSBhY3RpdmVMYXllcjtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXJzVG9Nb3ZlID0gW3Jvb3RQYXJlbnRCeVByb3BlcnR5XTtcbiAgICBnZXRBbGxDaGlsZExheWVyc0J5UHJvcGVydHkoXG4gICAgICB0aGlzLm1hcCxcbiAgICAgIHJvb3RQYXJlbnRCeVByb3BlcnR5LFxuICAgICAgbGF5ZXJzVG9Nb3ZlLFxuICAgICAgTGlua2VkUHJvcGVydGllcy5aSU5ERVhcbiAgICApO1xuXG4gICAgdGhpcy5sYXllcnMubWFwKChsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVyc1RvTW92ZS5pbmRleE9mKGxheWVyKSAhPT0gLTEpIHtcbiAgICAgICAgc29ydGVkTGF5ZXJzVG9Nb3ZlLnB1c2gobGF5ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGFjdGlvbnR5cGUgPT09IExheWVyTGlzdERpc3BsYWNlbWVudC5SYWlzZSkge1xuICAgICAgdGhpcy5yYWlzZUxheWVycyhzb3J0ZWRMYXllcnNUb01vdmUsIGZyb21VaSk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb250eXBlID09PSBMYXllckxpc3REaXNwbGFjZW1lbnQuTG93ZXIpIHtcbiAgICAgIHRoaXMubG93ZXJMYXllcnMoc29ydGVkTGF5ZXJzVG9Nb3ZlLCBmcm9tVWkpO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIEZvciBzZWxlY3Rpb24gbW9kZSBkaXNhYmxlZCBhdHRyaWJ1dGVcbiAgICovXG4gIHJhaXNhYmxlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xuICAgIGxldCByZXNwb25zZSA9IGZhbHNlO1xuICAgIGxldCBiYXNlID0gMDtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgY29uc3QgbWFwSW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheSkgPT4gbGF5ZXIuaWQgPT09IGxheS5pZCk7XG4gICAgICBjb25zdCBjdXJyZW50TGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleF07XG4gICAgICBpZiAoY3VycmVudExheWVyLmJhc2VMYXllcikge1xuICAgICAgICBiYXNlICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZXZpb3VzTGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleCAtIDFdO1xuICAgICAgaWYgKFxuICAgICAgICBwcmV2aW91c0xheWVyICYmXG4gICAgICAgIHByZXZpb3VzTGF5ZXIuYmFzZUxheWVyICE9PSB0cnVlICYmXG4gICAgICAgICFsYXllcnMuZmluZCgobGF5KSA9PiBwcmV2aW91c0xheWVyLmlkID09PSBsYXkuaWQpICYmXG4gICAgICAgIGN1cnJlbnRMYXllci5iYXNlTGF5ZXIgIT09IHRydWVcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDEgJiYgdGhpcy5sYXllcnNDaGVja2VkWzBdLmJhc2VMYXllcikgfHxcbiAgICAgIGJhc2UgPT09IHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGhcbiAgICApIHtcbiAgICAgIHJlc3BvbnNlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8qXG4gICAqIFdoZW4gbXVsdGlwbGUgbGF5ZXJzIGlzIHNlbGVjdGVkIGJ1dCBzb21lIG1heSBiZSBhbGxvdyB0byBtb3ZlXG4gICAqL1xuICByYWlzYWJsZUxheWVyKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggPCAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGF5ZXJzW2luZGV4IC0gMV0ub3B0aW9ucy5jaGVjaykge1xuICAgICAgcmV0dXJuIHRoaXMucmFpc2FibGVMYXllcihpbmRleCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJhaXNlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSwgZnJvbVVpOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxheWVyc1RvUmFpc2UgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheSkgPT4gbGF5LmlkID09PSBsYXllci5pZCk7XG4gICAgICBpZiAodGhpcy5yYWlzYWJsZUxheWVyKGluZGV4KSkge1xuICAgICAgICBsYXllcnNUb1JhaXNlLnB1c2gobGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1hcC5yYWlzZUxheWVycyhsYXllcnNUb1JhaXNlKTtcbiAgICBpZiAoZnJvbVVpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tJdGVtcyA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICAgICdtYXQtY2hlY2tib3gtY2hlY2tlZCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXRlbUZvY3VzZWQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICAnaWdvLWxheWVyLWl0ZW0tZm9jdXNlZCdcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IHRhcmdldFRvU2Nyb2xsO1xuICAgICAgICBpZiAoY2hlY2tJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICB0YXJnZXRUb1Njcm9sbCA9IGNoZWNrSXRlbXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1Gb2N1c2VkLmxlbmd0aCkge1xuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gaXRlbUZvY3VzZWRbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldFRvU2Nyb2xsKSB7XG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGFyZ2V0VG9TY3JvbGwsIHtcbiAgICAgICAgICAgIHNjcm9sbE1vZGU6ICdpZi1uZWVkZWQnLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgYmxvY2s6ICdlbmQnLFxuICAgICAgICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cbiAgLypcbiAgICogRm9yIHNlbGVjdGlvbiBtb2RlIGRpc2FibGVkIGF0dHJpYnV0ZVxuICAgKi9cbiAgbG93ZXJhYmxlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xuICAgIGxldCByZXNwb25zZSA9IGZhbHNlO1xuICAgIGxldCBiYXNlID0gMDtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgY29uc3QgbWFwSW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheSkgPT4gbGF5ZXIuaWQgPT09IGxheS5pZCk7XG4gICAgICBjb25zdCBjdXJyZW50TGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleF07XG4gICAgICBpZiAoY3VycmVudExheWVyLmJhc2VMYXllcikge1xuICAgICAgICBiYXNlICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRMYXllciA9IHRoaXMubGF5ZXJzW21hcEluZGV4ICsgMV07XG4gICAgICBpZiAoXG4gICAgICAgIG5leHRMYXllciAmJlxuICAgICAgICBuZXh0TGF5ZXIuYmFzZUxheWVyICE9PSB0cnVlICYmXG4gICAgICAgICFsYXllcnMuZmluZCgobGF5KSA9PiBuZXh0TGF5ZXIuaWQgPT09IGxheS5pZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDEgJiYgdGhpcy5sYXllcnNDaGVja2VkWzBdLmJhc2VMYXllcikgfHxcbiAgICAgIGJhc2UgPT09IHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGhcbiAgICApIHtcbiAgICAgIHJlc3BvbnNlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8qXG4gICAqIFdoZW4gbXVsdGlwbGUgbGF5ZXJzIGlzIHNlbGVjdGVkIGJ1dCBzb21lIG1heSBiZSBhbGxvdyB0byBtb3ZlXG4gICAqL1xuICBsb3dlcmFibGVMYXllcihpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKFxuICAgICAgaW5kZXggPlxuICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUpLmxlbmd0aCAtIDJcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYXllcnNbaW5kZXggKyAxXS5vcHRpb25zLmNoZWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb3dlcmFibGVMYXllcihpbmRleCArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGxvd2VyTGF5ZXJzKGxheWVyczogTGF5ZXJbXSwgZnJvbVVpOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxheWVyc1RvTG93ZXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheSkgPT4gbGF5LmlkID09PSBsYXllci5pZCk7XG4gICAgICBpZiAodGhpcy5sb3dlcmFibGVMYXllcihpbmRleCkpIHtcbiAgICAgICAgbGF5ZXJzVG9Mb3dlci5wdXNoKGxheWVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tYXAubG93ZXJMYXllcnMobGF5ZXJzVG9Mb3dlcik7XG4gICAgaWYgKGZyb21VaSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrSXRlbXMgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICAnbWF0LWNoZWNrYm94LWNoZWNrZWQnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGl0ZW1Gb2N1c2VkID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgJ2lnby1sYXllci1pdGVtLWZvY3VzZWQnXG4gICAgICAgICk7XG4gICAgICAgIGxldCB0YXJnZXRUb1Njcm9sbDtcbiAgICAgICAgaWYgKGNoZWNrSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGFyZ2V0VG9TY3JvbGwgPSBjaGVja0l0ZW1zW2NoZWNrSXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1Gb2N1c2VkLmxlbmd0aCkge1xuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gaXRlbUZvY3VzZWRbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldFRvU2Nyb2xsKSB7XG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGFyZ2V0VG9TY3JvbGwsIHtcbiAgICAgICAgICAgIHNjcm9sbE1vZGU6ICdpZi1uZWVkZWQnLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgYmxvY2s6ICdlbmQnLFxuICAgICAgICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIHRoaXMuY2hhbmdlJC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVMYXllcnMobGF5ZXJzOiBMYXllcltdKTogTGF5ZXJbXSB7XG4gICAgbGV0IGxheWVyc091dCA9IHRoaXMuZmlsdGVyTGF5ZXJzKGxheWVycyk7XG4gICAgaWYgKHRoaXMuc29ydEFscGhhKSB7XG4gICAgICBsYXllcnNPdXQgPSB0aGlzLnNvcnRMYXllcnNCeVRpdGxlKGxheWVyc091dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxheWVyc091dCA9IHRoaXMuc29ydExheWVyc0J5WmluZGV4KGxheWVyc091dCk7XG4gICAgfVxuICAgIHJldHVybiBsYXllcnNPdXQ7XG4gIH1cblxuICBvbktleXdvcmRDaGFuZ2UodGVybSkge1xuICAgIHRoaXMua2V5d29yZCA9IHRlcm07XG4gIH1cblxuICBvbkFwcGxpZWRGaWx0ZXJBbmRTb3J0Q2hhbmdlKGFwcGxpZWRGaWx0ZXI6IExheWVyTGlzdENvbnRyb2xzT3B0aW9ucykge1xuICAgIHRoaXMua2V5d29yZCA9IGFwcGxpZWRGaWx0ZXIua2V5d29yZDtcbiAgICB0aGlzLm9ubHlWaXNpYmxlID0gYXBwbGllZEZpbHRlci5vbmx5VmlzaWJsZTtcbiAgICB0aGlzLnNvcnRBbHBoYSA9IGFwcGxpZWRGaWx0ZXIuc29ydEFscGhhO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJMYXllcnMobGF5ZXJzOiBMYXllcltdKTogTGF5ZXJbXSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sYXllckZpbHRlckFuZFNvcnRPcHRpb25zLnNob3dUb29sYmFyID09PSBMYXllckxpc3RDb250cm9sc0VudW0ubmV2ZXJcbiAgICApIHtcbiAgICAgIHJldHVybiBsYXllcnM7XG4gICAgfVxuICAgIGlmICghdGhpcy5rZXl3b3JkICYmICF0aGlzLm9ubHlWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gbGF5ZXJzO1xuICAgIH1cblxuICAgIGNvbnN0IGtlZXBMYXllcklkcyA9IGxheWVycy5tYXAoKGxheWVyOiBMYXllcikgPT4gbGF5ZXIuaWQpO1xuXG4gICAgbGF5ZXJzLmZvckVhY2goKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gKGxheWVyLm9wdGlvbnMgYXMgTWV0YWRhdGFMYXllck9wdGlvbnMpIHx8IHt9O1xuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5kYXRhU291cmNlLm9wdGlvbnMgfHwge307XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGxheWVyT3B0aW9ucy5tZXRhZGF0YSB8fCAoe30gYXMgTWV0YWRhdGFPcHRpb25zKTtcbiAgICAgIGNvbnN0IGtleXdvcmRzID0gbWV0YWRhdGEua2V5d29yZExpc3QgfHwgW107XG4gICAgICBjb25zdCBsYXllcktleXdvcmRzID0ga2V5d29yZHMubWFwKChrdzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBrdy5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5rZXl3b3JkICYmIGxheWVyLnRpdGxlKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsS2V5d29yZCA9IHRoaXMua2V5d29yZFxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgY29uc3QgbGF5ZXJUaXRsZSA9IGxheWVyLnRpdGxlXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICBjb25zdCBkYXRhU291cmNlVHlwZSA9IGRhdGFTb3VyY2VPcHRpb25zLnR5cGUgfHwgJyc7XG4gICAgICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAobG9jYWxLZXl3b3JkLCAnZ2knKTtcbiAgICAgICAgY29uc3Qga2V5d29yZEluTGlzdCA9XG4gICAgICAgICAgbGF5ZXJLZXl3b3Jkcy5maW5kKChrdzogc3RyaW5nKSA9PiBrZXl3b3JkUmVnZXgudGVzdChrdykpICE9PVxuICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFrZXl3b3JkUmVnZXgudGVzdChsYXllclRpdGxlKSAmJlxuICAgICAgICAgICEodGhpcy5rZXl3b3JkLnRvTG93ZXJDYXNlKCkgPT09IGRhdGFTb3VyY2VUeXBlLnRvTG93ZXJDYXNlKCkpICYmXG4gICAgICAgICAgIWtleXdvcmRJbkxpc3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBrZWVwTGF5ZXJJZHMuaW5kZXhPZihsYXllci5pZCk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGtlZXBMYXllcklkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vbmx5VmlzaWJsZSAmJiBsYXllci52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGtlZXBMYXllcklkcy5pbmRleE9mKGxheWVyLmlkKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBrZWVwTGF5ZXJJZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxheWVycy5maWx0ZXIoXG4gICAgICAobGF5ZXI6IExheWVyKSA9PiBrZWVwTGF5ZXJJZHMuaW5kZXhPZihsYXllci5pZCkgIT09IC0xXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydExheWVyc0J5WmluZGV4KGxheWVyczogTGF5ZXJbXSkge1xuICAgIHJldHVybiBsYXllcnMuc29ydCgobGF5ZXIxLCBsYXllcjIpID0+IGxheWVyMi56SW5kZXggLSBsYXllcjEuekluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydExheWVyc0J5VGl0bGUobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgcmV0dXJuIGxheWVycy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPCB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPiB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVTaG93VG9vbGJhcigpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHRoaXMubGF5ZXJGaWx0ZXJBbmRTb3J0T3B0aW9ucy5zaG93VG9vbGJhcikge1xuICAgICAgY2FzZSBMYXllckxpc3RDb250cm9sc0VudW0uYWx3YXlzOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgTGF5ZXJMaXN0Q29udHJvbHNFbnVtLm5ldmVyOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5sYXllcnMubGVuZ3RoID49IHRoaXMudGhyZXNob2xkVG9GaWx0ZXJBbmRTb3J0IHx8XG4gICAgICAgICAgdGhpcy5rZXl3b3JkIHx8XG4gICAgICAgICAgdGhpcy5vbmx5VmlzaWJsZVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTGF5ZXJUb29sKGxheWVyKSB7XG4gICAgdGhpcy50b2dnbGVPcGFjaXR5ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubGF5ZXJUb29sICYmIGxheWVyID09PSB0aGlzLmFjdGl2ZUxheWVyKSB7XG4gICAgICB0aGlzLmxheWVyVG9vbCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxheWVyVG9vbCA9IHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBsYXkgb2YgdGhpcy5sYXllcnMpIHtcbiAgICAgIGxheS5vcHRpb25zLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgICBsYXllci5vcHRpb25zLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmVMYXllciA9IGxheWVyO1xuICB9XG5cbiAgcmVtb3ZlTGF5ZXJzKGxheWVycz86IExheWVyW10pIHtcbiAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGlmIChsYXllci5vcHRpb25zLnJlbW92YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBsYXllci5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGxheWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWxheWVycyAmJiB0aGlzLmFjdGl2ZUxheWVyLm9wdGlvbnMucmVtb3ZhYmxlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5hY3RpdmVMYXllci5tYXAucmVtb3ZlTGF5ZXIodGhpcy5hY3RpdmVMYXllcik7XG4gICAgICB0aGlzLmxheWVyVG9vbCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVZpc2liaWxpdHkobGF5ZXJzPzogTGF5ZXJbXSkge1xuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGxheWVyLnZpc2libGUgPSB0aGlzLmhpZGVTZWxlY3RlZExheWVycztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sYXllckl0ZW1DaGFuZ2VEZXRlY3Rpb24kLm5leHQodHJ1ZSk7XG4gIH1cblxuICBpc0xheWVyUmVtb3ZhYmxlKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsYXllci5vcHRpb25zLnJlbW92YWJsZSAhPT0gZmFsc2U7XG4gIH1cblxuICBpc0FsbExheWVyc1JlbW92YWJsZShsYXllcnM6IExheWVyW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGF5ZXJzLmV2ZXJ5KChsKSA9PiB0aGlzLmlzTGF5ZXJSZW1vdmFibGUobCkpO1xuICB9XG5cbiAgZ2V0IHN0YXR1c1NlbGVjdGVkTGF5ZXJzQ2hlY2soKTogTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0ge1xuICAgIGxldCBzdGF0dXNTZWxlY3RlZExheWVyczogTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0gPVxuICAgICAgTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTlVMTDtcbiAgICBsZXQgZmluZFRydWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgZmluZEZhbHNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnMgPSBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bS5OVUxMO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0dXNTZWxlY3RlZExheWVycyA9IExheWVyTGlzdFNlbGVjdFZpc2libGVFbnVtLk1JWEVEO1xuICAgICAgdGhpcy5oaWRlU2VsZWN0ZWRMYXllcnMgPSBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBsYXllcjIgb2YgdGhpcy5sYXllcnNDaGVja2VkKSB7XG4gICAgICAgIGlmIChsYXllcjIudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGZpbmRUcnVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGF5ZXIyLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgZmluZEZhbHNlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluZFRydWUgPT09IHRydWUgJiYgZmluZEZhbHNlID09PSBmYWxzZSkge1xuICAgICAgICBzdGF0dXNTZWxlY3RlZExheWVycyA9IExheWVyTGlzdFNlbGVjdFZpc2libGVFbnVtLkFMTF9WSVNJQkxFO1xuICAgICAgfVxuICAgICAgaWYgKGZpbmRUcnVlID09PSBmYWxzZSAmJiBmaW5kRmFsc2UgPT09IHRydWUpIHtcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnMgPSBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bS5BTExfSElEREVOO1xuICAgICAgICB0aGlzLmhpZGVTZWxlY3RlZExheWVycyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXR1c1NlbGVjdGVkTGF5ZXJzO1xuICB9XG5cbiAgbGF5ZXJzQ2hlY2soZXZlbnQ6IHsgbGF5ZXI6IExheWVyOyBjaGVjazogYm9vbGVhbiB9KSB7XG4gICAgZXZlbnQubGF5ZXIub3B0aW9ucy5jaGVjayA9IGV2ZW50LmNoZWNrO1xuICAgIGlmIChldmVudC5jaGVjayA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZXZlbnRNYXBJbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleChcbiAgICAgICAgKGxheWVyKSA9PiBldmVudC5sYXllci5pZCA9PT0gbGF5ZXIuaWRcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzQ2hlY2tlZCkge1xuICAgICAgICBjb25zdCBtYXBJbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcbiAgICAgICAgaWYgKGV2ZW50TWFwSW5kZXggPCBtYXBJbmRleCkge1xuICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5zcGxpY2UoXG4gICAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGV2ZW50LmxheWVyXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobGF5KSA9PiBsYXkuYmFzZUxheWVyICE9PSB0cnVlICYmIGxheS5zaG93SW5MYXllckxpc3RcbiAgICAgICAgICAgICAgKS5sZW5ndGhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChldmVudC5sYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnNDaGVja2VkLmZpbmRJbmRleChcbiAgICAgICAgKGxheWVyKSA9PiBldmVudC5sYXllci5pZCA9PT0gbGF5ZXIuaWRcbiAgICAgICk7XG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5leGNsdWRlQmFzZUxheWVycykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PVxuICAgICAgICB0aGlzLmxheWVycy5maWx0ZXIoXG4gICAgICAgICAgKGxheSkgPT4gbGF5LmJhc2VMYXllciAhPT0gdHJ1ZSAmJiBsYXkuc2hvd0luTGF5ZXJMaXN0XG4gICAgICAgICkubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdGhpcy5leGNsdWRlQmFzZUxheWVycykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PVxuICAgICAgICB0aGlzLmxheWVycy5maWx0ZXIoKGxheSkgPT4gbGF5LnNob3dJbkxheWVyTGlzdCkubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlU2VsZWN0aW9uTW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5hY3RpdmVMYXllciA9IHVuZGVmaW5lZDtcbiAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XG4gICAgICAgIGlmIChsYXllci5vcHRpb25zLmNoZWNrKSB7XG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnB1c2gobGF5ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGF5ZXJzQ2hlY2tlZE9wYWNpdHkoKTogYW55IHtcbiAgICBpZiAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gW107XG4gICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzQ2hlY2tlZCkge1xuICAgICAgICBvcGFjaXR5LnB1c2gobGF5ZXIub3BhY2l0eSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RBbGwoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdEFsbENoZWNrKSB7XG4gICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzICYmXG4gICAgICAgICAgbGF5ZXIuYmFzZUxheWVyICE9PSB0cnVlICYmXG4gICAgICAgICAgbGF5ZXIuc2hvd0luTGF5ZXJMaXN0XG4gICAgICAgICkge1xuICAgICAgICAgIGxheWVyLm9wdGlvbnMuY2hlY2sgPSB0cnVlO1xuICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGxheWVyKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5leGNsdWRlQmFzZUxheWVycyAmJiBsYXllci5zaG93SW5MYXllckxpc3QpIHtcbiAgICAgICAgICBsYXllci5vcHRpb25zLmNoZWNrID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChsYXllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skLm5leHQodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcbiAgICAgICAgbGF5ZXIub3B0aW9ucy5jaGVjayA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXllcnNDaGVja2VkID0gW107XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrJC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBpc1Njcm9sbGVkSW50b1ZpZXcoZWxlbVNvdXJjZSwgZWxlbSkge1xuICAgIGNvbnN0IGRvY1ZpZXdUb3AgPSBlbGVtU291cmNlLnNjcm9sbFRvcDtcbiAgICBjb25zdCBkb2NWaWV3Qm90dG9tID0gZG9jVmlld1RvcCArIGVsZW1Tb3VyY2UuY2xpZW50SGVpZ2h0O1xuXG4gICAgY29uc3QgZWxlbVRvcCA9IGVsZW0ub2Zmc2V0VG9wO1xuICAgIGNvbnN0IGVsZW1Cb3R0b20gPSBlbGVtVG9wICsgZWxlbS5jbGllbnRIZWlnaHQ7XG4gICAgcmV0dXJuIGVsZW1Cb3R0b20gPD0gZG9jVmlld0JvdHRvbSAmJiBlbGVtVG9wID49IGRvY1ZpZXdUb3A7XG4gIH1cblxuICByZW1vdmVQcm9ibGVtTGF5ZXJJbkxpc3QobGF5ZXJzTGlzdDogTGF5ZXJbXSk6IExheWVyW10ge1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzTGlzdCkge1xuICAgICAgaWYgKGxheWVyLm9sTG9hZGluZ1Byb2JsZW0gPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGF5ZXJzTGlzdDtcbiAgfVxufVxuIiwiPGlnby1sYXllci1saXN0LXRvb2xcbiAgKm5nSWY9XCJzaG93VG9vbGJhciQgfCBhc3luY1wiXG4gIGZsb2F0TGFiZWw9XCJhdXRvXCJcbiAgW2xheWVyc0FyZUFsbFZpc2libGVdPVwibGF5ZXJzQXJlQWxsVmlzaWJsZVwiXG4gIFt0ZXJtXT1cImxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnMua2V5d29yZFwiXG4gIFtvbmx5VmlzaWJsZV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLm9ubHlWaXNpYmxlXCJcbiAgW3NvcnRBbHBoYV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLnNvcnRBbHBoYVwiXG4gIChhcHBsaWVkRmlsdGVyQW5kU29ydCk9XCJvbkFwcGxpZWRGaWx0ZXJBbmRTb3J0Q2hhbmdlKCRldmVudClcIlxuICAoc2VsZWN0aW9uKT1cInRvZ2dsZVNlbGVjdGlvbk1vZGUoJGV2ZW50KVwiXG4+XG48L2lnby1sYXllci1saXN0LXRvb2w+XG5cbjxkaXYgKm5nSWY9XCJzZWxlY3Rpb25cIiBjbGFzcz1cInNlbGVjdC1hbGxcIj5cbiAgPG1hdC1jaGVja2JveFxuICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveFwiXG4gICAgW2NvbG9yXT1cIiFzZWxlY3RBbGxDaGVjayAmJiBsYXllcnNDaGVja2VkLmxlbmd0aCA+IDAgPyAnYWNjZW50JyA6ICdwcmltYXJ5J1wiXG4gICAgKGNoYW5nZSk9XCJzZWxlY3RBbGwoKVwiXG4gICAgW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tcIlxuICAgIFtpbmRldGVybWluYXRlXT1cIiFzZWxlY3RBbGxDaGVjayAmJiBsYXllcnNDaGVja2VkLmxlbmd0aCA+IDBcIlxuICA+XG4gICAge3tcbiAgICAgIHNlbGVjdEFsbENoZWNrXG4gICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLmRlc2VsZWN0QWxsJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuc2VsZWN0QWxsJyB8IHRyYW5zbGF0ZSlcbiAgICB9fVxuICA8L21hdC1jaGVja2JveD5cbjwvZGl2PlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cbjxpZ28tbGlzdCAjaWdvTGlzdCBbbmF2aWdhdGlvbl09XCJmYWxzZVwiIFtzZWxlY3Rpb25dPVwiZmFsc2VcIj5cbiAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1sYXllciBsZXQtaT1cImluZGV4XCIgW25nRm9yT2ZdPVwibGF5ZXJzJCB8IGFzeW5jXCI+XG4gICAgPGlnby1sYXllci1pdGVtXG4gICAgICAqbmdJZj1cIiEoZXhjbHVkZUJhc2VMYXllcnMgJiYgbGF5ZXIuYmFzZUxheWVyKVwiXG4gICAgICBpZ29MaXN0SXRlbVxuICAgICAgW2xheWVyXT1cImxheWVyXCJcbiAgICAgIFthY3RpdmVMYXllcl09XCJhY3RpdmVMYXllclwiXG4gICAgICBbb3JkZXJhYmxlXT1cIm9yZGVyYWJsZSAmJiAhbGF5ZXIuYmFzZUxheWVyXCJcbiAgICAgIFtsb3dlckRpc2FibGVkXT1cImdldExvd2VyTGF5ZXIoKS5pZCA9PT0gbGF5ZXIuaWRcIlxuICAgICAgW3JhaXNlRGlzYWJsZWRdPVwiZ2V0VXBwZXJMYXllcigpLmlkID09PSBsYXllci5pZFwiXG4gICAgICBbcXVlcnlCYWRnZV09XCJxdWVyeUJhZGdlXCJcbiAgICAgIFtleHBhbmRMZWdlbmRJZlZpc2libGVdPVwiZXhwYW5kTGVnZW5kT2ZWaXNpYmxlTGF5ZXJzXCJcbiAgICAgIFt1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2VdPVwidXBkYXRlTGVnZW5kT25SZXNvbHV0aW9uQ2hhbmdlXCJcbiAgICAgIFt0b2dnbGVMZWdlbmRPblZpc2liaWxpdHlDaGFuZ2VdPVwidG9nZ2xlTGVnZW5kT25WaXNpYmlsaXR5Q2hhbmdlXCJcbiAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvblwiXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbENoZWNrXCJcbiAgICAgIFtsYXllckNoZWNrXT1cImxheWVyLm9wdGlvbnMuY2hlY2tcIlxuICAgICAgW2NoYW5nZURldGVjdGlvbl09XCJsYXllckl0ZW1DaGFuZ2VEZXRlY3Rpb24kXCJcbiAgICAgIChhY3Rpb24pPVwidG9nZ2xlTGF5ZXJUb29sKCRldmVudClcIlxuICAgICAgKGNoZWNrYm94KT1cImxheWVyc0NoZWNrKCRldmVudClcIlxuICAgID5cbiAgICA8L2lnby1sYXllci1pdGVtPlxuICA8L25nLXRlbXBsYXRlPlxuPC9pZ28tbGlzdD5cblxuPGlnby1wYW5lbFxuICAqbmdJZj1cIiFzZWxlY3Rpb24gJiYgbGF5ZXJUb29sICYmIGFjdGl2ZUxheWVyXCJcbiAgY2xhc3M9XCJpZ28tbGF5ZXItYWN0aW9ucy1jb250YWluZXJcIlxuICBbdGl0bGVdPVwiYWN0aXZlTGF5ZXIudGl0bGVcIlxuPlxuICA8ZGl2IGNsYXNzPVwiaWdvLWxheWVyLWJ1dHRvbi1ncm91cFwiPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiaXNMYXllclJlbW92YWJsZShhY3RpdmVMYXllcilcIlxuICAgICAgY2xhc3M9XCJkZWxldGUtYnV0dG9uXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLnJlbW92ZUxheWVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAoY2xpY2spPVwicmVtb3ZlTGF5ZXJzKClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJkb3duLWJ1dHRvblwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgc29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmRcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJMb3dlckxheWVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICgnaWdvLmdlby5sYXllci5sb3dlckxheWVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwibG93ZXJEaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwibW92ZUFjdGl2ZUxheWVyKGFjdGl2ZUxheWVyLCBsYXllckxpc3REaXNwbGFjZW1lbnQuTG93ZXIsIHRydWUpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwibG93ZXJEaXNhYmxlZFwiXG4gICAgICAgID5hcnJvd19kb3dud2FyZDwvbWF0LWljb25cbiAgICAgID5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwidXAtYnV0dG9uXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZFxuICAgICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLmZpbHRlclJhaXNlTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJhaXNlTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJyYWlzZURpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJtb3ZlQWN0aXZlTGF5ZXIoYWN0aXZlTGF5ZXIsIGxheWVyTGlzdERpc3BsYWNlbWVudC5SYWlzZSwgdHJ1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICAgICAgW21hdEJhZGdlXT1cInNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkID8gJyEnIDogJydcIlxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCJyYWlzZURpc2FibGVkXCJcbiAgICAgICAgPmFycm93X3Vwd2FyZDwvbWF0LWljb25cbiAgICAgID5cbiAgICA8L2J1dHRvbj5cblxuICAgIDwhLS0gPGxhYmVsPnt7ICdpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlIH19IDwvbGFiZWw+IC0tPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwib3BhY2l0eS1idXR0b25cIlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm9wYWNpdHlNZW51XCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXG4gICAgICAgIFttYXRCYWRnZV09XCJiYWRnZU9wYWNpdHlcIlxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgID5vcGFjaXR5PC9tYXQtaWNvblxuICAgICAgPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPG1hdC1tZW51ICNvcGFjaXR5TWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cInBhbmVsLW9wYWNpdHktbWVudVwiPlxuICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgaWQ9XCJvcGFjaXR5LXNsaWRlclwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIGRpc2NyZXRlXG4gICAgICAgIHN0ZXA9XCI1XCJcbiAgICAgICAgW21pbl09XCIwXCJcbiAgICAgICAgW21heF09XCIxMDBcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgI25nU2xpZGVyXG4gICAgICAgID48aW5wdXRcbiAgICAgICAgICBtYXRTbGlkZXJUaHVtYlxuICAgICAgICAgIFt2YWx1ZV09XCJvcGFjaXR5XCJcbiAgICAgICAgICAoaW5wdXQpPVwiXG4gICAgICAgICAgICBjaGFuZ2VPcGFjaXR5KHtcbiAgICAgICAgICAgICAgc291cmNlOiBuZ1NsaWRlclRodW1iLFxuICAgICAgICAgICAgICBwYXJlbnQ6IG5nU2xpZGVyLFxuICAgICAgICAgICAgICB2YWx1ZTogbmdTbGlkZXJUaHVtYi52YWx1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBcIlxuICAgICAgICAgICNuZ1NsaWRlclRodW1iPVwibWF0U2xpZGVyVGh1bWJcIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtc2xpZGVyPlxuICAgIDwvbWF0LW1lbnU+XG5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImFjdGl2ZUxheWVyRXh0ZW50SXNWYWxpZChhY3RpdmVMYXllcilcIlxuICAgICAgY2xhc3M9XCJ6b29tTGF5ZXItYnV0dG9uXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLnpvb21MYXllcicgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cInpvb21MYXllckV4dGVudHMoYWN0aXZlTGF5ZXIpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24gbWF0QmFkZ2VDb2xvcj1cInByaW1hcnlcIiBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxuICAgICAgICA+ZnJhbWVfaW5zcGVjdDwvbWF0LWljb25cbiAgICAgID5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIGlnb0xheWVySXRlbVRvb2xiYXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlTGF5ZXJUb29sYmFyXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGxheWVyOiBhY3RpdmVMYXllciB9XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWdvTGF5ZXJJdGVtVG9vbGJhcl1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9pZ28tcGFuZWw+XG5cbjxpZ28tcGFuZWxcbiAgKm5nSWY9XCJzZWxlY3Rpb24gJiYgbGF5ZXJzLmxlbmd0aCA+IDBcIlxuICBjbGFzcz1cImlnby1sYXllci1hY3Rpb25zLWNvbnRhaW5lclwiXG4gIFt0aXRsZV09XCInaWdvLmdlby5sYXllci50b29scycgfCB0cmFuc2xhdGVcIlxuPlxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1idXR0b25zLW11bHRpXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJkZWxldGUtYnV0dG9uXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFtkaXNhYmxlZF09XCJsYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgaXNBbGxMYXllcnNSZW1vdmFibGUobGF5ZXJzQ2hlY2tlZClcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5yZW1vdmVTZWxlY3RlZExheWVycycgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIucmVtb3ZlU2VsZWN0ZWRMYXllcnNSZXN0cmljdGlvbicgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cInJlbW92ZUxheWVycyhsYXllcnNDaGVja2VkKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICBbbWF0QmFkZ2VdPVwiJyEnXCJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiaXNBbGxMYXllcnNSZW1vdmFibGUobGF5ZXJzQ2hlY2tlZClcIlxuICAgICAgICA+ZGVsZXRlPC9tYXQtaWNvblxuICAgICAgPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJleWUtYnV0dG9uXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFtkaXNhYmxlZF09XCJsYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjayA9PT0gJ0FMTF9ISURERU4nXG4gICAgICAgICAgPyAoJ2lnby5nZW8ubGF5ZXIuc2hvd1NlbGVjdGVkTGF5ZXJzJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICgnaWdvLmdlby5sYXllci5oaWRlU2VsZWN0ZWRMYXllcnMnIHwgdHJhbnNsYXRlKVxuICAgICAgXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVWaXNpYmlsaXR5KGxheWVyc0NoZWNrZWQpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+e3tcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjayA9PT0gJ0FMTF9ISURERU4nXG4gICAgICAgICAgPyAndmlzaWJpbGl0eV9vZmYnXG4gICAgICAgICAgOiAndmlzaWJpbGl0eSdcbiAgICAgIH19PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZG93bi1idXR0b25cIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXG4gICAgICAgICAgPyAoJ2lnby5nZW8ubGF5ZXIuZmlsdGVyTG93ZXJMYXllcicgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIubG93ZXJMYXllcicgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgW2Rpc2FibGVkXT1cImxvd2VyRGlzYWJsZWRTZWxlY3Rpb25cIlxuICAgICAgKGNsaWNrKT1cImxvd2VyTGF5ZXJzKGxheWVyc0NoZWNrZWQpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwibG93ZXJEaXNhYmxlZFNlbGVjdGlvblwiXG4gICAgICAgID5hcnJvd19kb3dud2FyZDwvbWF0LWljb25cbiAgICAgID5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwidXAtYnV0dG9uXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZFxuICAgICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLmZpbHRlclJhaXNlTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJhaXNlTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJyYWlzZURpc2FibGVkU2VsZWN0aW9uXCJcbiAgICAgIChjbGljayk9XCJyYWlzZUxheWVycyhsYXllcnNDaGVja2VkKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICBbbWF0QmFkZ2VdPVwic29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmQgPyAnIScgOiAnJ1wiXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cInJhaXNlRGlzYWJsZWRTZWxlY3Rpb25cIlxuICAgICAgICA+YXJyb3dfdXB3YXJkPC9tYXQtaWNvblxuICAgICAgPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJvcGFjaXR5LWJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbZGlzYWJsZWRdPVwibGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDBcIlxuICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm9wYWNpdHlNZW51XCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+b3BhY2l0eTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8bWF0LW1lbnUgI29wYWNpdHlNZW51PVwibWF0TWVudVwiIGNsYXNzPVwibWF0LW1lbnUtb3BhY2l0eS1zbGlkZXJcIj5cbiAgICAgIDxkaXYgaWQ9XCJvcGFjaXR5LW1lbnVcIj5cbiAgICAgICAgPCEtLSBUT0RPOiBUaGUgJ3RpY2tJbnRlcnZhbCcgcHJvcGVydHkgbm8gbG9uZ2VyIGV4aXN0cyAtLT5cbiAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAqbmdJZj1cImxheWVyc0NoZWNrZWQubGVuZ3RoXCJcbiAgICAgICAgICBpZD1cIm9wYWNpdHktc2xpZGVyXCJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgICBzaG93VGlja01hcmtzXG4gICAgICAgICAgc3RlcD1cIjVcIlxuICAgICAgICAgIFttaW5dPVwiMFwiXG4gICAgICAgICAgW21heF09XCIxMDBcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hlY2tPcGFjaXR5XCJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICA+PGlucHV0IG1hdFNsaWRlclRodW1iIC8+XG4gICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LW1lbnU+XG5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBsYXllcnNDaGVja2VkLmxlbmd0aCAhPT0gMCAmJiBhY3RpdmVMYXllcnNFeHRlbnRBcmVWYWxpZChsYXllcnNDaGVja2VkKVxuICAgICAgXCJcbiAgICAgIGNsYXNzPVwiem9vbUxheWVyLWJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci56b29tTGF5ZXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAoY2xpY2spPVwiem9vbUxheWVyc0V4dGVudHMobGF5ZXJzQ2hlY2tlZClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5mcmFtZV9pbnNwZWN0PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2lnby1wYW5lbD5cbiJdfQ==