@igo2/geo 1.14.0 → 1.14.2

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 (464) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +7 -5
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +59 -21
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +7 -7
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
  10. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
  11. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  12. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +2 -2
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
  14. package/esm2020/lib/catalog/catalog.module.mjs +1 -1
  15. package/esm2020/lib/catalog/index.mjs +1 -1
  16. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  17. package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
  18. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  19. package/esm2020/lib/catalog/shared/catalog.service.mjs +1 -1
  20. package/esm2020/lib/catalog/shared/index.mjs +1 -1
  21. package/esm2020/lib/datasource/datasource.module.mjs +1 -1
  22. package/esm2020/lib/datasource/index.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/capabilities.service.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasource.service.mjs +1 -1
  25. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  27. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  29. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  30. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  32. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
  34. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
  36. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  37. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  39. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/index.mjs +1 -1
  41. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  43. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  45. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  47. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  49. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  50. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  52. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  53. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  55. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  57. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  58. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  59. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  60. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  61. package/esm2020/lib/datasource/shared/index.mjs +1 -1
  62. package/esm2020/lib/datasource/shared/options/index.mjs +1 -1
  63. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
  64. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  65. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
  66. package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
  67. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +1 -1
  68. package/esm2020/lib/datasource/utils/index.mjs +1 -1
  69. package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
  70. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +2 -2
  71. package/esm2020/lib/directions/directions-buttons/index.mjs +1 -1
  72. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
  73. package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
  74. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
  75. package/esm2020/lib/directions/directions-results/index.mjs +1 -1
  76. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  77. package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
  78. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
  79. package/esm2020/lib/directions/directions-sources/index.mjs +1 -1
  80. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  81. package/esm2020/lib/directions/directions.component.mjs +2 -2
  82. package/esm2020/lib/directions/directions.module.mjs +1 -1
  83. package/esm2020/lib/directions/index.mjs +1 -1
  84. package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
  85. package/esm2020/lib/directions/shared/directions.enum.mjs +1 -1
  86. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  87. package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
  88. package/esm2020/lib/directions/shared/directions.utils.mjs +1 -1
  89. package/esm2020/lib/directions/shared/index.mjs +1 -1
  90. package/esm2020/lib/directions/shared/store.mjs +1 -1
  91. package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
  92. package/esm2020/lib/download/download-button/index.mjs +1 -1
  93. package/esm2020/lib/download/download.module.mjs +1 -1
  94. package/esm2020/lib/download/index.mjs +1 -1
  95. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  96. package/esm2020/lib/download/shared/download.service.mjs +1 -1
  97. package/esm2020/lib/download/shared/index.mjs +1 -1
  98. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
  99. package/esm2020/lib/draw/draw/draw-popup.component.mjs +2 -2
  100. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  101. package/esm2020/lib/draw/draw/draw.component.mjs +4 -2
  102. package/esm2020/lib/draw/draw/draw.module.mjs +1 -1
  103. package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
  104. package/esm2020/lib/draw/index.mjs +1 -1
  105. package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
  106. package/esm2020/lib/draw/shared/draw-style.service.mjs +1 -1
  107. package/esm2020/lib/draw/shared/draw.enum.mjs +1 -1
  108. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  109. package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
  110. package/esm2020/lib/draw/shared/index.mjs +1 -1
  111. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +2 -2
  112. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
  113. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
  114. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
  115. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
  116. package/esm2020/lib/feature/feature.module.mjs +1 -1
  117. package/esm2020/lib/feature/index.mjs +1 -1
  118. package/esm2020/lib/feature/shared/feature.enums.mjs +1 -1
  119. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  120. package/esm2020/lib/feature/shared/feature.utils.mjs +1 -1
  121. package/esm2020/lib/feature/shared/index.mjs +1 -1
  122. package/esm2020/lib/feature/shared/store.mjs +1 -1
  123. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  124. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
  125. package/esm2020/lib/feature/shared/strategies/index.mjs +1 -1
  126. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  127. package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
  128. package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
  129. package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
  130. package/esm2020/lib/filter/filter.module.mjs +1 -1
  131. package/esm2020/lib/filter/index.mjs +1 -1
  132. package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
  133. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
  134. package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
  135. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
  136. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
  137. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
  138. package/esm2020/lib/filter/ogc-filter-time/index.mjs +1 -1
  139. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
  140. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +43 -16
  141. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
  142. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
  143. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
  144. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  145. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +1 -1
  146. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  147. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
  148. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  149. package/esm2020/lib/filter/shared/index.mjs +1 -1
  150. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  151. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  152. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  153. package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
  154. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
  155. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  156. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
  157. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
  158. package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
  159. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  160. package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
  161. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
  162. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +2 -2
  163. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
  164. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -2
  165. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
  166. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
  167. package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
  168. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  169. package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
  170. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
  171. package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
  172. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  173. package/esm2020/lib/filter/time-filter-list/index.mjs +1 -1
  174. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  175. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
  176. package/esm2020/lib/geo.module.mjs +1 -1
  177. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +1 -1
  178. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  179. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
  180. package/esm2020/lib/geometry/geometry.module.mjs +1 -1
  181. package/esm2020/lib/geometry/index.mjs +1 -1
  182. package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
  183. package/esm2020/lib/geometry/shared/controls/index.mjs +1 -1
  184. package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
  185. package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
  186. package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
  187. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  188. package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
  189. package/esm2020/lib/geometry/shared/index.mjs +1 -1
  190. package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
  191. package/esm2020/lib/import-export/export-button/index.mjs +1 -1
  192. package/esm2020/lib/import-export/import-export/import-export.component.mjs +2 -2
  193. package/esm2020/lib/import-export/import-export/index.mjs +1 -1
  194. package/esm2020/lib/import-export/import-export.module.mjs +1 -1
  195. package/esm2020/lib/import-export/index.mjs +1 -1
  196. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +1 -1
  197. package/esm2020/lib/import-export/shared/export.errors.mjs +1 -1
  198. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  199. package/esm2020/lib/import-export/shared/export.service.mjs +3 -3
  200. package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
  201. package/esm2020/lib/import-export/shared/export.utils.mjs +1 -1
  202. package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
  203. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  204. package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
  205. package/esm2020/lib/import-export/shared/import.utils.mjs +1 -1
  206. package/esm2020/lib/import-export/shared/index.mjs +1 -1
  207. package/esm2020/lib/import-export/style-list/index.mjs +1 -1
  208. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
  209. package/esm2020/lib/import-export/style-list/style-list.module.mjs +1 -1
  210. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +1 -1
  211. package/esm2020/lib/import-export/style-list/style-list.service.mjs +1 -1
  212. package/esm2020/lib/layer/index.mjs +1 -1
  213. package/esm2020/lib/layer/layer-item/index.mjs +1 -1
  214. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
  215. package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
  216. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +2 -2
  217. package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
  218. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
  219. package/esm2020/lib/layer/layer-legend-list/index.mjs +1 -1
  220. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
  221. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
  222. package/esm2020/lib/layer/layer-list/index.mjs +1 -1
  223. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
  224. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
  225. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  226. package/esm2020/lib/layer/layer-list-tool/index.mjs +1 -1
  227. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  228. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +1 -1
  229. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  230. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  231. package/esm2020/lib/layer/layer.module.mjs +1 -1
  232. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  233. package/esm2020/lib/layer/shared/index.mjs +1 -1
  234. package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
  235. package/esm2020/lib/layer/shared/layer.service.mjs +1 -1
  236. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  237. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  238. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  239. package/esm2020/lib/layer/shared/layers/image-layer.mjs +1 -1
  240. package/esm2020/lib/layer/shared/layers/index.mjs +1 -1
  241. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  242. package/esm2020/lib/layer/shared/layers/layer.mjs +1 -1
  243. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  244. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
  245. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  246. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +1 -1
  247. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  248. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  249. package/esm2020/lib/layer/shared/style.service.mjs +1 -1
  250. package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
  251. package/esm2020/lib/layer/style-modal/index.mjs +1 -1
  252. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +2 -2
  253. package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
  254. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
  255. package/esm2020/lib/layer/utils/image-watcher.mjs +1 -1
  256. package/esm2020/lib/layer/utils/index.mjs +1 -1
  257. package/esm2020/lib/layer/utils/layer.utils.mjs +1 -1
  258. package/esm2020/lib/layer/utils/outputLegend.mjs +1 -1
  259. package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
  260. package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
  261. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  262. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
  263. package/esm2020/lib/map/baselayers-switcher/index.mjs +1 -1
  264. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +17 -8
  265. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
  266. package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
  267. package/esm2020/lib/map/index.mjs +1 -1
  268. package/esm2020/lib/map/info-section/index.mjs +1 -1
  269. package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
  270. package/esm2020/lib/map/map-browser/index.mjs +1 -1
  271. package/esm2020/lib/map/map-browser/map-browser.component.mjs +2 -2
  272. package/esm2020/lib/map/map-center/index.mjs +1 -1
  273. package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
  274. package/esm2020/lib/map/map.module.mjs +1 -1
  275. package/esm2020/lib/map/menu-button/index.mjs +1 -1
  276. package/esm2020/lib/map/menu-button/menu-button.component.mjs +2 -2
  277. package/esm2020/lib/map/offline-button/index.mjs +1 -1
  278. package/esm2020/lib/map/offline-button/offline-button.component.mjs +2 -2
  279. package/esm2020/lib/map/rotation-button/index.mjs +1 -1
  280. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
  281. package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
  282. package/esm2020/lib/map/shared/controllers/geolocation.mjs +1 -1
  283. package/esm2020/lib/map/shared/controllers/index.mjs +1 -1
  284. package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
  285. package/esm2020/lib/map/shared/hover-feature.directive.mjs +1 -1
  286. package/esm2020/lib/map/shared/index.mjs +1 -1
  287. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
  288. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
  289. package/esm2020/lib/map/shared/map.enums.mjs +1 -1
  290. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  291. package/esm2020/lib/map/shared/map.mjs +1 -1
  292. package/esm2020/lib/map/shared/map.service.mjs +1 -1
  293. package/esm2020/lib/map/shared/map.utils.mjs +2 -1
  294. package/esm2020/lib/map/shared/mapOffline.directive.mjs +7 -7
  295. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  296. package/esm2020/lib/map/shared/projection.service.mjs +1 -1
  297. package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
  298. package/esm2020/lib/map/swipe-control/index.mjs +1 -1
  299. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +2 -2
  300. package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
  301. package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
  302. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +2 -2
  303. package/esm2020/lib/map/zoom-button/index.mjs +1 -1
  304. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  305. package/esm2020/lib/measure/index.mjs +1 -1
  306. package/esm2020/lib/measure/measure.module.mjs +1 -1
  307. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
  308. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
  309. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
  310. package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
  311. package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
  312. package/esm2020/lib/measure/shared/index.mjs +1 -1
  313. package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
  314. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  315. package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
  316. package/esm2020/lib/metadata/index.mjs +1 -1
  317. package/esm2020/lib/metadata/metadata-button/index.mjs +1 -1
  318. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
  319. package/esm2020/lib/metadata/metadata.module.mjs +1 -1
  320. package/esm2020/lib/metadata/shared/index.mjs +1 -1
  321. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  322. package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
  323. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +1 -1
  324. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  325. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  326. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +1 -1
  327. package/esm2020/lib/offline/geoDB/index.mjs +1 -1
  328. package/esm2020/lib/offline/index.mjs +1 -1
  329. package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
  330. package/esm2020/lib/offline/shared/index.mjs +1 -1
  331. package/esm2020/lib/overlay/index.mjs +1 -1
  332. package/esm2020/lib/overlay/overlay.module.mjs +1 -1
  333. package/esm2020/lib/overlay/shared/index.mjs +1 -1
  334. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +1 -1
  335. package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
  336. package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
  337. package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
  338. package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
  339. package/esm2020/lib/overlay/shared/overlay.utils.mjs +1 -1
  340. package/esm2020/lib/print/index.mjs +1 -1
  341. package/esm2020/lib/print/print/print.component.mjs +16 -13
  342. package/esm2020/lib/print/print-form/index.mjs +1 -1
  343. package/esm2020/lib/print/print-form/print-form.component.mjs +46 -23
  344. package/esm2020/lib/print/print.module.mjs +1 -1
  345. package/esm2020/lib/print/shared/geopdf.mjs +3 -3
  346. package/esm2020/lib/print/shared/index.mjs +1 -1
  347. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  348. package/esm2020/lib/print/shared/print.service.mjs +96 -23
  349. package/esm2020/lib/print/shared/print.type.mjs +1 -1
  350. package/esm2020/lib/query/index.mjs +1 -1
  351. package/esm2020/lib/query/query.module.mjs +1 -1
  352. package/esm2020/lib/query/shared/index.mjs +1 -1
  353. package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
  354. package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
  355. package/esm2020/lib/query/shared/query.directive.mjs +1 -1
  356. package/esm2020/lib/query/shared/query.enums.mjs +1 -1
  357. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  358. package/esm2020/lib/query/shared/query.service.mjs +144 -27
  359. package/esm2020/lib/query/shared/query.utils.mjs +1 -1
  360. package/esm2020/lib/search/index.mjs +1 -1
  361. package/esm2020/lib/search/search-bar/search-bar.component.mjs +54 -33
  362. package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
  363. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
  364. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +118 -0
  365. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +207 -29
  366. package/esm2020/lib/search/search-results/search-results-item.component.mjs +3 -3
  367. package/esm2020/lib/search/search-results/search-results.component.mjs +23 -14
  368. package/esm2020/lib/search/search-results/search-results.module.mjs +32 -5
  369. package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
  370. package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
  371. package/esm2020/lib/search/search-settings/search-settings.component.mjs +33 -9
  372. package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
  373. package/esm2020/lib/search/search.module.mjs +1 -1
  374. package/esm2020/lib/search/shared/index.mjs +1 -1
  375. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +1 -1
  376. package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
  377. package/esm2020/lib/search/shared/search-source.service.mjs +1 -1
  378. package/esm2020/lib/search/shared/search.enums.mjs +1 -1
  379. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  380. package/esm2020/lib/search/shared/search.service.mjs +10 -7
  381. package/esm2020/lib/search/shared/search.utils.mjs +2 -1
  382. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  383. package/esm2020/lib/search/shared/sources/coordinates.mjs +17 -11
  384. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +1 -1
  385. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  386. package/esm2020/lib/search/shared/sources/icherche.mjs +76 -64
  387. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
  388. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  389. package/esm2020/lib/search/shared/sources/ilayer.mjs +4 -4
  390. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  391. package/esm2020/lib/search/shared/sources/index.mjs +1 -1
  392. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
  393. package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
  394. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  395. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  396. package/esm2020/lib/search/shared/sources/source.mjs +1 -1
  397. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  398. package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
  399. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  400. package/esm2020/lib/toast/index.mjs +1 -1
  401. package/esm2020/lib/toast/toast.component.mjs +2 -2
  402. package/esm2020/lib/toast/toast.module.mjs +1 -1
  403. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
  404. package/esm2020/lib/utils/commonVectorStyle.mjs +1 -1
  405. package/esm2020/lib/utils/googleLinks.mjs +1 -1
  406. package/esm2020/lib/utils/id-generator.mjs +1 -1
  407. package/esm2020/lib/utils/index.mjs +1 -1
  408. package/esm2020/lib/utils/osmLinks.mjs +1 -1
  409. package/esm2020/lib/wkt/index.mjs +1 -1
  410. package/esm2020/lib/wkt/shared/index.mjs +1 -1
  411. package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
  412. package/esm2020/lib/wkt/wkt.module.mjs +1 -1
  413. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
  414. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
  415. package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
  416. package/esm2020/lib/workspace/index.mjs +1 -1
  417. package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
  418. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +20 -9
  419. package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
  420. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +1 -1
  421. package/esm2020/lib/workspace/shared/index.mjs +1 -1
  422. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
  423. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
  424. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +1 -1
  425. package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
  426. package/esm2020/lib/workspace/widgets/index.mjs +1 -1
  427. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  428. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
  429. package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
  430. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
  431. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  432. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  433. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
  434. package/esm2020/lib/workspace/workspace.module.mjs +1 -1
  435. package/esm2020/public_api.mjs +1 -1
  436. package/fesm2015/igo2-geo.mjs +1253 -559
  437. package/fesm2015/igo2-geo.mjs.map +1 -1
  438. package/fesm2020/igo2-geo.mjs +1228 -558
  439. package/fesm2020/igo2-geo.mjs.map +1 -1
  440. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +3 -1
  441. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +9 -2
  442. package/lib/datasource/shared/datasources/datasource.interface.d.ts +1 -0
  443. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +1 -0
  444. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +3 -1
  445. package/lib/import-export/shared/export.service.d.ts +1 -1
  446. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +7 -4
  447. package/lib/map/shared/map.utils.d.ts +1 -0
  448. package/lib/print/shared/print.service.d.ts +10 -1
  449. package/lib/query/shared/query.interfaces.d.ts +8 -1
  450. package/lib/query/shared/query.service.d.ts +5 -3
  451. package/lib/search/search-bar/search-bar.component.d.ts +19 -9
  452. package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -0
  453. package/lib/search/search-results/search-results-add-button.component.d.ts +20 -2
  454. package/lib/search/search-results/search-results-item.component.d.ts +0 -1
  455. package/lib/search/search-results/search-results.component.d.ts +4 -1
  456. package/lib/search/search-results/search-results.module.d.ts +17 -10
  457. package/lib/search/search-settings/search-settings.component.d.ts +7 -1
  458. package/lib/search/shared/search.service.d.ts +3 -1
  459. package/lib/search/shared/sources/coordinates.d.ts +1 -1
  460. package/lib/search/shared/sources/source.d.ts +1 -1
  461. package/lib/workspace/shared/edition-workspace.service.d.ts +4 -0
  462. package/ngcc.config.js +3 -3
  463. package/package.json +4 -4
  464. package/style/geo.theming.scss +12 -12
@@ -1036,7 +1036,7 @@ SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
1036
1036
  } }, styles: [".header[_ngcontent-%COMP%]{margin-top:5px;width:100%}.mat-slide-toggle[_ngcontent-%COMP%]{padding:5px;margin-bottom:15px;width:98%}.mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 20px)}.title[_ngcontent-%COMP%]{margin-left:5px;font-size:medium;font-size:initial}.mat-radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;padding-top:10px}.mat-radio-button[_ngcontent-%COMP%]{display:inline-flex;position:relative;margin-left:16px;margin-top:10px}.mat-form-field[_ngcontent-%COMP%]{margin-top:5px}.mat-column-select[_ngcontent-%COMP%]{overflow:auto}.buttons[_ngcontent-%COMP%]{margin-top:15px}.search-button[_ngcontent-%COMP%]{left:15px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.search-button[_ngcontent-%COMP%]{left:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.export-button[_ngcontent-%COMP%]{left:15px;width:46%;margin-bottom:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.export-button[_ngcontent-%COMP%]{left:10px;margin-top:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.remove-button[_ngcontent-%COMP%]{margin-top:12px;left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.remove-button[_ngcontent-%COMP%]{margin:0;width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-form-button[_ngcontent-%COMP%]{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-form-button[_ngcontent-%COMP%]{width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-search-button[_ngcontent-%COMP%]{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-search-button[_ngcontent-%COMP%]{width:45%;min-height:35px;white-space:normal;line-height:normal}}.thematics[_ngcontent-%COMP%]{max-height:35%;overflow:auto;margin-top:5px;width:98%}.results[_ngcontent-%COMP%]{overflow:auto;max-height:250px;width:98%}.mat-column-typeResults[_ngcontent-%COMP%]{max-width:100px;margin-right:5px}.buffer-unit[_ngcontent-%COMP%], .radius-unit[_ngcontent-%COMP%]{display:flex;width:100%;margin-left:2px;padding:5px}.radius[_ngcontent-%COMP%], .buffer[_ngcontent-%COMP%]{display:flex;flex-flow:column nowrap;width:110%}.unit-field[_ngcontent-%COMP%]{width:110px;margin-left:30px}.example-tree-invisible[_ngcontent-%COMP%]{display:none}.tree-ul[_ngcontent-%COMP%]{margin:0;padding:0 0 0 20px;list-style-type:none}.tree-check[_ngcontent-%COMP%], .tree-check-2[_ngcontent-%COMP%]{position:relative;margin-left:auto;margin-right:5px}.thematics-header[_ngcontent-%COMP%]{max-width:250px}.checks-header[_ngcontent-%COMP%]{padding:none;max-width:calc(100% - 316px);overflow:hidden}.mat-checkbox[_ngcontent-%COMP%]{padding:5px}.mat-tree-node[_ngcontent-%COMP%]{position:relative;min-height:42px;width:280px}.mat-header-cell[_ngcontent-%COMP%]{height:56px}.results[_ngcontent-%COMP%]{max-height:45%;width:98%}.results[_ngcontent-%COMP%] igo-entity-table[_ngcontent-%COMP%] div.table-container{overflow:visible;overflow:initial}"], changeDetection: 0 });
