@igo2/geo 1.14.2 → 1.15.1

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 (493) 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/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +13 -11
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +10 -10
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +20 -17
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
  10. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
  11. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  12. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +7 -12
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
  14. package/esm2020/lib/catalog/catalog.module.mjs +1 -1
  15. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  16. package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
  17. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  18. package/esm2020/lib/catalog/shared/catalog.service.mjs +3 -5
  19. package/esm2020/lib/datasource/datasource.module.mjs +1 -1
  20. package/esm2020/lib/datasource/shared/capabilities.service.mjs +2 -2
  21. package/esm2020/lib/datasource/shared/datasource.service.mjs +27 -31
  22. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  25. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  27. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  29. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  30. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  32. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  34. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  36. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  37. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  39. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  41. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  43. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  45. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  47. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
  50. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  52. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  53. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  55. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  57. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  58. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
  59. package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
  60. package/esm2020/lib/datasource/utils/index.mjs +1 -2
  61. package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
  62. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -10
  63. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
  64. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
  65. package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
  66. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
  67. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  68. package/esm2020/lib/directions/directions.component.mjs +2 -2
  69. package/esm2020/lib/directions/directions.module.mjs +1 -1
  70. package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
  71. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  72. package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
  73. package/esm2020/lib/directions/shared/directions.utils.mjs +2 -2
  74. package/esm2020/lib/directions/shared/store.mjs +1 -1
  75. package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
  76. package/esm2020/lib/download/download.module.mjs +1 -1
  77. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  78. package/esm2020/lib/download/shared/download.service.mjs +5 -8
  79. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
  80. package/esm2020/lib/draw/draw/draw-popup.component.mjs +3 -3
  81. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  82. package/esm2020/lib/draw/draw/draw.component.mjs +11 -10
  83. package/esm2020/lib/draw/draw/draw.module.mjs +1 -1
  84. package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
  85. package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
  86. package/esm2020/lib/draw/shared/draw.enum.mjs +1 -17
  87. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  88. package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
  89. package/esm2020/lib/draw/shared/index.mjs +1 -2
  90. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +4 -5
  91. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
  92. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
  93. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
  94. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
  95. package/esm2020/lib/feature/feature.module.mjs +1 -1
  96. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  97. package/esm2020/lib/feature/shared/feature.utils.mjs +7 -5
  98. package/esm2020/lib/feature/shared/store.mjs +10 -1
  99. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  100. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
  101. package/esm2020/lib/feature/shared/strategies/index.mjs +2 -1
  102. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  103. package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
  104. package/esm2020/lib/feature/shared/strategies/search.mjs +150 -0
  105. package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
  106. package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
  107. package/esm2020/lib/filter/filter.module.mjs +1 -1
  108. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
  109. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
  110. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
  111. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
  112. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +2 -2
  113. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
  114. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  115. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  116. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
  117. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  118. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  119. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  120. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  121. package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
  122. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
  123. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  124. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
  125. package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
  126. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  127. package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
  128. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +5 -5
  129. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +6 -7
  130. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
  131. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  132. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
  133. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  134. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  135. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
  136. package/esm2020/lib/geo.module.mjs +5 -1
  137. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +13 -12
  138. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  139. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
  140. package/esm2020/lib/geometry/geometry.module.mjs +1 -1
  141. package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
  142. package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
  143. package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
  144. package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
  145. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  146. package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
  147. package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
  148. package/esm2020/lib/import-export/import-export/import-export.component.mjs +53 -45
  149. package/esm2020/lib/import-export/import-export.module.mjs +5 -9
  150. package/esm2020/lib/import-export/index.mjs +1 -2
  151. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +31 -14
  152. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  153. package/esm2020/lib/import-export/shared/export.service.mjs +1 -1
  154. package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
  155. package/esm2020/lib/import-export/shared/export.utils.mjs +8 -17
  156. package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
  157. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  158. package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
  159. package/esm2020/lib/import-export/shared/import.utils.mjs +58 -91
  160. package/esm2020/lib/layer/index.mjs +1 -2
  161. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
  162. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  163. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
  164. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
  165. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
  166. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
  167. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
  168. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  169. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  170. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  171. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  172. package/esm2020/lib/layer/layer.module.mjs +6 -11
  173. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  174. package/esm2020/lib/layer/shared/index.mjs +1 -3
  175. package/esm2020/lib/layer/shared/layer.service.mjs +80 -29
  176. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  177. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  178. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  179. package/esm2020/lib/layer/shared/layers/image-layer.mjs +6 -7
  180. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  181. package/esm2020/lib/layer/shared/layers/layer.mjs +5 -3
  182. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  183. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
  184. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  185. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +155 -6
  186. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  187. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  188. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
  189. package/esm2020/lib/layer/utils/image-watcher.mjs +3 -6
  190. package/esm2020/lib/layer/utils/layer.utils.mjs +2 -2
  191. package/esm2020/lib/layer/utils/outputLegend.mjs +3 -2
  192. package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
  193. package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
  194. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  195. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
  196. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +2 -2
  197. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
  198. package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
  199. package/esm2020/lib/map/map-browser/map-browser.component.mjs +3 -3
  200. package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
  201. package/esm2020/lib/map/map.module.mjs +1 -1
  202. package/esm2020/lib/map/menu-button/menu-button.component.mjs +3 -3
  203. package/esm2020/lib/map/offline-button/offline-button.component.mjs +34 -57
  204. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
  205. package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
  206. package/esm2020/lib/map/shared/controllers/geolocation.mjs +151 -36
  207. package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
  208. package/esm2020/lib/map/shared/hover-feature.directive.mjs +24 -73
  209. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
  210. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
  211. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  212. package/esm2020/lib/map/shared/map.mjs +7 -5
  213. package/esm2020/lib/map/shared/map.service.mjs +1 -1
  214. package/esm2020/lib/map/shared/map.utils.mjs +1 -1
  215. package/esm2020/lib/map/shared/mapOffline.directive.mjs +50 -115
  216. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  217. package/esm2020/lib/map/shared/projection.service.mjs +1 -1
  218. package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
  219. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  220. package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
  221. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +24 -35
  222. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  223. package/esm2020/lib/measure/measure.module.mjs +1 -1
  224. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
  225. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
  226. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
  227. package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
  228. package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
  229. package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
  230. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  231. package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
  232. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
  233. package/esm2020/lib/metadata/metadata.module.mjs +1 -1
  234. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  235. package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
  236. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +4 -4
  237. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  238. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  239. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +2 -2
  240. package/esm2020/lib/offline/index.mjs +2 -1
  241. package/esm2020/lib/offline/layerDB/index.mjs +3 -0
  242. package/esm2020/lib/offline/layerDB/layerDB.interface.mjs +2 -0
  243. package/esm2020/lib/offline/layerDB/layerDB.service.mjs +76 -0
  244. package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
  245. package/esm2020/lib/overlay/overlay.module.mjs +1 -1
  246. package/esm2020/lib/overlay/shared/index.mjs +1 -2
  247. package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
  248. package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
  249. package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
  250. package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
  251. package/esm2020/lib/overlay/shared/overlay.utils.mjs +2 -88
  252. package/esm2020/lib/print/print/print.component.mjs +6 -20
  253. package/esm2020/lib/print/print-form/print-form.component.mjs +197 -111
  254. package/esm2020/lib/print/print.module.mjs +1 -1
  255. package/esm2020/lib/print/shared/geopdf.mjs +1 -1
  256. package/esm2020/lib/print/shared/index.mjs +1 -1
  257. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  258. package/esm2020/lib/print/shared/print.service.mjs +85 -35
  259. package/esm2020/lib/print/shared/print.type.mjs +1 -1
  260. package/esm2020/lib/query/query.module.mjs +1 -1
  261. package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
  262. package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
  263. package/esm2020/lib/query/shared/query.directive.mjs +1 -1
  264. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  265. package/esm2020/lib/query/shared/query.service.mjs +3 -5
  266. package/esm2020/lib/query/shared/query.utils.mjs +1 -1
  267. package/esm2020/lib/search/search-bar/search-bar.component.mjs +3 -3
  268. package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
  269. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
  270. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +4 -4
  271. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +88 -31
  272. package/esm2020/lib/search/search-results/search-results-item.component.mjs +36 -13
  273. package/esm2020/lib/search/search-results/search-results.component.mjs +172 -58
  274. package/esm2020/lib/search/search-results/search-results.module.mjs +5 -1
  275. package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
  276. package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
  277. package/esm2020/lib/search/search-settings/search-settings.component.mjs +54 -56
  278. package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
  279. package/esm2020/lib/search/search.module.mjs +1 -1
  280. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +3 -30
  281. package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
  282. package/esm2020/lib/search/shared/search-source.service.mjs +9 -1
  283. package/esm2020/lib/search/shared/search.enums.mjs +1 -1
  284. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  285. package/esm2020/lib/search/shared/search.service.mjs +1 -1
  286. package/esm2020/lib/search/shared/search.utils.mjs +3 -3
  287. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  288. package/esm2020/lib/search/shared/sources/coordinates.mjs +1 -1
  289. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +4 -4
  290. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  291. package/esm2020/lib/search/shared/sources/icherche.mjs +1 -1
  292. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
  293. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  294. package/esm2020/lib/search/shared/sources/ilayer.mjs +1 -1
  295. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  296. package/esm2020/lib/search/shared/sources/index.mjs +4 -1
  297. package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
  298. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  299. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  300. package/esm2020/lib/search/shared/sources/source.mjs +31 -1
  301. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  302. package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
  303. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  304. package/esm2020/lib/search/shared/sources/workspace.interfaces.mjs +2 -0
  305. package/esm2020/lib/search/shared/sources/workspace.mjs +186 -0
  306. package/esm2020/lib/search/shared/sources/workspace.providers.mjs +26 -0
  307. package/esm2020/lib/style/index.mjs +5 -0
  308. package/esm2020/lib/style/shared/datasource/esri-style-generator.mjs +357 -0
  309. package/esm2020/lib/style/shared/datasource/index.mjs +2 -0
  310. package/esm2020/lib/style/shared/feature/feature-style.mjs +141 -0
  311. package/esm2020/lib/style/shared/feature/index.mjs +2 -0
  312. package/esm2020/lib/style/shared/font.enum.mjs +17 -0
  313. package/esm2020/lib/style/shared/index.mjs +5 -0
  314. package/esm2020/lib/style/shared/overlay/index.mjs +3 -0
  315. package/esm2020/lib/style/shared/overlay/overlay-marker-style.utils.mjs +43 -0
  316. package/esm2020/lib/style/shared/overlay/overlay-style.utils.mjs +88 -0
  317. package/esm2020/lib/style/shared/vector/commonVectorStyle.mjs +75 -0
  318. package/esm2020/lib/style/shared/vector/conversion.utils.mjs +27 -0
  319. package/esm2020/lib/style/shared/vector/index.mjs +4 -0
  320. package/esm2020/lib/style/shared/vector/vector-style.interface.mjs +2 -0
  321. package/esm2020/lib/style/style-list/index.mjs +5 -0
  322. package/esm2020/lib/style/style-list/style-list.interface.mjs +2 -0
  323. package/esm2020/lib/style/style-list/style-list.module.mjs +23 -0
  324. package/esm2020/lib/style/style-list/style-list.provider.mjs +21 -0
  325. package/esm2020/lib/style/style-list/style-list.service.mjs +51 -0
  326. package/esm2020/lib/style/style-modal/drawing/index.mjs +2 -0
  327. package/esm2020/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +288 -0
  328. package/esm2020/lib/style/style-modal/index.mjs +5 -0
  329. package/esm2020/lib/style/style-modal/layer/index.mjs +2 -0
  330. package/esm2020/lib/style/style-modal/layer/style-modal-layer.component.mjs +187 -0
  331. package/esm2020/lib/style/style-modal/layer-button/index.mjs +2 -0
  332. package/esm2020/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +44 -0
  333. package/esm2020/lib/style/style-modal/shared/index.mjs +2 -0
  334. package/esm2020/lib/style/style-modal/shared/style-modal.interface.mjs +2 -0
  335. package/esm2020/lib/style/style-service/draw-style.service.mjs +187 -0
  336. package/esm2020/lib/style/style-service/index.mjs +3 -0
  337. package/esm2020/lib/style/style-service/style.service.mjs +356 -0
  338. package/esm2020/lib/style/style.module.mjs +74 -0
  339. package/esm2020/lib/toast/toast.component.mjs +3 -3
  340. package/esm2020/lib/toast/toast.module.mjs +1 -1
  341. package/esm2020/lib/utils/id-generator.mjs +1 -1
  342. package/esm2020/lib/utils/index.mjs +1 -3
  343. package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
  344. package/esm2020/lib/wkt/wkt.module.mjs +1 -1
  345. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
  346. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
  347. package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
  348. package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
  349. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +19 -34
  350. package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
  351. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +10 -3
  352. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
  353. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +2 -2
  354. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +3 -3
  355. package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
  356. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  357. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
  358. package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
  359. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
  360. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  361. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  362. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
  363. package/esm2020/lib/workspace/workspace.module.mjs +1 -1
  364. package/esm2020/public_api.mjs +3 -1
  365. package/fesm2015/igo2-geo.mjs +6707 -5364
  366. package/fesm2015/igo2-geo.mjs.map +1 -1
  367. package/fesm2020/igo2-geo.mjs +7617 -6346
  368. package/fesm2020/igo2-geo.mjs.map +1 -1
  369. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +5 -14
  370. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +2 -5
  371. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +3 -9
  372. package/lib/catalog/catalog-library/catalog-library.component.d.ts +2 -3
  373. package/lib/catalog/shared/catalog.interface.d.ts +10 -0
  374. package/lib/datasource/shared/datasources/datasource.interface.d.ts +13 -0
  375. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +5 -0
  376. package/lib/datasource/utils/index.d.ts +0 -1
  377. package/lib/download/shared/download.service.d.ts +2 -3
  378. package/lib/draw/draw/draw.component.d.ts +3 -2
  379. package/lib/draw/shared/draw.enum.d.ts +0 -15
  380. package/lib/draw/shared/index.d.ts +0 -1
  381. package/lib/feature/shared/feature.interfaces.d.ts +5 -0
  382. package/lib/feature/shared/feature.utils.d.ts +4 -2
  383. package/lib/feature/shared/store.d.ts +7 -0
  384. package/lib/feature/shared/strategies/index.d.ts +1 -0
  385. package/lib/feature/shared/strategies/search.d.ts +55 -0
  386. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +2 -3
  387. package/lib/geo.module.d.ts +3 -2
  388. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +5 -9
  389. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +3 -3
  390. package/lib/import-export/import-export/import-export.component.d.ts +9 -4
  391. package/lib/import-export/import-export.module.d.ts +1 -2
  392. package/lib/import-export/index.d.ts +0 -1
  393. package/lib/import-export/shared/drop-geo-file.directive.d.ts +10 -7
  394. package/lib/import-export/shared/export.utils.d.ts +4 -4
  395. package/lib/import-export/shared/import.interface.d.ts +2 -0
  396. package/lib/import-export/shared/import.utils.d.ts +14 -12
  397. package/lib/layer/index.d.ts +0 -1
  398. package/lib/layer/layer.module.d.ts +19 -20
  399. package/lib/layer/shared/index.d.ts +0 -2
  400. package/lib/layer/shared/layer.service.d.ts +8 -5
  401. package/lib/layer/shared/layers/image-layer.d.ts +2 -3
  402. package/lib/layer/shared/layers/layer.d.ts +5 -1
  403. package/lib/layer/shared/layers/layer.interface.d.ts +2 -0
  404. package/lib/layer/shared/layers/vector-layer.d.ts +18 -2
  405. package/lib/layer/shared/layers/vector-layer.interface.d.ts +8 -7
  406. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +2 -4
  407. package/lib/layer/utils/image-watcher.d.ts +2 -3
  408. package/lib/map/offline-button/offline-button.component.d.ts +10 -18
  409. package/lib/map/shared/controllers/geolocation.d.ts +17 -2
  410. package/lib/map/shared/hover-feature.directive.d.ts +2 -10
  411. package/lib/map/shared/map.d.ts +2 -2
  412. package/lib/map/shared/mapOffline.directive.d.ts +4 -7
  413. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +3 -6
  414. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  415. package/lib/offline/index.d.ts +1 -0
  416. package/lib/offline/layerDB/index.d.ts +2 -0
  417. package/lib/offline/layerDB/layerDB.interface.d.ts +7 -0
  418. package/lib/offline/layerDB/layerDB.service.d.ts +36 -0
  419. package/lib/overlay/shared/index.d.ts +0 -1
  420. package/lib/overlay/shared/overlay.utils.d.ts +0 -11
  421. package/lib/print/print-form/print-form.component.d.ts +2 -0
  422. package/lib/print/shared/print.service.d.ts +6 -0
  423. package/lib/search/search-results/save-feature-dialog.component.d.ts +1 -1
  424. package/lib/search/search-results/search-results-add-button.component.d.ts +10 -2
  425. package/lib/search/search-results/search-results-item.component.d.ts +5 -0
  426. package/lib/search/search-results/search-results.component.d.ts +5 -1
  427. package/lib/search/search-results/search-results.module.d.ts +11 -10
  428. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -9
  429. package/lib/search/shared/search-source.service.d.ts +7 -0
  430. package/lib/search/shared/search.interfaces.d.ts +1 -1
  431. package/lib/search/shared/sources/coordinates.providers.d.ts +3 -3
  432. package/lib/search/shared/sources/index.d.ts +3 -0
  433. package/lib/search/shared/sources/source.d.ts +6 -0
  434. package/lib/search/shared/sources/workspace.d.ts +33 -0
  435. package/lib/search/shared/sources/workspace.interfaces.d.ts +9 -0
  436. package/lib/search/shared/sources/workspace.providers.d.ts +17 -0
  437. package/lib/style/index.d.ts +4 -0
  438. package/lib/style/shared/datasource/index.d.ts +1 -0
  439. package/lib/style/shared/feature/feature-style.d.ts +18 -0
  440. package/lib/style/shared/feature/index.d.ts +1 -0
  441. package/lib/style/shared/font.enum.d.ts +15 -0
  442. package/lib/style/shared/index.d.ts +4 -0
  443. package/lib/style/shared/overlay/index.d.ts +2 -0
  444. package/lib/style/shared/overlay/overlay-style.utils.d.ts +19 -0
  445. package/lib/{utils → style/shared/vector}/commonVectorStyle.d.ts +4 -4
  446. package/lib/style/shared/vector/conversion.utils.d.ts +22 -0
  447. package/lib/style/shared/vector/index.d.ts +3 -0
  448. package/lib/style/shared/vector/vector-style.interface.d.ts +69 -0
  449. package/lib/style/style-modal/drawing/index.d.ts +1 -0
  450. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +31 -0
  451. package/lib/style/style-modal/index.d.ts +4 -0
  452. package/lib/style/style-modal/layer/index.d.ts +1 -0
  453. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +30 -0
  454. package/lib/style/style-modal/layer-button/index.d.ts +1 -0
  455. package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +14 -0
  456. package/lib/style/style-modal/shared/index.d.ts +1 -0
  457. package/lib/style/style-modal/shared/style-modal.interface.d.ts +17 -0
  458. package/lib/{draw/shared → style/style-service}/draw-style.service.d.ts +3 -4
  459. package/lib/style/style-service/index.d.ts +2 -0
  460. package/lib/{layer/shared → style/style-service}/style.service.d.ts +5 -5
  461. package/lib/style/style.module.d.ts +22 -0
  462. package/lib/utils/index.d.ts +0 -2
  463. package/lib/workspace/shared/edition-workspace.service.d.ts +3 -4
  464. package/lib/workspace/shared/wms-workspace.service.d.ts +1 -1
  465. package/ngcc.config.js +3 -3
  466. package/package.json +17 -11
  467. package/public_api.d.ts +2 -0
  468. package/style/geo.theming.scss +12 -12
  469. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +0 -357
  470. package/esm2020/lib/draw/shared/draw-style.service.mjs +0 -190
  471. package/esm2020/lib/import-export/style-list/index.mjs +0 -5
  472. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +0 -2
  473. package/esm2020/lib/import-export/style-list/style-list.module.mjs +0 -23
  474. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +0 -21
  475. package/esm2020/lib/import-export/style-list/style-list.service.mjs +0 -51
  476. package/esm2020/lib/layer/shared/style.service.mjs +0 -356
  477. package/esm2020/lib/layer/shared/vector-style.interface.mjs +0 -2
  478. package/esm2020/lib/layer/style-modal/index.mjs +0 -2
  479. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +0 -288
  480. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +0 -69
  481. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +0 -2
  482. package/esm2020/lib/utils/commonVectorStyle.mjs +0 -75
  483. package/lib/layer/shared/vector-style.interface.d.ts +0 -38
  484. package/lib/layer/style-modal/index.d.ts +0 -1
  485. package/lib/layer/style-modal/style-modal.component.d.ts +0 -42
  486. package/lib/utils/commonVectorStyle.interface.d.ts +0 -16
  487. /package/lib/{datasource/utils → style/shared/datasource}/esri-style-generator.d.ts +0 -0
  488. /package/lib/{overlay/shared → style/shared/overlay}/overlay-marker-style.utils.d.ts +0 -0
  489. /package/lib/{import-export → style}/style-list/index.d.ts +0 -0
  490. /package/lib/{import-export → style}/style-list/style-list.interface.d.ts +0 -0
  491. /package/lib/{import-export → style}/style-list/style-list.module.d.ts +0 -0
  492. /package/lib/{import-export → style}/style-list/style-list.provider.d.ts +0 -0
  493. /package/lib/{import-export → style}/style-list/style-list.service.d.ts +0 -0
