@carto/kepler.gl 0.1.0-alpha.0 → 0.1.0-next.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 (872) hide show
  1. package/dist/actions/action-wrapper.d.ts +115 -115
  2. package/dist/actions/action-wrapper.js +190 -0
  3. package/dist/actions/actions.d.ts +195 -195
  4. package/dist/actions/actions.js +194 -0
  5. package/dist/actions/identity-actions.d.ts +61 -61
  6. package/dist/actions/identity-actions.js +101 -0
  7. package/dist/actions/index.d.ts +9 -9
  8. package/dist/actions/index.js +144 -0
  9. package/dist/actions/map-state-actions.d.ts +69 -69
  10. package/dist/actions/map-state-actions.js +106 -0
  11. package/dist/actions/map-style-actions.d.ts +146 -146
  12. package/dist/actions/map-style-actions.js +176 -0
  13. package/dist/actions/provider-actions.d.ts +153 -153
  14. package/dist/actions/provider-actions.js +144 -0
  15. package/dist/actions/ui-state-actions.d.ts +300 -300
  16. package/dist/actions/ui-state-actions.js +356 -0
  17. package/dist/actions/vis-state-actions.d.ts +821 -821
  18. package/dist/actions/vis-state-actions.js +900 -0
  19. package/dist/cloud-providers/index.d.ts +2 -2
  20. package/dist/cloud-providers/index.js +22 -0
  21. package/dist/cloud-providers/provider.d.ts +176 -176
  22. package/dist/cloud-providers/provider.js +346 -0
  23. package/dist/components/bottom-widget.d.ts +47 -47
  24. package/dist/components/bottom-widget.js +217 -0
  25. package/dist/components/common/action-panel.d.ts +27 -27
  26. package/dist/components/common/action-panel.js +133 -0
  27. package/dist/components/common/animation-control/animation-control.d.ts +24 -24
  28. package/dist/components/common/animation-control/animation-control.js +129 -0
  29. package/dist/components/common/animation-control/animation-controller.d.ts +16 -16
  30. package/dist/components/common/animation-control/animation-controller.js +270 -0
  31. package/dist/components/common/animation-control/animation-speed-slider.d.ts +12 -12
  32. package/dist/components/common/animation-control/animation-speed-slider.js +88 -0
  33. package/dist/components/common/animation-control/floating-time-display.d.ts +9 -9
  34. package/dist/components/common/animation-control/floating-time-display.js +149 -0
  35. package/dist/components/common/animation-control/playback-controls.d.ts +72 -72
  36. package/dist/components/common/animation-control/playback-controls.js +261 -0
  37. package/dist/components/common/animation-control/speed-control.d.ts +13 -13
  38. package/dist/components/common/animation-control/speed-control.js +70 -0
  39. package/dist/components/common/checkbox.d.ts +35 -35
  40. package/dist/components/common/checkbox.js +117 -0
  41. package/dist/components/common/color-legend.d.ts +43 -43
  42. package/dist/components/common/color-legend.js +205 -0
  43. package/dist/components/common/data-table/button.d.ts +8 -8
  44. package/dist/components/common/data-table/button.js +53 -0
  45. package/dist/components/common/data-table/canvas.d.ts +2 -2
  46. package/dist/components/common/data-table/canvas.js +43 -0
  47. package/dist/components/common/data-table/cell-size.d.ts +36 -36
  48. package/dist/components/common/data-table/cell-size.js +170 -0
  49. package/dist/components/common/data-table/grid.d.ts +7 -7
  50. package/dist/components/common/data-table/grid.js +90 -0
  51. package/dist/components/common/data-table/index.d.ts +143 -143
  52. package/dist/components/common/data-table/index.js +469 -0
  53. package/dist/components/common/data-table/option-dropdown.d.ts +14 -14
  54. package/dist/components/common/data-table/option-dropdown.js +99 -0
  55. package/dist/components/common/dataset-label.d.ts +10 -10
  56. package/dist/components/common/dataset-label.js +44 -0
  57. package/dist/components/common/error-boundary.d.ts +16 -16
  58. package/dist/components/common/error-boundary.js +76 -0
  59. package/dist/components/common/field-selector.d.ts +47 -47
  60. package/dist/components/common/field-selector.js +214 -0
  61. package/dist/components/common/field-token.d.ts +45 -45
  62. package/dist/components/common/field-token.js +47 -0
  63. package/dist/components/common/file-uploader/file-drop.d.ts +54 -54
  64. package/dist/components/common/file-uploader/file-drop.js +213 -0
  65. package/dist/components/common/file-uploader/file-upload-progress.d.ts +8 -8
  66. package/dist/components/common/file-uploader/file-upload-progress.js +103 -0
  67. package/dist/components/common/file-uploader/file-upload.d.ts +27 -27
  68. package/dist/components/common/file-uploader/file-upload.js +263 -0
  69. package/dist/components/common/file-uploader/upload-button.d.ts +8 -8
  70. package/dist/components/common/file-uploader/upload-button.js +76 -0
  71. package/dist/components/common/histogram-plot.d.ts +3 -3
  72. package/dist/components/common/histogram-plot.js +112 -0
  73. package/dist/components/common/icons/add.d.ts +9 -9
  74. package/dist/components/common/icons/add.js +58 -0
  75. package/dist/components/common/icons/anchor_window.d.ts +11 -11
  76. package/dist/components/common/icons/anchor_window.js +51 -0
  77. package/dist/components/common/icons/arrow-down-alt.d.ts +9 -9
  78. package/dist/components/common/icons/arrow-down-alt.js +58 -0
  79. package/dist/components/common/icons/arrow-down-solid.d.ts +9 -9
  80. package/dist/components/common/icons/arrow-down-solid.js +58 -0
  81. package/dist/components/common/icons/arrow-down.d.ts +9 -9
  82. package/dist/components/common/icons/arrow-down.js +58 -0
  83. package/dist/components/common/icons/arrow-left.d.ts +9 -9
  84. package/dist/components/common/icons/arrow-left.js +61 -0
  85. package/dist/components/common/icons/arrow-right.d.ts +9 -9
  86. package/dist/components/common/icons/arrow-right.js +58 -0
  87. package/dist/components/common/icons/arrow-up-alt.d.ts +9 -9
  88. package/dist/components/common/icons/arrow-up-alt.js +59 -0
  89. package/dist/components/common/icons/arrow-up-solid.d.ts +9 -9
  90. package/dist/components/common/icons/arrow-up-solid.js +58 -0
  91. package/dist/components/common/icons/arrow-up.d.ts +9 -9
  92. package/dist/components/common/icons/arrow-up.js +58 -0
  93. package/dist/components/common/icons/base.d.ts +29 -29
  94. package/dist/components/common/icons/base.js +94 -0
  95. package/dist/components/common/icons/bug.d.ts +9 -9
  96. package/dist/components/common/icons/bug.js +60 -0
  97. package/dist/components/common/icons/cancel.d.ts +9 -9
  98. package/dist/components/common/icons/cancel.js +58 -0
  99. package/dist/components/common/icons/checkmark.d.ts +10 -10
  100. package/dist/components/common/icons/checkmark.js +64 -0
  101. package/dist/components/common/icons/chevron-right.js +68 -0
  102. package/dist/components/common/icons/clipboard.d.ts +9 -9
  103. package/dist/components/common/icons/clipboard.js +59 -0
  104. package/dist/components/common/icons/clock.d.ts +9 -9
  105. package/dist/components/common/icons/clock.js +60 -0
  106. package/dist/components/common/icons/close.d.ts +9 -9
  107. package/dist/components/common/icons/close.js +63 -0
  108. package/dist/components/common/icons/code-alt.d.ts +9 -9
  109. package/dist/components/common/icons/code-alt.js +61 -0
  110. package/dist/components/common/icons/copy.d.ts +9 -9
  111. package/dist/components/common/icons/copy.js +63 -0
  112. package/dist/components/common/icons/crosshairs.d.ts +9 -9
  113. package/dist/components/common/icons/crosshairs.js +61 -0
  114. package/dist/components/common/icons/cube-3d.d.ts +9 -9
  115. package/dist/components/common/icons/cube-3d.js +62 -0
  116. package/dist/components/common/icons/cursor-click.d.ts +9 -9
  117. package/dist/components/common/icons/cursor-click.js +62 -0
  118. package/dist/components/common/icons/data-table.d.ts +10 -10
  119. package/dist/components/common/icons/data-table.js +59 -0
  120. package/dist/components/common/icons/db.d.ts +10 -10
  121. package/dist/components/common/icons/db.js +59 -0
  122. package/dist/components/common/icons/delete.d.ts +9 -9
  123. package/dist/components/common/icons/delete.js +60 -0
  124. package/dist/components/common/icons/docs.d.ts +9 -9
  125. package/dist/components/common/icons/docs.js +74 -0
  126. package/dist/components/common/icons/drag-n-drop.d.ts +9 -9
  127. package/dist/components/common/icons/drag-n-drop.js +60 -0
  128. package/dist/components/common/icons/draw-polygon.d.ts +10 -10
  129. package/dist/components/common/icons/draw-polygon.js +78 -0
  130. package/dist/components/common/icons/email.d.ts +9 -9
  131. package/dist/components/common/icons/email.js +62 -0
  132. package/dist/components/common/icons/expand.d.ts +9 -9
  133. package/dist/components/common/icons/expand.js +60 -0
  134. package/dist/components/common/icons/eye-seen.d.ts +9 -9
  135. package/dist/components/common/icons/eye-seen.js +60 -0
  136. package/dist/components/common/icons/eye-unseen.d.ts +9 -9
  137. package/dist/components/common/icons/eye-unseen.js +60 -0
  138. package/dist/components/common/icons/file-type.d.ts +8 -8
  139. package/dist/components/common/icons/file-type.js +52 -0
  140. package/dist/components/common/icons/file.d.ts +9 -9
  141. package/dist/components/common/icons/file.js +58 -0
  142. package/dist/components/common/icons/files.d.ts +9 -9
  143. package/dist/components/common/icons/files.js +58 -0
  144. package/dist/components/common/icons/filter-funnel.d.ts +9 -9
  145. package/dist/components/common/icons/filter-funnel.js +58 -0
  146. package/dist/components/common/icons/free-window.d.ts +11 -11
  147. package/dist/components/common/icons/free-window.js +51 -0
  148. package/dist/components/common/icons/gear.d.ts +9 -9
  149. package/dist/components/common/icons/gear.js +60 -0
  150. package/dist/components/common/icons/hash.d.ts +9 -9
  151. package/dist/components/common/icons/hash.js +58 -0
  152. package/dist/components/common/icons/histogram.d.ts +9 -9
  153. package/dist/components/common/icons/histogram.js +58 -0
  154. package/dist/components/common/icons/index.d.ts +78 -78
  155. package/dist/components/common/icons/index.js +551 -0
  156. package/dist/components/common/icons/info.d.ts +12 -12
  157. package/dist/components/common/icons/info.js +71 -0
  158. package/dist/components/common/icons/layers.d.ts +9 -9
  159. package/dist/components/common/icons/layers.js +58 -0
  160. package/dist/components/common/icons/left-arrow.d.ts +9 -9
  161. package/dist/components/common/icons/left-arrow.js +61 -0
  162. package/dist/components/common/icons/legend.d.ts +9 -9
  163. package/dist/components/common/icons/legend.js +58 -0
  164. package/dist/components/common/icons/line-chart.d.ts +9 -9
  165. package/dist/components/common/icons/line-chart.js +58 -0
  166. package/dist/components/common/icons/login.d.ts +9 -9
  167. package/dist/components/common/icons/login.js +61 -0
  168. package/dist/components/common/icons/logout.d.ts +9 -9
  169. package/dist/components/common/icons/logout.js +60 -0
  170. package/dist/components/common/icons/map-icon.d.ts +11 -11
  171. package/dist/components/common/icons/map-icon.js +65 -0
  172. package/dist/components/common/icons/map.d.ts +11 -11
  173. package/dist/components/common/icons/map.js +65 -0
  174. package/dist/components/common/icons/messages.d.ts +9 -9
  175. package/dist/components/common/icons/messages.js +58 -0
  176. package/dist/components/common/icons/minus.d.ts +9 -9
  177. package/dist/components/common/icons/minus.js +58 -0
  178. package/dist/components/common/icons/order-by-dataset.d.ts +12 -12
  179. package/dist/components/common/icons/order-by-dataset.js +51 -0
  180. package/dist/components/common/icons/order-by-list.d.ts +12 -12
  181. package/dist/components/common/icons/order-by-list.js +43 -0
  182. package/dist/components/common/icons/pause.d.ts +9 -9
  183. package/dist/components/common/icons/pause.js +58 -0
  184. package/dist/components/common/icons/picture.d.ts +9 -9
  185. package/dist/components/common/icons/picture.js +58 -0
  186. package/dist/components/common/icons/pin.d.ts +9 -9
  187. package/dist/components/common/icons/pin.js +62 -0
  188. package/dist/components/common/icons/play.d.ts +9 -9
  189. package/dist/components/common/icons/play.js +58 -0
  190. package/dist/components/common/icons/polygon.d.ts +10 -10
  191. package/dist/components/common/icons/polygon.js +80 -0
  192. package/dist/components/common/icons/rectangle.d.ts +10 -10
  193. package/dist/components/common/icons/rectangle.js +81 -0
  194. package/dist/components/common/icons/reduce.d.ts +9 -9
  195. package/dist/components/common/icons/reduce.js +61 -0
  196. package/dist/components/common/icons/reset.d.ts +9 -9
  197. package/dist/components/common/icons/reset.js +58 -0
  198. package/dist/components/common/icons/rocket.d.ts +9 -9
  199. package/dist/components/common/icons/rocket.js +58 -0
  200. package/dist/components/common/icons/save.d.ts +9 -9
  201. package/dist/components/common/icons/save.js +60 -0
  202. package/dist/components/common/icons/save2.d.ts +9 -9
  203. package/dist/components/common/icons/save2.js +64 -0
  204. package/dist/components/common/icons/search.d.ts +9 -9
  205. package/dist/components/common/icons/search.js +60 -0
  206. package/dist/components/common/icons/settings.d.ts +9 -9
  207. package/dist/components/common/icons/settings.js +60 -0
  208. package/dist/components/common/icons/share.d.ts +9 -9
  209. package/dist/components/common/icons/share.js +58 -0
  210. package/dist/components/common/icons/split.d.ts +9 -9
  211. package/dist/components/common/icons/split.js +86 -0
  212. package/dist/components/common/icons/square-select.d.ts +9 -9
  213. package/dist/components/common/icons/square-select.js +60 -0
  214. package/dist/components/common/icons/swap-horizontal.js +66 -0
  215. package/dist/components/common/icons/table.d.ts +9 -9
  216. package/dist/components/common/icons/table.js +58 -0
  217. package/dist/components/common/icons/trash.d.ts +9 -9
  218. package/dist/components/common/icons/trash.js +60 -0
  219. package/dist/components/common/icons/upload.d.ts +9 -9
  220. package/dist/components/common/icons/upload.js +58 -0
  221. package/dist/components/common/icons/vert-dots.d.ts +9 -9
  222. package/dist/components/common/icons/vert-dots.js +96 -0
  223. package/dist/components/common/icons/vert-three-dots.d.ts +9 -9
  224. package/dist/components/common/icons/vert-three-dots.js +71 -0
  225. package/dist/components/common/icons/warning.d.ts +10 -10
  226. package/dist/components/common/icons/warning.js +72 -0
  227. package/dist/components/common/image-preview.d.ts +15 -15
  228. package/dist/components/common/image-preview.js +79 -0
  229. package/dist/components/common/info-helper.d.ts +11 -11
  230. package/dist/components/common/info-helper.js +79 -0
  231. package/dist/components/common/item-selector/accessor.d.ts +7 -7
  232. package/dist/components/common/item-selector/accessor.js +54 -0
  233. package/dist/components/common/item-selector/chickleted-input.d.ts +21 -21
  234. package/dist/components/common/item-selector/chickleted-input.js +96 -0
  235. package/dist/components/common/item-selector/dropdown-list.d.ts +68 -68
  236. package/dist/components/common/item-selector/dropdown-list.js +279 -0
  237. package/dist/components/common/item-selector/item-selector-submenu.js +88 -0
  238. package/dist/components/common/item-selector/item-selector.d.ts +91 -91
  239. package/dist/components/common/item-selector/item-selector.js +282 -0
  240. package/dist/components/common/item-selector/typeahead.d.ts +115 -115
  241. package/dist/components/common/item-selector/typeahead.js +425 -0
  242. package/dist/components/common/line-chart.d.ts +34 -34
  243. package/dist/components/common/line-chart.js +127 -0
  244. package/dist/components/common/loading-spinner.d.ts +9 -9
  245. package/dist/components/common/loading-spinner.js +64 -0
  246. package/dist/components/common/logo.d.ts +8 -8
  247. package/dist/components/common/logo.js +85 -0
  248. package/dist/components/common/map-layer-selector.d.ts +13 -13
  249. package/dist/components/common/map-layer-selector.js +56 -0
  250. package/dist/components/common/modal.d.ts +49 -49
  251. package/dist/components/common/modal.js +165 -0
  252. package/dist/components/common/portaled.d.ts +527 -527
  253. package/dist/components/common/portaled.js +277 -0
  254. package/dist/components/common/progress-bar.d.ts +12 -12
  255. package/dist/components/common/progress-bar.js +64 -0
  256. package/dist/components/common/range-brush.d.ts +19 -19
  257. package/dist/components/common/range-brush.js +277 -0
  258. package/dist/components/common/range-plot.d.ts +35 -35
  259. package/dist/components/common/range-plot.js +130 -0
  260. package/dist/components/common/range-slider.d.ts +32 -32
  261. package/dist/components/common/range-slider.js +305 -0
  262. package/dist/components/common/slider/mouse-event.d.ts +27 -27
  263. package/dist/components/common/slider/mouse-event.js +115 -0
  264. package/dist/components/common/slider/slider-bar-handle.d.ts +29 -29
  265. package/dist/components/common/slider/slider-bar-handle.js +105 -0
  266. package/dist/components/common/slider/slider-handle.d.ts +33 -33
  267. package/dist/components/common/slider/slider-handle.js +151 -0
  268. package/dist/components/common/slider/slider.d.ts +70 -70
  269. package/dist/components/common/slider/slider.js +221 -0
  270. package/dist/components/common/styled-components.d.ts +119 -119
  271. package/dist/components/common/styled-components.js +300 -0
  272. package/dist/components/common/switch.d.ts +16 -16
  273. package/dist/components/common/switch.js +38 -0
  274. package/dist/components/common/time-range-slider-time-title.d.ts +9 -9
  275. package/dist/components/common/time-range-slider-time-title.js +79 -0
  276. package/dist/components/common/time-range-slider.d.ts +32 -32
  277. package/dist/components/common/time-range-slider.js +116 -0
  278. package/dist/components/common/time-slider-marker.d.ts +21 -21
  279. package/dist/components/common/time-slider-marker.js +136 -0
  280. package/dist/components/common/tippy-tooltip.d.ts +4 -4
  281. package/dist/components/common/tippy-tooltip.js +115 -0
  282. package/dist/components/common/toolbar-item.d.ts +14 -14
  283. package/dist/components/common/toolbar-item.js +75 -0
  284. package/dist/components/common/toolbar.d.ts +5 -5
  285. package/dist/components/common/toolbar.js +44 -0
  286. package/dist/components/common/vertical-toolbar.d.ts +3 -3
  287. package/dist/components/common/vertical-toolbar.js +33 -0
  288. package/dist/components/container.d.ts +39 -39
  289. package/dist/components/container.js +203 -0
  290. package/dist/components/context.d.ts +7 -7
  291. package/dist/components/context.js +38 -0
  292. package/dist/components/editor/constants.d.ts +17 -17
  293. package/dist/components/editor/constants.js +45 -0
  294. package/dist/components/editor/editor.d.ts +29 -29
  295. package/dist/components/editor/editor.js +226 -0
  296. package/dist/components/editor/feature-action-panel.d.ts +27 -27
  297. package/dist/components/editor/feature-action-panel.js +141 -0
  298. package/dist/components/editor/feature-styles.d.ts +24 -24
  299. package/dist/components/editor/feature-styles.js +67 -0
  300. package/dist/components/editor/handle-style.d.ts +38 -38
  301. package/dist/components/editor/handle-style.js +78 -0
  302. package/dist/components/filters/components.d.ts +1 -3
  303. package/dist/components/filters/components.js +31 -0
  304. package/dist/components/filters/filter-panels/filter-panel-with-field-select.d.ts +10 -10
  305. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +96 -0
  306. package/dist/components/filters/filter-panels/multi-select-filter-panel.d.ts +9 -9
  307. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +66 -0
  308. package/dist/components/filters/filter-panels/new-filter-panel.d.ts +12 -12
  309. package/dist/components/filters/filter-panels/new-filter-panel.js +85 -0
  310. package/dist/components/filters/filter-panels/polygon-filter-panel.d.ts +9 -9
  311. package/dist/components/filters/filter-panels/polygon-filter-panel.js +85 -0
  312. package/dist/components/filters/filter-panels/range-filter-panel.d.ts +9 -9
  313. package/dist/components/filters/filter-panels/range-filter-panel.js +66 -0
  314. package/dist/components/filters/filter-panels/single-select-filter-panel.d.ts +9 -9
  315. package/dist/components/filters/filter-panels/single-select-filter-panel.js +66 -0
  316. package/dist/components/filters/filter-panels/time-range-filter-panel.d.ts +8 -8
  317. package/dist/components/filters/filter-panels/time-range-filter-panel.js +80 -0
  318. package/dist/components/filters/filter-panels/types.d.ts +36 -36
  319. package/dist/components/filters/filter-panels/types.js +6 -0
  320. package/dist/components/filters/index.d.ts +5 -5
  321. package/dist/components/filters/index.js +42 -0
  322. package/dist/components/filters/multi-select-filter.d.ts +3 -3
  323. package/dist/components/filters/multi-select-filter.js +48 -0
  324. package/dist/components/filters/polygon-filter.d.ts +4 -4
  325. package/dist/components/filters/polygon-filter.js +85 -0
  326. package/dist/components/filters/range-filter.d.ts +8 -8
  327. package/dist/components/filters/range-filter.js +48 -0
  328. package/dist/components/filters/single-select-filter.d.ts +3 -3
  329. package/dist/components/filters/single-select-filter.js +57 -0
  330. package/dist/components/filters/time-range-filter.d.ts +28 -28
  331. package/dist/components/filters/time-range-filter.js +75 -0
  332. package/dist/components/filters/time-widget.d.ts +14 -14
  333. package/dist/components/filters/time-widget.js +162 -0
  334. package/dist/components/filters/types.d.ts +53 -53
  335. package/dist/components/filters/types.js +6 -0
  336. package/dist/components/geocoder/geocoder.d.ts +33 -33
  337. package/dist/components/geocoder/geocoder.js +282 -0
  338. package/dist/components/geocoder-panel.d.ts +28 -28
  339. package/dist/components/geocoder-panel.js +192 -0
  340. package/dist/components/index.d.ts +165 -165
  341. package/dist/components/index.js +1474 -0
  342. package/dist/components/injector.d.ts +25 -25
  343. package/dist/components/injector.js +162 -0
  344. package/dist/components/kepler-gl.d.ts +302 -302
  345. package/dist/components/kepler-gl.js +487 -0
  346. package/dist/components/map/coordinate-info.d.ts +7 -7
  347. package/dist/components/map/coordinate-info.js +59 -0
  348. package/dist/components/map/layer-hover-info.d.ts +13 -13
  349. package/dist/components/map/layer-hover-info.js +167 -0
  350. package/dist/components/map/layer-selector-panel.d.ts +22 -22
  351. package/dist/components/map/layer-selector-panel.js +103 -0
  352. package/dist/components/map/locale-panel.d.ts +16 -16
  353. package/dist/components/map/locale-panel.js +103 -0
  354. package/dist/components/map/map-control-panel.d.ts +14 -14
  355. package/dist/components/map/map-control-panel.js +97 -0
  356. package/dist/components/map/map-control-toolbar.d.ts +2 -2
  357. package/dist/components/map/map-control-toolbar.js +35 -0
  358. package/dist/components/map/map-control-tooltip.d.ts +7 -7
  359. package/dist/components/map/map-control-tooltip.js +48 -0
  360. package/dist/components/map/map-control.d.ts +44 -44
  361. package/dist/components/map/map-control.js +79 -0
  362. package/dist/components/map/map-draw-panel.d.ts +21 -21
  363. package/dist/components/map/map-draw-panel.js +131 -0
  364. package/dist/components/map/map-legend-panel.d.ts +23 -23
  365. package/dist/components/map/map-legend-panel.js +152 -0
  366. package/dist/components/map/map-legend.d.ts +55 -55
  367. package/dist/components/map/map-legend.js +234 -0
  368. package/dist/components/map/map-popover.d.ts +37 -37
  369. package/dist/components/map/map-popover.js +191 -0
  370. package/dist/components/map/split-map-button.d.ts +19 -19
  371. package/dist/components/map/split-map-button.js +89 -0
  372. package/dist/components/map/toggle-3d-button.d.ts +16 -16
  373. package/dist/components/map/toggle-3d-button.js +79 -0
  374. package/dist/components/map-container.d.ts +58 -58
  375. package/dist/components/map-container.js +502 -0
  376. package/dist/components/maps-layout.d.ts +10 -10
  377. package/dist/components/maps-layout.js +57 -0
  378. package/dist/components/modal-container.d.ts +65 -65
  379. package/dist/components/modal-container.js +459 -0
  380. package/dist/components/modals/add-map-style-modal.d.ts +17 -17
  381. package/dist/components/modals/add-map-style-modal.js +250 -0
  382. package/dist/components/modals/cloud-tile.d.ts +15 -15
  383. package/dist/components/modals/cloud-tile.js +124 -0
  384. package/dist/components/modals/data-table-modal.d.ts +29 -29
  385. package/dist/components/modals/data-table-modal.js +223 -0
  386. package/dist/components/modals/delete-data-modal.d.ts +10 -10
  387. package/dist/components/modals/delete-data-modal.js +58 -0
  388. package/dist/components/modals/error-display.d.ts +6 -6
  389. package/dist/components/modals/error-display.js +44 -0
  390. package/dist/components/modals/export-data-modal.d.ts +25 -25
  391. package/dist/components/modals/export-data-modal.js +194 -0
  392. package/dist/components/modals/export-image-modal.d.ts +18 -18
  393. package/dist/components/modals/export-image-modal.js +139 -0
  394. package/dist/components/modals/export-map-modal/components.d.ts +8 -8
  395. package/dist/components/modals/export-map-modal/components.js +51 -0
  396. package/dist/components/modals/export-map-modal/export-html-map.d.ts +12 -12
  397. package/dist/components/modals/export-map-modal/export-html-map.js +140 -0
  398. package/dist/components/modals/export-map-modal/export-json-map.d.ts +9 -9
  399. package/dist/components/modals/export-map-modal/export-json-map.js +98 -0
  400. package/dist/components/modals/export-map-modal/export-map-modal.d.ts +27 -27
  401. package/dist/components/modals/export-map-modal/export-map-modal.js +101 -0
  402. package/dist/components/modals/image-modal-container.d.ts +18 -18
  403. package/dist/components/modals/image-modal-container.js +83 -0
  404. package/dist/components/modals/load-data-modal.d.ts +33 -33
  405. package/dist/components/modals/load-data-modal.js +93 -0
  406. package/dist/components/modals/load-storage-map.d.ts +26 -26
  407. package/dist/components/modals/load-storage-map.js +251 -0
  408. package/dist/components/modals/loading-dialog.d.ts +7 -7
  409. package/dist/components/modals/loading-dialog.js +54 -0
  410. package/dist/components/modals/modal-dialog.d.ts +2 -2
  411. package/dist/components/modals/modal-dialog.js +33 -0
  412. package/dist/components/modals/modal-tabs.d.ts +27 -27
  413. package/dist/components/modals/modal-tabs.js +99 -0
  414. package/dist/components/modals/overwrite-map-modal.d.ts +16 -16
  415. package/dist/components/modals/overwrite-map-modal.js +81 -0
  416. package/dist/components/modals/provider-modal-container.d.ts +23 -23
  417. package/dist/components/modals/provider-modal-container.js +79 -0
  418. package/dist/components/modals/save-map-modal.d.ts +29 -29
  419. package/dist/components/modals/save-map-modal.js +201 -0
  420. package/dist/components/modals/share-map-modal.d.ts +30 -30
  421. package/dist/components/modals/share-map-modal.js +188 -0
  422. package/dist/components/modals/status-panel.d.ts +13 -13
  423. package/dist/components/modals/status-panel.js +82 -0
  424. package/dist/components/modals/storage-map-viewer.d.ts +21 -21
  425. package/dist/components/modals/storage-map-viewer.js +115 -0
  426. package/dist/components/notification-panel/notification-item.d.ts +66 -66
  427. package/dist/components/notification-panel/notification-item.js +139 -0
  428. package/dist/components/notification-panel.d.ts +61 -61
  429. package/dist/components/notification-panel.js +74 -0
  430. package/dist/components/performance.d.ts +4 -4
  431. package/dist/components/performance.js +110 -0
  432. package/dist/components/plot-container.d.ts +24 -24
  433. package/dist/components/plot-container.js +240 -0
  434. package/dist/components/side-panel/cloud-storage-dropdown.d.ts +6 -6
  435. package/dist/components/side-panel/cloud-storage-dropdown.js +57 -0
  436. package/dist/components/side-panel/common/dataset-info.d.ts +3 -3
  437. package/dist/components/side-panel/common/dataset-info.js +50 -0
  438. package/dist/components/side-panel/common/dataset-tag.d.ts +3 -3
  439. package/dist/components/side-panel/common/dataset-tag.js +75 -0
  440. package/dist/components/side-panel/common/dataset-title.d.ts +8 -8
  441. package/dist/components/side-panel/common/dataset-title.js +185 -0
  442. package/dist/components/side-panel/common/source-data-catalog.d.ts +9 -9
  443. package/dist/components/side-panel/common/source-data-catalog.js +66 -0
  444. package/dist/components/side-panel/common/source-data-selector.d.ts +8 -8
  445. package/dist/components/side-panel/common/source-data-selector.js +119 -0
  446. package/dist/components/side-panel/common/types.d.ts +58 -58
  447. package/dist/components/side-panel/common/types.js +6 -0
  448. package/dist/components/side-panel/custom-panel.d.ts +9 -9
  449. package/dist/components/side-panel/custom-panel.js +56 -0
  450. package/dist/components/side-panel/filter-manager.d.ts +20 -20
  451. package/dist/components/side-panel/filter-manager.js +113 -0
  452. package/dist/components/side-panel/filter-panel/filter-panel-header.d.ts +21 -21
  453. package/dist/components/side-panel/filter-panel/filter-panel-header.js +67 -0
  454. package/dist/components/side-panel/filter-panel/filter-panel.d.ts +23 -23
  455. package/dist/components/side-panel/filter-panel/filter-panel.js +110 -0
  456. package/dist/components/side-panel/interaction-manager.d.ts +14 -14
  457. package/dist/components/side-panel/interaction-manager.js +51 -0
  458. package/dist/components/side-panel/interaction-panel/brush-config.d.ts +15 -15
  459. package/dist/components/side-panel/interaction-panel/brush-config.js +58 -0
  460. package/dist/components/side-panel/interaction-panel/interaction-panel.d.ts +19 -19
  461. package/dist/components/side-panel/interaction-panel/interaction-panel.js +137 -0
  462. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +28 -28
  463. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +204 -0
  464. package/dist/components/side-panel/interaction-panel/tooltip-config.d.ts +38 -38
  465. package/dist/components/side-panel/interaction-panel/tooltip-config.js +155 -0
  466. package/dist/components/side-panel/layer-manager.d.ts +46 -46
  467. package/dist/components/side-panel/layer-manager.js +185 -0
  468. package/dist/components/side-panel/layer-panel/add-layer-button.d.ts +10 -10
  469. package/dist/components/side-panel/layer-panel/add-layer-button.js +147 -0
  470. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.d.ts +8 -8
  471. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +38 -0
  472. package/dist/components/side-panel/layer-panel/color-palette.d.ts +13 -13
  473. package/dist/components/side-panel/layer-panel/color-palette.js +79 -0
  474. package/dist/components/side-panel/layer-panel/color-range-selector.d.ts +129 -129
  475. package/dist/components/side-panel/layer-panel/color-range-selector.js +329 -0
  476. package/dist/components/side-panel/layer-panel/color-selector.d.ts +101 -101
  477. package/dist/components/side-panel/layer-panel/color-selector.js +177 -0
  478. package/dist/components/side-panel/layer-panel/column-selector.d.ts +22 -22
  479. package/dist/components/side-panel/layer-panel/column-selector.js +66 -0
  480. package/dist/components/side-panel/layer-panel/custom-markers-config-group.d.ts +6 -6
  481. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +36 -0
  482. package/dist/components/side-panel/layer-panel/custom-palette.d.ts +38 -38
  483. package/dist/components/side-panel/layer-panel/custom-palette.js +278 -0
  484. package/dist/components/side-panel/layer-panel/custom-picker.d.ts +67 -67
  485. package/dist/components/side-panel/layer-panel/custom-picker.js +106 -0
  486. package/dist/components/side-panel/layer-panel/dataset-layer-group.d.ts +24 -24
  487. package/dist/components/side-panel/layer-panel/dataset-layer-group.js +81 -0
  488. package/dist/components/side-panel/layer-panel/dataset-layer-section.d.ts +25 -25
  489. package/dist/components/side-panel/layer-panel/dataset-layer-section.js +74 -0
  490. package/dist/components/side-panel/layer-panel/dataset-section.d.ts +26 -26
  491. package/dist/components/side-panel/layer-panel/dataset-section.js +91 -0
  492. package/dist/components/side-panel/layer-panel/dimension-scale-selector.d.ts +10 -10
  493. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +53 -0
  494. package/dist/components/side-panel/layer-panel/hex-column-config.d.ts +62 -62
  495. package/dist/components/side-panel/layer-panel/hex-column-config.js +74 -0
  496. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.d.ts +8 -8
  497. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +18 -0
  498. package/dist/components/side-panel/layer-panel/layer-column-config.d.ts +20 -20
  499. package/dist/components/side-panel/layer-panel/layer-column-config.js +86 -0
  500. package/dist/components/side-panel/layer-panel/layer-config-group.d.ts +37 -37
  501. package/dist/components/side-panel/layer-panel/layer-config-group.js +209 -0
  502. package/dist/components/side-panel/layer-panel/layer-configurator.d.ts +415 -415
  503. package/dist/components/side-panel/layer-panel/layer-configurator.js +977 -0
  504. package/dist/components/side-panel/layer-panel/layer-list.d.ts +20 -20
  505. package/dist/components/side-panel/layer-panel/layer-list.js +168 -0
  506. package/dist/components/side-panel/layer-panel/layer-panel-header.d.ts +43 -43
  507. package/dist/components/side-panel/layer-panel/layer-panel-header.js +194 -0
  508. package/dist/components/side-panel/layer-panel/layer-panel.d.ts +40 -40
  509. package/dist/components/side-panel/layer-panel/layer-panel.js +161 -0
  510. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.d.ts +17 -17
  511. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +95 -0
  512. package/dist/components/side-panel/layer-panel/layer-type-list-item.d.ts +11 -11
  513. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +75 -0
  514. package/dist/components/side-panel/layer-panel/layer-type-selector.d.ts +23 -23
  515. package/dist/components/side-panel/layer-panel/layer-type-selector.js +87 -0
  516. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.d.ts +23 -23
  517. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +106 -0
  518. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.d.ts +36 -36
  519. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +116 -0
  520. package/dist/components/side-panel/layer-panel/single-color-palette.d.ts +12 -12
  521. package/dist/components/side-panel/layer-panel/single-color-palette.js +68 -0
  522. package/dist/components/side-panel/layer-panel/text-label-panel.d.ts +18 -18
  523. package/dist/components/side-panel/layer-panel/text-label-panel.js +157 -0
  524. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.d.ts +35 -35
  525. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +148 -0
  526. package/dist/components/side-panel/layer-panel/vis-config-slider.d.ts +20 -20
  527. package/dist/components/side-panel/layer-panel/vis-config-slider.js +177 -0
  528. package/dist/components/side-panel/layer-panel/vis-config-switch.d.ts +16 -16
  529. package/dist/components/side-panel/layer-panel/vis-config-switch.js +73 -0
  530. package/dist/components/side-panel/map-manager.d.ts +21 -21
  531. package/dist/components/side-panel/map-manager.js +133 -0
  532. package/dist/components/side-panel/map-style-panel/map-layer-selector.d.ts +19 -19
  533. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +103 -0
  534. package/dist/components/side-panel/map-style-panel/map-style-selector.d.ts +16 -16
  535. package/dist/components/side-panel/map-style-panel/map-style-selector.js +80 -0
  536. package/dist/components/side-panel/panel-dropdown.d.ts +18 -18
  537. package/dist/components/side-panel/panel-dropdown.js +71 -0
  538. package/dist/components/side-panel/panel-header-action.d.ts +20 -20
  539. package/dist/components/side-panel/panel-header-action.js +103 -0
  540. package/dist/components/side-panel/panel-header.d.ts +78 -78
  541. package/dist/components/side-panel/panel-header.js +301 -0
  542. package/dist/components/side-panel/panel-tab.d.ts +20 -20
  543. package/dist/components/side-panel/panel-tab.js +72 -0
  544. package/dist/components/side-panel/panel-title.d.ts +4 -4
  545. package/dist/components/side-panel/panel-title.js +44 -0
  546. package/dist/components/side-panel/panel-toggle.d.ts +14 -14
  547. package/dist/components/side-panel/panel-toggle.js +65 -0
  548. package/dist/components/side-panel/side-bar.d.ts +76 -76
  549. package/dist/components/side-panel/side-bar.js +140 -0
  550. package/dist/components/side-panel.d.ts +134 -134
  551. package/dist/components/side-panel.js +235 -0
  552. package/dist/components/types.d.ts +44 -44
  553. package/dist/components/types.js +6 -0
  554. package/dist/connect/keplergl-connect.d.ts +5 -5
  555. package/dist/connect/keplergl-connect.js +59 -0
  556. package/dist/connect/with-local-selector.d.ts +6 -6
  557. package/dist/connect/with-local-selector.js +102 -0
  558. package/dist/constants/action-types.d.ts +111 -111
  559. package/dist/constants/action-types.js +184 -0
  560. package/dist/constants/color-palette.d.ts +491 -491
  561. package/dist/constants/color-palette.js +536 -0
  562. package/dist/constants/color-ranges.d.ts +24 -24
  563. package/dist/constants/color-ranges.js +83 -0
  564. package/dist/constants/custom-color-ranges.d.ts +37 -37
  565. package/dist/constants/custom-color-ranges.js +410 -0
  566. package/dist/constants/default-settings.d.ts +773 -773
  567. package/dist/constants/default-settings.js +832 -0
  568. package/dist/constants/index.d.ts +9 -9
  569. package/dist/constants/index.js +387 -0
  570. package/dist/constants/keyevent.d.ts +2 -2
  571. package/dist/constants/keyevent.js +43 -0
  572. package/dist/constants/tooltip.d.ts +165 -165
  573. package/dist/constants/tooltip.js +202 -0
  574. package/dist/constants/user-feedbacks.d.ts +5 -5
  575. package/dist/constants/user-feedbacks.js +32 -0
  576. package/dist/constants/user-guides.d.ts +9 -9
  577. package/dist/constants/user-guides.js +36 -0
  578. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.d.ts +13 -13
  579. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +92 -0
  580. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.d.ts +7 -7
  581. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +181 -0
  582. package/dist/deckgl-layers/3d-building-layer/types.d.ts +37 -0
  583. package/dist/deckgl-layers/3d-building-layer/types.js +6 -0
  584. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +312 -0
  585. package/dist/deckgl-layers/column-layer/enhanced-column-layer.d.ts +6 -6
  586. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +75 -0
  587. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.d.ts +13 -13
  588. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +96 -0
  589. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.d.ts +13 -13
  590. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +96 -0
  591. package/dist/deckgl-layers/layer-utils/cluster-utils.js +107 -0
  592. package/dist/deckgl-layers/layer-utils/cpu-aggregator.d.ts +91 -91
  593. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +585 -0
  594. package/dist/deckgl-layers/layer-utils/shader-utils.d.ts +1 -1
  595. package/dist/deckgl-layers/layer-utils/shader-utils.js +46 -0
  596. package/dist/deckgl-layers/line-layer/line-layer.d.ts +12 -12
  597. package/dist/deckgl-layers/line-layer/line-layer.js +106 -0
  598. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.d.ts +8 -8
  599. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +80 -0
  600. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.d.ts +18 -18
  601. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +123 -0
  602. package/dist/index.d.ts +11 -11
  603. package/dist/index.js +179 -0
  604. package/dist/layers/aggregation-layer.d.ts +70 -70
  605. package/dist/layers/aggregation-layer.js +392 -0
  606. package/dist/layers/arc-layer/arc-layer-icon.d.ts +16 -16
  607. package/dist/layers/arc-layer/arc-layer-icon.js +76 -0
  608. package/dist/layers/arc-layer/arc-layer.d.ts +143 -143
  609. package/dist/layers/arc-layer/arc-layer.js +252 -0
  610. package/dist/layers/base-layer.d.ts +436 -436
  611. package/dist/layers/base-layer.js +1703 -0
  612. package/dist/layers/cluster-layer/cluster-layer-icon.d.ts +16 -16
  613. package/dist/layers/cluster-layer/cluster-layer-icon.js +79 -0
  614. package/dist/layers/cluster-layer/cluster-layer.d.ts +39 -39
  615. package/dist/layers/cluster-layer/cluster-layer.js +139 -0
  616. package/dist/layers/default-layer-icon.d.ts +14 -14
  617. package/dist/layers/default-layer-icon.js +86 -0
  618. package/dist/layers/geojson-layer/geojson-layer-icon.d.ts +15 -15
  619. package/dist/layers/geojson-layer/geojson-layer-icon.js +90 -0
  620. package/dist/layers/geojson-layer/geojson-layer.d.ts +227 -230
  621. package/dist/layers/geojson-layer/geojson-layer.js +423 -0
  622. package/dist/layers/geojson-layer/geojson-utils.d.ts +44 -44
  623. package/dist/layers/geojson-layer/geojson-utils.js +184 -0
  624. package/dist/layers/grid-layer/grid-layer-icon.d.ts +15 -15
  625. package/dist/layers/grid-layer/grid-layer-icon.js +135 -0
  626. package/dist/layers/grid-layer/grid-layer.d.ts +74 -74
  627. package/dist/layers/grid-layer/grid-layer.js +104 -0
  628. package/dist/layers/grid-layer/grid-utils.d.ts +24 -24
  629. package/dist/layers/grid-layer/grid-utils.js +59 -0
  630. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.d.ts +16 -16
  631. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +70 -0
  632. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.d.ts +170 -170
  633. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +321 -0
  634. package/dist/layers/h3-hexagon-layer/h3-utils.d.ts +20 -20
  635. package/dist/layers/h3-hexagon-layer/h3-utils.js +86 -0
  636. package/dist/layers/heatmap-layer/heatmap-layer-icon.d.ts +15 -15
  637. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +87 -0
  638. package/dist/layers/heatmap-layer/heatmap-layer.d.ts +144 -144
  639. package/dist/layers/heatmap-layer/heatmap-layer.js +236 -0
  640. package/dist/layers/hexagon-layer/hexagon-layer-icon.d.ts +15 -15
  641. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +99 -0
  642. package/dist/layers/hexagon-layer/hexagon-layer.d.ts +78 -78
  643. package/dist/layers/hexagon-layer/hexagon-layer.js +108 -0
  644. package/dist/layers/hexagon-layer/hexagon-utils.d.ts +7 -7
  645. package/dist/layers/hexagon-layer/hexagon-utils.js +62 -0
  646. package/dist/layers/icon-layer/icon-info-modal.d.ts +3 -3
  647. package/dist/layers/icon-layer/icon-info-modal.js +115 -0
  648. package/dist/layers/icon-layer/icon-layer-icon.d.ts +15 -15
  649. package/dist/layers/icon-layer/icon-layer-icon.js +72 -0
  650. package/dist/layers/icon-layer/icon-layer.d.ts +119 -119
  651. package/dist/layers/icon-layer/icon-layer.js +366 -0
  652. package/dist/layers/index.d.ts +53 -53
  653. package/dist/layers/index.js +105 -0
  654. package/dist/layers/layer-factory.d.ts +150 -150
  655. package/dist/layers/layer-factory.js +517 -0
  656. package/dist/layers/layer-text-label.d.ts +7 -7
  657. package/dist/layers/layer-text-label.js +60 -0
  658. package/dist/layers/layer-update.d.ts +9 -9
  659. package/dist/layers/layer-update.js +73 -0
  660. package/dist/layers/line-layer/line-layer-icon.d.ts +15 -15
  661. package/dist/layers/line-layer/line-layer-icon.js +78 -0
  662. package/dist/layers/line-layer/line-layer.d.ts +136 -136
  663. package/dist/layers/line-layer/line-layer.js +191 -0
  664. package/dist/layers/mapbox-utils.d.ts +57 -57
  665. package/dist/layers/mapbox-utils.js +186 -0
  666. package/dist/layers/mapboxgl-layer.d.ts +87 -87
  667. package/dist/layers/mapboxgl-layer.js +201 -0
  668. package/dist/layers/point-layer/point-layer-icon.d.ts +15 -15
  669. package/dist/layers/point-layer/point-layer-icon.js +93 -0
  670. package/dist/layers/point-layer/point-layer.d.ts +272 -272
  671. package/dist/layers/point-layer/point-layer.js +457 -0
  672. package/dist/layers/s2-geometry-layer/s2-geometry-layer.d.ts +189 -189
  673. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +306 -0
  674. package/dist/layers/s2-geometry-layer/s2-layer-icon.d.ts +15 -15
  675. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +69 -0
  676. package/dist/layers/s2-geometry-layer/s2-utils.d.ts +7 -7
  677. package/dist/layers/s2-geometry-layer/s2-utils.js +51 -0
  678. package/dist/layers/scenegraph-layer/scenegraph-info-modal.d.ts +3 -3
  679. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +54 -0
  680. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.d.ts +15 -15
  681. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +150 -0
  682. package/dist/layers/scenegraph-layer/scenegraph-layer.d.ts +80 -80
  683. package/dist/layers/scenegraph-layer/scenegraph-layer.js +230 -0
  684. package/dist/layers/trip-layer/trip-info-modal.d.ts +3 -3
  685. package/dist/layers/trip-layer/trip-info-modal.js +59 -0
  686. package/dist/layers/trip-layer/trip-layer-icon.d.ts +15 -15
  687. package/dist/layers/trip-layer/trip-layer-icon.js +88 -0
  688. package/dist/layers/trip-layer/trip-layer.d.ts +157 -157
  689. package/dist/layers/trip-layer/trip-layer.js +369 -0
  690. package/dist/layers/trip-layer/trip-utils.d.ts +31 -31
  691. package/dist/layers/trip-layer/trip-utils.js +180 -0
  692. package/dist/layers/types.d.ts +15 -15
  693. package/dist/layers/types.js +44 -0
  694. package/dist/localization/formatted-message.d.ts +12 -12
  695. package/dist/localization/formatted-message.js +39 -0
  696. package/dist/localization/index.d.ts +5 -5
  697. package/dist/localization/index.js +54 -0
  698. package/dist/localization/locales.d.ts +27 -27
  699. package/dist/localization/locales.js +59 -0
  700. package/dist/localization/messages.d.ts +4 -4
  701. package/dist/localization/messages.js +37 -0
  702. package/dist/localization/translations/ca.d.ts +438 -438
  703. package/dist/localization/translations/ca.js +466 -0
  704. package/dist/localization/translations/cn.d.ts +441 -441
  705. package/dist/localization/translations/cn.js +469 -0
  706. package/dist/localization/translations/en.d.ts +466 -466
  707. package/dist/localization/translations/en.js +494 -0
  708. package/dist/localization/translations/es.d.ts +438 -438
  709. package/dist/localization/translations/es.js +466 -0
  710. package/dist/localization/translations/fi.d.ts +410 -410
  711. package/dist/localization/translations/fi.js +438 -0
  712. package/dist/localization/translations/ja.d.ts +439 -439
  713. package/dist/localization/translations/ja.js +467 -0
  714. package/dist/localization/translations/pt.d.ts +410 -410
  715. package/dist/localization/translations/pt.js +438 -0
  716. package/dist/localization/translations/ru.d.ts +447 -447
  717. package/dist/localization/translations/ru.js +475 -0
  718. package/dist/middleware/index.d.ts +8 -8
  719. package/dist/middleware/index.js +44 -0
  720. package/dist/processors/data-processor.d.ts +242 -242
  721. package/dist/processors/data-processor.js +721 -0
  722. package/dist/processors/file-handler.d.ts +28 -28
  723. package/dist/processors/file-handler.js +357 -0
  724. package/dist/processors/index.d.ts +3 -3
  725. package/dist/processors/index.js +39 -0
  726. package/dist/processors/types.d.ts +21 -21
  727. package/dist/processors/types.js +6 -0
  728. package/dist/reducers/combined-updaters.d.ts +52 -52
  729. package/dist/reducers/combined-updaters.js +180 -0
  730. package/dist/reducers/composer-helpers.d.ts +21 -21
  731. package/dist/reducers/composer-helpers.js +111 -0
  732. package/dist/reducers/composers.d.ts +12 -12
  733. package/dist/reducers/composers.js +40 -0
  734. package/dist/reducers/core.d.ts +65 -65
  735. package/dist/reducers/core.js +119 -0
  736. package/dist/reducers/index.d.ts +19 -19
  737. package/dist/reducers/index.js +137 -0
  738. package/dist/reducers/map-state-updaters.d.ts +96 -96
  739. package/dist/reducers/map-state-updaters.js +220 -0
  740. package/dist/reducers/map-state.d.ts +4 -4
  741. package/dist/reducers/map-state.js +52 -0
  742. package/dist/reducers/map-style-updaters.d.ts +204 -204
  743. package/dist/reducers/map-style-updaters.js +473 -0
  744. package/dist/reducers/map-style.d.ts +16 -16
  745. package/dist/reducers/map-style.js +51 -0
  746. package/dist/reducers/provider-state-updaters.d.ts +41 -41
  747. package/dist/reducers/provider-state-updaters.js +421 -0
  748. package/dist/reducers/provider-state.d.ts +4 -4
  749. package/dist/reducers/provider-state.js +53 -0
  750. package/dist/reducers/root.d.ts +24 -24
  751. package/dist/reducers/root.js +212 -0
  752. package/dist/reducers/types.d.ts +16 -16
  753. package/dist/reducers/types.js +6 -0
  754. package/dist/reducers/ui-state-updaters.d.ts +433 -433
  755. package/dist/reducers/ui-state-updaters.js +744 -0
  756. package/dist/reducers/ui-state.d.ts +3 -3
  757. package/dist/reducers/ui-state.js +54 -0
  758. package/dist/reducers/vis-state-merger.d.ts +110 -110
  759. package/dist/reducers/vis-state-merger.js +569 -0
  760. package/dist/reducers/vis-state-selectors.d.ts +10 -10
  761. package/dist/reducers/vis-state-selectors.js +47 -0
  762. package/dist/reducers/vis-state-updaters.d.ts +645 -645
  763. package/dist/reducers/vis-state-updaters.js +2102 -0
  764. package/dist/reducers/vis-state.d.ts +4 -4
  765. package/dist/reducers/vis-state.js +53 -0
  766. package/dist/schemas/dataset-schema.d.ts +17 -17
  767. package/dist/schemas/dataset-schema.js +166 -0
  768. package/dist/schemas/index.d.ts +8 -8
  769. package/dist/schemas/index.js +125 -0
  770. package/dist/schemas/map-state-schema.d.ts +23 -23
  771. package/dist/schemas/map-state-schema.js +53 -0
  772. package/dist/schemas/map-style-schema.d.ts +38 -38
  773. package/dist/schemas/map-style-schema.js +106 -0
  774. package/dist/schemas/schema-manager.d.ts +271 -271
  775. package/dist/schemas/schema-manager.js +246 -0
  776. package/dist/schemas/schema-utils.d.ts +11 -11
  777. package/dist/schemas/schema-utils.js +58 -0
  778. package/dist/schemas/schema.d.ts +37 -37
  779. package/dist/schemas/schema.js +119 -0
  780. package/dist/schemas/versions.d.ts +5 -5
  781. package/dist/schemas/versions.js +34 -0
  782. package/dist/schemas/vis-state-schema.d.ts +214 -214
  783. package/dist/schemas/vis-state-schema.js +886 -0
  784. package/dist/styles/base.d.ts +1530 -1530
  785. package/dist/styles/base.js +1301 -0
  786. package/dist/styles/index.d.ts +2 -2
  787. package/dist/styles/index.js +28 -0
  788. package/dist/styles/media-breakpoints.d.ts +13 -13
  789. package/dist/styles/media-breakpoints.js +70 -0
  790. package/dist/tasks/tasks.d.ts +15 -15
  791. package/dist/tasks/tasks.js +94 -0
  792. package/dist/templates/export-map-html.d.ts +9 -9
  793. package/dist/templates/export-map-html.js +42 -0
  794. package/dist/utils/aggregate-utils.d.ts +3 -3
  795. package/dist/utils/aggregate-utils.js +71 -0
  796. package/dist/utils/color-utils.d.ts +44 -44
  797. package/dist/utils/color-utils.js +144 -0
  798. package/dist/utils/custom-scales.js +22 -0
  799. package/dist/utils/data-scale-utils.d.ts +23 -23
  800. package/dist/utils/data-scale-utils.js +70 -0
  801. package/dist/utils/data-utils.d.ts +115 -115
  802. package/dist/utils/data-utils.js +441 -0
  803. package/dist/utils/dataset-utils.d.ts +38 -38
  804. package/dist/utils/dataset-utils.js +236 -0
  805. package/dist/utils/dom-to-image.d.ts +73 -73
  806. package/dist/utils/dom-to-image.js +479 -0
  807. package/dist/utils/dom-utils.d.ts +20 -20
  808. package/dist/utils/dom-utils.js +343 -0
  809. package/dist/utils/export-utils.d.ts +56 -56
  810. package/dist/utils/export-utils.js +266 -0
  811. package/dist/utils/filter-utils.d.ts +267 -267
  812. package/dist/utils/filter-utils.js +1081 -0
  813. package/dist/utils/gl-utils.d.ts +1 -1
  814. package/dist/utils/gl-utils.js +43 -0
  815. package/dist/utils/gpu-filter-utils.d.ts +28 -28
  816. package/dist/utils/gpu-filter-utils.js +241 -0
  817. package/dist/utils/index.d.ts +22 -22
  818. package/dist/utils/index.js +361 -0
  819. package/dist/utils/interaction-utils.d.ts +36 -36
  820. package/dist/utils/interaction-utils.js +170 -0
  821. package/dist/utils/layer-utils.d.ts +54 -54
  822. package/dist/utils/layer-utils.js +200 -0
  823. package/dist/utils/locale-utils.d.ts +2 -2
  824. package/dist/utils/locale-utils.js +56 -0
  825. package/dist/utils/map-info-utils.d.ts +1 -1
  826. package/dist/utils/map-info-utils.js +31 -0
  827. package/dist/utils/map-style-utils/mapbox-gl-style-editor.d.ts +64 -64
  828. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +213 -0
  829. package/dist/utils/map-style-utils/mapbox-utils.d.ts +3 -3
  830. package/dist/utils/map-style-utils/mapbox-utils.js +33 -0
  831. package/dist/utils/mapbox-utils.d.ts +7 -7
  832. package/dist/utils/mapbox-utils.js +36 -0
  833. package/dist/utils/notifications-utils.d.ts +54 -54
  834. package/dist/utils/notifications-utils.js +90 -0
  835. package/dist/utils/observe-dimensions.d.ts +15 -15
  836. package/dist/utils/observe-dimensions.js +142 -0
  837. package/dist/utils/projection-utils.d.ts +12 -12
  838. package/dist/utils/projection-utils.js +72 -0
  839. package/dist/utils/searcher-utils.d.ts +1 -1
  840. package/dist/utils/searcher-utils.js +42 -0
  841. package/dist/utils/split-map-utils.d.ts +29 -29
  842. package/dist/utils/split-map-utils.js +112 -0
  843. package/dist/utils/table-utils/data-container-interface.d.ts +115 -115
  844. package/dist/utils/table-utils/data-container-interface.js +6 -0
  845. package/dist/utils/table-utils/data-container-utils.d.ts +29 -29
  846. package/dist/utils/table-utils/data-container-utils.js +84 -0
  847. package/dist/utils/table-utils/data-row.d.ts +59 -59
  848. package/dist/utils/table-utils/data-row.js +124 -0
  849. package/dist/utils/table-utils/index.d.ts +1 -1
  850. package/dist/utils/table-utils/index.js +19 -0
  851. package/dist/utils/table-utils/indexed-data-container.d.ts +34 -34
  852. package/dist/utils/table-utils/indexed-data-container.js +228 -0
  853. package/dist/utils/table-utils/kepler-table.d.ts +168 -168
  854. package/dist/utils/table-utils/kepler-table.js +554 -0
  855. package/dist/utils/table-utils/row-data-container.d.ts +31 -31
  856. package/dist/utils/table-utils/row-data-container.js +220 -0
  857. package/dist/utils/utils.d.ts +98 -98
  858. package/dist/utils/utils.js +240 -0
  859. package/package.json +51 -33
  860. package/src/components/common/portaled.tsx +5 -9
  861. package/src/constants/action-types.ts +1 -1
  862. package/src/index.ts +1 -1
  863. package/src/middleware/index.ts +1 -1
  864. package/src/reducers/map-style-updaters.ts +1 -1
  865. package/src/reducers/provider-state-updaters.ts +1 -1
  866. package/src/reducers/root.ts +1 -1
  867. package/src/reducers/vis-state-updaters.ts +1 -1
  868. package/src/schemas/schema.ts +1 -1
  869. package/src/tasks/tasks.ts +1 -1
  870. package/dist/bundle.js +0 -54227
  871. package/dist/bundle.js.map +0 -1
  872. package/dist/deckgl-layers/layer-utils/cluster-utils.d.ts +0 -12