1037
1037
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SpatialFilterItemComponent, [{
1038
1038
  type: Component,
1039
- args: [{ selector: 'igo-spatial-filter-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-geometry-form-field-input\r\n [formControl]=\"formControl\"\r\n [map]=\"map\"\r\n [geometryType]=\"geometryType\"\r\n [drawGuide]=\"drawGuide$ | async\"\r\n [measure]=\"measure\"\r\n [drawControlIsActive]=\"drawControlIsActive\"\r\n [freehandDrawIsActive]=\"freehandDrawIsActive\"\r\n [drawStyle]=\"drawStyle$ | async\"\r\n [overlayStyle]=\"overlayStyle$ | async\"\r\n [radius]=\"radius\"\r\n [predefinedRadius]=\"predefinedRadius\">\r\n</igo-geometry-form-field-input>\r\n\r\n<div class=\"header\">\r\n <mat-slide-toggle *ngIf=\"!isPredefined()\"\r\n [checked]=\"drawControlIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onDrawControlChange()\">\r\n {{'igo.geo.spatialFilter.drawControl' | translate}}\r\n </mat-slide-toggle>\r\n <mat-slide-toggle *ngIf=\"!isPredefined()\"\r\n [checked]=\"freehandDrawIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onfreehandControlChange()\">\r\n {{'igo.geo.spatialFilter.freehandControl' | translate}}\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\r\n <form class=\"buffer-form\">\r\n <mat-form-field class=\"buffer\">\r\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.buffer' | translate}}\" [formControl]=\"bufferFormControl\"\r\n [value]=\"0\" [readonly]=\"this.formControl.value === null\">\r\n </mat-form-field>\r\n </form>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\r\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\r\n {{('igo.geo.measure.' + measureUnit) | translate}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\r\n <form class=\"radius-form\">\r\n <mat-form-field class=\"radius\">\r\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.radius' | translate}}\" [formControl]=\"radiusFormControl\"\r\n [value]=\"1000\" (input)=\"getRadius()\" [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\">\r\n </mat-form-field>\r\n </form>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\r\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\r\n {{('igo.geo.measure.' + measureUnit) | translate}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<mat-label class=\"title mat-typography\">{{'igo.geo.spatialFilter.search' | translate}} : </mat-label>\r\n<mat-radio-group [value]=\"selectedItemType\">\r\n <mat-radio-button *ngFor=\"let item of itemType\"\r\n [value]=\"item\"\r\n (change)=\"onItemTypeChange($event)\">\r\n {{'igo.geo.spatialFilter.' + item | translate}}\r\n </mat-radio-button>\r\n</mat-radio-group>\r\n\r\n<div class=\"thematics\" *ngIf=\"(selectedItemType==='Thematics' && !tableTemplate) || (selectedItemType==='Thematics' && tableTemplate && !listIsVisible)\">\r\n <mat-table>\r\n <!-- Name Column -->\r\n <ng-container matColumnDef=\"name\">\r\n <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{'igo.geo.spatialFilter.Thematics' | translate}}</mat-header-cell>\r\n </ng-container>\r\n\r\n <!-- Select Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef class=\"checks-header\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\r\n\r\n </mat-table>\r\n\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\r\n <li class=\"mat-tree-node\">\r\n <!-- use a disabled button to provide padding for tree leaf -->\r\n <button mat-icon-button disabled></button>\r\n {{node.name}}\r\n <mat-checkbox class=\"tree-check\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onToggleChange(node) : null\"\r\n [checked]=\"selectedThematics.isSelected(node)\">\r\n </mat-checkbox>\r\n </li>\r\n </mat-tree-node>\r\n\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\r\n <div class=\"mat-tree-node\">\r\n <button mat-icon-button\r\n (click)=\"onToggleClick(node)\">\r\n <mat-icon [svgIcon]=\"treeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right'\"></mat-icon>\r\n </button>\r\n {{node.name}}\r\n <mat-checkbox class=\"tree-check-2\" (change)=\"$event ? childrensToggle(node) : null\"\r\n [checked]=\"isAllSelected(node)\"\r\n [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\">\r\n </mat-checkbox>\r\n </div>\r\n <ul class=\"tree-ul\" [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </ul>\r\n </mat-nested-tree-node>\r\n\r\n </mat-tree>\r\n</div>\r\n\r\n<div class=\"buttons\">\r\n\r\n <button *ngIf=\"isPredefined()\" mat-raised-button class=\"clear-search-button\" [disabled]=\"disabledClearSearch()\"\r\n (click)=\"clearSearch()\">\r\n {{'igo.geo.spatialFilter.clearSearch' | translate}}\r\n </button>\r\n\r\n <button *ngIf=\"isPolygon() || isPoint()\" mat-raised-button class=\"clear-form-button\" [disabled]=\"this.formControl.value === null\"\r\n (click)=\"clearDrawZone()\">\r\n {{'igo.geo.spatialFilter.clearForm' | translate}}\r\n </button>\r\n\r\n <button mat-raised-button class=\"search-button\" [disabled]=\"disableSearchButton()\" color=\"primary\"\r\n (click)=\"toggleSearchButton()\">\r\n {{'igo.geo.spatialFilter.goSearch' | translate}}\r\n </button>\r\n\r\n <button mat-raised-button class=\"remove-button\" [disabled]=\"allLayers.length === 0\" (click)=\"clearButton()\">\r\n {{'igo.geo.spatialFilter.removeLayer' | translate}}\r\n </button>\r\n\r\n <button mat-raised-button class=\"export-button\" [disabled]=\"!store.entities$.getValue().length\" (click)=\"export.emit()\">\r\n {{'igo.geo.spatialFilter.exportLayer' | translate}}\r\n </button>\r\n\r\n</div>\r\n\r\n<button\r\n class=\"chevron-down\"\r\n *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\">\r\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\r\n</button>\r\n\r\n<div class=\"results\" *ngIf=\"store.all().length && tableTemplate && listIsVisible\">\r\n <button\r\n *ngIf=\"listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\">\r\n <mat-icon svgIcon=\"chevron-up\"></mat-icon>\r\n </button>\r\n <igo-entity-table\r\n class=\"results-list\"\r\n [template]=\"tableTemplate\"\r\n [store]=\"store\"\r\n (entitySelectChange)=\"entityChange.emit($event)\">\r\n </igo-entity-table>\r\n</div>\r\n", styles: [".header{margin-top:5px;width:100%}.mat-slide-toggle{padding:5px;margin-bottom:15px;width:98%}.mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 20px)}.title{margin-left:5px;font-size:medium;font-size:initial}.mat-radio-group{display:flex;flex-direction:column;padding-top:10px}.mat-radio-button{display:inline-flex;position:relative;margin-left:16px;margin-top:10px}.mat-form-field{margin-top:5px}.mat-column-select{overflow:auto}.buttons{margin-top:15px}.search-button{left:15px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.search-button{left:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.export-button{left:15px;width:46%;margin-bottom:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.export-button{left:10px;margin-top:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.remove-button{margin-top:12px;left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.remove-button{margin:0;width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-form-button{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-form-button{width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-search-button{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-search-button{width:45%;min-height:35px;white-space:normal;line-height:normal}}.thematics{max-height:35%;overflow:auto;margin-top:5px;width:98%}.results{overflow:auto;max-height:250px;width:98%}.mat-column-typeResults{max-width:100px;margin-right:5px}.buffer-unit,.radius-unit{display:flex;width:100%;margin-left:2px;padding:5px}.radius,.buffer{display:flex;flex-flow:column nowrap;width:110%}.unit-field{width:110px;margin-left:30px}.example-tree-invisible{display:none}.tree-ul{margin:0;padding:0 0 0 20px;list-style-type:none}.tree-check,.tree-check-2{position:relative;margin-left:auto;margin-right:5px}.thematics-header{max-width:250px}.checks-header{padding:none;max-width:calc(100% - 316px);overflow:hidden}.mat-checkbox{padding:5px}.mat-tree-node{position:relative;min-height:42px;width:280px}.mat-header-cell{height:56px}.results{max-height:45%;width:98%}.results igo-entity-table ::ng-deep div.table-container{overflow:visible;overflow:initial}\n"] }]
1039
+ args: [{ selector: 'igo-spatial-filter-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-geometry-form-field-input\n [formControl]=\"formControl\"\n [map]=\"map\"\n [geometryType]=\"geometryType\"\n [drawGuide]=\"drawGuide$ | async\"\n [measure]=\"measure\"\n [drawControlIsActive]=\"drawControlIsActive\"\n [freehandDrawIsActive]=\"freehandDrawIsActive\"\n [drawStyle]=\"drawStyle$ | async\"\n [overlayStyle]=\"overlayStyle$ | async\"\n [radius]=\"radius\"\n [predefinedRadius]=\"predefinedRadius\">\n</igo-geometry-form-field-input>\n\n<div class=\"header\">\n <mat-slide-toggle *ngIf=\"!isPredefined()\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onDrawControlChange()\">\n {{'igo.geo.spatialFilter.drawControl' | translate}}\n </mat-slide-toggle>\n <mat-slide-toggle *ngIf=\"!isPredefined()\"\n [checked]=\"freehandDrawIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onfreehandControlChange()\">\n {{'igo.geo.spatialFilter.freehandControl' | translate}}\n </mat-slide-toggle>\n</div>\n\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\n <form class=\"buffer-form\">\n <mat-form-field class=\"buffer\">\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.buffer' | translate}}\" [formControl]=\"bufferFormControl\"\n [value]=\"0\" [readonly]=\"this.formControl.value === null\">\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\n {{('igo.geo.measure.' + measureUnit) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\n <form class=\"radius-form\">\n <mat-form-field class=\"radius\">\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.radius' | translate}}\" [formControl]=\"radiusFormControl\"\n [value]=\"1000\" (input)=\"getRadius()\" [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\">\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\n {{('igo.geo.measure.' + measureUnit) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<mat-label class=\"title mat-typography\">{{'igo.geo.spatialFilter.search' | translate}} : </mat-label>\n<mat-radio-group [value]=\"selectedItemType\">\n <mat-radio-button *ngFor=\"let item of itemType\"\n [value]=\"item\"\n (change)=\"onItemTypeChange($event)\">\n {{'igo.geo.spatialFilter.' + item | translate}}\n </mat-radio-button>\n</mat-radio-group>\n\n<div class=\"thematics\" *ngIf=\"(selectedItemType==='Thematics' && !tableTemplate) || (selectedItemType==='Thematics' && tableTemplate && !listIsVisible)\">\n <mat-table>\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{'igo.geo.spatialFilter.Thematics' | translate}}</mat-header-cell>\n </ng-container>\n\n <!-- Select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef class=\"checks-header\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\n\n </mat-table>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\n <li class=\"mat-tree-node\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n {{node.name}}\n <mat-checkbox class=\"tree-check\" (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? onToggleChange(node) : null\"\n [checked]=\"selectedThematics.isSelected(node)\">\n </mat-checkbox>\n </li>\n </mat-tree-node>\n\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"mat-tree-node\">\n <button mat-icon-button\n (click)=\"onToggleClick(node)\">\n <mat-icon [svgIcon]=\"treeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right'\"></mat-icon>\n </button>\n {{node.name}}\n <mat-checkbox class=\"tree-check-2\" (change)=\"$event ? childrensToggle(node) : null\"\n [checked]=\"isAllSelected(node)\"\n [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\">\n </mat-checkbox>\n </div>\n <ul class=\"tree-ul\" [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </ul>\n </mat-nested-tree-node>\n\n </mat-tree>\n</div>\n\n<div class=\"buttons\">\n\n <button *ngIf=\"isPredefined()\" mat-raised-button class=\"clear-search-button\" [disabled]=\"disabledClearSearch()\"\n (click)=\"clearSearch()\">\n {{'igo.geo.spatialFilter.clearSearch' | translate}}\n </button>\n\n <button *ngIf=\"isPolygon() || isPoint()\" mat-raised-button class=\"clear-form-button\" [disabled]=\"this.formControl.value === null\"\n (click)=\"clearDrawZone()\">\n {{'igo.geo.spatialFilter.clearForm' | translate}}\n </button>\n\n <button mat-raised-button class=\"search-button\" [disabled]=\"disableSearchButton()\" color=\"primary\"\n (click)=\"toggleSearchButton()\">\n {{'igo.geo.spatialFilter.goSearch' | translate}}\n </button>\n\n <button mat-raised-button class=\"remove-button\" [disabled]=\"allLayers.length === 0\" (click)=\"clearButton()\">\n {{'igo.geo.spatialFilter.removeLayer' | translate}}\n </button>\n\n <button mat-raised-button class=\"export-button\" [disabled]=\"!store.entities$.getValue().length\" (click)=\"export.emit()\">\n {{'igo.geo.spatialFilter.exportLayer' | translate}}\n </button>\n\n</div>\n\n<button\n class=\"chevron-down\"\n *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\n mat-icon-button\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\n (click)=\"toggleVisibleList()\">\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\n</button>\n\n<div class=\"results\" *ngIf=\"store.all().length && tableTemplate && listIsVisible\">\n <button\n *ngIf=\"listIsVisible\"\n mat-icon-button\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\n (click)=\"toggleVisibleList()\">\n <mat-icon svgIcon=\"chevron-up\"></mat-icon>\n </button>\n <igo-entity-table\n class=\"results-list\"\n [template]=\"tableTemplate\"\n [store]=\"store\"\n (entitySelectChange)=\"entityChange.emit($event)\">\n </igo-entity-table>\n</div>\n", styles: [".header{margin-top:5px;width:100%}.mat-slide-toggle{padding:5px;margin-bottom:15px;width:98%}.mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 20px)}.title{margin-left:5px;font-size:medium;font-size:initial}.mat-radio-group{display:flex;flex-direction:column;padding-top:10px}.mat-radio-button{display:inline-flex;position:relative;margin-left:16px;margin-top:10px}.mat-form-field{margin-top:5px}.mat-column-select{overflow:auto}.buttons{margin-top:15px}.search-button{left:15px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.search-button{left:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.export-button{left:15px;width:46%;margin-bottom:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.export-button{left:10px;margin-top:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.remove-button{margin-top:12px;left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.remove-button{margin:0;width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-form-button{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-form-button{width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-search-button{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-search-button{width:45%;min-height:35px;white-space:normal;line-height:normal}}.thematics{max-height:35%;overflow:auto;margin-top:5px;width:98%}.results{overflow:auto;max-height:250px;width:98%}.mat-column-typeResults{max-width:100px;margin-right:5px}.buffer-unit,.radius-unit{display:flex;width:100%;margin-left:2px;padding:5px}.radius,.buffer{display:flex;flex-flow:column nowrap;width:110%}.unit-field{width:110px;margin-left:30px}.example-tree-invisible{display:none}.tree-ul{margin:0;padding:0 0 0 20px;list-style-type:none}.tree-check,.tree-check-2{position:relative;margin-left:auto;margin-right:5px}.thematics-header{max-width:250px}.checks-header{padding:none;max-width:calc(100% - 316px);overflow:hidden}.mat-checkbox{padding:5px}.mat-tree-node{position:relative;min-height:42px;width:280px}.mat-header-cell{height:56px}.results{max-height:45%;width:98%}.results igo-entity-table ::ng-deep div.table-container{overflow:visible;overflow:initial}\n"] }]
1040
1040
  }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SpatialFilterService }, { type: i2.MessageService }, { type: i2.LanguageService }]; }, { map: [{
1041
1041
  type: Input
1042
1042
  }], type: [{
@@ -1086,4 +1086,4 @@ SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
1086
1086
  }], entityChange: [{
1087
1087
  type: Output
1088
1088
  }] }); })();
