@carto/kepler.gl 0.0.86-alpha.deck9.1 → 0.0.86

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