@@ -1,17 +1,21 @@
1
1
  import olGeolocation from 'ol/Geolocation';
2
2
  import { BehaviorSubject, interval } from 'rxjs';
3
+ import * as olproj from 'ol/proj';
3
4
  import olFeature from 'ol/Feature';
4
5
  import { MapController } from './controller';
5
6
  import { Point } from 'ol/geom';
6
7
  import { fromCircle } from 'ol/geom/Polygon';
8
+ import * as olSphere from 'ol/sphere';
7
9
  import OlCircle from 'ol/geom/Circle';
8
10
  import * as olstyle from 'ol/style';
9
11
  import { Overlay } from '../../../overlay/shared/overlay';
10
12
  import { FeatureMotion } from '../../../feature/shared/feature.enums';
11
13
  import { switchMap } from 'rxjs/operators';
14
+ import { computeOlFeaturesExtent, featuresAreOutOfView, hideOlFeature, moveToOlFeatures } from '../../../feature/shared/feature.utils';
12
15
  var GeolocationOverlayType;
13
16
  (function (GeolocationOverlayType) {
14
17
  GeolocationOverlayType["Position"] = "position";
18
+ GeolocationOverlayType["PositionDirection"] = "positionDirection";
15
19
  GeolocationOverlayType["Accuracy"] = "accuracy";
16
20
  GeolocationOverlayType["Buffer"] = "buffer";
17
21
  })(GeolocationOverlayType || (GeolocationOverlayType = {}));
@@ -68,6 +72,39 @@ export class MapGeolocationController extends MapController {
68
72
  this._followPosition = this.options && this.options.followPosition ? this.options.followPosition : false;
69
73
  this.geolocationOverlay = new Overlay(this.map);
70
74
  }
75
+ get bufferStyle() {
76
+ return new olstyle.Style({
77
+ stroke: new olstyle.Stroke({ width: 2, color: this.buffer.bufferStroke }),
78
+ fill: new olstyle.Fill({ color: this.buffer.bufferFill }),
79
+ text: new olstyle.Text({
80
+ textAlign: 'left',
81
+ offsetX: 10,
82
+ offsetY: -10,
83
+ font: '12px Calibri,sans-serif',
84
+ text: this.buffer.showBufferRadius ? `${this.buffer.bufferRadius}m` : '',
85
+ fill: new olstyle.Fill({ color: '#000' }),
86
+ stroke: new olstyle.Stroke({ color: '#fff', width: 3 })
87
+ })
88
+ });
89
+ }
90
+ get arrowStyle() {
91
+ return new olstyle.Style({
92
+ image: new olstyle.RegularShape({
93
+ radius: 5.5,
94
+ fill: new olstyle.Fill({
95
+ color: 'rgba(0, 132, 202)'
96
+ }),
97
+ stroke: new olstyle.Stroke({
98
+ color: '#fff',
99
+ width: 1.5,
100
+ }),
101
+ points: 3,
102
+ displacement: [0, 9],
103
+ rotation: this.arrowRotation,
104
+ rotateWithView: true
105
+ })
106
+ });
107
+ }
71
108
  /**
72
109
  * History of positions
73
110
  */
@@ -105,6 +142,9 @@ export class MapGeolocationController extends MapController {
105
142
  get accuracyThreshold() {
106
143
  return this._accuracyThreshold;
107
144
  }
145
+ get olGeolocation() {
146
+ return this.geolocation;
147
+ }
108
148
  /**
109
149
  * Whether the activate the geolocation.
110
150
  */
@@ -122,8 +162,8 @@ export class MapGeolocationController extends MapController {
122
162
  }
123
163
  }
124
164
  /**
125
- * Whether the activate the view tracking of the current position
126
- */
165
+ * Whether the activate the view tracking of the current position
166
+ */
127
167
  set followPosition(value) {
128
168
  this._followPosition = value;
129
169
  this.followPosition$.next(value);
@@ -149,6 +189,7 @@ export class MapGeolocationController extends MapController {
149
189
  }
150
190
  deleteGeolocationFeatures() {
151
191
  this.deleteFeatureByType(GeolocationOverlayType.Position);
192
+ this.deleteFeatureByType(GeolocationOverlayType.PositionDirection);
152
193
  this.deleteFeatureByType(GeolocationOverlayType.Accuracy);
153
194
  this.deleteFeatureByType(GeolocationOverlayType.Buffer);
154
195
  }
@@ -182,6 +223,52 @@ export class MapGeolocationController extends MapController {
182
223
  this.onPositionChange(true, true);
183
224
  }
184
225
  }));
226
+ this.geolocation.on('change', (evt) => {
227
+ this.onPositionChange(false, false);
228
+ });
229
+ }
230
+ updateArrowFeatureOrientation(position) {
231
+ const position4326 = olproj.transform(position.position, position.projection, 'EPSG:4326');
232
+ if (!this.lastPosition) {
233
+ this.lastPosition = { coordinates: position4326, dateTime: new Date() };
234
+ return;
235
+ }
236
+ const arrowFeature = this.getFeatureByType(GeolocationOverlayType.PositionDirection);
237
+ const isMoving = position?.speed > 1.25 && this.distanceBetweenPoints(this.lastPosition.coordinates, position4326) > 0.003;
238
+ if (position.accuracy <= this.accuracyThreshold && isMoving) {
239
+ // Calculate the heading using current position and last recorded
240
+ // because ol heading not returning right value
241
+ var dx = position4326[1] - this.lastPosition.coordinates[1];
242
+ var dy = position4326[0] - this.lastPosition.coordinates[0];
243
+ var theta = Math.atan2(dy, dx);
244
+ if (theta < 0)
245
+ theta = (2 * Math.PI) + theta;
246
+ this.arrowRotation = theta;
247
+ if (arrowFeature) {
248
+ arrowFeature.setStyle(this.arrowStyle);
249
+ }
250
+ this.lastPosition = { coordinates: position4326, dateTime: new Date() };
251
+ }
252
+ else {
253
+ if (arrowFeature && ((new Date()).getTime() - this.lastPosition.dateTime.getTime()) > 3000)
254
+ hideOlFeature(arrowFeature);
255
+ }
256
+ }
257
+ /**
258
+ * @returns distance in km between coord1 and coord2
259
+ */
260
+ distanceBetweenPoints(coord1, coord2) {
261
+ return olSphere.getDistance(coord1, coord2) / 1000;
262
+ }
263
+ addOnChangedListener(event) {
264
+ let listener = () => {
265
+ event(this.geolocation);
266
+ };
267
+ this.geolocation.on("change", listener);
268
+ return listener;
269
+ }
270
+ deleteChangedListener(event) {
271
+ this.geolocation.un("change", event);
185
272
  }
