@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
@@ -95,9 +95,9 @@ var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
95
95
  */
96
96
  function layerConfigChange(oldLayer, newConfig) {
97
97
  return {
98
- type: _actionTypes.default.LAYER_CONFIG_CHANGE,
99
- oldLayer,
100
- newConfig
98
+ type: _actionTypes["default"].LAYER_CONFIG_CHANGE,
99
+ oldLayer: oldLayer,
100
+ newConfig: newConfig
101
101
  };
102
102
  }
103
103
  /**
@@ -111,11 +111,11 @@ function layerConfigChange(oldLayer, newConfig) {
111
111
  */
112
112
  function layerTextLabelChange(oldLayer, idx, prop, value) {
113
113
  return {
114
- type: _actionTypes.default.LAYER_TEXT_LABEL_CHANGE,
115
- oldLayer,
116
- idx,
117
- prop,
118
- value
114
+ type: _actionTypes["default"].LAYER_TEXT_LABEL_CHANGE,
115
+ oldLayer: oldLayer,
116
+ idx: idx,
117
+ prop: prop,
118
+ value: value
119
119
  };
120
120
  }
121
121
  /**
@@ -127,9 +127,9 @@ function layerTextLabelChange(oldLayer, idx, prop, value) {
127
127
  */
128
128
  function layerTypeChange(oldLayer, newType) {
129
129
  return {
130
- type: _actionTypes.default.LAYER_TYPE_CHANGE,
131
- oldLayer,
132
- newType
130
+ type: _actionTypes["default"].LAYER_TYPE_CHANGE,
131
+ oldLayer: oldLayer,
132
+ newType: newType
133
133
  };
134
134
  }
135
135
  /**
@@ -143,10 +143,10 @@ function layerTypeChange(oldLayer, newType) {
143
143
  */
144
144
  function layerVisualChannelConfigChange(oldLayer, newConfig, channel) {
145
145
  return {
146
- type: _actionTypes.default.LAYER_VISUAL_CHANNEL_CHANGE,
147
- oldLayer,
148
- newConfig,
149
- channel
146
+ type: _actionTypes["default"].LAYER_VISUAL_CHANNEL_CHANGE,
147
+ oldLayer: oldLayer,
148
+ newConfig: newConfig,
149
+ channel: channel
150
150
  };
151
151
  }
152
152
  /**
@@ -159,9 +159,9 @@ function layerVisualChannelConfigChange(oldLayer, newConfig, channel) {
159
159
  */
160
160
  function layerVisConfigChange(oldLayer, newVisConfig) {
161
161
  return {
162
- type: _actionTypes.default.LAYER_VIS_CONFIG_CHANGE,
163
- oldLayer,
164
- newVisConfig
162
+ type: _actionTypes["default"].LAYER_VIS_CONFIG_CHANGE,
163
+ oldLayer: oldLayer,
164
+ newVisConfig: newVisConfig
165
165
  };
166
166
  }
167
167
  /**
@@ -175,10 +175,10 @@ function layerVisConfigChange(oldLayer, newVisConfig) {
175
175
  */
176
176
  function layerColorUIChange(oldLayer, prop, newConfig) {
177
177
  return {
178
- type: _actionTypes.default.LAYER_COLOR_UI_CHANGE,
179
- oldLayer,
180
- prop,
181
- newConfig
178
+ type: _actionTypes["default"].LAYER_COLOR_UI_CHANGE,
179
+ oldLayer: oldLayer,
180
+ prop: prop,
181
+ newConfig: newConfig
182
182
  };
183
183
  }
184
184
  /**
@@ -190,8 +190,8 @@ function layerColorUIChange(oldLayer, prop, newConfig) {
190
190
  */
191
191
  function updateLayerBlending(mode) {
192
192
  return {
193
- type: _actionTypes.default.UPDATE_LAYER_BLENDING,
194
- mode
193
+ type: _actionTypes["default"].UPDATE_LAYER_BLENDING,
194
+ mode: mode
195
195
  };
196
196
  }
197
197
  /**
@@ -203,8 +203,8 @@ function updateLayerBlending(mode) {
203
203
  */
204
204
  function interactionConfigChange(config) {
205
205
  return {
206
- type: _actionTypes.default.INTERACTION_CONFIG_CHANGE,
207
- config
206
+ type: _actionTypes["default"].INTERACTION_CONFIG_CHANGE,
207
+ config: config
208
208
  };
209
209
  }
210
210
  /**
@@ -219,11 +219,11 @@ function interactionConfigChange(config) {
219
219
  */
220
220
  function setFilter(idx, prop, value, valueIndex) {
221
221
  return {
222
- type: _actionTypes.default.SET_FILTER,
223
- idx,
224
- prop,
225
- value,
226
- valueIndex
222
+ type: _actionTypes["default"].SET_FILTER,
223
+ idx: idx,
224
+ prop: prop,
225
+ value: value,
226
+ valueIndex: valueIndex
227
227
  };
228
228
  }
229
229
  /**
@@ -238,11 +238,11 @@ function setFilter(idx, prop, value, valueIndex) {
238
238
  */
239
239
  function setFilterAnimationTime(idx, prop, value, valueIndex) {
240
240
  return {
241
- type: _actionTypes.default.SET_FILTER_ANIMATION_TIME,
242
- idx,
243
- prop,
244
- value,
245
- valueIndex
241
+ type: _actionTypes["default"].SET_FILTER_ANIMATION_TIME,
242
+ idx: idx,
243
+ prop: prop,
244
+ value: value,
245
+ valueIndex: valueIndex
246
246
  };
247
247
  }
248
248
  /**
@@ -251,14 +251,12 @@ function setFilterAnimationTime(idx, prop, value, valueIndex) {
251
251
  * @public
252
252
  */
253
253
  function setFilterAnimationWindow(_ref) {
254
- let {
255
- id,
256
- animationWindow
257
- } = _ref;
254
+ var id = _ref.id,
255
+ animationWindow = _ref.animationWindow;
258
256
  return {
259
- type: _actionTypes.default.SET_FILTER_ANIMATION_WINDOW,
260
- id,
261
- animationWindow
257
+ type: _actionTypes["default"].SET_FILTER_ANIMATION_WINDOW,
258
+ id: id,
259
+ animationWindow: animationWindow
262
260
  };
263
261
  }
264
262
  /**
@@ -270,8 +268,8 @@ function setFilterAnimationWindow(_ref) {
270
268
  */
271
269
  function addFilter(dataId) {
272
270
  return {
273
- type: _actionTypes.default.ADD_FILTER,
274
- dataId
271
+ type: _actionTypes["default"].ADD_FILTER,
272
+ dataId: dataId
275
273
  };
276
274
  }
277
275
  /**
@@ -284,9 +282,9 @@ function addFilter(dataId) {
284
282
  */
285
283
  function addLayer(config, datasetId) {
286
284
  return {
287
- type: _actionTypes.default.ADD_LAYER,
288
- config,
289
- datasetId
285
+ type: _actionTypes["default"].ADD_LAYER,
286
+ config: config,
287
+ datasetId: datasetId
290
288
  };
291
289
  }
292
290
  /**
@@ -303,8 +301,8 @@ function addLayer(config, datasetId) {
303
301
  */
304
302
  function reorderLayer(order) {
305
303
  return {
306
- type: _actionTypes.default.REORDER_LAYER,
307
- order
304
+ type: _actionTypes["default"].REORDER_LAYER,
305
+ order: order
308
306
  };
309
307
  }
310
308
  /**
@@ -316,8 +314,8 @@ function reorderLayer(order) {
316
314
  */
317
315
  function removeFilter(idx) {
318
316
  return {
319
- type: _actionTypes.default.REMOVE_FILTER,
320
- idx
317
+ type: _actionTypes["default"].REMOVE_FILTER,
318
+ idx: idx
321
319
  };
322
320
  }
323
321
  /**
@@ -329,8 +327,8 @@ function removeFilter(idx) {
329
327
  */
330
328
  function removeLayer(idx) {
331
329
  return {
332
- type: _actionTypes.default.REMOVE_LAYER,
333
- idx
330
+ type: _actionTypes["default"].REMOVE_LAYER,
331
+ idx: idx
334
332
  };
335
333
  }
336
334
  /**
@@ -342,8 +340,8 @@ function removeLayer(idx) {
342
340
  */
343
341
  function duplicateLayer(idx) {
344
342
  return {
345
- type: _actionTypes.default.DUPLICATE_LAYER,
346
- idx
343
+ type: _actionTypes["default"].DUPLICATE_LAYER,
344
+ idx: idx
347
345
  };
348
346
  }
349
347
  /**
@@ -355,8 +353,8 @@ function duplicateLayer(idx) {
355
353
  */
356
354
  function removeDataset(dataId) {
357
355
  return {
358
- type: _actionTypes.default.REMOVE_DATASET,
359
- dataId
356
+ type: _actionTypes["default"].REMOVE_DATASET,
357
+ dataId: dataId
360
358
  };
361
359
  }
362
360
  /**
@@ -368,8 +366,8 @@ function removeDataset(dataId) {
368
366
  */
369
367
  function showDatasetTable(dataId) {
370
368
  return {
371
- type: _actionTypes.default.SHOW_DATASET_TABLE,
372
- dataId
369
+ type: _actionTypes["default"].SHOW_DATASET_TABLE,
370
+ dataId: dataId
373
371
  };
374
372
  }
375
373
  /**
@@ -382,9 +380,9 @@ function showDatasetTable(dataId) {
382
380
  */
383
381
  function updateTableColor(dataId, newColor) {
384
382
  return {
385
- type: _actionTypes.default.UPDATE_TABLE_COLOR,
386
- dataId,
387
- newColor
383
+ type: _actionTypes["default"].UPDATE_TABLE_COLOR,
384
+ dataId: dataId,
385
+ newColor: newColor
388
386
  };
389
387
  }
390
388
  /**
@@ -398,10 +396,10 @@ function updateTableColor(dataId, newColor) {
398
396
  */
399
397
  function sortTableColumn(dataId, column, mode) {
400
398
  return {
401
- type: _actionTypes.default.SORT_TABLE_COLUMN,
402
- dataId,
403
- column,
404
- mode
399
+ type: _actionTypes["default"].SORT_TABLE_COLUMN,
400
+ dataId: dataId,
401
+ column: column,
402
+ mode: mode
405
403
  };
406
404
  }
407
405
  /**
@@ -413,9 +411,9 @@ function sortTableColumn(dataId, column, mode) {
413
411
  */
