@kepler.gl/components 3.0.0-alpha.0

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 (539) hide show
  1. package/dist/bottom-widget.d.ts +46 -0
  2. package/dist/bottom-widget.js +242 -0
  3. package/dist/common/action-panel.d.ts +27 -0
  4. package/dist/common/action-panel.js +152 -0
  5. package/dist/common/animation-control/animation-control.d.ts +24 -0
  6. package/dist/common/animation-control/animation-control.js +155 -0
  7. package/dist/common/animation-control/animation-controller.d.ts +15 -0
  8. package/dist/common/animation-control/animation-controller.js +324 -0
  9. package/dist/common/animation-control/animation-speed-slider.d.ts +12 -0
  10. package/dist/common/animation-control/animation-speed-slider.js +120 -0
  11. package/dist/common/animation-control/animation-window-control.d.ts +20 -0
  12. package/dist/common/animation-control/animation-window-control.js +86 -0
  13. package/dist/common/animation-control/floating-time-display.d.ts +9 -0
  14. package/dist/common/animation-control/floating-time-display.js +181 -0
  15. package/dist/common/animation-control/play-control.d.ts +12 -0
  16. package/dist/common/animation-control/play-control.js +81 -0
  17. package/dist/common/animation-control/playback-controls.d.ts +55 -0
  18. package/dist/common/animation-control/playback-controls.js +202 -0
  19. package/dist/common/animation-control/reset-control.d.ts +9 -0
  20. package/dist/common/animation-control/reset-control.js +71 -0
  21. package/dist/common/animation-control/speed-control.d.ts +12 -0
  22. package/dist/common/animation-control/speed-control.js +88 -0
  23. package/dist/common/animation-control/window-action-control.d.ts +11 -0
  24. package/dist/common/animation-control/window-action-control.js +87 -0
  25. package/dist/common/checkbox.d.ts +35 -0
  26. package/dist/common/checkbox.js +159 -0
  27. package/dist/common/color-legend.d.ts +39 -0
  28. package/dist/common/color-legend.js +257 -0
  29. package/dist/common/data-table/button.d.ts +8 -0
  30. package/dist/common/data-table/button.js +66 -0
  31. package/dist/common/data-table/canvas.d.ts +2 -0
  32. package/dist/common/data-table/canvas.js +52 -0
  33. package/dist/common/data-table/cell-size.d.ts +43 -0
  34. package/dist/common/data-table/cell-size.js +195 -0
  35. package/dist/common/data-table/grid.d.ts +7 -0
  36. package/dist/common/data-table/grid.js +119 -0
  37. package/dist/common/data-table/header-cell.d.ts +25 -0
  38. package/dist/common/data-table/header-cell.js +152 -0
  39. package/dist/common/data-table/index.d.ts +108 -0
  40. package/dist/common/data-table/index.js +457 -0
  41. package/dist/common/data-table/option-dropdown.d.ts +14 -0
  42. package/dist/common/data-table/option-dropdown.js +142 -0
  43. package/dist/common/dataset-label.d.ts +10 -0
  44. package/dist/common/dataset-label.js +56 -0
  45. package/dist/common/error-boundary.d.ts +12 -0
  46. package/dist/common/error-boundary.js +103 -0
  47. package/dist/common/field-selector.d.ts +43 -0
  48. package/dist/common/field-selector.js +220 -0
  49. package/dist/common/field-token.d.ts +46 -0
  50. package/dist/common/field-token.js +70 -0
  51. package/dist/common/file-uploader/file-drop.d.ts +53 -0
  52. package/dist/common/file-uploader/file-drop.js +252 -0
  53. package/dist/common/file-uploader/file-upload-progress.d.ts +8 -0
  54. package/dist/common/file-uploader/file-upload-progress.js +123 -0
  55. package/dist/common/file-uploader/file-upload.d.ts +27 -0
  56. package/dist/common/file-uploader/file-upload.js +324 -0
  57. package/dist/common/file-uploader/upload-button.d.ts +7 -0
  58. package/dist/common/file-uploader/upload-button.js +94 -0
  59. package/dist/common/histogram-plot.d.ts +3 -0
  60. package/dist/common/histogram-plot.js +134 -0
  61. package/dist/common/icon-button.d.ts +12 -0
  62. package/dist/common/icon-button.js +52 -0
  63. package/dist/common/icons/add.d.ts +9 -0
  64. package/dist/common/icons/add.js +78 -0
  65. package/dist/common/icons/anchor_window.d.ts +11 -0
  66. package/dist/common/icons/anchor_window.js +55 -0
  67. package/dist/common/icons/arrow-down-alt.d.ts +9 -0
  68. package/dist/common/icons/arrow-down-alt.js +78 -0
  69. package/dist/common/icons/arrow-down-solid.d.ts +9 -0
  70. package/dist/common/icons/arrow-down-solid.js +78 -0
  71. package/dist/common/icons/arrow-down.d.ts +9 -0
  72. package/dist/common/icons/arrow-down.js +78 -0
  73. package/dist/common/icons/arrow-left.d.ts +9 -0
  74. package/dist/common/icons/arrow-left.js +81 -0
  75. package/dist/common/icons/arrow-right.d.ts +9 -0
  76. package/dist/common/icons/arrow-right.js +78 -0
  77. package/dist/common/icons/arrow-up-alt.d.ts +9 -0
  78. package/dist/common/icons/arrow-up-alt.js +79 -0
  79. package/dist/common/icons/arrow-up-solid.d.ts +9 -0
  80. package/dist/common/icons/arrow-up-solid.js +78 -0
  81. package/dist/common/icons/arrow-up.d.ts +9 -0
  82. package/dist/common/icons/arrow-up.js +78 -0
  83. package/dist/common/icons/base.d.ts +29 -0
  84. package/dist/common/icons/base.js +116 -0
  85. package/dist/common/icons/bug.d.ts +9 -0
  86. package/dist/common/icons/bug.js +80 -0
  87. package/dist/common/icons/cancel.d.ts +9 -0
  88. package/dist/common/icons/cancel.js +78 -0
  89. package/dist/common/icons/checkmark.d.ts +10 -0
  90. package/dist/common/icons/checkmark.js +85 -0
  91. package/dist/common/icons/clipboard.d.ts +9 -0
  92. package/dist/common/icons/clipboard.js +79 -0
  93. package/dist/common/icons/clock.d.ts +9 -0
  94. package/dist/common/icons/clock.js +80 -0
  95. package/dist/common/icons/close.d.ts +9 -0
  96. package/dist/common/icons/close.js +83 -0
  97. package/dist/common/icons/code-alt.d.ts +9 -0
  98. package/dist/common/icons/code-alt.js +82 -0
  99. package/dist/common/icons/copy.d.ts +9 -0
  100. package/dist/common/icons/copy.js +84 -0
  101. package/dist/common/icons/crosshairs.d.ts +9 -0
  102. package/dist/common/icons/crosshairs.js +82 -0
  103. package/dist/common/icons/cube-3d.d.ts +9 -0
  104. package/dist/common/icons/cube-3d.js +82 -0
  105. package/dist/common/icons/cursor-click.d.ts +9 -0
  106. package/dist/common/icons/cursor-click.js +82 -0
  107. package/dist/common/icons/data-table.d.ts +10 -0
  108. package/dist/common/icons/data-table.js +79 -0
  109. package/dist/common/icons/db.d.ts +10 -0
  110. package/dist/common/icons/db.js +79 -0
  111. package/dist/common/icons/delete.d.ts +9 -0
  112. package/dist/common/icons/delete.js +80 -0
  113. package/dist/common/icons/docs.d.ts +9 -0
  114. package/dist/common/icons/docs.js +94 -0
  115. package/dist/common/icons/drag-n-drop.d.ts +9 -0
  116. package/dist/common/icons/drag-n-drop.js +80 -0
  117. package/dist/common/icons/draw-polygon.d.ts +10 -0
  118. package/dist/common/icons/draw-polygon.js +98 -0
  119. package/dist/common/icons/email.d.ts +9 -0
  120. package/dist/common/icons/email.js +82 -0
  121. package/dist/common/icons/expand.d.ts +9 -0
  122. package/dist/common/icons/expand.js +80 -0
  123. package/dist/common/icons/eye-seen.d.ts +9 -0
  124. package/dist/common/icons/eye-seen.js +80 -0
  125. package/dist/common/icons/eye-unseen.d.ts +9 -0
  126. package/dist/common/icons/eye-unseen.js +80 -0
  127. package/dist/common/icons/file-type.d.ts +8 -0
  128. package/dist/common/icons/file-type.js +65 -0
  129. package/dist/common/icons/file.d.ts +9 -0
  130. package/dist/common/icons/file.js +78 -0
  131. package/dist/common/icons/files.d.ts +9 -0
  132. package/dist/common/icons/files.js +80 -0
  133. package/dist/common/icons/filter-funnel.d.ts +9 -0
  134. package/dist/common/icons/filter-funnel.js +78 -0
  135. package/dist/common/icons/free-window.d.ts +11 -0
  136. package/dist/common/icons/free-window.js +55 -0
  137. package/dist/common/icons/gear.d.ts +9 -0
  138. package/dist/common/icons/gear.js +80 -0
  139. package/dist/common/icons/hash.d.ts +9 -0
  140. package/dist/common/icons/hash.js +78 -0
  141. package/dist/common/icons/histogram.d.ts +9 -0
  142. package/dist/common/icons/histogram.js +79 -0
  143. package/dist/common/icons/index.d.ts +76 -0
  144. package/dist/common/icons/index.js +624 -0
  145. package/dist/common/icons/info.d.ts +12 -0
  146. package/dist/common/icons/info.js +92 -0
  147. package/dist/common/icons/layers.d.ts +9 -0
  148. package/dist/common/icons/layers.js +78 -0
  149. package/dist/common/icons/left-arrow.d.ts +9 -0
  150. package/dist/common/icons/left-arrow.js +82 -0
  151. package/dist/common/icons/legend.d.ts +9 -0
  152. package/dist/common/icons/legend.js +78 -0
  153. package/dist/common/icons/line-chart.d.ts +9 -0
  154. package/dist/common/icons/line-chart.js +78 -0
  155. package/dist/common/icons/login.d.ts +9 -0
  156. package/dist/common/icons/login.js +81 -0
  157. package/dist/common/icons/logout.d.ts +9 -0
  158. package/dist/common/icons/logout.js +80 -0
  159. package/dist/common/icons/map-icon.d.ts +11 -0
  160. package/dist/common/icons/map-icon.js +86 -0
  161. package/dist/common/icons/map.d.ts +11 -0
  162. package/dist/common/icons/map.js +86 -0
  163. package/dist/common/icons/messages.d.ts +9 -0
  164. package/dist/common/icons/messages.js +78 -0
  165. package/dist/common/icons/minus.d.ts +9 -0
  166. package/dist/common/icons/minus.js +78 -0
  167. package/dist/common/icons/order-by-dataset.d.ts +12 -0
  168. package/dist/common/icons/order-by-dataset.js +55 -0
  169. package/dist/common/icons/order-by-list.d.ts +12 -0
  170. package/dist/common/icons/order-by-list.js +47 -0
  171. package/dist/common/icons/pause.d.ts +9 -0
  172. package/dist/common/icons/pause.js +78 -0
  173. package/dist/common/icons/picture.d.ts +9 -0
  174. package/dist/common/icons/picture.js +80 -0
  175. package/dist/common/icons/pin.d.ts +9 -0
  176. package/dist/common/icons/pin.js +86 -0
  177. package/dist/common/icons/play.d.ts +9 -0
  178. package/dist/common/icons/play.js +78 -0
  179. package/dist/common/icons/polygon.d.ts +10 -0
  180. package/dist/common/icons/polygon.js +100 -0
  181. package/dist/common/icons/rectangle.d.ts +10 -0
  182. package/dist/common/icons/rectangle.js +101 -0
  183. package/dist/common/icons/reduce.d.ts +9 -0
  184. package/dist/common/icons/reduce.js +81 -0
  185. package/dist/common/icons/reset.d.ts +9 -0
  186. package/dist/common/icons/reset.js +78 -0
  187. package/dist/common/icons/rocket.d.ts +9 -0
  188. package/dist/common/icons/rocket.js +78 -0
  189. package/dist/common/icons/save.d.ts +9 -0
  190. package/dist/common/icons/save.js +80 -0
  191. package/dist/common/icons/save2.d.ts +9 -0
  192. package/dist/common/icons/save2.js +84 -0
  193. package/dist/common/icons/search.d.ts +9 -0
  194. package/dist/common/icons/search.js +80 -0
  195. package/dist/common/icons/settings.d.ts +9 -0
  196. package/dist/common/icons/settings.js +80 -0
  197. package/dist/common/icons/share.d.ts +9 -0
  198. package/dist/common/icons/share.js +78 -0
  199. package/dist/common/icons/split.d.ts +9 -0
  200. package/dist/common/icons/split.js +106 -0
  201. package/dist/common/icons/square-select.d.ts +9 -0
  202. package/dist/common/icons/square-select.js +80 -0
  203. package/dist/common/icons/trash.d.ts +9 -0
  204. package/dist/common/icons/trash.js +80 -0
  205. package/dist/common/icons/vert-dots.d.ts +9 -0
  206. package/dist/common/icons/vert-dots.js +116 -0
  207. package/dist/common/icons/vert-three-dots.d.ts +9 -0
  208. package/dist/common/icons/vert-three-dots.js +91 -0
  209. package/dist/common/icons/warning-sign.d.ts +15 -0
  210. package/dist/common/icons/warning-sign.js +100 -0
  211. package/dist/common/icons/warning.d.ts +10 -0
  212. package/dist/common/icons/warning.js +93 -0
  213. package/dist/common/image-preview.d.ts +15 -0
  214. package/dist/common/image-preview.js +91 -0
  215. package/dist/common/index.d.ts +3 -0
  216. package/dist/common/index.js +287 -0
  217. package/dist/common/info-helper.d.ts +10 -0
  218. package/dist/common/info-helper.js +95 -0
  219. package/dist/common/item-selector/accessor.d.ts +7 -0
  220. package/dist/common/item-selector/accessor.js +56 -0
  221. package/dist/common/item-selector/chickleted-input.d.ts +21 -0
  222. package/dist/common/item-selector/chickleted-input.js +116 -0
  223. package/dist/common/item-selector/dropdown-list.d.ts +50 -0
  224. package/dist/common/item-selector/dropdown-list.js +191 -0
  225. package/dist/common/item-selector/item-selector.d.ts +45 -0
  226. package/dist/common/item-selector/item-selector.js +359 -0
  227. package/dist/common/item-selector/typeahead.d.ts +113 -0
  228. package/dist/common/item-selector/typeahead.js +507 -0
  229. package/dist/common/line-chart.d.ts +34 -0
  230. package/dist/common/line-chart.js +146 -0
  231. package/dist/common/loading-spinner.d.ts +9 -0
  232. package/dist/common/loading-spinner.js +76 -0
  233. package/dist/common/logo.d.ts +8 -0
  234. package/dist/common/logo.js +102 -0
  235. package/dist/common/map-layer-selector.d.ts +13 -0
  236. package/dist/common/map-layer-selector.js +69 -0
  237. package/dist/common/modal.d.ts +51 -0
  238. package/dist/common/modal.js +211 -0
  239. package/dist/common/portaled.d.ts +54 -0
  240. package/dist/common/portaled.js +360 -0
  241. package/dist/common/progress-bar.d.ts +12 -0
  242. package/dist/common/progress-bar.js +74 -0
  243. package/dist/common/range-brush.d.ts +19 -0
  244. package/dist/common/range-brush.js +346 -0
  245. package/dist/common/range-plot.d.ts +35 -0
  246. package/dist/common/range-plot.js +156 -0
  247. package/dist/common/range-slider.d.ts +30 -0
  248. package/dist/common/range-slider.js +343 -0
  249. package/dist/common/slider/mouse-event.d.ts +27 -0
  250. package/dist/common/slider/mouse-event.js +145 -0
  251. package/dist/common/slider/slider-bar-handle.d.ts +29 -0
  252. package/dist/common/slider/slider-bar-handle.js +135 -0
  253. package/dist/common/slider/slider-handle.d.ts +33 -0
  254. package/dist/common/slider/slider-handle.js +182 -0
  255. package/dist/common/slider/slider.d.ts +70 -0
  256. package/dist/common/slider/slider.js +264 -0
  257. package/dist/common/styled-components.d.ts +123 -0
  258. package/dist/common/styled-components.js +438 -0
  259. package/dist/common/switch.d.ts +15 -0
  260. package/dist/common/switch.js +50 -0
  261. package/dist/common/time-range-slider-time-title.d.ts +9 -0
  262. package/dist/common/time-range-slider-time-title.js +94 -0
  263. package/dist/common/time-range-slider.d.ts +32 -0
  264. package/dist/common/time-range-slider.js +132 -0
  265. package/dist/common/time-slider-marker.d.ts +21 -0
  266. package/dist/common/time-slider-marker.js +161 -0
  267. package/dist/common/tippy-tooltip.d.ts +4 -0
  268. package/dist/common/tippy-tooltip.js +142 -0
  269. package/dist/common/toolbar-item.d.ts +14 -0
  270. package/dist/common/toolbar-item.js +91 -0
  271. package/dist/common/toolbar.d.ts +5 -0
  272. package/dist/common/toolbar.js +53 -0
  273. package/dist/common/vertical-toolbar.d.ts +3 -0
  274. package/dist/common/vertical-toolbar.js +42 -0
  275. package/dist/connect/keplergl-connect.d.ts +5 -0
  276. package/dist/connect/keplergl-connect.js +67 -0
  277. package/dist/connect/with-local-selector.d.ts +6 -0
  278. package/dist/connect/with-local-selector.js +130 -0
  279. package/dist/container.d.ts +39 -0
  280. package/dist/container.js +242 -0
  281. package/dist/context.d.ts +16 -0
  282. package/dist/context.js +53 -0
  283. package/dist/editor/constants.d.ts +17 -0
  284. package/dist/editor/constants.js +47 -0
  285. package/dist/editor/editor.d.ts +30 -0
  286. package/dist/editor/editor.js +279 -0
  287. package/dist/editor/feature-action-panel.d.ts +30 -0
  288. package/dist/editor/feature-action-panel.js +169 -0
  289. package/dist/editor/feature-styles.d.ts +37 -0
  290. package/dist/editor/feature-styles.js +92 -0
  291. package/dist/editor/handle-style.d.ts +42 -0
  292. package/dist/editor/handle-style.js +100 -0
  293. package/dist/filters/components.d.ts +3 -0
  294. package/dist/filters/components.js +40 -0
  295. package/dist/filters/filter-panels/filter-panel-with-field-select.d.ts +10 -0
  296. package/dist/filters/filter-panels/filter-panel-with-field-select.js +106 -0
  297. package/dist/filters/filter-panels/multi-select-filter-panel.d.ts +9 -0
  298. package/dist/filters/filter-panels/multi-select-filter-panel.js +72 -0
  299. package/dist/filters/filter-panels/new-filter-panel.d.ts +12 -0
  300. package/dist/filters/filter-panels/new-filter-panel.js +94 -0
  301. package/dist/filters/filter-panels/polygon-filter-panel.d.ts +9 -0
  302. package/dist/filters/filter-panels/polygon-filter-panel.js +96 -0
  303. package/dist/filters/filter-panels/range-filter-panel.d.ts +9 -0
  304. package/dist/filters/filter-panels/range-filter-panel.js +72 -0
  305. package/dist/filters/filter-panels/single-select-filter-panel.d.ts +9 -0
  306. package/dist/filters/filter-panels/single-select-filter-panel.js +72 -0
  307. package/dist/filters/filter-panels/time-range-filter-panel.d.ts +8 -0
  308. package/dist/filters/filter-panels/time-range-filter-panel.js +87 -0
  309. package/dist/filters/filter-panels/types.d.ts +35 -0
  310. package/dist/filters/filter-panels/types.js +26 -0
  311. package/dist/filters/index.d.ts +5 -0
  312. package/dist/filters/index.js +68 -0
  313. package/dist/filters/multi-select-filter.d.ts +3 -0
  314. package/dist/filters/multi-select-filter.js +53 -0
  315. package/dist/filters/polygon-filter.d.ts +4 -0
  316. package/dist/filters/polygon-filter.js +94 -0
  317. package/dist/filters/range-filter.d.ts +8 -0
  318. package/dist/filters/range-filter.js +52 -0
  319. package/dist/filters/single-select-filter.d.ts +3 -0
  320. package/dist/filters/single-select-filter.js +62 -0
  321. package/dist/filters/time-range-filter.d.ts +28 -0
  322. package/dist/filters/time-range-filter.js +84 -0
  323. package/dist/filters/time-widget.d.ts +14 -0
  324. package/dist/filters/time-widget.js +192 -0
  325. package/dist/filters/types.d.ts +54 -0
  326. package/dist/filters/types.js +26 -0
  327. package/dist/geocoder/geocoder.d.ts +33 -0
  328. package/dist/geocoder/geocoder.js +336 -0
  329. package/dist/geocoder-panel.d.ts +25 -0
  330. package/dist/geocoder-panel.js +241 -0
  331. package/dist/hooks/useFeatureFlags.d.ts +2 -0
  332. package/dist/hooks/useFeatureFlags.js +38 -0
  333. package/dist/index.d.ts +176 -0
  334. package/dist/index.js +1935 -0
  335. package/dist/injector.d.ts +29 -0
  336. package/dist/injector.js +198 -0
  337. package/dist/kepler-gl.d.ts +281 -0
  338. package/dist/kepler-gl.js +568 -0
  339. package/dist/map/coordinate-info.d.ts +7 -0
  340. package/dist/map/coordinate-info.js +67 -0
  341. package/dist/map/layer-hover-info.d.ts +13 -0
  342. package/dist/map/layer-hover-info.js +228 -0
  343. package/dist/map/layer-selector-panel.d.ts +21 -0
  344. package/dist/map/layer-selector-panel.js +114 -0
  345. package/dist/map/lazy-tippy.d.ts +7 -0
  346. package/dist/map/lazy-tippy.js +94 -0
  347. package/dist/map/locale-panel.d.ts +16 -0
  348. package/dist/map/locale-panel.js +107 -0
  349. package/dist/map/map-control-panel.d.ts +13 -0
  350. package/dist/map/map-control-panel.js +116 -0
  351. package/dist/map/map-control-toolbar.d.ts +2 -0
  352. package/dist/map/map-control-toolbar.js +45 -0
  353. package/dist/map/map-control-tooltip.d.ts +8 -0
  354. package/dist/map/map-control-tooltip.js +57 -0
  355. package/dist/map/map-control.d.ts +45 -0
  356. package/dist/map/map-control.js +101 -0
  357. package/dist/map/map-draw-panel.d.ts +20 -0
  358. package/dist/map/map-draw-panel.js +137 -0
  359. package/dist/map/map-legend-panel.d.ts +24 -0
  360. package/dist/map/map-legend-panel.js +181 -0
  361. package/dist/map/map-legend.d.ts +55 -0
  362. package/dist/map/map-legend.js +274 -0
  363. package/dist/map/map-popover.d.ts +36 -0
  364. package/dist/map/map-popover.js +217 -0
  365. package/dist/map/split-map-button.d.ts +20 -0
  366. package/dist/map/split-map-button.js +92 -0
  367. package/dist/map/toggle-3d-button.d.ts +17 -0
  368. package/dist/map/toggle-3d-button.js +81 -0
  369. package/dist/map-container.d.ts +48 -0
  370. package/dist/map-container.js +653 -0
  371. package/dist/maps-layout.d.ts +9 -0
  372. package/dist/maps-layout.js +80 -0
  373. package/dist/modal-container.d.ts +63 -0
  374. package/dist/modal-container.js +530 -0
  375. package/dist/modals/add-map-style-modal.d.ts +18 -0
  376. package/dist/modals/add-map-style-modal.js +300 -0
  377. package/dist/modals/cloud-tile.d.ts +15 -0
  378. package/dist/modals/cloud-tile.js +144 -0
  379. package/dist/modals/data-table-modal.d.ts +28 -0
  380. package/dist/modals/data-table-modal.js +285 -0
  381. package/dist/modals/delete-data-modal.d.ts +10 -0
  382. package/dist/modals/delete-data-modal.js +74 -0
  383. package/dist/modals/error-display.d.ts +6 -0
  384. package/dist/modals/error-display.js +50 -0
  385. package/dist/modals/export-data-modal.d.ts +25 -0
  386. package/dist/modals/export-data-modal.js +232 -0
  387. package/dist/modals/export-image-modal.d.ts +18 -0
  388. package/dist/modals/export-image-modal.js +156 -0
  389. package/dist/modals/export-map-modal/components.d.ts +8 -0
  390. package/dist/modals/export-map-modal/components.js +71 -0
  391. package/dist/modals/export-map-modal/export-html-map.d.ts +12 -0
  392. package/dist/modals/export-map-modal/export-html-map.js +158 -0
  393. package/dist/modals/export-map-modal/export-json-map.d.ts +9 -0
  394. package/dist/modals/export-map-modal/export-json-map.js +120 -0
  395. package/dist/modals/export-map-modal/export-map-modal.d.ts +27 -0
  396. package/dist/modals/export-map-modal/export-map-modal.js +119 -0
  397. package/dist/modals/image-modal-container.d.ts +17 -0
  398. package/dist/modals/image-modal-container.js +86 -0
  399. package/dist/modals/load-data-modal.d.ts +41 -0
  400. package/dist/modals/load-data-modal.js +118 -0
  401. package/dist/modals/load-storage-map.d.ts +26 -0
  402. package/dist/modals/load-storage-map.js +308 -0
  403. package/dist/modals/loading-dialog.d.ts +7 -0
  404. package/dist/modals/loading-dialog.js +68 -0
  405. package/dist/modals/modal-dialog.d.ts +2 -0
  406. package/dist/modals/modal-dialog.js +36 -0
  407. package/dist/modals/modal-tabs.d.ts +27 -0
  408. package/dist/modals/modal-tabs.js +119 -0
  409. package/dist/modals/overwrite-map-modal.d.ts +16 -0
  410. package/dist/modals/overwrite-map-modal.js +100 -0
  411. package/dist/modals/provider-modal-container.d.ts +22 -0
  412. package/dist/modals/provider-modal-container.js +101 -0
  413. package/dist/modals/save-map-modal.d.ts +30 -0
  414. package/dist/modals/save-map-modal.js +226 -0
  415. package/dist/modals/share-map-modal.d.ts +30 -0
  416. package/dist/modals/share-map-modal.js +219 -0
  417. package/dist/modals/status-panel.d.ts +13 -0
  418. package/dist/modals/status-panel.js +103 -0
  419. package/dist/modals/storage-map-viewer.d.ts +21 -0
  420. package/dist/modals/storage-map-viewer.js +147 -0
  421. package/dist/notification-panel/notification-item.d.ts +70 -0
  422. package/dist/notification-panel/notification-item.js +173 -0
  423. package/dist/notification-panel.d.ts +13 -0
  424. package/dist/notification-panel.js +106 -0
  425. package/dist/plot-container.d.ts +24 -0
  426. package/dist/plot-container.js +276 -0
  427. package/dist/side-panel/cloud-storage-dropdown.d.ts +6 -0
  428. package/dist/side-panel/cloud-storage-dropdown.js +62 -0
  429. package/dist/side-panel/common/dataset-info.d.ts +3 -0
  430. package/dist/side-panel/common/dataset-info.js +63 -0
  431. package/dist/side-panel/common/dataset-tag.d.ts +3 -0
  432. package/dist/side-panel/common/dataset-tag.js +89 -0
  433. package/dist/side-panel/common/dataset-title.d.ts +8 -0
  434. package/dist/side-panel/common/dataset-title.js +225 -0
  435. package/dist/side-panel/common/source-data-catalog.d.ts +9 -0
  436. package/dist/side-panel/common/source-data-catalog.js +82 -0
  437. package/dist/side-panel/common/source-data-selector.d.ts +8 -0
  438. package/dist/side-panel/common/source-data-selector.js +96 -0
  439. package/dist/side-panel/common/types.d.ts +63 -0
  440. package/dist/side-panel/common/types.js +26 -0
  441. package/dist/side-panel/custom-panel.d.ts +9 -0
  442. package/dist/side-panel/custom-panel.js +59 -0
  443. package/dist/side-panel/filter-manager.d.ts +20 -0
  444. package/dist/side-panel/filter-manager.js +132 -0
  445. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +21 -0
  446. package/dist/side-panel/filter-panel/filter-panel-header.js +87 -0
  447. package/dist/side-panel/filter-panel/filter-panel.d.ts +23 -0
  448. package/dist/side-panel/filter-panel/filter-panel.js +151 -0
  449. package/dist/side-panel/interaction-manager.d.ts +15 -0
  450. package/dist/side-panel/interaction-manager.js +57 -0
  451. package/dist/side-panel/interaction-panel/brush-config.d.ts +15 -0
  452. package/dist/side-panel/interaction-panel/brush-config.js +74 -0
  453. package/dist/side-panel/interaction-panel/interaction-panel.d.ts +18 -0
  454. package/dist/side-panel/interaction-panel/interaction-panel.js +156 -0
  455. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +28 -0
  456. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +264 -0
  457. package/dist/side-panel/interaction-panel/tooltip-config.d.ts +38 -0
  458. package/dist/side-panel/interaction-panel/tooltip-config.js +185 -0
  459. package/dist/side-panel/layer-manager.d.ts +39 -0
  460. package/dist/side-panel/layer-manager.js +225 -0
  461. package/dist/side-panel/layer-panel/add-layer-button.d.ts +10 -0
  462. package/dist/side-panel/layer-panel/add-layer-button.js +176 -0
  463. package/dist/side-panel/layer-panel/color-palette.d.ts +11 -0
  464. package/dist/side-panel/layer-panel/color-palette.js +91 -0
  465. package/dist/side-panel/layer-panel/color-range-selector.d.ts +47 -0
  466. package/dist/side-panel/layer-panel/color-range-selector.js +290 -0
  467. package/dist/side-panel/layer-panel/color-selector.d.ts +42 -0
  468. package/dist/side-panel/layer-panel/color-selector.js +225 -0
  469. package/dist/side-panel/layer-panel/column-selector.d.ts +22 -0
  470. package/dist/side-panel/layer-panel/column-selector.js +85 -0
  471. package/dist/side-panel/layer-panel/custom-palette.d.ts +38 -0
  472. package/dist/side-panel/layer-panel/custom-palette.js +312 -0
  473. package/dist/side-panel/layer-panel/custom-picker.d.ts +51 -0
  474. package/dist/side-panel/layer-panel/custom-picker.js +136 -0
  475. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +22 -0
  476. package/dist/side-panel/layer-panel/dataset-layer-group.js +86 -0
  477. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +23 -0
  478. package/dist/side-panel/layer-panel/dataset-layer-section.js +89 -0
  479. package/dist/side-panel/layer-panel/dataset-section.d.ts +24 -0
  480. package/dist/side-panel/layer-panel/dataset-section.js +112 -0
  481. package/dist/side-panel/layer-panel/dimension-scale-selector.d.ts +10 -0
  482. package/dist/side-panel/layer-panel/dimension-scale-selector.js +60 -0
  483. package/dist/side-panel/layer-panel/how-to-button.d.ts +6 -0
  484. package/dist/side-panel/layer-panel/how-to-button.js +58 -0
  485. package/dist/side-panel/layer-panel/layer-column-config.d.ts +19 -0
  486. package/dist/side-panel/layer-panel/layer-column-config.js +107 -0
  487. package/dist/side-panel/layer-panel/layer-config-group.d.ts +35 -0
  488. package/dist/side-panel/layer-panel/layer-config-group.js +188 -0
  489. package/dist/side-panel/layer-panel/layer-configurator.d.ts +100 -0
  490. package/dist/side-panel/layer-panel/layer-configurator.js +792 -0
  491. package/dist/side-panel/layer-panel/layer-list.d.ts +19 -0
  492. package/dist/side-panel/layer-panel/layer-list.js +188 -0
  493. package/dist/side-panel/layer-panel/layer-panel-header.d.ts +63 -0
  494. package/dist/side-panel/layer-panel/layer-panel-header.js +291 -0
  495. package/dist/side-panel/layer-panel/layer-panel.d.ts +36 -0
  496. package/dist/side-panel/layer-panel/layer-panel.js +201 -0
  497. package/dist/side-panel/layer-panel/layer-type-dropdown-list.d.ts +22 -0
  498. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +109 -0
  499. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +13 -0
  500. package/dist/side-panel/layer-panel/layer-type-list-item.js +89 -0
  501. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +21 -0
  502. package/dist/side-panel/layer-panel/layer-type-selector.js +91 -0
  503. package/dist/side-panel/layer-panel/panel-view-list-toggle.d.ts +36 -0
  504. package/dist/side-panel/layer-panel/panel-view-list-toggle.js +143 -0
  505. package/dist/side-panel/layer-panel/single-color-palette.d.ts +9 -0
  506. package/dist/side-panel/layer-panel/single-color-palette.js +81 -0
  507. package/dist/side-panel/layer-panel/text-label-panel.d.ts +15 -0
  508. package/dist/side-panel/layer-panel/text-label-panel.js +171 -0
  509. package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +29 -0
  510. package/dist/side-panel/layer-panel/vis-config-by-field-selector.js +137 -0
  511. package/dist/side-panel/layer-panel/vis-config-slider.d.ts +20 -0
  512. package/dist/side-panel/layer-panel/vis-config-slider.js +210 -0
  513. package/dist/side-panel/layer-panel/vis-config-switch.d.ts +16 -0
  514. package/dist/side-panel/layer-panel/vis-config-switch.js +91 -0
  515. package/dist/side-panel/map-manager.d.ts +20 -0
  516. package/dist/side-panel/map-manager.js +168 -0
  517. package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +19 -0
  518. package/dist/side-panel/map-style-panel/map-layer-selector.js +128 -0
  519. package/dist/side-panel/map-style-panel/map-style-selector.d.ts +16 -0
  520. package/dist/side-panel/map-style-panel/map-style-selector.js +98 -0
  521. package/dist/side-panel/panel-dropdown.d.ts +17 -0
  522. package/dist/side-panel/panel-dropdown.js +99 -0
  523. package/dist/side-panel/panel-header-action.d.ts +20 -0
  524. package/dist/side-panel/panel-header-action.js +100 -0
  525. package/dist/side-panel/panel-header.d.ts +79 -0
  526. package/dist/side-panel/panel-header.js +360 -0
  527. package/dist/side-panel/panel-tab.d.ts +20 -0
  528. package/dist/side-panel/panel-tab.js +88 -0
  529. package/dist/side-panel/panel-title.d.ts +4 -0
  530. package/dist/side-panel/panel-title.js +54 -0
  531. package/dist/side-panel/panel-toggle.d.ts +13 -0
  532. package/dist/side-panel/panel-toggle.js +80 -0
  533. package/dist/side-panel/side-bar.d.ts +79 -0
  534. package/dist/side-panel/side-bar.js +177 -0
  535. package/dist/side-panel.d.ts +134 -0
  536. package/dist/side-panel.js +274 -0
  537. package/dist/types.d.ts +42 -0
  538. package/dist/types.js +26 -0
  539. package/package.json +136 -0