1089
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1maWx0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvc3BhdGlhbC1maWx0ZXIvc3BhdGlhbC1maWx0ZXItaXRlbS9zcGF0aWFsLWZpbHRlci1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9zcGF0aWFsLWZpbHRlci9zcGF0aWFsLWZpbHRlci1pdGVtL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixZQUFZLEVBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUlyRCxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUVsQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQWUsa0NBQWtDLEVBQUUseUJBQXlCLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBQy9ILE9BQU8sRUFBUyxXQUFXLEVBQUUsTUFBTSx1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LGVBQStDO1FBQS9DLGlFQUErQztRQUM3RixlQUNGO1FBREUsNEZBQ0Y7UUFNQyxlQUEyRDtRQUEzRCx3RkFBMkQ7UUFReEMsZUFBMEQ7UUFBMUQsdUZBQTBEOzt1RkQ1SG5FLDBCQUEwQjtjQU50QyxTQUFTOzJCQUNFLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTTtrS0FJdEMsR0FBRztrQkFBWCxLQUFLO1lBR0YsSUFBSTtrQkFEUCxLQUFLO1lBdUZHLFNBQVM7a0JBQWpCLEtBQUs7WUFFRyxJQUFJO2tCQUFaLEtBQUs7WUFFRyxPQUFPO2tCQUFmLEtBQUs7WUFHRixLQUFLO2tCQURSLEtBQUs7WUFrQkcsTUFBTTtrQkFBZCxLQUFLO1lBRUcsU0FBUztrQkFBakIsS0FBSztZQUdGLGNBQWM7a0JBRGpCLEtBQUs7WUFTSSxZQUFZO2tCQUFyQixNQUFNO1lBRUcsY0FBYztrQkFBdkIsTUFBTTtZQUVHLGNBQWM7a0JBQXZCLE1BQU07WUFFRyxhQUFhO2tCQUF0QixNQUFNO1lBRUcsV0FBVztrQkFBcEIsTUFBTTtZQUNHLG9CQUFvQjtrQkFBN0IsTUFBTTtZQUNHLGlCQUFpQjtrQkFBMUIsTUFBTTtZQUVHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxlQUFlO2tCQUF4QixNQUFNO1lBQ0csZ0JBQWdCO2tCQUF6QixNQUFNO1lBRUcsZ0JBQWdCO2tCQUF6QixNQUFNO1lBRUcsZ0JBQWdCO2tCQUF6QixNQUFNO1lBRUcsTUFBTTtrQkFBZixNQUFNO1lBRUcsYUFBYTtrQkFBdEIsTUFBTTtZQUNHLFlBQVk7a0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3BhdGlhbEZpbHRlclF1ZXJ5VHlwZSwgU3BhdGlhbEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvc3BhdGlhbC1maWx0ZXIuZW51bSc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vLi4vbWFwJztcclxuaW1wb3J0IHsgU3BhdGlhbEZpbHRlckl0ZW1UeXBlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvc3BhdGlhbC1maWx0ZXIuZW51bSc7XHJcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLy4uLy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XHJcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XHJcbmltcG9ydCB7IEdlb0pTT05HZW9tZXRyeSB9IGZyb20gJy4uLy4uLy4uL2dlb21ldHJ5L3NoYXJlZC9nZW9tZXRyeS5pbnRlcmZhY2VzJztcclxuaW1wb3J0ICogYXMgb2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XHJcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcclxuaW1wb3J0IE9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XHJcbmltcG9ydCB7IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IFNwYXRpYWxGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NwYXRpYWwtZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZWFzdXJlTGVuZ3RoVW5pdCB9IGZyb20gJy4uLy4uLy4uL21lYXN1cmUnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdG9yZSwgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSwgRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciwgRW50aXR5VGFibGVUZW1wbGF0ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB7IExheWVyLCBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uLy4uL2xheWVyL3NoYXJlZCc7XHJcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBTcGF0aWFsRmlsdGVyVGhlbWF0aWMgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEZlYXR1cmVNb3Rpb24sIEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vLi4vZmVhdHVyZSc7XHJcbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQnO1xyXG5cclxuLyoqXHJcbiAqIFNwYXRpYWwtRmlsdGVyLUl0ZW0gKHNlYXJjaCBwYXJhbWV0ZXJzKVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tc3BhdGlhbC1maWx0ZXItaXRlbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BhdGlhbEZpbHRlckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCB0eXBlKCk6IFNwYXRpYWxGaWx0ZXJUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gIH1cclxuICBzZXQgdHlwZSh0eXBlOiBTcGF0aWFsRmlsdGVyVHlwZSkge1xyXG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2VvbWV0cnlUeXBlcy5maW5kSW5kZXgoZ2VvbSA9PiBnZW9tID09PSB0aGlzLnR5cGUpO1xyXG4gICAgdGhpcy5nZW9tZXRyeVR5cGUgPSB0aGlzLmdlb21ldHJ5VHlwZXNbaW5kZXhdO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5yZXNldCgpO1xyXG4gICAgdGhpcy5yYWRpdXMgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmRyYXdHdWlkZSQubmV4dChudWxsKTtcclxuICAgIHRoaXMuZHJhd1N0eWxlJC5uZXh0KHVuZGVmaW5lZCk7XHJcblxyXG4gICAgLy8gTmVjZXNzYXJ5IHRvIGtlZXAgcmVmZXJlbmNlIHRvIHRoZSBnZW9tZXRyeSBmb3JtIGZpZWxkIGlucHV0XHJcbiAgICBpZiAodGhpcy50eXBlID09PSBTcGF0aWFsRmlsdGVyVHlwZS5QcmVkZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGdlb2pzb246IEdlb0pTT05HZW9tZXRyeSA9IHtcclxuICAgICAgICB0eXBlOiAnUG9pbnQnLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiAnJ1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGdlb2pzb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5lY2Vzc2FyeSB0byBhcHBseSB0aGUgcmlnaHQgc3R5bGUgd2hlbiBnZW9tZXRyeSB0eXBlIGlzIFBvaW50XHJcbiAgICBpZiAodGhpcy50eXBlID09PSBTcGF0aWFsRmlsdGVyVHlwZS5Qb2ludCkge1xyXG4gICAgICB0aGlzLnJhZGl1cyA9IDEwMDA7IC8vIEJhc2UgcmFkaXVzXHJcbiAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXMpO1xyXG4gICAgICB0aGlzLlBvaW50U3R5bGUgPSAoZmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LCByZXNvbHV0aW9uOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBnZW9tID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIE9sUG9pbnQ7XHJcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBvbHByb2oudHJhbnNmb3JtKGdlb20uZ2V0Q29vcmRpbmF0ZXMoKSwgdGhpcy5tYXAucHJvamVjdGlvbiwgJ0VQU0c6NDMyNicpO1xyXG4gICAgICAgIHJldHVybiBuZXcgb2xTdHlsZS5TdHlsZSAoe1xyXG4gICAgICAgICAgaW1hZ2U6IG5ldyBvbFN0eWxlLkNpcmNsZSAoe1xyXG4gICAgICAgICAgICByYWRpdXM6IHRoaXMucmFkaXVzIC8gKE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIGNvb3JkaW5hdGVzWzFdKSkgLyByZXNvbHV0aW9uLCAvLyBMYXRpdHVkZSBjb3JyZWN0aW9uXHJcbiAgICAgICAgICAgIHN0cm9rZTogbmV3IG9sU3R5bGUuU3Ryb2tlKHtcclxuICAgICAgICAgICAgICB3aWR0aDogMixcclxuICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMTUzLCAyNTUpJ1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgZmlsbDogbmV3IG9sU3R5bGUuRmlsbCh7XHJcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1LCAwLjIpJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5vdmVybGF5U3R5bGUgPSB0aGlzLlBvaW50U3R5bGU7XHJcbiAgICAgIHRoaXMuZHJhd1N0eWxlJC5uZXh0KHRoaXMub3ZlcmxheVN0eWxlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIElmIGdlb21ldHJ5IHR5cGVzIGlzIFBvbHlnb25cclxuICAgICAgdGhpcy5yYWRpdXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuUG9seVN0eWxlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgb2xTdHlsZS5TdHlsZSAoe1xyXG4gICAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xyXG4gICAgICAgICAgICB3aWR0aDogMixcclxuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1KSdcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZmlsbDogbmV3IG9sU3R5bGUuRmlsbCh7XHJcbiAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAxNTMsIDI1NSwgMC4yKSdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGNvbG9yID0gWzAsIDE1MywgMjU1XTtcclxuICAgICAgY29uc3QgZHJhd1N0eWxlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgb2xTdHlsZS5TdHlsZSh7XHJcbiAgICAgICAgICBpbWFnZTogbmV3IG9sU3R5bGUuQ2lyY2xlICh7XHJcbiAgICAgICAgICAgIHJhZGl1czogOCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAxNTMsIDI1NSknXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBmaWxsOiBuZXcgb2xTdHlsZS5GaWxsKHtcclxuICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMTUzLCAyNTUsIDAuMiknXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHN0cm9rZTogbmV3IG9sU3R5bGUuU3Ryb2tlKHtcclxuICAgICAgICAgICAgY29sb3I6IGNvbG9yLmNvbmNhdChbMV0pLFxyXG4gICAgICAgICAgICB3aWR0aDogMlxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBmaWxsOiAgbmV3IG9sU3R5bGUuRmlsbCh7XHJcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvci5jb25jYXQoWzAuMl0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLm92ZXJsYXlTdHlsZSA9IHRoaXMuUG9seVN0eWxlO1xyXG4gICAgICB0aGlzLmRyYXdTdHlsZSQubmV4dChkcmF3U3R5bGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vdmVybGF5U3R5bGUkLm5leHQodGhpcy5vdmVybGF5U3R5bGUpO1xyXG4gIH1cclxuICBwcml2YXRlIF90eXBlOiBTcGF0aWFsRmlsdGVyVHlwZTtcclxuXHJcbiAgQElucHV0KCkgcXVlcnlUeXBlOiBTcGF0aWFsRmlsdGVyUXVlcnlUeXBlO1xyXG5cclxuICBASW5wdXQoKSB6b25lOiBGZWF0dXJlO1xyXG5cclxuICBASW5wdXQoKSBsb2FkaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBzdG9yZSgpOiBFbnRpdHlTdG9yZTxGZWF0dXJlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RvcmU7XHJcbiAgfVxyXG4gIHNldCBzdG9yZShzdG9yZTogRW50aXR5U3RvcmU8RmVhdHVyZT4pIHtcclxuICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XHJcbiAgICB0aGlzLl9zdG9yZS5lbnRpdGllcyQuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7IH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9zdG9yZTogRW50aXR5U3RvcmU8RmVhdHVyZT47XHJcblxyXG4gIC8qKlxyXG4gICAqIEF2YWlsYWJsZSBtZWFzdXJlIHVuaXRzIGZvciB0aGUgbWVhc3VyZSB0eXBlIGdpdmVuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IG1lYXN1cmVVbml0cygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gW01lYXN1cmVMZW5ndGhVbml0Lk1ldGVycywgTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVyc107XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBsYXllcnM6IExheWVyW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgYWxsTGF5ZXJzOiBMYXllcltdID0gW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHRoZW1hdGljTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGhlbWF0aWNMZW5ndGg7XHJcbiAgfVxyXG4gIHNldCB0aGVtYXRpY0xlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90aGVtYXRpY0xlbmd0aCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF90aGVtYXRpY0xlbmd0aDogbnVtYmVyO1xyXG5cclxuICBAT3V0cHV0KCkgdG9nZ2xlU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KCkgaXRlbVR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNwYXRpYWxGaWx0ZXJJdGVtVHlwZT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIHRoZW1hdGljQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTcGF0aWFsRmlsdGVyVGhlbWF0aWNbXT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIGRyYXdab25lRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZlYXR1cmU+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBidWZmZXJFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSB6b25lV2l0aEJ1ZmZlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZT4oKTtcclxuICBAT3V0cHV0KCkgbWVhc3VyZVVuaXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lYXN1cmVMZW5ndGhVbml0PigpO1xyXG5cclxuICBAT3V0cHV0KCkgcmFkaXVzRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KCkgZnJlZWhhbmRDb250cm9sID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBwcmVkZWZpbmVkUmFkaXVzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAT3V0cHV0KCkgY2xlYXJCdXR0b25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIGNsZWFyU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKSBleHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvcGVuV29ya3NwYWNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHVibGljIGl0ZW1UeXBlOiBTcGF0aWFsRmlsdGVySXRlbVR5cGVbXSA9IFtTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzcywgU3BhdGlhbEZpbHRlckl0ZW1UeXBlLlRoZW1hdGljc107XHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbVR5cGU6IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZSA9IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZS5BZGRyZXNzO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFNvdXJjZUFkZHJlc3M7XHJcblxyXG4gIHRyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxTcGF0aWFsRmlsdGVyVGhlbWF0aWM+ID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFNwYXRpYWxGaWx0ZXJUaGVtYXRpYz4obm9kZSA9PiBub2RlLmNoaWxkcmVuKTtcclxuXHJcbiAgLy8gRm9yIHRoZW1hdGljcyBhbmQgcmVzdWx0cyB0YWJsZXNcclxuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbJ25hbWUnLCAnc2VsZWN0J107XHJcbiAgcHVibGljIGNoaWxkcmVuczogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICBwdWJsaWMgZ3JvdXBzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyB0aGVtYXRpY3M6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdID0gW107XHJcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZU5lc3RlZERhdGFTb3VyY2U8U3BhdGlhbEZpbHRlclRoZW1hdGljPigpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFRoZW1hdGljcyA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxTcGF0aWFsRmlsdGVyVGhlbWF0aWM+KHRydWUsIFtdKTtcclxuXHJcbiAgLy8gRm9yIGdlb21ldHJ5IGZvcm0gZmllbGQgaW5wdXRcclxuICB2YWx1ZSQ6IEJlaGF2aW9yU3ViamVjdDxHZW9KU09OR2VvbWV0cnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIGRyYXdHdWlkZSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuICBvdmVybGF5U3R5bGUkOiBCZWhhdmlvclN1YmplY3Q8b2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIGRyYXdTdHlsZSQ6IEJlaGF2aW9yU3ViamVjdDxvbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBvbFN0eWxlLlN0eWxlKT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIHByaXZhdGUgdmFsdWUkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcmFkaXVzQ2hhbmdlcyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBidWZmZXJDaGFuZ2VzJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHVibGljIGZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyBnZW9tZXRyeVR5cGU6IFR5cGUgfCBzdHJpbmc7XHJcbiAgcHVibGljIGdlb21ldHJ5VHlwZUZpZWxkID0gZmFsc2U7XHJcbiAgcHVibGljIGdlb21ldHJ5VHlwZXM6IHN0cmluZ1tdID0gWydQb2ludCcsICdQb2x5Z29uJ107XHJcbiAgcHVibGljIGRyYXdHdWlkZUZpZWxkID0gZmFsc2U7XHJcbiAgcHVibGljIGRyYXdHdWlkZTogbnVtYmVyID0gbnVsbDtcclxuICBwdWJsaWMgZHJhd0d1aWRlUGxhY2Vob2xkZXIgPSAnJztcclxuICBwdWJsaWMgbWVhc3VyZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkcmF3Q29udHJvbElzQWN0aXZlID0gdHJ1ZTtcclxuICBwdWJsaWMgZnJlZWhhbmREcmF3SXNBY3RpdmUgPSBmYWxzZTtcclxuICBwdWJsaWMgZHJhd1N0eWxlOiBvbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBvbFN0eWxlLlN0eWxlKTtcclxuICBwdWJsaWMgZHJhd1pvbmU7XHJcbiAgcHVibGljIG92ZXJsYXlTdHlsZTogb2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSk7XHJcbiAgcHVibGljIFBvaW50U3R5bGU6IG9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IG9sU3R5bGUuU3R5bGUpO1xyXG4gIHB1YmxpYyBQb2x5U3R5bGU6IG9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IG9sU3R5bGUuU3R5bGUpO1xyXG5cclxuICBwdWJsaWMgcmFkaXVzOiBudW1iZXI7XHJcbiAgcHVibGljIGJ1ZmZlcjogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgcmFkaXVzRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgcHVibGljIGJ1ZmZlckZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG5cclxuICBwdWJsaWMgbWVhc3VyZVVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0ID0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzO1xyXG4gIHB1YmxpYyB6b25lV2l0aEJ1ZmZlcjtcclxuXHJcbiAgcHVibGljIGxpc3RJc1Zpc2libGUgPSB0cnVlO1xyXG4gIHB1YmxpYyB0YWJsZVRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBzcGF0aWFsRmlsdGVyU2VydmljZTogU3BhdGlhbEZpbHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zcGF0aWFsRmlsdGVyU2VydmljZS5sb2FkVGhlbWF0aWNzTGlzdCgpXHJcbiAgICAuc3Vic2NyaWJlKChpdGVtczogU3BhdGlhbEZpbHRlclRoZW1hdGljW10pID0+IHtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbnMucHVzaChpdGVtKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVucy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdyb3Vwcy5wdXNoKHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkubGltaXRlcycpKTtcclxuICAgICAgY29uc3QgbGltaXRzOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMgPSB7XHJcbiAgICAgICAgbmFtZTogdGhpcy5ncm91cHNbMF0sXHJcbiAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudGhlbWF0aWNzLnB1c2gobGltaXRzKTtcclxuICAgICAgdGhpcy5jaGlsZHJlbnMuZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgaWYgKGNoaWxkLmdyb3VwICYmICh0aGlzLmdyb3Vwcy5pbmRleE9mKGNoaWxkLmdyb3VwKSA9PT0gLTEpKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKGNoaWxkLmdyb3VwKTtcclxuICAgICAgICAgIGNvbnN0IHRoZW1hdGljOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGNoaWxkLmdyb3VwLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnRoZW1hdGljcy5wdXNoKHRoZW1hdGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2hpbGQuZ3JvdXApIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgY2hpbGQubmFtZSA9PT0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8udGVycmFwaS5BZG1SZWdpb24nKSB8fFxyXG4gICAgICAgICAgICBjaGlsZC5uYW1lID09PSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby50ZXJyYXBpLk11bicpIHx8XHJcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuQXJyb25kJykgfHxcclxuICAgICAgICAgICAgY2hpbGQubmFtZSA9PT0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8udGVycmFwaS5DaXJjRmVkJykgfHxcclxuICAgICAgICAgICAgY2hpbGQubmFtZSA9PT0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8udGVycmFwaS5DaXJjUHJvdicpIHx8XHJcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuRGlyUmVnJykgfHxcclxuICAgICAgICAgICAgY2hpbGQubmFtZSA9PT0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8udGVycmFwaS5NUkMnKSB8fFxyXG4gICAgICAgICAgICBjaGlsZC5uYW1lID09PSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby50ZXJyYXBpLlJlZ1RvdXInKSkge1xyXG4gICAgICAgICAgICAgIGNoaWxkLmdyb3VwID0gbGltaXRzLm5hbWU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkucm91dGVzJykpIHtcclxuICAgICAgICAgICAgY2hpbGQuZ3JvdXAgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5zcGF0aWFsRmlsdGVyLmdyb3VwLnRyYW5zcG9ydCcpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdGhlbWF0aWM6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYyA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjaGlsZC5uYW1lLFxyXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICAgICAgICBzb3VyY2U6IGNoaWxkLnNvdXJjZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnRoZW1hdGljcy5wdXNoKHRoZW1hdGljKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50aGVtYXRpY3Muc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnRoZW1hdGljcy5mb3JFYWNoKHRoZW1hdGljID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW5zKSB7XHJcbiAgICAgICAgICBpZiAoY2hpbGQuZ3JvdXAgPT09IHRoZW1hdGljLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhlbWF0aWMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy50aGVtYXRpY3M7XHJcblxyXG4gICAgdGhpcy5kcmF3R3VpZGUkLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLnZhbHVlJC5uZXh0KHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPyB0aGlzLmZvcm1Db250cm9sLnZhbHVlIDogdW5kZWZpbmVkKTtcclxuICAgIHRoaXMudmFsdWUkJCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWU6IEdlb0pTT05HZW9tZXRyeSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlJC5uZXh0KHZhbHVlKTtcclxuICAgICAgICB0aGlzLmRyYXdab25lID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSBhcyBGZWF0dXJlO1xyXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlciAhPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5kcmF3Wm9uZUV2ZW50LmVtaXQodGhpcy5kcmF3Wm9uZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuYnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSQubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMuZHJhd1pvbmUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudmFsdWUkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0UmFkaXVzKCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yYWRpdXNDaGFuZ2VzJCQgPSB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdldFJhZGl1cygpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYnVmZmVyQ2hhbmdlcyQkID0gdGhpcy5idWZmZXJGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwMClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgJiYgdmFsdWUgPiAwICYmIHZhbHVlIDw9IDEwMDAwMCkge1xyXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyRXZlbnQuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLnNwYXRpYWxGaWx0ZXJTZXJ2aWNlLmxvYWRCdWZmZXJHZW9tZXRyeShcclxuICAgICAgICAgICAgdGhpcy5kcmF3Wm9uZSxcclxuICAgICAgICAgICAgU3BhdGlhbEZpbHRlclR5cGUuUG9seWdvbixcclxuICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICkuc3Vic2NyaWJlKChmZWF0dXJlR2VvbTogRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyID0gZmVhdHVyZUdlb207XHJcbiAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXJDaGFuZ2UuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVycyAmJiB2YWx1ZSA+IDAgJiYgdmFsdWUgPD0gMTAwKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuc3BhdGlhbEZpbHRlclNlcnZpY2UubG9hZEJ1ZmZlckdlb21ldHJ5KFxyXG4gICAgICAgICAgICB0aGlzLmRyYXdab25lLFxyXG4gICAgICAgICAgICBTcGF0aWFsRmlsdGVyVHlwZS5Qb2x5Z29uLFxyXG4gICAgICAgICAgICB2YWx1ZSAqIDEwMDBcclxuICAgICAgICAgICkuc3Vic2NyaWJlKChmZWF0dXJlR2VvbTogRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyID0gZmVhdHVyZUdlb207XHJcbiAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXJDaGFuZ2UuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlckV2ZW50LmVtaXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5kcmF3Wm9uZUV2ZW50LmVtaXQodGhpcy5kcmF3Wm9uZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHZhbHVlIDwgMCB8fFxyXG4gICAgICAgICAgKHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyAmJiB2YWx1ZSA+IDEwMDAwMCkgfHxcclxuICAgICAgICAgICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzICYmIHZhbHVlID4gMTAwKSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQodGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5idWZmZXJBbGVydCcpLFxyXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIud2FybmluZycpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZFN0cmF0ZWd5ID0gbmV3IEVudGl0eVN0b3JlRmlsdGVyU2VsZWN0aW9uU3RyYXRlZ3koe30pO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3koe1xyXG4gICAgICBsYXllcjogbmV3IFZlY3RvckxheWVyKHtcclxuICAgICAgICB6SW5kZXg6IDMwMCxcclxuICAgICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxyXG4gICAgICAgIHN0eWxlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgc2hvd0luTGF5ZXJMaXN0OiBmYWxzZSxcclxuICAgICAgICBleHBvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgICBicm93c2FibGU6IGZhbHNlXHJcbiAgICAgIH0pLFxyXG4gICAgICBtYXA6IHRoaXMubWFwLFxyXG4gICAgICBoaXRUb2xlcmFuY2U6IDE1LFxyXG4gICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCxcclxuICAgICAgbWFueTogdHJ1ZSxcclxuICAgICAgZHJhZ0JveDogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdG9yZS5hZGRTdHJhdGVneShzZWxlY3Rpb25TdHJhdGVneSwgdHJ1ZSk7XHJcbiAgICB0aGlzLnN0b3JlLmFkZFN0cmF0ZWd5KHNlbGVjdGVkUmVjb3JkU3RyYXRlZ3ksIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIHRvIHRoZSB2YWx1ZSBzdHJlYW1cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudmFsdWUkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5yYWRpdXNDaGFuZ2VzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYnVmZmVyQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGFjaCgpO1xyXG4gICAgaWYgKHRoaXMucmFkaXVzQ2hhbmdlcyQkKSB7XHJcbiAgICAgIHRoaXMucmFkaXVzQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWx1ZSQkKSB7XHJcbiAgICAgIHRoaXMudmFsdWUkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtVHlwZUNoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID0gZXZlbnQudmFsdWU7XHJcbiAgICB0aGlzLml0ZW1UeXBlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1UeXBlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgbWVhc3VyZSB1bml0XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25NZWFzdXJlVW5pdENoYW5nZSh1bml0OiBNZWFzdXJlTGVuZ3RoVW5pdCkge1xyXG4gICAgaWYgKHVuaXQgPT09IHRoaXMubWVhc3VyZVVuaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9IHVuaXQ7XHJcbiAgICAgIHRoaXMubWVhc3VyZVVuaXRDaGFuZ2UuZW1pdCh0aGlzLm1lYXN1cmVVbml0KTtcclxuICAgICAgaWYgKHRoaXMuaXNQb2x5Z29uKCkpIHtcclxuICAgICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgP1xyXG4gICAgICAgICAgdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlICogMTAwMCkgOlxyXG4gICAgICAgICAgdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlIC8gMTAwMCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1BvaW50KCkpIHtcclxuICAgICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgP1xyXG4gICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlICogMTAwMCkgOlxyXG4gICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlIC8gMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzUHJlZGVmaW5lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlByZWRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBpc1BvbHlnb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBTcGF0aWFsRmlsdGVyVHlwZS5Qb2x5Z29uO1xyXG4gIH1cclxuXHJcbiAgaXNQb2ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlBvaW50O1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hpbGQoXzogbnVtYmVyLCBub2RlOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcclxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uVG9nZ2xlQ2xpY2sobm9kZTogU3BhdGlhbEZpbHRlclRoZW1hdGljKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKG5vZGUpIDogdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKG5vZGU/OiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcclxuICAgIGxldCBudW1TZWxlY3RlZDtcclxuICAgIGxldCBudW1Ob2RlcyA9IDA7XHJcbiAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdGVkLmxlbmd0aDtcclxuICAgICAgdGhpcy50aGVtYXRpY3MuZm9yRWFjaCh0aGVtYXRpYyA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzLmluZGV4T2YodGhlbWF0aWMubmFtZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICBudW1Ob2RlcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2hpbGRyZW5zLmZvckVhY2goY2hpbGRyZW4gPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy50aGVtYXRpY3MuZmluZCh0aGVtYXRpYyA9PiB0aGVtYXRpYy5zb3VyY2UgPT09IGNoaWxkcmVuLnNvdXJjZSkpIHtcclxuICAgICAgICAgIG51bU5vZGVzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG51bVNlbGVjdGVkID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQuZmluZCh0aGVtYXRpYyA9PiB0aGVtYXRpYyA9PT0gY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICBudW1Ob2RlcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG51bU5vZGVzID49IDEpIHtcclxuICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Ob2RlcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc0NoaWxkcmVuU2VsZWN0ZWQobm9kZTogU3BhdGlhbEZpbHRlclRoZW1hdGljKSB7XHJcbiAgICBsZXQgYm9vbCA9IGZhbHNlO1xyXG4gICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQuZmluZCh0aGVtYXRpYyA9PiB0aGVtYXRpYy5zb3VyY2UgPT09IGNoaWxkLnNvdXJjZSkpIHtcclxuICAgICAgICBib29sID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYm9vbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGhlYWRlciBjaGVja2JveFxyXG4gICAqL1xyXG4gIG1hc3RlclRvZ2dsZSgpIHtcclxuICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpID9cclxuICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5jbGVhcigpIDpcclxuICAgICAgdGhpcy5zZWxlY3RBbGwoKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFRoZW1hdGljc05hbWU6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHRoZW1hdGljIG9mIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQpIHtcclxuICAgICAgc2VsZWN0ZWRUaGVtYXRpY3NOYW1lLnB1c2godGhlbWF0aWMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICB0aGlzLnRoZW1hdGljcy5mb3JFYWNoKHRoZW1hdGljID0+IHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDaGlsZCgwLCB0aGVtYXRpYykpIHtcclxuICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoZW1hdGljKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50aGVtYXRpY3MuZm9yRWFjaCh0aGVtYXRpYyA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGQoMCwgdGhlbWF0aWMpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKHRoZW1hdGljKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy50aGVtYXRpY0NoYW5nZS5lbWl0KHNlbGVjdGVkVGhlbWF0aWNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwobm9kZT86IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2godGhlbWF0aWMgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3Vwcy5pbmRleE9mKHRoZW1hdGljLm5hbWUpID09PSAtMSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3QodGhlbWF0aWMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2hpbGRyZW5zLmZvckVhY2goY2hpbGRyZW4gPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5maW5kKHRoZW1hdGljID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gY2hpbGRyZW4uc291cmNlKSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3QoY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5oYXNDaGlsZCgwLCBub2RlKSkge1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiA9PiB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdChjaGlsZHJlbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGlsZHJlbnNUb2dnbGUobm9kZTogU3BhdGlhbEZpbHRlclRoZW1hdGljKSB7XHJcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQobm9kZSkgP1xyXG4gICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3MuZGVzZWxlY3QoY2hpbGQpKSA6XHJcbiAgICB0aGlzLnNlbGVjdEFsbChub2RlKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFRoZW1hdGljc05hbWU6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHRoZW1hdGljIG9mIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQpIHtcclxuICAgICAgc2VsZWN0ZWRUaGVtYXRpY3NOYW1lLnB1c2godGhlbWF0aWMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XHJcbiAgICB0aGlzLnRoZW1hdGljQ2hhbmdlLmVtaXQoc2VsZWN0ZWRUaGVtYXRpY3NOYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGNoYW5nZXMgdG8gdGhlIHRoZW1hdGljcyBzZWxlY3RlZCB0cmVlIGFuZCBlbWl0IGV2ZW50XHJcbiAgICovXHJcbiAgb25Ub2dnbGVDaGFuZ2Uobm9kZVNlbGVjdGVkOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcclxuICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQuZmluZCh0aGVtYXRpYyA9PiB0aGVtYXRpYy5zb3VyY2UgPT09IG5vZGVTZWxlY3RlZC5zb3VyY2UpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hpbGRyZW5zLmZvckVhY2goY2hpbGRyZW4gPT4ge1xyXG4gICAgICBpZiAoY2hpbGRyZW4gPT09IG5vZGVTZWxlY3RlZCAmJiBzZWxlY3RlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdChjaGlsZHJlbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkcmVuID09PSBub2RlU2VsZWN0ZWQgJiYgc2VsZWN0ZWQgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLmRlc2VsZWN0KGNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRoZW1hdGljcy5mb3JFYWNoKHRoZW1hdGljID0+IHtcclxuICAgICAgaWYgKHRoZW1hdGljID09PSBub2RlU2VsZWN0ZWQgJiYgc2VsZWN0ZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3QodGhlbWF0aWMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGVtYXRpYyA9PT0gbm9kZVNlbGVjdGVkICYmIHNlbGVjdGVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5kZXNlbGVjdCh0aGVtYXRpYyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWF0aWNzTmFtZTogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xyXG4gICAgICBzZWxlY3RlZFRoZW1hdGljc05hbWUucHVzaCh0aGVtYXRpYyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRoZW1hdGljQ2hhbmdlLmVtaXQoc2VsZWN0ZWRUaGVtYXRpY3NOYW1lKTtcclxuICB9XHJcblxyXG4gIG9uRHJhd0NvbnRyb2xDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSAhdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgb25mcmVlaGFuZENvbnRyb2xDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlID0gIXRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmU7XHJcbiAgICB0aGlzLmZyZWVoYW5kQ29udHJvbC5lbWl0KHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpO1xyXG4gICAgaWYgKHRoaXMuaXNQb2ludCgpKSB7XHJcbiAgICAgIHRoaXMucHJlZGVmaW5lZFJhZGl1cy5lbWl0KCF0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKTtcclxuICAgICAgaWYgKHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLm92ZXJsYXlTdHlsZSQubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMuZHJhd1N0eWxlJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJlZGVmaW5lZFJhZGl1cy5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExhdW5jaCBzZWFyY2ggYnV0dG9uXHJcbiAgICovXHJcbiAgdG9nZ2xlU2VhcmNoQnV0dG9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzUHJlZGVmaW5lZCgpKSB7XHJcbiAgICAgIGlmICh0aGlzLmJ1ZmZlciA+IDApIHtcclxuICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyLm1ldGEgPSB7XHJcbiAgICAgICAgICBpZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdGl0bGU6ICdab25lJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy56b25lV2l0aEJ1ZmZlci5wcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgbm9tOiAnWm9uZScsXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRyYXdab25lLm1ldGEgPSB7XHJcbiAgICAgICAgICBpZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdGl0bGU6ICdab25lJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5kcmF3Wm9uZS5wcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgbm9tOiAnWm9uZScsXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLmRyYXdab25lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNQb2ludCgpKSB7XHJcbiAgICAgIHRoaXMucmFkaXVzRXZlbnQuZW1pdCh0aGlzLnJhZGl1cyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNQb2x5Z29uKCkpIHtcclxuICAgICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMudG9nZ2xlU2VhcmNoLmVtaXQoKTtcclxuICAgIHRoaXMuc3RvcmUuZW50aXRpZXMkLnBpcGUoXHJcbiAgICAgIGRlYm91bmNlVGltZSg1MDApXHJcbiAgICApLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCAmJiB0aGlzLmxheWVycy5sZW5ndGggPT09IHRoaXMudGhlbWF0aWNMZW5ndGggKyAxKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuV29ya3NwYWNlLmVtaXQoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlVGVtcGxhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXVuY2ggY2xlYXIgYnV0dG9uIChjbGVhciBzdG9yZSBhbmQgbWFwIGxheWVycylcclxuICAgKi9cclxuICBjbGVhckJ1dHRvbigpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5zdG9yZSkge1xyXG4gICAgICB0aGlzLnN0b3JlLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1BvaW50KCkgfHwgdGhpcy5pc1BvbHlnb24oKSkge1xyXG4gICAgICB0aGlzLmRyYXdab25lID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgdGhpcy5idWZmZXIgPSAwO1xyXG4gICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KDApO1xyXG4gICAgdGhpcy5jbGVhckJ1dHRvbkV2ZW50LmVtaXQoKTtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy50YWJsZVRlbXBsYXRlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJEcmF3Wm9uZSgpIHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoMCk7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXVuY2ggY2xlYXIgc2VhcmNoIChjbGVhciBmaWVsZCBpZiB0eXBlIGlzIHByZWRlZmluZWQpXHJcbiAgICovXHJcbiAgY2xlYXJTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLmNsZWFyKCk7XHJcbiAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgdGhpcy5idWZmZXIgPSAwO1xyXG4gICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KDApO1xyXG4gICAgdGhpcy50aGVtYXRpY0NoYW5nZS5lbWl0KFtdKTtcclxuICAgIHRoaXMuY2xlYXJTZWFyY2hFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZnkgY29uZGl0aW9ucyBvZiBpbmNvbXBsZXRlIGZpZWxkcyBvciBidXN5IHNlcnZpY2VcclxuICAgKi9cclxuICBkaXNhYmxlU2VhcmNoQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzcykge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5VHlwZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuem9uZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuVGhlbWF0aWNzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlcnlUeXBlICE9PSB1bmRlZmluZWQgJiYgdGhpcy56b25lICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9seWdvbiB8fCB0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlBvaW50KSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbVR5cGUgPT09IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZS5BZGRyZXNzICYmIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbVR5cGUgPT09IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZS5UaGVtYXRpY3MpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5sZW5ndGggPiAwICYmIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVkQ2xlYXJTZWFyY2goKSB7XHJcbiAgICBsZXQgZGlzYWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbVR5cGUgPT09IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZS5BZGRyZXNzID9cclxuICAgICAgZGlzYWJsZSA9IHRoaXMucXVlcnlUeXBlID09PSB1bmRlZmluZWQgOlxyXG4gICAgICBkaXNhYmxlID0gdGhpcy5xdWVyeVR5cGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMDtcclxuXHJcbiAgICByZXR1cm4gZGlzYWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hbmFnZSByYWRpdXMgdmFsdWUgYXQgdXNlciBjaGFuZ2VcclxuICAgKi9cclxuICBnZXRSYWRpdXMoKSB7XHJcbiAgICBsZXQgZm9ybVZhbHVlO1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzID9cclxuICAgICAgICBmb3JtVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlLnJhZGl1cyA6XHJcbiAgICAgICAgZm9ybVZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5yYWRpdXMgLyAxMDAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9ybVZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlBvaW50KSB7XHJcbiAgICAgIGlmICghdGhpcy5mcmVlaGFuZERyYXdJc0FjdGl2ZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUgPCAwIHx8XHJcbiAgICAgICAgICAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzICYmIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUgPj0gMTAwMDAwKSB8fFxyXG4gICAgICAgICAgKHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0LktpbG9tZXRlcnMgJiYgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSA+PSAxMDApKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIucmFkaXVzQWxlcnQnKSxcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uc3BhdGlhbEZpbHRlci53YXJuaW5nJykpO1xyXG4gICAgICAgICAgdGhpcy5yYWRpdXMgPSAxMDAwO1xyXG4gICAgICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzID9cclxuICAgICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1cykgOlxyXG4gICAgICAgICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMucmFkaXVzIC8gMTAwMCk7XHJcbiAgICAgICAgICB0aGlzLmRyYXdHdWlkZSQubmV4dCh0aGlzLnJhZGl1cyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChmb3JtVmFsdWUpIHtcclxuICAgICAgICAgIGlmIChmb3JtVmFsdWUgPj0gMTAwMDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQodGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yYWRpdXNBbGVydCcpLFxyXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIud2FybmluZycpKTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5yZXNldCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZm9ybVZhbHVlICE9PSB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUoZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuZHJhd0d1aWRlJC5uZXh0KHRoaXMucmFkaXVzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUgKiAxMDAwO1xyXG4gICAgICAgIHRoaXMuZHJhd0d1aWRlJC5uZXh0KHRoaXMucmFkaXVzICogMTAwMCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vdmVybGF5U3R5bGUkLm5leHQodGhpcy5Qb2ludFN0eWxlKTtcclxuICAgICAgdGhpcy5kcmF3U3R5bGUkLm5leHQodGhpcy5Qb2ludFN0eWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVZpc2libGVMaXN0KCkge1xyXG4gICAgdGhpcy5saXN0SXNWaXNpYmxlID0gIXRoaXMubGlzdElzVmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVGFibGVUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IHR5cGVDb2x1bW4gPSB7XHJcbiAgICAgIG5hbWU6ICdtZXRhLnRpdGxlJyxcclxuICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIudHlwZScpLFxyXG4gICAgICByZW5kZXJlcjogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcclxuICAgIH07XHJcbiAgICBjb25zdCBuYW1lQ29sdW1uID0ge1xyXG4gICAgICBuYW1lOiAncHJvcGVydGllcy5ub20nLFxyXG4gICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5zZWFyY2hSZXN1bHRzJyksXHJcbiAgICAgIHJlbmRlcmVyOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLlVuc2FuaXRpemVkSFRNTFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSBbdHlwZUNvbHVtbiwgbmFtZUNvbHVtbl07XHJcblxyXG4gICAgdGhpcy50YWJsZVRlbXBsYXRlID0ge1xyXG4gICAgICBzZWxlY3Rpb246IHRydWUsXHJcbiAgICAgIHNvcnQ6IHRydWUsXHJcbiAgICAgIGNvbHVtbnNcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsIjxpZ28tZ2VvbWV0cnktZm9ybS1maWVsZC1pbnB1dFxyXG4gIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXHJcbiAgW21hcF09XCJtYXBcIlxyXG4gIFtnZW9tZXRyeVR5cGVdPVwiZ2VvbWV0cnlUeXBlXCJcclxuICBbZHJhd0d1aWRlXT1cImRyYXdHdWlkZSQgfCBhc3luY1wiXHJcbiAgW21lYXN1cmVdPVwibWVhc3VyZVwiXHJcbiAgW2RyYXdDb250cm9sSXNBY3RpdmVdPVwiZHJhd0NvbnRyb2xJc0FjdGl2ZVwiXHJcbiAgW2ZyZWVoYW5kRHJhd0lzQWN0aXZlXT1cImZyZWVoYW5kRHJhd0lzQWN0aXZlXCJcclxuICBbZHJhd1N0eWxlXT1cImRyYXdTdHlsZSQgfCBhc3luY1wiXHJcbiAgW292ZXJsYXlTdHlsZV09XCJvdmVybGF5U3R5bGUkIHwgYXN5bmNcIlxyXG4gIFtyYWRpdXNdPVwicmFkaXVzXCJcclxuICBbcHJlZGVmaW5lZFJhZGl1c109XCJwcmVkZWZpbmVkUmFkaXVzXCI+XHJcbjwvaWdvLWdlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXQ+XHJcblxyXG48ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cIiFpc1ByZWRlZmluZWQoKVwiXHJcbiAgICAgIFtjaGVja2VkXT1cImRyYXdDb250cm9sSXNBY3RpdmVcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAgIChjaGFuZ2UpPVwib25EcmF3Q29udHJvbENoYW5nZSgpXCI+XHJcbiAgICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5kcmF3Q29udHJvbCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGUgKm5nSWY9XCIhaXNQcmVkZWZpbmVkKClcIlxyXG4gICAgICBbY2hlY2tlZF09XCJmcmVlaGFuZERyYXdJc0FjdGl2ZVwiXHJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgICAgKGNoYW5nZSk9XCJvbmZyZWVoYW5kQ29udHJvbENoYW5nZSgpXCI+XHJcbiAgICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5mcmVlaGFuZENvbnRyb2wnIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYnVmZmVyLXVuaXRcIiAqbmdJZj1cImlzUG9seWdvbigpXCI+XHJcbiAgPGZvcm0gY2xhc3M9XCJidWZmZXItZm9ybVwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYnVmZmVyXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuYnVmZmVyJyB8IHRyYW5zbGF0ZX19XCIgW2Zvcm1Db250cm9sXT1cImJ1ZmZlckZvcm1Db250cm9sXCJcclxuICAgICAgW3ZhbHVlXT1cIjBcIiBbcmVhZG9ubHldPVwidGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbFwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcblxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInVuaXQtZmllbGRcIj5cclxuICAgIDxtYXQtc2VsZWN0XHJcbiAgICBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIlxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1lYXN1cmVVbml0Q2hhbmdlKCRldmVudC52YWx1ZSlcIj5cclxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtZWFzdXJlVW5pdCBvZiBtZWFzdXJlVW5pdHNcIiBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIj5cclxuICAgICAgICB7eygnaWdvLmdlby5tZWFzdXJlLicgKyBtZWFzdXJlVW5pdCkgfCB0cmFuc2xhdGV9fVxyXG4gICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInJhZGl1cy11bml0XCIgKm5nSWY9XCJpc1BvaW50KClcIj5cclxuICA8Zm9ybSBjbGFzcz1cInJhZGl1cy1mb3JtXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJyYWRpdXNcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5yYWRpdXMnIHwgdHJhbnNsYXRlfX1cIiBbZm9ybUNvbnRyb2xdPVwicmFkaXVzRm9ybUNvbnRyb2xcIlxyXG4gICAgICBbdmFsdWVdPVwiMTAwMFwiIChpbnB1dCk9XCJnZXRSYWRpdXMoKVwiIFtyZWFkb25seV09XCJ0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlICYmIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGxcIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9mb3JtPlxyXG5cclxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1bml0LWZpZWxkXCI+XHJcbiAgICA8bWF0LXNlbGVjdFxyXG4gICAgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCJcclxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25NZWFzdXJlVW5pdENoYW5nZSgkZXZlbnQudmFsdWUpXCI+XHJcbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWVhc3VyZVVuaXQgb2YgbWVhc3VyZVVuaXRzXCIgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCI+XHJcbiAgICAgICAge3soJ2lnby5nZW8ubWVhc3VyZS4nICsgbWVhc3VyZVVuaXQpIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2Rpdj5cclxuXHJcbjxtYXQtbGFiZWwgY2xhc3M9XCJ0aXRsZSBtYXQtdHlwb2dyYXBoeVwiPnt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5zZWFyY2gnIHwgdHJhbnNsYXRlfX0gOiA8L21hdC1sYWJlbD5cclxuPG1hdC1yYWRpby1ncm91cCBbdmFsdWVdPVwic2VsZWN0ZWRJdGVtVHlwZVwiPlxyXG4gICAgPG1hdC1yYWRpby1idXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbVR5cGVcIlxyXG4gICAgICBbdmFsdWVdPVwiaXRlbVwiXHJcbiAgICAgIChjaGFuZ2UpPVwib25JdGVtVHlwZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci4nICsgaXRlbSB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbjwvbWF0LXJhZGlvLWdyb3VwPlxyXG5cclxuPGRpdiBjbGFzcz1cInRoZW1hdGljc1wiICpuZ0lmPVwiKHNlbGVjdGVkSXRlbVR5cGU9PT0nVGhlbWF0aWNzJyAmJiAhdGFibGVUZW1wbGF0ZSkgfHwgKHNlbGVjdGVkSXRlbVR5cGU9PT0nVGhlbWF0aWNzJyAmJiB0YWJsZVRlbXBsYXRlICYmICFsaXN0SXNWaXNpYmxlKVwiPlxyXG4gIDxtYXQtdGFibGU+XHJcbiAgICAgIDwhLS0gTmFtZSBDb2x1bW4gLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibmFtZVwiPlxyXG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ0aGVtYXRpY3MtaGVhZGVyXCI+e3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLlRoZW1hdGljcycgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gU2VsZWN0IENvbHVtbiAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIj5cclxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiY2hlY2tzLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGVkVGhlbWF0aWNzLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L21hdC1oZWFkZXItcm93PlxyXG4gICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC9tYXQtcm93PlxyXG5cclxuICA8L21hdC10YWJsZT5cclxuXHJcbiAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIj5cclxuICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBsZWFmIG5vZGVzIC0tPlxyXG4gICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBtYXRUcmVlTm9kZVRvZ2dsZT5cclxuICAgICAgPGxpIGNsYXNzPVwibWF0LXRyZWUtbm9kZVwiPlxyXG4gICAgICAgIDwhLS0gdXNlIGEgZGlzYWJsZWQgYnV0dG9uIHRvIHByb3ZpZGUgcGFkZGluZyBmb3IgdHJlZSBsZWFmIC0tPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkPjwvYnV0dG9uPlxyXG4gICAgICAgIHt7bm9kZS5uYW1lfX1cclxuICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwidHJlZS1jaGVja1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBvblRvZ2dsZUNoYW5nZShub2RlKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRUaGVtYXRpY3MuaXNTZWxlY3RlZChub2RlKVwiPlxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC9tYXQtdHJlZS1ub2RlPlxyXG5cclxuICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxyXG4gICAgPG1hdC1uZXN0ZWQtdHJlZS1ub2RlICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtdHJlZS1ub2RlXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVDbGljayhub2RlKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwidHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdjaGV2cm9uLWRvd24nIDogJ2NoZXZyb24tcmlnaHQnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAge3tub2RlLm5hbWV9fVxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cInRyZWUtY2hlY2stMlwiIChjaGFuZ2UpPVwiJGV2ZW50ID8gY2hpbGRyZW5zVG9nZ2xlKG5vZGUpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJoYXNDaGlsZHJlblNlbGVjdGVkKG5vZGUpICYmICFpc0FsbFNlbGVjdGVkKG5vZGUpXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJ0cmVlLXVsXCIgW2NsYXNzLmV4YW1wbGUtdHJlZS1pbnZpc2libGVdPVwiIXRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0VHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvbWF0LW5lc3RlZC10cmVlLW5vZGU+XHJcblxyXG4gIDwvbWF0LXRyZWU+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cclxuXHJcbiAgPGJ1dHRvbiAqbmdJZj1cImlzUHJlZGVmaW5lZCgpXCIgbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJjbGVhci1zZWFyY2gtYnV0dG9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkQ2xlYXJTZWFyY2goKVwiXHJcbiAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiPlxyXG4gICAgICB7eydpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuY2xlYXJTZWFyY2gnIHwgdHJhbnNsYXRlfX1cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvbiAqbmdJZj1cImlzUG9seWdvbigpIHx8IGlzUG9pbnQoKVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiY2xlYXItZm9ybS1idXR0b25cIiBbZGlzYWJsZWRdPVwidGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbFwiXHJcbiAgICAoY2xpY2spPVwiY2xlYXJEcmF3Wm9uZSgpXCI+XHJcbiAgICB7eydpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuY2xlYXJGb3JtJyB8IHRyYW5zbGF0ZX19XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJzZWFyY2gtYnV0dG9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVTZWFyY2hCdXR0b24oKVwiIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAoY2xpY2spPVwidG9nZ2xlU2VhcmNoQnV0dG9uKClcIj5cclxuICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5nb1NlYXJjaCcgfCB0cmFuc2xhdGV9fVxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwicmVtb3ZlLWJ1dHRvblwiIFtkaXNhYmxlZF09XCJhbGxMYXllcnMubGVuZ3RoID09PSAwXCIgKGNsaWNrKT1cImNsZWFyQnV0dG9uKClcIj5cclxuICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5yZW1vdmVMYXllcicgfCB0cmFuc2xhdGV9fVxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIFtkaXNhYmxlZF09XCIhc3RvcmUuZW50aXRpZXMkLmdldFZhbHVlKCkubGVuZ3RoXCIgKGNsaWNrKT1cImV4cG9ydC5lbWl0KClcIj5cclxuICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5leHBvcnRMYXllcicgfCB0cmFuc2xhdGV9fVxyXG4gIDwvYnV0dG9uPlxyXG5cclxuPC9kaXY+XHJcblxyXG48YnV0dG9uXHJcbiAgY2xhc3M9XCJjaGV2cm9uLWRvd25cIlxyXG4gICpuZ0lmPVwic3RvcmUuYWxsKCkubGVuZ3RoICYmIHRhYmxlVGVtcGxhdGUgJiYgIWxpc3RJc1Zpc2libGVcIlxyXG4gIG1hdC1pY29uLWJ1dHRvblxyXG4gIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuc2hvd1NlYXJjaFJlc3VsdHMnIHwgdHJhbnNsYXRlXCJcclxuICAoY2xpY2spPVwidG9nZ2xlVmlzaWJsZUxpc3QoKVwiPlxyXG4gIDxtYXQtaWNvbiBzdmdJY29uPVwiY2hldnJvbi1kb3duXCI+PC9tYXQtaWNvbj5cclxuPC9idXR0b24+XHJcblxyXG48ZGl2IGNsYXNzPVwicmVzdWx0c1wiICpuZ0lmPVwic3RvcmUuYWxsKCkubGVuZ3RoICYmIHRhYmxlVGVtcGxhdGUgJiYgbGlzdElzVmlzaWJsZVwiPlxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwibGlzdElzVmlzaWJsZVwiXHJcbiAgICBtYXQtaWNvbi1idXR0b25cclxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5oaWRlU2VhcmNoUmVzdWx0cycgfCB0cmFuc2xhdGVcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZVZpc2libGVMaXN0KClcIj5cclxuICA8bWF0LWljb24gc3ZnSWNvbj1cImNoZXZyb24tdXBcIj48L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxpZ28tZW50aXR5LXRhYmxlXHJcbiAgICBjbGFzcz1cInJlc3VsdHMtbGlzdFwiXHJcbiAgICBbdGVtcGxhdGVdPVwidGFibGVUZW1wbGF0ZVwiXHJcbiAgICBbc3RvcmVdPVwic3RvcmVcIlxyXG4gICAgKGVudGl0eVNlbGVjdENoYW5nZSk9XCJlbnRpdHlDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XHJcbiAgPC9pZ28tZW50aXR5LXRhYmxlPlxyXG48L2Rpdj5cclxuIl19
1089
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1maWx0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvc3BhdGlhbC1maWx0ZXIvc3BhdGlhbC1maWx0ZXItaXRlbS9zcGF0aWFsLWZpbHRlci1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9zcGF0aWFsLWZpbHRlci9zcGF0aWFsLWZpbHRlci1pdGVtL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixZQUFZLEVBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUlyRCxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUVsQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQWUsa0NBQWtDLEVBQUUseUJBQXlCLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBQy9ILE9BQU8sRUFBUyxXQUFXLEVBQUUsTUFBTSx1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LGVBQStDO1FBQS9DLGlFQUErQztRQUM3RixlQUNGO1FBREUsNEZBQ0Y7UUFNQyxlQUEyRDtRQUEzRCx3RkFBMkQ7UUFReEMsZUFBMEQ7UUFBMUQsdUZBQTBEOzt1RkQ1SG5FLDBCQUEwQjtjQU50QyxTQUFTOzJCQUNFLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTTtrS0FJdEMsR0FBRztrQkFBWCxLQUFLO1lBR0YsSUFBSTtrQkFEUCxLQUFLO1lBdUZHLFNBQVM7a0JBQWpCLEtBQUs7WUFFRyxJQUFJO2tCQUFaLEtBQUs7WUFFRyxPQUFPO2tCQUFmLEtBQUs7WUFHRixLQUFLO2tCQURSLEtBQUs7WUFrQkcsTUFBTTtrQkFBZCxLQUFLO1lBRUcsU0FBUztrQkFBakIsS0FBSztZQUdGLGNBQWM7a0JBRGpCLEtBQUs7WUFTSSxZQUFZO2tCQUFyQixNQUFNO1lBRUcsY0FBYztrQkFBdkIsTUFBTTtZQUVHLGNBQWM7a0JBQXZCLE1BQU07WUFFRyxhQUFhO2tCQUF0QixNQUFNO1lBRUcsV0FBVztrQkFBcEIsTUFBTTtZQUNHLG9CQUFvQjtrQkFBN0IsTUFBTTtZQUNHLGlCQUFpQjtrQkFBMUIsTUFBTTtZQUVHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxlQUFlO2tCQUF4QixNQUFNO1lBQ0csZ0JBQWdCO2tCQUF6QixNQUFNO1lBRUcsZ0JBQWdCO2tCQUF6QixNQUFNO1lBRUcsZ0JBQWdCO2tCQUF6QixNQUFNO1lBRUcsTUFBTTtrQkFBZixNQUFNO1lBRUcsYUFBYTtrQkFBdEIsTUFBTTtZQUNHLFlBQVk7a0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcGF0aWFsRmlsdGVyUXVlcnlUeXBlLCBTcGF0aWFsRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5lbnVtJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uLy4uL21hcCc7XG5pbXBvcnQgeyBTcGF0aWFsRmlsdGVySXRlbVR5cGUgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5lbnVtJztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLy4uLy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgR2VvSlNPTkdlb21ldHJ5IH0gZnJvbSAnLi4vLi4vLi4vZ2VvbWV0cnkvc2hhcmVkL2dlb21ldHJ5LmludGVyZmFjZXMnO1xuaW1wb3J0ICogYXMgb2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgT2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcbmltcG9ydCB7IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQgeyBTcGF0aWFsRmlsdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1lYXN1cmVMZW5ndGhVbml0IH0gZnJvbSAnLi4vLi4vLi4vbWVhc3VyZSc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSwgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSwgRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciwgRW50aXR5VGFibGVUZW1wbGF0ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5pbXBvcnQgeyBMYXllciwgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi8uLi9sYXllci9zaGFyZWQnO1xuaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBTcGF0aWFsRmlsdGVyVGhlbWF0aWMgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UsIExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGZWF0dXJlTW90aW9uLCBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gJy4uLy4uLy4uL2ZlYXR1cmUnO1xuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhc291cmNlL3NoYXJlZCc7XG5cbi8qKlxuICogU3BhdGlhbC1GaWx0ZXItSXRlbSAoc2VhcmNoIHBhcmFtZXRlcnMpXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1zcGF0aWFsLWZpbHRlci1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zcGF0aWFsLWZpbHRlci1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNwYXRpYWxGaWx0ZXJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0eXBlKCk6IFNwYXRpYWxGaWx0ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBzZXQgdHlwZSh0eXBlOiBTcGF0aWFsRmlsdGVyVHlwZSkge1xuICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZW9tZXRyeVR5cGVzLmZpbmRJbmRleChnZW9tID0+IGdlb20gPT09IHRoaXMudHlwZSk7XG4gICAgdGhpcy5nZW9tZXRyeVR5cGUgPSB0aGlzLmdlb21ldHJ5VHlwZXNbaW5kZXhdO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgICB0aGlzLnJhZGl1cyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYXdHdWlkZSQubmV4dChudWxsKTtcbiAgICB0aGlzLmRyYXdTdHlsZSQubmV4dCh1bmRlZmluZWQpO1xuXG4gICAgLy8gTmVjZXNzYXJ5IHRvIGtlZXAgcmVmZXJlbmNlIHRvIHRoZSBnZW9tZXRyeSBmb3JtIGZpZWxkIGlucHV0XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZCkge1xuICAgICAgY29uc3QgZ2VvanNvbjogR2VvSlNPTkdlb21ldHJ5ID0ge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogJydcbiAgICAgIH07XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGdlb2pzb24pO1xuICAgIH1cblxuICAgIC8vIE5lY2Vzc2FyeSB0byBhcHBseSB0aGUgcmlnaHQgc3R5bGUgd2hlbiBnZW9tZXRyeSB0eXBlIGlzIFBvaW50XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnQpIHtcbiAgICAgIHRoaXMucmFkaXVzID0gMTAwMDsgLy8gQmFzZSByYWRpdXNcbiAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXMpO1xuICAgICAgdGhpcy5Qb2ludFN0eWxlID0gKGZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiwgcmVzb2x1dGlvbjogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGdlb20gPSBmZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgT2xQb2ludDtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBvbHByb2oudHJhbnNmb3JtKGdlb20uZ2V0Q29vcmRpbmF0ZXMoKSwgdGhpcy5tYXAucHJvamVjdGlvbiwgJ0VQU0c6NDMyNicpO1xuICAgICAgICByZXR1cm4gbmV3IG9sU3R5bGUuU3R5bGUgKHtcbiAgICAgICAgICBpbWFnZTogbmV3IG9sU3R5bGUuQ2lyY2xlICh7XG4gICAgICAgICAgICByYWRpdXM6IHRoaXMucmFkaXVzIC8gKE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIGNvb3JkaW5hdGVzWzFdKSkgLyByZXNvbHV0aW9uLCAvLyBMYXRpdHVkZSBjb3JyZWN0aW9uXG4gICAgICAgICAgICBzdHJva2U6IG5ldyBvbFN0eWxlLlN0cm9rZSh7XG4gICAgICAgICAgICAgIHdpZHRoOiAyLFxuICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMTUzLCAyNTUpJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWxsOiBuZXcgb2xTdHlsZS5GaWxsKHtcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1LCAwLjIpJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLm92ZXJsYXlTdHlsZSA9IHRoaXMuUG9pbnRTdHlsZTtcbiAgICAgIHRoaXMuZHJhd1N0eWxlJC5uZXh0KHRoaXMub3ZlcmxheVN0eWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgZ2VvbWV0cnkgdHlwZXMgaXMgUG9seWdvblxuICAgICAgdGhpcy5yYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLlBvbHlTdHlsZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBvbFN0eWxlLlN0eWxlICh7XG4gICAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xuICAgICAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMTUzLCAyNTUpJ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGZpbGw6IG5ldyBvbFN0eWxlLkZpbGwoe1xuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1LCAwLjIpJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbG9yID0gWzAsIDE1MywgMjU1XTtcbiAgICAgIGNvbnN0IGRyYXdTdHlsZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBvbFN0eWxlLlN0eWxlKHtcbiAgICAgICAgICBpbWFnZTogbmV3IG9sU3R5bGUuQ2lyY2xlICh7XG4gICAgICAgICAgICByYWRpdXM6IDgsXG4gICAgICAgICAgICBzdHJva2U6IG5ldyBvbFN0eWxlLlN0cm9rZSh7XG4gICAgICAgICAgICAgIHdpZHRoOiAyLFxuICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMTUzLCAyNTUpJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWxsOiBuZXcgb2xTdHlsZS5GaWxsKHtcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1LCAwLjIpJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdHJva2U6IG5ldyBvbFN0eWxlLlN0cm9rZSh7XG4gICAgICAgICAgICBjb2xvcjogY29sb3IuY29uY2F0KFsxXSksXG4gICAgICAgICAgICB3aWR0aDogMlxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGZpbGw6ICBuZXcgb2xTdHlsZS5GaWxsKHtcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvci5jb25jYXQoWzAuMl0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5vdmVybGF5U3R5bGUgPSB0aGlzLlBvbHlTdHlsZTtcbiAgICAgIHRoaXMuZHJhd1N0eWxlJC5uZXh0KGRyYXdTdHlsZSk7XG4gICAgfVxuICAgIHRoaXMub3ZlcmxheVN0eWxlJC5uZXh0KHRoaXMub3ZlcmxheVN0eWxlKTtcbiAgfVxuICBwcml2YXRlIF90eXBlOiBTcGF0aWFsRmlsdGVyVHlwZTtcblxuICBASW5wdXQoKSBxdWVyeVR5cGU6IFNwYXRpYWxGaWx0ZXJRdWVyeVR5cGU7XG5cbiAgQElucHV0KCkgem9uZTogRmVhdHVyZTtcblxuICBASW5wdXQoKSBsb2FkaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzdG9yZSgpOiBFbnRpdHlTdG9yZTxGZWF0dXJlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlO1xuICB9XG4gIHNldCBzdG9yZShzdG9yZTogRW50aXR5U3RvcmU8RmVhdHVyZT4pIHtcbiAgICB0aGlzLl9zdG9yZSA9IHN0b3JlO1xuICAgIHRoaXMuX3N0b3JlLmVudGl0aWVzJC5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTsgfSk7XG4gIH1cbiAgcHJpdmF0ZSBfc3RvcmU6IEVudGl0eVN0b3JlPEZlYXR1cmU+O1xuXG4gIC8qKlxuICAgKiBBdmFpbGFibGUgbWVhc3VyZSB1bml0cyBmb3IgdGhlIG1lYXN1cmUgdHlwZSBnaXZlblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBtZWFzdXJlVW5pdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzLCBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzXTtcbiAgfVxuXG4gIEBJbnB1dCgpIGxheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGFsbExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0aGVtYXRpY0xlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90aGVtYXRpY0xlbmd0aDtcbiAgfVxuICBzZXQgdGhlbWF0aWNMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RoZW1hdGljTGVuZ3RoID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfdGhlbWF0aWNMZW5ndGg6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgdG9nZ2xlU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBpdGVtVHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U3BhdGlhbEZpbHRlckl0ZW1UeXBlPigpO1xuXG4gIEBPdXRwdXQoKSB0aGVtYXRpY0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U3BhdGlhbEZpbHRlclRoZW1hdGljW10+KCk7XG5cbiAgQE91dHB1dCgpIGRyYXdab25lRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZlYXR1cmU+KCk7XG5cbiAgQE91dHB1dCgpIGJ1ZmZlckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSB6b25lV2l0aEJ1ZmZlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZT4oKTtcbiAgQE91dHB1dCgpIG1lYXN1cmVVbml0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZWFzdXJlTGVuZ3RoVW5pdD4oKTtcblxuICBAT3V0cHV0KCkgcmFkaXVzRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIGZyZWVoYW5kQ29udHJvbCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHByZWRlZmluZWRSYWRpdXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpIGNsZWFyQnV0dG9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNsZWFyU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGV4cG9ydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgb3BlbldvcmtzcGFjZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGVudGl0eUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHB1YmxpYyBpdGVtVHlwZTogU3BhdGlhbEZpbHRlckl0ZW1UeXBlW10gPSBbU3BhdGlhbEZpbHRlckl0ZW1UeXBlLkFkZHJlc3MsIFNwYXRpYWxGaWx0ZXJJdGVtVHlwZS5UaGVtYXRpY3NdO1xuICBwdWJsaWMgc2VsZWN0ZWRJdGVtVHlwZTogU3BhdGlhbEZpbHRlckl0ZW1UeXBlID0gU3BhdGlhbEZpbHRlckl0ZW1UeXBlLkFkZHJlc3M7XG4gIHB1YmxpYyBzZWxlY3RlZFNvdXJjZUFkZHJlc3M7XG5cbiAgdHJlZUNvbnRyb2w6IE5lc3RlZFRyZWVDb250cm9sPFNwYXRpYWxGaWx0ZXJUaGVtYXRpYz4gPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8U3BhdGlhbEZpbHRlclRoZW1hdGljPihub2RlID0+IG5vZGUuY2hpbGRyZW4pO1xuXG4gIC8vIEZvciB0aGVtYXRpY3MgYW5kIHJlc3VsdHMgdGFibGVzXG4gIHB1YmxpYyBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsnbmFtZScsICdzZWxlY3QnXTtcbiAgcHVibGljIGNoaWxkcmVuczogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcbiAgcHVibGljIGdyb3Vwczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIHRoZW1hdGljczogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZU5lc3RlZERhdGFTb3VyY2U8U3BhdGlhbEZpbHRlclRoZW1hdGljPigpO1xuICBwdWJsaWMgc2VsZWN0ZWRUaGVtYXRpY3MgPSBuZXcgU2VsZWN0aW9uTW9kZWw8U3BhdGlhbEZpbHRlclRoZW1hdGljPih0cnVlLCBbXSk7XG5cbiAgLy8gRm9yIGdlb21ldHJ5IGZvcm0gZmllbGQgaW5wdXRcbiAgdmFsdWUkOiBCZWhhdmlvclN1YmplY3Q8R2VvSlNPTkdlb21ldHJ5PiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcbiAgZHJhd0d1aWRlJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBvdmVybGF5U3R5bGUkOiBCZWhhdmlvclN1YmplY3Q8b2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuICBkcmF3U3R5bGUkOiBCZWhhdmlvclN1YmplY3Q8b2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgdmFsdWUkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJhZGl1c0NoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGJ1ZmZlckNoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgcHVibGljIGdlb21ldHJ5VHlwZTogVHlwZSB8IHN0cmluZztcbiAgcHVibGljIGdlb21ldHJ5VHlwZUZpZWxkID0gZmFsc2U7XG4gIHB1YmxpYyBnZW9tZXRyeVR5cGVzOiBzdHJpbmdbXSA9IFsnUG9pbnQnLCAnUG9seWdvbiddO1xuICBwdWJsaWMgZHJhd0d1aWRlRmllbGQgPSBmYWxzZTtcbiAgcHVibGljIGRyYXdHdWlkZTogbnVtYmVyID0gbnVsbDtcbiAgcHVibGljIGRyYXdHdWlkZVBsYWNlaG9sZGVyID0gJyc7XG4gIHB1YmxpYyBtZWFzdXJlID0gZmFsc2U7XG4gIHB1YmxpYyBkcmF3Q29udHJvbElzQWN0aXZlID0gdHJ1ZTtcbiAgcHVibGljIGZyZWVoYW5kRHJhd0lzQWN0aXZlID0gZmFsc2U7XG4gIHB1YmxpYyBkcmF3U3R5bGU6IG9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IG9sU3R5bGUuU3R5bGUpO1xuICBwdWJsaWMgZHJhd1pvbmU7XG4gIHB1YmxpYyBvdmVybGF5U3R5bGU6IG9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IG9sU3R5bGUuU3R5bGUpO1xuICBwdWJsaWMgUG9pbnRTdHlsZTogb2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSk7XG4gIHB1YmxpYyBQb2x5U3R5bGU6IG9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IG9sU3R5bGUuU3R5bGUpO1xuXG4gIHB1YmxpYyByYWRpdXM6IG51bWJlcjtcbiAgcHVibGljIGJ1ZmZlcjogbnVtYmVyID0gMDtcbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBwdWJsaWMgYnVmZmVyRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG5cbiAgcHVibGljIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCA9IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycztcbiAgcHVibGljIHpvbmVXaXRoQnVmZmVyO1xuXG4gIHB1YmxpYyBsaXN0SXNWaXNpYmxlID0gdHJ1ZTtcbiAgcHVibGljIHRhYmxlVGVtcGxhdGU6IEVudGl0eVRhYmxlVGVtcGxhdGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzcGF0aWFsRmlsdGVyU2VydmljZTogU3BhdGlhbEZpbHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNwYXRpYWxGaWx0ZXJTZXJ2aWNlLmxvYWRUaGVtYXRpY3NMaXN0KClcbiAgICAuc3Vic2NyaWJlKChpdGVtczogU3BhdGlhbEZpbHRlclRoZW1hdGljW10pID0+IHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLmNoaWxkcmVucy5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLmNoaWxkcmVucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5ncm91cHMucHVzaCh0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby50ZXJyYXBpLmxpbWl0ZXMnKSk7XG4gICAgICBjb25zdCBsaW1pdHM6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYyA9IHtcbiAgICAgICAgbmFtZTogdGhpcy5ncm91cHNbMF0sXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfTtcbiAgICAgIHRoaXMudGhlbWF0aWNzLnB1c2gobGltaXRzKTtcbiAgICAgIHRoaXMuY2hpbGRyZW5zLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICBpZiAoY2hpbGQuZ3JvdXAgJiYgKHRoaXMuZ3JvdXBzLmluZGV4T2YoY2hpbGQuZ3JvdXApID09PSAtMSkpIHtcbiAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKGNoaWxkLmdyb3VwKTtcbiAgICAgICAgICBjb25zdCB0aGVtYXRpYzogU3BhdGlhbEZpbHRlclRoZW1hdGljID0ge1xuICAgICAgICAgICAgbmFtZTogY2hpbGQuZ3JvdXAsXG4gICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMudGhlbWF0aWNzLnB1c2godGhlbWF0aWMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGlsZC5ncm91cCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuQWRtUmVnaW9uJykgfHxcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuTXVuJykgfHxcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuQXJyb25kJykgfHxcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuQ2lyY0ZlZCcpIHx8XG4gICAgICAgICAgICBjaGlsZC5uYW1lID09PSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby50ZXJyYXBpLkNpcmNQcm92JykgfHxcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuRGlyUmVnJykgfHxcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuTVJDJykgfHxcbiAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuUmVnVG91cicpKSB7XG4gICAgICAgICAgICAgIGNoaWxkLmdyb3VwID0gbGltaXRzLm5hbWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5uYW1lID09PSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby50ZXJyYXBpLnJvdXRlcycpKSB7XG4gICAgICAgICAgICBjaGlsZC5ncm91cCA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuZ3JvdXAudHJhbnNwb3J0Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW1hdGljOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgc291cmNlOiBjaGlsZC5zb3VyY2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnRoZW1hdGljcy5wdXNoKHRoZW1hdGljKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aGVtYXRpY3Muc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50aGVtYXRpY3MuZm9yRWFjaCh0aGVtYXRpYyA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbnMpIHtcbiAgICAgICAgICBpZiAoY2hpbGQuZ3JvdXAgPT09IHRoZW1hdGljLm5hbWUpIHtcbiAgICAgICAgICAgIHRoZW1hdGljLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudGhlbWF0aWNzO1xuXG4gICAgdGhpcy5kcmF3R3VpZGUkLm5leHQobnVsbCk7XG4gICAgdGhpcy52YWx1ZSQubmV4dCh0aGlzLmZvcm1Db250cm9sLnZhbHVlID8gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy52YWx1ZSQkID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogR2VvSlNPTkdlb21ldHJ5KSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSQubmV4dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZHJhd1pvbmUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIGFzIEZlYXR1cmU7XG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlciAhPT0gMCkge1xuICAgICAgICAgIHRoaXMuZHJhd1pvbmVFdmVudC5lbWl0KHRoaXMuZHJhd1pvbmUpO1xuICAgICAgICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5idWZmZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuZHJhd1pvbmUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbHVlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5nZXRSYWRpdXMoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yYWRpdXNDaGFuZ2VzJCQgPSB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5nZXRSYWRpdXMoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5idWZmZXJDaGFuZ2VzJCQgPSB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSg1MDApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzICYmIHZhbHVlID4gMCAmJiB2YWx1ZSA8PSAxMDAwMDApIHtcbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHZhbHVlO1xuICAgICAgICAgIHRoaXMuYnVmZmVyRXZlbnQuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5zcGF0aWFsRmlsdGVyU2VydmljZS5sb2FkQnVmZmVyR2VvbWV0cnkoXG4gICAgICAgICAgICB0aGlzLmRyYXdab25lLFxuICAgICAgICAgICAgU3BhdGlhbEZpbHRlclR5cGUuUG9seWdvbixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKS5zdWJzY3JpYmUoKGZlYXR1cmVHZW9tOiBGZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyID0gZmVhdHVyZUdlb207XG4gICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyQ2hhbmdlLmVtaXQodGhpcy56b25lV2l0aEJ1ZmZlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVycyAmJiB2YWx1ZSA+IDAgJiYgdmFsdWUgPD0gMTAwKSB7XG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLmJ1ZmZlckV2ZW50LmVtaXQodmFsdWUpO1xuICAgICAgICAgIHRoaXMuc3BhdGlhbEZpbHRlclNlcnZpY2UubG9hZEJ1ZmZlckdlb21ldHJ5KFxuICAgICAgICAgICAgdGhpcy5kcmF3Wm9uZSxcbiAgICAgICAgICAgIFNwYXRpYWxGaWx0ZXJUeXBlLlBvbHlnb24sXG4gICAgICAgICAgICB2YWx1ZSAqIDEwMDBcbiAgICAgICAgICApLnN1YnNjcmliZSgoZmVhdHVyZUdlb206IEZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXIgPSBmZWF0dXJlR2VvbTtcbiAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXJDaGFuZ2UuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdmFsdWU7XG4gICAgICAgICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLmRyYXdab25lKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB2YWx1ZSA8IDAgfHxcbiAgICAgICAgICAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzICYmIHZhbHVlID4gMTAwMDAwKSB8fFxuICAgICAgICAgICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzICYmIHZhbHVlID4gMTAwKSkge1xuICAgICAgICAgICAgdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSgwKTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gMDtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQodGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5idWZmZXJBbGVydCcpLFxuICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5zcGF0aWFsRmlsdGVyLndhcm5pbmcnKSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkU3RyYXRlZ3kgPSBuZXcgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSh7fSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3koe1xuICAgICAgbGF5ZXI6IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIHpJbmRleDogMzAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgICAgICBzdHlsZTogdW5kZWZpbmVkLFxuICAgICAgICBzaG93SW5MYXllckxpc3Q6IGZhbHNlLFxuICAgICAgICBleHBvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgYnJvd3NhYmxlOiBmYWxzZVxuICAgICAgfSksXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgaGl0VG9sZXJhbmNlOiAxNSxcbiAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5EZWZhdWx0LFxuICAgICAgbWFueTogdHJ1ZSxcbiAgICAgIGRyYWdCb3g6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmUuYWRkU3RyYXRlZ3koc2VsZWN0aW9uU3RyYXRlZ3ksIHRydWUpO1xuICAgIHRoaXMuc3RvcmUuYWRkU3RyYXRlZ3koc2VsZWN0ZWRSZWNvcmRTdHJhdGVneSwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIHRvIHRoZSB2YWx1ZSBzdHJlYW1cbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnZhbHVlJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJhZGl1c0NoYW5nZXMkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuYnVmZmVyQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jZFJlZi5kZXRhY2goKTtcbiAgICBpZiAodGhpcy5yYWRpdXNDaGFuZ2VzJCQpIHtcbiAgICAgIHRoaXMucmFkaXVzQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlJCQpIHtcbiAgICAgIHRoaXMudmFsdWUkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSXRlbVR5cGVDaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbVR5cGUgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLml0ZW1UeXBlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1lYXN1cmUgdW5pdFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uTWVhc3VyZVVuaXRDaGFuZ2UodW5pdDogTWVhc3VyZUxlbmd0aFVuaXQpIHtcbiAgICBpZiAodW5pdCA9PT0gdGhpcy5tZWFzdXJlVW5pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lYXN1cmVVbml0ID0gdW5pdDtcbiAgICAgIHRoaXMubWVhc3VyZVVuaXRDaGFuZ2UuZW1pdCh0aGlzLm1lYXN1cmVVbml0KTtcbiAgICAgIGlmICh0aGlzLmlzUG9seWdvbigpKSB7XG4gICAgICAgIHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyA/XG4gICAgICAgICAgdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlICogMTAwMCkgOlxuICAgICAgICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5idWZmZXJGb3JtQ29udHJvbC52YWx1ZSAvIDEwMDApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUG9pbnQoKSkge1xuICAgICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgP1xuICAgICAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAqIDEwMDApIDpcbiAgICAgICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUgLyAxMDAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1ByZWRlZmluZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZDtcbiAgfVxuXG4gIGlzUG9seWdvbigpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBTcGF0aWFsRmlsdGVyVHlwZS5Qb2x5Z29uO1xuICB9XG5cbiAgaXNQb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBTcGF0aWFsRmlsdGVyVHlwZS5Qb2ludDtcbiAgfVxuXG4gIGhhc0NoaWxkKF86IG51bWJlciwgbm9kZTogU3BhdGlhbEZpbHRlclRoZW1hdGljKSB7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgb25Ub2dnbGVDbGljayhub2RlOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcbiAgICB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKG5vZGUpIDogdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKG5vZGU/OiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcbiAgICBsZXQgbnVtU2VsZWN0ZWQ7XG4gICAgbGV0IG51bU5vZGVzID0gMDtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5sZW5ndGg7XG4gICAgICB0aGlzLnRoZW1hdGljcy5mb3JFYWNoKHRoZW1hdGljID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzLmluZGV4T2YodGhlbWF0aWMubmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgbnVtTm9kZXMrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNoaWxkcmVucy5mb3JFYWNoKGNoaWxkcmVuID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnRoZW1hdGljcy5maW5kKHRoZW1hdGljID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gY2hpbGRyZW4uc291cmNlKSkge1xuICAgICAgICAgIG51bU5vZGVzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TZWxlY3RlZCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQuZmluZCh0aGVtYXRpYyA9PiB0aGVtYXRpYyA9PT0gY2hpbGRyZW4pKSB7XG4gICAgICAgICAgbnVtTm9kZXMrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG51bU5vZGVzID49IDEpIHtcbiAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtTm9kZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBoYXNDaGlsZHJlblNlbGVjdGVkKG5vZGU6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xuICAgIGxldCBib29sID0gZmFsc2U7XG4gICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdGVkLmZpbmQodGhlbWF0aWMgPT4gdGhlbWF0aWMuc291cmNlID09PSBjaGlsZC5zb3VyY2UpKSB7XG4gICAgICAgIGJvb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBib29sO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGhlYWRlciBjaGVja2JveFxuICAgKi9cbiAgbWFzdGVyVG9nZ2xlKCkge1xuICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpID9cbiAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3MuY2xlYXIoKSA6XG4gICAgICB0aGlzLnNlbGVjdEFsbCgpO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRUaGVtYXRpY3NOYW1lOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWNbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xuICAgICAgc2VsZWN0ZWRUaGVtYXRpY3NOYW1lLnB1c2godGhlbWF0aWMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy50aGVtYXRpY3MuZm9yRWFjaCh0aGVtYXRpYyA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkKDAsIHRoZW1hdGljKSkge1xuICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoZW1hdGljKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2godGhlbWF0aWMgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGlsZCgwLCB0aGVtYXRpYykpIHtcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKHRoZW1hdGljKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudGhlbWF0aWNDaGFuZ2UuZW1pdChzZWxlY3RlZFRoZW1hdGljc05hbWUpO1xuICB9XG5cbiAgc2VsZWN0QWxsKG5vZGU/OiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2godGhlbWF0aWMgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncm91cHMuaW5kZXhPZih0aGVtYXRpYy5uYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdCh0aGVtYXRpYyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGlsZHJlbnMuZm9yRWFjaChjaGlsZHJlbiA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5maW5kKHRoZW1hdGljID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gY2hpbGRyZW4uc291cmNlKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0KGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmhhc0NoaWxkKDAsIG5vZGUpKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiA9PiB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdChjaGlsZHJlbikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoaWxkcmVuc1RvZ2dsZShub2RlOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQobm9kZSkgP1xuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLmRlc2VsZWN0KGNoaWxkKSkgOlxuICAgIHRoaXMuc2VsZWN0QWxsKG5vZGUpO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRUaGVtYXRpY3NOYW1lOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWNbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xuICAgICAgc2VsZWN0ZWRUaGVtYXRpY3NOYW1lLnB1c2godGhlbWF0aWMpO1xuICAgIH1cbiAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgICB0aGlzLnRoZW1hdGljQ2hhbmdlLmVtaXQoc2VsZWN0ZWRUaGVtYXRpY3NOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBjaGFuZ2VzIHRvIHRoZSB0aGVtYXRpY3Mgc2VsZWN0ZWQgdHJlZSBhbmQgZW1pdCBldmVudFxuICAgKi9cbiAgb25Ub2dnbGVDaGFuZ2Uobm9kZVNlbGVjdGVkOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcbiAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5maW5kKHRoZW1hdGljID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gbm9kZVNlbGVjdGVkLnNvdXJjZSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5zLmZvckVhY2goY2hpbGRyZW4gPT4ge1xuICAgICAgaWYgKGNoaWxkcmVuID09PSBub2RlU2VsZWN0ZWQgJiYgc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0KGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZHJlbiA9PT0gbm9kZVNlbGVjdGVkICYmIHNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3MuZGVzZWxlY3QoY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2godGhlbWF0aWMgPT4ge1xuICAgICAgaWYgKHRoZW1hdGljID09PSBub2RlU2VsZWN0ZWQgJiYgc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0KHRoZW1hdGljKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGVtYXRpYyA9PT0gbm9kZVNlbGVjdGVkICYmIHNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3MuZGVzZWxlY3QodGhlbWF0aWMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRUaGVtYXRpY3NOYW1lOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWNbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xuICAgICAgc2VsZWN0ZWRUaGVtYXRpY3NOYW1lLnB1c2godGhlbWF0aWMpO1xuICAgIH1cbiAgICB0aGlzLnRoZW1hdGljQ2hhbmdlLmVtaXQoc2VsZWN0ZWRUaGVtYXRpY3NOYW1lKTtcbiAgfVxuXG4gIG9uRHJhd0NvbnRyb2xDaGFuZ2UoKSB7XG4gICAgdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlID0gIXRoaXMuZHJhd0NvbnRyb2xJc0FjdGl2ZTtcbiAgfVxuXG4gIG9uZnJlZWhhbmRDb250cm9sQ2hhbmdlKCkge1xuICAgIHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUgPSAhdGhpcy5mcmVlaGFuZERyYXdJc0FjdGl2ZTtcbiAgICB0aGlzLmZyZWVoYW5kQ29udHJvbC5lbWl0KHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpO1xuICAgIGlmICh0aGlzLmlzUG9pbnQoKSkge1xuICAgICAgdGhpcy5wcmVkZWZpbmVkUmFkaXVzLmVtaXQoIXRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpO1xuICAgICAgaWYgKHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5U3R5bGUkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5kcmF3U3R5bGUkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmVkZWZpbmVkUmFkaXVzLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMYXVuY2ggc2VhcmNoIGJ1dHRvblxuICAgKi9cbiAgdG9nZ2xlU2VhcmNoQnV0dG9uKCkge1xuICAgIGlmICghdGhpcy5pc1ByZWRlZmluZWQoKSkge1xuICAgICAgaWYgKHRoaXMuYnVmZmVyID4gMCkge1xuICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyLm1ldGEgPSB7XG4gICAgICAgICAgaWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0aXRsZTogJ1pvbmUnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXIucHJvcGVydGllcyA9IHtcbiAgICAgICAgICBub206ICdab25lJyxcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUgYXMgc3RyaW5nXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZHJhd1pvbmVFdmVudC5lbWl0KHRoaXMuem9uZVdpdGhCdWZmZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kcmF3Wm9uZS5tZXRhID0ge1xuICAgICAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICAgICAgdGl0bGU6ICdab25lJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYXdab25lLnByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgbm9tOiAnWm9uZScsXG4gICAgICAgICAgdHlwZTogdGhpcy50eXBlIGFzIHN0cmluZ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLmRyYXdab25lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaXNQb2ludCgpKSB7XG4gICAgICB0aGlzLnJhZGl1c0V2ZW50LmVtaXQodGhpcy5yYWRpdXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1BvbHlnb24oKSkge1xuICAgICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KHRoaXMuYnVmZmVyKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVTZWFyY2guZW1pdCgpO1xuICAgIHRoaXMuc3RvcmUuZW50aXRpZXMkLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKVxuICAgICkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCAmJiB0aGlzLmxheWVycy5sZW5ndGggPT09IHRoaXMudGhlbWF0aWNMZW5ndGggKyAxKSB7XG4gICAgICAgIHRoaXMub3BlbldvcmtzcGFjZS5lbWl0KCk7XG4gICAgICAgIHRoaXMuY3JlYXRlVGFibGVUZW1wbGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExhdW5jaCBjbGVhciBidXR0b24gKGNsZWFyIHN0b3JlIGFuZCBtYXAgbGF5ZXJzKVxuICAgKi9cbiAgY2xlYXJCdXR0b24oKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zdG9yZSkge1xuICAgICAgdGhpcy5zdG9yZS5jbGVhcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BvaW50KCkgfHwgdGhpcy5pc1BvbHlnb24oKSkge1xuICAgICAgdGhpcy5kcmF3Wm9uZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgICB9XG4gICAgdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSgwKTtcbiAgICB0aGlzLmJ1ZmZlciA9IDA7XG4gICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KDApO1xuICAgIHRoaXMuY2xlYXJCdXR0b25FdmVudC5lbWl0KCk7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy50YWJsZVRlbXBsYXRlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY2xlYXJEcmF3Wm9uZSgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KCk7XG4gICAgdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSgwKTtcbiAgICB0aGlzLmJ1ZmZlciA9IDA7XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoIGNsZWFyIHNlYXJjaCAoY2xlYXIgZmllbGQgaWYgdHlwZSBpcyBwcmVkZWZpbmVkKVxuICAgKi9cbiAgY2xlYXJTZWFyY2goKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5jbGVhcigpO1xuICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoMCk7XG4gICAgdGhpcy5idWZmZXIgPSAwO1xuICAgIHRoaXMuYnVmZmVyRXZlbnQuZW1pdCgwKTtcbiAgICB0aGlzLnRoZW1hdGljQ2hhbmdlLmVtaXQoW10pO1xuICAgIHRoaXMuY2xlYXJTZWFyY2hFdmVudC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IGNvbmRpdGlvbnMgb2YgaW5jb21wbGV0ZSBmaWVsZHMgb3IgYnVzeSBzZXJ2aWNlXG4gICAqL1xuICBkaXNhYmxlU2VhcmNoQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlByZWRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbVR5cGUgPT09IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZS5BZGRyZXNzKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5VHlwZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuem9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZSA9PT0gU3BhdGlhbEZpbHRlckl0ZW1UeXBlLlRoZW1hdGljcykge1xuICAgICAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnpvbmUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlBvbHlnb24gfHwgdGhpcy50eXBlID09PSBTcGF0aWFsRmlsdGVyVHlwZS5Qb2ludCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZSA9PT0gU3BhdGlhbEZpbHRlckl0ZW1UeXBlLkFkZHJlc3MgJiYgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZSA9PT0gU3BhdGlhbEZpbHRlckl0ZW1UeXBlLlRoZW1hdGljcykge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5sZW5ndGggPiAwICYmIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGlzYWJsZWRDbGVhclNlYXJjaCgpIHtcbiAgICBsZXQgZGlzYWJsZSA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzcyA/XG4gICAgICBkaXNhYmxlID0gdGhpcy5xdWVyeVR5cGUgPT09IHVuZGVmaW5lZCA6XG4gICAgICBkaXNhYmxlID0gdGhpcy5xdWVyeVR5cGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMDtcblxuICAgIHJldHVybiBkaXNhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmFnZSByYWRpdXMgdmFsdWUgYXQgdXNlciBjaGFuZ2VcbiAgICovXG4gIGdldFJhZGl1cygpIHtcbiAgICBsZXQgZm9ybVZhbHVlO1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgP1xuICAgICAgICBmb3JtVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlLnJhZGl1cyA6XG4gICAgICAgIGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUucmFkaXVzIC8gMTAwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlBvaW50KSB7XG4gICAgICBpZiAoIXRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUgPCAwIHx8XG4gICAgICAgICAgKHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyAmJiB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlID49IDEwMDAwMCkgfHxcbiAgICAgICAgICAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVycyAmJiB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlID49IDEwMCkpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIucmFkaXVzQWxlcnQnKSxcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIud2FybmluZycpKTtcbiAgICAgICAgICB0aGlzLnJhZGl1cyA9IDEwMDA7XG4gICAgICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzID9cbiAgICAgICAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXMpIDpcbiAgICAgICAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXMgLyAxMDAwKTtcbiAgICAgICAgICB0aGlzLmRyYXdHdWlkZSQubmV4dCh0aGlzLnJhZGl1cyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm9ybVZhbHVlKSB7XG4gICAgICAgICAgaWYgKGZvcm1WYWx1ZSA+PSAxMDAwMDApIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQodGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yYWRpdXNBbGVydCcpLFxuICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5zcGF0aWFsRmlsdGVyLndhcm5pbmcnKSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmb3JtVmFsdWUgIT09IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUoZm9ybVZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMpIHtcbiAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICB0aGlzLmRyYXdHdWlkZSQubmV4dCh0aGlzLnJhZGl1cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUgKiAxMDAwO1xuICAgICAgICB0aGlzLmRyYXdHdWlkZSQubmV4dCh0aGlzLnJhZGl1cyAqIDEwMDApO1xuICAgICAgfVxuICAgICAgdGhpcy5vdmVybGF5U3R5bGUkLm5leHQodGhpcy5Qb2ludFN0eWxlKTtcbiAgICAgIHRoaXMuZHJhd1N0eWxlJC5uZXh0KHRoaXMuUG9pbnRTdHlsZSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlVmlzaWJsZUxpc3QoKSB7XG4gICAgdGhpcy5saXN0SXNWaXNpYmxlID0gIXRoaXMubGlzdElzVmlzaWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFibGVUZW1wbGF0ZSgpIHtcbiAgICBjb25zdCB0eXBlQ29sdW1uID0ge1xuICAgICAgbmFtZTogJ21ldGEudGl0bGUnLFxuICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIudHlwZScpLFxuICAgICAgcmVuZGVyZXI6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuVW5zYW5pdGl6ZWRIVE1MXG4gICAgfTtcbiAgICBjb25zdCBuYW1lQ29sdW1uID0ge1xuICAgICAgbmFtZTogJ3Byb3BlcnRpZXMubm9tJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5zcGF0aWFsRmlsdGVyLnNlYXJjaFJlc3VsdHMnKSxcbiAgICAgIHJlbmRlcmVyOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLlVuc2FuaXRpemVkSFRNTFxuICAgIH07XG4gICAgY29uc3QgY29sdW1ucyA9IFt0eXBlQ29sdW1uLCBuYW1lQ29sdW1uXTtcblxuICAgIHRoaXMudGFibGVUZW1wbGF0ZSA9IHtcbiAgICAgIHNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIHNvcnQ6IHRydWUsXG4gICAgICBjb2x1bW5zXG4gICAgfTtcbiAgfVxufVxuIiwiPGlnby1nZW9tZXRyeS1mb3JtLWZpZWxkLWlucHV0XG4gIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gIFttYXBdPVwibWFwXCJcbiAgW2dlb21ldHJ5VHlwZV09XCJnZW9tZXRyeVR5cGVcIlxuICBbZHJhd0d1aWRlXT1cImRyYXdHdWlkZSQgfCBhc3luY1wiXG4gIFttZWFzdXJlXT1cIm1lYXN1cmVcIlxuICBbZHJhd0NvbnRyb2xJc0FjdGl2ZV09XCJkcmF3Q29udHJvbElzQWN0aXZlXCJcbiAgW2ZyZWVoYW5kRHJhd0lzQWN0aXZlXT1cImZyZWVoYW5kRHJhd0lzQWN0aXZlXCJcbiAgW2RyYXdTdHlsZV09XCJkcmF3U3R5bGUkIHwgYXN5bmNcIlxuICBbb3ZlcmxheVN0eWxlXT1cIm92ZXJsYXlTdHlsZSQgfCBhc3luY1wiXG4gIFtyYWRpdXNdPVwicmFkaXVzXCJcbiAgW3ByZWRlZmluZWRSYWRpdXNdPVwicHJlZGVmaW5lZFJhZGl1c1wiPlxuPC9pZ28tZ2VvbWV0cnktZm9ybS1maWVsZC1pbnB1dD5cblxuPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlICpuZ0lmPVwiIWlzUHJlZGVmaW5lZCgpXCJcbiAgICAgIFtjaGVja2VkXT1cImRyYXdDb250cm9sSXNBY3RpdmVcIlxuICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxuICAgICAgKGNoYW5nZSk9XCJvbkRyYXdDb250cm9sQ2hhbmdlKClcIj5cbiAgICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5kcmF3Q29udHJvbCcgfCB0cmFuc2xhdGV9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cIiFpc1ByZWRlZmluZWQoKVwiXG4gICAgICBbY2hlY2tlZF09XCJmcmVlaGFuZERyYXdJc0FjdGl2ZVwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uZnJlZWhhbmRDb250cm9sQ2hhbmdlKClcIj5cbiAgICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5mcmVlaGFuZENvbnRyb2wnIHwgdHJhbnNsYXRlfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImJ1ZmZlci11bml0XCIgKm5nSWY9XCJpc1BvbHlnb24oKVwiPlxuICA8Zm9ybSBjbGFzcz1cImJ1ZmZlci1mb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYnVmZmVyXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLmJ1ZmZlcicgfCB0cmFuc2xhdGV9fVwiIFtmb3JtQ29udHJvbF09XCJidWZmZXJGb3JtQ29udHJvbFwiXG4gICAgICBbdmFsdWVdPVwiMFwiIFtyZWFkb25seV09XCJ0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSBudWxsXCI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9mb3JtPlxuXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInVuaXQtZmllbGRcIj5cbiAgICA8bWF0LXNlbGVjdFxuICAgIFt2YWx1ZV09XCJtZWFzdXJlVW5pdFwiXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1lYXN1cmVVbml0Q2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWVhc3VyZVVuaXQgb2YgbWVhc3VyZVVuaXRzXCIgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCI+XG4gICAgICAgIHt7KCdpZ28uZ2VvLm1lYXN1cmUuJyArIG1lYXN1cmVVbml0KSB8IHRyYW5zbGF0ZX19XG4gICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicmFkaXVzLXVuaXRcIiAqbmdJZj1cImlzUG9pbnQoKVwiPlxuICA8Zm9ybSBjbGFzcz1cInJhZGl1cy1mb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicmFkaXVzXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLnJhZGl1cycgfCB0cmFuc2xhdGV9fVwiIFtmb3JtQ29udHJvbF09XCJyYWRpdXNGb3JtQ29udHJvbFwiXG4gICAgICBbdmFsdWVdPVwiMTAwMFwiIChpbnB1dCk9XCJnZXRSYWRpdXMoKVwiIFtyZWFkb25seV09XCJ0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlICYmIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGxcIj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Zvcm0+XG5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidW5pdC1maWVsZFwiPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTWVhc3VyZVVuaXRDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiPlxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtZWFzdXJlVW5pdCBvZiBtZWFzdXJlVW5pdHNcIiBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIj5cbiAgICAgICAge3soJ2lnby5nZW8ubWVhc3VyZS4nICsgbWVhc3VyZVVuaXQpIHwgdHJhbnNsYXRlfX1cbiAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG5cbjxtYXQtbGFiZWwgY2xhc3M9XCJ0aXRsZSBtYXQtdHlwb2dyYXBoeVwiPnt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5zZWFyY2gnIHwgdHJhbnNsYXRlfX0gOiA8L21hdC1sYWJlbD5cbjxtYXQtcmFkaW8tZ3JvdXAgW3ZhbHVlXT1cInNlbGVjdGVkSXRlbVR5cGVcIj5cbiAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtVHlwZVwiXG4gICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAoY2hhbmdlKT1cIm9uSXRlbVR5cGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAge3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLicgKyBpdGVtIHwgdHJhbnNsYXRlfX1cbiAgICA8L21hdC1yYWRpby1idXR0b24+XG48L21hdC1yYWRpby1ncm91cD5cblxuPGRpdiBjbGFzcz1cInRoZW1hdGljc1wiICpuZ0lmPVwiKHNlbGVjdGVkSXRlbVR5cGU9PT0nVGhlbWF0aWNzJyAmJiAhdGFibGVUZW1wbGF0ZSkgfHwgKHNlbGVjdGVkSXRlbVR5cGU9PT0nVGhlbWF0aWNzJyAmJiB0YWJsZVRlbXBsYXRlICYmICFsaXN0SXNWaXNpYmxlKVwiPlxuICA8bWF0LXRhYmxlPlxuICAgICAgPCEtLSBOYW1lIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibmFtZVwiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwidGhlbWF0aWNzLWhlYWRlclwiPnt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5UaGVtYXRpY3MnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFNlbGVjdCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdFwiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiY2hlY2tzLWhlYWRlclwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGVkVGhlbWF0aWNzLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC9tYXQtcm93PlxuXG4gIDwvbWF0LXRhYmxlPlxuXG4gIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XG4gICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGxlYWYgbm9kZXMgLS0+XG4gICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBtYXRUcmVlTm9kZVRvZ2dsZT5cbiAgICAgIDxsaSBjbGFzcz1cIm1hdC10cmVlLW5vZGVcIj5cbiAgICAgICAgPCEtLSB1c2UgYSBkaXNhYmxlZCBidXR0b24gdG8gcHJvdmlkZSBwYWRkaW5nIGZvciB0cmVlIGxlYWYgLS0+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkPjwvYnV0dG9uPlxuICAgICAgICB7e25vZGUubmFtZX19XG4gICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJ0cmVlLWNoZWNrXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBvblRvZ2dsZUNoYW5nZShub2RlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGhlbWF0aWNzLmlzU2VsZWN0ZWQobm9kZSlcIj5cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L2xpPlxuICAgIDwvbWF0LXRyZWUtbm9kZT5cblxuICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICAgIDxtYXQtbmVzdGVkLXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC10cmVlLW5vZGVcIj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlQ2xpY2sobm9kZSlcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCJ0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2NoZXZyb24tZG93bicgOiAnY2hldnJvbi1yaWdodCdcIj48L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHt7bm9kZS5uYW1lfX1cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwidHJlZS1jaGVjay0yXCIgKGNoYW5nZSk9XCIkZXZlbnQgPyBjaGlsZHJlbnNUb2dnbGUobm9kZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaGFzQ2hpbGRyZW5TZWxlY3RlZChub2RlKSAmJiAhaXNBbGxTZWxlY3RlZChub2RlKVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHVsIGNsYXNzPVwidHJlZS11bFwiIFtjbGFzcy5leGFtcGxlLXRyZWUtaW52aXNpYmxlXT1cIiF0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRUcmVlTm9kZU91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICA8L21hdC1uZXN0ZWQtdHJlZS1ub2RlPlxuXG4gIDwvbWF0LXRyZWU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cblxuICA8YnV0dG9uICpuZ0lmPVwiaXNQcmVkZWZpbmVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImNsZWFyLXNlYXJjaC1idXR0b25cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRDbGVhclNlYXJjaCgpXCJcbiAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiPlxuICAgICAge3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLmNsZWFyU2VhcmNoJyB8IHRyYW5zbGF0ZX19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b24gKm5nSWY9XCJpc1BvbHlnb24oKSB8fCBpc1BvaW50KClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImNsZWFyLWZvcm0tYnV0dG9uXCIgW2Rpc2FibGVkXT1cInRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGxcIlxuICAgIChjbGljayk9XCJjbGVhckRyYXdab25lKClcIj5cbiAgICB7eydpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuY2xlYXJGb3JtJyB8IHRyYW5zbGF0ZX19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJzZWFyY2gtYnV0dG9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVTZWFyY2hCdXR0b24oKVwiIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEJ1dHRvbigpXCI+XG4gICAge3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLmdvU2VhcmNoJyB8IHRyYW5zbGF0ZX19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJyZW1vdmUtYnV0dG9uXCIgW2Rpc2FibGVkXT1cImFsbExheWVycy5sZW5ndGggPT09IDBcIiAoY2xpY2spPVwiY2xlYXJCdXR0b24oKVwiPlxuICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5yZW1vdmVMYXllcicgfCB0cmFuc2xhdGV9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIFtkaXNhYmxlZF09XCIhc3RvcmUuZW50aXRpZXMkLmdldFZhbHVlKCkubGVuZ3RoXCIgKGNsaWNrKT1cImV4cG9ydC5lbWl0KClcIj5cbiAgICB7eydpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuZXhwb3J0TGF5ZXInIHwgdHJhbnNsYXRlfX1cbiAgPC9idXR0b24+XG5cbjwvZGl2PlxuXG48YnV0dG9uXG4gIGNsYXNzPVwiY2hldnJvbi1kb3duXCJcbiAgKm5nSWY9XCJzdG9yZS5hbGwoKS5sZW5ndGggJiYgdGFibGVUZW1wbGF0ZSAmJiAhbGlzdElzVmlzaWJsZVwiXG4gIG1hdC1pY29uLWJ1dHRvblxuICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5zaG93U2VhcmNoUmVzdWx0cycgfCB0cmFuc2xhdGVcIlxuICAoY2xpY2spPVwidG9nZ2xlVmlzaWJsZUxpc3QoKVwiPlxuICA8bWF0LWljb24gc3ZnSWNvbj1cImNoZXZyb24tZG93blwiPjwvbWF0LWljb24+XG48L2J1dHRvbj5cblxuPGRpdiBjbGFzcz1cInJlc3VsdHNcIiAqbmdJZj1cInN0b3JlLmFsbCgpLmxlbmd0aCAmJiB0YWJsZVRlbXBsYXRlICYmIGxpc3RJc1Zpc2libGVcIj5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwibGlzdElzVmlzaWJsZVwiXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5oaWRlU2VhcmNoUmVzdWx0cycgfCB0cmFuc2xhdGVcIlxuICAgIChjbGljayk9XCJ0b2dnbGVWaXNpYmxlTGlzdCgpXCI+XG4gIDxtYXQtaWNvbiBzdmdJY29uPVwiY2hldnJvbi11cFwiPjwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuICA8aWdvLWVudGl0eS10YWJsZVxuICAgIGNsYXNzPVwicmVzdWx0cy1saXN0XCJcbiAgICBbdGVtcGxhdGVdPVwidGFibGVUZW1wbGF0ZVwiXG4gICAgW3N0b3JlXT1cInN0b3JlXCJcbiAgICAoZW50aXR5U2VsZWN0Q2hhbmdlKT1cImVudGl0eUNoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgPC9pZ28tZW50aXR5LXRhYmxlPlxuPC9kaXY+XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export * from './spatial-filter-list.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvc3BhdGlhbC1maWx0ZXIvc3BhdGlhbC1maWx0ZXItbGlzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcGF0aWFsLWZpbHRlci1saXN0LmNvbXBvbmVudCc7XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvc3BhdGlhbC1maWx0ZXIvc3BhdGlhbC1maWx0ZXItbGlzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcGF0aWFsLWZpbHRlci1saXN0LmNvbXBvbmVudCc7XG4iXX0=
@@ -187,7 +187,7 @@ SpatialFilterListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
187
187
  } }, dependencies: [i3.NgForOf, i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NumberValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgForm, i4.FormControlDirective, i5.MatAutocomplete, i5.MatAutocompleteTrigger, i6.MatOption, i7.MatFormField, i8.MatInput, i9.MatSelect, i3.AsyncPipe, i10.TranslatePipe], styles: [".buffer-div[_ngcontent-%COMP%]{display:flex;width:100%;margin-left:2px;padding:5px}.zone-list[_ngcontent-%COMP%]{padding:5px;width:95%;margin-left:2px}.buffer[_ngcontent-%COMP%]{display:flex;flex-flow:column nowrap;width:110%}.unit-field[_ngcontent-%COMP%]{width:110px;margin-left:30px}"], changeDetection: 0 });