414
412
  function pinTableColumn(dataId, column) {
415
413
  return {
416
- type: _actionTypes.default.PIN_TABLE_COLUMN,
417
- dataId,
418
- column
414
+ type: _actionTypes["default"].PIN_TABLE_COLUMN,
415
+ dataId: dataId,
416
+ column: column
419
417
  };
420
418
  }
421
419
  /**
@@ -427,9 +425,9 @@ function pinTableColumn(dataId, column) {
427
425
  */
428
426
  function copyTableColumn(dataId, column) {
429
427
  return {
430
- type: _actionTypes.default.COPY_TABLE_COLUMN,
431
- dataId,
432
- column
428
+ type: _actionTypes["default"].COPY_TABLE_COLUMN,
429
+ dataId: dataId,
430
+ column: column
433
431
  };
434
432
  }
435
433
  // * @param dataset.info -info of a dataset
@@ -455,10 +453,10 @@ function copyTableColumn(dataId, column) {
455
453
  */
456
454
  function updateVisData(datasets, options, config) {
457
455
  return {
458
- type: _actionTypes.default.UPDATE_VIS_DATA,
459
- datasets,
460
- options,
461
- config
456
+ type: _actionTypes["default"].UPDATE_VIS_DATA,
457
+ datasets: datasets,
458
+ options: options,
459
+ config: config
462
460
  };
463
461
  }
464
462
  /**
@@ -471,9 +469,9 @@ function updateVisData(datasets, options, config) {
471
469
  */
472
470
  function renameDataset(dataId, label) {
473
471
  return {
474
- type: _actionTypes.default.RENAME_DATASET,
475
- dataId,
476
- label
472
+ type: _actionTypes["default"].RENAME_DATASET,
473
+ dataId: dataId,
474
+ label: label
477
475
  };
478
476
  }
479
477
  /**
@@ -485,8 +483,8 @@ function renameDataset(dataId, label) {
485
483
  */
486
484
  function toggleFilterAnimation(idx) {
487
485
  return {
488
- type: _actionTypes.default.TOGGLE_FILTER_ANIMATION,
489
- idx
486
+ type: _actionTypes["default"].TOGGLE_FILTER_ANIMATION,
487
+ idx: idx
490
488
  };
491
489
  }
492
490
  /**
@@ -499,9 +497,9 @@ function toggleFilterAnimation(idx) {
499
497
  */
500
498
  function updateFilterAnimationSpeed(idx, speed) {
501
499
  return {
502
- type: _actionTypes.default.UPDATE_FILTER_ANIMATION_SPEED,
503
- idx,
504
- speed
500
+ type: _actionTypes["default"].UPDATE_FILTER_ANIMATION_SPEED,
501
+ idx: idx,
502
+ speed: speed
505
503
  };
506
504
  }
507
505
  /**
@@ -513,8 +511,8 @@ function updateFilterAnimationSpeed(idx, speed) {
513
511
  */
514
512
  function setLayerAnimationTime(value) {
515
513
  return {
516
- type: _actionTypes.default.SET_LAYER_ANIMATION_TIME,
517
- value
514
+ type: _actionTypes["default"].SET_LAYER_ANIMATION_TIME,
515
+ value: value
518
516
  };
519
517
  }
520
518
  /**
@@ -526,8 +524,8 @@ function setLayerAnimationTime(value) {
526
524
  */
527
525
  function updateLayerAnimationSpeed(speed) {
528
526
  return {
529
- type: _actionTypes.default.UPDATE_LAYER_ANIMATION_SPEED,
530
- speed
527
+ type: _actionTypes["default"].UPDATE_LAYER_ANIMATION_SPEED,
528
+ speed: speed
531
529
  };
532
530
  }
533
531
  /**
@@ -538,7 +536,7 @@ function updateLayerAnimationSpeed(speed) {
538
536
  */
539
537
  function toggleLayerAnimation() {
540
538
  return {
541
- type: _actionTypes.default.TOGGLE_LAYER_ANIMATION
539
+ type: _actionTypes["default"].TOGGLE_LAYER_ANIMATION
542
540
  };
543
541
  }
544
542
  /**
@@ -549,7 +547,7 @@ function toggleLayerAnimation() {
549
547
  */
550
548
  function toggleLayerAnimationControl() {
551
549
  return {
552
- type: _actionTypes.default.TOGGLE_LAYER_ANIMATION_CONTROL
550
+ type: _actionTypes["default"].TOGGLE_LAYER_ANIMATION_CONTROL
553
551
  };
554
552
  }
555
553
  /**
@@ -561,8 +559,8 @@ function toggleLayerAnimationControl() {
561
559
  */
562
560
  function enlargeFilter(idx) {
563
561
  return {
564
- type: _actionTypes.default.ENLARGE_FILTER,
565
- idx
562
+ type: _actionTypes["default"].ENLARGE_FILTER,
563
+ idx: idx
566
564
  };
567
565
  }
568
566
  /**
@@ -573,8 +571,8 @@ function enlargeFilter(idx) {
573
571
  */
574
572
  function toggleFilterFeature(idx) {
575
573
  return {
576
- type: _actionTypes.default.TOGGLE_FILTER_FEATURE,
577
- idx
574
+ type: _actionTypes["default"].TOGGLE_FILTER_FEATURE,
575
+ idx: idx
578
576
  };
579
577
  }
580
578
  /**
@@ -586,8 +584,8 @@ function toggleFilterFeature(idx) {
586
584
  */
587
585
  function onLayerHover(info) {
588
586
  return {
589
- type: _actionTypes.default.LAYER_HOVER,
590
- info
587
+ type: _actionTypes["default"].LAYER_HOVER,
588
+ info: info
591
589
  };
592
590
  }
593
591
  /**
@@ -599,8 +597,8 @@ function onLayerHover(info) {
599
597
  */
600
598
  function onLayerClick(info) {
601
599
  return {
602
- type: _actionTypes.default.LAYER_CLICK,
603
- info
600
+ type: _actionTypes["default"].LAYER_CLICK,
601
+ info: info
604
602
  };
605
603
  }
606
604
  /**
@@ -611,7 +609,7 @@ function onLayerClick(info) {
611
609
  */
612
610
  function onMapClick() {
613
611
  return {
614
- type: _actionTypes.default.MAP_CLICK
612
+ type: _actionTypes["default"].MAP_CLICK
615
613
  };
616
614
  }
617
615
  /**
@@ -626,8 +624,8 @@ function onMapClick() {
626
624
  */
627
625
  function onMouseMove(evt) {
628
626
  return {
629
- type: _actionTypes.default.MOUSE_MOVE,
630
- evt
627
+ type: _actionTypes["default"].MOUSE_MOVE,
628
+ evt: evt
631
629
  };
632
630
  }
633
631
  /**
@@ -640,9 +638,9 @@ function onMouseMove(evt) {
640
638
  */
641
639
  function toggleLayerForMap(mapIndex, layerId) {
642
640
  return {
643
- type: _actionTypes.default.TOGGLE_LAYER_FOR_MAP,
644
- mapIndex,
645
- layerId
641
+ type: _actionTypes["default"].TOGGLE_LAYER_FOR_MAP,
642
+ mapIndex: mapIndex,
643
+ layerId: layerId
646
644
  };
647
645
  }
648
646
  /**
@@ -656,10 +654,10 @@ function toggleLayerForMap(mapIndex, layerId) {
656
654
  */
657
655
  function setFilterPlot(idx, newProp, valueIndex) {
658
656
  return {
659
- type: _actionTypes.default.SET_FILTER_PLOT,
660
- idx,
661
- newProp,
662
- valueIndex
657
+ type: _actionTypes["default"].SET_FILTER_PLOT,
658
+ idx: idx,
659
+ newProp: newProp,
660
+ valueIndex: valueIndex
663
661
  };
664
662
  }
665
663
  /**
@@ -671,8 +669,8 @@ function setFilterPlot(idx, newProp, valueIndex) {
671
669
  */
672
670
  function setMapInfo(info) {
673
671
  return {
674
- type: _actionTypes.default.SET_MAP_INFO,
675
- info
672
+ type: _actionTypes["default"].SET_MAP_INFO,
673
+ info: info
676
674
  };
677
675
  }
678
676
  /**
@@ -684,9 +682,9 @@ function setMapInfo(info) {
684
682
  */
685
683
  function loadFiles(files, onFinish) {
686
684
  return {
687
- type: _actionTypes.default.LOAD_FILES,
688
- files,
689
- onFinish
685
+ type: _actionTypes["default"].LOAD_FILES,
686
+ files: files,
687
+ onFinish: onFinish
690
688
  };
691
689
  }
692
690
 
@@ -698,7 +696,7 @@ function loadFiles(files, onFinish) {
698
696
  */
699
697
  function loadNextFile() {
700
698
  return {
701
- type: _actionTypes.default.LOAD_NEXT_FILE
699
+ type: _actionTypes["default"].LOAD_NEXT_FILE
702
700
  };
703
701
  }
704
702
  /**
@@ -709,8 +707,8 @@ function loadNextFile() {
709
707
  */
710
708
  function loadFilesSuccess(result) {
711
709
  return {
712
- type: _actionTypes.default.LOAD_FILES_SUCCESS,
713
- result
710
+ type: _actionTypes["default"].LOAD_FILES_SUCCESS,
711
+ result: result
714
712
  };
715
713
  }
716
714
  /**
@@ -720,14 +718,12 @@ function loadFilesSuccess(result) {
720
718
  * @returns action
721
719
  */
722
720
  function loadFileStepSuccess(_ref2) {
723
- let {
724
- fileName,
725
- fileCache
726
- } = _ref2;
721
+ var fileName = _ref2.fileName,
722
+ fileCache = _ref2.fileCache;
727
723
  return {
728
- type: _actionTypes.default.LOAD_FILE_STEP_SUCCESS,
729
- fileName,
730
- fileCache
724
+ type: _actionTypes["default"].LOAD_FILE_STEP_SUCCESS,
725
+ fileName: fileName,
726
+ fileCache: fileCache
731
727
  };
732
728
  }
733
729
  /**
@@ -740,9 +736,9 @@ function loadFileStepSuccess(_ref2) {
740
736
 
741
737
  function loadFilesErr(fileName, error) {
742
738
  return {
743
- type: _actionTypes.default.LOAD_FILES_ERR,
744
- fileName,
745
- error
739
+ type: _actionTypes["default"].LOAD_FILES_ERR,
740
+ fileName: fileName,
741
+ error: error
746
742
  };
747
743
  }
748
744
  /**
@@ -753,8 +749,8 @@ function loadFilesErr(fileName, error) {
753
749
  */
754
750
  function setFeatures(features) {
755
751
  return {
756
- type: _actionTypes.default.SET_FEATURES,
757
- features
752
+ type: _actionTypes["default"].SET_FEATURES,
753
+ features: features
758
754
  };
759
755
  }
760
756
  /**
@@ -767,9 +763,9 @@ function setFeatures(features) {
767
763
  */
768
764
  function setPolygonFilterLayer(layer, feature) {
769
765
  return {
770
- type: _actionTypes.default.SET_POLYGON_FILTER_LAYER,
771
- layer,
772
- feature
766
+ type: _actionTypes["default"].SET_POLYGON_FILTER_LAYER,
767
+ layer: layer,
768
+ feature: feature
773
769
  };
774
770
  }
775
771
  /**
@@ -780,8 +776,8 @@ function setPolygonFilterLayer(layer, feature) {
780
776
  */
781
777
  function setSelectedFeature(feature) {
782
778
  return {
783
- type: _actionTypes.default.SET_SELECTED_FEATURE,
784
- feature
779
+ type: _actionTypes["default"].SET_SELECTED_FEATURE,
780
+ feature: feature
785
781
  };
786
782
  }
787
783
  /**
@@ -792,8 +788,8 @@ function setSelectedFeature(feature) {
792
788
  */
793
789
  function deleteFeature(feature) {
794
790
  return {
795
- type: _actionTypes.default.DELETE_FEATURE,
796
- feature
791
+ type: _actionTypes["default"].DELETE_FEATURE,
792
+ feature: feature
797
793
  };
798
794
  }
799
795
  /** Set the map mode
@@ -809,8 +805,8 @@ function deleteFeature(feature) {
809
805
  */
810
806
  function setEditorMode(mode) {
811
807
  return {
812
- type: _actionTypes.default.SET_EDITOR_MODE,
813
- mode
808
+ type: _actionTypes["default"].SET_EDITOR_MODE,
809
+ mode: mode
814
810
  };
815
811
  }
816
812
  /**
@@ -822,8 +818,8 @@ function setEditorMode(mode) {
822
818
  */
823
819
  function applyCPUFilter(dataId) {
824
820
  return {
825
- type: _actionTypes.default.APPLY_CPU_FILTER,
826
- dataId
821
+ type: _actionTypes["default"].APPLY_CPU_FILTER,
822
+ dataId: dataId
827
823
  };
828
824
  }
829
825
  /**
@@ -833,7 +829,7 @@ function applyCPUFilter(dataId) {
833
829
  */
834
830
  function toggleEditorVisibility() {
835
831
  return {
836
- type: _actionTypes.default.TOGGLE_EDITOR_VISIBILITY
832
+ type: _actionTypes["default"].TOGGLE_EDITOR_VISIBILITY
837
833
  };
838
834
  }
839
835
  /**
@@ -844,8 +840,8 @@ function toggleEditorVisibility() {
844
840
  */
845
841
  function nextFileBatch(payload) {
846
842
  return {
847
- type: _actionTypes.default.NEXT_FILE_BATCH,
848
- payload
843
+ type: _actionTypes["default"].NEXT_FILE_BATCH,
844
+ payload: payload
849
845
  };
850
846
  }
851
847
  /**
@@ -856,8 +852,8 @@ function nextFileBatch(payload) {
856
852
  */
857
853
  function processFileContent(payload) {
858
854
  return {
859
- type: _actionTypes.default.PROCESS_FILE_CONTENT,
860
- payload
855
+ type: _actionTypes["default"].PROCESS_FILE_CONTENT,
856
+ payload: payload
861
857
  };
862
858
  }
863
859
  /**
@@ -868,8 +864,8 @@ function processFileContent(payload) {
868
864
  */
869
865
  function setLayerAnimationTimeConfig(config) {
870
866
  return {
871
- type: _actionTypes.default.SET_LAYER_ANIMATION_TIME_CONFIG,
872
- config
867
+ type: _actionTypes["default"].SET_LAYER_ANIMATION_TIME_CONFIG,
868
+ config: config
873
869
  };
874
870
  }
875
871
  /**
@@ -881,9 +877,9 @@ function setLayerAnimationTimeConfig(config) {
881
877
  */
882
878
  function setFilterAnimationTimeConfig(idx, config) {
883
879
  return {
884
- type: _actionTypes.default.SET_FILTER_ANIMATION_TIME_CONFIG,
885
- idx,
886
- config
880
+ type: _actionTypes["default"].SET_FILTER_ANIMATION_TIME_CONFIG,
881
+ idx: idx,
882
+ config: config
887
883
  };
888
884
  }
889
885
 
@@ -899,6 +895,6 @@ function setFilterAnimationTimeConfig(idx, config) {
899
895
  */
900
896
  /* eslint-disable no-unused-vars */
901
897
  // @ts-ignore
902
- const visStateActions = null;
898
+ var visStateActions = null;
903
899
  /* eslint-enable no-unused-vars */
904
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImxheWVyQ29uZmlnQ2hhbmdlIiwib2xkTGF5ZXIiLCJuZXdDb25maWciLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJMQVlFUl9DT05GSUdfQ0hBTkdFIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2UiLCJpZHgiLCJwcm9wIiwidmFsdWUiLCJMQVlFUl9URVhUX0xBQkVMX0NIQU5HRSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZSIsImNvbmZpZyIsIklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0UiLCJzZXRGaWx0ZXIiLCJ2YWx1ZUluZGV4IiwiU0VUX0ZJTFRFUiIsInNldEZpbHRlckFuaW1hdGlvblRpbWUiLCJTRVRfRklMVEVSX0FOSU1BVElPTl9USU1FIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwiX3JlZiIsImlkIiwiYW5pbWF0aW9uV2luZG93IiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XIiwiYWRkRmlsdGVyIiwiZGF0YUlkIiwiQUREX0ZJTFRFUiIsImFkZExheWVyIiwiZGF0YXNldElkIiwiQUREX0xBWUVSIiwicmVvcmRlckxheWVyIiwib3JkZXIiLCJSRU9SREVSX0xBWUVSIiwicmVtb3ZlRmlsdGVyIiwiUkVNT1ZFX0ZJTFRFUiIsInJlbW92ZUxheWVyIiwiUkVNT1ZFX0xBWUVSIiwiZHVwbGljYXRlTGF5ZXIiLCJEVVBMSUNBVEVfTEFZRVIiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInRvZ2dsZUZpbHRlckFuaW1hdGlvbiIsIlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJzcGVlZCIsIlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lIiwiU0VUX0xBWUVSX0FOSU1BVElPTl9USU1FIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZCIsIlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQiLCJ0b2dnbGVMYXllckFuaW1hdGlvbiIsIlRPR0dMRV9MQVlFUl9BTklNQVRJT04iLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2wiLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OX0NPTlRST0wiLCJlbmxhcmdlRmlsdGVyIiwiRU5MQVJHRV9GSUxURVIiLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIkxBWUVSX0hPVkVSIiwib25MYXllckNsaWNrIiwiTEFZRVJfQ0xJQ0siLCJvbk1hcENsaWNrIiwiTUFQX0NMSUNLIiwib25Nb3VzZU1vdmUiLCJldnQiLCJNT1VTRV9NT1ZFIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJtYXBJbmRleCIsImxheWVySWQiLCJUT0dHTEVfTEFZRVJfRk9SX01BUCIsInNldEZpbHRlclBsb3QiLCJuZXdQcm9wIiwiU0VUX0ZJTFRFUl9QTE9UIiwic2V0TWFwSW5mbyIsIlNFVF9NQVBfSU5GTyIsImxvYWRGaWxlcyIsImZpbGVzIiwib25GaW5pc2giLCJMT0FEX0ZJTEVTIiwibG9hZE5leHRGaWxlIiwiTE9BRF9ORVhUX0ZJTEUiLCJsb2FkRmlsZXNTdWNjZXNzIiwicmVzdWx0IiwiTE9BRF9GSUxFU19TVUNDRVNTIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsIl9yZWYyIiwiZmlsZU5hbWUiLCJmaWxlQ2FjaGUiLCJMT0FEX0ZJTEVfU1RFUF9TVUNDRVNTIiwibG9hZEZpbGVzRXJyIiwiZXJyb3IiLCJMT0FEX0ZJTEVTX0VSUiIsInNldEZlYXR1cmVzIiwiZmVhdHVyZXMiLCJTRVRfRkVBVFVSRVMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJsYXllciIsImZlYXR1cmUiLCJTRVRfUE9MWUdPTl9GSUxURVJfTEFZRVIiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJ2aXNTdGF0ZUFjdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vLyB2aXMtc3RhdGUtcmVkdWNlclxuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJ2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtBZGREYXRhVG9NYXBQYXlsb2FkfSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHtGaWxlQ2FjaGVJdGVtfSBmcm9tICcuLi9wcm9jZXNzb3JzL3R5cGVzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQmFzZUNvbmZpZywgTGF5ZXJWaXNDb25maWd9IGZyb20gJ2xheWVycyc7XG5pbXBvcnQge0ZlYXR1cmUsIEludGVyYWN0aW9uQ29uZmlnfSBmcm9tICdyZWR1Y2Vycy92aXMtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtWYWx1ZU9mLCBNZXJnZSwgUkdCQ29sb3IsIE5lc3RlZFBhcnRpYWx9IGZyb20gJy4uL3JlZHVjZXJzL3R5cGVzJztcbmltcG9ydCB7Q29sb3JVSX0gZnJvbSAnbGF5ZXJzL2xheWVyLWZhY3RvcnknO1xuLy8gVE9ETyAtIGltcG9ydCBMb2FkZXJPYmplY3QgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcbi8vIFRPRE8gLSBpbXBvcnQgTG9hZE9wdGlvbnMgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIG5ldyBjb25maWcgdG8gYmUgbWVyZ2VkIHdpdGggb2xkIGNvbmZpZ1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPlxuKTogTWVyZ2U8TGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX0NPTkZJR19DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBpZHg6IG51bWJlciB8ICdhbGwnO1xuICBwcm9wOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB0ZXh0IGxhYmVsXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiB0ZXh0IGxhYmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIHRleHQgbGFiZWwsIGUsZywgYGFuY2hvcmAsIGBhbGlnbm1lbnRgLCBgY29sb3JgLCBgc2l6ZWAsIGBmaWVsZGBcbiAqIEBwYXJhbSB2YWx1ZSAtIG5ldyB2YWx1ZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpZHg6IG51bWJlciB8ICdhbGwnLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnlcbik6IE1lcmdlPExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdUeXBlOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3VHlwZSAtIG5ldyB0eXBlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdUeXBlOiBzdHJpbmdcbik6IE1lcmdlPExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3VHlwZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPjtcbiAgY2hhbm5lbDogc3RyaW5nO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IHZpc3VhbCBjaGFubmVsIGNvbmZpZ1xuICogQHBhcmFtIGNoYW5uZWwgLSBjaGFubmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICBjaGFubmVsOiBzdHJpbmdcbik6IE1lcmdlPFxuICBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWcsXG4gICAgY2hhbm5lbFxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdWaXNDb25maWcgLSBuZXcgdmlzQ29uZmlnIGFzIGEga2V5IHZhbHVlIG1hcDogZS5nLiBge29wYWNpdHk6IDAuOH1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz5cbik6IE1lcmdlPExheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdWaXNDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgcHJvcDogc3RyaW5nO1xuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST47XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY29sb3IgcGFsZXR0ZSB1aSBmb3IgbGF5ZXIgY29sb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gd2hpY2ggY29sb3IgcHJvcFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIHRvIGJlIG1lcmdlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbG9yVUlDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgcHJvcDogc3RyaW5nLFxuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST5cbik6IE1lcmdlPExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ09MT1JfVUlfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0NPTE9SX1VJX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBwcm9wLFxuICAgIG5ld0NvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJztcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbW9kZSBvbmUgb2YgYGFkZGl0aXZlYCwgYG5vcm1hbGAgYW5kIGBzdWJ0cmFjdGl2ZWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGF5ZXJCbGVuZGluZyhcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJ1xuKTogTWVyZ2U8VXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0JMRU5ESU5HfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9CTEVORElORyxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBWYWx1ZU9mPEludGVyYWN0aW9uQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGNvbmZpZyBhcyBrZXkgdmFsdWUgbWFwOiBge3Rvb2x0aXA6IHtlbmFibGVkOiB0cnVlfX1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlKFxuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+XG4pOiBNZXJnZTxcbiAgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTlRFUkFDVElPTl9DT05GSUdfQ0hBTkdFLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICB2YWx1ZUluZGV4PzogbnVtYmVyO1xufTtcbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgaWR4OiBudW1iZXIsXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWUsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNhbWUgYXMgVXBkYXRlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWUoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSxcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe1xuICBpZCxcbiAgYW5pbWF0aW9uV2luZG93XG59OiBTZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uKTogTWVyZ2U8XG4gIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XLFxuICAgIGlkLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ/OiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtIGRhdGFzZXQgYGlkYCB0aGlzIG5ldyBmaWx0ZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcihcbiAgZGF0YUlkOiBzdHJpbmcgfCBudWxsXG4pOiBNZXJnZTxBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQUREX0ZJTFRFUixcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc/OiBvYmplY3Q7XG4gIGRhdGFzZXRJZD86IHN0cmluZztcbn07XG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGNvbmZpZyAtIG5ldyBsYXllciBjb25maWdcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBkYXRhc2V0IGlkIHVzZWQgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGxheWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyKFxuICBjb25maWc/OiBvYmplY3QsXG4gIGRhdGFzZXRJZD86IHN0cmluZ1xuKTogTWVyZ2U8QWRkTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BRERfTEFZRVIsXG4gICAgY29uZmlnLFxuICAgIGRhdGFzZXRJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBvcmRlcjogbnVtYmVyW107XG59O1xuLyoqXG4gKiBSZW9yZGVyIGxheWVyLCBvcmRlciBpcyBhbiBhcnJheSBvZiBsYXllciBpbmRleGVzLCBpbmRleCAwIHdpbGwgYmUgdGhlIG9uZSBhdCB0aGUgYm90dG9tXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb3JkZXIgYW4gYXJyYXkgb2YgbGF5ZXIgaW5kZXhlc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGJyaW5nIGBsYXllcnNbMV1gIGJlbG93IGBsYXllcnNbMF1gLCB0aGUgc2VxdWVuY2UgbGF5ZXJzIHdpbGwgYmUgcmVuZGVyZWQgaXMgYDFgLCBgMGAsIGAyYCwgYDNgLlxuICogLy8gYDFgIHdpbGwgYmUgYXQgdGhlIGJvdHRvbSwgYDNgIHdpbGwgYmUgYXQgdGhlIHRvcC5cbiAqIHRoaXMucHJvcHMuZGlzcGF0Y2gocmVvcmRlckxheWVyKFsxLCAwLCAyLCAzXSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyKFxuICBvcmRlcjogbnVtYmVyW11cbik6IE1lcmdlPFJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVPUkRFUl9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU9SREVSX0xBWUVSLFxuICAgIG9yZGVyXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyIGZyb20gYHZpc1N0YXRlLmZpbHRlcnNgLCBvbmNlIGEgZmlsdGVyIGlzIHJlbW92ZWQsIGRhdGEgd2lsbCBiZSByZS1maWx0ZXJlZCBhbmQgbGF5ZXIgd2lsbCBiZSB1cGRhdGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBmaWx0ZXIgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGaWx0ZXIoXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxSZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVNT1ZFX0ZJTFRFUixcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFJlbW92ZSBhIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBsYXllciB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8UmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfTEFZRVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG59O1xuLyoqXG4gKiBEdXBsaWNhdGUgYSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCBpZHggb2YgbGF5ZXIgdG8gYmUgZHVwbGljYXRlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGVMYXllcihcbiAgaWR4OiBudW1iZXJcbik6IE1lcmdlPER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5EVVBMSUNBVEVfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRFVQTElDQVRFX0xBWUVSLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXQoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVCxcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xufTtcbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBpZCB0byBzaG93IGluIHRhYmxlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dEYXRhc2V0VGFibGUoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxTaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TSE9XX0RBVEFTRVRfVEFCTEV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0hPV19EQVRBU0VUX1RBQkxFLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgbmV3Q29sb3I6IFJHQkNvbG9yO1xufTtcbi8qKlxuICogVXBkYXRlIGRhdGFzZXQgY29sb3IgdG8gY3VzdG9tIGJ5IG1lYW5zIG9mIGNvbG9yIHBpY2tlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGBpZGAgdGhpcyBjdXN0b20gY29sb3IgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0gbmV3Q29sb3IgY3VzdG9tIGNvbG9yIGluIFJHQmZvcm1hdFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZUNvbG9yKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbmV3Q29sb3I6IFJHQkNvbG9yXG4pOiBNZXJnZTxVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9UQUJMRV9DT0xPUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVEFCTEVfQ09MT1IsXG4gICAgZGF0YUlkLFxuICAgIG5ld0NvbG9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIFNvcnQgZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW4oXG4gIGRhdGFJZDogc3RyaW5nLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogTWVyZ2U8U29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTixcbiAgICBkYXRhSWQsXG4gICAgY29sdW1uLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBQaW4gZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPFBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5QSU5fVEFCTEVfQ09MVU1OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBJTl9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDb3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBDb3B5IGNvbHVtbiwgZm9yIHRhYmxlIGRpc3BsYXlcbiAqIEBwYXJhbSBkYXRhSWRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPENvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU59PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGREYXRhVG9NYXBVcGRhdGVyT3B0aW9ucyA9IHtcbiAgY2VudHJNYXA/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGtlZXBFeGlzdGluZ0NvbmZpZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YXNldHM6IEFkZERhdGFUb01hcFBheWxvYWRbJ2RhdGFzZXRzJ107XG4gIG9wdGlvbnM6IEFkZERhdGFUb01hcFBheWxvYWRbJ29wdGlvbnMnXTtcbiAgY29uZmlnOiBBZGREYXRhVG9NYXBQYXlsb2FkWydjb25maWcnXTtcbn0gJiBBZGREYXRhVG9NYXBQYXlsb2FkO1xuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2VudGVyTWFwIGBkZWZhdWx0OiB0cnVlYCBpZiBgY2VudGVyTWFwYCBpcyBzZXQgdG8gYHRydWVgIGtlcGxlci5nbCB3aWxsXG4gKiBwbGFjZSB0aGUgbWFwIHZpZXcgd2l0aGluIHRoZSBkYXRhIHBvaW50cyBib3VuZGFyaWVzXG4gKiBAcGFyYW0gb3B0aW9ucy5yZWFkT25seSBgZGVmYXVsdDogZmFsc2VgIGlmIGByZWFkT25seWAgaXMgc2V0IHRvIGB0cnVlYFxuICogdGhlIGxlZnQgc2V0dGluZyBwYW5lbCB3aWxsIGJlIGhpZGRlblxuICogQHBhcmFtIGNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpc0RhdGEoXG4gIGRhdGFzZXRzOiBBZGREYXRhVG9NYXBQYXlsb2FkWydkYXRhc2V0cyddLFxuICBvcHRpb25zOiBBZGREYXRhVG9NYXBQYXlsb2FkWydvcHRpb25zJ10sXG4gIGNvbmZpZzogQWRkRGF0YVRvTWFwUGF5bG9hZFsnY29uZmlnJ11cbik6IE1lcmdlPFVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9WSVNfREFUQX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVklTX0RBVEEsXG4gICAgZGF0YXNldHMsXG4gICAgb3B0aW9ucyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtICoqKnJlcXVpcmVkKiogSWQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlXG4gKiBAcGFyYW0gbGFiZWwgLSAqKipyZXF1aXJlZCoqIE5ldyBuYW1lIGZvciB0aGUgZGF0YXNldFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0KFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZ1xuKTogTWVyZ2U8UmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVR9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0ge051bWJlcn0gaWR4IG9mIGZpbHRlclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJBbmltYXRpb24oXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxUb2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xufTtcbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSAgYGlkeGAgb2YgZmlsdGVyXG4gKiBAcGFyYW0gc3BlZWQgLSBgc3BlZWRgIHRvIGNoYW5nZSBpdCB0by4gYHNwZWVkYCBpcyBhIG11bHRpcGxpZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQoXG4gIGlkeDogbnVtYmVyLFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgaWR4LFxuICAgIHNwZWVkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuLyoqXG4gKiBSZXNldCBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSB2YWx1ZSAtICBDdXJyZW50IHZhbHVlIG9mIHRoZSBzbGlkZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lKFxuICB2YWx1ZTogbnVtYmVyXG4pOiBNZXJnZTxTZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHNwZWVkOiBudW1iZXI7XG59O1xuLyoqXG4gKiB1cGRhdGUgdHJpcCBsYXllciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBzcGVlZCAtIGBzcGVlZGAgdG8gY2hhbmdlIGl0IHRvLiBgc3BlZWRgIGlzIGEgbXVsdGlwbGllclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkKFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0FOSU1BVElPTl9TUEVFRH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgc3BlZWRcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBzdGFydCBlbmQgZW5kIGxheWVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbigpOiBNZXJnZTxcbiAgVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT059XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24gPSB7fTtcbi8qKlxuICogaGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2woKTogTWVyZ2U8XG4gIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEVubGFyZ2VGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgdG8gZW5sYXJnZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmxhcmdlRmlsdGVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8RW5sYXJnZUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cvaGlkZSBmaWx0ZXIgZmVhdHVyZSBvbiBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgZmVhdHVyZSB0byBzaG93L2hpZGVcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJGZWF0dXJlKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8VG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0ZJTFRFUl9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfRkVBVFVSRSxcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25MYXllckhvdmVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbDtcbn07XG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm8gLSBPYmplY3QgaG92ZXJlZCwgcmV0dXJuZWQgYnkgZGVjay5nbFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxheWVySG92ZXIoXG4gIGluZm86IHtwaWNrZWQ/OiBib29sZWFufSB8IG51bGxcbik6IE1lcmdlPE9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVIsXG4gICAgaW5mb1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBPbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uID0ge1xuICBpbmZvOiB7cGlja2VkPzogYm9vbGVhbn0gfCBudWxsO1xufTtcbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mbyAtIE9iamVjdCBjbGlja2VkLCByZXR1cm5lZCBieSBkZWNrLmdsXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTGF5ZXJDbGljayhcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbFxuKTogTWVyZ2U8T25MYXllckNsaWNrVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDSyxcbiAgICBpbmZvXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uID0ge307XG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbk1hcENsaWNrKCk6IE1lcmdlPE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk1BUF9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5NQVBfQ0xJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uID0ge1xuICBldnQ7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3VzZSBtb3ZlZXZlbnQsIHBheWxvYWQgd291bGQgYmVcbiAqIFJlYWN0LW1hcC1nbCBQb2ludGVyRXZlbnRcbiAqIGh0dHBzOi8vdWJlci5naXRodWIuaW8vcmVhY3QtbWFwLWdsLyMvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BvaW50ZXItZXZlbnRcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZXZ0IC0gUG9pbnRlckV2ZW50XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTW91c2VNb3ZlKFxuICBldnRcbik6IE1lcmdlPE9uTW91c2VNb3ZlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5NT1VTRV9NT1ZFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLk1PVVNFX01PVkUsXG4gICAgZXZ0XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvbiA9IHtcbiAgbWFwSW5kZXg6IG51bWJlcjtcbiAgbGF5ZXJJZDogc3RyaW5nO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1hcEluZGV4IC0gaW5kZXggb2YgdGhlIHNwbGl0IG1hcFxuICogQHBhcmFtIGxheWVySWQgLSBpZCBvZiB0aGUgbGF5ZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTGF5ZXJGb3JNYXAoXG4gIG1hcEluZGV4OiBudW1iZXIsXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTWVyZ2U8VG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQLFxuICAgIG1hcEluZGV4LFxuICAgIGxheWVySWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBuZXdQcm9wOiBvYmplY3Q7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBuZXdQcm9wIGtleSB2YWx1ZSBtYXBwaW5nIG9mIG5ldyBwcm9wIGB7eUF4aXM6ICdoaXN0b2dyYW0nfWBcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJQbG90KFxuICBpZHg6IG51bWJlcixcbiAgbmV3UHJvcDogb2JqZWN0LFxuICB2YWx1ZUluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxTZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX1BMT1R9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9QTE9ULFxuICAgIGlkeCxcbiAgICBuZXdQcm9wLFxuICAgIHZhbHVlSW5kZXhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGluZm86IGFueTtcbn07XG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm9cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWFwSW5mbyhcbiAgaW5mbzogYW55XG4pOiBNZXJnZTxTZXRNYXBJbmZvVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTUFQX0lORk99PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX01BUF9JTkZPLFxuICAgIGluZm9cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgb25GaW5pc2g/KHJlc3VsdDogYW55KTogYW55O1xufTtcbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmlsZXMgYXJyYXkgb2YgZmlsZWJsb2JcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzKFxuICBmaWxlczogRmlsZVtdLFxuICBvbkZpbmlzaD86IChyZXN1bHQ6IGFueSkgPT4gYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFUyxcbiAgICBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xufVxuXG4vKipcbiAqIENhbGxlZCB3aXRoIG5leHQgZmlsZSB0byBsb2FkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZSgpOiB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfTkVYVF9GSUxFfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9ORVhUX0ZJTEVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIHJlc3VsdDogRmlsZUNhY2hlSXRlbVtdO1xufTtcbi8qKlxuICogY2FsbGVkIHdoZW4gYWxsIGZpbGVzIGFyZSBwcm9jZXNzZWQgYW5kIGxvYWRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNTdWNjZXNzKFxuICByZXN1bHQ6IEZpbGVDYWNoZUl0ZW1bXVxuKTogTWVyZ2U8bG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19TVUNDRVNTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfU1VDQ0VTUyxcbiAgICByZXN1bHRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG59O1xuLyoqXG4gKiBjYWxsZWQgd2hlbiBzdWNjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCByZWFkeSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtcbiAgZmlsZU5hbWUsXG4gIGZpbGVDYWNoZVxufToge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlQ2FjaGU6IEZpbGVDYWNoZUl0ZW1bXTtcbn0pOiBNZXJnZTxMb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRV9TVEVQX1NVQ0NFU1N9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFX1NURVBfU1VDQ0VTUyxcbiAgICBmaWxlTmFtZSxcbiAgICBmaWxlQ2FjaGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZXJyb3I6IGFueTtcbn07XG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gIGVycm9yXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzRXJyKFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBlcnJvcjogYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSLFxuICAgIGZpbGVOYW1lLFxuICAgIGVycm9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbn07XG4vKipcbiAqIFN0b3JlIGZlYXR1cmVzIHRvIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmVhdHVyZXNcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXMoXG4gIGZlYXR1cmVzOiBGZWF0dXJlW11cbik6IE1lcmdlPFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRkVBVFVSRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZFQVRVUkVTLFxuICAgIGZlYXR1cmVzXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgZmVhdHVyZTogRmVhdHVyZTtcbn07XG4vKipcbiAqIEl0IHdpbGwgYXBwbHkgdGhlIHByb3ZpZGUgZmVhdHVyZSBhcyBmaWx0ZXIgdG8gdGhlIGdpdmVuIGxheWVyLlxuICogSWYgdGhlIGdpdmVuIGZlYXR1cmUgaXMgYWxyZWFkeSBhcHBsaWVkIGFzIGZpbHRlciB0byB0aGUgbGF5ZXIsIGl0IHdpbGwgcmVtb3ZlIHRoZSBsYXllciBmcm9tIHRoZSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBsYXllclxuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyKFxuICBsYXllcjogTGF5ZXIsXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX1BPTFlHT05fRklMVEVSX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUixcbiAgICBsYXllcixcbiAgICBmZWF0dXJlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgZmVhdHVyZSB0byBiZSBlZGl0ZWQvZGVsZXRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0ZWRGZWF0dXJlKFxuICBmZWF0dXJlOiBGZWF0dXJlXG4pOiBNZXJnZTxTZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBEZWxldGUgdGhlIGdpdmVuIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmUoXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPERlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG1vZGU6IHN0cmluZztcbn07XG4vKiogU2V0IHRoZSBtYXAgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1vZGUgb25lIG9mIEVESVRPUl9NT0RFU1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtzZXRNYXBNb2RlfSBmcm9tICdrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge0VESVRPUl9NT0RFU30gZnJvbSAna2VwbGVyLmdsL2NvbnN0YW50cyc7XG4gKlxuICogdGhpcy5wcm9wcy5kaXNwYXRjaChzZXRNYXBNb2RlKEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvck1vZGUoXG4gIG1vZGU6IHN0cmluZ1xuKTogTWVyZ2U8U2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VESVRPUl9NT0RFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9FRElUT1JfTU9ERSxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn07XG4vKipcbiAqIFRyaWdnZXIgQ1BVIGZpbHRlciBvZiBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gc2luZ2xlIGRhdGFJZCBvciBhbiBhcnJheSBvZiBkYXRhSWRzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q1BVRmlsdGVyKFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdXG4pOiBNZXJnZTxBcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfQ1BVX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9DUFVfRklMVEVSLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBUb2dnbGUgZWRpdG9yIGxheWVyIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5KCk6IE1lcmdlPFxuICBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFl9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFlcbiAgfTtcbn1cblxudHlwZSBGaWxlQ29udGVudCA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmdbXTtcbiAgZGF0YTogYW55O1xufTtcbmV4cG9ydCB0eXBlIE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgZ2VuOiBBc3luY0dlbmVyYXRvcjxGaWxlQ29udGVudD47XG4gICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICBwcm9ncmVzcz86IGFueTtcbiAgICBhY2N1bXVsYXRlZD86IGFueTtcbiAgICBvbkZpbmlzaDogKHJlc3VsdDogYW55KSA9PiBhbnk7XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBuZXh0IGZpbGUgYmF0Y2hcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gYmF0Y2ggcGF5bG9hZFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRGaWxlQmF0Y2goXG4gIHBheWxvYWQ6IE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbik6IE1lcmdlPE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk5FWFRfRklMRV9CQVRDSH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5ORVhUX0ZJTEVfQkFUQ0gsXG4gICAgcGF5bG9hZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgY29udGVudDogRmlsZUNvbnRlbnQ7XG4gICAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBmaWxlIGNvbnRlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gdGhlIGZpbGUgY29udGVudFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudChcbiAgcGF5bG9hZDogUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pOiBNZXJnZTxQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5UfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5ULFxuICAgIHBheWxvYWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBjb25maWc6IHtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICB0aW1lRm9ybWF0Pzogc3RyaW5nO1xuICB9O1xufTtcbi8qKlxuICogU2V0IGxheWVyIGFuaW1hdGlvbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSB7dGltZUZvcm1hdDogc3RyaW5nLCB0aW1lem9uZTogc3RyaW5nfVxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyhcbiAgY29uZmlnOiBTZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2NvbmZpZyddXG4pOiBNZXJnZTxcbiAgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUd9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgY29uZmlnOiB7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZUZvcm1hdD86IHN0cmluZztcbiAgfTtcbn07XG4vKipcbiAqIFNldCBGaWx0ZXIgYW5pbWF0aW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeFxuICogQHBhcmFtIGNvbmZpZ1xuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcoXG4gIGlkeDogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnaWR4J10sXG4gIGNvbmZpZzogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnY29uZmlnJ11cbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUcsXG4gICAgaWR4LFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZGVjbGFyYXRpb24gaXMgbmVlZGVkIHRvIGdyb3VwIGFjdGlvbnMgaW4gZG9jc1xuICovXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgYHZpc1N0YXRlYCByZWR1Y2VyLlxuICogVGhleSBtYW5hZ2UgaG93IGRhdGEgaXMgcHJvY2Vzc2VkLCBmaWx0ZXJlZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBtYXAgYnkgb3BlcmF0ZXMgb24gbGF5ZXJzLFxuICogZmlsdGVycyBhbmQgaW50ZXJhY3Rpb24gc2V0dGluZ3MuXG4gKlxuICogQHB1YmxpY1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVBY3Rpb25zID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQVFBO0FBQ0E7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBaUJBLENBQy9CQyxRQUFlLEVBQ2ZDLFNBQW1DLEVBQ29EO0VBQ3ZGLE9BQU87SUFDTEMsSUFBSSxFQUFFQyxvQkFBVyxDQUFDQyxtQkFBbUI7SUFDckNKLFFBQVE7SUFDUkM7RUFDRixDQUFDO0FBQ0g7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxvQkFBb0JBLENBQ2xDTCxRQUFlLEVBQ2ZNLEdBQW1CLEVBQ25CQyxJQUFZLEVBQ1pDLEtBQVUsRUFDb0Y7RUFDOUYsT0FBTztJQUNMTixJQUFJLEVBQUVDLG9CQUFXLENBQUNNLHVCQUF1QjtJQUN6Q1QsUUFBUTtJQUNSTSxHQUFHO0lBQ0hDLElBQUk7SUFDSkM7RUFDRixDQUFDO0FBQ0g7QUFLQTtBQUNBO0FBQ0E7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
900
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImxheWVyQ29uZmlnQ2hhbmdlIiwib2xkTGF5ZXIiLCJuZXdDb25maWciLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJMQVlFUl9DT05GSUdfQ0hBTkdFIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2UiLCJpZHgiLCJwcm9wIiwidmFsdWUiLCJMQVlFUl9URVhUX0xBQkVMX0NIQU5HRSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZSIsImNvbmZpZyIsIklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0UiLCJzZXRGaWx0ZXIiLCJ2YWx1ZUluZGV4IiwiU0VUX0ZJTFRFUiIsInNldEZpbHRlckFuaW1hdGlvblRpbWUiLCJTRVRfRklMVEVSX0FOSU1BVElPTl9USU1FIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwiX3JlZiIsImlkIiwiYW5pbWF0aW9uV2luZG93IiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XIiwiYWRkRmlsdGVyIiwiZGF0YUlkIiwiQUREX0ZJTFRFUiIsImFkZExheWVyIiwiZGF0YXNldElkIiwiQUREX0xBWUVSIiwicmVvcmRlckxheWVyIiwib3JkZXIiLCJSRU9SREVSX0xBWUVSIiwicmVtb3ZlRmlsdGVyIiwiUkVNT1ZFX0ZJTFRFUiIsInJlbW92ZUxheWVyIiwiUkVNT1ZFX0xBWUVSIiwiZHVwbGljYXRlTGF5ZXIiLCJEVVBMSUNBVEVfTEFZRVIiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInRvZ2dsZUZpbHRlckFuaW1hdGlvbiIsIlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJzcGVlZCIsIlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lIiwiU0VUX0xBWUVSX0FOSU1BVElPTl9USU1FIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZCIsIlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQiLCJ0b2dnbGVMYXllckFuaW1hdGlvbiIsIlRPR0dMRV9MQVlFUl9BTklNQVRJT04iLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2wiLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OX0NPTlRST0wiLCJlbmxhcmdlRmlsdGVyIiwiRU5MQVJHRV9GSUxURVIiLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIkxBWUVSX0hPVkVSIiwib25MYXllckNsaWNrIiwiTEFZRVJfQ0xJQ0siLCJvbk1hcENsaWNrIiwiTUFQX0NMSUNLIiwib25Nb3VzZU1vdmUiLCJldnQiLCJNT1VTRV9NT1ZFIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJtYXBJbmRleCIsImxheWVySWQiLCJUT0dHTEVfTEFZRVJfRk9SX01BUCIsInNldEZpbHRlclBsb3QiLCJuZXdQcm9wIiwiU0VUX0ZJTFRFUl9QTE9UIiwic2V0TWFwSW5mbyIsIlNFVF9NQVBfSU5GTyIsImxvYWRGaWxlcyIsImZpbGVzIiwib25GaW5pc2giLCJMT0FEX0ZJTEVTIiwibG9hZE5leHRGaWxlIiwiTE9BRF9ORVhUX0ZJTEUiLCJsb2FkRmlsZXNTdWNjZXNzIiwicmVzdWx0IiwiTE9BRF9GSUxFU19TVUNDRVNTIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsIl9yZWYyIiwiZmlsZU5hbWUiLCJmaWxlQ2FjaGUiLCJMT0FEX0ZJTEVfU1RFUF9TVUNDRVNTIiwibG9hZEZpbGVzRXJyIiwiZXJyb3IiLCJMT0FEX0ZJTEVTX0VSUiIsInNldEZlYXR1cmVzIiwiZmVhdHVyZXMiLCJTRVRfRkVBVFVSRVMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJsYXllciIsImZlYXR1cmUiLCJTRVRfUE9MWUdPTl9GSUxURVJfTEFZRVIiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJ2aXNTdGF0ZUFjdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vLyB2aXMtc3RhdGUtcmVkdWNlclxuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJ2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtBZGREYXRhVG9NYXBQYXlsb2FkfSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHtGaWxlQ2FjaGVJdGVtfSBmcm9tICcuLi9wcm9jZXNzb3JzL3R5cGVzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQmFzZUNvbmZpZywgTGF5ZXJWaXNDb25maWd9IGZyb20gJ2xheWVycyc7XG5pbXBvcnQge0ZlYXR1cmUsIEludGVyYWN0aW9uQ29uZmlnfSBmcm9tICdyZWR1Y2Vycy92aXMtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtWYWx1ZU9mLCBNZXJnZSwgUkdCQ29sb3IsIE5lc3RlZFBhcnRpYWx9IGZyb20gJy4uL3JlZHVjZXJzL3R5cGVzJztcbmltcG9ydCB7Q29sb3JVSX0gZnJvbSAnbGF5ZXJzL2xheWVyLWZhY3RvcnknO1xuLy8gVE9ETyAtIGltcG9ydCBMb2FkZXJPYmplY3QgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcbi8vIFRPRE8gLSBpbXBvcnQgTG9hZE9wdGlvbnMgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIG5ldyBjb25maWcgdG8gYmUgbWVyZ2VkIHdpdGggb2xkIGNvbmZpZ1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPlxuKTogTWVyZ2U8TGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX0NPTkZJR19DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBpZHg6IG51bWJlciB8ICdhbGwnO1xuICBwcm9wOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB0ZXh0IGxhYmVsXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiB0ZXh0IGxhYmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIHRleHQgbGFiZWwsIGUsZywgYGFuY2hvcmAsIGBhbGlnbm1lbnRgLCBgY29sb3JgLCBgc2l6ZWAsIGBmaWVsZGBcbiAqIEBwYXJhbSB2YWx1ZSAtIG5ldyB2YWx1ZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpZHg6IG51bWJlciB8ICdhbGwnLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnlcbik6IE1lcmdlPExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdUeXBlOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3VHlwZSAtIG5ldyB0eXBlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdUeXBlOiBzdHJpbmdcbik6IE1lcmdlPExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3VHlwZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPjtcbiAgY2hhbm5lbDogc3RyaW5nO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IHZpc3VhbCBjaGFubmVsIGNvbmZpZ1xuICogQHBhcmFtIGNoYW5uZWwgLSBjaGFubmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICBjaGFubmVsOiBzdHJpbmdcbik6IE1lcmdlPFxuICBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWcsXG4gICAgY2hhbm5lbFxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdWaXNDb25maWcgLSBuZXcgdmlzQ29uZmlnIGFzIGEga2V5IHZhbHVlIG1hcDogZS5nLiBge29wYWNpdHk6IDAuOH1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz5cbik6IE1lcmdlPExheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdWaXNDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgcHJvcDogc3RyaW5nO1xuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST47XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY29sb3IgcGFsZXR0ZSB1aSBmb3IgbGF5ZXIgY29sb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gd2hpY2ggY29sb3IgcHJvcFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIHRvIGJlIG1lcmdlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbG9yVUlDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgcHJvcDogc3RyaW5nLFxuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST5cbik6IE1lcmdlPExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ09MT1JfVUlfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0NPTE9SX1VJX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBwcm9wLFxuICAgIG5ld0NvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJztcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbW9kZSBvbmUgb2YgYGFkZGl0aXZlYCwgYG5vcm1hbGAgYW5kIGBzdWJ0cmFjdGl2ZWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGF5ZXJCbGVuZGluZyhcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJ1xuKTogTWVyZ2U8VXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0JMRU5ESU5HfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9CTEVORElORyxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBWYWx1ZU9mPEludGVyYWN0aW9uQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGNvbmZpZyBhcyBrZXkgdmFsdWUgbWFwOiBge3Rvb2x0aXA6IHtlbmFibGVkOiB0cnVlfX1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlKFxuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+XG4pOiBNZXJnZTxcbiAgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTlRFUkFDVElPTl9DT05GSUdfQ0hBTkdFLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICB2YWx1ZUluZGV4PzogbnVtYmVyO1xufTtcbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgaWR4OiBudW1iZXIsXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWUsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNhbWUgYXMgVXBkYXRlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWUoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSxcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe1xuICBpZCxcbiAgYW5pbWF0aW9uV2luZG93XG59OiBTZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uKTogTWVyZ2U8XG4gIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XLFxuICAgIGlkLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ/OiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtIGRhdGFzZXQgYGlkYCB0aGlzIG5ldyBmaWx0ZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcihcbiAgZGF0YUlkOiBzdHJpbmcgfCBudWxsXG4pOiBNZXJnZTxBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQUREX0ZJTFRFUixcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc/OiBvYmplY3Q7XG4gIGRhdGFzZXRJZD86IHN0cmluZztcbn07XG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGNvbmZpZyAtIG5ldyBsYXllciBjb25maWdcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBkYXRhc2V0IGlkIHVzZWQgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGxheWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyKFxuICBjb25maWc/OiBvYmplY3QsXG4gIGRhdGFzZXRJZD86IHN0cmluZ1xuKTogTWVyZ2U8QWRkTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BRERfTEFZRVIsXG4gICAgY29uZmlnLFxuICAgIGRhdGFzZXRJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBvcmRlcjogbnVtYmVyW107XG59O1xuLyoqXG4gKiBSZW9yZGVyIGxheWVyLCBvcmRlciBpcyBhbiBhcnJheSBvZiBsYXllciBpbmRleGVzLCBpbmRleCAwIHdpbGwgYmUgdGhlIG9uZSBhdCB0aGUgYm90dG9tXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb3JkZXIgYW4gYXJyYXkgb2YgbGF5ZXIgaW5kZXhlc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGJyaW5nIGBsYXllcnNbMV1gIGJlbG93IGBsYXllcnNbMF1gLCB0aGUgc2VxdWVuY2UgbGF5ZXJzIHdpbGwgYmUgcmVuZGVyZWQgaXMgYDFgLCBgMGAsIGAyYCwgYDNgLlxuICogLy8gYDFgIHdpbGwgYmUgYXQgdGhlIGJvdHRvbSwgYDNgIHdpbGwgYmUgYXQgdGhlIHRvcC5cbiAqIHRoaXMucHJvcHMuZGlzcGF0Y2gocmVvcmRlckxheWVyKFsxLCAwLCAyLCAzXSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyKFxuICBvcmRlcjogbnVtYmVyW11cbik6IE1lcmdlPFJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVPUkRFUl9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU9SREVSX0xBWUVSLFxuICAgIG9yZGVyXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyIGZyb20gYHZpc1N0YXRlLmZpbHRlcnNgLCBvbmNlIGEgZmlsdGVyIGlzIHJlbW92ZWQsIGRhdGEgd2lsbCBiZSByZS1maWx0ZXJlZCBhbmQgbGF5ZXIgd2lsbCBiZSB1cGRhdGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBmaWx0ZXIgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGaWx0ZXIoXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxSZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVNT1ZFX0ZJTFRFUixcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFJlbW92ZSBhIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBsYXllciB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8UmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfTEFZRVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG59O1xuLyoqXG4gKiBEdXBsaWNhdGUgYSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCBpZHggb2YgbGF5ZXIgdG8gYmUgZHVwbGljYXRlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGVMYXllcihcbiAgaWR4OiBudW1iZXJcbik6IE1lcmdlPER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5EVVBMSUNBVEVfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRFVQTElDQVRFX0xBWUVSLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXQoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVCxcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xufTtcbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBpZCB0byBzaG93IGluIHRhYmxlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dEYXRhc2V0VGFibGUoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxTaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TSE9XX0RBVEFTRVRfVEFCTEV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0hPV19EQVRBU0VUX1RBQkxFLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgbmV3Q29sb3I6IFJHQkNvbG9yO1xufTtcbi8qKlxuICogVXBkYXRlIGRhdGFzZXQgY29sb3IgdG8gY3VzdG9tIGJ5IG1lYW5zIG9mIGNvbG9yIHBpY2tlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGBpZGAgdGhpcyBjdXN0b20gY29sb3IgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0gbmV3Q29sb3IgY3VzdG9tIGNvbG9yIGluIFJHQmZvcm1hdFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZUNvbG9yKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbmV3Q29sb3I6IFJHQkNvbG9yXG4pOiBNZXJnZTxVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9UQUJMRV9DT0xPUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVEFCTEVfQ09MT1IsXG4gICAgZGF0YUlkLFxuICAgIG5ld0NvbG9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIFNvcnQgZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW4oXG4gIGRhdGFJZDogc3RyaW5nLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogTWVyZ2U8U29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTixcbiAgICBkYXRhSWQsXG4gICAgY29sdW1uLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBQaW4gZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPFBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5QSU5fVEFCTEVfQ09MVU1OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBJTl9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDb3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBDb3B5IGNvbHVtbiwgZm9yIHRhYmxlIGRpc3BsYXlcbiAqIEBwYXJhbSBkYXRhSWRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPENvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU59PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGREYXRhVG9NYXBVcGRhdGVyT3B0aW9ucyA9IHtcbiAgY2VudHJNYXA/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGtlZXBFeGlzdGluZ0NvbmZpZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YXNldHM6IEFkZERhdGFUb01hcFBheWxvYWRbJ2RhdGFzZXRzJ107XG4gIG9wdGlvbnM6IEFkZERhdGFUb01hcFBheWxvYWRbJ29wdGlvbnMnXTtcbiAgY29uZmlnOiBBZGREYXRhVG9NYXBQYXlsb2FkWydjb25maWcnXTtcbn0gJiBBZGREYXRhVG9NYXBQYXlsb2FkO1xuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2VudGVyTWFwIGBkZWZhdWx0OiB0cnVlYCBpZiBgY2VudGVyTWFwYCBpcyBzZXQgdG8gYHRydWVgIGtlcGxlci5nbCB3aWxsXG4gKiBwbGFjZSB0aGUgbWFwIHZpZXcgd2l0aGluIHRoZSBkYXRhIHBvaW50cyBib3VuZGFyaWVzXG4gKiBAcGFyYW0gb3B0aW9ucy5yZWFkT25seSBgZGVmYXVsdDogZmFsc2VgIGlmIGByZWFkT25seWAgaXMgc2V0IHRvIGB0cnVlYFxuICogdGhlIGxlZnQgc2V0dGluZyBwYW5lbCB3aWxsIGJlIGhpZGRlblxuICogQHBhcmFtIGNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpc0RhdGEoXG4gIGRhdGFzZXRzOiBBZGREYXRhVG9NYXBQYXlsb2FkWydkYXRhc2V0cyddLFxuICBvcHRpb25zOiBBZGREYXRhVG9NYXBQYXlsb2FkWydvcHRpb25zJ10sXG4gIGNvbmZpZzogQWRkRGF0YVRvTWFwUGF5bG9hZFsnY29uZmlnJ11cbik6IE1lcmdlPFVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9WSVNfREFUQX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVklTX0RBVEEsXG4gICAgZGF0YXNldHMsXG4gICAgb3B0aW9ucyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtICoqKnJlcXVpcmVkKiogSWQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlXG4gKiBAcGFyYW0gbGFiZWwgLSAqKipyZXF1aXJlZCoqIE5ldyBuYW1lIGZvciB0aGUgZGF0YXNldFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0KFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZ1xuKTogTWVyZ2U8UmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVR9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0ge051bWJlcn0gaWR4IG9mIGZpbHRlclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJBbmltYXRpb24oXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxUb2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xufTtcbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSAgYGlkeGAgb2YgZmlsdGVyXG4gKiBAcGFyYW0gc3BlZWQgLSBgc3BlZWRgIHRvIGNoYW5nZSBpdCB0by4gYHNwZWVkYCBpcyBhIG11bHRpcGxpZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQoXG4gIGlkeDogbnVtYmVyLFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgaWR4LFxuICAgIHNwZWVkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuLyoqXG4gKiBSZXNldCBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSB2YWx1ZSAtICBDdXJyZW50IHZhbHVlIG9mIHRoZSBzbGlkZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lKFxuICB2YWx1ZTogbnVtYmVyXG4pOiBNZXJnZTxTZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHNwZWVkOiBudW1iZXI7XG59O1xuLyoqXG4gKiB1cGRhdGUgdHJpcCBsYXllciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBzcGVlZCAtIGBzcGVlZGAgdG8gY2hhbmdlIGl0IHRvLiBgc3BlZWRgIGlzIGEgbXVsdGlwbGllclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkKFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0FOSU1BVElPTl9TUEVFRH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgc3BlZWRcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBzdGFydCBlbmQgZW5kIGxheWVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbigpOiBNZXJnZTxcbiAgVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT059XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24gPSB7fTtcbi8qKlxuICogaGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2woKTogTWVyZ2U8XG4gIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEVubGFyZ2VGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgdG8gZW5sYXJnZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmxhcmdlRmlsdGVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8RW5sYXJnZUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cvaGlkZSBmaWx0ZXIgZmVhdHVyZSBvbiBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgZmVhdHVyZSB0byBzaG93L2hpZGVcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJGZWF0dXJlKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8VG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0ZJTFRFUl9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfRkVBVFVSRSxcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25MYXllckhvdmVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbDtcbn07XG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm8gLSBPYmplY3QgaG92ZXJlZCwgcmV0dXJuZWQgYnkgZGVjay5nbFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxheWVySG92ZXIoXG4gIGluZm86IHtwaWNrZWQ/OiBib29sZWFufSB8IG51bGxcbik6IE1lcmdlPE9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVIsXG4gICAgaW5mb1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBPbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uID0ge1xuICBpbmZvOiB7cGlja2VkPzogYm9vbGVhbn0gfCBudWxsO1xufTtcbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mbyAtIE9iamVjdCBjbGlja2VkLCByZXR1cm5lZCBieSBkZWNrLmdsXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTGF5ZXJDbGljayhcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbFxuKTogTWVyZ2U8T25MYXllckNsaWNrVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDSyxcbiAgICBpbmZvXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uID0ge307XG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbk1hcENsaWNrKCk6IE1lcmdlPE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk1BUF9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5NQVBfQ0xJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uID0ge1xuICBldnQ7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3VzZSBtb3ZlZXZlbnQsIHBheWxvYWQgd291bGQgYmVcbiAqIFJlYWN0LW1hcC1nbCBQb2ludGVyRXZlbnRcbiAqIGh0dHBzOi8vdWJlci5naXRodWIuaW8vcmVhY3QtbWFwLWdsLyMvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BvaW50ZXItZXZlbnRcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZXZ0IC0gUG9pbnRlckV2ZW50XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTW91c2VNb3ZlKFxuICBldnRcbik6IE1lcmdlPE9uTW91c2VNb3ZlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5NT1VTRV9NT1ZFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLk1PVVNFX01PVkUsXG4gICAgZXZ0XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvbiA9IHtcbiAgbWFwSW5kZXg6IG51bWJlcjtcbiAgbGF5ZXJJZDogc3RyaW5nO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1hcEluZGV4IC0gaW5kZXggb2YgdGhlIHNwbGl0IG1hcFxuICogQHBhcmFtIGxheWVySWQgLSBpZCBvZiB0aGUgbGF5ZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTGF5ZXJGb3JNYXAoXG4gIG1hcEluZGV4OiBudW1iZXIsXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTWVyZ2U8VG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQLFxuICAgIG1hcEluZGV4LFxuICAgIGxheWVySWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBuZXdQcm9wOiBvYmplY3Q7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBuZXdQcm9wIGtleSB2YWx1ZSBtYXBwaW5nIG9mIG5ldyBwcm9wIGB7eUF4aXM6ICdoaXN0b2dyYW0nfWBcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJQbG90KFxuICBpZHg6IG51bWJlcixcbiAgbmV3UHJvcDogb2JqZWN0LFxuICB2YWx1ZUluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxTZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX1BMT1R9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9QTE9ULFxuICAgIGlkeCxcbiAgICBuZXdQcm9wLFxuICAgIHZhbHVlSW5kZXhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGluZm86IGFueTtcbn07XG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm9cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWFwSW5mbyhcbiAgaW5mbzogYW55XG4pOiBNZXJnZTxTZXRNYXBJbmZvVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTUFQX0lORk99PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX01BUF9JTkZPLFxuICAgIGluZm9cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgb25GaW5pc2g/KHJlc3VsdDogYW55KTogYW55O1xufTtcbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmlsZXMgYXJyYXkgb2YgZmlsZWJsb2JcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzKFxuICBmaWxlczogRmlsZVtdLFxuICBvbkZpbmlzaD86IChyZXN1bHQ6IGFueSkgPT4gYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFUyxcbiAgICBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xufVxuXG4vKipcbiAqIENhbGxlZCB3aXRoIG5leHQgZmlsZSB0byBsb2FkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZSgpOiB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfTkVYVF9GSUxFfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9ORVhUX0ZJTEVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIHJlc3VsdDogRmlsZUNhY2hlSXRlbVtdO1xufTtcbi8qKlxuICogY2FsbGVkIHdoZW4gYWxsIGZpbGVzIGFyZSBwcm9jZXNzZWQgYW5kIGxvYWRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNTdWNjZXNzKFxuICByZXN1bHQ6IEZpbGVDYWNoZUl0ZW1bXVxuKTogTWVyZ2U8bG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19TVUNDRVNTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfU1VDQ0VTUyxcbiAgICByZXN1bHRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG59O1xuLyoqXG4gKiBjYWxsZWQgd2hlbiBzdWNjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCByZWFkeSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtcbiAgZmlsZU5hbWUsXG4gIGZpbGVDYWNoZVxufToge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlQ2FjaGU6IEZpbGVDYWNoZUl0ZW1bXTtcbn0pOiBNZXJnZTxMb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRV9TVEVQX1NVQ0NFU1N9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFX1NURVBfU1VDQ0VTUyxcbiAgICBmaWxlTmFtZSxcbiAgICBmaWxlQ2FjaGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZXJyb3I6IGFueTtcbn07XG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gIGVycm9yXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzRXJyKFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBlcnJvcjogYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSLFxuICAgIGZpbGVOYW1lLFxuICAgIGVycm9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbn07XG4vKipcbiAqIFN0b3JlIGZlYXR1cmVzIHRvIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmVhdHVyZXNcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXMoXG4gIGZlYXR1cmVzOiBGZWF0dXJlW11cbik6IE1lcmdlPFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRkVBVFVSRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZFQVRVUkVTLFxuICAgIGZlYXR1cmVzXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgZmVhdHVyZTogRmVhdHVyZTtcbn07XG4vKipcbiAqIEl0IHdpbGwgYXBwbHkgdGhlIHByb3ZpZGUgZmVhdHVyZSBhcyBmaWx0ZXIgdG8gdGhlIGdpdmVuIGxheWVyLlxuICogSWYgdGhlIGdpdmVuIGZlYXR1cmUgaXMgYWxyZWFkeSBhcHBsaWVkIGFzIGZpbHRlciB0byB0aGUgbGF5ZXIsIGl0IHdpbGwgcmVtb3ZlIHRoZSBsYXllciBmcm9tIHRoZSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBsYXllclxuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyKFxuICBsYXllcjogTGF5ZXIsXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX1BPTFlHT05fRklMVEVSX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUixcbiAgICBsYXllcixcbiAgICBmZWF0dXJlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgZmVhdHVyZSB0byBiZSBlZGl0ZWQvZGVsZXRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0ZWRGZWF0dXJlKFxuICBmZWF0dXJlOiBGZWF0dXJlXG4pOiBNZXJnZTxTZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBEZWxldGUgdGhlIGdpdmVuIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmUoXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPERlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG1vZGU6IHN0cmluZztcbn07XG4vKiogU2V0IHRoZSBtYXAgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1vZGUgb25lIG9mIEVESVRPUl9NT0RFU1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtzZXRNYXBNb2RlfSBmcm9tICdrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge0VESVRPUl9NT0RFU30gZnJvbSAna2VwbGVyLmdsL2NvbnN0YW50cyc7XG4gKlxuICogdGhpcy5wcm9wcy5kaXNwYXRjaChzZXRNYXBNb2RlKEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvck1vZGUoXG4gIG1vZGU6IHN0cmluZ1xuKTogTWVyZ2U8U2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VESVRPUl9NT0RFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9FRElUT1JfTU9ERSxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn07XG4vKipcbiAqIFRyaWdnZXIgQ1BVIGZpbHRlciBvZiBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gc2luZ2xlIGRhdGFJZCBvciBhbiBhcnJheSBvZiBkYXRhSWRzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q1BVRmlsdGVyKFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdXG4pOiBNZXJnZTxBcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfQ1BVX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9DUFVfRklMVEVSLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBUb2dnbGUgZWRpdG9yIGxheWVyIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5KCk6IE1lcmdlPFxuICBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFl9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFlcbiAgfTtcbn1cblxudHlwZSBGaWxlQ29udGVudCA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmdbXTtcbiAgZGF0YTogYW55O1xufTtcbmV4cG9ydCB0eXBlIE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgZ2VuOiBBc3luY0dlbmVyYXRvcjxGaWxlQ29udGVudD47XG4gICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICBwcm9ncmVzcz86IGFueTtcbiAgICBhY2N1bXVsYXRlZD86IGFueTtcbiAgICBvbkZpbmlzaDogKHJlc3VsdDogYW55KSA9PiBhbnk7XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBuZXh0IGZpbGUgYmF0Y2hcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gYmF0Y2ggcGF5bG9hZFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRGaWxlQmF0Y2goXG4gIHBheWxvYWQ6IE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbik6IE1lcmdlPE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk5FWFRfRklMRV9CQVRDSH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5ORVhUX0ZJTEVfQkFUQ0gsXG4gICAgcGF5bG9hZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgY29udGVudDogRmlsZUNvbnRlbnQ7XG4gICAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBmaWxlIGNvbnRlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gdGhlIGZpbGUgY29udGVudFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudChcbiAgcGF5bG9hZDogUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pOiBNZXJnZTxQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5UfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5ULFxuICAgIHBheWxvYWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBjb25maWc6IHtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICB0aW1lRm9ybWF0Pzogc3RyaW5nO1xuICB9O1xufTtcbi8qKlxuICogU2V0IGxheWVyIGFuaW1hdGlvbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSB7dGltZUZvcm1hdDogc3RyaW5nLCB0aW1lem9uZTogc3RyaW5nfVxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyhcbiAgY29uZmlnOiBTZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2NvbmZpZyddXG4pOiBNZXJnZTxcbiAgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUd9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgY29uZmlnOiB7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZUZvcm1hdD86IHN0cmluZztcbiAgfTtcbn07XG4vKipcbiAqIFNldCBGaWx0ZXIgYW5pbWF0aW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeFxuICogQHBhcmFtIGNvbmZpZ1xuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcoXG4gIGlkeDogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnaWR4J10sXG4gIGNvbmZpZzogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnY29uZmlnJ11cbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUcsXG4gICAgaWR4LFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZGVjbGFyYXRpb24gaXMgbmVlZGVkIHRvIGdyb3VwIGFjdGlvbnMgaW4gZG9jc1xuICovXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgYHZpc1N0YXRlYCByZWR1Y2VyLlxuICogVGhleSBtYW5hZ2UgaG93IGRhdGEgaXMgcHJvY2Vzc2VkLCBmaWx0ZXJlZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBtYXAgYnkgb3BlcmF0ZXMgb24gbGF5ZXJzLFxuICogZmlsdGVycyBhbmQgaW50ZXJhY3Rpb24gc2V0dGluZ3MuXG4gKlxuICogQHB1YmxpY1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVBY3Rpb25zID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQVFBO0FBQ0E7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBaUJBLENBQy9CQyxRQUFlLEVBQ2ZDLFNBQW1DLEVBQ29EO0VBQ3ZGLE9BQU87SUFDTEMsSUFBSSxFQUFFQyx1QkFBVyxDQUFDQyxtQkFBbUI7SUFDckNKLFFBQVEsRUFBUkEsUUFBUTtJQUNSQyxTQUFTLEVBQVRBO0VBQ0YsQ0FBQztBQUNIO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ksb0JBQW9CQSxDQUNsQ0wsUUFBZSxFQUNmTSxHQUFtQixFQUNuQkMsSUFBWSxFQUNaQyxLQUFVLEVBQ29GO0VBQzlGLE9BQU87SUFDTE4sSUFBSSxFQUFFQyx1QkFBVyxDQUFDTSx1QkFBdUI7SUFDekNULFFBQVEsRUFBUkEsUUFBUTtJQUNSTSxHQUFHLEVBQUhBLEdBQUc7SUFD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