@@ -0,0 +1,792 @@
1
+ // Copyright (c) 2022 Uber Technologies, Inc.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+ //
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+ //
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ "use strict";
22
+
23
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
24
+
25
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
26
+
27
+ Object.defineProperty(exports, "__esModule", {
28
+ value: true
29
+ });
30
+ exports["default"] = LayerConfiguratorFactory;
31
+ exports.ChannelByValueSelectorFactory = ChannelByValueSelectorFactory;
32
+ exports.AggregationTypeSelector = exports.AggregationScaleSelector = exports.LayerColorRangeSelector = exports.ArcLayerColorSelector = exports.LayerColorSelector = exports.getLayerChannelConfigProps = exports.getVisConfiguratorProps = exports.getLayerConfiguratorProps = exports.getLayerDataset = exports.getLayerFields = void 0;
33
+
34
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
35
+
36
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
37
+
38
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
39
+
40
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
41
+
42
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
43
+
44
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
45
+
46
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
47
+
48
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
49
+
50
+ var _react = _interopRequireWildcard(require("react"));
51
+
52
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
53
+
54
+ var _localization = require("@kepler.gl/localization");
55
+
56
+ var _styledComponents2 = require("../../common/styled-components");
57
+
58
+ var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
59
+
60
+ var _visConfigByFieldSelector = _interopRequireDefault(require("./vis-config-by-field-selector"));
61
+
62
+ var _layerColumnConfig = _interopRequireDefault(require("./layer-column-config"));
63
+
64
+ var _layerTypeSelector = _interopRequireDefault(require("./layer-type-selector"));
65
+
66
+ var _dimensionScaleSelector = _interopRequireDefault(require("./dimension-scale-selector"));
67
+
68
+ var _colorSelector = _interopRequireDefault(require("./color-selector"));
69
+
70
+ var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
71
+
72
+ var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
73
+
74
+ var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
75
+
76
+ var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
77
+
78
+ var _textLabelPanel = _interopRequireDefault(require("./text-label-panel"));
79
+
80
+ var _howToButton = _interopRequireDefault(require("./how-to-button"));
81
+
82
+ var _utils = require("@kepler.gl/utils");
83
+
84
+ var _constants = require("@kepler.gl/constants");
85
+
86
+ var _templateObject, _templateObject2;
87
+
88
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
89
+
90
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
91
+
92
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
93
+
94
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
95
+
96
+ var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
97
+ className: 'layer-panel__config'
98
+ })(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-top: ", ";\n padding: ", ";\n border-left: ", " dashed\n ", ";\n"])), function (props) {
99
+ return props.theme.layerConfiguratorMargin;
100
+ }, function (props) {
101
+ return props.theme.layerConfiguratorPadding;
102
+ }, function (props) {
103
+ return props.theme.layerConfiguratorBorder;
104
+ }, function (props) {
105
+ return props.theme.layerConfiguratorBorderColor;
106
+ });
107
+
108
+ var StyledLayerVisualConfigurator = _styledComponents["default"].div.attrs({
109
+ className: 'layer-panel__config__visualC-config'
110
+ })(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
111
+
112
+ var getLayerFields = function getLayerFields(datasets, layer) {
113
+ var _layer$config;
114
+
115
+ return (_layer$config = layer.config) !== null && _layer$config !== void 0 && _layer$config.dataId && datasets[layer.config.dataId] ? datasets[layer.config.dataId].fields : [];
116
+ };
117
+
118
+ exports.getLayerFields = getLayerFields;
119
+
120
+ var getLayerDataset = function getLayerDataset(datasets, layer) {
121
+ var _layer$config2;
122
+
123
+ return (_layer$config2 = layer.config) !== null && _layer$config2 !== void 0 && _layer$config2.dataId && datasets[layer.config.dataId] ? datasets[layer.config.dataId] : null;
124
+ };
125
+
126
+ exports.getLayerDataset = getLayerDataset;
127
+
128
+ var getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
129
+ return {
130
+ layer: props.layer,
131
+ fields: getLayerFields(props.datasets, props.layer),
132
+ onChange: props.updateLayerConfig,
133
+ setColorUI: props.updateLayerColorUI
134
+ };
135
+ };
136
+
137
+ exports.getLayerConfiguratorProps = getLayerConfiguratorProps;
138
+
139
+ var getVisConfiguratorProps = function getVisConfiguratorProps(props) {
140
+ return {
141
+ layer: props.layer,
142
+ fields: getLayerFields(props.datasets, props.layer),
143
+ onChange: props.updateLayerVisConfig,
144
+ setColorUI: props.updateLayerColorUI
145
+ };
146
+ };
147
+
148
+ exports.getVisConfiguratorProps = getVisConfiguratorProps;
149
+
150
+ var getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
151
+ return {
152
+ layer: props.layer,
153
+ fields: getLayerFields(props.datasets, props.layer),
154
+ onChange: props.updateLayerVisualChannelConfig
155
+ };
156
+ };
157
+
158
+ exports.getLayerChannelConfigProps = getLayerChannelConfigProps;
159
+ LayerConfiguratorFactory.deps = [_sourceDataSelector["default"], _visConfigSlider["default"], _textLabelPanel["default"], _layerConfigGroup["default"], ChannelByValueSelectorFactory, _layerColumnConfig["default"], _layerTypeSelector["default"], _visConfigSwitch["default"]];
160
+
161
+ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabelPanel, LayerConfigGroup, ChannelByValueSelector, LayerColumnConfig, LayerTypeSelector, VisConfigSwitch) {
162
+ var LayerConfigurator = /*#__PURE__*/function (_Component) {
163
+ (0, _inherits2["default"])(LayerConfigurator, _Component);
164
+
165
+ var _super = _createSuper(LayerConfigurator);
166
+
167
+ function LayerConfigurator() {
168
+ (0, _classCallCheck2["default"])(this, LayerConfigurator);
169
+ return _super.apply(this, arguments);
170
+ }
171
+
172
+ (0, _createClass2["default"])(LayerConfigurator, [{
173
+ key: "_renderPointLayerConfig",
174
+ value: function _renderPointLayerConfig(props) {
175
+ return this._renderScatterplotLayerConfig(props);
176
+ }
177
+ }, {
178
+ key: "_renderIconLayerConfig",
179
+ value: function _renderIconLayerConfig(props) {
180
+ return this._renderScatterplotLayerConfig(props);
181
+ }
182
+ }, {
183
+ key: "_renderScatterplotLayerConfig",
184
+ value: function _renderScatterplotLayerConfig(_ref) {
185
+ var layer = _ref.layer,
186
+ visConfiguratorProps = _ref.visConfiguratorProps,
187
+ layerChannelConfigProps = _ref.layerChannelConfigProps,
188
+ layerConfiguratorProps = _ref.layerConfiguratorProps;
189
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled || {
190
+ label: 'layer.color'
191
+ }, visConfiguratorProps, {
192
+ collapsible: true
193
+ }), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
194
+ channel: layer.visualChannels.color
195
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), layer.type === _constants.LAYER_TYPES.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
196
+ collapsible: true
197
+ }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
198
+ property: "strokeColorRange"
199
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
200
+ selectedColor: layer.config.visConfig.strokeColor,
201
+ property: "strokeColor"
202
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
203
+ channel: layer.visualChannels.strokeColor
204
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
205
+ disabled: !layer.config.visConfig.outline
206
+ })))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
207
+ label: 'layer.radius',
208
+ collapsible: true
209
+ }, !layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
210
+ label: false,
211
+ disabled: Boolean(layer.config.sizeField)
212
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
213
+ label: false,
214
+ disabled: !layer.config.sizeField || layer.config.visConfig.fixedRadius
215
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
216
+ channel: layer.visualChannels.size
217
+ }, layerChannelConfigProps)), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fixedRadius, visConfiguratorProps)) : null)), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
218
+ fields: visConfiguratorProps.fields,
219
+ updateLayerTextLabel: this.props.updateLayerTextLabel,
220
+ textLabel: layer.config.textLabel
221
+ }));
222
+ }
223
+ }, {
224
+ key: "_renderClusterLayerConfig",
225
+ value: function _renderClusterLayerConfig(_ref2) {
226
+ var layer = _ref2.layer,
227
+ visConfiguratorProps = _ref2.visConfiguratorProps,
228
+ layerConfiguratorProps = _ref2.layerConfiguratorProps,
229
+ layerChannelConfigProps = _ref2.layerChannelConfigProps;
230
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
231
+ label: 'layer.color',
232
+ collapsible: true
233
+ }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
234
+ channel: layer.visualChannels.color
235
+ })), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
236
+ channel: layer.visualChannels.color
237
+ }, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
238
+ channel: layer.visualChannels.color
239
+ })) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
240
+ label: 'layer.radius',
241
+ collapsible: true
242
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.clusterRadius, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps)))));
243
+ }
244
+ }, {
245
+ key: "_renderHeatmapLayerConfig",
246
+ value: function _renderHeatmapLayerConfig(_ref3) {
247
+ var layer = _ref3.layer,
248
+ visConfiguratorProps = _ref3.visConfiguratorProps,
249
+ layerConfiguratorProps = _ref3.layerConfiguratorProps,
250
+ layerChannelConfigProps = _ref3.layerChannelConfigProps;
251
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
252
+ label: 'layer.color',
253
+ collapsible: true
254
+ }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
255
+ label: 'layer.radius'
256
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
257
+ label: false
258
+ }))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
259
+ label: 'layer.weight'
260
+ }, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
261
+ channel: layer.visualChannels.weight
262
+ }, layerChannelConfigProps))));
263
+ }
264
+ }, {
265
+ key: "_renderGridLayerConfig",
266
+ value: function _renderGridLayerConfig(props) {
267
+ return this._renderAggregationLayerConfig(props);
268
+ }
269
+ }, {
270
+ key: "_renderHexagonLayerConfig",
271
+ value: function _renderHexagonLayerConfig(props) {
272
+ return this._renderAggregationLayerConfig(props);
273
+ }
274
+ }, {
275
+ key: "_renderAggregationLayerConfig",
276
+ value: function _renderAggregationLayerConfig(_ref4) {
277
+ var layer = _ref4.layer,
278
+ visConfiguratorProps = _ref4.visConfiguratorProps,
279
+ layerConfiguratorProps = _ref4.layerConfiguratorProps,
280
+ layerChannelConfigProps = _ref4.layerChannelConfigProps;
281
+ var config = layer.config;
282
+ var enable3d = config.visConfig.enable3d;
283
+ var elevationByDescription = 'layer.elevationByDescription';
284
+ var colorByDescription = 'layer.colorByDescription';
285
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
286
+ label: 'layer.color',
287
+ collapsible: true
288
+ }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
289
+ channel: layer.visualChannels.color
290
+ })), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
291
+ channel: layer.visualChannels.color
292
+ }, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
293
+ description: colorByDescription,
294
+ channel: layer.visualChannels.color
295
+ })) : null, layer.visConfigSettings.percentile && layer.visConfigSettings.percentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.percentile, visConfiguratorProps)) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
296
+ label: 'layer.radius',
297
+ collapsible: true
298
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.worldUnitSize, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps)))), layer.visConfigSettings.enable3d ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
299
+ collapsible: true
300
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
301
+ label: "layerVisConfigs.heightMultiplier"
302
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
303
+ channel: layer.visualChannels.size,
304
+ description: elevationByDescription,
305
+ disabled: !enable3d
306
+ })), /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
307
+ channel: layer.visualChannels.size
308
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
309
+ label: "layerVisConfigs.heightRange"
310
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps, {
311
+ label: "layerVisConfigs.enableHeightZoomFactor"
312
+ })), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
313
+ channel: layer.visualChannels.size
314
+ })) : null, layer.visConfigSettings.elevationPercentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null)) : null);
315
+ } // TODO: Shan move these into layer class
316
+
317
+ }, {
318
+ key: "_renderHexagonIdLayerConfig",
319
+ value: function _renderHexagonIdLayerConfig(_ref5) {
320
+ var layer = _ref5.layer,
321
+ visConfiguratorProps = _ref5.visConfiguratorProps,
322
+ layerConfiguratorProps = _ref5.layerConfiguratorProps,
323
+ layerChannelConfigProps = _ref5.layerChannelConfigProps;
324
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
325
+ label: 'layer.color',
326
+ collapsible: true
327
+ }, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
328
+ channel: layer.visualChannels.color
329
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
330
+ label: 'layer.coverage',
331
+ collapsible: true
332
+ }, !layer.config.coverageField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps, {
333
+ label: false
334
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverageRange, visConfiguratorProps, {
335
+ label: false
336
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
337
+ channel: layer.visualChannels.coverage
338
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
339
+ collapsible: true
340
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
341
+ channel: layer.visualChannels.size
342
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
343
+ label: "layerVisConfigs.heightRange"
344
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)))));
345
+ }
346
+ }, {
347
+ key: "_renderArcLayerConfig",
348
+ value: function _renderArcLayerConfig(args) {
349
+ return this._renderLineLayerConfig(args);
350
+ }
351
+ }, {
352
+ key: "_renderLineLayerConfig",
353
+ value: function _renderLineLayerConfig(_ref6) {
354
+ var layer = _ref6.layer,
355
+ visConfiguratorProps = _ref6.visConfiguratorProps,
356
+ layerConfiguratorProps = _ref6.layerConfiguratorProps,
357
+ layerChannelConfigProps = _ref6.layerChannelConfigProps;
358
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
359
+ label: 'layer.color',
360
+ collapsible: true
361
+ }, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(ArcLayerColorSelector, {
362
+ layer: layer,
363
+ setColorUI: layerConfiguratorProps.setColorUI,
364
+ onChangeConfig: layerConfiguratorProps.onChange,
365
+ onChangeVisConfig: visConfiguratorProps.onChange
366
+ }), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
367
+ channel: layer.visualChannels.sourceColor
368
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
369
+ label: 'layer.stroke',
370
+ collapsible: true
371
+ }, layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
372
+ disabled: !layer.config.sizeField,
373
+ label: false
374
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
375
+ label: false
376
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
377
+ channel: layer.visualChannels.size
378
+ }, layerChannelConfigProps)))), layer.visConfigSettings.elevationScale ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
379
+ label: "layerVisConfigs.elevationScale",
380
+ collapsible: true
381
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps))) : null);
382
+ }
383
+ }, {
384
+ key: "_renderTripLayerConfig",
385
+ value: function _renderTripLayerConfig(_ref7) {
386
+ var layer = _ref7.layer,
387
+ visConfiguratorProps = _ref7.visConfiguratorProps,
388
+ layerConfiguratorProps = _ref7.layerConfiguratorProps,
389
+ layerChannelConfigProps = _ref7.layerChannelConfigProps;
390
+ var _layer$meta$featureTy = layer.meta.featureTypes,
391
+ featureTypes = _layer$meta$featureTy === void 0 ? {} : _layer$meta$featureTy;
392
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
393
+ label: 'layer.color',
394
+ collapsible: true
395
+ }, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
396
+ channel: layer.visualChannels.color
397
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
398
+ label: "layer.strokeWidth",
399
+ collapsible: true
400
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
401
+ label: false
402
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
403
+ label: false
404
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
405
+ channel: layer.visualChannels.size
406
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
407
+ label: "layer.trailLength",
408
+ description: "layer.trailLengthDescription"
409
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.trailLength, visConfiguratorProps, {
410
+ label: false
411
+ }))));
412
+ }
413
+ }, {
414
+ key: "_renderGeojsonLayerConfig",
415
+ value: function _renderGeojsonLayerConfig(_ref8) {
416
+ var layer = _ref8.layer,
417
+ visConfiguratorProps = _ref8.visConfiguratorProps,
418
+ layerConfiguratorProps = _ref8.layerConfiguratorProps,
419
+ layerChannelConfigProps = _ref8.layerChannelConfigProps;
420
+ var _layer$meta$featureTy2 = layer.meta.featureTypes,
421
+ featureTypes = _layer$meta$featureTy2 === void 0 ? {} : _layer$meta$featureTy2,
422
+ visConfig = layer.config.visConfig;
423
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, featureTypes.polygon || featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
424
+ label: "layer.fillColor",
425
+ collapsible: true
426
+ }), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
427
+ channel: layer.visualChannels.color
428
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
429
+ label: "layer.strokeColor",
430
+ collapsible: true
431
+ }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
432
+ property: "strokeColorRange"
433
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
434
+ selectedColor: layer.config.visConfig.strokeColor,
435
+ property: "strokeColor"
436
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
437
+ channel: layer.visualChannels.strokeColor
438
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
439
+ label: "layer.strokeWidth",
440
+ collapsible: true
441
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
442
+ label: false
443
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
444
+ label: false
445
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
446
+ channel: layer.visualChannels.size
447
+ }, layerChannelConfigProps)))), featureTypes.polygon ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
448
+ disabled: !visConfig.filled,
449
+ collapsible: true
450
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
451
+ label: false
452
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
453
+ channel: layer.visualChannels.height
454
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))) : null, featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
455
+ label: 'layer.radius',
456
+ collapsible: true
457
+ }, !layer.config.radiusField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
458
+ label: false,
459
+ disabled: Boolean(layer.config.radiusField)
460
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
461
+ label: false,
462
+ disabled: !layer.config.radiusField
463
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
464
+ channel: layer.visualChannels.radius
465
+ }, layerChannelConfigProps)))) : null);
466
+ }
467
+ }, {
468
+ key: "_render3DLayerConfig",
469
+ value: function _render3DLayerConfig(_ref9) {
470
+ var layer = _ref9.layer,
471
+ visConfiguratorProps = _ref9.visConfiguratorProps;
472
+ return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
473
+ label: 'layer.3DModel',
474
+ collapsible: true
475
+ }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
476
+ type: "file",
477
+ accept: ".glb,.gltf",
478
+ onChange: function onChange(e) {
479
+ if (e.target.files && e.target.files[0]) {
480
+ var url = URL.createObjectURL(e.target.files[0]);
481
+ visConfiguratorProps.onChange({
482
+ scenegraph: url
483
+ });
484
+ }
485
+ }
486
+ })), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
487
+ label: 'layer.3DModelOptions',
488
+ collapsible: true
489
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeScale, visConfiguratorProps, {
490
+ disabled: false
491
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleX, visConfiguratorProps, {
492
+ disabled: false
493
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleY, visConfiguratorProps, {
494
+ disabled: false
495
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleZ, visConfiguratorProps, {
496
+ disabled: false
497
+ }))));
498
+ }
499
+ }, {
500
+ key: "_renderS2LayerConfig",
501
+ value: function _renderS2LayerConfig(_ref10) {
502
+ var layer = _ref10.layer,
503
+ visConfiguratorProps = _ref10.visConfiguratorProps,
504
+ layerConfiguratorProps = _ref10.layerConfiguratorProps,
505
+ layerChannelConfigProps = _ref10.layerChannelConfigProps;
506
+ var visConfig = layer.config.visConfig;
507
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
508
+ label: "layer.fillColor",
509
+ collapsible: true
510
+ }), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
511
+ channel: layer.visualChannels.color
512
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
513
+ label: "layer.strokeColor",
514
+ collapsible: true
515
+ }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
516
+ property: "strokeColorRange"
517
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
518
+ selectedColor: layer.config.visConfig.strokeColor,
519
+ property: "strokeColor"
520
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
521
+ channel: layer.visualChannels.strokeColor
522
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
523
+ label: "layer.strokeWidth",
524
+ collapsible: true
525
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
526
+ label: false
527
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
528
+ label: false
529
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
530
+ channel: layer.visualChannels.size
531
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
532
+ disabled: !visConfig.filled,
533
+ collapsible: true
534
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
535
+ channel: layer.visualChannels.height
536
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
537
+ label: "layerVisConfigs.elevationScale"
538
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.heightRange, visConfiguratorProps, {
539
+ label: "layerVisConfigs.heightRange"
540
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))));
541
+ }
542
+ }, {
543
+ key: "render",
544
+ value: function render() {
545
+ var _this = this;
546
+
547
+ var _this$props = this.props,
548
+ layer = _this$props.layer,
549
+ datasets = _this$props.datasets,
550
+ updateLayerConfig = _this$props.updateLayerConfig,
551
+ layerTypeOptions = _this$props.layerTypeOptions,
552
+ updateLayerType = _this$props.updateLayerType;
553
+
554
+ var _ref11 = layer.config.dataId ? datasets[layer.config.dataId] : {},
555
+ _ref11$fields = _ref11.fields,
556
+ fields = _ref11$fields === void 0 ? [] : _ref11$fields,
557
+ _ref11$fieldPairs = _ref11.fieldPairs,
558
+ fieldPairs = _ref11$fieldPairs === void 0 ? undefined : _ref11$fieldPairs;
559
+
560
+ var config = layer.config;
561
+ var visConfiguratorProps = getVisConfiguratorProps(this.props);
562
+ var layerConfiguratorProps = getLayerConfiguratorProps(this.props);
563
+ var layerChannelConfigProps = getLayerChannelConfigProps(this.props);
564
+ var dataset = getLayerDataset(datasets, layer);
565
+ var renderTemplate = layer.type && "_render".concat((0, _utils.capitalizeFirstLetter)(layer.type), "LayerConfig");
566
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, layer.layerInfoModal ? /*#__PURE__*/_react["default"].createElement(_howToButton["default"], {
567
+ onClick: function onClick() {
568
+ return _this.props.openModal(layer.layerInfoModal);
569
+ }
570
+ }) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
571
+ label: 'layer.basic',
572
+ collapsible: true,
573
+ expanded: !layer.hasAllColumns()
574
+ }, /*#__PURE__*/_react["default"].createElement(LayerTypeSelector, {
575
+ selected: layer.type,
576
+ options: layerTypeOptions // @ts-ignore
577
+ ,
578
+ onSelect: updateLayerType
579
+ }), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(SourceDataSelector, {
580
+ datasets: datasets,
581
+ id: layer.id,
582
+ dataId: config.dataId // @ts-ignore
583
+ ,
584
+ onSelect: function onSelect(value) {
585
+ return updateLayerConfig({
586
+ dataId: value
587
+ });
588
+ }
589
+ }), /*#__PURE__*/_react["default"].createElement(LayerColumnConfig, {
590
+ columnPairs: layer.columnPairs,
591
+ columns: layer.config.columns,
592
+ assignColumnPairs: layer.assignColumnPairs.bind(layer),
593
+ assignColumn: layer.assignColumn.bind(layer) // @ts-ignore
594
+ ,
595
+ columnLabels: layer.columnLabels,
596
+ fields: fields,
597
+ fieldPairs: fieldPairs,
598
+ updateLayerConfig: updateLayerConfig
599
+ }))), renderTemplate && this[renderTemplate] && this[renderTemplate]({
600
+ layer: layer,
601
+ dataset: dataset,
602
+ visConfiguratorProps: visConfiguratorProps,
603
+ layerChannelConfigProps: layerChannelConfigProps,
604
+ layerConfiguratorProps: layerConfiguratorProps
605
+ }));
606
+ }
607
+ }]);
608
+ return LayerConfigurator;
609
+ }(_react.Component);
610
+
611
+ return LayerConfigurator;
612
+ }
613
+
614
+ var LayerColorSelector = function LayerColorSelector(_ref12) {
615
+ var layer = _ref12.layer,
616
+ onChange = _ref12.onChange,
617
+ selectedColor = _ref12.selectedColor,
618
+ _ref12$property = _ref12.property,
619
+ property = _ref12$property === void 0 ? 'color' : _ref12$property,
620
+ _setColorUI = _ref12.setColorUI;
621
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_colorSelector["default"], {
622
+ colorSets: [{
623
+ selectedColor: selectedColor || layer.config.color,
624
+ setColor: function setColor(rgbValue) {
625
+ return onChange((0, _defineProperty2["default"])({}, property, rgbValue));
626
+ }
627
+ }],
628
+ colorUI: layer.config.colorUI[property],
629
+ setColorUI: function setColorUI(newConfig) {
630
+ return _setColorUI(property, newConfig);
631
+ }
632
+ }));
633
+ };
634
+
635
+ exports.LayerColorSelector = LayerColorSelector;
636
+
637
+ var ArcLayerColorSelector = function ArcLayerColorSelector(_ref13) {
638
+ var layer = _ref13.layer,
639
+ onChangeConfig = _ref13.onChangeConfig,
640
+ onChangeVisConfig = _ref13.onChangeVisConfig,
641
+ _ref13$property = _ref13.property,
642
+ property = _ref13$property === void 0 ? 'color' : _ref13$property,
643
+ _setColorUI2 = _ref13.setColorUI;
644
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_colorSelector["default"], {
645
+ colorSets: [{
646
+ selectedColor: layer.config.color,
647
+ setColor: function setColor(rgbValue) {
648
+ return onChangeConfig({
649
+ color: rgbValue
650
+ });
651
+ },
652
+ label: 'Source'
653
+ }, {
654
+ selectedColor: layer.config.visConfig.targetColor || layer.config.color,
655
+ setColor: function setColor(rgbValue) {
656
+ return onChangeVisConfig({
657
+ targetColor: rgbValue
658
+ });
659
+ },
660
+ label: 'Target'
661
+ }],
662
+ colorUI: layer.config.colorUI[property],
663
+ setColorUI: function setColorUI(newConfig) {
664
+ return _setColorUI2(property, newConfig);
665
+ }
666
+ }));
667
+ };
668
+
669
+ exports.ArcLayerColorSelector = ArcLayerColorSelector;
670
+
671
+ var LayerColorRangeSelector = function LayerColorRangeSelector(_ref14) {
672
+ var layer = _ref14.layer,
673
+ onChange = _ref14.onChange,
674
+ _ref14$property = _ref14.property,
675
+ property = _ref14$property === void 0 ? 'colorRange' : _ref14$property,
676
+ _setColorUI3 = _ref14.setColorUI;
677
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_colorSelector["default"], {
678
+ colorSets: [{
679
+ selectedColor: layer.config.visConfig[property],
680
+ isRange: true,
681
+ setColor: function setColor(colorRange) {
682
+ return onChange((0, _defineProperty2["default"])({}, property, colorRange));
683
+ }
684
+ }],
685
+ colorUI: layer.config.colorUI[property],
686
+ setColorUI: function setColorUI(newConfig) {
687
+ return _setColorUI3(property, newConfig);
688
+ }
689
+ }));
690
+ };
691
+
692
+ exports.LayerColorRangeSelector = LayerColorRangeSelector;
693
+ ChannelByValueSelectorFactory.deps = [_visConfigByFieldSelector["default"]];
694
+
695
+ function ChannelByValueSelectorFactory(VisConfigByFieldSelector) {
696
+ var ChannelByValueSelector = function ChannelByValueSelector(_ref15) {
697
+ var layer = _ref15.layer,
698
+ channel = _ref15.channel,
699
+ onChange = _ref15.onChange,
700
+ fields = _ref15.fields,
701
+ description = _ref15.description;
702
+ var channelScaleType = channel.channelScaleType,
703
+ field = channel.field,
704
+ key = channel.key,
705
+ property = channel.property,
706
+ scale = channel.scale,
707
+ defaultMeasure = channel.defaultMeasure,
708
+ supportedFieldTypes = channel.supportedFieldTypes;
709
+ var channelSupportedFieldTypes = supportedFieldTypes || _constants.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType];
710
+ var supportedFields = fields.filter(function (_ref16) {
711
+ var type = _ref16.type;
712
+ return channelSupportedFieldTypes.includes(type);
713
+ });
714
+ var scaleOptions = layer.getScaleOptions(channel.key);
715
+ var showScale = !layer.isAggregated && layer.config[scale] && scaleOptions.length > 1;
716
+ var defaultDescription = 'layerConfiguration.defaultDescription';
717
+ return /*#__PURE__*/_react["default"].createElement(VisConfigByFieldSelector, {
718
+ channel: channel.key,
719
+ description: description || defaultDescription,
720
+ fields: supportedFields,
721
+ id: layer.id,
722
+ key: "".concat(key, "-channel-selector"),
723
+ property: property,
724
+ placeholder: defaultMeasure || 'placeholder.selectField',
725
+ scaleOptions: scaleOptions,
726
+ scaleType: scale ? layer.config[scale] : null,
727
+ selectedField: layer.config[field],
728
+ showScale: showScale,
729
+ updateField: function updateField(val) {
730
+ return onChange((0, _defineProperty2["default"])({}, field, val), key);
731
+ },
732
+ updateScale: function updateScale(val) {
733
+ return onChange((0, _defineProperty2["default"])({}, scale, val), key);
734
+ }
735
+ });
736
+ };
737
+
738
+ return ChannelByValueSelector;
739
+ }
740
+
741
+ var AggregationScaleSelector = function AggregationScaleSelector(_ref17) {
742
+ var channel = _ref17.channel,
743
+ layer = _ref17.layer,
744
+ onChange = _ref17.onChange;
745
+ var scale = channel.scale,
746
+ key = channel.key;
747
+ var scaleOptions = layer.getScaleOptions(key);
748
+ return Array.isArray(scaleOptions) && scaleOptions.length > 1 ? /*#__PURE__*/_react["default"].createElement(_dimensionScaleSelector["default"], {
749
+ label: "".concat(key, " Scale"),
750
+ options: scaleOptions,
751
+ scaleType: layer.config[scale],
752
+ onSelect: function onSelect(val) {
753
+ return onChange((0, _defineProperty2["default"])({}, scale, val), key);
754
+ }
755
+ }) : null;
756
+ };
757
+
758
+ exports.AggregationScaleSelector = AggregationScaleSelector;
759
+
760
+ var AggregationTypeSelector = function AggregationTypeSelector(_ref18) {
761
+ var channel = _ref18.channel,
762
+ layer = _ref18.layer,
763
+ _onChange6 = _ref18.onChange;
764
+ var field = channel.field,
765
+ aggregation = channel.aggregation,
766
+ key = channel.key;
767
+ var selectedField = layer.config[field];
768
+ var visConfig = layer.config.visConfig; // aggregation should only be selectable when field is selected
769
+
770
+ var aggregationOptions = layer.getAggregationOptions(key);
771
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
772
+ id: 'layer.aggregateBy',
773
+ values: {
774
+ field: selectedField.name
775
+ }
776
+ })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
777
+ selectedItems: visConfig[aggregation],
778
+ options: aggregationOptions,
779
+ multiSelect: false,
780
+ searchable: false,
781
+ onChange: function onChange(value) {
782
+ return _onChange6({
783
+ visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, value))
784
+ }, channel.key);
785
+ }
786
+ }));
787
+ };
788
+ /* eslint-enable max-params */
789
+
790
+
791
+ exports.AggregationTypeSelector = AggregationTypeSelector;
792
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLWNvbmZpZ3VyYXRvci50c3giXSwibmFtZXMiOlsiU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsInByb3BzIiwidGhlbWUiLCJsYXllckNvbmZpZ3VyYXRvck1hcmdpbiIsImxheWVyQ29uZmlndXJhdG9yUGFkZGluZyIsImxheWVyQ29uZmlndXJhdG9yQm9yZGVyIiwibGF5ZXJDb25maWd1cmF0b3JCb3JkZXJDb2xvciIsIlN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yIiwiZ2V0TGF5ZXJGaWVsZHMiLCJkYXRhc2V0cyIsImxheWVyIiwiY29uZmlnIiwiZGF0YUlkIiwiZmllbGRzIiwiZ2V0TGF5ZXJEYXRhc2V0IiwiZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsIm9uQ2hhbmdlIiwidXBkYXRlTGF5ZXJDb25maWciLCJzZXRDb2xvclVJIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwiZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHMiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImdldExheWVyQ2hhbm5lbENvbmZpZ1Byb3BzIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnIiwiTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5IiwiZGVwcyIsIlNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdTbGlkZXJGYWN0b3J5IiwiVGV4dExhYmVsUGFuZWxGYWN0b3J5IiwiTGF5ZXJDb25maWdHcm91cEZhY3RvcnkiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sdW1uQ29uZmlnRmFjdG9yeSIsIkxheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkiLCJTb3VyY2VEYXRhU2VsZWN0b3IiLCJWaXNDb25maWdTbGlkZXIiLCJUZXh0TGFiZWxQYW5lbCIsIkxheWVyQ29uZmlnR3JvdXAiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yIiwiTGF5ZXJDb2x1bW5Db25maWciLCJMYXllclR5cGVTZWxlY3RvciIsIlZpc0NvbmZpZ1N3aXRjaCIsIkxheWVyQ29uZmlndXJhdG9yIiwiX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWciLCJ2aXNDb25maWd1cmF0b3JQcm9wcyIsImxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzIiwibGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsInZpc0NvbmZpZ1NldHRpbmdzIiwiZmlsbGVkIiwibGFiZWwiLCJjb2xvckZpZWxkIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsIm9wYWNpdHkiLCJ0eXBlIiwiTEFZRVJfVFlQRVMiLCJwb2ludCIsIm91dGxpbmUiLCJzdHJva2VDb2xvckZpZWxkIiwidmlzQ29uZmlnIiwic3Ryb2tlQ29sb3IiLCJ0aGlja25lc3MiLCJzaXplRmllbGQiLCJyYWRpdXMiLCJCb29sZWFuIiwicmFkaXVzUmFuZ2UiLCJmaXhlZFJhZGl1cyIsInNpemUiLCJ1cGRhdGVMYXllclRleHRMYWJlbCIsInRleHRMYWJlbCIsImNvbG9yQWdncmVnYXRpb24iLCJjb25kaXRpb24iLCJjbHVzdGVyUmFkaXVzIiwid2VpZ2h0IiwiX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWciLCJlbmFibGUzZCIsImVsZXZhdGlvbkJ5RGVzY3JpcHRpb24iLCJjb2xvckJ5RGVzY3JpcHRpb24iLCJwZXJjZW50aWxlIiwid29ybGRVbml0U2l6ZSIsImNvdmVyYWdlIiwiZWxldmF0aW9uU2NhbGUiLCJzaXplUmFuZ2UiLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiZWxldmF0aW9uUGVyY2VudGlsZSIsImNvdmVyYWdlRmllbGQiLCJjb3ZlcmFnZVJhbmdlIiwiYXJncyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJzb3VyY2VDb2xvciIsIm1ldGEiLCJmZWF0dXJlVHlwZXMiLCJwb2x5Z29uIiwic3Ryb2tlZCIsInRyYWlsTGVuZ3RoIiwic3Ryb2tlT3BhY2l0eSIsImhlaWdodCIsIndpcmVmcmFtZSIsInJhZGl1c0ZpZWxkIiwiZSIsInRhcmdldCIsImZpbGVzIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwic2NlbmVncmFwaCIsInNpemVTY2FsZSIsImFuZ2xlWCIsImFuZ2xlWSIsImFuZ2xlWiIsImhlaWdodFJhbmdlIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsImZpZWxkUGFpcnMiLCJ1bmRlZmluZWQiLCJkYXRhc2V0IiwicmVuZGVyVGVtcGxhdGUiLCJsYXllckluZm9Nb2RhbCIsIm9wZW5Nb2RhbCIsImhhc0FsbENvbHVtbnMiLCJpZCIsInZhbHVlIiwiY29sdW1uUGFpcnMiLCJjb2x1bW5zIiwiYXNzaWduQ29sdW1uUGFpcnMiLCJiaW5kIiwiYXNzaWduQ29sdW1uIiwiY29sdW1uTGFiZWxzIiwiQ29tcG9uZW50IiwiTGF5ZXJDb2xvclNlbGVjdG9yIiwic2VsZWN0ZWRDb2xvciIsInByb3BlcnR5Iiwic2V0Q29sb3IiLCJyZ2JWYWx1ZSIsImNvbG9yVUkiLCJuZXdDb25maWciLCJBcmNMYXllckNvbG9yU2VsZWN0b3IiLCJvbkNoYW5nZUNvbmZpZyIsIm9uQ2hhbmdlVmlzQ29uZmlnIiwidGFyZ2V0Q29sb3IiLCJMYXllckNvbG9yUmFuZ2VTZWxlY3RvciIsImlzUmFuZ2UiLCJjb2xvclJhbmdlIiwiVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvciIsImNoYW5uZWwiLCJkZXNjcmlwdGlvbiIsImNoYW5uZWxTY2FsZVR5cGUiLCJmaWVsZCIsImtleSIsInNjYWxlIiwiZGVmYXVsdE1lYXN1cmUiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzdXBwb3J0ZWRGaWVsZHMiLCJmaWx0ZXIiLCJpbmNsdWRlcyIsInNjYWxlT3B0aW9ucyIsImdldFNjYWxlT3B0aW9ucyIsInNob3dTY2FsZSIsImlzQWdncmVnYXRlZCIsImxlbmd0aCIsImRlZmF1bHREZXNjcmlwdGlvbiIsInZhbCIsIkFnZ3JlZ2F0aW9uU2NhbGVTZWxlY3RvciIsIkFycmF5IiwiaXNBcnJheSIsIkFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yIiwiYWdncmVnYXRpb24iLCJzZWxlY3RlZEZpZWxkIiwiYWdncmVnYXRpb25PcHRpb25zIiwiZ2V0QWdncmVnYXRpb25PcHRpb25zIiwibmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUE7Ozs7Ozs7Ozs7OztBQThFQSxJQUFNQSx1QkFBdUIsR0FBR0MsNkJBQU9DLEdBQVAsQ0FBV0MsS0FBWCxDQUFpQjtBQUMvQ0MsRUFBQUEsU0FBUyxFQUFFO0FBRG9DLENBQWpCLENBQUgsOExBSWIsVUFBQUMsS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0MsS0FBTixDQUFZQyx1QkFBaEI7QUFBQSxDQUpRLEVBS2hCLFVBQUFGLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUUsd0JBQWhCO0FBQUEsQ0FMVyxFQU1aLFVBQUFILEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUcsdUJBQWhCO0FBQUEsQ0FOTyxFQU92QixVQUFBSixLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlJLDRCQUFoQjtBQUFBLENBUGtCLENBQTdCOztBQVVBLElBQU1DLDZCQUE2QixHQUFHViw2QkFBT0MsR0FBUCxDQUFXQyxLQUFYLENBQWlCO0FBQ3JEQyxFQUFBQSxTQUFTLEVBQUU7QUFEMEMsQ0FBakIsQ0FBSCwrR0FBbkM7O0FB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LEtBSmQ7QUFLRSxJQUFBLFFBQVEsRUFBRSxrQkFBQWxELEtBQUs7QUFBQSxhQUNiMUcsVUFBUSxDQUNOO0FBQ0UyQyxRQUFBQSxTQUFTLGtDQUNKakQsS0FBSyxDQUFDQyxNQUFOLENBQWFnRCxTQURULDRDQUVOK0csV0FGTSxFQUVrQmhELEtBRmxCO0FBRFgsT0FETSxFQU9Od0IsT0FBTyxDQUFDSSxHQVBGLENBREs7QUFBQTtBQUxqQixJQUpGLENBREY7QUF3QkQsQ0FoQ007QUFpQ1AiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIEZyYWdtZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuXG5pbXBvcnQge0lucHV0LCBQYW5lbExhYmVsLCBTaWRlUGFuZWxTZWN0aW9ufSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IEl0ZW1TZWxlY3RvciBmcm9tICcuLi8uLi9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcblxuaW1wb3J0IFZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLWJ5LWZpZWxkLXNlbGVjdG9yJztcbmltcG9ydCBMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnkgZnJvbSAnLi9sYXllci1jb2x1bW4tY29uZmlnJztcbmltcG9ydCBMYXllclR5cGVTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9sYXllci10eXBlLXNlbGVjdG9yJztcbmltcG9ydCBEaW1lbnNpb25TY2FsZVNlbGVjdG9yIGZyb20gJy4vZGltZW5zaW9uLXNjYWxlLXNlbGVjdG9yJztcbmltcG9ydCBDb2xvclNlbGVjdG9yIGZyb20gJy4vY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL3NvdXJjZS1kYXRhLXNlbGVjdG9yJztcbmltcG9ydCBWaXNDb25maWdTd2l0Y2hGYWN0b3J5IGZyb20gJy4vdmlzLWNvbmZpZy1zd2l0Y2gnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IFRleHRMYWJlbFBhbmVsRmFjdG9yeSBmcm9tICcuL3RleHQtbGFiZWwtcGFuZWwnO1xuaW1wb3J0IEhvd1RvQnV0dG9uIGZyb20gJy4vaG93LXRvLWJ1dHRvbic7XG5cbmltcG9ydCB7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsIExBWUVSX1RZUEVTLCBDb2xvclJhbmdlfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xheWVyLCBMYXllckJhc2VDb25maWcsIFZpc3VhbENoYW5uZWwsIEFnZ3JlZ2F0aW9uTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcblxuaW1wb3J0IHtOZXN0ZWRQYXJ0aWFsLCBSR0JDb2xvciwgTGF5ZXJWaXNDb25maWcsIENvbG9yVUksIEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7dG9nZ2xlTW9kYWwsIEFjdGlvbkhhbmRsZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0RhdGFzZXRzfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxudHlwZSBMYXllckNvbmZpZ3VyYXRvclByb3BzID0ge1xuICBsYXllcjogTGF5ZXI7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgbGF5ZXJUeXBlT3B0aW9uczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBpY29uOiBSZWFjdC5FbGVtZW50VHlwZTtcbiAgICByZXF1aXJlRGF0YTogYm9vbGVhbjtcbiAgfVtdO1xuICBvcGVuTW9kYWw6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZU1vZGFsPjtcbiAgdXBkYXRlTGF5ZXJDb25maWc6IChuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPikgPT4gdm9pZDtcbiAgdXBkYXRlTGF5ZXJUeXBlOiAobmV3VHlwZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVMYXllclZpc0NvbmZpZzogKG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz4pID0+IHZvaWQ7XG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZzogKFxuICAgIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICAgIGNoYW5uZWw6IHN0cmluZyxcbiAgICBuZXdWaXNDb25maWc/OiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPlxuICApID0+IHZvaWQ7XG4gIHVwZGF0ZUxheWVyQ29sb3JVSTogKHByb3A6IHN0cmluZywgbmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+KSA9PiB2b2lkO1xuICB1cGRhdGVMYXllclRleHRMYWJlbDogKGlkeDogbnVtYmVyIHwgJ2FsbCcsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbn07XG5cbnR5cGUgTGF5ZXJDb2xvclNlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgb25DaGFuZ2U6ICh2OiBSZWNvcmQ8c3RyaW5nLCBSR0JDb2xvcj4pID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBSR0JDb2xvcjtcbiAgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHNldENvbG9yVUk6IChwcm9wOiBzdHJpbmcsIG5ld0NvbmZpZzogTmVzdGVkUGFydGlhbDxDb2xvclVJPikgPT4gdm9pZDtcbn07XG5cbnR5cGUgQXJjTGF5ZXJDb2xvclNlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgb25DaGFuZ2VDb25maWc6ICh2OiB7Y29sb3I6IFJHQkNvbG9yfSkgPT4gdm9pZDtcbiAgb25DaGFuZ2VWaXNDb25maWc6ICh2OiB7dGFyZ2V0Q29sb3I6IFJHQkNvbG9yfSkgPT4gdm9pZDtcbiAgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHNldENvbG9yVUk6IChwcm9wOiBzdHJpbmcsIG5ld0NvbmZpZzogTmVzdGVkUGFydGlhbDxDb2xvclVJPikgPT4gdm9pZDtcbn07XG5cbnR5cGUgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JQcm9wcyA9IHtcbiAgbGF5ZXI6IExheWVyO1xuICBvbkNoYW5nZTogKHY6IFJlY29yZDxzdHJpbmcsIENvbG9yUmFuZ2U+KSA9PiB2b2lkO1xuICBwcm9wZXJ0eT86IHN0cmluZztcbiAgc2V0Q29sb3JVSTogKHByb3A6IHN0cmluZywgbmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+KSA9PiB2b2lkO1xufTtcblxudHlwZSBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgY2hhbm5lbDogVmlzdWFsQ2hhbm5lbDtcbiAgb25DaGFuZ2U6IChcbiAgICB2YWw6IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSB8IG51bGxcbiAgICA+LFxuICAgIGtleTogc3RyaW5nXG4gICkgPT4gdm9pZDtcbiAgZmllbGRzOiBGaWVsZFtdO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufTtcblxudHlwZSBBZ2dyZWdhdGlvblNlbGVjdG9yUHJvcHMgPSB7XG4gIGNoYW5uZWw6IFZpc3VhbENoYW5uZWw7XG4gIGxheWVyOiBBZ2dyZWdhdGlvbkxheWVyO1xuICBvbkNoYW5nZTogKFxuICAgIHZhbDogUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdIHwgbnVsbFxuICAgID4sXG4gICAga2V5OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufTtcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yUGFkZGluZ307XG4gIGJvcmRlci1sZWZ0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyfSBkYXNoZWRcbiAgICAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZ19fdmlzdWFsQy1jb25maWcnXG59KWBcbiAgbWFyZ2luLXRvcDogMTJweDtcbmA7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckZpZWxkcyA9IChkYXRhc2V0czogRGF0YXNldHMsIGxheWVyOiBMYXllcikgPT5cbiAgbGF5ZXIuY29uZmlnPy5kYXRhSWQgJiYgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXS5maWVsZHMgOiBbXTtcblxuZXhwb3J0IGNvbnN0IGdldExheWVyRGF0YXNldCA9IChkYXRhc2V0czogRGF0YXNldHMsIGxheWVyOiBMYXllcikgPT5cbiAgbGF5ZXIuY29uZmlnPy5kYXRhSWQgJiYgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSA6IG51bGw7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzID0gKHByb3BzOiBMYXllckNvbmZpZ3VyYXRvclByb3BzKSA9PiAoe1xuICBsYXllcjogcHJvcHMubGF5ZXIsXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHMgPSAocHJvcHM6IExheWVyQ29uZmlndXJhdG9yUHJvcHMpID0+ICh7XG4gIGxheWVyOiBwcm9wcy5sYXllcixcbiAgZmllbGRzOiBnZXRMYXllckZpZWxkcyhwcm9wcy5kYXRhc2V0cywgcHJvcHMubGF5ZXIpLFxuICBvbkNoYW5nZTogcHJvcHMudXBkYXRlTGF5ZXJWaXNDb25maWcsXG4gIHNldENvbG9yVUk6IHByb3BzLnVwZGF0ZUxheWVyQ29sb3JVSVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyA9IChwcm9wczogTGF5ZXJDb25maWd1cmF0b3JQcm9wcykgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWdcbn0pO1xuXG5MYXllckNvbmZpZ3VyYXRvckZhY3RvcnkuZGVwcyA9IFtcbiAgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSxcbiAgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSxcbiAgVGV4dExhYmVsUGFuZWxGYWN0b3J5LFxuICBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSxcbiAgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnksXG4gIExheWVyQ29sdW1uQ29uZmlnRmFjdG9yeSxcbiAgTGF5ZXJUeXBlU2VsZWN0b3JGYWN0b3J5LFxuICBWaXNDb25maWdTd2l0Y2hGYWN0b3J5XG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIFNvdXJjZURhdGFTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeT4sXG4gIFZpc0NvbmZpZ1NsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeT4sXG4gIFRleHRMYWJlbFBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBUZXh0TGFiZWxQYW5lbEZhY3Rvcnk+LFxuICBMYXllckNvbmZpZ0dyb3VwOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeT4sXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5PixcbiAgTGF5ZXJDb2x1bW5Db25maWc6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sdW1uQ29uZmlnRmFjdG9yeT4sXG4gIExheWVyVHlwZVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllclR5cGVTZWxlY3RvckZhY3Rvcnk+LFxuICBWaXNDb25maWdTd2l0Y2g6IFJldHVyblR5cGU8dHlwZW9mIFZpc0NvbmZpZ1N3aXRjaEZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPExheWVyQ29uZmlndXJhdG9yUHJvcHM+IHtcbiAgY2xhc3MgTGF5ZXJDb25maWd1cmF0b3IgZXh0ZW5kcyBDb21wb25lbnQ8TGF5ZXJDb25maWd1cmF0b3JQcm9wcz4ge1xuICAgIF9yZW5kZXJQb2ludExheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckljb25MYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIEZpbGwgQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi4obGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkIHx8IHtsYWJlbDogJ2xheWVyLmNvbG9yJ30pfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIG91dGxpbmUgY29sb3IgKi99XG4gICAgICAgICAge2xheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm91dGxpbmV9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IHByb3BlcnR5PVwic3Ryb2tlQ29sb3JSYW5nZVwiIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcudmlzQ29uZmlnLm91dGxpbmV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihsYXllci5jb25maWcuc2l6ZUZpZWxkKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGQgfHwgbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1c31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci5jb25maWcuc2l6ZUZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2hcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maXhlZFJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRleHQgbGFiZWwgKi99XG4gICAgICAgICAgPFRleHRMYWJlbFBhbmVsXG4gICAgICAgICAgICBmaWVsZHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmZpZWxkc31cbiAgICAgICAgICAgIHVwZGF0ZUxheWVyVGV4dExhYmVsPXt0aGlzLnByb3BzLnVwZGF0ZUxheWVyVGV4dExhYmVsfVxuICAgICAgICAgICAgdGV4dExhYmVsPXtsYXllci5jb25maWcudGV4dExhYmVsfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJDbHVzdGVyTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uU2NhbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb24uY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBDbHVzdGVyIFJhZGl1cyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnJhZGl1cyd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY2x1c3RlclJhZGl1c30gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXNSYW5nZX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJIZWF0bWFwTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnJhZGl1cyd9PlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHsvKiBXZWlnaHQgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci53ZWlnaHQnfT5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLndlaWdodH1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJHcmlkTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnKHByb3BzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVySGV4YWdvbkxheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtjb25maWd9ID0gbGF5ZXI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZpc0NvbmZpZzoge2VuYWJsZTNkfVxuICAgICAgfSA9IGNvbmZpZztcbiAgICAgIGNvbnN0IGVsZXZhdGlvbkJ5RGVzY3JpcHRpb24gPSAnbGF5ZXIuZWxldmF0aW9uQnlEZXNjcmlwdGlvbic7XG4gICAgICBjb25zdCBjb2xvckJ5RGVzY3JpcHRpb24gPSAnbGF5ZXIuY29sb3JCeURlc2NyaXB0aW9uJztcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8QWdncmVnYXRpb25TY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbi5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25UeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2NvbG9yQnlEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZSAmJlxuICAgICAgICAgICAgICBsYXllci52aXNDb25maWdTZXR0aW5ncy5wZXJjZW50aWxlLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5wZXJjZW50aWxlfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBDZWxsIHNpemUgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLndvcmxkVW5pdFNpemV9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY292ZXJhZ2V9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIEVsZXZhdGlvbiAqL31cbiAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2QgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuaGVpZ2h0TXVsdGlwbGllclwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtlbGV2YXRpb25CeURlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFlbmFibGUzZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRSYW5nZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3Rvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmVuYWJsZUhlaWdodFpvb21GYWN0b3JcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVBZ2dyZWdhdGlvbi5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZUFnZ3JlZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25QZXJjZW50aWxlLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uUGVyY2VudGlsZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogU2hhbiBtb3ZlIHRoZXNlIGludG8gbGF5ZXIgY2xhc3NcbiAgICBfcmVuZGVySGV4YWdvbklkTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBDb3ZlcmFnZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvdmVyYWdlJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7IWxheWVyLmNvbmZpZy5jb3ZlcmFnZUZpZWxkID8gKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY292ZXJhZ2V9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogaGVpZ2h0ICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuaGVpZ2h0UmFuZ2VcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3J9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJBcmNMYXllckNvbmZpZyhhcmdzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGluZUxheWVyQ29uZmlnKGFyZ3MpO1xuICAgIH1cblxuICAgIF9yZW5kZXJMaW5lTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEFyY0xheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgICBzZXRDb2xvclVJPXtsYXllckNvbmZpZ3VyYXRvclByb3BzLnNldENvbG9yVUl9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VDb25maWc9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWc9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zb3VyY2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRoaWNrbmVzcyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnN0cm9rZSd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGR9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBlbGV2YXRpb24gc2NhbGUgKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuZWxldmF0aW9uU2NhbGVcIiBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJUcmlwTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWV0YToge2ZlYXR1cmVUeXBlcyA9IHt9fVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogVHJhaWwgTGVuZ3RoKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci50cmFpbExlbmd0aFwiXG4gICAgICAgICAgICBkZXNjcmlwdGlvbj1cImxheWVyLnRyYWlsTGVuZ3RoRGVzY3JpcHRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRyYWlsTGVuZ3RofVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR2VvanNvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1ldGE6IHtmZWF0dXJlVHlwZXMgPSB7fX0sXG4gICAgICAgIGNvbmZpZzoge3Zpc0NvbmZpZ31cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiB8fCBmZWF0dXJlVHlwZXMucG9pbnQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCJcbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBzdHJva2UgY29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gcHJvcGVydHk9XCJzdHJva2VDb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZU9wYWNpdHl9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4uKGZlYXR1cmVUeXBlcy5wb2x5Z29uID8gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlZCA6IHt9KX1cbiAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3Rvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud2lyZWZyYW1lfSAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICB7ZmVhdHVyZVR5cGVzLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgeyFsYXllci5jb25maWcucmFkaXVzRmllbGQgPyAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyM0RMYXllckNvbmZpZyh7bGF5ZXIsIHZpc0NvbmZpZ3VyYXRvclByb3BzfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbCd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLmdsYiwuZ2x0ZlwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXNbMF0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZS50YXJnZXQuZmlsZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe3NjZW5lZ3JhcGg6IHVybH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbE9wdGlvbnMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVTY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYW5nbGVYfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5hbmdsZVl9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFuZ2xlWn1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlclMyTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29uZmlnOiB7dmlzQ29uZmlnfVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIFN0cm9rZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmVsZXZhdGlvblNjYWxlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuaGVpZ2h0UmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53aXJlZnJhbWV9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2xheWVyLCBkYXRhc2V0cywgdXBkYXRlTGF5ZXJDb25maWcsIGxheWVyVHlwZU9wdGlvbnMsIHVwZGF0ZUxheWVyVHlwZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2ZpZWxkcyA9IFtdLCBmaWVsZFBhaXJzID0gdW5kZWZpbmVkfSA9IGxheWVyLmNvbmZpZy5kYXRhSWRcbiAgICAgICAgPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcblxuICAgICAgY29uc3QgdmlzQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRWaXNDb25maWd1cmF0b3JQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSBnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBnZXRMYXllckRhdGFzZXQoZGF0YXNldHMsIGxheWVyKTtcbiAgICAgIGNvbnN0IHJlbmRlclRlbXBsYXRlID0gbGF5ZXIudHlwZSAmJiBgX3JlbmRlciR7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxheWVyLnR5cGUpfUxheWVyQ29uZmlnYDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHtsYXllci5sYXllckluZm9Nb2RhbCA/IChcbiAgICAgICAgICAgIDxIb3dUb0J1dHRvbiBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9wZW5Nb2RhbChsYXllci5sYXllckluZm9Nb2RhbCl9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5iYXNpYyd9IGNvbGxhcHNpYmxlIGV4cGFuZGVkPXshbGF5ZXIuaGFzQWxsQ29sdW1ucygpfT5cbiAgICAgICAgICAgIDxMYXllclR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICBzZWxlY3RlZD17bGF5ZXIudHlwZX1cbiAgICAgICAgICAgICAgb3B0aW9ucz17bGF5ZXJUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBvblNlbGVjdD17dXBkYXRlTGF5ZXJUeXBlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFNvdXJjZURhdGFTZWxlY3RvclxuICAgICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgICBpZD17bGF5ZXIuaWR9XG4gICAgICAgICAgICAgICAgZGF0YUlkPXtjb25maWcuZGF0YUlkfVxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBvblNlbGVjdD17KHZhbHVlOiBzdHJpbmcpID0+IHVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IHZhbHVlfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxMYXllckNvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgICAgIGNvbHVtblBhaXJzPXtsYXllci5jb2x1bW5QYWlyc31cbiAgICAgICAgICAgICAgICBjb2x1bW5zPXtsYXllci5jb25maWcuY29sdW1uc31cbiAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW5QYWlycz17bGF5ZXIuYXNzaWduQ29sdW1uUGFpcnMuYmluZChsYXllcil9XG4gICAgICAgICAgICAgICAgYXNzaWduQ29sdW1uPXtsYXllci5hc3NpZ25Db2x1bW4uYmluZChsYXllcil9XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGNvbHVtbkxhYmVscz17bGF5ZXIuY29sdW1uTGFiZWxzfVxuICAgICAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgICAgIGZpZWxkUGFpcnM9e2ZpZWxkUGFpcnN9XG4gICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3VwZGF0ZUxheWVyQ29uZmlnfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAge3JlbmRlclRlbXBsYXRlICYmXG4gICAgICAgICAgICB0aGlzW3JlbmRlclRlbXBsYXRlXSAmJlxuICAgICAgICAgICAgdGhpc1tyZW5kZXJUZW1wbGF0ZV0oe1xuICAgICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgICAgZGF0YXNldCxcbiAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICAgICAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzLFxuICAgICAgICAgICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9TdHlsZWRMYXllckNvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIExheWVyQ29uZmlndXJhdG9yO1xufVxuXG5leHBvcnQgY29uc3QgTGF5ZXJDb2xvclNlbGVjdG9yID0gKHtcbiAgbGF5ZXIsXG4gIG9uQ2hhbmdlLFxuICBzZWxlY3RlZENvbG9yLFxuICBwcm9wZXJ0eSA9ICdjb2xvcicsXG4gIHNldENvbG9yVUlcbn06IExheWVyQ29sb3JTZWxlY3RvclByb3BzKSA9PiAoXG4gIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgIDxDb2xvclNlbGVjdG9yXG4gICAgICBjb2xvclNldHM9e1tcbiAgICAgICAge1xuICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IHNlbGVjdGVkQ29sb3IgfHwgbGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgICAgICAgIHNldENvbG9yOiAocmdiVmFsdWU6IFJHQkNvbG9yKSA9PiBvbkNoYW5nZSh7W3Byb3BlcnR5XTogcmdiVmFsdWV9KVxuICAgICAgICB9XG4gICAgICBdfVxuICAgICAgY29sb3JVST17bGF5ZXIuY29uZmlnLmNvbG9yVUlbcHJvcGVydHldfVxuICAgICAgc2V0Q29sb3JVST17bmV3Q29uZmlnID0+IHNldENvbG9yVUkocHJvcGVydHksIG5ld0NvbmZpZyl9XG4gICAgLz5cbiAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuKTtcblxuZXhwb3J0IGNvbnN0IEFyY0xheWVyQ29sb3JTZWxlY3RvciA9ICh7XG4gIGxheWVyLFxuICBvbkNoYW5nZUNvbmZpZyxcbiAgb25DaGFuZ2VWaXNDb25maWcsXG4gIHByb3BlcnR5ID0gJ2NvbG9yJyxcbiAgc2V0Q29sb3JVSVxufTogQXJjTGF5ZXJDb2xvclNlbGVjdG9yUHJvcHMpID0+IChcbiAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgPENvbG9yU2VsZWN0b3JcbiAgICAgIGNvbG9yU2V0cz17W1xuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0ZWRDb2xvcjogbGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgICAgICAgIHNldENvbG9yOiAocmdiVmFsdWU6IFJHQkNvbG9yKSA9PiBvbkNoYW5nZUNvbmZpZyh7Y29sb3I6IHJnYlZhbHVlfSksXG4gICAgICAgICAgbGFiZWw6ICdTb3VyY2UnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzZWxlY3RlZENvbG9yOiBsYXllci5jb25maWcudmlzQ29uZmlnLnRhcmdldENvbG9yIHx8IGxheWVyLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICBzZXRDb2xvcjogKHJnYlZhbHVlOiBSR0JDb2xvcikgPT4gb25DaGFuZ2VWaXNDb25maWcoe3RhcmdldENvbG9yOiByZ2JWYWx1ZX0pLFxuICAgICAgICAgIGxhYmVsOiAnVGFyZ2V0J1xuICAgICAgICB9XG4gICAgICBdfVxuICAgICAgY29sb3JVST17bGF5ZXIuY29uZmlnLmNvbG9yVUlbcHJvcGVydHldfVxuICAgICAgc2V0Q29sb3JVST17bmV3Q29uZmlnID0+IHNldENvbG9yVUkocHJvcGVydHksIG5ld0NvbmZpZyl9XG4gICAgLz5cbiAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuKTtcblxuZXhwb3J0IGNvbnN0IExheWVyQ29sb3JSYW5nZVNlbGVjdG9yID0gKHtcbiAgbGF5ZXIsXG4gIG9uQ2hhbmdlLFxuICBwcm9wZXJ0eSA9ICdjb2xvclJhbmdlJyxcbiAgc2V0Q29sb3JVSVxufTogTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JQcm9wcykgPT4gKFxuICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICA8Q29sb3JTZWxlY3RvclxuICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgIHtcbiAgICAgICAgICBzZWxlY3RlZENvbG9yOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BlcnR5XSxcbiAgICAgICAgICBpc1JhbmdlOiB0cnVlLFxuICAgICAgICAgIHNldENvbG9yOiAoY29sb3JSYW5nZTogQ29sb3JSYW5nZSkgPT4gb25DaGFuZ2Uoe1twcm9wZXJ0eV06IGNvbG9yUmFuZ2V9KVxuICAgICAgICB9XG4gICAgICBdfVxuICAgICAgY29sb3JVST17bGF5ZXIuY29uZmlnLmNvbG9yVUlbcHJvcGVydHldfVxuICAgICAgc2V0Q29sb3JVST17bmV3Q29uZmlnID0+IHNldENvbG9yVUkocHJvcGVydHksIG5ld0NvbmZpZyl9XG4gICAgLz5cbiAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuKTtcblxuQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkuZGVwcyA9IFtWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JGYWN0b3J5XTtcblxuZXhwb3J0IGZ1bmN0aW9uIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5KFxuICBWaXNDb25maWdCeUZpZWxkU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIFZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvckZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvciA9ICh7XG4gICAgbGF5ZXIsXG4gICAgY2hhbm5lbCxcbiAgICBvbkNoYW5nZSxcbiAgICBmaWVsZHMsXG4gICAgZGVzY3JpcHRpb25cbiAgfTogQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvclByb3BzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY2hhbm5lbFNjYWxlVHlwZSxcbiAgICAgIGZpZWxkLFxuICAgICAga2V5LFxuICAgICAgcHJvcGVydHksXG4gICAgICBzY2FsZSxcbiAgICAgIGRlZmF1bHRNZWFzdXJlLFxuICAgICAgc3VwcG9ydGVkRmllbGRUeXBlc1xuICAgIH0gPSBjaGFubmVsO1xuICAgIGNvbnN0IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzID1cbiAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMgfHwgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTW2NoYW5uZWxTY2FsZVR5cGVdO1xuICAgIGNvbnN0IHN1cHBvcnRlZEZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoKHt0eXBlfSkgPT4gY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMuaW5jbHVkZXModHlwZSkpO1xuICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGxheWVyLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsLmtleSk7XG4gICAgY29uc3Qgc2hvd1NjYWxlID0gIWxheWVyLmlzQWdncmVnYXRlZCAmJiBsYXllci5jb25maWdbc2NhbGVdICYmIHNjYWxlT3B0aW9ucy5sZW5ndGggPiAxO1xuICAgIGNvbnN0IGRlZmF1bHREZXNjcmlwdGlvbiA9ICdsYXllckNvbmZpZ3VyYXRpb24uZGVmYXVsdERlc2NyaXB0aW9uJztcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yXG4gICAgICAgIGNoYW5uZWw9e2NoYW5uZWwua2V5fVxuICAgICAgICBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb24gfHwgZGVmYXVsdERlc2NyaXB0aW9ufVxuICAgICAgICBmaWVsZHM9e3N1cHBvcnRlZEZpZWxkc31cbiAgICAgICAgaWQ9e2xheWVyLmlkfVxuICAgICAgICBrZXk9e2Ake2tleX0tY2hhbm5lbC1zZWxlY3RvcmB9XG4gICAgICAgIHByb3BlcnR5PXtwcm9wZXJ0eX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e2RlZmF1bHRNZWFzdXJlIHx8ICdwbGFjZWhvbGRlci5zZWxlY3RGaWVsZCd9XG4gICAgICAgIHNjYWxlT3B0aW9ucz17c2NhbGVPcHRpb25zfVxuICAgICAgICBzY2FsZVR5cGU9e3NjYWxlID8gbGF5ZXIuY29uZmlnW3NjYWxlXSA6IG51bGx9XG4gICAgICAgIHNlbGVjdGVkRmllbGQ9e2xheWVyLmNvbmZpZ1tmaWVsZF19XG4gICAgICAgIHNob3dTY2FsZT17c2hvd1NjYWxlfVxuICAgICAgICB1cGRhdGVGaWVsZD17dmFsID0+IG9uQ2hhbmdlKHtbZmllbGRdOiB2YWx9LCBrZXkpfVxuICAgICAgICB1cGRhdGVTY2FsZT17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yO1xufVxuXG5leHBvcnQgY29uc3QgQWdncmVnYXRpb25TY2FsZVNlbGVjdG9yID0gKHtjaGFubmVsLCBsYXllciwgb25DaGFuZ2V9OiBBZ2dyZWdhdGlvblNlbGVjdG9yUHJvcHMpID0+IHtcbiAgY29uc3Qge3NjYWxlLCBrZXl9ID0gY2hhbm5lbDtcbiAgY29uc3Qgc2NhbGVPcHRpb25zID0gbGF5ZXIuZ2V0U2NhbGVPcHRpb25zKGtleSk7XG5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc2NhbGVPcHRpb25zKSAmJiBzY2FsZU9wdGlvbnMubGVuZ3RoID4gMSA/IChcbiAgICA8RGltZW5zaW9uU2NhbGVTZWxlY3RvclxuICAgICAgbGFiZWw9e2Ake2tleX0gU2NhbGVgfVxuICAgICAgb3B0aW9ucz17c2NhbGVPcHRpb25zfVxuICAgICAgc2NhbGVUeXBlPXtsYXllci5jb25maWdbc2NhbGVdfVxuICAgICAgb25TZWxlY3Q9e3ZhbCA9PiBvbkNoYW5nZSh7W3NjYWxlXTogdmFsfSwga2V5KX1cbiAgICAvPlxuICApIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBBZ2dyZWdhdGlvblR5cGVTZWxlY3RvciA9ICh7Y2hhbm5lbCwgbGF5ZXIsIG9uQ2hhbmdlfTogQWdncmVnYXRpb25TZWxlY3RvclByb3BzKSA9PiB7XG4gIGNvbnN0IHtmaWVsZCwgYWdncmVnYXRpb24sIGtleX0gPSBjaGFubmVsO1xuICBjb25zdCBzZWxlY3RlZEZpZWxkID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgY29uc3Qge3Zpc0NvbmZpZ30gPSBsYXllci5jb25maWc7XG5cbiAgLy8gYWdncmVnYXRpb24gc2hvdWxkIG9ubHkgYmUgc2VsZWN0YWJsZSB3aGVuIGZpZWxkIGlzIHNlbGVjdGVkXG4gIGNvbnN0IGFnZ3JlZ2F0aW9uT3B0aW9ucyA9IGxheWVyLmdldEFnZ3JlZ2F0aW9uT3B0aW9ucyhrZXkpO1xuXG4gIHJldHVybiAoXG4gICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydsYXllci5hZ2dyZWdhdGVCeSd9IHZhbHVlcz17e2ZpZWxkOiBzZWxlY3RlZEZpZWxkLm5hbWV9fSAvPlxuICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgPEl0ZW1TZWxlY3RvclxuICAgICAgICBzZWxlY3RlZEl0ZW1zPXt2aXNDb25maWdbYWdncmVnYXRpb24gYXMgc3RyaW5nXX1cbiAgICAgICAgb3B0aW9ucz17YWdncmVnYXRpb25PcHRpb25zfVxuICAgICAgICBtdWx0aVNlbGVjdD17ZmFsc2V9XG4gICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICBvbkNoYW5nZT17dmFsdWUgPT5cbiAgICAgICAgICBvbkNoYW5nZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAgICAgICAgICAgICBbYWdncmVnYXRpb24gYXMgc3RyaW5nXTogdmFsdWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoYW5uZWwua2V5XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgKTtcbn07XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1wYXJhbXMgKi9cbiJdfQ==