@kepler.gl/components 3.3.0-alpha.1 → 3.3.0-alpha.3

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 (126) hide show
  1. package/dist/common/action-panel.js +1 -1
  2. package/dist/common/color-legend.d.ts +1 -1
  3. package/dist/common/data-table/canvas.d.ts +1 -1
  4. package/dist/common/data-table/index.d.ts +1 -1
  5. package/dist/common/dnd-layer-items.d.ts +4 -0
  6. package/dist/common/dnd-layer-items.js +6 -2
  7. package/dist/common/error-boundary.d.ts +1 -1
  8. package/dist/common/file-uploader/file-upload.d.ts +1 -1
  9. package/dist/common/flex-container.d.ts +15 -7
  10. package/dist/common/icon-button.d.ts +53 -6
  11. package/dist/common/icons/arrow-down-full.d.ts +2 -1
  12. package/dist/common/icons/arrow-down-full.js +1 -1
  13. package/dist/common/icons/folder.d.ts +10 -0
  14. package/dist/common/icons/folder.js +51 -0
  15. package/dist/common/icons/index.d.ts +1 -0
  16. package/dist/common/icons/index.js +8 -1
  17. package/dist/common/icons/timeline-marker.d.ts +2 -1
  18. package/dist/common/icons/timeline-marker.js +1 -1
  19. package/dist/common/item-selector/dropdown-list.d.ts +1 -1
  20. package/dist/common/item-selector/dropdown-list.js +1 -1
  21. package/dist/common/item-selector/dropdown-select.d.ts +13 -7
  22. package/dist/common/item-selector/item-selector.d.ts +1 -1
  23. package/dist/common/item-selector/item-selector.js +1 -1
  24. package/dist/common/item-selector/typeahead.d.ts +4 -4
  25. package/dist/common/item-selector/typeahead.js +1 -3
  26. package/dist/common/layout-splitter.d.ts +45 -0
  27. package/dist/common/layout-splitter.js +231 -0
  28. package/dist/common/line-chart.d.ts +7 -3
  29. package/dist/common/line-chart.js +179 -59
  30. package/dist/common/modal.d.ts +11 -5
  31. package/dist/common/modal.js +1 -1
  32. package/dist/common/portaled.d.ts +17 -17
  33. package/dist/common/range-slider.js +1 -3
  34. package/dist/common/slider/mouse-event.d.ts +1 -1
  35. package/dist/common/slider/mouse-event.js +1 -2
  36. package/dist/common/slider/slider-bar-handle.d.ts +1 -1
  37. package/dist/common/slider/slider-bar-handle.js +1 -1
  38. package/dist/common/slider/slider-handle.d.ts +3 -3
  39. package/dist/common/slider/slider-handle.js +1 -1
  40. package/dist/common/slider/slider.d.ts +4 -4
  41. package/dist/common/slider/slider.js +1 -1
  42. package/dist/common/styled-components.d.ts +627 -177
  43. package/dist/common/vertical-toolbar.d.ts +12 -2
  44. package/dist/container.d.ts +3 -2
  45. package/dist/container.js +2 -2
  46. package/dist/context.d.ts +1 -1
  47. package/dist/context.js +1 -1
  48. package/dist/dnd-context.d.ts +4 -3
  49. package/dist/dnd-context.js +64 -9
  50. package/dist/effects/compact-color-picker.d.ts +1 -1
  51. package/dist/effects/effect-configurator.d.ts +2 -4
  52. package/dist/effects/effect-time-configurator.js +1 -1
  53. package/dist/effects/effect-type-list-item.d.ts +1 -1
  54. package/dist/filters/components.d.ts +7 -5
  55. package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +6 -2
  56. package/dist/geocoder-panel.d.ts +2 -2
  57. package/dist/geocoder-panel.js +6 -7
  58. package/dist/hooks/use-dnd-layers.d.ts +4 -3
  59. package/dist/hooks/use-dnd-layers.js +103 -42
  60. package/dist/index.d.ts +3 -2
  61. package/dist/index.js +38 -9
  62. package/dist/injector.d.ts +1 -1
  63. package/dist/kepler-gl.d.ts +167 -27
  64. package/dist/kepler-gl.js +3 -2
  65. package/dist/loading-indicator.d.ts +1 -1
  66. package/dist/map/layer-hover-info.d.ts +7 -3
  67. package/dist/map/layer-hover-info.js +58 -22
  68. package/dist/map/map-control-panel.js +3 -2
  69. package/dist/map/map-control-toolbar.d.ts +29 -4
  70. package/dist/map/map-control.d.ts +11 -4
  71. package/dist/map/map-control.js +7 -6
  72. package/dist/map/map-legend-panel.d.ts +11 -2
  73. package/dist/map/map-legend-panel.js +19 -2
  74. package/dist/map/map-legend.d.ts +19 -2
  75. package/dist/map/map-legend.js +141 -27
  76. package/dist/map/split-map-button.d.ts +6 -1
  77. package/dist/map/split-map-button.js +113 -19
  78. package/dist/map-container.js +20 -3
  79. package/dist/maps-layout.d.ts +3 -0
  80. package/dist/maps-layout.js +86 -26
  81. package/dist/modal-container.d.ts +1 -1
  82. package/dist/modals/cloud-tile.d.ts +1 -2
  83. package/dist/modals/export-map-modal/components.d.ts +9 -5
  84. package/dist/modals/export-video-modal.d.ts +3 -0
  85. package/dist/modals/export-video-modal.js +79 -46
  86. package/dist/modals/export-video-modal.spec.js +2 -2
  87. package/dist/modals/hubble-utils.d.ts +16 -0
  88. package/dist/modals/hubble-utils.js +98 -1
  89. package/dist/modals/modal-dialog.d.ts +1 -1
  90. package/dist/modals/share-map-modal.d.ts +2 -4
  91. package/dist/modals/swipe-composite-utils.d.ts +10 -0
  92. package/dist/modals/swipe-composite-utils.js +108 -0
  93. package/dist/modals/swipe-export-settings.d.ts +24 -0
  94. package/dist/modals/swipe-export-settings.js +370 -0
  95. package/dist/modals/swipe-export-video-container.d.ts +122 -0
  96. package/dist/modals/swipe-export-video-container.js +630 -0
  97. package/dist/modals/swipe-export-video-preview.d.ts +68 -0
  98. package/dist/modals/swipe-export-video-preview.js +339 -0
  99. package/dist/modals/tilesets-modals/tileset-raster-form.js +1 -5
  100. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +7 -3
  101. package/dist/side-panel/layer-manager.d.ts +5 -4
  102. package/dist/side-panel/layer-manager.js +16 -4
  103. package/dist/side-panel/layer-panel/color-selector.d.ts +6 -4
  104. package/dist/side-panel/layer-panel/custom-palette.d.ts +3 -5
  105. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +2 -1
  106. package/dist/side-panel/layer-panel/dataset-layer-group.js +1 -1
  107. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +2 -1
  108. package/dist/side-panel/layer-panel/dataset-layer-section.js +1 -1
  109. package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -11
  110. package/dist/side-panel/layer-panel/layer-configurator.js +130 -82
  111. package/dist/side-panel/layer-panel/layer-group-header.d.ts +15 -0
  112. package/dist/side-panel/layer-panel/layer-group-header.js +179 -0
  113. package/dist/side-panel/layer-panel/layer-list.d.ts +9 -4
  114. package/dist/side-panel/layer-panel/layer-list.js +197 -40
  115. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +2 -10
  116. package/dist/side-panel/panel-tab.d.ts +1 -3
  117. package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
  118. package/dist/side-panel/side-bar.d.ts +1 -6
  119. package/dist/side-panel.d.ts +1 -1
  120. package/dist/types.d.ts +2 -2
  121. package/dist/types.js +1 -1
  122. package/package.json +32 -36
  123. package/dist/map/layer-selector-panel.d.ts +0 -21
  124. package/dist/map/layer-selector-panel.js +0 -85
  125. package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +0 -11
  126. package/dist/side-panel/layer-panel/radius-by-zoom-input.js +0 -220
@@ -25,10 +25,26 @@ export declare const isViewportDisjointed: (props: any) => any;
25
25
  type MapStateProps = {
26
26
  mapState: MapState;
27
27
  };
28
- export declare const mapStateSelector: ((state: MapStateProps, index?: number | undefined) => MapState) & import("reselect").OutputSelectorFields<(args_0: MapState, args_1: number | undefined) => MapState, {
29
- clearCache: () => void;
30
- }> & {
28
+ export declare const mapStateSelector: ((state: MapStateProps, index?: number | undefined) => MapState) & {
31
29
  clearCache: () => void;
30
+ resultsCount: () => number;
31
+ resetResultsCount: () => void;
32
+ } & {
33
+ resultFunc: (resultFuncArgs_0: MapState, resultFuncArgs_1: number | undefined) => MapState;
34
+ memoizedResultFunc: ((resultFuncArgs_0: MapState, resultFuncArgs_1: number | undefined) => MapState) & {
35
+ clearCache: () => void;
36
+ resultsCount: () => number;
37
+ resetResultsCount: () => void;
38
+ };
39
+ lastResult: () => MapState;
40
+ dependencies: [(props: MapStateProps) => MapState, (_: MapStateProps, index?: number) => number | undefined];
41
+ recomputations: () => number;
42
+ resetRecomputations: () => void;
43
+ dependencyRecomputations: () => number;
44
+ resetDependencyRecomputations: () => void;
45
+ } & {
46
+ argsMemoize: typeof import("reselect").weakMapMemoize;
47
+ memoize: typeof import("reselect").weakMapMemoize;
32
48
  };
33
49
  export declare const mapFieldsSelector: (props: KeplerGLProps, index?: number) => {
34
50
  getMapboxRef: (() => React.RefObject<any>) | undefined;
@@ -76,7 +92,7 @@ export declare const sidePanelSelector: (props: KeplerGLProps, availableProvider
76
92
  datasets: any;
77
93
  filters: import("@kepler.gl/types").Filter[];
78
94
  layers: import("@kepler.gl/layers").Layer[];
79
- layerOrder: string[];
95
+ layerOrder: import("@kepler.gl/types").LayerOrder;
80
96
  layerClasses: {
81
97
  point: typeof import("@kepler.gl/layers/dist/point-layer/point-layer").default;
82
98
  arc: typeof import("@kepler.gl/layers/dist/arc-layer/arc-layer").default;
@@ -206,7 +222,7 @@ export declare const geoCoderPanelSelector: (props: KeplerGLProps, dimensions: {
206
222
  mapboxApiAccessToken: string;
207
223
  mapState: MapState;
208
224
  uiState: import("@kepler.gl/types").UiState;
209
- layerOrder: string[];
225
+ layerOrder: import("@kepler.gl/types").LayerOrder;
210
226
  updateVisData: typeof VisStateActions.updateVisData;
211
227
  removeDataset: typeof VisStateActions.removeDataset;
212
228
  updateMap: (viewport: Viewport, mapIndex?: number) => import("@kepler.gl/types").Merge<MapStateActions.UpdateMapUpdaterAction, {
@@ -218,26 +234,120 @@ export declare const geoCoderPanelSelector: (props: KeplerGLProps, dimensions: {
218
234
  /**
219
235
  * Returns array of unique dataset attributions, each with title and url properties.
220
236
  */
221
- export declare const datasetAttributionSelector: ((state: any) => DatasetAttribution[]) & import("reselect").OutputSelectorFields<(args_0: any) => DatasetAttribution[], {
222
- clearCache: () => void;
223
- }> & {
237
+ export declare const datasetAttributionSelector: ((state: any) => DatasetAttribution[]) & {
224
238
  clearCache: () => void;
239
+ resultsCount: () => number;
240
+ resetResultsCount: () => void;
241
+ } & {
242
+ resultFunc: (resultFuncArgs_0: any) => DatasetAttribution[];
243
+ memoizedResultFunc: ((resultFuncArgs_0: any) => DatasetAttribution[]) & {
244
+ clearCache: () => void;
245
+ resultsCount: () => number;
246
+ resetResultsCount: () => void;
247
+ };
248
+ lastResult: () => DatasetAttribution[];
249
+ dependencies: [(state: any) => any];
250
+ recomputations: () => number;
251
+ resetRecomputations: () => void;
252
+ dependencyRecomputations: () => number;
253
+ resetDependencyRecomputations: () => void;
254
+ } & {
255
+ argsMemoize: typeof import("reselect").weakMapMemoize;
256
+ memoize: typeof import("reselect").weakMapMemoize;
225
257
  };
226
- export declare const layerAttributionSelector: ((state: any) => AttributionWithStyle[]) & import("reselect").OutputSelectorFields<(args_0: any, args_1: string) => AttributionWithStyle[], {
227
- clearCache: () => void;
228
- }> & {
258
+ export declare const layerAttributionSelector: ((state: any) => AttributionWithStyle[]) & {
229
259
  clearCache: () => void;
260
+ resultsCount: () => number;
261
+ resetResultsCount: () => void;
262
+ } & {
263
+ resultFunc: (resultFuncArgs_0: any, resultFuncArgs_1: string) => AttributionWithStyle[];
264
+ memoizedResultFunc: ((resultFuncArgs_0: any, resultFuncArgs_1: string) => AttributionWithStyle[]) & {
265
+ clearCache: () => void;
266
+ resultsCount: () => number;
267
+ resetResultsCount: () => void;
268
+ };
269
+ lastResult: () => AttributionWithStyle[];
270
+ dependencies: [(state: any) => any, (state: any) => string];
271
+ recomputations: () => number;
272
+ resetRecomputations: () => void;
273
+ dependencyRecomputations: () => number;
274
+ resetDependencyRecomputations: () => void;
275
+ } & {
276
+ argsMemoize: typeof import("reselect").weakMapMemoize;
277
+ memoize: typeof import("reselect").weakMapMemoize;
230
278
  };
231
279
  export declare const attributionSelector: ((state: any) => {
232
280
  sources: DatasetAttribution[];
233
281
  logos: AttributionWithStyle[];
234
- }) & import("reselect").OutputSelectorFields<(args_0: DatasetAttribution[], args_1: AttributionWithStyle[]) => {
235
- sources: DatasetAttribution[];
236
- logos: AttributionWithStyle[];
237
- }, {
238
- clearCache: () => void;
239
- }> & {
282
+ }) & {
240
283
  clearCache: () => void;
284
+ resultsCount: () => number;
285
+ resetResultsCount: () => void;
286
+ } & {
287
+ resultFunc: (resultFuncArgs_0: DatasetAttribution[], resultFuncArgs_1: AttributionWithStyle[]) => {
288
+ sources: DatasetAttribution[];
289
+ logos: AttributionWithStyle[];
290
+ };
291
+ memoizedResultFunc: ((resultFuncArgs_0: DatasetAttribution[], resultFuncArgs_1: AttributionWithStyle[]) => {
292
+ sources: DatasetAttribution[];
293
+ logos: AttributionWithStyle[];
294
+ }) & {
295
+ clearCache: () => void;
296
+ resultsCount: () => number;
297
+ resetResultsCount: () => void;
298
+ };
299
+ lastResult: () => {
300
+ sources: DatasetAttribution[];
301
+ logos: AttributionWithStyle[];
302
+ };
303
+ dependencies: [((state: any) => DatasetAttribution[]) & {
304
+ clearCache: () => void;
305
+ resultsCount: () => number;
306
+ resetResultsCount: () => void;
307
+ } & {
308
+ resultFunc: (resultFuncArgs_0: any) => DatasetAttribution[];
309
+ memoizedResultFunc: ((resultFuncArgs_0: any) => DatasetAttribution[]) & {
310
+ clearCache: () => void;
311
+ resultsCount: () => number;
312
+ resetResultsCount: () => void;
313
+ };
314
+ lastResult: () => DatasetAttribution[];
315
+ dependencies: [(state: any) => any];
316
+ recomputations: () => number;
317
+ resetRecomputations: () => void;
318
+ dependencyRecomputations: () => number;
319
+ resetDependencyRecomputations: () => void;
320
+ } & {
321
+ argsMemoize: typeof import("reselect").weakMapMemoize;
322
+ memoize: typeof import("reselect").weakMapMemoize;
323
+ }, ((state: any) => AttributionWithStyle[]) & {
324
+ clearCache: () => void;
325
+ resultsCount: () => number;
326
+ resetResultsCount: () => void;
327
+ } & {
328
+ resultFunc: (resultFuncArgs_0: any, resultFuncArgs_1: string) => AttributionWithStyle[];
329
+ memoizedResultFunc: ((resultFuncArgs_0: any, resultFuncArgs_1: string) => AttributionWithStyle[]) & {
330
+ clearCache: () => void;
331
+ resultsCount: () => number;
332
+ resetResultsCount: () => void;
333
+ };
334
+ lastResult: () => AttributionWithStyle[];
335
+ dependencies: [(state: any) => any, (state: any) => string];
336
+ recomputations: () => number;
337
+ resetRecomputations: () => void;
338
+ dependencyRecomputations: () => number;
339
+ resetDependencyRecomputations: () => void;
340
+ } & {
341
+ argsMemoize: typeof import("reselect").weakMapMemoize;
342
+ memoize: typeof import("reselect").weakMapMemoize;
343
+ }];
344
+ recomputations: () => number;
345
+ resetRecomputations: () => void;
346
+ dependencyRecomputations: () => number;
347
+ resetDependencyRecomputations: () => void;
348
+ } & {
349
+ argsMemoize: typeof import("reselect").weakMapMemoize;
350
+ memoize: typeof import("reselect").weakMapMemoize;
241
351
  };
242
352
  export declare const notificationPanelSelector: (props: KeplerGLProps) => {
243
353
  removeNotification: (id: UIStateActions.RemoveNotificationUpdaterAction["payload"]) => import("@kepler.gl/types").Merge<UIStateActions.RemoveNotificationUpdaterAction, {
@@ -376,16 +486,46 @@ export declare function makeGetActionCreators(): ((state: any, props: any) => {
376
486
  uiStateActions: any;
377
487
  providerActions: any;
378
488
  dispatch: any;
379
- }) & import("reselect").OutputSelectorFields<(args_0: any, args_1: any) => {
380
- visStateActions: any;
381
- mapStateActions: any;
382
- mapStyleActions: any;
383
- uiStateActions: any;
384
- providerActions: any;
385
- dispatch: any;
386
- }, {
387
- clearCache: () => void;
388
- }> & {
489
+ }) & {
389
490
  clearCache: () => void;
491
+ resultsCount: () => number;
492
+ resetResultsCount: () => void;
493
+ } & {
494
+ resultFunc: (resultFuncArgs_0: any, resultFuncArgs_1: any) => {
495
+ visStateActions: any;
496
+ mapStateActions: any;
497
+ mapStyleActions: any;
498
+ uiStateActions: any;
499
+ providerActions: any;
500
+ dispatch: any;
501
+ };
502
+ memoizedResultFunc: ((resultFuncArgs_0: any, resultFuncArgs_1: any) => {
503
+ visStateActions: any;
504
+ mapStateActions: any;
505
+ mapStyleActions: any;
506
+ uiStateActions: any;
507
+ providerActions: any;
508
+ dispatch: any;
509
+ }) & {
510
+ clearCache: () => void;
511
+ resultsCount: () => number;
512
+ resetResultsCount: () => void;
513
+ };
514
+ lastResult: () => {
515
+ visStateActions: any;
516
+ mapStateActions: any;
517
+ mapStyleActions: any;
518
+ uiStateActions: any;
519
+ providerActions: any;
520
+ dispatch: any;
521
+ };
522
+ dependencies: [(dispatch: any) => any, (dispatch: any, props: any) => any];
523
+ recomputations: () => number;
524
+ resetRecomputations: () => void;
525
+ dependencyRecomputations: () => number;
526
+ resetDependencyRecomputations: () => void;
527
+ } & {
528
+ argsMemoize: typeof import("reselect").weakMapMemoize;
529
+ memoize: typeof import("reselect").weakMapMemoize;
390
530
  };
391
531
  export default KeplerGlFactory;
package/dist/kepler-gl.js CHANGED
@@ -568,7 +568,8 @@ function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout,
568
568
  visState: visState
569
569
  }, !uiState.readOnly && !readOnly && /*#__PURE__*/_react["default"].createElement(SidePanel, sideFields), /*#__PURE__*/_react["default"].createElement(MapsLayout, {
570
570
  className: "maps",
571
- mapState: this.props.mapState
571
+ mapState: this.props.mapState,
572
+ onSetSwipeComparePercentage: this.props.mapStateActions.setSwipeComparePercentage
572
573
  }, mapContainers)), isExportingImage && /*#__PURE__*/_react["default"].createElement(PlotContainer, plotContainerFields), !isViewportDisjointed(this.props) && interactionConfig.geocoder.enabled && /*#__PURE__*/_react["default"].createElement(GeoCoderPanel, (0, _extends2["default"])({}, geoCoderPanelFields, {
573
574
  index: 0,
574
575
  unsyncedViewports: false
@@ -660,4 +661,4 @@ function mergeActions(actions, userActions) {
660
661
  return _objectSpread(_objectSpread({}, actions), overrides);
661
662
  }
662
663
  var _default = exports["default"] = KeplerGlFactory;
663
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVkdXgiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9rZXBsZXJnbENvbm5lY3QiLCJfcmVhY3RJbnRsIiwiX2xvY2FsaXphdGlvbiIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfY29tbW9uVXRpbHMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29uc3RhbnRzIiwiX3NpZGVQYW5lbCIsIl9tYXBDb250YWluZXIyIiwiX21hcHNMYXlvdXQiLCJfYm90dG9tV2lkZ2V0IiwiX21vZGFsQ29udGFpbmVyIiwiX3Bsb3RDb250YWluZXIiLCJfbm90aWZpY2F0aW9uUGFuZWwiLCJfZ2VvY29kZXJQYW5lbCIsIl9lZmZlY3RNYW5hZ2VyIiwiX2RuZENvbnRleHQiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkdsb2JhbFN0eWxlIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJsYWJlbENvbG9yIiwiQm90dG9tV2lkZ2V0T3V0ZXIiLCJfcmVmIiwiYWJzb2x1dGUiLCJjb25jYXQiLCJpc1ZpZXdwb3J0RGlzam9pbnRlZCIsImV4cG9ydHMiLCJtYXBTdGF0ZSIsImlzU3BsaXQiLCJpc1ZpZXdwb3J0U3luY2VkIiwic3BsaXRNYXBWaWV3cG9ydHMiLCJtYXBTdGF0ZVNlbGVjdG9yIiwiY3JlYXRlU2VsZWN0b3IiLCJfIiwiaW5kZXgiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIm1hcEZpZWxkc1NlbGVjdG9yIiwidW5kZWZpbmVkIiwiYXR0cmlidXRpb24iLCJhdHRyaWJ1dGlvblNlbGVjdG9yIiwiZ2V0TWFwYm94UmVmIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJERUZBVUxUX0tFUExFUl9HTF9QUk9QUyIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJzb3VyY2VzIiwiYXR0cmlidXRpb25Mb2dvcyIsImxvZ29zIiwibWFwU3R5bGUiLCJvbkRlY2tJbml0aWFsaXplZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwib25Nb3VzZU1vdmUiLCJkZWNrR2xQcm9wcyIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJ1aVN0YXRlIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsImxvY2FsZSIsImlzTG9hZGluZ0luZGljYXRvclZpc2libGUiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJzaWRlUGFuZWxXaWR0aCIsIndpZHRoIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJSVExUZXh0UGx1Z2luIiwiZ2V0VmlzaWJsZURhdGFzZXRzIiwiZGF0YXNldHMiLCJmaWx0ZXJPYmplY3RCeVByZWRpY2F0ZSIsImtleSIsIkdFT0NPREVSX0RBVEFTRVRfTkFNRSIsInNpZGVQYW5lbFNlbGVjdG9yIiwiYXZhaWxhYmxlUHJvdmlkZXJzIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcE5hbWUiLCJ2ZXJzaW9uIiwiYXBwV2Vic2l0ZSIsIm9uU2F2ZU1hcCIsIm1hcFN0eWxlQWN0aW9ucyIsImZpbHRlcnMiLCJsYXllcnMiLCJsYXllck9yZGVyIiwibGF5ZXJDbGFzc2VzIiwiaW50ZXJhY3Rpb25Db25maWciLCJtYXBJbmZvIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIm1hcFNhdmVkIiwicHJvdmlkZXJTdGF0ZSIsInBsb3RDb250YWluZXJTZWxlY3RvciIsImhlaWdodCIsInJhdGlvIiwiZXhwb3J0SW1hZ2UiLCJyZXNvbHV0aW9uIiwibGVnZW5kIiwiY2VudGVyIiwiaW1hZ2VTaXplIiwiZXNjYXBlWGh0bWxGb3JXZWJwYWNrIiwibWFwRmllbGRzIiwiYWRkTm90aWZpY2F0aW9uIiwic2V0RXhwb3J0SW1hZ2VTZXR0aW5nIiwic2V0RXhwb3J0SW1hZ2VEYXRhVXJpIiwic2V0RXhwb3J0SW1hZ2VFcnJvciIsInNwbGl0TWFwcyIsImlzU3BsaXRTZWxlY3RvciIsImJvdHRvbVdpZGdldFNlbGVjdG9yIiwiYW5pbWF0aW9uQ29uZmlnIiwidG9nZ2xlTW9kYWwiLCJzaWRlUGFuZWwiLCJtYXJnaW4iLCJsZWZ0IiwibW9kYWxDb250YWluZXJTZWxlY3RvciIsInJvb3ROb2RlIiwicHJvdmlkZXJBY3Rpb25zIiwiY2xvdWRQcm92aWRlcnMiLCJvbkV4cG9ydFRvQ2xvdWRTdWNjZXNzIiwib25Mb2FkQ2xvdWRNYXBTdWNjZXNzIiwib25Mb2FkQ2xvdWRNYXBFcnJvciIsIm9uRXhwb3J0VG9DbG91ZEVycm9yIiwiZ2VvQ29kZXJQYW5lbFNlbGVjdG9yIiwiZGltZW5zaW9ucyIsIl9wcm9wcyR2aXNTdGF0ZSRpbnRlciIsIl9wcm9wcyR2aXNTdGF0ZSRpbnRlcjIiLCJpc0dlb2NvZGVyRW5hYmxlZCIsImdlb2NvZGVyIiwiZW5hYmxlZCIsInVwZGF0ZVZpc0RhdGEiLCJyZW1vdmVEYXRhc2V0IiwidXBkYXRlTWFwIiwiYXBwV2lkdGgiLCJsaW1pdFNlYXJjaCIsImNvbmZpZyIsImRhdGFzZXRBdHRyaWJ1dGlvblNlbGVjdG9yIiwic3RhdGUiLCJ1bmlxdWVBdHRyaWJ1dGlvbnMiLCJfZHMkbWV0YWRhdGEiLCJkcyIsImF0dHJpYnV0aW9ucyIsIm1ldGFkYXRhIiwibGlua3MiLCJtYXRjaCIsImxpbmsiLCJfbGluayRtYXRjaCIsIl9saW5rJG1hdGNoMiIsImhyZWYiLCJ0aXRsZSIsImluZGV4T2YiLCJ1cmwiLCJlcnJvciIsImxheWVyQXR0cmlidXRpb25LZXlTZWxlY3RvciIsIl9zdGF0ZSR2aXNTdGF0ZSIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX2xheWVyJGNvbmZpZyIsIl9sYXllciRtZXRhIiwibGF5ZXIiLCJpc1Zpc2libGUiLCJtZXRhIiwiX2EkbG9nb1VybCIsImxvZ29VcmwiLCJlcnIiLCJsYXllckF0dHJpYnV0aW9uU2VsZWN0b3IiLCJfc3RhdGUkdmlzU3RhdGUyIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIl9sb29wIiwiX2xheWVyJGNvbmZpZzIiLCJfbGF5ZXIkbWV0YTIiLCJhdHRyIiwiZmluZCIsImxheWVyQXR0cmlidXRpb25zIiwidW5pcXVlVGV4dEF0dHJpYnV0aW9ucyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJsYXllckF0dHJpYnV0aW9uIiwibm90aWZpY2F0aW9uUGFuZWxTZWxlY3RvciIsInJlbW92ZU5vdGlmaWNhdGlvbiIsIm5vdGlmaWNhdGlvbnMiLCJtYXBTdHlsZXMiLCJtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJLRVBMRVJfR0xfTkFNRSIsIktFUExFUl9HTF9WRVJTSU9OIiwiRElNRU5TSU9OUyIsImZlYXR1cmVGbGFncyIsIktlcGxlckdsRmFjdG9yeSIsImRlcHMiLCJCb3R0b21XaWRnZXRGYWN0b3J5IiwiR2VvQ29kZXJQYW5lbEZhY3RvcnkiLCJNYXBDb250YWluZXJGYWN0b3J5IiwiTWFwc0xheW91dEZhY3RvcnkiLCJNb2RhbENvbnRhaW5lckZhY3RvcnkiLCJTaWRlUGFuZWxGYWN0b3J5IiwiUGxvdENvbnRhaW5lckZhY3RvcnkiLCJOb3RpZmljYXRpb25QYW5lbEZhY3RvcnkiLCJEbmRDb250ZXh0RmFjdG9yeSIsIkVmZmVjdE1hbmFnZXJGYWN0b3J5IiwiQm90dG9tV2lkZ2V0IiwiR2VvQ29kZXJQYW5lbCIsIk1hcENvbnRhaW5lciIsIk1hcHNMYXlvdXQiLCJNb2RhbENvbnRhaW5lciIsIlNpZGVQYW5lbCIsIlBsb3RDb250YWluZXIiLCJOb3RpZmljYXRpb25QYW5lbCIsIkRuZENvbnRleHQiLCJLZXBsZXJHTCIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJzZXRTdGF0ZSIsImNyZWF0ZVJlZiIsInRoZW1lU2VsZWN0b3IiLCJfdHlwZW9mMiIsImJhc2ljVGhlbWUiLCJUSEVNRSIsImxpZ2h0IiwidGhlbWVMVCIsImJhc2UiLCJ0aGVtZUJTIiwiZGF0YXNldHNTZWxlY3RvciIsInByb3ZpZGVycyIsImhhc1N0b3JhZ2UiLCJzb21lIiwicCIsImhhc1ByaXZhdGVTdG9yYWdlIiwiaGFzU2hhcmUiLCJoYXNTaGFyaW5nVXJsIiwibG9jYWxlTWVzc2FnZXMiLCJjdXN0b21NZXNzYWdlcyIsIm1lcmdlTWVzc2FnZXMiLCJtZXNzYWdlcyIsImRlZmF1bHRTdHlsZXMiLCJ2YWx1ZXMiLCJjdXN0b21TdHlsZXMiLCJtYXAiLCJtcyIsImlkIiwiZ2VuZXJhdGVIYXNoSWQiLCJhbGxTdHlsZXMiLCJyZWR1Y2UiLCJhY2N1Iiwic3R5bGUiLCJsb2FkTWFwU3R5bGVzIiwiY29udGFpbmVySWQiLCJsYXllcklkIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImNvbXBvbmVudERpZE1vdW50IiwiX2dldEFwcGxpY2F0aW9uQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJiYXNlTWFwTGlicmFyeUNvbmZpZyIsIm1hcExpYk5hbWUiLCJfdmFsaWRhdGVNYXBib3hUb2tlbiIsIl9sb2FkTWFwU3R5bGUiLCJvbktlcGxlckdsSW5pdGlhbGl6ZWQiLCJyb290IiwiY3VycmVudCIsIkhUTUxFbGVtZW50Iiwib2JzZXJ2ZURpbWVuc2lvbnMiLCJfaGFuZGxlUmVzaXplIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bm9ic2VydmVEaW1lbnNpb25zIiwidmFsaWRhdGVUb2tlbiIsIkNvbnNvbGUiLCJ3YXJuIiwiTUlTU0lOR19NQVBCT1hfVE9LRU4iLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRwcm9wcyIsIl90aGlzJHByb3BzJGlkIiwiX3RoaXMkcHJvcHMkd2lkdGgiLCJfdGhpcyRwcm9wcyRoZWlnaHQiLCJfdGhpcyRwcm9wcyRjbG91ZFByb3YiLCJhdmFpbGFibGVUaGVtZVNlbGVjdG9yIiwibG9jYWxlTWVzc2FnZXNTZWxlY3RvciIsImlzRXhwb3J0aW5nSW1hZ2UiLCJleHBvcnRpbmciLCJmaWx0ZXJlZERhdGFzZXRzU2VsZWN0b3IiLCJzaWRlRmllbGRzIiwicGxvdENvbnRhaW5lckZpZWxkcyIsImJvdHRvbVdpZGdldEZpZWxkcyIsIm1vZGFsQ29udGFpbmVyRmllbGRzIiwiZ2VvQ29kZXJQYW5lbEZpZWxkcyIsIm5vdGlmaWNhdGlvblBhbmVsRmllbGRzIiwibWFwQ29udGFpbmVycyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJwcmltYXJ5IiwiZGVsZXRlTWFwTGFiZWxzIiwiX2RlbGV0ZU1hcExhYmVscyIsInNldHRpbmdzIiwiUm9vdENvbnRleHQiLCJQcm92aWRlciIsIkZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlciIsIkludGxQcm92aWRlciIsIlN0eWxlU2hlZXRNYW5hZ2VyIiwic2hvdWxkRm9yd2FyZFByb3AiLCJUaGVtZVByb3ZpZGVyIiwiQ2xvdWRMaXN0UHJvdmlkZXIiLCJjbGFzc05hbWUiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsInBvc2l0aW9uIiwicmVmIiwidW5zeW5jZWRWaWV3cG9ydHMiLCJfbWFwQ29udGFpbmVyIiwiaGFzUG9ydGFibGVXaWR0aCIsImJyZWFrUG9pbnRWYWx1ZXMiLCJyb290UmVmIiwiYm90dG9tV2lkZ2V0UmVmIiwiY29udGFpbmVyVyIsImNvbnRhaW5lckgiLCJDb21wb25lbnQiLCJrZXBsZXJHbENvbm5lY3QiLCJtYXBTdGF0ZVRvUHJvcHMiLCJtYWtlTWFwRGlzcGF0Y2hUb1Byb3BzIiwid2l0aFRoZW1lIiwiZGVmYXVsdFVzZXJBY3Rpb25zIiwiZ2V0RGlzcGF0Y2giLCJkaXNwYXRjaCIsImdldFVzZXJBY3Rpb25zIiwiYWN0aW9ucyIsIm1ha2VHZXRBY3Rpb25DcmVhdG9ycyIsInVzZXJBY3Rpb25zIiwiX21hcCIsIlZpc1N0YXRlQWN0aW9ucyIsIk1hcFN0YXRlQWN0aW9ucyIsIk1hcFN0eWxlQWN0aW9ucyIsIlVJU3RhdGVBY3Rpb25zIiwiUHJvdmlkZXJBY3Rpb25zIiwiYmluZEFjdGlvbkNyZWF0b3JzIiwibWVyZ2VBY3Rpb25zIiwiX21hcDIiLCJfc2xpY2VkVG9BcnJheTIiLCJnZXRBY3Rpb25DcmVhdG9ycyIsIm1hcERpc3BhdGNoVG9Qcm9wcyIsIm93blByb3BzIiwiZ3JvdXBlZEFjdGlvbkNyZWF0b3JzIiwib3ZlcnJpZGVzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMva2VwbGVyLWdsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZiwgRGlzcGF0Y2h9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcbmltcG9ydCB7YmluZEFjdGlvbkNyZWF0b3JzfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lLCBTdHlsZVNoZWV0TWFuYWdlciwgVGhlbWVQcm92aWRlcn0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtjb25uZWN0IGFzIGtlcGxlckdsQ29ubmVjdH0gZnJvbSAnLi9jb25uZWN0L2tlcGxlcmdsLWNvbm5lY3QnO1xuaW1wb3J0IHtJbnRsUHJvdmlkZXJ9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHttZXNzYWdlc30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtSb290Q29udGV4dCwgRmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyLCBGZWF0dXJlRmxhZ3N9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGlvbldpdGhTdHlsZSxcbiAgRGF0YXNldEF0dHJpYnV0aW9uLFxuICBPbkVycm9yQ2FsbEJhY2ssXG4gIE9uU3VjY2Vzc0NhbGxCYWNrLFxuICBWaWV3cG9ydCxcbiAgTWFwU3RhdGVcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7XG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgTWFwU3R5bGVBY3Rpb25zLFxuICBQcm92aWRlckFjdGlvbnMsXG4gIFVJU3RhdGVBY3Rpb25zLFxuICBWaXNTdGF0ZUFjdGlvbnNcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuXG5pbXBvcnQge3Nob3VsZEZvcndhcmRQcm9wfSBmcm9tICcuL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbnR5cGUgS2VwbGVyR2xBY3Rpb25zID0ge1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgbWFwU3R5bGVBY3Rpb25zOiB0eXBlb2YgTWFwU3R5bGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuICBwcm92aWRlckFjdGlvbnM6IHR5cGVvZiBQcm92aWRlckFjdGlvbnM7XG59O1xuXG5pbXBvcnQge1xuICBESU1FTlNJT05TLFxuICBLRVBMRVJfR0xfTkFNRSxcbiAgS0VQTEVSX0dMX1ZFUlNJT04sXG4gIFRIRU1FLFxuICBERUZBVUxUX01BUEJPWF9BUElfVVJMLFxuICBHRU9DT0RFUl9EQVRBU0VUX05BTUUsXG4gIE1JU1NJTkdfTUFQQk9YX1RPS0VOXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IFNpZGVQYW5lbEZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsJztcbmltcG9ydCBNYXBDb250YWluZXJGYWN0b3J5IGZyb20gJy4vbWFwLWNvbnRhaW5lcic7XG5pbXBvcnQgTWFwc0xheW91dEZhY3RvcnkgZnJvbSAnLi9tYXBzLWxheW91dCc7XG5pbXBvcnQgQm90dG9tV2lkZ2V0RmFjdG9yeSBmcm9tICcuL2JvdHRvbS13aWRnZXQnO1xuaW1wb3J0IE1vZGFsQ29udGFpbmVyRmFjdG9yeSBmcm9tICcuL21vZGFsLWNvbnRhaW5lcic7XG5pbXBvcnQgUGxvdENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9wbG90LWNvbnRhaW5lcic7XG5pbXBvcnQgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5IGZyb20gJy4vbm90aWZpY2F0aW9uLXBhbmVsJztcbmltcG9ydCBHZW9Db2RlclBhbmVsRmFjdG9yeSBmcm9tICcuL2dlb2NvZGVyLXBhbmVsJztcbmltcG9ydCBFZmZlY3RNYW5hZ2VyRmFjdG9yeSBmcm9tICcuL2VmZmVjdHMvZWZmZWN0LW1hbmFnZXInO1xuaW1wb3J0IERuZENvbnRleHRGYWN0b3J5IGZyb20gJy4vZG5kLWNvbnRleHQnO1xuaW1wb3J0IHtDbG91ZExpc3RQcm92aWRlcn0gZnJvbSAnLi9ob29rcy91c2UtY2xvdWQtbGlzdC1wcm92aWRlcic7XG5cbmltcG9ydCB7XG4gIGZpbHRlck9iamVjdEJ5UHJlZGljYXRlLFxuICB2YWxpZGF0ZVRva2VuLFxuICBtZXJnZU1lc3NhZ2VzLFxuICBvYnNlcnZlRGltZW5zaW9ucyxcbiAgdW5vYnNlcnZlRGltZW5zaW9ucyxcbiAgaGFzUG9ydGFibGVXaWR0aCxcbiAgZ2V0QXBwbGljYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7dGhlbWUgYXMgYmFzaWNUaGVtZSwgdGhlbWVMVCwgdGhlbWVCUywgYnJlYWtQb2ludFZhbHVlc30gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtLZXBsZXJHbFN0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7UHJvdmlkZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvY2xvdWQtcHJvdmlkZXJzJztcblxuLy8gTWF5YmUgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGV4cG9ydGluZyB0aGlzIG9yIGNyZWF0aW5nIGEgdmFyaWFibGVcbi8vIGFzIHBhcnQgb2YgdGhlIGJhc2UuanMgdGhlbWVcbmNvbnN0IEdsb2JhbFN0eWxlID0gc3R5bGVkLmRpdmBcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udEZhbWlseX07XG4gIGZvbnQtd2VpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRXZWlnaHR9O1xuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udFNpemV9O1xuICBsaW5lLWhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5saW5lSGVpZ2h0fTtcblxuICAqLFxuICAqOmJlZm9yZSxcbiAgKjphZnRlciB7XG4gICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgdWwge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgbGkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yfTtcbiAgfVxuXG4gIDpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5tYXBsaWJyZWdsLWN0cmwgLm1hcGxpYnJlZ2wtY3RybC1sb2dvIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLm1hcGJveGdsLWN0cmwgLm1hcGJveGdsLWN0cmwtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuYDtcblxudHlwZSBCb3R0b21XaWRnZXRPdXRlclByb3BzID0ge1xuICBhYnNvbHV0ZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBCb3R0b21XaWRnZXRPdXRlciA9IHN0eWxlZC5kaXY8Qm90dG9tV2lkZ2V0T3V0ZXJQcm9wcz4oXG4gICh7YWJzb2x1dGV9KSA9PiBgXG4gICR7YWJzb2x1dGUgPyAncG9zaXRpb246IGFic29sdXRlOyBib3R0b206IDA7IHJpZ2h0OiAwOycgOiAnJ31cbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIHByZXZlbnQgcGFkZGluZyBmcm9tIGJsb2NraW5nIGlucHV0ICovXG4gICYgPiAqIHtcbiAgICAvKiBhbGwgY2hpbGRyZW4gc2hvdWxkIGFsbG93IGlucHV0ICovXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgfWBcbik7XG5cbmV4cG9ydCBjb25zdCBpc1ZpZXdwb3J0RGlzam9pbnRlZCA9IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICBwcm9wcy5tYXBTdGF0ZS5pc1NwbGl0ICYmXG4gICAgIXByb3BzLm1hcFN0YXRlLmlzVmlld3BvcnRTeW5jZWQgJiZcbiAgICBwcm9wcy5tYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5sZW5ndGggPiAxXG4gICk7XG59O1xuXG50eXBlIE1hcFN0YXRlUHJvcHMgPSB7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXBTdGF0ZVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gIFsocHJvcHM6IE1hcFN0YXRlUHJvcHMpID0+IHByb3BzLm1hcFN0YXRlLCAoXzogTWFwU3RhdGVQcm9wcywgaW5kZXg/OiBudW1iZXIpID0+IGluZGV4XSxcbiAgKG1hcFN0YXRlOiBNYXBTdGF0ZSwgaW5kZXg/OiBudW1iZXIpOiBNYXBTdGF0ZSA9PiB7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5kZXgpKSB7XG4gICAgICAvLyBlaXRoZXIgbm8gaW5kZXggYXJnIG9yIGFuIGludmFsaWQgaW5kZXggd2FzIHByb3ZpZGVkXG4gICAgICAvLyBpdCBpcyBleHBlY3RlZCB0byBiZSBlaXRoZXIgMCBvciAxIHdoZW4gaW4gc3BsaXQgbW9kZVxuICAgICAgLy8gb25seSB1c2UgdGhlIG1hcFN0YXRlXG4gICAgICByZXR1cm4gbWFwU3RhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmlld3BvcnREaXNqb2ludGVkKHttYXBTdGF0ZX0pXG4gICAgICA/IC8vIG1peCB0b2dldGhlciB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBpbnRlbmRlZCBmb3IgdGhpcyBkaXNqb2ludGVkIDxNYXBDb250YWluZXI+IHdpdGggdGhlIG90aGVyIG5lY2Vzc2FyeSBtYXBTdGF0ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHsuLi5tYXBTdGF0ZSwgLi4ubWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHNbaW5kZXggfHwgMF19XG4gICAgICA6IC8vIG90aGVyd2lzZSBvbmx5IHVzZSB0aGUgbWFwU3RhdGVcbiAgICAgICAgbWFwU3RhdGU7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBtYXBGaWVsZHNTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgaW5kZXggPSAwKSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0aW9uID0gYXR0cmlidXRpb25TZWxlY3Rvcihwcm9wcyk7XG4gIHJldHVybiB7XG4gICAgZ2V0TWFwYm94UmVmOiBwcm9wcy5nZXRNYXBib3hSZWYsXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgIG1hcGJveEFwaVVybDogcHJvcHMubWFwYm94QXBpVXJsID8gcHJvcHMubWFwYm94QXBpVXJsIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMubWFwYm94QXBpVXJsLFxuICAgIG1hcFN0YXRlOiBtYXBTdGF0ZVNlbGVjdG9yKHByb3BzLCBpbmRleCksXG4gICAgZGF0YXNldEF0dHJpYnV0aW9uczogYXR0cmlidXRpb24uc291cmNlcyxcbiAgICBhdHRyaWJ1dGlvbkxvZ29zOiBhdHRyaWJ1dGlvbi5sb2dvcyxcbiAgICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gICAgb25EZWNrSW5pdGlhbGl6ZWQ6IHByb3BzLm9uRGVja0luaXRpYWxpemVkLFxuICAgIG9uVmlld1N0YXRlQ2hhbmdlOiBwcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSxcbiAgICBvbk1vdXNlTW92ZTogcHJvcHMub25Nb3VzZU1vdmUsXG4gICAgZGVja0dsUHJvcHM6IHByb3BzLmRlY2tHbFByb3BzLFxuICAgIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgICBtYXBTdGF0ZUFjdGlvbnM6IHByb3BzLm1hcFN0YXRlQWN0aW9ucyxcblxuICAgIC8vIHZpc1N0YXRlXG4gICAgdmlzU3RhdGU6IHByb3BzLnZpc1N0YXRlLFxuXG4gICAgLy8gdWlTdGF0ZVxuICAgIGFjdGl2ZVNpZGVQYW5lbDogcHJvcHMudWlTdGF0ZS5hY3RpdmVTaWRlUGFuZWwsXG4gICAgbWFwQ29udHJvbHM6IHByb3BzLnVpU3RhdGUubWFwQ29udHJvbHMsXG4gICAgcmVhZE9ubHk6IHByb3BzLnVpU3RhdGUucmVhZE9ubHksXG4gICAgbG9jYWxlOiBwcm9wcy51aVN0YXRlLmxvY2FsZSxcbiAgICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlOiBOdW1iZXIocHJvcHMudmlzU3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlKSA+IDAsXG4gICAgc2lkZVBhbmVsV2lkdGg6IHByb3BzLnNpZGVQYW5lbFdpZHRoID8gcHJvcHMuc2lkZVBhbmVsV2lkdGggOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy53aWR0aCxcblxuICAgIC8vIG1hcFN0eWxlXG4gICAgdG9wTWFwQ29udGFpbmVyUHJvcHM6IHByb3BzLnRvcE1hcENvbnRhaW5lclByb3BzLFxuICAgIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBwcm9wcy5ib3R0b21NYXBDb250YWluZXJQcm9wcyxcblxuICAgIC8vIHRyYW5zZm9ybVJlcXVlc3QgZm9yIE1hcGJveCBiYXNlbWFwc1xuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IHByb3BzLnRyYW5zZm9ybVJlcXVlc3QsXG5cbiAgICBSVExUZXh0UGx1Z2luOiBwcm9wcy5SVExUZXh0UGx1Z2luXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZURhdGFzZXRzKGRhdGFzZXRzKSB7XG4gIC8vIFdlIGRvbid0IHdhbnQgR2VvY29kZXIgZGF0YXNldCB0byBiZSBwcmVzZW50IGluIFNpZGVQYW5lbCBkYXRhc2V0IGxpc3RcbiAgcmV0dXJuIGZpbHRlck9iamVjdEJ5UHJlZGljYXRlKGRhdGFzZXRzLCBrZXkgPT4ga2V5ICE9PSBHRU9DT0RFUl9EQVRBU0VUX05BTUUpO1xufVxuXG5leHBvcnQgY29uc3Qgc2lkZVBhbmVsU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIGF2YWlsYWJsZVByb3ZpZGVycywgZmlsdGVyZWREYXRhc2V0cykgPT4gKHtcbiAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSA/IHByb3BzLmFwcE5hbWUgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5hcHBOYW1lLFxuICB2ZXJzaW9uOiBwcm9wcy52ZXJzaW9uID8gcHJvcHMudmVyc2lvbiA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLnZlcnNpb24sXG4gIGFwcFdlYnNpdGU6IHByb3BzLmFwcFdlYnNpdGUsXG4gIG1hcFN0eWxlOiBwcm9wcy5tYXBTdHlsZSxcbiAgb25TYXZlTWFwOiBwcm9wcy5vblNhdmVNYXAsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIG1hcFN0eWxlQWN0aW9uczogcHJvcHMubWFwU3R5bGVBY3Rpb25zLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdWlTdGF0ZUFjdGlvbnM6IHByb3BzLnVpU3RhdGVBY3Rpb25zLFxuICBtYXBTdGF0ZUFjdGlvbnM6IHByb3BzLm1hcFN0YXRlQWN0aW9ucyxcblxuICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgZmlsdGVyczogcHJvcHMudmlzU3RhdGUuZmlsdGVycyxcbiAgbGF5ZXJzOiBwcm9wcy52aXNTdGF0ZS5sYXllcnMsXG4gIGxheWVyT3JkZXI6IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXIsXG4gIGxheWVyQ2xhc3NlczogcHJvcHMudmlzU3RhdGUubGF5ZXJDbGFzc2VzLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogcHJvcHMudmlzU3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gIG1hcEluZm86IHByb3BzLnZpc1N0YXRlLm1hcEluZm8sXG4gIGxheWVyQmxlbmRpbmc6IHByb3BzLnZpc1N0YXRlLmxheWVyQmxlbmRpbmcsXG4gIG92ZXJsYXlCbGVuZGluZzogcHJvcHMudmlzU3RhdGUub3ZlcmxheUJsZW5kaW5nLFxuXG4gIHdpZHRoOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCA/IHByb3BzLnNpZGVQYW5lbFdpZHRoIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG4gIGF2YWlsYWJsZVByb3ZpZGVycyxcbiAgbWFwU2F2ZWQ6IHByb3BzLnByb3ZpZGVyU3RhdGUubWFwU2F2ZWRcbn0pO1xuXG5leHBvcnQgY29uc3QgcGxvdENvbnRhaW5lclNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiAoe1xuICB3aWR0aDogcHJvcHMud2lkdGgsXG4gIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICByYXRpbzogcHJvcHMudWlTdGF0ZS5leHBvcnRJbWFnZS5yYXRpbyxcbiAgcmVzb2x1dGlvbjogcHJvcHMudWlTdGF0ZS5leHBvcnRJbWFnZS5yZXNvbHV0aW9uLFxuICBsZWdlbmQ6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UubGVnZW5kLFxuICBjZW50ZXI6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UuY2VudGVyLFxuICBpbWFnZVNpemU6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UuaW1hZ2VTaXplLFxuICBlc2NhcGVYaHRtbEZvcldlYnBhY2s6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UuZXNjYXBlWGh0bWxGb3JXZWJwYWNrLFxuXG4gIG1hcEZpZWxkczogbWFwRmllbGRzU2VsZWN0b3IocHJvcHMpLFxuICBhZGROb3RpZmljYXRpb246IHByb3BzLnVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbixcbiAgc2V0RXhwb3J0SW1hZ2VTZXR0aW5nOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZVNldHRpbmcsXG4gIHNldEV4cG9ydEltYWdlRGF0YVVyaTogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VEYXRhVXJpLFxuICBzZXRFeHBvcnRJbWFnZUVycm9yOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZUVycm9yLFxuICBzcGxpdE1hcHM6IHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwc1xufSk7XG5cbmV4cG9ydCBjb25zdCBpc1NwbGl0U2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IGJvdHRvbVdpZGdldFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCB0aGVtZSkgPT4gKHtcbiAgZmlsdGVyczogcHJvcHMudmlzU3RhdGUuZmlsdGVycyxcbiAgZGF0YXNldHM6IHByb3BzLnZpc1N0YXRlLmRhdGFzZXRzLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBsYXllcnM6IHByb3BzLnZpc1N0YXRlLmxheWVycyxcbiAgYW5pbWF0aW9uQ29uZmlnOiBwcm9wcy52aXNTdGF0ZS5hbmltYXRpb25Db25maWcsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB0b2dnbGVNb2RhbDogcHJvcHMudWlTdGF0ZUFjdGlvbnMudG9nZ2xlTW9kYWwsXG4gIHNpZGVQYW5lbFdpZHRoOiBwcm9wcy51aVN0YXRlLnJlYWRPbmx5ID8gMCA6IHByb3BzLnNpZGVQYW5lbFdpZHRoICsgdGhlbWUuc2lkZVBhbmVsLm1hcmdpbi5sZWZ0XG59KTtcblxuZXhwb3J0IGNvbnN0IG1vZGFsQ29udGFpbmVyU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIHJvb3ROb2RlKSA9PiAoe1xuICBhcHBOYW1lOiBwcm9wcy5hcHBOYW1lID8gcHJvcHMuYXBwTmFtZSA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmFwcE5hbWUsXG4gIG1hcFN0eWxlOiBwcm9wcy5tYXBTdHlsZSxcbiAgdmlzU3RhdGU6IHByb3BzLnZpc1N0YXRlLFxuICBtYXBTdGF0ZTogcHJvcHMubWFwU3RhdGUsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIHByb3ZpZGVyU3RhdGU6IHByb3BzLnByb3ZpZGVyU3RhdGUsXG5cbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBib3hBcGlVcmw6IHByb3BzLm1hcGJveEFwaVVybCxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgbWFwU3R5bGVBY3Rpb25zOiBwcm9wcy5tYXBTdHlsZUFjdGlvbnMsXG4gIHByb3ZpZGVyQWN0aW9uczogcHJvcHMucHJvdmlkZXJBY3Rpb25zLFxuXG4gIHJvb3ROb2RlLFxuICAvLyBVc2VyIGRlZmluZWQgY2xvdWQgcHJvdmlkZXIgcHJvcHNcbiAgY2xvdWRQcm92aWRlcnM6IHByb3BzLmNsb3VkUHJvdmlkZXJzXG4gICAgPyBwcm9wcy5jbG91ZFByb3ZpZGVyc1xuICAgIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuY2xvdWRQcm92aWRlcnMsXG4gIG9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3M6IHByb3BzLm9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3MsXG4gIG9uTG9hZENsb3VkTWFwU3VjY2VzczogcHJvcHMub25Mb2FkQ2xvdWRNYXBTdWNjZXNzLFxuICBvbkxvYWRDbG91ZE1hcEVycm9yOiBwcm9wcy5vbkxvYWRDbG91ZE1hcEVycm9yLFxuICBvbkV4cG9ydFRvQ2xvdWRFcnJvcjogcHJvcHMub25FeHBvcnRUb0Nsb3VkRXJyb3Jcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VvQ29kZXJQYW5lbFNlbGVjdG9yID0gKFxuICBwcm9wczogS2VwbGVyR0xQcm9wcyxcbiAgZGltZW5zaW9uczoge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfVxuKSA9PiAoe1xuICBpc0dlb2NvZGVyRW5hYmxlZDogcHJvcHMudmlzU3RhdGUuaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZCxcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBTdGF0ZTogcHJvcHMubWFwU3RhdGUsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIGxheWVyT3JkZXI6IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXIsXG4gIHVwZGF0ZVZpc0RhdGE6IHByb3BzLnZpc1N0YXRlQWN0aW9ucy51cGRhdGVWaXNEYXRhLFxuICByZW1vdmVEYXRhc2V0OiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMucmVtb3ZlRGF0YXNldCxcbiAgdXBkYXRlTWFwOiBwcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwLFxuICBhcHBXaWR0aDogZGltZW5zaW9ucy53aWR0aCxcbiAgbGltaXRTZWFyY2g6IHByb3BzLnZpc1N0YXRlLmludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmNvbmZpZz8ubGltaXRTZWFyY2ggPz8gZmFsc2Vcbn0pO1xuXG4vKipcbiAqIFJldHVybnMgYXJyYXkgb2YgdW5pcXVlIGRhdGFzZXQgYXR0cmlidXRpb25zLCBlYWNoIHdpdGggdGl0bGUgYW5kIHVybCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgY29uc3QgZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgW3N0YXRlID0+IHN0YXRlLnZpc1N0YXRlLmRhdGFzZXRzXSxcbiAgZGF0YXNldHMgPT4ge1xuICAgIGNvbnN0IHVuaXF1ZUF0dHJpYnV0aW9uczogRGF0YXNldEF0dHJpYnV0aW9uW10gPSBbXTtcbiAgICBPYmplY3Qua2V5cyhkYXRhc2V0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgZHMgPSBkYXRhc2V0c1trZXldO1xuICAgICAgY29uc3QgYXR0cmlidXRpb25zID0gZHM/Lm1ldGFkYXRhPy5hdHRyaWJ1dGlvbnM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyaWJ1dGlvbnMpKSB7XG4gICAgICAgIGF0dHJpYnV0aW9ucy5mb3JFYWNoKGF0dHJpYnV0aW9uID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gYXR0cmlidXRpb24gY2FuIGJlIGEgcmF3IHN0cmluZyBvciBhIHN0cmluZyB3aXRoIGxpbmsgdGFnc1xuICAgICAgICAgICAgY29uc3QgbGlua3MgPSBhdHRyaWJ1dGlvbi5tYXRjaCgvPGFbXl0rP2E+L2cpO1xuICAgICAgICAgICAgaWYgKGxpbmtzKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGlua3M/LmZvckVhY2gobGluayA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBocmVmID0gbGluay5tYXRjaCgvaHJlZj1cIihbXlwiXSopLyk/LlsxXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gbGluay5tYXRjaCgvdGl0bGU9XCIoW15cIl0qKS8pPy5bMV07XG4gICAgICAgICAgICAgICAgICBpZiAoaHJlZiAmJiB0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICB1bmlxdWVBdHRyaWJ1dGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGAke2xpbmsuaW5kZXhPZignJmNvcHk7JykgPj0gMCA/ICfCqSAnIDogJyd9JHt0aXRsZX1gLFxuICAgICAgICAgICAgICAgICAgICAgIHVybDogaHJlZlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBqdXN0IGlnbm9yZSBmb3Igbm93XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVuaXF1ZUF0dHJpYnV0aW9ucy5wdXNoKHt0aXRsZTogYXR0cmlidXRpb24sIHVybDogbnVsbH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHVuaXF1ZUF0dHJpYnV0aW9ucztcbiAgfVxuKTtcblxuLyoqXG4gKiBDb2xsZWN0IHVuaXF1ZSBsYXllci1sZXZlbCBhdHRyaWJ1dGlvbnMgZnJvbSB2aXNpYmxlIGxheWVycy5cbiAqIEJ1aWxkcyBhIHNlcmlhbGl6ZWQgY2FjaGUga2V5IGZyb20gYXR0cmlidXRpb24gdmFsdWVzIHNvIGNyZWF0ZVNlbGVjdG9yXG4gKiBjYW4gZGV0ZWN0IGluLXBsYWNlIG11dGF0aW9ucyB0byBsYXllci5tZXRhLlxuICovXG5jb25zdCBsYXllckF0dHJpYnV0aW9uS2V5U2VsZWN0b3IgPSAoc3RhdGU6IGFueSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxheWVyczogYW55W10gPSBzdGF0ZS52aXNTdGF0ZT8ubGF5ZXJzO1xuICBpZiAoIWxheWVycykgcmV0dXJuICcnO1xuICBsZXQga2V5ID0gJyc7XG4gIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgaWYgKGxheWVyLmNvbmZpZz8uaXNWaXNpYmxlICYmIGxheWVyLm1ldGE/LmF0dHJpYnV0aW9uKSB7XG4gICAgICBjb25zdCBhID0gbGF5ZXIubWV0YS5hdHRyaWJ1dGlvbjtcbiAgICAgIGtleSArPSBgJHthLnRpdGxlfVxcMCR7YS51cmx9XFwwJHthLmxvZ29VcmwgPz8gJyd9XFwwYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtleTtcbn07XG5cbmV4cG9ydCBjb25zdCBsYXllckF0dHJpYnV0aW9uU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgWyhzdGF0ZTogYW55KSA9PiBzdGF0ZS52aXNTdGF0ZT8ubGF5ZXJzLCBsYXllckF0dHJpYnV0aW9uS2V5U2VsZWN0b3JdLFxuICAobGF5ZXJzOiBhbnlbXSk6IEF0dHJpYnV0aW9uV2l0aFN0eWxlW10gPT4ge1xuICAgIGNvbnN0IGF0dHJpYnV0aW9uczogQXR0cmlidXRpb25XaXRoU3R5bGVbXSA9IFtdO1xuICAgIGlmICghbGF5ZXJzKSByZXR1cm4gYXR0cmlidXRpb25zO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICBpZiAobGF5ZXIuY29uZmlnPy5pc1Zpc2libGUgJiYgbGF5ZXIubWV0YT8uYXR0cmlidXRpb24pIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IGxheWVyLm1ldGEuYXR0cmlidXRpb247XG4gICAgICAgIGlmIChhdHRyLnRpdGxlICYmICFhdHRyaWJ1dGlvbnMuZmluZChhID0+IGEudGl0bGUgPT09IGF0dHIudGl0bGUgJiYgYS51cmwgPT09IGF0dHIudXJsKSkge1xuICAgICAgICAgIGF0dHJpYnV0aW9ucy5wdXNoKGF0dHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhdHRyaWJ1dGlvbnM7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBhdHRyaWJ1dGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gIFtkYXRhc2V0QXR0cmlidXRpb25TZWxlY3RvciwgbGF5ZXJBdHRyaWJ1dGlvblNlbGVjdG9yXSxcbiAgKFxuICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnM6IERhdGFzZXRBdHRyaWJ1dGlvbltdLFxuICAgIGxheWVyQXR0cmlidXRpb25zOiBBdHRyaWJ1dGlvbldpdGhTdHlsZVtdXG4gICk6IHtcbiAgICBzb3VyY2VzOiBEYXRhc2V0QXR0cmlidXRpb25bXTtcbiAgICBsb2dvczogQXR0cmlidXRpb25XaXRoU3R5bGVbXTtcbiAgfSA9PiB7XG4gICAgY29uc3QgdW5pcXVlVGV4dEF0dHJpYnV0aW9uczogRGF0YXNldEF0dHJpYnV0aW9uW10gPSBbLi4uZGF0YXNldEF0dHJpYnV0aW9uc107XG4gICAgY29uc3QgbG9nb3M6IEF0dHJpYnV0aW9uV2l0aFN0eWxlW10gPSBbXTtcblxuICAgIGxheWVyQXR0cmlidXRpb25zLmZvckVhY2gobGF5ZXJBdHRyaWJ1dGlvbiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICF1bmlxdWVUZXh0QXR0cmlidXRpb25zLmZpbmQoXG4gICAgICAgICAgYSA9PiBhLnRpdGxlID09PSBsYXllckF0dHJpYnV0aW9uLnRpdGxlICYmIGEudXJsID09PSBsYXllckF0dHJpYnV0aW9uLnVybFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdW5pcXVlVGV4dEF0dHJpYnV0aW9ucy5wdXNoKHt0aXRsZTogbGF5ZXJBdHRyaWJ1dGlvbi50aXRsZSwgdXJsOiBsYXllckF0dHJpYnV0aW9uLnVybH0pO1xuICAgICAgfVxuICAgICAgaWYgKGxheWVyQXR0cmlidXRpb24ubG9nb1VybCAmJiAhbG9nb3MuZmluZChhID0+IGEubG9nb1VybCA9PT0gbGF5ZXJBdHRyaWJ1dGlvbi5sb2dvVXJsKSkge1xuICAgICAgICBsb2dvcy5wdXNoKGxheWVyQXR0cmlidXRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtzb3VyY2VzOiB1bmlxdWVUZXh0QXR0cmlidXRpb25zLCBsb2dvc307XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBub3RpZmljYXRpb25QYW5lbFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiAoe1xuICByZW1vdmVOb3RpZmljYXRpb246IHByb3BzLnVpU3RhdGVBY3Rpb25zLnJlbW92ZU5vdGlmaWNhdGlvbixcbiAgbm90aWZpY2F0aW9uczogcHJvcHMudWlTdGF0ZS5ub3RpZmljYXRpb25zXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTID0ge1xuICBtYXBTdHlsZXM6IFtdLFxuICBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdDogZmFsc2UsXG4gIG1hcGJveEFwaVVybDogREVGQVVMVF9NQVBCT1hfQVBJX1VSTCxcbiAgd2lkdGg6IDgwMCxcbiAgaGVpZ2h0OiA4MDAsXG4gIGFwcE5hbWU6IEtFUExFUl9HTF9OQU1FLFxuICB2ZXJzaW9uOiBLRVBMRVJfR0xfVkVSU0lPTixcbiAgc2lkZVBhbmVsV2lkdGg6IERJTUVOU0lPTlMuc2lkZVBhbmVsLndpZHRoLFxuICB0aGVtZToge30sXG4gIGNsb3VkUHJvdmlkZXJzOiBbXSxcbiAgcmVhZE9ubHk6IGZhbHNlLFxuICBmZWF0dXJlRmxhZ3M6IHt9XG59O1xuXG50eXBlIEtlcGxlckdMQmFzaWNQcm9wcyA9IHtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsPzogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuXG4gIGFwcFdlYnNpdGU/OiBhbnk7XG4gIG9uU2F2ZU1hcD86ICgpID0+IHZvaWQ7XG4gIG9uVmlld1N0YXRlQ2hhbmdlPzogKHZpZXdTdGF0ZTogVmlld3BvcnQpID0+IHZvaWQ7XG4gIG9uRGVja0luaXRpYWxpemVkPzogKCkgPT4gdm9pZDtcbiAgb25LZXBsZXJHbEluaXRpYWxpemVkPzogKCkgPT4gdm9pZDtcbiAgZ2V0TWFwYm94UmVmPzogKCkgPT4gUmVhY3QuUmVmT2JqZWN0PGFueT47XG4gIG1hcFN0eWxlcz86IHtpZDogc3RyaW5nOyBzdHlsZT86IG9iamVjdH1bXTtcbiAgbWFwU3R5bGVzUmVwbGFjZURlZmF1bHQ/OiBib29sZWFuO1xuICBhcHBOYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBzaWRlUGFuZWxXaWR0aD86IG51bWJlcjtcbiAgdGhlbWU/OiBvYmplY3Q7XG4gIGNsb3VkUHJvdmlkZXJzPzogUHJvdmlkZXJbXTtcbiAgZGVja0dsUHJvcHM/OiBvYmplY3Q7XG4gIG9uTG9hZENsb3VkTWFwU3VjY2Vzcz86IE9uU3VjY2Vzc0NhbGxCYWNrO1xuICBvbkxvYWRDbG91ZE1hcEVycm9yPzogT25FcnJvckNhbGxCYWNrO1xuICBvbk1vdXNlTW92ZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudCAmIHtsbmdMYXQ/OiBbbnVtYmVyLCBudW1iZXJdfSkgPT4gdm9pZDtcbiAgb25FeHBvcnRUb0Nsb3VkU3VjY2Vzcz86IE9uU3VjY2Vzc0NhbGxCYWNrO1xuICBvbkV4cG9ydFRvQ2xvdWRFcnJvcj86IE9uRXJyb3JDYWxsQmFjaztcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBmZWF0dXJlRmxhZ3M/OiBGZWF0dXJlRmxhZ3M7XG5cbiAgbG9jYWxlTWVzc2FnZXM/OiB7W2tleTogc3RyaW5nXToge1trZXk6IHN0cmluZ106IHN0cmluZ319O1xuICBkaXNwYXRjaDogRGlzcGF0Y2g8YW55PjtcblxuICB0b3BNYXBDb250YWluZXJQcm9wcz86IG9iamVjdDtcbiAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHM/OiBvYmplY3Q7XG5cbiAgdHJhbnNmb3JtUmVxdWVzdD86ICh1cmw6IHN0cmluZykgPT4ge3VybDogc3RyaW5nfTtcblxuICAvKiogUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIHJlbW90ZSBSVEwgdGV4dCBwbHVnaW4sIG9yIGEgVVJMIHN0cmluZyB0byBzZWxmLWhvc3QgaXQuICovXG4gIFJUTFRleHRQbHVnaW4/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgS2VwbGVyR0xQcm9wcyA9IEtlcGxlckdsU3RhdGUgJiBLZXBsZXJHbEFjdGlvbnMgJiBLZXBsZXJHTEJhc2ljUHJvcHM7XG50eXBlIEtlcGxlckdMQ29tcFN0YXRlID0ge1xuICBkaW1lbnNpb25zOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9IHwgbnVsbDtcbn07XG5cbktlcGxlckdsRmFjdG9yeS5kZXBzID0gW1xuICBCb3R0b21XaWRnZXRGYWN0b3J5LFxuICBHZW9Db2RlclBhbmVsRmFjdG9yeSxcbiAgTWFwQ29udGFpbmVyRmFjdG9yeSxcbiAgTWFwc0xheW91dEZhY3RvcnksXG4gIE1vZGFsQ29udGFpbmVyRmFjdG9yeSxcbiAgU2lkZVBhbmVsRmFjdG9yeSxcbiAgUGxvdENvbnRhaW5lckZhY3RvcnksXG4gIE5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeSxcbiAgRG5kQ29udGV4dEZhY3RvcnksXG4gIEVmZmVjdE1hbmFnZXJGYWN0b3J5XG5dO1xuXG5mdW5jdGlvbiBLZXBsZXJHbEZhY3RvcnkoXG4gIEJvdHRvbVdpZGdldDogUmV0dXJuVHlwZTx0eXBlb2YgQm90dG9tV2lkZ2V0RmFjdG9yeT4sXG4gIEdlb0NvZGVyUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIEdlb0NvZGVyUGFuZWxGYWN0b3J5PixcbiAgTWFwQ29udGFpbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250YWluZXJGYWN0b3J5PixcbiAgTWFwc0xheW91dDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwc0xheW91dEZhY3Rvcnk+LFxuICBNb2RhbENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgTW9kYWxDb250YWluZXJGYWN0b3J5PixcbiAgU2lkZVBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBTaWRlUGFuZWxGYWN0b3J5PixcbiAgUGxvdENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgUGxvdENvbnRhaW5lckZhY3Rvcnk+LFxuICBOb3RpZmljYXRpb25QYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5PixcbiAgRG5kQ29udGV4dDogUmV0dXJuVHlwZTx0eXBlb2YgRG5kQ29udGV4dEZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPEtlcGxlckdMQmFzaWNQcm9wcyAmIHtzZWxlY3RvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBLZXBsZXJHbFN0YXRlfT4ge1xuICAvKiogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXBsZXItZ2wnKS5VbmNvbm5lY3RlZEtlcGxlckdsUHJvcHN9IEtlcGxlckdsUHJvcHMgKi9cbiAgLyoqIEBhdWdtZW50cyBSZWFjdC5Db21wb25lbnQ8S2VwbGVyR2xQcm9wcz4gKi9cbiAgY2xhc3MgS2VwbGVyR0wgZXh0ZW5kcyBDb21wb25lbnQ8XG4gICAgS2VwbGVyR0xQcm9wcyAmIHtzZWxlY3RvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBLZXBsZXJHbFN0YXRlfSxcbiAgICBLZXBsZXJHTENvbXBTdGF0ZVxuICA+IHtcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFM7XG5cbiAgICBzdGF0ZTogS2VwbGVyR0xDb21wU3RhdGUgPSB7XG4gICAgICBkaW1lbnNpb25zOiBudWxsXG4gICAgfTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWc/LlsnbWFwYm94J10/Lm1hcExpYk5hbWUgPT09ICdNYXBib3gnKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwYm94VG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xvYWRNYXBTdHlsZSgpO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uS2VwbGVyR2xJbml0aWFsaXplZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uS2VwbGVyR2xJbml0aWFsaXplZCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5yb290LmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5yb290LmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtkaW1lbnNpb25zfSk7XG4gICAgfTtcblxuICAgIHN0YXRpYyBjb250ZXh0VHlwZSA9IFJvb3RDb250ZXh0O1xuXG4gICAgcm9vdCA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICBib3R0b21XaWRnZXRSZWYgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICAvKiBzZWxlY3RvcnMgKi9cbiAgICB0aGVtZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudGhlbWU7XG4gICAgYXZhaWxhYmxlVGhlbWVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMudGhlbWVTZWxlY3RvciwgdGhlbWUgPT5cbiAgICAgIHR5cGVvZiB0aGVtZSA9PT0gJ29iamVjdCdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5iYXNpY1RoZW1lLFxuICAgICAgICAgICAgLi4udGhlbWVcbiAgICAgICAgICB9XG4gICAgICAgIDogdGhlbWUgPT09IFRIRU1FLmxpZ2h0XG4gICAgICAgID8gdGhlbWVMVFxuICAgICAgICA6IHRoZW1lID09PSBUSEVNRS5iYXNlXG4gICAgICAgID8gdGhlbWVCU1xuICAgICAgICA6IHRoZW1lXG4gICAgKTtcblxuICAgIGRhdGFzZXRzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5kYXRhc2V0cztcbiAgICBmaWx0ZXJlZERhdGFzZXRzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmRhdGFzZXRzU2VsZWN0b3IsIGdldFZpc2libGVEYXRhc2V0cyk7XG5cbiAgICBhdmFpbGFibGVQcm92aWRlcnMgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gcHJvcHMuY2xvdWRQcm92aWRlcnMsXG4gICAgICBwcm92aWRlcnMgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShwcm92aWRlcnMpICYmIHByb3ZpZGVycy5sZW5ndGhcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgaGFzU3RvcmFnZTogcHJvdmlkZXJzLnNvbWUocCA9PiBwLmhhc1ByaXZhdGVTdG9yYWdlKCkpLFxuICAgICAgICAgICAgICBoYXNTaGFyZTogcHJvdmlkZXJzLnNvbWUocCA9PiBwLmhhc1NoYXJpbmdVcmwoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9XG4gICAgKTtcblxuICAgIGxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gcHJvcHMubG9jYWxlTWVzc2FnZXMsXG4gICAgICBjdXN0b21NZXNzYWdlcyA9PiAoY3VzdG9tTWVzc2FnZXMgPyBtZXJnZU1lc3NhZ2VzKG1lc3NhZ2VzLCBjdXN0b21NZXNzYWdlcykgOiBtZXNzYWdlcylcbiAgICApO1xuXG4gICAgLyogcHJpdmF0ZSBtZXRob2RzICovXG4gICAgX3ZhbGlkYXRlTWFwYm94VG9rZW4oKSB7XG4gICAgICBjb25zdCB7bWFwYm94QXBpQWNjZXNzVG9rZW59ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICghdmFsaWRhdGVUb2tlbihtYXBib3hBcGlBY2Nlc3NUb2tlbikpIHtcbiAgICAgICAgQ29uc29sZS53YXJuKE1JU1NJTkdfTUFQQk9YX1RPS0VOKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfbG9hZE1hcFN0eWxlID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFN0eWxlcyA9IE9iamVjdC52YWx1ZXModGhpcy5wcm9wcy5tYXBTdHlsZS5tYXBTdHlsZXMpO1xuICAgICAgLy8gYWRkIGlkIHRvIGN1c3RvbSBtYXAgc3R5bGVzIGlmIG5vdCBnaXZlblxuICAgICAgY29uc3QgY3VzdG9tU3R5bGVzID0gKHRoaXMucHJvcHMubWFwU3R5bGVzIHx8IFtdKS5tYXAobXMgPT4gKHtcbiAgICAgICAgLi4ubXMsXG4gICAgICAgIGlkOiBtcy5pZCB8fCBnZW5lcmF0ZUhhc2hJZCgpXG4gICAgICB9KSk7XG5cbiAgICAgIGNvbnN0IGFsbFN0eWxlcyA9IFsuLi5jdXN0b21TdHlsZXMsIC4uLmRlZmF1bHRTdHlsZXNdLnJlZHVjZSgoYWNjdSwgc3R5bGUpID0+IHtcbiAgICAgICAgYWNjdVtzdHlsZS5pZF0gPSBzdHlsZTtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIHRoaXMucHJvcHMubWFwU3R5bGVBY3Rpb25zLmxvYWRNYXBTdHlsZXMoYWxsU3R5bGVzKTtcbiAgICB9O1xuXG4gICAgX2RlbGV0ZU1hcExhYmVscyA9IChjb250YWluZXJJZCwgbGF5ZXJJZCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXAoY29udGFpbmVySWQsIGxheWVySWQpO1xuICAgIH07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaWQgPSAnbWFwJyxcbiAgICAgICAgd2lkdGggPSBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuaGVpZ2h0LFxuICAgICAgICB1aVN0YXRlLFxuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgLy8gcmVhZE9ubHkgb3ZlcnJpZGVcbiAgICAgICAgcmVhZE9ubHksXG5cbiAgICAgICAgLy8gZmVhdHVyZXNcbiAgICAgICAgZmVhdHVyZUZsYWdzLFxuXG4gICAgICAgIC8vIGNsb3VkIHByb3ZpZGVyc1xuICAgICAgICBjbG91ZFByb3ZpZGVycyA9IFtdXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuc3RhdGUuZGltZW5zaW9ucyB8fCB7d2lkdGgsIGhlaWdodH07XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNwbGl0TWFwcywgLy8gdGhpcyB3aWxsIHN0b3JlIHN1cHBvcnQgZm9yIHNwbGl0IG1hcCB2aWV3IGlzIG5lY2Vzc2FyeVxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICAgICAgfSA9IHZpc1N0YXRlO1xuXG4gICAgICBjb25zdCBpc1NwbGl0ID0gaXNTcGxpdFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgdGhlbWUgPSB0aGlzLmF2YWlsYWJsZVRoZW1lU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsb2NhbGVNZXNzYWdlcyA9IHRoaXMubG9jYWxlTWVzc2FnZXNTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGlzRXhwb3J0aW5nSW1hZ2UgPSB1aVN0YXRlLmV4cG9ydEltYWdlLmV4cG9ydGluZztcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVByb3ZpZGVycyA9IHRoaXMuYXZhaWxhYmxlUHJvdmlkZXJzKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gdGhpcy5maWx0ZXJlZERhdGFzZXRzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBzaWRlRmllbGRzID0gc2lkZVBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcywgYXZhaWxhYmxlUHJvdmlkZXJzLCBmaWx0ZXJlZERhdGFzZXRzKTtcbiAgICAgIGNvbnN0IHBsb3RDb250YWluZXJGaWVsZHMgPSBwbG90Q29udGFpbmVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBib3R0b21XaWRnZXRGaWVsZHMgPSBib3R0b21XaWRnZXRTZWxlY3Rvcih0aGlzLnByb3BzLCB0aGVtZSk7XG4gICAgICBjb25zdCBtb2RhbENvbnRhaW5lckZpZWxkcyA9IG1vZGFsQ29udGFpbmVyU2VsZWN0b3IodGhpcy5wcm9wcywgdGhpcy5yb290LmN1cnJlbnQpO1xuICAgICAgY29uc3QgZ2VvQ29kZXJQYW5lbEZpZWxkcyA9IGdlb0NvZGVyUGFuZWxTZWxlY3Rvcih0aGlzLnByb3BzLCBkaW1lbnNpb25zKTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBhbmVsRmllbGRzID0gbm90aWZpY2F0aW9uUGFuZWxTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3QgbWFwQ29udGFpbmVycyA9ICFpc1NwbGl0XG4gICAgICAgID8gW1xuICAgICAgICAgICAgPE1hcENvbnRhaW5lclxuICAgICAgICAgICAgICBwcmltYXJ5PXt0cnVlfVxuICAgICAgICAgICAgICBrZXk9ezB9XG4gICAgICAgICAgICAgIGluZGV4PXswfVxuICAgICAgICAgICAgICB7Li4ubWFwRmllbGRzU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAgIGNvbnRhaW5lcklkPXswfVxuICAgICAgICAgICAgICBkZWxldGVNYXBMYWJlbHM9e3RoaXMuX2RlbGV0ZU1hcExhYmVsc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgXVxuICAgICAgICA6IHNwbGl0TWFwcy5tYXAoKHNldHRpbmdzLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPE1hcENvbnRhaW5lclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgIHByaW1hcnk9e2luZGV4ID09PSAxfVxuICAgICAgICAgICAgICB7Li4ubWFwRmllbGRzU2VsZWN0b3IodGhpcy5wcm9wcywgaW5kZXgpfVxuICAgICAgICAgICAgICBjb250YWluZXJJZD17aW5kZXh9XG4gICAgICAgICAgICAgIGRlbGV0ZU1hcExhYmVscz17dGhpcy5fZGVsZXRlTWFwTGFiZWxzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJvb3RDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt0aGlzLnJvb3R9PlxuICAgICAgICAgIDxGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIgZmVhdHVyZUZsYWdzPXtmZWF0dXJlRmxhZ3N9PlxuICAgICAgICAgICAgPEludGxQcm92aWRlciBsb2NhbGU9e3VpU3RhdGUubG9jYWxlfSBtZXNzYWdlcz17bG9jYWxlTWVzc2FnZXNbdWlTdGF0ZS5sb2NhbGVdfT5cbiAgICAgICAgICAgICAgPFN0eWxlU2hlZXRNYW5hZ2VyIHNob3VsZEZvcndhcmRQcm9wPXtzaG91bGRGb3J3YXJkUHJvcH0+XG4gICAgICAgICAgICAgICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT5cbiAgICAgICAgICAgICAgICAgIDxDbG91ZExpc3RQcm92aWRlciBwcm92aWRlcnM9e2Nsb3VkUHJvdmlkZXJzfT5cbiAgICAgICAgICAgICAgICAgICAgPEdsb2JhbFN0eWxlXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia2VwbGVyLWdsXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YGtlcGxlci1nbF9fJHtpZH1gfVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGAke3dpZHRofXB4YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogYCR7aGVpZ2h0fXB4YFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnJvb3R9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uUGFuZWwgey4uLm5vdGlmaWNhdGlvblBhbmVsRmllbGRzfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxEbmRDb250ZXh0IHZpc1N0YXRlPXt2aXNTdGF0ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IXVpU3RhdGUucmVhZE9ubHkgJiYgIXJlYWRPbmx5ICYmIDxTaWRlUGFuZWwgey4uLnNpZGVGaWVsZHN9IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPE1hcHNMYXlvdXQgY2xhc3NOYW1lPVwibWFwc1wiIG1hcFN0YXRlPXt0aGlzLnByb3BzLm1hcFN0YXRlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge21hcENvbnRhaW5lcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L01hcHNMYXlvdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9EbmRDb250ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIHtpc0V4cG9ydGluZ0ltYWdlICYmIDxQbG90Q29udGFpbmVyIHsuLi5wbG90Q29udGFpbmVyRmllbGRzfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICB7LyogMSBnZW9jb2Rlcjogc2luZ2xlIG1vZGUgT1Igc3BsaXQgbW9kZSBhbmQgc3luY2VkIHZpZXdwb3J0cyAqL31cbiAgICAgICAgICAgICAgICAgICAgICB7IWlzVmlld3BvcnREaXNqb2ludGVkKHRoaXMucHJvcHMpICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdlb0NvZGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLmdlb0NvZGVyUGFuZWxGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXswfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN5bmNlZFZpZXdwb3J0cz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgey8qIDIgZ2VvY29kZXJzOiBzcGxpdCBtb2RlIGFuZCB1bnN5bmNlZCB2aWV3cG9ydHMgKi99XG4gICAgICAgICAgICAgICAgICAgICAge2lzVmlld3BvcnREaXNqb2ludGVkKHRoaXMucHJvcHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBDb250YWluZXJzLm1hcCgoX21hcENvbnRhaW5lciwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEdlb0NvZGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5nZW9Db2RlclBhbmVsRmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN5bmNlZFZpZXdwb3J0cz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDxCb3R0b21XaWRnZXRPdXRlciBhYnNvbHV0ZT17IWhhc1BvcnRhYmxlV2lkdGgoYnJlYWtQb2ludFZhbHVlcyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJvdHRvbVdpZGdldFxuICAgICAgICAgICAgICAgICAgICAgICAgICByb290UmVmPXt0aGlzLmJvdHRvbVdpZGdldFJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLmJvdHRvbVdpZGdldEZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVz17ZGltZW5zaW9ucy53aWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0JvdHRvbVdpZGdldE91dGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxNb2RhbENvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLm1vZGFsQ29udGFpbmVyRmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVz17ZGltZW5zaW9ucy53aWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckg9e2RpbWVuc2lvbnMuaGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvR2xvYmFsU3R5bGU+XG4gICAgICAgICAgICAgICAgICA8L0Nsb3VkTGlzdFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICAgICAgICAgICAgPC9TdHlsZVNoZWV0TWFuYWdlcj5cbiAgICAgICAgICAgIDwvSW50bFByb3ZpZGVyPlxuICAgICAgICAgIDwvRmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICA8L1Jvb3RDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ga2VwbGVyR2xDb25uZWN0KFxuICAgIG1hcFN0YXRlVG9Qcm9wcyxcbiAgICBtYWtlTWFwRGlzcGF0Y2hUb1Byb3BzXG4gICkod2l0aFRoZW1lKEtlcGxlckdMKSkgYXMgUmV0dXJuVHlwZTx0eXBlb2YgS2VwbGVyR2xGYWN0b3J5Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogS2VwbGVyR2xTdGF0ZSwgcHJvcHM6IEtlcGxlckdMUHJvcHMpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wcm9wcyxcbiAgICB2aXNTdGF0ZTogc3RhdGUudmlzU3RhdGUsXG4gICAgbWFwU3R5bGU6IHN0YXRlLm1hcFN0eWxlLFxuICAgIG1hcFN0YXRlOiBzdGF0ZS5tYXBTdGF0ZSxcbiAgICB1aVN0YXRlOiBzdGF0ZS51aVN0YXRlLFxuICAgIHByb3ZpZGVyU3RhdGU6IHN0YXRlLnByb3ZpZGVyU3RhdGVcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFVzZXJBY3Rpb25zID0ge307XG5cbmNvbnN0IGdldERpc3BhdGNoID0gZGlzcGF0Y2ggPT4gZGlzcGF0Y2g7XG5jb25zdCBnZXRVc2VyQWN0aW9ucyA9IChkaXNwYXRjaCwgcHJvcHMpID0+IHByb3BzLmFjdGlvbnMgfHwgZGVmYXVsdFVzZXJBY3Rpb25zO1xuXG4vKiogQHR5cGUgeygpID0+IGltcG9ydCgncmVzZWxlY3QnKS5PdXRwdXRQYXJhbWV0cmljU2VsZWN0b3I8YW55LCBhbnksIGFueSwgYW55Pn0gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlR2V0QWN0aW9uQ3JlYXRvcnMoKSB7XG4gIHJldHVybiBjcmVhdGVTZWxlY3RvcihbZ2V0RGlzcGF0Y2gsIGdldFVzZXJBY3Rpb25zXSwgKGRpc3BhdGNoLCB1c2VyQWN0aW9ucykgPT4ge1xuICAgIGNvbnN0IFt2aXNTdGF0ZUFjdGlvbnMsIG1hcFN0YXRlQWN0aW9ucywgbWFwU3R5bGVBY3Rpb25zLCB1aVN0YXRlQWN0aW9ucywgcHJvdmlkZXJBY3Rpb25zXSA9IFtcbiAgICAgIFZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIE1hcFN0YXRlQWN0aW9ucyxcbiAgICAgIE1hcFN0eWxlQWN0aW9ucyxcbiAgICAgIFVJU3RhdGVBY3Rpb25zLFxuICAgICAgUHJvdmlkZXJBY3Rpb25zXG4gICAgXS5tYXAoYWN0aW9ucyA9PiBiaW5kQWN0aW9uQ3JlYXRvcnMobWVyZ2VBY3Rpb25zKGFjdGlvbnMsIHVzZXJBY3Rpb25zKSwgZGlzcGF0Y2gpKTtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdHlsZUFjdGlvbnMsXG4gICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgIHByb3ZpZGVyQWN0aW9ucyxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VNYXBEaXNwYXRjaFRvUHJvcHMoKSB7XG4gIGNvbnN0IGdldEFjdGlvbkNyZWF0b3JzID0gbWFrZUdldEFjdGlvbkNyZWF0b3JzKCk7XG4gIGNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaCwgb3duUHJvcHMpID0+IHtcbiAgICBjb25zdCBncm91cGVkQWN0aW9uQ3JlYXRvcnMgPSBnZXRBY3Rpb25DcmVhdG9ycyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmdyb3VwZWRBY3Rpb25DcmVhdG9ycyxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gbWFwRGlzcGF0Y2hUb1Byb3BzO1xufVxuXG4vKipcbiAqIE92ZXJyaWRlIGRlZmF1bHQga2VwbGVyLmdsIGFjdGlvbnMgd2l0aCB1c2VyIGRlZmluZWQgYWN0aW9ucyB1c2luZyB0aGUgc2FtZSBrZXlcbiAqL1xuZnVuY3Rpb24gbWVyZ2VBY3Rpb25zKGFjdGlvbnMsIHVzZXJBY3Rpb25zKSB7XG4gIGNvbnN0IG92ZXJyaWRlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiB1c2VyQWN0aW9ucykge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1c2VyQWN0aW9ucywga2V5KSAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbnMsIGtleSlcbiAgICApIHtcbiAgICAgIG92ZXJyaWRlc1trZXldID0gdXNlckFjdGlvbnNba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gey4uLmFjdGlvbnMsIC4uLm92ZXJy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
664
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVkdXgiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9rZXBsZXJnbENvbm5lY3QiLCJfcmVhY3RJbnRsIiwiX2xvY2FsaXphdGlvbiIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfY29tbW9uVXRpbHMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29uc3RhbnRzIiwiX3NpZGVQYW5lbCIsIl9tYXBDb250YWluZXIyIiwiX21hcHNMYXlvdXQiLCJfYm90dG9tV2lkZ2V0IiwiX21vZGFsQ29udGFpbmVyIiwiX3Bsb3RDb250YWluZXIiLCJfbm90aWZpY2F0aW9uUGFuZWwiLCJfZ2VvY29kZXJQYW5lbCIsIl9lZmZlY3RNYW5hZ2VyIiwiX2RuZENvbnRleHQiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkdsb2JhbFN0eWxlIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJsYWJlbENvbG9yIiwiQm90dG9tV2lkZ2V0T3V0ZXIiLCJfcmVmIiwiYWJzb2x1dGUiLCJjb25jYXQiLCJpc1ZpZXdwb3J0RGlzam9pbnRlZCIsImV4cG9ydHMiLCJtYXBTdGF0ZSIsImlzU3BsaXQiLCJpc1ZpZXdwb3J0U3luY2VkIiwic3BsaXRNYXBWaWV3cG9ydHMiLCJtYXBTdGF0ZVNlbGVjdG9yIiwiY3JlYXRlU2VsZWN0b3IiLCJfIiwiaW5kZXgiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIm1hcEZpZWxkc1NlbGVjdG9yIiwidW5kZWZpbmVkIiwiYXR0cmlidXRpb24iLCJhdHRyaWJ1dGlvblNlbGVjdG9yIiwiZ2V0TWFwYm94UmVmIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJERUZBVUxUX0tFUExFUl9HTF9QUk9QUyIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJzb3VyY2VzIiwiYXR0cmlidXRpb25Mb2dvcyIsImxvZ29zIiwibWFwU3R5bGUiLCJvbkRlY2tJbml0aWFsaXplZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwib25Nb3VzZU1vdmUiLCJkZWNrR2xQcm9wcyIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJ1aVN0YXRlIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsImxvY2FsZSIsImlzTG9hZGluZ0luZGljYXRvclZpc2libGUiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJzaWRlUGFuZWxXaWR0aCIsIndpZHRoIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJSVExUZXh0UGx1Z2luIiwiZ2V0VmlzaWJsZURhdGFzZXRzIiwiZGF0YXNldHMiLCJmaWx0ZXJPYmplY3RCeVByZWRpY2F0ZSIsImtleSIsIkdFT0NPREVSX0RBVEFTRVRfTkFNRSIsInNpZGVQYW5lbFNlbGVjdG9yIiwiYXZhaWxhYmxlUHJvdmlkZXJzIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcE5hbWUiLCJ2ZXJzaW9uIiwiYXBwV2Vic2l0ZSIsIm9uU2F2ZU1hcCIsIm1hcFN0eWxlQWN0aW9ucyIsImZpbHRlcnMiLCJsYXllcnMiLCJsYXllck9yZGVyIiwibGF5ZXJDbGFzc2VzIiwiaW50ZXJhY3Rpb25Db25maWciLCJtYXBJbmZvIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIm1hcFNhdmVkIiwicHJvdmlkZXJTdGF0ZSIsInBsb3RDb250YWluZXJTZWxlY3RvciIsImhlaWdodCIsInJhdGlvIiwiZXhwb3J0SW1hZ2UiLCJyZXNvbHV0aW9uIiwibGVnZW5kIiwiY2VudGVyIiwiaW1hZ2VTaXplIiwiZXNjYXBlWGh0bWxGb3JXZWJwYWNrIiwibWFwRmllbGRzIiwiYWRkTm90aWZpY2F0aW9uIiwic2V0RXhwb3J0SW1hZ2VTZXR0aW5nIiwic2V0RXhwb3J0SW1hZ2VEYXRhVXJpIiwic2V0RXhwb3J0SW1hZ2VFcnJvciIsInNwbGl0TWFwcyIsImlzU3BsaXRTZWxlY3RvciIsImJvdHRvbVdpZGdldFNlbGVjdG9yIiwiYW5pbWF0aW9uQ29uZmlnIiwidG9nZ2xlTW9kYWwiLCJzaWRlUGFuZWwiLCJtYXJnaW4iLCJsZWZ0IiwibW9kYWxDb250YWluZXJTZWxlY3RvciIsInJvb3ROb2RlIiwicHJvdmlkZXJBY3Rpb25zIiwiY2xvdWRQcm92aWRlcnMiLCJvbkV4cG9ydFRvQ2xvdWRTdWNjZXNzIiwib25Mb2FkQ2xvdWRNYXBTdWNjZXNzIiwib25Mb2FkQ2xvdWRNYXBFcnJvciIsIm9uRXhwb3J0VG9DbG91ZEVycm9yIiwiZ2VvQ29kZXJQYW5lbFNlbGVjdG9yIiwiZGltZW5zaW9ucyIsIl9wcm9wcyR2aXNTdGF0ZSRpbnRlciIsIl9wcm9wcyR2aXNTdGF0ZSRpbnRlcjIiLCJpc0dlb2NvZGVyRW5hYmxlZCIsImdlb2NvZGVyIiwiZW5hYmxlZCIsInVwZGF0ZVZpc0RhdGEiLCJyZW1vdmVEYXRhc2V0IiwidXBkYXRlTWFwIiwiYXBwV2lkdGgiLCJsaW1pdFNlYXJjaCIsImNvbmZpZyIsImRhdGFzZXRBdHRyaWJ1dGlvblNlbGVjdG9yIiwic3RhdGUiLCJ1bmlxdWVBdHRyaWJ1dGlvbnMiLCJfZHMkbWV0YWRhdGEiLCJkcyIsImF0dHJpYnV0aW9ucyIsIm1ldGFkYXRhIiwibGlua3MiLCJtYXRjaCIsImxpbmsiLCJfbGluayRtYXRjaCIsIl9saW5rJG1hdGNoMiIsImhyZWYiLCJ0aXRsZSIsImluZGV4T2YiLCJ1cmwiLCJlcnJvciIsImxheWVyQXR0cmlidXRpb25LZXlTZWxlY3RvciIsIl9zdGF0ZSR2aXNTdGF0ZSIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX2xheWVyJGNvbmZpZyIsIl9sYXllciRtZXRhIiwibGF5ZXIiLCJpc1Zpc2libGUiLCJtZXRhIiwiX2EkbG9nb1VybCIsImxvZ29VcmwiLCJlcnIiLCJsYXllckF0dHJpYnV0aW9uU2VsZWN0b3IiLCJfc3RhdGUkdmlzU3RhdGUyIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIl9sb29wIiwiX2xheWVyJGNvbmZpZzIiLCJfbGF5ZXIkbWV0YTIiLCJhdHRyIiwiZmluZCIsImxheWVyQXR0cmlidXRpb25zIiwidW5pcXVlVGV4dEF0dHJpYnV0aW9ucyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJsYXllckF0dHJpYnV0aW9uIiwibm90aWZpY2F0aW9uUGFuZWxTZWxlY3RvciIsInJlbW92ZU5vdGlmaWNhdGlvbiIsIm5vdGlmaWNhdGlvbnMiLCJtYXBTdHlsZXMiLCJtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJLRVBMRVJfR0xfTkFNRSIsIktFUExFUl9HTF9WRVJTSU9OIiwiRElNRU5TSU9OUyIsImZlYXR1cmVGbGFncyIsIktlcGxlckdsRmFjdG9yeSIsImRlcHMiLCJCb3R0b21XaWRnZXRGYWN0b3J5IiwiR2VvQ29kZXJQYW5lbEZhY3RvcnkiLCJNYXBDb250YWluZXJGYWN0b3J5IiwiTWFwc0xheW91dEZhY3RvcnkiLCJNb2RhbENvbnRhaW5lckZhY3RvcnkiLCJTaWRlUGFuZWxGYWN0b3J5IiwiUGxvdENvbnRhaW5lckZhY3RvcnkiLCJOb3RpZmljYXRpb25QYW5lbEZhY3RvcnkiLCJEbmRDb250ZXh0RmFjdG9yeSIsIkVmZmVjdE1hbmFnZXJGYWN0b3J5IiwiQm90dG9tV2lkZ2V0IiwiR2VvQ29kZXJQYW5lbCIsIk1hcENvbnRhaW5lciIsIk1hcHNMYXlvdXQiLCJNb2RhbENvbnRhaW5lciIsIlNpZGVQYW5lbCIsIlBsb3RDb250YWluZXIiLCJOb3RpZmljYXRpb25QYW5lbCIsIkRuZENvbnRleHQiLCJLZXBsZXJHTCIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJzZXRTdGF0ZSIsImNyZWF0ZVJlZiIsInRoZW1lU2VsZWN0b3IiLCJfdHlwZW9mMiIsImJhc2ljVGhlbWUiLCJUSEVNRSIsImxpZ2h0IiwidGhlbWVMVCIsImJhc2UiLCJ0aGVtZUJTIiwiZGF0YXNldHNTZWxlY3RvciIsInByb3ZpZGVycyIsImhhc1N0b3JhZ2UiLCJzb21lIiwicCIsImhhc1ByaXZhdGVTdG9yYWdlIiwiaGFzU2hhcmUiLCJoYXNTaGFyaW5nVXJsIiwibG9jYWxlTWVzc2FnZXMiLCJjdXN0b21NZXNzYWdlcyIsIm1lcmdlTWVzc2FnZXMiLCJtZXNzYWdlcyIsImRlZmF1bHRTdHlsZXMiLCJ2YWx1ZXMiLCJjdXN0b21TdHlsZXMiLCJtYXAiLCJtcyIsImlkIiwiZ2VuZXJhdGVIYXNoSWQiLCJhbGxTdHlsZXMiLCJyZWR1Y2UiLCJhY2N1Iiwic3R5bGUiLCJsb2FkTWFwU3R5bGVzIiwiY29udGFpbmVySWQiLCJsYXllcklkIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImNvbXBvbmVudERpZE1vdW50IiwiX2dldEFwcGxpY2F0aW9uQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJiYXNlTWFwTGlicmFyeUNvbmZpZyIsIm1hcExpYk5hbWUiLCJfdmFsaWRhdGVNYXBib3hUb2tlbiIsIl9sb2FkTWFwU3R5bGUiLCJvbktlcGxlckdsSW5pdGlhbGl6ZWQiLCJyb290IiwiY3VycmVudCIsIkhUTUxFbGVtZW50Iiwib2JzZXJ2ZURpbWVuc2lvbnMiLCJfaGFuZGxlUmVzaXplIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bm9ic2VydmVEaW1lbnNpb25zIiwidmFsaWRhdGVUb2tlbiIsIkNvbnNvbGUiLCJ3YXJuIiwiTUlTU0lOR19NQVBCT1hfVE9LRU4iLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRwcm9wcyIsIl90aGlzJHByb3BzJGlkIiwiX3RoaXMkcHJvcHMkd2lkdGgiLCJfdGhpcyRwcm9wcyRoZWlnaHQiLCJfdGhpcyRwcm9wcyRjbG91ZFByb3YiLCJhdmFpbGFibGVUaGVtZVNlbGVjdG9yIiwibG9jYWxlTWVzc2FnZXNTZWxlY3RvciIsImlzRXhwb3J0aW5nSW1hZ2UiLCJleHBvcnRpbmciLCJmaWx0ZXJlZERhdGFzZXRzU2VsZWN0b3IiLCJzaWRlRmllbGRzIiwicGxvdENvbnRhaW5lckZpZWxkcyIsImJvdHRvbVdpZGdldEZpZWxkcyIsIm1vZGFsQ29udGFpbmVyRmllbGRzIiwiZ2VvQ29kZXJQYW5lbEZpZWxkcyIsIm5vdGlmaWNhdGlvblBhbmVsRmllbGRzIiwibWFwQ29udGFpbmVycyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJwcmltYXJ5IiwiZGVsZXRlTWFwTGFiZWxzIiwiX2RlbGV0ZU1hcExhYmVscyIsInNldHRpbmdzIiwiUm9vdENvbnRleHQiLCJQcm92aWRlciIsIkZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlciIsIkludGxQcm92aWRlciIsIlN0eWxlU2hlZXRNYW5hZ2VyIiwic2hvdWxkRm9yd2FyZFByb3AiLCJUaGVtZVByb3ZpZGVyIiwiQ2xvdWRMaXN0UHJvdmlkZXIiLCJjbGFzc05hbWUiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsInBvc2l0aW9uIiwicmVmIiwib25TZXRTd2lwZUNvbXBhcmVQZXJjZW50YWdlIiwic2V0U3dpcGVDb21wYXJlUGVyY2VudGFnZSIsInVuc3luY2VkVmlld3BvcnRzIiwiX21hcENvbnRhaW5lciIsImhhc1BvcnRhYmxlV2lkdGgiLCJicmVha1BvaW50VmFsdWVzIiwicm9vdFJlZiIsImJvdHRvbVdpZGdldFJlZiIsImNvbnRhaW5lclciLCJjb250YWluZXJIIiwiQ29tcG9uZW50Iiwia2VwbGVyR2xDb25uZWN0IiwibWFwU3RhdGVUb1Byb3BzIiwibWFrZU1hcERpc3BhdGNoVG9Qcm9wcyIsIndpdGhUaGVtZSIsImRlZmF1bHRVc2VyQWN0aW9ucyIsImdldERpc3BhdGNoIiwiZGlzcGF0Y2giLCJnZXRVc2VyQWN0aW9ucyIsImFjdGlvbnMiLCJtYWtlR2V0QWN0aW9uQ3JlYXRvcnMiLCJ1c2VyQWN0aW9ucyIsIl9tYXAiLCJWaXNTdGF0ZUFjdGlvbnMiLCJNYXBTdGF0ZUFjdGlvbnMiLCJNYXBTdHlsZUFjdGlvbnMiLCJVSVN0YXRlQWN0aW9ucyIsIlByb3ZpZGVyQWN0aW9ucyIsImJpbmRBY3Rpb25DcmVhdG9ycyIsIm1lcmdlQWN0aW9ucyIsIl9tYXAyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZ2V0QWN0aW9uQ3JlYXRvcnMiLCJtYXBEaXNwYXRjaFRvUHJvcHMiLCJvd25Qcm9wcyIsImdyb3VwZWRBY3Rpb25DcmVhdG9ycyIsIm92ZXJyaWRlcyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2tlcGxlci1nbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWYsIERpc3BhdGNofSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge2JpbmRBY3Rpb25DcmVhdG9yc30gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZSwgU3R5bGVTaGVldE1hbmFnZXIsIFRoZW1lUHJvdmlkZXJ9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7Y29ubmVjdCBhcyBrZXBsZXJHbENvbm5lY3R9IGZyb20gJy4vY29ubmVjdC9rZXBsZXJnbC1jb25uZWN0JztcbmltcG9ydCB7SW50bFByb3ZpZGVyfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCB7bWVzc2FnZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7Um9vdENvbnRleHQsIEZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlciwgRmVhdHVyZUZsYWdzfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRpb25XaXRoU3R5bGUsXG4gIERhdGFzZXRBdHRyaWJ1dGlvbixcbiAgT25FcnJvckNhbGxCYWNrLFxuICBPblN1Y2Nlc3NDYWxsQmFjayxcbiAgVmlld3BvcnQsXG4gIE1hcFN0YXRlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge1xuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIE1hcFN0eWxlQWN0aW9ucyxcbiAgUHJvdmlkZXJBY3Rpb25zLFxuICBVSVN0YXRlQWN0aW9ucyxcbiAgVmlzU3RhdGVBY3Rpb25zXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcblxuaW1wb3J0IHtzaG91bGRGb3J3YXJkUHJvcH0gZnJvbSAnLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuXG50eXBlIEtlcGxlckdsQWN0aW9ucyA9IHtcbiAgdmlzU3RhdGVBY3Rpb25zOiB0eXBlb2YgVmlzU3RhdGVBY3Rpb25zO1xuICBtYXBTdGF0ZUFjdGlvbnM6IHR5cGVvZiBNYXBTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0eWxlQWN0aW9uczogdHlwZW9mIE1hcFN0eWxlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcbiAgcHJvdmlkZXJBY3Rpb25zOiB0eXBlb2YgUHJvdmlkZXJBY3Rpb25zO1xufTtcblxuaW1wb3J0IHtcbiAgRElNRU5TSU9OUyxcbiAgS0VQTEVSX0dMX05BTUUsXG4gIEtFUExFUl9HTF9WRVJTSU9OLFxuICBUSEVNRSxcbiAgREVGQVVMVF9NQVBCT1hfQVBJX1VSTCxcbiAgR0VPQ09ERVJfREFUQVNFVF9OQU1FLFxuICBNSVNTSU5HX01BUEJPWF9UT0tFTlxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCBTaWRlUGFuZWxGYWN0b3J5IGZyb20gJy4vc2lkZS1wYW5lbCc7XG5pbXBvcnQgTWFwQ29udGFpbmVyRmFjdG9yeSBmcm9tICcuL21hcC1jb250YWluZXInO1xuaW1wb3J0IE1hcHNMYXlvdXRGYWN0b3J5IGZyb20gJy4vbWFwcy1sYXlvdXQnO1xuaW1wb3J0IEJvdHRvbVdpZGdldEZhY3RvcnkgZnJvbSAnLi9ib3R0b20td2lkZ2V0JztcbmltcG9ydCBNb2RhbENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9tb2RhbC1jb250YWluZXInO1xuaW1wb3J0IFBsb3RDb250YWluZXJGYWN0b3J5IGZyb20gJy4vcGxvdC1jb250YWluZXInO1xuaW1wb3J0IE5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeSBmcm9tICcuL25vdGlmaWNhdGlvbi1wYW5lbCc7XG5pbXBvcnQgR2VvQ29kZXJQYW5lbEZhY3RvcnkgZnJvbSAnLi9nZW9jb2Rlci1wYW5lbCc7XG5pbXBvcnQgRWZmZWN0TWFuYWdlckZhY3RvcnkgZnJvbSAnLi9lZmZlY3RzL2VmZmVjdC1tYW5hZ2VyJztcbmltcG9ydCBEbmRDb250ZXh0RmFjdG9yeSBmcm9tICcuL2RuZC1jb250ZXh0JztcbmltcG9ydCB7Q2xvdWRMaXN0UHJvdmlkZXJ9IGZyb20gJy4vaG9va3MvdXNlLWNsb3VkLWxpc3QtcHJvdmlkZXInO1xuXG5pbXBvcnQge1xuICBmaWx0ZXJPYmplY3RCeVByZWRpY2F0ZSxcbiAgdmFsaWRhdGVUb2tlbixcbiAgbWVyZ2VNZXNzYWdlcyxcbiAgb2JzZXJ2ZURpbWVuc2lvbnMsXG4gIHVub2JzZXJ2ZURpbWVuc2lvbnMsXG4gIGhhc1BvcnRhYmxlV2lkdGgsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge3RoZW1lIGFzIGJhc2ljVGhlbWUsIHRoZW1lTFQsIHRoZW1lQlMsIGJyZWFrUG9pbnRWYWx1ZXN9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7S2VwbGVyR2xTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tICdAa2VwbGVyLmdsL2Nsb3VkLXByb3ZpZGVycyc7XG5cbi8vIE1heWJlIHdlIHNob3VsZCB0aGluayBhYm91dCBleHBvcnRpbmcgdGhpcyBvciBjcmVhdGluZyBhIHZhcmlhYmxlXG4vLyBhcyBwYXJ0IG9mIHRoZSBiYXNlLmpzIHRoZW1lXG5jb25zdCBHbG9iYWxTdHlsZSA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRGYW1pbHl9O1xuICBmb250LXdlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250V2VpZ2h0fTtcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRTaXplfTtcbiAgbGluZS1oZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGluZUhlaWdodH07XG5cbiAgKixcbiAgKjpiZWZvcmUsXG4gICo6YWZ0ZXIge1xuICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gIHVsIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIGxpIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGFiZWxDb2xvcn07XG4gIH1cblxuICA6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAubWFwbGlicmVnbC1jdHJsIC5tYXBsaWJyZWdsLWN0cmwtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC5tYXBib3hnbC1jdHJsIC5tYXBib3hnbC1jdHJsLWxvZ28ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbmA7XG5cbnR5cGUgQm90dG9tV2lkZ2V0T3V0ZXJQcm9wcyA9IHtcbiAgYWJzb2x1dGU/OiBib29sZWFuO1xufTtcblxuY29uc3QgQm90dG9tV2lkZ2V0T3V0ZXIgPSBzdHlsZWQuZGl2PEJvdHRvbVdpZGdldE91dGVyUHJvcHM+KFxuICAoe2Fic29sdXRlfSkgPT4gYFxuICAke2Fic29sdXRlID8gJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAwOyByaWdodDogMDsnIDogJyd9XG4gIHBvaW50ZXItZXZlbnRzOiBub25lOyAvKiBwcmV2ZW50IHBhZGRpbmcgZnJvbSBibG9ja2luZyBpbnB1dCAqL1xuICAmID4gKiB7XG4gICAgLyogYWxsIGNoaWxkcmVuIHNob3VsZCBhbGxvdyBpbnB1dCAqL1xuICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XG4gIH1gXG4pO1xuXG5leHBvcnQgY29uc3QgaXNWaWV3cG9ydERpc2pvaW50ZWQgPSBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgcHJvcHMubWFwU3RhdGUuaXNTcGxpdCAmJlxuICAgICFwcm9wcy5tYXBTdGF0ZS5pc1ZpZXdwb3J0U3luY2VkICYmXG4gICAgcHJvcHMubWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubGVuZ3RoID4gMVxuICApO1xufTtcblxudHlwZSBNYXBTdGF0ZVByb3BzID0ge1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwU3RhdGVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICBbKHByb3BzOiBNYXBTdGF0ZVByb3BzKSA9PiBwcm9wcy5tYXBTdGF0ZSwgKF86IE1hcFN0YXRlUHJvcHMsIGluZGV4PzogbnVtYmVyKSA9PiBpbmRleF0sXG4gIChtYXBTdGF0ZTogTWFwU3RhdGUsIGluZGV4PzogbnVtYmVyKTogTWFwU3RhdGUgPT4ge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGluZGV4KSkge1xuICAgICAgLy8gZWl0aGVyIG5vIGluZGV4IGFyZyBvciBhbiBpbnZhbGlkIGluZGV4IHdhcyBwcm92aWRlZFxuICAgICAgLy8gaXQgaXMgZXhwZWN0ZWQgdG8gYmUgZWl0aGVyIDAgb3IgMSB3aGVuIGluIHNwbGl0IG1vZGVcbiAgICAgIC8vIG9ubHkgdXNlIHRoZSBtYXBTdGF0ZVxuICAgICAgcmV0dXJuIG1hcFN0YXRlO1xuICAgIH1cblxuICAgIHJldHVybiBpc1ZpZXdwb3J0RGlzam9pbnRlZCh7bWFwU3RhdGV9KVxuICAgICAgPyAvLyBtaXggdG9nZXRoZXIgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgaW50ZW5kZWQgZm9yIHRoaXMgZGlzam9pbnRlZCA8TWFwQ29udGFpbmVyPiB3aXRoIHRoZSBvdGhlciBuZWNlc3NhcnkgbWFwU3RhdGUgcHJvcGVydGllc1xuICAgICAgICB7Li4ubWFwU3RhdGUsIC4uLm1hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzW2luZGV4IHx8IDBdfVxuICAgICAgOiAvLyBvdGhlcndpc2Ugb25seSB1c2UgdGhlIG1hcFN0YXRlXG4gICAgICAgIG1hcFN0YXRlO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgbWFwRmllbGRzU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIGluZGV4ID0gMCkgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGlvbiA9IGF0dHJpYnV0aW9uU2VsZWN0b3IocHJvcHMpO1xuICByZXR1cm4ge1xuICAgIGdldE1hcGJveFJlZjogcHJvcHMuZ2V0TWFwYm94UmVmLFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICBtYXBib3hBcGlVcmw6IHByb3BzLm1hcGJveEFwaVVybCA/IHByb3BzLm1hcGJveEFwaVVybCA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLm1hcGJveEFwaVVybCxcbiAgICBtYXBTdGF0ZTogbWFwU3RhdGVTZWxlY3Rvcihwcm9wcywgaW5kZXgpLFxuICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnM6IGF0dHJpYnV0aW9uLnNvdXJjZXMsXG4gICAgYXR0cmlidXRpb25Mb2dvczogYXR0cmlidXRpb24ubG9nb3MsXG4gICAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICAgIG9uRGVja0luaXRpYWxpemVkOiBwcm9wcy5vbkRlY2tJbml0aWFsaXplZCxcbiAgICBvblZpZXdTdGF0ZUNoYW5nZTogcHJvcHMub25WaWV3U3RhdGVDaGFuZ2UsXG4gICAgb25Nb3VzZU1vdmU6IHByb3BzLm9uTW91c2VNb3ZlLFxuICAgIGRlY2tHbFByb3BzOiBwcm9wcy5kZWNrR2xQcm9wcyxcbiAgICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gICAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gICAgbWFwU3RhdGVBY3Rpb25zOiBwcm9wcy5tYXBTdGF0ZUFjdGlvbnMsXG5cbiAgICAvLyB2aXNTdGF0ZVxuICAgIHZpc1N0YXRlOiBwcm9wcy52aXNTdGF0ZSxcblxuICAgIC8vIHVpU3RhdGVcbiAgICBhY3RpdmVTaWRlUGFuZWw6IHByb3BzLnVpU3RhdGUuYWN0aXZlU2lkZVBhbmVsLFxuICAgIG1hcENvbnRyb2xzOiBwcm9wcy51aVN0YXRlLm1hcENvbnRyb2xzLFxuICAgIHJlYWRPbmx5OiBwcm9wcy51aVN0YXRlLnJlYWRPbmx5LFxuICAgIGxvY2FsZTogcHJvcHMudWlTdGF0ZS5sb2NhbGUsXG4gICAgaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZTogTnVtYmVyKHByb3BzLnZpc1N0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkgPiAwLFxuICAgIHNpZGVQYW5lbFdpZHRoOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCA/IHByb3BzLnNpZGVQYW5lbFdpZHRoIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG5cbiAgICAvLyBtYXBTdHlsZVxuICAgIHRvcE1hcENvbnRhaW5lclByb3BzOiBwcm9wcy50b3BNYXBDb250YWluZXJQcm9wcyxcbiAgICBib3R0b21NYXBDb250YWluZXJQcm9wczogcHJvcHMuYm90dG9tTWFwQ29udGFpbmVyUHJvcHMsXG5cbiAgICAvLyB0cmFuc2Zvcm1SZXF1ZXN0IGZvciBNYXBib3ggYmFzZW1hcHNcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBwcm9wcy50cmFuc2Zvcm1SZXF1ZXN0LFxuXG4gICAgUlRMVGV4dFBsdWdpbjogcHJvcHMuUlRMVGV4dFBsdWdpblxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2libGVEYXRhc2V0cyhkYXRhc2V0cykge1xuICAvLyBXZSBkb24ndCB3YW50IEdlb2NvZGVyIGRhdGFzZXQgdG8gYmUgcHJlc2VudCBpbiBTaWRlUGFuZWwgZGF0YXNldCBsaXN0XG4gIHJldHVybiBmaWx0ZXJPYmplY3RCeVByZWRpY2F0ZShkYXRhc2V0cywga2V5ID0+IGtleSAhPT0gR0VPQ09ERVJfREFUQVNFVF9OQU1FKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNpZGVQYW5lbFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCBhdmFpbGFibGVQcm92aWRlcnMsIGZpbHRlcmVkRGF0YXNldHMpID0+ICh7XG4gIGFwcE5hbWU6IHByb3BzLmFwcE5hbWUgPyBwcm9wcy5hcHBOYW1lIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuYXBwTmFtZSxcbiAgdmVyc2lvbjogcHJvcHMudmVyc2lvbiA/IHByb3BzLnZlcnNpb24gOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy52ZXJzaW9uLFxuICBhcHBXZWJzaXRlOiBwcm9wcy5hcHBXZWJzaXRlLFxuICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gIG9uU2F2ZU1hcDogcHJvcHMub25TYXZlTWFwLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBtYXBTdHlsZUFjdGlvbnM6IHByb3BzLm1hcFN0eWxlQWN0aW9ucyxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgbWFwU3RhdGVBY3Rpb25zOiBwcm9wcy5tYXBTdGF0ZUFjdGlvbnMsXG5cbiAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gIGZpbHRlcnM6IHByb3BzLnZpc1N0YXRlLmZpbHRlcnMsXG4gIGxheWVyczogcHJvcHMudmlzU3RhdGUubGF5ZXJzLFxuICBsYXllck9yZGVyOiBwcm9wcy52aXNTdGF0ZS5sYXllck9yZGVyLFxuICBsYXllckNsYXNzZXM6IHByb3BzLnZpc1N0YXRlLmxheWVyQ2xhc3NlcyxcbiAgaW50ZXJhY3Rpb25Db25maWc6IHByb3BzLnZpc1N0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICBtYXBJbmZvOiBwcm9wcy52aXNTdGF0ZS5tYXBJbmZvLFxuICBsYXllckJsZW5kaW5nOiBwcm9wcy52aXNTdGF0ZS5sYXllckJsZW5kaW5nLFxuICBvdmVybGF5QmxlbmRpbmc6IHByb3BzLnZpc1N0YXRlLm92ZXJsYXlCbGVuZGluZyxcblxuICB3aWR0aDogcHJvcHMuc2lkZVBhbmVsV2lkdGggPyBwcm9wcy5zaWRlUGFuZWxXaWR0aCA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLndpZHRoLFxuICBhdmFpbGFibGVQcm92aWRlcnMsXG4gIG1hcFNhdmVkOiBwcm9wcy5wcm92aWRlclN0YXRlLm1hcFNhdmVkXG59KTtcblxuZXhwb3J0IGNvbnN0IHBsb3RDb250YWluZXJTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gKHtcbiAgd2lkdGg6IHByb3BzLndpZHRoLFxuICBoZWlnaHQ6IHByb3BzLmhlaWdodCxcbiAgcmF0aW86IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UucmF0aW8sXG4gIHJlc29sdXRpb246IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UucmVzb2x1dGlvbixcbiAgbGVnZW5kOiBwcm9wcy51aVN0YXRlLmV4cG9ydEltYWdlLmxlZ2VuZCxcbiAgY2VudGVyOiBwcm9wcy51aVN0YXRlLmV4cG9ydEltYWdlLmNlbnRlcixcbiAgaW1hZ2VTaXplOiBwcm9wcy51aVN0YXRlLmV4cG9ydEltYWdlLmltYWdlU2l6ZSxcbiAgZXNjYXBlWGh0bWxGb3JXZWJwYWNrOiBwcm9wcy51aVN0YXRlLmV4cG9ydEltYWdlLmVzY2FwZVhodG1sRm9yV2VicGFjayxcblxuICBtYXBGaWVsZHM6IG1hcEZpZWxkc1NlbGVjdG9yKHByb3BzKSxcbiAgYWRkTm90aWZpY2F0aW9uOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5hZGROb3RpZmljYXRpb24sXG4gIHNldEV4cG9ydEltYWdlU2V0dGluZzogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VTZXR0aW5nLFxuICBzZXRFeHBvcnRJbWFnZURhdGFVcmk6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlRGF0YVVyaSxcbiAgc2V0RXhwb3J0SW1hZ2VFcnJvcjogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VFcnJvcixcbiAgc3BsaXRNYXBzOiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHNcbn0pO1xuXG5leHBvcnQgY29uc3QgaXNTcGxpdFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PlxuICBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMgJiYgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDE7XG5cbmV4cG9ydCBjb25zdCBib3R0b21XaWRnZXRTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgdGhlbWUpID0+ICh7XG4gIGZpbHRlcnM6IHByb3BzLnZpc1N0YXRlLmZpbHRlcnMsXG4gIGRhdGFzZXRzOiBwcm9wcy52aXNTdGF0ZS5kYXRhc2V0cyxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbGF5ZXJzOiBwcm9wcy52aXNTdGF0ZS5sYXllcnMsXG4gIGFuaW1hdGlvbkNvbmZpZzogcHJvcHMudmlzU3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdG9nZ2xlTW9kYWw6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnRvZ2dsZU1vZGFsLFxuICBzaWRlUGFuZWxXaWR0aDogcHJvcHMudWlTdGF0ZS5yZWFkT25seSA/IDAgOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCArIHRoZW1lLnNpZGVQYW5lbC5tYXJnaW4ubGVmdFxufSk7XG5cbmV4cG9ydCBjb25zdCBtb2RhbENvbnRhaW5lclNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCByb290Tm9kZSkgPT4gKHtcbiAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSA/IHByb3BzLmFwcE5hbWUgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5hcHBOYW1lLFxuICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gIHZpc1N0YXRlOiBwcm9wcy52aXNTdGF0ZSxcbiAgbWFwU3RhdGU6IHByb3BzLm1hcFN0YXRlLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBwcm92aWRlclN0YXRlOiBwcm9wcy5wcm92aWRlclN0YXRlLFxuXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwYm94QXBpVXJsOiBwcm9wcy5tYXBib3hBcGlVcmwsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0eWxlQWN0aW9uczogcHJvcHMubWFwU3R5bGVBY3Rpb25zLFxuICBwcm92aWRlckFjdGlvbnM6IHByb3BzLnByb3ZpZGVyQWN0aW9ucyxcblxuICByb290Tm9kZSxcbiAgLy8gVXNlciBkZWZpbmVkIGNsb3VkIHByb3ZpZGVyIHByb3BzXG4gIGNsb3VkUHJvdmlkZXJzOiBwcm9wcy5jbG91ZFByb3ZpZGVyc1xuICAgID8gcHJvcHMuY2xvdWRQcm92aWRlcnNcbiAgICA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmNsb3VkUHJvdmlkZXJzLFxuICBvbkV4cG9ydFRvQ2xvdWRTdWNjZXNzOiBwcm9wcy5vbkV4cG9ydFRvQ2xvdWRTdWNjZXNzLFxuICBvbkxvYWRDbG91ZE1hcFN1Y2Nlc3M6IHByb3BzLm9uTG9hZENsb3VkTWFwU3VjY2VzcyxcbiAgb25Mb2FkQ2xvdWRNYXBFcnJvcjogcHJvcHMub25Mb2FkQ2xvdWRNYXBFcnJvcixcbiAgb25FeHBvcnRUb0Nsb3VkRXJyb3I6IHByb3BzLm9uRXhwb3J0VG9DbG91ZEVycm9yXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlb0NvZGVyUGFuZWxTZWxlY3RvciA9IChcbiAgcHJvcHM6IEtlcGxlckdMUHJvcHMsXG4gIGRpbWVuc2lvbnM6IHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn1cbikgPT4gKHtcbiAgaXNHZW9jb2RlckVuYWJsZWQ6IHByb3BzLnZpc1N0YXRlLmludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQsXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwU3RhdGU6IHByb3BzLm1hcFN0YXRlLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBsYXllck9yZGVyOiBwcm9wcy52aXNTdGF0ZS5sYXllck9yZGVyLFxuICB1cGRhdGVWaXNEYXRhOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMudXBkYXRlVmlzRGF0YSxcbiAgcmVtb3ZlRGF0YXNldDogcHJvcHMudmlzU3RhdGVBY3Rpb25zLnJlbW92ZURhdGFzZXQsXG4gIHVwZGF0ZU1hcDogcHJvcHMubWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCxcbiAgYXBwV2lkdGg6IGRpbWVuc2lvbnMud2lkdGgsXG4gIGxpbWl0U2VhcmNoOiBwcm9wcy52aXNTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5jb25maWc/LmxpbWl0U2VhcmNoID8/IGZhbHNlXG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIGFycmF5IG9mIHVuaXF1ZSBkYXRhc2V0IGF0dHJpYnV0aW9ucywgZWFjaCB3aXRoIHRpdGxlIGFuZCB1cmwgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGFzZXRBdHRyaWJ1dGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gIFtzdGF0ZSA9PiBzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0c10sXG4gIGRhdGFzZXRzID0+IHtcbiAgICBjb25zdCB1bmlxdWVBdHRyaWJ1dGlvbnM6IERhdGFzZXRBdHRyaWJ1dGlvbltdID0gW107XG4gICAgT2JqZWN0LmtleXMoZGF0YXNldHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGRzID0gZGF0YXNldHNba2V5XTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0aW9ucyA9IGRzPy5tZXRhZGF0YT8uYXR0cmlidXRpb25zO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0cmlidXRpb25zKSkge1xuICAgICAgICBhdHRyaWJ1dGlvbnMuZm9yRWFjaChhdHRyaWJ1dGlvbiA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIGF0dHJpYnV0aW9uIGNhbiBiZSBhIHJhdyBzdHJpbmcgb3IgYSBzdHJpbmcgd2l0aCBsaW5rIHRhZ3NcbiAgICAgICAgICAgIGNvbnN0IGxpbmtzID0gYXR0cmlidXRpb24ubWF0Y2goLzxhW15dKz9hPi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5rcykge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxpbmtzPy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaHJlZiA9IGxpbmsubWF0Y2goL2hyZWY9XCIoW15cIl0qKS8pPy5bMV07XG4gICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGxpbmsubWF0Y2goL3RpdGxlPVwiKFteXCJdKikvKT8uWzFdO1xuICAgICAgICAgICAgICAgICAgaWYgKGhyZWYgJiYgdGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlQXR0cmlidXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBgJHtsaW5rLmluZGV4T2YoJyZjb3B5OycpID49IDAgPyAnwqkgJyA6ICcnfSR7dGl0bGV9YCxcbiAgICAgICAgICAgICAgICAgICAgICB1cmw6IGhyZWZcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8ganVzdCBpZ25vcmUgZm9yIG5vd1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmlxdWVBdHRyaWJ1dGlvbnMucHVzaCh7dGl0bGU6IGF0dHJpYnV0aW9uLCB1cmw6IG51bGx9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1bmlxdWVBdHRyaWJ1dGlvbnM7XG4gIH1cbik7XG5cbi8qKlxuICogQ29sbGVjdCB1bmlxdWUgbGF5ZXItbGV2ZWwgYXR0cmlidXRpb25zIGZyb20gdmlzaWJsZSBsYXllcnMuXG4gKiBCdWlsZHMgYSBzZXJpYWxpemVkIGNhY2hlIGtleSBmcm9tIGF0dHJpYnV0aW9uIHZhbHVlcyBzbyBjcmVhdGVTZWxlY3RvclxuICogY2FuIGRldGVjdCBpbi1wbGFjZSBtdXRhdGlvbnMgdG8gbGF5ZXIubWV0YS5cbiAqL1xuY29uc3QgbGF5ZXJBdHRyaWJ1dGlvbktleVNlbGVjdG9yID0gKHN0YXRlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsYXllcnM6IGFueVtdID0gc3RhdGUudmlzU3RhdGU/LmxheWVycztcbiAgaWYgKCFsYXllcnMpIHJldHVybiAnJztcbiAgbGV0IGtleSA9ICcnO1xuICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgIGlmIChsYXllci5jb25maWc/LmlzVmlzaWJsZSAmJiBsYXllci5tZXRhPy5hdHRyaWJ1dGlvbikge1xuICAgICAgY29uc3QgYSA9IGxheWVyLm1ldGEuYXR0cmlidXRpb247XG4gICAgICBrZXkgKz0gYCR7YS50aXRsZX1cXDAke2EudXJsfVxcMCR7YS5sb2dvVXJsID8/ICcnfVxcMGA7XG4gICAgfVxuICB9XG4gIHJldHVybiBrZXk7XG59O1xuXG5leHBvcnQgY29uc3QgbGF5ZXJBdHRyaWJ1dGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gIFsoc3RhdGU6IGFueSkgPT4gc3RhdGUudmlzU3RhdGU/LmxheWVycywgbGF5ZXJBdHRyaWJ1dGlvbktleVNlbGVjdG9yXSxcbiAgKGxheWVyczogYW55W10pOiBBdHRyaWJ1dGlvbldpdGhTdHlsZVtdID0+IHtcbiAgICBjb25zdCBhdHRyaWJ1dGlvbnM6IEF0dHJpYnV0aW9uV2l0aFN0eWxlW10gPSBbXTtcbiAgICBpZiAoIWxheWVycykgcmV0dXJuIGF0dHJpYnV0aW9ucztcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgaWYgKGxheWVyLmNvbmZpZz8uaXNWaXNpYmxlICYmIGxheWVyLm1ldGE/LmF0dHJpYnV0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBsYXllci5tZXRhLmF0dHJpYnV0aW9uO1xuICAgICAgICBpZiAoYXR0ci50aXRsZSAmJiAhYXR0cmlidXRpb25zLmZpbmQoYSA9PiBhLnRpdGxlID09PSBhdHRyLnRpdGxlICYmIGEudXJsID09PSBhdHRyLnVybCkpIHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbnMucHVzaChhdHRyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRpb25zO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgYXR0cmlidXRpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICBbZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3IsIGxheWVyQXR0cmlidXRpb25TZWxlY3Rvcl0sXG4gIChcbiAgICBkYXRhc2V0QXR0cmlidXRpb25zOiBEYXRhc2V0QXR0cmlidXRpb25bXSxcbiAgICBsYXllckF0dHJpYnV0aW9uczogQXR0cmlidXRpb25XaXRoU3R5bGVbXVxuICApOiB7XG4gICAgc291cmNlczogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gICAgbG9nb3M6IEF0dHJpYnV0aW9uV2l0aFN0eWxlW107XG4gIH0gPT4ge1xuICAgIGNvbnN0IHVuaXF1ZVRleHRBdHRyaWJ1dGlvbnM6IERhdGFzZXRBdHRyaWJ1dGlvbltdID0gWy4uLmRhdGFzZXRBdHRyaWJ1dGlvbnNdO1xuICAgIGNvbnN0IGxvZ29zOiBBdHRyaWJ1dGlvbldpdGhTdHlsZVtdID0gW107XG5cbiAgICBsYXllckF0dHJpYnV0aW9ucy5mb3JFYWNoKGxheWVyQXR0cmlidXRpb24gPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhdW5pcXVlVGV4dEF0dHJpYnV0aW9ucy5maW5kKFxuICAgICAgICAgIGEgPT4gYS50aXRsZSA9PT0gbGF5ZXJBdHRyaWJ1dGlvbi50aXRsZSAmJiBhLnVybCA9PT0gbGF5ZXJBdHRyaWJ1dGlvbi51cmxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHVuaXF1ZVRleHRBdHRyaWJ1dGlvbnMucHVzaCh7dGl0bGU6IGxheWVyQXR0cmlidXRpb24udGl0bGUsIHVybDogbGF5ZXJBdHRyaWJ1dGlvbi51cmx9KTtcbiAgICAgIH1cbiAgICAgIGlmIChsYXllckF0dHJpYnV0aW9uLmxvZ29VcmwgJiYgIWxvZ29zLmZpbmQoYSA9PiBhLmxvZ29VcmwgPT09IGxheWVyQXR0cmlidXRpb24ubG9nb1VybCkpIHtcbiAgICAgICAgbG9nb3MucHVzaChsYXllckF0dHJpYnV0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7c291cmNlczogdW5pcXVlVGV4dEF0dHJpYnV0aW9ucywgbG9nb3N9O1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgbm90aWZpY2F0aW9uUGFuZWxTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gKHtcbiAgcmVtb3ZlTm90aWZpY2F0aW9uOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5yZW1vdmVOb3RpZmljYXRpb24sXG4gIG5vdGlmaWNhdGlvbnM6IHByb3BzLnVpU3RhdGUubm90aWZpY2F0aW9uc1xufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0tFUExFUl9HTF9QUk9QUyA9IHtcbiAgbWFwU3R5bGVzOiBbXSxcbiAgbWFwU3R5bGVzUmVwbGFjZURlZmF1bHQ6IGZhbHNlLFxuICBtYXBib3hBcGlVcmw6IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIHdpZHRoOiA4MDAsXG4gIGhlaWdodDogODAwLFxuICBhcHBOYW1lOiBLRVBMRVJfR0xfTkFNRSxcbiAgdmVyc2lvbjogS0VQTEVSX0dMX1ZFUlNJT04sXG4gIHNpZGVQYW5lbFdpZHRoOiBESU1FTlNJT05TLnNpZGVQYW5lbC53aWR0aCxcbiAgdGhlbWU6IHt9LFxuICBjbG91ZFByb3ZpZGVyczogW10sXG4gIHJlYWRPbmx5OiBmYWxzZSxcbiAgZmVhdHVyZUZsYWdzOiB7fVxufTtcblxudHlwZSBLZXBsZXJHTEJhc2ljUHJvcHMgPSB7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybD86IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcblxuICBhcHBXZWJzaXRlPzogYW55O1xuICBvblNhdmVNYXA/OiAoKSA9PiB2b2lkO1xuICBvblZpZXdTdGF0ZUNoYW5nZT86ICh2aWV3U3RhdGU6IFZpZXdwb3J0KSA9PiB2b2lkO1xuICBvbkRlY2tJbml0aWFsaXplZD86ICgpID0+IHZvaWQ7XG4gIG9uS2VwbGVyR2xJbml0aWFsaXplZD86ICgpID0+IHZvaWQ7XG4gIGdldE1hcGJveFJlZj86ICgpID0+IFJlYWN0LlJlZk9iamVjdDxhbnk+O1xuICBtYXBTdHlsZXM/OiB7aWQ6IHN0cmluZzsgc3R5bGU/OiBvYmplY3R9W107XG4gIG1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0PzogYm9vbGVhbjtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgc2lkZVBhbmVsV2lkdGg/OiBudW1iZXI7XG4gIHRoZW1lPzogb2JqZWN0O1xuICBjbG91ZFByb3ZpZGVycz86IFByb3ZpZGVyW107XG4gIGRlY2tHbFByb3BzPzogb2JqZWN0O1xuICBvbkxvYWRDbG91ZE1hcFN1Y2Nlc3M/OiBPblN1Y2Nlc3NDYWxsQmFjaztcbiAgb25Mb2FkQ2xvdWRNYXBFcnJvcj86IE9uRXJyb3JDYWxsQmFjaztcbiAgb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQgJiB7bG5nTGF0PzogW251bWJlciwgbnVtYmVyXX0pID0+IHZvaWQ7XG4gIG9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3M/OiBPblN1Y2Nlc3NDYWxsQmFjaztcbiAgb25FeHBvcnRUb0Nsb3VkRXJyb3I/OiBPbkVycm9yQ2FsbEJhY2s7XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgZmVhdHVyZUZsYWdzPzogRmVhdHVyZUZsYWdzO1xuXG4gIGxvY2FsZU1lc3NhZ2VzPzoge1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9fTtcbiAgZGlzcGF0Y2g6IERpc3BhdGNoPGFueT47XG5cbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM/OiBvYmplY3Q7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzPzogb2JqZWN0O1xuXG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcpID0+IHt1cmw6IHN0cmluZ307XG5cbiAgLyoqIFBhc3MgYGZhbHNlYCB0byBkaXNhYmxlIHRoZSByZW1vdGUgUlRMIHRleHQgcGx1Z2luLCBvciBhIFVSTCBzdHJpbmcgdG8gc2VsZi1ob3N0IGl0LiAqL1xuICBSVExUZXh0UGx1Z2luPzogc3RyaW5nIHwgZmFsc2U7XG59O1xuXG50eXBlIEtlcGxlckdMUHJvcHMgPSBLZXBsZXJHbFN0YXRlICYgS2VwbGVyR2xBY3Rpb25zICYgS2VwbGVyR0xCYXNpY1Byb3BzO1xudHlwZSBLZXBsZXJHTENvbXBTdGF0ZSA9IHtcbiAgZGltZW5zaW9uczoge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfSB8IG51bGw7XG59O1xuXG5LZXBsZXJHbEZhY3RvcnkuZGVwcyA9IFtcbiAgQm90dG9tV2lkZ2V0RmFjdG9yeSxcbiAgR2VvQ29kZXJQYW5lbEZhY3RvcnksXG4gIE1hcENvbnRhaW5lckZhY3RvcnksXG4gIE1hcHNMYXlvdXRGYWN0b3J5LFxuICBNb2RhbENvbnRhaW5lckZhY3RvcnksXG4gIFNpZGVQYW5lbEZhY3RvcnksXG4gIFBsb3RDb250YWluZXJGYWN0b3J5LFxuICBOb3RpZmljYXRpb25QYW5lbEZhY3RvcnksXG4gIERuZENvbnRleHRGYWN0b3J5LFxuICBFZmZlY3RNYW5hZ2VyRmFjdG9yeVxuXTtcblxuZnVuY3Rpb24gS2VwbGVyR2xGYWN0b3J5KFxuICBCb3R0b21XaWRnZXQ6IFJldHVyblR5cGU8dHlwZW9mIEJvdHRvbVdpZGdldEZhY3Rvcnk+LFxuICBHZW9Db2RlclBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBHZW9Db2RlclBhbmVsRmFjdG9yeT4sXG4gIE1hcENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgTWFwQ29udGFpbmVyRmFjdG9yeT4sXG4gIE1hcHNMYXlvdXQ6IFJldHVyblR5cGU8dHlwZW9mIE1hcHNMYXlvdXRGYWN0b3J5PixcbiAgTW9kYWxDb250YWluZXI6IFJldHVyblR5cGU8dHlwZW9mIE1vZGFsQ29udGFpbmVyRmFjdG9yeT4sXG4gIFNpZGVQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgU2lkZVBhbmVsRmFjdG9yeT4sXG4gIFBsb3RDb250YWluZXI6IFJldHVyblR5cGU8dHlwZW9mIFBsb3RDb250YWluZXJGYWN0b3J5PixcbiAgTm90aWZpY2F0aW9uUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIE5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeT4sXG4gIERuZENvbnRleHQ6IFJldHVyblR5cGU8dHlwZW9mIERuZENvbnRleHRGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxLZXBsZXJHTEJhc2ljUHJvcHMgJiB7c2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gS2VwbGVyR2xTdGF0ZX0+IHtcbiAgLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4va2VwbGVyLWdsJykuVW5jb25uZWN0ZWRLZXBsZXJHbFByb3BzfSBLZXBsZXJHbFByb3BzICovXG4gIC8qKiBAYXVnbWVudHMgUmVhY3QuQ29tcG9uZW50PEtlcGxlckdsUHJvcHM+ICovXG4gIGNsYXNzIEtlcGxlckdMIGV4dGVuZHMgQ29tcG9uZW50PFxuICAgIEtlcGxlckdMUHJvcHMgJiB7c2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gS2VwbGVyR2xTdGF0ZX0sXG4gICAgS2VwbGVyR0xDb21wU3RhdGVcbiAgPiB7XG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTO1xuXG4gICAgc3RhdGU6IEtlcGxlckdMQ29tcFN0YXRlID0ge1xuICAgICAgZGltZW5zaW9uczogbnVsbFxuICAgIH07XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnPy5bJ21hcGJveCddPy5tYXBMaWJOYW1lID09PSAnTWFwYm94Jykge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU1hcGJveFRva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sb2FkTWFwU3R5bGUoKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvb3QuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLnJvb3QuY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7ZGltZW5zaW9uc30pO1xuICAgIH07XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBSb290Q29udGV4dDtcblxuICAgIHJvb3QgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPigpO1xuICAgIGJvdHRvbVdpZGdldFJlZiA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcblxuICAgIC8qIHNlbGVjdG9ycyAqL1xuICAgIHRoZW1lU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy50aGVtZTtcbiAgICBhdmFpbGFibGVUaGVtZVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy50aGVtZVNlbGVjdG9yLCB0aGVtZSA9PlxuICAgICAgdHlwZW9mIHRoZW1lID09PSAnb2JqZWN0J1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmJhc2ljVGhlbWUsXG4gICAgICAgICAgICAuLi50aGVtZVxuICAgICAgICAgIH1cbiAgICAgICAgOiB0aGVtZSA9PT0gVEhFTUUubGlnaHRcbiAgICAgICAgPyB0aGVtZUxUXG4gICAgICAgIDogdGhlbWUgPT09IFRIRU1FLmJhc2VcbiAgICAgICAgPyB0aGVtZUJTXG4gICAgICAgIDogdGhlbWVcbiAgICApO1xuXG4gICAgZGF0YXNldHNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmRhdGFzZXRzO1xuICAgIGZpbHRlcmVkRGF0YXNldHNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZGF0YXNldHNTZWxlY3RvciwgZ2V0VmlzaWJsZURhdGFzZXRzKTtcblxuICAgIGF2YWlsYWJsZVByb3ZpZGVycyA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiBwcm9wcy5jbG91ZFByb3ZpZGVycyxcbiAgICAgIHByb3ZpZGVycyA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KHByb3ZpZGVycykgJiYgcHJvdmlkZXJzLmxlbmd0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBoYXNTdG9yYWdlOiBwcm92aWRlcnMuc29tZShwID0+IHAuaGFzUHJpdmF0ZVN0b3JhZ2UoKSksXG4gICAgICAgICAgICAgIGhhc1NoYXJlOiBwcm92aWRlcnMuc29tZShwID0+IHAuaGFzU2hhcmluZ1VybCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge31cbiAgICApO1xuXG4gICAgbG9jYWxlTWVzc2FnZXNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiBwcm9wcy5sb2NhbGVNZXNzYWdlcyxcbiAgICAgIGN1c3RvbU1lc3NhZ2VzID0+IChjdXN0b21NZXNzYWdlcyA/IG1lcmdlTWVzc2FnZXMobWVzc2FnZXMsIGN1c3RvbU1lc3NhZ2VzKSA6IG1lc3NhZ2VzKVxuICAgICk7XG5cbiAgICAvKiBwcml2YXRlIG1ldGhvZHMgKi9cbiAgICBfdmFsaWRhdGVNYXBib3hUb2tlbigpIHtcbiAgICAgIGNvbnN0IHttYXBib3hBcGlBY2Nlc3NUb2tlbn0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCF2YWxpZGF0ZVRva2VuKG1hcGJveEFwaUFjY2Vzc1Rva2VuKSkge1xuICAgICAgICBDb25zb2xlLndhcm4oTUlTU0lOR19NQVBCT1hfVE9LRU4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9sb2FkTWFwU3R5bGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0U3R5bGVzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnByb3BzLm1hcFN0eWxlLm1hcFN0eWxlcyk7XG4gICAgICAvLyBhZGQgaWQgdG8gY3VzdG9tIG1hcCBzdHlsZXMgaWYgbm90IGdpdmVuXG4gICAgICBjb25zdCBjdXN0b21TdHlsZXMgPSAodGhpcy5wcm9wcy5tYXBTdHlsZXMgfHwgW10pLm1hcChtcyA9PiAoe1xuICAgICAgICAuLi5tcyxcbiAgICAgICAgaWQ6IG1zLmlkIHx8IGdlbmVyYXRlSGFzaElkKClcbiAgICAgIH0pKTtcblxuICAgICAgY29uc3QgYWxsU3R5bGVzID0gWy4uLmN1c3RvbVN0eWxlcywgLi4uZGVmYXVsdFN0eWxlc10ucmVkdWNlKChhY2N1LCBzdHlsZSkgPT4ge1xuICAgICAgICBhY2N1W3N0eWxlLmlkXSA9IHN0eWxlO1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgdGhpcy5wcm9wcy5tYXBTdHlsZUFjdGlvbnMubG9hZE1hcFN0eWxlcyhhbGxTdHlsZXMpO1xuICAgIH07XG5cbiAgICBfZGVsZXRlTWFwTGFiZWxzID0gKGNvbnRhaW5lcklkLCBsYXllcklkKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy50b2dnbGVMYXllckZvck1hcChjb250YWluZXJJZCwgbGF5ZXJJZCk7XG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCA9ICdtYXAnLFxuICAgICAgICB3aWR0aCA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5oZWlnaHQsXG4gICAgICAgIHVpU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAvLyByZWFkT25seSBvdmVycmlkZVxuICAgICAgICByZWFkT25seSxcblxuICAgICAgICAvLyBmZWF0dXJlc1xuICAgICAgICBmZWF0dXJlRmxhZ3MsXG5cbiAgICAgICAgLy8gY2xvdWQgcHJvdmlkZXJzXG4gICAgICAgIGNsb3VkUHJvdmlkZXJzID0gW11cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5zdGF0ZS5kaW1lbnNpb25zIHx8IHt3aWR0aCwgaGVpZ2h0fTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3BsaXRNYXBzLCAvLyB0aGlzIHdpbGwgc3RvcmUgc3VwcG9ydCBmb3Igc3BsaXQgbWFwIHZpZXcgaXMgbmVjZXNzYXJ5XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnXG4gICAgICB9ID0gdmlzU3RhdGU7XG5cbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBpc1NwbGl0U2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCB0aGVtZSA9IHRoaXMuYXZhaWxhYmxlVGhlbWVTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxvY2FsZU1lc3NhZ2VzID0gdGhpcy5sb2NhbGVNZXNzYWdlc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgaXNFeHBvcnRpbmdJbWFnZSA9IHVpU3RhdGUuZXhwb3J0SW1hZ2UuZXhwb3J0aW5nO1xuICAgICAgY29uc3QgYXZhaWxhYmxlUHJvdmlkZXJzID0gdGhpcy5hdmFpbGFibGVQcm92aWRlcnModGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSB0aGlzLmZpbHRlcmVkRGF0YXNldHNTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IHNpZGVGaWVsZHMgPSBzaWRlUGFuZWxTZWxlY3Rvcih0aGlzLnByb3BzLCBhdmFpbGFibGVQcm92aWRlcnMsIGZpbHRlcmVkRGF0YXNldHMpO1xuICAgICAgY29uc3QgcGxvdENvbnRhaW5lckZpZWxkcyA9IHBsb3RDb250YWluZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGJvdHRvbVdpZGdldEZpZWxkcyA9IGJvdHRvbVdpZGdldFNlbGVjdG9yKHRoaXMucHJvcHMsIHRoZW1lKTtcbiAgICAgIGNvbnN0IG1vZGFsQ29udGFpbmVyRmllbGRzID0gbW9kYWxDb250YWluZXJTZWxlY3Rvcih0aGlzLnByb3BzLCB0aGlzLnJvb3QuY3VycmVudCk7XG4gICAgICBjb25zdCBnZW9Db2RlclBhbmVsRmllbGRzID0gZ2VvQ29kZXJQYW5lbFNlbGVjdG9yKHRoaXMucHJvcHMsIGRpbWVuc2lvbnMpO1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUGFuZWxGaWVsZHMgPSBub3RpZmljYXRpb25QYW5lbFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCBtYXBDb250YWluZXJzID0gIWlzU3BsaXRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICA8TWFwQ29udGFpbmVyXG4gICAgICAgICAgICAgIHByaW1hcnk9e3RydWV9XG4gICAgICAgICAgICAgIGtleT17MH1cbiAgICAgICAgICAgICAgaW5kZXg9ezB9XG4gICAgICAgICAgICAgIHsuLi5tYXBGaWVsZHNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgICAgY29udGFpbmVySWQ9ezB9XG4gICAgICAgICAgICAgIGRlbGV0ZU1hcExhYmVscz17dGhpcy5fZGVsZXRlTWFwTGFiZWxzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICBdXG4gICAgICAgIDogc3BsaXRNYXBzLm1hcCgoc2V0dGluZ3MsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8TWFwQ29udGFpbmVyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgcHJpbWFyeT17aW5kZXggPT09IDF9XG4gICAgICAgICAgICAgIHsuLi5tYXBGaWVsZHNTZWxlY3Rvcih0aGlzLnByb3BzLCBpbmRleCl9XG4gICAgICAgICAgICAgIGNvbnRhaW5lcklkPXtpbmRleH1cbiAgICAgICAgICAgICAgZGVsZXRlTWFwTGFiZWxzPXt0aGlzLl9kZWxldGVNYXBMYWJlbHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Um9vdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMucm9vdH0+XG4gICAgICAgICAgPEZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlciBmZWF0dXJlRmxhZ3M9e2ZlYXR1cmVGbGFnc30+XG4gICAgICAgICAgICA8SW50bFByb3ZpZGVyIGxvY2FsZT17dWlTdGF0ZS5sb2NhbGV9IG1lc3NhZ2VzPXtsb2NhbGVNZXNzYWdlc1t1aVN0YXRlLmxvY2FsZV19PlxuICAgICAgICAgICAgICA8U3R5bGVTaGVldE1hbmFnZXIgc2hvdWxkRm9yd2FyZFByb3A9e3Nob3VsZEZvcndhcmRQcm9wfT5cbiAgICAgICAgICAgICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICAgICAgICAgICAgPENsb3VkTGlzdFByb3ZpZGVyIHByb3ZpZGVycz17Y2xvdWRQcm92aWRlcnN9PlxuICAgICAgICAgICAgICAgICAgICA8R2xvYmFsU3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJrZXBsZXItZ2xcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtga2VwbGVyLWdsX18ke2lkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogYCR7d2lkdGh9cHhgLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICByZWY9e3RoaXMucm9vdH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25QYW5lbCB7Li4ubm90aWZpY2F0aW9uUGFuZWxGaWVsZHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPERuZENvbnRleHQgdmlzU3RhdGU9e3Zpc1N0YXRlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHshdWlTdGF0ZS5yZWFkT25seSAmJiAhcmVhZE9ubHkgJiYgPFNpZGVQYW5lbCB7Li4uc2lkZUZpZWxkc30gLz59XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFwc0xheW91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYXBzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwU3RhdGU9e3RoaXMucHJvcHMubWFwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2V0U3dpcGVDb21wYXJlUGVyY2VudGFnZT17dGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMuc2V0U3dpcGVDb21wYXJlUGVyY2VudGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge21hcENvbnRhaW5lcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L01hcHNMYXlvdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9EbmRDb250ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIHtpc0V4cG9ydGluZ0ltYWdlICYmIDxQbG90Q29udGFpbmVyIHsuLi5wbG90Q29udGFpbmVyRmllbGRzfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICB7LyogMSBnZW9jb2Rlcjogc2luZ2xlIG1vZGUgT1Igc3BsaXQgbW9kZSBhbmQgc3luY2VkIHZpZXdwb3J0cyAqL31cbiAgICAgICAgICAgICAgICAgICAgICB7IWlzVmlld3BvcnREaXNqb2ludGVkKHRoaXMucHJvcHMpICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdlb0NvZGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLmdlb0NvZGVyUGFuZWxGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXswfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN5bmNlZFZpZXdwb3J0cz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgey8qIDIgZ2VvY29kZXJzOiBzcGxpdCBtb2RlIGFuZCB1bnN5bmNlZCB2aWV3cG9ydHMgKi99XG4gICAgICAgICAgICAgICAgICAgICAge2lzVmlld3BvcnREaXNqb2ludGVkKHRoaXMucHJvcHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBDb250YWluZXJzLm1hcCgoX21hcENvbnRhaW5lciwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEdlb0NvZGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5nZW9Db2RlclBhbmVsRmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN5bmNlZFZpZXdwb3J0cz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDxCb3R0b21XaWRnZXRPdXRlciBhYnNvbHV0ZT17IWhhc1BvcnRhYmxlV2lkdGgoYnJlYWtQb2ludFZhbHVlcyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJvdHRvbVdpZGdldFxuICAgICAgICAgICAgICAgICAgICAgICAgICByb290UmVmPXt0aGlzLmJvdHRvbVdpZGdldFJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLmJvdHRvbVdpZGdldEZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVz17ZGltZW5zaW9ucy53aWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0JvdHRvbVdpZGdldE91dGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxNb2RhbENvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLm1vZGFsQ29udGFpbmVyRmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVz17ZGltZW5zaW9ucy53aWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckg9e2RpbWVuc2lvbnMuaGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvR2xvYmFsU3R5bGU+XG4gICAgICAgICAgICAgICAgICA8L0Nsb3VkTGlzdFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICAgICAgICAgICAgPC9TdHlsZVNoZWV0TWFuYWdlcj5cbiAgICAgICAgICAgIDwvSW50bFByb3ZpZGVyPlxuICAgICAgICAgIDwvRmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICA8L1Jvb3RDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ga2VwbGVyR2xDb25uZWN0KFxuICAgIG1hcFN0YXRlVG9Qcm9wcyxcbiAgICBtYWtlTWFwRGlzcGF0Y2hUb1Byb3BzXG4gICkod2l0aFRoZW1lKEtlcGxlckdMKSkgYXMgUmV0dXJuVHlwZTx0eXBlb2YgS2VwbGVyR2xGYWN0b3J5Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogS2VwbGVyR2xTdGF0ZSwgcHJvcHM6IEtlcGxlckdMUHJvcHMpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wcm9wcyxcbiAgICB2aXNTdGF0ZTogc3RhdGUudmlzU3RhdGUsXG4gICAgbWFwU3R5bGU6IHN0YXRlLm1hcFN0eWxlLFxuICAgIG1hcFN0YXRlOiBzdGF0ZS5tYXBTdGF0ZSxcbiAgICB1aVN0YXRlOiBzdGF0ZS51aVN0YXRlLFxuICAgIHByb3ZpZGVyU3RhdGU6IHN0YXRlLnByb3ZpZGVyU3RhdGVcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFVzZXJBY3Rpb25zID0ge307XG5cbmNvbnN0IGdldERpc3BhdGNoID0gZGlzcGF0Y2ggPT4gZGlzcGF0Y2g7XG5jb25zdCBnZXRVc2VyQWN0aW9ucyA9IChkaXNwYXRjaCwgcHJvcHMpID0+IHByb3BzLmFjdGlvbnMgfHwgZGVmYXVsdFVzZXJBY3Rpb25zO1xuXG4vKiogQHR5cGUgeygpID0+IGltcG9ydCgncmVzZWxlY3QnKS5PdXRwdXRQYXJhbWV0cmljU2VsZWN0b3I8YW55LCBhbnksIGFueSwgYW55Pn0gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlR2V0QWN0aW9uQ3JlYXRvcnMoKSB7XG4gIHJldHVybiBjcmVhdGVTZWxlY3RvcihbZ2V0RGlzcGF0Y2gsIGdldFVzZXJBY3Rpb25zXSwgKGRpc3BhdGNoLCB1c2VyQWN0aW9ucykgPT4ge1xuICAgIGNvbnN0IFt2aXNTdGF0ZUFjdGlvbnMsIG1hcFN0YXRlQWN0aW9ucywgbWFwU3R5bGVBY3Rpb25zLCB1aVN0YXRlQWN0aW9ucywgcHJvdmlkZXJBY3Rpb25zXSA9IFtcbiAgICAgIFZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIE1hcFN0YXRlQWN0aW9ucyxcbiAgICAgIE1hcFN0eWxlQWN0aW9ucyxcbiAgICAgIFVJU3RhdGVBY3Rpb25zLFxuICAgICAgUHJvdmlkZXJBY3Rpb25zXG4gICAgXS5tYXAoYWN0aW9ucyA9PiBiaW5kQWN0aW9uQ3JlYXRvcnMobWVyZ2VBY3Rpb25zKGFjdGlvbnMsIHVzZXJBY3Rpb25zKSwgZGlzcGF0Y2gpKTtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdHlsZUFjdGlvbnMsXG4gICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgIHByb3ZpZGVyQWN0aW9ucyxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VNYXBEaXNwYXRjaFRvUHJvcHMoKSB7XG4gIGNvbnN0IGdldEFjdGlvbkNyZWF0b3JzID0gbWFrZUdldEFjdGlvbkNyZWF0b3JzKCk7XG4gIGNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaCwgb3duUHJvcHMpID0+IHtcbiAgICBjb25zdCBncm91cGVkQWN0aW9uQ3JlYXRvcnMgPSBnZXRBY3Rpb25DcmVhdG9ycyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmdyb3VwZWRBY3Rpb25DcmVhdG9ycyxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gbWFwRGlzcGF0Y2hUb1Byb3BzO1xufVxuXG4vKipcbiAqIE92ZXJyaWRlIGRlZmF1bHQga2VwbGVyLmdsIGFjdGlvbnMgd2l0aCB1c2VyIGRlZmluZWQgYWN0aW9ucyB1c2luZyB0aGUgc2FtZSBrZXlcbiAqL1xuZnVuY3Rpb24gbWVyZ2VBY3Rpb25zKGFjdGlvbnMsIHVzZXJBY3Rpb25zKSB7XG4gIGNvbnN0IG92ZXJyaWRlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiB1c2VyQWN0aW9ucykge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1c2VyQWN0aW9ucywga2V5KSAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbnMsIGtleSlcbiAgICApIHtcbiAgICAgIG92ZXJyaWRlc1trZXldID0gdXNlckFjdGlvbnNba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gey4uLmFjdGlvbnMsIC4uLm92ZXJyaWRlc307XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtlcGxlckdsRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGlCQUFBLEdBQUFMLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxnQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsUUFBQSxHQUFBVCxPQUFBO0FBVUEsSUFBQVUsUUFBQSxHQUFBVixPQUFBO0FBUUEsSUFBQVcsWUFBQSxHQUFBWCxPQUFBO0FBRUEsSUFBQVksa0JBQUEsR0FBQVosT0FBQTtBQVVBLElBQUFhLFVBQUEsR0FBQWIsT0FBQTtBQVVBLElBQUFjLFVBQUEsR0FBQVosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFlLGNBQUEsR0FBQWIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFnQixXQUFBLEdBQUFkLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBaUIsYUFBQSxHQUFBZixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWtC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