@igo2/geo 17.0.0-next.0 → 17.0.0-next.11

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 (598) 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 +10 -8
  8. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +11 -10
  9. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +7 -6
  10. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +5 -5
  11. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +22 -20
  12. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +8 -8
  13. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +34 -16
  14. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +9 -5
  15. package/esm2022/lib/catalog/catalog-library/index.mjs +2 -7
  16. package/esm2022/lib/catalog/catalog.module.mjs +15 -8
  17. package/esm2022/lib/catalog/index.mjs +2 -7
  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 +12 -8
  22. package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
  23. package/esm2022/lib/catalog/shared/index.mjs +1 -1
  24. package/esm2022/lib/datasource/index.mjs +1 -1
  25. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +1 -1
  26. package/esm2022/lib/datasource/shared/capabilities.service.mjs +4 -4
  27. package/esm2022/lib/datasource/shared/datasource.service.mjs +10 -8
  28. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  29. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  30. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  31. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  32. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  33. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  34. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  35. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  36. package/esm2022/lib/datasource/shared/datasources/index.mjs +1 -1
  37. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  38. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  39. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  40. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +3 -3
  41. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  42. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  43. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
  44. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +3 -3
  45. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +20 -16
  46. package/esm2022/lib/directions/directions-buttons/index.mjs +1 -1
  47. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +9 -9
  48. package/esm2022/lib/directions/directions-inputs/index.mjs +1 -1
  49. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +9 -9
  50. package/esm2022/lib/directions/directions-results/index.mjs +1 -1
  51. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +5 -2
  52. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  53. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +9 -2
  54. package/esm2022/lib/directions/directions-sources/index.mjs +1 -1
  55. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +72 -41
  56. package/esm2022/lib/directions/directions.component.mjs +74 -20
  57. package/esm2022/lib/directions/directions.module.mjs +6 -12
  58. package/esm2022/lib/directions/directions.provider.mjs +16 -0
  59. package/esm2022/lib/directions/index.mjs +2 -1
  60. package/esm2022/lib/directions/shared/directions-source.service.mjs +1 -1
  61. package/esm2022/lib/directions/shared/directions.enum.mjs +1 -1
  62. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  63. package/esm2022/lib/directions/shared/directions.service.mjs +37 -27
  64. package/esm2022/lib/directions/shared/directions.utils.mjs +22 -22
  65. package/esm2022/lib/directions/shared/index.mjs +1 -1
  66. package/esm2022/lib/directions/shared/store.mjs +2 -2
  67. package/esm2022/lib/download/download-button/download-button.component.mjs +7 -7
  68. package/esm2022/lib/download/download-button/index.mjs +1 -1
  69. package/esm2022/lib/download/download.module.mjs +5 -5
  70. package/esm2022/lib/download/index.mjs +1 -1
  71. package/esm2022/lib/download/shared/download.interface.mjs +1 -1
  72. package/esm2022/lib/download/shared/download.service.mjs +6 -6
  73. package/esm2022/lib/download/shared/index.mjs +1 -1
  74. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +7 -7
  75. package/esm2022/lib/draw/draw/draw-popup.component.mjs +9 -9
  76. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +10 -7
  77. package/esm2022/lib/draw/draw/draw.component.mjs +26 -12
  78. package/esm2022/lib/draw/draw/draw.module.mjs +5 -5
  79. package/esm2022/lib/draw/drawingTool.module.mjs +5 -5
  80. package/esm2022/lib/draw/index.mjs +1 -1
  81. package/esm2022/lib/draw/shared/draw-icon.service.mjs +6 -6
  82. package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
  83. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  84. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  85. package/esm2022/lib/draw/shared/index.mjs +1 -1
  86. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  87. package/esm2022/lib/environment/index.mjs +1 -1
  88. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +18 -14
  89. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +4 -4
  90. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +13 -7
  91. package/esm2022/lib/feature/feature-details/index.mjs +2 -7
  92. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +7 -7
  93. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +5 -5
  94. package/esm2022/lib/feature/feature.module.mjs +15 -8
  95. package/esm2022/lib/feature/index.mjs +2 -7
  96. package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
  97. package/esm2022/lib/feature/shared/feature.enums.mjs +1 -1
  98. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  99. package/esm2022/lib/feature/shared/feature.utils.mjs +2 -2
  100. package/esm2022/lib/feature/shared/index.mjs +1 -1
  101. package/esm2022/lib/feature/shared/store.mjs +2 -2
  102. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +2 -2
  103. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +2 -2
  104. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +2 -2
  105. package/esm2022/lib/feature/shared/strategies/index.mjs +1 -1
  106. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +2 -2
  107. package/esm2022/lib/feature/shared/strategies/loading.mjs +2 -2
  108. package/esm2022/lib/feature/shared/strategies/search.mjs +2 -2
  109. package/esm2022/lib/feature/shared/strategies/selection.mjs +2 -2
  110. package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
  111. package/esm2022/lib/filter/filter.module.mjs +8 -8
  112. package/esm2022/lib/filter/index.mjs +2 -36
  113. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +8 -8
  114. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +7 -7
  115. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +11 -11
  116. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +9 -9
  117. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +21 -23
  118. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +5 -5
  119. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +8 -8
  120. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +4 -4
  121. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +7 -7
  122. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +4 -4
  123. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +3 -3
  124. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  125. package/esm2022/lib/filter/shared/ogc-filter.mjs +46 -3
  126. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +3 -3
  127. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +9 -7
  128. package/esm2022/lib/filter/shared/time-filter.service.mjs +3 -3
  129. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +27 -25
  130. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +9 -9
  131. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +8 -8
  132. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +8 -8
  133. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +12 -12
  134. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +8 -8
  135. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +4 -4
  136. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +5 -5
  137. package/esm2022/lib/geo.module.mjs +5 -5
  138. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +5 -5
  139. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +8 -8
  140. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +9 -5
  141. package/esm2022/lib/geometry/geometry-form-field/index.mjs +3 -8
  142. package/esm2022/lib/geometry/geometry.module.mjs +5 -5
  143. package/esm2022/lib/geometry/index.mjs +1 -1
  144. package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
  145. package/esm2022/lib/geometry/shared/controls/index.mjs +1 -1
  146. package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
  147. package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
  148. package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
  149. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  150. package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
  151. package/esm2022/lib/geometry/shared/index.mjs +1 -1
  152. package/esm2022/lib/import-export/export-button/export-button.component.mjs +7 -7
  153. package/esm2022/lib/import-export/export-button/index.mjs +1 -1
  154. package/esm2022/lib/import-export/import-export/import-export.component.mjs +34 -26
  155. package/esm2022/lib/import-export/import-export/index.mjs +1 -1
  156. package/esm2022/lib/import-export/import-export.module.mjs +10 -5
  157. package/esm2022/lib/import-export/index.mjs +2 -9
  158. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +17 -65
  159. package/esm2022/lib/import-export/shared/export.errors.mjs +1 -1
  160. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  161. package/esm2022/lib/import-export/shared/export.service.mjs +13 -7
  162. package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
  163. package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
  164. package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
  165. package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
  166. package/esm2022/lib/import-export/shared/import.service.mjs +6 -6
  167. package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
  168. package/esm2022/lib/import-export/shared/index.mjs +1 -1
  169. package/esm2022/lib/layer/index.mjs +2 -19
  170. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +9 -9
  171. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +24 -20
  172. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +6 -6
  173. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +4 -4
  174. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +7 -7
  175. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +6 -6
  176. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +9 -8
  177. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +8 -8
  178. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +3 -3
  179. package/esm2022/lib/layer/layer.module.mjs +16 -5
  180. package/esm2022/lib/layer/shared/layer.service.mjs +11 -11
  181. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  182. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  183. package/esm2022/lib/layer/shared/layers/index.mjs +1 -1
  184. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
  185. package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
  186. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
  187. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  188. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  189. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  190. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
  191. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  192. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  193. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +7 -7
  194. package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
  195. package/esm2022/lib/layer/utils/tile-watcher.mjs +1 -1
  196. package/esm2022/lib/layer/utils/vector-watcher.mjs +1 -1
  197. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  198. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +9 -9
  199. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +4 -4
  200. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +13 -13
  201. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +8 -8
  202. package/esm2022/lib/map/index.mjs +1 -32
  203. package/esm2022/lib/map/info-section/info-section.component.mjs +4 -4
  204. package/esm2022/lib/map/map-browser/map-browser.component.mjs +6 -6
  205. package/esm2022/lib/map/map-center/map-center.component.mjs +4 -4
  206. package/esm2022/lib/map/map.module.mjs +36 -36
  207. package/esm2022/lib/map/menu-button/menu-button.component.mjs +9 -9
  208. package/esm2022/lib/map/offline-button/offline-button.component.mjs +7 -7
  209. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +7 -7
  210. package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
  211. package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
  212. package/esm2022/lib/map/shared/hover-feature.directive.mjs +7 -7
  213. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +3 -3
  214. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +6 -6
  215. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  216. package/esm2022/lib/map/shared/map.mjs +1 -1
  217. package/esm2022/lib/map/shared/map.service.mjs +3 -3
  218. package/esm2022/lib/map/shared/mapOffline.directive.mjs +9 -7
  219. package/esm2022/lib/map/shared/projection.service.mjs +6 -6
  220. package/esm2022/lib/map/shared/projection.utils.mjs +60 -1
  221. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +4 -4
  222. package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
  223. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +12 -12
  224. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +6 -6
  225. package/esm2022/lib/measure/index.mjs +1 -1
  226. package/esm2022/lib/measure/measure.module.mjs +5 -5
  227. package/esm2022/lib/measure/measurer/index.mjs +1 -1
  228. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +4 -4
  229. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +7 -7
  230. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +7 -7
  231. package/esm2022/lib/measure/measurer/measurer.component.mjs +20 -18
  232. package/esm2022/lib/measure/measurer/measurer.module.mjs +5 -5
  233. package/esm2022/lib/measure/shared/index.mjs +1 -1
  234. package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
  235. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  236. package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
  237. package/esm2022/lib/metadata/index.mjs +2 -6
  238. package/esm2022/lib/metadata/metadata-button/index.mjs +1 -1
  239. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +11 -11
  240. package/esm2022/lib/metadata/metadata.module.mjs +9 -5
  241. package/esm2022/lib/metadata/shared/index.mjs +1 -1
  242. package/esm2022/lib/metadata/shared/metadata.interface.mjs +1 -1
  243. package/esm2022/lib/metadata/shared/metadata.service.mjs +4 -4
  244. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +6 -6
  245. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  246. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  247. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +8 -10
  248. package/esm2022/lib/offline/geoDB/index.mjs +1 -1
  249. package/esm2022/lib/offline/index.mjs +1 -1
  250. package/esm2022/lib/offline/layerDB/index.mjs +1 -1
  251. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  252. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +4 -4
  253. package/esm2022/lib/offline/shared/geo-network.service.mjs +6 -6
  254. package/esm2022/lib/offline/shared/index.mjs +1 -1
  255. package/esm2022/lib/overlay/index.mjs +1 -1
  256. package/esm2022/lib/overlay/overlay.module.mjs +5 -5
  257. package/esm2022/lib/overlay/shared/index.mjs +1 -1
  258. package/esm2022/lib/overlay/shared/overlay.directive.mjs +4 -4
  259. package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
  260. package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
  261. package/esm2022/lib/overlay/shared/overlay.service.mjs +4 -4
  262. package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
  263. package/esm2022/lib/print/index.mjs +1 -1
  264. package/esm2022/lib/print/print/print.component.mjs +6 -6
  265. package/esm2022/lib/print/print-form/index.mjs +1 -1
  266. package/esm2022/lib/print/print-form/print-form.component.mjs +22 -10
  267. package/esm2022/lib/print/print.module.mjs +5 -5
  268. package/esm2022/lib/print/shared/geopdf.mjs +1 -1
  269. package/esm2022/lib/print/shared/index.mjs +1 -1
  270. package/esm2022/lib/print/shared/print.interface.mjs +1 -1
  271. package/esm2022/lib/print/shared/print.service.mjs +179 -126
  272. package/esm2022/lib/print/shared/print.type.mjs +1 -1
  273. package/esm2022/lib/query/index.mjs +1 -1
  274. package/esm2022/lib/query/query.module.mjs +6 -6
  275. package/esm2022/lib/query/shared/index.mjs +2 -1
  276. package/esm2022/lib/query/shared/query-search-source.mjs +4 -4
  277. package/esm2022/lib/query/shared/query-search-source.providers.mjs +2 -2
  278. package/esm2022/lib/query/shared/query.directive.mjs +4 -4
  279. package/esm2022/lib/query/shared/query.enums.mjs +1 -1
  280. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  281. package/esm2022/lib/query/shared/query.service.mjs +6 -6
  282. package/esm2022/lib/query/shared/query.utils.mjs +1 -1
  283. package/esm2022/lib/search/index.mjs +2 -13
  284. package/esm2022/lib/search/search-bar/search-bar.component.mjs +13 -10
  285. package/esm2022/lib/search/search-bar/search-bar.module.mjs +5 -5
  286. package/esm2022/lib/search/search-results/index.mjs +2 -7
  287. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +10 -10
  288. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +14 -12
  289. package/esm2022/lib/search/search-results/search-results-item.component.mjs +7 -6
  290. package/esm2022/lib/search/search-results/search-results.component.mjs +12 -10
  291. package/esm2022/lib/search/search-results/search-results.directive.mjs +7 -0
  292. package/esm2022/lib/search/search-results/search-results.module.mjs +5 -5
  293. package/esm2022/lib/search/search-selector/search-selector.component.mjs +7 -7
  294. package/esm2022/lib/search/search-selector/search-selector.module.mjs +5 -5
  295. package/esm2022/lib/search/search-settings/search-settings.component.mjs +21 -19
  296. package/esm2022/lib/search/search-settings/search-settings.module.mjs +5 -5
  297. package/esm2022/lib/search/search.module.mjs +19 -5
  298. package/esm2022/lib/search/shared/index.mjs +2 -1
  299. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +7 -7
  300. package/esm2022/lib/search/shared/search-source-service.providers.mjs +1 -1
  301. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  302. package/esm2022/lib/search/shared/search.enums.mjs +1 -1
  303. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  304. package/esm2022/lib/search/shared/search.provider.mjs +20 -0
  305. package/esm2022/lib/search/shared/search.service.mjs +32 -13
  306. package/esm2022/lib/search/shared/search.utils.mjs +2 -2
  307. package/esm2022/lib/search/shared/sources/cadastre.mjs +10 -8
  308. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +11 -2
  309. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  310. package/esm2022/lib/search/shared/sources/coordinates.mjs +13 -11
  311. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +14 -2
  312. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +32 -0
  313. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  314. package/esm2022/lib/search/shared/sources/icherche.mjs +24 -17
  315. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +23 -2
  316. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  317. package/esm2022/lib/search/shared/sources/ilayer.mjs +12 -10
  318. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +14 -2
  319. package/esm2022/lib/search/shared/sources/index.mjs +1 -1
  320. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
  321. package/esm2022/lib/search/shared/sources/nominatim.mjs +8 -8
  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 +15 -13
  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 +10 -8
  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/datasource/index.mjs +1 -1
  334. package/esm2022/lib/style/shared/feature/feature-style.mjs +3 -2
  335. package/esm2022/lib/style/shared/feature/index.mjs +1 -1
  336. package/esm2022/lib/style/shared/font.enum.mjs +1 -1
  337. package/esm2022/lib/style/shared/index.mjs +1 -1
  338. package/esm2022/lib/style/shared/overlay/index.mjs +1 -1
  339. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
  340. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
  341. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
  342. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  343. package/esm2022/lib/style/shared/vector/index.mjs +1 -1
  344. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
  345. package/esm2022/lib/style/style-list/index.mjs +1 -1
  346. package/esm2022/lib/style/style-list/style-list.interface.mjs +1 -1
  347. package/esm2022/lib/style/style-list/style-list.module.mjs +5 -5
  348. package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
  349. package/esm2022/lib/style/style-list/style-list.service.mjs +4 -4
  350. package/esm2022/lib/style/style-modal/drawing/index.mjs +1 -1
  351. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +8 -8
  352. package/esm2022/lib/style/style-modal/index.mjs +1 -1
  353. package/esm2022/lib/style/style-modal/layer/index.mjs +1 -1
  354. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +8 -8
  355. package/esm2022/lib/style/style-modal/layer-button/index.mjs +1 -1
  356. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +6 -6
  357. package/esm2022/lib/style/style-modal/shared/index.mjs +1 -1
  358. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  359. package/esm2022/lib/style/style-service/draw-style.service.mjs +4 -4
  360. package/esm2022/lib/style/style-service/index.mjs +1 -1
  361. package/esm2022/lib/style/style-service/style.service.mjs +4 -4
  362. package/esm2022/lib/style/style.module.mjs +5 -5
  363. package/esm2022/lib/toast/index.mjs +1 -1
  364. package/esm2022/lib/toast/toast.component.mjs +8 -6
  365. package/esm2022/lib/toast/toast.module.mjs +5 -5
  366. package/esm2022/lib/utils/googleLinks.mjs +1 -1
  367. package/esm2022/lib/utils/id-generator.mjs +1 -1
  368. package/esm2022/lib/utils/index.mjs +1 -1
  369. package/esm2022/lib/utils/osmLinks.mjs +1 -1
  370. package/esm2022/lib/utils/propertyTypeDetector/index.mjs +1 -1
  371. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
  372. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +6 -6
  373. package/esm2022/lib/wkt/index.mjs +1 -1
  374. package/esm2022/lib/wkt/shared/index.mjs +1 -1
  375. package/esm2022/lib/wkt/shared/wkt.service.mjs +18 -18
  376. package/esm2022/lib/wkt/wkt.module.mjs +5 -5
  377. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +7 -7
  378. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +5 -5
  379. package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
  380. package/esm2022/lib/workspace/index.mjs +1 -1
  381. package/esm2022/lib/workspace/shared/edition-workspace.mjs +2 -2
  382. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +19 -14
  383. package/esm2022/lib/workspace/shared/feature-workspace.mjs +2 -2
  384. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +14 -11
  385. package/esm2022/lib/workspace/shared/index.mjs +1 -1
  386. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +2 -2
  387. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +14 -11
  388. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +12 -9
  389. package/esm2022/lib/workspace/shared/workspace.utils.mjs +4 -4
  390. package/esm2022/lib/workspace/widgets/index.mjs +1 -1
  391. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +5 -5
  392. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +5 -5
  393. package/esm2022/lib/workspace/widgets/widgets.mjs +2 -2
  394. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +6 -6
  395. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +5 -5
  396. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +4 -4
  397. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +5 -5
  398. package/esm2022/lib/workspace/workspace.module.mjs +6 -6
  399. package/esm2022/public_api.mjs +1 -1
  400. package/fesm2022/igo2-geo.mjs +30653 -30260
  401. package/fesm2022/igo2-geo.mjs.map +1 -1
  402. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +2 -2
  403. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
  404. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
  405. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +3 -2
  406. package/lib/catalog/catalog-library/catalog-library.component.d.ts +5 -2
  407. package/lib/catalog/catalog-library/catalog-library.module.d.ts +3 -0
  408. package/lib/catalog/catalog-library/index.d.ts +1 -3
  409. package/lib/catalog/catalog.module.d.ts +6 -3
  410. package/lib/catalog/index.d.ts +1 -2
  411. package/lib/catalog/shared/catalog.interface.d.ts +1 -1
  412. package/lib/catalog/shared/catalog.service.d.ts +3 -1
  413. package/lib/datasource/shared/datasource.service.d.ts +2 -1
  414. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +2 -3
  415. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +2 -3
  416. package/lib/datasource/shared/datasources/datasource.d.ts +1 -2
  417. package/lib/datasource/shared/datasources/feature-datasource.d.ts +2 -3
  418. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -3
  419. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +1 -2
  420. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +2 -3
  421. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +1 -2
  422. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -2
  423. package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
  424. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +3 -1
  425. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
  426. package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
  427. package/lib/directions/directions-sources/directions-source.d.ts +7 -3
  428. package/lib/directions/directions-sources/directions-source.interface.d.ts +19 -6
  429. package/lib/directions/directions-sources/directions-source.provider.d.ts +3 -1
  430. package/lib/directions/directions-sources/osrm-directions-source.d.ts +20 -11
  431. package/lib/directions/directions.component.d.ts +16 -4
  432. package/lib/directions/directions.module.d.ts +5 -6
  433. package/lib/directions/directions.provider.d.ts +3 -0
  434. package/lib/directions/index.d.ts +1 -0
  435. package/lib/directions/shared/directions.interface.d.ts +2 -9
  436. package/lib/directions/shared/directions.service.d.ts +7 -3
  437. package/lib/directions/shared/directions.utils.d.ts +2 -2
  438. package/lib/directions/shared/store.d.ts +1 -1
  439. package/lib/download/shared/download.service.d.ts +1 -1
  440. package/lib/draw/draw/draw-popup.component.d.ts +1 -1
  441. package/lib/draw/draw/draw-shorcuts.component.d.ts +2 -0
  442. package/lib/draw/draw/draw.component.d.ts +2 -2
  443. package/lib/draw/shared/draw-icon.service.d.ts +1 -1
  444. package/lib/environment/environment.interface.d.ts +2 -1
  445. package/lib/feature/feature-details/feature-details.component.d.ts +4 -3
  446. package/lib/feature/feature-details/feature-details.module.d.ts +3 -0
  447. package/lib/feature/feature-details/index.d.ts +1 -3
  448. package/lib/feature/feature-form/feature-form.component.d.ts +1 -2
  449. package/lib/feature/feature.module.d.ts +6 -3
  450. package/lib/feature/index.d.ts +1 -2
  451. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  452. package/lib/feature/shared/feature.utils.d.ts +1 -1
  453. package/lib/feature/shared/store.d.ts +1 -1
  454. package/lib/feature/shared/strategies/geo-properties.d.ts +1 -1
  455. package/lib/feature/shared/strategies/in-map-extent.d.ts +1 -1
  456. package/lib/feature/shared/strategies/in-map-resolution.d.ts +1 -1
  457. package/lib/feature/shared/strategies/loading-layer.d.ts +1 -1
  458. package/lib/feature/shared/strategies/loading.d.ts +1 -1
  459. package/lib/feature/shared/strategies/search.d.ts +1 -1
  460. package/lib/feature/shared/strategies/selection.d.ts +1 -1
  461. package/lib/filter/filter.module.d.ts +19 -0
  462. package/lib/filter/index.d.ts +1 -16
  463. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +2 -2
  464. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +3 -3
  465. package/lib/filter/shared/ogc-filter.d.ts +7 -0
  466. package/lib/filter/shared/ogc-filter.interface.d.ts +2 -3
  467. package/lib/filter/shared/spatial-filter.service.d.ts +2 -1
  468. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +3 -2
  469. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +2 -2
  470. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +1 -1
  471. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -2
  472. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +3 -0
  473. package/lib/geometry/geometry-form-field/index.d.ts +2 -4
  474. package/lib/geometry/shared/controls/draw.d.ts +4 -4
  475. package/lib/geometry/shared/controls/slice.d.ts +4 -4
  476. package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
  477. package/lib/import-export/import-export/import-export.component.d.ts +6 -3
  478. package/lib/import-export/import-export.module.d.ts +4 -0
  479. package/lib/import-export/index.d.ts +1 -4
  480. package/lib/import-export/shared/drop-geo-file.directive.d.ts +4 -4
  481. package/lib/import-export/shared/export.service.d.ts +1 -1
  482. package/lib/import-export/shared/export.utils.d.ts +2 -2
  483. package/lib/import-export/shared/import.service.d.ts +1 -1
  484. package/lib/import-export/shared/import.utils.d.ts +2 -2
  485. package/lib/layer/index.d.ts +1 -8
  486. package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
  487. package/lib/layer/layer-legend/layer-legend.component.d.ts +2 -1
  488. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
  489. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
  490. package/lib/layer/layer.module.d.ts +10 -0
  491. package/lib/layer/shared/layer.service.d.ts +1 -1
  492. package/lib/layer/shared/layers/image-layer.d.ts +1 -1
  493. package/lib/layer/shared/layers/layer.d.ts +1 -1
  494. package/lib/layer/shared/layers/layer.interface.d.ts +1 -1
  495. package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
  496. package/lib/layer/shared/layers/vector-layer.d.ts +4 -5
  497. package/lib/layer/shared/layers/vector-layer.interface.d.ts +1 -2
  498. package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
  499. package/lib/layer/utils/image-watcher.d.ts +1 -1
  500. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
  501. package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
  502. package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
  503. package/lib/map/index.d.ts +0 -14
  504. package/lib/map/map-browser/map-browser.component.d.ts +1 -1
  505. package/lib/map/map.module.d.ts +32 -15
  506. package/lib/map/menu-button/menu-button.component.d.ts +1 -1
  507. package/lib/map/shared/controllers/geolocation.d.ts +2 -1
  508. package/lib/map/shared/hover-feature.directive.d.ts +1 -1
  509. package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
  510. package/lib/map/shared/map.d.ts +2 -1
  511. package/lib/map/shared/mapOffline.directive.d.ts +2 -1
  512. package/lib/map/shared/projection.service.d.ts +1 -1
  513. package/lib/map/shared/projection.utils.d.ts +11 -0
  514. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
  515. package/lib/measure/measurer/measurer.component.d.ts +3 -2
  516. package/lib/measure/shared/measure.utils.d.ts +1 -1
  517. package/lib/metadata/index.d.ts +1 -2
  518. package/lib/metadata/metadata.module.d.ts +2 -0
  519. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
  520. package/lib/offline/geoDB/geoDB.service.d.ts +2 -3
  521. package/lib/offline/shared/geo-network.service.d.ts +1 -1
  522. package/lib/print/print-form/print-form.component.d.ts +5 -2
  523. package/lib/print/shared/print.interface.d.ts +1 -0
  524. package/lib/print/shared/print.service.d.ts +31 -18
  525. package/lib/query/query.module.d.ts +1 -1
  526. package/lib/query/shared/index.d.ts +1 -0
  527. package/lib/query/shared/query-search-source.providers.d.ts +1 -1
  528. package/lib/query/shared/query.interfaces.d.ts +1 -2
  529. package/lib/query/shared/query.service.d.ts +1 -1
  530. package/lib/search/index.d.ts +1 -5
  531. package/lib/search/search-bar/search-bar.component.d.ts +3 -2
  532. package/lib/search/search-results/index.d.ts +1 -3
  533. package/lib/search/search-results/save-feature-dialog.component.d.ts +1 -1
  534. package/lib/search/search-results/search-results-add-button.component.d.ts +3 -3
  535. package/lib/search/search-results/search-results.component.d.ts +2 -2
  536. package/lib/search/search-results/search-results.directive.d.ts +3 -0
  537. package/lib/search/search-settings/search-settings.component.d.ts +2 -1
  538. package/lib/search/search.module.d.ts +8 -0
  539. package/lib/search/shared/index.d.ts +1 -0
  540. package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
  541. package/lib/search/shared/search-source.service.d.ts +1 -1
  542. package/lib/search/shared/search.interfaces.d.ts +12 -10
  543. package/lib/search/shared/search.provider.d.ts +8 -0
  544. package/lib/search/shared/search.service.d.ts +8 -3
  545. package/lib/search/shared/sources/cadastre.d.ts +2 -1
  546. package/lib/search/shared/sources/cadastre.providers.d.ts +5 -1
  547. package/lib/search/shared/sources/coordinates.d.ts +2 -1
  548. package/lib/search/shared/sources/coordinates.providers.d.ts +5 -1
  549. package/lib/search/shared/sources/icherche-icons.d.ts +7 -0
  550. package/lib/search/shared/sources/icherche.d.ts +2 -1
  551. package/lib/search/shared/sources/icherche.providers.d.ts +9 -13
  552. package/lib/search/shared/sources/ilayer.d.ts +2 -1
  553. package/lib/search/shared/sources/ilayer.providers.d.ts +5 -1
  554. package/lib/search/shared/sources/nominatim.d.ts +1 -1
  555. package/lib/search/shared/sources/nominatim.providers.d.ts +4 -1
  556. package/lib/search/shared/sources/source.d.ts +2 -2
  557. package/lib/search/shared/sources/source.interfaces.d.ts +16 -0
  558. package/lib/search/shared/sources/storedqueries.d.ts +2 -1
  559. package/lib/search/shared/sources/storedqueries.providers.d.ts +6 -1
  560. package/lib/search/shared/sources/workspace.d.ts +2 -1
  561. package/lib/search/shared/sources/workspace.providers.d.ts +5 -1
  562. package/lib/style/shared/vector/conversion.utils.d.ts +2 -3
  563. package/lib/toast/toast.component.d.ts +1 -1
  564. package/lib/utils/propertyTypeDetector/propertyTypeDetector.service.d.ts +1 -1
  565. package/lib/wkt/shared/wkt.service.d.ts +1 -1
  566. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
  567. package/lib/workspace/shared/edition-workspace.d.ts +2 -2
  568. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -2
  569. package/lib/workspace/shared/feature-workspace.d.ts +1 -1
  570. package/lib/workspace/shared/feature-workspace.service.d.ts +2 -1
  571. package/lib/workspace/shared/wfs-workspace.d.ts +1 -1
  572. package/lib/workspace/shared/wfs-workspace.service.d.ts +2 -1
  573. package/lib/workspace/shared/wms-workspace.service.d.ts +2 -1
  574. package/lib/workspace/shared/workspace.utils.d.ts +2 -1
  575. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +2 -1
  576. package/lib/workspace/widgets/widgets.d.ts +1 -1
  577. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
  578. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
  579. package/lib/workspace/workspace.module.d.ts +1 -1
  580. package/locale/en.geo.json +824 -818
  581. package/locale/fr.geo.json +825 -819
  582. package/package.json +6 -6
  583. package/src/_index.scss +2 -2
  584. package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -22
  585. package/src/lib/catalog/catalog.theming.scss +5 -5
  586. package/src/lib/directions/directions-results/directions-results.theming.scss +10 -10
  587. package/src/lib/directions/directions.theming.scss +6 -6
  588. package/src/lib/draw/draw.theming.scss +32 -32
  589. package/src/lib/feature/feature-details/feature-details.theming.scss +16 -16
  590. package/src/lib/feature/feature.theming.scss +4 -4
  591. package/src/lib/measure/measure.theming.scss +5 -5
  592. package/src/lib/measure/measurer/measurer.theming.scss +26 -26
  593. package/src/lib/search/search-bar/search-bar.theming.scss +33 -33
  594. package/src/lib/search/search-results/search-results-item.theme.scss +20 -20
  595. package/src/lib/search/search.theming.scss +7 -7
  596. package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
  597. package/src/lib/workspace/workspace.theming.scss +6 -6
  598. package/style/style.css +2 -1
