@igo2/geo 1.14.1 → 1.14.3

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 (871) hide show
  1. package/esm2020/igo2-geo.mjs +4 -4
  2. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +301 -299
  3. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +306 -268
  4. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +247 -247
  5. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +79 -79
  6. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +208 -208
  7. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +78 -78
  8. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +216 -216
  9. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +94 -94
  10. package/esm2020/lib/catalog/catalog.module.mjs +52 -52
  11. package/esm2020/lib/catalog/index.mjs +4 -4
  12. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +94 -94
  13. package/esm2020/lib/catalog/shared/catalog.enum.mjs +15 -15
  14. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  15. package/esm2020/lib/catalog/shared/catalog.service.mjs +605 -605
  16. package/esm2020/lib/catalog/shared/index.mjs +4 -4
  17. package/esm2020/lib/datasource/datasource.module.mjs +21 -21
  18. package/esm2020/lib/datasource/index.mjs +2 -2
  19. package/esm2020/lib/datasource/shared/capabilities.service.mjs +430 -430
  20. package/esm2020/lib/datasource/shared/datasource.service.mjs +235 -235
  21. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  22. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +144 -144
  25. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +108 -108
  27. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +14 -14
  29. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +2 -2
  30. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +28 -28
  32. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +42 -42
  34. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +56 -56
  36. package/esm2020/lib/datasource/shared/datasources/index.mjs +35 -35
  37. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +27 -27
  39. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +11 -11
  41. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +48 -48
  43. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +14 -14
  45. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +53 -53
  47. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +71 -71
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +151 -151
  50. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -205
  52. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +206 -206
  53. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +15 -15
  55. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +8 -8
  57. package/esm2020/lib/datasource/shared/index.mjs +4 -4
  58. package/esm2020/lib/datasource/shared/options/index.mjs +4 -4
  59. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
  60. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +14 -14
  61. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +80 -80
  62. package/esm2020/lib/datasource/shared/options/options.service.mjs +2 -2
  63. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +356 -356
  64. package/esm2020/lib/datasource/utils/index.mjs +2 -2
  65. package/esm2020/lib/datasource/utils/tilegrid.mjs +19 -19
  66. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +223 -223
  67. package/esm2020/lib/directions/directions-buttons/index.mjs +1 -1
  68. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +289 -289
  69. package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
  70. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +195 -195
  71. package/esm2020/lib/directions/directions-results/index.mjs +1 -1
  72. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  73. package/esm2020/lib/directions/directions-sources/directions-source.mjs +2 -2
  74. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +15 -15
  75. package/esm2020/lib/directions/directions-sources/index.mjs +4 -4
  76. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +98 -98
  77. package/esm2020/lib/directions/directions.component.mjs +310 -310
  78. package/esm2020/lib/directions/directions.module.mjs +101 -101
  79. package/esm2020/lib/directions/index.mjs +6 -6
  80. package/esm2020/lib/directions/shared/directions-source.service.mjs +16 -16
  81. package/esm2020/lib/directions/shared/directions.enum.mjs +27 -27
  82. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  83. package/esm2020/lib/directions/shared/directions.service.mjs +28 -28
  84. package/esm2020/lib/directions/shared/directions.utils.mjs +508 -508
  85. package/esm2020/lib/directions/shared/index.mjs +5 -5
  86. package/esm2020/lib/directions/shared/store.mjs +23 -23
  87. package/esm2020/lib/download/download-button/download-button.component.mjs +60 -60
  88. package/esm2020/lib/download/download-button/index.mjs +1 -1
  89. package/esm2020/lib/download/download.module.mjs +41 -41
  90. package/esm2020/lib/download/index.mjs +2 -2
  91. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  92. package/esm2020/lib/download/shared/download.service.mjs +64 -64
  93. package/esm2020/lib/download/shared/index.mjs +2 -2
  94. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +54 -54
  95. package/esm2020/lib/draw/draw/draw-popup.component.mjs +590 -590
  96. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +47 -47
  97. package/esm2020/lib/draw/draw/draw.component.mjs +1298 -1298
  98. package/esm2020/lib/draw/draw/draw.module.mjs +112 -112
  99. package/esm2020/lib/draw/drawingTool.module.mjs +19 -19
  100. package/esm2020/lib/draw/index.mjs +2 -2
  101. package/esm2020/lib/draw/shared/draw-icon.service.mjs +26 -26
  102. package/esm2020/lib/draw/shared/draw-style.service.mjs +189 -189
  103. package/esm2020/lib/draw/shared/draw.enum.mjs +36 -36
  104. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  105. package/esm2020/lib/draw/shared/draw.utils.mjs +121 -121
  106. package/esm2020/lib/draw/shared/index.mjs +5 -5
  107. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +404 -404
  108. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +53 -53
  109. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +47 -47
  110. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +111 -111
  111. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +33 -33
  112. package/esm2020/lib/feature/feature.module.mjs +27 -27
  113. package/esm2020/lib/feature/index.mjs +3 -3
  114. package/esm2020/lib/feature/shared/feature.enums.mjs +8 -8
  115. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  116. package/esm2020/lib/feature/shared/feature.utils.mjs +346 -346
  117. package/esm2020/lib/feature/shared/index.mjs +6 -6
  118. package/esm2020/lib/feature/shared/store.mjs +123 -123
  119. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +112 -112
  120. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +93 -93
  121. package/esm2020/lib/feature/shared/strategies/index.mjs +5 -5
  122. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +103 -103
  123. package/esm2020/lib/feature/shared/strategies/loading.mjs +132 -132
  124. package/esm2020/lib/feature/shared/strategies/selection.mjs +369 -369
  125. package/esm2020/lib/feature/shared/strategies.utils.mjs +36 -36
  126. package/esm2020/lib/filter/filter.module.mjs +288 -288
  127. package/esm2020/lib/filter/index.mjs +15 -15
  128. package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
  129. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +139 -139
  130. package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
  131. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +644 -644
  132. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
  133. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1301 -1301
  134. package/esm2020/lib/filter/ogc-filter-time/index.mjs +2 -2
  135. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +176 -176
  136. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +897 -897
  137. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
  138. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +58 -58
  139. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
  140. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +306 -306
  141. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +2 -2
  142. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +30 -30
  143. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +43 -43
  144. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +54 -54
  145. package/esm2020/lib/filter/shared/index.mjs +11 -11
  146. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +71 -71
  147. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +29 -29
  148. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  149. package/esm2020/lib/filter/shared/ogc-filter.mjs +691 -691
  150. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +45 -45
  151. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +22 -22
  152. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
  153. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +268 -268
  154. package/esm2020/lib/filter/shared/time-filter.enum.mjs +12 -12
  155. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  156. package/esm2020/lib/filter/shared/time-filter.service.mjs +106 -106
  157. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
  158. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1088 -1088
  159. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
  160. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +207 -207
  161. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
  162. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +143 -143
  163. package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
  164. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +77 -77
  165. package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
  166. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +733 -733
  167. package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
  168. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +118 -118
  169. package/esm2020/lib/filter/time-filter-list/index.mjs +2 -2
  170. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +30 -30
  171. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +38 -38
  172. package/esm2020/lib/geo.module.mjs +101 -101
  173. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +520 -520
  174. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +188 -188
  175. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +63 -63
  176. package/esm2020/lib/geometry/geometry.module.mjs +26 -26
  177. package/esm2020/lib/geometry/index.mjs +3 -3
  178. package/esm2020/lib/geometry/shared/controls/draw.mjs +313 -313
  179. package/esm2020/lib/geometry/shared/controls/index.mjs +3 -3
  180. package/esm2020/lib/geometry/shared/controls/modify.mjs +520 -520
  181. package/esm2020/lib/geometry/shared/controls/slice.mjs +176 -176
  182. package/esm2020/lib/geometry/shared/geometry.errors.mjs +25 -25
  183. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  184. package/esm2020/lib/geometry/shared/geometry.utils.mjs +121 -121
  185. package/esm2020/lib/geometry/shared/index.mjs +4 -4
  186. package/esm2020/lib/import-export/export-button/export-button.component.mjs +63 -63
  187. package/esm2020/lib/import-export/export-button/index.mjs +1 -1
  188. package/esm2020/lib/import-export/import-export/import-export.component.mjs +1219 -1219
  189. package/esm2020/lib/import-export/import-export/index.mjs +1 -1
  190. package/esm2020/lib/import-export/import-export.module.mjs +95 -95
  191. package/esm2020/lib/import-export/index.mjs +4 -4
  192. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +134 -134
  193. package/esm2020/lib/import-export/shared/export.errors.mjs +14 -14
  194. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  195. package/esm2020/lib/import-export/shared/export.service.mjs +195 -195
  196. package/esm2020/lib/import-export/shared/export.type.mjs +3 -3
  197. package/esm2020/lib/import-export/shared/export.utils.mjs +54 -54
  198. package/esm2020/lib/import-export/shared/import.errors.mjs +38 -38
  199. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  200. package/esm2020/lib/import-export/shared/import.service.mjs +214 -214
  201. package/esm2020/lib/import-export/shared/import.utils.mjs +234 -234
  202. package/esm2020/lib/import-export/shared/index.mjs +10 -10
  203. package/esm2020/lib/import-export/style-list/index.mjs +4 -4
  204. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
  205. package/esm2020/lib/import-export/style-list/style-list.module.mjs +22 -22
  206. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +20 -20
  207. package/esm2020/lib/import-export/style-list/style-list.service.mjs +50 -50
  208. package/esm2020/lib/layer/index.mjs +10 -10
  209. package/esm2020/lib/layer/layer-item/index.mjs +1 -1
  210. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +299 -299
  211. package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
  212. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +387 -387
  213. package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
  214. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +83 -83
  215. package/esm2020/lib/layer/layer-legend-list/index.mjs +2 -2
  216. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +47 -47
  217. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +194 -194
  218. package/esm2020/lib/layer/layer-list/index.mjs +3 -3
  219. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +58 -58
  220. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1008 -1008
  221. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +18 -18
  222. package/esm2020/lib/layer/layer-list-tool/index.mjs +4 -4
  223. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +164 -164
  224. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +6 -6
  225. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  226. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +21 -21
  227. package/esm2020/lib/layer/layer.module.mjs +184 -184
  228. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  229. package/esm2020/lib/layer/shared/index.mjs +6 -6
  230. package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
  231. package/esm2020/lib/layer/shared/layer.service.mjs +185 -185
  232. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  233. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  234. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  235. package/esm2020/lib/layer/shared/layers/image-layer.mjs +67 -67
  236. package/esm2020/lib/layer/shared/layers/index.mjs +12 -12
  237. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +17 -17
  238. package/esm2020/lib/layer/shared/layers/layer.mjs +163 -163
  239. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  240. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +46 -46
  241. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  242. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +377 -377
  243. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  244. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +103 -103
  245. package/esm2020/lib/layer/shared/style.service.mjs +355 -355
  246. package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
  247. package/esm2020/lib/layer/style-modal/index.mjs +1 -1
  248. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +287 -287
  249. package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
  250. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +58 -58
  251. package/esm2020/lib/layer/utils/image-watcher.mjs +61 -61
  252. package/esm2020/lib/layer/utils/index.mjs +5 -5
  253. package/esm2020/lib/layer/utils/layer.utils.mjs +9 -9
  254. package/esm2020/lib/layer/utils/outputLegend.mjs +26 -26
  255. package/esm2020/lib/layer/utils/tile-watcher.mjs +49 -49
  256. package/esm2020/lib/layer/utils/vector-watcher.mjs +47 -47
  257. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +19 -19
  258. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +96 -96
  259. package/esm2020/lib/map/baselayers-switcher/index.mjs +2 -2
  260. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +141 -133
  261. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +78 -78
  262. package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
  263. package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +62 -62
  264. package/esm2020/lib/map/home-extent-button/index.mjs +1 -1
  265. package/esm2020/lib/map/index.mjs +13 -13
  266. package/esm2020/lib/map/info-section/index.mjs +1 -1
  267. package/esm2020/lib/map/info-section/info-section.component.mjs +29 -29
  268. package/esm2020/lib/map/map-browser/index.mjs +1 -1
  269. package/esm2020/lib/map/map-browser/map-browser.component.mjs +65 -65
  270. package/esm2020/lib/map/map-center/index.mjs +1 -1
  271. package/esm2020/lib/map/map-center/map-center.component.mjs +49 -49
  272. package/esm2020/lib/map/map.module.mjs +126 -126
  273. package/esm2020/lib/map/menu-button/index.mjs +1 -1
  274. package/esm2020/lib/map/menu-button/menu-button.component.mjs +61 -61
  275. package/esm2020/lib/map/offline-button/index.mjs +1 -1
  276. package/esm2020/lib/map/offline-button/offline-button.component.mjs +75 -75
  277. package/esm2020/lib/map/rotation-button/index.mjs +1 -1
  278. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +69 -69
  279. package/esm2020/lib/map/shared/controllers/controller.mjs +41 -41
  280. package/esm2020/lib/map/shared/controllers/geolocation.mjs +307 -307
  281. package/esm2020/lib/map/shared/controllers/index.mjs +3 -3
  282. package/esm2020/lib/map/shared/controllers/view.mjs +350 -350
  283. package/esm2020/lib/map/shared/hover-feature.directive.mjs +502 -502
  284. package/esm2020/lib/map/shared/index.mjs +13 -13
  285. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +237 -237
  286. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +106 -106
  287. package/esm2020/lib/map/shared/map.enums.mjs +5 -5
  288. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  289. package/esm2020/lib/map/shared/map.mjs +406 -406
  290. package/esm2020/lib/map/shared/map.service.mjs +28 -28
  291. package/esm2020/lib/map/shared/map.utils.mjs +463 -462
  292. package/esm2020/lib/map/shared/mapOffline.directive.mjs +162 -162
  293. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  294. package/esm2020/lib/map/shared/projection.service.mjs +64 -64
  295. package/esm2020/lib/map/shared/projection.utils.mjs +63 -63
  296. package/esm2020/lib/map/swipe-control/index.mjs +1 -1
  297. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +192 -192
  298. package/esm2020/lib/map/utils/layer-watcher.mjs +78 -78
  299. package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
  300. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +113 -113
  301. package/esm2020/lib/map/zoom-button/index.mjs +1 -1
  302. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +39 -39
  303. package/esm2020/lib/measure/index.mjs +3 -3
  304. package/esm2020/lib/measure/measure.module.mjs +19 -19
  305. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +36 -36
  306. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +179 -179
  307. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +139 -139
  308. package/esm2020/lib/measure/measurer/measurer.component.mjs +1041 -1041
  309. package/esm2020/lib/measure/measurer/measurer.module.mjs +93 -93
  310. package/esm2020/lib/measure/shared/index.mjs +3 -3
  311. package/esm2020/lib/measure/shared/measure.enum.mjs +36 -36
  312. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  313. package/esm2020/lib/measure/shared/measure.utils.mjs +488 -488
  314. package/esm2020/lib/metadata/index.mjs +2 -2
  315. package/esm2020/lib/metadata/metadata-button/index.mjs +1 -1
  316. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +133 -133
  317. package/esm2020/lib/metadata/metadata.module.mjs +54 -54
  318. package/esm2020/lib/metadata/shared/index.mjs +2 -2
  319. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  320. package/esm2020/lib/metadata/shared/metadata.service.mjs +18 -18
  321. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +104 -104
  322. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +5 -5
  323. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  324. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +166 -166
  325. package/esm2020/lib/offline/geoDB/index.mjs +4 -4
  326. package/esm2020/lib/offline/index.mjs +2 -2
  327. package/esm2020/lib/offline/shared/geo-network.service.mjs +65 -65
  328. package/esm2020/lib/offline/shared/index.mjs +1 -1
  329. package/esm2020/lib/overlay/index.mjs +1 -1
  330. package/esm2020/lib/overlay/overlay.module.mjs +22 -22
  331. package/esm2020/lib/overlay/shared/index.mjs +6 -6
  332. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +68 -68
  333. package/esm2020/lib/overlay/shared/overlay.directive.mjs +32 -32
  334. package/esm2020/lib/overlay/shared/overlay.enum.mjs +7 -7
  335. package/esm2020/lib/overlay/shared/overlay.mjs +129 -129
  336. package/esm2020/lib/overlay/shared/overlay.service.mjs +26 -26
  337. package/esm2020/lib/overlay/shared/overlay.utils.mjs +102 -102
  338. package/esm2020/lib/print/index.mjs +3 -3
  339. package/esm2020/lib/print/print/print.component.mjs +126 -123
  340. package/esm2020/lib/print/print-form/index.mjs +1 -1
  341. package/esm2020/lib/print/print-form/print-form.component.mjs +428 -405
  342. package/esm2020/lib/print/print.module.mjs +64 -64
  343. package/esm2020/lib/print/shared/geopdf.mjs +57 -57
  344. package/esm2020/lib/print/shared/index.mjs +4 -4
  345. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  346. package/esm2020/lib/print/shared/print.service.mjs +934 -861
  347. package/esm2020/lib/print/shared/print.type.mjs +29 -29
  348. package/esm2020/lib/query/index.mjs +1 -1
  349. package/esm2020/lib/query/query.module.mjs +28 -28
  350. package/esm2020/lib/query/shared/index.mjs +6 -6
  351. package/esm2020/lib/query/shared/query-search-source.mjs +34 -34
  352. package/esm2020/lib/query/shared/query-search-source.providers.mjs +21 -21
  353. package/esm2020/lib/query/shared/query.directive.mjs +260 -260
  354. package/esm2020/lib/query/shared/query.enums.mjs +29 -29
  355. package/esm2020/lib/query/shared/query.interfaces.mjs +2 -2
  356. package/esm2020/lib/query/shared/query.service.mjs +733 -619
  357. package/esm2020/lib/query/shared/query.utils.mjs +36 -36
  358. package/esm2020/lib/search/index.mjs +11 -11
  359. package/esm2020/lib/search/search-bar/search-bar.component.mjs +512 -493
  360. package/esm2020/lib/search/search-bar/search-bar.module.mjs +74 -74
  361. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +34 -34
  362. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +118 -0
  363. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +371 -193
  364. package/esm2020/lib/search/search-results/search-results-item.component.mjs +124 -124
  365. package/esm2020/lib/search/search-results/search-results.component.mjs +340 -340
  366. package/esm2020/lib/search/search-results/search-results.module.mjs +104 -77
  367. package/esm2020/lib/search/search-selector/search-selector.component.mjs +122 -122
  368. package/esm2020/lib/search/search-selector/search-selector.module.mjs +55 -55
  369. package/esm2020/lib/search/search-settings/search-settings.component.mjs +442 -418
  370. package/esm2020/lib/search/search-settings/search-settings.module.mjs +59 -59
  371. package/esm2020/lib/search/search.module.mjs +66 -66
  372. package/esm2020/lib/search/shared/index.mjs +8 -8
  373. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +321 -321
  374. package/esm2020/lib/search/shared/search-source-service.providers.mjs +19 -19
  375. package/esm2020/lib/search/shared/search-source.service.mjs +46 -46
  376. package/esm2020/lib/search/shared/search.enums.mjs +3 -3
  377. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  378. package/esm2020/lib/search/shared/search.service.mjs +121 -118
  379. package/esm2020/lib/search/shared/search.utils.mjs +90 -90
  380. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  381. package/esm2020/lib/search/shared/sources/coordinates.mjs +153 -147
  382. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +39 -39
  383. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  384. package/esm2020/lib/search/shared/sources/icherche.mjs +767 -767
  385. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +65 -65
  386. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  387. package/esm2020/lib/search/shared/sources/ilayer.mjs +320 -320
  388. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +39 -39
  389. package/esm2020/lib/search/shared/sources/index.mjs +17 -17
  390. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
  391. package/esm2020/lib/search/shared/sources/nominatim.mjs +251 -251
  392. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +22 -22
  393. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  394. package/esm2020/lib/search/shared/sources/source.mjs +179 -179
  395. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  396. package/esm2020/lib/search/shared/sources/storedqueries.mjs +424 -424
  397. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +40 -40
  398. package/esm2020/lib/toast/index.mjs +1 -1
  399. package/esm2020/lib/toast/toast.component.mjs +112 -112
  400. package/esm2020/lib/toast/toast.module.mjs +44 -44
  401. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
  402. package/esm2020/lib/utils/commonVectorStyle.mjs +74 -74
  403. package/esm2020/lib/utils/googleLinks.mjs +12 -12
  404. package/esm2020/lib/utils/id-generator.mjs +109 -109
  405. package/esm2020/lib/utils/index.mjs +5 -5
  406. package/esm2020/lib/utils/osmLinks.mjs +9 -9
  407. package/esm2020/lib/wkt/index.mjs +1 -1
  408. package/esm2020/lib/wkt/shared/index.mjs +1 -1
  409. package/esm2020/lib/wkt/shared/wkt.service.mjs +224 -224
  410. package/esm2020/lib/wkt/wkt.module.mjs +21 -21
  411. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +47 -47
  412. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +35 -35
  413. package/esm2020/lib/workspace/confirmation-popup/index.mjs +2 -2
  414. package/esm2020/lib/workspace/index.mjs +7 -7
  415. package/esm2020/lib/workspace/shared/edition-workspace.mjs +279 -279
  416. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +656 -656
  417. package/esm2020/lib/workspace/shared/feature-workspace.mjs +34 -34
  418. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +149 -149
  419. package/esm2020/lib/workspace/shared/index.mjs +7 -7
  420. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +34 -34
  421. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +149 -149
  422. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +259 -259
  423. package/esm2020/lib/workspace/shared/workspace.utils.mjs +23 -23
  424. package/esm2020/lib/workspace/widgets/index.mjs +3 -3
  425. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +46 -46
  426. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +35 -35
  427. package/esm2020/lib/workspace/widgets/widgets.mjs +14 -14
  428. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +132 -132
  429. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +27 -27
  430. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +112 -112
  431. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +27 -27
  432. package/esm2020/lib/workspace/workspace.module.mjs +61 -61
  433. package/esm2020/public_api.mjs +54 -54
  434. package/fesm2015/igo2-geo.mjs +44993 -44364
  435. package/fesm2015/igo2-geo.mjs.map +1 -1
  436. package/fesm2020/igo2-geo.mjs +43075 -42470
  437. package/fesm2020/igo2-geo.mjs.map +1 -1
  438. package/index.d.ts +5 -5
  439. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +126 -124
  440. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +80 -73
  441. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +105 -105
  442. package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +22 -22
  443. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +45 -45
  444. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +25 -25
  445. package/lib/catalog/catalog-library/catalog-library.component.d.ts +65 -65
  446. package/lib/catalog/catalog-library/catalog-library.module.d.ts +26 -26
  447. package/lib/catalog/catalog.module.d.ts +14 -14
  448. package/lib/catalog/index.d.ts +4 -4
  449. package/lib/catalog/shared/catalog.abstract.d.ts +50 -50
  450. package/lib/catalog/shared/catalog.enum.d.ts +14 -14
  451. package/lib/catalog/shared/catalog.interface.d.ts +66 -66
  452. package/lib/catalog/shared/catalog.service.d.ts +36 -36
  453. package/lib/catalog/shared/index.d.ts +4 -4
  454. package/lib/datasource/datasource.module.d.ts +8 -8
  455. package/lib/datasource/index.d.ts +2 -2
  456. package/lib/datasource/shared/capabilities.service.d.ts +37 -37
  457. package/lib/datasource/shared/datasource.service.d.ts +37 -37
  458. package/lib/datasource/shared/datasources/any-datasource.d.ts +16 -16
  459. package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +15 -15
  460. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +14 -14
  461. package/lib/datasource/shared/datasources/arcgisrest-datasource.interface.d.ts +14 -14
  462. package/lib/datasource/shared/datasources/carto-datasource.d.ts +15 -15
  463. package/lib/datasource/shared/datasources/carto-datasource.interface.d.ts +13 -13
  464. package/lib/datasource/shared/datasources/cluster-datasource.d.ts +10 -10
  465. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +11 -11
  466. package/lib/datasource/shared/datasources/data.service.d.ts +3 -3
  467. package/lib/datasource/shared/datasources/datasource.d.ts +20 -20
  468. package/lib/datasource/shared/datasources/datasource.interface.d.ts +100 -100
  469. package/lib/datasource/shared/datasources/feature-datasource.d.ts +12 -12
  470. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +18 -18
  471. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.d.ts +15 -15
  472. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +15 -15
  473. package/lib/datasource/shared/datasources/index.d.ts +35 -35
  474. package/lib/datasource/shared/datasources/mvt-datasource.d.ts +10 -10
  475. package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +13 -13
  476. package/lib/datasource/shared/datasources/osm-datasource.d.ts +9 -9
  477. package/lib/datasource/shared/datasources/osm-datasource.interface.d.ts +7 -7
  478. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.d.ts +15 -15
  479. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.d.ts +14 -14
  480. package/lib/datasource/shared/datasources/tiledebug-datasource.d.ts +9 -9
  481. package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +9 -9
  482. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +15 -15
  483. package/lib/datasource/shared/datasources/websocket-datasource.interface.d.ts +7 -7
  484. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +20 -20
  485. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +20 -20
  486. package/lib/datasource/shared/datasources/wfs.service.d.ts +17 -17
  487. package/lib/datasource/shared/datasources/wms-datasource.d.ts +31 -31
  488. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +32 -32
  489. package/lib/datasource/shared/datasources/wms-wfs.utils.d.ts +41 -41
  490. package/lib/datasource/shared/datasources/wmts-datasource.d.ts +10 -10
  491. package/lib/datasource/shared/datasources/wmts-datasource.interface.d.ts +13 -13
  492. package/lib/datasource/shared/datasources/xyz-datasource.d.ts +9 -9
  493. package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +11 -11
  494. package/lib/datasource/shared/index.d.ts +4 -4
  495. package/lib/datasource/shared/options/index.d.ts +4 -4
  496. package/lib/datasource/shared/options/options-api.interface.d.ts +4 -4
  497. package/lib/datasource/shared/options/options-api.providers.d.ts +10 -10
  498. package/lib/datasource/shared/options/options-api.service.d.ts +16 -16
  499. package/lib/datasource/shared/options/options.service.d.ts +6 -6
  500. package/lib/datasource/utils/esri-style-generator.d.ts +21 -21
  501. package/lib/datasource/utils/index.d.ts +2 -2
  502. package/lib/datasource/utils/tilegrid.d.ts +2 -2
  503. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +30 -30
  504. package/lib/directions/directions-buttons/index.d.ts +1 -1
  505. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +45 -45
  506. package/lib/directions/directions-inputs/index.d.ts +1 -1
  507. package/lib/directions/directions-results/directions-results.component.d.ts +30 -30
  508. package/lib/directions/directions-results/index.d.ts +1 -1
  509. package/lib/directions/directions-sources/directions-source.d.ts +7 -7
  510. package/lib/directions/directions-sources/directions-source.interface.d.ts +11 -11
  511. package/lib/directions/directions-sources/directions-source.provider.d.ts +11 -11
  512. package/lib/directions/directions-sources/index.d.ts +4 -4
  513. package/lib/directions/directions-sources/osrm-directions-source.d.ts +23 -23
  514. package/lib/directions/directions.component.d.ts +56 -56
  515. package/lib/directions/directions.module.d.ts +26 -26
  516. package/lib/directions/index.d.ts +6 -6
  517. package/lib/directions/shared/directions-source.service.d.ts +11 -11
  518. package/lib/directions/shared/directions.enum.d.ts +22 -22
  519. package/lib/directions/shared/directions.interface.d.ts +126 -126
  520. package/lib/directions/shared/directions.service.d.ts +13 -13
  521. package/lib/directions/shared/directions.utils.d.ts +42 -42
  522. package/lib/directions/shared/index.d.ts +5 -5
  523. package/lib/directions/shared/store.d.ts +18 -18
  524. package/lib/download/download-button/download-button.component.d.ts +18 -18
  525. package/lib/download/download-button/index.d.ts +1 -1
  526. package/lib/download/download.module.d.ts +14 -14
  527. package/lib/download/index.d.ts +2 -2
  528. package/lib/download/shared/download.interface.d.ts +10 -10
  529. package/lib/download/shared/download.service.d.ts +11 -11
  530. package/lib/download/shared/index.d.ts +2 -2
  531. package/lib/draw/draw/draw-layer-popup.component.d.ts +14 -14
  532. package/lib/draw/draw/draw-popup.component.d.ts +63 -63
  533. package/lib/draw/draw/draw-shorcuts.component.d.ts +5 -5
  534. package/lib/draw/draw/draw.component.d.ts +239 -239
  535. package/lib/draw/draw/draw.module.d.ts +34 -34
  536. package/lib/draw/drawingTool.module.d.ts +7 -7
  537. package/lib/draw/index.d.ts +2 -2
  538. package/lib/draw/shared/draw-icon.service.d.ts +12 -12
  539. package/lib/draw/shared/draw-style.service.d.ts +36 -36
  540. package/lib/draw/shared/draw.enum.d.ts +32 -32
  541. package/lib/draw/shared/draw.interface.d.ts +40 -40
  542. package/lib/draw/shared/draw.utils.d.ts +35 -35
  543. package/lib/draw/shared/index.d.ts +5 -5
  544. package/lib/feature/feature-details/feature-details.component.d.ts +60 -60
  545. package/lib/feature/feature-details/feature-details.directive.d.ts +19 -19
  546. package/lib/feature/feature-details/feature-details.module.d.ts +15 -15
  547. package/lib/feature/feature-form/feature-form.component.d.ts +50 -50
  548. package/lib/feature/feature-form/feature-form.module.d.ts +12 -12
  549. package/lib/feature/feature.module.d.ts +9 -9
  550. package/lib/feature/index.d.ts +3 -3
  551. package/lib/feature/shared/feature.enums.d.ts +7 -7
  552. package/lib/feature/shared/feature.interfaces.d.ts +74 -74
  553. package/lib/feature/shared/feature.utils.d.ts +104 -104
  554. package/lib/feature/shared/index.d.ts +6 -6
  555. package/lib/feature/shared/store.d.ts +71 -71
  556. package/lib/feature/shared/strategies/in-map-extent.d.ts +52 -52
  557. package/lib/feature/shared/strategies/in-map-resolution.d.ts +52 -52
  558. package/lib/feature/shared/strategies/index.d.ts +5 -5
  559. package/lib/feature/shared/strategies/loading-layer.d.ts +59 -59
  560. package/lib/feature/shared/strategies/loading.d.ts +75 -75
  561. package/lib/feature/shared/strategies/selection.d.ts +176 -176
  562. package/lib/feature/shared/strategies.utils.d.ts +17 -17
  563. package/lib/filter/filter.module.d.ts +53 -53
  564. package/lib/filter/index.d.ts +15 -15
  565. package/lib/filter/ogc-filter-button/index.d.ts +1 -1
  566. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +20 -20
  567. package/lib/filter/ogc-filter-form/index.d.ts +1 -1
  568. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +65 -65
  569. package/lib/filter/ogc-filter-selection/index.d.ts +1 -1
  570. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +93 -93
  571. package/lib/filter/ogc-filter-time/index.d.ts +2 -2
  572. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +39 -39
  573. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +86 -86
  574. package/lib/filter/ogc-filterable-form/index.d.ts +1 -1
  575. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +15 -15
  576. package/lib/filter/ogc-filterable-item/index.d.ts +1 -1
  577. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +41 -41
  578. package/lib/filter/ogc-filterable-list/index.d.ts +2 -2
  579. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +14 -14
  580. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +10 -10
  581. package/lib/filter/shared/filterable-datasource.pipe.d.ts +10 -10
  582. package/lib/filter/shared/index.d.ts +11 -11
  583. package/lib/filter/shared/ogc-filter-time.service.d.ts +19 -19
  584. package/lib/filter/shared/ogc-filter.d.ts +29 -29
  585. package/lib/filter/shared/ogc-filter.enum.d.ts +27 -27
  586. package/lib/filter/shared/ogc-filter.interface.d.ts +200 -200
  587. package/lib/filter/shared/ogc-filter.service.d.ts +11 -11
  588. package/lib/filter/shared/spatial-filter.enum.d.ts +19 -19
  589. package/lib/filter/shared/spatial-filter.interface.d.ts +10 -10
  590. package/lib/filter/shared/spatial-filter.service.d.ts +37 -37
  591. package/lib/filter/shared/time-filter.enum.d.ts +10 -10
  592. package/lib/filter/shared/time-filter.interface.d.ts +29 -29
  593. package/lib/filter/shared/time-filter.service.d.ts +11 -11
  594. package/lib/filter/spatial-filter/spatial-filter-item/index.d.ts +1 -1
  595. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +166 -166
  596. package/lib/filter/spatial-filter/spatial-filter-list/index.d.ts +1 -1
  597. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +58 -58
  598. package/lib/filter/spatial-filter/spatial-filter-type/index.d.ts +1 -1
  599. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +45 -45
  600. package/lib/filter/time-filter-button/index.d.ts +1 -1
  601. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +20 -20
  602. package/lib/filter/time-filter-form/index.d.ts +1 -1
  603. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +77 -77
  604. package/lib/filter/time-filter-item/index.d.ts +1 -1
  605. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +28 -28
  606. package/lib/filter/time-filter-list/index.d.ts +2 -2
  607. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +14 -14
  608. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +12 -12
  609. package/lib/geo.module.d.ts +28 -28
  610. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +206 -206
  611. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +88 -88
  612. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +19 -19
  613. package/lib/geometry/geometry.module.d.ts +8 -8
  614. package/lib/geometry/index.d.ts +3 -3
  615. package/lib/geometry/shared/controls/draw.d.ts +150 -150
  616. package/lib/geometry/shared/controls/index.d.ts +3 -3
  617. package/lib/geometry/shared/controls/modify.d.ts +228 -228
  618. package/lib/geometry/shared/controls/slice.d.ts +99 -99
  619. package/lib/geometry/shared/geometry.errors.d.ts +11 -11
  620. package/lib/geometry/shared/geometry.interfaces.d.ts +13 -13
  621. package/lib/geometry/shared/geometry.utils.d.ts +45 -45
  622. package/lib/geometry/shared/index.d.ts +4 -4
  623. package/lib/import-export/export-button/export-button.component.d.ts +16 -16
  624. package/lib/import-export/export-button/index.d.ts +1 -1
  625. package/lib/import-export/import-export/import-export.component.d.ts +104 -104
  626. package/lib/import-export/import-export/index.d.ts +1 -1
  627. package/lib/import-export/import-export.module.d.ts +26 -26
  628. package/lib/import-export/index.d.ts +4 -4
  629. package/lib/import-export/shared/drop-geo-file.directive.d.ts +36 -36
  630. package/lib/import-export/shared/export.errors.d.ts +8 -8
  631. package/lib/import-export/shared/export.interface.d.ts +11 -11
  632. package/lib/import-export/shared/export.service.d.ts +30 -30
  633. package/lib/import-export/shared/export.type.d.ts +16 -16
  634. package/lib/import-export/shared/export.utils.d.ts +19 -19
  635. package/lib/import-export/shared/import.errors.d.ts +20 -20
  636. package/lib/import-export/shared/import.interface.d.ts +8 -8
  637. package/lib/import-export/shared/import.service.d.ts +31 -31
  638. package/lib/import-export/shared/import.utils.d.ts +18 -18
  639. package/lib/import-export/shared/index.d.ts +10 -10
  640. package/lib/import-export/style-list/index.d.ts +4 -4
  641. package/lib/import-export/style-list/style-list.interface.d.ts +6 -6
  642. package/lib/import-export/style-list/style-list.module.d.ts +8 -8
  643. package/lib/import-export/style-list/style-list.provider.d.ts +15 -15
  644. package/lib/import-export/style-list/style-list.service.d.ts +18 -18
  645. package/lib/layer/index.d.ts +10 -10
  646. package/lib/layer/layer-item/index.d.ts +1 -1
  647. package/lib/layer/layer-item/layer-item.component.d.ts +62 -62
  648. package/lib/layer/layer-legend/index.d.ts +1 -1
  649. package/lib/layer/layer-legend/layer-legend.component.d.ts +90 -90
  650. package/lib/layer/layer-legend-item/index.d.ts +1 -1
  651. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +22 -22
  652. package/lib/layer/layer-legend-list/index.d.ts +2 -2
  653. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +16 -16
  654. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +31 -31
  655. package/lib/layer/layer-list/index.d.ts +3 -3
  656. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +19 -19
  657. package/lib/layer/layer-list/layer-list.component.d.ts +127 -127
  658. package/lib/layer/layer-list/layer-list.enum.d.ts +15 -15
  659. package/lib/layer/layer-list-tool/index.d.ts +4 -4
  660. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +32 -32
  661. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +5 -5
  662. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +8 -8
  663. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +14 -14
  664. package/lib/layer/layer.module.d.ts +36 -36
  665. package/lib/layer/shared/clusterParam.d.ts +13 -13
  666. package/lib/layer/shared/index.d.ts +6 -6
  667. package/lib/layer/shared/layer.enums.d.ts +1 -1
  668. package/lib/layer/shared/layer.service.d.ts +30 -30
  669. package/lib/layer/shared/layers/any-layer.d.ts +6 -6
  670. package/lib/layer/shared/layers/any-layer.interface.d.ts +6 -6
  671. package/lib/layer/shared/layers/image-layer.d.ts +22 -22
  672. package/lib/layer/shared/layers/image-layer.interface.d.ts +19 -19
  673. package/lib/layer/shared/layers/index.d.ts +12 -12
  674. package/lib/layer/shared/layers/layer.d.ts +62 -62
  675. package/lib/layer/shared/layers/layer.interface.d.ts +109 -107
  676. package/lib/layer/shared/layers/tile-layer.d.ts +31 -31
  677. package/lib/layer/shared/layers/tile-layer.interface.d.ts +20 -20
  678. package/lib/layer/shared/layers/vector-layer.d.ts +78 -78
  679. package/lib/layer/shared/layers/vector-layer.interface.d.ts +41 -41
  680. package/lib/layer/shared/layers/vectortile-layer.d.ts +28 -28
  681. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +18 -18
  682. package/lib/layer/shared/style.service.d.ts +57 -57
  683. package/lib/layer/shared/vector-style.interface.d.ts +38 -38
  684. package/lib/layer/style-modal/index.d.ts +1 -1
  685. package/lib/layer/style-modal/style-modal.component.d.ts +42 -42
  686. package/lib/layer/track-feature-button/index.d.ts +1 -1
  687. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +15 -15
  688. package/lib/layer/utils/image-watcher.d.ts +17 -17
  689. package/lib/layer/utils/index.d.ts +5 -5
  690. package/lib/layer/utils/layer.utils.d.ts +2 -2
  691. package/lib/layer/utils/outputLegend.d.ts +7 -7
  692. package/lib/layer/utils/tile-watcher.d.ts +14 -14
  693. package/lib/layer/utils/vector-watcher.d.ts +13 -13
  694. package/lib/map/baselayers-switcher/baselayers-switcher.animation.d.ts +2 -2
  695. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +21 -21
  696. package/lib/map/baselayers-switcher/index.d.ts +2 -2
  697. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +29 -26
  698. package/lib/map/geolocate-button/geolocate-button.component.d.ts +22 -22
  699. package/lib/map/geolocate-button/index.d.ts +1 -1
  700. package/lib/map/home-extent-button/home-extent-button.component.d.ts +20 -20
  701. package/lib/map/home-extent-button/index.d.ts +1 -1
  702. package/lib/map/index.d.ts +13 -13
  703. package/lib/map/info-section/index.d.ts +1 -1
  704. package/lib/map/info-section/info-section.component.d.ts +7 -7
  705. package/lib/map/map-browser/index.d.ts +1 -1
  706. package/lib/map/map-browser/map-browser.component.d.ts +25 -25
  707. package/lib/map/map-center/index.d.ts +1 -1
  708. package/lib/map/map-center/map-center.component.d.ts +31 -31
  709. package/lib/map/map.module.d.ts +28 -28
  710. package/lib/map/menu-button/index.d.ts +1 -1
  711. package/lib/map/menu-button/menu-button.component.d.ts +17 -17
  712. package/lib/map/offline-button/index.d.ts +1 -1
  713. package/lib/map/offline-button/offline-button.component.d.ts +23 -23
  714. package/lib/map/rotation-button/index.d.ts +1 -1
  715. package/lib/map/rotation-button/rotation-button.component.d.ts +17 -17
  716. package/lib/map/shared/controllers/controller.d.ts +29 -29
  717. package/lib/map/shared/controllers/geolocation.d.ts +112 -112
  718. package/lib/map/shared/controllers/index.d.ts +3 -3
  719. package/lib/map/shared/controllers/view.d.ts +200 -200
  720. package/lib/map/shared/hover-feature.directive.d.ts +132 -132
  721. package/lib/map/shared/index.d.ts +13 -13
  722. package/lib/map/shared/linkedLayers.utils.d.ts +17 -17
  723. package/lib/map/shared/map-pointer-position.directive.d.ts +71 -71
  724. package/lib/map/shared/map.d.ts +135 -135
  725. package/lib/map/shared/map.enums.d.ts +4 -4
  726. package/lib/map/shared/map.interface.d.ts +57 -57
  727. package/lib/map/shared/map.service.d.ts +19 -19
  728. package/lib/map/shared/map.utils.d.ts +90 -89
  729. package/lib/map/shared/mapOffline.directive.d.ts +21 -21
  730. package/lib/map/shared/projection.interfaces.d.ts +29 -29
  731. package/lib/map/shared/projection.service.d.ts +19 -19
  732. package/lib/map/shared/projection.utils.d.ts +19 -19
  733. package/lib/map/swipe-control/index.d.ts +1 -1
  734. package/lib/map/swipe-control/swipe-control.component.d.ts +97 -97
  735. package/lib/map/utils/layer-watcher.d.ts +20 -20
  736. package/lib/map/wake-lock-button/index.d.ts +1 -1
  737. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -30
  738. package/lib/map/zoom-button/index.d.ts +1 -1
  739. package/lib/map/zoom-button/zoom-button.component.d.ts +12 -12
  740. package/lib/measure/index.d.ts +3 -3
  741. package/lib/measure/measure.module.d.ts +7 -7
  742. package/lib/measure/measurer/measure-format.pipe.d.ts +15 -15
  743. package/lib/measure/measurer/measurer-dialog.component.d.ts +14 -14
  744. package/lib/measure/measurer/measurer-item.component.d.ts +66 -66
  745. package/lib/measure/measurer/measurer.component.d.ts +405 -405
  746. package/lib/measure/measurer/measurer.module.d.ts +25 -25
  747. package/lib/measure/shared/index.d.ts +3 -3
  748. package/lib/measure/shared/measure.enum.d.ts +33 -33
  749. package/lib/measure/shared/measure.interfaces.d.ts +21 -21
  750. package/lib/measure/shared/measure.utils.d.ts +180 -180
  751. package/lib/metadata/index.d.ts +2 -2
  752. package/lib/metadata/metadata-button/index.d.ts +1 -1
  753. package/lib/metadata/metadata-button/metadata-button.component.d.ts +26 -26
  754. package/lib/metadata/metadata.module.d.ts +15 -15
  755. package/lib/metadata/shared/index.d.ts +2 -2
  756. package/lib/metadata/shared/metadata.interface.d.ts +13 -13
  757. package/lib/metadata/shared/metadata.service.d.ts +8 -8
  758. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +14 -14
  759. package/lib/offline/geoDB/geoDB.enums.d.ts +4 -4
  760. package/lib/offline/geoDB/geoDB.interface.d.ts +19 -19
  761. package/lib/offline/geoDB/geoDB.service.d.ts +37 -37
  762. package/lib/offline/geoDB/index.d.ts +4 -4
  763. package/lib/offline/index.d.ts +2 -2
  764. package/lib/offline/shared/geo-network.service.d.ts +28 -28
  765. package/lib/offline/shared/index.d.ts +1 -1
  766. package/lib/overlay/index.d.ts +1 -1
  767. package/lib/overlay/overlay.module.d.ts +9 -9
  768. package/lib/overlay/shared/index.d.ts +6 -6
  769. package/lib/overlay/shared/overlay-marker-style.utils.d.ts +11 -11
  770. package/lib/overlay/shared/overlay.d.ts +81 -81
  771. package/lib/overlay/shared/overlay.directive.d.ts +18 -18
  772. package/lib/overlay/shared/overlay.enum.d.ts +6 -6
  773. package/lib/overlay/shared/overlay.service.d.ts +14 -14
  774. package/lib/overlay/shared/overlay.utils.d.ts +17 -17
  775. package/lib/print/index.d.ts +3 -3
  776. package/lib/print/print/print.component.d.ts +35 -35
  777. package/lib/print/print-form/index.d.ts +1 -1
  778. package/lib/print/print-form/print-form.component.d.ts +97 -97
  779. package/lib/print/print.module.d.ts +19 -19
  780. package/lib/print/shared/geopdf.d.ts +1 -1
  781. package/lib/print/shared/index.d.ts +4 -4
  782. package/lib/print/shared/print.interface.d.ts +22 -22
  783. package/lib/print/shared/print.service.d.ts +168 -159
  784. package/lib/print/shared/print.type.d.ts +45 -45
  785. package/lib/query/index.d.ts +1 -1
  786. package/lib/query/query.module.d.ts +11 -11
  787. package/lib/query/shared/index.d.ts +6 -6
  788. package/lib/query/shared/query-search-source.d.ts +17 -17
  789. package/lib/query/shared/query-search-source.providers.d.ts +17 -17
  790. package/lib/query/shared/query.directive.d.ts +105 -105
  791. package/lib/query/shared/query.enums.d.ts +26 -26
  792. package/lib/query/shared/query.interfaces.d.ts +35 -28
  793. package/lib/query/shared/query.service.d.ts +56 -54
  794. package/lib/query/shared/query.utils.d.ts +27 -27
  795. package/lib/search/index.d.ts +11 -11
  796. package/lib/search/search-bar/search-bar.component.d.ts +230 -220
  797. package/lib/search/search-bar/search-bar.module.d.ts +23 -23
  798. package/lib/search/search-bar/search-url-param.directive.d.ts +13 -13
  799. package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -0
  800. package/lib/search/search-results/search-results-add-button.component.d.ts +76 -58
  801. package/lib/search/search-results/search-results-item.component.d.ts +47 -48
  802. package/lib/search/search-results/search-results.component.d.ts +161 -161
  803. package/lib/search/search-results/search-results.module.d.ts +28 -21
  804. package/lib/search/search-selector/search-selector.component.d.ts +58 -58
  805. package/lib/search/search-selector/search-selector.module.d.ts +19 -19
  806. package/lib/search/search-settings/search-settings.component.d.ts +102 -96
  807. package/lib/search/search-settings/search-settings.module.d.ts +20 -20
  808. package/lib/search/search.module.d.ts +14 -14
  809. package/lib/search/shared/index.d.ts +8 -8
  810. package/lib/search/shared/search-pointer-summary.directive.d.ts +133 -133
  811. package/lib/search/shared/search-source-service.providers.d.ts +15 -15
  812. package/lib/search/shared/search-source.service.d.ts +32 -32
  813. package/lib/search/shared/search.enums.d.ts +1 -1
  814. package/lib/search/shared/search.interfaces.d.ts +29 -29
  815. package/lib/search/shared/search.service.d.ts +53 -51
  816. package/lib/search/shared/search.utils.d.ts +39 -39
  817. package/lib/search/shared/sources/coordinates.d.ts +40 -40
  818. package/lib/search/shared/sources/coordinates.interfaces.d.ts +12 -12
  819. package/lib/search/shared/sources/coordinates.providers.d.ts +31 -31
  820. package/lib/search/shared/sources/icherche.d.ts +96 -96
  821. package/lib/search/shared/sources/icherche.interfaces.d.ts +30 -30
  822. package/lib/search/shared/sources/icherche.providers.d.ts +46 -46
  823. package/lib/search/shared/sources/ilayer.d.ts +55 -55
  824. package/lib/search/shared/sources/ilayer.interfaces.d.ts +47 -47
  825. package/lib/search/shared/sources/ilayer.providers.d.ts +31 -31
  826. package/lib/search/shared/sources/index.d.ts +17 -17
  827. package/lib/search/shared/sources/nominatim.d.ts +45 -45
  828. package/lib/search/shared/sources/nominatim.interfaces.d.ts +10 -10
  829. package/lib/search/shared/sources/nominatim.providers.d.ts +18 -18
  830. package/lib/search/shared/sources/source.d.ts +108 -108
  831. package/lib/search/shared/sources/source.interfaces.d.ts +47 -47
  832. package/lib/search/shared/sources/storedqueries.d.ts +73 -73
  833. package/lib/search/shared/sources/storedqueries.interfaces.d.ts +42 -42
  834. package/lib/search/shared/sources/storedqueries.providers.d.ts +32 -32
  835. package/lib/toast/index.d.ts +1 -1
  836. package/lib/toast/toast.component.d.ts +33 -33
  837. package/lib/toast/toast.module.d.ts +14 -14
  838. package/lib/utils/commonVectorStyle.d.ts +14 -14
  839. package/lib/utils/commonVectorStyle.interface.d.ts +16 -16
  840. package/lib/utils/googleLinks.d.ts +5 -5
  841. package/lib/utils/id-generator.d.ts +54 -54
  842. package/lib/utils/index.d.ts +5 -5
  843. package/lib/utils/osmLinks.d.ts +4 -4
  844. package/lib/wkt/index.d.ts +1 -1
  845. package/lib/wkt/shared/index.d.ts +1 -1
  846. package/lib/wkt/shared/wkt.service.d.ts +19 -19
  847. package/lib/wkt/wkt.module.d.ts +8 -8
  848. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +23 -23
  849. package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +14 -14
  850. package/lib/workspace/confirmation-popup/index.d.ts +2 -2
  851. package/lib/workspace/index.d.ts +7 -7
  852. package/lib/workspace/shared/edition-workspace.d.ts +82 -82
  853. package/lib/workspace/shared/edition-workspace.service.d.ts +52 -52
  854. package/lib/workspace/shared/feature-workspace.d.ts +18 -18
  855. package/lib/workspace/shared/feature-workspace.service.d.ts +19 -19
  856. package/lib/workspace/shared/index.d.ts +7 -7
  857. package/lib/workspace/shared/wfs-workspace.d.ts +18 -18
  858. package/lib/workspace/shared/wfs-workspace.service.d.ts +19 -19
  859. package/lib/workspace/shared/wms-workspace.service.d.ts +22 -22
  860. package/lib/workspace/shared/workspace.utils.d.ts +10 -10
  861. package/lib/workspace/widgets/index.d.ts +3 -3
  862. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +29 -29
  863. package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +14 -14
  864. package/lib/workspace/widgets/widgets.d.ts +9 -9
  865. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +32 -32
  866. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +11 -11
  867. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +26 -26
  868. package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +11 -11
  869. package/lib/workspace/workspace.module.d.ts +14 -14
  870. package/package.json +4 -4
  871. package/public_api.d.ts +51 -51