@@ -0,0 +1,977 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AggregationTypeSelector = void 0;
9
+ exports.ArcLayerColorSelectorFactory = ArcLayerColorSelectorFactory;
10
+ exports.ChannelByValueSelectorFactory = ChannelByValueSelectorFactory;
11
+ exports.HowToButton = void 0;
12
+ exports.LayerColorRangeSelectorFactory = LayerColorRangeSelectorFactory;
13
+ exports.LayerColorSelectorFactory = LayerColorSelectorFactory;
14
+ exports["default"] = LayerConfiguratorFactory;
15
+ exports.getVisConfiguratorProps = exports.getLayerFields = exports.getLayerDataset = exports.getLayerConfiguratorProps = exports.getLayerChannelConfigProps = void 0;
16
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
17
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
18
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
24
+ var _react = _interopRequireWildcard(require("react"));
25
+ var _propTypes = _interopRequireDefault(require("prop-types"));
26
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
27
+ var _localization = require("../../../localization");
28
+ var _styledComponents2 = require("../../common/styled-components");
29
+ var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
30
+ var _visConfigByFieldSelector = _interopRequireDefault(require("./vis-config-by-field-selector"));
31
+ var _layerColumnConfig = _interopRequireDefault(require("./layer-column-config"));
32
+ var _layerTypeSelector = _interopRequireDefault(require("./layer-type-selector"));
33
+ var _layerVisibilityByZoom = _interopRequireDefault(require("./layer-visibility-by-zoom"));
34
+ var _dimensionScaleSelector = _interopRequireDefault(require("./dimension-scale-selector"));
35
+ var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
36
+ var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
37
+ var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
38
+ var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
39
+ var _customMarkersConfigGroup = _interopRequireDefault(require("./custom-markers-config-group"));
40
+ var _textLabelPanel = _interopRequireDefault(require("./text-label-panel"));
41
+ var _utils = require("../../../utils/utils");
42
+ var _defaultSettings = require("../../../constants/default-settings");
43
+ var _types = require("../../../layers/types");
44
+ var _reactIntl = require("react-intl");
45
+ var _colorDimensionScaleSelector = _interopRequireDefault(require("./color-dimension-scale-selector"));
46
+ var _colorSelector = _interopRequireDefault(require("./color-selector"));
47
+ var _layerAggregationResolution = _interopRequireDefault(require("./layer-aggregation-resolution"));
48
+ var _colorRanges = require("../../../constants/color-ranges");
49
+ var _templateObject, _templateObject2, _templateObject3; // Copyright (c) 2022 Uber Technologies, Inc.
50
+ //
51
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
52
+ // of this software and associated documentation files (the "Software"), to deal
53
+ // in the Software without restriction, including without limitation the rights
54
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
55
+ // copies of the Software, and to permit persons to whom the Software is
56
+ // furnished to do so, subject to the following conditions:
57
+ //
58
+ // The above copyright notice and this permission notice shall be included in
59
+ // all copies or substantial portions of the Software.
60
+ //
61
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
62
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
63
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
64
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
65
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
66
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
67
+ // THE SOFTWARE.
68
+ /* eslint-disable complexity */
69
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
70
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
71
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
72
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
73
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
74
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
75
+ var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
76
+ className: 'layer-panel__config'
77
+ })(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-top: ", ";\n padding: ", ";\n border-left: ", " dashed\n ", ";\n"])), function (props) {
78
+ return props.theme.layerConfiguratorMargin;
79
+ }, function (props) {
80
+ return props.theme.layerConfiguratorPadding;
81
+ }, function (props) {
82
+ return props.theme.layerConfiguratorBorder;
83
+ }, function (props) {
84
+ return props.theme.layerConfiguratorBorderColor;
85
+ });
86
+ var StyledLayerVisualConfigurator = _styledComponents["default"].div.attrs({
87
+ className: 'layer-panel__config__visualC-config'
88
+ })(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
89
+ var getLayerFields = exports.getLayerFields = function getLayerFields(datasets, layer) {
90
+ return layer.config && datasets[layer.config.dataId] ? datasets[layer.config.dataId].fields : [];
91
+ };
92
+ var getLayerDataset = exports.getLayerDataset = function getLayerDataset(datasets, layer) {
93
+ return layer.config && datasets[layer.config.dataId] ? datasets[layer.config.dataId] : null;
94
+ };
95
+ var getLayerConfiguratorProps = exports.getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
96
+ return {
97
+ layer: props.layer,
98
+ disabled: Boolean(props.disabled),
99
+ fields: getLayerFields(props.datasets, props.layer),
100
+ onChange: props.updateLayerConfig,
101
+ setColorUI: props.updateLayerColorUI
102
+ };
103
+ };
104
+ var getVisConfiguratorProps = exports.getVisConfiguratorProps = function getVisConfiguratorProps(props) {
105
+ return {
106
+ layer: props.layer,
107
+ fields: getLayerFields(props.datasets, props.layer),
108
+ onChange: props.updateLayerVisConfig,
109
+ setColorUI: props.updateLayerColorUI
110
+ };
111
+ };
112
+ var getLayerChannelConfigProps = exports.getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
113
+ return {
114
+ layer: props.layer,
115
+ fields: getLayerFields(props.datasets, props.layer),
116
+ onChange: props.updateLayerVisualChannelConfig,
117
+ onChangeVisConfig: props.updateLayerVisConfig
118
+ };
119
+ };
120
+ LayerConfiguratorFactory.deps = [_sourceDataSelector["default"], _visConfigSlider["default"], _textLabelPanel["default"], _layerConfigGroup["default"], ChannelByValueSelectorFactory, _layerColumnConfig["default"], _layerTypeSelector["default"], _visConfigSwitch["default"], AggrScaleSelectorFactory, _layerVisibilityByZoom["default"], _layerAggregationResolution["default"], LayerColorSelectorFactory, LayerColorRangeSelectorFactory, ArcLayerColorSelectorFactory, _customMarkersConfigGroup["default"]];
121
+ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabelPanel, LayerConfigGroup, ChannelByValueSelector, LayerColumnConfig, LayerTypeSelector, VisConfigSwitch, AggrScaleSelector, LayerVisibilityByZoom, LayerAggregationResolution, LayerColorSelector, LayerColorRangeSelector, ArcLayerColorSelector, CustomMarkersConfigGroup) {
122
+ var LayerConfigurator = /*#__PURE__*/function (_Component) {
123
+ function LayerConfigurator() {
124
+ (0, _classCallCheck2["default"])(this, LayerConfigurator);
125
+ return _callSuper(this, LayerConfigurator, arguments);
126
+ }
127
+ (0, _inherits2["default"])(LayerConfigurator, _Component);
128
+ return (0, _createClass2["default"])(LayerConfigurator, [{
129
+ key: "_renderPointLayerConfig",
130
+ value: function _renderPointLayerConfig(props) {
131
+ return this._renderScatterplotLayerConfig(props);
132
+ }
133
+ }, {
134
+ key: "_renderIconLayerConfig",
135
+ value: function _renderIconLayerConfig(props) {
136
+ return this._renderScatterplotLayerConfig(props);
137
+ }
138
+ }, {
139
+ key: "_renderScatterplotLayerConfig",
140
+ value: function _renderScatterplotLayerConfig(_ref) {
141
+ var layer = _ref.layer,
142
+ visConfiguratorProps = _ref.visConfiguratorProps,
143
+ layerChannelConfigProps = _ref.layerChannelConfigProps,
144
+ layerConfiguratorProps = _ref.layerConfiguratorProps;
145
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled || {
146
+ label: 'layer.color'
147
+ }, visConfiguratorProps, {
148
+ collapsible: true
149
+ }), 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"])({
150
+ channel: layer.visualChannels.color
151
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), layer.type === _types.LAYER_TYPES.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
152
+ collapsible: true,
153
+ disabled: Boolean(layer.config.visConfig.customMarkers)
154
+ }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
155
+ channel: "strokeColor"
156
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
157
+ selectedColor: layer.config.visConfig.strokeColor,
158
+ property: "strokeColor"
159
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
160
+ channel: layer.visualChannels.strokeColor
161
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
162
+ disabled: !layer.config.visConfig.outline
163
+ })))) : null, layer.type === _types.LAYER_TYPES.point ? /*#__PURE__*/_react["default"].createElement(CustomMarkersConfigGroup, {
164
+ layer: layer,
165
+ visConfiguratorProps: visConfiguratorProps,
166
+ layerChannelConfigProps: layerChannelConfigProps
167
+ }) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
168
+ label: layer.config.visConfig.customMarkers ? 'layer.size' : 'layer.radius',
169
+ collapsible: true
170
+ }, !layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
171
+ label: false,
172
+ disabled: Boolean(layer.config.sizeField)
173
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
174
+ label: false,
175
+ disabled: !layer.config.sizeField
176
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
177
+ channel: layer.visualChannels.size
178
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
179
+ fields: visConfiguratorProps.fields,
180
+ updateLayerTextLabel: this.props.updateLayerTextLabel,
181
+ textLabel: layer.config.textLabel,
182
+ colorPalette: visConfiguratorProps.colorPalette,
183
+ setColorPaletteUI: visConfiguratorProps.setColorPaletteUI
184
+ }));
185
+ }
186
+ }, {
187
+ key: "_renderClusterLayerConfig",
188
+ value: function _renderClusterLayerConfig(_ref2) {
189
+ var layer = _ref2.layer,
190
+ visConfiguratorProps = _ref2.visConfiguratorProps,
191
+ layerConfiguratorProps = _ref2.layerConfiguratorProps,
192
+ layerChannelConfigProps = _ref2.layerChannelConfigProps;
193
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
194
+ label: 'layer.color',
195
+ collapsible: true
196
+ }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
197
+ channel: layer.visualChannels.color,
198
+ onChangeVisConfig: layerChannelConfigProps.onChangeVisConfig
199
+ })), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
200
+ channel: layer.visualChannels.color
201
+ }, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
202
+ channel: layer.visualChannels.color
203
+ })) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
204
+ label: 'layer.radius',
205
+ collapsible: true
206
+ }, /*#__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)))));
207
+ }
208
+ }, {
209
+ key: "_renderHeatmapLayerConfig",
210
+ value: function _renderHeatmapLayerConfig(_ref3) {
211
+ var layer = _ref3.layer,
212
+ visConfiguratorProps = _ref3.visConfiguratorProps,
213
+ layerConfiguratorProps = _ref3.layerConfiguratorProps,
214
+ layerChannelConfigProps = _ref3.layerChannelConfigProps;
215
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
216
+ label: 'layer.color',
217
+ collapsible: true
218
+ }, /*#__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, {
219
+ label: 'layer.radius'
220
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
221
+ label: false
222
+ }))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
223
+ label: 'layer.weight'
224
+ }, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
225
+ channel: layer.visualChannels.weight
226
+ }, layerChannelConfigProps))));
227
+ }
228
+ }, {
229
+ key: "_renderGridLayerConfig",
230
+ value: function _renderGridLayerConfig(props) {
231
+ return this._renderAggregationLayerConfig(props);
232
+ }
233
+ }, {
234
+ key: "_renderHexagonLayerConfig",
235
+ value: function _renderHexagonLayerConfig(props) {
236
+ return this._renderAggregationLayerConfig(props);
237
+ }
238
+ }, {
239
+ key: "_renderAggregationLayerConfig",
240
+ value: function _renderAggregationLayerConfig(_ref4) {
241
+ var layer = _ref4.layer,
242
+ visConfiguratorProps = _ref4.visConfiguratorProps,
243
+ layerConfiguratorProps = _ref4.layerConfiguratorProps,
244
+ layerChannelConfigProps = _ref4.layerChannelConfigProps;
245
+ var config = layer.config;
246
+ var enable3d = config.visConfig.enable3d;
247
+ var elevationByDescription = 'layer.elevationByDescription';
248
+ var colorByDescription = 'layer.colorByDescription';
249
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
250
+ label: 'layer.color',
251
+ collapsible: true
252
+ }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
253
+ channel: layer.visualChannels.color,
254
+ onChangeVisConfig: layerChannelConfigProps.onChangeVisConfig
255
+ })), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
256
+ channel: layer.visualChannels.color
257
+ }, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
258
+ description: colorByDescription,
259
+ channel: layer.visualChannels.color
260
+ })) : 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, {
261
+ label: 'layer.radius',
262
+ collapsible: true
263
+ }, /*#__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, {
264
+ collapsible: true
265
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
266
+ label: "layerVisConfigs.heightMultiplier"
267
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
268
+ channel: layer.visualChannels.size,
269
+ description: elevationByDescription,
270
+ disabled: !enable3d
271
+ })), /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
272
+ channel: layer.visualChannels.size,
273
+ onChangeVisConfig: layerChannelConfigProps.onChangeVisConfig
274
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
275
+ label: "layerVisConfigs.heightRange"
276
+ })), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
277
+ channel: layer.visualChannels.size
278
+ })) : null, layer.visConfigSettings.elevationPercentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null)) : null);
279
+ }
280
+
281
+ // TODO: Shan move these into layer class
282
+ }, {
283
+ key: "_renderHexagonIdLayerConfig",
284
+ value: function _renderHexagonIdLayerConfig(_ref5) {
285
+ var layer = _ref5.layer,
286
+ visConfiguratorProps = _ref5.visConfiguratorProps,
287
+ layerConfiguratorProps = _ref5.layerConfiguratorProps,
288
+ layerChannelConfigProps = _ref5.layerChannelConfigProps;
289
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
290
+ label: 'layer.color',
291
+ collapsible: true
292
+ }, 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"])({
293
+ channel: layer.visualChannels.color
294
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
295
+ label: 'layer.coverage',
296
+ collapsible: true
297
+ }, !layer.config.coverageField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps, {
298
+ label: false
299
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverageRange, visConfiguratorProps, {
300
+ label: false
301
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
302
+ channel: layer.visualChannels.coverage
303
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
304
+ collapsible: true
305
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
306
+ channel: layer.visualChannels.size
307
+ }, 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, {
308
+ label: "layerVisConfigs.heightRange"
309
+ })))));
310
+ }
311
+ }, {
312
+ key: "_renderArcLayerConfig",
313
+ value: function _renderArcLayerConfig(args) {
314
+ return this._renderLineLayerConfig(args);
315
+ }
316
+ }, {
317
+ key: "_renderLineLayerConfig",
318
+ value: function _renderLineLayerConfig(_ref6) {
319
+ var layer = _ref6.layer,
320
+ visConfiguratorProps = _ref6.visConfiguratorProps,
321
+ layerConfiguratorProps = _ref6.layerConfiguratorProps,
322
+ layerChannelConfigProps = _ref6.layerChannelConfigProps;
323
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
324
+ label: 'layer.color',
325
+ collapsible: true
326
+ }, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(ArcLayerColorSelector, {
327
+ layer: layer,
328
+ setColorUI: layerConfiguratorProps.setColorUI,
329
+ onChangeConfig: layerConfiguratorProps.onChange,
330
+ onChangeVisConfig: visConfiguratorProps.onChange
331
+ }), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
332
+ channel: layer.visualChannels.sourceColor
333
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
334
+ label: 'layer.stroke',
335
+ collapsible: true
336
+ }, layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
337
+ disabled: !layer.config.sizeField,
338
+ label: false
339
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
340
+ label: false
341
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
342
+ channel: layer.visualChannels.size
343
+ }, layerChannelConfigProps)))), layer.visConfigSettings.elevationScale ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
344
+ label: "layerVisConfigs.elevationScale",
345
+ collapsible: true
346
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps))) : null);
347
+ }
348
+ }, {
349
+ key: "_renderTripLayerConfig",
350
+ value: function _renderTripLayerConfig(_ref7) {
351
+ var layer = _ref7.layer,
352
+ visConfiguratorProps = _ref7.visConfiguratorProps,
353
+ layerConfiguratorProps = _ref7.layerConfiguratorProps,
354
+ layerChannelConfigProps = _ref7.layerChannelConfigProps;
355
+ var _layer$meta$featureTy = layer.meta.featureTypes,
356
+ featureTypes = _layer$meta$featureTy === void 0 ? {} : _layer$meta$featureTy;
357
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
358
+ label: 'layer.color',
359
+ collapsible: true
360
+ }, 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"])({
361
+ channel: layer.visualChannels.color
362
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
363
+ label: "layer.strokeWidth",
364
+ collapsible: true
365
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
366
+ label: false
367
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
368
+ label: false
369
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
370
+ channel: layer.visualChannels.size
371
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
372
+ label: "layer.trailLength",
373
+ description: "layer.trailLengthDescription"
374
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.trailLength, visConfiguratorProps, {
375
+ label: false
376
+ }))));
377
+ }
378
+ }, {
379
+ key: "_renderGeojsonLayerConfig",
380
+ value: function _renderGeojsonLayerConfig(_ref8) {
381
+ var layer = _ref8.layer,
382
+ visConfiguratorProps = _ref8.visConfiguratorProps,
383
+ layerConfiguratorProps = _ref8.layerConfiguratorProps,
384
+ layerChannelConfigProps = _ref8.layerChannelConfigProps;
385
+ var _layer$meta$featureTy2 = layer.meta.featureTypes,
386
+ featureTypes = _layer$meta$featureTy2 === void 0 ? {} : _layer$meta$featureTy2,
387
+ visConfig = layer.config.visConfig;
388
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, featureTypes.polygon || featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
389
+ label: "layer.fillColor",
390
+ collapsible: true
391
+ }), 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"])({
392
+ channel: layer.visualChannels.color
393
+ }, 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, {
394
+ label: "layer.strokeColor",
395
+ collapsible: true
396
+ }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
397
+ channel: "strokeColor"
398
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
399
+ selectedColor: layer.config.visConfig.strokeColor,
400
+ property: "strokeColor"
401
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
402
+ channel: layer.visualChannels.strokeColor
403
+ }, 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 : {}, {
404
+ label: "layer.strokeWidth",
405
+ collapsible: true
406
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
407
+ label: false
408
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
409
+ label: false
410
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
411
+ channel: layer.visualChannels.size
412
+ }, layerChannelConfigProps)))), featureTypes.polygon ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
413
+ disabled: !visConfig.filled,
414
+ collapsible: true
415
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
416
+ label: false
417
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
418
+ channel: layer.visualChannels.height
419
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))) : null, featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
420
+ label: 'layer.radius',
421
+ collapsible: true
422
+ }, !layer.config.radiusField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
423
+ label: false,
424
+ disabled: Boolean(layer.config.radiusField)
425
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
426
+ label: false,
427
+ disabled: !layer.config.radiusField
428
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
429
+ channel: layer.visualChannels.radius
430
+ }, layerChannelConfigProps)))) : null);
431
+ }
432
+ }, {
433
+ key: "_render3DLayerConfig",
434
+ value: function _render3DLayerConfig(_ref9) {
435
+ var layer = _ref9.layer,
436
+ visConfiguratorProps = _ref9.visConfiguratorProps;
437
+ return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
438
+ label: 'layer.3DModel',
439
+ collapsible: true
440
+ }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
441
+ type: "file",
442
+ accept: ".glb,.gltf",
443
+ onChange: function onChange(e) {
444
+ if (e.target.files && e.target.files[0]) {
445
+ var url = URL.createObjectURL(e.target.files[0]);
446
+ visConfiguratorProps.onChange({
447
+ scenegraph: url
448
+ });
449
+ }
450
+ }
451
+ })), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
452
+ label: 'layer.3DModelOptions',
453
+ collapsible: true
454
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeScale, visConfiguratorProps, {
455
+ disabled: false
456
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleX, visConfiguratorProps, {
457
+ disabled: false
458
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleY, visConfiguratorProps, {
459
+ disabled: false
460
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleZ, visConfiguratorProps, {
461
+ disabled: false
462
+ }))));
463
+ }
464
+ }, {
465
+ key: "_renderS2LayerConfig",
466
+ value: function _renderS2LayerConfig(_ref10) {
467
+ var layer = _ref10.layer,
468
+ visConfiguratorProps = _ref10.visConfiguratorProps,
469
+ layerConfiguratorProps = _ref10.layerConfiguratorProps,
470
+ layerChannelConfigProps = _ref10.layerChannelConfigProps;
471
+ var visConfig = layer.config.visConfig;
472
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
473
+ label: "layer.fillColor",
474
+ collapsible: true
475
+ }), 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"])({
476
+ channel: layer.visualChannels.color
477
+ }, 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, {
478
+ label: "layer.strokeColor",
479
+ collapsible: true
480
+ }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
481
+ channel: "strokeColor"
482
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
483
+ selectedColor: layer.config.visConfig.strokeColor,
484
+ property: "strokeColor"
485
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
486
+ channel: layer.visualChannels.strokeColor
487
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
488
+ label: "layer.strokeWidth",
489
+ collapsible: true
490
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
491
+ label: false
492
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
493
+ label: false
494
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
495
+ channel: layer.visualChannels.size
496
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
497
+ disabled: !visConfig.filled,
498
+ collapsible: true
499
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
500
+ channel: layer.visualChannels.height
501
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
502
+ label: "layerVisConfigs.elevationScale"
503
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.heightRange, visConfiguratorProps, {
504
+ label: "layerVisConfigs.heightRange"
505
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))));
506
+ }
507
+ }, {
508
+ key: "render",
509
+ value: function render() {
510
+ var _this = this;
511
+ // @ts-expect-error
512
+ var _this$props = this.props,
513
+ layer = _this$props.layer,
514
+ datasets = _this$props.datasets,
515
+ updateLayerConfig = _this$props.updateLayerConfig,
516
+ layerTypeOptions = _this$props.layerTypeOptions,
517
+ updateLayerType = _this$props.updateLayerType;
518
+ var _ref11 = layer.config.dataId ? datasets[layer.config.dataId] : {},
519
+ _ref11$fields = _ref11.fields,
520
+ fields = _ref11$fields === void 0 ? [] : _ref11$fields,
521
+ _ref11$fieldPairs = _ref11.fieldPairs,
522
+ fieldPairs = _ref11$fieldPairs === void 0 ? undefined : _ref11$fieldPairs;
523
+ var config = layer.config;
524
+ var visConfiguratorProps = getVisConfiguratorProps(this.props);
525
+ var layerConfiguratorProps = getLayerConfiguratorProps(this.props);
526
+ var layerChannelConfigProps = getLayerChannelConfigProps(this.props);
527
+ var dataset = getLayerDataset(datasets, layer);
528
+ var renderTemplate = layer.type && "_render".concat((0, _utils.capitalizeFirstLetter)(layer.type), "LayerConfig");
529
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, layer.layerInfoModal ?
530
+ /*#__PURE__*/
531
+ // @ts-expect-error
532
+ _react["default"].createElement(HowToButton, {
533
+ onClick: function onClick() {
534
+ return _this.props.openModal(layer.layerInfoModal);
535
+ }
536
+ }) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
537
+ label: 'layer.basic',
538
+ collapsible: Object.keys(layer.config.columns).length > 0,
539
+ expanded: !layer.hasAllColumns()
540
+ }, /*#__PURE__*/_react["default"].createElement(LayerTypeSelector, {
541
+ datasets: datasets,
542
+ layer: layer,
543
+ layerTypeOptions: layerTypeOptions,
544
+ onSelect: updateLayerType
545
+ }), /*#__PURE__*/_react["default"].createElement(LayerVisibilityByZoom
546
+ // @ts-expect-error
547
+ , {
548
+ updateLayerConfig: this.props.updateLayerConfig,
549
+ layer: layer,
550
+ disabled: layerConfiguratorProps.disabled
551
+ }), /*#__PURE__*/_react["default"].createElement(LayerAggregationResolution, {
552
+ layer: layer,
553
+ disabled: layerConfiguratorProps.disabled
554
+ }), Object.keys(datasets).length > 1 && /*#__PURE__*/_react["default"].createElement(SourceDataSelector, {
555
+ datasets: datasets,
556
+ id: layer.id,
557
+ dataId: config.dataId,
558
+ onSelect: function onSelect(value) {
559
+ return updateLayerConfig({
560
+ dataId: value
561
+ });
562
+ }
563
+ }), Object.keys(layer.config.columns).length > 0 && /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(LayerColumnConfig, {
564
+ columnPairs: layer.columnPairs,
565
+ columns: layer.config.columns,
566
+ assignColumnPairs: layer.assignColumnPairs.bind(layer),
567
+ assignColumn: layer.assignColumn.bind(layer),
568
+ columnLabels: layer.columnLabels,
569
+ fields: fields,
570
+ fieldPairs: fieldPairs,
571
+ updateLayerConfig: updateLayerConfig
572
+ // @ts-expect-error
573
+ ,
574
+ updateLayerType: this.props.updateLayerType
575
+ }))), this[renderTemplate] && this[renderTemplate]({
576
+ layer: layer,
577
+ dataset: dataset,
578
+ visConfiguratorProps: visConfiguratorProps,
579
+ layerChannelConfigProps: layerChannelConfigProps,
580
+ layerConfiguratorProps: layerConfiguratorProps
581
+ }));
582
+ }
583
+ }]);
584
+ }(_react.Component);
585
+ (0, _defineProperty2["default"])(LayerConfigurator, "propTypes", {
586
+ disabled: _propTypes["default"].bool,
587
+ layer: _propTypes["default"].object.isRequired,
588
+ datasets: _propTypes["default"].object.isRequired,
589
+ layerTypeOptions: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
590
+ openModal: _propTypes["default"].func.isRequired,
591
+ updateLayerConfig: _propTypes["default"].func.isRequired,
592
+ updateLayerType: _propTypes["default"].func.isRequired,
593
+ updateLayerTextLabel: _propTypes["default"].func.isRequired,
594
+ updateLayerVisConfig: _propTypes["default"].func.isRequired,
595
+ updateLayerVisualChannelConfig: _propTypes["default"].func.isRequired,
596
+ updateLayerColorUI: _propTypes["default"].func.isRequired
597
+ });
598
+ return LayerConfigurator;
599
+ }
600
+ /*
601
+ * Componentize config component into pure functional components
602
+ */
603
+
604
+ var StyledHowToButton = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n right: 12px;\n top: -4px;\n"])));
605
+ var HowToButton = exports.HowToButton = function HowToButton(_ref12) {
606
+ var onClick = _ref12.onClick;
607
+ return /*#__PURE__*/_react["default"].createElement(StyledHowToButton, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, {
608
+ link: true,
609
+ small: true,
610
+ onClick: onClick
611
+ }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
612
+ id: 'layerConfiguration.howTo'
613
+ })));
614
+ };
615
+ LayerColorSelectorFactory.deps = [_colorSelector["default"]];
616
+ function LayerColorSelectorFactory(ColorSelector) {
617
+ var LayerColorSelector = /*#__PURE__*/function (_Component2) {
618
+ function LayerColorSelector() {
619
+ (0, _classCallCheck2["default"])(this, LayerColorSelector);
620
+ return _callSuper(this, LayerColorSelector, arguments);
621
+ }
622
+ (0, _inherits2["default"])(LayerColorSelector, _Component2);
623
+ return (0, _createClass2["default"])(LayerColorSelector, [{
624
+ key: "render",
625
+ value: function render() {
626
+ // @ts-expect-error
627
+ var _this$props2 = this.props,
628
+ layer = _this$props2.layer,
629
+ onChange = _this$props2.onChange,
630
+ selectedColor = _this$props2.selectedColor,
631
+ _this$props2$property = _this$props2.property,
632
+ property = _this$props2$property === void 0 ? 'color' : _this$props2$property,
633
+ _setColorUI = _this$props2.setColorUI,
634
+ fields = _this$props2.fields;
635
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
636
+ id: "layer.color"
637
+ })), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
638
+ fields: fields,
639
+ colorSets: [{
640
+ selectedColor: selectedColor || layer.config.color,
641
+ setColor: function setColor(rgbValue) {
642
+ return onChange((0, _defineProperty2["default"])({}, property, rgbValue));
643
+ }
644
+ }],
645
+ colorUI: layer.config.colorUI[property],
646
+ setColorUI: function setColorUI(newConfig) {
647
+ return _setColorUI(property, newConfig);
648
+ }
649
+ }));
650
+ }
651
+ }]);
652
+ }(_react.Component);
653
+ return LayerColorSelector;
654
+ }
655
+ ArcLayerColorSelectorFactory.deps = [_colorSelector["default"]];
656
+ function ArcLayerColorSelectorFactory(ColorSelector) {
657
+ var ArcLayerColorSelector = /*#__PURE__*/function (_Component3) {
658
+ function ArcLayerColorSelector() {
659
+ (0, _classCallCheck2["default"])(this, ArcLayerColorSelector);
660
+ return _callSuper(this, ArcLayerColorSelector, arguments);
661
+ }
662
+ (0, _inherits2["default"])(ArcLayerColorSelector, _Component3);
663
+ return (0, _createClass2["default"])(ArcLayerColorSelector, [{
664
+ key: "render",
665
+ value: function render() {
666
+ var _ref13 = this.props,
667
+ layer = _ref13.layer,
668
+ onChangeConfig = _ref13.onChangeConfig,
669
+ onChangeVisConfig = _ref13.onChangeVisConfig,
670
+ _ref13$property = _ref13.property,
671
+ property = _ref13$property === void 0 ? 'color' : _ref13$property,
672
+ _setColorUI2 = _ref13.setColorUI,
673
+ fields = _ref13.fields;
674
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
675
+ id: "layer.colorRange"
676
+ })), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
677
+ fields: fields,
678
+ colorSets: [{
679
+ selectedColor: layer.config.color,
680
+ setColor: function setColor(rgbValue) {
681
+ return onChangeConfig({
682
+ color: rgbValue
683
+ });
684
+ },
685
+ label: 'Source'
686
+ }, {
687
+ selectedColor: layer.config.visConfig.targetColor || layer.config.color,
688
+ setColor: function setColor(rgbValue) {
689
+ return onChangeVisConfig({
690
+ targetColor: rgbValue
691
+ });
692
+ },
693
+ label: 'Target'
694
+ }],
695
+ colorUI: layer.config.colorUI[property],
696
+ setColorUI: function setColorUI(newConfig) {
697
+ return _setColorUI2(property, newConfig);
698
+ }
699
+ }));
700
+ }
701
+ }]);
702
+ }(_react.Component);
703
+ return ArcLayerColorSelector;
704
+ }
705
+ LayerColorRangeSelectorFactory.deps = [_colorSelector["default"]];
706
+ function LayerColorRangeSelectorFactory(ColorSelector) {
707
+ var LayerColorRangeSelector = /*#__PURE__*/function (_Component4) {
708
+ function LayerColorRangeSelector() {
709
+ (0, _classCallCheck2["default"])(this, LayerColorRangeSelector);
710
+ return _callSuper(this, LayerColorRangeSelector, arguments);
711
+ }
712
+ (0, _inherits2["default"])(LayerColorRangeSelector, _Component4);
713
+ return (0, _createClass2["default"])(LayerColorRangeSelector, [{
714
+ key: "__renderHeatmapColorSelectorComponent",
715
+ value: function __renderHeatmapColorSelectorComponent() {
716
+ var property = 'colorRange';
717
+ var _ref14 = this.props,
718
+ layer = _ref14.layer,
719
+ onChange = _ref14.onChange,
720
+ _setColorUI3 = _ref14.setColorUI;
721
+ return /*#__PURE__*/_react["default"].createElement(ColorSelector, {
722
+ colorSets: [{
723
+ selectedColor: layer.config.visConfig[property],
724
+ isRange: true,
725
+ setColor: function setColor(colorRange) {
726
+ var colorMap = layer.config.visConfig[property].colorMap;
727
+ var colorRangeUpdated = colorMap ? layer.updateColorMap(property, colorMap, colorRange) : colorRange;
728
+ onChange((0, _defineProperty2["default"])({}, property, colorRangeUpdated));
729
+ }
730
+ }],
731
+ colorUI: layer.config.colorUI[property],
732
+ setColorUI: function setColorUI(newConfig) {
733
+ return _setColorUI3(property, newConfig);
734
+ }
735
+ });
736
+ }
737
+ }, {
738
+ key: "__renderDefaultColorSelectorComponent",
739
+ value: function __renderDefaultColorSelectorComponent() {
740
+ var _ref15 = this.props,
741
+ layer = _ref15.layer,
742
+ onChange = _ref15.onChange,
743
+ _ref15$channel = _ref15.channel,
744
+ channel = _ref15$channel === void 0 ? 'color' : _ref15$channel,
745
+ _setColorUI4 = _ref15.setColorUI,
746
+ fields = _ref15.fields,
747
+ _ref15$handleCustomOn = _ref15.handleCustomOnSelectHexColumn,
748
+ handleCustomOnSelectHexColumn = _ref15$handleCustomOn === void 0 ? function () {
749
+ return null;
750
+ } : _ref15$handleCustomOn;
751
+ var _layer$visualChannels = layer.visualChannels[channel],
752
+ property = _layer$visualChannels.range,
753
+ field = _layer$visualChannels.field,
754
+ scale = _layer$visualChannels.scale;
755
+ return /*#__PURE__*/_react["default"].createElement(ColorSelector, {
756
+ fields: fields,
757
+ colorSets: [{
758
+ selectedColor: layer.config.visConfig[property],
759
+ isRange: true,
760
+ setColor: function setColor(colorRange) {
761
+ var colorMap = layer.config.visConfig[property].colorMap;
762
+ var colorRangeUpdated = colorMap ? layer.updateColorMap(property, colorMap, colorRange) : colorRange;
763
+ // Ensure that scale changes from identity to ordinal
764
+ // Validate scale to ensure that it changes from `identity` to the correct one.
765
+ if (layer.isColoredByColorColumn(property)) {
766
+ layer.updateLayerConfig((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, layer.config[field]), {}, {
767
+ colorColumn: null,
768
+ colorColumnIdx: null
769
+ })), scale, _defaultSettings.SCALE_TYPES.ordinal));
770
+ layer.validateScale(channel);
771
+ }
772
+ // ---------------------------------------
773
+ onChange((0, _defineProperty2["default"])({}, property, colorRangeUpdated));
774
+ }
775
+ }],
776
+ colorUI: layer.config.colorUI[property],
777
+ setColorUI: function setColorUI(newConfig) {
778
+ return _setColorUI4(property, newConfig);
779
+ },
780
+ onSelectHexColorColumn: function onSelectHexColorColumn(colorColumn) {
781
+ // It's defined in CN: see workspace-www/src/features/builder/ui/KeplerGl/SidePanel/LayerPanel/LayerColorRangeSelector.tsx
782
+ handleCustomOnSelectHexColumn(layer, colorColumn);
783
+ layer.updateLayerConfig((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, layer.config[field]), {}, {
784
+ colorColumn: colorColumn === null || colorColumn === void 0 ? void 0 : colorColumn.name,
785
+ colorColumnIdx: colorColumn === null || colorColumn === void 0 ? void 0 : colorColumn.fieldIdx
786
+ })), scale, _defaultSettings.SCALE_TYPES.identity));
787
+ onChange((0, _defineProperty2["default"])({}, property, _colorRanges.hexColorCustomPalette));
788
+ }
789
+ });
790
+ }
791
+ }, {
792
+ key: "render",
793
+ value: function render() {
794
+ var _ref16 = this.props,
795
+ layer = _ref16.layer;
796
+ var renderColorSelectorComponent = this.__renderDefaultColorSelectorComponent.bind(this);
797
+ if (layer.type === _types.LAYER_TYPES.heatmap) {
798
+ renderColorSelectorComponent = this.__renderHeatmapColorSelectorComponent.bind(this);
799
+ }
800
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
801
+ id: "layer.colorRange"
802
+ })), renderColorSelectorComponent());
803
+ }
804
+ }]);
805
+ }(_react.Component);
806
+ return LayerColorRangeSelector;
807
+ }
808
+ ChannelByValueSelectorFactory.deps = [_visConfigByFieldSelector["default"]];
809
+ function ChannelByValueSelectorFactory(VisConfigByFieldSelector) {
810
+ var ChannelByValueSelector = function ChannelByValueSelector(_ref17) {
811
+ var layer = _ref17.layer,
812
+ channel = _ref17.channel,
813
+ onChange = _ref17.onChange,
814
+ onChangeVisConfig = _ref17.onChangeVisConfig,
815
+ fields = _ref17.fields,
816
+ fieldsAggregated = _ref17.fieldsAggregated,
817
+ description = _ref17.description,
818
+ isLoading = _ref17.isLoading;
819
+ var channelScaleType = channel.channelScaleType,
820
+ domain = channel.domain,
821
+ field = channel.field,
822
+ aggregation = channel.aggregation,
823
+ key = channel.key,
824
+ property = channel.property,
825
+ range = channel.range,
826
+ scale = channel.scale,
827
+ defaultMeasure = channel.defaultMeasure,
828
+ supportedFieldTypes = channel.supportedFieldTypes;
829
+ var channelSupportedFieldTypes = supportedFieldTypes || _defaultSettings.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType];
830
+ var supportedFields = fields.filter(function (_ref18) {
831
+ var type = _ref18.type;
832
+ return channelSupportedFieldTypes.includes(type);
833
+ });
834
+ var scaleOptions = layer.getScaleOptions(channel.key);
835
+ var showScaleCustomizable = channelScaleType === _defaultSettings.CHANNEL_SCALES.color && scale && layer.config[scale] && Boolean(layer.config[field]) && (scaleOptions === null || scaleOptions === void 0 ? void 0 : scaleOptions.length) > 0;
836
+ var showScale = Boolean(!showScaleCustomizable && scale && !layer.isAggregated && layer.config[scale] && (scaleOptions === null || scaleOptions === void 0 ? void 0 : scaleOptions.length) > 1);
837
+ var defaultDescription = 'layerConfiguration.defaultDescription';
838
+ var visRange = layer.config.visConfig[range];
839
+ var aggregator = layer.config.visConfig[aggregation];
840
+ return /*#__PURE__*/_react["default"].createElement(VisConfigByFieldSelector, {
841
+ channel: channel.key,
842
+ description: description || defaultDescription,
843
+ domain: layer.config[domain],
844
+ fields: supportedFields,
845
+ aggregator: aggregator,
846
+ fieldsAggregated: fieldsAggregated,
847
+ id: layer.id,
848
+ key: "".concat(key, "-channel-selector"),
849
+ property: property,
850
+ placeholder: defaultMeasure || 'placeholder.selectField',
851
+ range: visRange,
852
+ scaleOptions: scaleOptions,
853
+ scaleType: scale ? layer.config[scale] : null,
854
+ selectedField: layer.config[field],
855
+ showScale: showScale,
856
+ showScaleCustomizable: showScaleCustomizable,
857
+ updateField: function updateField(val) {
858
+ if (visRange !== null && visRange !== void 0 && visRange.colorMap) {
859
+ onChangeVisConfig((0, _defineProperty2["default"])({}, range, _objectSpread(_objectSpread({}, visRange), {}, {
860
+ colorMap: undefined
861
+ })));
862
+ }
863
+ if (!val) {
864
+ // Clean everything and comeback to default behaviour
865
+ onChange((0, _defineProperty2["default"])({}, field, null), key);
866
+ onChangeVisConfig((0, _defineProperty2["default"])({}, range, _colorRanges.DEFAULT_COLOR_RANGE));
867
+ }
868
+ onChange(_objectSpread((0, _defineProperty2["default"])({}, field, val), fieldsAggregated && {
869
+ visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, val === null || val === void 0 ? void 0 : val.selectedAggregator))
870
+ }), key);
871
+ layer.validateScale(key);
872
+ },
873
+ updateScale: function updateScale(val) {
874
+ return onChange((0, _defineProperty2["default"])({}, scale, val), key);
875
+ },
876
+ updateCustomPalette: function updateCustomPalette(colorMap, uiCustomScaleType) {
877
+ onChangeVisConfig((0, _defineProperty2["default"])({}, range, _objectSpread(_objectSpread({}, visRange), {}, {
878
+ colorMap: colorMap,
879
+ uiCustomScaleType: uiCustomScaleType
880
+ })));
881
+ },
882
+ isLoading: isLoading
883
+ });
884
+ };
885
+ return ChannelByValueSelector;
886
+ }
887
+ AggrScaleSelectorFactory.deps = [_colorDimensionScaleSelector["default"]];
888
+ function AggrScaleSelectorFactory(ColorDimensionScaleSelector) {
889
+ var AggrScaleSelector = /*#__PURE__*/function (_Component5) {
890
+ function AggrScaleSelector() {
891
+ (0, _classCallCheck2["default"])(this, AggrScaleSelector);
892
+ return _callSuper(this, AggrScaleSelector, arguments);
893
+ }
894
+ (0, _inherits2["default"])(AggrScaleSelector, _Component5);
895
+ return (0, _createClass2["default"])(AggrScaleSelector, [{
896
+ key: "render",
897
+ value: function render() {
898
+ var _ref19 = this.props,
899
+ channel = _ref19.channel,
900
+ layer = _ref19.layer,
901
+ onChange = _ref19.onChange,
902
+ onChangeVisConfig = _ref19.onChangeVisConfig;
903
+ var scale = channel.scale,
904
+ key = channel.key,
905
+ channelScaleType = channel.channelScaleType,
906
+ domain = channel.domain,
907
+ range = channel.range;
908
+ var scaleOptions = layer.getScaleOptions(key);
909
+ var visRange = layer.config.visConfig[range];
910
+ var showScaleCustomizable = channelScaleType === _defaultSettings.CHANNEL_SCALES.colorAggr && Array.isArray(scaleOptions) && scaleOptions.length > 0;
911
+ var showScale = Array.isArray(scaleOptions) && scaleOptions.length > 1;
912
+ if (showScaleCustomizable) {
913
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(ColorDimensionScaleSelector, {
914
+ label: "".concat(key, " Scale"),
915
+ scaleType: layer.config[scale],
916
+ options: scaleOptions,
917
+ domain: layer.config[domain],
918
+ range: visRange,
919
+ onSelect: function onSelect(val) {
920
+ return onChange((0, _defineProperty2["default"])({}, scale, val), key);
921
+ },
922
+ onSetCustomPalette: function onSetCustomPalette(colorMap, uiCustomScaleType) {
923
+ onChangeVisConfig((0, _defineProperty2["default"])({}, range, _objectSpread(_objectSpread({}, visRange), {}, {
924
+ colorMap: colorMap,
925
+ uiCustomScaleType: uiCustomScaleType
926
+ })));
927
+ }
928
+ }));
929
+ }
930
+ if (showScale) {
931
+ return /*#__PURE__*/_react["default"].createElement(_dimensionScaleSelector["default"], {
932
+ label: "".concat(key, " Scale"),
933
+ options: scaleOptions,
934
+ scaleType: layer.config[scale],
935
+ onSelect: function onSelect(val) {
936
+ return onChange((0, _defineProperty2["default"])({}, scale, val), key);
937
+ }
938
+ });
939
+ }
940
+ return null;
941
+ }
942
+ }]);
943
+ }(_react.Component);
944
+ return (0, _reactIntl.injectIntl)(AggrScaleSelector);
945
+ }
946
+ var AggregationTypeSelector = exports.AggregationTypeSelector = function AggregationTypeSelector(_ref20) {
947
+ var layer = _ref20.layer,
948
+ channel = _ref20.channel,
949
+ _onChange9 = _ref20.onChange;
950
+ var field = channel.field,
951
+ aggregation = channel.aggregation,
952
+ key = channel.key;
953
+ var selectedField = layer.config[field];
954
+ var visConfig = layer.config.visConfig;
955
+
956
+ // aggregation should only be selectable when field is selected
957
+ var aggregationOptions = layer.getAggregationOptions(key);
958
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
959
+ id: 'layer.aggregateBy',
960
+ values: {
961
+ field: selectedField.name
962
+ }
963
+ })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
964
+ selectedItems: visConfig[aggregation],
965
+ options: aggregationOptions,
966
+ multiSelect: false,
967
+ searchable: false,
968
+ onChange: function onChange(value) {
969
+ return _onChange9({
970
+ visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, value))
971
+ }, channel.key);
972
+ }
973
+ }));
974
+ };
975
+
976
+ /* eslint-enable max-params */
977
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2xvY2FsaXphdGlvbiIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9pdGVtU2VsZWN0b3IiLCJfdmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yIiwiX2xheWVyQ29sdW1uQ29uZmlnIiwiX2xheWVyVHlwZVNlbGVjdG9yIiwiX2xheWVyVmlzaWJpbGl0eUJ5Wm9vbSIsIl9kaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiX3NvdXJjZURhdGFTZWxlY3RvciIsIl92aXNDb25maWdTd2l0Y2giLCJfdmlzQ29uZmlnU2xpZGVyIiwiX2xheWVyQ29uZmlnR3JvdXAiLCJfY3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwIiwiX3RleHRMYWJlbFBhbmVsIiwiX3V0aWxzIiwiX2RlZmF1bHRTZXR0aW5ncyIsIl90eXBlcyIsIl9yZWFjdEludGwiLCJfY29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiX2NvbG9yU2VsZWN0b3IiLCJfbGF5ZXJBZ2dyZWdhdGlvblJlc29sdXRpb24iLCJfY29sb3JSYW5nZXMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImxheWVyQ29uZmlndXJhdG9yTWFyZ2luIiwibGF5ZXJDb25maWd1cmF0b3JQYWRkaW5nIiwibGF5ZXJDb25maWd1cmF0b3JCb3JkZXIiLCJsYXllckNvbmZpZ3VyYXRvckJvcmRlckNvbG9yIiwiU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IiLCJnZXRMYXllckZpZWxkcyIsImV4cG9ydHMiLCJkYXRhc2V0cyIsImxheWVyIiwiY29uZmlnIiwiZGF0YUlkIiwiZmllbGRzIiwiZ2V0TGF5ZXJEYXRhc2V0IiwiZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsImRpc2FibGVkIiwib25DaGFuZ2UiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNldENvbG9yVUkiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJnZXRWaXNDb25maWd1cmF0b3JQcm9wcyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJvbkNoYW5nZVZpc0NvbmZpZyIsIkxheWVyQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5IiwiVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSIsIlRleHRMYWJlbFBhbmVsRmFjdG9yeSIsIkxheWVyQ29uZmlnR3JvdXBGYWN0b3J5IiwiQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnkiLCJMYXllclR5cGVTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdTd2l0Y2hGYWN0b3J5IiwiQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5IiwiTGF5ZXJWaXNpYmlsaXR5Qnlab29tRmFjdG9yeSIsIkxheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uRmFjdG9yeSIsIkxheWVyQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkiLCJBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwRmFjdG9yeSIsIlNvdXJjZURhdGFTZWxlY3RvciIsIlZpc0NvbmZpZ1NsaWRlciIsIlRleHRMYWJlbFBhbmVsIiwiTGF5ZXJDb25maWdHcm91cCIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJMYXllckNvbHVtbkNvbmZpZyIsIkxheWVyVHlwZVNlbGVjdG9yIiwiVmlzQ29uZmlnU3dpdGNoIiwiQWdnclNjYWxlU2VsZWN0b3IiLCJMYXllclZpc2liaWxpdHlCeVpvb20iLCJMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbiIsIkxheWVyQ29sb3JTZWxlY3RvciIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yIiwiQXJjTGF5ZXJDb2xvclNlbGVjdG9yIiwiQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwIiwiTGF5ZXJDb25maWd1cmF0b3IiLCJfQ29tcG9uZW50IiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJfcmVuZGVyUG9pbnRMYXllckNvbmZpZyIsIl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnIiwiX3JlbmRlckljb25MYXllckNvbmZpZyIsIl9yZWYiLCJ2aXNDb25maWd1cmF0b3JQcm9wcyIsImxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzIiwibGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImZpbGxlZCIsImxhYmVsIiwiY29sbGFwc2libGUiLCJjb2xvckZpZWxkIiwiQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQiLCJjaGFubmVsIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsIm9wYWNpdHkiLCJ0eXBlIiwiTEFZRVJfVFlQRVMiLCJwb2ludCIsIm91dGxpbmUiLCJ2aXNDb25maWciLCJjdXN0b21NYXJrZXJzIiwic3Ryb2tlQ29sb3JGaWVsZCIsInNlbGVjdGVkQ29sb3IiLCJzdHJva2VDb2xvciIsInByb3BlcnR5IiwidGhpY2tuZXNzIiwic2l6ZUZpZWxkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzaXplIiwidXBkYXRlTGF5ZXJUZXh0TGFiZWwiLCJ0ZXh0TGFiZWwiLCJjb2xvclBhbGV0dGUiLCJzZXRDb2xvclBhbGV0dGVVSSIsIl9yZW5kZXJDbHVzdGVyTGF5ZXJDb25maWciLCJfcmVmMiIsImNvbG9yQWdncmVnYXRpb24iLCJjb25kaXRpb24iLCJBZ2dyZWdhdGlvblR5cGVTZWxlY3RvciIsImNsdXN0ZXJSYWRpdXMiLCJfcmVuZGVySGVhdG1hcExheWVyQ29uZmlnIiwiX3JlZjMiLCJ3ZWlnaHQiLCJfcmVuZGVyR3JpZExheWVyQ29uZmlnIiwiX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWciLCJfcmVuZGVySGV4YWdvbkxheWVyQ29uZmlnIiwiX3JlZjQiLCJlbmFibGUzZCIsImVsZXZhdGlvbkJ5RGVzY3JpcHRpb24iLCJjb2xvckJ5RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInBlcmNlbnRpbGUiLCJ3b3JsZFVuaXRTaXplIiwiY292ZXJhZ2UiLCJlbGV2YXRpb25TY2FsZSIsInNpemVSYW5nZSIsInNpemVBZ2dyZWdhdGlvbiIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJfcmVuZGVySGV4YWdvbklkTGF5ZXJDb25maWciLCJfcmVmNSIsImNvdmVyYWdlRmllbGQiLCJjb3ZlcmFnZVJhbmdlIiwiX3JlbmRlckFyY0xheWVyQ29uZmlnIiwiYXJncyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJfcmVmNiIsIm9uQ2hhbmdlQ29uZmlnIiwic291cmNlQ29sb3IiLCJfcmVuZGVyVHJpcExheWVyQ29uZmlnIiwiX3JlZjciLCJfbGF5ZXIkbWV0YSRmZWF0dXJlVHkiLCJtZXRhIiwiZmVhdHVyZVR5cGVzIiwicG9seWdvbiIsInN0cm9rZWQiLCJ0cmFpbExlbmd0aCIsIl9yZW5kZXJHZW9qc29uTGF5ZXJDb25maWciLCJfcmVmOCIsIl9sYXllciRtZXRhJGZlYXR1cmVUeTIiLCJzdHJva2VPcGFjaXR5IiwiaGVpZ2h0Iiwid2lyZWZyYW1lIiwicmFkaXVzRmllbGQiLCJfcmVuZGVyM0RMYXllckNvbmZpZyIsIl9yZWY5IiwiRnJhZ21lbnQiLCJJbnB1dCIsImFjY2VwdCIsInRhcmdldCIsImZpbGVzIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwic2NlbmVncmFwaCIsInNpemVTY2FsZSIsImFuZ2xlWCIsImFuZ2xlWSIsImFuZ2xlWiIsIl9yZW5kZXJTMkxheWVyQ29uZmlnIiwiX3JlZjEwIiwiaGVpZ2h0UmFuZ2UiLCJyZW5kZXIiLCJfdGhpcyIsIl90aGlzJHByb3BzIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsIl9yZWYxMSIsIl9yZWYxMSRmaWVsZHMiLCJfcmVmMTEkZmllbGRQYWlycyIsImZpZWxkUGFpcnMiLCJ1bmRlZmluZWQiLCJkYXRhc2V0IiwicmVuZGVyVGVtcGxhdGUiLCJjb25jYXQiLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJsYXllckluZm9Nb2RhbCIsIkhvd1RvQnV0dG9uIiwib25DbGljayIsIm9wZW5Nb2RhbCIsImNvbHVtbnMiLCJleHBhbmRlZCIsImhhc0FsbENvbHVtbnMiLCJvblNlbGVjdCIsImlkIiwiY29sdW1uUGFpcnMiLCJhc3NpZ25Db2x1bW5QYWlycyIsImJpbmQiLCJhc3NpZ25Db2x1bW4iLCJjb2x1bW5MYWJlbHMiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJib29sIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsImFycmF5T2YiLCJhbnkiLCJmdW5jIiwiU3R5bGVkSG93VG9CdXR0b24iLCJfcmVmMTIiLCJCdXR0b24iLCJsaW5rIiwic21hbGwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJDb2xvclNlbGVjdG9yIiwiX0NvbXBvbmVudDIiLCJfdGhpcyRwcm9wczIiLCJfdGhpcyRwcm9wczIkcHJvcGVydHkiLCJTaWRlUGFuZWxTZWN0aW9uIiwiUGFuZWxMYWJlbCIsImNvbG9yU2V0cyIsInNldENvbG9yIiwicmdiVmFsdWUiLCJjb2xvclVJIiwibmV3Q29uZmlnIiwiX0NvbXBvbmVudDMiLCJfcmVmMTMiLCJfcmVmMTMkcHJvcGVydHkiLCJ0YXJnZXRDb2xvciIsIl9Db21wb25lbnQ0IiwiX19yZW5kZXJIZWF0bWFwQ29sb3JTZWxlY3RvckNvbXBvbmVudCIsIl9yZWYxNCIsImlzUmFuZ2UiLCJjb2xvclJhbmdlIiwiY29sb3JNYXAiLCJjb2xvclJhbmdlVXBkYXRlZCIsInVwZGF0ZUNvbG9yTWFwIiwiX19yZW5kZXJEZWZhdWx0Q29sb3JTZWxlY3RvckNvbXBvbmVudCIsIl9yZWYxNSIsIl9yZWYxNSRjaGFubmVsIiwiX3JlZjE1JGhhbmRsZUN1c3RvbU9uIiwiaGFuZGxlQ3VzdG9tT25TZWxlY3RIZXhDb2x1bW4iLCJfbGF5ZXIkdmlzdWFsQ2hhbm5lbHMiLCJyYW5nZSIsImZpZWxkIiwic2NhbGUiLCJpc0NvbG9yZWRCeUNvbG9yQ29sdW1uIiwiY29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbklkeCIsIlNDQUxFX1RZUEVTIiwib3JkaW5hbCIsInZhbGlkYXRlU2NhbGUiLCJvblNlbGVjdEhleENvbG9yQ29sdW1uIiwibmFtZSIsImZpZWxkSWR4IiwiaWRlbnRpdHkiLCJoZXhDb2xvckN1c3RvbVBhbGV0dGUiLCJfcmVmMTYiLCJyZW5kZXJDb2xvclNlbGVjdG9yQ29tcG9uZW50IiwiaGVhdG1hcCIsIlZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdCeUZpZWxkU2VsZWN0b3IiLCJfcmVmMTciLCJmaWVsZHNBZ2dyZWdhdGVkIiwiaXNMb2FkaW5nIiwiY2hhbm5lbFNjYWxlVHlwZSIsImRvbWFpbiIsImFnZ3JlZ2F0aW9uIiwiZGVmYXVsdE1lYXN1cmUiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzdXBwb3J0ZWRGaWVsZHMiLCJfcmVmMTgiLCJpbmNsdWRlcyIsInNjYWxlT3B0aW9ucyIsImdldFNjYWxlT3B0aW9ucyIsInNob3dTY2FsZUN1c3RvbWl6YWJsZSIsIkNIQU5ORUxfU0NBTEVTIiwic2hvd1NjYWxlIiwiaXNBZ2dyZWdhdGVkIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwidmlzUmFuZ2UiLCJhZ2dyZWdhdG9yIiwicGxhY2Vob2xkZXIiLCJzY2FsZVR5cGUiLCJzZWxlY3RlZEZpZWxkIiwidXBkYXRlRmllbGQiLCJ2YWwiLCJERUZBVUxUX0NPTE9SX1JBTkdFIiwic2VsZWN0ZWRBZ2dyZWdhdG9yIiwidXBkYXRlU2NhbGUiLCJ1cGRhdGVDdXN0b21QYWxldHRlIiwidWlDdXN0b21TY2FsZVR5cGUiLCJDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JGYWN0b3J5IiwiQ29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiX0NvbXBvbmVudDUiLCJfcmVmMTkiLCJjb2xvckFnZ3IiLCJBcnJheSIsImlzQXJyYXkiLCJvcHRpb25zIiwib25TZXRDdXN0b21QYWxldHRlIiwiaW5qZWN0SW50bCIsIl9yZWYyMCIsImFnZ3JlZ2F0aW9uT3B0aW9ucyIsImdldEFnZ3JlZ2F0aW9uT3B0aW9ucyIsInZhbHVlcyIsInNlbGVjdGVkSXRlbXMiLCJtdWx0aVNlbGVjdCIsInNlYXJjaGFibGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLWNvbmZpZ3VyYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBGcmFnbWVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdsb2NhbGl6YXRpb24nO1xuXG5pbXBvcnQge0J1dHRvbiwgSW5wdXQsIFBhbmVsTGFiZWwsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBJdGVtU2VsZWN0b3IgZnJvbSAnY29tcG9uZW50cy9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcblxuaW1wb3J0IFZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLWJ5LWZpZWxkLXNlbGVjdG9yJztcbmltcG9ydCBMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnkgZnJvbSAnLi9sYXllci1jb2x1bW4tY29uZmlnJztcbmltcG9ydCBMYXllclR5cGVTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9sYXllci10eXBlLXNlbGVjdG9yJztcbmltcG9ydCBMYXllclZpc2liaWxpdHlCeVpvb21GYWN0b3J5IGZyb20gJy4vbGF5ZXItdmlzaWJpbGl0eS1ieS16b29tJztcbmltcG9ydCBEaW1lbnNpb25TY2FsZVNlbGVjdG9yIGZyb20gJy4vZGltZW5zaW9uLXNjYWxlLXNlbGVjdG9yJztcbmltcG9ydCBTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5IGZyb20gJ2NvbXBvbmVudHMvc2lkZS1wYW5lbC9jb21tb24vc291cmNlLWRhdGEtc2VsZWN0b3InO1xuaW1wb3J0IFZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXN3aXRjaCc7XG5pbXBvcnQgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctc2xpZGVyJztcbmltcG9ydCBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSwge0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50fSBmcm9tICcuL2xheWVyLWNvbmZpZy1ncm91cCc7XG5pbXBvcnQgQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwRmFjdG9yeSBmcm9tICcuL2N1c3RvbS1tYXJrZXJzLWNvbmZpZy1ncm91cCc7XG5pbXBvcnQgVGV4dExhYmVsUGFuZWxGYWN0b3J5IGZyb20gJy4vdGV4dC1sYWJlbC1wYW5lbCc7XG5cbmltcG9ydCB7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyfSBmcm9tICd1dGlscy91dGlscyc7XG5cbmltcG9ydCB7XG4gIENIQU5ORUxfU0NBTEVTLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIFNDQUxFX1RZUEVTXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7TEFZRVJfVFlQRVN9IGZyb20gJ2xheWVycy90eXBlcyc7XG5pbXBvcnQge2luamVjdEludGx9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IENvbG9yRGltZW5zaW9uU2NhbGVTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9jb2xvci1kaW1lbnNpb24tc2NhbGUtc2VsZWN0b3InO1xuaW1wb3J0IENvbG9yU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IExheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uRmFjdG9yeSBmcm9tICcuL2xheWVyLWFnZ3JlZ2F0aW9uLXJlc29sdXRpb24nO1xuaW1wb3J0IHtERUZBVUxUX0NPTE9SX1JBTkdFLCBoZXhDb2xvckN1c3RvbVBhbGV0dGV9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuXG5jb25zdCBTdHlsZWRMYXllckNvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdsYXllci1wYW5lbF9fY29uZmlnJ1xufSlgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllckNvbmZpZ3VyYXRvck1hcmdpbn07XG4gIHBhZGRpbmc6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JQYWRkaW5nfTtcbiAgYm9yZGVyLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JCb3JkZXJ9IGRhc2hlZFxuICAgICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JCb3JkZXJDb2xvcn07XG5gO1xuXG5jb25zdCBTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdsYXllci1wYW5lbF9fY29uZmlnX192aXN1YWxDLWNvbmZpZydcbn0pYFxuICBtYXJnaW4tdG9wOiAxMnB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IGdldExheWVyRmllbGRzID0gKGRhdGFzZXRzLCBsYXllcikgPT5cbiAgbGF5ZXIuY29uZmlnICYmIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0uZmllbGRzIDogW107XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckRhdGFzZXQgPSAoZGF0YXNldHMsIGxheWVyKSA9PlxuICBsYXllci5jb25maWcgJiYgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSA6IG51bGw7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzID0gcHJvcHMgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBkaXNhYmxlZDogQm9vbGVhbihwcm9wcy5kaXNhYmxlZCksXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHMgPSBwcm9wcyA9PiAoe1xuICBsYXllcjogcHJvcHMubGF5ZXIsXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyVmlzQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSBwcm9wcyA9PiAoe1xuICBsYXllcjogcHJvcHMubGF5ZXIsXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZyxcbiAgb25DaGFuZ2VWaXNDb25maWc6IHByb3BzLnVwZGF0ZUxheWVyVmlzQ29uZmlnXG59KTtcblxuTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnksXG4gIFZpc0NvbmZpZ1NsaWRlckZhY3RvcnksXG4gIFRleHRMYWJlbFBhbmVsRmFjdG9yeSxcbiAgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnksXG4gIExheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSxcbiAgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSxcbiAgQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllclZpc2liaWxpdHlCeVpvb21GYWN0b3J5LFxuICBMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbkZhY3RvcnksXG4gIExheWVyQ29sb3JTZWxlY3RvckZhY3RvcnksXG4gIExheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSxcbiAgQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSxcbiAgQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwRmFjdG9yeVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5KFxuICBTb3VyY2VEYXRhU2VsZWN0b3IsXG4gIFZpc0NvbmZpZ1NsaWRlcixcbiAgVGV4dExhYmVsUGFuZWwsXG4gIExheWVyQ29uZmlnR3JvdXAsXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3IsXG4gIExheWVyQ29sdW1uQ29uZmlnLFxuICBMYXllclR5cGVTZWxlY3RvcixcbiAgVmlzQ29uZmlnU3dpdGNoLFxuICBBZ2dyU2NhbGVTZWxlY3RvcixcbiAgTGF5ZXJWaXNpYmlsaXR5Qnlab29tLFxuICBMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbixcbiAgTGF5ZXJDb2xvclNlbGVjdG9yLFxuICBMYXllckNvbG9yUmFuZ2VTZWxlY3RvcixcbiAgQXJjTGF5ZXJDb2xvclNlbGVjdG9yLFxuICBDdXN0b21NYXJrZXJzQ29uZmlnR3JvdXBcbikge1xuICBjbGFzcyBMYXllckNvbmZpZ3VyYXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxheWVyOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbGF5ZXJUeXBlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIG9wZW5Nb2RhbDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyQ29uZmlnOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdXBkYXRlTGF5ZXJUeXBlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdXBkYXRlTGF5ZXJUZXh0TGFiZWw6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB1cGRhdGVMYXllclZpc0NvbmZpZzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyQ29sb3JVSTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH07XG5cbiAgICBfcmVuZGVyUG9pbnRMYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJJY29uTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnKHByb3BzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4uKGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmZpbGxlZCB8fCB7bGFiZWw6ICdsYXllci5jb2xvcid9KX1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBvdXRsaW5lIGNvbG9yICovfVxuICAgICAgICAgIHtsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5wb2ludCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vdXRsaW5lfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxheWVyLmNvbmZpZy52aXNDb25maWcuY3VzdG9tTWFya2Vycyl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBjaGFubmVsPVwic3Ryb2tlQ29sb3JcIiAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I9e2xheWVyLmNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5vdXRsaW5lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7bGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMucG9pbnQgPyAoXG4gICAgICAgICAgICA8Q3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wcz17bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgbGFiZWw9e2xheWVyLmNvbmZpZy52aXNDb25maWcuY3VzdG9tTWFya2VycyA/ICdsYXllci5zaXplJyA6ICdsYXllci5yYWRpdXMnfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7IWxheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4obGF5ZXIuY29uZmlnLnNpemVGaWVsZCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcuc2l6ZUZpZWxkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRleHQgbGFiZWwgKi99XG4gICAgICAgICAgPFRleHRMYWJlbFBhbmVsXG4gICAgICAgICAgICBmaWVsZHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmZpZWxkc31cbiAgICAgICAgICAgIHVwZGF0ZUxheWVyVGV4dExhYmVsPXsodGhpcy5wcm9wcyBhcyBhbnkpLnVwZGF0ZUxheWVyVGV4dExhYmVsfVxuICAgICAgICAgICAgdGV4dExhYmVsPXtsYXllci5jb25maWcudGV4dExhYmVsfVxuICAgICAgICAgICAgY29sb3JQYWxldHRlPXt2aXNDb25maWd1cmF0b3JQcm9wcy5jb2xvclBhbGV0dGV9XG4gICAgICAgICAgICBzZXRDb2xvclBhbGV0dGVVST17dmlzQ29uZmlndXJhdG9yUHJvcHMuc2V0Q29sb3JQYWxldHRlVUl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckNsdXN0ZXJMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8QWdnclNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZz17bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMub25DaGFuZ2VWaXNDb25maWd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbi5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25UeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIENsdXN0ZXIgUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jbHVzdGVyUmFkaXVzfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckhlYXRtYXBMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICB7LyogUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgey8qIFdlaWdodCAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLndlaWdodCd9PlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMud2VpZ2h0fVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckdyaWRMYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJIZXhhZ29uTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnKHByb3BzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmlzQ29uZmlnOiB7ZW5hYmxlM2R9XG4gICAgICB9ID0gY29uZmlnO1xuICAgICAgY29uc3QgZWxldmF0aW9uQnlEZXNjcmlwdGlvbiA9ICdsYXllci5lbGV2YXRpb25CeURlc2NyaXB0aW9uJztcbiAgICAgIGNvbnN0IGNvbG9yQnlEZXNjcmlwdGlvbiA9ICdsYXllci5jb2xvckJ5RGVzY3JpcHRpb24nO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxBZ2dyU2NhbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnPXtsYXllckNoYW5uZWxDb25maWdQcm9wcy5vbkNoYW5nZVZpc0NvbmZpZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9uLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb259XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17Y29sb3JCeURlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5wZXJjZW50aWxlICYmXG4gICAgICAgICAgICAgIGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnBlcmNlbnRpbGUuY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnBlcmNlbnRpbGV9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIENlbGwgc2l6ZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnJhZGl1cyd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud29ybGRVbml0U2l6ZX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb3ZlcmFnZX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGUzZCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGUzZH1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRNdWx0aXBsaWVyXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2VsZXZhdGlvbkJ5RGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWVuYWJsZTNkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEFnZ3JTY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZz17bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMub25DaGFuZ2VWaXNDb25maWd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuaGVpZ2h0UmFuZ2VcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVBZ2dyZWdhdGlvbi5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZUFnZ3JlZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25QZXJjZW50aWxlLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uUGVyY2VudGlsZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogU2hhbiBtb3ZlIHRoZXNlIGludG8gbGF5ZXIgY2xhc3NcbiAgICBfcmVuZGVySGV4YWdvbklkTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBDb3ZlcmFnZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvdmVyYWdlJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7IWxheWVyLmNvbmZpZy5jb3ZlcmFnZUZpZWxkID8gKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY292ZXJhZ2V9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogaGVpZ2h0ICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuaGVpZ2h0UmFuZ2VcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJBcmNMYXllckNvbmZpZyhhcmdzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGluZUxheWVyQ29uZmlnKGFyZ3MpO1xuICAgIH1cblxuICAgIF9yZW5kZXJMaW5lTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEFyY0xheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgICBzZXRDb2xvclVJPXtsYXllckNvbmZpZ3VyYXRvclByb3BzLnNldENvbG9yVUl9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VDb25maWc9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWc9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zb3VyY2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRoaWNrbmVzcyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnN0cm9rZSd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGR9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBlbGV2YXRpb24gc2NhbGUgKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuZWxldmF0aW9uU2NhbGVcIiBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJUcmlwTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWV0YToge2ZlYXR1cmVUeXBlcyA9IHt9fVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogVHJhaWwgTGVuZ3RoKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci50cmFpbExlbmd0aFwiXG4gICAgICAgICAgICBkZXNjcmlwdGlvbj1cImxheWVyLnRyYWlsTGVuZ3RoRGVzY3JpcHRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRyYWlsTGVuZ3RofVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR2VvanNvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1ldGE6IHtmZWF0dXJlVHlwZXMgPSB7fX0sXG4gICAgICAgIGNvbmZpZzoge3Zpc0NvbmZpZ31cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiB8fCBmZWF0dXJlVHlwZXMucG9pbnQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCJcbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBzdHJva2UgY29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gY2hhbm5lbD1cInN0cm9rZUNvbG9yXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZU9wYWNpdHl9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4uKGZlYXR1cmVUeXBlcy5wb2x5Z29uID8gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlZCA6IHt9KX1cbiAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLndpcmVmcmFtZX0gLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgICAge2ZlYXR1cmVUeXBlcy5wb2ludCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLnJhZGl1c0ZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihsYXllci5jb25maWcucmFkaXVzRmllbGQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcucmFkaXVzRmllbGR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5yYWRpdXN9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlcjNETGF5ZXJDb25maWcoe2xheWVyLCB2aXNDb25maWd1cmF0b3JQcm9wc30pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLjNETW9kZWwnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIGFjY2VwdD1cIi5nbGIsLmdsdGZcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmZpbGVzICYmIGUudGFyZ2V0LmZpbGVzWzBdKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGUudGFyZ2V0LmZpbGVzWzBdKTtcbiAgICAgICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtzY2VuZWdyYXBoOiB1cmx9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLjNETW9kZWxPcHRpb25zJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplU2NhbGV9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFuZ2xlWH1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYW5nbGVZfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5hbmdsZVp9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJTMkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbmZpZzoge3Zpc0NvbmZpZ31cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmZpbGxlZH1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gY2hhbm5lbD1cInN0cm9rZUNvbG9yXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIEVsZXZhdGlvbiAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF2aXNDb25maWcuZmlsbGVkfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5lbGV2YXRpb25TY2FsZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmhlaWdodFJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRSYW5nZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud2lyZWZyYW1lfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGNvbnN0IHtsYXllciwgZGF0YXNldHMsIHVwZGF0ZUxheWVyQ29uZmlnLCBsYXllclR5cGVPcHRpb25zLCB1cGRhdGVMYXllclR5cGV9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHtmaWVsZHMgPSBbXSwgZmllbGRQYWlycyA9IHVuZGVmaW5lZH0gPSBsYXllci5jb25maWcuZGF0YUlkXG4gICAgICAgID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF1cbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IHtjb25maWd9ID0gbGF5ZXI7XG5cbiAgICAgIGNvbnN0IHZpc0NvbmZpZ3VyYXRvclByb3BzID0gZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHModGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsYXllckNvbmZpZ3VyYXRvclByb3BzID0gZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzID0gZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHModGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gZ2V0TGF5ZXJEYXRhc2V0KGRhdGFzZXRzLCBsYXllcik7XG4gICAgICBjb25zdCByZW5kZXJUZW1wbGF0ZSA9IGxheWVyLnR5cGUgJiYgYF9yZW5kZXIke2NhcGl0YWxpemVGaXJzdExldHRlcihsYXllci50eXBlKX1MYXllckNvbmZpZ2A7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllckNvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7bGF5ZXIubGF5ZXJJbmZvTW9kYWwgPyAoXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICA8SG93VG9CdXR0b24gb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vcGVuTW9kYWwobGF5ZXIubGF5ZXJJbmZvTW9kYWwpfSAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICBsYWJlbD17J2xheWVyLmJhc2ljJ31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlPXtPYmplY3Qua2V5cyhsYXllci5jb25maWcuY29sdW1ucykubGVuZ3RoID4gMH1cbiAgICAgICAgICAgIGV4cGFuZGVkPXshbGF5ZXIuaGFzQWxsQ29sdW1ucygpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxMYXllclR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgbGF5ZXJUeXBlT3B0aW9ucz17bGF5ZXJUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3VwZGF0ZUxheWVyVHlwZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8TGF5ZXJWaXNpYmlsaXR5Qnlab29tXG4gICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3RoaXMucHJvcHMudXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPExheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uIGxheWVyPXtsYXllcn0gZGlzYWJsZWQ9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuZGlzYWJsZWR9IC8+XG4gICAgICAgICAgICB7T2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgICAgICA8U291cmNlRGF0YVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAgICAgICAgICBkYXRhSWQ9e2NvbmZpZy5kYXRhSWR9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e3ZhbHVlID0+IHVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IHZhbHVlfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge09iamVjdC5rZXlzKGxheWVyLmNvbmZpZy5jb2x1bW5zKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxMYXllckNvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgICAgICAgY29sdW1uUGFpcnM9e2xheWVyLmNvbHVtblBhaXJzfVxuICAgICAgICAgICAgICAgICAgY29sdW1ucz17bGF5ZXIuY29uZmlnLmNvbHVtbnN9XG4gICAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW5QYWlycz17bGF5ZXIuYXNzaWduQ29sdW1uUGFpcnMuYmluZChsYXllcil9XG4gICAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW49e2xheWVyLmFzc2lnbkNvbHVtbi5iaW5kKGxheWVyKX1cbiAgICAgICAgICAgICAgICAgIGNvbHVtbkxhYmVscz17bGF5ZXIuY29sdW1uTGFiZWxzfVxuICAgICAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgICAgICBmaWVsZFBhaXJzPXtmaWVsZFBhaXJzfVxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3VwZGF0ZUxheWVyQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUeXBlPXt0aGlzLnByb3BzLnVwZGF0ZUxheWVyVHlwZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAge3RoaXNbcmVuZGVyVGVtcGxhdGVdICYmXG4gICAgICAgICAgICB0aGlzW3JlbmRlclRlbXBsYXRlXSh7XG4gICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgICAgICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICAgICAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGF5ZXJDb25maWd1cmF0b3I7XG59XG4vKlxuICogQ29tcG9uZW50aXplIGNvbmZpZyBjb21wb25lbnQgaW50byBwdXJlIGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICovXG5cbmNvbnN0IFN0eWxlZEhvd1RvQnV0dG9uID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTJweDtcbiAgdG9wOiAtNHB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IEhvd1RvQnV0dG9uID0gKHtvbkNsaWNrfSkgPT4gKFxuICA8U3R5bGVkSG93VG9CdXR0b24+XG4gICAgPEJ1dHRvbiBsaW5rIHNtYWxsIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydsYXllckNvbmZpZ3VyYXRpb24uaG93VG8nfSAvPlxuICAgIDwvQnV0dG9uPlxuICA8L1N0eWxlZEhvd1RvQnV0dG9uPlxuKTtcblxuTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgTGF5ZXJDb2xvclNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBjb25zdCB7bGF5ZXIsIG9uQ2hhbmdlLCBzZWxlY3RlZENvbG9yLCBwcm9wZXJ0eSA9ICdjb2xvcicsIHNldENvbG9yVUksIGZpZWxkc30gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImxheWVyLmNvbG9yXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgPENvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBzZWxlY3RlZENvbG9yIHx8IGxheWVyLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICAgICAgICBzZXRDb2xvcjogcmdiVmFsdWUgPT4gb25DaGFuZ2Uoe1twcm9wZXJ0eV06IHJnYlZhbHVlfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICAgIHNldENvbG9yVUk9e25ld0NvbmZpZyA9PiBzZXRDb2xvclVJKHByb3BlcnR5LCBuZXdDb25maWcpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIExheWVyQ29sb3JTZWxlY3Rvcjtcbn1cblxuQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgQXJjTGF5ZXJDb2xvclNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxheWVyLFxuICAgICAgICBvbkNoYW5nZUNvbmZpZyxcbiAgICAgICAgb25DaGFuZ2VWaXNDb25maWcsXG4gICAgICAgIHByb3BlcnR5ID0gJ2NvbG9yJyxcbiAgICAgICAgc2V0Q29sb3JVSSxcbiAgICAgICAgZmllbGRzXG4gICAgICB9ID0gdGhpcy5wcm9wcyBhcyBhbnk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJsYXllci5jb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgPENvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBsYXllci5jb25maWcuY29sb3IsXG4gICAgICAgICAgICAgICAgc2V0Q29sb3I6IHJnYlZhbHVlID0+IG9uQ2hhbmdlQ29uZmlnKHtjb2xvcjogcmdiVmFsdWV9KSxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1NvdXJjZSdcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IGxheWVyLmNvbmZpZy52aXNDb25maWcudGFyZ2V0Q29sb3IgfHwgbGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgICAgICAgICAgICAgIHNldENvbG9yOiByZ2JWYWx1ZSA9PiBvbkNoYW5nZVZpc0NvbmZpZyh7dGFyZ2V0Q29sb3I6IHJnYlZhbHVlfSksXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUYXJnZXQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBjb2xvclVJPXtsYXllci5jb25maWcuY29sb3JVSVtwcm9wZXJ0eV19XG4gICAgICAgICAgICBzZXRDb2xvclVJPXtuZXdDb25maWcgPT4gc2V0Q29sb3JVSShwcm9wZXJ0eSwgbmV3Q29uZmlnKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQXJjTGF5ZXJDb2xvclNlbGVjdG9yO1xufVxuXG5MYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkuZGVwcyA9IFtDb2xvclNlbGVjdG9yRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIF9fcmVuZGVySGVhdG1hcENvbG9yU2VsZWN0b3JDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9ICdjb2xvclJhbmdlJztcbiAgICAgIGNvbnN0IHtsYXllciwgb25DaGFuZ2UsIHNldENvbG9yVUl9ID0gdGhpcy5wcm9wcyBhcyBhbnk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q29sb3JTZWxlY3RvclxuICAgICAgICAgIGNvbG9yU2V0cz17W1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgaXNSYW5nZTogdHJ1ZSxcbiAgICAgICAgICAgICAgc2V0Q29sb3I6IGNvbG9yUmFuZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtjb2xvck1hcH0gPSBsYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvclJhbmdlVXBkYXRlZCA9IGNvbG9yTWFwXG4gICAgICAgICAgICAgICAgICA/IGxheWVyLnVwZGF0ZUNvbG9yTWFwKHByb3BlcnR5LCBjb2xvck1hcCwgY29sb3JSYW5nZSlcbiAgICAgICAgICAgICAgICAgIDogY29sb3JSYW5nZTtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZSh7W3Byb3BlcnR5XTogY29sb3JSYW5nZVVwZGF0ZWR9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF19XG4gICAgICAgICAgY29sb3JVST17bGF5ZXIuY29uZmlnLmNvbG9yVUlbcHJvcGVydHldfVxuICAgICAgICAgIHNldENvbG9yVUk9e25ld0NvbmZpZyA9PiBzZXRDb2xvclVJKHByb3BlcnR5LCBuZXdDb25maWcpfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgX19yZW5kZXJEZWZhdWx0Q29sb3JTZWxlY3RvckNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBjaGFubmVsID0gJ2NvbG9yJyxcbiAgICAgICAgc2V0Q29sb3JVSSxcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBoYW5kbGVDdXN0b21PblNlbGVjdEhleENvbHVtbiA9ICgpID0+IG51bGxcbiAgICAgIH0gPSB0aGlzLnByb3BzIGFzIGFueTtcbiAgICAgIGNvbnN0IHtyYW5nZTogcHJvcGVydHksIGZpZWxkLCBzY2FsZX0gPSBsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xvclNlbGVjdG9yXG4gICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldLFxuICAgICAgICAgICAgICBpc1JhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICBzZXRDb2xvcjogY29sb3JSYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge2NvbG9yTWFwfSA9IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yUmFuZ2VVcGRhdGVkID0gY29sb3JNYXBcbiAgICAgICAgICAgICAgICAgID8gbGF5ZXIudXBkYXRlQ29sb3JNYXAocHJvcGVydHksIGNvbG9yTWFwLCBjb2xvclJhbmdlKVxuICAgICAgICAgICAgICAgICAgOiBjb2xvclJhbmdlO1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHNjYWxlIGNoYW5nZXMgZnJvbSBpZGVudGl0eSB0byBvcmRpbmFsXG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgc2NhbGUgdG8gZW5zdXJlIHRoYXQgaXQgY2hhbmdlcyBmcm9tIGBpZGVudGl0eWAgdG8gdGhlIGNvcnJlY3Qgb25lLlxuICAgICAgICAgICAgICAgIGlmIChsYXllci5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgICAgICAgICBbZmllbGRdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvckNvbHVtbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvckNvbHVtbklkeDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbc2NhbGVdOiBTQ0FMRV9UWVBFUy5vcmRpbmFsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGxheWVyLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHtbcHJvcGVydHldOiBjb2xvclJhbmdlVXBkYXRlZH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXX1cbiAgICAgICAgICBjb2xvclVJPXtsYXllci5jb25maWcuY29sb3JVSVtwcm9wZXJ0eV19XG4gICAgICAgICAgc2V0Q29sb3JVST17bmV3Q29uZmlnID0+IHNldENvbG9yVUkocHJvcGVydHksIG5ld0NvbmZpZyl9XG4gICAgICAgICAgb25TZWxlY3RIZXhDb2xvckNvbHVtbj17Y29sb3JDb2x1bW4gPT4ge1xuICAgICAgICAgICAgLy8gSXQncyBkZWZpbmVkIGluIENOOiBzZWUgd29ya3NwYWNlLXd3dy9zcmMvZmVhdHVyZXMvYnVpbGRlci91aS9LZXBsZXJHbC9TaWRlUGFuZWwvTGF5ZXJQYW5lbC9MYXllckNvbG9yUmFuZ2VTZWxlY3Rvci50c3hcbiAgICAgICAgICAgIGhhbmRsZUN1c3RvbU9uU2VsZWN0SGV4Q29sdW1uKGxheWVyLCBjb2xvckNvbHVtbik7XG5cbiAgICAgICAgICAgIGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgICAgW2ZpZWxkXToge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgICAgICAgICAgY29sb3JDb2x1bW46IGNvbG9yQ29sdW1uPy5uYW1lLFxuICAgICAgICAgICAgICAgIGNvbG9yQ29sdW1uSWR4OiBjb2xvckNvbHVtbj8uZmllbGRJZHhcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW3NjYWxlXTogU0NBTEVfVFlQRVMuaWRlbnRpdHlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBvbkNoYW5nZSh7W3Byb3BlcnR5XTogaGV4Q29sb3JDdXN0b21QYWxldHRlfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2xheWVyfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuICAgICAgbGV0IHJlbmRlckNvbG9yU2VsZWN0b3JDb21wb25lbnQgPSB0aGlzLl9fcmVuZGVyRGVmYXVsdENvbG9yU2VsZWN0b3JDb21wb25lbnQuYmluZCh0aGlzKTtcblxuICAgICAgaWYgKGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmhlYXRtYXApIHtcbiAgICAgICAgcmVuZGVyQ29sb3JTZWxlY3RvckNvbXBvbmVudCA9IHRoaXMuX19yZW5kZXJIZWF0bWFwQ29sb3JTZWxlY3RvckNvbXBvbmVudC5iaW5kKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwibGF5ZXIuY29sb3JSYW5nZVwiIC8+XG4gICAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICAgIHtyZW5kZXJDb2xvclNlbGVjdG9yQ29tcG9uZW50KCl9XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBMYXllckNvbG9yUmFuZ2VTZWxlY3Rvcjtcbn1cblxuQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkuZGVwcyA9IFtWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeShWaXNDb25maWdCeUZpZWxkU2VsZWN0b3IpIHtcbiAgY29uc3QgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvciA9ICh7XG4gICAgbGF5ZXIsXG4gICAgY2hhbm5lbCxcbiAgICBvbkNoYW5nZSxcbiAgICBvbkNoYW5nZVZpc0NvbmZpZyxcbiAgICBmaWVsZHMsXG4gICAgZmllbGRzQWdncmVnYXRlZCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpc0xvYWRpbmdcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYW5uZWxTY2FsZVR5cGUsXG4gICAgICBkb21haW4sXG4gICAgICBmaWVsZCxcbiAgICAgIGFnZ3JlZ2F0aW9uLFxuICAgICAga2V5LFxuICAgICAgcHJvcGVydHksXG4gICAgICByYW5nZSxcbiAgICAgIHNjYWxlLFxuICAgICAgZGVmYXVsdE1lYXN1cmUsXG4gICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzXG4gICAgfSA9IGNoYW5uZWw7XG4gICAgY29uc3QgY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMgPVxuICAgICAgc3VwcG9ydGVkRmllbGRUeXBlcyB8fCBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFNbY2hhbm5lbFNjYWxlVHlwZV07XG4gICAgY29uc3Qgc3VwcG9ydGVkRmllbGRzID0gZmllbGRzLmZpbHRlcigoe3R5cGV9KSA9PiBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcy5pbmNsdWRlcyh0eXBlKSk7XG4gICAgY29uc3Qgc2NhbGVPcHRpb25zID0gbGF5ZXIuZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwua2V5KTtcbiAgICBjb25zdCBzaG93U2NhbGVDdXN0b21pemFibGUgPVxuICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICAgIHNjYWxlICYmXG4gICAgICBsYXllci5jb25maWdbc2NhbGVdICYmXG4gICAgICBCb29sZWFuKGxheWVyLmNvbmZpZ1tmaWVsZF0pICYmXG4gICAgICBzY2FsZU9wdGlvbnM/Lmxlbmd0aCA+IDA7XG4gICAgY29uc3Qgc2hvd1NjYWxlID0gQm9vbGVhbihcbiAgICAgICFzaG93U2NhbGVDdXN0b21pemFibGUgJiZcbiAgICAgICAgc2NhbGUgJiZcbiAgICAgICAgIWxheWVyLmlzQWdncmVnYXRlZCAmJlxuICAgICAgICBsYXllci5jb25maWdbc2NhbGVdICYmXG4gICAgICAgIHNjYWxlT3B0aW9ucz8ubGVuZ3RoID4gMVxuICAgICk7XG4gICAgY29uc3QgZGVmYXVsdERlc2NyaXB0aW9uID0gJ2xheWVyQ29uZmlndXJhdGlvbi5kZWZhdWx0RGVzY3JpcHRpb24nO1xuICAgIGNvbnN0IHZpc1JhbmdlID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV07XG4gICAgY29uc3QgYWdncmVnYXRvciA9IGxheWVyLmNvbmZpZy52aXNDb25maWdbYWdncmVnYXRpb25dO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JcbiAgICAgICAgY2hhbm5lbD17Y2hhbm5lbC5rZXl9XG4gICAgICAgIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbiB8fCBkZWZhdWx0RGVzY3JpcHRpb259XG4gICAgICAgIGRvbWFpbj17bGF5ZXIuY29uZmlnW2RvbWFpbl19XG4gICAgICAgIGZpZWxkcz17c3VwcG9ydGVkRmllbGRzfVxuICAgICAgICBhZ2dyZWdhdG9yPXthZ2dyZWdhdG9yfVxuICAgICAgICBmaWVsZHNBZ2dyZWdhdGVkPXtmaWVsZHNBZ2dyZWdhdGVkfVxuICAgICAgICBpZD17bGF5ZXIuaWR9XG4gICAgICAgIGtleT17YCR7a2V5fS1jaGFubmVsLXNlbGVjdG9yYH1cbiAgICAgICAgcHJvcGVydHk9e3Byb3BlcnR5fVxuICAgICAgICBwbGFjZWhvbGRlcj17ZGVmYXVsdE1lYXN1cmUgfHwgJ3BsYWNlaG9sZGVyLnNlbGVjdEZpZWxkJ31cbiAgICAgICAgcmFuZ2U9e3Zpc1JhbmdlfVxuICAgICAgICBzY2FsZU9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgICAgc2NhbGVUeXBlPXtzY2FsZSA/IGxheWVyLmNvbmZpZ1tzY2FsZV0gOiBudWxsfVxuICAgICAgICBzZWxlY3RlZEZpZWxkPXtsYXllci5jb25maWdbZmllbGRdfVxuICAgICAgICBzaG93U2NhbGU9e3Nob3dTY2FsZX1cbiAgICAgICAgc2hvd1NjYWxlQ3VzdG9taXphYmxlPXtzaG93U2NhbGVDdXN0b21pemFibGV9XG4gICAgICAgIHVwZGF0ZUZpZWxkPXt2YWwgPT4ge1xuICAgICAgICAgIGlmICh2aXNSYW5nZT8uY29sb3JNYXApIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnKHtbcmFuZ2VdOiB7Li4udmlzUmFuZ2UsIGNvbG9yTWFwOiB1bmRlZmluZWR9fSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICAvLyBDbGVhbiBldmVyeXRoaW5nIGFuZCBjb21lYmFjayB0byBkZWZhdWx0IGJlaGF2aW91clxuICAgICAgICAgICAgb25DaGFuZ2Uoe1tmaWVsZF06IG51bGx9LCBrZXkpO1xuICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWcoe1tyYW5nZV06IERFRkFVTFRfQ09MT1JfUkFOR0V9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb25DaGFuZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtmaWVsZF06IHZhbCxcbiAgICAgICAgICAgICAgLi4uKGZpZWxkc0FnZ3JlZ2F0ZWQgJiYge1xuICAgICAgICAgICAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAgICAgICAgICAgICAgIFthZ2dyZWdhdGlvbl06IHZhbD8uc2VsZWN0ZWRBZ2dyZWdhdG9yXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgbGF5ZXIudmFsaWRhdGVTY2FsZShrZXkpO1xuICAgICAgICB9fVxuICAgICAgICB1cGRhdGVTY2FsZT17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgICB1cGRhdGVDdXN0b21QYWxldHRlPXsoY29sb3JNYXAsIHVpQ3VzdG9tU2NhbGVUeXBlKSA9PiB7XG4gICAgICAgICAgb25DaGFuZ2VWaXNDb25maWcoe1tyYW5nZV06IHsuLi52aXNSYW5nZSwgY29sb3JNYXAsIHVpQ3VzdG9tU2NhbGVUeXBlfX0pO1xuICAgICAgICB9fVxuICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gQ2hhbm5lbEJ5VmFsdWVTZWxlY3Rvcjtcbn1cblxuQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5LmRlcHMgPSBbQ29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yRmFjdG9yeV07XG5cbmZ1bmN0aW9uIEFnZ3JTY2FsZVNlbGVjdG9yRmFjdG9yeShDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3IpIHtcbiAgY2xhc3MgQWdnclNjYWxlU2VsZWN0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtjaGFubmVsLCBsYXllciwgb25DaGFuZ2UsIG9uQ2hhbmdlVmlzQ29uZmlnfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuICAgICAgY29uc3Qge3NjYWxlLCBrZXksIGNoYW5uZWxTY2FsZVR5cGUsIGRvbWFpbiwgcmFuZ2V9ID0gY2hhbm5lbDtcbiAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGxheWVyLmdldFNjYWxlT3B0aW9ucyhrZXkpO1xuICAgICAgY29uc3QgdmlzUmFuZ2UgPSBsYXllci5jb25maWcudmlzQ29uZmlnW3JhbmdlXTtcbiAgICAgIGNvbnN0IHNob3dTY2FsZUN1c3RvbWl6YWJsZSA9XG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yQWdnciAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHNjYWxlT3B0aW9ucykgJiZcbiAgICAgICAgc2NhbGVPcHRpb25zLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBzaG93U2NhbGUgPSBBcnJheS5pc0FycmF5KHNjYWxlT3B0aW9ucykgJiYgc2NhbGVPcHRpb25zLmxlbmd0aCA+IDE7XG5cbiAgICAgIGlmIChzaG93U2NhbGVDdXN0b21pemFibGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgbGFiZWw9e2Ake2tleX0gU2NhbGVgfVxuICAgICAgICAgICAgICBzY2FsZVR5cGU9e2xheWVyLmNvbmZpZ1tzY2FsZV19XG4gICAgICAgICAgICAgIG9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgICAgICAgICAgZG9tYWluPXtsYXllci5jb25maWdbZG9tYWluXX1cbiAgICAgICAgICAgICAgcmFuZ2U9e3Zpc1JhbmdlfVxuICAgICAgICAgICAgICBvblNlbGVjdD17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgICAgICAgICBvblNldEN1c3RvbVBhbGV0dGU9eyhjb2xvck1hcCwgdWlDdXN0b21TY2FsZVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZyh7W3JhbmdlXTogey4uLnZpc1JhbmdlLCBjb2xvck1hcCwgdWlDdXN0b21TY2FsZVR5cGV9fSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3dTY2FsZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxEaW1lbnNpb25TY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICBsYWJlbD17YCR7a2V5fSBTY2FsZWB9XG4gICAgICAgICAgICBvcHRpb25zPXtzY2FsZU9wdGlvbnN9XG4gICAgICAgICAgICBzY2FsZVR5cGU9e2xheWVyLmNvbmZpZ1tzY2FsZV19XG4gICAgICAgICAgICBvblNlbGVjdD17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluamVjdEludGwoQWdnclNjYWxlU2VsZWN0b3IpO1xufVxuXG5leHBvcnQgY29uc3QgQWdncmVnYXRpb25UeXBlU2VsZWN0b3IgPSAoe2xheWVyLCBjaGFubmVsLCBvbkNoYW5nZX0pID0+IHtcbiAgY29uc3Qge2ZpZWxkLCBhZ2dyZWdhdGlvbiwga2V5fSA9IGNoYW5uZWw7XG4gIGNvbnN0IHNlbGVjdGVkRmllbGQgPSBsYXllci5jb25maWdbZmllbGRdO1xuICBjb25zdCB7dmlzQ29uZmlnfSA9IGxheWVyLmNvbmZpZztcblxuICAvLyBhZ2dyZWdhdGlvbiBzaG91bGQgb25seSBiZSBzZWxlY3RhYmxlIHdoZW4gZmllbGQgaXMgc2VsZWN0ZWRcbiAgY29uc3QgYWdncmVnYXRpb25PcHRpb25zID0gbGF5ZXIuZ2V0QWdncmVnYXRpb25PcHRpb25zKGtleSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2xheWVyLmFnZ3JlZ2F0ZUJ5J30gdmFsdWVzPXt7ZmllbGQ6IHNlbGVjdGVkRmllbGQubmFtZX19IC8+XG4gICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgIHNlbGVjdGVkSXRlbXM9e3Zpc0NvbmZpZ1thZ2dyZWdhdGlvbl19XG4gICAgICAgIG9wdGlvbnM9e2FnZ3JlZ2F0aW9uT3B0aW9uc31cbiAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgb25DaGFuZ2U9e3ZhbHVlID0+XG4gICAgICAgICAgb25DaGFuZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgICAgICAgICAgICAgW2FnZ3JlZ2F0aW9uXTogdmFsdWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoYW5uZWwua2V5XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgKTtcbn07XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXBhcmFtcyAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssa0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGFBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFPLHlCQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxrQkFBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsa0JBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLHNCQUFBLEdBQUFSLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVyx1QkFBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVksbUJBQUEsR0FBQVYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFhLGdCQUFBLEdBQUFYLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBYyxnQkFBQSxHQUFBWixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWUsaUJBQUEsR0FBQWhCLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBZ0IseUJBQUEsR0FBQWQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFpQixlQUFBLEdBQUFmLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFB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