@@ -9,7 +9,7 @@ import { MatIconModule } from '@angular/material/icon';
9
9
  import { MatInputModule } from '@angular/material/input';
10
10
  import { MatSelectModule } from '@angular/material/select';
11
11
  import { MatTooltipModule } from '@angular/material/tooltip';
12
- import { TranslateModule } from '@ngx-translate/core';
12
+ import { IgoLanguageModule } from '@igo2/core/language';
13
13
  import { BehaviorSubject, of } from 'rxjs';
14
14
  import { OgcFilterWriter } from '../../filter/shared/ogc-filter';
15
15
  import { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';
@@ -287,10 +287,10 @@ export class OgcFilterFormComponent {
287
287
  return (this.currentFilter.operator.toLowerCase() ===
288
288
  this.ogcFilterOperator.During.toLowerCase());
289
289
  }
290
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: OgcFilterFormComponent, deps: [{ token: i1.WktService }], target: i0.ɵɵFactoryTarget.Component });
291
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: OgcFilterFormComponent, isStandalone: true, selector: "igo-ogc-filter-form", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", currentFilter: "currentFilter", floatLabel: "floatLabel" }, ngImport: i0, template: "<div class=\"ogc-filter-form-container\">\r\n <mat-checkbox\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleFilterState($event)\"\r\n [checked]=\"currentFilter.active\"\r\n >\r\n </mat-checkbox>\r\n\r\n <mat-form-field\r\n [ngClass]=\"{\r\n logical:\r\n activeFilters.indexOf(currentFilter) !== 0 &&\r\n currentFilter.active === true,\r\n logicalHidden:\r\n activeFilters.indexOf(currentFilter) === 0 ||\r\n currentFilter.active !== true\r\n }\"\r\n >\r\n <mat-select\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.parentLogical\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n currentFilter.parentLogical\r\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\r\n | translate)\r\n : ''\r\n \"\r\n (selectionChange)=\"changeLogical($event.value)\"\r\n >\r\n <mat-option\r\n [value]=\"ogcFilterOperator.And\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\r\n >\r\n {{ 'igo.geo.operators.And' | translate }}\r\n </mat-option>\r\n <mat-option\r\n [value]=\"ogcFilterOperator.Or\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\r\n >\r\n {{ 'igo.geo.operators.Or' | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"field\"\r\n *ngIf=\"\r\n (currentFilterIsSpatial$ | async) === false &&\r\n (fields$ | async) &&\r\n (fields$ | async).length > 0 &&\r\n (fields$ | async)[0].name !== ''\r\n \"\r\n (mouseenter)=\"inputClearable = 'selectField'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoCompleteField\"\r\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n (selectedField$ | async)\r\n ? (selectedField$ | async).alias\r\n : ('igo.geo.sourceFields.selectField' | translate)\r\n \"\r\n (input)=\"updateFieldsList($any($event.target).value)\"\r\n />\r\n <mat-autocomplete\r\n #autoCompleteField=\"matAutocomplete\"\r\n (optionSelected)=\"changeField($event.option.id)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let field of filteredFields$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"field.alias\"\r\n [id]=\"field.name\"\r\n [matTooltip]=\"field.alias\"\r\n >\r\n {{ field.alias }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n *ngIf=\"\r\n currentFilter.propertyName &&\r\n inputClearable === 'selectField' &&\r\n currentFilter.active\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearSelectedField()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n [ngClass]=\"{\r\n operator: (currentFilterIsSpatial$ | async) === false,\r\n dualInput: (currentFilterIsSpatial$ | async)\r\n }\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <mat-select\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n currentFilter.operator\r\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\r\n : ('igo.geo.filter.selectOperator' | translate)\r\n \"\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.operator\"\r\n (selectionChange)=\"changeOperator($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"operator.key\"\r\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\r\n >\r\n {{ 'igo.geo.operators.' + operator.key | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"spatialSelector\"\r\n *ngIf=\"currentFilterIsSpatial$ | async\"\r\n >\r\n <mat-select\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.igoSpatialSelector\"\r\n (selectionChange)=\"changeSpatialSelector($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\r\n [value]=\"igoSpatialSelector.type\"\r\n >\r\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"singleInput\"\r\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\r\n (mouseenter)=\"inputClearable = 'selectProperty'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoCompleteValues\"\r\n [value]=\"\r\n detectProperty() === 'expression'\r\n ? currentFilter.expression\r\n : currentFilter.pattern\r\n \"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n detectProperty() === 'expression'\r\n ? currentFilter.expression || ''\r\n : currentFilter.pattern || ''\r\n \"\r\n (input)=\"updateValuesList($any($event.target).value)\"\r\n />\r\n <mat-autocomplete\r\n #autoCompleteValues=\"matAutocomplete\"\r\n (optionSelected)=\"changeProperty($event.option.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\"\r\n >\r\n {{ value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n *ngIf=\"\r\n isClearable() &&\r\n inputClearable === 'selectProperty' &&\r\n currentFilter.active\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"igo-layer-button-group\">\r\n <button\r\n mat-icon-button\r\n collapsibleButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\r\n color=\"warn\"\r\n (click)=\"deleteFilter()\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <mat-form-field\r\n class=\"snrc\"\r\n *ngIf=\"\r\n (currentFilterIsSpatial$ | async) &&\r\n currentFilter.igoSpatialSelector === 'snrc'\r\n \"\r\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\r\n [value]=\"currentFilter.igoSNRC\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\r\n (input)=\"changeSNRC($any($event.target).value)\"\r\n />\r\n <button\r\n *ngIf=\"currentFilter.igoSNRC\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"\r\n !currentFilter.active &&\r\n inputClearable === 'selectSNRC' &&\r\n currentFilter.active\r\n \"\r\n (click)=\"currentFilter.igoSNRC = ''\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <ng-container\r\n *ngIf=\"\r\n (currentFilterIsSpatial$ | async) &&\r\n currentFilter.igoSpatialSelector === 'fixedExtent'\r\n \"\r\n >\r\n <button\r\n [disabled]=\"!currentFilter.active\"\r\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\r\n matSuffix\r\n mat-icon-button\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"changeMapExtentGeometry()\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\r\n >\r\n <mat-icon svgIcon=\"arrow-expand-all\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n</div>\r\n\r\n<div class=\"ogc-filter-form-container\">\r\n <mat-form-field\r\n class=\"dualInput\"\r\n *ngIf=\"\r\n !isTemporalOperator() &&\r\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\r\n \"\r\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoDualValueOperator1\"\r\n type=\"number\"\r\n [value]=\"\r\n detectProperty(1) === 'lowerBoundary'\r\n ? currentFilter.lowerBoundary\r\n : currentFilter.begin\r\n \"\r\n (input)=\"updateValuesList($any($event.target).value, 1)\"\r\n />\r\n <mat-autocomplete\r\n #autoDualValueOperator1=\"matAutocomplete\"\r\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\"\r\n >\r\n {{ value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n *ngIf=\"\r\n isClearable(1) &&\r\n inputClearable === 'selectProperty1' &&\r\n currentFilter.active\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty(1)\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"dualInput\"\r\n *ngIf=\"\r\n !isTemporalOperator() &&\r\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\r\n \"\r\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoDualValueOperator2\"\r\n type=\"number\"\r\n [value]=\"\r\n detectProperty(2) === 'upperBoundary'\r\n ? currentFilter.upperBoundary\r\n : currentFilter.end\r\n \"\r\n (input)=\"updateValuesList($any($event.target).value, 2)\"\r\n />\r\n <mat-autocomplete\r\n #autoDualValueOperator2=\"matAutocomplete\"\r\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\"\r\n >\r\n {{ value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n *ngIf=\"\r\n isClearable(2) &&\r\n inputClearable === 'selectProperty2' &&\r\n currentFilter.active\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty(2)\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n</div>\r\n\r\n<igo-ogc-filter-time\r\n *ngIf=\"isTemporalOperator()\"\r\n [datasource]=\"datasource\"\r\n [currentFilter]=\"currentFilter\"\r\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\r\n>\r\n</igo-ogc-filter-time>\r\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.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: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
290
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: OgcFilterFormComponent, deps: [{ token: i1.WktService }], target: i0.ɵɵFactoryTarget.Component });
291
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: OgcFilterFormComponent, isStandalone: true, selector: "igo-ogc-filter-form", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", currentFilter: "currentFilter", floatLabel: "floatLabel" }, ngImport: i0, template: "<div class=\"ogc-filter-form-container\">\n <mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\"\n >\n </mat-checkbox>\n\n <mat-form-field\n [ngClass]=\"{\n logical:\n activeFilters.indexOf(currentFilter) !== 0 &&\n currentFilter.active === true,\n logicalHidden:\n activeFilters.indexOf(currentFilter) === 0 ||\n currentFilter.active !== true\n }\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.parentLogical\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n | translate)\n : ''\n \"\n (selectionChange)=\"changeLogical($event.value)\"\n >\n <mat-option\n [value]=\"ogcFilterOperator.And\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n >\n {{ 'igo.geo.operators.And' | translate }}\n </mat-option>\n <mat-option\n [value]=\"ogcFilterOperator.Or\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n >\n {{ 'igo.geo.operators.Or' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"field\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) === false &&\n (fields$ | async) &&\n (fields$ | async).length > 0 &&\n (fields$ | async)[0].name !== ''\n \"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n (selectedField$ | async)\n ? (selectedField$ | async).alias\n : ('igo.geo.sourceFields.selectField' | translate)\n \"\n (input)=\"updateFieldsList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteField=\"matAutocomplete\"\n (optionSelected)=\"changeField($event.option.id)\"\n >\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\"\n >\n {{ field.alias }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n currentFilter.propertyName &&\n inputClearable === 'selectField' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n [ngClass]=\"{\n operator: (currentFilterIsSpatial$ | async) === false,\n dualInput: (currentFilterIsSpatial$ | async)\n }\"\n [floatLabel]=\"floatLabel\"\n >\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.operator\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n : ('igo.geo.filter.selectOperator' | translate)\n \"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\"\n >\n <mat-option\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n >\n {{ 'igo.geo.operators.' + operator.key | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"spatialSelector\"\n *ngIf=\"currentFilterIsSpatial$ | async\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\"\n >\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\"\n >\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"singleInput\"\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression\n : currentFilter.pattern\n \"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression || ''\n : currentFilter.pattern || ''\n \"\n (input)=\"updateValuesList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable() &&\n inputClearable === 'selectProperty' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"snrc\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'snrc'\n \"\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($any($event.target).value)\"\n />\n <button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"\n !currentFilter.active &&\n inputClearable === 'selectSNRC' &&\n currentFilter.active\n \"\n (click)=\"currentFilter.igoSNRC = ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'fixedExtent'\n \"\n >\n <button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n >\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"\n detectProperty(1) === 'lowerBoundary'\n ? currentFilter.lowerBoundary\n : currentFilter.begin\n \"\n (input)=\"updateValuesList($any($event.target).value, 1)\"\n />\n <mat-autocomplete\n #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(1) &&\n inputClearable === 'selectProperty1' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"\n detectProperty(2) === 'upperBoundary'\n ? currentFilter.upperBoundary\n : currentFilter.end\n \"\n (input)=\"updateValuesList($any($event.target).value, 2)\"\n />\n <mat-autocomplete\n #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(2) &&\n inputClearable === 'selectProperty2' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n *ngIf=\"isTemporalOperator()\"\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.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: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
292
292
  }
