@kepler.gl/components 3.0.0-alpha.0 → 3.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. package/dist/bottom-widget.d.ts +11 -38
  2. package/dist/bottom-widget.js +42 -118
  3. package/dist/common/action-panel.d.ts +2 -2
  4. package/dist/common/action-panel.js +3 -23
  5. package/dist/common/animation-control/animation-control.d.ts +19 -18
  6. package/dist/common/animation-control/animation-control.js +58 -100
  7. package/dist/common/animation-control/animation-controller.d.ts +6 -2
  8. package/dist/common/animation-control/animation-controller.js +49 -55
  9. package/dist/common/animation-control/animation-speed-slider.js +1 -21
  10. package/dist/common/animation-control/animation-window-control.js +3 -21
  11. package/dist/common/animation-control/floating-time-display.d.ts +2 -2
  12. package/dist/common/animation-control/floating-time-display.js +1 -21
  13. package/dist/common/animation-control/play-control.d.ts +2 -2
  14. package/dist/common/animation-control/play-control.js +3 -21
  15. package/dist/common/animation-control/playback-controls.d.ts +7 -7
  16. package/dist/common/animation-control/playback-controls.js +5 -25
  17. package/dist/common/animation-control/reset-control.d.ts +2 -2
  18. package/dist/common/animation-control/reset-control.js +3 -21
  19. package/dist/common/animation-control/speed-control.d.ts +2 -2
  20. package/dist/common/animation-control/speed-control.js +1 -21
  21. package/dist/common/animation-control/window-action-control.d.ts +2 -2
  22. package/dist/common/animation-control/window-action-control.js +3 -21
  23. package/dist/common/checkbox.d.ts +2 -2
  24. package/dist/common/checkbox.js +2 -22
  25. package/dist/common/color-legend.d.ts +3 -3
  26. package/dist/common/color-legend.js +10 -36
  27. package/dist/common/data-table/button.d.ts +1 -1
  28. package/dist/common/data-table/button.js +1 -21
  29. package/dist/common/data-table/canvas.js +1 -21
  30. package/dist/common/data-table/cell-size.js +43 -32
  31. package/dist/common/data-table/display-format.d.ts +25 -0
  32. package/dist/common/data-table/display-format.js +149 -0
  33. package/dist/common/data-table/grid.d.ts +5 -2
  34. package/dist/common/data-table/grid.js +44 -24
  35. package/dist/common/data-table/header-cell.d.ts +4 -1
  36. package/dist/common/data-table/header-cell.js +65 -48
  37. package/dist/common/data-table/index.d.ts +27 -34
  38. package/dist/common/data-table/index.js +147 -81
  39. package/dist/common/data-table/option-dropdown.d.ts +17 -3
  40. package/dist/common/data-table/option-dropdown.js +85 -32
  41. package/dist/common/dataset-label.d.ts +2 -2
  42. package/dist/common/dataset-label.js +2 -22
  43. package/dist/common/error-boundary.d.ts +6 -2
  44. package/dist/common/error-boundary.js +1 -21
  45. package/dist/common/field-selector.d.ts +10 -3
  46. package/dist/common/field-selector.js +4 -22
  47. package/dist/common/field-token.d.ts +12 -0
  48. package/dist/common/field-token.js +6 -22
  49. package/dist/common/file-uploader/file-drop.d.ts +3 -2
  50. package/dist/common/file-uploader/file-drop.js +1 -21
  51. package/dist/common/file-uploader/file-upload-progress.js +1 -21
  52. package/dist/common/file-uploader/file-upload.d.ts +2 -6
  53. package/dist/common/file-uploader/file-upload.js +1 -21
  54. package/dist/common/file-uploader/upload-button.d.ts +1 -0
  55. package/dist/common/file-uploader/upload-button.js +1 -21
  56. package/dist/common/flex-container.d.ts +3 -0
  57. package/dist/common/flex-container.js +23 -0
  58. package/dist/common/histogram-plot.d.ts +2 -2
  59. package/dist/common/histogram-plot.js +17 -31
  60. package/dist/common/icon-button.d.ts +3 -2
  61. package/dist/common/icon-button.js +1 -21
  62. package/dist/common/icons/add.d.ts +2 -2
  63. package/dist/common/icons/add.js +1 -21
  64. package/dist/common/icons/anchor_window.d.ts +2 -2
  65. package/dist/common/icons/anchor_window.js +6 -22
  66. package/dist/common/icons/arrow-down-alt.d.ts +2 -2
  67. package/dist/common/icons/arrow-down-alt.js +1 -21
  68. package/dist/common/icons/arrow-down-small.d.ts +14 -0
  69. package/dist/common/icons/arrow-down-small.js +72 -0
  70. package/dist/common/icons/arrow-down-solid.d.ts +2 -2
  71. package/dist/common/icons/arrow-down-solid.js +1 -21
  72. package/dist/common/icons/arrow-down.d.ts +2 -2
  73. package/dist/common/icons/arrow-down.js +1 -21
  74. package/dist/common/icons/arrow-left.d.ts +2 -2
  75. package/dist/common/icons/arrow-left.js +1 -21
  76. package/dist/common/icons/arrow-right.d.ts +2 -2
  77. package/dist/common/icons/arrow-right.js +1 -21
  78. package/dist/common/icons/arrow-up-alt.d.ts +2 -2
  79. package/dist/common/icons/arrow-up-alt.js +1 -21
  80. package/dist/common/icons/arrow-up-solid.d.ts +2 -2
  81. package/dist/common/icons/arrow-up-solid.js +1 -21
  82. package/dist/common/icons/arrow-up.d.ts +2 -2
  83. package/dist/common/icons/arrow-up.js +1 -21
  84. package/dist/common/icons/base.d.ts +1 -1
  85. package/dist/common/icons/base.js +1 -21
  86. package/dist/common/icons/bug.d.ts +2 -2
  87. package/dist/common/icons/bug.js +1 -21
  88. package/dist/common/icons/calendar.d.ts +10 -0
  89. package/dist/common/icons/calendar.js +66 -0
  90. package/dist/common/icons/cancel.d.ts +2 -2
  91. package/dist/common/icons/cancel.js +1 -21
  92. package/dist/common/icons/checkmark.d.ts +2 -2
  93. package/dist/common/icons/checkmark.js +1 -21
  94. package/dist/common/icons/clipboard.d.ts +2 -2
  95. package/dist/common/icons/clipboard.js +1 -21
  96. package/dist/common/icons/clock.d.ts +2 -2
  97. package/dist/common/icons/clock.js +1 -21
  98. package/dist/common/icons/close.d.ts +2 -2
  99. package/dist/common/icons/close.js +1 -21
  100. package/dist/common/icons/code-alt.d.ts +2 -2
  101. package/dist/common/icons/code-alt.js +1 -21
  102. package/dist/common/icons/copy.d.ts +2 -2
  103. package/dist/common/icons/copy.js +1 -21
  104. package/dist/common/icons/crosshairs.d.ts +2 -2
  105. package/dist/common/icons/crosshairs.js +1 -21
  106. package/dist/common/icons/cube-3d.d.ts +2 -2
  107. package/dist/common/icons/cube-3d.js +1 -21
  108. package/dist/common/icons/cursor-click.d.ts +2 -2
  109. package/dist/common/icons/cursor-click.js +1 -21
  110. package/dist/common/icons/cursor-point.d.ts +14 -0
  111. package/dist/common/icons/cursor-point.js +69 -0
  112. package/dist/common/icons/data-table.d.ts +2 -2
  113. package/dist/common/icons/data-table.js +1 -21
  114. package/dist/common/icons/db.d.ts +2 -2
  115. package/dist/common/icons/db.js +1 -21
  116. package/dist/common/icons/delete.d.ts +2 -2
  117. package/dist/common/icons/delete.js +1 -21
  118. package/dist/common/icons/docs.d.ts +2 -2
  119. package/dist/common/icons/docs.js +1 -21
  120. package/dist/common/icons/drag-n-drop.d.ts +2 -2
  121. package/dist/common/icons/drag-n-drop.js +1 -21
  122. package/dist/common/icons/draw-polygon.d.ts +2 -2
  123. package/dist/common/icons/draw-polygon.js +1 -21
  124. package/dist/common/icons/effects/brightness-contrast.d.ts +14 -0
  125. package/dist/common/icons/effects/brightness-contrast.js +88 -0
  126. package/dist/common/icons/effects/color-halftone.d.ts +14 -0
  127. package/dist/common/icons/effects/color-halftone.js +127 -0
  128. package/dist/common/icons/effects/dot-screen.d.ts +14 -0
  129. package/dist/common/icons/effects/dot-screen.js +122 -0
  130. package/dist/common/icons/effects/edge-work.d.ts +14 -0
  131. package/dist/common/icons/effects/edge-work.js +81 -0
  132. package/dist/common/icons/effects/hexagonal-pixelate.d.ts +14 -0
  133. package/dist/common/icons/effects/hexagonal-pixelate.js +148 -0
  134. package/dist/common/icons/effects/hue-saturation.d.ts +14 -0
  135. package/dist/common/icons/effects/hue-saturation.js +79 -0
  136. package/dist/common/icons/effects/ink.d.ts +14 -0
  137. package/dist/common/icons/effects/ink.js +78 -0
  138. package/dist/common/icons/effects/light-and-shadow.d.ts +14 -0
  139. package/dist/common/icons/effects/light-and-shadow.js +67 -0
  140. package/dist/common/icons/effects/magic-wand.d.ts +14 -0
  141. package/dist/common/icons/effects/magic-wand.js +79 -0
  142. package/dist/common/icons/effects/magnify.d.ts +14 -0
  143. package/dist/common/icons/effects/magnify.js +86 -0
  144. package/dist/common/icons/effects/noise.d.ts +14 -0
  145. package/dist/common/icons/effects/noise.js +132 -0
  146. package/dist/common/icons/effects/sepia.d.ts +14 -0
  147. package/dist/common/icons/effects/sepia.js +79 -0
  148. package/dist/common/icons/effects/tilt-shift.d.ts +14 -0
  149. package/dist/common/icons/effects/tilt-shift.js +88 -0
  150. package/dist/common/icons/effects/triangle-blur.d.ts +14 -0
  151. package/dist/common/icons/effects/triangle-blur.js +83 -0
  152. package/dist/common/icons/effects/vibrance.d.ts +14 -0
  153. package/dist/common/icons/effects/vibrance.js +79 -0
  154. package/dist/common/icons/effects/vignette.d.ts +14 -0
  155. package/dist/common/icons/effects/vignette.js +72 -0
  156. package/dist/common/icons/effects/zoom-blur.d.ts +14 -0
  157. package/dist/common/icons/effects/zoom-blur.js +107 -0
  158. package/dist/common/icons/email.d.ts +2 -2
  159. package/dist/common/icons/email.js +1 -21
  160. package/dist/common/icons/expand.d.ts +2 -2
  161. package/dist/common/icons/expand.js +1 -21
  162. package/dist/common/icons/eye-seen.d.ts +2 -2
  163. package/dist/common/icons/eye-seen.js +1 -21
  164. package/dist/common/icons/eye-unseen.d.ts +2 -2
  165. package/dist/common/icons/eye-unseen.js +1 -21
  166. package/dist/common/icons/file-type.d.ts +2 -2
  167. package/dist/common/icons/file-type.js +1 -21
  168. package/dist/common/icons/file.d.ts +2 -2
  169. package/dist/common/icons/file.js +1 -21
  170. package/dist/common/icons/files.d.ts +1 -1
  171. package/dist/common/icons/files.js +1 -21
  172. package/dist/common/icons/filter-funnel.d.ts +2 -2
  173. package/dist/common/icons/filter-funnel.js +1 -21
  174. package/dist/common/icons/free-window.d.ts +2 -2
  175. package/dist/common/icons/free-window.js +6 -22
  176. package/dist/common/icons/gear.d.ts +2 -2
  177. package/dist/common/icons/gear.js +1 -21
  178. package/dist/common/icons/globe.d.ts +15 -0
  179. package/dist/common/icons/globe.js +72 -0
  180. package/dist/common/icons/hash.d.ts +2 -2
  181. package/dist/common/icons/hash.js +1 -21
  182. package/dist/common/icons/histogram.d.ts +1 -1
  183. package/dist/common/icons/histogram.js +1 -21
  184. package/dist/common/icons/index.d.ts +26 -0
  185. package/dist/common/icons/index.js +209 -21
  186. package/dist/common/icons/info.d.ts +2 -2
  187. package/dist/common/icons/info.js +1 -21
  188. package/dist/common/icons/layers.d.ts +2 -2
  189. package/dist/common/icons/layers.js +1 -21
  190. package/dist/common/icons/left-arrow.d.ts +2 -2
  191. package/dist/common/icons/left-arrow.js +1 -21
  192. package/dist/common/icons/legend.d.ts +2 -2
  193. package/dist/common/icons/legend.js +1 -21
  194. package/dist/common/icons/line-chart.d.ts +2 -2
  195. package/dist/common/icons/line-chart.js +1 -21
  196. package/dist/common/icons/location-marker.d.ts +14 -0
  197. package/dist/common/icons/location-marker.js +77 -0
  198. package/dist/common/icons/login.d.ts +2 -2
  199. package/dist/common/icons/login.js +1 -21
  200. package/dist/common/icons/logout.d.ts +2 -2
  201. package/dist/common/icons/logout.js +1 -21
  202. package/dist/common/icons/map-icon.d.ts +2 -2
  203. package/dist/common/icons/map-icon.js +1 -21
  204. package/dist/common/icons/map.d.ts +2 -2
  205. package/dist/common/icons/map.js +1 -21
  206. package/dist/common/icons/messages.d.ts +2 -2
  207. package/dist/common/icons/messages.js +1 -21
  208. package/dist/common/icons/minus.d.ts +2 -2
  209. package/dist/common/icons/minus.js +1 -21
  210. package/dist/common/icons/moon.d.ts +14 -0
  211. package/dist/common/icons/moon.js +77 -0
  212. package/dist/common/icons/order-by-dataset.d.ts +2 -2
  213. package/dist/common/icons/order-by-dataset.js +6 -22
  214. package/dist/common/icons/order-by-list.d.ts +2 -2
  215. package/dist/common/icons/order-by-list.js +6 -22
  216. package/dist/common/icons/pause.d.ts +2 -2
  217. package/dist/common/icons/pause.js +1 -21
  218. package/dist/common/icons/picture.d.ts +1 -1
  219. package/dist/common/icons/picture.js +1 -21
  220. package/dist/common/icons/pin.d.ts +2 -2
  221. package/dist/common/icons/pin.js +1 -21
  222. package/dist/common/icons/play.d.ts +2 -2
  223. package/dist/common/icons/play.js +1 -21
  224. package/dist/common/icons/polygon.d.ts +2 -2
  225. package/dist/common/icons/polygon.js +1 -21
  226. package/dist/common/icons/rectangle.d.ts +2 -2
  227. package/dist/common/icons/rectangle.js +1 -21
  228. package/dist/common/icons/reduce.d.ts +2 -2
  229. package/dist/common/icons/reduce.js +1 -21
  230. package/dist/common/icons/reset.d.ts +2 -2
  231. package/dist/common/icons/reset.js +1 -21
  232. package/dist/common/icons/rocket.d.ts +2 -2
  233. package/dist/common/icons/rocket.js +1 -21
  234. package/dist/common/icons/save.d.ts +2 -2
  235. package/dist/common/icons/save.js +1 -21
  236. package/dist/common/icons/save2.d.ts +2 -2
  237. package/dist/common/icons/save2.js +1 -21
  238. package/dist/common/icons/search.d.ts +2 -2
  239. package/dist/common/icons/search.js +1 -21
  240. package/dist/common/icons/settings.d.ts +2 -2
  241. package/dist/common/icons/settings.js +1 -21
  242. package/dist/common/icons/share.d.ts +2 -2
  243. package/dist/common/icons/share.js +1 -21
  244. package/dist/common/icons/split.d.ts +2 -2
  245. package/dist/common/icons/split.js +1 -21
  246. package/dist/common/icons/square-select.d.ts +2 -2
  247. package/dist/common/icons/square-select.js +1 -21
  248. package/dist/common/icons/sun.d.ts +14 -0
  249. package/dist/common/icons/sun.js +93 -0
  250. package/dist/common/icons/sunrise.d.ts +14 -0
  251. package/dist/common/icons/sunrise.js +89 -0
  252. package/dist/common/icons/sunset.d.ts +14 -0
  253. package/dist/common/icons/sunset.js +89 -0
  254. package/dist/common/icons/trash.d.ts +2 -2
  255. package/dist/common/icons/trash.js +1 -21
  256. package/dist/common/icons/vert-dots.d.ts +2 -2
  257. package/dist/common/icons/vert-dots.js +1 -21
  258. package/dist/common/icons/vert-three-dots.d.ts +2 -2
  259. package/dist/common/icons/vert-three-dots.js +1 -21
  260. package/dist/common/icons/warning-sign.d.ts +2 -2
  261. package/dist/common/icons/warning-sign.js +1 -21
  262. package/dist/common/icons/warning.d.ts +2 -2
  263. package/dist/common/icons/warning.js +1 -21
  264. package/dist/common/image-preview.d.ts +2 -2
  265. package/dist/common/image-preview.js +1 -21
  266. package/dist/common/index.d.ts +1 -1
  267. package/dist/common/index.js +7 -21
  268. package/dist/common/info-helper.d.ts +2 -2
  269. package/dist/common/info-helper.js +1 -21
  270. package/dist/common/item-selector/accessor.js +5 -22
  271. package/dist/common/item-selector/chickleted-input.d.ts +1 -0
  272. package/dist/common/item-selector/chickleted-input.js +104 -44
  273. package/dist/common/item-selector/dropdown-list.d.ts +30 -8
  274. package/dist/common/item-selector/dropdown-list.js +150 -46
  275. package/dist/common/item-selector/item-selector.d.ts +5 -3
  276. package/dist/common/item-selector/item-selector.js +16 -24
  277. package/dist/common/item-selector/typeahead.d.ts +16 -12
  278. package/dist/common/item-selector/typeahead.js +23 -32
  279. package/dist/common/line-chart.d.ts +2 -2
  280. package/dist/common/line-chart.js +1 -21
  281. package/dist/common/loading-spinner.js +1 -21
  282. package/dist/common/logo.d.ts +2 -2
  283. package/dist/common/logo.js +1 -21
  284. package/dist/common/map-layer-selector.d.ts +2 -2
  285. package/dist/common/map-layer-selector.js +2 -23
  286. package/dist/common/modal.d.ts +24 -11
  287. package/dist/common/modal.js +25 -28
  288. package/dist/common/portaled.d.ts +526 -2
  289. package/dist/common/portaled.js +1 -21
  290. package/dist/common/progress-bar.d.ts +2 -2
  291. package/dist/common/progress-bar.js +1 -21
  292. package/dist/common/range-brush.js +1 -21
  293. package/dist/common/range-plot.d.ts +6 -2
  294. package/dist/common/range-plot.js +3 -22
  295. package/dist/common/range-slider.d.ts +6 -2
  296. package/dist/common/range-slider.js +8 -22
  297. package/dist/common/slider/mouse-event.js +6 -22
  298. package/dist/common/slider/slider-bar-handle.d.ts +2 -2
  299. package/dist/common/slider/slider-bar-handle.js +1 -21
  300. package/dist/common/slider/slider-handle.d.ts +1 -1
  301. package/dist/common/slider/slider-handle.js +1 -21
  302. package/dist/common/slider/slider.d.ts +7 -5
  303. package/dist/common/slider/slider.js +7 -24
  304. package/dist/common/styled-components.d.ts +8 -3
  305. package/dist/common/styled-components.js +161 -68
  306. package/dist/common/switch.d.ts +3 -2
  307. package/dist/common/switch.js +1 -21
  308. package/dist/common/time-range-slider-time-title.d.ts +2 -2
  309. package/dist/common/time-range-slider-time-title.js +1 -21
  310. package/dist/common/time-range-slider.d.ts +6 -3
  311. package/dist/common/time-range-slider.js +32 -33
  312. package/dist/common/time-slider-marker.d.ts +1 -1
  313. package/dist/common/time-slider-marker.js +2 -22
  314. package/dist/common/timeline-slider.d.ts +13 -0
  315. package/dist/common/timeline-slider.js +153 -0
  316. package/dist/common/tippy-tooltip.d.ts +4 -2
  317. package/dist/common/tippy-tooltip.js +22 -30
  318. package/dist/common/toolbar-item.d.ts +1 -1
  319. package/dist/common/toolbar-item.js +5 -23
  320. package/dist/common/toolbar.js +1 -21
  321. package/dist/common/vertical-toolbar.js +1 -21
  322. package/dist/connect/keplergl-connect.d.ts +5 -1
  323. package/dist/connect/keplergl-connect.js +6 -22
  324. package/dist/connect/with-local-selector.js +1 -21
  325. package/dist/container.js +1 -21
  326. package/dist/context.d.ts +11 -0
  327. package/dist/context.js +20 -24
  328. package/dist/dnd-context.d.ts +13 -0
  329. package/dist/dnd-context.js +157 -0
  330. package/dist/editor/editor.d.ts +11 -10
  331. package/dist/editor/editor.js +96 -122
  332. package/dist/editor/feature-action-panel.d.ts +8 -6
  333. package/dist/editor/feature-action-panel.js +57 -55
  334. package/dist/effects/compact-color-picker.d.ts +10 -0
  335. package/dist/effects/compact-color-picker.js +130 -0
  336. package/dist/effects/effect-configurator.d.ts +17 -0
  337. package/dist/effects/effect-configurator.js +302 -0
  338. package/dist/effects/effect-list.d.ts +15 -0
  339. package/dist/effects/effect-list.js +153 -0
  340. package/dist/effects/effect-manager.d.ts +22 -0
  341. package/dist/effects/effect-manager.js +142 -0
  342. package/dist/effects/effect-panel-header.d.ts +45 -0
  343. package/dist/effects/effect-panel-header.js +206 -0
  344. package/dist/effects/effect-panel.d.ts +24 -0
  345. package/dist/effects/effect-panel.js +149 -0
  346. package/dist/effects/effect-time-configurator.d.ts +20 -0
  347. package/dist/effects/effect-time-configurator.js +340 -0
  348. package/dist/effects/effect-time-selector.d.ts +16 -0
  349. package/dist/effects/effect-time-selector.js +181 -0
  350. package/dist/effects/effect-time-slider.d.ts +34 -0
  351. package/dist/effects/effect-time-slider.js +220 -0
  352. package/dist/effects/effect-type-dropdown-list.d.ts +18 -0
  353. package/dist/effects/effect-type-dropdown-list.js +77 -0
  354. package/dist/effects/effect-type-list-item.d.ts +22 -0
  355. package/dist/effects/effect-type-list-item.js +105 -0
  356. package/dist/effects/effect-type-selector.d.ts +30 -0
  357. package/dist/effects/effect-type-selector.js +92 -0
  358. package/dist/effects/side-panel-title.d.ts +7 -0
  359. package/dist/effects/side-panel-title.js +47 -0
  360. package/dist/effects/timezone-selector.d.ts +19 -0
  361. package/dist/effects/timezone-selector.js +71 -0
  362. package/dist/filter-animation-controller.d.ts +17 -0
  363. package/dist/filter-animation-controller.js +73 -0
  364. package/dist/filters/components.js +1 -21
  365. package/dist/filters/filter-panels/filter-panel-with-field-select.js +7 -23
  366. package/dist/filters/filter-panels/multi-select-filter-panel.js +7 -23
  367. package/dist/filters/filter-panels/new-filter-panel.js +6 -22
  368. package/dist/filters/filter-panels/polygon-filter-panel.js +7 -23
  369. package/dist/filters/filter-panels/range-filter-panel.js +7 -23
  370. package/dist/filters/filter-panels/single-select-filter-panel.js +7 -23
  371. package/dist/filters/filter-panels/time-range-filter-panel.js +24 -27
  372. package/dist/filters/filter-panels/types.d.ts +2 -1
  373. package/dist/filters/filter-panels/types.js +0 -20
  374. package/dist/filters/index.d.ts +2 -0
  375. package/dist/filters/index.js +17 -21
  376. package/dist/filters/multi-select-filter.js +6 -22
  377. package/dist/filters/polygon-filter.js +18 -24
  378. package/dist/filters/range-filter.js +9 -23
  379. package/dist/filters/single-select-filter.js +6 -22
  380. package/dist/filters/time-range-filter.d.ts +2 -1
  381. package/dist/filters/time-range-filter.js +15 -27
  382. package/dist/filters/time-widget-top.d.ts +8 -0
  383. package/dist/filters/time-widget-top.js +103 -0
  384. package/dist/filters/time-widget.d.ts +3 -7
  385. package/dist/filters/time-widget.js +34 -111
  386. package/dist/filters/types.d.ts +7 -3
  387. package/dist/filters/types.js +0 -20
  388. package/dist/geocoder/geocoder.d.ts +1 -3
  389. package/dist/geocoder/geocoder.js +10 -27
  390. package/dist/geocoder-panel.d.ts +9 -3
  391. package/dist/geocoder-panel.js +29 -38
  392. package/dist/hooks/use-cloud-list-provider.d.ts +11 -0
  393. package/dist/hooks/use-cloud-list-provider.js +57 -0
  394. package/dist/hooks/use-dnd-effects.d.ts +9 -0
  395. package/dist/hooks/use-dnd-effects.js +88 -0
  396. package/dist/hooks/use-dnd-layers.d.ts +9 -0
  397. package/dist/hooks/use-dnd-layers.js +95 -0
  398. package/dist/hooks/use-feature-flags.d.ts +5 -0
  399. package/dist/hooks/use-feature-flags.js +21 -0
  400. package/dist/index.d.ts +78 -21
  401. package/dist/index.js +695 -116
  402. package/dist/injector.d.ts +4 -4
  403. package/dist/injector.js +1 -21
  404. package/dist/kepler-gl.d.ts +59 -17
  405. package/dist/kepler-gl.js +88 -53
  406. package/dist/layer-animation-controller.d.ts +13 -0
  407. package/dist/layer-animation-controller.js +58 -0
  408. package/dist/map/coordinate-info.js +6 -22
  409. package/dist/map/effects/effect-control.d.ts +16 -0
  410. package/dist/map/effects/effect-control.js +63 -0
  411. package/dist/map/layer-hover-info.d.ts +2 -2
  412. package/dist/map/layer-hover-info.js +26 -30
  413. package/dist/map/layer-selector-panel.js +6 -22
  414. package/dist/map/lazy-tippy.js +1 -21
  415. package/dist/map/locale-panel.d.ts +1 -1
  416. package/dist/map/locale-panel.js +6 -22
  417. package/dist/map/map-control-panel.d.ts +6 -0
  418. package/dist/map/map-control-panel.js +64 -28
  419. package/dist/map/map-control-toolbar.js +2 -22
  420. package/dist/map/map-control-tooltip.js +6 -22
  421. package/dist/map/map-control.d.ts +15 -7
  422. package/dist/map/map-control.js +5 -26
  423. package/dist/map/map-draw-panel.d.ts +2 -2
  424. package/dist/map/map-draw-panel.js +6 -29
  425. package/dist/map/map-legend-panel.d.ts +12 -1
  426. package/dist/map/map-legend-panel.js +31 -34
  427. package/dist/map/map-legend.d.ts +1 -1
  428. package/dist/map/map-legend.js +1 -21
  429. package/dist/map/map-popover-content.d.ts +28 -0
  430. package/dist/map/map-popover-content.js +35 -0
  431. package/dist/map/map-popover.d.ts +11 -14
  432. package/dist/map/map-popover.js +93 -34
  433. package/dist/map/split-map-button.js +6 -22
  434. package/dist/map/toggle-3d-button.js +6 -22
  435. package/dist/map-container.d.ts +33 -9
  436. package/dist/map-container.js +544 -194
  437. package/dist/map-view-state-context.d.ts +17 -0
  438. package/dist/map-view-state-context.js +117 -0
  439. package/dist/maps-layout.d.ts +5 -2
  440. package/dist/maps-layout.js +6 -22
  441. package/dist/modal-container.d.ts +4 -8
  442. package/dist/modal-container.js +19 -76
  443. package/dist/modals/add-map-style-modal.d.ts +1 -3
  444. package/dist/modals/add-map-style-modal.js +15 -73
  445. package/dist/modals/cloud-components/cloud-header.d.ts +8 -0
  446. package/dist/modals/cloud-components/cloud-header.js +65 -0
  447. package/dist/modals/cloud-components/cloud-item.d.ts +5 -0
  448. package/dist/modals/cloud-components/cloud-item.js +72 -0
  449. package/dist/modals/cloud-components/cloud-item.spec.d.ts +1 -0
  450. package/dist/modals/cloud-components/cloud-item.spec.js +105 -0
  451. package/dist/modals/cloud-components/cloud-maps.d.ts +8 -0
  452. package/dist/modals/cloud-components/cloud-maps.js +63 -0
  453. package/dist/modals/cloud-components/cloud-maps.spec.d.ts +1 -0
  454. package/dist/modals/cloud-components/cloud-maps.spec.js +112 -0
  455. package/dist/modals/cloud-components/provider-loading.d.ts +2 -0
  456. package/dist/modals/cloud-components/provider-loading.js +29 -0
  457. package/dist/modals/cloud-components/provider-select.d.ts +7 -0
  458. package/dist/modals/cloud-components/provider-select.js +40 -0
  459. package/dist/modals/cloud-tile.d.ts +8 -8
  460. package/dist/modals/cloud-tile.js +184 -75
  461. package/dist/modals/data-table-modal.d.ts +11 -2
  462. package/dist/modals/data-table-modal.js +74 -43
  463. package/dist/modals/delete-data-modal.js +1 -21
  464. package/dist/modals/error-display.js +15 -26
  465. package/dist/modals/export-data-modal.d.ts +1 -3
  466. package/dist/modals/export-data-modal.js +1 -21
  467. package/dist/modals/export-image-modal.d.ts +1 -3
  468. package/dist/modals/export-image-modal.js +1 -21
  469. package/dist/modals/export-map-modal/components.d.ts +2 -2
  470. package/dist/modals/export-map-modal/components.js +1 -21
  471. package/dist/modals/export-map-modal/export-html-map.js +1 -21
  472. package/dist/modals/export-map-modal/export-json-map.d.ts +1 -1
  473. package/dist/modals/export-map-modal/export-json-map.js +1 -21
  474. package/dist/modals/export-map-modal/export-map-modal.d.ts +2 -2
  475. package/dist/modals/export-map-modal/export-map-modal.js +6 -22
  476. package/dist/modals/image-modal-container.d.ts +2 -3
  477. package/dist/modals/image-modal-container.js +12 -34
  478. package/dist/modals/load-data-modal.d.ts +0 -5
  479. package/dist/modals/load-data-modal.js +1 -21
  480. package/dist/modals/load-storage-map.d.ts +3 -24
  481. package/dist/modals/load-storage-map.js +69 -282
  482. package/dist/modals/load-storage-map.spec.d.ts +1 -0
  483. package/dist/modals/load-storage-map.spec.js +237 -0
  484. package/dist/modals/loading-dialog.js +1 -21
  485. package/dist/modals/modal-dialog.js +6 -22
  486. package/dist/modals/modal-tabs.d.ts +1 -1
  487. package/dist/modals/modal-tabs.js +1 -21
  488. package/dist/modals/overwrite-map-modal.d.ts +2 -2
  489. package/dist/modals/overwrite-map-modal.js +39 -32
  490. package/dist/modals/save-map-modal.d.ts +3 -5
  491. package/dist/modals/save-map-modal.js +99 -119
  492. package/dist/modals/save-map-modal.spec.d.ts +1 -0
  493. package/dist/modals/save-map-modal.spec.js +218 -0
  494. package/dist/modals/share-map-modal.d.ts +1 -5
  495. package/dist/modals/share-map-modal.js +57 -81
  496. package/dist/modals/share-map-modal.spec.d.ts +1 -0
  497. package/dist/modals/share-map-modal.spec.js +202 -0
  498. package/dist/modals/status-panel.js +1 -21
  499. package/dist/modals/storage-map-viewer.d.ts +1 -1
  500. package/dist/modals/storage-map-viewer.js +1 -21
  501. package/dist/notification-panel/notification-item.d.ts +7 -10
  502. package/dist/notification-panel/notification-item.js +44 -32
  503. package/dist/notification-panel.js +1 -21
  504. package/dist/plot-container.js +20 -28
  505. package/dist/side-panel/add-by-dataset-button.d.ts +12 -0
  506. package/dist/side-panel/add-by-dataset-button.js +153 -0
  507. package/dist/side-panel/cloud-storage-dropdown.d.ts +2 -2
  508. package/dist/side-panel/cloud-storage-dropdown.js +6 -22
  509. package/dist/side-panel/common/dataset-info.d.ts +10 -3
  510. package/dist/side-panel/common/dataset-info.js +1 -21
  511. package/dist/side-panel/common/dataset-tag.d.ts +15 -1
  512. package/dist/side-panel/common/dataset-tag.js +13 -30
  513. package/dist/side-panel/common/dataset-title.d.ts +16 -2
  514. package/dist/side-panel/common/dataset-title.js +70 -124
  515. package/dist/side-panel/common/source-data-catalog.d.ts +22 -3
  516. package/dist/side-panel/common/source-data-catalog.js +1 -21
  517. package/dist/side-panel/common/source-data-selector.js +6 -22
  518. package/dist/side-panel/common/types.d.ts +7 -27
  519. package/dist/side-panel/common/types.js +0 -20
  520. package/dist/side-panel/custom-panel.d.ts +6 -7
  521. package/dist/side-panel/custom-panel.js +6 -22
  522. package/dist/side-panel/filter-manager.d.ts +18 -6
  523. package/dist/side-panel/filter-manager.js +175 -84
  524. package/dist/side-panel/filter-panel/add-filter-button.d.ts +8 -0
  525. package/dist/side-panel/filter-panel/add-filter-button.js +34 -0
  526. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +6 -3
  527. package/dist/side-panel/filter-panel/filter-panel-header.js +3 -23
  528. package/dist/side-panel/filter-panel/filter-panel.js +1 -21
  529. package/dist/side-panel/interaction-manager.d.ts +6 -3
  530. package/dist/side-panel/interaction-manager.js +24 -27
  531. package/dist/side-panel/interaction-panel/brush-config.d.ts +2 -2
  532. package/dist/side-panel/interaction-panel/brush-config.js +1 -21
  533. package/dist/side-panel/interaction-panel/interaction-panel.d.ts +5 -2
  534. package/dist/side-panel/interaction-panel/interaction-panel.js +11 -24
  535. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +11 -9
  536. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +69 -67
  537. package/dist/side-panel/interaction-panel/tooltip-config.d.ts +2 -3
  538. package/dist/side-panel/interaction-panel/tooltip-config.js +48 -57
  539. package/dist/side-panel/layer-manager.d.ts +13 -10
  540. package/dist/side-panel/layer-manager.js +72 -57
  541. package/dist/side-panel/layer-panel/add-layer-button.d.ts +3 -5
  542. package/dist/side-panel/layer-panel/add-layer-button.js +14 -156
  543. package/dist/side-panel/layer-panel/color-palette.js +1 -21
  544. package/dist/side-panel/layer-panel/color-range-selector.d.ts +1 -1
  545. package/dist/side-panel/layer-panel/color-range-selector.js +1 -21
  546. package/dist/side-panel/layer-panel/color-selector.d.ts +15 -24
  547. package/dist/side-panel/layer-panel/color-selector.js +174 -146
  548. package/dist/side-panel/layer-panel/column-selector.js +1 -21
  549. package/dist/side-panel/layer-panel/custom-palette.d.ts +7 -2
  550. package/dist/side-panel/layer-panel/custom-palette.js +5 -24
  551. package/dist/side-panel/layer-panel/custom-picker.d.ts +9 -36
  552. package/dist/side-panel/layer-panel/custom-picker.js +1 -21
  553. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +1 -1
  554. package/dist/side-panel/layer-panel/dataset-layer-group.js +7 -22
  555. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +3 -2
  556. package/dist/side-panel/layer-panel/dataset-layer-section.js +4 -23
  557. package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -3
  558. package/dist/side-panel/layer-panel/dataset-section.js +5 -26
  559. package/dist/side-panel/layer-panel/dimension-scale-selector.js +6 -22
  560. package/dist/side-panel/layer-panel/how-to-button.js +1 -21
  561. package/dist/side-panel/layer-panel/layer-color-selector.d.ts +42 -0
  562. package/dist/side-panel/layer-panel/layer-color-selector.js +118 -0
  563. package/dist/side-panel/layer-panel/layer-column-config.d.ts +15 -9
  564. package/dist/side-panel/layer-panel/layer-column-config.js +34 -32
  565. package/dist/side-panel/layer-panel/layer-config-group.d.ts +11 -2
  566. package/dist/side-panel/layer-panel/layer-config-group.js +18 -30
  567. package/dist/side-panel/layer-panel/layer-configurator.d.ts +10 -35
  568. package/dist/side-panel/layer-panel/layer-configurator.js +75 -132
  569. package/dist/side-panel/layer-panel/layer-error-message.d.ts +6 -0
  570. package/dist/side-panel/layer-panel/layer-error-message.js +38 -0
  571. package/dist/side-panel/layer-panel/layer-list.d.ts +4 -3
  572. package/dist/side-panel/layer-panel/layer-list.js +111 -108
  573. package/dist/side-panel/layer-panel/layer-panel-header.d.ts +22 -10
  574. package/dist/side-panel/layer-panel/layer-panel-header.js +105 -86
  575. package/dist/side-panel/layer-panel/layer-panel.d.ts +3 -1
  576. package/dist/side-panel/layer-panel/layer-panel.js +23 -30
  577. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +1 -21
  578. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +12 -3
  579. package/dist/side-panel/layer-panel/layer-type-list-item.js +11 -23
  580. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +2 -1
  581. package/dist/side-panel/layer-panel/layer-type-selector.js +4 -22
  582. package/dist/side-panel/layer-panel/single-color-palette.d.ts +1 -1
  583. package/dist/side-panel/layer-panel/single-color-palette.js +1 -21
  584. package/dist/side-panel/layer-panel/text-label-panel.d.ts +4 -2
  585. package/dist/side-panel/layer-panel/text-label-panel.js +61 -34
  586. package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +1 -3
  587. package/dist/side-panel/layer-panel/vis-config-by-field-selector.js +1 -21
  588. package/dist/side-panel/layer-panel/vis-config-slider.js +1 -21
  589. package/dist/side-panel/layer-panel/vis-config-switch.js +1 -21
  590. package/dist/side-panel/map-manager.d.ts +13 -6
  591. package/dist/side-panel/map-manager.js +55 -64
  592. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +14 -0
  593. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.js +96 -0
  594. package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +29 -0
  595. package/dist/side-panel/map-style-panel/map-layer-group-item.js +111 -0
  596. package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +16 -12
  597. package/dist/side-panel/map-style-panel/map-layer-selector.js +33 -70
  598. package/dist/side-panel/map-style-panel/map-style-selector.d.ts +11 -4
  599. package/dist/side-panel/map-style-panel/map-style-selector.js +53 -39
  600. package/dist/side-panel/panel-dropdown.d.ts +3 -2
  601. package/dist/side-panel/panel-dropdown.js +1 -21
  602. package/dist/side-panel/panel-header-action.d.ts +4 -2
  603. package/dist/side-panel/panel-header-action.js +10 -23
  604. package/dist/side-panel/panel-header.d.ts +13 -8
  605. package/dist/side-panel/panel-header.js +2 -21
  606. package/dist/side-panel/panel-tab.d.ts +2 -2
  607. package/dist/side-panel/panel-tab.js +1 -21
  608. package/dist/side-panel/panel-title.d.ts +6 -3
  609. package/dist/side-panel/panel-title.js +30 -33
  610. package/dist/side-panel/panel-toggle.d.ts +1 -1
  611. package/dist/side-panel/panel-toggle.js +1 -21
  612. package/dist/side-panel/{layer-panel/panel-view-list-toggle.d.ts → panel-view-list-toggle.d.ts} +19 -8
  613. package/dist/side-panel/panel-view-list-toggle.js +123 -0
  614. package/dist/side-panel/side-bar.d.ts +15 -16
  615. package/dist/side-panel/side-bar.js +7 -25
  616. package/dist/side-panel.d.ts +2 -117
  617. package/dist/side-panel.js +19 -54
  618. package/dist/types.d.ts +14 -9
  619. package/dist/types.js +0 -20
  620. package/package.json +48 -38
  621. package/dist/editor/constants.d.ts +0 -17
  622. package/dist/editor/constants.js +0 -47
  623. package/dist/editor/feature-styles.d.ts +0 -37
  624. package/dist/editor/feature-styles.js +0 -92
  625. package/dist/editor/handle-style.d.ts +0 -42
  626. package/dist/editor/handle-style.js +0 -100
  627. package/dist/hooks/useFeatureFlags.d.ts +0 -2
  628. package/dist/hooks/useFeatureFlags.js +0 -38
  629. package/dist/modals/provider-modal-container.d.ts +0 -22
  630. package/dist/modals/provider-modal-container.js +0 -101
  631. package/dist/side-panel/layer-panel/panel-view-list-toggle.js +0 -143