@@ -1,509 +1,509 @@
1
- import olFeature from 'ol/Feature';
2
- import * as olStyle from 'ol/style';
3
- import * as olGeom from 'ol/geom';
4
- import OlGeoJSON from 'ol/format/GeoJSON';
5
- import * as olProj from 'ol/proj';
6
- import { uuid, NumberUtils } from '@igo2/utils';
7
- import { createOverlayMarkerStyle } from '../../overlay/shared/overlay-marker-style.utils';
8
- import { VectorLayer } from '../../layer/shared/layers/vector-layer';
9
- import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
10
- import { tryBindStoreLayer } from '../../feature/shared/feature.utils';
11
- import { tryAddLoadingStrategy } from '../../feature/shared/strategies.utils';
12
- import { FeatureStoreLoadingStrategy } from '../../feature/shared/strategies/loading';
13
- import { FEATURE, FeatureMotion } from '../../feature/shared/feature.enums';
14
- import { DirectionRelativePositionType, DirectionType } from './directions.enum';
15
- /**
16
- * Function that updat the sort of the list base on the provided field.
17
- * @param source stop store
18
- * @param direction asc / desc sort order
19
- * @param field the field to use to sort the view
20
- */
21
- export function updateStoreSorting(stopsStore, direction = 'asc', field = 'position') {
22
- stopsStore.view.sort({
23
- direction,
24
- valueAccessor: (entity) => entity[field]
25
- });
26
- }
27
- export function computeRelativePosition(index, totalLength) {
28
- let relativePosition = DirectionRelativePositionType.Intermediate;
29
- if (index === 0) {
30
- relativePosition = DirectionRelativePositionType.Start;
31
- }
32
- else if (index === totalLength - 1) {
33
- relativePosition = DirectionRelativePositionType.End;
34
- }
35
- return relativePosition;
36
- }
37
- export function computeStopsPosition(stopsStore) {
38
- const stopsToComputePosition = [...stopsStore.all()];
39
- stopsToComputePosition.sort((a, b) => a.position - b.position);
40
- stopsToComputePosition.map((stop, i) => {
41
- stop.position = i;
42
- stop.relativePosition = computeRelativePosition(stop.position, stopsToComputePosition.length);
43
- });
44
- if (stopsToComputePosition) {
45
- stopsStore.updateMany(stopsToComputePosition);
46
- }
47
- }
48
- /**
49
- * Function that add a stop to the stop store. Stop are always added before the last stop.
50
- * @param stopsStore stop store as an EntityStore
51
- */
52
- export function addStopToStore(stopsStore) {
53
- const id = uuid();
54
- const stops = stopsStore.all();
55
- let positions;
56
- if (stopsStore.count === 0) {
57
- positions = [0];
58
- }
59
- else {
60
- positions = stops.map(stop => stop.position);
61
- }
62
- const maxPosition = Math.max(...positions);
63
- const insertPosition = maxPosition;
64
- const lastPosition = maxPosition + 1;
65
- const stopToUpdate = stopsStore.all().find(stop => stop.position === maxPosition);
66
- if (stopToUpdate) {
67
- stopToUpdate.position = lastPosition;
68
- stopToUpdate.relativePosition = computeRelativePosition(lastPosition, stopsStore.count + 1);
69
- }
70
- stopsStore.insert({ id, position: insertPosition, relativePosition: computeRelativePosition(insertPosition, stopsStore.count + 1) });
71
- updateStoreSorting(stopsStore);
72
- return stopsStore.get(id);
73
- }
74
- export function removeStopFromStore(stopsStore, stop) {
75
- stopsStore.delete(stop);
76
- computeStopsPosition(stopsStore);
77
- }
78
- /**
79
- * Create a style for the directions stops and routes
80
- * @param feature OlFeature
81
- * @returns OL style function
82
- */
83
- export function directionsStyle(feature, resolution) {
84
- const vertexStyle = [
85
- new olStyle.Style({
86
- geometry: feature.getGeometry(),
87
- image: new olStyle.Circle({
88
- radius: 7,
89
- stroke: new olStyle.Stroke({ color: '#FF0000', width: 3 })
90
- })
91
- })
92
- ];
93
- const stopStyle = createOverlayMarkerStyle({
94
- text: feature.get('stopText'),
95
- opacity: feature.get('stopOpacity'),
96
- markerColor: feature.get('stopColor'),
97
- markerOutlineColor: [255, 255, 255]
98
- });
99
- const routeStyle = [
100
- new olStyle.Style({
101
- stroke: new olStyle.Stroke({ color: `rgba(106, 121, 130, ${feature.get('active') ? 0.75 : 0})`, width: 10 })
102
- }),
103
- new olStyle.Style({
104
- stroke: new olStyle.Stroke({ color: `rgba(79, 169, 221, ${feature.get('active') ? 0.75 : 0})`, width: 6 })
105
- })
106
- ];
107
- if (feature.get('type') === DirectionType.Stop) {
108
- return stopStyle;
109
- }
110
- if (feature.get('type') === 'vertex') {
111
- return vertexStyle;
112
- }
113
- if (feature.get('type') === DirectionType.Route) {
114
- return routeStyle;
115
- }
116
- }
117
- export function initStopsFeatureStore(stopsFeatureStore, languageService) {
118
- const loadingStrategy = new FeatureStoreLoadingStrategy({
119
- motion: FeatureMotion.None
120
- });
121
- const stopsLayer = new VectorLayer({
122
- isIgoInternalLayer: true,
123
- id: 'igo-direction-stops-layer',
124
- title: languageService.translate.instant('igo.geo.directionsForm.stopLayer'),
125
- zIndex: 911,
126
- source: new FeatureDataSource(),
127
- showInLayerList: true,
128
- workspace: {
129
- enabled: false,
130
- },
131
- linkedLayers: {
132
- linkId: 'igo-direction-stops-layer',
133
- links: [
134
- {
135
- syncedDelete: true,
136
- linkedIds: ['igo-direction-route-layer'],
137
- properties: []
138
- }
139
- ]
140
- },
141
- exportable: true,
142
- browsable: false,
143
- style: directionsStyle
144
- });
145
- tryBindStoreLayer(stopsFeatureStore, stopsLayer);
146
- stopsFeatureStore.layer.visible = true;
147
- tryAddLoadingStrategy(stopsFeatureStore, loadingStrategy);
148
- }
149
- export function initRoutesFeatureStore(routesFeatureStore, languageService) {
150
- const loadingStrategy = new FeatureStoreLoadingStrategy({
151
- motion: FeatureMotion.None
152
- });
153
- const routeLayer = new VectorLayer({
154
- isIgoInternalLayer: true,
155
- id: 'igo-direction-route-layer',
156
- title: languageService.translate.instant('igo.geo.directionsForm.routeLayer'),
157
- zIndex: 910,
158
- source: new FeatureDataSource(),
159
- showInLayerList: true,
160
- workspace: {
161
- enabled: false,
162
- },
163
- linkedLayers: {
164
- linkId: 'igo-direction-route-layer'
165
- },
166
- exportable: true,
167
- browsable: false,
168
- style: directionsStyle
169
- });
170
- tryBindStoreLayer(routesFeatureStore, routeLayer);
171
- routesFeatureStore.layer.visible = true;
172
- tryAddLoadingStrategy(routesFeatureStore, loadingStrategy);
173
- }
174
- export function initStepFeatureStore(stepFeatureStore) {
175
- const loadingStrategy = new FeatureStoreLoadingStrategy({
176
- motion: FeatureMotion.None
177
- });
178
- const stepLayer = new VectorLayer({
179
- isIgoInternalLayer: true,
180
- id: 'igo-direction-step-layer',
181
- title: '',
182
- zIndex: 910,
183
- source: new FeatureDataSource(),
184
- showInLayerList: false,
185
- workspace: {
186
- enabled: false,
187
- },
188
- linkedLayers: {
189
- linkId: 'igo-direction-route-layer'
190
- },
191
- exportable: false,
192
- browsable: false,
193
- style: directionsStyle
194
- });
195
- tryBindStoreLayer(stepFeatureStore, stepLayer);
196
- stepFeatureStore.layer.visible = true;
197
- tryAddLoadingStrategy(stepFeatureStore, loadingStrategy);
198
- }
199
- export function addStopToStopsFeatureStore(stop, stopsStore, stopsFeatureStore, projection, languageService) {
200
- let stopColor;
201
- let stopText;
202
- switch (stop.relativePosition) {
203
- case DirectionRelativePositionType.Start:
204
- stopColor = '#008000';
205
- stopText = languageService.translate.instant('igo.geo.directionsForm.start');
206
- break;
207
- case DirectionRelativePositionType.End:
208
- stopColor = '#f64139';
209
- stopText = languageService.translate.instant('igo.geo.directionsForm.end');
210
- break;
211
- default:
212
- stopColor = '#ffd700';
213
- stopText = languageService.translate.instant('igo.geo.directionsForm.intermediate') + ' #' + stop.position;
214
- break;
215
- }
216
- const geometry = new olGeom.Point(olProj.transform(stop.coordinates, projection, stopsFeatureStore.map.projection));
217
- const geojsonGeom = new OlGeoJSON().writeGeometryObject(geometry, {
218
- featureProjection: stopsFeatureStore.map.projection,
219
- dataProjection: stopsFeatureStore.map.projection
220
- });
221
- const previousStop = stopsFeatureStore.get(stop.id);
222
- const previousStopRevision = previousStop ? previousStop.meta.revision : 0;
223
- const stopFeatureStore = {
224
- type: FEATURE,
225
- geometry: geojsonGeom,
226
- projection: stopsFeatureStore.map.projection,
227
- properties: {
228
- id: stop.id,
229
- type: DirectionType.Stop,
230
- stopText,
231
- stopColor,
232
- stopOpacity: 1,
233
- stop
234
- },
235
- meta: {
236
- id: stop.id,
237
- revision: previousStopRevision + 1
238
- },
239
- ol: new olFeature({ geometry })
240
- };
241
- stopsFeatureStore.update(stopFeatureStore);
242
- }
243
- export function addDirectionToRoutesFeatureStore(routesFeatureStore, direction, projection, active = false, moveToExtent = false) {
244
- const geom = direction.geometry.coordinates;
245
- const geometry4326 = new olGeom.LineString(geom);
246
- const geometry = geometry4326.transform(projection, routesFeatureStore.map.projection);
247
- const geojsonGeom = new OlGeoJSON().writeGeometryObject(geometry, {
248
- featureProjection: routesFeatureStore.map.projection,
249
- dataProjection: routesFeatureStore.map.projection
250
- });
251
- const previousRoute = routesFeatureStore.get(direction.id);
252
- const previousRouteRevision = previousRoute
253
- ? previousRoute.meta.revision
254
- : 0;
255
- const routeFeatureStore = {
256
- type: FEATURE,
257
- geometry: geojsonGeom,
258
- projection: routesFeatureStore.map.projection,
259
- properties: {
260
- id: direction.id,
261
- type: DirectionType.Route,
262
- active,
263
- direction
264
- },
265
- meta: {
266
- id: direction.id,
267
- revision: previousRouteRevision + 1
268
- },
269
- ol: new olFeature({ geometry })
270
- };
271
- routesFeatureStore.update(routeFeatureStore);
272
- }
273
- export function formatDistance(distance) {
274
- if (distance === 0) {
275
- return;
276
- }
277
- if (distance >= 100000) {
278
- return NumberUtils.roundToNDecimal(Math.round(distance) / 1000, 1) + ' km';
279
- }
280
- if (distance >= 10000) {
281
- return NumberUtils.roundToNDecimal(Math.round(distance) / 100 / 10, 1) + ' km';
282
- }
283
- if (distance >= 1000) {
284
- return NumberUtils.roundToNDecimal(Math.round(distance) / 100 / 10, 1) + ' km';
285
- }
286
- return NumberUtils.roundToNDecimal(distance, 0) + ' m';
287
- }
288
- export function formatDuration(duration) {
289
- if (duration >= 3600) {
290
- const hour = Math.floor(duration / 3600);
291
- const minute = Math.round((duration / 3600 - hour) * 60);
292
- if (minute === 60) {
293
- return hour + 1 + ' h';
294
- }
295
- return hour + ' h ' + minute + ' min';
296
- }
297
- if (duration >= 60) {
298
- return Math.round(duration / 60) + ' min';
299
- }
300
- return duration + ' s';
301
- }
302
- export function formatInstruction(type, modifier, route, direction, stepPosition, exit, languageService, lastStep = false) {
303
- const translate = languageService.translate;
304
- let directive;
305
- let image = 'forward';
306
- let cssClass = 'rotate-270';
307
- const translatedDirection = translateBearing(direction, languageService);
308
- const translatedModifier = translateModifier(modifier, languageService);
309
- const prefix = modifier === 'straight' ? '' : translate.instant('igo.geo.directions.modifier.prefix');
310
- let aggregatedDirection = prefix + translatedModifier;
311
- if (modifier?.search('slight') >= 0) {
312
- aggregatedDirection = translatedModifier;
313
- }
314
- if (modifier === 'uturn') {
315
- image = 'forward';
316
- cssClass = 'rotate-90';
317
- }
318
- else if (modifier === 'sharp right') {
319
- image = 'subdirectory-arrow-right';
320
- cssClass = 'icon-flipped';
321
- }
322
- else if (modifier === 'right') {
323
- image = 'subdirectory-arrow-right';
324
- cssClass = 'icon-flipped';
325
- }
326
- else if (modifier === 'slight right') {
327
- image = 'forward';
328
- cssClass = 'rotate-290';
329
- }
330
- else if (modifier === 'straight') {
331
- image = 'forward';
332
- }
333
- else if (modifier === 'slight left') {
334
- image = 'forward';
335
- cssClass = 'rotate-250';
336
- }
337
- else if (modifier === 'left') {
338
- image = 'subdirectory-arrow-left';
339
- cssClass = 'icon-flipped';
340
- }
341
- else if (modifier === 'sharp left') {
342
- image = 'subdirectory-arrow-left';
343
- cssClass = 'icon-flipped';
344
- }
345
- if (type === 'turn') {
346
- if (modifier === 'straight') {
347
- directive = translate.instant('igo.geo.directions.turn.straight', { route });
348
- }
349
- else if (modifier === 'uturn') {
350
- directive = translate.instant('igo.geo.directions.turn.uturn', { route });
351
- }
352
- else {
353
- directive = translate.instant('igo.geo.directions.turn.else', { route, aggregatedDirection, translatedModifier });
354
- }
355
- }
356
- else if (type === 'new name') {
357
- directive = translate.instant('igo.geo.directions.new name', { route, translatedDirection });
358
- image = 'compass';
359
- cssClass = '';
360
- }
361
- else if (type === 'depart') {
362
- directive = translate.instant('igo.geo.directions.depart', { route, translatedDirection });
363
- image = 'compass';
364
- cssClass = '';
365
- }
366
- else if (type === 'arrive') {
367
- if (lastStep) {
368
- const coma = !translatedModifier ? '' : ', ';
369
- aggregatedDirection = !translatedModifier ? '' : aggregatedDirection;
370
- directive = translate.instant('igo.geo.directions.arrive.lastStep', { coma, aggregatedDirection });
371
- }
372
- else {
373
- directive = translate.instant('igo.geo.directions.arrive.intermediate', { route });
374
- image = 'map-marker';
375
- cssClass = '';
376
- }
377
- }
378
- else if (type === 'merge') {
379
- directive = translate.instant('igo.geo.directions.merge', { route });
380
- image = 'forward';
381
- cssClass = 'rotate-270';
382
- }
383
- else if (type === 'on ramp') {
384
- directive = translate.instant('igo.geo.directions.on ramp', { aggregatedDirection });
385
- }
386
- else if (type === 'off ramp') {
387
- directive = translate.instant('igo.geo.directions.off ramp', { aggregatedDirection });
388
- }
389
- else if (type === 'fork') {
390
- if (modifier.search('left') >= 0) {
391
- directive = translate.instant('igo.geo.directions.fork.left', { route });
392
- }
393
- else if (modifier.search('right') >= 0) {
394
- directive = translate.instant('igo.geo.directions.fork.right', { route });
395
- }
396
- else {
397
- directive = translate.instant('igo.geo.directions.fork.else', { route });
398
- }
399
- }
400
- else if (type === 'end of road') {
401
- directive = translate.instant('igo.geo.directions.end of road', { translatedModifier, route });
402
- }
403
- else if (type === 'use lane') {
404
- directive = translate.instant('igo.geo.directions.use lane');
405
- }
406
- else if (type === 'continue' && modifier !== 'uturn') {
407
- directive = translate.instant('igo.geo.directions.continue.notUturn', { route });
408
- image = 'forward';
409
- cssClass = 'rotate-270';
410
- }
411
- else if (type === 'roundabout') {
412
- const cntSuffix = exit === 1 ?
413
- translate.instant('igo.geo.directions.cntSuffix.first') :
414
- translate.instant('igo.geo.directions.cntSuffix.secondAndMore');
415
- directive = translate.instant('igo.geo.directions.roundabout', { exit, cntSuffix, route });
416
- image = 'chart-donut';
417
- cssClass = '';
418
- }
419
- else if (type === 'rotary') {
420
- directive = translate.instant('igo.geo.directions.rotary');
421
- image = 'chart-donut';
422
- cssClass = '';
423
- }
424
- else if (type === 'roundabout turn') {
425
- directive = translate.instant('igo.geo.directions.roundabout turn');
426
- image = 'chart-donut';
427
- cssClass = '';
428
- }
429
- else if (type === 'exit roundabout') {
430
- directive = translate.instant('igo.geo.directions.exit roundabout', { route });
431
- image = 'forward';
432
- cssClass = 'rotate-270';
433
- }
434
- else if (type === 'notification') {
435
- directive = translate.instant('igo.geo.directions.notification');
436
- }
437
- else if (modifier === 'uturn') {
438
- directive = translate.instant('igo.geo.directions.uturnText', { translatedDirection, route });
439
- }
440
- else {
441
- directive = translate.instant('igo.geo.directions.unknown');
442
- }
443
- image = lastStep ? 'flag-variant' : image;
444
- cssClass = lastStep ? '' : cssClass;
445
- image = stepPosition === 0 ? 'compass' : image;
446
- cssClass = stepPosition === 0 ? '' : cssClass;
447
- return { instruction: directive, image, cssClass };
448
- }
449
- export function translateModifier(modifier, languageService) {
450
- const translate = languageService.translate;
451
- if (modifier === 'uturn') {
452
- return translate.instant('igo.geo.directions.uturn');
453
- }
454
- else if (modifier === 'sharp right') {
455
- return translate.instant('igo.geo.directions.sharp right');
456
- }
457
- else if (modifier === 'right') {
458
- return translate.instant('igo.geo.directions.right');
459
- }
460
- else if (modifier === 'slight right') {
461
- return translate.instant('igo.geo.directions.slight right');
462
- }
463
- else if (modifier === 'sharp left') {
464
- return languageService.translate.instant('igo.geo.directions.sharp left');
465
- }
466
- else if (modifier === 'left') {
467
- return languageService.translate.instant('igo.geo.directions.left');
468
- }
469
- else if (modifier === 'slight left') {
470
- return languageService.translate.instant('igo.geo.directions.slight left');
471
- }
472
- else if (modifier === 'straight') {
473
- return languageService.translate.instant('igo.geo.directions.straight');
474
- }
475
- else {
476
- return modifier;
477
- }
478
- }
479
- export function translateBearing(bearing, languageService) {
480
- const translate = languageService.translate;
481
- if (bearing >= 337 || bearing < 23) {
482
- return translate.instant('igo.geo.cardinalPoints.n');
483
- }
484
- else if (bearing < 67) {
485
- return translate.instant('igo.geo.cardinalPoints.ne');
486
- }
487
- else if (bearing < 113) {
488
- return translate.instant('igo.geo.cardinalPoints.e');
489
- }
490
- else if (bearing < 157) {
491
- return translate.instant('igo.geo.cardinalPoints.se');
492
- }
493
- else if (bearing < 203) {
494
- return translate.instant('igo.geo.cardinalPoints.s');
495
- }
496
- else if (bearing < 247) {
497
- return translate.instant('igo.geo.cardinalPoints.sw');
498
- }
499
- else if (bearing < 293) {
500
- return translate.instant('igo.geo.cardinalPoints.w');
501
- }
502
- else if (bearing < 337) {
503
- return translate.instant('igo.geo.cardinalPoints.nw');
504
- }
505
- else {
506
- return;
507
- }
508
- }
1
+ import olFeature from 'ol/Feature';
2
+ import * as olStyle from 'ol/style';
3
+ import * as olGeom from 'ol/geom';
4
+ import OlGeoJSON from 'ol/format/GeoJSON';
5
+ import * as olProj from 'ol/proj';
6
+ import { uuid, NumberUtils } from '@igo2/utils';
7
+ import { createOverlayMarkerStyle } from '../../overlay/shared/overlay-marker-style.utils';
8
+ import { VectorLayer } from '../../layer/shared/layers/vector-layer';
9
+ import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
10
+ import { tryBindStoreLayer } from '../../feature/shared/feature.utils';
11
+ import { tryAddLoadingStrategy } from '../../feature/shared/strategies.utils';
12
+ import { FeatureStoreLoadingStrategy } from '../../feature/shared/strategies/loading';
13
+ import { FEATURE, FeatureMotion } from '../../feature/shared/feature.enums';
14
+ import { DirectionRelativePositionType, DirectionType } from './directions.enum';
15
+ /**
16
+ * Function that updat the sort of the list base on the provided field.
17
+ * @param source stop store
18
+ * @param direction asc / desc sort order
19
+ * @param field the field to use to sort the view
20
+ */
21
+ export function updateStoreSorting(stopsStore, direction = 'asc', field = 'position') {
22
+ stopsStore.view.sort({
23
+ direction,
24
+ valueAccessor: (entity) => entity[field]
25
+ });
26
+ }
27
+ export function computeRelativePosition(index, totalLength) {
28
+ let relativePosition = DirectionRelativePositionType.Intermediate;
29
+ if (index === 0) {
30
+ relativePosition = DirectionRelativePositionType.Start;
31
+ }
32
+ else if (index === totalLength - 1) {
33
+ relativePosition = DirectionRelativePositionType.End;
34
+ }
35
+ return relativePosition;
36
+ }
37
+ export function computeStopsPosition(stopsStore) {
38
+ const stopsToComputePosition = [...stopsStore.all()];
39
+ stopsToComputePosition.sort((a, b) => a.position - b.position);
40
+ stopsToComputePosition.map((stop, i) => {
41
+ stop.position = i;
42
+ stop.relativePosition = computeRelativePosition(stop.position, stopsToComputePosition.length);
43
+ });
44
+ if (stopsToComputePosition) {
45
+ stopsStore.updateMany(stopsToComputePosition);
46
+ }
47
+ }
48
+ /**
49
+ * Function that add a stop to the stop store. Stop are always added before the last stop.
50
+ * @param stopsStore stop store as an EntityStore
51
+ */
52
+ export function addStopToStore(stopsStore) {
53
+ const id = uuid();
54
+ const stops = stopsStore.all();
55
+ let positions;
56
+ if (stopsStore.count === 0) {
57
+ positions = [0];
58
+ }
59
+ else {
60
+ positions = stops.map(stop => stop.position);
61
+ }
62
+ const maxPosition = Math.max(...positions);
63
+ const insertPosition = maxPosition;
64
+ const lastPosition = maxPosition + 1;
65
+ const stopToUpdate = stopsStore.all().find(stop => stop.position === maxPosition);
66
+ if (stopToUpdate) {
67
+ stopToUpdate.position = lastPosition;
68
+ stopToUpdate.relativePosition = computeRelativePosition(lastPosition, stopsStore.count + 1);
69
+ }
70
+ stopsStore.insert({ id, position: insertPosition, relativePosition: computeRelativePosition(insertPosition, stopsStore.count + 1) });
71
+ updateStoreSorting(stopsStore);
72
+ return stopsStore.get(id);
73
+ }
74
+ export function removeStopFromStore(stopsStore, stop) {
75
+ stopsStore.delete(stop);
76
+ computeStopsPosition(stopsStore);
77
+ }
78
+ /**
79
+ * Create a style for the directions stops and routes
80
+ * @param feature OlFeature
81
+ * @returns OL style function
82
+ */
83
+ export function directionsStyle(feature, resolution) {
84
+ const vertexStyle = [
85
+ new olStyle.Style({
86
+ geometry: feature.getGeometry(),
87
+ image: new olStyle.Circle({
88
+ radius: 7,
89
+ stroke: new olStyle.Stroke({ color: '#FF0000', width: 3 })
90
+ })
91
+ })
92
+ ];
93
+ const stopStyle = createOverlayMarkerStyle({
94
+ text: feature.get('stopText'),
95
+ opacity: feature.get('stopOpacity'),
96
+ markerColor: feature.get('stopColor'),
97
+ markerOutlineColor: [255, 255, 255]
98
+ });
99
+ const routeStyle = [
100
+ new olStyle.Style({
101
+ stroke: new olStyle.Stroke({ color: `rgba(106, 121, 130, ${feature.get('active') ? 0.75 : 0})`, width: 10 })
102
+ }),
103
+ new olStyle.Style({
104
+ stroke: new olStyle.Stroke({ color: `rgba(79, 169, 221, ${feature.get('active') ? 0.75 : 0})`, width: 6 })
105
+ })
106
+ ];
107
+ if (feature.get('type') === DirectionType.Stop) {
108
+ return stopStyle;
109
+ }
110
+ if (feature.get('type') === 'vertex') {
111
+ return vertexStyle;
112
+ }
113
+ if (feature.get('type') === DirectionType.Route) {
114
+ return routeStyle;
115
+ }
116
+ }
117
+ export function initStopsFeatureStore(stopsFeatureStore, languageService) {
118
+ const loadingStrategy = new FeatureStoreLoadingStrategy({
119
+ motion: FeatureMotion.None
120
+ });
121
+ const stopsLayer = new VectorLayer({
122
+ isIgoInternalLayer: true,
123
+ id: 'igo-direction-stops-layer',
124
+ title: languageService.translate.instant('igo.geo.directionsForm.stopLayer'),
125
+ zIndex: 911,
126
+ source: new FeatureDataSource(),
127
+ showInLayerList: true,
128
+ workspace: {
129
+ enabled: false,
130
+ },
131
+ linkedLayers: {
132
+ linkId: 'igo-direction-stops-layer',
133
+ links: [
134
+ {
135
+ syncedDelete: true,
136
+ linkedIds: ['igo-direction-route-layer'],
137
+ properties: []
138
+ }
139
+ ]
140
+ },
141
+ exportable: true,
142
+ browsable: false,
143
+ style: directionsStyle
144
+ });
145
+ tryBindStoreLayer(stopsFeatureStore, stopsLayer);
146
+ stopsFeatureStore.layer.visible = true;
147
+ tryAddLoadingStrategy(stopsFeatureStore, loadingStrategy);
148
+ }
149
+ export function initRoutesFeatureStore(routesFeatureStore, languageService) {
150
+ const loadingStrategy = new FeatureStoreLoadingStrategy({
151
+ motion: FeatureMotion.None
152
+ });
153
+ const routeLayer = new VectorLayer({
154
+ isIgoInternalLayer: true,
155
+ id: 'igo-direction-route-layer',
156
+ title: languageService.translate.instant('igo.geo.directionsForm.routeLayer'),
157
+ zIndex: 910,
158
+ source: new FeatureDataSource(),
159
+ showInLayerList: true,
160
+ workspace: {
161
+ enabled: false,
162
+ },
163
+ linkedLayers: {
164
+ linkId: 'igo-direction-route-layer'
165
+ },
166
+ exportable: true,
167
+ browsable: false,
168
+ style: directionsStyle
169
+ });
170
+ tryBindStoreLayer(routesFeatureStore, routeLayer);
171
+ routesFeatureStore.layer.visible = true;
172
+ tryAddLoadingStrategy(routesFeatureStore, loadingStrategy);
173
+ }
174
+ export function initStepFeatureStore(stepFeatureStore) {
175
+ const loadingStrategy = new FeatureStoreLoadingStrategy({
176
+ motion: FeatureMotion.None
177
+ });
178
+ const stepLayer = new VectorLayer({
179
+ isIgoInternalLayer: true,
180
+ id: 'igo-direction-step-layer',
181
+ title: '',
182
+ zIndex: 910,
183
+ source: new FeatureDataSource(),
184
+ showInLayerList: false,
185
+ workspace: {
186
+ enabled: false,
187
+ },
188
+ linkedLayers: {
189
+ linkId: 'igo-direction-route-layer'
190
+ },
191
+ exportable: false,
192
+ browsable: false,
193
+ style: directionsStyle
194
+ });
195
+ tryBindStoreLayer(stepFeatureStore, stepLayer);
196
+ stepFeatureStore.layer.visible = true;
197
+ tryAddLoadingStrategy(stepFeatureStore, loadingStrategy);
198
+ }
199
+ export function addStopToStopsFeatureStore(stop, stopsStore, stopsFeatureStore, projection, languageService) {
200
+ let stopColor;
201
+ let stopText;
202
+ switch (stop.relativePosition) {
203
+ case DirectionRelativePositionType.Start:
204
+ stopColor = '#008000';
205
+ stopText = languageService.translate.instant('igo.geo.directionsForm.start');
206
+ break;
207
+ case DirectionRelativePositionType.End:
208
+ stopColor = '#f64139';
209
+ stopText = languageService.translate.instant('igo.geo.directionsForm.end');
210
+ break;
211
+ default:
212
+ stopColor = '#ffd700';
213
+ stopText = languageService.translate.instant('igo.geo.directionsForm.intermediate') + ' #' + stop.position;
214
+ break;
215
+ }
216
+ const geometry = new olGeom.Point(olProj.transform(stop.coordinates, projection, stopsFeatureStore.map.projection));
217
+ const geojsonGeom = new OlGeoJSON().writeGeometryObject(geometry, {
218
+ featureProjection: stopsFeatureStore.map.projection,
219
+ dataProjection: stopsFeatureStore.map.projection
220
+ });
221
+ const previousStop = stopsFeatureStore.get(stop.id);
222
+ const previousStopRevision = previousStop ? previousStop.meta.revision : 0;
223
+ const stopFeatureStore = {
224
+ type: FEATURE,
225
+ geometry: geojsonGeom,
226
+ projection: stopsFeatureStore.map.projection,
227
+ properties: {
228
+ id: stop.id,
229
+ type: DirectionType.Stop,
230
+ stopText,
231
+ stopColor,
232
+ stopOpacity: 1,
233
+ stop
234
+ },
235
+ meta: {
236
+ id: stop.id,
237
+ revision: previousStopRevision + 1
238
+ },
239
+ ol: new olFeature({ geometry })
240
+ };
241
+ stopsFeatureStore.update(stopFeatureStore);
242
+ }
243
+ export function addDirectionToRoutesFeatureStore(routesFeatureStore, direction, projection, active = false, moveToExtent = false) {
244
+ const geom = direction.geometry.coordinates;
245
+ const geometry4326 = new olGeom.LineString(geom);
246
+ const geometry = geometry4326.transform(projection, routesFeatureStore.map.projection);
247
+ const geojsonGeom = new OlGeoJSON().writeGeometryObject(geometry, {
248
+ featureProjection: routesFeatureStore.map.projection,
249
+ dataProjection: routesFeatureStore.map.projection
250
+ });
251
+ const previousRoute = routesFeatureStore.get(direction.id);
252
+ const previousRouteRevision = previousRoute
253
+ ? previousRoute.meta.revision
254
+ : 0;
255
+ const routeFeatureStore = {
256
+ type: FEATURE,
257
+ geometry: geojsonGeom,
258
+ projection: routesFeatureStore.map.projection,
259
+ properties: {
260
+ id: direction.id,
261
+ type: DirectionType.Route,
262
+ active,
263
+ direction
264
+ },
265
+ meta: {
266
+ id: direction.id,
267
+ revision: previousRouteRevision + 1
268
+ },
269
+ ol: new olFeature({ geometry })
270
+ };
271
+ routesFeatureStore.update(routeFeatureStore);
272
+ }
273
+ export function formatDistance(distance) {
274
+ if (distance === 0) {
275
+ return;
276
+ }
277
+ if (distance >= 100000) {
278
+ return NumberUtils.roundToNDecimal(Math.round(distance) / 1000, 1) + ' km';
279
+ }
280
+ if (distance >= 10000) {
281
+ return NumberUtils.roundToNDecimal(Math.round(distance) / 100 / 10, 1) + ' km';
282
+ }
283
+ if (distance >= 1000) {
284
+ return NumberUtils.roundToNDecimal(Math.round(distance) / 100 / 10, 1) + ' km';
285
+ }
286
+ return NumberUtils.roundToNDecimal(distance, 0) + ' m';
287
+ }
288
+ export function formatDuration(duration) {
289
+ if (duration >= 3600) {
290
+ const hour = Math.floor(duration / 3600);
291
+ const minute = Math.round((duration / 3600 - hour) * 60);
292
+ if (minute === 60) {
293
+ return hour + 1 + ' h';
294
+ }
295
+ return hour + ' h ' + minute + ' min';
296
+ }
297
+ if (duration >= 60) {
298
+ return Math.round(duration / 60) + ' min';
299
+ }
300
+ return duration + ' s';
301
+ }
302
+ export function formatInstruction(type, modifier, route, direction, stepPosition, exit, languageService, lastStep = false) {
303
+ const translate = languageService.translate;
304
+ let directive;
305
+ let image = 'forward';
306
+ let cssClass = 'rotate-270';
307
+ const translatedDirection = translateBearing(direction, languageService);
308
+ const translatedModifier = translateModifier(modifier, languageService);
309
+ const prefix = modifier === 'straight' ? '' : translate.instant('igo.geo.directions.modifier.prefix');
310
+ let aggregatedDirection = prefix + translatedModifier;
311
+ if (modifier?.search('slight') >= 0) {
312
+ aggregatedDirection = translatedModifier;
313
+ }
314
+ if (modifier === 'uturn') {
315
+ image = 'forward';
316
+ cssClass = 'rotate-90';
317
+ }
318
+ else if (modifier === 'sharp right') {
319
+ image = 'subdirectory-arrow-right';
320
+ cssClass = 'icon-flipped';
321
+ }
322
+ else if (modifier === 'right') {
323
+ image = 'subdirectory-arrow-right';
324
+ cssClass = 'icon-flipped';
325
+ }
326
+ else if (modifier === 'slight right') {
327
+ image = 'forward';
328
+ cssClass = 'rotate-290';
329
+ }
330
+ else if (modifier === 'straight') {
331
+ image = 'forward';
332
+ }
333
+ else if (modifier === 'slight left') {
334
+ image = 'forward';
335
+ cssClass = 'rotate-250';
336
+ }
337
+ else if (modifier === 'left') {
338
+ image = 'subdirectory-arrow-left';
339
+ cssClass = 'icon-flipped';
340
+ }
341
+ else if (modifier === 'sharp left') {
342
+ image = 'subdirectory-arrow-left';
343
+ cssClass = 'icon-flipped';
344
+ }
345
+ if (type === 'turn') {
346
+ if (modifier === 'straight') {
347
+ directive = translate.instant('igo.geo.directions.turn.straight', { route });
348
+ }
349
+ else if (modifier === 'uturn') {
350
+ directive = translate.instant('igo.geo.directions.turn.uturn', { route });
351
+ }
352
+ else {
353
+ directive = translate.instant('igo.geo.directions.turn.else', { route, aggregatedDirection, translatedModifier });
354
+ }
355
+ }
356
+ else if (type === 'new name') {
357
+ directive = translate.instant('igo.geo.directions.new name', { route, translatedDirection });
358
+ image = 'compass';
359
+ cssClass = '';
360
+ }
361
+ else if (type === 'depart') {
362
+ directive = translate.instant('igo.geo.directions.depart', { route, translatedDirection });
363
+ image = 'compass';
364
+ cssClass = '';
365
+ }
366
+ else if (type === 'arrive') {
367
+ if (lastStep) {
368
+ const coma = !translatedModifier ? '' : ', ';
369
+ aggregatedDirection = !translatedModifier ? '' : aggregatedDirection;
370
+ directive = translate.instant('igo.geo.directions.arrive.lastStep', { coma, aggregatedDirection });
371
+ }
372
+ else {
373
+ directive = translate.instant('igo.geo.directions.arrive.intermediate', { route });
374
+ image = 'map-marker';
375
+ cssClass = '';
376
+ }
377
+ }
378
+ else if (type === 'merge') {
379
+ directive = translate.instant('igo.geo.directions.merge', { route });
380
+ image = 'forward';
381
+ cssClass = 'rotate-270';
382
+ }
383
+ else if (type === 'on ramp') {
384
+ directive = translate.instant('igo.geo.directions.on ramp', { aggregatedDirection });
385
+ }
386
+ else if (type === 'off ramp') {
387
+ directive = translate.instant('igo.geo.directions.off ramp', { aggregatedDirection });
388
+ }
389
+ else if (type === 'fork') {
390
+ if (modifier.search('left') >= 0) {
391
+ directive = translate.instant('igo.geo.directions.fork.left', { route });
392
+ }
393
+ else if (modifier.search('right') >= 0) {
394
+ directive = translate.instant('igo.geo.directions.fork.right', { route });
395
+ }
396
+ else {
397
+ directive = translate.instant('igo.geo.directions.fork.else', { route });
398
+ }
399
+ }
400
+ else if (type === 'end of road') {
401
+ directive = translate.instant('igo.geo.directions.end of road', { translatedModifier, route });
402
+ }
403
+ else if (type === 'use lane') {
404
+ directive = translate.instant('igo.geo.directions.use lane');
405
+ }
406
+ else if (type === 'continue' && modifier !== 'uturn') {
407
+ directive = translate.instant('igo.geo.directions.continue.notUturn', { route });
408
+ image = 'forward';
409
+ cssClass = 'rotate-270';
410
+ }
411
+ else if (type === 'roundabout') {
412
+ const cntSuffix = exit === 1 ?
413
+ translate.instant('igo.geo.directions.cntSuffix.first') :
414
+ translate.instant('igo.geo.directions.cntSuffix.secondAndMore');
415
+ directive = translate.instant('igo.geo.directions.roundabout', { exit, cntSuffix, route });
416
+ image = 'chart-donut';
417
+ cssClass = '';
418
+ }
419
+ else if (type === 'rotary') {
420
+ directive = translate.instant('igo.geo.directions.rotary');
421
+ image = 'chart-donut';
422
+ cssClass = '';
423
+ }
424
+ else if (type === 'roundabout turn') {
425
+ directive = translate.instant('igo.geo.directions.roundabout turn');
426
+ image = 'chart-donut';
427
+ cssClass = '';
428
+ }
429
+ else if (type === 'exit roundabout') {
430
+ directive = translate.instant('igo.geo.directions.exit roundabout', { route });
431
+ image = 'forward';
432
+ cssClass = 'rotate-270';
433
+ }
434
+ else if (type === 'notification') {
435
+ directive = translate.instant('igo.geo.directions.notification');
436
+ }
437
+ else if (modifier === 'uturn') {
438
+ directive = translate.instant('igo.geo.directions.uturnText', { translatedDirection, route });
439
+ }
440
+ else {
441
+ directive = translate.instant('igo.geo.directions.unknown');
442
+ }
443
+ image = lastStep ? 'flag-variant' : image;
444
+ cssClass = lastStep ? '' : cssClass;
445
+ image = stepPosition === 0 ? 'compass' : image;
446
+ cssClass = stepPosition === 0 ? '' : cssClass;
447
+ return { instruction: directive, image, cssClass };
448
+ }
449
+ export function translateModifier(modifier, languageService) {
450
+ const translate = languageService.translate;
451
+ if (modifier === 'uturn') {
452
+ return translate.instant('igo.geo.directions.uturn');
453
+ }
454
+ else if (modifier === 'sharp right') {
455
+ return translate.instant('igo.geo.directions.sharp right');
456
+ }
457
+ else if (modifier === 'right') {
458
+ return translate.instant('igo.geo.directions.right');
459
+ }
460
+ else if (modifier === 'slight right') {
461
+ return translate.instant('igo.geo.directions.slight right');
462
+ }
463
+ else if (modifier === 'sharp left') {
464
+ return languageService.translate.instant('igo.geo.directions.sharp left');
465
+ }
466
+ else if (modifier === 'left') {
467
+ return languageService.translate.instant('igo.geo.directions.left');
468
+ }
469
+ else if (modifier === 'slight left') {
470
+ return languageService.translate.instant('igo.geo.directions.slight left');
471
+ }
472
+ else if (modifier === 'straight') {
473
+ return languageService.translate.instant('igo.geo.directions.straight');
474
+ }
475
+ else {
476
+ return modifier;
477
+ }
478
+ }
479
+ export function translateBearing(bearing, languageService) {
480
+ const translate = languageService.translate;
481
+ if (bearing >= 337 || bearing < 23) {
482
+ return translate.instant('igo.geo.cardinalPoints.n');
483
+ }
484
+ else if (bearing < 67) {
485
+ return translate.instant('igo.geo.cardinalPoints.ne');
486
+ }
487
+ else if (bearing < 113) {
488
+ return translate.instant('igo.geo.cardinalPoints.e');
489
+ }
490
+ else if (bearing < 157) {
491
+ return translate.instant('igo.geo.cardinalPoints.se');
492
+ }
493
+ else if (bearing < 203) {
494
+ return translate.instant('igo.geo.cardinalPoints.s');
495
+ }
496
+ else if (bearing < 247) {
497
+ return translate.instant('igo.geo.cardinalPoints.sw');
498
+ }
499
+ else if (bearing < 293) {
500
+ return translate.instant('igo.geo.cardinalPoints.w');
501
+ }
502
+ else if (bearing < 337) {
503
+ return translate.instant('igo.geo.cardinalPoints.nw');
504
+ }
505
+ else {
506
+ return;
507
+ }
508
+ }
509
509
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9ucy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RpcmVjdGlvbnMvc2hhcmVkL2RpcmVjdGlvbnMudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sU0FBUyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR2hELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRzVFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdqRjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUFzQixFQUFFLFlBQTRCLEtBQUssRUFBRSxLQUFLLEdBQUcsVUFBVTtJQUM5RyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixTQUFT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Q0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQ3REO1NBQU0sSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0tBQ3ZEO1NBQU07UUFDTCxPQUFPO0tBQ1I7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCAqIGFzIG9sU3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9sR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCAqIGFzIG9sR2VvbSBmcm9tICdvbC9nZW9tJztcbmltcG9ydCBPbEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0ICogYXMgb2xQcm9qIGZyb20gJ29sL3Byb2onO1xuXG5pbXBvcnQgeyB1dWlkLCBOdW1iZXJVdGlscyB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgRGlyZWN0aW9uLCBGZWF0dXJlV2l0aERpcmVjdGlvbiwgRmVhdHVyZVdpdGhTdG9wLCBTdG9wIH0gZnJvbSAnLi9kaXJlY3Rpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBjcmVhdGVPdmVybGF5TWFya2VyU3R5bGUgfSBmcm9tICcuLi8uLi9vdmVybGF5L3NoYXJlZC9vdmVybGF5LW1hcmtlci1zdHlsZS51dGlscyc7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZmVhdHVyZS1kYXRhc291cmNlJztcbmltcG9ydCB7IHRyeUJpbmRTdG9yZUxheWVyIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS51dGlscyc7XG5pbXBvcnQgeyB0cnlBZGRMb2FkaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9zdHJhdGVnaWVzLnV0aWxzJztcbmltcG9ydCB7IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL3N0cmF0ZWdpZXMvbG9hZGluZyc7XG5pbXBvcnQgeyBGRUFUVVJFLCBGZWF0dXJlTW90aW9uIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5lbnVtcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IEZlYXR1cmVHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEaXJlY3Rpb25SZWxhdGl2ZVBvc2l0aW9uVHlwZSwgRGlyZWN0aW9uVHlwZSB9IGZyb20gJy4vZGlyZWN0aW9ucy5lbnVtJztcbmltcG9ydCB7IFJvdXRlc0ZlYXR1cmVTdG9yZSwgU3RlcEZlYXR1cmVTdG9yZSwgU3RvcHNGZWF0dXJlU3RvcmUsIFN0b3BzU3RvcmUgfSBmcm9tICcuL3N0b3JlJztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHVwZGF0IHRoZSBzb3J0IG9mIHRoZSBsaXN0IGJhc2Ugb24gdGhlIHByb3ZpZGVkIGZpZWxkLlxuICogQHBhcmFtIHNvdXJjZSBzdG9wIHN0b3JlXG4gKiBAcGFyYW0gZGlyZWN0aW9uIGFzYyAvIGRlc2Mgc29ydCBvcmRlclxuICogQHBhcmFtIGZpZWxkIHRoZSBmaWVsZCB0byB1c2UgdG8gc29ydCB0aGUgdmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RvcmVTb3J0aW5nKHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUsIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJywgZmllbGQgPSAncG9zaXRpb24nKSB7XG4gIHN0b3BzU3RvcmUudmlldy5zb3J0KHtcbiAgICBkaXJlY3Rpb24sXG4gICAgdmFsdWVBY2Nlc3NvcjogKGVudGl0eTogU3RvcCkgPT4gZW50aXR5W2ZpZWxkXVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGluZGV4OiBudW1iZXIsIHRvdGFsTGVuZ3RoKTogRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUge1xuICBsZXQgcmVsYXRpdmVQb3NpdGlvbiA9IERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLkludGVybWVkaWF0ZTtcbiAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgcmVsYXRpdmVQb3NpdGlvbiA9IERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLlN0YXJ0O1xuICB9IGVsc2UgaWYgKGluZGV4ID09PSB0b3RhbExlbmd0aCAtIDEpIHtcbiAgICByZWxhdGl2ZVBvc2l0aW9uID0gRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUuRW5kO1xuICB9XG4gIHJldHVybiByZWxhdGl2ZVBvc2l0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVN0b3BzUG9zaXRpb24oc3RvcHNTdG9yZTogU3RvcHNTdG9yZSkge1xuXG4gIGNvbnN0IHN0b3BzVG9Db21wdXRlUG9zaXRpb24gPSBbLi4uc3RvcHNTdG9yZS5hbGwoKV07XG4gIHN0b3BzVG9Db21wdXRlUG9zaXRpb24uc29ydCgoYSwgYikgPT4gYS5wb3NpdGlvbiAtIGIucG9zaXRpb24pO1xuICBzdG9wc1RvQ29tcHV0ZVBvc2l0aW9uLm1hcCgoc3RvcCwgaSkgPT4ge1xuICAgIHN0b3AucG9zaXRpb24gPSBpO1xuICAgIHN0b3AucmVsYXRpdmVQb3NpdGlvbiA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHN0b3AucG9zaXRpb24sIHN0b3BzVG9Db21wdXRlUG9zaXRpb24ubGVuZ3RoKTtcbiAgfSk7XG4gIGlmIChzdG9wc1RvQ29tcHV0ZVBvc2l0aW9uKSB7XG4gICAgc3RvcHNTdG9yZS51cGRhdGVNYW55KHN0b3BzVG9Db21wdXRlUG9zaXRpb24pO1xuICB9XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBhZGQgYSBzdG9wIHRvIHRoZSBzdG9wIHN0b3JlLiBTdG9wIGFyZSBhbHdheXMgYWRkZWQgYmVmb3JlIHRoZSBsYXN0IHN0b3AuXG4gKiBAcGFyYW0gc3RvcHNTdG9yZSBzdG9wIHN0b3JlIGFzIGFuIEVudGl0eVN0b3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTdG9wVG9TdG9yZShzdG9wc1N0b3JlOiBTdG9wc1N0b3JlKTogU3RvcCB7XG5cbiAgY29uc3QgaWQgPSB1dWlkKCk7XG4gIGNvbnN0IHN0b3BzID0gc3RvcHNTdG9yZS5hbGwoKTtcbiAgbGV0IHBvc2l0aW9uczogbnVtYmVyW107XG4gIGlmIChzdG9wc1N0b3JlLmNvdW50ID09PSAwKSB7XG4gICAgcG9zaXRpb25zID0gWzBdO1xuICB9IGVsc2Uge1xuICAgIHBvc2l0aW9ucyA9IHN0b3BzLm1hcChzdG9wID0+IHN0b3AucG9zaXRpb24pO1xuICB9XG4gIGNvbnN0IG1heFBvc2l0aW9uOiBudW1iZXIgPSBNYXRoLm1heCguLi5wb3NpdGlvbnMpO1xuICBjb25zdCBpbnNlcnRQb3NpdGlvbjogbnVtYmVyID0gbWF4UG9zaXRpb247XG4gIGNvbnN0IGxhc3RQb3NpdGlvbjogbnVtYmVyID0gbWF4UG9zaXRpb24gKyAxO1xuXG4gIGNvbnN0IHN0b3BUb1VwZGF0ZSA9IHN0b3BzU3RvcmUuYWxsKCkuZmluZChzdG9wID0+IHN0b3AucG9zaXRpb24gPT09IG1heFBvc2l0aW9uKTtcbiAgaWYgKHN0b3BUb1VwZGF0ZSkge1xuICAgIHN0b3BUb1VwZGF0ZS5wb3NpdGlvbiA9IGxhc3RQb3NpdGlvbjtcbiAgICBzdG9wVG9VcGRhdGUucmVsYXRpdmVQb3NpdGlvbiA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGxhc3RQb3NpdGlvbiwgc3RvcHNTdG9yZS5jb3VudCArIDEpO1xuICB9XG5cbiAgc3RvcHNTdG9yZS5pbnNlcnQoeyBpZCwgcG9zaXRpb246IGluc2VydFBvc2l0aW9uLCByZWxhdGl2ZVBvc2l0aW9uOiBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihpbnNlcnRQb3NpdGlvbiwgc3RvcHNTdG9yZS5jb3VudCArIDEpIH0pO1xuXG4gIHVwZGF0ZVN0b3JlU29ydGluZyhzdG9wc1N0b3JlKTtcbiAgcmV0dXJuIHN0b3BzU3RvcmUuZ2V0KGlkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVN0b3BGcm9tU3RvcmUoc3RvcHNTdG9yZTogU3RvcHNTdG9yZSwgc3RvcDogU3RvcCkge1xuICBzdG9wc1N0b3JlLmRlbGV0ZShzdG9wKTtcbiAgY29tcHV0ZVN0b3BzUG9zaXRpb24oc3RvcHNTdG9yZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3R5bGUgZm9yIHRoZSBkaXJlY3Rpb25zIHN0b3BzIGFuZCByb3V0ZXNcbiAqIEBwYXJhbSBmZWF0dXJlIE9sRmVhdHVyZVxuICogQHJldHVybnMgT0wgc3R5bGUgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcmVjdGlvbnNTdHlsZShcbiAgZmVhdHVyZTogb2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICByZXNvbHV0aW9uOiBudW1iZXJcbik6IG9sU3R5bGUuU3R5bGUgfCBvbFN0eWxlLlN0eWxlW10ge1xuICBjb25zdCB2ZXJ0ZXhTdHlsZSA9IFtcbiAgICBuZXcgb2xTdHlsZS5TdHlsZSh7XG4gICAgICBnZW9tZXRyeTogZmVhdHVyZS5nZXRHZW9tZXRyeSgpLFxuICAgICAgaW1hZ2U6IG5ldyBvbFN0eWxlLkNpcmNsZSh7XG4gICAgICAgIHJhZGl1czogNyxcbiAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2UoeyBjb2xvcjogJyNGRjAwMDAnLCB3aWR0aDogMyB9KVxuICAgICAgfSlcbiAgICB9KVxuICBdO1xuXG4gIGNvbnN0IHN0b3BTdHlsZSA9IGNyZWF0ZU92ZXJsYXlNYXJrZXJTdHlsZSh7XG4gICAgdGV4dDogZmVhdHVyZS5nZXQoJ3N0b3BUZXh0JyksXG4gICAgb3BhY2l0eTogZmVhdHVyZS5nZXQoJ3N0b3BPcGFjaXR5JyksXG4gICAgbWFya2VyQ29sb3I6IGZlYXR1cmUuZ2V0KCdzdG9wQ29sb3InKSxcbiAgICBtYXJrZXJPdXRsaW5lQ29sb3I6IFsyNTUsIDI1NSwgMjU1XVxuICB9KTtcblxuICBjb25zdCByb3V0ZVN0eWxlID0gW1xuICAgIG5ldyBvbFN0eWxlLlN0eWxlKHtcbiAgICAgIHN0cm9rZTogbmV3IG9sU3R5bGUuU3Ryb2tlKHsgY29sb3I6IGByZ2JhKDEwNiwgMTIxLCAxMzAsICR7ZmVhdHVyZS5nZXQoJ2FjdGl2ZScpID8gMC43NSA6IDB9KWAsIHdpZHRoOiAxMCB9KVxuICAgIH0pLFxuICAgIG5ldyBvbFN0eWxlLlN0eWxlKHtcbiAgICAgIHN0cm9rZTogbmV3IG9sU3R5bGUuU3Ryb2tlKHsgY29sb3I6IGByZ2JhKDc5LCAxNjksIDIyMSwgJHtmZWF0dXJlLmdldCgnYWN0aXZlJykgPyAwLjc1IDogMH0pYCwgd2lkdGg6IDYgfSlcbiAgICB9KVxuICBdO1xuXG4gIGlmIChmZWF0dXJlLmdldCgndHlwZScpID09PSBEaXJlY3Rpb25UeXBlLlN0b3ApIHtcbiAgICByZXR1cm4gc3RvcFN0eWxlO1xuICB9XG4gIGlmIChmZWF0dXJlLmdldCgndHlwZScpID09PSAndmVydGV4Jykge1xuICAgIHJldHVybiB2ZXJ0ZXhTdHlsZTtcbiAgfVxuICBpZiAoZmVhdHVyZS5nZXQoJ3R5cGUnKSA9PT0gRGlyZWN0aW9uVHlwZS5Sb3V0ZSkge1xuICAgIHJldHVybiByb3V0ZVN0eWxlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0U3RvcHNGZWF0dXJlU3RvcmUoc3RvcHNGZWF0dXJlU3RvcmU6IFN0b3BzRmVhdHVyZVN0b3JlLCBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSkge1xuICBjb25zdCBsb2FkaW5nU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcbiAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxuICB9KTtcblxuICBjb25zdCBzdG9wc0xheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXN0b3BzLWxheWVyJyxcbiAgICB0aXRsZTogbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnNGb3JtLnN0b3BMYXllcicpLFxuICAgIHpJbmRleDogOTExLFxuICAgIHNvdXJjZTogbmV3IEZlYXR1cmVEYXRhU291cmNlKCksXG4gICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxuICAgIHdvcmtzcGFjZToge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSxcbiAgICBsaW5rZWRMYXllcnM6IHtcbiAgICAgIGxpbmtJZDogJ2lnby1kaXJlY3Rpb24tc3RvcHMtbGF5ZXInLFxuICAgICAgbGlua3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN5bmNlZERlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBsaW5rZWRJZHM6IFsnaWdvLWRpcmVjdGlvbi1yb3V0ZS1sYXllciddLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIGV4cG9ydGFibGU6IHRydWUsXG4gICAgYnJvd3NhYmxlOiBmYWxzZSxcbiAgICBzdHlsZTogZGlyZWN0aW9uc1N0eWxlXG4gIH0pO1xuICB0cnlCaW5kU3RvcmVMYXllcihzdG9wc0ZlYXR1cmVTdG9yZSwgc3RvcHNMYXllcik7XG4gIHN0b3BzRmVhdHVyZVN0b3JlLmxheWVyLnZpc2libGUgPSB0cnVlO1xuICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3koc3RvcHNGZWF0dXJlU3RvcmUsIGxvYWRpbmdTdHJhdGVneSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0Um91dGVzRmVhdHVyZVN0b3JlKHJvdXRlc0ZlYXR1cmVTdG9yZTogUm91dGVzRmVhdHVyZVN0b3JlLCBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSkge1xuICBjb25zdCBsb2FkaW5nU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcbiAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxuICB9KTtcblxuICBjb25zdCByb3V0ZUxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXJvdXRlLWxheWVyJyxcbiAgICB0aXRsZTogbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnNGb3JtLnJvdXRlTGF5ZXInKSxcbiAgICB6SW5kZXg6IDkxMCxcbiAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgIHNob3dJbkxheWVyTGlzdDogdHJ1ZSxcbiAgICB3b3Jrc3BhY2U6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgbGlua2VkTGF5ZXJzOiB7XG4gICAgICBsaW5rSWQ6ICdpZ28tZGlyZWN0aW9uLXJvdXRlLWxheWVyJ1xuICAgIH0sXG4gICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHJvdXRlc0ZlYXR1cmVTdG9yZSwgcm91dGVMYXllcik7XG4gIHJvdXRlc0ZlYXR1cmVTdG9yZS5sYXllci52aXNpYmxlID0gdHJ1ZTtcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KHJvdXRlc0ZlYXR1cmVTdG9yZSwgbG9hZGluZ1N0cmF0ZWd5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRTdGVwRmVhdHVyZVN0b3JlKHN0ZXBGZWF0dXJlU3RvcmU6IFN0ZXBGZWF0dXJlU3RvcmUpIHtcbiAgY29uc3QgbG9hZGluZ1N0cmF0ZWd5ID0gbmV3IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSh7XG4gICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmVcbiAgfSk7XG5cbiAgY29uc3Qgc3RlcExheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXN0ZXAtbGF5ZXInLFxuICAgIHRpdGxlOiAnJyxcbiAgICB6SW5kZXg6IDkxMCxcbiAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgIHNob3dJbkxheWVyTGlzdDogZmFsc2UsXG4gICAgd29ya3NwYWNlOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICB9LFxuICAgIGxpbmtlZExheWVyczoge1xuICAgICAgbGlua0lkOiAnaWdvLWRpcmVjdGlvbi1yb3V0ZS1sYXllcidcbiAgICB9LFxuICAgIGV4cG9ydGFibGU6IGZhbHNlLFxuICAgIGJyb3dzYWJsZTogZmFsc2UsXG4gICAgc3R5bGU6IGRpcmVjdGlvbnNTdHlsZVxuICB9KTtcbiAgdHJ5QmluZFN0b3JlTGF5ZXIoc3RlcEZlYXR1cmVTdG9yZSwgc3RlcExheWVyKTtcbiAgc3RlcEZlYXR1cmVTdG9yZS5sYXllci52aXNpYmxlID0gdHJ1ZTtcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KHN0ZXBGZWF0dXJlU3RvcmUsIGxvYWRpbmdTdHJhdGVneSk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN0b3BUb1N0b3BzRmVhdHVyZVN0b3JlKFxuICBzdG9wOiBTdG9wLFxuICBzdG9wc1N0b3JlOiBTdG9wc1N0b3JlLFxuICBzdG9wc0ZlYXR1cmVTdG9yZTogU3RvcHNGZWF0dXJlU3RvcmUsXG4gIHByb2plY3Rpb246IHN0cmluZyxcbiAgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UpIHtcbiAgbGV0IHN0b3BDb2xvcjtcbiAgbGV0IHN0b3BUZXh0O1xuXG5cbiAgc3dpdGNoIChzdG9wLnJlbGF0aXZlUG9zaXRpb24pIHtcbiAgICBjYXNlIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLlN0YXJ0OlxuICAgICAgc3RvcENvbG9yID0gJyMwMDgwMDAnO1xuICAgICAgc3RvcFRleHQgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0uc3RhcnQnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUuRW5kOlxuICAgICAgc3RvcENvbG9yID0gJyNmNjQxMzknO1xuICAgICAgc3RvcFRleHQgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0uZW5kJyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RvcENvbG9yID0gJyNmZmQ3MDAnO1xuICAgICAgc3RvcFRleHQgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0uaW50ZXJtZWRpYXRlJykgKyAnICMnICsgc3RvcC5wb3NpdGlvbjtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgb2xHZW9tLlBvaW50KFxuICAgIG9sUHJvai50cmFuc2Zvcm0oc3RvcC5jb29yZGluYXRlcywgcHJvamVjdGlvbiwgc3RvcHNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb24pXG4gICk7XG5cbiAgY29uc3QgZ2VvanNvbkdlb20gPSBuZXcgT2xHZW9KU09OKCkud3JpdGVHZW9tZXRyeU9iamVjdChnZW9tZXRyeSwge1xuICAgIGZlYXR1cmVQcm9qZWN0aW9uOiBzdG9wc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbixcbiAgICBkYXRhUHJvamVjdGlvbjogc3RvcHNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb25cbiAgfSkgYXMgRmVhdHVyZUdlb21ldHJ5O1xuXG4gIGNvbnN0IHByZXZpb3VzU3RvcCA9IHN0b3BzRmVhdHVyZVN0b3JlLmdldChzdG9wLmlkKTtcbiAgY29uc3QgcHJldmlvdXNTdG9wUmV2aXNpb24gPSBwcmV2aW91c1N0b3AgPyBwcmV2aW91c1N0b3AubWV0YS5yZXZpc2lvbiA6IDA7XG5cbiAgY29uc3Qgc3RvcEZlYXR1cmVTdG9yZTogRmVhdHVyZVdpdGhTdG9wID0ge1xuICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgZ2VvbWV0cnk6IGdlb2pzb25HZW9tLFxuICAgIHByb2plY3Rpb246IHN0b3BzRmVhdHVyZVN0b3JlLm1hcC5wcm9qZWN0aW9uLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGlkOiBzdG9wLmlkLFxuICAgICAgdHlwZTogRGlyZWN0aW9uVHlwZS5TdG9wLFxuICAgICAgc3RvcFRleHQsXG4gICAgICBzdG9wQ29sb3IsXG4gICAgICBzdG9wT3BhY2l0eTogMSxcbiAgICAgIHN0b3BcbiAgICB9LFxuICAgIG1ldGE6IHtcbiAgICAgIGlkOiBzdG9wLmlkLFxuICAgICAgcmV2aXNpb246IHByZXZpb3VzU3RvcFJldmlzaW9uICsgMVxuICAgIH0sXG4gICAgb2w6IG5ldyBvbEZlYXR1cmUoeyBnZW9tZXRyeSB9KVxuICB9O1xuICBzdG9wc0ZlYXR1cmVTdG9yZS51cGRhdGUoc3RvcEZlYXR1cmVTdG9yZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGREaXJlY3Rpb25Ub1JvdXRlc0ZlYXR1cmVTdG9yZShcbiAgcm91dGVzRmVhdHVyZVN0b3JlOiBSb3V0ZXNGZWF0dXJlU3RvcmUsXG4gIGRpcmVjdGlvbjogRGlyZWN0aW9uLFxuICBwcm9qZWN0aW9uOiBzdHJpbmcsXG4gIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlLFxuICBtb3ZlVG9FeHRlbnQgPSBmYWxzZSkge1xuICBjb25zdCBnZW9tID0gZGlyZWN0aW9uLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICBjb25zdCBnZW9tZXRyeTQzMjYgPSBuZXcgb2xHZW9tLkxpbmVTdHJpbmcoZ2VvbSk7XG4gIGNvbnN0IGdlb21ldHJ5ID0gZ2VvbWV0cnk0MzI2LnRyYW5zZm9ybShcbiAgICBwcm9qZWN0aW9uLFxuICAgIHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvblxuICApO1xuXG4gIGNvbnN0IGdlb2pzb25HZW9tID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3QoZ2VvbWV0cnksIHtcbiAgICBmZWF0dXJlUHJvamVjdGlvbjogcm91dGVzRmVhdHVyZVN0b3JlLm1hcC5wcm9qZWN0aW9uLFxuICAgIGRhdGFQcm9qZWN0aW9uOiByb3V0ZXNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb25cbiAgfSkgYXMgRmVhdHVyZUdlb21ldHJ5O1xuXG5cbiAgY29uc3QgcHJldmlvdXNSb3V0ZSA9IHJvdXRlc0ZlYXR1cmVTdG9yZS5nZXQoZGlyZWN0aW9uLmlkKTtcbiAgY29uc3QgcHJldmlvdXNSb3V0ZVJldmlzaW9uID0gcHJldmlvdXNSb3V0ZVxuICAgID8gcHJldmlvdXNSb3V0ZS5tZXRhLnJldmlzaW9uXG4gICAgOiAwO1xuXG4gIGNvbnN0IHJvdXRlRmVhdHVyZVN0b3JlOiBGZWF0dXJlV2l0aERpcmVjdGlvbiA9IHtcbiAgICB0eXBlOiBGRUFUVVJFLFxuICAgIGdlb21ldHJ5OiBnZW9qc29uR2VvbSxcbiAgICBwcm9qZWN0aW9uOiByb3V0ZXNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb24sXG4gICAgcHJvcGVydGllczoge1xuICAgICAgaWQ6IGRpcmVjdGlvbi5pZCxcbiAgICAgIHR5cGU6IERpcmVjdGlvblR5cGUuUm91dGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBkaXJlY3Rpb25cbiAgICB9LFxuICAgIG1ldGE6IHtcbiAgICAgIGlkOiBkaXJlY3Rpb24uaWQsXG4gICAgICByZXZpc2lvbjogcHJldmlvdXNSb3V0ZVJldmlzaW9uICsgMVxuICAgIH0sXG4gICAgb2w6IG5ldyBvbEZlYXR1cmUoeyBnZW9tZXRyeSB9KVxuICB9O1xuICByb3V0ZXNGZWF0dXJlU3RvcmUudXBkYXRlKHJvdXRlRmVhdHVyZVN0b3JlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoZGlzdGFuY2UgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGRpc3RhbmNlID49IDEwMDAwMCkge1xuICAgIHJldHVybiBOdW1iZXJVdGlscy5yb3VuZFRvTkRlY2ltYWwoTWF0aC5yb3VuZChkaXN0YW5jZSkgLyAxMDAwLCAxKSArICcga20nO1xuICB9XG4gIGlmIChkaXN0YW5jZSA+PSAxMDAwMCkge1xuICAgIHJldHVybiBOdW1iZXJVdGlscy5yb3VuZFRvTkRlY2ltYWwoTWF0aC5yb3VuZChkaXN0YW5jZSkgLyAxMDAgLyAxMCwgMSkgKyAnIGttJztcbiAgfVxuICBpZiAoZGlzdGFuY2UgPj0gMTAwMCkge1xuICAgIHJldHVybiBOdW1iZXJVdGlscy5yb3VuZFRvTkRlY2ltYWwoTWF0aC5yb3VuZChkaXN0YW5jZSkgLyAxMDAgLyAxMCwgMSkgKyAnIGttJztcbiAgfVxuICByZXR1cm4gTnVtYmVyVXRpbHMucm91bmRUb05EZWNpbWFsKGRpc3RhbmNlLCAwKSArICcgbSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGR1cmF0aW9uID49IDM2MDApIHtcbiAgICBjb25zdCBob3VyID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IE1hdGgucm91bmQoKGR1cmF0aW9uIC8gMzYwMCAtIGhvdXIpICogNjApO1xuICAgIGlmIChtaW51dGUgPT09IDYwKSB7XG4gICAgICByZXR1cm4gaG91ciArIDEgKyAnIGgnO1xuICAgIH1cbiAgICByZXR1cm4gaG91ciArICcgaCAnICsgbWludXRlICsgJyBtaW4nO1xuICB9XG5cbiAgaWYgKGR1cmF0aW9uID49IDYwKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoZHVyYXRpb24gLyA2MCkgKyAnIG1pbic7XG4gIH1cbiAgcmV0dXJuIGR1cmF0aW9uICsgJyBzJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEluc3RydWN0aW9uKFxuICB0eXBlLFxuICBtb2RpZmllcixcbiAgcm91dGUsXG4gIGRpcmVjdGlvbixcbiAgc3RlcFBvc2l0aW9uLFxuICBleGl0LFxuICBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgbGFzdFN0ZXAgPSBmYWxzZVxuKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gIGxldCBkaXJlY3RpdmU7XG4gIGxldCBpbWFnZSA9ICdmb3J3YXJkJztcbiAgbGV0IGNzc0NsYXNzID0gJ3JvdGF0ZS0yNzAnO1xuICBjb25zdCB0cmFuc2xhdGVkRGlyZWN0aW9uID0gdHJhbnNsYXRlQmVhcmluZyhkaXJlY3Rpb24sIGxhbmd1YWdlU2VydmljZSk7XG4gIGNvbnN0IHRyYW5zbGF0ZWRNb2RpZmllciA9IHRyYW5zbGF0ZU1vZGlmaWVyKG1vZGlmaWVyLCBsYW5ndWFnZVNlcnZpY2UpO1xuICBjb25zdCBwcmVmaXggPSBtb2RpZmllciA9PT0gJ3N0cmFpZ2h0JyA/ICcnIDogdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5tb2RpZmllci5wcmVmaXgnKTtcblxuICBsZXQgYWdncmVnYXRlZERpcmVjdGlvbiA9IHByZWZpeCArIHRyYW5zbGF0ZWRNb2RpZmllcjtcblxuXG4gIGlmIChtb2RpZmllcj8uc2VhcmNoKCdzbGlnaHQnKSA+PSAwKSB7XG4gICAgYWdncmVnYXRlZERpcmVjdGlvbiA9IHRyYW5zbGF0ZWRNb2RpZmllcjtcbiAgfVxuXG4gIGlmIChtb2RpZmllciA9PT0gJ3V0dXJuJykge1xuICAgIGltYWdlID0gJ2ZvcndhcmQnO1xuICAgIGNzc0NsYXNzID0gJ3JvdGF0ZS05MCc7XG4gIH0gZWxzZSBpZiAobW9kaWZpZXIgPT09ICdzaGFycCByaWdodCcpIHtcbiAgICBpbWFnZSA9ICdzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQnO1xuICAgIGNzc0NsYXNzID0gJ2ljb24tZmxpcHBlZCc7XG4gIH0gZWxzZSBpZiAobW9kaWZpZXIgPT09ICdyaWdodCcpIHtcbiAgICBpbWFnZSA9ICdzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQnO1xuICAgIGNzc0NsYXNzID0gJ2ljb24tZmxpcHBlZCc7XG4gIH0gZWxzZSBpZiAobW9kaWZpZXIgPT09ICdzbGlnaHQgcmlnaHQnKSB7XG4gICAgaW1hZ2UgPSAnZm9yd2FyZCc7XG4gICAgY3NzQ2xhc3MgPSAncm90YXRlLTI5MCc7XG4gIH0gZWxzZSBpZiAobW9kaWZpZXIgPT09ICdzdHJhaWdodCcpIHtcbiAgICBpbWFnZSA9ICdmb3J3YXJkJztcbiAgfSBlbHNlIGlmIChtb2RpZmllciA9PT0gJ3NsaWdodCBsZWZ0Jykge1xuICAgIGltYWdlID0gJ2ZvcndhcmQnO1xuICAgIGNzc0NsYXNzID0gJ3JvdGF0ZS0yNTAnO1xuICB9IGVsc2UgaWYgKG1vZGlmaWVyID09PSAnbGVmdCcpIHtcbiAgICBpbWFnZSA9ICdzdWJkaXJlY3RvcnktYXJyb3ctbGVmdCc7XG4gICAgY3NzQ2xhc3MgPSAnaWNvbi1mbGlwcGVkJztcbiAgfSBlbHNlIGlmIChtb2RpZmllciA9PT0gJ3NoYXJwIGxlZnQnKSB7XG4gICAgaW1hZ2UgPSAnc3ViZGlyZWN0b3J5LWFycm93LWxlZnQnO1xuICAgIGNzc0NsYXNzID0gJ2ljb24tZmxpcHBlZCc7XG4gIH1cblxuICBpZiAodHlwZSA9PT0gJ3R1cm4nKSB7XG4gICAgaWYgKG1vZGlmaWVyID09PSAnc3RyYWlnaHQnKSB7XG4gICAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLnR1cm4uc3RyYWlnaHQnLCB7IHJvdXRlIH0pO1xuICAgIH0gZWxzZSBpZiAobW9kaWZpZXIgPT09ICd1dHVybicpIHtcbiAgICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMudHVybi51dHVybicsIHsgcm91dGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMudHVybi5lbHNlJywgeyByb3V0ZSwgYWdncmVnYXRlZERpcmVjdGlvbiwgdHJhbnNsYXRlZE1vZGlmaWVyIH0pO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbmV3IG5hbWUnKSB7XG4gICAgZGlyZWN0aXZlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5uZXcgbmFtZScsIHsgcm91dGUsIHRyYW5zbGF0ZWREaXJlY3Rpb24gfSk7XG4gICAgaW1hZ2UgPSAnY29tcGFzcyc7XG4gICAgY3NzQ2xhc3MgPSAnJztcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnZGVwYXJ0Jykge1xuICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMuZGVwYXJ0JywgeyByb3V0ZSwgdHJhbnNsYXRlZERpcmVjdGlvbiB9KTtcbiAgICBpbWFnZSA9ICdjb21wYXNzJztcbiAgICBjc3NDbGFzcyA9ICcnO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJpdmUnKSB7XG4gICAgaWYgKGxhc3RTdGVwKSB7XG4gICAgICBjb25zdCBjb21hID0gIXRyYW5zbGF0ZWRNb2RpZmllciA/ICcnIDogJywgJztcbiAgICAgIGFnZ3JlZ2F0ZWREaXJlY3Rpb24gPSAhdHJhbnNsYXRlZE1vZGlmaWVyID8gJycgOiBhZ2dyZWdhdGVkRGlyZWN0aW9uO1xuICAgICAgZGlyZWN0aXZlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5hcnJpdmUubGFzdFN0ZXAnLCB7IGNvbWEsIGFnZ3JlZ2F0ZWREaXJlY3Rpb24gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMuYXJyaXZlLmludGVybWVkaWF0ZScsIHsgcm91dGUgfSk7XG4gICAgICBpbWFnZSA9ICdtYXAtbWFya2VyJztcbiAgICAgIGNzc0NsYXNzID0gJyc7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtZXJnZScpIHtcbiAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLm1lcmdlJywgeyByb3V0ZSB9KTtcbiAgICBpbWFnZSA9ICdmb3J3YXJkJztcbiAgICBjc3NDbGFzcyA9ICdyb3RhdGUtMjcwJztcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb24gcmFtcCcpIHtcbiAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLm9uIHJhbXAnLCB7IGFnZ3JlZ2F0ZWREaXJlY3Rpb24gfSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29mZiByYW1wJykge1xuICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMub2ZmIHJhbXAnLCB7IGFnZ3JlZ2F0ZWREaXJlY3Rpb24gfSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2ZvcmsnKSB7XG4gICAgaWYgKG1vZGlmaWVyLnNlYXJjaCgnbGVmdCcpID49IDApIHtcbiAgICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMuZm9yay5sZWZ0JywgeyByb3V0ZSB9KTtcbiAgICB9IGVsc2UgaWYgKG1vZGlmaWVyLnNlYXJjaCgncmlnaHQnKSA+PSAwKSB7XG4gICAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLmZvcmsucmlnaHQnLCB7IHJvdXRlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLmZvcmsuZWxzZScsIHsgcm91dGUgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdlbmQgb2Ygcm9hZCcpIHtcbiAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLmVuZCBvZiByb2FkJywgeyB0cmFuc2xhdGVkTW9kaWZpZXIsIHJvdXRlIH0pO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2UgbGFuZScpIHtcbiAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLnVzZSBsYW5lJyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbnRpbnVlJyAmJiBtb2RpZmllciAhPT0gJ3V0dXJuJykge1xuICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMuY29udGludWUubm90VXR1cm4nLCB7IHJvdXRlIH0pO1xuICAgIGltYWdlID0gJ2ZvcndhcmQnO1xuICAgIGNzc0NsYXNzID0gJ3JvdGF0ZS0yNzAnO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyb3VuZGFib3V0Jykge1xuICAgIGNvbnN0IGNudFN1ZmZpeCA9IGV4aXQgPT09IDEgP1xuICAgICAgdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5jbnRTdWZmaXguZmlyc3QnKSA6XG4gICAgICB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLmNudFN1ZmZpeC5zZWNvbmRBbmRNb3JlJyk7XG4gICAgZGlyZWN0aXZlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5yb3VuZGFib3V0JywgeyBleGl0LCBjbnRTdWZmaXgsIHJvdXRlIH0pO1xuICAgIGltYWdlID0gJ2NoYXJ0LWRvbnV0JztcbiAgICBjc3NDbGFzcyA9ICcnO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyb3RhcnknKSB7XG4gICAgZGlyZWN0aXZlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5yb3RhcnknKTtcbiAgICBpbWFnZSA9ICdjaGFydC1kb251dCc7XG4gICAgY3NzQ2xhc3MgPSAnJztcbiAgfSBlbHNlIGlmICh0eXBlID09PSAncm91bmRhYm91dCB0dXJuJykge1xuICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMucm91bmRhYm91dCB0dXJuJyk7XG4gICAgaW1hZ2UgPSAnY2hhcnQtZG9udXQnO1xuICAgIGNzc0NsYXNzID0gJyc7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2V4aXQgcm91bmRhYm91dCcpIHtcbiAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLmV4aXQgcm91bmRhYm91dCcsIHsgcm91dGUgfSk7XG4gICAgaW1hZ2UgPSAnZm9yd2FyZCc7XG4gICAgY3NzQ2xhc3MgPSAncm90YXRlLTI3MCc7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ25vdGlmaWNhdGlvbicpIHtcbiAgICBkaXJlY3RpdmUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLm5vdGlmaWNhdGlvbicpO1xuICB9IGVsc2UgaWYgKG1vZGlmaWVyID09PSAndXR1cm4nKSB7XG4gICAgZGlyZWN0aXZlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy51dHVyblRleHQnLCB7IHRyYW5zbGF0ZWREaXJlY3Rpb24sIHJvdXRlIH0pO1xuICB9IGVsc2Uge1xuICAgIGRpcmVjdGl2ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMudW5rbm93bicpO1xuICB9XG5cbiAgaW1hZ2UgPSBsYXN0U3RlcCA/ICdmbGFnLXZhcmlhbnQnIDogaW1hZ2U7XG4gIGNzc0NsYXNzID0gbGFzdFN0ZXAgPyAnJyA6IGNzc0NsYXNzO1xuICBpbWFnZSA9IHN0ZXBQb3NpdGlvbiA9PT0gMCA/ICdjb21wYXNzJyA6IGltYWdlO1xuICBjc3NDbGFzcyA9IHN0ZXBQb3NpdGlvbiA9PT0gMCA/ICcnIDogY3NzQ2xhc3M7XG5cbiAgcmV0dXJuIHsgaW5zdHJ1Y3Rpb246IGRpcmVjdGl2ZSwgaW1hZ2UsIGNzc0NsYXNzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVNb2RpZmllcihtb2RpZmllciwgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgaWYgKG1vZGlmaWVyID09PSAndXR1cm4nKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMudXR1cm4nKTtcbiAgfSBlbHNlIGlmIChtb2RpZmllciA9PT0gJ3NoYXJwIHJpZ2h0Jykge1xuICAgIHJldHVybiB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLnNoYXJwIHJpZ2h0Jyk7XG4gIH0gZWxzZSBpZiAobW9kaWZpZXIgPT09ICdyaWdodCcpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5yaWdodCcpO1xuICB9IGVsc2UgaWYgKG1vZGlmaWVyID09PSAnc2xpZ2h0IHJpZ2h0Jykge1xuICAgIHJldHVybiB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLnNsaWdodCByaWdodCcpO1xuICB9IGVsc2UgaWYgKG1vZGlmaWVyID09PSAnc2hhcnAgbGVmdCcpIHtcbiAgICByZXR1cm4gbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMuc2hhcnAgbGVmdCcpO1xuICB9IGVsc2UgaWYgKG1vZGlmaWVyID09PSAnbGVmdCcpIHtcbiAgICByZXR1cm4gbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMubGVmdCcpO1xuICB9IGVsc2UgaWYgKG1vZGlmaWVyID09PSAnc2xpZ2h0IGxlZnQnKSB7XG4gICAgcmV0dXJuIGxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kaXJlY3Rpb25zLnNsaWdodCBsZWZ0Jyk7XG4gIH0gZWxzZSBpZiAobW9kaWZpZXIgPT09ICdzdHJhaWdodCcpIHtcbiAgICByZXR1cm4gbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMuc3RyYWlnaHQnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9kaWZpZXI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZUJlYXJpbmcoYmVhcmluZzogbnVtYmVyLCBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSkge1xuICBjb25zdCB0cmFuc2xhdGUgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xuICBpZiAoYmVhcmluZyA+PSAzMzcgfHwgYmVhcmluZyA8IDIzKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmNhcmRpbmFsUG9pbnRzLm4nKTtcbiAgfSBlbHNlIGlmIChiZWFyaW5nIDwgNjcpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uY2FyZGluYWxQb2ludHMubmUnKTtcbiAgfSBlbHNlIGlmIChiZWFyaW5nIDwgMTEzKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmNhcmRpbmFsUG9pbnRzLmUnKTtcbiAgfSBlbHNlIGlmIChiZWFyaW5nIDwgMTU3KSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmNhcmRpbmFsUG9pbnRzLnNlJyk7XG4gIH0gZWxzZSBpZiAoYmVhcmluZyA8IDIwMykge1xuICAgIHJldHVybiB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5jYXJkaW5hbFBvaW50cy5zJyk7XG4gIH0gZWxzZSBpZiAoYmVhcmluZyA8IDI0Nykge1xuICAgIHJldHVybiB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5jYXJkaW5hbFBvaW50cy5zdycpO1xuICB9IGVsc2UgaWYgKGJlYXJpbmcgPCAyOTMpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uY2FyZGluYWxQb2ludHMudycpO1xuICB9IGVsc2UgaWYgKGJlYXJpbmcgPCAzMzcpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uY2FyZGluYWxQb2ludHMubncnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuXG4iXX0=