293
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: OgcFilterFormComponent, decorators: [{
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: OgcFilterFormComponent, decorators: [{
294
294
  type: Component,
295
295
  args: [{ selector: 'igo-ogc-filter-form', standalone: true, imports: [
296
296
  MatCheckboxModule,
@@ -308,8 +308,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
308
308
  OgcFilterTimeComponent,
309
309
  AsyncPipe,
310
310
  KeyValuePipe,
311
- TranslateModule
312
- ], template: "<div class=\"ogc-filter-form-container\">\r\n <mat-checkbox\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleFilterState($event)\"\r\n [checked]=\"currentFilter.active\"\r\n >\r\n </mat-checkbox>\r\n\r\n <mat-form-field\r\n [ngClass]=\"{\r\n logical:\r\n activeFilters.indexOf(currentFilter) !== 0 &&\r\n currentFilter.active === true,\r\n logicalHidden:\r\n activeFilters.indexOf(currentFilter) === 0 ||\r\n currentFilter.active !== true\r\n }\"\r\n >\r\n <mat-select\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.parentLogical\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n currentFilter.parentLogical\r\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\r\n | translate)\r\n : ''\r\n \"\r\n (selectionChange)=\"changeLogical($event.value)\"\r\n >\r\n <mat-option\r\n [value]=\"ogcFilterOperator.And\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\r\n >\r\n {{ 'igo.geo.operators.And' | translate }}\r\n </mat-option>\r\n <mat-option\r\n [value]=\"ogcFilterOperator.Or\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\r\n >\r\n {{ 'igo.geo.operators.Or' | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"field\"\r\n *ngIf=\"\r\n (currentFilterIsSpatial$ | async) === false &&\r\n (fields$ | async) &&\r\n (fields$ | async).length > 0 &&\r\n (fields$ | async)[0].name !== ''\r\n \"\r\n (mouseenter)=\"inputClearable = 'selectField'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoCompleteField\"\r\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n (selectedField$ | async)\r\n ? (selectedField$ | async).alias\r\n : ('igo.geo.sourceFields.selectField' | translate)\r\n \"\r\n (input)=\"updateFieldsList($any($event.target).value)\"\r\n />\r\n <mat-autocomplete\r\n #autoCompleteField=\"matAutocomplete\"\r\n (optionSelected)=\"changeField($event.option.id)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let field of filteredFields$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"field.alias\"\r\n [id]=\"field.name\"\r\n [matTooltip]=\"field.alias\"\r\n >\r\n {{ field.alias }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n *ngIf=\"\r\n currentFilter.propertyName &&\r\n inputClearable === 'selectField' &&\r\n currentFilter.active\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearSelectedField()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n [ngClass]=\"{\r\n operator: (currentFilterIsSpatial$ | async) === false,\r\n dualInput: (currentFilterIsSpatial$ | async)\r\n }\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <mat-select\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n currentFilter.operator\r\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\r\n : ('igo.geo.filter.selectOperator' | translate)\r\n \"\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.operator\"\r\n (selectionChange)=\"changeOperator($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"operator.key\"\r\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\r\n >\r\n {{ 'igo.geo.operators.' + operator.key | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"spatialSelector\"\r\n *ngIf=\"currentFilterIsSpatial$ | async\"\r\n >\r\n <mat-select\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.igoSpatialSelector\"\r\n (selectionChange)=\"changeSpatialSelector($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\r\n [value]=\"igoSpatialSelector.type\"\r\n >\r\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"singleInput\"\r\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\r\n (mouseenter)=\"inputClearable = 'selectProperty'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoCompleteValues\"\r\n [value]=\"\r\n detectProperty() === 'expression'\r\n ? currentFilter.expression\r\n : currentFilter.pattern\r\n \"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n detectProperty() === 'expression'\r\n ? currentFilter.expression || ''\r\n : currentFilter.pattern || ''\r\n \"\r\n (input)=\"updateValuesList($any($event.target).value)\"\r\n />\r\n <mat-autocomplete\r\n #autoCompleteValues=\"matAutocomplete\"\r\n (optionSelected)=\"changeProperty($event.option.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\"\r\n >\r\n {{ value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n *ngIf=\"\r\n isClearable() &&\r\n inputClearable === 'selectProperty' &&\r\n currentFilter.active\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"igo-layer-button-group\">\r\n <button\r\n mat-icon-button\r\n collapsibleButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\r\n color=\"warn\"\r\n (click)=\"deleteFilter()\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <mat-form-field\r\n class=\"snrc\"\r\n *ngIf=\"\r\n (currentFilterIsSpatial$ | async) &&\r\n currentFilter.igoSpatialSelector === 'snrc'\r\n \"\r\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\r\n [value]=\"currentFilter.igoSNRC\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\r\n (input)=\"changeSNRC($any($event.target).value)\"\r\n />\r\n <button\r\n *ngIf=\"currentFilter.igoSNRC\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"\r\n !currentFilter.active &&\r\n inputClearable === 'selectSNRC' &&\r\n currentFilter.active\r\n \"\r\n (click)=\"currentFilter.igoSNRC = ''\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <ng-container\r\n *ngIf=\"\r\n (currentFilterIsSpatial$ | async) &&\r\n currentFilter.igoSpatialSelector === 'fixedExtent'\r\n \"\r\n >\r\n <button\r\n [disabled]=\"!currentFilter.active\"\r\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\r\n matSuffix\r\n mat-icon-button\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"changeMapExtentGeometry()\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\r\n >\r\n <mat-icon svgIcon=\"arrow-expand-all\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n</div>\r\n\r\n<div class=\"ogc-filter-form-container\">\r\n <mat-form-field\r\n class=\"dualInput\"\r\n *ngIf=\"\r\n !isTemporalOperator() &&\r\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\r\n \"\r\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoDualValueOperator1\"\r\n type=\"number\"\r\n [value]=\"\r\n detectProperty(1) === 'lowerBoundary'\r\n ? currentFilter.lowerBoundary\r\n : currentFilter.begin\r\n \"\r\n (input)=\"updateValuesList($any($event.target).value, 1)\"\r\n />\r\n <mat-autocomplete\r\n #autoDualValueOperator1=\"matAutocomplete\"\r\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\"\r\n >\r\n {{ value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n *ngIf=\"\r\n isClearable(1) &&\r\n inputClearable === 'selectProperty1' &&\r\n currentFilter.active\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty(1)\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"dualInput\"\r\n *ngIf=\"\r\n !isTemporalOperator() &&\r\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\r\n \"\r\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoDualValueOperator2\"\r\n type=\"number\"\r\n [value]=\"\r\n detectProperty(2) === 'upperBoundary'\r\n ? currentFilter.upperBoundary\r\n : currentFilter.end\r\n \"\r\n (input)=\"updateValuesList($any($event.target).value, 2)\"\r\n />\r\n <mat-autocomplete\r\n #autoDualValueOperator2=\"matAutocomplete\"\r\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\"\r\n >\r\n {{ value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n *ngIf=\"\r\n isClearable(2) &&\r\n inputClearable === 'selectProperty2' &&\r\n currentFilter.active\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty(2)\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n</div>\r\n\r\n<igo-ogc-filter-time\r\n *ngIf=\"isTemporalOperator()\"\r\n [datasource]=\"datasource\"\r\n [currentFilter]=\"currentFilter\"\r\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\r\n>\r\n</igo-ogc-filter-time>\r\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"] }]
311
+ IgoLanguageModule
312
+ ], template: "<div class=\"ogc-filter-form-container\">\n <mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\"\n >\n </mat-checkbox>\n\n <mat-form-field\n [ngClass]=\"{\n logical:\n activeFilters.indexOf(currentFilter) !== 0 &&\n currentFilter.active === true,\n logicalHidden:\n activeFilters.indexOf(currentFilter) === 0 ||\n currentFilter.active !== true\n }\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.parentLogical\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n | translate)\n : ''\n \"\n (selectionChange)=\"changeLogical($event.value)\"\n >\n <mat-option\n [value]=\"ogcFilterOperator.And\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n >\n {{ 'igo.geo.operators.And' | translate }}\n </mat-option>\n <mat-option\n [value]=\"ogcFilterOperator.Or\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n >\n {{ 'igo.geo.operators.Or' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"field\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) === false &&\n (fields$ | async) &&\n (fields$ | async).length > 0 &&\n (fields$ | async)[0].name !== ''\n \"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n (selectedField$ | async)\n ? (selectedField$ | async).alias\n : ('igo.geo.sourceFields.selectField' | translate)\n \"\n (input)=\"updateFieldsList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteField=\"matAutocomplete\"\n (optionSelected)=\"changeField($event.option.id)\"\n >\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\"\n >\n {{ field.alias }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n currentFilter.propertyName &&\n inputClearable === 'selectField' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n [ngClass]=\"{\n operator: (currentFilterIsSpatial$ | async) === false,\n dualInput: (currentFilterIsSpatial$ | async)\n }\"\n [floatLabel]=\"floatLabel\"\n >\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.operator\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n : ('igo.geo.filter.selectOperator' | translate)\n \"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\"\n >\n <mat-option\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n >\n {{ 'igo.geo.operators.' + operator.key | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"spatialSelector\"\n *ngIf=\"currentFilterIsSpatial$ | async\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\"\n >\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\"\n >\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"singleInput\"\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression\n : currentFilter.pattern\n \"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression || ''\n : currentFilter.pattern || ''\n \"\n (input)=\"updateValuesList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable() &&\n inputClearable === 'selectProperty' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"snrc\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'snrc'\n \"\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($any($event.target).value)\"\n />\n <button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"\n !currentFilter.active &&\n inputClearable === 'selectSNRC' &&\n currentFilter.active\n \"\n (click)=\"currentFilter.igoSNRC = ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'fixedExtent'\n \"\n >\n <button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n >\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"\n detectProperty(1) === 'lowerBoundary'\n ? currentFilter.lowerBoundary\n : currentFilter.begin\n \"\n (input)=\"updateValuesList($any($event.target).value, 1)\"\n />\n <mat-autocomplete\n #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(1) &&\n inputClearable === 'selectProperty1' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"\n detectProperty(2) === 'upperBoundary'\n ? currentFilter.upperBoundary\n : currentFilter.end\n \"\n (input)=\"updateValuesList($any($event.target).value, 2)\"\n />\n <mat-autocomplete\n #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(2) &&\n inputClearable === 'selectProperty2' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n *ngIf=\"isTemporalOperator()\"\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"] }]
313
313
  }], ctorParameters: () => [{ type: i1.WktService }], propDecorators: { refreshFilters: [{
314
314
  type: Input
315
315
  }], datasource: [{
@@ -321,4 +321,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
321
321
  }], floatLabel: [{
322
322
  type: Input
323
323
  }] } });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ25CLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUt4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQTBCdEYsTUFBTSxPQUFPLHNCQUFzQjtJQWlFYjtJQWhFcEIsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFDdEMsZUFBZSxDQUF1QjtJQUN0QyxlQUFlLENBQTBDO0lBQ2xELHFCQUFxQixDQUFDO0lBQ3RCLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUM5QyxTQUFTLENBQ1YsQ0FBQztJQUNLLG1CQUFtQixDQUFDO0lBQ3BCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxhQUFhLENBQUM7SUFDZCxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQ3pDLFNBQVMsQ0FDVixDQUFDO0lBQ0ssT0FBTyxHQUFHLElBQUksZUFBZSxDQUE4QixFQUFFLENBQUMsQ0FBQztJQUMvRCxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQ2xCLFFBQVEsQ0FBQztJQUNULHVCQUF1QixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzlELHNCQUFzQixHQUFHLElBQUksQ0FBQztJQUM5QixjQUFjLENBQVM7SUFFckIsY0FBYyxDQUFhO0lBRTNCLFVBQVUsQ0FBMEI7SUFFcEMsR0FBRyxDQUFVO0lBRWIsYUFBYSxDQUFNO0lBRTVCLElBQUksSUFBSSxDQUFDLEtBQVU7UUFDakIsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUM7UUFDaEQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLElBQ0UsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkIsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDekIsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDeEIsQ0FBQztZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU8sS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVWLFVBQVUsQ0FBaUI7SUFFcEMsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUNsRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUFDLHVCQUF1QixDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3hDLDJEQUEyRDtRQUMzRCxvREFBb0Q7UUFDcEQsNERBQTREO1FBQzVELDRDQUE0QztRQUM1QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsbUJBQW1CLEdBQUc7WUFDekI7Z0JBQ0UsSUFBSSxFQUFFLGFBQWE7YUFDcEI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsTUFBTTthQUNiO1NBQ0YsQ0FBQztRQUNGLG9DQUFvQztJQUN0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FDekQsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNMLEVBQUUsQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQ3RFLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQzNFLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckQsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQzVCLEtBQUssQ0FBQyxDQUFDLEVBQ1IsQ0FBQztnQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxlQUFlO1lBQ2xCLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFjLEVBQUUsR0FBWTtRQUMzQyxJQUFJLENBQUMsZUFBZTtZQUNsQixLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUN2QixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUs7b0JBQ3pCLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO29CQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUM3QixLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsRUFDdEQsSUFBSSxDQUNMLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ3ZDLFlBQVksQ0FBQyxJQUFJLENBQ2YsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUMzRCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWE7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQzdCLEtBQUs7YUFDRixRQUFRLEVBQUU7YUFDVixTQUFTLENBQUMsS0FBSyxDQUFDO2FBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsRUFDbEMsSUFBSSxDQUNMLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQzlDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixHQUFHO1lBQ0gsWUFBWSxDQUFDLElBQUksQ0FDZixHQUFHO2lCQUNBLFFBQVEsRUFBRTtpQkFDVixTQUFTLENBQUMsS0FBSyxDQUFDO2lCQUNoQixPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQ25DLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVk7UUFDdEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUNELGFBQWEsQ0FBQyxHQUFZO1FBQ3hCLDZDQUE2QztRQUM3QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3pELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUNsRCxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sVUFBVSxHQUFzQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDekUsVUFBVSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQ3BFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUNsRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZTtRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBZ0I7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLElBQ0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUs7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDNUMsQ0FBQztZQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUMzRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsMkNBQTJDO0lBQzNDLG1CQUFtQixDQUFDLFNBQVM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNqRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVLEVBQUUsR0FBWSxFQUFFLGFBQWEsR0FBRyxJQUFJO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDekQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQ2xELENBQUMsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLENBQUM7WUFFNUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQUssRUFBRSxHQUFXO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFVO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTlDLElBQUksS0FBSyxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sa0JBQWtCLEdBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3pELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUNsRCxDQUFDO1FBQ0osSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FDekQsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDcEIsQ0FBQyxPQUFPLENBQUM7UUFDWixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxVQUFtQixJQUFJO1FBQzdDLE1BQU0sa0JBQWtCLEdBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3pELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUNsRCxDQUFDO1FBQ0osSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ3BCLENBQUMsT0FBTyxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsR0FBWTtRQUN6QixRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQztZQUM1QyxLQUFLLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1lBQ3pDLEtBQUssaUJBQWlCLENBQUMscUJBQXFCLENBQUM7WUFDN0MsS0FBSyxpQkFBaUIsQ0FBQyw4QkFBOEIsQ0FBQztZQUN0RCxLQUFLLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1lBQzFDLEtBQUssaUJBQWlCLENBQUMsMkJBQTJCO2dCQUNoRCxPQUFPLFlBQVksQ0FBQztZQUN0QixLQUFLLGlCQUFpQixDQUFDLGNBQWM7Z0JBQ25DLE9BQU8sU0FBUyxDQUFDO1lBQ25CLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxPQUFPLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDckIsQ0FBQyxDQUFDLGVBQWU7b0JBQ2pCLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7d0JBQ2hCLENBQUMsQ0FBQyxlQUFlO3dCQUNqQixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2xCLEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxPQUFPO29CQUNULENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7d0JBQ2hCLENBQUMsQ0FBQyxLQUFLO3dCQUNQLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbEI7Z0JBQ0UsT0FBTztRQUNYLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixTQUFTO2dCQUNQO29CQUNFLGlCQUFpQixDQUFDLFFBQVE7b0JBQzFCLGlCQUFpQixDQUFDLFVBQVU7b0JBQzVCLGlCQUFpQixDQUFDLE1BQU07aUJBQ3pCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLENBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQzVDLENBQUM7SUFDSixDQUFDO3VHQXBXVSxzQkFBc0I7MkZBQXRCLHNCQUFzQiw2TkNyRG5DLGdvWkE4WUEseStDRDNXSSxpQkFBaUIsNldBQ2pCLGdCQUFnQiw0VEFDaEIsa0JBQWtCLDJXQUNsQixPQUFPLG1GQUNQLGVBQWUsbXJCQUNmLGVBQWUsK0JBQ2YsSUFBSSw0RkFDSixjQUFjLDBXQUNkLHFCQUFxQix3ckJBQ3JCLEtBQUssa0hBQ0wsZUFBZSwySUFDZixhQUFhLHFMQUNiLHNCQUFzQixpSUFDdEIsU0FBUyx5Q0FDVCxZQUFZLGdEQUNaLGVBQWU7OzJGQUdOLHNCQUFzQjtrQkF4QmxDLFNBQVM7K0JBQ0UscUJBQXFCLGNBR25CLElBQUksV0FDUDt3QkFDUCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixPQUFPO3dCQUNQLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixJQUFJO3dCQUNKLGNBQWM7d0JBQ2QscUJBQXFCO3dCQUNyQixLQUFLO3dCQUNMLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixzQkFBc0I7d0JBQ3RCLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixlQUFlO3FCQUNoQjsrRUF1QlEsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQXNCRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGbG9hdExhYmVsVHlwZSxcclxuICBNYXRGb3JtRmllbGRNb2R1bGVcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE9nY0ZpbHRlcldyaXRlciB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlcic7XHJcbmltcG9ydCB7IE9nY0ZpbHRlck9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlLFxyXG4gIE9nY0ZpbHRlcnNPcHRpb25zXHJcbn0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE1hcEJhc2UgfSBmcm9tICcuLi8uLi9tYXAnO1xyXG5pbXBvcnQgeyBXa3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd2t0L3NoYXJlZC93a3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE9nY0ZpbHRlclRpbWVDb21wb25lbnQgfSBmcm9tICcuLi9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTmdDbGFzcyxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdE9wdGlvbk1vZHVsZSxcclxuICAgIE5nSWYsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcclxuICAgIE5nRm9yLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE9nY0ZpbHRlclRpbWVDb21wb25lbnQsXHJcbiAgICBBc3luY1BpcGUsXHJcbiAgICBLZXlWYWx1ZVBpcGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPZ2NGaWx0ZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBvZ2NGaWx0ZXJPcGVyYXRvciA9IE9nY0ZpbHRlck9wZXJhdG9yO1xyXG4gIGZpbHRlcmVkVmFsdWVzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XHJcbiAgZmlsdGVyZWRGaWVsZHMkOiBPYnNlcnZhYmxlPFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXNbXT47XHJcbiAgcHVibGljIGFsbE9nY0ZpbHRlck9wZXJhdG9ycztcclxuICBwdWJsaWMgb2djRmlsdGVyT3BlcmF0b3JzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBba2V5OiBzdHJpbmddOiBhbnkgfT4oXHJcbiAgICB1bmRlZmluZWRcclxuICApO1xyXG4gIHB1YmxpYyBpZ29TcGF0aWFsU2VsZWN0b3JzO1xyXG4gIHB1YmxpYyB2YWx1ZSA9ICcnO1xyXG4gIHB1YmxpYyBpbnB1dE9wZXJhdG9yO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEZpZWxkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtcz4oXHJcbiAgICB1bmRlZmluZWRcclxuICApO1xyXG4gIHB1YmxpYyBmaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zW10+KFtdKTtcclxuICBwdWJsaWMgY29sb3IgPSAncHJpbWFyeSc7XHJcbiAgcHVibGljIGRpc2FibGVkO1xyXG4gIHB1YmxpYyBjdXJyZW50RmlsdGVySXNTcGF0aWFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHB1YmxpYyBkZWZhdWx0U3RlcE1pbGxpc2Vjb25kID0gNjAwMDtcclxuICBwdWJsaWMgaW5wdXRDbGVhcmFibGU6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgcmVmcmVzaEZpbHRlcnM6ICgpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFzb3VyY2U6IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlO1xyXG5cclxuICBASW5wdXQoKSBtYXA6IE1hcEJhc2U7XHJcblxyXG4gIEBJbnB1dCgpIGN1cnJlbnRGaWx0ZXI6IGFueTtcclxuXHJcbiAgc2V0IHNucmModmFsdWU6IGFueSkge1xyXG4gICAgY29uc3QgY2hlY2tTTlJDNTBrID0gL15cXGR7Mn1bYS1sXVswLDFdWzAtOV0kL2dpO1xyXG4gICAgY29uc3QgY2hlY2tTTlJDMjUwayA9IC9eXFxkezJ9W2EtcF0kL2dpO1xyXG4gICAgY29uc3QgY2hlY2tTTlJDMW0gPSAvXlxcZHsyfSQvZ2k7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoZWNrU05SQzFtLnRlc3QodmFsdWUpIHx8XHJcbiAgICAgIGNoZWNrU05SQzI1MGsudGVzdCh2YWx1ZSkgfHxcclxuICAgICAgY2hlY2tTTlJDNTBrLnRlc3QodmFsdWUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fc25yYyA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU05SQyA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNucmMoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9zbnJjO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc25yYyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZTtcclxuXHJcbiAgZ2V0IGFjdGl2ZUZpbHRlcnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcclxuICAgICAgKGYpID0+IGYuYWN0aXZlID09PSB0cnVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFsbG93ZWRPcGVyYXRvcnMoKSB7XHJcbiAgICByZXR1cm4gbmV3IE9nY0ZpbHRlcldyaXRlcigpLmNvbXB1dGVBbGxvd2VkT3BlcmF0b3JzKFxyXG4gICAgICB0aGlzLmZpZWxkcyQudmFsdWUsXHJcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYWxsb3dlZE9wZXJhdG9yc1R5cGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdrdFNlcnZpY2U6IFdrdFNlcnZpY2UpIHtcclxuICAgIC8vIFRPRE86IEZpbHRlciBwZXJtaXR0ZWQgb3BlcmF0b3IgYmFzZWQgb24gd2ZzY2FwYWJpbGl0aWVzXHJcbiAgICAvLyBOZWVkIHRvIHdvcmsgb24gcmVnZXggb24gWE1MIGNhcGFiaWxpdGllcyBiZWNhdXNlXHJcbiAgICAvLyBjb21hcGFyaXNvbiBvcGVyYXRvcidzIG5hbWUgdmFyaWVzIGJldHdlZW4gV0ZTIHNlcnZlcnMuLi5cclxuICAgIC8vIEV4OiBJc051bGwgdnMgUHJvcGVydHlJc051bGwgdnMgSXNOaWwgLi4uXHJcbiAgICB0aGlzLmFsbE9nY0ZpbHRlck9wZXJhdG9ycyA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKS5vcGVyYXRvcnM7XHJcbiAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLmFsbE9nY0ZpbHRlck9wZXJhdG9ycyk7XHJcbiAgICB0aGlzLmlnb1NwYXRpYWxTZWxlY3RvcnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiAnZml4ZWRFeHRlbnQnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiAnc25yYydcclxuICAgICAgfVxyXG4gICAgXTtcclxuICAgIC8vIFRPRE86IHNlbGVjdEZlYXR1cmUgJiBkcmF3RmVhdHVyZVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc291cmNlRmllbGRzKSB7XHJcbiAgICAgIGNvbnN0IHNGaWVsZHMgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMuZmlsdGVyKFxyXG4gICAgICAgIChzZikgPT5cclxuICAgICAgICAgIHNmLmV4Y2x1ZGVGcm9tT2djRmlsdGVycyA9PT0gdW5kZWZpbmVkIHx8ICFzZi5leGNsdWRlRnJvbU9nY0ZpbHRlcnNcclxuICAgICAgKTtcclxuICAgICAgc0ZpZWxkcy5tYXAoKHNmcykgPT4ge1xyXG4gICAgICAgIGlmIChzZnMudmFsdWVzKSB7XHJcbiAgICAgICAgICBzZnMudmFsdWVzLnNvcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZpZWxkcyQubmV4dChzRmllbGRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkc0xpc3QoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCQubmV4dChcclxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSlcclxuICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlc0xpc3QoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCQuc3Vic2NyaWJlKChmKSA9PiB7XHJcbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMuYWxsb3dlZE9wZXJhdG9ycyk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpLmluZGV4T2YoXHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3JcclxuICAgICAgICApID09PSAtMVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpWzBdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA9IE9iamVjdC5rZXlzKHRoaXMuYWxsb3dlZE9wZXJhdG9ycylbMF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVWYWx1ZXNMaXN0KCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRmllbGRzTGlzdCh2YWx1ZT86IHN0cmluZykge1xyXG4gICAgdGhpcy5maWx0ZXJlZEZpZWxkcyQgPVxyXG4gICAgICB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwID8gb2YodGhpcy5fZmlsdGVyRmllbGRzKHZhbHVlKSkgOiB0aGlzLmZpZWxkcyQ7XHJcbiAgICBpZiAodGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRmllbGQodmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmFsdWVzTGlzdCh2YWx1ZT86IHN0cmluZywgcG9zPzogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkVmFsdWVzJCA9XHJcbiAgICAgIHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDBcclxuICAgICAgICA/IG9mKHRoaXMuX2ZpbHRlclZhbHVlcyh2YWx1ZSkpXHJcbiAgICAgICAgOiB0aGlzLnNlbGVjdGVkRmllbGQkLnZhbHVlXHJcbiAgICAgICAgICA/IG9mKHRoaXMuc2VsZWN0ZWRGaWVsZCQudmFsdWUudmFsdWVzKVxyXG4gICAgICAgICAgOiBvZihbXSk7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID49IDEpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eSh2YWx1ZSwgcG9zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkcyh2YWx1ZTogc3RyaW5nKTogU291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdIHtcclxuICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgIHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpLFxyXG4gICAgICAnZ2knXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRzJC52YWx1ZS5maWx0ZXIoKHZhbCkgPT5cclxuICAgICAga2V5d29yZFJlZ2V4LnRlc3QoXHJcbiAgICAgICAgdmFsLmFsaWFzLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXJWYWx1ZXModmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgIHZhbHVlXHJcbiAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyksXHJcbiAgICAgICdnaSdcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWVsZCQudmFsdWU/LnZhbHVlcz8uZmlsdGVyKFxyXG4gICAgICAodmFsKSA9PlxyXG4gICAgICAgIHZhbCAmJlxyXG4gICAgICAgIGtleXdvcmRSZWdleC50ZXN0KFxyXG4gICAgICAgICAgdmFsXHJcbiAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTZWxlY3RlZEZpZWxkKCkge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICB0aGlzLmNsZWFyUHJvcGVydHkoKTtcclxuICB9XHJcblxyXG4gIGlzQ2xlYXJhYmxlKHBvcz86IG51bWJlcikge1xyXG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcclxuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXJbZGV0ZWN0ZWRQcm9wZXJ0eV07XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNsZWFyUHJvcGVydHkocG9zPzogbnVtYmVyKSB7XHJcbiAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZUlucHV0VmFsdWVzLmNsb3NlUGFuZWwoKTtcclxuICAgIGNvbnN0IGRldGVjdGVkUHJvcGVydHkgPSB0aGlzLmRldGVjdFByb3BlcnR5KHBvcyk7XHJcbiAgICBpZiAoZGV0ZWN0ZWRQcm9wZXJ0eSkge1xyXG4gICAgICByZXR1cm4gKHRoaXMuY3VycmVudEZpbHRlcltkZXRlY3RlZFByb3BlcnR5XSA9ICcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlclN0YXRlKGV2ZW50KSB7XHJcbiAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcclxuICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxyXG4gICAgKS5hY3RpdmUgPSBldmVudC5jaGVja2VkO1xyXG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRmlsdGVyKCkge1xyXG4gICAgY29uc3Qgb2djRmlsdGVyczogT2djRmlsdGVyc09wdGlvbnMgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzO1xyXG4gICAgb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzID0gb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcclxuICAgICAgKGYpID0+IGYuZmlsdGVyaWQgIT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxyXG4gICAgKTtcclxuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUxvZ2ljYWwobG9naWNhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucGFyZW50TG9naWNhbCA9IGxvZ2ljYWw7XHJcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VPcGVyYXRvcihvcGVyYXRvcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBvcGVyYXRvcjtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsJC52YWx1ZSAmJlxyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIud2t0X2dlb21ldHJ5Lmxlbmd0aCA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlU3BhdGlhbFNlbGVjdG9yKHRoaXMuY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlRmllbGQoZmllbGQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSA9IGZpZWxkO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KFxyXG4gICAgICB0aGlzLmZpZWxkcyQudmFsdWUuZmluZCgoZikgPT4gZi5uYW1lID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lKVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIC8vIElzc3VlIHdpdGggbWFwc2VydmVyIDcuMiBhbmQgUG9zdGdpcyBsYXllcnMuIEZpeGVkIGluIDcuNFxyXG4gIC8vIER1ZSB0byB0aGlzIGlzc3VlLCB0aGUgY2hlY2tib3ggaXMgaGlkZS5cclxuICBjaGFuZ2VDYXNlU2Vuc2l0aXZlKG1hdGNoQ2FzZSkge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLm1hdGNoQ2FzZSA9IG1hdGNoQ2FzZS5jaGVja2VkO1xyXG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHkodmFsdWU6IGFueSwgcG9zPzogbnVtYmVyLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcclxuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxyXG4gICAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcclxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xyXG5cclxuICAgICAgaWYgKHJlZnJlc2hGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZU51bWVyaWNQcm9wZXJ0eSh2YWx1ZSwgcG9zOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkocGFyc2VGbG9hdCh2YWx1ZSksIHBvcyk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTcGF0aWFsU2VsZWN0b3IodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xyXG4gICAgICB0aGlzLmNoYW5nZU1hcEV4dGVudEdlb21ldHJ5KGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xyXG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU05SQyh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNucmMgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2hhbmdlU05SQ0dlb21ldHJ5KCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTTlJDR2VvbWV0cnkoKSB7XHJcbiAgICBjb25zdCBpbnRlcmZhY2VPZ2NGaWx0ZXIgPVxyXG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcclxuICAgICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXHJcbiAgICAgICk7XHJcbiAgICBpZiAoIWludGVyZmFjZU9nY0ZpbHRlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc25yYyAmJiB0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnc25yYycpIHtcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLndrdF9nZW9tZXRyeSA9IHRoaXMud2t0U2VydmljZS5zbnJjVG9Xa3QoXHJcbiAgICAgICAgdGhpcy5zbnJjLFxyXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cclxuICAgICAgKS53a3RQb2x5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkocmVmcmVzaDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IGludGVyZmFjZU9nY0ZpbHRlciA9XHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxyXG4gICAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcclxuICAgICAgKTtcclxuICAgIGlmICghaW50ZXJmYWNlT2djRmlsdGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIud2t0X2dlb21ldHJ5ID0gdGhpcy53a3RTZXJ2aWNlLmV4dGVudFRvV2t0KFxyXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCksXHJcbiAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvblxyXG4gICAgICApLndrdFBvbHk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVmcmVzaCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRlY3RQcm9wZXJ0eShwb3M/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW46XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuT3JFcXVhbFRvOlxyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbjpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW5PckVxdWFsVG86XHJcbiAgICAgICAgcmV0dXJuICdleHByZXNzaW9uJztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGlrZTpcclxuICAgICAgICByZXR1cm4gJ3BhdHRlcm4nO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNCZXR3ZWVuOlxyXG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXHJcbiAgICAgICAgICA/ICdsb3dlckJvdW5kYXJ5J1xyXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXHJcbiAgICAgICAgICAgID8gJ3VwcGVyQm91bmRhcnknXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZzpcclxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxyXG4gICAgICAgICAgPyAnYmVnaW4nXHJcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcclxuICAgICAgICAgICAgPyAnZW5kJ1xyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwoKSB7XHJcbiAgICBsZXQgaXNTcGF0aWFsID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyKSB7XHJcbiAgICAgIGlzU3BhdGlhbCA9XHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuQ29udGFpbnMsXHJcbiAgICAgICAgICBPZ2NGaWx0ZXJPcGVyYXRvci5JbnRlcnNlY3RzLFxyXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuV2l0aGluXHJcbiAgICAgICAgXS5pbmRleE9mKHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcikgIT09IC0xO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsJC5uZXh0KGlzU3BhdGlhbCk7XHJcbiAgfVxyXG5cclxuICBpc1RlbXBvcmFsT3BlcmF0b3IoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgdGhpcy5vZ2NGaWx0ZXJPcGVyYXRvci5EdXJpbmcudG9Mb3dlckNhc2UoKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm9nYy1maWx0ZXItZm9ybS1jb250YWluZXJcIj5cclxuICA8bWF0LWNoZWNrYm94XHJcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIudG9nZ2xlRmlsdGVyU3RhdGUnIHwgdHJhbnNsYXRlXCJcclxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgkZXZlbnQpXCJcclxuICAgIFtjaGVja2VkXT1cImN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICA+XHJcbiAgPC9tYXQtY2hlY2tib3g+XHJcblxyXG4gIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICBsb2dpY2FsOlxyXG4gICAgICAgIGFjdGl2ZUZpbHRlcnMuaW5kZXhPZihjdXJyZW50RmlsdGVyKSAhPT0gMCAmJlxyXG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlID09PSB0cnVlLFxyXG4gICAgICBsb2dpY2FsSGlkZGVuOlxyXG4gICAgICAgIGFjdGl2ZUZpbHRlcnMuaW5kZXhPZihjdXJyZW50RmlsdGVyKSA9PT0gMCB8fFxyXG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlICE9PSB0cnVlXHJcbiAgICB9XCJcclxuICA+XHJcbiAgICA8bWF0LXNlbGVjdFxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIucGFyZW50TG9naWNhbFwiXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgICBjdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWxcclxuICAgICAgICAgID8gKCdpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLicgKyBjdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWxcclxuICAgICAgICAgICAgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICA6ICcnXHJcbiAgICAgIFwiXHJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlTG9naWNhbCgkZXZlbnQudmFsdWUpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICBbdmFsdWVdPVwib2djRmlsdGVyT3BlcmF0b3IuQW5kXCJcclxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLkFuZCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgJ2lnby5nZW8ub3BlcmF0b3JzLkFuZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgIFt2YWx1ZV09XCJvZ2NGaWx0ZXJPcGVyYXRvci5PclwiXHJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC5PcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgJ2lnby5nZW8ub3BlcmF0b3JzLk9yJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICBjbGFzcz1cImZpZWxkXCJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSA9PT0gZmFsc2UgJiZcclxuICAgICAgKGZpZWxkcyQgfCBhc3luYykgJiZcclxuICAgICAgKGZpZWxkcyQgfCBhc3luYykubGVuZ3RoID4gMCAmJlxyXG4gICAgICAoZmllbGRzJCB8IGFzeW5jKVswXS5uYW1lICE9PSAnJ1xyXG4gICAgXCJcclxuICAgIChtb3VzZWVudGVyKT1cImlucHV0Q2xlYXJhYmxlID0gJ3NlbGVjdEZpZWxkJ1wiXHJcbiAgICAobW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXHJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcclxuICA+XHJcbiAgICA8aW5wdXRcclxuICAgICAgbWF0SW5wdXRcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLnNvdXJjZUZpZWxkcy5zZWxlY3RGaWVsZCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGVGaWVsZFwiXHJcbiAgICAgIFt2YWx1ZV09XCIoc2VsZWN0ZWRGaWVsZCQgfCBhc3luYykgPyAoc2VsZWN0ZWRGaWVsZCQgfCBhc3luYykuYWxpYXMgOiAnJ1wiXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgICAoc2VsZWN0ZWRGaWVsZCQgfCBhc3luYylcclxuICAgICAgICAgID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzXHJcbiAgICAgICAgICA6ICgnaWdvLmdlby5zb3VyY2VGaWVsZHMuc2VsZWN0RmllbGQnIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICAoaW5wdXQpPVwidXBkYXRlRmllbGRzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAvPlxyXG4gICAgPG1hdC1hdXRvY29tcGxldGVcclxuICAgICAgI2F1dG9Db21wbGV0ZUZpZWxkPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICAgICAgKG9wdGlvblNlbGVjdGVkKT1cImNoYW5nZUZpZWxkKCRldmVudC5vcHRpb24uaWQpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmlsdGVyZWRGaWVsZHMkIHwgYXN5bmNcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJmaWVsZC5hbGlhc1wiXHJcbiAgICAgICAgW2lkXT1cImZpZWxkLm5hbWVcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLmFsaWFzXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGZpZWxkLmFsaWFzIH19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJcclxuICAgICAgICBjdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSAmJlxyXG4gICAgICAgIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0RmllbGQnICYmXHJcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcclxuICAgICAgXCJcclxuICAgICAgbWF0U3VmZml4XHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWRGaWVsZCgpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8bWF0LWZvcm0tZmllbGRcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgb3BlcmF0b3I6IChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSA9PT0gZmFsc2UsXHJcbiAgICAgIGR1YWxJbnB1dDogKGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmMpXHJcbiAgICB9XCJcclxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxyXG4gID5cclxuICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgICBjdXJyZW50RmlsdGVyLm9wZXJhdG9yXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC4nICsgY3VycmVudEZpbHRlci5vcGVyYXRvciB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmZpbHRlci5zZWxlY3RPcGVyYXRvcicgfCB0cmFuc2xhdGUpXHJcbiAgICAgIFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5vcGVyYXRvclwiXHJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlT3BlcmF0b3IoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IG9wZXJhdG9yIG9mIG9nY0ZpbHRlck9wZXJhdG9ycyQgfCBhc3luYyB8IGtleXZhbHVlXCJcclxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJvcGVyYXRvci5rZXlcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLicgKyBvcGVyYXRvci5rZXkgfCB0cmFuc2xhdGVcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgJ2lnby5nZW8ub3BlcmF0b3JzLicgKyBvcGVyYXRvci5rZXkgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgY2xhc3M9XCJzcGF0aWFsU2VsZWN0b3JcIlxyXG4gICAgKm5nSWY9XCJjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jXCJcclxuICA+XHJcbiAgICA8bWF0LXNlbGVjdFxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yXCJcclxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VTcGF0aWFsU2VsZWN0b3IoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGlnb1NwYXRpYWxTZWxlY3RvciBvZiBpZ29TcGF0aWFsU2VsZWN0b3JzXCJcclxuICAgICAgICBbdmFsdWVdPVwiaWdvU3BhdGlhbFNlbGVjdG9yLnR5cGVcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgJ2lnby5nZW8uc3BhdGlhbFNlbGVjdG9yLicgKyBpZ29TcGF0aWFsU2VsZWN0b3IudHlwZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICBjbGFzcz1cInNpbmdsZUlucHV0XCJcclxuICAgICpuZ0lmPVwiWydleHByZXNzaW9uJywgJ3BhdHRlcm4nXS5pbmRleE9mKGRldGVjdFByb3BlcnR5KCkpICE9PSAtMVwiXHJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eSdcIlxyXG4gICAgKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxyXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXHJcbiAgPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIG1hdElucHV0XHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXHJcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlVmFsdWVzXCJcclxuICAgICAgW3ZhbHVlXT1cIlxyXG4gICAgICAgIGRldGVjdFByb3BlcnR5KCkgPT09ICdleHByZXNzaW9uJ1xyXG4gICAgICAgICAgPyBjdXJyZW50RmlsdGVyLmV4cHJlc3Npb25cclxuICAgICAgICAgIDogY3VycmVudEZpbHRlci5wYXR0ZXJuXHJcbiAgICAgIFwiXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgICBkZXRlY3RQcm9wZXJ0eSgpID09PSAnZXhwcmVzc2lvbidcclxuICAgICAgICAgID8gY3VycmVudEZpbHRlci5leHByZXNzaW9uIHx8ICcnXHJcbiAgICAgICAgICA6IGN1cnJlbnRGaWx0ZXIucGF0dGVybiB8fCAnJ1xyXG4gICAgICBcIlxyXG4gICAgICAoaW5wdXQpPVwidXBkYXRlVmFsdWVzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAvPlxyXG4gICAgPG1hdC1hdXRvY29tcGxldGVcclxuICAgICAgI2F1dG9Db21wbGV0ZVZhbHVlcz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQub3B0aW9uLnZhbHVlKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkVmFsdWVzJCB8IGFzeW5jXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cInZhbHVlXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHZhbHVlIH19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJcclxuICAgICAgICBpc0NsZWFyYWJsZSgpICYmXHJcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RQcm9wZXJ0eScgJiZcclxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxyXG4gICAgICBcIlxyXG4gICAgICBtYXRTdWZmaXhcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAoY2xpY2spPVwiY2xlYXJQcm9wZXJ0eSgpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWxheWVyLWJ1dHRvbi1ncm91cFwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgY29sbGFwc2libGVCdXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZW1vdmVGaWx0ZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgKGNsaWNrKT1cImRlbGV0ZUZpbHRlcigpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJkZWxldGVcIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgY2xhc3M9XCJzbnJjXCJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJlxyXG4gICAgICBjdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ3NucmMnXHJcbiAgICBcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0U05SQydcIlxyXG4gICAgKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxyXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXHJcbiAgPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIG1hdElucHV0XHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXJTbnJjJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyLmlnb1NOUkNcIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiY3VycmVudEZpbHRlci5pZ29TTlJDID8gY3VycmVudEZpbHRlci5pZ29TTlJDIDogJydcIlxyXG4gICAgICAoaW5wdXQpPVwiY2hhbmdlU05SQygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAvPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQ1wiXHJcbiAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICFjdXJyZW50RmlsdGVyLmFjdGl2ZSAmJlxyXG4gICAgICAgIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0U05SQycgJiZcclxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxyXG4gICAgICBcIlxyXG4gICAgICAoY2xpY2spPVwiY3VycmVudEZpbHRlci5pZ29TTlJDID0gJydcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJlxyXG4gICAgICBjdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50J1xyXG4gICAgXCJcclxuICA+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnZml4ZWRFeHRlbnQnXCJcclxuICAgICAgbWF0U3VmZml4XHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1hcEV4dGVudEdlb21ldHJ5KClcIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uc3BhdGlhbFNlbGVjdG9yLmJ0blNldEV4dGVudCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImFycm93LWV4cGFuZC1hbGxcIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm9nYy1maWx0ZXItZm9ybS1jb250YWluZXJcIj5cclxuICA8bWF0LWZvcm0tZmllbGRcclxuICAgIGNsYXNzPVwiZHVhbElucHV0XCJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgICFpc1RlbXBvcmFsT3BlcmF0b3IoKSAmJlxyXG4gICAgICBbJ2xvd2VyQm91bmRhcnknLCAnYmVnaW4nXS5pbmRleE9mKGRldGVjdFByb3BlcnR5KDEpKSAhPT0gLTFcclxuICAgIFwiXHJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eTEnXCJcclxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcclxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxyXG4gID5cclxuICAgIDxpbnB1dFxyXG4gICAgICBtYXRJbnB1dFxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8uZmlsdGVyLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9EdWFsVmFsdWVPcGVyYXRvcjFcIlxyXG4gICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgW3ZhbHVlXT1cIlxyXG4gICAgICAgIGRldGVjdFByb3BlcnR5KDEpID09PSAnbG93ZXJCb3VuZGFyeSdcclxuICAgICAgICAgID8gY3VycmVudEZpbHRlci5sb3dlckJvdW5kYXJ5XHJcbiAgICAgICAgICA6IGN1cnJlbnRGaWx0ZXIuYmVnaW5cclxuICAgICAgXCJcclxuICAgICAgKGlucHV0KT1cInVwZGF0ZVZhbHVlc0xpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgMSlcIlxyXG4gICAgLz5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgICNhdXRvRHVhbFZhbHVlT3BlcmF0b3IxPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICAgICAgKG9wdGlvblNlbGVjdGVkKT1cImNoYW5nZU51bWVyaWNQcm9wZXJ0eSgkZXZlbnQub3B0aW9uLnZhbHVlLCAxKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkVmFsdWVzJCB8IGFzeW5jXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cInZhbHVlXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHZhbHVlIH19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJcclxuICAgICAgICBpc0NsZWFyYWJsZSgxKSAmJlxyXG4gICAgICAgIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0UHJvcGVydHkxJyAmJlxyXG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlXHJcbiAgICAgIFwiXHJcbiAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXHJcbiAgICAgIChjbGljayk9XCJjbGVhclByb3BlcnR5KDEpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8bWF0LWZvcm0tZmllbGRcclxuICAgIGNsYXNzPVwiZHVhbElucHV0XCJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgICFpc1RlbXBvcmFsT3BlcmF0b3IoKSAmJlxyXG4gICAgICBbJ3VwcGVyQm91bmRhcnknLCAnZW5kJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgyKSkgIT09IC0xXHJcbiAgICBcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0UHJvcGVydHkyJ1wiXHJcbiAgICAobW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXHJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcclxuICA+XHJcbiAgICA8aW5wdXRcclxuICAgICAgbWF0SW5wdXRcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLmZpbHRlci5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvRHVhbFZhbHVlT3BlcmF0b3IyXCJcclxuICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgIFt2YWx1ZV09XCJcclxuICAgICAgICBkZXRlY3RQcm9wZXJ0eSgyKSA9PT0gJ3VwcGVyQm91bmRhcnknXHJcbiAgICAgICAgICA/IGN1cnJlbnRGaWx0ZXIudXBwZXJCb3VuZGFyeVxyXG4gICAgICAgICAgOiBjdXJyZW50RmlsdGVyLmVuZFxyXG4gICAgICBcIlxyXG4gICAgICAoaW5wdXQpPVwidXBkYXRlVmFsdWVzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAyKVwiXHJcbiAgICAvPlxyXG4gICAgPG1hdC1hdXRvY29tcGxldGVcclxuICAgICAgI2F1dG9EdWFsVmFsdWVPcGVyYXRvcjI9XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsIDIpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRWYWx1ZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwidmFsdWVcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgdmFsdWUgfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgIGlzQ2xlYXJhYmxlKDIpICYmXHJcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RQcm9wZXJ0eTInICYmXHJcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcclxuICAgICAgXCJcclxuICAgICAgbWF0U3VmZml4XHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMilcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PlxyXG5cclxuPGlnby1vZ2MtZmlsdGVyLXRpbWVcclxuICAqbmdJZj1cImlzVGVtcG9yYWxPcGVyYXRvcigpXCJcclxuICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcclxuICBbY3VycmVudEZpbHRlcl09XCJjdXJyZW50RmlsdGVyXCJcclxuICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50LnZhbHVlLCAkZXZlbnQucG9zKVwiXHJcbj5cclxuPC9pZ28tb2djLWZpbHRlci10aW1lPlxyXG4iXX0=
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ25CLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUs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QUFTOytCQUNFLHFCQUFxQixjQUduQixJQUFJLFdBQ1A7d0JBQ1AsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsT0FBTzt3QkFDUCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsSUFBSTt3QkFDSixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsS0FBSzt3QkFDTCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixTQUFTO3dCQUNULFlBQVk7d0JBQ1osaUJBQWlCO3FCQUNsQjsrRUF1QlEsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQXNCRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtcbiAgRmxvYXRMYWJlbFR5cGUsXG4gIE1hdEZvcm1GaWVsZE1vZHVsZVxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcbmltcG9ydCB7IE9nY0ZpbHRlck9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmVudW0nO1xuaW1wb3J0IHtcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXG4gIE9nY0ZpbHRlcnNPcHRpb25zXG59IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWFwQmFzZSB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQgeyBXa3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd2t0L3NoYXJlZC93a3Quc2VydmljZSc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vb2djLWZpbHRlci10aW1lL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tb2djLWZpbHRlci1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTmdDbGFzcyxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIE5nRm9yLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE9nY0ZpbHRlclRpbWVDb21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBJZ29MYW5ndWFnZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBvZ2NGaWx0ZXJPcGVyYXRvciA9IE9nY0ZpbHRlck9wZXJhdG9yO1xuICBmaWx0ZXJlZFZhbHVlcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBmaWx0ZXJlZEZpZWxkcyQ6IE9ic2VydmFibGU8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdPjtcbiAgcHVibGljIGFsbE9nY0ZpbHRlck9wZXJhdG9ycztcbiAgcHVibGljIG9nY0ZpbHRlck9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgaWdvU3BhdGlhbFNlbGVjdG9ycztcbiAgcHVibGljIHZhbHVlID0gJyc7XG4gIHB1YmxpYyBpbnB1dE9wZXJhdG9yO1xuICBwdWJsaWMgc2VsZWN0ZWRGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXM+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdPihbXSk7XG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcbiAgcHVibGljIGRpc2FibGVkO1xuICBwdWJsaWMgY3VycmVudEZpbHRlcklzU3BhdGlhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGRlZmF1bHRTdGVwTWlsbGlzZWNvbmQgPSA2MDAwO1xuICBwdWJsaWMgaW5wdXRDbGVhcmFibGU6IHN0cmluZztcblxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcblxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcblxuICBASW5wdXQoKSBtYXA6IE1hcEJhc2U7XG5cbiAgQElucHV0KCkgY3VycmVudEZpbHRlcjogYW55O1xuXG4gIHNldCBzbnJjKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBjaGVja1NOUkM1MGsgPSAvXlxcZHsyfVthLWxdWzAsMV1bMC05XSQvZ2k7XG4gICAgY29uc3QgY2hlY2tTTlJDMjUwayA9IC9eXFxkezJ9W2EtcF0kL2dpO1xuICAgIGNvbnN0IGNoZWNrU05SQzFtID0gL15cXGR7Mn0kL2dpO1xuICAgIGlmIChcbiAgICAgIGNoZWNrU05SQzFtLnRlc3QodmFsdWUpIHx8XG4gICAgICBjaGVja1NOUkMyNTBrLnRlc3QodmFsdWUpIHx8XG4gICAgICBjaGVja1NOUkM1MGsudGVzdCh2YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuX3NucmMgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5pZ29TTlJDID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNucmMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc25yYztcbiAgfVxuXG4gIHByaXZhdGUgX3NucmMgPSAnJztcblxuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZTtcblxuICBnZXQgYWN0aXZlRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChmKSA9PiBmLmFjdGl2ZSA9PT0gdHJ1ZVxuICAgICk7XG4gIH1cblxuICBnZXQgYWxsb3dlZE9wZXJhdG9ycygpIHtcbiAgICByZXR1cm4gbmV3IE9nY0ZpbHRlcldyaXRlcigpLmNvbXB1dGVBbGxvd2VkT3BlcmF0b3JzKFxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLFxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYWxsb3dlZE9wZXJhdG9yc1R5cGVcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3a3RTZXJ2aWNlOiBXa3RTZXJ2aWNlKSB7XG4gICAgLy8gVE9ETzogRmlsdGVyIHBlcm1pdHRlZCBvcGVyYXRvciBiYXNlZCBvbiB3ZnNjYXBhYmlsaXRpZXNcbiAgICAvLyBOZWVkIHRvIHdvcmsgb24gcmVnZXggb24gWE1MIGNhcGFiaWxpdGllcyBiZWNhdXNlXG4gICAgLy8gY29tYXBhcmlzb24gb3BlcmF0b3IncyBuYW1lIHZhcmllcyBiZXR3ZWVuIFdGUyBzZXJ2ZXJzLi4uXG4gICAgLy8gRXg6IElzTnVsbCB2cyBQcm9wZXJ0eUlzTnVsbCB2cyBJc05pbCAuLi5cbiAgICB0aGlzLmFsbE9nY0ZpbHRlck9wZXJhdG9ycyA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKS5vcGVyYXRvcnM7XG4gICAgdGhpcy5vZ2NGaWx0ZXJPcGVyYXRvcnMkLm5leHQodGhpcy5hbGxPZ2NGaWx0ZXJPcGVyYXRvcnMpO1xuICAgIHRoaXMuaWdvU3BhdGlhbFNlbGVjdG9ycyA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2ZpeGVkRXh0ZW50J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3NucmMnXG4gICAgICB9XG4gICAgXTtcbiAgICAvLyBUT0RPOiBzZWxlY3RGZWF0dXJlICYgZHJhd0ZlYXR1cmVcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMpIHtcbiAgICAgIGNvbnN0IHNGaWVsZHMgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMuZmlsdGVyKFxuICAgICAgICAoc2YpID0+XG4gICAgICAgICAgc2YuZXhjbHVkZUZyb21PZ2NGaWx0ZXJzID09PSB1bmRlZmluZWQgfHwgIXNmLmV4Y2x1ZGVGcm9tT2djRmlsdGVyc1xuICAgICAgKTtcbiAgICAgIHNGaWVsZHMubWFwKChzZnMpID0+IHtcbiAgICAgICAgaWYgKHNmcy52YWx1ZXMpIHtcbiAgICAgICAgICBzZnMudmFsdWVzLnNvcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpZWxkcyQubmV4dChzRmllbGRzKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUZpZWxkc0xpc3QoKTtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGQkLm5leHQoXG4gICAgICB0aGlzLmZpZWxkcyQudmFsdWUuZmluZCgoZikgPT4gZi5uYW1lID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lKVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZXNMaXN0KCk7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5zdWJzY3JpYmUoKGYpID0+IHtcbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMuYWxsb3dlZE9wZXJhdG9ycyk7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWxsb3dlZE9wZXJhdG9ycykuaW5kZXhPZihcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3JcbiAgICAgICAgKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpWzBdO1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpWzBdO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVWYWx1ZXNMaXN0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsKCk7XG4gIH1cblxuICB1cGRhdGVGaWVsZHNMaXN0KHZhbHVlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJlZEZpZWxkcyQgPVxuICAgICAgdmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCA/IG9mKHRoaXMuX2ZpbHRlckZpZWxkcyh2YWx1ZSkpIDogdGhpcy5maWVsZHMkO1xuICAgIGlmICh0aGlzLmZpZWxkcyQudmFsdWUuZmluZCgoZikgPT4gZi5uYW1lID09PSB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2hhbmdlRmllbGQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbHVlc0xpc3QodmFsdWU/OiBzdHJpbmcsIHBvcz86IG51bWJlcikge1xuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMkID1cbiAgICAgIHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgPyBvZih0aGlzLl9maWx0ZXJWYWx1ZXModmFsdWUpKVxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRGaWVsZCQudmFsdWVcbiAgICAgICAgICA/IG9mKHRoaXMuc2VsZWN0ZWRGaWVsZCQudmFsdWUudmFsdWVzKVxuICAgICAgICAgIDogb2YoW10pO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPj0gMSkge1xuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eSh2YWx1ZSwgcG9zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHModmFsdWU6IHN0cmluZyk6IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXNbXSB7XG4gICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpLFxuICAgICAgJ2dpJ1xuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzJC52YWx1ZS5maWx0ZXIoKHZhbCkgPT5cbiAgICAgIGtleXdvcmRSZWdleC50ZXN0KFxuICAgICAgICB2YWwuYWxpYXMubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyVmFsdWVzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIHZhbHVlXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyksXG4gICAgICAnZ2knXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmllbGQkLnZhbHVlPy52YWx1ZXM/LmZpbHRlcihcbiAgICAgICh2YWwpID0+XG4gICAgICAgIHZhbCAmJlxuICAgICAgICBrZXl3b3JkUmVnZXgudGVzdChcbiAgICAgICAgICB2YWxcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRGaWVsZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5jbGVhclByb3BlcnR5KCk7XG4gIH1cblxuICBpc0NsZWFyYWJsZShwb3M/OiBudW1iZXIpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyW2RldGVjdGVkUHJvcGVydHldO1xuICAgIH1cbiAgfVxuICBjbGVhclByb3BlcnR5KHBvcz86IG51bWJlcikge1xuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlSW5wdXRWYWx1ZXMuY2xvc2VQYW5lbCgpO1xuICAgIGNvbnN0IGRldGVjdGVkUHJvcGVydHkgPSB0aGlzLmRldGVjdFByb3BlcnR5KHBvcyk7XG4gICAgaWYgKGRldGVjdGVkUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50RmlsdGVyW2RldGVjdGVkUHJvcGVydHldID0gJycpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclN0YXRlKGV2ZW50KSB7XG4gICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgKS5hY3RpdmUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbHRlcigpIHtcbiAgICBjb25zdCBvZ2NGaWx0ZXJzOiBPZ2NGaWx0ZXJzT3B0aW9ucyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnM7XG4gICAgb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzID0gb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChmKSA9PiBmLmZpbHRlcmlkICE9PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZUxvZ2ljYWwobG9naWNhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWwgPSBsb2dpY2FsO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZU9wZXJhdG9yKG9wZXJhdG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwoKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCQudmFsdWUgJiZcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmNoYW5nZVNwYXRpYWxTZWxlY3Rvcih0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUZpZWxkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lID0gZmllbGQ7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KFxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSlcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIC8vIElzc3VlIHdpdGggbWFwc2VydmVyIDcuMiBhbmQgUG9zdGdpcyBsYXllcnMuIEZpeGVkIGluIDcuNFxuICAvLyBEdWUgdG8gdGhpcyBpc3N1ZSwgdGhlIGNoZWNrYm94IGlzIGhpZGUuXG4gIGNoYW5nZUNhc2VTZW5zaXRpdmUobWF0Y2hDYXNlKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLm1hdGNoQ2FzZSA9IG1hdGNoQ2FzZS5jaGVja2VkO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KHZhbHVlOiBhbnksIHBvcz86IG51bWJlciwgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcbiAgICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xuXG4gICAgICBpZiAocmVmcmVzaEZpbHRlcikge1xuICAgICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTnVtZXJpY1Byb3BlcnR5KHZhbHVlLCBwb3M6IG51bWJlcikge1xuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkocGFyc2VGbG9hdCh2YWx1ZSksIHBvcyk7XG4gIH1cblxuICBjaGFuZ2VTcGF0aWFsU2VsZWN0b3IodmFsdWU6IGFueSkge1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xuICAgICAgdGhpcy5jaGFuZ2VNYXBFeHRlbnRHZW9tZXRyeShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZVNOUkModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc25yYyA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlU05SQ0dlb21ldHJ5KCk7XG4gIH1cblxuICBjaGFuZ2VTTlJDR2VvbWV0cnkoKSB7XG4gICAgY29uc3QgaW50ZXJmYWNlT2djRmlsdGVyID1cbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxuICAgICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgICApO1xuICAgIGlmICghaW50ZXJmYWNlT2djRmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc25yYyAmJiB0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnc25yYycpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkgPSB0aGlzLndrdFNlcnZpY2Uuc25yY1RvV2t0KFxuICAgICAgICB0aGlzLnNucmMsXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICkud2t0UG9seTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICB9XG5cbiAgY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkocmVmcmVzaDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBpbnRlcmZhY2VPZ2NGaWx0ZXIgPVxuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICAgICk7XG4gICAgaWYgKCFpbnRlcmZhY2VPZ2NGaWx0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLndrdF9nZW9tZXRyeSA9IHRoaXMud2t0U2VydmljZS5leHRlbnRUb1drdChcbiAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgICAgdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCksXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICkud2t0UG9seTtcbiAgICB9XG4gICAgaWYgKHJlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBkZXRlY3RQcm9wZXJ0eShwb3M/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNOb3RFcXVhbFRvOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUbzpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW5PckVxdWFsVG86XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbjpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvOlxuICAgICAgICByZXR1cm4gJ2V4cHJlc3Npb24nO1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGlrZTpcbiAgICAgICAgcmV0dXJuICdwYXR0ZXJuJztcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0JldHdlZW46XG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXG4gICAgICAgICAgPyAnbG93ZXJCb3VuZGFyeSdcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcbiAgICAgICAgICAgID8gJ3VwcGVyQm91bmRhcnknXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nOlxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxuICAgICAgICAgID8gJ2JlZ2luJ1xuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxuICAgICAgICAgICAgPyAnZW5kJ1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RmlsdGVySXNTcGF0aWFsKCkge1xuICAgIGxldCBpc1NwYXRpYWwgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyKSB7XG4gICAgICBpc1NwYXRpYWwgPVxuICAgICAgICBbXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuQ29udGFpbnMsXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuSW50ZXJzZWN0cyxcbiAgICAgICAgICBPZ2NGaWx0ZXJPcGVyYXRvci5XaXRoaW5cbiAgICAgICAgXS5pbmRleE9mKHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcikgIT09IC0xO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkLm5leHQoaXNTcGF0aWFsKTtcbiAgfVxuXG4gIGlzVGVtcG9yYWxPcGVyYXRvcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yLnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZy50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm9nYy1maWx0ZXItZm9ybS1jb250YWluZXJcIj5cbiAgPG1hdC1jaGVja2JveFxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnRvZ2dsZUZpbHRlclN0YXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgkZXZlbnQpXCJcbiAgICBbY2hlY2tlZF09XCJjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gID5cbiAgPC9tYXQtY2hlY2tib3g+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgbG9naWNhbDpcbiAgICAgICAgYWN0aXZlRmlsdGVycy5pbmRleE9mKGN1cnJlbnRGaWx0ZXIpICE9PSAwICYmXG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlID09PSB0cnVlLFxuICAgICAgbG9naWNhbEhpZGRlbjpcbiAgICAgICAgYWN0aXZlRmlsdGVycy5pbmRleE9mKGN1cnJlbnRGaWx0ZXIpID09PSAwIHx8XG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlICE9PSB0cnVlXG4gICAgfVwiXG4gID5cbiAgICA8bWF0LXNlbGVjdFxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBjdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWxcbiAgICAgICAgICA/ICgnaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC4nICsgY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICcnXG4gICAgICBcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMb2dpY2FsKCRldmVudC52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgIFt2YWx1ZV09XCJvZ2NGaWx0ZXJPcGVyYXRvci5BbmRcIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuQW5kJyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uZ2VvLm9wZXJhdG9ycy5BbmQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICBbdmFsdWVdPVwib2djRmlsdGVyT3BlcmF0b3IuT3JcIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuT3InIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5nZW8ub3BlcmF0b3JzLk9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBjbGFzcz1cImZpZWxkXCJcbiAgICAqbmdJZj1cIlxuICAgICAgKGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmMpID09PSBmYWxzZSAmJlxuICAgICAgKGZpZWxkcyQgfCBhc3luYykgJiZcbiAgICAgIChmaWVsZHMkIHwgYXN5bmMpLmxlbmd0aCA+IDAgJiZcbiAgICAgIChmaWVsZHMkIHwgYXN5bmMpWzBdLm5hbWUgIT09ICcnXG4gICAgXCJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RGaWVsZCdcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5zb3VyY2VGaWVsZHMuc2VsZWN0RmllbGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGVGaWVsZFwiXG4gICAgICBbdmFsdWVdPVwiKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzIDogJydcIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIChzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKVxuICAgICAgICAgID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzXG4gICAgICAgICAgOiAoJ2lnby5nZW8uc291cmNlRmllbGRzLnNlbGVjdEZpZWxkJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICAoaW5wdXQpPVwidXBkYXRlRmllbGRzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgLz5cbiAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgI2F1dG9Db21wbGV0ZUZpZWxkPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VGaWVsZCgkZXZlbnQub3B0aW9uLmlkKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpbHRlcmVkRmllbGRzJCB8IGFzeW5jXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJmaWVsZC5hbGlhc1wiXG4gICAgICAgIFtpZF09XCJmaWVsZC5uYW1lXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuYWxpYXNcIlxuICAgICAgPlxuICAgICAgICB7eyBmaWVsZC5hbGlhcyB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBjdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdEZpZWxkJyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZEZpZWxkKClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgb3BlcmF0b3I6IChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSA9PT0gZmFsc2UsXG4gICAgICBkdWFsSW5wdXQ6IChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKVxuICAgIH1cIlxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICA+XG4gICAgPG1hdC1zZWxlY3RcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBjdXJyZW50RmlsdGVyLm9wZXJhdG9yXG4gICAgICAgICAgPyAoJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuJyArIGN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2lnby5nZW8uZmlsdGVyLnNlbGVjdE9wZXJhdG9yJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyLm9wZXJhdG9yXCJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlT3BlcmF0b3IoJGV2ZW50LnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IG9wZXJhdG9yIG9mIG9nY0ZpbHRlck9wZXJhdG9ycyQgfCBhc3luYyB8IGtleXZhbHVlXCJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJvcGVyYXRvci5rZXlcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC4nICsgb3BlcmF0b3Iua2V5IHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5nZW8ub3BlcmF0b3JzLicgKyBvcGVyYXRvci5rZXkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJzcGF0aWFsU2VsZWN0b3JcIlxuICAgICpuZ0lmPVwiY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luY1wiXG4gID5cbiAgICA8bWF0LXNlbGVjdFxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3JcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VTcGF0aWFsU2VsZWN0b3IoJGV2ZW50LnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGlnb1NwYXRpYWxTZWxlY3RvciBvZiBpZ29TcGF0aWFsU2VsZWN0b3JzXCJcbiAgICAgICAgW3ZhbHVlXT1cImlnb1NwYXRpYWxTZWxlY3Rvci50eXBlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5nZW8uc3BhdGlhbFNlbGVjdG9yLicgKyBpZ29TcGF0aWFsU2VsZWN0b3IudHlwZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBjbGFzcz1cInNpbmdsZUlucHV0XCJcbiAgICAqbmdJZj1cIlsnZXhwcmVzc2lvbicsICdwYXR0ZXJuJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgpKSAhPT0gLTFcIlxuICAgIChtb3VzZWVudGVyKT1cImlucHV0Q2xlYXJhYmxlID0gJ3NlbGVjdFByb3BlcnR5J1wiXG4gICAgKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLmZpbHRlci5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9Db21wbGV0ZVZhbHVlc1wiXG4gICAgICBbdmFsdWVdPVwiXG4gICAgICAgIGRldGVjdFByb3BlcnR5KCkgPT09ICdleHByZXNzaW9uJ1xuICAgICAgICAgID8gY3VycmVudEZpbHRlci5leHByZXNzaW9uXG4gICAgICAgICAgOiBjdXJyZW50RmlsdGVyLnBhdHRlcm5cbiAgICAgIFwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgZGV0ZWN0UHJvcGVydHkoKSA9PT0gJ2V4cHJlc3Npb24nXG4gICAgICAgICAgPyBjdXJyZW50RmlsdGVyLmV4cHJlc3Npb24gfHwgJydcbiAgICAgICAgICA6IGN1cnJlbnRGaWx0ZXIucGF0dGVybiB8fCAnJ1xuICAgICAgXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAvPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0b0NvbXBsZXRlVmFsdWVzPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQub3B0aW9uLnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkVmFsdWVzJCB8IGFzeW5jXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInZhbHVlXCJcbiAgICAgID5cbiAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgaXNDbGVhcmFibGUoKSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFByb3BlcnR5JyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJQcm9wZXJ0eSgpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxkaXYgY2xhc3M9XCJpZ28tbGF5ZXItYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xsYXBzaWJsZUJ1dHRvblxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlbW92ZUZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVGaWx0ZXIoKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIGNsYXNzPVwic25yY1wiXG4gICAgKm5nSWY9XCJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJlxuICAgICAgY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdzbnJjJ1xuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0U05SQydcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXJTbnJjJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQyA/IGN1cnJlbnRGaWx0ZXIuaWdvU05SQyA6ICcnXCJcbiAgICAgIChpbnB1dCk9XCJjaGFuZ2VTTlJDKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAhY3VycmVudEZpbHRlci5hY3RpdmUgJiZcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RTTlJDJyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIChjbGljayk9XCJjdXJyZW50RmlsdGVyLmlnb1NOUkMgPSAnJ1wiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJlxuICAgICAgY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdmaXhlZEV4dGVudCdcbiAgICBcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnZml4ZWRFeHRlbnQnXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VNYXBFeHRlbnRHZW9tZXRyeSgpXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLnNwYXRpYWxTZWxlY3Rvci5idG5TZXRFeHRlbnQnIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+em9vbV9vdXRfbWFwPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm9nYy1maWx0ZXItZm9ybS1jb250YWluZXJcIj5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJkdWFsSW5wdXRcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhaXNUZW1wb3JhbE9wZXJhdG9yKCkgJiZcbiAgICAgIFsnbG93ZXJCb3VuZGFyeScsICdiZWdpbiddLmluZGV4T2YoZGV0ZWN0UHJvcGVydHkoMSkpICE9PSAtMVxuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0UHJvcGVydHkxJ1wiXG4gICAgKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLmZpbHRlci5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9EdWFsVmFsdWVPcGVyYXRvcjFcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwiXG4gICAgICAgIGRldGVjdFByb3BlcnR5KDEpID09PSAnbG93ZXJCb3VuZGFyeSdcbiAgICAgICAgICA/IGN1cnJlbnRGaWx0ZXIubG93ZXJCb3VuZGFyeVxuICAgICAgICAgIDogY3VycmVudEZpbHRlci5iZWdpblxuICAgICAgXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIDEpXCJcbiAgICAvPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMT1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsIDEpXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwidmFsdWVcIlxuICAgICAgPlxuICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBpc0NsZWFyYWJsZSgxKSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFByb3BlcnR5MScgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMSlcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJkdWFsSW5wdXRcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhaXNUZW1wb3JhbE9wZXJhdG9yKCkgJiZcbiAgICAgIFsndXBwZXJCb3VuZGFyeScsICdlbmQnXS5pbmRleE9mKGRldGVjdFByb3BlcnR5KDIpKSAhPT0gLTFcbiAgICBcIlxuICAgIChtb3VzZWVudGVyKT1cImlucHV0Q2xlYXJhYmxlID0gJ3NlbGVjdFByb3BlcnR5MidcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvRHVhbFZhbHVlT3BlcmF0b3IyXCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICBkZXRlY3RQcm9wZXJ0eSgyKSA9PT0gJ3VwcGVyQm91bmRhcnknXG4gICAgICAgICAgPyBjdXJyZW50RmlsdGVyLnVwcGVyQm91bmRhcnlcbiAgICAgICAgICA6IGN1cnJlbnRGaWx0ZXIuZW5kXG4gICAgICBcIlxuICAgICAgKGlucHV0KT1cInVwZGF0ZVZhbHVlc0xpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgMilcIlxuICAgIC8+XG4gICAgPG1hdC1hdXRvY29tcGxldGVcbiAgICAgICNhdXRvRHVhbFZhbHVlT3BlcmF0b3IyPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VOdW1lcmljUHJvcGVydHkoJGV2ZW50Lm9wdGlvbi52YWx1ZSwgMilcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ2YWx1ZVwiXG4gICAgICA+XG4gICAgICAgIHt7IHZhbHVlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGlzQ2xlYXJhYmxlKDIpICYmXG4gICAgICAgIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0UHJvcGVydHkyJyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJQcm9wZXJ0eSgyKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuXG48aWdvLW9nYy1maWx0ZXItdGltZVxuICAqbmdJZj1cImlzVGVtcG9yYWxPcGVyYXRvcigpXCJcbiAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIlxuICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50LnZhbHVlLCAkZXZlbnQucG9zKVwiXG4+XG48L2lnby1vZ2MtZmlsdGVyLXRpbWU+XG4iXX0=