186
273
  updateGeolocationOptions(options) {
187
274
  if (!options) {
@@ -246,7 +333,8 @@ export class MapGeolocationController extends MapController {
246
333
  enableHighAccuracy: geolocateProperties.trackingOptions?.enableHighAccuracy ? true : false,
247
334
  timestamp: new Date()
248
335
  };
249
- this.handleFeatureCreation(position, zoomTo);
336
+ this.handleFeatureCreation(position);
337
+ this.handleViewFromFeatures(position, zoomTo);
250
338
  if (emitEvent) {
251
339
  this.position$.next(position);
252
340
  /*if (this.keepPositionHistory === true) {
@@ -255,54 +343,81 @@ export class MapGeolocationController extends MapController {
255
343
  }*/
256
344
  }
257
345
  }
346
+ getFeatureByType(type) {
347
+ return this.geolocationOverlay.dataSource.ol.getFeatureById(type);
348
+ }
258
349
  deleteFeatureByType(type) {
259
350
  const featureById = this.geolocationOverlay.dataSource.ol.getFeatureById(type);
260
351
  if (featureById) {
261
352
  this.geolocationOverlay.dataSource.ol.removeFeature(featureById);
262
353
  }
263
354
  }
264
- handleFeatureCreation(position, zoomTo = false) {
355
+ handleFeatureCreation(position) {
265
356
  if (!position || !position.position) {
266
357
  return;
267
358
  }
268
- this.deleteGeolocationFeatures();
269
359
  const positionGeometry = new Point(position.position);
270
360
  const accuracyGeometry = fromCircle(new OlCircle(position.position, position.accuracy || 0));
271
- const positionFeature = new olFeature({ geometry: positionGeometry });
272
- const accuracyFeature = new olFeature({ geometry: accuracyGeometry });
273
- if (positionGeometry) {
274
- let motion = this.followPosition ? FeatureMotion.Move : FeatureMotion.None;
275
- if (zoomTo) {
276
- motion = FeatureMotion.Zoom;
277
- }
361
+ let positionFeature = this.getFeatureByType(GeolocationOverlayType.Position);
362
+ let positionFeatureArrow = this.getFeatureByType(GeolocationOverlayType.PositionDirection);
363
+ let accuracyFeature = this.getFeatureByType(GeolocationOverlayType.Accuracy);
364
+ const positionFeatureExists = positionFeature ? true : false;
365
+ const positionFeatureArrowExists = positionFeatureArrow ? true : false;
366
+ const accuracyFeatureExists = accuracyFeature ? true : false;
367
+ if (!positionFeatureArrowExists) {
368
+ positionFeatureArrow = new olFeature({ geometry: positionGeometry });
369
+ positionFeatureArrow.setId(GeolocationOverlayType.PositionDirection);
370
+ hideOlFeature(positionFeatureArrow);
371
+ }
372
+ if (!positionFeatureExists) {
373
+ positionFeature = new olFeature({ geometry: positionGeometry });
278
374
  positionFeature.setId(GeolocationOverlayType.Position);
279
375
  positionFeature.setStyle(this.positionFeatureStyle);
280
- this.geolocationOverlay.addOlFeature(positionFeature, motion);
281
- if (accuracyGeometry) {
282
- accuracyFeature.setId(GeolocationOverlayType.Accuracy);
283
- accuracyFeature.setStyle(this.accuracyFeatureStyle);
284
- this.geolocationOverlay.addOlFeature(accuracyFeature, motion);
285
- }
376
+ }
377
+ if (!accuracyFeatureExists) {
378
+ accuracyFeature = new olFeature({ geometry: accuracyGeometry });
379
+ accuracyFeature.setId(GeolocationOverlayType.Accuracy);
380
+ accuracyFeature.setStyle(this.accuracyFeatureStyle);
381
+ }
382
+ if (positionGeometry) {
383
+ positionFeatureExists ?
384
+ positionFeature.setGeometry(positionGeometry) : this.geolocationOverlay.addOlFeature(positionFeature, FeatureMotion.None);
385
+ positionFeatureArrowExists ?
386
+ positionFeatureArrow.setGeometry(positionGeometry) : this.geolocationOverlay.addOlFeature(positionFeatureArrow, FeatureMotion.None);
387
+ this.updateArrowFeatureOrientation(position);
388
+ accuracyFeatureExists ?
389
+ accuracyFeature.setGeometry(accuracyGeometry) : this.geolocationOverlay.addOlFeature(accuracyFeature, FeatureMotion.None);
286
390
  if (this.buffer) {
287
- const bufferFeature = new olFeature(new OlCircle(position.position, this.buffer.bufferRadius));
288
- const bufferStyle = new olstyle.Style({
289
- stroke: new olstyle.Stroke({ width: 2, color: this.buffer.bufferStroke }),
290
- fill: new olstyle.Fill({ color: this.buffer.bufferFill }),
291
- text: new olstyle.Text({
292
- textAlign: 'left',
293
- offsetX: 10,
294
- offsetY: -10,
295
- font: '12px Calibri,sans-serif',
296
- text: this.buffer.showBufferRadius ? `${this.buffer.bufferRadius}m` : '',
297
- fill: new olstyle.Fill({ color: '#000' }),
298
- stroke: new olstyle.Stroke({ color: '#fff', width: 3 })
299
- })
300
- });
301
- bufferFeature.setId(GeolocationOverlayType.Buffer);
302
- bufferFeature.setStyle(bufferStyle);
303
- this.geolocationOverlay.addOlFeature(bufferFeature, motion);
391
+ let bufferFeature = this.getFeatureByType(GeolocationOverlayType.Buffer);
392
+ const bufferFeatureExists = bufferFeature ? true : false;
393
+ const bufferGeometry = new OlCircle(position.position, this.buffer.bufferRadius);
394
+ if (!bufferFeatureExists) {
395
+ bufferFeature = new olFeature(bufferGeometry);
396
+ bufferFeature.setId(GeolocationOverlayType.Buffer);
397
+ bufferFeature.setStyle(this.positionFeatureStyle);
398
+ }
399
+ bufferFeature.setStyle(this.bufferStyle);
400
+ bufferFeatureExists ?
401
+ bufferFeature.setGeometry(bufferGeometry) : this.geolocationOverlay.addOlFeature(bufferFeature, FeatureMotion.None);
402
+ }
403
+ }
404
+ }
405
+ handleViewFromFeatures(position, zoomTo = false) {
406
+ let positionFeature = this.getFeatureByType(GeolocationOverlayType.Position);
407
+ let positionFeatureArrow = this.getFeatureByType(GeolocationOverlayType.PositionDirection);
408
+ let accuracyFeature = this.getFeatureByType(GeolocationOverlayType.Accuracy);
409
+ let bufferFeature = this.getFeatureByType(GeolocationOverlayType.Buffer);
410
+ const features = [positionFeature, positionFeatureArrow, accuracyFeature, bufferFeature].filter(f => f);
411
+ if (features.length > 0) {
412
+ const featuresExtent = computeOlFeaturesExtent(this.map, features);
413
+ const edgeRatios = position?.speed > 12.5 ? [0.25, 0.25, 0.25, 0.25] : [0.15, 0.1, 0.1, 0.1];
414
+ const areOutOfView = featuresAreOutOfView(this.map, featuresExtent, edgeRatios);
415
+ let motion = this.followPosition && areOutOfView ? FeatureMotion.Move : FeatureMotion.None;
416
+ if (zoomTo) {
417
+ motion = FeatureMotion.Zoom;
304
418
  }
419
+ motion !== FeatureMotion.None ? moveToOlFeatures(this.map, features, motion) : undefined;
305
420
  }
306
421
  }
307
422
  }
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL2NvbnRyb2xsZXJzL2dlb2xvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sYUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUcvRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFXLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTJCM0MsSUFBSyxzQkFJSjtBQUpELFdBQUssc0JBQXNCO0lBQ3pCLCtDQUFxQixDQUFBO0lBQ3JCLCtDQUFxQixDQUFBO0lBQ3JCLDJDQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFKSSxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBSTFCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsYUFBYTtJQXFJekQsWUFDVSxHQUFXLEVBQ1gsT0FBeUMsRUFDekMsY0FBK0IsRUFDL0IsYUFBNkI7UUFDckMsS0FBSyxFQUFFLENBQUM7UUFKQSxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsWUFBTyxHQUFQLE9BQU8s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Q0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN6RCxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNyQixTQUFTLEVBQUUsTUFBTTt3QkFDakIsT0FBTyxFQUFFLEVBQUU7d0JBQ1gsT0FBTyxFQUFFLENBQUMsRUFBRTt3QkFDWixJQUFJLEVBQUUseUJBQXlCO3dCQUMvQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN4RSxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO3dCQUN6QyxNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7cUJBQ3hELENBQUM7aUJBQ0gsQ0FBQyxDQUFDO2dCQUNILGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25ELGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzdEO1NBRUY7SUFFSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2xNYXAgZnJvbSAnb2wvTWFwJztcbmltcG9ydCBvbEdlb2xvY2F0aW9uIGZyb20gJ29sL0dlb2xvY2F0aW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgaW50ZXJ2YWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHsgTWFwQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBQb2ludCwgUG9seWdvbiB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgZnJvbUNpcmNsZSB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XG5pbXBvcnQgT2xDaXJjbGUgZnJvbSAnb2wvZ2VvbS9DaXJjbGUnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vbWFwJztcbmltcG9ydCAqIGFzIG9sc3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uLy4uL292ZXJsYXkvc2hhcmVkL292ZXJsYXknO1xuaW1wb3J0IHsgRmVhdHVyZU1vdGlvbiB9IGZyb20gJy4uLy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuZW51bXMnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UsIENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IE1hcFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vbWFwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5leHBvcnQgaW50ZXJmYWNlIE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlck9wdGlvbnMge1xuICAvLyAgdG9kbyBrZWVwUG9zaXRpb25IaXN0b3J5PzogYm9vbGVhbjtcbiAgcHJvamVjdGlvbjogb2xwcm9qLlByb2plY3Rpb25MaWtlXG4gIGFjY3VyYWN5VGhyZXNob2xkPzogbnVtYmVyO1xuICBmb2xsb3dQb3NpdGlvbj86IGJvb2xlYW47XG4gIGJ1ZmZlcj86IEdlb2xvY2F0aW9uQnVmZmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBNYXBHZW9sb2NhdGlvblN0YXRlIHtcbiAgcG9zaXRpb246IG51bWJlcltdO1xuICBwcm9qZWN0aW9uOiBzdHJpbmc7XG4gIGFjY3VyYWN5OiBudW1iZXI7XG4gIGFsdGl0dWRlOiBudW1iZXI7XG4gIGFsdGl0dWRlQWNjdXJhY3k6IG51bWJlcjtcbiAgaGVhZGluZzogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xuICBlbmFibGVIaWdoQWNjdXJhY3k6IGJvb2xlYW47XG4gIHRpbWVzdGFtcDogRGF0ZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VvbG9jYXRpb25CdWZmZXIge1xuICBidWZmZXJSYWRpdXM/OiBudW1iZXI7XG4gIGJ1ZmZlclN0cm9rZT86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBidWZmZXJGaWxsPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHNob3dCdWZmZXJSYWRpdXM/OiBib29sZWFuO1xufVxuXG5cbmVudW0gR2VvbG9jYXRpb25PdmVybGF5VHlwZSB7XG4gIFBvc2l0aW9uID0gJ3Bvc2l0aW9uJyxcbiAgQWNjdXJhY3kgPSAnYWNjdXJhY3knLFxuICBCdWZmZXI9ICdidWZmZXInXG59XG5cbi8qKlxuICogQ29udHJvbGxlciB0byBoYW5kbGUgbWFwIHZpZXcgaW50ZXJhY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBHZW9sb2NhdGlvbkNvbnRyb2xsZXIgZXh0ZW5kcyBNYXBDb250cm9sbGVyIHtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMkJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBnZW9sb2NhdGlvbk92ZXJsYXk6IE92ZXJsYXk7XG4gIHByaXZhdGUgcG9zaXRpb25GZWF0dXJlU3R5bGU6IG9sc3R5bGUuU3R5bGUgfCBvbHN0eWxlLlN0eWxlW10gPSBuZXcgb2xzdHlsZS5TdHlsZSh7XG4gICAgaW1hZ2U6IG5ldyBvbHN0eWxlLkNpcmNsZSh7XG4gICAgICByYWRpdXM6IDYsXG4gICAgICBmaWxsOiBuZXcgb2xzdHlsZS5GaWxsKHtcbiAgICAgICAgY29sb3I6ICcjMzM5OUNDJyxcbiAgICAgIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgb2xzdHlsZS5TdHJva2Uoe1xuICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICB3aWR0aDogMixcbiAgICAgIH0pLFxuICAgIH0pLFxuICB9KTtcbiAgcHJpdmF0ZSBhY2N1cmFjeUZlYXR1cmVTdHlsZTogb2xzdHlsZS5TdHlsZSB8IG9sc3R5bGUuU3R5bGVbXSA9IG5ldyBvbHN0eWxlLlN0eWxlKHtcbiAgICBzdHJva2U6IG5ldyBvbHN0eWxlLlN0cm9rZSh7XG4gICAgICBjb2xvcjogJ3JnYmEoMTIwLCAxMjAsIDEyMCwgMC40KScsXG4gICAgICB3aWR0aDogMSxcbiAgICB9KSxcbiAgICBmaWxsOiBuZXcgb2xzdHlsZS5GaWxsKHtcbiAgICAgIGNvbG9yOiAncmdiYSgxMjAsIDEyMCwgMTIwLCAwLjQpJyxcbiAgICB9KSxcbiAgfSk7XG5cbiAgcHJpdmF0ZSBnZW9sb2NhdGlvbjogb2xHZW9sb2NhdGlvbjtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCBlbWlzc2lvbiBpbnRlcnZhbCBvZiB0aGUgcG9zaXRpb24uIEluIHNlY29uZHNcbiAgICovXG4gICBwdWJsaWMgcmVhZG9ubHkgZW1pc3Npb25JbnRlcnZhbFNlY29uZHMkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoNSk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcEdlb2xvY2F0aW9uU3RhdGU+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSB0cmFja2luZyBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRyYWNraW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGZvbGxvdyBwb3NpdGlvbiBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZvbGxvd1Bvc2l0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odW5kZWZpbmVkKTtcblxuXG4gIC8qKlxuICAgKiBIaXN0b3J5IG9mIHBvc2l0aW9uc1xuICAgKi9cbiAgLy8gcHJpdmF0ZSBwb3NpdGlvbnM6IE1hcEdlb2xvY2F0aW9uU3RhdGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnZW9sb2NhdGUgY29udHJvbGxlciBzaG91bGQga2VlcCB0aGUgcG9zaXRpb24gaGlzdG9yeVxuICAgKi9cbiAgLypcbiAgLy8gdG9kbzogcmVmaW5lIHRoaXMgbWV0aG9kXG4gIHNldCBrZWVwUG9zaXRpb25IaXN0b3J5KHZhbHVlKSB7XG4gICAgdGhpcy5fa2VlcFBvc2l0aW9uSGlzdG9yeSA9IHZhbHVlO1xuICB9XG4gIGdldCBrZWVwUG9zaXRpb25IaXN0b3J5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9rZWVwUG9zaXRpb25IaXN0b3J5O1xuICB9XG4gIHByaXZhdGUgX2tlZXBQb3NpdGlvbkhpc3Rvcnk6IGJvb2xlYW4gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmtlZXBQb3NpdGlvbkhpc3RvcnkgPyB0aGlzLm9wdGlvbnMua2VlcFBvc2l0aW9uSGlzdG9yeSA6IHRydWU7XG4qL1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VvbG9jYXRlIHNob3VsZCBzaG93IGEgYnVmZmVyIGFyb3VuZCB0aGUgY3VycmVudCBwb3NpdGlvblxuICAgKi9cbiAgIHNldCBidWZmZXIodmFsdWU6IEdlb2xvY2F0aW9uQnVmZmVyKSB7XG4gICAgdGhpcy5fYnVmZmVyID0gdmFsdWU7XG4gICAgdGhpcy5oYW5kbGVGZWF0dXJlQ3JlYXRpb24odGhpcy5wb3NpdGlvbiQudmFsdWUpO1xuICB9XG4gICBnZXQgYnVmZmVyKCk6IEdlb2xvY2F0aW9uQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuICB9XG4gIHByaXZhdGUgX2J1ZmZlcjogR2VvbG9jYXRpb25CdWZmZXIgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmJ1ZmZlciA/IHRoaXMub3B0aW9ucy5idWZmZXIgOiB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdlb2xvY2F0ZSBjb250cm9sbGVyIGFjY3VyYWN5IHRocmVzaG9sZCB0byBzdG9yZS9zaG93IHRoZSBwb3NpdGlvbi5cbiAgICovXG4gIHNldCBhY2N1cmFjeVRocmVzaG9sZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fYWNjdXJhY3lUaHJlc2hvbGQgPSB2YWx1ZTtcbiAgICB0aGlzLmhhbmRsZUZlYXR1cmVDcmVhdGlvbih0aGlzLnBvc2l0aW9uJC52YWx1ZSk7XG4gIH1cblxuICBnZXQgYWNjdXJhY3lUaHJlc2hvbGQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWNjdXJhY3lUaHJlc2hvbGQ7XG4gIH1cbiAgcHJpdmF0ZSBfYWNjdXJhY3lUaHJlc2hvbGQgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmFjY3VyYWN5VGhyZXNob2xkID8gdGhpcy5vcHRpb25zLmFjY3VyYWN5VGhyZXNob2xkIDogNTAwMDtcblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmF0ZSB0aGUgZ2VvbG9jYXRpb24uXG4gICAqL1xuICBnZXQgdHJhY2tpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2VvbG9jYXRpb24uZ2V0VHJhY2tpbmcoKTtcbiAgfVxuXG4gIHNldCB0cmFja2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZ2VvbG9jYXRpb24uc2V0VHJhY2tpbmcodmFsdWUgfHwgZmFsc2UpO1xuICAgIHRoaXMudHJhY2tpbmckLm5leHQodmFsdWUpO1xuICAgIGlmICh0aGlzLnN0b3JhZ2VTZXJ2aWNlICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdnZW9sb2NhdGlvbi50cmFja2luZycsIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5wb3NpdGlvbiQubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gICAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFjdGl2YXRlIHRoZSB2aWV3IHRyYWNraW5nIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uXG4gICAqL1xuICBzZXQgZm9sbG93UG9zaXRpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9mb2xsb3dQb3NpdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuZm9sbG93UG9zaXRpb24kLm5leHQodmFsdWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2U/LmdldENvbmZpZygnZ2VvbG9jYXRlLmZvbGxvd1Bvc2l0aW9uJykgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9mb2xsb3dQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5mb2xsb3dQb3NpdGlvbiQubmV4dChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRmVhdHVyZUNyZWF0aW9uKHRoaXMucG9zaXRpb24kLnZhbHVlKTtcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnZ2VvbG9jYXRpb24uZm9sbG93UG9zaXRpb24nLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZvbGxvd1Bvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9mb2xsb3dQb3NpdGlvbjtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBfZm9sbG93UG9zaXRpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmZvbGxvd1Bvc2l0aW9uID8gdGhpcy5vcHRpb25zLmZvbGxvd1Bvc2l0aW9uIDogZmFsc2U7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1hcDogSWdvTWFwLFxuICAgIHByaXZhdGUgb3B0aW9ucz86IE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlck9wdGlvbnMsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZT86IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZT86IENvbmZpZ1NlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5ID0gbmV3IE92ZXJsYXkodGhpcy5tYXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvciByZW1vdmUgdGhpcyBjb250cm9sbGVyIHRvL2Zyb20gYSBtYXAuXG4gICAqIEBwYXJhbSBtYXAgT0wgTWFwXG4gICAqL1xuICBzZXRPbE1hcChvbE1hcDogT2xNYXAgfCB1bmRlZmluZWQpIHtcbiAgICBzdXBlci5zZXRPbE1hcChvbE1hcCk7XG4gICAgdGhpcy5zZXR1cE9ic2VydmVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVHZW9sb2NhdGlvbkZlYXR1cmVzKCkge1xuICAgIHRoaXMuZGVsZXRlRmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLlBvc2l0aW9uKTtcbiAgICB0aGlzLmRlbGV0ZUZlYXR1cmVCeVR5cGUoR2VvbG9jYXRpb25PdmVybGF5VHlwZS5BY2N1cmFjeSk7XG4gICAgdGhpcy5kZWxldGVGZWF0dXJlQnlUeXBlKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuQnVmZmVyKTtcbiAgfVxuXG4gIHNldHVwT2JzZXJ2ZXJzKCkge1xuICAgIHRoaXMudHJhY2tpbmckLnN1YnNjcmliZSh0cmFja2luZyA9PiB7XG4gICAgICBpZiAodHJhY2tpbmcpIHtcbiAgICAgICAgdGhpcy5vblBvc2l0aW9uQ2hhbmdlKHRydWUsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWxldGVHZW9sb2NhdGlvbkZlYXR1cmVzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmdlb2xvY2F0aW9uID0gbmV3IG9sR2VvbG9jYXRpb24oe1xuICAgICAgLy8gZW5hYmxlSGlnaEFjY3VyYWN5IG11c3QgYmUgc2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgaGVhZGluZyB2YWx1ZS5cbiAgICAgIHRyYWNraW5nT3B0aW9uczoge1xuICAgICAgICBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWUsXG4gICAgICAgIG1heGltdW1BZ2U6IDEwMDAwLFxuICAgICAgICB0aW1lb3V0OiA2MDAwMDBcbiAgICAgIH0sXG4gICAgICBwcm9qZWN0aW9uOiB0aGlzLm9wdGlvbnMucHJvamVjdGlvbixcbiAgICB9KTtcbiAgICBsZXQgdHJhY2tpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKHRoaXMuZW1pc3Npb25JbnRlcnZhbFNlY29uZHMkXG4gICAgICAucGlwZShzd2l0Y2hNYXAodmFsdWUgPT4gaW50ZXJ2YWwodmFsdWUgKiAxMDAwKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRyYWNraW5nID09PSB0aGlzLnRyYWNraW5nKSB7XG4gICAgICAgICAgdGhpcy5vblBvc2l0aW9uQ2hhbmdlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYWNraW5nID0gdGhpcy50cmFja2luZztcbiAgICAgICAgICB0aGlzLm9uUG9zaXRpb25DaGFuZ2UodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVHZW9sb2NhdGlvbk9wdGlvbnMob3B0aW9uczogTWFwVmlld09wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHsgcmV0dXJuO31cbiAgICAvLyB0b2RvIG1heWJlIGEgZGVkaWNhdGVkIGludGVyZmFjZSBmb3IgZ2VvbG9jYXRpb24gc2hvdWxkIGJlIGRlZmluZWQgaW5zdGVhZCBvZiBwdXR0aW5nIHRoZXNlIGluc2lkZSB0aGUgbWFwdmlld29wdGlvbnM/XG4gICAgbGV0IHRyYWNraW5nID0gb3B0aW9ucy5nZW9sb2NhdGU7XG4gICAgbGV0IGZvbGxvd1Bvc2l0aW9uID0gb3B0aW9ucy5hbHdheXNUcmFja2luZztcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZSkge1xuICAgICAgY29uc3Qgc3RvcmVkVHJhY2tpbmcgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnZ2VvbG9jYXRpb24udHJhY2tpbmcnKSBhcyBib29sZWFuO1xuICAgICAgaWYgKHN0b3JlZFRyYWNraW5nICE9PSBudWxsICYmIHN0b3JlZFRyYWNraW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJhY2tpbmcgPSBzdG9yZWRUcmFja2luZztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcmVkRm9sbG93UG9zaXRpb24gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnZ2VvbG9jYXRpb24uZm9sbG93UG9zaXRpb24nKSBhcyBib29sZWFuO1xuICAgICAgaWYgKHN0b3JlZEZvbGxvd1Bvc2l0aW9uICE9PSBudWxsICYmIHN0b3JlZEZvbGxvd1Bvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9sbG93UG9zaXRpb24gPSBzdG9yZWRGb2xsb3dQb3NpdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50cmFja2luZyA9IHRyYWNraW5nO1xuICAgIHRoaXMuZm9sbG93UG9zaXRpb24gPSBmb2xsb3dQb3NpdGlvbjtcbiAgICB0aGlzLmJ1ZmZlciA9IG9wdGlvbnMuYnVmZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlYXJkb3duIGFueSBvYnNlcnZlcnNcbiAgICovXG4gIHRlYXJkb3duT2JzZXJ2ZXJzKCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMkJC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLm1hcChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuICAgIHN1cGVyLnRlYXJkb3duT2JzZXJ2ZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHBvc2l0aW9uICBoaXN0b3J5XG4gICAqL1xuICAvKlxuICAvLyB0b2RvXG4gIGNsZWFyUG9zaXRpb25zSGlzdG9yeSgpIHtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdO1xuICB9Ki9cblxuICAvKipcbiAgICogT24gcG9zaXRpb24gY2hhbmdlLCBnZXQgdGhlIHBvc2l0aW9uLCBzaG93IGl0IG9uIHRoZSBtYXAgYW5kIHJlY29yZCBpdC5cbiAgICogQHBhcmFtIGVtaXRFdmVudCBNYXAgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25Qb3NpdGlvbkNoYW5nZShlbWl0RXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSwgem9vbVRvOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMudHJhY2tpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZ2VvbG9jYXRlUHJvcGVydGllcyA9IHRoaXMuZ2VvbG9jYXRpb24uZ2V0UHJvcGVydGllcygpO1xuXG4gICAgaWYgKGdlb2xvY2F0ZVByb3BlcnRpZXMuYWNjdXJhY3kgPiB0aGlzLmFjY3VyYWN5VGhyZXNob2xkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvb3IgZ2VvbG9jYXRpb24gYWNjdXJhY3kuIE5vIHBvc2l0aW9uIGFyZSBzdG9yZWQvc2hvd24nKTtcbiAgICAgIHRoaXMucG9zaXRpb24kLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbjogTWFwR2VvbG9jYXRpb25TdGF0ZSA9IHtcbiAgICAgIHBvc2l0aW9uOiBnZW9sb2NhdGVQcm9wZXJ0aWVzLnBvc2l0aW9uLFxuICAgICAgcHJvamVjdGlvbjogdGhpcy5nZW9sb2NhdGlvbi5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpLFxuICAgICAgYWNjdXJhY3k6IGdlb2xvY2F0ZVByb3BlcnRpZXMuYWNjdXJhY3ksXG4gICAgICBhbHRpdHVkZTogZ2VvbG9jYXRlUHJvcGVydGllcy5hbHRpdHVkZSxcbiAgICAgIGFsdGl0dWRlQWNjdXJhY3k6IGdlb2xvY2F0ZVByb3BlcnRpZXMuYWx0aXR1ZGVBY2N1cmFjeSxcbiAgICAgIGhlYWRpbmc6IGdlb2xvY2F0ZVByb3BlcnRpZXMuaGVhZGluZyxcbiAgICAgIHNwZWVkOiBnZW9sb2NhdGVQcm9wZXJ0aWVzLnNwZWVkLFxuICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiBnZW9sb2NhdGVQcm9wZXJ0aWVzLnRyYWNraW5nT3B0aW9ucz8uZW5hYmxlSGlnaEFjY3VyYWN5ID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZlYXR1cmVDcmVhdGlvbihwb3NpdGlvbiwgem9vbVRvKTtcbiAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLnBvc2l0aW9uJC5uZXh0KHBvc2l0aW9uKTtcbiAgICAgIC8qaWYgKHRoaXMua2VlcFBvc2l0aW9uSGlzdG9yeSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBoYW5kbGUgcG9zaXRpb24gZGlmZiB0byBzdG9yZSBvbmx5IHRydWUgZGlmZjtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMucHVzaChwb3NpdGlvbik7XG4gICAgICB9Ki9cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUZlYXR1cmVCeVR5cGUodHlwZTogR2VvbG9jYXRpb25PdmVybGF5VHlwZSkge1xuICAgIGNvbnN0IGZlYXR1cmVCeUlkID0gdGhpcy5nZW9sb2NhdGlvbk92ZXJsYXkuZGF0YVNvdXJjZS5vbC5nZXRGZWF0dXJlQnlJZCh0eXBlKTtcbiAgICBpZiAoZmVhdHVyZUJ5SWQpIHtcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmRhdGFTb3VyY2Uub2wucmVtb3ZlRmVhdHVyZShmZWF0dXJlQnlJZCk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZlYXR1cmVDcmVhdGlvbihwb3NpdGlvbjogTWFwR2VvbG9jYXRpb25TdGF0ZSwgem9vbVRvOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIXBvc2l0aW9uIHx8ICFwb3NpdGlvbi5wb3NpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRlbGV0ZUdlb2xvY2F0aW9uRmVhdHVyZXMoKTtcbiAgICBjb25zdCBwb3NpdGlvbkdlb21ldHJ5ID0gbmV3IFBvaW50KHBvc2l0aW9uLnBvc2l0aW9uKTtcbiAgICBjb25zdCBhY2N1cmFjeUdlb21ldHJ5ID0gZnJvbUNpcmNsZShuZXcgT2xDaXJjbGUocG9zaXRpb24ucG9zaXRpb24sIHBvc2l0aW9uLmFjY3VyYWN5IHx8IDApKTtcblxuICAgIGNvbnN0IHBvc2l0aW9uRmVhdHVyZSA9IG5ldyBvbEZlYXR1cmU8UG9pbnQ+KHsgZ2VvbWV0cnk6IHBvc2l0aW9uR2VvbWV0cnkgfSk7XG4gICAgY29uc3QgYWNjdXJhY3lGZWF0dXJlID0gbmV3IG9sRmVhdHVyZTxQb2x5Z29uPih7IGdlb21ldHJ5OiBhY2N1cmFjeUdlb21ldHJ5IH0pO1xuXG4gICAgaWYgKHBvc2l0aW9uR2VvbWV0cnkpIHtcbiAgICAgIGxldCBtb3Rpb24gPSB0aGlzLmZvbGxvd1Bvc2l0aW9uID8gRmVhdHVyZU1vdGlvbi5Nb3ZlIDogRmVhdHVyZU1vdGlvbi5Ob25lO1xuICAgICAgaWYgKHpvb21Ubykge1xuICAgICAgICBtb3Rpb24gPSBGZWF0dXJlTW90aW9uLlpvb207XG4gICAgICB9XG4gICAgICBwb3NpdGlvbkZlYXR1cmUuc2V0SWQoR2VvbG9jYXRpb25PdmVybGF5VHlwZS5Qb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbkZlYXR1cmUuc2V0U3R5bGUodGhpcy5wb3NpdGlvbkZlYXR1cmVTdHlsZSk7XG4gICAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5hZGRPbEZlYXR1cmUocG9zaXRpb25GZWF0dXJlLCBtb3Rpb24pO1xuICAgICAgaWYgKGFjY3VyYWN5R2VvbWV0cnkpIHtcbiAgICAgICAgYWNjdXJhY3lGZWF0dXJlLnNldElkKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuQWNjdXJhY3kpO1xuICAgICAgICBhY2N1cmFjeUZlYXR1cmUuc2V0U3R5bGUodGhpcy5hY2N1cmFjeUZlYXR1cmVTdHlsZSk7XG4gICAgICAgIHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmFkZE9sRmVhdHVyZShhY2N1cmFjeUZlYXR1cmUsIG1vdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmZmVyRmVhdHVyZSA9IG5ldyBvbEZlYXR1cmUobmV3IE9sQ2lyY2xlKHBvc2l0aW9uLnBvc2l0aW9uLCB0aGlzLmJ1ZmZlci5idWZmZXJSYWRpdXMpKTtcbiAgICAgICAgY29uc3QgYnVmZmVyU3R5bGUgPSBuZXcgb2xzdHlsZS5TdHlsZSh7XG4gICAgICAgICAgc3Ryb2tlOiBuZXcgb2xzdHlsZS5TdHJva2UoeyB3aWR0aDogMiwgY29sb3I6IHRoaXMuYnVmZmVyLmJ1ZmZlclN0cm9rZSB9KSxcbiAgICAgICAgICBmaWxsOiBuZXcgb2xzdHlsZS5GaWxsKHsgY29sb3I6IHRoaXMuYnVmZmVyLmJ1ZmZlckZpbGwgfSksXG4gICAgICAgICAgdGV4dDogbmV3IG9sc3R5bGUuVGV4dCh7XG4gICAgICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgICAgIG9mZnNldFg6IDEwLFxuICAgICAgICAgICAgb2Zmc2V0WTogLTEwLFxuICAgICAgICAgICAgZm9udDogJzEycHggQ2FsaWJyaSxzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuYnVmZmVyLnNob3dCdWZmZXJSYWRpdXMgPyBgJHt0aGlzLmJ1ZmZlci5idWZmZXJSYWRpdXN9bWAgOiAnJyxcbiAgICAgICAgICAgIGZpbGw6IG5ldyBvbHN0eWxlLkZpbGwoeyBjb2xvcjogJyMwMDAnIH0pLFxuICAgICAgICAgICAgc3Ryb2tlOiBuZXcgb2xzdHlsZS5TdHJva2UoeyBjb2xvcjogJyNmZmYnLCB3aWR0aDogMyB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgICBidWZmZXJGZWF0dXJlLnNldElkKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuQnVmZmVyKTtcbiAgICAgICAgYnVmZmVyRmVhdHVyZS5zZXRTdHlsZShidWZmZXJTdHlsZSk7XG4gICAgICAgIHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmFkZE9sRmVhdHVyZShidWZmZXJGZWF0dXJlLCBtb3Rpb24pO1xuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cbn1cbiJdfQ==
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL2NvbnRyb2xsZXJzL2dlb2xvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sYUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFXLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUEyQnZJLElBQUssc0JBS0o7QUFMRCxXQUFLLHNCQUFzQjtJQUN6QiwrQ0FBcUIsQ0FBQTtJQUNyQixpRUFBdUMsQ0FBQTtJQUN2QywrQ0FBcUIsQ0FBQTtJQUNyQiwyQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTEksc0JBQXNCLEtBQXRCLHNCQUFz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QUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztZQUMzRixJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQzthQUM3QjtZQUNELE1BQU0sS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQzFGO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9sTWFwIGZyb20gJ29sL01hcCc7XHJcbmltcG9ydCBvbEdlb2xvY2F0aW9uIGZyb20gJ29sL0dlb2xvY2F0aW9uJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcclxuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xyXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xyXG5pbXBvcnQgeyBNYXBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcclxuaW1wb3J0IHsgUG9pbnQsIFBvbHlnb24gfSBmcm9tICdvbC9nZW9tJztcclxuaW1wb3J0IHsgZnJvbUNpcmNsZSB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XHJcbmltcG9ydCAqIGFzIG9sU3BoZXJlIGZyb20gJ29sL3NwaGVyZSc7XHJcbmltcG9ydCBPbENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uL21hcCc7XHJcbmltcG9ydCAqIGFzIG9sc3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xyXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vLi4vLi4vb3ZlcmxheS9zaGFyZWQvb3ZlcmxheSc7XHJcbmltcG9ydCB7IEZlYXR1cmVNb3Rpb24gfSBmcm9tICcuLi8uLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UsIENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHsgTWFwVmlld09wdGlvbnMgfSBmcm9tICcuLi9tYXAuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBjb21wdXRlT2xGZWF0dXJlc0V4dGVudCwgZmVhdHVyZXNBcmVPdXRPZlZpZXcsIGhpZGVPbEZlYXR1cmUsIG1vdmVUb09sRmVhdHVyZXMgfSBmcm9tICcuLi8uLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLnV0aWxzJztcclxuZXhwb3J0IGludGVyZmFjZSBNYXBHZW9sb2NhdGlvbkNvbnRyb2xsZXJPcHRpb25zIHtcclxuICAvLyAgdG9kbyBrZWVwUG9zaXRpb25IaXN0b3J5PzogYm9vbGVhbjtcclxuICBwcm9qZWN0aW9uOiBvbHByb2ouUHJvamVjdGlvbkxpa2VcclxuICBhY2N1cmFjeVRocmVzaG9sZD86IG51bWJlcjtcclxuICBmb2xsb3dQb3NpdGlvbj86IGJvb2xlYW47XHJcbiAgYnVmZmVyPzogR2VvbG9jYXRpb25CdWZmZXI7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBNYXBHZW9sb2NhdGlvblN0YXRlIHtcclxuICBwb3NpdGlvbjogbnVtYmVyW107XHJcbiAgcHJvamVjdGlvbjogc3RyaW5nO1xyXG4gIGFjY3VyYWN5OiBudW1iZXI7XHJcbiAgYWx0aXR1ZGU6IG51bWJlcjtcclxuICBhbHRpdHVkZUFjY3VyYWN5OiBudW1iZXI7XHJcbiAgaGVhZGluZzogbnVtYmVyO1xyXG4gIHNwZWVkOiBudW1iZXI7XHJcbiAgZW5hYmxlSGlnaEFjY3VyYWN5OiBib29sZWFuO1xyXG4gIHRpbWVzdGFtcDogRGF0ZTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEdlb2xvY2F0aW9uQnVmZmVyIHtcclxuICBidWZmZXJSYWRpdXM/OiBudW1iZXI7XHJcbiAgYnVmZmVyU3Ryb2tlPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XHJcbiAgYnVmZmVyRmlsbD86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xyXG4gIHNob3dCdWZmZXJSYWRpdXM/OiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuZW51bSBHZW9sb2NhdGlvbk92ZXJsYXlUeXBlIHtcclxuICBQb3NpdGlvbiA9ICdwb3NpdGlvbicsXHJcbiAgUG9zaXRpb25EaXJlY3Rpb24gPSAncG9zaXRpb25EaXJlY3Rpb24nLFxyXG4gIEFjY3VyYWN5ID0gJ2FjY3VyYWN5JyxcclxuICBCdWZmZXIgPSAnYnVmZmVyJ1xyXG59XHJcblxyXG4vKipcclxuICogQ29udHJvbGxlciB0byBoYW5kbGUgbWFwIHZpZXcgaW50ZXJhY3Rpb25zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWFwR2VvbG9jYXRpb25Db250cm9sbGVyIGV4dGVuZHMgTWFwQ29udHJvbGxlciB7XHJcblxyXG4gIHByaXZhdGUgYXJyb3dSb3RhdGlvbjogbnVtYmVyO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyQkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgZ2VvbG9jYXRpb25PdmVybGF5OiBPdmVybGF5O1xyXG4gIHByaXZhdGUgcG9zaXRpb25GZWF0dXJlU3R5bGU6IG9sc3R5bGUuU3R5bGUgfCBvbHN0eWxlLlN0eWxlW10gPSBuZXcgb2xzdHlsZS5TdHlsZSh7XHJcbiAgICBpbWFnZTogbmV3IG9sc3R5bGUuQ2lyY2xlKHtcclxuICAgICAgcmFkaXVzOiA2LFxyXG4gICAgICBmaWxsOiBuZXcgb2xzdHlsZS5GaWxsKHtcclxuICAgICAgICBjb2xvcjogJyMzMzk5Q0MnLFxyXG4gICAgICB9KSxcclxuICAgICAgc3Ryb2tlOiBuZXcgb2xzdHlsZS5TdHJva2Uoe1xyXG4gICAgICAgIGNvbG9yOiAnI2ZmZicsXHJcbiAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgIH0pLFxyXG4gICAgfSksXHJcbiAgfSk7XHJcbiAgcHJpdmF0ZSBhY2N1cmFjeUZlYXR1cmVTdHlsZTogb2xzdHlsZS5TdHlsZSB8IG9sc3R5bGUuU3R5bGVbXSA9IG5ldyBvbHN0eWxlLlN0eWxlKHtcclxuICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHtcclxuICAgICAgY29sb3I6ICdyZ2JhKDEyMCwgMTIwLCAxMjAsIDAuNCknLFxyXG4gICAgICB3aWR0aDogMSxcclxuICAgIH0pLFxyXG4gICAgZmlsbDogbmV3IG9sc3R5bGUuRmlsbCh7XHJcbiAgICAgIGNvbG9yOiAncmdiYSgxMjAsIDEyMCwgMTIwLCAwLjQpJyxcclxuICAgIH0pLFxyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIGdldCBidWZmZXJTdHlsZSgpOiBvbHN0eWxlLlN0eWxlIHtcclxuICAgIHJldHVybiBuZXcgb2xzdHlsZS5TdHlsZSh7XHJcbiAgICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHsgd2lkdGg6IDIsIGNvbG9yOiB0aGlzLmJ1ZmZlci5idWZmZXJTdHJva2UgfSksXHJcbiAgICAgIGZpbGw6IG5ldyBvbHN0eWxlLkZpbGwoeyBjb2xvcjogdGhpcy5idWZmZXIuYnVmZmVyRmlsbCB9KSxcclxuICAgICAgdGV4dDogbmV3IG9sc3R5bGUuVGV4dCh7XHJcbiAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXHJcbiAgICAgICAgb2Zmc2V0WDogMTAsXHJcbiAgICAgICAgb2Zmc2V0WTogLTEwLFxyXG4gICAgICAgIGZvbnQ6ICcxMnB4IENhbGlicmksc2Fucy1zZXJpZicsXHJcbiAgICAgICAgdGV4dDogdGhpcy5idWZmZXIuc2hvd0J1ZmZlclJhZGl1cyA/IGAke3RoaXMuYnVmZmVyLmJ1ZmZlclJhZGl1c31tYCA6ICcnLFxyXG4gICAgICAgIGZpbGw6IG5ldyBvbHN0eWxlLkZpbGwoeyBjb2xvcjogJyMwMDAnIH0pLFxyXG4gICAgICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHsgY29sb3I6ICcjZmZmJywgd2lkdGg6IDMgfSlcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgYXJyb3dTdHlsZSgpOiBvbHN0eWxlLlN0eWxlIHtcclxuICAgIHJldHVybiBuZXcgb2xzdHlsZS5TdHlsZSh7XHJcbiAgICAgIGltYWdlOiBuZXcgb2xzdHlsZS5SZWd1bGFyU2hhcGUoe1xyXG4gICAgICAgIHJhZGl1czogNS41LFxyXG4gICAgICAgIGZpbGw6IG5ldyBvbHN0eWxlLkZpbGwoe1xyXG4gICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDEzMiwgMjAyKSdcclxuICAgICAgICB9KSxcclxuICAgICAgICBzdHJva2U6IG5ldyBvbHN0eWxlLlN0cm9rZSh7XHJcbiAgICAgICAgICBjb2xvcjogJyNmZmYnLFxyXG4gICAgICAgICAgd2lkdGg6IDEuNSxcclxuICAgICAgICB9KSxcclxuICAgICAgICBwb2ludHM6IDMsXHJcbiAgICAgICAgZGlzcGxhY2VtZW50OiBbMCwgOV0sXHJcbiAgICAgICAgcm90YXRpb246IHRoaXMuYXJyb3dSb3RhdGlvbixcclxuICAgICAgICByb3RhdGVXaXRoVmlldzogdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlb2xvY2F0aW9uOiBvbEdlb2xvY2F0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBjdXJyZW50IGVtaXNzaW9uIGludGVydmFsIG9mIHRoZSBwb3NpdGlvbi4gSW4gc2Vjb25kc1xyXG4gICAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBlbWlzc2lvbkludGVydmFsU2Vjb25kcyQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCg1KTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBwb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcEdlb2xvY2F0aW9uU3RhdGU+KHVuZGVmaW5lZCk7XHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgdHJhY2tpbmcgc3RhdGVcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgdHJhY2tpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGZvbGxvdyBwb3NpdGlvbiBzdGF0ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBmb2xsb3dQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHVuZGVmaW5lZCk7XHJcblxyXG4gIHByaXZhdGUgbGFzdFBvc2l0aW9uOiB7Y29vcmRpbmF0ZXM6IG51bWJlcltdLCBkYXRlVGltZTogRGF0ZX07XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpc3Rvcnkgb2YgcG9zaXRpb25zXHJcbiAgICovXHJcbiAgLy8gcHJpdmF0ZSBwb3NpdGlvbnM6IE1hcEdlb2xvY2F0aW9uU3RhdGVbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBnZW9sb2NhdGUgY29udHJvbGxlciBzaG91bGQga2VlcCB0aGUgcG9zaXRpb24gaGlzdG9yeVxyXG4gICAqL1xyXG4gIC8qXHJcbiAgLy8gdG9kbzogcmVmaW5lIHRoaXMgbWV0aG9kXHJcbiAgc2V0IGtlZXBQb3NpdGlvbkhpc3RvcnkodmFsdWUpIHtcclxuICAgIHRoaXMuX2tlZXBQb3NpdGlvbkhpc3RvcnkgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGtlZXBQb3NpdGlvbkhpc3RvcnkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fa2VlcFBvc2l0aW9uSGlzdG9yeTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfa2VlcFBvc2l0aW9uSGlzdG9yeTogYm9vbGVhbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMua2VlcFBvc2l0aW9uSGlzdG9yeSA/IHRoaXMub3B0aW9ucy5rZWVwUG9zaXRpb25IaXN0b3J5IDogdHJ1ZTtcclxuKi9cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBnZW9sb2NhdGUgc2hvdWxkIHNob3cgYSBidWZmZXIgYXJvdW5kIHRoZSBjdXJyZW50IHBvc2l0aW9uXHJcbiAgICovXHJcbiAgc2V0IGJ1ZmZlcih2YWx1ZTogR2VvbG9jYXRpb25CdWZmZXIpIHtcclxuICAgIHRoaXMuX2J1ZmZlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5oYW5kbGVGZWF0dXJlQ3JlYXRpb24odGhpcy5wb3NpdGlvbiQudmFsdWUpO1xyXG4gIH1cclxuICBnZXQgYnVmZmVyKCk6IEdlb2xvY2F0aW9uQnVmZmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9idWZmZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2J1ZmZlcjogR2VvbG9jYXRpb25CdWZmZXIgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmJ1ZmZlciA/IHRoaXMub3B0aW9ucy5idWZmZXIgOiB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGdlb2xvY2F0ZSBjb250cm9sbGVyIGFjY3VyYWN5IHRocmVzaG9sZCB0byBzdG9yZS9zaG93IHRoZSBwb3NpdGlvbi5cclxuICAgKi9cclxuICBzZXQgYWNjdXJhY3lUaHJlc2hvbGQodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fYWNjdXJhY3lUaHJlc2hvbGQgPSB2YWx1ZTtcclxuICAgIHRoaXMuaGFuZGxlRmVhdHVyZUNyZWF0aW9uKHRoaXMucG9zaXRpb24kLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldCBhY2N1cmFjeVRocmVzaG9sZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjY3VyYWN5VGhyZXNob2xkO1xyXG4gIH1cclxuICBwcml2YXRlIF9hY2N1cmFjeVRocmVzaG9sZCA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuYWNjdXJhY3lUaHJlc2hvbGQgPyB0aGlzLm9wdGlvbnMuYWNjdXJhY3lUaHJlc2hvbGQgOiA1MDAwO1xyXG5cclxuXHJcbiAgZ2V0IG9sR2VvbG9jYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZW9sb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGFjdGl2YXRlIHRoZSBnZW9sb2NhdGlvbi5cclxuICAgKi9cclxuICBnZXQgdHJhY2tpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZW9sb2NhdGlvbi5nZXRUcmFja2luZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYWNraW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmdlb2xvY2F0aW9uLnNldFRyYWNraW5nKHZhbHVlIHx8IGZhbHNlKTtcclxuICAgIHRoaXMudHJhY2tpbmckLm5leHQodmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnZ2VvbG9jYXRpb24udHJhY2tpbmcnLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHRoaXMucG9zaXRpb24kLm5leHQodW5kZWZpbmVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGFjdGl2YXRlIHRoZSB2aWV3IHRyYWNraW5nIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uXHJcbiAgICovXHJcbiAgc2V0IGZvbGxvd1Bvc2l0aW9uKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9mb2xsb3dQb3NpdGlvbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5mb2xsb3dQb3NpdGlvbiQubmV4dCh2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlPy5nZXRDb25maWcoJ2dlb2xvY2F0ZS5mb2xsb3dQb3NpdGlvbicpID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLl9mb2xsb3dQb3NpdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZvbGxvd1Bvc2l0aW9uJC5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuaGFuZGxlRmVhdHVyZUNyZWF0aW9uKHRoaXMucG9zaXRpb24kLnZhbHVlKTtcclxuICAgIGlmICh0aGlzLnN0b3JhZ2VTZXJ2aWNlICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2dlb2xvY2F0aW9uLmZvbGxvd1Bvc2l0aW9uJywgdmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGZvbGxvd1Bvc2l0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZvbGxvd1Bvc2l0aW9uO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX2ZvbGxvd1Bvc2l0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5mb2xsb3dQb3NpdGlvbiA/IHRoaXMub3B0aW9ucy5mb2xsb3dQb3NpdGlvbiA6IGZhbHNlO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG1hcDogSWdvTWFwLFxyXG4gICAgcHJpdmF0ZSBvcHRpb25zPzogTWFwR2VvbG9jYXRpb25Db250cm9sbGVyT3B0aW9ucyxcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U/OiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZT86IENvbmZpZ1NlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheSA9IG5ldyBPdmVybGF5KHRoaXMubWFwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBvciByZW1vdmUgdGhpcyBjb250cm9sbGVyIHRvL2Zyb20gYSBtYXAuXHJcbiAgICogQHBhcmFtIG1hcCBPTCBNYXBcclxuICAgKi9cclxuICBzZXRPbE1hcChvbE1hcDogT2xNYXAgfCB1bmRlZmluZWQpIHtcclxuICAgIHN1cGVyLnNldE9sTWFwKG9sTWFwKTtcclxuICAgIHRoaXMuc2V0dXBPYnNlcnZlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVsZXRlR2VvbG9jYXRpb25GZWF0dXJlcygpIHtcclxuICAgIHRoaXMuZGVsZXRlRmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLlBvc2l0aW9uKTtcclxuICAgIHRoaXMuZGVsZXRlRmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLlBvc2l0aW9uRGlyZWN0aW9uKTtcclxuICAgIHRoaXMuZGVsZXRlRmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkFjY3VyYWN5KTtcclxuICAgIHRoaXMuZGVsZXRlRmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkJ1ZmZlcik7XHJcbiAgfVxyXG5cclxuICBzZXR1cE9ic2VydmVycygpIHtcclxuICAgIHRoaXMudHJhY2tpbmckLnN1YnNjcmliZSh0cmFja2luZyA9PiB7XHJcbiAgICAgIGlmICh0cmFja2luZykge1xyXG4gICAgICAgIHRoaXMub25Qb3NpdGlvbkNoYW5nZSh0cnVlLCB0cnVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRlbGV0ZUdlb2xvY2F0aW9uRmVhdHVyZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZW9sb2NhdGlvbiA9IG5ldyBvbEdlb2xvY2F0aW9uKHtcclxuICAgICAgLy8gZW5hYmxlSGlnaEFjY3VyYWN5IG11c3QgYmUgc2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgaGVhZGluZyB2YWx1ZS5cclxuICAgICAgdHJhY2tpbmdPcHRpb25zOiB7XHJcbiAgICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLFxyXG4gICAgICAgIG1heGltdW1BZ2U6IDEwMDAwLFxyXG4gICAgICAgIHRpbWVvdXQ6IDYwMDAwMFxyXG4gICAgICB9LFxyXG4gICAgICBwcm9qZWN0aW9uOiB0aGlzLm9wdGlvbnMucHJvamVjdGlvbixcclxuICAgIH0pO1xyXG4gICAgbGV0IHRyYWNraW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKHRoaXMuZW1pc3Npb25JbnRlcnZhbFNlY29uZHMkXHJcbiAgICAgIC5waXBlKHN3aXRjaE1hcCh2YWx1ZSA9PiBpbnRlcnZhbCh2YWx1ZSAqIDEwMDApKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRyYWNraW5nID09PSB0aGlzLnRyYWNraW5nKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUG9zaXRpb25DaGFuZ2UodHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRyYWNraW5nID0gdGhpcy50cmFja2luZztcclxuICAgICAgICAgIHRoaXMub25Qb3NpdGlvbkNoYW5nZSh0cnVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmdlb2xvY2F0aW9uLm9uKCdjaGFuZ2UnLCAoZXZ0KSA9PiB7XHJcbiAgICAgIHRoaXMub25Qb3NpdGlvbkNoYW5nZShmYWxzZSwgZmFsc2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBcnJvd0ZlYXR1cmVPcmllbnRhdGlvbihwb3NpdGlvbjogTWFwR2VvbG9jYXRpb25TdGF0ZSkge1xyXG4gICAgY29uc3QgcG9zaXRpb240MzI2ID0gb2xwcm9qLnRyYW5zZm9ybShwb3NpdGlvbi5wb3NpdGlvbiwgcG9zaXRpb24ucHJvamVjdGlvbiwgJ0VQU0c6NDMyNicpO1xyXG4gICAgaWYoIXRoaXMubGFzdFBvc2l0aW9uKSB7XHJcbiAgICAgIHRoaXMubGFzdFBvc2l0aW9uID0ge2Nvb3JkaW5hdGVzOiBwb3NpdGlvbjQzMjYsIGRhdGVUaW1lOiBuZXcgRGF0ZSgpfTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXJyb3dGZWF0dXJlID0gdGhpcy5nZXRGZWF0dXJlQnlUeXBlKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuUG9zaXRpb25EaXJlY3Rpb24pO1xyXG4gICAgY29uc3QgaXNNb3ZpbmcgPSBwb3NpdGlvbj8uc3BlZWQgPiAxLjI1ICYmIHRoaXMuZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKHRoaXMubGFzdFBvc2l0aW9uLmNvb3JkaW5hdGVzLCBwb3NpdGlvbjQzMjYpID4gMC4wMDM7XHJcbiAgICBpZihwb3NpdGlvbi5hY2N1cmFjeSA8PSB0aGlzLmFjY3VyYWN5VGhyZXNob2xkICYmIGlzTW92aW5nKSB7XHJcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgaGVhZGluZyB1c2luZyBjdXJyZW50IHBvc2l0aW9uIGFuZCBsYXN0IHJlY29yZGVkXHJcbiAgICAgIC8vIGJlY2F1c2Ugb2wgaGVhZGluZyBub3QgcmV0dXJuaW5nIHJpZ2h0IHZhbHVlXHJcbiAgICAgIHZhciBkeCA9IHBvc2l0aW9uNDMyNlsxXSAtIHRoaXMubGFzdFBvc2l0aW9uLmNvb3JkaW5hdGVzWzFdO1xyXG4gICAgICB2YXIgZHkgPSBwb3NpdGlvbjQzMjZbMF0gLSB0aGlzLmxhc3RQb3NpdGlvbi5jb29yZGluYXRlc1swXTtcclxuICAgICAgdmFyIHRoZXRhID0gTWF0aC5hdGFuMihkeSwgZHgpO1xyXG4gICAgICBpZiAodGhldGEgPCAwKSB0aGV0YSA9ICgyKk1hdGguUEkpICsgdGhldGE7XHJcbiAgICAgIHRoaXMuYXJyb3dSb3RhdGlvbiA9IHRoZXRhO1xyXG4gICAgICBpZihhcnJvd0ZlYXR1cmUpIHtcclxuICAgICAgICBhcnJvd0ZlYXR1cmUuc2V0U3R5bGUodGhpcy5hcnJvd1N0eWxlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RQb3NpdGlvbiA9IHtjb29yZGluYXRlczogcG9zaXRpb240MzI2LCBkYXRlVGltZTogbmV3IERhdGUoKX07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYoYXJyb3dGZWF0dXJlICYmICgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gdGhpcy5sYXN0UG9zaXRpb24uZGF0ZVRpbWUuZ2V0VGltZSgpKSA+IDMwMDApXHJcbiAgICAgICAgaGlkZU9sRmVhdHVyZShhcnJvd0ZlYXR1cmUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHJldHVybnMgZGlzdGFuY2UgaW4ga20gYmV0d2VlbiBjb29yZDEgYW5kIGNvb3JkMlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGNvb3JkMTogbnVtYmVyW10sIGNvb3JkMjogbnVtYmVyW10pOiBudW1iZXJ7XHJcbiAgICByZXR1cm4gb2xTcGhlcmUuZ2V0RGlzdGFuY2UoY29vcmQxLCBjb29yZDIpIC8gMTAwMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRPbkNoYW5nZWRMaXN0ZW5lcihldmVudDogKGdlbzogb2xHZW9sb2NhdGlvbikgPT4gYW55KSB7XHJcbiAgICBsZXQgbGlzdGVuZXIgPSAoKSA9PiB7XHJcbiAgICAgIGV2ZW50KHRoaXMuZ2VvbG9jYXRpb24pO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZ2VvbG9jYXRpb24ub24oXCJjaGFuZ2VcIiwgbGlzdGVuZXIpO1xyXG4gICAgcmV0dXJuIGxpc3RlbmVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUNoYW5nZWRMaXN0ZW5lcihldmVudDogKCkgPT4gYW55KSB7XHJcbiAgICB0aGlzLmdlb2xvY2F0aW9uLnVuKFwiY2hhbmdlXCIsIGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVHZW9sb2NhdGlvbk9wdGlvbnMob3B0aW9uczogTWFwVmlld09wdGlvbnMpIHtcclxuICAgIGlmICghb3B0aW9ucykgeyByZXR1cm47IH1cclxuICAgIC8vIHRvZG8gbWF5YmUgYSBkZWRpY2F0ZWQgaW50ZXJmYWNlIGZvciBnZW9sb2NhdGlvbiBzaG91bGQgYmUgZGVmaW5lZCBpbnN0ZWFkIG9mIHB1dHRpbmcgdGhlc2UgaW5zaWRlIHRoZSBtYXB2aWV3b3B0aW9ucz9cclxuICAgIGxldCB0cmFja2luZyA9IG9wdGlvbnMuZ2VvbG9jYXRlO1xyXG4gICAgbGV0IGZvbGxvd1Bvc2l0aW9uID0gb3B0aW9ucy5hbHdheXNUcmFja2luZztcclxuICAgIGlmICh0aGlzLnN0b3JhZ2VTZXJ2aWNlKSB7XHJcbiAgICAgIGNvbnN0IHN0b3JlZFRyYWNraW5nID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2dlb2xvY2F0aW9uLnRyYWNraW5nJykgYXMgYm9vbGVhbjtcclxuICAgICAgaWYgKHN0b3JlZFRyYWNraW5nICE9PSBudWxsICYmIHN0b3JlZFRyYWNraW5nICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0cmFja2luZyA9IHN0b3JlZFRyYWNraW5nO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzdG9yZWRGb2xsb3dQb3NpdGlvbiA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdnZW9sb2NhdGlvbi5mb2xsb3dQb3NpdGlvbicpIGFzIGJvb2xlYW47XHJcbiAgICAgIGlmIChzdG9yZWRGb2xsb3dQb3NpdGlvbiAhPT0gbnVsbCAmJiBzdG9yZWRGb2xsb3dQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9sbG93UG9zaXRpb24gPSBzdG9yZWRGb2xsb3dQb3NpdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmFja2luZyA9IHRyYWNraW5nO1xyXG4gICAgdGhpcy5mb2xsb3dQb3NpdGlvbiA9IGZvbGxvd1Bvc2l0aW9uO1xyXG4gICAgdGhpcy5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlYXJkb3duIGFueSBvYnNlcnZlcnNcclxuICAgKi9cclxuICB0ZWFyZG93bk9ic2VydmVycygpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMkJC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zJCQubWFwKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICAgIHN1cGVyLnRlYXJkb3duT2JzZXJ2ZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB0aGUgcG9zaXRpb24gIGhpc3RvcnlcclxuICAgKi9cclxuICAvKlxyXG4gIC8vIHRvZG9cclxuICBjbGVhclBvc2l0aW9uc0hpc3RvcnkoKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdO1xyXG4gIH0qL1xyXG5cclxuICAvKipcclxuICAgKiBPbiBwb3NpdGlvbiBjaGFuZ2UsIGdldCB0aGUgcG9zaXRpb24sIHNob3cgaXQgb24gdGhlIG1hcCBhbmQgcmVjb3JkIGl0LlxyXG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgTWFwIGV2ZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvblBvc2l0aW9uQ2hhbmdlKGVtaXRFdmVudDogYm9vbGVhbiA9IGZhbHNlLCB6b29tVG86IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKCF0aGlzLnRyYWNraW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGdlb2xvY2F0ZVByb3BlcnRpZXMgPSB0aGlzLmdlb2xvY2F0aW9uLmdldFByb3BlcnRpZXMoKTtcclxuXHJcbiAgICBpZiAoZ2VvbG9jYXRlUHJvcGVydGllcy5hY2N1cmFjeSA+IHRoaXMuYWNjdXJhY3lUaHJlc2hvbGQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdQb29yIGdlb2xvY2F0aW9uIGFjY3VyYWN5LiBObyBwb3NpdGlvbiBhcmUgc3RvcmVkL3Nob3duJyk7XHJcbiAgICAgIHRoaXMucG9zaXRpb24kLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9uOiBNYXBHZW9sb2NhdGlvblN0YXRlID0ge1xyXG4gICAgICBwb3NpdGlvbjogZ2VvbG9jYXRlUHJvcGVydGllcy5wb3NpdGlvbixcclxuICAgICAgcHJvamVjdGlvbjogdGhpcy5nZW9sb2NhdGlvbi5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpLFxyXG4gICAgICBhY2N1cmFjeTogZ2VvbG9jYXRlUHJvcGVydGllcy5hY2N1cmFjeSxcclxuICAgICAgYWx0aXR1ZGU6IGdlb2xvY2F0ZVByb3BlcnRpZXMuYWx0aXR1ZGUsXHJcbiAgICAgIGFsdGl0dWRlQWNjdXJhY3k6IGdlb2xvY2F0ZVByb3BlcnRpZXMuYWx0aXR1ZGVBY2N1cmFjeSxcclxuICAgICAgaGVhZGluZzogZ2VvbG9jYXRlUHJvcGVydGllcy5oZWFkaW5nLFxyXG4gICAgICBzcGVlZDogZ2VvbG9jYXRlUHJvcGVydGllcy5zcGVlZCxcclxuICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiBnZW9sb2NhdGVQcm9wZXJ0aWVzLnRyYWNraW5nT3B0aW9ucz8uZW5hYmxlSGlnaEFjY3VyYWN5ID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKClcclxuICAgIH07XHJcbiAgICB0aGlzLmhhbmRsZUZlYXR1cmVDcmVhdGlvbihwb3NpdGlvbik7XHJcbiAgICB0aGlzLmhhbmRsZVZpZXdGcm9tRmVhdHVyZXMocG9zaXRpb24sIHpvb21Ubyk7XHJcbiAgICBpZiAoZW1pdEV2ZW50KSB7XHJcbiAgICAgIHRoaXMucG9zaXRpb24kLm5leHQocG9zaXRpb24pO1xyXG4gICAgICAvKmlmICh0aGlzLmtlZXBQb3NpdGlvbkhpc3RvcnkgPT09IHRydWUpIHtcclxuICAgICAgICAvLyBoYW5kbGUgcG9zaXRpb24gZGlmZiB0byBzdG9yZSBvbmx5IHRydWUgZGlmZjtcclxuICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uKTtcclxuICAgICAgfSovXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZlYXR1cmVCeVR5cGUodHlwZTogR2VvbG9jYXRpb25PdmVybGF5VHlwZSk6IG9sRmVhdHVyZTxHZW9tZXRyeT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZUJ5SWQodHlwZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGV0ZUZlYXR1cmVCeVR5cGUodHlwZTogR2VvbG9jYXRpb25PdmVybGF5VHlwZSkge1xyXG4gICAgY29uc3QgZmVhdHVyZUJ5SWQgPSB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5kYXRhU291cmNlLm9sLmdldEZlYXR1cmVCeUlkKHR5cGUpO1xyXG4gICAgaWYgKGZlYXR1cmVCeUlkKSB7XHJcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmRhdGFTb3VyY2Uub2wucmVtb3ZlRmVhdHVyZShmZWF0dXJlQnlJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUZlYXR1cmVDcmVhdGlvbihwb3NpdGlvbjogTWFwR2VvbG9jYXRpb25TdGF0ZSkge1xyXG4gICAgaWYgKCFwb3NpdGlvbiB8fCAhcG9zaXRpb24ucG9zaXRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcG9zaXRpb25HZW9tZXRyeSA9IG5ldyBQb2ludChwb3NpdGlvbi5wb3NpdGlvbik7XHJcbiAgICBjb25zdCBhY2N1cmFjeUdlb21ldHJ5ID0gZnJvbUNpcmNsZShuZXcgT2xDaXJjbGUocG9zaXRpb24ucG9zaXRpb24sIHBvc2l0aW9uLmFjY3VyYWN5IHx8IDApKTtcclxuICAgIGxldCBwb3NpdGlvbkZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmVCeVR5cGUoR2VvbG9jYXRpb25PdmVybGF5VHlwZS5Qb3NpdGlvbik7XHJcbiAgICBsZXQgcG9zaXRpb25GZWF0dXJlQXJyb3cgPSB0aGlzLmdldEZlYXR1cmVCeVR5cGUoR2VvbG9jYXRpb25PdmVybGF5VHlwZS5Qb3NpdGlvbkRpcmVjdGlvbik7XHJcbiAgICBsZXQgYWNjdXJhY3lGZWF0dXJlID0gdGhpcy5nZXRGZWF0dXJlQnlUeXBlKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuQWNjdXJhY3kpO1xyXG4gICAgY29uc3QgcG9zaXRpb25GZWF0dXJlRXhpc3RzID0gcG9zaXRpb25GZWF0dXJlID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgcG9zaXRpb25GZWF0dXJlQXJyb3dFeGlzdHMgPSBwb3NpdGlvbkZlYXR1cmVBcnJvdyA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFjY3VyYWN5RmVhdHVyZUV4aXN0cyA9IGFjY3VyYWN5RmVhdHVyZSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmICghcG9zaXRpb25GZWF0dXJlQXJyb3dFeGlzdHMpIHtcclxuICAgICAgcG9zaXRpb25GZWF0dXJlQXJyb3cgPSBuZXcgb2xGZWF0dXJlPFBvaW50Pih7IGdlb21ldHJ5OiBwb3NpdGlvbkdlb21ldHJ5IH0pO1xyXG4gICAgICBwb3NpdGlvbkZlYXR1cmVBcnJvdy5zZXRJZChHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLlBvc2l0aW9uRGlyZWN0aW9uKTtcclxuICAgICAgaGlkZU9sRmVhdHVyZShwb3NpdGlvbkZlYXR1cmVBcnJvdyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXBvc2l0aW9uRmVhdHVyZUV4aXN0cykge1xyXG4gICAgICBwb3NpdGlvbkZlYXR1cmUgPSBuZXcgb2xGZWF0dXJlPFBvaW50Pih7IGdlb21ldHJ5OiBwb3NpdGlvbkdlb21ldHJ5IH0pO1xyXG4gICAgICBwb3NpdGlvbkZlYXR1cmUuc2V0SWQoR2VvbG9jYXRpb25PdmVybGF5VHlwZS5Qb3NpdGlvbik7XHJcbiAgICAgIHBvc2l0aW9uRmVhdHVyZS5zZXRTdHlsZSh0aGlzLnBvc2l0aW9uRmVhdHVyZVN0eWxlKTtcclxuICAgIH1cclxuICAgIGlmICghYWNjdXJhY3lGZWF0dXJlRXhpc3RzKSB7XHJcbiAgICAgIGFjY3VyYWN5RmVhdHVyZSA9IG5ldyBvbEZlYXR1cmU8UG9seWdvbj4oeyBnZW9tZXRyeTogYWNjdXJhY3lHZW9tZXRyeSB9KTtcclxuICAgICAgYWNjdXJhY3lGZWF0dXJlLnNldElkKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuQWNjdXJhY3kpO1xyXG4gICAgICBhY2N1cmFjeUZlYXR1cmUuc2V0U3R5bGUodGhpcy5hY2N1cmFjeUZlYXR1cmVTdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uR2VvbWV0cnkpIHtcclxuICAgICAgcG9zaXRpb25GZWF0dXJlRXhpc3RzID9cclxuICAgICAgICBwb3NpdGlvbkZlYXR1cmUuc2V0R2VvbWV0cnkocG9zaXRpb25HZW9tZXRyeSkgOiB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5hZGRPbEZlYXR1cmUocG9zaXRpb25GZWF0dXJlLCBGZWF0dXJlTW90aW9uLk5vbmUpO1xyXG4gICAgICBwb3NpdGlvbkZlYXR1cmVBcnJvd0V4aXN0cyA/XHJcbiAgICAgICAgcG9zaXRpb25GZWF0dXJlQXJyb3cuc2V0R2VvbWV0cnkocG9zaXRpb25HZW9tZXRyeSkgOiB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5hZGRPbEZlYXR1cmUocG9zaXRpb25GZWF0dXJlQXJyb3csIEZlYXR1cmVNb3Rpb24uTm9uZSk7XHJcbiAgICAgIHRoaXMudXBkYXRlQXJyb3dGZWF0dXJlT3JpZW50YXRpb24ocG9zaXRpb24pO1xyXG4gICAgICBhY2N1cmFjeUZlYXR1cmVFeGlzdHMgP1xyXG4gICAgICAgIGFjY3VyYWN5RmVhdHVyZS5zZXRHZW9tZXRyeShhY2N1cmFjeUdlb21ldHJ5KSA6IHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmFkZE9sRmVhdHVyZShhY2N1cmFjeUZlYXR1cmUsIEZlYXR1cmVNb3Rpb24uTm9uZSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgYnVmZmVyRmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkJ1ZmZlcik7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyRmVhdHVyZUV4aXN0cyA9IGJ1ZmZlckZlYXR1cmUgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyR2VvbWV0cnkgPSBuZXcgT2xDaXJjbGUocG9zaXRpb24ucG9zaXRpb24sIHRoaXMuYnVmZmVyLmJ1ZmZlclJhZGl1cyk7XHJcbiAgICAgICAgaWYgKCFidWZmZXJGZWF0dXJlRXhpc3RzKSB7XHJcbiAgICAgICAgICBidWZmZXJGZWF0dXJlID0gbmV3IG9sRmVhdHVyZShidWZmZXJHZW9tZXRyeSk7XHJcbiAgICAgICAgICBidWZmZXJGZWF0dXJlLnNldElkKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuQnVmZmVyKTtcclxuICAgICAgICAgIGJ1ZmZlckZlYXR1cmUuc2V0U3R5bGUodGhpcy5wb3NpdGlvbkZlYXR1cmVTdHlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1ZmZlckZlYXR1cmUuc2V0U3R5bGUodGhpcy5idWZmZXJTdHlsZSk7XHJcbiAgICAgICAgYnVmZmVyRmVhdHVyZUV4aXN0cyA/XHJcbiAgICAgICAgICBidWZmZXJGZWF0dXJlLnNldEdlb21ldHJ5KGJ1ZmZlckdlb21ldHJ5KSA6IHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmFkZE9sRmVhdHVyZShidWZmZXJGZWF0dXJlLCBGZWF0dXJlTW90aW9uLk5vbmUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBoYW5kbGVWaWV3RnJvbUZlYXR1cmVzKHBvc2l0aW9uOiBNYXBHZW9sb2NhdGlvblN0YXRlLCB6b29tVG86IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IHBvc2l0aW9uRmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLlBvc2l0aW9uKTtcclxuICAgIGxldCBwb3NpdGlvbkZlYXR1cmVBcnJvdyA9IHRoaXMuZ2V0RmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLlBvc2l0aW9uRGlyZWN0aW9uKTtcclxuICAgIGxldCBhY2N1cmFjeUZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmVCeVR5cGUoR2VvbG9jYXRpb25PdmVybGF5VHlwZS5BY2N1cmFjeSk7XHJcbiAgICBsZXQgYnVmZmVyRmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkJ1ZmZlcik7XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IFtwb3NpdGlvbkZlYXR1cmUsIHBvc2l0aW9uRmVhdHVyZUFycm93LCBhY2N1cmFjeUZlYXR1cmUsIGJ1ZmZlckZlYXR1cmVdLmZpbHRlcihmID0+IGYpO1xyXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmVhdHVyZXNFeHRlbnQgPSBjb21wdXRlT2xGZWF0dXJlc0V4dGVudCh0aGlzLm1hcCwgZmVhdHVyZXMpO1xyXG4gICAgICBjb25zdCBlZGdlUmF0aW9zID0gcG9zaXRpb24/LnNwZWVkID4gMTIuNSA/IFswLjI1LDAuMjUsMC4yNSwwLjI1XSA6IFswLjE1LDAuMSwwLjEsMC4xXTtcclxuICAgICAgY29uc3QgYXJlT3V0T2ZWaWV3ID0gZmVhdHVyZXNBcmVPdXRPZlZpZXcodGhpcy5tYXAsIGZlYXR1cmVzRXh0ZW50LCBlZGdlUmF0aW9zKTtcclxuICAgICAgbGV0IG1vdGlvbiA9IHRoaXMuZm9sbG93UG9zaXRpb24gJiYgYXJlT3V0T2ZWaWV3ID8gRmVhdHVyZU1vdGlvbi5Nb3ZlIDogRmVhdHVyZU1vdGlvbi5Ob25lO1xyXG4gICAgICBpZiAoem9vbVRvKSB7XHJcbiAgICAgICAgbW90aW9uID0gRmVhdHVyZU1vdGlvbi5ab29tO1xyXG4gICAgICB9XHJcbiAgICAgIG1vdGlvbiAhPT0gRmVhdHVyZU1vdGlvbi5Ob25lID8gbW92ZVRvT2xGZWF0dXJlcyh0aGlzLm1hcCwgZmVhdHVyZXMsIG1vdGlvbikgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -348,4 +348,4 @@ export class MapViewController extends MapController {
348
348
  this.state$.next(state);
349
349
  }
350
350
  }
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBSWxDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFRN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQWtFbEQsWUFBb0IsT0FBa0M7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFEVSxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQWpFdEQ7O1dBRUc7UUFDTyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFckQ7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFlLFNBQVMsQ0FBQyxDQUFDO1FBRXREOzs7V0FHRztRQUNILFlBQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZCOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFPckI7O1dBRUc7UUFDSyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQWdE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QUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDMUM7U0FDRjtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPbE1hcCBmcm9tICdvbC9NYXAnO1xuaW1wb3J0IE9sTWFwRXZlbnQgZnJvbSAnb2wvTWFwRXZlbnQnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgKiBhcyBvbGVhc2luZyBmcm9tICdvbC9lYXNpbmcnO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IE9sUHJvamVjdGlvbiBmcm9tICdvbC9wcm9qL1Byb2plY3Rpb24nO1xuaW1wb3J0IE9sVmlldyBmcm9tICdvbC9WaWV3JztcblxuaW1wb3J0IHsgTWFwVmlld0FjdGlvbiB9IGZyb20gJy4uL21hcC5lbnVtcyc7XG5pbXBvcnQgeyBNYXBFeHRlbnQsIE1hcFZpZXdTdGF0ZSB9IGZyb20gJy4uL21hcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0U2NhbGVGcm9tUmVzb2x1dGlvbiwgdmlld1N0YXRlc0FyZUVxdWFsIH0gZnJvbSAnLi4vbWFwLnV0aWxzJztcbmltcG9ydCB7IE1hcENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgRXZlbnRzS2V5IH0gZnJvbSAnb2wvZXZlbnRzJztcbmltcG9ydCB7IE9iamVjdEV2ZW50IH0gZnJvbSAnb2wvT2JqZWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMge1xuICBzdGF0ZUhpc3Rvcnk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udHJvbGxlciB0byBoYW5kbGUgbWFwIHZpZXcgaW50ZXJhY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBWaWV3Q29udHJvbGxlciBleHRlbmRzIE1hcENvbnRyb2xsZXIge1xuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCByb3RhdGlvbiBpbiByYWRpYW5zXG4gICAqL1xuICAgcmVhZG9ubHkgcm90YXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICovXG4gIHJlc29sdXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGN1cnJlbnQgc3RhdGVcbiAgICovXG4gIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwVmlld1N0YXRlPih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBWaWV3IFBhZGRpbmdcbiAgICogVmFsdWVzIGluIHRoZSBhcnJheSBhcmUgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0IHBhZGRpbmcuXG4gICAqL1xuICBwYWRkaW5nID0gWzAsIDAsIDAsIDBdO1xuXG4gIC8qKlxuICAgKiBNYXggem9vbSBhZnRlciBzZXQgZXh0ZW50XG4gICAqL1xuICBtYXhab29tT25FeHRlbnQgPSAxOTtcblxuICAvKipcbiAgICogTWF4IGV4dGVudCBwb3NzaWJsZSB3aGVuIHpvb21pbmdcbiAgICovXG4gIG1heExheWVyWm9vbUV4dGVudDogTWFwRXh0ZW50O1xuXG4gIC8qKlxuICAgKiBFeHRlbnQgc3RyZWFtXG4gICAqL1xuICBwcml2YXRlIGV4dGVudCQgPSBuZXcgU3ViamVjdDx7IGV4dGVudDogTWFwRXh0ZW50OyBhY3Rpb246IE1hcFZpZXdBY3Rpb24gfT4oKTtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBtb3ZlbWVudCBzdHJlYW1cbiAgICovXG4gIHByaXZhdGUgZXh0ZW50JCQ6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogSGlzdG9yeSBvZiBzdGF0ZXNcbiAgICovXG4gIHByaXZhdGUgc3RhdGVzOiBNYXBWaWV3U3RhdGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHN0YXRlIGluZGV4XG4gICAqL1xuICBwcml2YXRlIHN0YXRlSW5kZXg6IG51bWJlciA9IDA7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHZpZXcgY29udHJvbGxlciBzaG91bGQga2VlcCB0aGUgdmlldydzIHN0YXRlIGhpc3RvcnlcbiAgICovXG4gIGdldCBzdGF0ZUhpc3RvcnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy5zdGF0ZUhpc3RvcnkgPT09IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPTCBWaWV3XG4gICAqL1xuICBnZXQgb2xWaWV3KCk6IE9sVmlldyB7XG4gICAgcmV0dXJuIHRoaXMub2xNYXAuZ2V0VmlldygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zPzogTWFwVmlld0NvbnRyb2xsZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHNldFBhZGRpbmcocGFkZGluZzogeyB0b3A/OiBudW1iZXIsIGJvdHRvbT86IG51bWJlciwgbGVmdD86IG51bWJlciwgcmlnaHQ/OiBudW1iZXIgfSkge1xuICAgIC8vIFZhbHVlcyBpbiB0aGUgYXJyYXkgYXJlIHRvcCwgcmlnaHQsIGJvdHRvbSBhbmQgbGVmdCBwYWRkaW5nLlxuICAgIGlmIChwYWRkaW5nLnRvcCB8fCBwYWRkaW5nLnRvcCA9PT0gMCkge1xuICAgICAgdGhpcy5wYWRkaW5nWzBdID0gcGFkZGluZy50b3A7XG4gICAgfVxuICAgIGlmIChwYWRkaW5nLnJpZ2h0IHx8IHBhZGRpbmcucmlnaHQgPT09IDApIHtcbiAgICAgIHRoaXMucGFkZGluZ1sxXSA9IHBhZGRpbmcucmlnaHQ7XG4gICAgfVxuICAgIGlmIChwYWRkaW5nLmJvdHRvbSB8fCBwYWRkaW5nLmJvdHRvbSA9PT0gMCkge1xuICAgICAgdGhpcy5wYWRkaW5nWzJdID0gcGFkZGluZy5ib3R0b207XG4gICAgfVxuICAgIGlmIChwYWRkaW5nLmxlZnQgfHwgcGFkZGluZy5sZWZ0ID09PSAwKSB7XG4gICAgICB0aGlzLnBhZGRpbmdbM10gPSBwYWRkaW5nLmxlZnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvciByZW1vdmUgdGhpcyBjb250cm9sbGVyIHRvL2Zyb20gYSBtYXAuXG4gICAqIEBwYXJhbSBtYXAgT0wgTWFwXG4gICAqL1xuICBzZXRPbE1hcChvbE1hcDogT2xNYXAgfCB1bmRlZmluZWQpIHtcbiAgICBzdXBlci5zZXRPbE1hcChvbE1hcCk7XG4gICAgdGhpcy5zZXR1cE9ic2VydmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgbW92ZSBtb3ZlZW5kIGFuZCBzdWJzY3JpYmUgdG8gdGhlIGV4dGVudCBzdHJlYW1cbiAgICovXG4gIHNldHVwT2JzZXJ2ZXJzKCkge1xuICAgIGlmICh0aGlzLnN0YXRlSGlzdG9yeSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vYnNlcnZlcktleXMucHVzaChcbiAgICAgICAgdGhpcy5vbE1hcC5vbignbW92ZWVuZCcsIChldmVudDogT2xNYXBFdmVudCkgPT4gdGhpcy5vbk1vdmVFbmQoZXZlbnQpKSBhcyBFdmVudHNLZXlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5leHRlbnQkJCA9IHRoaXMuZXh0ZW50JFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1KSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiB7IGV4dGVudDogTWFwRXh0ZW50OyBhY3Rpb246IE1hcFZpZXdBY3Rpb24gfSkgPT4ge1xuICAgICAgICB0aGlzLnNldEV4dGVudCh2YWx1ZS5leHRlbnQsIHZhbHVlLmFjdGlvbik7XG4gICAgICB9KTtcbiAgfVxuXG4gIG1vbml0b3JSb3RhdGlvbigpIHtcbiAgICB0aGlzLm9ic2VydmVyS2V5cy5wdXNoKFxuICAgICAgdGhpcy5vbE1hcC5nZXRWaWV3KCkub24oJ2NoYW5nZTpyb3RhdGlvbicsIChldnQ6IE9iamVjdEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucm90YXRpb24kLm5leHQoZXZ0LnRhcmdldC5nZXRSb3RhdGlvbigpKTtcbiAgICAgIH0pIGFzIEV2ZW50c0tleVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFyZG93biBhbnkgb2JzZXJ2ZXJzXG4gICAqL1xuICB0ZWFyZG93bk9ic2VydmVycygpIHtcbiAgICBzdXBlci50ZWFyZG93bk9ic2VydmVycygpO1xuICAgIGlmICh0aGlzLmV4dGVudCQkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZXh0ZW50JCQudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuZXh0ZW50JCQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmlldydzIE9MIHByb2plY3Rpb25cbiAgICogQHJldHVybnMgT0wgcHJvamVjdGlvblxuICAgKi9cbiAgZ2V0T2xQcm9qZWN0aW9uKCk6IE9sUHJvamVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMub2xWaWV3LmdldFByb2plY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgbWFwIHZpZXcgY2VudGVyXG4gICAqIEBwYXJhbSBwcm9qZWN0aW9uIE91dHB1dCBwcm9qZWN0aW9uXG4gICAqIEByZXR1cm5zIENlbnRlclxuICAgKi9cbiAgZ2V0Q2VudGVyKHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBsZXQgY2VudGVyID0gdGhpcy5vbFZpZXcuZ2V0Q2VudGVyKCkgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICBpZiAocHJvamVjdGlvbiAmJiBjZW50ZXIpIHtcbiAgICAgIGNlbnRlciA9IG9scHJvai50cmFuc2Zvcm0oY2VudGVyLCB0aGlzLmdldE9sUHJvamVjdGlvbigpLCBwcm9qZWN0aW9uKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIH1cbiAgICByZXR1cm4gY2VudGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB2aWV3IGV4dGVudFxuICAgKiBAcGFyYW0gcHJvamVjdGlvbiBPdXRwdXQgcHJvamVjdGlvblxuICAgKiBAcmV0dXJucyBFeHRlbnRcbiAgICovXG4gIGdldEV4dGVudChwcm9qZWN0aW9uPzogc3RyaW5nIHwgT2xQcm9qZWN0aW9uKTogTWFwRXh0ZW50IHtcbiAgICBsZXQgZXh0ZW50ID0gdGhpcy5vbFZpZXcuY2FsY3VsYXRlRXh0ZW50KHRoaXMub2xNYXAuZ2V0U2l6ZSgpKTtcbiAgICBpZiAocHJvamVjdGlvbiAmJiBleHRlbnQpIHtcbiAgICAgIGV4dGVudCA9IG9scHJvai50cmFuc2Zvcm1FeHRlbnQoXG4gICAgICAgIGV4dGVudCxcbiAgICAgICAgdGhpcy5nZXRPbFByb2plY3Rpb24oKSxcbiAgICAgICAgcHJvamVjdGlvblxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVudCBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgc2NhbGVcbiAgICogQHBhcmFtIGRwaSBEb3QgcGVyIGluY2hlc1xuICAgKiBAcmV0dXJucyBWaWV3IHNjYWxlXG4gICAqL1xuICBnZXRTY2FsZShkcGkgPSA5Nikge1xuICAgIHJldHVybiBnZXRTY2FsZUZyb21SZXNvbHV0aW9uKFxuICAgICAgdGhpcy5nZXRSZXNvbHV0aW9uKCksXG4gICAgICB0aGlzLmdldE9sUHJvamVjdGlvbigpLmdldFVuaXRzKCksXG4gICAgICBkcGlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAqIEByZXR1cm5zIFByb2plY3Rpb24gZGVub21pbmF0b3JcbiAgICovXG4gIGdldFJlc29sdXRpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vbFZpZXcuZ2V0UmVzb2x1dGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB6b29tIGxldmVsXG4gICAqIEByZXR1cm5zIFpvb20gbGV2ZWxcbiAgICovXG4gIGdldFpvb20oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLm9sVmlldy5nZXRab29tKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gaW5cbiAgICovXG4gIHpvb21JbigpIHtcbiAgICB0aGlzLnpvb21Ubyh0aGlzLm9sVmlldy5nZXRab29tKCkgKyAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBab29tIG91dFxuICAgKi9cbiAgem9vbU91dCgpIHtcbiAgICB0aGlzLnpvb21Ubyh0aGlzLm9sVmlldy5nZXRab29tKCkgLSAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBab29tIHRvIHNwZWNpZmljIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHpvb20gWm9vbSBsZXZlbFxuICAgKi9cbiAgem9vbVRvKHpvb206IG51bWJlcikge1xuICAgIHRoaXMub2xWaWV3LmNhbmNlbEFuaW1hdGlvbnMoKTtcbiAgICB0aGlzLm9sVmlldy5hbmltYXRlKHtcbiAgICAgIHpvb20sXG4gICAgICBkdXJhdGlvbjogMjUwLFxuICAgICAgZWFzaW5nOiBvbGVhc2luZy5lYXNlT3V0XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byBleHRlbnQgYWZ0ZXIgYSBzaG9ydCBkZWxheSAoMTAwbXMpIHVubGVzc1xuICAgKiBhIG5ldyBtb3ZlbWVudCBnZXRzIHJlZ2lzdGVyZWQgaW4gdGhlIG1lYW50aW1lLlxuICAgKiBAcGFyYW0gZXh0ZW50IEV4dGVudCB0byBtb3ZlIHRvXG4gICAqL1xuICBtb3ZlVG9FeHRlbnQoZXh0ZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgIHRoaXMuZXh0ZW50JC5uZXh0KHsgZXh0ZW50LCBhY3Rpb246IE1hcFZpZXdBY3Rpb24uTW92ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBab29tIHRvIGV4dGVudCBhZnRlciBhIHNob3J0IGRlbGF5ICgxMDBtcykgdW5sZXNzXG4gICAqIGEgbmV3IG1vdmVtZW50IGdldHMgcmVnaXN0ZXJlZCBpbiB0aGUgbWVhbnRpbWUuXG4gICAqIEBwYXJhbSBleHRlbnQgRXh0ZW50IHRvIHpvb20gdG9cbiAgICovXG4gIHpvb21Ub0V4dGVudChleHRlbnQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgdGhpcy5leHRlbnQkLm5leHQoeyBleHRlbnQsIGFjdGlvbjogTWFwVmlld0FjdGlvbi5ab29tIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY3VycmVudCB2aWV3IHJvdGF0aW9uXG4gICAqIEByZXR1cm5zIFJvdGF0aW9uIGFuZ2xlIGluIHJhZGlhbnNcbiAgICovXG4gIGdldFJvdGF0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub2xWaWV3LmdldFJvdGF0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHZpZXcgcm90YXRpb24gdG8gMFxuICAgKi9cbiAgcmVzZXRSb3RhdGlvbigpIHtcbiAgICB0aGlzLm9sVmlldy5hbmltYXRlKHsgcm90YXRpb246IDAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmlldyBoYXMgYSBwcmV2aW91cyBzdGF0ZVxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2aWV3IGhhcyBhIHByZXZpb3VzIHN0YXRlXG4gICAqL1xuICBoYXNQcmV2aW91c1N0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlcy5sZW5ndGggPiAxICYmIHRoaXMuc3RhdGVJbmRleCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmlldyBoYXMgYSBuZXh0IHN0YXRlXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZpZXcgaGFzIGEgbmV4dCBzdGF0ZVxuICAgKi9cbiAgaGFzTmV4dFN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlcy5sZW5ndGggPiAxICYmIHRoaXMuc3RhdGVJbmRleCA8IHRoaXMuc3RhdGVzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgcHJldmlvdXMgdmlldyBzdGF0ZVxuICAgKi9cbiAgcHJldmlvdXNTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5oYXNQcmV2aW91c1N0YXRlKCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGVJbmRleCh0aGlzLnN0YXRlSW5kZXggLSAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgbmV4dCB2aWV3IHN0YXRlXG4gICAqL1xuICBuZXh0U3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuaGFzTmV4dFN0YXRlKCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGVJbmRleCh0aGlzLnN0YXRlSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHN0YXRlIGhpc3RvcnlcbiAgICovXG4gIGNsZWFyU3RhdGVIaXN0b3J5KCkge1xuICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgdGhpcy5zdGF0ZUluZGV4ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHRoZSB2aWV3IHRvIGl0J3MgaW50aWFsIHN0YXRlXG4gICAqL1xuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGVJbmRleCgwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byB0aGUgZXh0ZW50IHJldHJpZXZlZCBmcm9tIHRoZSBzdHJlYW1cbiAgICogQHBhcmFtIGV4dGVudCBFeHRlbnRcbiAgICogQHBhcmFtIGFjdGlvbiBFaXRoZXIgem9vbSBvciBtb3ZlXG4gICAqIEBwYXJhbSBhbmltYXRpb24gV2l0aCBvciB3aXRob3V0IGFuaW1hdGlvbiB0byB0aGUgdGFyZ2V0IGV4dGVudC5cbiAgICovXG4gIHByaXZhdGUgc2V0RXh0ZW50KFxuICAgIGV4dGVudDogTWFwRXh0ZW50LFxuICAgIGFjdGlvbjogTWFwVmlld0FjdGlvbixcbiAgICBhbmltYXRpb246IGJvb2xlYW4gPSB0cnVlXG4gICkge1xuICAgIGNvbnN0IG9sVmlldyA9IHRoaXMub2xWaWV3O1xuICAgIG9sVmlldy5jYW5jZWxBbmltYXRpb25zKCk7XG4gICAgY29uc3QgZHVyYXRpb24gPSBhbmltYXRpb24gPyA1MDAgOiAwO1xuICAgIGNvbnN0IHpvb20gPSBvbFZpZXcuZ2V0Wm9vbSgpO1xuXG4gICAgY29uc3QgZnJvbUNlbnRlciA9IG9sVmlldy5nZXRDZW50ZXIoKTtcbiAgICBjb25zdCB0b0NlbnRlciA9IFtcbiAgICAgIGV4dGVudFswXSArIChleHRlbnRbMl0gLSBleHRlbnRbMF0pIC8gMixcbiAgICAgIGV4dGVudFsxXSArIChleHRlbnRbM10gLSBleHRlbnRbMV0pIC8gMlxuICAgIF07XG4gICAgY29uc3QgZGlzdENlbnRlciA9IE1hdGguc3FydChcbiAgICAgIE1hdGgucG93KGZyb21DZW50ZXJbMF0gLSB0b0NlbnRlclswXSwgMikgK1xuICAgICAgICBNYXRoLnBvdyhmcm9tQ2VudGVyWzFdIC0gdG9DZW50ZXJbMV0sIDIpXG4gICAgKTtcbiAgICBjb25zdCBmcm9tRXh0ZW50ID0gb2xWaWV3LmNhbGN1bGF0ZUV4dGVudCgpO1xuICAgIGNvbnN0IGZyb21TaXplID0gTWF0aC5zcXJ0KFxuICAgICAgTWF0aC5wb3coZnJvbUV4dGVudFsyXSAtIGZyb21FeHRlbnRbMF0sIDIpICtcbiAgICAgICAgTWF0aC5wb3coZnJvbUV4dGVudFszXSAtIGZyb21FeHRlbnRbMV0sIDIpXG4gICAgKTtcbiAgICBjb25zdCB0b1NpemUgPSBNYXRoLnNxcnQoXG4gICAgICBNYXRoLnBvdyhleHRlbnRbMl0gLSBleHRlbnRbMF0sIDIpICsgTWF0aC5wb3coZXh0ZW50WzNdIC0gZXh0ZW50WzFdLCAyKVxuICAgICk7XG4gICAgY29uc3QgbW95U2l6ZSA9ICh0b1NpemUgKyBmcm9tU2l6ZSkgLyAyO1xuICAgIGNvbnN0IHhTaXplID0gZGlzdENlbnRlciAvIG1veVNpemU7XG5cbiAgICBjb25zdCBtYXhab29tID1cbiAgICAgIGFjdGlvbiA9PT0gTWFwVmlld0FjdGlvbi5Nb3ZlIHx8IHpvb20gPiB0aGlzLm1heFpvb21PbkV4dGVudFxuICAgICAgICA/IHpvb21cbiAgICAgICAgOiB0aGlzLm1heFpvb21PbkV4dGVudDtcblxuICAgIG9sVmlldy5maXQoZXh0ZW50LCB7XG4gICAgICBzaXplOiB0aGlzLm9sTWFwLmdldFNpemUoKSxcbiAgICAgIG1heFpvb20sXG4gICAgICBwYWRkaW5nOiB0aGlzLnBhZGRpbmcsXG4gICAgICBkdXJhdGlvbjogeFNpemUgPiA0ID8gMCA6IGR1cmF0aW9uLFxuICAgICAgY2FsbGJhY2s6IChpc0ZpbmlzaGVkOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmICghaXNGaW5pc2hlZCkge1xuICAgICAgICAgIG9sVmlldy5maXQoZXh0ZW50LCB7XG4gICAgICAgICAgICBzaXplOiB0aGlzLm9sTWFwLmdldFNpemUoKSxcbiAgICAgICAgICAgIG1heFpvb20sXG4gICAgICAgICAgICBwYWRkaW5nOiB0aGlzLnBhZGRpbmcsXG4gICAgICAgICAgICBkdXJhdGlvbjogeFNpemUgPiA0ID8gMCA6IGR1cmF0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZpZXcgc3RhdGUgaW5kZXhcbiAgICogQHBhcmFtIGluZGV4IFN0YXRlIGluZGV4XG4gICAqL1xuICBwcml2YXRlIHNldFN0YXRlSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc3RhdGVJbmRleCA9IGluZGV4O1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZXNbaW5kZXhdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZpZXcgc3RhdGVcbiAgICogQHBhcmFtIHN0YXRlIFZpZXcgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0U3RhdGUoc3RhdGU6IE1hcFZpZXdTdGF0ZSkge1xuICAgIHRoaXMub2xWaWV3LmFuaW1hdGUoe1xuICAgICAgcmVzb2x1dGlvbjogc3RhdGUucmVzb2x1dGlvbixcbiAgICAgIGNlbnRlcjogc3RhdGUuY2VudGVyLFxuICAgICAgZHVyYXRpb246IDBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBtb3ZlIGVuZCwgZ2V0IHRoZSB2aWV3IHN0YXRlIGFuZCByZWNvcmQgaXQuXG4gICAqIEBwYXJhbSBldmVudCBNYXAgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25Nb3ZlRW5kKGV2ZW50OiBPbE1hcEV2ZW50KSB7XG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IHRoaXMuZ2V0UmVzb2x1dGlvbigpO1xuICAgIGlmICh0aGlzLnJlc29sdXRpb24kLnZhbHVlICE9PSByZXNvbHV0aW9uKSB7XG4gICAgICB0aGlzLnJlc29sdXRpb24kLm5leHQocmVzb2x1dGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICByZXNvbHV0aW9uLFxuICAgICAgY2VudGVyOiB0aGlzLmdldENlbnRlcigpLFxuICAgICAgem9vbTogdGhpcy5nZXRab29tKClcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc3RhdGVIaXN0b3J5ID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBzdGF0ZUluZGV4ID0gdGhpcy5zdGF0ZUluZGV4O1xuICAgICAgY29uc3Qgc3RhdGVBdEluZGV4ID1cbiAgICAgICAgdGhpcy5zdGF0ZXMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGhpcy5zdGF0ZXNbc3RhdGVJbmRleF07XG4gICAgICBpZiAoIXZpZXdTdGF0ZXNBcmVFcXVhbChzdGF0ZSwgc3RhdGVBdEluZGV4KSkge1xuICAgICAgICB0aGlzLnN0YXRlcyA9IHRoaXMuc3RhdGVzLnNsaWNlKDAsIHN0YXRlSW5kZXggKyAxKS5jb25jYXQoW3N0YXRlXSk7XG4gICAgICAgIHRoaXMuc3RhdGVJbmRleCA9IHRoaXMuc3RhdGVzLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSQubmV4dChzdGF0ZSk7XG4gIH1cbn1cbiJdfQ==
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBSWxDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFRN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQWtFbEQsWUFBb0IsT0FBa0M7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFEVSxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQWpFdEQ7O1dBRUc7UUFDTyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFckQ7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFlLFNBQVMsQ0FBQyxDQUFDO1FBRXREOzs7V0FHRztRQUNILFlBQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZCOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFPckI7O1dBRUc7UUFDSyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQWdE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QUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDMUM7U0FDRjtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPbE1hcCBmcm9tICdvbC9NYXAnO1xyXG5pbXBvcnQgT2xNYXBFdmVudCBmcm9tICdvbC9NYXBFdmVudCc7XHJcblxyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgKiBhcyBvbGVhc2luZyBmcm9tICdvbC9lYXNpbmcnO1xyXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XHJcbmltcG9ydCBPbFByb2plY3Rpb24gZnJvbSAnb2wvcHJvai9Qcm9qZWN0aW9uJztcclxuaW1wb3J0IE9sVmlldyBmcm9tICdvbC9WaWV3JztcclxuXHJcbmltcG9ydCB7IE1hcFZpZXdBY3Rpb24gfSBmcm9tICcuLi9tYXAuZW51bXMnO1xyXG5pbXBvcnQgeyBNYXBFeHRlbnQsIE1hcFZpZXdTdGF0ZSB9IGZyb20gJy4uL21hcC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBnZXRTY2FsZUZyb21SZXNvbHV0aW9uLCB2aWV3U3RhdGVzQXJlRXF1YWwgfSBmcm9tICcuLi9tYXAudXRpbHMnO1xyXG5pbXBvcnQgeyBNYXBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcclxuaW1wb3J0IHsgRXZlbnRzS2V5IH0gZnJvbSAnb2wvZXZlbnRzJztcclxuaW1wb3J0IHsgT2JqZWN0RXZlbnQgfSBmcm9tICdvbC9PYmplY3QnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMge1xyXG4gIHN0YXRlSGlzdG9yeTogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnRyb2xsZXIgdG8gaGFuZGxlIG1hcCB2aWV3IGludGVyYWN0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1hcFZpZXdDb250cm9sbGVyIGV4dGVuZHMgTWFwQ29udHJvbGxlciB7XHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCByb3RhdGlvbiBpbiByYWRpYW5zXHJcbiAgICovXHJcbiAgIHJlYWRvbmx5IHJvdGF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCByZXNvbHV0aW9uXHJcbiAgICovXHJcbiAgcmVzb2x1dGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCBzdGF0ZVxyXG4gICAqL1xyXG4gIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwVmlld1N0YXRlPih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBWaWV3IFBhZGRpbmdcclxuICAgKiBWYWx1ZXMgaW4gdGhlIGFycmF5IGFyZSB0b3AsIHJpZ2h0LCBib3R0b20gYW5kIGxlZnQgcGFkZGluZy5cclxuICAgKi9cclxuICBwYWRkaW5nID0gWzAsIDAsIDAsIDBdO1xyXG5cclxuICAvKipcclxuICAgKiBNYXggem9vbSBhZnRlciBzZXQgZXh0ZW50XHJcbiAgICovXHJcbiAgbWF4Wm9vbU9uRXh0ZW50ID0gMTk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heCBleHRlbnQgcG9zc2libGUgd2hlbiB6b29taW5nXHJcbiAgICovXHJcbiAgbWF4TGF5ZXJab29tRXh0ZW50OiBNYXBFeHRlbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dGVudCBzdHJlYW1cclxuICAgKi9cclxuICBwcml2YXRlIGV4dGVudCQgPSBuZXcgU3ViamVjdDx7IGV4dGVudDogTWFwRXh0ZW50OyBhY3Rpb246IE1hcFZpZXdBY3Rpb24gfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBtb3ZlbWVudCBzdHJlYW1cclxuICAgKi9cclxuICBwcml2YXRlIGV4dGVudCQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpc3Rvcnkgb2Ygc3RhdGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0ZXM6IE1hcFZpZXdTdGF0ZVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1cnJlbnQgc3RhdGUgaW5kZXhcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRlSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIHZpZXcgY29udHJvbGxlciBzaG91bGQga2VlcCB0aGUgdmlldydzIHN0YXRlIGhpc3RvcnlcclxuICAgKi9cclxuICBnZXQgc3RhdGVIaXN0b3J5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy5zdGF0ZUhpc3RvcnkgPT09IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9MIFZpZXdcclxuICAgKi9cclxuICBnZXQgb2xWaWV3KCk6IE9sVmlldyB7XHJcbiAgICByZXR1cm4gdGhpcy5vbE1hcC5nZXRWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM/OiBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWRkaW5nKHBhZGRpbmc6IHsgdG9wPzogbnVtYmVyLCBib3R0b20/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyIH0pIHtcclxuICAgIC8vIFZhbHVlcyBpbiB0aGUgYXJyYXkgYXJlIHRvcCwgcmlnaHQsIGJvdHRvbSBhbmQgbGVmdCBwYWRkaW5nLlxyXG4gICAgaWYgKHBhZGRpbmcudG9wIHx8IHBhZGRpbmcudG9wID09PSAwKSB7XHJcbiAgICAgIHRoaXMucGFkZGluZ1swXSA9IHBhZGRpbmcudG9wO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhZGRpbmcucmlnaHQgfHwgcGFkZGluZy5yaWdodCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnBhZGRpbmdbMV0gPSBwYWRkaW5nLnJpZ2h0O1xyXG4gICAgfVxyXG4gICAgaWYgKHBhZGRpbmcuYm90dG9tIHx8IHBhZGRpbmcuYm90dG9tID09PSAwKSB7XHJcbiAgICAgIHRoaXMucGFkZGluZ1syXSA9IHBhZGRpbmcuYm90dG9tO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhZGRpbmcubGVmdCB8fCBwYWRkaW5nLmxlZnQgPT09IDApIHtcclxuICAgICAgdGhpcy5wYWRkaW5nWzNdID0gcGFkZGluZy5sZWZ0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIG9yIHJlbW92ZSB0aGlzIGNvbnRyb2xsZXIgdG8vZnJvbSBhIG1hcC5cclxuICAgKiBAcGFyYW0gbWFwIE9MIE1hcFxyXG4gICAqL1xyXG4gIHNldE9sTWFwKG9sTWFwOiBPbE1hcCB8IHVuZGVmaW5lZCkge1xyXG4gICAgc3VwZXIuc2V0T2xNYXAob2xNYXApO1xyXG4gICAgdGhpcy5zZXR1cE9ic2VydmVycygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2ZSBtb3ZlIG1vdmVlbmQgYW5kIHN1YnNjcmliZSB0byB0aGUgZXh0ZW50IHN0cmVhbVxyXG4gICAqL1xyXG4gIHNldHVwT2JzZXJ2ZXJzKCkge1xyXG4gICAgaWYgKHRoaXMuc3RhdGVIaXN0b3J5ID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMub2JzZXJ2ZXJLZXlzLnB1c2goXHJcbiAgICAgICAgdGhpcy5vbE1hcC5vbignbW92ZWVuZCcsIChldmVudDogT2xNYXBFdmVudCkgPT4gdGhpcy5vbk1vdmVFbmQoZXZlbnQpKSBhcyBFdmVudHNLZXlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmV4dGVudCQkID0gdGhpcy5leHRlbnQkXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiB7IGV4dGVudDogTWFwRXh0ZW50OyBhY3Rpb246IE1hcFZpZXdBY3Rpb24gfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0RXh0ZW50KHZhbHVlLmV4dGVudCwgdmFsdWUuYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBtb25pdG9yUm90YXRpb24oKSB7XHJcbiAgICB0aGlzLm9ic2VydmVyS2V5cy5wdXNoKFxyXG4gICAgICB0aGlzLm9sTWFwLmdldFZpZXcoKS5vbignY2hhbmdlOnJvdGF0aW9uJywgKGV2dDogT2JqZWN0RXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uJC5uZXh0KGV2dC50YXJnZXQuZ2V0Um90YXRpb24oKSk7XHJcbiAgICAgIH0pIGFzIEV2ZW50c0tleVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGVhcmRvd24gYW55IG9ic2VydmVyc1xyXG4gICAqL1xyXG4gIHRlYXJkb3duT2JzZXJ2ZXJzKCkge1xyXG4gICAgc3VwZXIudGVhcmRvd25PYnNlcnZlcnMoKTtcclxuICAgIGlmICh0aGlzLmV4dGVudCQkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5leHRlbnQkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLmV4dGVudCQkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSB2aWV3J3MgT0wgcHJvamVjdGlvblxyXG4gICAqIEByZXR1cm5zIE9MIHByb2plY3Rpb25cclxuICAgKi9cclxuICBnZXRPbFByb2plY3Rpb24oKTogT2xQcm9qZWN0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLm9sVmlldy5nZXRQcm9qZWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGN1cnJlbnQgbWFwIHZpZXcgY2VudGVyXHJcbiAgICogQHBhcmFtIHByb2plY3Rpb24gT3V0cHV0IHByb2plY3Rpb25cclxuICAgKiBAcmV0dXJucyBDZW50ZXJcclxuICAgKi9cclxuICBnZXRDZW50ZXIocHJvamVjdGlvbj86IHN0cmluZyB8IE9sUHJvamVjdGlvbik6IFtudW1iZXIsIG51bWJlcl0ge1xyXG4gICAgbGV0IGNlbnRlciA9IHRoaXMub2xWaWV3LmdldENlbnRlcigpIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICBpZiAocHJvamVjdGlvbiAmJiBjZW50ZXIpIHtcclxuICAgICAgY2VudGVyID0gb2xwcm9qLnRyYW5zZm9ybShjZW50ZXIsIHRoaXMuZ2V0T2xQcm9qZWN0aW9uKCksIHByb2plY3Rpb24pIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2VudGVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IHZpZXcgZXh0ZW50XHJcbiAgICogQHBhcmFtIHByb2plY3Rpb24gT3V0cHV0IHByb2plY3Rpb25cclxuICAgKiBAcmV0dXJucyBFeHRlbnRcclxuICAgKi9cclxuICBnZXRFeHRlbnQocHJvamVjdGlvbj86IHN0cmluZyB8IE9sUHJvamVjdGlvbik6IE1hcEV4dGVudCB7XHJcbiAgICBsZXQgZXh0ZW50ID0gdGhpcy5vbFZpZXcuY2FsY3VsYXRlRXh0ZW50KHRoaXMub2xNYXAuZ2V0U2l6ZSgpKTtcclxuICAgIGlmIChwcm9qZWN0aW9uICYmIGV4dGVudCkge1xyXG4gICAgICBleHRlbnQgPSBvbHByb2oudHJhbnNmb3JtRXh0ZW50KFxyXG4gICAgICAgIGV4dGVudCxcclxuICAgICAgICB0aGlzLmdldE9sUHJvamVjdGlvbigpLFxyXG4gICAgICAgIHByb2plY3Rpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBleHRlbnQgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGN1cnJlbnQgc2NhbGVcclxuICAgKiBAcGFyYW0gZHBpIERvdCBwZXIgaW5jaGVzXHJcbiAgICogQHJldHVybnMgVmlldyBzY2FsZVxyXG4gICAqL1xyXG4gIGdldFNjYWxlKGRwaSA9IDk2KSB7XHJcbiAgICByZXR1cm4gZ2V0U2NhbGVGcm9tUmVzb2x1dGlvbihcclxuICAgICAgdGhpcy5nZXRSZXNvbHV0aW9uKCksXHJcbiAgICAgIHRoaXMuZ2V0T2xQcm9qZWN0aW9uKCkuZ2V0VW5pdHMoKSxcclxuICAgICAgZHBpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IHJlc29sdXRpb25cclxuICAgKiBAcmV0dXJucyBQcm9qZWN0aW9uIGRlbm9taW5hdG9yXHJcbiAgICovXHJcbiAgZ2V0UmVzb2x1dGlvbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMub2xWaWV3LmdldFJlc29sdXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgY3VycmVudCB6b29tIGxldmVsXHJcbiAgICogQHJldHVybnMgWm9vbSBsZXZlbFxyXG4gICAqL1xyXG4gIGdldFpvb20oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMub2xWaWV3LmdldFpvb20oKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBab29tIGluXHJcbiAgICovXHJcbiAgem9vbUluKCkge1xyXG4gICAgdGhpcy56b29tVG8odGhpcy5vbFZpZXcuZ2V0Wm9vbSgpICsgMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBab29tIG91dFxyXG4gICAqL1xyXG4gIHpvb21PdXQoKSB7XHJcbiAgICB0aGlzLnpvb21Ubyh0aGlzLm9sVmlldy5nZXRab29tKCkgLSAxKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFpvb20gdG8gc3BlY2lmaWMgem9vbSBsZXZlbFxyXG4gICAqIEBwYXJhbSB6b29tIFpvb20gbGV2ZWxcclxuICAgKi9cclxuICB6b29tVG8oem9vbTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9sVmlldy5jYW5jZWxBbmltYXRpb25zKCk7XHJcbiAgICB0aGlzLm9sVmlldy5hbmltYXRlKHtcclxuICAgICAgem9vbSxcclxuICAgICAgZHVyYXRpb246IDI1MCxcclxuICAgICAgZWFzaW5nOiBvbGVhc2luZy5lYXNlT3V0XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmUgdG8gZXh0ZW50IGFmdGVyIGEgc2hvcnQgZGVsYXkgKDEwMG1zKSB1bmxlc3NcclxuICAgKiBhIG5ldyBtb3ZlbWVudCBnZXRzIHJlZ2lzdGVyZWQgaW4gdGhlIG1lYW50aW1lLlxyXG4gICAqIEBwYXJhbSBleHRlbnQgRXh0ZW50IHRvIG1vdmUgdG9cclxuICAgKi9cclxuICBtb3ZlVG9FeHRlbnQoZXh0ZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xyXG4gICAgdGhpcy5leHRlbnQkLm5leHQoeyBleHRlbnQsIGFjdGlvbjogTWFwVmlld0FjdGlvbi5Nb3ZlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogWm9vbSB0byBleHRlbnQgYWZ0ZXIgYSBzaG9ydCBkZWxheSAoMTAwbXMpIHVubGVzc1xyXG4gICAqIGEgbmV3IG1vdmVtZW50IGdldHMgcmVnaXN0ZXJlZCBpbiB0aGUgbWVhbnRpbWUuXHJcbiAgICogQHBhcmFtIGV4dGVudCBFeHRlbnQgdG8gem9vbSB0b1xyXG4gICAqL1xyXG4gIHpvb21Ub0V4dGVudChleHRlbnQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKSB7XHJcbiAgICB0aGlzLmV4dGVudCQubmV4dCh7IGV4dGVudCwgYWN0aW9uOiBNYXBWaWV3QWN0aW9uLlpvb20gfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdmlldyByb3RhdGlvblxyXG4gICAqIEByZXR1cm5zIFJvdGF0aW9uIGFuZ2xlIGluIHJhZGlhbnNcclxuICAgKi9cclxuICBnZXRSb3RhdGlvbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMub2xWaWV3LmdldFJvdGF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0aGUgdmlldyByb3RhdGlvbiB0byAwXHJcbiAgICovXHJcbiAgcmVzZXRSb3RhdGlvbigpIHtcclxuICAgIHRoaXMub2xWaWV3LmFuaW1hdGUoeyByb3RhdGlvbjogMCB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIHZpZXcgaGFzIGEgcHJldmlvdXMgc3RhdGVcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2aWV3IGhhcyBhIHByZXZpb3VzIHN0YXRlXHJcbiAgICovXHJcbiAgaGFzUHJldmlvdXNTdGF0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlcy5sZW5ndGggPiAxICYmIHRoaXMuc3RhdGVJbmRleCA+IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSB2aWV3IGhhcyBhIG5leHQgc3RhdGVcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2aWV3IGhhcyBhIG5leHQgc3RhdGVcclxuICAgKi9cclxuICBoYXNOZXh0U3RhdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXMubGVuZ3RoID4gMSAmJiB0aGlzLnN0YXRlSW5kZXggPCB0aGlzLnN0YXRlcy5sZW5ndGggLSAxO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdG9yZSB0aGUgcHJldmlvdXMgdmlldyBzdGF0ZVxyXG4gICAqL1xyXG4gIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5oYXNQcmV2aW91c1N0YXRlKCkpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZUluZGV4KHRoaXMuc3RhdGVJbmRleCAtIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdG9yZSB0aGUgbmV4dCB2aWV3IHN0YXRlXHJcbiAgICovXHJcbiAgbmV4dFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuaGFzTmV4dFN0YXRlKCkpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZUluZGV4KHRoaXMuc3RhdGVJbmRleCArIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgdGhlIHN0YXRlIGhpc3RvcnlcclxuICAgKi9cclxuICBjbGVhclN0YXRlSGlzdG9yeSgpIHtcclxuICAgIHRoaXMuc3RhdGVzID0gW107XHJcbiAgICB0aGlzLnN0YXRlSW5kZXggPSAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB0aGUgdmlldyB0byBpdCdzIGludGlhbCBzdGF0ZVxyXG4gICAqL1xyXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLnN0YXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGVJbmRleCgwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmUgdG8gdGhlIGV4dGVudCByZXRyaWV2ZWQgZnJvbSB0aGUgc3RyZWFtXHJcbiAgICogQHBhcmFtIGV4dGVudCBFeHRlbnRcclxuICAgKiBAcGFyYW0gYWN0aW9uIEVpdGhlciB6b29tIG9yIG1vdmVcclxuICAgKiBAcGFyYW0gYW5pbWF0aW9uIFdpdGggb3Igd2l0aG91dCBhbmltYXRpb24gdG8gdGhlIHRhcmdldCBleHRlbnQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRFeHRlbnQoXHJcbiAgICBleHRlbnQ6IE1hcEV4dGVudCxcclxuICAgIGFjdGlvbjogTWFwVmlld0FjdGlvbixcclxuICAgIGFuaW1hdGlvbjogYm9vbGVhbiA9IHRydWVcclxuICApIHtcclxuICAgIGNvbnN0IG9sVmlldyA9IHRoaXMub2xWaWV3O1xyXG4gICAgb2xWaWV3LmNhbmNlbEFuaW1hdGlvbnMoKTtcclxuICAgIGNvbnN0IGR1cmF0aW9uID0gYW5pbWF0aW9uID8gNTAwIDogMDtcclxuICAgIGNvbnN0IHpvb20gPSBvbFZpZXcuZ2V0Wm9vbSgpO1xyXG5cclxuICAgIGNvbnN0IGZyb21DZW50ZXIgPSBvbFZpZXcuZ2V0Q2VudGVyKCk7XHJcbiAgICBjb25zdCB0b0NlbnRlciA9IFtcclxuICAgICAgZXh0ZW50WzBdICsgKGV4dGVudFsyXSAtIGV4dGVudFswXSkgLyAyLFxyXG4gICAgICBleHRlbnRbMV0gKyAoZXh0ZW50WzNdIC0gZXh0ZW50WzFdKSAvIDJcclxuICAgIF07XHJcbiAgICBjb25zdCBkaXN0Q2VudGVyID0gTWF0aC5zcXJ0KFxyXG4gICAgICBNYXRoLnBvdyhmcm9tQ2VudGVyWzBdIC0gdG9DZW50ZXJbMF0sIDIpICtcclxuICAgICAgICBNYXRoLnBvdyhmcm9tQ2VudGVyWzFdIC0gdG9DZW50ZXJbMV0sIDIpXHJcbiAgICApO1xyXG4gICAgY29uc3QgZnJvbUV4dGVudCA9IG9sVmlldy5jYWxjdWxhdGVFeHRlbnQoKTtcclxuICAgIGNvbnN0IGZyb21TaXplID0gTWF0aC5zcXJ0KFxyXG4gICAgICBNYXRoLnBvdyhmcm9tRXh0ZW50WzJdIC0gZnJvbUV4dGVudFswXSwgMikgK1xyXG4gICAgICAgIE1hdGgucG93KGZyb21FeHRlbnRbM10gLSBmcm9tRXh0ZW50WzFdLCAyKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvU2l6ZSA9IE1hdGguc3FydChcclxuICAgICAgTWF0aC5wb3coZXh0ZW50WzJdIC0gZXh0ZW50WzBdLCAyKSArIE1hdGgucG93KGV4dGVudFszXSAtIGV4dGVudFsxXSwgMilcclxuICAgICk7XHJcbiAgICBjb25zdCBtb3lTaXplID0gKHRvU2l6ZSArIGZyb21TaXplKSAvIDI7XHJcbiAgICBjb25zdCB4U2l6ZSA9IGRpc3RDZW50ZXIgLyBtb3lTaXplO1xyXG5cclxuICAgIGNvbnN0IG1heFpvb20gPVxyXG4gICAgICBhY3Rpb24gPT09IE1hcFZpZXdBY3Rpb24uTW92ZSB8fCB6b29tID4gdGhpcy5tYXhab29tT25FeHRlbnRcclxuICAgICAgICA/IHpvb21cclxuICAgICAgICA6IHRoaXMubWF4Wm9vbU9uRXh0ZW50O1xyXG5cclxuICAgIG9sVmlldy5maXQoZXh0ZW50LCB7XHJcbiAgICAgIHNpemU6IHRoaXMub2xNYXAuZ2V0U2l6ZSgpLFxyXG4gICAgICBtYXhab29tLFxyXG4gICAgICBwYWRkaW5nOiB0aGlzLnBhZGRpbmcsXHJcbiAgICAgIGR1cmF0aW9uOiB4U2l6ZSA+IDQgPyAwIDogZHVyYXRpb24sXHJcbiAgICAgIGNhbGxiYWNrOiAoaXNGaW5pc2hlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmICghaXNGaW5pc2hlZCkge1xyXG4gICAgICAgICAgb2xWaWV3LmZpdChleHRlbnQsIHtcclxuICAgICAgICAgICAgc2l6ZTogdGhpcy5vbE1hcC5nZXRTaXplKCksXHJcbiAgICAgICAgICAgIG1heFpvb20sXHJcbiAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMucGFkZGluZyxcclxuICAgICAgICAgICAgZHVyYXRpb246IHhTaXplID4gNCA/IDAgOiBkdXJhdGlvblxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgdmlldyBzdGF0ZSBpbmRleFxyXG4gICAqIEBwYXJhbSBpbmRleCBTdGF0ZSBpbmRleFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0U3RhdGVJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN0YXRlSW5kZXggPSBpbmRleDtcclxuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZXNbaW5kZXhdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgdmlldyBzdGF0ZVxyXG4gICAqIEBwYXJhbSBzdGF0ZSBWaWV3IHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRTdGF0ZShzdGF0ZTogTWFwVmlld1N0YXRlKSB7XHJcbiAgICB0aGlzLm9sVmlldy5hbmltYXRlKHtcclxuICAgICAgcmVzb2x1dGlvbjogc3RhdGUucmVzb2x1dGlvbixcclxuICAgICAgY2VudGVyOiBzdGF0ZS5jZW50ZXIsXHJcbiAgICAgIGR1cmF0aW9uOiAwXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIG1vdmUgZW5kLCBnZXQgdGhlIHZpZXcgc3RhdGUgYW5kIHJlY29yZCBpdC5cclxuICAgKiBAcGFyYW0gZXZlbnQgTWFwIGV2ZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbk1vdmVFbmQoZXZlbnQ6IE9sTWFwRXZlbnQpIHtcclxuICAgIGNvbnN0IHJlc29sdXRpb24gPSB0aGlzLmdldFJlc29sdXRpb24oKTtcclxuICAgIGlmICh0aGlzLnJlc29sdXRpb24kLnZhbHVlICE9PSByZXNvbHV0aW9uKSB7XHJcbiAgICAgIHRoaXMucmVzb2x1dGlvbiQubmV4dChyZXNvbHV0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0ZSA9IHtcclxuICAgICAgcmVzb2x1dGlvbixcclxuICAgICAgY2VudGVyOiB0aGlzLmdldENlbnRlcigpLFxyXG4gICAgICB6b29tOiB0aGlzLmdldFpvb20oKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5zdGF0ZUhpc3RvcnkgPT09IHRydWUpIHtcclxuICAgICAgY29uc3Qgc3RhdGVJbmRleCA9IHRoaXMuc3RhdGVJbmRleDtcclxuICAgICAgY29uc3Qgc3RhdGVBdEluZGV4ID1cclxuICAgICAgICB0aGlzLnN0YXRlcy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLnN0YXRlc1tzdGF0ZUluZGV4XTtcclxuICAgICAgaWYgKCF2aWV3U3RhdGVzQXJlRXF1YWwoc3RhdGUsIHN0YXRlQXRJbmRleCkpIHtcclxuICAgICAgICB0aGlzLnN0YXRlcyA9IHRoaXMuc3RhdGVzLnNsaWNlKDAsIHN0YXRlSW5kZXggKyAxKS5jb25jYXQoW3N0YXRlXSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZUluZGV4ID0gdGhpcy5zdGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhdGUkLm5leHQoc3RhdGUpO1xyXG4gIH1cclxufVxyXG4iXX0=