@@ -1,23 +1,3 @@
1
- // Copyright (c) 2022 Uber Technologies, Inc.
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to deal
5
- // in the Software without restriction, including without limitation the rights
6
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- // copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- // THE SOFTWARE.
20
-
21
1
  "use strict";
22
2
 
23
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -214,6 +194,10 @@ var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
214
194
  e.stopPropagation();
215
195
 
216
196
  if (!_this.props.disabled) {
197
+ if (_this.props.onOpen) {
198
+ _this.props.onOpen();
199
+ }
200
+
217
201
  _this.setState({
218
202
  showTypeahead: true
219
203
  });
@@ -248,12 +232,13 @@ var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
248
232
  var _this$props$placement = this.props.placement,
249
233
  placement = _this$props$placement === void 0 ? 'bottom' : _this$props$placement;
250
234
  var dimensions = this.state.dimensions;
235
+ var DropDownWrapperComponent = this.props.DropDownWrapperComponent;
251
236
  return /*#__PURE__*/_react["default"].createElement(_portaled["default"], {
252
237
  left: 0,
253
238
  top: 0,
254
239
  isOpened: this.state.showTypeahead,
255
240
  onClose: this._hideTypeahead
256
- }, /*#__PURE__*/_react["default"].createElement(DropdownWrapper, {
241
+ }, /*#__PURE__*/_react["default"].createElement(DropDownWrapperComponent, {
257
242
  placement: placement,
258
243
  width: dimensions === null || dimensions === void 0 ? void 0 : dimensions.width
259
244
  }, /*#__PURE__*/_react["default"].createElement(_typeahead["default"], {
@@ -275,6 +260,7 @@ var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
275
260
  customListItemComponent: this.props.DropDownLineItemRenderComponent,
276
261
  displayOption: _accessor["default"].generateOptionToStringFor(this.props.displayOption),
277
262
  searchable: this.props.searchable,
263
+ searchOptions: this.props.searchOptions,
278
264
  showOptionsWhenEmpty: true,
279
265
  selectedItems: (0, _utils.toArray)(this.props.selectedItems),
280
266
  light: this.props.inputTheme === 'light'
@@ -289,6 +275,7 @@ var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
289
275
  var displayOption = _accessor["default"].generateOptionToStringFor(this.props.displayOption);
290
276
 
291
277
  var _this$props = this.props,
278
+ disabled = _this$props.disabled,
292
279
  _this$props$inputThem = _this$props.inputTheme,
293
280
  inputTheme = _this$props$inputThem === void 0 ? 'primary' : _this$props$inputThem,
294
281
  _this$props$DropDownL = _this$props.DropDownLineItemRenderComponent,
@@ -298,7 +285,7 @@ var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
298
285
  active: this.state.showTypeahead
299
286
  }),
300
287
  displayOption: displayOption,
301
- disabled: this.props.disabled,
288
+ disabled: disabled,
302
289
  onClick: this._showTypeahead,
303
290
  error: this.props.isError,
304
291
  inputTheme: inputTheme,
@@ -316,15 +303,18 @@ var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
316
303
  selectedItems: (0, _utils.toArray)(this.props.selectedItems),
317
304
  placeholder: this.props.placeholder,
318
305
  removeItem: this._removeItem,
306
+ reorderItems: this.props.reorderItems,
319
307
  CustomChickletComponent: this.props.CustomChickletComponent,
320
308
  inputTheme: inputTheme
321
309
  })) : /*#__PURE__*/_react["default"].createElement(StyledDropdownSelect, dropdownSelectProps, /*#__PURE__*/_react["default"].createElement(DropdownSelectValue, {
322
310
  hasPlaceholder: !hasValue,
311
+ disabled: disabled,
323
312
  inputTheme: inputTheme,
324
313
  className: "item-selector__dropdown__value"
325
314
  }, hasValue ? /*#__PURE__*/_react["default"].createElement(DropDownLineItemRenderComponent, {
326
315
  displayOption: displayOption,
327
316
  value: selected[0],
317
+ disabled: disabled,
328
318
  light: inputTheme === 'light'
329
319
  }) : /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
330
320
  id: this.props.placeholder || 'placeholder.selectValue'
@@ -346,7 +336,9 @@ var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
346
336
  closeOnSelect: true,
347
337
  searchable: true,
348
338
  DropDownRenderComponent: _dropdownList["default"],
349
- DropDownLineItemRenderComponent: _dropdownList.ListItem
339
+ DropDownLineItemRenderComponent: _dropdownList.ListItem,
340
+ DropDownWrapperComponent: DropdownWrapper,
341
+ reorderItems: undefined
350
342
  });
351
343
 
352
344
  var ItemSelector = /*#__PURE__*/_react["default"].memo(ItemSelectorUnmemoized);
@@ -356,4 +348,4 @@ ItemSelector.displayName = 'ItemSelector';
356
348
  var _default = (0, _reactIntl.injectIntl)(ItemSelectorUnmemoized);
357
349
 
358
350
  exports["default"] = _default;
359
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yLnRzeCJdLCJuYW1lcyI6WyJTdHlsZWREcm9wZG93blNlbGVjdCIsInN0eWxlZCIsImRpdiIsImF0dHJzIiwicHJvcHMiLCJjbGFzc05hbWUiLCJpbnB1dFRoZW1lIiwidGhlbWUiLCJzZWNvbmRhcnlJbnB1dCIsImlucHV0TFQiLCJpbnB1dCIsInNpemUiLCJpbnB1dEJveEhlaWdodFNtYWxsIiwiaW5wdXRCb3hIZWlnaHQiLCJkcm9wZG93bkxpc3RBbmNob3IiLCJEcm9wZG93blNlbGVjdFZhbHVlIiwic3BhbiIsImhhc1BsYWNlaG9sZGVyIiwic2VsZWN0Q29sb3JQbGFjZUhvbGRlckxUIiwic2VsZWN0Q29sb3JQbGFjZUhvbGRlciIsInNlbGVjdENvbG9yTFQiLCJzZWxlY3RDb2xvciIsImRyb3Bkb3duTGlzdEl0ZW1MVCIsImRyb3Bkb3duTGlzdEl0ZW0iLCJkcm9wZG93bkxpc3RBbmNob3JMVCIsIkRyb3Bkb3duU2VsZWN0QWN0aW9uUmlnaHQiLCJzdWJ0ZXh0Q29sb3IiLCJ0ZXh0Q29sb3IiLCJEcm9wZG93bldyYXBwZXIiLCJkcm9wZG93bldyYXBwZXJaIiwid2lkdGgiLCJJdGVtU2VsZWN0b3JVbm1lbW9pemVkIiwic2hvd1R5cGVhaGVhZCIsImRpbWVuc2lvbnMiLCJfaGlkZVR5cGVhaGVhZCIsInNldFN0YXRlIiwiX29uQmx1ciIsIm9uQmx1ciIsIml0ZW0iLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJtdWx0aVNlbGVjdGVkSXRlbXMiLCJzZWxlY3RlZEl0ZW1zIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJ0IiwiaXRlbXMiLCJzbGljZSIsImxlbmd0aCIsIm9uQ2hhbmdlIiwiY2xvc2VPblNlbGVjdCIsImdldFZhbHVlIiwiQWNjZXNzb3IiLCJnZW5lcmF0ZU9wdGlvblRvU3RyaW5nRm9yIiwiZ2V0T3B0aW9uVmFsdWUiLCJkaXNwbGF5T3B0aW9uIiwicHJldmlvdXNTZWxlY3RlZCIsIm11bHRpU2VsZWN0IiwiY29uY2F0IiwiZGlzYWJsZWQiLCJzaG93RHJvcGRvd25Pbk1vdW50Iiwicm9vdCIsImN1cnJlbnQiLCJIVE1MRWxlbWVudCIsIl9oYW5kbGVSZXNpemUiLCJpbnRsIiwicGxhY2VtZW50Iiwic3RhdGUiLCJyZXN1bHRzIiwibGlzdEl0ZW0iLCJsaXN0QW5jaG9yIiwib3B0aW9ucyIsImZpbHRlck9wdGlvbiIsImZpeGVkT3B0aW9ucyIsInR5cGVhaGVhZFBsYWNlaG9sZGVyIiwiZm9ybWF0TWVzc2FnZSIsImlkIiwiX3NlbGVjdEl0ZW0iLCJEcm9wRG93blJlbmRlckNvbXBvbmVudCIsIkRyb3Bkb3duSGVhZGVyQ29tcG9uZW50IiwiRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudCIsInNlYXJjaGFibGUiLCJzZWxlY3RlZCIsImhhc1ZhbHVlIiwiTGlzdEl0ZW0iLCJkcm9wZG93blNlbGVjdFByb3BzIiwiYWN0aXZlIiwib25DbGljayIsIl9zaG93VHlwZWFoZWFkIiwiZXJyb3IiLCJpc0Vycm9yIiwicG9zaXRpb24iLCJwbGFjZWhvbGRlciIsIl9yZW1vdmVJdGVtIiwiQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQiLCJlcmFzYWJsZSIsIl9vbkVyYXNlIiwic2hvd0Fycm93IiwiX3JlbmRlckRyb3Bkb3duIiwiQ29tcG9uZW50IiwiRHJvcGRvd25MaXN0IiwiSXRlbVNlbGVjdG9yIiwiUmVhY3QiLCJtZW1vIiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBUU8sSUFBTUEsb0JBQW9CLEdBQUdDLDZCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUIsVUFBQUMsS0FBSztBQUFBLFNBQUs7QUFDN0RDLElB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cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWYsIENvbXBvbmVudFR5cGUsIE1vdXNlRXZlbnRIYW5kbGVyLCBSZWZPYmplY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gudW5pcWJ5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgQWNjZXNzb3IgZnJvbSAnLi9hY2Nlc3Nvcic7XG5pbXBvcnQgQ2hpY2tsZXRlZElucHV0IGZyb20gJy4vY2hpY2tsZXRlZC1pbnB1dCc7XG5pbXBvcnQgVHlwZWFoZWFkIGZyb20gJy4vdHlwZWFoZWFkJztcbmltcG9ydCB7RGVsZXRlLCBBcnJvd0Rvd259IGZyb20gJy4uL2ljb25zJztcbmltcG9ydCBEcm9wZG93bkxpc3QsIHtMaXN0SXRlbX0gZnJvbSAnLi9kcm9wZG93bi1saXN0JztcbmltcG9ydCBQb3J0YWxlZCBmcm9tICcuLi8uLi9jb21tb24vcG9ydGFsZWQnO1xuaW1wb3J0IHt0b0FycmF5LCBvYnNlcnZlRGltZW5zaW9ucywgdW5vYnNlcnZlRGltZW5zaW9uc30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2luamVjdEludGwsIEludGxTaGFwZX0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcblxuaW50ZXJmYWNlIFN0eWxlZERyb3Bkb3duU2VsZWN0UHJvcHMge1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xuICBzaXplPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBTdHlsZWREcm9wZG93blNlbGVjdCA9IHN0eWxlZC5kaXYuYXR0cnMocHJvcHMgPT4gKHtcbiAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKCdpdGVtLXNlbGVjdG9yX19kcm9wZG93bicsIHByb3BzLmNsYXNzTmFtZSlcbn0pKTxTdHlsZWREcm9wZG93blNlbGVjdFByb3BzPmBcbiAgJHtwcm9wcyA9PlxuICAgIHByb3BzLmlucHV0VGhlbWUgPT09ICdzZWNvbmRhcnknXG4gICAgICA/IHByb3BzLnRoZW1lLnNlY29uZGFyeUlucHV0XG4gICAgICA6IHByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCdcbiAgICAgID8gcHJvcHMudGhlbWUuaW5wdXRMVFxuICAgICAgOiBwcm9wcy50aGVtZS5pbnB1dH07XG5cbiAgaGVpZ2h0OiAke3Byb3BzID0+XG4gICAgcHJvcHMuc2l6ZSA9PT0gJ3NtYWxsJyA/IHByb3BzLnRoZW1lLmlucHV0Qm94SGVpZ2h0U21hbGwgOiBwcm9wcy50aGVtZS5pbnB1dEJveEhlaWdodH07XG5cbiAgLmxpc3RfX2l0ZW1fX2FuY2hvciB7XG4gICAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RBbmNob3J9O1xuICB9XG5gO1xuXG5pbnRlcmZhY2UgRHJvcGRvd25TZWxlY3RWYWx1ZVByb3BzIHtcbiAgaGFzUGxhY2Vob2xkZXI/OiBib29sZWFuO1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBEcm9wZG93blNlbGVjdFZhbHVlID0gc3R5bGVkLnNwYW48RHJvcGRvd25TZWxlY3RWYWx1ZVByb3BzPmBcbiAgY29sb3I6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy5oYXNQbGFjZWhvbGRlciAmJiBwcm9wcy5pbnB1dFRoZW1lID09PSAnbGlnaHQnXG4gICAgICA/IHByb3BzLnRoZW1lLnNlbGVjdENvbG9yUGxhY2VIb2xkZXJMVFxuICAgICAgOiBwcm9wcy5oYXNQbGFjZWhvbGRlclxuICAgICAgPyBwcm9wcy50aGVtZS5zZWxlY3RDb2xvclBsYWNlSG9sZGVyXG4gICAgICA6IHByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCdcbiAgICAgID8gcHJvcHMudGhlbWUuc2VsZWN0Q29sb3JMVFxuICAgICAgOiBwcm9wcy50aGVtZS5zZWxlY3RDb2xvcn07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIC5saXN0X19pdGVtIHtcbiAgICAke3Byb3BzID0+XG4gICAgICBwcm9wcy5pbnB1dFRoZW1lID09PSAnbGlnaHQnID8gcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0SXRlbUxUIDogcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0SXRlbX07XG4gIH1cblxuICAubGlzdF9faXRlbV9fYW5jaG9yIHtcbiAgICAke3Byb3BzID0+XG4gICAgICBwcm9wcy5pbnB1dFRoZW1lID09PSAnbGlnaHQnXG4gICAgICAgID8gcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0QW5jaG9yTFRcbiAgICAgICAgOiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RBbmNob3J9O1xuICB9XG5gO1xuXG5jb25zdCBEcm9wZG93blNlbGVjdEFjdGlvblJpZ2h0ID0gc3R5bGVkLmRpdmBcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnN1YnRleHRDb2xvcn07XG5cbiAgOmhvdmVyIHtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICB9XG5gO1xuXG5pbnRlcmZhY2UgRHJvcGRvd25XcmFwcGVyUHJvcHMge1xuICBwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG59XG5cbmNvbnN0IERyb3Bkb3duV3JhcHBlciA9IHN0eWxlZC5kaXY8RHJvcGRvd25XcmFwcGVyUHJvcHM+YFxuICBib3JkZXI6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmRyb3Bkb3duV3JhcHBlclp9O1xuICB3aWR0aDogJHtwcm9wcyA9PiBwcm9wcy53aWR0aH1weDtcbmA7XG5cbmV4cG9ydCB0eXBlIEl0ZW1TZWxlY3RvclByb3BzID0ge1xuICBzZWxlY3RlZEl0ZW1zPzpcbiAgICB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdD5cbiAgICB8IHN0cmluZ1xuICAgIHwgbnVtYmVyXG4gICAgfCBib29sZWFuXG4gICAgfCBvYmplY3RcbiAgICB8IG51bGw7XG4gIG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdD47XG4gIG9uQ2hhbmdlOiAoXG4gICAgaXRlbXM6XG4gICAgICB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdD5cbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IG51bWJlclxuICAgICAgfCBib29sZWFuXG4gICAgICB8IG9iamVjdFxuICAgICAgfCBudWxsXG4gICkgPT4gdm9pZDtcbiAgZml4ZWRPcHRpb25zPzogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0PiB8IG51bGw7XG4gIGVyYXNhYmxlPzogYm9vbGVhbjtcbiAgc2hvd0Fycm93PzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIGRpc3BsYXlPcHRpb24/OiBzdHJpbmcgfCAoKG9wdDogYW55KSA9PiBhbnkpO1xuICBnZXRPcHRpb25WYWx1ZT86IHN0cmluZyB8ICgob3B0OiBhbnkpID0+IGFueSk7XG4gIGZpbHRlck9wdGlvbj86IHN0cmluZyB8ICgob3B0OiBhbnkpID0+IGFueSk7XG4gIHBsYWNlbWVudD86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbiAgbXVsdGlTZWxlY3Q/OiBib29sZWFuO1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xuICBzaXplPzogc3RyaW5nO1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW47XG4gIHR5cGVhaGVhZFBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBEcm9wZG93bkhlYWRlckNvbXBvbmVudD86IENvbXBvbmVudFR5cGU8YW55PiB8IG51bGw7XG4gIERyb3BEb3duUmVuZGVyQ29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxhbnk+O1xuICBEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxhbnk+O1xuICBDdXN0b21DaGlja2xldENvbXBvbmVudD86IENvbXBvbmVudFR5cGU8YW55PjtcbiAgaW50bDogSW50bFNoYXBlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHNob3dEcm9wZG93bk9uTW91bnQ/OiBib29sZWFuO1xufTtcblxuY2xhc3MgSXRlbVNlbGVjdG9yVW5tZW1vaXplZCBleHRlbmRzIENvbXBvbmVudDxJdGVtU2VsZWN0b3JQcm9wcz4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgIHBsYWNlaG9sZGVyOiAncGxhY2Vob2xkZXIuZW50ZXJWYWx1ZScsXG4gICAgY2xvc2VPblNlbGVjdDogdHJ1ZSxcbiAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgIERyb3BEb3duUmVuZGVyQ29tcG9uZW50OiBEcm9wZG93bkxpc3QsXG4gICAgRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudDogTGlzdEl0ZW1cbiAgfTtcblxuICBzdGF0ZSA9IHtcbiAgICBzaG93VHlwZWFoZWFkOiBmYWxzZSxcbiAgICBkaW1lbnNpb25zOiB7XG4gICAgICB3aWR0aDogMjAwXG4gICAgfVxuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLnByb3BzLnNob3dEcm9wZG93bk9uTW91bnQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dUeXBlYWhlYWQ6IHRydWV9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yb290LmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5yb290LmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHVub2JzZXJ2ZURpbWVuc2lvbnModGhpcy5yb290LmN1cnJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJvb3Q6IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD4gPSBjcmVhdGVSZWYoKTtcblxuICBoYW5kbGVDbGlja091dHNpZGUgPSAoKSA9PiB7XG4gICAgdGhpcy5faGlkZVR5cGVhaGVhZCgpO1xuICB9O1xuXG4gIF9oYW5kbGVSZXNpemUgPSBkaW1lbnNpb25zID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtkaW1lbnNpb25zfSk7XG4gIH07XG5cbiAgX2hpZGVUeXBlYWhlYWQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1R5cGVhaGVhZDogZmFsc2V9KTtcbiAgICB0aGlzLl9vbkJsdXIoKTtcbiAgfTtcblxuICBfb25CbHVyID0gKCkgPT4ge1xuICAgIC8vIG5vdGU6IGNoaWNrbGV0ZWQgaW5wdXQgaXMgbm90IGEgcmVhbCBmb3JtIGVsZW1lbnQgc28gd2UgY2FsbCBvbkJsdXIoKVxuICAgIC8vIHdoZW4gd2UgZmVlbCB0aGUgZXZlbnRzIGFyZSBhcHByb3ByaWF0ZVxuICAgIGlmICh0aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgdGhpcy5wcm9wcy5vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgX3JlbW92ZUl0ZW0gPSAoaXRlbSwgZSkgPT4ge1xuICAgIC8vIG9ubHkgdXNlZCB3aGVuIG11bHRpU2VsZWN0ID0gdHJ1ZVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG11bHRpU2VsZWN0ZWRJdGVtcyA9IHRvQXJyYXkodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICBjb25zdCBpbmRleCA9IG11bHRpU2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgodCA9PiB0ID09PSBpdGVtKTtcblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtcyA9IFtcbiAgICAgIC4uLm11bHRpU2VsZWN0ZWRJdGVtcy5zbGljZSgwLCBpbmRleCksXG4gICAgICAuLi5tdWx0aVNlbGVjdGVkSXRlbXMuc2xpY2UoaW5kZXggKyAxLCBtdWx0aVNlbGVjdGVkSXRlbXMubGVuZ3RoKVxuICAgIF07XG5cbiAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGl0ZW1zKTtcblxuICAgIGlmICh0aGlzLnByb3BzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dUeXBlYWhlYWQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLl9vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgX3NlbGVjdEl0ZW0gPSBpdGVtID0+IHtcbiAgICBjb25zdCBnZXRWYWx1ZSA9IEFjY2Vzc29yLmdlbmVyYXRlT3B0aW9uVG9TdHJpbmdGb3IoXG4gICAgICB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlIHx8IHRoaXMucHJvcHMuZGlzcGxheU9wdGlvblxuICAgICk7XG5cbiAgICBjb25zdCBwcmV2aW91c1NlbGVjdGVkID0gdG9BcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgaWYgKHRoaXMucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdW5pcUJ5KHByZXZpb3VzU2VsZWN0ZWQuY29uY2F0KHRvQXJyYXkoaXRlbSkpLCBnZXRWYWx1ZSk7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShnZXRWYWx1ZShpdGVtKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1R5cGVhaGVhZDogZmFsc2V9KTtcbiAgICAgIHRoaXMuX29uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBfb25FcmFzZTogTW91c2VFdmVudEhhbmRsZXIgPSBlID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobnVsbCk7XG4gIH07XG5cbiAgX3Nob3dUeXBlYWhlYWQ6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzaG93VHlwZWFoZWFkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3JlbmRlckRyb3Bkb3duKGludGw6IEludGxTaGFwZSkge1xuICAgIGNvbnN0IHtwbGFjZW1lbnQgPSAnYm90dG9tJ30gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtkaW1lbnNpb25zfSA9IHRoaXMuc3RhdGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBvcnRhbGVkIGxlZnQ9ezB9IHRvcD17MH0gaXNPcGVuZWQ9e3RoaXMuc3RhdGUuc2hvd1R5cGVhaGVhZH0gb25DbG9zZT17dGhpcy5faGlkZVR5cGVhaGVhZH0+XG4gICAgICAgIDxEcm9wZG93bldyYXBwZXIgcGxhY2VtZW50PXtwbGFjZW1lbnR9IHdpZHRoPXtkaW1lbnNpb25zPy53aWR0aH0+XG4gICAgICAgICAgPFR5cGVhaGVhZFxuICAgICAgICAgICAgY3VzdG9tQ2xhc3Nlcz17e1xuICAgICAgICAgICAgICByZXN1bHRzOiAnbGlzdC1zZWxlY3RvcicsXG4gICAgICAgICAgICAgIGlucHV0OiAndHlwZWFoZWFkX19pbnB1dCcsXG4gICAgICAgICAgICAgIGxpc3RJdGVtOiAnbGlzdF9faXRlbScsXG4gICAgICAgICAgICAgIGxpc3RBbmNob3I6ICdsaXN0X19pdGVtX19hbmNob3InXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb3B0aW9ucz17dGhpcy5wcm9wcy5vcHRpb25zfVxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uPXt0aGlzLnByb3BzLmZpbHRlck9wdGlvbn1cbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucz17dGhpcy5wcm9wcy5maXhlZE9wdGlvbnN9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMudHlwZWFoZWFkUGxhY2Vob2xkZXIgfHwgaW50bFxuICAgICAgICAgICAgICAgID8gaW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ3BsYWNlaG9sZGVyLnNlYXJjaCd9KVxuICAgICAgICAgICAgICAgIDogJ1NlYXJjaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uT3B0aW9uU2VsZWN0ZWQ9e3RoaXMuX3NlbGVjdEl0ZW19XG4gICAgICAgICAgICBjdXN0b21MaXN0Q29tcG9uZW50PXt0aGlzLnByb3BzLkRyb3BEb3duUmVuZGVyQ29tcG9uZW50fVxuICAgICAgICAgICAgY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudD17dGhpcy5wcm9wcy5Ecm9wZG93bkhlYWRlckNvbXBvbmVudH1cbiAgICAgICAgICAgIGN1c3RvbUxpc3RJdGVtQ29tcG9uZW50PXt0aGlzLnByb3BzLkRyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnR9XG4gICAgICAgICAgICBkaXNwbGF5T3B0aW9uPXtBY2Nlc3Nvci5nZW5lcmF0ZU9wdGlvblRvU3RyaW5nRm9yKHRoaXMucHJvcHMuZGlzcGxheU9wdGlvbil9XG4gICAgICAgICAgICBzZWFyY2hhYmxlPXt0aGlzLnByb3BzLnNlYXJjaGFibGV9XG4gICAgICAgICAgICBzaG93T3B0aW9uc1doZW5FbXB0eVxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17dG9BcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkSXRlbXMpfVxuICAgICAgICAgICAgbGlnaHQ9e3RoaXMucHJvcHMuaW5wdXRUaGVtZSA9PT0gJ2xpZ2h0J31cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Ryb3Bkb3duV3JhcHBlcj5cbiAgICAgIDwvUG9ydGFsZWQ+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRvQXJyYXkodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IHNlbGVjdGVkLmxlbmd0aDtcbiAgICBjb25zdCBkaXNwbGF5T3B0aW9uID0gQWNjZXNzb3IuZ2VuZXJhdGVPcHRpb25Ub1N0cmluZ0Zvcih0aGlzLnByb3BzLmRpc3BsYXlPcHRpb24pO1xuICAgIGNvbnN0IHtpbnB1dFRoZW1lID0gJ3ByaW1hcnknLCBEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50ID0gTGlzdEl0ZW19ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGRyb3Bkb3duU2VsZWN0UHJvcHMgPSB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzbmFtZXMoe1xuICAgICAgICBhY3RpdmU6IHRoaXMuc3RhdGUuc2hvd1R5cGVhaGVhZFxuICAgICAgfSksXG4gICAgICBkaXNwbGF5T3B0aW9uLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMucHJvcHMuZGlzYWJsZWQsXG4gICAgICBvbkNsaWNrOiB0aGlzLl9zaG93VHlwZWFoZWFkLFxuICAgICAgZXJyb3I6IHRoaXMucHJvcHMuaXNFcnJvcixcbiAgICAgIGlucHV0VGhlbWUsXG4gICAgICBzaXplOiB0aGlzLnByb3BzLnNpemVcbiAgICB9O1xuICAgIGNvbnN0IGludGwgPSB0aGlzLnByb3BzLmludGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2l0ZW0tc2VsZWN0b3InLCB0aGlzLnByb3BzLmNsYXNzTmFtZSl9IHJlZj17dGhpcy5yb290fT5cbiAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiAncmVsYXRpdmUnfX0+XG4gICAgICAgICAgey8qIHRoaXMgcGFydCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIGxhYmVsICovfVxuICAgICAgICAgIHt0aGlzLnByb3BzLm11bHRpU2VsZWN0ID8gKFxuICAgICAgICAgICAgPENoaWNrbGV0ZWRJbnB1dFxuICAgICAgICAgICAgICB7Li4uZHJvcGRvd25TZWxlY3RQcm9wc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17dG9BcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkSXRlbXMpfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgcmVtb3ZlSXRlbT17dGhpcy5fcmVtb3ZlSXRlbX1cbiAgICAgICAgICAgICAgQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQ9e3RoaXMucHJvcHMuQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnR9XG4gICAgICAgICAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U3R5bGVkRHJvcGRvd25TZWxlY3Qgey4uLmRyb3Bkb3duU2VsZWN0UHJvcHN9PlxuICAgICAgICAgICAgICA8RHJvcGRvd25TZWxlY3RWYWx1ZVxuICAgICAgICAgICAgICAgIGhhc1BsYWNlaG9sZGVyPXshaGFzVmFsdWV9XG4gICAgICAgICAgICAgICAgaW5wdXRUaGVtZT17aW5wdXRUaGVtZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpdGVtLXNlbGVjdG9yX19kcm9wZG93bl9fdmFsdWVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2hhc1ZhbHVlID8gKFxuICAgICAgICAgICAgICAgICAgPERyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU9wdGlvbj17ZGlzcGxheU9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlbGVjdGVkWzBdfVxuICAgICAgICAgICAgICAgICAgICBsaWdodD17aW5wdXRUaGVtZSA9PT0gJ2xpZ2h0J31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8ICdwbGFjZWhvbGRlci5zZWxlY3RWYWx1ZSd9IC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9Ecm9wZG93blNlbGVjdFZhbHVlPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5lcmFzYWJsZSAmJiBoYXNWYWx1ZSA/IChcbiAgICAgICAgICAgICAgICA8RHJvcGRvd25TZWxlY3RBY3Rpb25SaWdodD5cbiAgICAgICAgICAgICAgICAgIDxEZWxldGUgaGVpZ2h0PVwiMTJweFwiIG9uQ2xpY2s9e3RoaXMuX29uRXJhc2V9IC8+XG4gICAgICAgICAgICAgICAgPC9Ecm9wZG93blNlbGVjdEFjdGlvblJpZ2h0PlxuICAgICAgICAgICAgICApIDogdGhpcy5wcm9wcy5zaG93QXJyb3cgPyAoXG4gICAgICAgICAgICAgICAgPERyb3Bkb3duU2VsZWN0QWN0aW9uUmlnaHQ+XG4gICAgICAgICAgICAgICAgICA8QXJyb3dEb3duIGhlaWdodD1cIjE0cHhcIiBvbkNsaWNrPXt0aGlzLl9zaG93VHlwZWFoZWFkfSAvPlxuICAgICAgICAgICAgICAgIDwvRHJvcGRvd25TZWxlY3RBY3Rpb25SaWdodD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1N0eWxlZERyb3Bkb3duU2VsZWN0PlxuICAgICAgICAgICl9XG4gICAgICAgICAgey8qIHRoaXMgcGFydCBpcyB1c2VkIHRvIGJ1aWx0IHRoZSBsaXN0ICovfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJEcm9wZG93bihpbnRsKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEl0ZW1TZWxlY3RvciA9IFJlYWN0Lm1lbW8oSXRlbVNlbGVjdG9yVW5tZW1vaXplZCk7XG5JdGVtU2VsZWN0b3IuZGlzcGxheU5hbWUgPSAnSXRlbVNlbGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgaW5qZWN0SW50bChJdGVtU2VsZWN0b3JVbm1lbW9pemVkKTtcbiJdfQ==
351
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yLnRzeCJdLCJuYW1lcyI6WyJTdHlsZWREcm9wZG93blNlbGVjdCIsInN0eWxlZCIsImRpdiIsImF0dHJzIiwicHJvcHMiLCJjbGFzc05hbWUiLCJpbnB1dFRoZW1lIiwidGhlbWUiLCJzZWNvbmRhcnlJbnB1dCIsImlucHV0TFQiLCJpbnB1dCIsInNpemUiLCJpbnB1dEJveEhlaWdodFNtYWxsIiwiaW5wdXRCb3hIZWlnaHQiLCJkcm9wZG93bkxpc3RBbmNob3IiLCJEcm9wZG93blNlbGVjdFZhbHVlIiwic3BhbiIsImhhc1BsYWNlaG9sZGVyIiwic2VsZWN0Q29sb3JQbGFjZUhvbGRlckxUIiwic2VsZWN0Q29sb3JQbGFjZUhvbGRlciIsInNlbGVjdENvbG9yTFQiLCJzZWxlY3RDb2xvciIsImRyb3Bkb3duTGlzdEl0ZW1MVCIsImRyb3Bkb3duTGlzdEl0ZW0iLCJkcm9wZG93bkxpc3RBbmNob3JMVCIsIkRyb3Bkb3duU2VsZWN0QWN0aW9uUmlnaHQiLCJzdWJ0ZXh0Q29sb3IiLCJ0ZXh0Q29sb3IiLCJEcm9wZG93bldyYXBwZXIiLCJkcm9wZG93bldyYXBwZXJaIiwid2lkdGgiLCJJdGVtU2VsZWN0b3JVbm1lbW9pemVkIiwic2hvd1R5cGVhaGVhZCIsImRpbWVuc2lvbnMiLCJfaGlkZVR5cGVhaGVhZCIsInNldFN0YXRlIiwiX29uQmx1ciIsIm9uQmx1ciIsIml0ZW0iLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJtdWx0aVNlbGVjdGVkSXRlbXMiLCJzZWxlY3RlZEl0ZW1zIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJ0IiwiaXRlbXMiLCJzbGljZSIsImxlbmd0aCIsIm9uQ2hhbmdlIiwiY2xvc2VPblNlbGVjdCIsImdldFZhbHVlIiwiQWNjZXNzb3IiLCJnZW5lcmF0ZU9wdGlvblRvU3RyaW5nRm9yIiwiZ2V0T3B0aW9uVmFsdWUiLCJkaXNwbGF5T3B0aW9uIiwicHJldmlvdXNTZWxlY3RlZCIsIm11bHRpU2VsZWN0IiwiY29uY2F0IiwiZGlzYWJsZWQiLCJvbk9wZW4iLCJzaG93RHJvcGRvd25Pbk1vdW50Iiwicm9vdCIsImN1cnJlbnQiLCJIVE1MRWxlbWVudCIsIl9oYW5kbGVSZXNpemUiLCJpbnRsIiwicGxhY2VtZW50Iiwic3RhdGUiLCJEcm9wRG93bldyYXBwZXJDb21wb25lbnQiLCJyZXN1bHRzIiwibGlzdEl0ZW0iLCJsaXN0QW5jaG9yIiwib3B0aW9ucyIsImZpbHRlck9wdGlvbiIsImZpeGVkT3B0aW9ucyIsInR5cGVhaGVhZFBsYWNlaG9sZGVyIiwiZm9ybWF0TWVzc2FnZSIsImlkIiwiX3NlbGVjdEl0ZW0iLCJEcm9wRG93blJlbmRlckNvbXBvbmVudCIsIkRyb3Bkb3duSGVhZGVyQ29tcG9uZW50IiwiRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudCIsInNlYXJjaGFibGUiLCJzZWFyY2hPcHRpb25zIiwic2VsZWN0ZWQiLCJoYXNWYWx1ZSIsIkxpc3RJdGVtIiwiZHJvcGRvd25TZWxlY3RQcm9wcyIsImFjdGl2ZSIsIm9uQ2xpY2siLCJfc2hvd1R5cGVhaGVhZCIsImVycm9yIiwiaXNFcnJvciIsInBvc2l0aW9uIiwicGxhY2Vob2xkZXIiLCJfcmVtb3ZlSXRlbSIsInJlb3JkZXJJdGVtcyIsIkN1c3RvbUNoaWNrbGV0Q29tcG9uZW50IiwiZXJhc2FibGUiLCJfb25FcmFzZSIsInNob3dBcnJvdyIsIl9yZW5kZXJEcm9wZG93biIsIkNvbXBvbmVudCIsIkRyb3Bkb3duTGlzdCIsInVuZGVmaW5lZCIsIkl0ZW1TZWxlY3RvciIsIlJlYWN0IiwibWVtbyIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBUU8s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SCxDQURGLENBREY7QUFpREQ7OztFQXpPa0NxQyxnQjs7aUNBQS9CekUsc0Isa0JBQ2tCO0FBQ3BCMkIsRUFBQUEsV0FBVyxFQUFFLElBRE87QUFFcEJzQyxFQUFBQSxXQUFXLEVBQUUsd0JBRk87QUFHcEI3QyxFQUFBQSxhQUFhLEVBQUUsSUFISztBQUlwQmlDLEVBQUFBLFVBQVUsRUFBRSxJQUpRO0FBS3BCSCxFQUFBQSx1QkFBdUIsRUFBRXdCLHdCQUxMO0FBTXBCdEIsRUFBQUEsK0JBQStCLEVBQUVLLHNCQU5iO0FBT3BCbEIsRUFBQUEsd0JBQXdCLEVBQUUxQyxlQVBOO0FBUXBCc0UsRUFBQUEsWUFBWSxFQUFFUTtBQVJNLEM7O0FBMk94QixJQUFNQyxZQUFZLGdCQUFHQyxrQkFBTUMsSUFBTixDQUFXOUUsc0JBQVgsQ0FBckI7O0FBQ0E0RSxZQUFZLENBQUNHLFdBQWIsR0FBMkIsY0FBM0I7O2VBRWUsMkJBQVcvRSxzQkFBWCxDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWYsIENvbXBvbmVudFR5cGUsIE1vdXNlRXZlbnRIYW5kbGVyLCBSZWZPYmplY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gudW5pcWJ5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgQWNjZXNzb3IgZnJvbSAnLi9hY2Nlc3Nvcic7XG5pbXBvcnQgQ2hpY2tsZXRlZElucHV0IGZyb20gJy4vY2hpY2tsZXRlZC1pbnB1dCc7XG5pbXBvcnQgVHlwZWFoZWFkIGZyb20gJy4vdHlwZWFoZWFkJztcbmltcG9ydCB7RGVsZXRlLCBBcnJvd0Rvd259IGZyb20gJy4uL2ljb25zJztcbmltcG9ydCBEcm9wZG93bkxpc3QsIHtMaXN0SXRlbX0gZnJvbSAnLi9kcm9wZG93bi1saXN0JztcbmltcG9ydCBQb3J0YWxlZCBmcm9tICcuLi8uLi9jb21tb24vcG9ydGFsZWQnO1xuaW1wb3J0IHt0b0FycmF5LCBvYnNlcnZlRGltZW5zaW9ucywgdW5vYnNlcnZlRGltZW5zaW9uc30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2luamVjdEludGwsIEludGxTaGFwZX0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcblxuaW50ZXJmYWNlIFN0eWxlZERyb3Bkb3duU2VsZWN0UHJvcHMge1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xuICBzaXplPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBTdHlsZWREcm9wZG93blNlbGVjdCA9IHN0eWxlZC5kaXYuYXR0cnMocHJvcHMgPT4gKHtcbiAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKCdpdGVtLXNlbGVjdG9yX19kcm9wZG93bicsIHByb3BzLmNsYXNzTmFtZSlcbn0pKTxTdHlsZWREcm9wZG93blNlbGVjdFByb3BzPmBcbiAgJHtwcm9wcyA9PlxuICAgIHByb3BzLmlucHV0VGhlbWUgPT09ICdzZWNvbmRhcnknXG4gICAgICA/IHByb3BzLnRoZW1lLnNlY29uZGFyeUlucHV0XG4gICAgICA6IHByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCdcbiAgICAgID8gcHJvcHMudGhlbWUuaW5wdXRMVFxuICAgICAgOiBwcm9wcy50aGVtZS5pbnB1dH07XG5cbiAgaGVpZ2h0OiAke3Byb3BzID0+XG4gICAgcHJvcHMuc2l6ZSA9PT0gJ3NtYWxsJyA/IHByb3BzLnRoZW1lLmlucHV0Qm94SGVpZ2h0U21hbGwgOiBwcm9wcy50aGVtZS5pbnB1dEJveEhlaWdodH07XG5cbiAgLmxpc3RfX2l0ZW1fX2FuY2hvciB7XG4gICAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RBbmNob3J9O1xuICB9XG5gO1xuXG5pbnRlcmZhY2UgRHJvcGRvd25TZWxlY3RWYWx1ZVByb3BzIHtcbiAgaGFzUGxhY2Vob2xkZXI/OiBib29sZWFuO1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmNvbnN0IERyb3Bkb3duU2VsZWN0VmFsdWUgPSBzdHlsZWQuc3BhbjxEcm9wZG93blNlbGVjdFZhbHVlUHJvcHM+YFxuICBjb2xvcjogJHtwcm9wcyA9PlxuICAgIHByb3BzLmhhc1BsYWNlaG9sZGVyICYmIHByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCdcbiAgICAgID8gcHJvcHMudGhlbWUuc2VsZWN0Q29sb3JQbGFjZUhvbGRlckxUXG4gICAgICA6IHByb3BzLmhhc1BsYWNlaG9sZGVyXG4gICAgICA/IHByb3BzLnRoZW1lLnNlbGVjdENvbG9yUGxhY2VIb2xkZXJcbiAgICAgIDogcHJvcHMuaW5wdXRUaGVtZSA9PT0gJ2xpZ2h0J1xuICAgICAgPyBwcm9wcy50aGVtZS5zZWxlY3RDb2xvckxUXG4gICAgICA6IHByb3BzLnRoZW1lLnNlbGVjdENvbG9yfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgLmxpc3RfX2l0ZW0ge1xuICAgICR7cHJvcHMgPT5cbiAgICAgIHByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCcgPyBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RJdGVtTFQgOiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RJdGVtfTtcbiAgfVxuXG4gIC5saXN0X19pdGVtX19hbmNob3Ige1xuICAgICR7cHJvcHMgPT5cbiAgICAgIHByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCdcbiAgICAgICAgPyBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RBbmNob3JMVFxuICAgICAgICA6IHByb3BzLnRoZW1lLmRyb3Bkb3duTGlzdEFuY2hvcn07XG4gIH1cbmA7XG5cbmNvbnN0IERyb3Bkb3duU2VsZWN0QWN0aW9uUmlnaHQgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgZGlzcGxheTogZmxleDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yfTtcblxuICA6aG92ZXIge1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIH1cbmA7XG5cbmludGVyZmFjZSBEcm9wZG93bldyYXBwZXJQcm9wcyB7XG4gIHBsYWNlbWVudD86IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbn1cblxuY29uc3QgRHJvcGRvd25XcmFwcGVyID0gc3R5bGVkLmRpdjxEcm9wZG93bldyYXBwZXJQcm9wcz5gXG4gIGJvcmRlcjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25XcmFwcGVyWn07XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuYDtcblxuZXhwb3J0IHR5cGUgSXRlbVNlbGVjdG9yUHJvcHMgPSB7XG4gIHNlbGVjdGVkSXRlbXM/OlxuICAgIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0PlxuICAgIHwgc3RyaW5nXG4gICAgfCBudW1iZXJcbiAgICB8IGJvb2xlYW5cbiAgICB8IG9iamVjdFxuICAgIHwgbnVsbDtcbiAgb3B0aW9uczogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0PjtcbiAgb25DaGFuZ2U6IChcbiAgICBpdGVtczpcbiAgICAgIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0PlxuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgbnVtYmVyXG4gICAgICB8IGJvb2xlYW5cbiAgICAgIHwgb2JqZWN0XG4gICAgICB8IG51bGxcbiAgKSA9PiB2b2lkO1xuICBmaXhlZE9wdGlvbnM/OiBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3Q+IHwgbnVsbDtcbiAgZXJhc2FibGU/OiBib29sZWFuO1xuICBzaG93QXJyb3c/OiBib29sZWFuO1xuICBzZWFyY2hPcHRpb25zPzogKHZhbHVlOiBhbnksIG9wdDogYW55KSA9PiBhbnk7XG4gIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICBkaXNwbGF5T3B0aW9uPzogc3RyaW5nIHwgKChvcHQ6IGFueSkgPT4gYW55KTtcbiAgZ2V0T3B0aW9uVmFsdWU/OiBzdHJpbmcgfCAoKG9wdDogYW55KSA9PiBhbnkpO1xuICBmaWx0ZXJPcHRpb24/OiBzdHJpbmcgfCAoKG9wdDogYW55KSA9PiBhbnkpO1xuICBwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNFcnJvcj86IGJvb2xlYW47XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgaW5wdXRUaGVtZT86IHN0cmluZztcbiAgb25PcGVuPzogKCkgPT4gdm9pZDtcbiAgc2l6ZT86IHN0cmluZztcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuO1xuICB0eXBlYWhlYWRQbGFjZWhvbGRlcj86IHN0cmluZztcbiAgRHJvcERvd25XcmFwcGVyQ29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxhbnk+IHwgbnVsbDtcbiAgRHJvcGRvd25IZWFkZXJDb21wb25lbnQ/OiBDb21wb25lbnRUeXBlPGFueT4gfCBudWxsO1xuICBEcm9wRG93blJlbmRlckNvbXBvbmVudD86IENvbXBvbmVudFR5cGU8YW55PjtcbiAgRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudD86IENvbXBvbmVudFR5cGU8YW55PjtcbiAgQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQ/OiBDb21wb25lbnRUeXBlPGFueT47XG4gIGludGw6IEludGxTaGFwZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICByZW9yZGVySXRlbXM/OiAobmV3T3JkZXI6IGFueSkgPT4gdm9pZDtcbiAgc2hvd0Ryb3Bkb3duT25Nb3VudD86IGJvb2xlYW47XG59O1xuXG5jbGFzcyBJdGVtU2VsZWN0b3JVbm1lbW9pemVkIGV4dGVuZHMgQ29tcG9uZW50PEl0ZW1TZWxlY3RvclByb3BzPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlci5lbnRlclZhbHVlJyxcbiAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgRHJvcERvd25SZW5kZXJDb21wb25lbnQ6IERyb3Bkb3duTGlzdCxcbiAgICBEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50OiBMaXN0SXRlbSxcbiAgICBEcm9wRG93bldyYXBwZXJDb21wb25lbnQ6IERyb3Bkb3duV3JhcHBlcixcbiAgICByZW9yZGVySXRlbXM6IHVuZGVmaW5lZFxuICB9O1xuXG4gIHN0YXRlID0ge1xuICAgIHNob3dUeXBlYWhlYWQ6IGZhbHNlLFxuICAgIGRpbWVuc2lvbnM6IHtcbiAgICAgIHdpZHRoOiAyMDBcbiAgICB9XG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2hvd0Ryb3Bkb3duT25Nb3VudCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1R5cGVhaGVhZDogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvb3QuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICBvYnNlcnZlRGltZW5zaW9ucyh0aGlzLnJvb3QuY3VycmVudCwgdGhpcy5faGFuZGxlUmVzaXplKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5yb290LmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLnJvb3QuY3VycmVudCk7XG4gICAgfVxuICB9XG5cbiAgcm9vdDogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PiA9IGNyZWF0ZVJlZigpO1xuXG4gIGhhbmRsZUNsaWNrT3V0c2lkZSA9ICgpID0+IHtcbiAgICB0aGlzLl9oaWRlVHlwZWFoZWFkKCk7XG4gIH07XG5cbiAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe2RpbWVuc2lvbnN9KTtcbiAgfTtcblxuICBfaGlkZVR5cGVhaGVhZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtzaG93VHlwZWFoZWFkOiBmYWxzZX0pO1xuICAgIHRoaXMuX29uQmx1cigpO1xuICB9O1xuXG4gIF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgLy8gbm90ZTogY2hpY2tsZXRlZCBpbnB1dCBpcyBub3QgYSByZWFsIGZvcm0gZWxlbWVudCBzbyB3ZSBjYWxsIG9uQmx1cigpXG4gICAgLy8gd2hlbiB3ZSBmZWVsIHRoZSBldmVudHMgYXJlIGFwcHJvcHJpYXRlXG4gICAgaWYgKHRoaXMucHJvcHMub25CbHVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBfcmVtb3ZlSXRlbSA9IChpdGVtLCBlKSA9PiB7XG4gICAgLy8gb25seSB1c2VkIHdoZW4gbXVsdGlTZWxlY3QgPSB0cnVlXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgbXVsdGlTZWxlY3RlZEl0ZW1zID0gdG9BcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkSXRlbXMpO1xuICAgIGNvbnN0IGluZGV4ID0gbXVsdGlTZWxlY3RlZEl0ZW1zLmZpbmRJbmRleCh0ID0+IHQgPT09IGl0ZW0pO1xuXG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zID0gW1xuICAgICAgLi4ubXVsdGlTZWxlY3RlZEl0ZW1zLnNsaWNlKDAsIGluZGV4KSxcbiAgICAgIC4uLm11bHRpU2VsZWN0ZWRJdGVtcy5zbGljZShpbmRleCArIDEsIG11bHRpU2VsZWN0ZWRJdGVtcy5sZW5ndGgpXG4gICAgXTtcblxuICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaXRlbXMpO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1R5cGVhaGVhZDogZmFsc2V9KTtcbiAgICAgIHRoaXMuX29uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBfc2VsZWN0SXRlbSA9IGl0ZW0gPT4ge1xuICAgIGNvbnN0IGdldFZhbHVlID0gQWNjZXNzb3IuZ2VuZXJhdGVPcHRpb25Ub1N0cmluZ0ZvcihcbiAgICAgIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUgfHwgdGhpcy5wcm9wcy5kaXNwbGF5T3B0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0ZWQgPSB0b0FycmF5KHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgY29uc3QgaXRlbXMgPSB1bmlxQnkocHJldmlvdXNTZWxlY3RlZC5jb25jYXQodG9BcnJheShpdGVtKSksIGdldFZhbHVlKTtcbiAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGdldFZhbHVlKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtzaG93VHlwZWFoZWFkOiBmYWxzZX0pO1xuICAgICAgdGhpcy5fb25CbHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIF9vbkVyYXNlOiBNb3VzZUV2ZW50SGFuZGxlciA9IGUgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShudWxsKTtcbiAgfTtcblxuICBfc2hvd1R5cGVhaGVhZDogTW91c2VFdmVudEhhbmRsZXIgPSBlID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25PcGVuKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25PcGVuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2hvd1R5cGVhaGVhZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9yZW5kZXJEcm9wZG93bihpbnRsOiBJbnRsU2hhcGUpIHtcbiAgICBjb25zdCB7cGxhY2VtZW50ID0gJ2JvdHRvbSd9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7ZGltZW5zaW9uc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgRHJvcERvd25XcmFwcGVyQ29tcG9uZW50ID0gdGhpcy5wcm9wcy5Ecm9wRG93bldyYXBwZXJDb21wb25lbnQgYXMgUmVhY3QuQ29tcG9uZW50VHlwZTxcbiAgICAgIGFueVxuICAgID47XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBvcnRhbGVkIGxlZnQ9ezB9IHRvcD17MH0gaXNPcGVuZWQ9e3RoaXMuc3RhdGUuc2hvd1R5cGVhaGVhZH0gb25DbG9zZT17dGhpcy5faGlkZVR5cGVhaGVhZH0+XG4gICAgICAgIDxEcm9wRG93bldyYXBwZXJDb21wb25lbnQgcGxhY2VtZW50PXtwbGFjZW1lbnR9IHdpZHRoPXtkaW1lbnNpb25zPy53aWR0aH0+XG4gICAgICAgICAgPFR5cGVhaGVhZFxuICAgICAgICAgICAgY3VzdG9tQ2xhc3Nlcz17e1xuICAgICAgICAgICAgICByZXN1bHRzOiAnbGlzdC1zZWxlY3RvcicsXG4gICAgICAgICAgICAgIGlucHV0OiAndHlwZWFoZWFkX19pbnB1dCcsXG4gICAgICAgICAgICAgIGxpc3RJdGVtOiAnbGlzdF9faXRlbScsXG4gICAgICAgICAgICAgIGxpc3RBbmNob3I6ICdsaXN0X19pdGVtX19hbmNob3InXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb3B0aW9ucz17dGhpcy5wcm9wcy5vcHRpb25zfVxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uPXt0aGlzLnByb3BzLmZpbHRlck9wdGlvbn1cbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucz17dGhpcy5wcm9wcy5maXhlZE9wdGlvbnN9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMudHlwZWFoZWFkUGxhY2Vob2xkZXIgfHwgaW50bFxuICAgICAgICAgICAgICAgID8gaW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ3BsYWNlaG9sZGVyLnNlYXJjaCd9KVxuICAgICAgICAgICAgICAgIDogJ1NlYXJjaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uT3B0aW9uU2VsZWN0ZWQ9e3RoaXMuX3NlbGVjdEl0ZW19XG4gICAgICAgICAgICBjdXN0b21MaXN0Q29tcG9uZW50PXt0aGlzLnByb3BzLkRyb3BEb3duUmVuZGVyQ29tcG9uZW50fVxuICAgICAgICAgICAgY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudD17dGhpcy5wcm9wcy5Ecm9wZG93bkhlYWRlckNvbXBvbmVudH1cbiAgICAgICAgICAgIGN1c3RvbUxpc3RJdGVtQ29tcG9uZW50PXt0aGlzLnByb3BzLkRyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnR9XG4gICAgICAgICAgICBkaXNwbGF5T3B0aW9uPXtBY2Nlc3Nvci5nZW5lcmF0ZU9wdGlvblRvU3RyaW5nRm9yKHRoaXMucHJvcHMuZGlzcGxheU9wdGlvbil9XG4gICAgICAgICAgICBzZWFyY2hhYmxlPXt0aGlzLnByb3BzLnNlYXJjaGFibGV9XG4gICAgICAgICAgICBzZWFyY2hPcHRpb25zPXt0aGlzLnByb3BzLnNlYXJjaE9wdGlvbnN9XG4gICAgICAgICAgICBzaG93T3B0aW9uc1doZW5FbXB0eVxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17dG9BcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkSXRlbXMpfVxuICAgICAgICAgICAgbGlnaHQ9e3RoaXMucHJvcHMuaW5wdXRUaGVtZSA9PT0gJ2xpZ2h0J31cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Ryb3BEb3duV3JhcHBlckNvbXBvbmVudD5cbiAgICAgIDwvUG9ydGFsZWQ+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRvQXJyYXkodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IHNlbGVjdGVkLmxlbmd0aDtcbiAgICBjb25zdCBkaXNwbGF5T3B0aW9uID0gQWNjZXNzb3IuZ2VuZXJhdGVPcHRpb25Ub1N0cmluZ0Zvcih0aGlzLnByb3BzLmRpc3BsYXlPcHRpb24pO1xuICAgIGNvbnN0IHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaW5wdXRUaGVtZSA9ICdwcmltYXJ5JyxcbiAgICAgIERyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnQgPSBMaXN0SXRlbVxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgZHJvcGRvd25TZWxlY3RQcm9wcyA9IHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NuYW1lcyh7XG4gICAgICAgIGFjdGl2ZTogdGhpcy5zdGF0ZS5zaG93VHlwZWFoZWFkXG4gICAgICB9KSxcbiAgICAgIGRpc3BsYXlPcHRpb24sXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIG9uQ2xpY2s6IHRoaXMuX3Nob3dUeXBlYWhlYWQsXG4gICAgICBlcnJvcjogdGhpcy5wcm9wcy5pc0Vycm9yLFxuICAgICAgaW5wdXRUaGVtZSxcbiAgICAgIHNpemU6IHRoaXMucHJvcHMuc2l6ZVxuICAgIH07XG4gICAgY29uc3QgaW50bCA9IHRoaXMucHJvcHMuaW50bDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnaXRlbS1zZWxlY3RvcicsIHRoaXMucHJvcHMuY2xhc3NOYW1lKX0gcmVmPXt0aGlzLnJvb3R9PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7cG9zaXRpb246ICdyZWxhdGl2ZSd9fT5cbiAgICAgICAgICB7LyogdGhpcyBwYXJ0IGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgbGFiZWwgKi99XG4gICAgICAgICAge3RoaXMucHJvcHMubXVsdGlTZWxlY3QgPyAoXG4gICAgICAgICAgICA8Q2hpY2tsZXRlZElucHV0XG4gICAgICAgICAgICAgIHsuLi5kcm9wZG93blNlbGVjdFByb3BzfVxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXt0b0FycmF5KHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtcyl9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICByZW1vdmVJdGVtPXt0aGlzLl9yZW1vdmVJdGVtfVxuICAgICAgICAgICAgICByZW9yZGVySXRlbXM9e3RoaXMucHJvcHMucmVvcmRlckl0ZW1zfVxuICAgICAgICAgICAgICBDdXN0b21DaGlja2xldENvbXBvbmVudD17dGhpcy5wcm9wcy5DdXN0b21DaGlja2xldENvbXBvbmVudH1cbiAgICAgICAgICAgICAgaW5wdXRUaGVtZT17aW5wdXRUaGVtZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxTdHlsZWREcm9wZG93blNlbGVjdCB7Li4uZHJvcGRvd25TZWxlY3RQcm9wc30+XG4gICAgICAgICAgICAgIDxEcm9wZG93blNlbGVjdFZhbHVlXG4gICAgICAgICAgICAgICAgaGFzUGxhY2Vob2xkZXI9eyFoYXNWYWx1ZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgaW5wdXRUaGVtZT17aW5wdXRUaGVtZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpdGVtLXNlbGVjdG9yX19kcm9wZG93bl9fdmFsdWVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2hhc1ZhbHVlID8gKFxuICAgICAgICAgICAgICAgICAgPERyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU9wdGlvbj17ZGlzcGxheU9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlbGVjdGVkWzBdfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0PXtpbnB1dFRoZW1lID09PSAnbGlnaHQnfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e3RoaXMucHJvcHMucGxhY2Vob2xkZXIgfHwgJ3BsYWNlaG9sZGVyLnNlbGVjdFZhbHVlJ30gLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0Ryb3Bkb3duU2VsZWN0VmFsdWU+XG4gICAgICAgICAgICAgIHt0aGlzLnByb3BzLmVyYXNhYmxlICYmIGhhc1ZhbHVlID8gKFxuICAgICAgICAgICAgICAgIDxEcm9wZG93blNlbGVjdEFjdGlvblJpZ2h0PlxuICAgICAgICAgICAgICAgICAgPERlbGV0ZSBoZWlnaHQ9XCIxMnB4XCIgb25DbGljaz17dGhpcy5fb25FcmFzZX0gLz5cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duU2VsZWN0QWN0aW9uUmlnaHQ+XG4gICAgICAgICAgICAgICkgOiB0aGlzLnByb3BzLnNob3dBcnJvdyA/IChcbiAgICAgICAgICAgICAgICA8RHJvcGRvd25TZWxlY3RBY3Rpb25SaWdodD5cbiAgICAgICAgICAgICAgICAgIDxBcnJvd0Rvd24gaGVpZ2h0PVwiMTRweFwiIG9uQ2xpY2s9e3RoaXMuX3Nob3dUeXBlYWhlYWR9IC8+XG4gICAgICAgICAgICAgICAgPC9Ecm9wZG93blNlbGVjdEFjdGlvblJpZ2h0PlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU3R5bGVkRHJvcGRvd25TZWxlY3Q+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7LyogdGhpcyBwYXJ0IGlzIHVzZWQgdG8gYnVpbHQgdGhlIGxpc3QgKi99XG4gICAgICAgICAge3RoaXMuX3JlbmRlckRyb3Bkb3duKGludGwpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgSXRlbVNlbGVjdG9yID0gUmVhY3QubWVtbyhJdGVtU2VsZWN0b3JVbm1lbW9pemVkKTtcbkl0ZW1TZWxlY3Rvci5kaXNwbGF5TmFtZSA9ICdJdGVtU2VsZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBpbmplY3RJbnRsKEl0ZW1TZWxlY3RvclVubWVtb2l6ZWQpO1xuIl19
@@ -4,9 +4,8 @@ import { Search } from '../icons';
4
4
  interface TypeaheadProps {
5
5
  name?: string;
6
6
  customClasses?: any;
7
- maxVisible?: number;
8
7
  resultsTruncatedMessage?: string;
9
- options?: ReadonlyArray<string | number | boolean | object>;
8
+ options?: ReadonlyArray<string | number | boolean | object | undefined>;
10
9
  fixedOptions?: ReadonlyArray<string | number | boolean | object> | null;
11
10
  allowCustomValues?: number;
12
11
  initialValue?: string;
@@ -37,10 +36,10 @@ interface TypeaheadProps {
37
36
  inputIcon: ElementType;
38
37
  className?: string;
39
38
  selectedItems?: any[] | null;
39
+ maxVisible?: number;
40
40
  }
41
41
  interface TypeaheadState {
42
- /** @type {ReadonlyArray<string>} */
43
- searchResults: (string | undefined)[];
42
+ searchResults: ReadonlyArray<string | number | boolean | object | undefined>;
44
43
  entryValue?: string;
45
44
  selection?: string;
46
45
  selectionIndex: null;
@@ -69,11 +68,12 @@ declare class Typeahead extends Component<TypeaheadProps, TypeaheadState> {
69
68
  inputDisplayOption: null;
70
69
  defaultClassNames: boolean;
71
70
  customListComponent: typeof DropdownList;
72
- customListItemComponent: ({ value, displayOption, light }: {
71
+ customListItemComponent: ({ value, displayOption, disabled, light }: {
73
72
  value: any;
74
73
  displayOption?: ((d: any) => any) | undefined;
74
+ disabled: any;
75
75
  light: any;
76
- }) => JSX.Element;
76
+ }) => React.JSX.Element;
77
77
  inputIcon: typeof Search;
78
78
  customListHeaderComponent: null;
79
79
  showOptionsWhenEmpty: boolean;
@@ -81,7 +81,11 @@ declare class Typeahead extends Component<TypeaheadProps, TypeaheadState> {
81
81
  resultsTruncatedMessage: null;
82
82
  };
83
83
  static getDerivedStateFromProps(props: any, state: any): {
84
+ searchResults?: undefined;
85
+ prevOptions?: undefined;
86
+ } | {
84
87
  searchResults: any;
88
+ prevOptions: any;
85
89
  };
86
90
  constructor(props: any);
87
91
  componentDidMount(): void;
@@ -90,13 +94,13 @@ declare class Typeahead extends Component<TypeaheadProps, TypeaheadState> {
90
94
  focus: () => void;
91
95
  _hasCustomValue: () => boolean;
92
96
  _getCustomValue: () => string | null | undefined;
93
- _renderIncrementalSearchResults(): JSX.Element;
97
+ _renderIncrementalSearchResults(): React.JSX.Element;
94
98
  getSelection(): string | number | boolean | object | null | undefined;
95
- _onOptionSelected: (option: any, event: any) => any;
99
+ _onOptionSelected: (option: any, event: any) => void;
96
100
  _onTextEntryUpdated: () => void;
97
- _onEnter: (event: any) => any;
101
+ _onEnter: (event: any) => void;
98
102
  _onEscape: () => void;
99
- _onTab: (event: any) => any;
103
+ _onTab: (event: any) => void;
100
104
  eventMap: () => {};
101
105
  _nav: (delta: any) => void;
102
106
  navDown: () => void;
@@ -105,9 +109,9 @@ declare class Typeahead extends Component<TypeaheadProps, TypeaheadState> {
105
109
  _onKeyDown: React.KeyboardEventHandler<HTMLDivElement>;
106
110
  _onFocus: React.FocusEventHandler<HTMLDivElement>;
107
111
  _onBlur: React.FocusEventHandler<HTMLInputElement>;
108
- _renderHiddenInput(): JSX.Element | null;
112
+ _renderHiddenInput(): React.JSX.Element | null;
109
113
  _hasHint(): boolean;
110
114
  _hasFixedOptions(): number | false;
111
- render(): JSX.Element;
115
+ render(): React.JSX.Element;
112
116
  }
113
117
  export default Typeahead;
@@ -1,23 +1,3 @@
1
- // Copyright (c) 2022 Uber Technologies, Inc.
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to deal
5
- // in the Software without restriction, including without limitation the rights
6
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- // copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- // THE SOFTWARE.
20
-
21
1
  "use strict";
22
2
 
23
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -132,6 +112,11 @@ function generateSearchFunction(props) {
132
112
  };
133
113
  }
134
114
 
115
+ function searchOptionsOnInput(inputValue, props) {
116
+ var searchOptions = generateSearchFunction(props);
117
+ return searchOptions(inputValue, props.options);
118
+ }
119
+
135
120
  function getOptionsForValue(value, props, state) {
136
121
  var options = props.options,
137
122
  showOptionsWhenEmpty = props.showOptionsWhenEmpty;
@@ -188,13 +173,14 @@ var Typeahead = /*#__PURE__*/function (_Component) {
188
173
  if (_this.props.searchable) {
189
174
  // reset entry input
190
175
  _this.setState({
191
- searchResults: getOptionsForValue('', _this.props, _this.state),
176
+ // reset search options when selection has been made
177
+ searchResults: _this.props.options || [],
192
178
  selection: '',
193
179
  entryValue: ''
194
180
  });
195
181
  }
196
182
 
197
- return (_this$props$onOptionS = (_this$props = _this.props).onOptionSelected) === null || _this$props$onOptionS === void 0 ? void 0 : _this$props$onOptionS.call(_this$props, option, event);
183
+ (_this$props$onOptionS = (_this$props = _this.props).onOptionSelected) === null || _this$props$onOptionS === void 0 ? void 0 : _this$props$onOptionS.call(_this$props, option, event);
198
184
  });
199
185
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onTextEntryUpdated", function () {
200
186
  if (_this.props.searchable) {
@@ -203,7 +189,7 @@ var Typeahead = /*#__PURE__*/function (_Component) {
203
189
  var value = (_this$entry$current = _this.entry.current) === null || _this$entry$current === void 0 ? void 0 : _this$entry$current.value;
204
190
 
205
191
  _this.setState({
206
- searchResults: getOptionsForValue(value, _this.props, _this.state),
192
+ searchResults: searchOptionsOnInput(value, _this.props),
207
193
  selection: '',
208
194
  entryValue: value
209
195
  });
@@ -215,10 +201,10 @@ var Typeahead = /*#__PURE__*/function (_Component) {
215
201
  if (!selection) {
216
202
  var _this$props$onKeyDown, _this$props2;
217
203
 
218
- return (_this$props$onKeyDown = (_this$props2 = _this.props).onKeyDown) === null || _this$props$onKeyDown === void 0 ? void 0 : _this$props$onKeyDown.call(_this$props2, event);
204
+ (_this$props$onKeyDown = (_this$props2 = _this.props).onKeyDown) === null || _this$props$onKeyDown === void 0 ? void 0 : _this$props$onKeyDown.call(_this$props2, event);
219
205
  }
220
206
 
221
- return _this._onOptionSelected(selection, event);
207
+ _this._onOptionSelected(selection, event);
222
208
  });
223
209
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onEscape", function () {
224
210
  _this.setState({
@@ -324,8 +310,8 @@ var Typeahead = /*#__PURE__*/function (_Component) {
324
310
  }
325
311
  });
326
312
  _this.state = {
327
- /** @type {ReadonlyArray<string>} */
328
- searchResults: [],
313
+ // initiate searchResults with options
314
+ searchResults: _this.props.options || [],
329
315
  // This should be called something else, 'entryValue'
330
316
  entryValue: _this.props.value || _this.props.initialValue,
331
317
  // A valid typeahead value
@@ -358,8 +344,8 @@ var Typeahead = /*#__PURE__*/function (_Component) {
358
344
  CustomListComponent = _this$props$customLis === void 0 ? _dropdownList["default"] : _this$props$customLis;
359
345
  return /*#__PURE__*/_react["default"].createElement(CustomListComponent, {
360
346
  fixedOptions: this.props.fixedOptions,
361
- options: this.props.maxVisible ? this.state.searchResults.slice(0, this.props.maxVisible) : this.state.searchResults,
362
- areResultsTruncated: this.props.maxVisible && this.state.searchResults.length > this.props.maxVisible,
347
+ options: this.state.searchResults,
348
+ areResultsTruncated: false,
363
349
  resultsTruncatedMessage: this.props.resultsTruncatedMessage,
364
350
  onOptionSelected: this._onOptionSelected,
365
351
  allowCustomValues: this.props.allowCustomValues,
@@ -462,10 +448,15 @@ var Typeahead = /*#__PURE__*/function (_Component) {
462
448
  }], [{
463
449
  key: "getDerivedStateFromProps",
464
450
  value: function getDerivedStateFromProps(props, state) {
465
- // invoked after a component is instantiated as well as before it is re-rendered
451
+ if (props.options === state.prevOptions) {
452
+ return {};
453
+ } // invoked after a component is instantiated as well as before it is re-rendered
454
+
455
+
466
456
  var searchResults = getOptionsForValue(state.entryValue, props, state);
467
457
  return {
468
- searchResults: searchResults
458
+ searchResults: searchResults,
459
+ prevOptions: props.options
469
460
  };
470
461
  }
471
462
  }]);
@@ -504,4 +495,4 @@ var Typeahead = /*#__PURE__*/function (_Component) {
504
495
  (0, _reactLifecyclesCompat.polyfill)(Typeahead);
505
496
  var _default = Typeahead;
506
497
  exports["default"] = _default;
507
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vaXRlbS1zZWxlY3Rvci90eXBlYWhlYWQudHN4Il0sIm5hbWVzIjpbIkRFRkFVTFRfQ0xBU1MiLCJUeXBlYWhlYWRXcmFwcGVyIiwic3R5bGVkIiwiZGl2IiwicHJvcHMiLCJsaWdodCIsInRoZW1lIiwiZHJvcGRvd25MaXN0QmdkTFQiLCJkcm9wZG93bkxpc3RCZ2QiLCJkcm9wZG93bkxpc3RTaGFkb3ciLCJJbnB1dEJveCIsImF0dHJzIiwiY2xhc3NOYW1lIiwiVHlwZWFoZWFkSW5wdXQiLCJpbnB1dCIsImlucHV0TFQiLCJzZWNvbmRhcnlJbnB1dCIsInNlbGVjdEJhY2tncm91bmRMVCIsInNlY29uZGFyeUlucHV0QmdkIiwiSW5wdXRJY29uIiwiaW5wdXRQbGFjZWhvbGRlckNvbG9yIiwiZ2VuZXJhdGVTZWFyY2hGdW5jdGlvbiIsInNlYXJjaE9wdGlvbnMiLCJmaWx0ZXJPcHRpb24iLCJDb25zb2xlIiwid2FybiIsInZhbHVlIiwib3B0aW9ucyIsImZpbHRlciIsIm8iLCJtYXBwZXIiLCJBY2Nlc3NvciIsImdlbmVyYXRlQWNjZXNzb3IiLCJJREVOVElUWV9GTiIsImZ1enp5IiwiZXh0cmFjdCIsIm1hcCIsInJlcyIsImluZGV4IiwiZ2V0T3B0aW9uc0ZvclZhbHVlIiwic3RhdGUiLCJzaG93T3B0aW9uc1doZW5FbXB0eSIsInNlYXJjaGFibGUiLCJzaG91bGRTa2lwU2VhcmNoIiwiZW1wdHlWYWx1ZSIsInRyaW0iLCJsZW5ndGgiLCJpc0ZvY3VzZWQiLCJUeXBlYWhlYWQiLCJlbnRyeSIsImN1cnJlbnQiLCJmb2N1cyIsIk51bWJlciIsImFsbG93Q3VzdG9tVmFsdWVzIiwiZW50cnlWYWx1ZSIsInNlYXJjaFJlc3VsdHMiLCJpbmRleE9mIiwiX2hhc0N1c3RvbVZhbHVlIiwib3B0aW9uIiwiZXZlbnQiLCJzZXRTdGF0ZSIsInNlbGVjdGlvbiIsIm9uT3B0aW9uU2VsZWN0ZWQiLCJnZXRTZWxlY3Rpb24iLCJvbktleURvd24iLCJfb25PcHRpb25TZWxlY3RlZCIsInNlbGVjdGlvbkluZGV4IiwiX2dldEN1c3RvbVZhbHVlIiwiZXZlbnRzIiwiS2V5RXZlbnQiLCJET01fVktfVVAiLCJuYXZVcCIsIkRPTV9WS19ET1dOIiwibmF2RG93biIsIkRPTV9WS19SRVRVUk4iLCJET01fVktfRU5URVIiLCJfb25FbnRlciIsIkRPTV9WS19FU0NBUEUiLCJfb25Fc2NhcGUiLCJET01fVktfVEFCIiwiX29uVGFiIiwiZGVsdGEiLCJfaGFzSGludCIsIm5ld0luZGV4IiwibWF4VmlzaWJsZSIsInNsaWNlIiwiX25hdiIsIm9uQ2hhbmdlIiwiX29uVGV4dEVudHJ5VXBkYXRlZCIsInNoaWZ0S2V5IiwiaGFuZGxlciIsImV2ZW50TWFwIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0Iiwib25Gb2N1cyIsIm9uQmx1ciIsImluaXRpYWxWYWx1ZSIsInJvb3QiLCJjdXN0b21MaXN0Q29tcG9uZW50IiwiQ3VzdG9tTGlzdENvbXBvbmVudCIsIkRyb3Bkb3duTGlzdCIsImZpeGVkT3B0aW9ucyIsInJlc3VsdHNUcnVuY2F0ZWRNZXNzYWdlIiwiY3VzdG9tQ2xhc3NlcyIsImN1c3RvbUxpc3RJdGVtQ29tcG9uZW50IiwiY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudCIsImRlZmF1bHRDbGFzc05hbWVzIiwiZGlzcGxheU9wdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJfaGFzRml4ZWRPcHRpb25zIiwibmFtZSIsIkFycmF5IiwiaXNBcnJheSIsImlucHV0Q2xhc3NlcyIsIkJvb2xlYW4iLCJpbnB1dENsYXNzTGlzdCIsImNsYXNzZXMiLCJjbGFzc0xpc3QiLCJfb25LZXlEb3duIiwib25LZXlQcmVzcyIsIm9uS2V5VXAiLCJfb25Gb2N1cyIsIl9yZW5kZXJIaWRkZW5JbnB1dCIsImRpc2FibGVkIiwiaW5wdXRQcm9wcyIsInBsYWNlaG9sZGVyIiwiX29uQ2hhbmdlIiwiX29uQmx1ciIsIl9yZW5kZXJJbmNyZW1lbnRhbFNlYXJjaFJlc3VsdHMiLCJDb21wb25lbnQiLCJ0ZXh0YXJlYSIsImlucHV0RGlzcGxheU9wdGlvbiIsIkxpc3RJdGVtIiwiaW5wdXRJY29uIiwiU2VhcmNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQSxJQUFNQSxhQUFhLEdBQUcsV0FBdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBTUEsSUFBTUMsZ0JBQWdCLEdBQUdDLDZCQUFPQyxHQUFWLDBOQUdBLFVBQUFDLEtBQUs7QUFBQSxTQUN2QkEsS0FBSyxDQUFDQyxLQUFOLEdBQWNELEtBQUssQ0FBQ0UsS0FBTixDQUFZQyxpQkFBMUIsR0FBOENILEtBQUssQ0FBQ0UsS0FBTixDQUFZRSxlQURuQztBQUFBLENBSEwsRUFLTixVQUFBSixLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDRSxLQUFOLENBQVlHLGtCQUFoQjtBQUFBLENBTEMsQ0FBdEI7O0FBWUEsSUFBTUMsUUFBUSxHQUFHUiw2QkFBT0MsR0FBUCxDQUFXUSxLQUFYLENBQWlCO0FBQ2hDQyxFQUFBQSxTQUFTLEVBQUU7QUFEcUIsQ0FBakIsQ0FBSCwyR0FBZDs7QUFNQSxJQUFNQyxjQUFjLEdBQUdYLDZCQUFPWSxLQUFWLG9LQUNoQixVQUFBVixLQUFLO0FBQUEsU0FBS0EsS0FBSyxDQUFDQyxLQUFOLEdBQWNELEtBQUssQ0FBQ0UsS0FBTixDQUFZUyxPQUExQixHQUFvQ1gsS0FBSyxDQUFDRSxLQUFOLENBQVlVLGNBQXJEO0FBQUEsQ0FEVyxFQUdJLFVBQUFaLEtBQUs7QUFBQSxTQUN2QkEsS0FBSyxDQUFDQyxLQUFOLEdBQWNELEtBQUssQ0FBQ0UsS0FBTixDQUFZVyxrQkFBMUIsR0FBK0NiLEtBQUssQ0FBQ0UsS0FBTixDQUFZWSxpQkFEcEM7QUFBQSxDQUhULENBQXBCOztBQVFBLElBQU1DLFNBQVMsR0FBR2pCLDZCQUFPQyxHQUFQ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QUEwQnBCQyxFQUFBQSxVQUFVLEVBQUUsSUExQlE7QUEyQnBCNEQsRUFBQUEsdUJBQXVCLEVBQUU7QUEzQkwsQztBQTJWeEIscUNBQVN0RCxTQUFUO2VBRWVBLFMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZiwgRWxlbWVudFR5cGUsIEtleWJvYXJkRXZlbnRIYW5kbGVyfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3BvbHlmaWxsfSBmcm9tICdyZWFjdC1saWZlY3ljbGVzLWNvbXBhdCc7XG5pbXBvcnQgZnV6enkgZnJvbSAnZnV6enknO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcblxuaW1wb3J0IEFjY2Vzc29yIGZyb20gJy4vYWNjZXNzb3InO1xuaW1wb3J0IERyb3Bkb3duTGlzdCwge0xpc3RJdGVtfSBmcm9tICcuL2Ryb3Bkb3duLWxpc3QnO1xuaW1wb3J0IHtTZWFyY2h9IGZyb20gJy4uL2ljb25zJztcbmltcG9ydCB7S2V5RXZlbnR9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuY29uc3QgREVGQVVMVF9DTEFTUyA9ICd0eXBlYWhlYWQnO1xuLyoqXG4gKiBDb3BpZWQgbW9zdGx5IGZyb20gJ3JlYWN0LXR5cGVhaGVhZCcsIGFuIGF1dG8tY29tcGxldGluZyB0ZXh0IGlucHV0XG4gKlxuICogUmVuZGVycyBhbiB0ZXh0IGlucHV0IHRoYXQgc2hvd3Mgb3B0aW9ucyBuZWFyYnkgdGhhdCB5b3UgY2FuIHVzZSB0aGVcbiAqIGtleWJvYXJkIG9yIG1vdXNlIHRvIHNlbGVjdC5cbiAqL1xuXG5pbnRlcmZhY2UgVHlwZWFoZWFkV3JhcHBlclByb3BzIHtcbiAgbGlnaHQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBUeXBlYWhlYWRXcmFwcGVyID0gc3R5bGVkLmRpdjxUeXBlYWhlYWRXcmFwcGVyUHJvcHM+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+XG4gICAgcHJvcHMubGlnaHQgPyBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RCZ2RMVCA6IHByb3BzLnRoZW1lLmRyb3Bkb3duTGlzdEJnZH07XG4gIGJveC1zaGFkb3c6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0U2hhZG93fTtcblxuICA6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbmA7XG5cbmNvbnN0IElucHV0Qm94ID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3R5cGVhaGVhZF9faW5wdXRfYm94J1xufSlgXG4gIHBhZGRpbmc6IDhweDtcbmA7XG5cbmNvbnN0IFR5cGVhaGVhZElucHV0ID0gc3R5bGVkLmlucHV0PFR5cGVhaGVhZFdyYXBwZXJQcm9wcz5gXG4gICR7cHJvcHMgPT4gKHByb3BzLmxpZ2h0ID8gcHJvcHMudGhlbWUuaW5wdXRMVCA6IHByb3BzLnRoZW1lLnNlY29uZGFyeUlucHV0KX0gOmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PlxuICAgICAgcHJvcHMubGlnaHQgPyBwcm9wcy50aGVtZS5zZWxlY3RCYWNrZ3JvdW5kTFQgOiBwcm9wcy50aGVtZS5zZWNvbmRhcnlJbnB1dEJnZH07XG4gIH1cbmA7XG5cbmNvbnN0IElucHV0SWNvbiA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICd0eXBlYWhlYWRfX2lucHV0X2ljb24nXG59KWBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTVweDtcbiAgdG9wOiAxNHB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dFBsYWNlaG9sZGVyQ29sb3J9O1xuYDtcblxuZnVuY3Rpb24gZ2VuZXJhdGVTZWFyY2hGdW5jdGlvbihwcm9wczogVHlwZWFoZWFkUHJvcHMpIHtcbiAgY29uc3Qge3NlYXJjaE9wdGlvbnMsIGZpbHRlck9wdGlvbn0gPSBwcm9wcztcbiAgaWYgKHR5cGVvZiBzZWFyY2hPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZpbHRlck9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgQ29uc29sZS53YXJuKCdzZWFyY2hPcHRpb25zIHByb3AgaXMgYmVpbmcgdXNlZCwgZmlsdGVyT3B0aW9uIHByb3Agd2lsbCBiZSBpZ25vcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBzZWFyY2hPcHRpb25zO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXJPcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyB1c2UgY3VzdG9tIGZpbHRlciBvcHRpb25cbiAgICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLmZpbHRlcihvID0+IGZpbHRlck9wdGlvbih2YWx1ZSwgbykpO1xuICB9XG5cbiAgY29uc3QgbWFwcGVyID1cbiAgICB0eXBlb2YgZmlsdGVyT3B0aW9uID09PSAnc3RyaW5nJ1xuICAgICAgPyBBY2Nlc3Nvci5nZW5lcmF0ZUFjY2Vzc29yKGZpbHRlck9wdGlvbilcbiAgICAgIDogQWNjZXNzb3IuSURFTlRJVFlfRk47XG5cbiAgcmV0dXJuICh2YWx1ZSwgb3B0aW9ucykgPT5cbiAgICBmdXp6eS5maWx0ZXIodmFsdWUsIG9wdGlvbnMsIHtleHRyYWN0OiBtYXBwZXJ9KS5tYXAocmVzID0+IG9wdGlvbnNbcmVzLmluZGV4XSk7XG59XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnNGb3JWYWx1ZSh2YWx1ZSwgcHJvcHMsIHN0YXRlKSB7XG4gIGNvbnN0IHtvcHRpb25zLCBzaG93T3B0aW9uc1doZW5FbXB0eX0gPSBwcm9wcztcblxuICBpZiAoIXByb3BzLnNlYXJjaGFibGUpIHtcbiAgICAvLyBkaXJlY3RseSBwYXNzIHRocm91Z2ggb3B0aW9ucyBpZiBjYW4gbm90IGJlIHNlYXJjaGVkXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbiAgaWYgKHNob3VsZFNraXBTZWFyY2godmFsdWUsIHN0YXRlLCBzaG93T3B0aW9uc1doZW5FbXB0eSkpIHtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSBnZW5lcmF0ZVNlYXJjaEZ1bmN0aW9uKHByb3BzKTtcbiAgcmV0dXJuIHNlYXJjaE9wdGlvbnModmFsdWUsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRTa2lwU2VhcmNoKGlucHV0LCBzdGF0ZSwgc2hvd09wdGlvbnNXaGVuRW1wdHkpIHtcbiAgY29uc3QgZW1wdHlWYWx1ZSA9ICFpbnB1dCB8fCBpbnB1dC50cmltKCkubGVuZ3RoID09PSAwO1xuXG4gIC8vIHRoaXMuc3RhdGUgbXVzdCBiZSBjaGVja2VkIGJlY2F1c2UgaXQgbWF5IG5vdCBiZSBkZWZpbmVkIHlldCBpZiB0aGlzIGZ1bmN0aW9uXG4gIC8vIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBnZXRJbml0aWFsU3RhdGVcbiAgY29uc3QgaXNGb2N1c2VkID0gc3RhdGUgJiYgc3RhdGUuaXNGb2N1c2VkO1xuICByZXR1cm4gIShzaG93T3B0aW9uc1doZW5FbXB0eSAmJiBpc0ZvY3VzZWQpICYmIGVtcHR5VmFsdWU7XG59XG5cbmludGVyZmFjZSBUeXBlYWhlYWRQcm9wcyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGN1c3RvbUNsYXNzZXM/OiBhbnk7XG4gIG1heFZpc2libGU/OiBudW1iZXI7XG4gIHJlc3VsdHNUcnVuY2F0ZWRNZXNzYWdlPzogc3RyaW5nO1xuICBvcHRpb25zPzogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0PjtcbiAgZml4ZWRPcHRpb25zPzogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0PiB8IG51bGw7XG4gIGFsbG93Q3VzdG9tVmFsdWVzPzogbnVtYmVyO1xuICBpbml0aWFsVmFsdWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0ZXh0YXJlYT86IGJvb2xlYW47XG4gIGlucHV0UHJvcHM/OiBvYmplY3Q7XG4gIG9uT3B0aW9uU2VsZWN0ZWQ/OiAob3B0aW9uOiBhbnksIGV2ZW50OiBhbnkpID0+IGFueTtcbiAgb25DaGFuZ2U/OiAoZXZlbnQ6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBvbktleVByZXNzPzogS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvbktleVVwPzogS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvbkZvY3VzPzogKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gdm9pZDtcbiAgb25CbHVyPzogKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBmaWx0ZXJPcHRpb24/OiBzdHJpbmcgfCBGdW5jdGlvbjtcbiAgc2VhcmNoT3B0aW9ucz86IEZ1bmN0aW9uO1xuICBkaXNwbGF5T3B0aW9uPzogc3RyaW5nIHwgRnVuY3Rpb247XG4gIGlucHV0RGlzcGxheU9wdGlvbj86IHN0cmluZyB8IEZ1bmN0aW9uO1xuICBmb3JtSW5wdXRPcHRpb24/OiBzdHJpbmcgfCBGdW5jdGlvbjtcbiAgZGVmYXVsdENsYXNzTmFtZXM/OiBib29sZWFuO1xuICBjdXN0b21MaXN0Q29tcG9uZW50PzogRWxlbWVudFR5cGU7XG4gIGN1c3RvbUxpc3RJdGVtQ29tcG9uZW50PzogRWxlbWVudFR5cGUgfCBGdW5jdGlvbjtcbiAgY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudD86IEVsZW1lbnRUeXBlIHwgRnVuY3Rpb24gfCBudWxsO1xuICBzaG93T3B0aW9uc1doZW5FbXB0eT86IGJvb2xlYW47XG4gIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICBsaWdodD86IGJvb2xlYW47XG4gIGlucHV0SWNvbjogRWxlbWVudFR5cGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc2VsZWN0ZWRJdGVtcz86IGFueVtdIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFR5cGVhaGVhZFN0YXRlIHtcbiAgLyoqIEB0eXBlIHtSZWFkb25seUFycmF5PHN0cmluZz59ICovXG4gIHNlYXJjaFJlc3VsdHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XG5cbiAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIHNvbWV0aGluZyBlbHNlLCAnZW50cnlWYWx1ZSdcbiAgZW50cnlWYWx1ZT86IHN0cmluZztcblxuICAvLyBBIHZhbGlkIHR5cGVhaGVhZCB2YWx1ZVxuICBzZWxlY3Rpb24/OiBzdHJpbmc7XG5cbiAgLy8gSW5kZXggb2YgdGhlIHNlbGVjdGlvblxuICBzZWxlY3Rpb25JbmRleDogbnVsbDtcblxuICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBmb2N1cyBzdGF0ZSBvZiB0aGUgaW5wdXQgZWxlbWVudCwgdG8gZGV0ZXJtaW5lXG4gIC8vIHdoZXRoZXIgdG8gc2hvdyBvcHRpb25zIHdoZW4gZW1wdHkgKGlmIHNob3dPcHRpb25zV2hlbkVtcHR5IGlzIHRydWUpXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuY2xhc3MgVHlwZWFoZWFkIGV4dGVuZHMgQ29tcG9uZW50PFR5cGVhaGVhZFByb3BzLCBUeXBlYWhlYWRTdGF0ZT4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG9wdGlvbnM6IFtdLFxuICAgIGN1c3RvbUNsYXNzZXM6IHt9LFxuICAgIGFsbG93Q3VzdG9tVmFsdWVzOiAwLFxuICAgIGluaXRpYWxWYWx1ZTogJycsXG4gICAgdmFsdWU6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgdGV4dGFyZWE6IGZhbHNlLFxuICAgIGlucHV0UHJvcHM6IHt9LFxuICAgIG9uT3B0aW9uU2VsZWN0ZWQob3B0aW9uKSB7fSxcbiAgICBvbkNoYW5nZShldmVudCkge30sXG4gICAgb25LZXlEb3duKGV2ZW50KSB7fSxcbiAgICBvbktleVByZXNzKGV2ZW50KSB7fSxcbiAgICBvbktleVVwKGV2ZW50KSB7fSxcbiAgICBvbkZvY3VzKGV2ZW50KSB7fSxcbiAgICBvbkJsdXIoZXZlbnQpIHt9LFxuICAgIGZpbHRlck9wdGlvbjogbnVsbCxcbiAgICBzZWFyY2hPcHRpb25zOiBudWxsLFxuICAgIGlucHV0RGlzcGxheU9wdGlvbjogbnVsbCxcbiAgICBkZWZhdWx0Q2xhc3NOYW1lczogdHJ1ZSxcbiAgICBjdXN0b21MaXN0Q29tcG9uZW50OiBEcm9wZG93bkxpc3QsXG4gICAgY3VzdG9tTGlzdEl0ZW1Db21wb25lbnQ6IExpc3RJdGVtLFxuICAgIGlucHV0SWNvbjogU2VhcmNoLFxuICAgIGN1c3RvbUxpc3RIZWFkZXJDb21wb25lbnQ6IG51bGwsXG4gICAgc2hvd09wdGlvbnNXaGVuRW1wdHk6IHRydWUsXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICByZXN1bHRzVHJ1bmNhdGVkTWVzc2FnZTogbnVsbFxuICB9O1xuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgLy8gIGludm9rZWQgYWZ0ZXIgYSBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIGFzIHdlbGwgYXMgYmVmb3JlIGl0IGlzIHJlLXJlbmRlcmVkXG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGdldE9wdGlvbnNGb3JWYWx1ZShzdGF0ZS5lbnRyeVZhbHVlLCBwcm9wcywgc3RhdGUpO1xuXG4gICAgcmV0dXJuIHtzZWFyY2hSZXN1bHRzfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC8qKiBAdHlwZSB7UmVhZG9ubHlBcnJheTxzdHJpbmc+fSAqL1xuICAgICAgc2VhcmNoUmVzdWx0czogW10sXG5cbiAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBzb21ldGhpbmcgZWxzZSwgJ2VudHJ5VmFsdWUnXG4gICAgICBlbnRyeVZhbHVlOiB0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlLFxuXG4gICAgICAvLyBBIHZhbGlkIHR5cGVhaGVhZCB2YWx1ZVxuICAgICAgc2VsZWN0aW9uOiB0aGlzLnByb3BzLnZhbHVlLFxuXG4gICAgICAvLyBJbmRleCBvZiB0aGUgc2VsZWN0aW9uXG4gICAgICBzZWxlY3Rpb25JbmRleDogbnVsbCxcblxuICAgICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgZm9jdXMgc3RhdGUgb2YgdGhlIGlucHV0IGVsZW1lbnQsIHRvIGRldGVybWluZVxuICAgICAgLy8gd2hldGhlciB0byBzaG93IG9wdGlvbnMgd2hlbiBlbXB0eSAoaWYgc2hvd09wdGlvbnNXaGVuRW1wdHkgaXMgdHJ1ZSlcbiAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8gY2FsbCBmb2N1cyBvbiBlbnRyeSBvciBkaXYgdG8gdHJpZ2dlciBrZXkgZXZlbnRzIGxpc3RlbmVyXG4gICAgaWYgKHRoaXMuZW50cnkuY3VycmVudCkge1xuICAgICAgdGhpcy5lbnRyeS5jdXJyZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9vdC5jdXJyZW50Py5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHJvb3QgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gIGVudHJ5ID0gY3JlYXRlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG5cbiAgZm9jdXMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZW50cnkuY3VycmVudCkge1xuICAgICAgdGhpcy5lbnRyeS5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9oYXNDdXN0b21WYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgTnVtYmVyKHRoaXMucHJvcHMuYWxsb3dDdXN0b21WYWx1ZXMpID4gMCAmJlxuICAgICAgTnVtYmVyKHRoaXMuc3RhdGUuZW50cnlWYWx1ZT8ubGVuZ3RoKSA+PSBOdW1iZXIodGhpcy5wcm9wcy5hbGxvd0N1c3RvbVZhbHVlcykgJiZcbiAgICAgIHRoaXMuc3RhdGUuc2VhcmNoUmVzdWx0cy5pbmRleE9mKHRoaXMuc3RhdGUuZW50cnlWYWx1ZSkgPCAwXG4gICAgKTtcbiAgfTtcblxuICBfZ2V0Q3VzdG9tVmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0N1c3RvbVZhbHVlKCkgPyB0aGlzLnN0YXRlLmVudHJ5VmFsdWUgOiBudWxsO1xuICB9O1xuXG4gIF9yZW5kZXJJbmNyZW1lbnRhbFNlYXJjaFJlc3VsdHMoKSB7XG4gICAgY29uc3Qge2N1c3RvbUxpc3RDb21wb25lbnQ6IEN1c3RvbUxpc3RDb21wb25lbnQgPSBEcm9wZG93bkxpc3R9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPEN1c3RvbUxpc3RDb21wb25lbnRcbiAgICAgICAgZml4ZWRPcHRpb25zPXt0aGlzLnByb3BzLmZpeGVkT3B0aW9uc31cbiAgICAgICAgb3B0aW9ucz17XG4gICAgICAgICAgdGhpcy5wcm9wcy5tYXhWaXNpYmxlXG4gICAgICAgICAgICA/IHRoaXMuc3RhdGUuc2VhcmNoUmVzdWx0cy5zbGljZSgwLCB0aGlzLnByb3BzLm1heFZpc2libGUpXG4gICAgICAgICAgICA6IHRoaXMuc3RhdGUuc2VhcmNoUmVzdWx0c1xuICAgICAgICB9XG4gICAgICAgIGFyZVJlc3VsdHNUcnVuY2F0ZWQ9e1xuICAgICAgICAgIHRoaXMucHJvcHMubWF4VmlzaWJsZSAmJiB0aGlzLnN0YXRlLnNlYXJjaFJlc3VsdHMubGVuZ3RoID4gdGhpcy5wcm9wcy5tYXhWaXNpYmxlXG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0c1RydW5jYXRlZE1lc3NhZ2U9e3RoaXMucHJvcHMucmVzdWx0c1RydW5jYXRlZE1lc3NhZ2V9XG4gICAgICAgIG9uT3B0aW9uU2VsZWN0ZWQ9e3RoaXMuX29uT3B0aW9uU2VsZWN0ZWR9XG4gICAgICAgIGFsbG93Q3VzdG9tVmFsdWVzPXt0aGlzLnByb3BzLmFsbG93Q3VzdG9tVmFsdWVzfVxuICAgICAgICBjdXN0b21WYWx1ZT17dGhpcy5fZ2V0Q3VzdG9tVmFsdWUoKX1cbiAgICAgICAgY3VzdG9tQ2xhc3Nlcz17dGhpcy5wcm9wcy5jdXN0b21DbGFzc2VzfVxuICAgICAgICBjdXN0b21MaXN0SXRlbUNvbXBvbmVudD17dGhpcy5wcm9wcy5jdXN0b21MaXN0SXRlbUNvbXBvbmVudH1cbiAgICAgICAgY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudD17dGhpcy5wcm9wcy5jdXN0b21MaXN0SGVhZGVyQ29tcG9uZW50fVxuICAgICAgICBzZWxlY3Rpb25JbmRleD17dGhpcy5zdGF0ZS5zZWxlY3Rpb25JbmRleH1cbiAgICAgICAgZGVmYXVsdENsYXNzTmFtZXM9e3RoaXMucHJvcHMuZGVmYXVsdENsYXNzTmFtZXN9XG4gICAgICAgIGRpc3BsYXlPcHRpb249e3RoaXMucHJvcHMuZGlzcGxheU9wdGlvbn1cbiAgICAgICAgc2VsZWN0ZWRJdGVtcz17dGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zfVxuICAgICAgICBsaWdodD17dGhpcy5wcm9wcy5saWdodH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGdldFNlbGVjdGlvbigpIHtcbiAgICBsZXQgaW5kZXg6IG51bWJlciB8IG51bGwgPSB0aGlzLnN0YXRlLnNlbGVjdGlvbkluZGV4O1xuICAgIGlmIChpbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGluZGV4ID0gTnVtYmVyKGluZGV4KTtcblxuICAgIGlmICh0aGlzLl9oYXNDdXN0b21WYWx1ZSgpKSB7XG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZW50cnlWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGluZGV4LS07XG4gICAgfVxuICAgIGlmICh0aGlzLl9oYXNGaXhlZE9wdGlvbnMoKSkge1xuICAgICAgcmV0dXJuIGluZGV4IDwgTnVtYmVyKHRoaXMucHJvcHMuZml4ZWRPcHRpb25zPy5sZW5ndGgpXG4gICAgICAgID8gdGhpcy5wcm9wcy5maXhlZE9wdGlvbnM/LltpbmRleF1cbiAgICAgICAgOiB0aGlzLnN0YXRlLnNlYXJjaFJlc3VsdHNbaW5kZXggLSBOdW1iZXIodGhpcy5wcm9wcy5maXhlZE9wdGlvbnM/Lmxlbmd0aCldO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWFyY2hSZXN1bHRzW2luZGV4XTtcbiAgfVxuXG4gIF9vbk9wdGlvblNlbGVjdGVkID0gKG9wdGlvbiwgZXZlbnQpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWFyY2hhYmxlKSB7XG4gICAgICAvLyByZXNldCBlbnRyeSBpbnB1dFxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFJlc3VsdHM6IGdldE9wdGlvbnNGb3JWYWx1ZSgnJywgdGhpcy5wcm9wcywgdGhpcy5zdGF0ZSksXG4gICAgICAgIHNlbGVjdGlvbjogJycsXG4gICAgICAgIGVudHJ5VmFsdWU6ICcnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5vbk9wdGlvblNlbGVjdGVkPy4ob3B0aW9uLCBldmVudCk7XG4gIH07XG5cbiAgLy8gdXNlICgpID0+IHt9IHRvIGF2b2lkIGJpbmRpbmcgJ3RoaXMnXG4gIF9vblRleHRFbnRyeVVwZGF0ZWQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VhcmNoYWJsZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmVudHJ5LmN1cnJlbnQ/LnZhbHVlO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VhcmNoUmVzdWx0czogZ2V0T3B0aW9uc0ZvclZhbHVlKHZhbHVlLCB0aGlzLnByb3BzLCB0aGlzLnN0YXRlKSxcbiAgICAgICAgc2VsZWN0aW9uOiAnJyxcbiAgICAgICAgZW50cnlWYWx1ZTogdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfb25FbnRlciA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vbktleURvd24/LihldmVudCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKHNlbGVjdGlvbiwgZXZlbnQpO1xuICB9O1xuXG4gIF9vbkVzY2FwZSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNlbGVjdGlvbkluZGV4OiBudWxsXG4gICAgfSk7XG4gIH07XG5cbiAgX29uVGFiID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgbGV0IG9wdGlvbiA9IHNlbGVjdGlvblxuICAgICAgPyBzZWxlY3Rpb25cbiAgICAgIDogdGhpcy5zdGF0ZS5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zdGF0ZS5zZWFyY2hSZXN1bHRzWzBdXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAob3B0aW9uID09PSBudWxsICYmIHRoaXMuX2hhc0N1c3RvbVZhbHVlKCkpIHtcbiAgICAgIG9wdGlvbiA9IHRoaXMuX2dldEN1c3RvbVZhbHVlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX29uT3B0aW9uU2VsZWN0ZWQob3B0aW9uLCBldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGV2ZW50TWFwID0gKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IHt9O1xuXG4gICAgZXZlbnRzW0tleUV2ZW50LkRPTV9WS19VUF0gPSB0aGlzLm5hdlVwO1xuICAgIGV2ZW50c1tLZXlFdmVudC5ET01fVktfRE9XTl0gPSB0aGlzLm5hdkRvd247XG4gICAgZXZlbnRzW0tleUV2ZW50LkRPTV9WS19SRVRVUk5dID0gZXZlbnRzW0tleUV2ZW50LkRPTV9WS19FTlRFUl0gPSB0aGlzLl9vbkVudGVyO1xuICAgIGV2ZW50c1tLZXlFdmVudC5ET01fVktfRVNDQVBFXSA9IHRoaXMuX29uRXNjYXBlO1xuICAgIGV2ZW50c1tLZXlFdmVudC5ET01fVktfVEFCXSA9IHRoaXMuX29uVGFiO1xuXG4gICAgcmV0dXJuIGV2ZW50cztcbiAgfTtcblxuICBfbmF2ID0gZGVsdGEgPT4ge1xuICAgIGlmICghdGhpcy5faGFzSGludCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBuZXdJbmRleCA9XG4gICAgICB0aGlzLnN0YXRlLnNlbGVjdGlvbkluZGV4ID09PSBudWxsXG4gICAgICAgID8gZGVsdGEgPT09IDFcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IGRlbHRhXG4gICAgICAgIDogdGhpcy5zdGF0ZS5zZWxlY3Rpb25JbmRleCArIGRlbHRhO1xuICAgIGxldCBsZW5ndGggPSB0aGlzLnByb3BzLm1heFZpc2libGVcbiAgICAgID8gdGhpcy5zdGF0ZS5zZWFyY2hSZXN1bHRzLnNsaWNlKDAsIHRoaXMucHJvcHMubWF4VmlzaWJsZSkubGVuZ3RoXG4gICAgICA6IHRoaXMuc3RhdGUuc2VhcmNoUmVzdWx0cy5sZW5ndGg7XG4gICAgaWYgKHRoaXMuX2hhc0N1c3RvbVZhbHVlKCkpIHtcbiAgICAgIGxlbmd0aCArPSAxO1xuICAgIH1cblxuICAgIGlmIChuZXdJbmRleCA8IDApIHtcbiAgICAgIG5ld0luZGV4ICs9IGxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKG5ld0luZGV4ID49IGxlbmd0aCkge1xuICAgICAgbmV3SW5kZXggLT0gbGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe3NlbGVjdGlvbkluZGV4OiBuZXdJbmRleH0pO1xuICB9O1xuXG4gIG5hdkRvd24gPSAoKSA9PiB7XG4gICAgdGhpcy5fbmF2KDEpO1xuICB9O1xuXG4gIG5hdlVwID0gKCkgPT4ge1xuICAgIHRoaXMuX25hdigtMSk7XG4gIH07XG5cbiAgX29uQ2hhbmdlOiBSZWFjdC5DaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4gPSBldmVudCA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXZlbnQpO1xuICAgIH1cblxuICAgIHRoaXMuX29uVGV4dEVudHJ5VXBkYXRlZCgpO1xuICB9O1xuXG4gIF9vbktleURvd246IFJlYWN0LktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PiA9IGV2ZW50ID0+IHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSBlbGVtZW50cywgZG9uJ3QgcGVyZm9ybSBzZWxlY3RvciBuYXZpZ2F0aW9uLlxuICAgIC8vIEp1c3QgcGFzcyB0aGlzIHVwIHRvIHRoZSB1cHN0cmVhbSBvbktleWRvd24gaGFuZGxlci5cbiAgICAvLyBBbHNvIHNraXAgaWYgdGhlIHVzZXIgaXMgcHJlc3NpbmcgdGhlIHNoaWZ0IGtleSwgc2luY2Ugbm9uZSBvZiBvdXIgaGFuZGxlcnMgYXJlIGxvb2tpbmcgZm9yIHNoaWZ0XG4gICAgaWYgKCF0aGlzLl9oYXNIaW50KCkgfHwgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLm9uS2V5RG93bj8uKGV2ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5ldmVudE1hcCgpW2V2ZW50LmtleUNvZGVdO1xuXG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vbktleURvd24/LihldmVudCk7XG4gICAgfVxuICAgIC8vIERvbid0IHByb3BhZ2F0ZSB0aGUga2V5c3Ryb2tlIGJhY2sgdG8gdGhlIERPTS9icm93c2VyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICBfb25Gb2N1czogUmVhY3QuRm9jdXNFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+ID0gZXZlbnQgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe2lzRm9jdXNlZDogdHJ1ZX0pO1xuICAgIGlmICh0aGlzLnByb3BzLm9uRm9jdXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLm9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBfb25CbHVyOiBSZWFjdC5Gb2N1c0V2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50PiA9IGV2ZW50ID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtpc0ZvY3VzZWQ6IGZhbHNlfSk7XG4gICAgaWYgKHRoaXMucHJvcHMub25CbHVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBfcmVuZGVySGlkZGVuSW5wdXQoKSB7XG4gICAgaWYgKCF0aGlzLnByb3BzLm5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9e3RoaXMucHJvcHMubmFtZX0gdmFsdWU9e3RoaXMuc3RhdGUuc2VsZWN0aW9ufSAvPjtcbiAgfVxuXG4gIF9oYXNIaW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlYXJjaFJlc3VsdHMubGVuZ3RoID4gMCB8fCB0aGlzLl9oYXNDdXN0b21WYWx1ZSgpO1xuICB9XG5cbiAgX2hhc0ZpeGVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmZpeGVkT3B0aW9ucykgJiYgdGhpcy5wcm9wcy5maXhlZE9wdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGlucHV0Q2xhc3NlcyA9IHt9O1xuICAgIGlucHV0Q2xhc3Nlc1t0aGlzLnByb3BzLmN1c3RvbUNsYXNzZXM/LmlucHV0XSA9IEJvb2xlYW4odGhpcy5wcm9wcy5jdXN0b21DbGFzc2VzPy5pbnB1dCk7XG4gICAgY29uc3QgaW5wdXRDbGFzc0xpc3QgPSBjbGFzc05hbWVzKGlucHV0Q2xhc3Nlcyk7XG5cbiAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgW0RFRkFVTFRfQ0xBU1NdOiB0aGlzLnByb3BzLmRlZmF1bHRDbGFzc05hbWVzXG4gICAgfTtcbiAgICBjbGFzc2VzW3RoaXMucHJvcHMuY2xhc3NOYW1lID8gdGhpcy5wcm9wcy5jbGFzc05hbWUgOiAnJ10gPSBCb29sZWFuKHRoaXMucHJvcHMuY2xhc3NOYW1lKTtcbiAgICBjb25zdCBjbGFzc0xpc3QgPSBjbGFzc05hbWVzKGNsYXNzZXMpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxUeXBlYWhlYWRXcmFwcGVyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NMaXN0fVxuICAgICAgICByZWY9e3RoaXMucm9vdH1cbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5fb25LZXlEb3dufVxuICAgICAgICBvbktleVByZXNzPXt0aGlzLnByb3BzLm9uS2V5UHJlc3N9XG4gICAgICAgIG9uS2V5VXA9e3RoaXMucHJvcHMub25LZXlVcH1cbiAgICAgICAgb25Gb2N1cz17dGhpcy5fb25Gb2N1c31cbiAgICAgICAgbGlnaHQ9e3RoaXMucHJvcHMubGlnaHR9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLl9yZW5kZXJIaWRkZW5JbnB1dCgpfVxuICAgICAgICB7dGhpcy5wcm9wcy5zZWFyY2hhYmxlID8gKFxuICAgICAgICAgIDxJbnB1dEJveD5cbiAgICAgICAgICAgIDxUeXBlYWhlYWRJbnB1dFxuICAgICAgICAgICAgICByZWY9e3RoaXMuZW50cnl9XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzLmlucHV0UHJvcHN9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2lucHV0Q2xhc3NMaXN0fVxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lbnRyeVZhbHVlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5fb25DaGFuZ2V9XG4gICAgICAgICAgICAgIG9uQmx1cj17dGhpcy5fb25CbHVyfVxuICAgICAgICAgICAgICBsaWdodD17dGhpcy5wcm9wcy5saWdodH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SW5wdXRJY29uPlxuICAgICAgICAgICAgICA8dGhpcy5wcm9wcy5pbnB1dEljb24gaGVpZ2h0PVwiMThweFwiIC8+XG4gICAgICAgICAgICA8L0lucHV0SWNvbj5cbiAgICAgICAgICA8L0lucHV0Qm94PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3RoaXMuX3JlbmRlckluY3JlbWVudGFsU2VhcmNoUmVzdWx0cygpfVxuICAgICAgPC9UeXBlYWhlYWRXcmFwcGVyPlxuICAgICk7XG4gIH1cbn1cblxucG9seWZpbGwoVHlwZWFoZWFkKTtcblxuZXhwb3J0IGRlZmF1bHQgVHlwZWFoZWFkO1xuIl19
498
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vaXRlbS1zZWxlY3Rvci90eXBlYWhlYWQudHN4Il0sIm5hbWVzIjpbIkRFRkFVTFRfQ0xBU1MiLCJUeXBlYWhlYWRXcmFwcGVyIiwic3R5bGVkIiwiZGl2IiwicHJvcHMiLCJsaWdodCIsInRoZW1lIiwiZHJvcGRvd25MaXN0QmdkTFQiLCJkcm9wZG93bkxpc3RCZ2QiLCJkcm9wZG93bkxpc3RTaGFkb3ciLCJJbnB1dEJveCIsImF0dHJzIiwiY2xhc3NOYW1lIiwiVHlwZWFoZWFkSW5wdXQiLCJpbnB1dCIsImlucHV0TFQiLCJzZWNvbmRhcnlJbnB1dCIsInNlbGVjdEJhY2tncm91bmRMVCIsInNlY29uZGFyeUlucHV0QmdkIiwiSW5wdXRJY29uIiwiaW5wdXRQbGFjZWhvbGRlckNvbG9yIiwiZ2VuZXJhdGVTZWFyY2hGdW5jdGlvbiIsInNlYXJjaE9wdGlvbnMiLCJmaWx0ZXJPcHRpb24iLCJDb25zb2xlIiwid2FybiIsInZhbHVlIiwib3B0aW9ucyIsImZpbHRlciIsIm8iLCJtYXBwZXIiLCJBY2Nlc3NvciIsImdlbmVyYXRlQWNjZXNzb3IiLCJJREVOVElUWV9GTiIsImZ1enp5IiwiZXh0cmFjdCIsIm1hcCIsInJlcyIsImluZGV4Iiwic2VhcmNoT3B0aW9uc09uSW5wdXQiLCJpbnB1dFZhbHVlIiwiZ2V0T3B0aW9uc0ZvclZhbHVlIiwic3RhdGUiLCJzaG93T3B0aW9uc1doZW5FbXB0eSIsInNlYXJjaGFibGUiLCJzaG91bGRTa2lwU2VhcmNoIiwiZW1wdHlWYWx1ZSIsInRyaW0iLCJsZW5ndGgiLCJpc0ZvY3VzZWQiLCJUeXBlYWhlYWQiLCJlbnRyeSIsImN1cnJlbnQiLCJmb2N1cyIsIk51bWJlciIsImFsbG93Q3VzdG9tVmFsdWVzIiwiZW50cnlWYWx1ZSIsInNlYXJjaFJlc3VsdHMiLCJpbmRleE9mIiwiX2hhc0N1c3RvbVZhbHVlIiwib3B0aW9uIiwiZXZlbnQiLCJzZXRTdGF0ZSIsInNlbGVjdGlvbiIsIm9uT3B0aW9uU2VsZWN0ZWQiLCJnZXRTZWxlY3Rpb24iLCJvbktleURvd24iLCJfb25PcHRpb25TZWxlY3RlZCIsInNlbGVjdGlvbkluZGV4IiwiX2dldEN1c3RvbVZhbHVlIiwiZXZlbnRzIiwiS2V5RXZlbnQiLCJET01fVktfVVAiLCJuYXZVcCIsIkRPTV9WS19ET1dOIiwibmF2RG93biIsIkRPTV9WS19SRVRVUk4iLCJET01fVktfRU5URVIiLCJfb25FbnRlciIsIkRPTV9WS19FU0NBUEUiLCJfb25Fc2NhcGUiLCJET01fVktfVEFCIiwiX29uVGFiIiwiZGVsdGEiLCJfaGFzSGludCIsIm5ld0luZGV4IiwibWF4VmlzaWJsZSIsInNsaWNlIiwiX25hdiIsIm9uQ2hhbmdlIiwiX29uVGV4dEVudHJ5VXBkYXRlZCIsInNoaWZ0S2V5IiwiaGFuZGxlciIsImV2ZW50TWFwIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0Iiwib25Gb2N1cyIsIm9uQmx1ciIsImluaXRpYWxWYWx1ZSIsInJvb3QiLCJjdXN0b21MaXN0Q29tcG9uZW50IiwiQ3VzdG9tTGlzdENvbXBvbmVudCIsIkRyb3Bkb3duTGlzdCIsImZpeGVkT3B0aW9ucyIsInJlc3VsdHNUcnVuY2F0ZWRNZXNzYWdlIiwiY3VzdG9tQ2xhc3NlcyIsImN1c3RvbUxpc3RJdGVtQ29tcG9uZW50IiwiY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudCIsImRlZmF1bHRDbGFzc05hbWVzIiwiZGlzcGxheU9wdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJfaGFzRml4ZWRPcHRpb25zIiwibmFtZSIsIkFycmF5IiwiaXNBcnJheSIsImlucHV0Q2xhc3NlcyIsIkJvb2xlYW4iLCJpbnB1dENsYXNzTGlzdCIsImNsYXNzZXMiLCJjbGFzc0xpc3QiLCJfb25LZXlEb3duIiwib25LZXlQcmVzcyIsIm9uS2V5VXAiLCJfb25Gb2N1cyIsIl9yZW5kZXJIaWRkZW5JbnB1dCIsImRpc2FibGVkIiwiaW5wdXRQcm9wcyIsInBsYWNlaG9sZGVyIiwiX29uQ2hhbmdlIiwiX29uQmx1ciIsIl9yZW5kZXJJbmNyZW1lbnRhbFNlYXJjaFJlc3VsdHMiLCJwcmV2T3B0aW9ucyIsIkNvbXBvbmVudCIsInRleHRhcmVhIiwiaW5wdXREaXNwbGF5T3B0aW9uIiwiTGlzdEl0ZW0iLCJpbnB1dEljb24iLCJTZWFyY2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUEsSUFBTUEsYUFBYSxHQUFHLFdBQXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQU1BLElBQU1DLGdCQUFnQixHQUFHQyw2QkFBT0MsR0FBViwwTkFHQSxVQUFBQyxLQUFLO0FBQUEsU0FDdkJBLEtBQUssQ0FBQ0MsS0FBTixHQUFjRCxLQUFLLENBQUNFLEtBQU4sQ0FBWUMsaUJBQTFCLEdBQThDSCxLQUFLLENBQUNFLEtBQU4sQ0FBWUUsZUFEbkM7QUFBQSxDQUhMLEVBS04sVUFBQUosS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0UsS0FBTixDQUFZRyxrQkFBaEI7QUFBQSxDQUxDLENBQXRCOztBQVlBLElBQU1DLFFBQVEsR0FBR1IsNkJBQU9DLEdBQVAsQ0FBV1EsS0FBWCxDQUFpQjtBQUNoQ0MsRUFBQUEsU0FBUyxFQUFFO0FBRHFCLENBQWpCLENBQUgsMkdBQWQ7O0FBTUEsSUFBTUMsY0FBYyxHQUFHWCw2QkFBT1ksS0FBVixvS0FDaEIsVUFBQVYsS0FBSztBQUFBLFNBQUtBLEtBQUssQ0FBQ0MsS0FBTixHQUFjRCxLQUFLLENBQUNFLEtBQU4sQ0FBWVMsT0FBMUIsR0FBb0NYLEtBQUssQ0FBQ0UsS0FBTixDQUFZVSxjQUFyRDtBQUFBLENBRFcsRUFHSSxVQUFBWixLQUFLO0FBQUEsU0FDdkJBLEtBQUssQ0FBQ0MsS0FBTixHQUFjRCxLQUFLLENBQUNFLEtBQU4sQ0FBWVcsa0JBQTFCLEdBQStDYixLQUFLLENBQUNFLEtBQU4sQ0FBWVksaUJBRHBDO0FB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QUEsU0FBUyxFQUFFQyxhQXZCUztBQXdCcEI5QixFQUFBQSx5QkFBeUIsRUFBRSxJQXhCUDtBQXlCcEJoRSxFQUFBQSxvQkFBb0IsRUFBRSxJQXpCRjtBQTBCcEJDLEVBQUFBLFVBQVUsRUFBRSxJQTFCUTtBQTJCcEI0RCxFQUFBQSx1QkFBdUIsRUFBRTtBQTNCTCxDO0FBNlZ4QixxQ0FBU3RELFNBQVQ7ZUFFZUEsUyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgY3JlYXRlUmVmLCBFbGVtZW50VHlwZSwgS2V5Ym9hcmRFdmVudEhhbmRsZXJ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7cG9seWZpbGx9IGZyb20gJ3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0JztcbmltcG9ydCBmdXp6eSBmcm9tICdmdXp6eSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuXG5pbXBvcnQgQWNjZXNzb3IgZnJvbSAnLi9hY2Nlc3Nvcic7XG5pbXBvcnQgRHJvcGRvd25MaXN0LCB7TGlzdEl0ZW19IGZyb20gJy4vZHJvcGRvd24tbGlzdCc7XG5pbXBvcnQge1NlYXJjaH0gZnJvbSAnLi4vaWNvbnMnO1xuaW1wb3J0IHtLZXlFdmVudH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5jb25zdCBERUZBVUxUX0NMQVNTID0gJ3R5cGVhaGVhZCc7XG4vKipcbiAqIENvcGllZCBtb3N0bHkgZnJvbSAncmVhY3QtdHlwZWFoZWFkJywgYW4gYXV0by1jb21wbGV0aW5nIHRleHQgaW5wdXRcbiAqXG4gKiBSZW5kZXJzIGFuIHRleHQgaW5wdXQgdGhhdCBzaG93cyBvcHRpb25zIG5lYXJieSB0aGF0IHlvdSBjYW4gdXNlIHRoZVxuICoga2V5Ym9hcmQgb3IgbW91c2UgdG8gc2VsZWN0LlxuICovXG5cbmludGVyZmFjZSBUeXBlYWhlYWRXcmFwcGVyUHJvcHMge1xuICBsaWdodD86IGJvb2xlYW47XG59XG5cbmNvbnN0IFR5cGVhaGVhZFdyYXBwZXIgPSBzdHlsZWQuZGl2PFR5cGVhaGVhZFdyYXBwZXJQcm9wcz5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy5saWdodCA/IHByb3BzLnRoZW1lLmRyb3Bkb3duTGlzdEJnZExUIDogcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0QmdkfTtcbiAgYm94LXNoYWRvdzogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RTaGFkb3d9O1xuXG4gIDpmb2N1cyB7XG4gICAgb3V0bGluZTogMDtcbiAgfVxuYDtcblxuY29uc3QgSW5wdXRCb3ggPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAndHlwZWFoZWFkX19pbnB1dF9ib3gnXG59KWBcbiAgcGFkZGluZzogOHB4O1xuYDtcblxuY29uc3QgVHlwZWFoZWFkSW5wdXQgPSBzdHlsZWQuaW5wdXQ8VHlwZWFoZWFkV3JhcHBlclByb3BzPmBcbiAgJHtwcm9wcyA9PiAocHJvcHMubGlnaHQgPyBwcm9wcy50aGVtZS5pbnB1dExUIDogcHJvcHMudGhlbWUuc2Vjb25kYXJ5SW5wdXQpfSA6aG92ZXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+XG4gICAgICBwcm9wcy5saWdodCA/IHByb3BzLnRoZW1lLnNlbGVjdEJhY2tncm91bmRMVCA6IHByb3BzLnRoZW1lLnNlY29uZGFyeUlucHV0QmdkfTtcbiAgfVxuYDtcblxuY29uc3QgSW5wdXRJY29uID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3R5cGVhaGVhZF9faW5wdXRfaWNvbidcbn0pYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAxNXB4O1xuICB0b3A6IDE0cHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0UGxhY2Vob2xkZXJDb2xvcn07XG5gO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVNlYXJjaEZ1bmN0aW9uKHByb3BzOiBUeXBlYWhlYWRQcm9wcykge1xuICBjb25zdCB7c2VhcmNoT3B0aW9ucywgZmlsdGVyT3B0aW9ufSA9IHByb3BzO1xuICBpZiAodHlwZW9mIHNlYXJjaE9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmlsdGVyT3B0aW9uICE9PSBudWxsKSB7XG4gICAgICBDb25zb2xlLndhcm4oJ3NlYXJjaE9wdGlvbnMgcHJvcCBpcyBiZWluZyB1c2VkLCBmaWx0ZXJPcHRpb24gcHJvcCB3aWxsIGJlIGlnbm9yZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaE9wdGlvbnM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlck9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIHVzZSBjdXN0b20gZmlsdGVyIG9wdGlvblxuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuZmlsdGVyKG8gPT4gZmlsdGVyT3B0aW9uKHZhbHVlLCBvKSk7XG4gIH1cblxuICBjb25zdCBtYXBwZXIgPVxuICAgIHR5cGVvZiBmaWx0ZXJPcHRpb24gPT09ICdzdHJpbmcnXG4gICAgICA/IEFjY2Vzc29yLmdlbmVyYXRlQWNjZXNzb3IoZmlsdGVyT3B0aW9uKVxuICAgICAgOiBBY2Nlc3Nvci5JREVOVElUWV9GTjtcblxuICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGZ1enp5LmZpbHRlcih2YWx1ZSwgb3B0aW9ucywge2V4dHJhY3Q6IG1hcHBlcn0pLm1hcChyZXMgPT4gb3B0aW9uc1tyZXMuaW5kZXhdKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2VhcmNoT3B0aW9uc09uSW5wdXQoaW5wdXRWYWx1ZSwgcHJvcHMpIHtcbiAgY29uc3Qgc2VhcmNoT3B0aW9ucyA9IGdlbmVyYXRlU2VhcmNoRnVuY3Rpb24ocHJvcHMpO1xuICByZXR1cm4gc2VhcmNoT3B0aW9ucyhpbnB1dFZhbHVlLCBwcm9wcy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3B0aW9uc0ZvclZhbHVlKHZhbHVlLCBwcm9wcywgc3RhdGUpIHtcbiAgY29uc3Qge29wdGlvbnMsIHNob3dPcHRpb25zV2hlbkVtcHR5fSA9IHByb3BzO1xuXG4gIGlmICghcHJvcHMuc2VhcmNoYWJsZSkge1xuICAgIC8vIGRpcmVjdGx5IHBhc3MgdGhyb3VnaCBvcHRpb25zIGlmIGNhbiBub3QgYmUgc2VhcmNoZWRcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuICBpZiAoc2hvdWxkU2tpcFNlYXJjaCh2YWx1ZSwgc3RhdGUsIHNob3dPcHRpb25zV2hlbkVtcHR5KSkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgY29uc3Qgc2VhcmNoT3B0aW9ucyA9IGdlbmVyYXRlU2VhcmNoRnVuY3Rpb24ocHJvcHMpO1xuICByZXR1cm4gc2VhcmNoT3B0aW9ucyh2YWx1ZSwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFNraXBTZWFyY2goaW5wdXQsIHN0YXRlLCBzaG93T3B0aW9uc1doZW5FbXB0eSkge1xuICBjb25zdCBlbXB0eVZhbHVlID0gIWlucHV0IHx8IGlucHV0LnRyaW0oKS5sZW5ndGggPT09IDA7XG5cbiAgLy8gdGhpcy5zdGF0ZSBtdXN0IGJlIGNoZWNrZWQgYmVjYXVzZSBpdCBtYXkgbm90IGJlIGRlZmluZWQgeWV0IGlmIHRoaXMgZnVuY3Rpb25cbiAgLy8gaXMgY2FsbGVkIGZyb20gd2l0aGluIGdldEluaXRpYWxTdGF0ZVxuICBjb25zdCBpc0ZvY3VzZWQgPSBzdGF0ZSAmJiBzdGF0ZS5pc0ZvY3VzZWQ7XG4gIHJldHVybiAhKHNob3dPcHRpb25zV2hlbkVtcHR5ICYmIGlzRm9jdXNlZCkgJiYgZW1wdHlWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIFR5cGVhaGVhZFByb3BzIHtcbiAgbmFtZT86IHN0cmluZztcbiAgY3VzdG9tQ2xhc3Nlcz86IGFueTtcbiAgcmVzdWx0c1RydW5jYXRlZE1lc3NhZ2U/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCB1bmRlZmluZWQ+O1xuICBmaXhlZE9wdGlvbnM/OiBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3Q+IHwgbnVsbDtcbiAgYWxsb3dDdXN0b21WYWx1ZXM/OiBudW1iZXI7XG4gIGluaXRpYWxWYWx1ZT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRleHRhcmVhPzogYm9vbGVhbjtcbiAgaW5wdXRQcm9wcz86IG9iamVjdDtcbiAgb25PcHRpb25TZWxlY3RlZD86IChvcHRpb246IGFueSwgZXZlbnQ6IGFueSkgPT4gYW55O1xuICBvbkNoYW5nZT86IChldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIG9uS2V5RG93bj86IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWQ7XG4gIG9uS2V5UHJlc3M/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uS2V5VXA/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uRm9jdXM/OiAoZXZlbnQ6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBvbkJsdXI/OiAoZXZlbnQ6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIGZpbHRlck9wdGlvbj86IHN0cmluZyB8IEZ1bmN0aW9uO1xuICBzZWFyY2hPcHRpb25zPzogRnVuY3Rpb247XG4gIGRpc3BsYXlPcHRpb24/OiBzdHJpbmcgfCBGdW5jdGlvbjtcbiAgaW5wdXREaXNwbGF5T3B0aW9uPzogc3RyaW5nIHwgRnVuY3Rpb247XG4gIGZvcm1JbnB1dE9wdGlvbj86IHN0cmluZyB8IEZ1bmN0aW9uO1xuICBkZWZhdWx0Q2xhc3NOYW1lcz86IGJvb2xlYW47XG4gIGN1c3RvbUxpc3RDb21wb25lbnQ/OiBFbGVtZW50VHlwZTtcbiAgY3VzdG9tTGlzdEl0ZW1Db21wb25lbnQ/OiBFbGVtZW50VHlwZSB8IEZ1bmN0aW9uO1xuICBjdXN0b21MaXN0SGVhZGVyQ29tcG9uZW50PzogRWxlbWVudFR5cGUgfCBGdW5jdGlvbiB8IG51bGw7XG4gIHNob3dPcHRpb25zV2hlbkVtcHR5PzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIGxpZ2h0PzogYm9vbGVhbjtcbiAgaW5wdXRJY29uOiBFbGVtZW50VHlwZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzZWxlY3RlZEl0ZW1zPzogYW55W10gfCBudWxsO1xuICAvLyBkZXByZWNhdGVkXG4gIG1heFZpc2libGU/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBUeXBlYWhlYWRTdGF0ZSB7XG4gIHNlYXJjaFJlc3VsdHM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IHVuZGVmaW5lZD47XG5cbiAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIHNvbWV0aGluZyBlbHNlLCAnZW50cnlWYWx1ZSdcbiAgZW50cnlWYWx1ZT86IHN0cmluZztcblxuICAvLyBBIHZhbGlkIHR5cGVhaGVhZCB2YWx1ZVxuICBzZWxlY3Rpb24/OiBzdHJpbmc7XG5cbiAgLy8gSW5kZXggb2YgdGhlIHNlbGVjdGlvblxuICBzZWxlY3Rpb25JbmRleDogbnVsbDtcblxuICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBmb2N1cyBzdGF0ZSBvZiB0aGUgaW5wdXQgZWxlbWVudCwgdG8gZGV0ZXJtaW5lXG4gIC8vIHdoZXRoZXIgdG8gc2hvdyBvcHRpb25zIHdoZW4gZW1wdHkgKGlmIHNob3dPcHRpb25zV2hlbkVtcHR5IGlzIHRydWUpXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuY2xhc3MgVHlwZWFoZWFkIGV4dGVuZHMgQ29tcG9uZW50PFR5cGVhaGVhZFByb3BzLCBUeXBlYWhlYWRTdGF0ZT4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG9wdGlvbnM6IFtdLFxuICAgIGN1c3RvbUNsYXNzZXM6IHt9LFxuICAgIGFsbG93Q3VzdG9tVmFsdWVzOiAwLFxuICAgIGluaXRpYWxWYWx1ZTogJycsXG4gICAgdmFsdWU6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgdGV4dGFyZWE6IGZhbHNlLFxuICAgIGlucHV0UHJvcHM6IHt9LFxuICAgIG9uT3B0aW9uU2VsZWN0ZWQob3B0aW9uKSB7fSxcbiAgICBvbkNoYW5nZShldmVudCkge30sXG4gICAgb25LZXlEb3duKGV2ZW50KSB7fSxcbiAgICBvbktleVByZXNzKGV2ZW50KSB7fSxcbiAgICBvbktleVVwKGV2ZW50KSB7fSxcbiAgICBvbkZvY3VzKGV2ZW50KSB7fSxcbiAgICBvbkJsdXIoZXZlbnQpIHt9LFxuICAgIGZpbHRlck9wdGlvbjogbnVsbCxcbiAgICBzZWFyY2hPcHRpb25zOiBudWxsLFxuICAgIGlucHV0RGlzcGxheU9wdGlvbjogbnVsbCxcbiAgICBkZWZhdWx0Q2xhc3NOYW1lczogdHJ1ZSxcbiAgICBjdXN0b21MaXN0Q29tcG9uZW50OiBEcm9wZG93bkxpc3QsXG4gICAgY3VzdG9tTGlzdEl0ZW1Db21wb25lbnQ6IExpc3RJdGVtLFxuICAgIGlucHV0SWNvbjogU2VhcmNoLFxuICAgIGN1c3RvbUxpc3RIZWFkZXJDb21wb25lbnQ6IG51bGwsXG4gICAgc2hvd09wdGlvbnNXaGVuRW1wdHk6IHRydWUsXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICByZXN1bHRzVHJ1bmNhdGVkTWVzc2FnZTogbnVsbFxuICB9O1xuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgaWYgKHByb3BzLm9wdGlvbnMgPT09IHN0YXRlLnByZXZPcHRpb25zKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gIGludm9rZWQgYWZ0ZXIgYSBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIGFzIHdlbGwgYXMgYmVmb3JlIGl0IGlzIHJlLXJlbmRlcmVkXG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGdldE9wdGlvbnNGb3JWYWx1ZShzdGF0ZS5lbnRyeVZhbHVlLCBwcm9wcywgc3RhdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaFJlc3VsdHMsXG4gICAgICBwcmV2T3B0aW9uczogcHJvcHMub3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAvLyBpbml0aWF0ZSBzZWFyY2hSZXN1bHRzIHdpdGggb3B0aW9uc1xuICAgICAgc2VhcmNoUmVzdWx0czogdGhpcy5wcm9wcy5vcHRpb25zIHx8IFtdLFxuXG4gICAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgc29tZXRoaW5nIGVsc2UsICdlbnRyeVZhbHVlJ1xuICAgICAgZW50cnlWYWx1ZTogdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnByb3BzLmluaXRpYWxWYWx1ZSxcblxuICAgICAgLy8gQSB2YWxpZCB0eXBlYWhlYWQgdmFsdWVcbiAgICAgIHNlbGVjdGlvbjogdGhpcy5wcm9wcy52YWx1ZSxcblxuICAgICAgLy8gSW5kZXggb2YgdGhlIHNlbGVjdGlvblxuICAgICAgc2VsZWN0aW9uSW5kZXg6IG51bGwsXG5cbiAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGZvY3VzIHN0YXRlIG9mIHRoZSBpbnB1dCBlbGVtZW50LCB0byBkZXRlcm1pbmVcbiAgICAgIC8vIHdoZXRoZXIgdG8gc2hvdyBvcHRpb25zIHdoZW4gZW1wdHkgKGlmIHNob3dPcHRpb25zV2hlbkVtcHR5IGlzIHRydWUpXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIGNhbGwgZm9jdXMgb24gZW50cnkgb3IgZGl2IHRvIHRyaWdnZXIga2V5IGV2ZW50cyBsaXN0ZW5lclxuICAgIGlmICh0aGlzLmVudHJ5LmN1cnJlbnQpIHtcbiAgICAgIHRoaXMuZW50cnkuY3VycmVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvb3QuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICByb290ID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICBlbnRyeSA9IGNyZWF0ZVJlZjxIVE1MSW5wdXRFbGVtZW50PigpO1xuXG4gIGZvY3VzID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmVudHJ5LmN1cnJlbnQpIHtcbiAgICAgIHRoaXMuZW50cnkuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBfaGFzQ3VzdG9tVmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIE51bWJlcih0aGlzLnByb3BzLmFsbG93Q3VzdG9tVmFsdWVzKSA+IDAgJiZcbiAgICAgIE51bWJlcih0aGlzLnN0YXRlLmVudHJ5VmFsdWU/Lmxlbmd0aCkgPj0gTnVtYmVyKHRoaXMucHJvcHMuYWxsb3dDdXN0b21WYWx1ZXMpICYmXG4gICAgICB0aGlzLnN0YXRlLnNlYXJjaFJlc3VsdHMuaW5kZXhPZih0aGlzLnN0YXRlLmVudHJ5VmFsdWUpIDwgMFxuICAgICk7XG4gIH07XG5cbiAgX2dldEN1c3RvbVZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9oYXNDdXN0b21WYWx1ZSgpID8gdGhpcy5zdGF0ZS5lbnRyeVZhbHVlIDogbnVsbDtcbiAgfTtcblxuICBfcmVuZGVySW5jcmVtZW50YWxTZWFyY2hSZXN1bHRzKCkge1xuICAgIGNvbnN0IHtjdXN0b21MaXN0Q29tcG9uZW50OiBDdXN0b21MaXN0Q29tcG9uZW50ID0gRHJvcGRvd25MaXN0fSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDdXN0b21MaXN0Q29tcG9uZW50XG4gICAgICAgIGZpeGVkT3B0aW9ucz17dGhpcy5wcm9wcy5maXhlZE9wdGlvbnN9XG4gICAgICAgIG9wdGlvbnM9e3RoaXMuc3RhdGUuc2VhcmNoUmVzdWx0c31cbiAgICAgICAgYXJlUmVzdWx0c1RydW5jYXRlZD17ZmFsc2V9XG4gICAgICAgIHJlc3VsdHNUcnVuY2F0ZWRNZXNzYWdlPXt0aGlzLnByb3BzLnJlc3VsdHNUcnVuY2F0ZWRNZXNzYWdlfVxuICAgICAgICBvbk9wdGlvblNlbGVjdGVkPXt0aGlzLl9vbk9wdGlvblNlbGVjdGVkfVxuICAgICAgICBhbGxvd0N1c3RvbVZhbHVlcz17dGhpcy5wcm9wcy5hbGxvd0N1c3RvbVZhbHVlc31cbiAgICAgICAgY3VzdG9tVmFsdWU9e3RoaXMuX2dldEN1c3RvbVZhbHVlKCl9XG4gICAgICAgIGN1c3RvbUNsYXNzZXM9e3RoaXMucHJvcHMuY3VzdG9tQ2xhc3Nlc31cbiAgICAgICAgY3VzdG9tTGlzdEl0ZW1Db21wb25lbnQ9e3RoaXMucHJvcHMuY3VzdG9tTGlzdEl0ZW1Db21wb25lbnR9XG4gICAgICAgIGN1c3RvbUxpc3RIZWFkZXJDb21wb25lbnQ9e3RoaXMucHJvcHMuY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudH1cbiAgICAgICAgc2VsZWN0aW9uSW5kZXg9e3RoaXMuc3RhdGUuc2VsZWN0aW9uSW5kZXh9XG4gICAgICAgIGRlZmF1bHRDbGFzc05hbWVzPXt0aGlzLnByb3BzLmRlZmF1bHRDbGFzc05hbWVzfVxuICAgICAgICBkaXNwbGF5T3B0aW9uPXt0aGlzLnByb3BzLmRpc3BsYXlPcHRpb259XG4gICAgICAgIHNlbGVjdGVkSXRlbXM9e3RoaXMucHJvcHMuc2VsZWN0ZWRJdGVtc31cbiAgICAgICAgbGlnaHQ9e3RoaXMucHJvcHMubGlnaHR9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICBnZXRTZWxlY3Rpb24oKSB7XG4gICAgbGV0IGluZGV4OiBudW1iZXIgfCBudWxsID0gdGhpcy5zdGF0ZS5zZWxlY3Rpb25JbmRleDtcbiAgICBpZiAoaW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpbmRleCA9IE51bWJlcihpbmRleCk7XG5cbiAgICBpZiAodGhpcy5faGFzQ3VzdG9tVmFsdWUoKSkge1xuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmVudHJ5VmFsdWU7XG4gICAgICB9XG4gICAgICBpbmRleC0tO1xuICAgIH1cbiAgICBpZiAodGhpcy5faGFzRml4ZWRPcHRpb25zKCkpIHtcbiAgICAgIHJldHVybiBpbmRleCA8IE51bWJlcih0aGlzLnByb3BzLmZpeGVkT3B0aW9ucz8ubGVuZ3RoKVxuICAgICAgICA/IHRoaXMucHJvcHMuZml4ZWRPcHRpb25zPy5baW5kZXhdXG4gICAgICAgIDogdGhpcy5zdGF0ZS5zZWFyY2hSZXN1bHRzW2luZGV4IC0gTnVtYmVyKHRoaXMucHJvcHMuZml4ZWRPcHRpb25zPy5sZW5ndGgpXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VhcmNoUmVzdWx0c1tpbmRleF07XG4gIH1cblxuICBfb25PcHRpb25TZWxlY3RlZCA9IChvcHRpb24sIGV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VhcmNoYWJsZSkge1xuICAgICAgLy8gcmVzZXQgZW50cnkgaW5wdXRcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAvLyByZXNldCBzZWFyY2ggb3B0aW9ucyB3aGVuIHNlbGVjdGlvbiBoYXMgYmVlbiBtYWRlXG4gICAgICAgIHNlYXJjaFJlc3VsdHM6IHRoaXMucHJvcHMub3B0aW9ucyB8fCBbXSxcbiAgICAgICAgc2VsZWN0aW9uOiAnJyxcbiAgICAgICAgZW50cnlWYWx1ZTogJydcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25PcHRpb25TZWxlY3RlZD8uKG9wdGlvbiwgZXZlbnQpO1xuICB9O1xuXG4gIC8vIHVzZSAoKSA9PiB7fSB0byBhdm9pZCBiaW5kaW5nICd0aGlzJ1xuICBfb25UZXh0RW50cnlVcGRhdGVkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLnNlYXJjaGFibGUpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5lbnRyeS5jdXJyZW50Py52YWx1ZTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFJlc3VsdHM6IHNlYXJjaE9wdGlvbnNPbklucHV0KHZhbHVlLCB0aGlzLnByb3BzKSxcbiAgICAgICAgc2VsZWN0aW9uOiAnJyxcbiAgICAgICAgZW50cnlWYWx1ZTogdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfb25FbnRlciA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnByb3BzLm9uS2V5RG93bj8uKGV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5fb25PcHRpb25TZWxlY3RlZChzZWxlY3Rpb24sIGV2ZW50KTtcbiAgfTtcblxuICBfb25Fc2NhcGUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3Rpb25JbmRleDogbnVsbFxuICAgIH0pO1xuICB9O1xuXG4gIF9vblRhYiA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGxldCBvcHRpb24gPSBzZWxlY3Rpb25cbiAgICAgID8gc2VsZWN0aW9uXG4gICAgICA6IHRoaXMuc3RhdGUuc2VhcmNoUmVzdWx0cy5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMuc3RhdGUuc2VhcmNoUmVzdWx0c1swXVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKG9wdGlvbiA9PT0gbnVsbCAmJiB0aGlzLl9oYXNDdXN0b21WYWx1ZSgpKSB7XG4gICAgICBvcHRpb24gPSB0aGlzLl9nZXRDdXN0b21WYWx1ZSgpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb24gIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKG9wdGlvbiwgZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBldmVudE1hcCA9ICgpID0+IHtcbiAgICBjb25zdCBldmVudHMgPSB7fTtcblxuICAgIGV2ZW50c1tLZXlFdmVudC5ET01fVktfVVBdID0gdGhpcy5uYXZVcDtcbiAgICBldmVudHNbS2V5RXZlbnQuRE9NX1ZLX0RPV05dID0gdGhpcy5uYXZEb3duO1xuICAgIGV2ZW50c1tLZXlFdmVudC5ET01fVktfUkVUVVJOXSA9IGV2ZW50c1tLZXlFdmVudC5ET01fVktfRU5URVJdID0gdGhpcy5fb25FbnRlcjtcbiAgICBldmVudHNbS2V5RXZlbnQuRE9NX1ZLX0VTQ0FQRV0gPSB0aGlzLl9vbkVzY2FwZTtcbiAgICBldmVudHNbS2V5RXZlbnQuRE9NX1ZLX1RBQl0gPSB0aGlzLl9vblRhYjtcblxuICAgIHJldHVybiBldmVudHM7XG4gIH07XG5cbiAgX25hdiA9IGRlbHRhID0+IHtcbiAgICBpZiAoIXRoaXMuX2hhc0hpbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbmV3SW5kZXggPVxuICAgICAgdGhpcy5zdGF0ZS5zZWxlY3Rpb25JbmRleCA9PT0gbnVsbFxuICAgICAgICA/IGRlbHRhID09PSAxXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBkZWx0YVxuICAgICAgICA6IHRoaXMuc3RhdGUuc2VsZWN0aW9uSW5kZXggKyBkZWx0YTtcbiAgICBsZXQgbGVuZ3RoID0gdGhpcy5wcm9wcy5tYXhWaXNpYmxlXG4gICAgICA/IHRoaXMuc3RhdGUuc2VhcmNoUmVzdWx0cy5zbGljZSgwLCB0aGlzLnByb3BzLm1heFZpc2libGUpLmxlbmd0aFxuICAgICAgOiB0aGlzLnN0YXRlLnNlYXJjaFJlc3VsdHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLl9oYXNDdXN0b21WYWx1ZSgpKSB7XG4gICAgICBsZW5ndGggKz0gMTtcbiAgICB9XG5cbiAgICBpZiAobmV3SW5kZXggPCAwKSB7XG4gICAgICBuZXdJbmRleCArPSBsZW5ndGg7XG4gICAgfSBlbHNlIGlmIChuZXdJbmRleCA+PSBsZW5ndGgpIHtcbiAgICAgIG5ld0luZGV4IC09IGxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtzZWxlY3Rpb25JbmRleDogbmV3SW5kZXh9KTtcbiAgfTtcblxuICBuYXZEb3duID0gKCkgPT4ge1xuICAgIHRoaXMuX25hdigxKTtcbiAgfTtcblxuICBuYXZVcCA9ICgpID0+IHtcbiAgICB0aGlzLl9uYXYoLTEpO1xuICB9O1xuXG4gIF9vbkNoYW5nZTogUmVhY3QuQ2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+ID0gZXZlbnQgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vblRleHRFbnRyeVVwZGF0ZWQoKTtcbiAgfTtcblxuICBfb25LZXlEb3duOiBSZWFjdC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD4gPSBldmVudCA9PiB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHZpc2libGUgZWxlbWVudHMsIGRvbid0IHBlcmZvcm0gc2VsZWN0b3IgbmF2aWdhdGlvbi5cbiAgICAvLyBKdXN0IHBhc3MgdGhpcyB1cCB0byB0aGUgdXBzdHJlYW0gb25LZXlkb3duIGhhbmRsZXIuXG4gICAgLy8gQWxzbyBza2lwIGlmIHRoZSB1c2VyIGlzIHByZXNzaW5nIHRoZSBzaGlmdCBrZXksIHNpbmNlIG5vbmUgb2Ygb3VyIGhhbmRsZXJzIGFyZSBsb29raW5nIGZvciBzaGlmdFxuICAgIGlmICghdGhpcy5faGFzSGludCgpIHx8IGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vbktleURvd24/LihldmVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZXZlbnRNYXAoKVtldmVudC5rZXlDb2RlXTtcblxuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMub25LZXlEb3duPy4oZXZlbnQpO1xuICAgIH1cbiAgICAvLyBEb24ndCBwcm9wYWdhdGUgdGhlIGtleXN0cm9rZSBiYWNrIHRvIHRoZSBET00vYnJvd3NlclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgX29uRm9jdXM6IFJlYWN0LkZvY3VzRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PiA9IGV2ZW50ID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtpc0ZvY3VzZWQ6IHRydWV9KTtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkZvY3VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgX29uQmx1cjogUmVhY3QuRm9jdXNFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4gPSBldmVudCA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7aXNGb2N1c2VkOiBmYWxzZX0pO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgX3JlbmRlckhpZGRlbklucHV0KCkge1xuICAgIGlmICghdGhpcy5wcm9wcy5uYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPXt0aGlzLnByb3BzLm5hbWV9IHZhbHVlPXt0aGlzLnN0YXRlLnNlbGVjdGlvbn0gLz47XG4gIH1cblxuICBfaGFzSGludCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDAgfHwgdGhpcy5faGFzQ3VzdG9tVmFsdWUoKTtcbiAgfVxuXG4gIF9oYXNGaXhlZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5maXhlZE9wdGlvbnMpICYmIHRoaXMucHJvcHMuZml4ZWRPcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBpbnB1dENsYXNzZXMgPSB7fTtcbiAgICBpbnB1dENsYXNzZXNbdGhpcy5wcm9wcy5jdXN0b21DbGFzc2VzPy5pbnB1dF0gPSBCb29sZWFuKHRoaXMucHJvcHMuY3VzdG9tQ2xhc3Nlcz8uaW5wdXQpO1xuICAgIGNvbnN0IGlucHV0Q2xhc3NMaXN0ID0gY2xhc3NOYW1lcyhpbnB1dENsYXNzZXMpO1xuXG4gICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgIFtERUZBVUxUX0NMQVNTXTogdGhpcy5wcm9wcy5kZWZhdWx0Q2xhc3NOYW1lc1xuICAgIH07XG4gICAgY2xhc3Nlc1t0aGlzLnByb3BzLmNsYXNzTmFtZSA/IHRoaXMucHJvcHMuY2xhc3NOYW1lIDogJyddID0gQm9vbGVhbih0aGlzLnByb3BzLmNsYXNzTmFtZSk7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gY2xhc3NOYW1lcyhjbGFzc2VzKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VHlwZWFoZWFkV3JhcHBlclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTGlzdH1cbiAgICAgICAgcmVmPXt0aGlzLnJvb3R9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICBvbktleURvd249e3RoaXMuX29uS2V5RG93bn1cbiAgICAgICAgb25LZXlQcmVzcz17dGhpcy5wcm9wcy5vbktleVByZXNzfVxuICAgICAgICBvbktleVVwPXt0aGlzLnByb3BzLm9uS2V5VXB9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuX29uRm9jdXN9XG4gICAgICAgIGxpZ2h0PXt0aGlzLnByb3BzLmxpZ2h0fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5fcmVuZGVySGlkZGVuSW5wdXQoKX1cbiAgICAgICAge3RoaXMucHJvcHMuc2VhcmNoYWJsZSA/IChcbiAgICAgICAgICA8SW5wdXRCb3g+XG4gICAgICAgICAgICA8VHlwZWFoZWFkSW5wdXRcbiAgICAgICAgICAgICAgcmVmPXt0aGlzLmVudHJ5fVxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wcy5pbnB1dFByb3BzfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtpbnB1dENsYXNzTGlzdH1cbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZW50cnlWYWx1ZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuX29uQ2hhbmdlfVxuICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMuX29uQmx1cn1cbiAgICAgICAgICAgICAgbGlnaHQ9e3RoaXMucHJvcHMubGlnaHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPElucHV0SWNvbj5cbiAgICAgICAgICAgICAgPHRoaXMucHJvcHMuaW5wdXRJY29uIGhlaWdodD1cIjE4cHhcIiAvPlxuICAgICAgICAgICAgPC9JbnB1dEljb24+XG4gICAgICAgICAgPC9JbnB1dEJveD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHt0aGlzLl9yZW5kZXJJbmNyZW1lbnRhbFNlYXJjaFJlc3VsdHMoKX1cbiAgICAgIDwvVHlwZWFoZWFkV3JhcHBlcj5cbiAgICApO1xuICB9XG59XG5cbnBvbHlmaWxsKFR5cGVhaGVhZCk7XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVhaGVhZDtcbiJdfQ==
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { LineSeriesPoint, RVNearestXData } from 'react-vis';
3
3
  import { LineChart } from '@kepler.gl/types';
4
4
  export interface HoverDP {
@@ -30,5 +30,5 @@ interface LineChartProps {
30
30
  timezone?: string | null;
31
31
  timeFormat?: string;
32
32
  }
33
- declare function LineChartFactory(): ({ brushComponent, brushing, color, enableChartHover, height, hoveredDP, isEnlarged, lineChart, margin, onMouseMove, width, timezone, timeFormat }: LineChartProps) => JSX.Element;
33
+ declare function LineChartFactory(): ({ brushComponent, brushing, color, enableChartHover, height, hoveredDP, isEnlarged, lineChart, margin, onMouseMove, width, timezone, timeFormat }: LineChartProps) => React.JSX.Element;
34
34
  export default LineChartFactory;