188
188
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SpatialFilterListComponent, [{
189
189
  type: Component,
190
- args: [{ selector: 'igo-spatial-filter-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form class=\"form-list\">\r\n <mat-form-field class=\"zone-list\">\r\n <input #input type=\"text\" placeholder=\"{{'igo.geo.spatialFilter.listLabel' |\u00A0translate}}\" matInput\r\n [formControl]=\"formControl\" [matAutocomplete]=\"auto\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onZoneChange($event.option.value)\"\r\n [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let entities of this.store.view.all$() | async\" [value]=\"entities\">\r\n {{entities.properties.nom}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n<form>\r\n\r\n<div class=\"buffer-div\">\r\n <form class=\"buffer-form\">\r\n <mat-form-field class=\"buffer\">\r\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.buffer' | translate}}\" [formControl]=\"bufferFormControl\"\r\n [value]=\"0\" [readonly]=\"!zone\">\r\n </mat-form-field>\r\n </form>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\r\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\r\n {{('igo.geo.measure.' + measureUnit) | translate}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n", styles: [".buffer-div{display:flex;width:100%;margin-left:2px;padding:5px}.zone-list{padding:5px;width:95%;margin-left:2px}.buffer{display:flex;flex-flow:column nowrap;width:110%}.unit-field{width:110px;margin-left:30px}\n"] }]
190
+ args: [{ selector: 'igo-spatial-filter-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form class=\"form-list\">\n <mat-form-field class=\"zone-list\">\n <input #input type=\"text\" placeholder=\"{{'igo.geo.spatialFilter.listLabel' |\u00A0translate}}\" matInput\n [formControl]=\"formControl\" [matAutocomplete]=\"auto\">\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onZoneChange($event.option.value)\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let entities of this.store.view.all$() | async\" [value]=\"entities\">\n {{entities.properties.nom}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n<form>\n\n<div class=\"buffer-div\">\n <form class=\"buffer-form\">\n <mat-form-field class=\"buffer\">\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.buffer' | translate}}\" [formControl]=\"bufferFormControl\"\n [value]=\"0\" [readonly]=\"!zone\">\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\n {{('igo.geo.measure.' + measureUnit) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n", styles: [".buffer-div{display:flex;width:100%;margin-left:2px;padding:5px}.zone-list{padding:5px;width:95%;margin-left:2px}.buffer{display:flex;flex-flow:column nowrap;width:110%}.unit-field{width:110px;margin-left:30px}\n"] }]
191
191
  }], function () { return [{ type: i1.SpatialFilterService }, { type: i2.MessageService }, { type: i2.LanguageService }]; }, { store: [{
192
192
  type: Input
193
193
  }], queryType: [{
@@ -205,4 +205,4 @@ SpatialFilterListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
205
205
  }], measureUnitChange: [{
206
206
  type: Output
207
207
  }] }); })();
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1maWx0ZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvc3BhdGlhbC1maWx0ZXIvc3BhdGlhbC1maWx0ZXItbGlzdC9zcGF0aWFsLWZpbHRlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9zcGF0aWFsLWZpbHRlci9zcGF0aWFsLWZpbHRlci1saXN0L3NwYXRpYWwtZmlsdGVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3BFLE9BQU8sRUFBMEIsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNOLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ1ZoRCxzQ0FBdUY7SUFDbkYsWUFDSjtJQUFBLGlCQUFhOzs7SUFGdUQsbUNBQWtCO0lBQ2xGLGVBQ0o7SUFESSwyREFDSjs7O0lBaUJKLHNDQUEyRTtJQUN2RSxZQUNKOztJQUFBLGlCQUFhOzs7SUFGd0Msc0NBQXFCO0lBQ3RFLGVBQ0o7SUFESSwwRkFDSjs7QUREUixNQUFNLE9BQU8sMEJBQTBCO0lBNkRyQyxZQUNVLG9CQUEwQyxFQUMxQyxjQUE4QixFQUM5QixlQUFnQztRQUZoQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLG1CQUFjLEdBQWQsY0FBYyxD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cUI7UUFBckIsdUNBQXFCO1FBRWUsZUFBZTtRQUFmLDBDQUFlOzt1RkRDOUMsMEJBQTBCO2NBTnRDLFNBQVM7MkJBQ0UseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNO2tJQUszQyxLQUFLO2tCQURSLEtBQUs7WUFVRixTQUFTO2tCQURaLEtBQUs7WUFXRixJQUFJO2tCQURQLEtBQUs7WUFhRyxNQUFNO2tCQUFkLEtBQUs7WUFtQkksVUFBVTtrQkFBbkIsTUFBTTtZQUNHLG9CQUFvQjtrQkFBN0IsTUFBTTtZQUNHLFlBQVk7a0JBQXJCLE1BQU07WUFDRyxpQkFBaUI7a0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB7IFNwYXRpYWxGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvc3BhdGlhbC1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNwYXRpYWxGaWx0ZXJRdWVyeVR5cGUsIFNwYXRpYWxGaWx0ZXJUeXBlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvc3BhdGlhbC1maWx0ZXIuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vLi4vZmVhdHVyZSc7XHJcbmltcG9ydCB7IE1lYXN1cmVMZW5ndGhVbml0IH0gZnJvbSAnLi4vLi4vLi4vbWVhc3VyZS9zaGFyZWQnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vLi4vbGF5ZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tc3BhdGlhbC1maWx0ZXItbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NwYXRpYWwtZmlsdGVyLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NwYXRpYWwtZmlsdGVyLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BhdGlhbEZpbHRlckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHN0b3JlKCk6IEVudGl0eVN0b3JlPEZlYXR1cmU+IHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZTtcclxuICB9XHJcbiAgc2V0IHN0b3JlKHN0b3JlOiBFbnRpdHlTdG9yZTxGZWF0dXJlPikge1xyXG4gICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc3RvcmU6IEVudGl0eVN0b3JlPEZlYXR1cmU+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBxdWVyeVR5cGUoKTogU3BhdGlhbEZpbHRlclF1ZXJ5VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlUeXBlO1xyXG4gIH1cclxuICBzZXQgcXVlcnlUeXBlKHF1ZXJ5VHlwZTogU3BhdGlhbEZpbHRlclF1ZXJ5VHlwZSkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLl9xdWVyeVR5cGUgPSBxdWVyeVR5cGU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3F1ZXJ5VHlwZTogU3BhdGlhbEZpbHRlclF1ZXJ5VHlwZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgem9uZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl96b25lO1xyXG4gIH1cclxuICBzZXQgem9uZSh2YWx1ZSkge1xyXG4gICAgdGhpcy5fem9uZSA9IHZhbHVlO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF96b25lO1xyXG5cclxuICBASW5wdXQoKSBsYXllcnM6IExheWVyW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHpvbmVXaXRoQnVmZmVyO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFpvbmU6IGFueTtcclxuXHJcbiAgcHVibGljIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCA9IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycztcclxuXHJcbiAgcHVibGljIGZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG5cclxuICBwdWJsaWMgYnVmZmVyRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF2YWlsYWJsZSBtZWFzdXJlIHVuaXRzIGZvciB0aGUgbWVhc3VyZSB0eXBlIGdpdmVuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IG1lYXN1cmVVbml0cygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gW01lYXN1cmVMZW5ndGhVbml0Lk1ldGVycywgTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVyc107XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgem9uZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZT4oKTtcclxuICBAT3V0cHV0KCkgem9uZVdpdGhCdWZmZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZlYXR1cmU+KCk7XHJcbiAgQE91dHB1dCgpIGJ1ZmZlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBtZWFzdXJlVW5pdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVhc3VyZUxlbmd0aFVuaXQ+KCk7XHJcblxyXG4gIGZvcm1WYWx1ZUNoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIGJ1ZmZlclZhbHVlQ2hhbmdlcyQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzcGF0aWFsRmlsdGVyU2VydmljZTogU3BhdGlhbEZpbHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5mb3JtVmFsdWVDaGFuZ2VzJCQgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnN0b3JlLnZpZXcuZmlsdGVyKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVOYW1lTm9ybWFsaXplZCA9IGZlYXR1cmUucHJvcGVydGllcy5ub20udG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIHJldHVybiBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYnVmZmVyVmFsdWVDaGFuZ2VzJCQgPSB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzICYmIHZhbHVlID4gMCAmJiB2YWx1ZSA8PSAxMDAwMDApIHtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5zcGF0aWFsRmlsdGVyU2VydmljZS5sb2FkQnVmZmVyR2VvbWV0cnkoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRab25lLFxyXG4gICAgICAgICAgICBTcGF0aWFsRmlsdGVyVHlwZS5QcmVkZWZpbmVkLFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5xdWVyeVR5cGVcclxuICAgICAgICAgICkuc3Vic2NyaWJlKChmZWF0dXJlR2VvbTogRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyID0gZmVhdHVyZUdlb207XHJcbiAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXJDaGFuZ2UuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVycyAmJiB2YWx1ZSA+IDAgJiYgdmFsdWUgPD0gMTAwKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlckNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuc3BhdGlhbEZpbHRlclNlcnZpY2UubG9hZEJ1ZmZlckdlb21ldHJ5KFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9uZSxcclxuICAgICAgICAgICAgU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZCxcclxuICAgICAgICAgICAgdmFsdWUgKiAxMDAwLFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5VHlwZVxyXG4gICAgICAgICAgKS5zdWJzY3JpYmUoKGZlYXR1cmVHZW9tOiBGZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXIgPSBmZWF0dXJlR2VvbTtcclxuICAgICAgICAgICAgdGhpcy56b25lV2l0aEJ1ZmZlckNoYW5nZS5lbWl0KHRoaXMuem9uZVdpdGhCdWZmZXIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMCAmJiB0aGlzLmxheWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlckNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXJDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkWm9uZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdmFsdWUgPCAwIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgJiYgdmFsdWUgPiAxMDAwMDApIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzICYmIHZhbHVlID4gMTAwKSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuYnVmZmVyQWxlcnQnKSxcclxuICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5zcGF0aWFsRmlsdGVyLndhcm5pbmcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZm9ybVZhbHVlQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5Rm4oZmVhdHVyZT86IEZlYXR1cmUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMubm9tIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgb25ab25lQ2hhbmdlKGZlYXR1cmUpIHtcclxuICAgIGlmIChmZWF0dXJlICYmIHRoaXMucXVlcnlUeXBlKSB7XHJcbiAgICAgIHRoaXMuc3BhdGlhbEZpbHRlclNlcnZpY2UubG9hZEl0ZW1CeUlkKGZlYXR1cmUsIHRoaXMucXVlcnlUeXBlKVxyXG4gICAgICAuc3Vic2NyaWJlKChmZWF0dXJlR2VvbTogRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRab25lID0gZmVhdHVyZUdlb207XHJcbiAgICAgICAgdGhpcy56b25lQ2hhbmdlLmVtaXQoZmVhdHVyZUdlb20pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgbWVhc3VyZSB1bml0XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25NZWFzdXJlVW5pdENoYW5nZSh1bml0OiBNZWFzdXJlTGVuZ3RoVW5pdCkge1xyXG4gICAgaWYgKHVuaXQgPT09IHRoaXMubWVhc3VyZVVuaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9IHVuaXQ7XHJcbiAgICAgIHRoaXMubWVhc3VyZVVuaXRDaGFuZ2UuZW1pdCh0aGlzLm1lYXN1cmVVbml0KTtcclxuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzID9cclxuICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wudmFsdWUgKiAxMDAwKSA6XHJcbiAgICAgICAgdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlIC8gMTAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIGNsYXNzPVwiZm9ybS1saXN0XCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ6b25lLWxpc3RcIj5cclxuICAgICAgICA8aW5wdXQgI2lucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIubGlzdExhYmVsJyB8wqB0cmFuc2xhdGV9fVwiIG1hdElucHV0XHJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCI+XHJcbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25ab25lQ2hhbmdlKCRldmVudC5vcHRpb24udmFsdWUpXCJcclxuICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlbnRpdGllcyBvZiB0aGlzLnN0b3JlLnZpZXcuYWxsJCgpIHwgYXN5bmNcIiBbdmFsdWVdPVwiZW50aXRpZXNcIj5cclxuICAgICAgICAgICAgICAgIHt7ZW50aXRpZXMucHJvcGVydGllcy5ub219fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPGZvcm0+XHJcblxyXG48ZGl2IGNsYXNzPVwiYnVmZmVyLWRpdlwiPlxyXG4gICAgPGZvcm0gY2xhc3M9XCJidWZmZXItZm9ybVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImJ1ZmZlclwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLmJ1ZmZlcicgfCB0cmFuc2xhdGV9fVwiIFtmb3JtQ29udHJvbF09XCJidWZmZXJGb3JtQ29udHJvbFwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCIwXCIgW3JlYWRvbmx5XT1cIiF6b25lXCI+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZm9ybT5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1bml0LWZpZWxkXCI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIlxyXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25NZWFzdXJlVW5pdENoYW5nZSgkZXZlbnQudmFsdWUpXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1lYXN1cmVVbml0IG9mIG1lYXN1cmVVbml0c1wiIFt2YWx1ZV09XCJtZWFzdXJlVW5pdFwiPlxyXG4gICAgICAgICAgICB7eygnaWdvLmdlby5tZWFzdXJlLicgKyBtZWFzdXJlVW5pdCkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2Rpdj5cclxuIl19
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1maWx0ZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvc3BhdGlhbC1maWx0ZXIvc3BhdGlhbC1maWx0ZXItbGlzdC9zcGF0aWFsLWZpbHRlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9zcGF0aWFsLWZpbHRlci9zcGF0aWFsLWZpbHRlci1saXN0L3NwYXRpYWwtZmlsdGVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3BFLE9BQU8sRUFBMEIsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNOLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ1ZoRCxzQ0FBdUY7SUFDbkYsWUFDSjtJQUFBLGlCQUFhOzs7SUFGdUQsbUNBQWtCO0lBQ2xGLGVBQ0o7SUFESSwyREFDSjs7O0lBaUJKLHNDQUEyRTtJQUN2RSxZQUNKOztJQUFBLGlCQUFhOzs7SUFGd0Msc0NBQXFCO0lBQ3RFLGVBQ0o7SUFESSwwRkFDSjs7QUREUixNQUFNLE9BQU8sMEJBQTBCO0lBNkRyQyxZQUNVLG9CQUEwQyxFQUMxQyxjQUE4QixFQUM5QixlQUFnQztRQUZoQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLG1CQUFjLEdBQWQsY0FBYyxD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cUI7UUFBckIsdUNBQXFCO1FBRWUsZUFBZTtRQUFmLDBDQUFlOzt1RkRDOUMsMEJBQTBCO2NBTnRDLFNBQVM7MkJBQ0UseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNO2tJQUszQyxLQUFLO2tCQURSLEtBQUs7WUFVRixTQUFTO2tCQURaLEtBQUs7WUFXRixJQUFJO2tCQURQLEtBQUs7WUFhRyxNQUFNO2tCQUFkLEtBQUs7WUFtQkksVUFBVTtrQkFBbkIsTUFBTTtZQUNHLG9CQUFvQjtrQkFBN0IsTUFBTTtZQUNHLFlBQVk7a0JBQXJCLE1BQU07WUFDRyxpQkFBaUI7a0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xuaW1wb3J0IHsgU3BhdGlhbEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNwYXRpYWxGaWx0ZXJRdWVyeVR5cGUsIFNwYXRpYWxGaWx0ZXJUeXBlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvc3BhdGlhbC1maWx0ZXIuZW51bSc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vLi4vZmVhdHVyZSc7XG5pbXBvcnQgeyBNZWFzdXJlTGVuZ3RoVW5pdCB9IGZyb20gJy4uLy4uLy4uL21lYXN1cmUvc2hhcmVkJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vLi4vbGF5ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tc3BhdGlhbC1maWx0ZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGF0aWFsLWZpbHRlci1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3BhdGlhbC1maWx0ZXItbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTcGF0aWFsRmlsdGVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBnZXQgc3RvcmUoKTogRW50aXR5U3RvcmU8RmVhdHVyZT4ge1xuICAgIHJldHVybiB0aGlzLl9zdG9yZTtcbiAgfVxuICBzZXQgc3RvcmUoc3RvcmU6IEVudGl0eVN0b3JlPEZlYXR1cmU+KSB7XG4gICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcbiAgfVxuICBwcml2YXRlIF9zdG9yZTogRW50aXR5U3RvcmU8RmVhdHVyZT47XG5cbiAgQElucHV0KClcbiAgZ2V0IHF1ZXJ5VHlwZSgpOiBTcGF0aWFsRmlsdGVyUXVlcnlUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlUeXBlO1xuICB9XG4gIHNldCBxdWVyeVR5cGUocXVlcnlUeXBlOiBTcGF0aWFsRmlsdGVyUXVlcnlUeXBlKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5fcXVlcnlUeXBlID0gcXVlcnlUeXBlO1xuICB9XG4gIHByaXZhdGUgX3F1ZXJ5VHlwZTogU3BhdGlhbEZpbHRlclF1ZXJ5VHlwZTtcblxuICBASW5wdXQoKVxuICBnZXQgem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fem9uZTtcbiAgfVxuICBzZXQgem9uZSh2YWx1ZSkge1xuICAgIHRoaXMuX3pvbmUgPSB2YWx1ZTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSgwKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfem9uZTtcblxuICBASW5wdXQoKSBsYXllcnM6IExheWVyW10gPSBbXTtcblxuICBwdWJsaWMgem9uZVdpdGhCdWZmZXI7XG4gIHB1YmxpYyBzZWxlY3RlZFpvbmU6IGFueTtcblxuICBwdWJsaWMgbWVhc3VyZVVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0ID0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzO1xuXG4gIHB1YmxpYyBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcblxuICBwdWJsaWMgYnVmZmVyRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJsZSBtZWFzdXJlIHVuaXRzIGZvciB0aGUgbWVhc3VyZSB0eXBlIGdpdmVuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IG1lYXN1cmVVbml0cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMsIE1lYXN1cmVMZW5ndGhVbml0LktpbG9tZXRlcnNdO1xuICB9XG5cbiAgQE91dHB1dCgpIHpvbmVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZlYXR1cmU+KCk7XG4gIEBPdXRwdXQoKSB6b25lV2l0aEJ1ZmZlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZT4oKTtcbiAgQE91dHB1dCgpIGJ1ZmZlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgbWVhc3VyZVVuaXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lYXN1cmVMZW5ndGhVbml0PigpO1xuXG4gIGZvcm1WYWx1ZUNoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xuICBidWZmZXJWYWx1ZUNoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3BhdGlhbEZpbHRlclNlcnZpY2U6IFNwYXRpYWxGaWx0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtVmFsdWVDaGFuZ2VzJCQgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3RvcmUudmlldy5maWx0ZXIoKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQgPSBmZWF0dXJlLnByb3BlcnRpZXMubm9tLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgICAgcmV0dXJuIGZlYXR1cmVOYW1lTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1ZmZlclZhbHVlQ2hhbmdlcyQkID0gdGhpcy5idWZmZXJGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyAmJiB2YWx1ZSA+IDAgJiYgdmFsdWUgPD0gMTAwMDAwKSB7XG4gICAgICAgICAgdGhpcy5idWZmZXJDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5zcGF0aWFsRmlsdGVyU2VydmljZS5sb2FkQnVmZmVyR2VvbWV0cnkoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9uZSxcbiAgICAgICAgICAgIFNwYXRpYWxGaWx0ZXJUeXBlLlByZWRlZmluZWQsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHRoaXMucXVlcnlUeXBlXG4gICAgICAgICAgKS5zdWJzY3JpYmUoKGZlYXR1cmVHZW9tOiBGZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyID0gZmVhdHVyZUdlb207XG4gICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyQ2hhbmdlLmVtaXQodGhpcy56b25lV2l0aEJ1ZmZlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVycyAmJiB2YWx1ZSA+IDAgJiYgdmFsdWUgPD0gMTAwKSB7XG4gICAgICAgICAgdGhpcy5idWZmZXJDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5zcGF0aWFsRmlsdGVyU2VydmljZS5sb2FkQnVmZmVyR2VvbWV0cnkoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9uZSxcbiAgICAgICAgICAgIFNwYXRpYWxGaWx0ZXJUeXBlLlByZWRlZmluZWQsXG4gICAgICAgICAgICB2YWx1ZSAqIDEwMDAsXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5VHlwZVxuICAgICAgICAgICkuc3Vic2NyaWJlKChmZWF0dXJlR2VvbTogRmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy56b25lV2l0aEJ1ZmZlciA9IGZlYXR1cmVHZW9tO1xuICAgICAgICAgICAgdGhpcy56b25lV2l0aEJ1ZmZlckNoYW5nZS5lbWl0KHRoaXMuem9uZVdpdGhCdWZmZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAwICYmIHRoaXMubGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmJ1ZmZlckNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFpvbmUpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdmFsdWUgPCAwIHx8XG4gICAgICAgICAgICAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzICYmIHZhbHVlID4gMTAwMDAwKSB8fFxuICAgICAgICAgICAgKHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0LktpbG9tZXRlcnMgJiYgdmFsdWUgPiAxMDApKSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydCh0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5zcGF0aWFsRmlsdGVyLmJ1ZmZlckFsZXJ0JyksXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIud2FybmluZycpKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb3JtVmFsdWVDaGFuZ2VzJCQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGRpc3BsYXlGbihmZWF0dXJlPzogRmVhdHVyZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMubm9tIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgb25ab25lQ2hhbmdlKGZlYXR1cmUpIHtcbiAgICBpZiAoZmVhdHVyZSAmJiB0aGlzLnF1ZXJ5VHlwZSkge1xuICAgICAgdGhpcy5zcGF0aWFsRmlsdGVyU2VydmljZS5sb2FkSXRlbUJ5SWQoZmVhdHVyZSwgdGhpcy5xdWVyeVR5cGUpXG4gICAgICAuc3Vic2NyaWJlKChmZWF0dXJlR2VvbTogRmVhdHVyZSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkWm9uZSA9IGZlYXR1cmVHZW9tO1xuICAgICAgICB0aGlzLnpvbmVDaGFuZ2UuZW1pdChmZWF0dXJlR2VvbSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtZWFzdXJlIHVuaXRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvbk1lYXN1cmVVbml0Q2hhbmdlKHVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0KSB7XG4gICAgaWYgKHVuaXQgPT09IHRoaXMubWVhc3VyZVVuaXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9IHVuaXQ7XG4gICAgICB0aGlzLm1lYXN1cmVVbml0Q2hhbmdlLmVtaXQodGhpcy5tZWFzdXJlVW5pdCk7XG4gICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgP1xuICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wudmFsdWUgKiAxMDAwKSA6XG4gICAgICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5idWZmZXJGb3JtQ29udHJvbC52YWx1ZSAvIDEwMDApO1xuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJmb3JtLWxpc3RcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ6b25lLWxpc3RcIj5cbiAgICAgICAgPGlucHV0ICNpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLmxpc3RMYWJlbCcgfMKgdHJhbnNsYXRlfX1cIiBtYXRJbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIj5cbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25ab25lQ2hhbmdlKCRldmVudC5vcHRpb24udmFsdWUpXCJcbiAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlGblwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGVudGl0aWVzIG9mIHRoaXMuc3RvcmUudmlldy5hbGwkKCkgfCBhc3luY1wiIFt2YWx1ZV09XCJlbnRpdGllc1wiPlxuICAgICAgICAgICAgICAgIHt7ZW50aXRpZXMucHJvcGVydGllcy5ub219fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbjxmb3JtPlxuXG48ZGl2IGNsYXNzPVwiYnVmZmVyLWRpdlwiPlxuICAgIDxmb3JtIGNsYXNzPVwiYnVmZmVyLWZvcm1cIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYnVmZmVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLmJ1ZmZlcicgfCB0cmFuc2xhdGV9fVwiIFtmb3JtQ29udHJvbF09XCJidWZmZXJGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiMFwiIFtyZWFkb25seV09XCIhem9uZVwiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZm9ybT5cblxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInVuaXQtZmllbGRcIj5cbiAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1lYXN1cmVVbml0Q2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1lYXN1cmVVbml0IG9mIG1lYXN1cmVVbml0c1wiIFt2YWx1ZV09XCJtZWFzdXJlVW5pdFwiPlxuICAgICAgICAgICAge3soJ2lnby5nZW8ubWVhc3VyZS4nICsgbWVhc3VyZVVuaXQpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuIl19