raain-app 1.6.36 → 3.2.1

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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [3.2.0] - 2026-03-01
11
+
12
+ ### Changed
13
+
14
+ - [RAD-183] 3.1.x => 3.2.x (api stability)
15
+
8
16
  ## [1.6.36] - 2026-02-28
9
17
 
10
18
  ### Fixed
@@ -15,7 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
15
23
 
16
24
  ### Fixed
17
25
 
18
- - [RAD-177] Cumulative timeframe filter excluded frames starting before selected period (e.g., 01:24-01:30 no longer shown for period 01:30-02:00)
26
+ - [RAD-177] Cumulative timeframe filter excluded frames starting before selected period (e.g., 01:24-01:30 no longer
27
+ shown for period 01:30-02:00)
19
28
  - [RAD-177] Cumulative Summary chart used extended period bounds instead of exact selected period
20
29
 
21
30
  ### Changed
@@ -228,17 +228,23 @@ export class ProfileService {
228
228
  if (name) {
229
229
  params.name = name;
230
230
  }
231
- const queryString = BuildQueryString(params);
232
231
  try {
233
- const resp = await this.fidjService.sendOnEndpoint({
234
- key: 'radars',
235
- verb: 'GET',
236
- relativePath: queryString ? '?' + queryString : '',
237
- defaultKeyUrl: this.defaultUrlForAPI + '/radars',
238
- });
239
- for (const r of resp.data.radars) {
240
- const radar = new RadarNode(r);
241
- radars.push(radar);
232
+ let page = 1;
233
+ let hasNext = true;
234
+ while (hasNext) {
235
+ params.page = page;
236
+ const queryString = BuildQueryString(params);
237
+ const resp = await this.fidjService.sendOnEndpoint({
238
+ key: 'radars',
239
+ verb: 'GET',
240
+ relativePath: queryString ? '?' + queryString : '',
241
+ defaultKeyUrl: this.defaultUrlForAPI + '/radars',
242
+ });
243
+ for (const r of resp.data.radars) {
244
+ radars.push(new RadarNode(r));
245
+ }
246
+ hasNext = resp.data.pagination?.hasNext ?? false;
247
+ page++;
242
248
  }
243
249
  }
244
250
  catch (e) {
@@ -281,14 +287,9 @@ export class ProfileService {
281
287
  }
282
288
  async getLonelyRadars(rains) {
283
289
  try {
284
- const resp = await this.fidjService.sendOnEndpoint({
285
- key: 'radars',
286
- verb: 'GET',
287
- defaultKeyUrl: this.defaultUrlForAPI + '/radars',
288
- });
290
+ const allRadars = await this.getRadars();
289
291
  const lonelyRadars = [];
290
- const radars = resp.data.radars;
291
- radars.forEach((radar) => {
292
+ allRadars.forEach((radar) => {
292
293
  let found = false;
293
294
  rains.forEach((rain) => {
294
295
  const rdId = rain.getLink(RadarNode.TYPE).getId();
@@ -297,7 +298,7 @@ export class ProfileService {
297
298
  }
298
299
  });
299
300
  if (!found) {
300
- lonelyRadars.push(new RadarNode(radar));
301
+ lonelyRadars.push(radar);
301
302
  }
302
303
  });
303
304
  return lonelyRadars;
@@ -343,16 +344,23 @@ export class ProfileService {
343
344
  if (name) {
344
345
  params.name = name;
345
346
  }
346
- const queryString = BuildQueryString(params);
347
347
  try {
348
- const resp = await this.fidjService.sendOnEndpoint({
349
- key: 'rains',
350
- verb: 'GET',
351
- relativePath: queryString ? '?' + queryString : '',
352
- defaultKeyUrl: this.defaultUrlForAPI + '/rains',
353
- });
354
- for (const rain of resp.data.rains) {
355
- rains.push(new RainNode(rain));
348
+ let page = 1;
349
+ let hasNext = true;
350
+ while (hasNext) {
351
+ params.page = page;
352
+ const queryString = BuildQueryString(params);
353
+ const resp = await this.fidjService.sendOnEndpoint({
354
+ key: 'rains',
355
+ verb: 'GET',
356
+ relativePath: queryString ? '?' + queryString : '',
357
+ defaultKeyUrl: this.defaultUrlForAPI + '/rains',
358
+ });
359
+ for (const rain of resp.data.rains) {
360
+ rains.push(new RainNode(rain));
361
+ }
362
+ hasNext = resp.data.pagination?.hasNext ?? false;
363
+ page++;
356
364
  }
357
365
  }
358
366
  catch (e) {
@@ -537,8 +545,7 @@ export class ProfileService {
537
545
  // Merge additional qualities (lte mode returns multiple freq groups)
538
546
  for (let i = 1; i < allQualities.length; i++) {
539
547
  const extra = new RainComputationQuality(allQualities[i]);
540
- extra.qualitySpeedMatrixContainer =
541
- SpeedMatrixContainer.CreateFromJson(extra.qualitySpeedMatrixContainer);
548
+ extra.qualitySpeedMatrixContainer = SpeedMatrixContainer.CreateFromJson(extra.qualitySpeedMatrixContainer);
542
549
  rainComputationQuality.merge(extra);
543
550
  }
544
551
  return rainComputationQuality;
@@ -735,7 +742,9 @@ export class ProfileService {
735
742
  });
736
743
  return {
737
744
  providers: response.data.providers || [],
738
- timeStepInMinutes: response.data.timeStepInMinutes || [5, 10, 15, 30, 60],
745
+ timeStepInMinutes: response.data.timeStepInMinutes?.length
746
+ ? response.data.timeStepInMinutes
747
+ : [5, 10, 15, 30, 60],
739
748
  };
740
749
  }
741
750
  catch (e) {
@@ -777,4 +786,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
777
786
  providedIn: 'root',
778
787
  }]
779
788
  }], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.FidjService }, { type: i3.HttpClient }, { type: i4.Router }]; } });
780
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUF1Q1QsU0FBUyxFQUNULGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEdBQ1gsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFDLFdBQVcsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxTQUFTLENBQUM7Ozs7OztBQU14QyxNQUFNLE9BQU8sY0FBYztJQVd2QixZQUNjLE9BQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3hCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUss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QVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzs0R0E1K0JRLGNBQWM7Z0hBQWQsY0FBYyxjQUZYLE1BQU07NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEJ1aWxkUXVlcnlTdHJpbmcsXG4gICAgRXZlbnROb2RlLFxuICAgIEdhdWdlTWVhc3VyZSxcbiAgICBHYXVnZU5vZGUsXG4gICAgTGF0TG5nLFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3QsXG4gICAgUmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXNwb25zZSxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRPbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXNwb25zZSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWRhcnNGaW5kT25lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmVzUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzQ29tcGFyZXNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNDcmVhdGVSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0RldGFpbGVkUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzTGlzdFJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzTGlzdFJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNGaW5kQWxsTWluZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRPbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1JlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zUHJvZ3Jlc3NSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zUHJvdmlkZXJzUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlUZWFtc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVRlYW1zRmluZE9uZVJlc3BvbnNlLFxuICAgIFJhZGFyTm9kZSxcbiAgICBSYWluQ29tcHV0YXRpb25NYXAsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbiAgICBUZWFtTm9kZSxcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuXG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcblxuaW1wb3J0IHtGaWRqU3RvcmFnZSwgRmlkalN0b3JhZ2VOb2RlfSBmcm9tICcuL2ZpZGotc3RvcmFnZS5tb2RlbCc7XG5pbXBvcnQge0Vycm9ySW50ZXJmYWNlLCBGaWRqU2VydmljZSwgTG9nZ2VyTGV2ZWxFbnVtfSBmcm9tICdmaWRqLWFuZ3VsYXInO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4veHl0eXBlJztcbmltcG9ydCB7R2F1Z2VOb2RlRmlsdGVyfSBmcm9tICcuL3Rvb2xzJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XG4gICAgcHVibGljIHJlYWR5Rm9yU3luYzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAgIHB1YmxpYyBhc1RlYW1JZDogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGVtYWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGlzRGVtbzogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgcm9sZXM6IEFycmF5PHN0cmluZz47XG4gICAgcHJvdGVjdGVkIG5vZGVEYXRhOiBGaWRqU3RvcmFnZU5vZGU7XG4gICAgcHJvdGVjdGVkIGZpZGpTdG9yYWdlOiBGaWRqU3RvcmFnZTtcbiAgICBwcm90ZWN0ZWQgaGF2ZVRyeVRvUmVjb25uZWN0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICBwcm90ZWN0ZWQgZmlkalNlcnZpY2U6IEZpZGpTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge1xuICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tZW1haWwnKTtcbiAgICAgICAgdGhpcy5hc1RlYW1JZCA9IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWFzVGVhbUlkJyk7XG4gICAgICAgIHRoaXMucmVhZHlGb3JTeW5jID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgICAgIHRoaXMucm9sZXMgPSBbXTtcbiAgICAgICAgdGhpcy5maWRqU3RvcmFnZSA9IG5ldyBGaWRqU3RvcmFnZShzdG9yYWdlKTtcbiAgICAgICAgdGhpcy5pc0RlbW9Nb2RlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGlzRGVtb01vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGVtbztcbiAgICB9XG5cbiAgICBzZXQgaXNEZW1vTW9kZShtb2RlKSB7XG4gICAgICAgIHRoaXMuaXNEZW1vID0gbW9kZSA/IG1vZGUgOiB0cnVlO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlLnNldERlbW9Nb2RlKHRoaXMuaXNEZW1vKTtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFVybEZvckFQSSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLXVybEZvckFQSScpO1xuICAgIH1cblxuICAgIHNldCBkZWZhdWx0VXJsRm9yQVBJKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLXVybEZvckFQSScsIHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaFByb2ZpbGUoKTogUHJvbWlzZTxGaWRqU3RvcmFnZU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubm9kZURhdGEgPSBhd2FpdCB0aGlzLmZpZGpTdG9yYWdlLmdldFJlZnJlc2hlZE5vZGVDb3B5KHRoaXMuZmlkalNlcnZpY2UpO1xuICAgICAgICAgICAgdGhpcy5zZXRSb2xlcyhhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmdldFJvbGVzKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZURhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5pc0Nvbm5lY3RlZCgpO1xuICAgIH1cblxuICAgIGdldEVtYWlsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWFpbCA/PyB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgIH1cblxuICAgIHNldEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KCdyYWFpbi1lbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgIH1cblxuICAgIGFzeW5jIGxvZ291dChmaWRqS2V5OiBzdHJpbmcsIGZpZGpQcm9kOiBib29sZWFuKSB7XG4gICAgICAgIC8vIHRoaXMuc3RvcmFnZS5yZW1vdmUoJ3JhYWluLWVtYWlsJyk7XG5cbiAgICAgICAgaWYgKCFmaWRqS2V5KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9naW5JbkRlbW9Nb2RlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmxvZ291dCh0cnVlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5pbml0KGZpZGpLZXksIHtcbiAgICAgICAgICAgICAgICBsb2dMZXZlbDogTG9nZ2VyTGV2ZWxFbnVtLldBUk4sIC8vIGZpZGpQcm9kID8gTG9nZ2VyTGV2ZWxFbnVtLldBUk4gOiBMb2dnZXJMZXZlbEVudW0uSU5GTyxcbiAgICAgICAgICAgICAgICBjcnlwdG86IGZhbHNlLFxuICAgICAgICAgICAgICAgIHByb2Q6IGZpZGpQcm9kLFxuICAgICAgICAgICAgICAgIHVzZURCOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMubmV4dCh0cnVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdpbml0RmlkaiBjYXRjaCBwYjogJywgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrRXJyb3IoZXJyb3I6IEVycm9ySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSA0MDEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGIgb24gYXV0aCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgbG9nb3V0IGVycm9ycyBhcyB3ZSdyZSByZWRpcmVjdGluZyB0byBsb2dvdXQgcGFnZSBhbnl3YXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ290b0xvdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdvdG9Mb3V0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpID4gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvbG9nb3V0Jywge1xuICAgICAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dvdG9Mb3V0IGVycm9yOiAnLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdvdG9Mb2dpbigpIHtcbiAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywge3NraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZX0pO1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddKTtcbiAgICB9XG5cbiAgICBpc0xvZ2dlZEluKCkge1xuICAgICAgICBjb25zdCBsb2dnZWRJbiA9IHRoaXMuZmlkalNlcnZpY2UuaXNMb2dnZWRJbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnaXNMb2dnZWRJbjogJywgbG9nZ2VkSW4pO1xuICAgICAgICByZXR1cm4gbG9nZ2VkSW47XG4gICAgfVxuXG4gICAgbmVlZHNDb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlkalNlcnZpY2UubmVlZHNSZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgY29ubmVjdGlvblJlZnJlc2goKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIGFzeW5jIHN0b3JlQWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU3RvcmFnZS5zdG9yZURhdGEodGhpcy5maWRqU2VydmljZSwgdGhpcy5ub2RlRGF0YSk7XG4gICAgfVxuXG4gICAgaXNBZG1pbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9sZXMuaW5kZXhPZignYWRtaW4nKSA+IC0xO1xuICAgIH1cblxuICAgIC8vID09PSBOb3RpZmljYXRpb25zID09PVxuXG4gICAgYXN5bmMgY3JlYXRlTm90aWZpY2F0aW9uKHJhaW5JZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGF0YTogUmFhaW5BcGlOb3RpZmljYXRpb25zQWRkUmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICByYWluOiByYWluSWQsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFdmVudE5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Tm90aWZpY2F0aW9ucyhyYWluSWQ6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdHlwZSBOb3RpZmljYXRpb25zRmluZFBhcmFtcyA9IFBhcnRpYWw8UmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXF1ZXN0PjtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogTm90aWZpY2F0aW9uc0ZpbmRQYXJhbXMgPSB7cmFpbjogcmFpbklkfTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxOb3RpZmljYXRpb25zRmluZFBhcmFtcz4ocGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0ZpbmRBbGxNaW5lUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YS5ub3RpZmljYXRpb25zLm1hcCgobikgPT4gbmV3IEV2ZW50Tm9kZShuKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyA9PT0gVGVhbXMgPT09XG5cbiAgICBhc3luYyBnZXRUZWFtcygpOiBQcm9taXNlPEFycmF5PFRlYW1Ob2RlPj4ge1xuICAgICAgICBjb25zdCB0ZWFtcyA9IFtdO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpVGVhbXNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIHt0ZWFtczogUmV0dXJuVHlwZTxUZWFtTm9kZVsndG9KU09OJ10+W119XG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVhbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGVhbSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8VGVhbU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpVGVhbXNGaW5kT25lUmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiB0ZWFtSWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGVhbU5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhZGFycyA9PT1cblxuICAgIGFzeW5jIGdldFJhZGFycyhuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWRhck5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhZGFycyA9IFtdO1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXF1ZXN0ID0ge307XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBwYXJhbXMubmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHIgb2YgcmVzcC5kYXRhLnJhZGFycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhZGFyID0gbmV3IFJhZGFyTm9kZShyKTtcbiAgICAgICAgICAgICAgICByYWRhcnMucHVzaChyYWRhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFkYXJzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhZGFyKGlkOiBzdHJpbmcpOiBQcm9taXNlPFJhZGFyTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8dm9pZCwgUmFhaW5BcGlSYWRhcnNGaW5kT25lUmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgcHV0UmFkYXIocmFkYXJOb2RlOiBSYWRhck5vZGUpOiBQcm9taXNlPFJhZGFyTm9kZT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBSYWFpbkFwaVJhZGFyc1VwZGF0ZVJlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgICAgbmFtZTogcmFkYXJOb2RlLm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzVXBkYXRlUmVxdWVzdEJvZHksXG4gICAgICAgICAgICAgICAgUmV0dXJuVHlwZTxSYWRhck5vZGVbJ3RvSlNPTiddPlxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhZGFyTm9kZS5pZCxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnUFVUJyxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzLycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TG9uZWx5UmFkYXJzKHJhaW5zOiBSYWluTm9kZVtdKTogUHJvbWlzZTxSYWRhck5vZGVbXT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBsb25lbHlSYWRhcnM6IFJhZGFyTm9kZVtdID0gW107XG4gICAgICAgICAgICBjb25zdCByYWRhcnMgPSByZXNwLmRhdGEucmFkYXJzO1xuICAgICAgICAgICAgcmFkYXJzLmZvckVhY2goKHJhZGFyKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmFpbnMuZm9yRWFjaCgocmFpbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZElkID0gcmFpbi5nZXRMaW5rKFJhZGFyTm9kZS5UWVBFKS5nZXRJZCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmRJZCA9PT0gcmFkYXIuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9uZWx5UmFkYXJzLnB1c2gobmV3IFJhZGFyTm9kZShyYWRhcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGxvbmVseVJhZGFycztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluVGltZWZyYW1lKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgYmVnaW46IERhdGUsXG4gICAgICAgIGVuZDogRGF0ZSxcbiAgICAgICAgZm9yY2VkID0gZmFsc2UsXG4gICAgICAgIHByb3ZpZGVyID0gJ1JhYWluJyxcbiAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXMgPSAxMCxcbiAgICAgICAgd2luZG93SW5NaW51dGVzID0gMFxuICAgICk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0ZpbmRPbmVUaW1lZnJhbWVDdW11bGF0aXZlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6ICd0aW1lZnJhbWVDdW11bGF0aXZlJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlczogU3RyaW5nKHRpbWVTdGVwSW5NaW51dGVzKSxcbiAgICAgICAgICAgICAgICBiZWdpbjogYmVnaW4/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgZW5kOiBlbmQ/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGZvcmNlZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5mb3JjZWQgPSAndHJ1ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJhbXMud2luZG93SW5NaW51dGVzID0gU3RyaW5nKHdpbmRvd0luTWludXRlcyk7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9XG4gICAgICAgICAgICAgICAgQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgKHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyksXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJhaW5Ob2RlID0gbmV3IFJhaW5Ob2RlKHJlc3AuZGF0YS50aW1lZnJhbWVDdW11bGF0aXZlKTtcbiAgICAgICAgICAgIHJhaW5Ob2RlLm5hbWUgKz0gJy5yYWRhci50aW1lZnJhbWVDdW11bGF0aXZlJztcbiAgICAgICAgICAgIHJldHVybiByYWluTm9kZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBSYWlucyA9PT1cblxuICAgIGFzeW5jIGdldFJhaW5zKG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhaW5Ob2RlPj4ge1xuICAgICAgICBjb25zdCByYWlucyA9IFtdO1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNGaW5kQWxsTWluZVJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHBhcmFtcy5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCByYWluIG9mIHJlc3AuZGF0YS5yYWlucykge1xuICAgICAgICAgICAgICAgIHJhaW5zLnB1c2gobmV3IFJhaW5Ob2RlKHJhaW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWlucztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluKGlkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Ob2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDx2b2lkLCBSYWFpbkFwaVJhaW5zRmluZE9uZVJlc3BvbnNlPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhaW5Ob2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gQ291bnRcblxuICAgIGFzeW5jIGdldENvdW50cyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHJhbmdlOiAnaG91cicgfCAnZGF5JyB8ICdtb250aCcgfCAneWVhcic7XG4gICAgICAgICAgICBwZXJpb2RCZWdpbjogRGF0ZTtcbiAgICAgICAgfVxuICAgICk6IFByb21pc2U8e1xuICAgICAgICBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXTtcbiAgICAgICAgcGVyY2VudFJhaW55OiBYWVR5cGVbXTtcbiAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50Q29tcHV0YXRpb25zOiBYWVR5cGVbXTtcbiAgICAgICAgcXVldWVSdW5uaW5nOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zR2V0Q291bnRzUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICByYW5nZTogb3B0aW9ucy5yYW5nZSxcbiAgICAgICAgICAgICAgICBiZWdpbjogb3B0aW9ucy5wZXJpb2RCZWdpbi50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zR2V0Q291bnRzUmVxdWVzdD4ocGFyYW1zKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zR2V0Q291bnRzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvY291bnRzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzLnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudFJhaW55OiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRROiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdID0gW107XG5cbiAgICAgICAgICAgIGNvdW50cy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnNldERhdGVDb21wb25lbnRzKG9wdGlvbnMucGVyaW9kQmVnaW4sIGMpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudEltYWdlcyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnkucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudFJhaW55ID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRRLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRRID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudENvbXB1dGF0aW9ucyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMsXG4gICAgICAgICAgICAgICAgcGVyY2VudFJhaW55LFxuICAgICAgICAgICAgICAgIHBlcmNlbnRRLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnMsXG4gICAgICAgICAgICAgICAgcXVldWVSdW5uaW5nOiByZXNwLmRhdGEucXVldWVSdW5uaW5nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvdW50c0hvdXIoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiB7cGVyaW9kQmVnaW46IERhdGV9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50Q29tcHV0YXRpb25zOiBYWVR5cGVbXTtcbiAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW107XG4gICAgICAgIHJhaW55U3VtOiBYWVR5cGVbXTtcbiAgICAgICAgcXVldWVSdW5uaW5nOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zR2V0Q291bnRzUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICByYW5nZTogJ2hvdXInLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBvcHRpb25zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0PihwYXJhbXMpO1xuXG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgKHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyksXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50cyA9IHJlc3AuZGF0YS5jb3VudHMucmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudEltYWdlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgICAgICAgICBwZXJjZW50Q29tcHV0YXRpb25zOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHJhaW55U3VtOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHJhaW55Q291bnQ6IFhZVHlwZVtdID0gW107XG5cbiAgICAgICAgICAgIGNvdW50cy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnNldERhdGVDb21wb25lbnRzKG9wdGlvbnMucGVyaW9kQmVnaW4sIGMpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudEltYWdlcyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50Q29tcHV0YXRpb25zLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRDb21wdXRhdGlvbnMgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudC5wdXNoKG5ldyBYWVR5cGUoYy5yYWlueUNvdW50ID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHJhaW55U3VtLnB1c2gobmV3IFhZVHlwZShjLnJhaW55U3VtID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcyxcbiAgICAgICAgICAgICAgICBwZXJjZW50Q29tcHV0YXRpb25zLFxuICAgICAgICAgICAgICAgIHJhaW55Q291bnQsXG4gICAgICAgICAgICAgICAgcmFpbnlTdW0sXG4gICAgICAgICAgICAgICAgcXVldWVSdW5uaW5nOiByZXNwLmRhdGEucXVldWVSdW5uaW5nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb21wdXRpbmcgPT09XG5cbiAgICBhc3luYyBnZXRSYWluQ29tcHV0YXRpb25DdW11bGF0aXZlQ2FydGVzaWFuTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25NYXA+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3QgPSB7Zm9ybWF0OiAnY2FydGVzaWFuLW1hcCd9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBSZXF1ZXN0PihwYXJhbXMpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBgJHtyYWluSWR9L2N1bXVsYXRpdmVzLyR7cmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfT8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKTtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbk1hcC5uYW1lID0gcmFpbklkICsgJy5yYWluLmNhcnRlc2lhbi1tYXAnO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvbk1hcDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDdW11bGF0aXZlc01hcEJ5SWQoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICByYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQ6IHN0cmluZyxcbiAgICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBudW1iZXJcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPSBgJHtyYWluSWR9L2N1bXVsYXRpdmVzLyR7cmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfS9jdW11bGF0aXZlLyR7Y3VtdWxhdGl2ZUhvdXJzfWA7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY3VtdWxhdGl2ZSddKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY3VtdWxhdGl2ZSddKTtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbk1hcC5uYW1lID0gcmFpbklkICsgJy5yYWluLmN1bXVsYXRpdmUtY3VtdWxhdGl2ZSc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkN1bXVsYXRpdmVDb21wYXJlKFxuICAgICAgICByYWluTm9kZTogUmFpbk5vZGUsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25RdWFsaXR5PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGAke3JhaW5Ob2RlLmlkfS9jdW11bGF0aXZlcy8ke3JhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0vY29tcGFyZXNgLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1YWxpdHlKc29uID0gcmVzcG9uc2UuZGF0YS5xdWFsaXRpZXNbMF07XG4gICAgICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV3IFJhaW5Db21wdXRhdGlvblF1YWxpdHkocXVhbGl0eUpzb24pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPVxuICAgICAgICAgICAgICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLkNyZWF0ZUZyb21Kc29uKFxuICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEZldGNoIHBlci1mcmVxdWVuY3kgcXVhbGl0eSBmb3IgYW4gb24tZGVtYW5kIGN1bXVsYXRpdmVcbiAgICAvLyB0aW1lU3RlcEluTWludXRlcyA9IGdhdWdlIGZyZXF1ZW5jeSBmaWx0ZXIgKGUuZy4gNiBmb3IgNm1pbiBnYXVnZXMsIDMwIGZvciAzMG1pbiBnYXVnZXMpXG4gICAgLy8gdGltZVN0ZXBNb2RlID0gJ2VxJyAoZXhhY3QgbWF0Y2gpIG9yICdsdGUnIChhbGwgZnJlcXVlbmNpZXMgPD0gdGltZVN0ZXBJbk1pbnV0ZXMpXG4gICAgLy8gcHJvdmlkZXIgPSBnYXVnZSBwcm92aWRlciBmaWx0ZXIgKGUuZy4gJ1JhYWluJylcbiAgICBhc3luYyBnZXRSYWluQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzQ29tcGFyZShcbiAgICAgICAgcmFpbk5vZGU6IFJhaW5Ob2RlLFxuICAgICAgICByYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQ6IHN0cmluZyxcbiAgICAgICAgcHJvdmlkZXI6IHN0cmluZyA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXIgPSA1LFxuICAgICAgICB0aW1lU3RlcE1vZGU6ICdlcScgfCAnbHRlJyA9ICdlcSdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzQ29tcGFyZXNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgICAgIHRpbWVTdGVwTW9kZSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9XG4gICAgICAgICAgICBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlc1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlc1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBgJHtyYWluTm9kZS5pZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9L2NvbXBhcmVzPyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBhbGxRdWFsaXRpZXMgPSByZXNwb25zZS5kYXRhLnF1YWxpdGllcztcbiAgICAgICAgICAgIGlmICghYWxsUXVhbGl0aWVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IG5ldyBSYWluQ29tcHV0YXRpb25RdWFsaXR5KGFsbFF1YWxpdGllc1swXSk7XG4gICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9XG4gICAgICAgICAgICAgICAgU3BlZWRNYXRyaXhDb250YWluZXIuQ3JlYXRlRnJvbUpzb24oXG4gICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTWVyZ2UgYWRkaXRpb25hbCBxdWFsaXRpZXMgKGx0ZSBtb2RlIHJldHVybnMgbXVsdGlwbGUgZnJlcSBncm91cHMpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFsbFF1YWxpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhID0gbmV3IFJhaW5Db21wdXRhdGlvblF1YWxpdHkoYWxsUXVhbGl0aWVzW2ldKTtcbiAgICAgICAgICAgICAgICBleHRyYS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPVxuICAgICAgICAgICAgICAgICAgICBTcGVlZE1hdHJpeENvbnRhaW5lci5DcmVhdGVGcm9tSnNvbihleHRyYS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkubWVyZ2UoZXh0cmEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Qcm9ncmVzcyhyYWluSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvcHJvZ3Jlc3MnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc1Byb2dyZXNzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyByZXR1cm4gcmVzcG9uc2UuZGF0YS5pblByb2dyZXNzO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuaW5RdWV1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEluZGljYXRvcnMocmFpbklkOiBzdHJpbmcpOiBQcm9taXNlPFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVzcG9uc2U+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIGN1bXVsYXRpdmU6ICd0cnVlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9pbmRpY2F0b3JzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtpbmRpY2F0b3JzOiBbXX07XG4gICAgfVxuXG4gICAgLy8gR0VUIC9yYWlucy86cmFpbklkL2N1bXVsYXRpdmVzIC0gTGlzdCBhdmFpbGFibGUgY3VtdWxhdGl2ZSBwZXJpb2RzXG4gICAgLy8gV2l0aCBkZXRhaWxlZD10cnVlLCByZXR1cm5zIGluZGl2aWR1YWwgY3VtdWxhdGl2ZXMgaW5zdGVhZCBvZiBhZ2dyZWdhdGVkIHBlcmlvZHNcbiAgICBhc3luYyBnZXRDdW11bGF0aXZlUGVyaW9kcyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGZpbHRlcnM/OiB7XG4gICAgICAgICAgICB3aW5kb3dJbk1pbnV0ZXM/OiBudW1iZXI7XG4gICAgICAgICAgICBwcm92aWRlcj86IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVhZHk/OiBib29sZWFuO1xuICAgICAgICAgICAgZm9yY2VkPzogYm9vbGVhbjtcbiAgICAgICAgICAgIGRldGFpbGVkPzogYm9vbGVhbjtcbiAgICAgICAgICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgICAgICAgICBsaW1pdD86IG51bWJlcjtcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luPzogc3RyaW5nO1xuICAgICAgICAgICAgcGVyaW9kRW5kPzogc3RyaW5nO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVzcG9uc2UgfCBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNEZXRhaWxlZFJlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0xpc3RSZXF1ZXN0ID0ge307XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ud2luZG93SW5NaW51dGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMud2luZG93SW5NaW51dGVzID0gZmlsdGVycy53aW5kb3dJbk1pbnV0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ucHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHJvdmlkZXIgPSBmaWx0ZXJzLnByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmlzUmVhZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5pc1JlYWR5ID0gZmlsdGVycy5pc1JlYWR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmZvcmNlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZvcmNlZCA9IGZpbHRlcnMuZm9yY2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmRldGFpbGVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmRldGFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5wYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucGFnZSA9IGZpbHRlcnMucGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmxpbWl0ID0gZmlsdGVycy5saW1pdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5wZXJpb2RCZWdpbikge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wZXJpb2RCZWdpbiA9IGZpbHRlcnMucGVyaW9kQmVnaW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ucGVyaW9kRW5kKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnBlcmlvZEVuZCA9IGZpbHRlcnMucGVyaW9kRW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0xpc3RSZXF1ZXN0PihwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVycz8uZGV0YWlsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0RldGFpbGVkUmVzcG9uc2VcbiAgICAgICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzTGlzdFJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwZXJpb2RzOiBbXSwgdG90YWw6IDB9O1xuICAgIH1cblxuICAgIC8vIFBPU1QgL3JhaW5zLzpyYWluSWQvY3VtdWxhdGl2ZXMgLSBUcmlnZ2VyIGN1bXVsYXRpdmUgY29tcHV0YXRpb25cbiAgICBhc3luYyBjcmVhdGVDdW11bGF0aXZlUGVyaW9kKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBwZXJpb2RCZWdpbjogRGF0ZTtcbiAgICAgICAgICAgIHBlcmlvZEVuZDogRGF0ZTtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBzdHJpbmc7XG4gICAgICAgICAgICBjb25mTmFtZT86IHN0cmluZztcbiAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzPzogbnVtYmVyO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNDcmVhdGVSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keTogUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICBwZXJpb2RCZWdpbjogcGFyYW1zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyaW9kRW5kOiBwYXJhbXMucGVyaW9kRW5kLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlcixcbiAgICAgICAgICAgICAgICBjb25mTmFtZTogcGFyYW1zLmNvbmZOYW1lIHx8ICdhZG1pbicsXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IHBhcmFtcy50aW1lU3RlcEluTWludXRlcyB8fCA1LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlcXVlc3QsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBib2R5LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IEdhdWdlcyA9PT1cblxuICAgIGFzeW5jIGdldEdhdWdlKGdhdWdlSWQ6IHN0cmluZyk6IFByb21pc2U8R2F1Z2VOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDx2b2lkLCBSYWFpbkFwaUdhdWdlc0ZpbmRPbmVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBnYXVnZUlkLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2F1Z2VOb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEdhdWdlcyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGFyb3VuZExhdExuZzogTGF0TG5nLFxuICAgICAgICBwYWdlQ291bnQgPSAxXG4gICAgKTogUHJvbWlzZTxBcnJheTxHYXVnZU5vZGVGaWx0ZXI+PiB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXJhbXM6IFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgYXJvdW5kTGF0TG5nOiBgJHthcm91bmRMYXRMbmcubGF0fSwke2Fyb3VuZExhdExuZy5sbmd9YCxcbiAgICAgICAgICAgIHJhaW5JZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgICAgICAgIGJhc2VQYXJhbXMudGVhbUlkID0gdGhpcy5hc1RlYW1JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdhdWdlcyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChsZXQgY291bnQgPSAxOyBjb3VudCA8PSBwYWdlQ291bnQ7IGNvdW50KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0ID0gey4uLmJhc2VQYXJhbXMsIHBhZ2U6IGNvdW50fTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgcmVzcC5kYXRhLmdhdWdlcykge1xuICAgICAgICAgICAgICAgICAgICBnYXVnZXMucHVzaChuZXcgR2F1Z2VOb2RlRmlsdGVyKGdhdWdlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZU1lYXN1cmVzKGdhdWdlSWQ6IHN0cmluZywgYmVnaW46IERhdGUsIGVuZDogRGF0ZSk6IFByb21pc2U8R2F1Z2VNZWFzdXJlW10+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3QgPSB7XG4gICAgICAgICAgICBiZWdpbjogYmVnaW4udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGVuZDogZW5kLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgIFJhYWluQXBpR2F1Z2VzRmluZE1lYXN1cmVzUmVzcG9uc2VcbiAgICAgICAgPih7XG4gICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGdhdWdlSWQgKyAnL21lYXN1cmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBnYXVnZU1lYXN1cmVzOiBHYXVnZU1lYXN1cmVbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlTWVhc3VyZSBvZiByZXNwLmRhdGEuZ2F1Z2VNZWFzdXJlcykge1xuICAgICAgICAgICAgZ2F1Z2VNZWFzdXJlcy5wdXNoKG5ldyBHYXVnZU1lYXN1cmUoZ2F1Z2VNZWFzdXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlTWVhc3VyZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UHJvdmlkZXJzKFxuICAgICAgICByYWluSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8e3Byb3ZpZGVyczogc3RyaW5nW107IHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXJbXX0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNQcm92aWRlcnNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9wcm92aWRlcnMnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiByZXNwb25zZS5kYXRhLnByb3ZpZGVycyB8fCBbXSxcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlczogcmVzcG9uc2UuZGF0YS50aW1lU3RlcEluTWludXRlcyB8fCBbNSwgMTAsIDE1LCAzMCwgNjBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ2V0UHJvdmlkZXJzIGVycm9yOicsIGUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtdLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBbNSwgMTAsIDE1LCAzMCwgNjBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRSb2xlcyhyb2xlczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLnJvbGVzID0gcm9sZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRlQ29tcG9uZW50cyhcbiAgICAgICAgZGF0ZTogRGF0ZSxcbiAgICAgICAgYzoge1xuICAgICAgICAgICAgeWVhcj86IG51bWJlcjtcbiAgICAgICAgICAgIG1vbnRoPzogbnVtYmVyO1xuICAgICAgICAgICAgZGF5PzogbnVtYmVyO1xuICAgICAgICAgICAgaG91cj86IG51bWJlcjtcbiAgICAgICAgICAgIG1pbnV0ZT86IG51bWJlcjtcbiAgICAgICAgfVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRhdGVUb1Nob3cgPSBuZXcgRGF0ZShkYXRlKTtcblxuICAgICAgICBpZiAoYy55ZWFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDRnVsbFllYXIoYy55ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5tb250aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ01vbnRoKGMubW9udGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5kYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENEYXRlKGMuZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5ob3VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDSG91cnMoYy5ob3VyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5taW51dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENNaW51dGVzKGMubWludXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG4gICAgfVxufVxuIl19
789
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUF1Q1QsU0FBUyxFQUNULGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEdBQ1gsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFDLFdBQVcsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxTQUFTLENBQUM7Ozs7OztBQU14QyxNQUFNLE9BQU8sY0FBYztJQVd2QixZQUNjLE9BQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3hCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUss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R0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ3JCLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzs0R0FwL0JRLGNBQWM7Z0hBQWQsY0FBYyxjQUZYLE1BQU07NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEJ1aWxkUXVlcnlTdHJpbmcsXG4gICAgRXZlbnROb2RlLFxuICAgIEdhdWdlTWVhc3VyZSxcbiAgICBHYXVnZU5vZGUsXG4gICAgTGF0TG5nLFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3QsXG4gICAgUmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXNwb25zZSxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRPbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXNwb25zZSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWRhcnNGaW5kT25lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmVzUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzQ29tcGFyZXNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNDcmVhdGVSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0RldGFpbGVkUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzTGlzdFJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzTGlzdFJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNGaW5kQWxsTWluZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRPbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0LFxuICAgIFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1JlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zUHJvZ3Jlc3NSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zUHJvdmlkZXJzUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlUZWFtc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVRlYW1zRmluZE9uZVJlc3BvbnNlLFxuICAgIFJhZGFyTm9kZSxcbiAgICBSYWluQ29tcHV0YXRpb25NYXAsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbiAgICBUZWFtTm9kZSxcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuXG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcblxuaW1wb3J0IHtGaWRqU3RvcmFnZSwgRmlkalN0b3JhZ2VOb2RlfSBmcm9tICcuL2ZpZGotc3RvcmFnZS5tb2RlbCc7XG5pbXBvcnQge0Vycm9ySW50ZXJmYWNlLCBGaWRqU2VydmljZSwgTG9nZ2VyTGV2ZWxFbnVtfSBmcm9tICdmaWRqLWFuZ3VsYXInO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4veHl0eXBlJztcbmltcG9ydCB7R2F1Z2VOb2RlRmlsdGVyfSBmcm9tICcuL3Rvb2xzJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XG4gICAgcHVibGljIHJlYWR5Rm9yU3luYzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAgIHB1YmxpYyBhc1RlYW1JZDogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGVtYWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGlzRGVtbzogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgcm9sZXM6IEFycmF5PHN0cmluZz47XG4gICAgcHJvdGVjdGVkIG5vZGVEYXRhOiBGaWRqU3RvcmFnZU5vZGU7XG4gICAgcHJvdGVjdGVkIGZpZGpTdG9yYWdlOiBGaWRqU3RvcmFnZTtcbiAgICBwcm90ZWN0ZWQgaGF2ZVRyeVRvUmVjb25uZWN0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICBwcm90ZWN0ZWQgZmlkalNlcnZpY2U6IEZpZGpTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge1xuICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tZW1haWwnKTtcbiAgICAgICAgdGhpcy5hc1RlYW1JZCA9IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWFzVGVhbUlkJyk7XG4gICAgICAgIHRoaXMucmVhZHlGb3JTeW5jID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgICAgIHRoaXMucm9sZXMgPSBbXTtcbiAgICAgICAgdGhpcy5maWRqU3RvcmFnZSA9IG5ldyBGaWRqU3RvcmFnZShzdG9yYWdlKTtcbiAgICAgICAgdGhpcy5pc0RlbW9Nb2RlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGlzRGVtb01vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGVtbztcbiAgICB9XG5cbiAgICBzZXQgaXNEZW1vTW9kZShtb2RlKSB7XG4gICAgICAgIHRoaXMuaXNEZW1vID0gbW9kZSA/IG1vZGUgOiB0cnVlO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlLnNldERlbW9Nb2RlKHRoaXMuaXNEZW1vKTtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFVybEZvckFQSSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLXVybEZvckFQSScpO1xuICAgIH1cblxuICAgIHNldCBkZWZhdWx0VXJsRm9yQVBJKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLXVybEZvckFQSScsIHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaFByb2ZpbGUoKTogUHJvbWlzZTxGaWRqU3RvcmFnZU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubm9kZURhdGEgPSBhd2FpdCB0aGlzLmZpZGpTdG9yYWdlLmdldFJlZnJlc2hlZE5vZGVDb3B5KHRoaXMuZmlkalNlcnZpY2UpO1xuICAgICAgICAgICAgdGhpcy5zZXRSb2xlcyhhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmdldFJvbGVzKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZURhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5pc0Nvbm5lY3RlZCgpO1xuICAgIH1cblxuICAgIGdldEVtYWlsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWFpbCA/PyB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgIH1cblxuICAgIHNldEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KCdyYWFpbi1lbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgIH1cblxuICAgIGFzeW5jIGxvZ291dChmaWRqS2V5OiBzdHJpbmcsIGZpZGpQcm9kOiBib29sZWFuKSB7XG4gICAgICAgIC8vIHRoaXMuc3RvcmFnZS5yZW1vdmUoJ3JhYWluLWVtYWlsJyk7XG5cbiAgICAgICAgaWYgKCFmaWRqS2V5KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9naW5JbkRlbW9Nb2RlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmxvZ291dCh0cnVlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5pbml0KGZpZGpLZXksIHtcbiAgICAgICAgICAgICAgICBsb2dMZXZlbDogTG9nZ2VyTGV2ZWxFbnVtLldBUk4sIC8vIGZpZGpQcm9kID8gTG9nZ2VyTGV2ZWxFbnVtLldBUk4gOiBMb2dnZXJMZXZlbEVudW0uSU5GTyxcbiAgICAgICAgICAgICAgICBjcnlwdG86IGZhbHNlLFxuICAgICAgICAgICAgICAgIHByb2Q6IGZpZGpQcm9kLFxuICAgICAgICAgICAgICAgIHVzZURCOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMubmV4dCh0cnVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdpbml0RmlkaiBjYXRjaCBwYjogJywgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrRXJyb3IoZXJyb3I6IEVycm9ySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSA0MDEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGIgb24gYXV0aCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgbG9nb3V0IGVycm9ycyBhcyB3ZSdyZSByZWRpcmVjdGluZyB0byBsb2dvdXQgcGFnZSBhbnl3YXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ290b0xvdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdvdG9Mb3V0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpID4gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvbG9nb3V0Jywge1xuICAgICAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dvdG9Mb3V0IGVycm9yOiAnLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdvdG9Mb2dpbigpIHtcbiAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywge3NraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZX0pO1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddKTtcbiAgICB9XG5cbiAgICBpc0xvZ2dlZEluKCkge1xuICAgICAgICBjb25zdCBsb2dnZWRJbiA9IHRoaXMuZmlkalNlcnZpY2UuaXNMb2dnZWRJbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnaXNMb2dnZWRJbjogJywgbG9nZ2VkSW4pO1xuICAgICAgICByZXR1cm4gbG9nZ2VkSW47XG4gICAgfVxuXG4gICAgbmVlZHNDb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlkalNlcnZpY2UubmVlZHNSZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgY29ubmVjdGlvblJlZnJlc2goKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIGFzeW5jIHN0b3JlQWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU3RvcmFnZS5zdG9yZURhdGEodGhpcy5maWRqU2VydmljZSwgdGhpcy5ub2RlRGF0YSk7XG4gICAgfVxuXG4gICAgaXNBZG1pbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9sZXMuaW5kZXhPZignYWRtaW4nKSA+IC0xO1xuICAgIH1cblxuICAgIC8vID09PSBOb3RpZmljYXRpb25zID09PVxuXG4gICAgYXN5bmMgY3JlYXRlTm90aWZpY2F0aW9uKHJhaW5JZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGF0YTogUmFhaW5BcGlOb3RpZmljYXRpb25zQWRkUmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICByYWluOiByYWluSWQsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFdmVudE5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Tm90aWZpY2F0aW9ucyhyYWluSWQ6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdHlwZSBOb3RpZmljYXRpb25zRmluZFBhcmFtcyA9IFBhcnRpYWw8UmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXF1ZXN0PjtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogTm90aWZpY2F0aW9uc0ZpbmRQYXJhbXMgPSB7cmFpbjogcmFpbklkfTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxOb3RpZmljYXRpb25zRmluZFBhcmFtcz4ocGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0ZpbmRBbGxNaW5lUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YS5ub3RpZmljYXRpb25zLm1hcCgobikgPT4gbmV3IEV2ZW50Tm9kZShuKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyA9PT0gVGVhbXMgPT09XG5cbiAgICBhc3luYyBnZXRUZWFtcygpOiBQcm9taXNlPEFycmF5PFRlYW1Ob2RlPj4ge1xuICAgICAgICBjb25zdCB0ZWFtcyA9IFtdO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpVGVhbXNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIHt0ZWFtczogUmV0dXJuVHlwZTxUZWFtTm9kZVsndG9KU09OJ10+W119XG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVhbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGVhbSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8VGVhbU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpVGVhbXNGaW5kT25lUmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiB0ZWFtSWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGVhbU5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhZGFycyA9PT1cblxuICAgIGFzeW5jIGdldFJhZGFycyhuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWRhck5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhZGFycyA9IFtdO1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXF1ZXN0ID0ge307XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBwYXJhbXMubmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBwYWdlID0gMTtcbiAgICAgICAgICAgIGxldCBoYXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChoYXNOZXh0KSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICAgICAgUmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKG5ldyBSYWRhck5vZGUocikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYXNOZXh0ID0gcmVzcC5kYXRhLnBhZ2luYXRpb24/Lmhhc05leHQgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgcGFnZSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhZGFycztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWRhcihpZDogc3RyaW5nKTogUHJvbWlzZTxSYWRhck5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpUmFkYXJzRmluZE9uZVJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGlkLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFkYXJOb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIHB1dFJhZGFyKHJhZGFyTm9kZTogUmFkYXJOb2RlKTogUHJvbWlzZTxSYWRhck5vZGU+IHtcbiAgICAgICAgY29uc3QgZGF0YTogUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHJhZGFyTm9kZS5uYW1lLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhZGFyc1VwZGF0ZVJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIFJldHVyblR5cGU8UmFkYXJOb2RlWyd0b0pTT04nXT5cbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWRhck5vZGUuaWQsXG4gICAgICAgICAgICAgICAgdmVyYjogJ1BVVCcsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycy8nLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFkYXJOb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldExvbmVseVJhZGFycyhyYWluczogUmFpbk5vZGVbXSk6IFByb21pc2U8UmFkYXJOb2RlW10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFJhZGFycyA9IGF3YWl0IHRoaXMuZ2V0UmFkYXJzKCk7XG4gICAgICAgICAgICBjb25zdCBsb25lbHlSYWRhcnM6IFJhZGFyTm9kZVtdID0gW107XG4gICAgICAgICAgICBhbGxSYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoUmFkYXJOb2RlLlRZUEUpLmdldElkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZElkID09PSByYWRhci5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBsb25lbHlSYWRhcnMucHVzaChyYWRhcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbG9uZWx5UmFkYXJzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5UaW1lZnJhbWUoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBiZWdpbjogRGF0ZSxcbiAgICAgICAgZW5kOiBEYXRlLFxuICAgICAgICBmb3JjZWQgPSBmYWxzZSxcbiAgICAgICAgcHJvdmlkZXIgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlcyA9IDEwLFxuICAgICAgICB3aW5kb3dJbk1pbnV0ZXMgPSAwXG4gICAgKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RpbWVmcmFtZUN1bXVsYXRpdmUnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBTdHJpbmcodGltZVN0ZXBJbk1pbnV0ZXMpLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbj8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGVuZD8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZm9yY2VkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZvcmNlZCA9ICd0cnVlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtcy53aW5kb3dJbk1pbnV0ZXMgPSBTdHJpbmcod2luZG93SW5NaW51dGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID1cbiAgICAgICAgICAgICAgICBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZUN1bXVsYXRpdmUpO1xuICAgICAgICAgICAgcmFpbk5vZGUubmFtZSArPSAnLnJhZGFyLnRpbWVmcmFtZUN1bXVsYXRpdmUnO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Ob2RlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhaW5zID09PVxuXG4gICAgYXN5bmMgZ2V0UmFpbnMobmFtZT86IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFpbk5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHt9O1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgcGFyYW1zLm5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcGFnZSA9IDE7XG4gICAgICAgICAgICBsZXQgaGFzTmV4dCA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoaGFzTmV4dCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVzcG9uc2VcbiAgICAgICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmFpbiBvZiByZXNwLmRhdGEucmFpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYXNOZXh0ID0gcmVzcC5kYXRhLnBhZ2luYXRpb24/Lmhhc05leHQgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgcGFnZSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5zO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpUmFpbnNGaW5kT25lUmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFpbk5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb3VudFxuXG4gICAgYXN5bmMgZ2V0Q291bnRzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luOiBEYXRlO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UTogWFlUeXBlW107XG4gICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIHJhbmdlOiBvcHRpb25zLnJhbmdlLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBvcHRpb25zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0PihwYXJhbXMpO1xuXG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgKHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyksXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50cyA9IHJlc3AuZGF0YS5jb3VudHMucmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudEltYWdlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9uczogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueS5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50UmFpbnkgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudFEucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudFEgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9ucy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50Q29tcHV0YXRpb25zID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcyxcbiAgICAgICAgICAgICAgICBwZXJjZW50UmFpbnksXG4gICAgICAgICAgICAgICAgcGVyY2VudFEsXG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXB1dGF0aW9ucyxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q291bnRzSG91cihcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHtwZXJpb2RCZWdpbjogRGF0ZX1cbiAgICApOiBQcm9taXNlPHtcbiAgICAgICAgcGVyY2VudEltYWdlczogWFlUeXBlW107XG4gICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdO1xuICAgICAgICByYWlueUNvdW50OiBYWVR5cGVbXTtcbiAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNHZXRDb3VudHNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIHJhbmdlOiAnaG91cicsXG4gICAgICAgICAgICAgICAgYmVnaW46IG9wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gcmVzcC5kYXRhLmNvdW50cy5yZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudENvbXB1dGF0aW9ucyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueUNvdW50LnB1c2gobmV3IFhZVHlwZShjLnJhaW55Q291bnQgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcmFpbnlTdW0ucHVzaChuZXcgWFlUeXBlKGMucmFpbnlTdW0gPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wdXRhdGlvbnMsXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudCxcbiAgICAgICAgICAgICAgICByYWlueVN1bSxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVxdWVzdCA9IHtmb3JtYXQ6ICdjYXJ0ZXNpYW4tbWFwJ307XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9PyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlclxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9L2N1bXVsYXRpdmUvJHtjdW11bGF0aXZlSG91cnN9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZS1jdW11bGF0aXZlJztcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ3VtdWxhdGl2ZUNvbXBhcmUoXG4gICAgICAgIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ29tcGFyZXNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogYCR7cmFpbk5vZGUuaWR9L2N1bXVsYXRpdmVzLyR7cmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfS9jb21wYXJlc2AsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcXVhbGl0eUpzb24gPSByZXNwb25zZS5kYXRhLnF1YWxpdGllc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBuZXcgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eShxdWFsaXR5SnNvbik7XG4gICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9XG4gICAgICAgICAgICAgICAgU3BlZWRNYXRyaXhDb250YWluZXIuQ3JlYXRlRnJvbUpzb24oXG4gICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggcGVyLWZyZXF1ZW5jeSBxdWFsaXR5IGZvciBhbiBvbi1kZW1hbmQgY3VtdWxhdGl2ZVxuICAgIC8vIHRpbWVTdGVwSW5NaW51dGVzID0gZ2F1Z2UgZnJlcXVlbmN5IGZpbHRlciAoZS5nLiA2IGZvciA2bWluIGdhdWdlcywgMzAgZm9yIDMwbWluIGdhdWdlcylcbiAgICAvLyB0aW1lU3RlcE1vZGUgPSAnZXEnIChleGFjdCBtYXRjaCkgb3IgJ2x0ZScgKGFsbCBmcmVxdWVuY2llcyA8PSB0aW1lU3RlcEluTWludXRlcylcbiAgICAvLyBwcm92aWRlciA9IGdhdWdlIHByb3ZpZGVyIGZpbHRlciAoZS5nLiAnUmFhaW4nKVxuICAgIGFzeW5jIGdldFJhaW5DdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlKFxuICAgICAgICByYWluTm9kZTogUmFpbk5vZGUsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogc3RyaW5nID0gJ1JhYWluJyxcbiAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IG51bWJlciA9IDUsXG4gICAgICAgIHRpbWVTdGVwTW9kZTogJ2VxJyB8ICdsdGUnID0gJ2VxJ1xuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uUXVhbGl0eT4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlc1JlcXVlc3QgPSB7XG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzLFxuICAgICAgICAgICAgdGltZVN0ZXBNb2RlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID1cbiAgICAgICAgICAgIEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmVzUmVxdWVzdD4ocGFyYW1zKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmVzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGAke3JhaW5Ob2RlLmlkfS9jdW11bGF0aXZlcy8ke3JhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0vY29tcGFyZXM/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFsbFF1YWxpdGllcyA9IHJlc3BvbnNlLmRhdGEucXVhbGl0aWVzO1xuICAgICAgICAgICAgaWYgKCFhbGxRdWFsaXRpZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV3IFJhaW5Db21wdXRhdGlvblF1YWxpdHkoYWxsUXVhbGl0aWVzWzBdKTtcbiAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyID1cbiAgICAgICAgICAgICAgICBTcGVlZE1hdHJpeENvbnRhaW5lci5DcmVhdGVGcm9tSnNvbihcbiAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXJcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBNZXJnZSBhZGRpdGlvbmFsIHF1YWxpdGllcyAobHRlIG1vZGUgcmV0dXJucyBtdWx0aXBsZSBmcmVxIGdyb3VwcylcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYWxsUXVhbGl0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmEgPSBuZXcgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eShhbGxRdWFsaXRpZXNbaV0pO1xuICAgICAgICAgICAgICAgIGV4dHJhLnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9IFNwZWVkTWF0cml4Q29udGFpbmVyLkNyZWF0ZUZyb21Kc29uKFxuICAgICAgICAgICAgICAgICAgICBleHRyYS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkubWVyZ2UoZXh0cmEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Qcm9ncmVzcyhyYWluSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvcHJvZ3Jlc3MnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc1Byb2dyZXNzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyByZXR1cm4gcmVzcG9uc2UuZGF0YS5pblByb2dyZXNzO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuaW5RdWV1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEluZGljYXRvcnMocmFpbklkOiBzdHJpbmcpOiBQcm9taXNlPFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVzcG9uc2U+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIGN1bXVsYXRpdmU6ICd0cnVlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0luZGljYXRvcnNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9pbmRpY2F0b3JzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtpbmRpY2F0b3JzOiBbXX07XG4gICAgfVxuXG4gICAgLy8gR0VUIC9yYWlucy86cmFpbklkL2N1bXVsYXRpdmVzIC0gTGlzdCBhdmFpbGFibGUgY3VtdWxhdGl2ZSBwZXJpb2RzXG4gICAgLy8gV2l0aCBkZXRhaWxlZD10cnVlLCByZXR1cm5zIGluZGl2aWR1YWwgY3VtdWxhdGl2ZXMgaW5zdGVhZCBvZiBhZ2dyZWdhdGVkIHBlcmlvZHNcbiAgICBhc3luYyBnZXRDdW11bGF0aXZlUGVyaW9kcyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGZpbHRlcnM/OiB7XG4gICAgICAgICAgICB3aW5kb3dJbk1pbnV0ZXM/OiBudW1iZXI7XG4gICAgICAgICAgICBwcm92aWRlcj86IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVhZHk/OiBib29sZWFuO1xuICAgICAgICAgICAgZm9yY2VkPzogYm9vbGVhbjtcbiAgICAgICAgICAgIGRldGFpbGVkPzogYm9vbGVhbjtcbiAgICAgICAgICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgICAgICAgICBsaW1pdD86IG51bWJlcjtcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luPzogc3RyaW5nO1xuICAgICAgICAgICAgcGVyaW9kRW5kPzogc3RyaW5nO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNMaXN0UmVzcG9uc2UgfCBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNEZXRhaWxlZFJlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0xpc3RSZXF1ZXN0ID0ge307XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ud2luZG93SW5NaW51dGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMud2luZG93SW5NaW51dGVzID0gZmlsdGVycy53aW5kb3dJbk1pbnV0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ucHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHJvdmlkZXIgPSBmaWx0ZXJzLnByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmlzUmVhZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5pc1JlYWR5ID0gZmlsdGVycy5pc1JlYWR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmZvcmNlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZvcmNlZCA9IGZpbHRlcnMuZm9yY2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlcnM/LmRldGFpbGVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmRldGFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5wYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucGFnZSA9IGZpbHRlcnMucGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmxpbWl0ID0gZmlsdGVycy5saW1pdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzPy5wZXJpb2RCZWdpbikge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wZXJpb2RCZWdpbiA9IGZpbHRlcnMucGVyaW9kQmVnaW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycz8ucGVyaW9kRW5kKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnBlcmlvZEVuZCA9IGZpbHRlcnMucGVyaW9kRW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0xpc3RSZXF1ZXN0PihwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVycz8uZGV0YWlsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0RldGFpbGVkUmVzcG9uc2VcbiAgICAgICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzTGlzdFJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwZXJpb2RzOiBbXSwgdG90YWw6IDB9O1xuICAgIH1cblxuICAgIC8vIFBPU1QgL3JhaW5zLzpyYWluSWQvY3VtdWxhdGl2ZXMgLSBUcmlnZ2VyIGN1bXVsYXRpdmUgY29tcHV0YXRpb25cbiAgICBhc3luYyBjcmVhdGVDdW11bGF0aXZlUGVyaW9kKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBwZXJpb2RCZWdpbjogRGF0ZTtcbiAgICAgICAgICAgIHBlcmlvZEVuZDogRGF0ZTtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBzdHJpbmc7XG4gICAgICAgICAgICBjb25mTmFtZT86IHN0cmluZztcbiAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzPzogbnVtYmVyO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZXNDcmVhdGVSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keTogUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICBwZXJpb2RCZWdpbjogcGFyYW1zLnBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyaW9kRW5kOiBwYXJhbXMucGVyaW9kRW5kLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlcixcbiAgICAgICAgICAgICAgICBjb25mTmFtZTogcGFyYW1zLmNvbmZOYW1lIHx8ICdhZG1pbicsXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IHBhcmFtcy50aW1lU3RlcEluTWludXRlcyB8fCA1LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlc0NyZWF0ZVJlcXVlc3QsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVzQ3JlYXRlUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2N1bXVsYXRpdmVzJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBib2R5LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IEdhdWdlcyA9PT1cblxuICAgIGFzeW5jIGdldEdhdWdlKGdhdWdlSWQ6IHN0cmluZyk6IFByb21pc2U8R2F1Z2VOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDx2b2lkLCBSYWFpbkFwaUdhdWdlc0ZpbmRPbmVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBnYXVnZUlkLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2F1Z2VOb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEdhdWdlcyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGFyb3VuZExhdExuZzogTGF0TG5nLFxuICAgICAgICBwYWdlQ291bnQgPSAxXG4gICAgKTogUHJvbWlzZTxBcnJheTxHYXVnZU5vZGVGaWx0ZXI+PiB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXJhbXM6IFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgYXJvdW5kTGF0TG5nOiBgJHthcm91bmRMYXRMbmcubGF0fSwke2Fyb3VuZExhdExuZy5sbmd9YCxcbiAgICAgICAgICAgIHJhaW5JZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgICAgICAgIGJhc2VQYXJhbXMudGVhbUlkID0gdGhpcy5hc1RlYW1JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdhdWdlcyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChsZXQgY291bnQgPSAxOyBjb3VudCA8PSBwYWdlQ291bnQ7IGNvdW50KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0ID0gey4uLmJhc2VQYXJhbXMsIHBhZ2U6IGNvdW50fTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgcmVzcC5kYXRhLmdhdWdlcykge1xuICAgICAgICAgICAgICAgICAgICBnYXVnZXMucHVzaChuZXcgR2F1Z2VOb2RlRmlsdGVyKGdhdWdlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZU1lYXN1cmVzKGdhdWdlSWQ6IHN0cmluZywgYmVnaW46IERhdGUsIGVuZDogRGF0ZSk6IFByb21pc2U8R2F1Z2VNZWFzdXJlW10+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3QgPSB7XG4gICAgICAgICAgICBiZWdpbjogYmVnaW4udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGVuZDogZW5kLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgIFJhYWluQXBpR2F1Z2VzRmluZE1lYXN1cmVzUmVzcG9uc2VcbiAgICAgICAgPih7XG4gICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGdhdWdlSWQgKyAnL21lYXN1cmVzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBnYXVnZU1lYXN1cmVzOiBHYXVnZU1lYXN1cmVbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlTWVhc3VyZSBvZiByZXNwLmRhdGEuZ2F1Z2VNZWFzdXJlcykge1xuICAgICAgICAgICAgZ2F1Z2VNZWFzdXJlcy5wdXNoKG5ldyBHYXVnZU1lYXN1cmUoZ2F1Z2VNZWFzdXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlTWVhc3VyZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UHJvdmlkZXJzKFxuICAgICAgICByYWluSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8e3Byb3ZpZGVyczogc3RyaW5nW107IHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXJbXX0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNQcm92aWRlcnNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9wcm92aWRlcnMnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiByZXNwb25zZS5kYXRhLnByb3ZpZGVycyB8fCBbXSxcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlczogcmVzcG9uc2UuZGF0YS50aW1lU3RlcEluTWludXRlcz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gcmVzcG9uc2UuZGF0YS50aW1lU3RlcEluTWludXRlc1xuICAgICAgICAgICAgICAgICAgICA6IFs1LCAxMCwgMTUsIDMwLCA2MF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdnZXRQcm92aWRlcnMgZXJyb3I6JywgZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW10sXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IFs1LCAxMCwgMTUsIDMwLCA2MF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFJvbGVzKHJvbGVzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMucm9sZXMgPSByb2xlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERhdGVDb21wb25lbnRzKFxuICAgICAgICBkYXRlOiBEYXRlLFxuICAgICAgICBjOiB7XG4gICAgICAgICAgICB5ZWFyPzogbnVtYmVyO1xuICAgICAgICAgICAgbW9udGg/OiBudW1iZXI7XG4gICAgICAgICAgICBkYXk/OiBudW1iZXI7XG4gICAgICAgICAgICBob3VyPzogbnVtYmVyO1xuICAgICAgICAgICAgbWludXRlPzogbnVtYmVyO1xuICAgICAgICB9XG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGF0ZVRvU2hvdyA9IG5ldyBEYXRlKGRhdGUpO1xuXG4gICAgICAgIGlmIChjLnllYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENGdWxsWWVhcihjLnllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLm1vbnRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDTW9udGgoYy5tb250aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLmRheSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0RhdGUoYy5kYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLmhvdXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENIb3VycyhjLmhvdXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLm1pbnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ01pbnV0ZXMoYy5taW51dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcbiAgICB9XG59XG4iXX0=