@vendasta/marketplace-apps 4.44.5 → 4.44.7

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.
@@ -1506,6 +1506,35 @@ export class ListRequiredAppSummariesResponse {
1506
1506
  return toReturn;
1507
1507
  }
1508
1508
  }
1509
+ export class ListVendorFilters {
1510
+ static fromProto(proto) {
1511
+ let m = new ListVendorFilters();
1512
+ m = Object.assign(m, proto);
1513
+ if (proto.distributionStatuses) {
1514
+ m.distributionStatuses = proto.distributionStatuses.map((v) => enumStringToValue(e.VendorDistributionStatus, v));
1515
+ }
1516
+ return m;
1517
+ }
1518
+ constructor(kwargs) {
1519
+ if (!kwargs) {
1520
+ return;
1521
+ }
1522
+ Object.assign(this, kwargs);
1523
+ }
1524
+ toApiJson() {
1525
+ const toReturn = {};
1526
+ if (typeof this.searchTerm !== 'undefined') {
1527
+ toReturn['searchTerm'] = this.searchTerm;
1528
+ }
1529
+ if (typeof this.isInvoiced !== 'undefined') {
1530
+ toReturn['isInvoiced'] = this.isInvoiced;
1531
+ }
1532
+ if (typeof this.distributionStatuses !== 'undefined') {
1533
+ toReturn['distributionStatuses'] = this.distributionStatuses;
1534
+ }
1535
+ return toReturn;
1536
+ }
1537
+ }
1509
1538
  export class ListVendorRequest {
1510
1539
  static fromProto(proto) {
1511
1540
  let m = new ListVendorRequest();
@@ -1513,6 +1542,9 @@ export class ListVendorRequest {
1513
1542
  if (proto.pageSize) {
1514
1543
  m.pageSize = parseInt(proto.pageSize, 10);
1515
1544
  }
1545
+ if (proto.filters) {
1546
+ m.filters = ListVendorFilters.fromProto(proto.filters);
1547
+ }
1516
1548
  return m;
1517
1549
  }
1518
1550
  constructor(kwargs) {
@@ -1529,6 +1561,9 @@ export class ListVendorRequest {
1529
1561
  if (typeof this.pageSize !== 'undefined') {
1530
1562
  toReturn['pageSize'] = this.pageSize;
1531
1563
  }
1564
+ if (typeof this.filters !== 'undefined' && this.filters !== null) {
1565
+ toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;
1566
+ }
1532
1567
  return toReturn;
1533
1568
  }
1534
1569
  }
@@ -1539,6 +1574,9 @@ export class ListVendorResponse {
1539
1574
  if (proto.vendors) {
1540
1575
  m.vendors = proto.vendors.map(AppVendor.fromProto);
1541
1576
  }
1577
+ if (proto.totalResults) {
1578
+ m.totalResults = parseInt(proto.totalResults, 10);
1579
+ }
1542
1580
  return m;
1543
1581
  }
1544
1582
  constructor(kwargs) {
@@ -1558,6 +1596,9 @@ export class ListVendorResponse {
1558
1596
  if (typeof this.hasMore !== 'undefined') {
1559
1597
  toReturn['hasMore'] = this.hasMore;
1560
1598
  }
1599
+ if (typeof this.totalResults !== 'undefined') {
1600
+ toReturn['totalResults'] = this.totalResults;
1601
+ }
1561
1602
  return toReturn;
1562
1603
  }
1563
1604
  }
@@ -2328,6 +2369,9 @@ export class UpdateVendorRequest {
2328
2369
  if (proto.distributionStatus) {
2329
2370
  m.distributionStatus = enumStringToValue(e.VendorDistributionStatus, proto.distributionStatus);
2330
2371
  }
2372
+ if (proto.fieldMask) {
2373
+ m.fieldMask = FieldMask.fromProto(proto.fieldMask);
2374
+ }
2331
2375
  return m;
2332
2376
  }
2333
2377
  constructor(kwargs) {
@@ -2356,6 +2400,9 @@ export class UpdateVendorRequest {
2356
2400
  if (typeof this.isInvoiced !== 'undefined') {
2357
2401
  toReturn['isInvoiced'] = this.isInvoiced;
2358
2402
  }
2403
+ if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {
2404
+ toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;
2405
+ }
2359
2406
  return toReturn;
2360
2407
  }
2361
2408
  }
@@ -2382,4 +2429,4 @@ export class UpdateVendorResponse {
2382
2429
  return toReturn;
2383
2430
  }
2384
2431
  }
2385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbWFya2V0cGxhY2VfYXBwc19zZGsvdjEvc3JjL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFJLE9BQVksRUFBRSxLQUFhO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxPQUFPLDBCQUEwQjtJQUluQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQ3pDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENB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Q0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sb0JBQW9CO0lBRzdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDbkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FBQztRQUNqRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXdDO1FBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLE1BQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQ25LLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFkZG9uIH0gZnJvbSAnLi9hZGRvbic7XG5pbXBvcnQgeyBBcHBWZW5kb3IgfSBmcm9tICcuL3ZlbmRvcic7XG5pbXBvcnQgeyBDb21taXRtZW50IH0gZnJvbSAnLi9jb21taXRtZW50JztcbmltcG9ydCB7IEZlZSB9IGZyb20gJy4vZmVlJztcbmltcG9ydCB7IEZpZWxkTWFzayB9IGZyb20gJy4vZmllbGQtbWFzayc7XG5pbXBvcnQgeyBNYXJrZXRwbGFjZUFwcCwgTWFya2V0aW5nSW5mb3JtYXRpb24sIENvc3QsIElkZW50aWZpZWRQdWJsaWNLZXksIENvbnRhY3QgfSBmcm9tICcuL2FwcCc7XG5pbXBvcnQgeyBPcmRlckZvcm0gfSBmcm9tICcuL29yZGVyLWZvcm0nO1xuaW1wb3J0IHsgUHJvZHVjdENvc3QgfSBmcm9tICcuL3Byb2R1Y3QtY29zdCc7XG5pbXBvcnQgeyBSZXN0cmljdGlvbnMsIFBlcm1pc3Npb25MaXN0cyB9IGZyb20gJy4vcmVzdHJpY3Rpb25zJztcbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIEFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVyIGltcGxlbWVudHMgaS5BY3RpdmVBcHBFZGl0aW9uSWRlbnRpZmllckludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBlZGl0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVyIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWN0aXZlQXBwRWRpdGlvbklkZW50aWZpZXIoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZWRpdGlvbklkJ10gPSB0aGlzLmVkaXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRBcHBJRFJlcXVlc3QgaW1wbGVtZW50cyBpLkFkZEFwcElEUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBhcHBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkQXBwSURSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkQXBwSURSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRBcHBJRFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZEFwcElEUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFkZEFwcElEUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHZlbmRvcjogQXBwVmVuZG9yO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkQXBwSURSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZEFwcElEUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmVuZG9yKSB7bS52ZW5kb3IgPSBBcHBWZW5kb3IuZnJvbVByb3RvKHByb3RvLnZlbmRvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZEFwcElEUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3IgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudmVuZG9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZlbmRvciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52ZW5kb3IgPyAodGhpcy52ZW5kb3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmVuZG9yO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZG9uUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFkZG9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFkZG9uOiBBZGRvbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZG9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZGRvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFkZG9uKSB7bS5hZGRvbiA9IEFkZG9uLmZyb21Qcm90byhwcm90by5hZGRvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZG9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hZGRvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydhZGRvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hZGRvbiA/ICh0aGlzLmFkZG9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFkZG9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZG9uc0xpc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuQWRkb25zTGlzdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhZGRvbnM6IEFkZG9uW107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRvbnNMaXN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZGRvbnNMaXN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWRkb25zKSB7bS5hZGRvbnMgPSBwcm90by5hZGRvbnMubWFwKEFkZG9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZG9uc0xpc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZG9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hZGRvbnMgIT09IG51bGwpIHt0b1JldHVyblsnYWRkb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFkZG9ucyA/ICh0aGlzLmFkZG9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hZGRvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBSZXNwb25zZSBpbXBsZW1lbnRzIGkuQXBwUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFwcDogTWFya2V0cGxhY2VBcHA7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBcHBSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFwcFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcCkge20uYXBwID0gTWFya2V0cGxhY2VBcHAuZnJvbVByb3RvKHByb3RvLmFwcCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFwcFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcCAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHAnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwID8gKHRoaXMuYXBwIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHByb3ZlQWRkb25SZXF1ZXN0IGltcGxlbWVudHMgaS5BcHByb3ZlQWRkb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGFkZG9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFwcHJvdmVBZGRvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBcHByb3ZlQWRkb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BcHByb3ZlQWRkb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZG9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZG9uSWQnXSA9IHRoaXMuYWRkb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHByb3ZlQXBwUmVxdWVzdCBpbXBsZW1lbnRzIGkuQXBwcm92ZUFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBcHByb3ZlQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFwcHJvdmVBcHBSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BcHByb3ZlQXBwUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5BY3RpdmF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkNhbkFjdGl2YXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWRzOiBzdHJpbmdbXTtcbiAgICBhY3RpdmVBcHBJZHM6IHN0cmluZ1tdO1xuICAgIGFjdGl2ZUFwcEVkaXRpb25JZHM6IEFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVyW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDYW5BY3RpdmF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDYW5BY3RpdmF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWN0aXZlQXBwRWRpdGlvbklkcykge20uYWN0aXZlQXBwRWRpdGlvbklkcyA9IHByb3RvLmFjdGl2ZUFwcEVkaXRpb25JZHMubWFwKEFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVyLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNhbkFjdGl2YXRlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWRzJ10gPSB0aGlzLmFwcElkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3RpdmVBcHBJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGl2ZUFwcElkcyddID0gdGhpcy5hY3RpdmVBcHBJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aXZlQXBwRWRpdGlvbklkcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hY3RpdmVBcHBFZGl0aW9uSWRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FjdGl2ZUFwcEVkaXRpb25JZHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYWN0aXZlQXBwRWRpdGlvbklkcyA/ICh0aGlzLmFjdGl2ZUFwcEVkaXRpb25JZHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYWN0aXZlQXBwRWRpdGlvbklkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5BY3RpdmF0ZVJlc3BvbnNlIGltcGxlbWVudHMgaS5DYW5BY3RpdmF0ZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZhbGlkUmVzcG9uc2U6IENhbkFjdGl2YXRlUmVzcG9uc2VJbnZhbGlkUmVzcG9uc2U7XG4gICAgc3VjY2Vzc1Jlc3BvbnNlOiBDYW5BY3RpdmF0ZVJlc3BvbnNlU3VjY2Vzc1Jlc3BvbnNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2FuQWN0aXZhdGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENhbkFjdGl2YXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52YWxpZFJlc3BvbnNlKSB7bS5pbnZhbGlkUmVzcG9uc2UgPSBDYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlLmZyb21Qcm90byhwcm90by5pbnZhbGlkUmVzcG9uc2UpO31cbiAgICAgICAgaWYgKHByb3RvLnN1Y2Nlc3NSZXNwb25zZSkge20uc3VjY2Vzc1Jlc3BvbnNlID0gQ2FuQWN0aXZhdGVSZXNwb25zZVN1Y2Nlc3NSZXNwb25zZS5mcm9tUHJvdG8ocHJvdG8uc3VjY2Vzc1Jlc3BvbnNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2FuQWN0aXZhdGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludmFsaWRSZXNwb25zZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZhbGlkUmVzcG9uc2UgIT09IG51bGwpIHt0b1JldHVyblsnaW52YWxpZFJlc3BvbnNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludmFsaWRSZXNwb25zZSA/ICh0aGlzLmludmFsaWRSZXNwb25zZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pbnZhbGlkUmVzcG9uc2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VjY2Vzc1Jlc3BvbnNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1Y2Nlc3NSZXNwb25zZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWNjZXNzUmVzcG9uc2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3VjY2Vzc1Jlc3BvbnNlID8gKHRoaXMuc3VjY2Vzc1Jlc3BvbnNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1Y2Nlc3NSZXNwb25zZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVBcHBSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVuZG9yOiBzdHJpbmc7XG4gICAgdGFnbGluZTogc3RyaW5nO1xuICAgIHNlcnZpY2VNb2RlbDogc3RyaW5nW107XG4gICAgbG1pQ2F0ZWdvcmllczogZS5NYXJrZXRwbGFjZUFwcExtaUxtaUNhdGVnb3JpZXNbXTtcbiAgICBpY29uOiBzdHJpbmc7XG4gICAgaGVhZGVySW1hZ2U6IHN0cmluZztcbiAgICBzY3JlZW5zaG90OiBzdHJpbmdbXTtcbiAgICBwcmljZTogbnVtYmVyO1xuICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgYmlsbGluZ0ZyZXF1ZW5jeTogc3RyaW5nO1xuICAgIHJlc3RyaWN0aW9uczogUmVzdHJpY3Rpb25zO1xuICAgIGFsbG93UHJpY2VOZWdvdGlhdGlvbjogYm9vbGVhbjtcbiAgICBwdWJsaWNLZXk6IHN0cmluZztcbiAgICByZXNlcnZlSWRVcmw6IHN0cmluZztcbiAgICBwdXJjaGFzZVdlYmhvb2tVcmw6IHN0cmluZztcbiAgICBhY3RpdmF0aW9uUmVxdWlyZXNBcHByb3ZhbDogYm9vbGVhbjtcbiAgICBhZGRvblB1cmNoYXNlV2ViaG9va1VybDogc3RyaW5nO1xuICAgIHVzZXJNb2RXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgYWNjb3VudE1vZFdlYmhvb2tVcmw6IHN0cmluZztcbiAgICBjb250YWN0V2ViaG9va1VybDogc3RyaW5nO1xuICAgIGZ1bGZpbGxtZW50RW1haWw6IHN0cmluZ1tdO1xuICAgIGVudHJ5VXJsOiBzdHJpbmc7XG4gICAgc2Vzc2lvblVybDogc3RyaW5nO1xuICAgIGxvZ291dFVybDogc3RyaW5nO1xuICAgIHVzZXNPcmRlckZvcm06IGJvb2xlYW47XG4gICAgb3JkZXJGb3JtOiBPcmRlckZvcm07XG4gICAgcmVzZWxsZXJNYXJrZXRpbmc6IE1hcmtldGluZ0luZm9ybWF0aW9uO1xuICAgIGVuZFVzZXJNYXJrZXRpbmc6IE1hcmtldGluZ0luZm9ybWF0aW9uO1xuICAgIHByZXZlbnRQcmljZUNvbnZlcnNpb25CZXR3ZWVuQ3VycmVuY2llczogYm9vbGVhbjtcbiAgICBwYXJ0bmVyU2V0dGluZ3NXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgc3VnZ2VzdGVkUmV0YWlsUHJpY2U6IG51bWJlcjtcbiAgICBjb3VudHJ5OiBQZXJtaXNzaW9uTGlzdHM7XG4gICAgY29tbWl0bWVudDogQ29tbWl0bWVudDtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICB2ZW5kb3JJZDogc3RyaW5nO1xuICAgIGN1c3RvbUFwcElkOiBzdHJpbmc7XG4gICAgbXVsdGlwbGVBY3RpdmF0aW9uczogYm9vbGVhbjtcbiAgICB1c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmw6IGJvb2xlYW47XG4gICAgdXNlc1Jlc2VsbGVyTWFya2V0aW5nOiBib29sZWFuO1xuICAgIHVzZXNJbnRlZ3JhdGlvbjogYm9vbGVhbjtcbiAgICB1c2VzRWRpdGlvbnM6IGJvb2xlYW47XG4gICAgdXNlc1Nzb0ludGVncmF0aW9uOiBib29sZWFuO1xuICAgIGRpc2NvdmVyYWJsZTogYm9vbGVhbjtcbiAgICBkaXN0cmlidXRpb25TZXR0aW5nOiBlLkRpc3RyaWJ1dGlvblNldHRpbmc7XG4gICAgb3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uVXJsOiBzdHJpbmc7XG4gICAgYWxsb3dXaGl0ZUxhYmVsaW5nOiBib29sZWFuO1xuICAgIHN0YXRlOiBlLlN0YXRlO1xuICAgIGNvc3Q6IENvc3Q7XG4gICAgc2V0dXBGZWU6IG51bWJlcjtcbiAgICB1c2VzQ3VzdG9tUHJpY2luZzogYm9vbGVhbjtcbiAgICBjdXN0b21lcldlYmhvb2tVcmw6IHN0cmluZztcbiAgICBzZW5kQ2FuY2VsYXRpb25Ob3RpZmljYXRpb25zOiBib29sZWFuO1xuICAgIGNhbmNlbGxhdGlvbldlYmhvb2tVcmw6IHN0cmluZztcbiAgICBkZWxpdmVyeU1ldGhvZDogZS5EZWxpdmVyeU1ldGhvZDtcbiAgICBzZXJ2aWNlQ2hhbmdlV2ViaG9va1VybDogc3RyaW5nO1xuICAgIGFwcExldmVsSGFzQWRtaW5EYXNoYm9hcmQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVBcHBSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlQXBwUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5sbWlDYXRlZ29yaWVzKSB7bS5sbWlDYXRlZ29yaWVzID0gcHJvdG8ubG1pQ2F0ZWdvcmllcy5tYXAoKHY6IHN0cmluZykgPT4gZW51bVN0cmluZ1RvVmFsdWU8ZS5NYXJrZXRwbGFjZUFwcExtaUxtaUNhdGVnb3JpZXM+KGUuTWFya2V0cGxhY2VBcHBMbWlMbWlDYXRlZ29yaWVzLCB2KSk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2UpIHttLnByaWNlID0gcGFyc2VJbnQocHJvdG8ucHJpY2UsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5yZXN0cmljdGlvbnMpIHttLnJlc3RyaWN0aW9ucyA9IFJlc3RyaWN0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucmVzdHJpY3Rpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5vcmRlckZvcm0pIHttLm9yZGVyRm9ybSA9IE9yZGVyRm9ybS5mcm9tUHJvdG8ocHJvdG8ub3JkZXJGb3JtKTt9XG4gICAgICAgIGlmIChwcm90by5yZXNlbGxlck1hcmtldGluZykge20ucmVzZWxsZXJNYXJrZXRpbmcgPSBNYXJrZXRpbmdJbmZvcm1hdGlvbi5mcm9tUHJvdG8ocHJvdG8ucmVzZWxsZXJNYXJrZXRpbmcpO31cbiAgICAgICAgaWYgKHByb3RvLmVuZFVzZXJNYXJrZXRpbmcpIHttLmVuZFVzZXJNYXJrZXRpbmcgPSBNYXJrZXRpbmdJbmZvcm1hdGlvbi5mcm9tUHJvdG8ocHJvdG8uZW5kVXNlck1hcmtldGluZyk7fVxuICAgICAgICBpZiAocHJvdG8uc3VnZ2VzdGVkUmV0YWlsUHJpY2UpIHttLnN1Z2dlc3RlZFJldGFpbFByaWNlID0gcGFyc2VJbnQocHJvdG8uc3VnZ2VzdGVkUmV0YWlsUHJpY2UsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5jb3VudHJ5KSB7bS5jb3VudHJ5ID0gUGVybWlzc2lvbkxpc3RzLmZyb21Qcm90byhwcm90by5jb3VudHJ5KTt9XG4gICAgICAgIGlmIChwcm90by5jb21taXRtZW50KSB7bS5jb21taXRtZW50ID0gQ29tbWl0bWVudC5mcm9tUHJvdG8ocHJvdG8uY29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uZGlzdHJpYnV0aW9uU2V0dGluZykge20uZGlzdHJpYnV0aW9uU2V0dGluZyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRGlzdHJpYnV0aW9uU2V0dGluZz4oZS5EaXN0cmlidXRpb25TZXR0aW5nLCBwcm90by5kaXN0cmlidXRpb25TZXR0aW5nKTt9XG4gICAgICAgIGlmIChwcm90by5zdGF0ZSkge20uc3RhdGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlN0YXRlPihlLlN0YXRlLCBwcm90by5zdGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uY29zdCkge20uY29zdCA9IENvc3QuZnJvbVByb3RvKHByb3RvLmNvc3QpO31cbiAgICAgICAgaWYgKHByb3RvLnNldHVwRmVlKSB7bS5zZXR1cEZlZSA9IHBhcnNlSW50KHByb3RvLnNldHVwRmVlLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uZGVsaXZlcnlNZXRob2QpIHttLmRlbGl2ZXJ5TWV0aG9kID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5EZWxpdmVyeU1ldGhvZD4oZS5EZWxpdmVyeU1ldGhvZCwgcHJvdG8uZGVsaXZlcnlNZXRob2QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmVuZG9yJ10gPSB0aGlzLnZlbmRvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YWdsaW5lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YWdsaW5lJ10gPSB0aGlzLnRhZ2xpbmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZU1vZGVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZXJ2aWNlTW9kZWwnXSA9IHRoaXMuc2VydmljZU1vZGVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxtaUNhdGVnb3JpZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xtaUNhdGVnb3JpZXMnXSA9IHRoaXMubG1pQ2F0ZWdvcmllczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pY29uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpY29uJ10gPSB0aGlzLmljb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGVhZGVySW1hZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hlYWRlckltYWdlJ10gPSB0aGlzLmhlYWRlckltYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjcmVlbnNob3QgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NjcmVlbnNob3QnXSA9IHRoaXMuc2NyZWVuc2hvdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2UnXSA9IHRoaXMucHJpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnJlbmN5J10gPSB0aGlzLmN1cnJlbmN5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJpbGxpbmdGcmVxdWVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JpbGxpbmdGcmVxdWVuY3knXSA9IHRoaXMuYmlsbGluZ0ZyZXF1ZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXN0cmljdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucmVzdHJpY3Rpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Jlc3RyaWN0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXN0cmljdGlvbnMgPyAodGhpcy5yZXN0cmljdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucmVzdHJpY3Rpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFsbG93UHJpY2VOZWdvdGlhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWxsb3dQcmljZU5lZ290aWF0aW9uJ10gPSB0aGlzLmFsbG93UHJpY2VOZWdvdGlhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wdWJsaWNLZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3B1YmxpY0tleSddID0gdGhpcy5wdWJsaWNLZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzZXJ2ZUlkVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXNlcnZlSWRVcmwnXSA9IHRoaXMucmVzZXJ2ZUlkVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnB1cmNoYXNlV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHVyY2hhc2VXZWJob29rVXJsJ10gPSB0aGlzLnB1cmNoYXNlV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3RpdmF0aW9uUmVxdWlyZXNBcHByb3ZhbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWN0aXZhdGlvblJlcXVpcmVzQXBwcm92YWwnXSA9IHRoaXMuYWN0aXZhdGlvblJlcXVpcmVzQXBwcm92YWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkb25QdXJjaGFzZVdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZG9uUHVyY2hhc2VXZWJob29rVXJsJ10gPSB0aGlzLmFkZG9uUHVyY2hhc2VXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJNb2RXZWJob29rVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VyTW9kV2ViaG9va1VybCddID0gdGhpcy51c2VyTW9kV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50TW9kV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudE1vZFdlYmhvb2tVcmwnXSA9IHRoaXMuYWNjb3VudE1vZFdlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdFdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnRhY3RXZWJob29rVXJsJ10gPSB0aGlzLmNvbnRhY3RXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bGZpbGxtZW50RW1haWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Z1bGZpbGxtZW50RW1haWwnXSA9IHRoaXMuZnVsZmlsbG1lbnRFbWFpbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRyeVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW50cnlVcmwnXSA9IHRoaXMuZW50cnlVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2Vzc2lvblVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2Vzc2lvblVybCddID0gdGhpcy5zZXNzaW9uVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvZ291dFVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG9nb3V0VXJsJ10gPSB0aGlzLmxvZ291dFVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzT3JkZXJGb3JtICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzT3JkZXJGb3JtJ10gPSB0aGlzLnVzZXNPcmRlckZvcm07fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJGb3JtICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yZGVyRm9ybSAhPT0gbnVsbCkge3RvUmV0dXJuWydvcmRlckZvcm0nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3JkZXJGb3JtID8gKHRoaXMub3JkZXJGb3JtIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm9yZGVyRm9ybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNlbGxlck1hcmtldGluZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5yZXNlbGxlck1hcmtldGluZyAhPT0gbnVsbCkge3RvUmV0dXJuWydyZXNlbGxlck1hcmtldGluZyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXNlbGxlck1hcmtldGluZyA/ICh0aGlzLnJlc2VsbGVyTWFya2V0aW5nIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJlc2VsbGVyTWFya2V0aW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZFVzZXJNYXJrZXRpbmcgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kVXNlck1hcmtldGluZyAhPT0gbnVsbCkge3RvUmV0dXJuWydlbmRVc2VyTWFya2V0aW5nJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZFVzZXJNYXJrZXRpbmcgPyAodGhpcy5lbmRVc2VyTWFya2V0aW5nIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVuZFVzZXJNYXJrZXRpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldmVudFByaWNlQ29udmVyc2lvbkJldHdlZW5DdXJyZW5jaWVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmV2ZW50UHJpY2VDb252ZXJzaW9uQmV0d2VlbkN1cnJlbmNpZXMnXSA9IHRoaXMucHJldmVudFByaWNlQ29udmVyc2lvbkJldHdlZW5DdXJyZW5jaWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJTZXR0aW5nc1dlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJTZXR0aW5nc1dlYmhvb2tVcmwnXSA9IHRoaXMucGFydG5lclNldHRpbmdzV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWdnZXN0ZWRSZXRhaWxQcmljZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VnZ2VzdGVkUmV0YWlsUHJpY2UnXSA9IHRoaXMuc3VnZ2VzdGVkUmV0YWlsUHJpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY291bnRyeSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb3VudHJ5ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvdW50cnknXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY291bnRyeSA/ICh0aGlzLmNvdW50cnkgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY291bnRyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21taXRtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbW1pdG1lbnQgIT09IG51bGwpIHt0b1JldHVyblsnY29tbWl0bWVudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb21taXRtZW50ID8gKHRoaXMuY29tbWl0bWVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3JJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmVuZG9ySWQnXSA9IHRoaXMudmVuZG9ySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tQXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbUFwcElkJ10gPSB0aGlzLmN1c3RvbUFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpcGxlQWN0aXZhdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpcGxlQWN0aXZhdGlvbnMnXSA9IHRoaXMubXVsdGlwbGVBY3RpdmF0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNBY3RpdmF0aW9uU3BlY2lmaWNFbnRyeVVybCddID0gdGhpcy51c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc1Jlc2VsbGVyTWFya2V0aW5nICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzUmVzZWxsZXJNYXJrZXRpbmcnXSA9IHRoaXMudXNlc1Jlc2VsbGVyTWFya2V0aW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNJbnRlZ3JhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlc0ludGVncmF0aW9uJ10gPSB0aGlzLnVzZXNJbnRlZ3JhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzRWRpdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNFZGl0aW9ucyddID0gdGhpcy51c2VzRWRpdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc1Nzb0ludGVncmF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzU3NvSW50ZWdyYXRpb24nXSA9IHRoaXMudXNlc1Nzb0ludGVncmF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc2NvdmVyYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGlzY292ZXJhYmxlJ10gPSB0aGlzLmRpc2NvdmVyYWJsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXN0cmlidXRpb25TZXR0aW5nICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkaXN0cmlidXRpb25TZXR0aW5nJ10gPSB0aGlzLmRpc3RyaWJ1dGlvblNldHRpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybCddID0gdGhpcy5vcmRlckZvcm1WYWxpZGF0b3JXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcGxpY2F0aW9uVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBsaWNhdGlvblVybCddID0gdGhpcy5hcHBsaWNhdGlvblVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbGxvd1doaXRlTGFiZWxpbmcgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FsbG93V2hpdGVMYWJlbGluZyddID0gdGhpcy5hbGxvd1doaXRlTGFiZWxpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXRlJ10gPSB0aGlzLnN0YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydjb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvc3QgPyAodGhpcy5jb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvc3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dXBGZWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NldHVwRmVlJ10gPSB0aGlzLnNldHVwRmVlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNDdXN0b21QcmljaW5nICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzQ3VzdG9tUHJpY2luZyddID0gdGhpcy51c2VzQ3VzdG9tUHJpY2luZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21lcldlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbWVyV2ViaG9va1VybCddID0gdGhpcy5jdXN0b21lcldlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VuZENhbmNlbGF0aW9uTm90aWZpY2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2VuZENhbmNlbGF0aW9uTm90aWZpY2F0aW9ucyddID0gdGhpcy5zZW5kQ2FuY2VsYXRpb25Ob3RpZmljYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbmNlbGxhdGlvbldlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbmNlbGxhdGlvbldlYmhvb2tVcmwnXSA9IHRoaXMuY2FuY2VsbGF0aW9uV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWxpdmVyeU1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVsaXZlcnlNZXRob2QnXSA9IHRoaXMuZGVsaXZlcnlNZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZUNoYW5nZVdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlcnZpY2VDaGFuZ2VXZWJob29rVXJsJ10gPSB0aGlzLnNlcnZpY2VDaGFuZ2VXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcExldmVsSGFzQWRtaW5EYXNoYm9hcmQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcExldmVsSGFzQWRtaW5EYXNoYm9hcmQnXSA9IHRoaXMuYXBwTGV2ZWxIYXNBZG1pbkRhc2hib2FyZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVWZW5kb3JSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVWZW5kb3JSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVWZW5kb3JSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlVmVuZG9yUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlVmVuZG9yUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlVmVuZG9yUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZVZlbmRvclJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB2ZW5kb3I6IEFwcFZlbmRvcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVZlbmRvclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlVmVuZG9yUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmVuZG9yKSB7bS52ZW5kb3IgPSBBcHBWZW5kb3IuZnJvbVByb3RvKHByb3RvLnZlbmRvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVZlbmRvclJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmVuZG9yICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZlbmRvciAhPT0gbnVsbCkge3RvUmV0dXJuWyd2ZW5kb3InXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudmVuZG9yID8gKHRoaXMudmVuZG9yIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZlbmRvcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVBcHBSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUFwcFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZUFwcFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHVwbGljYXRlQXBwUmVxdWVzdCBpbXBsZW1lbnRzIGkuRHVwbGljYXRlQXBwUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IER1cGxpY2F0ZUFwcFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEdXBsaWNhdGVBcHBSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EdXBsaWNhdGVBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIER1cGxpY2F0ZUFwcFJlc3BvbnNlIGltcGxlbWVudHMgaS5EdXBsaWNhdGVBcHBSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IER1cGxpY2F0ZUFwcFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRHVwbGljYXRlQXBwUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkR1cGxpY2F0ZUFwcFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEFkZG9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0QWRkb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGFkZG9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEFkZG9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFkZG9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QWRkb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZG9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZG9uSWQnXSA9IHRoaXMuYWRkb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRBcHBJREZyb21Ta3VSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRBcHBJREZyb21Ta3VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBza3U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEFwcElERnJvbVNrdVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRBcHBJREZyb21Ta3VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBcHBJREZyb21Ta3VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEFwcElERnJvbVNrdVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRBcHBJREZyb21Ta3VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBhZGRvbklkOiBzdHJpbmc7XG4gICAgZWRpdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRBcHBJREZyb21Ta3VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFwcElERnJvbVNrdVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBcHBJREZyb21Ta3VSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRvbklkJ10gPSB0aGlzLmFkZG9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZWRpdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlZGl0aW9uSWQnXSA9IHRoaXMuZWRpdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEFwcFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldEFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgZmllbGRNYXNrOiBGaWVsZE1hc2s7XG4gICAgYnlwYXNzQ2FjaGU6IGJvb2xlYW47XG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRBcHBSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QXBwUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QXBwUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ5cGFzc0NhY2hlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydieXBhc3NDYWNoZSddID0gdGhpcy5ieXBhc3NDYWNoZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbmNsdWRlRGVsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5jbHVkZURlbGV0ZWQnXSA9IHRoaXMuaW5jbHVkZURlbGV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QXBwUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEFwcFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhcHA6IE1hcmtldHBsYWNlQXBwO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXBwUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRBcHBSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hcHApIHttLmFwcCA9IE1hcmtldHBsYWNlQXBwLmZyb21Qcm90byhwcm90by5hcHApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBcHBSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hcHAgIT09IG51bGwpIHt0b1JldHVyblsnYXBwJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFwcCA/ICh0aGlzLmFwcCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hcHA7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QXBwc1RvRGVhY3RpdmF0ZVVwb25EZWFjdGl2YXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRBcHBzVG9EZWFjdGl2YXRlVXBvbkRlYWN0aXZhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkc1RvRGVhY3RpdmF0ZTogc3RyaW5nW107XG4gICAgYWN0aXZlQXBwSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEFwcHNUb0RlYWN0aXZhdGVVcG9uRGVhY3RpdmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFwcHNUb0RlYWN0aXZhdGVVcG9uRGVhY3RpdmF0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QXBwc1RvRGVhY3RpdmF0ZVVwb25EZWFjdGl2YXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWRzVG9EZWFjdGl2YXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZHNUb0RlYWN0aXZhdGUnXSA9IHRoaXMuYXBwSWRzVG9EZWFjdGl2YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGl2ZUFwcElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWN0aXZlQXBwSWRzJ10gPSB0aGlzLmFjdGl2ZUFwcElkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRBcHBzVG9EZWFjdGl2YXRlVXBvbkRlYWN0aXZhdGlvblJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRBcHBzVG9EZWFjdGl2YXRlVXBvbkRlYWN0aXZhdGlvblJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhcHBJZHNUb0JlRGVhY3RpdmF0ZWQ6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXBwc1RvRGVhY3RpdmF0ZVVwb25EZWFjdGl2YXRpb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFwcHNUb0RlYWN0aXZhdGVVcG9uRGVhY3RpdmF0aW9uUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEFwcHNUb0RlYWN0aXZhdGVVcG9uRGVhY3RpdmF0aW9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZHNUb0JlRGVhY3RpdmF0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkc1RvQmVEZWFjdGl2YXRlZCddID0gdGhpcy5hcHBJZHNUb0JlRGVhY3RpdmF0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QXBwc1dpdGhVbnB1Ymxpc2hlZENoYW5nZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRBcHBzV2l0aFVucHVibGlzaGVkQ2hhbmdlc1JlcXVlc3RJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXBwc1dpdGhVbnB1Ymxpc2hlZENoYW5nZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QXBwc1dpdGhVbnB1Ymxpc2hlZENoYW5nZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBcHBzV2l0aFVucHVibGlzaGVkQ2hhbmdlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRBcHBzV2l0aFVucHVibGlzaGVkQ2hhbmdlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRBcHBzV2l0aFVucHVibGlzaGVkQ2hhbmdlc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhcHBJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXBwc1dpdGhVbnB1Ymxpc2hlZENoYW5nZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFwcHNXaXRoVW5wdWJsaXNoZWRDaGFuZ2VzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEFwcHNXaXRoVW5wdWJsaXNoZWRDaGFuZ2VzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkcyddID0gdGhpcy5hcHBJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QnlQYXJ0bmVySURSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRCeVBhcnRuZXJJRFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QnlQYXJ0bmVySURSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QnlQYXJ0bmVySURSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRCeVBhcnRuZXJJRFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QnlQYXJ0bmVySURSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0QnlQYXJ0bmVySURSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdmVuZG9yOiBBcHBWZW5kb3I7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRCeVBhcnRuZXJJRFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QnlQYXJ0bmVySURSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52ZW5kb3IpIHttLnZlbmRvciA9IEFwcFZlbmRvci5mcm9tUHJvdG8ocHJvdG8udmVuZG9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QnlQYXJ0bmVySURSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52ZW5kb3IgIT09IG51bGwpIHt0b1JldHVyblsndmVuZG9yJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZlbmRvciA/ICh0aGlzLnZlbmRvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52ZW5kb3I7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aUFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmdbXTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQXBwUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlBcHBSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlBcHBSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXBwczogTWFya2V0cGxhY2VBcHBbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQXBwUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUFwcFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcHMpIHttLmFwcHMgPSBwcm90by5hcHBzLm1hcChNYXJrZXRwbGFjZUFwcC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUFwcFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hcHBzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FwcHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwcyA/ICh0aGlzLmFwcHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXBwczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aU9yZGVyRm9ybXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aU9yZGVyRm9ybXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBhcHBJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlPcmRlckZvcm1zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpT3JkZXJGb3Jtc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpT3JkZXJGb3Jtc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZHMnXSA9IHRoaXMuYXBwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpT3JkZXJGb3Jtc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgb3JkZXJGb3JtQ29udGFpbmVyOiBHZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZU9yZGVyRm9ybUNvbnRhaW5lcltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5vcmRlckZvcm1Db250YWluZXIpIHttLm9yZGVyRm9ybUNvbnRhaW5lciA9IHByb3RvLm9yZGVyRm9ybUNvbnRhaW5lci5tYXAoR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2VPcmRlckZvcm1Db250YWluZXIuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmRlckZvcm1Db250YWluZXIgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JkZXJGb3JtQ29udGFpbmVyICE9PSBudWxsKSB7dG9SZXR1cm5bJ29yZGVyRm9ybUNvbnRhaW5lciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcmRlckZvcm1Db250YWluZXIgPyAodGhpcy5vcmRlckZvcm1Db250YWluZXIgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3JkZXJGb3JtQ29udGFpbmVyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUHJvZHVjdENvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aVByb2R1Y3RDb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG4gICAgYXBwSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpUHJvZHVjdENvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlQcm9kdWN0Q29zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpUHJvZHVjdENvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWRzJ10gPSB0aGlzLmFwcElkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpUHJvZHVjdENvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcHJvZHVjdENvc3Q6IHtba2V5OiBzdHJpbmddOiBQcm9kdWN0Q29zdH07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHJvZHVjdENvc3QpIHttLnByb2R1Y3RDb3N0ID0gT2JqZWN0LmtleXMocHJvdG8ucHJvZHVjdENvc3QpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gUHJvZHVjdENvc3QuZnJvbVByb3RvKHByb3RvLnByb2R1Y3RDb3N0W2tdKTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9kdWN0Q29zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9kdWN0Q29zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydwcm9kdWN0Q29zdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcm9kdWN0Q29zdCA/ICh0aGlzLnByb2R1Y3RDb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnByb2R1Y3RDb3N0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpVmVuZG9yUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlWZW5kb3JSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlWZW5kb3JSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlWZW5kb3JSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVZlbmRvclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkcyddID0gdGhpcy5pZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlWZW5kb3JSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlWZW5kb3JSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdmVuZG9yczogQXBwVmVuZG9yW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVZlbmRvclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlWZW5kb3JSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52ZW5kb3JzKSB7bS52ZW5kb3JzID0gcHJvdG8udmVuZG9ycy5tYXAoQXBwVmVuZG9yLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpVmVuZG9yUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3JzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZlbmRvcnMgIT09IG51bGwpIHt0b1JldHVyblsndmVuZG9ycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52ZW5kb3JzID8gKHRoaXMudmVuZG9ycyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52ZW5kb3JzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRPd25lZEFwcElEc0J5UGFydG5lcklEUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRPd25lZEFwcElEc0J5UGFydG5lcklEUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRPd25lZEFwcElEc0J5UGFydG5lcklEUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRPd25lZEFwcElEc0J5UGFydG5lcklEUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXBwSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0T3duZWRBcHBJRHNCeVBhcnRuZXJJRFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZHMnXSA9IHRoaXMuYXBwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFB1YmxpY0tleXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRQdWJsaWNLZXlzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFB1YmxpY0tleXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UHVibGljS2V5c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFB1YmxpY0tleXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFB1YmxpY0tleXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0UHVibGljS2V5c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwdWJsaWNLZXk6IHN0cmluZztcbiAgICBpZGVudGlmaWVkUHVibGljS2V5czogSWRlbnRpZmllZFB1YmxpY0tleVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0UHVibGljS2V5c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UHVibGljS2V5c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmlkZW50aWZpZWRQdWJsaWNLZXlzKSB7bS5pZGVudGlmaWVkUHVibGljS2V5cyA9IHByb3RvLmlkZW50aWZpZWRQdWJsaWNLZXlzLm1hcChJZGVudGlmaWVkUHVibGljS2V5LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFB1YmxpY0tleXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnB1YmxpY0tleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHVibGljS2V5J10gPSB0aGlzLnB1YmxpY0tleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZGVudGlmaWVkUHVibGljS2V5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pZGVudGlmaWVkUHVibGljS2V5cyAhPT0gbnVsbCkge3RvUmV0dXJuWydpZGVudGlmaWVkUHVibGljS2V5cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pZGVudGlmaWVkUHVibGljS2V5cyA/ICh0aGlzLmlkZW50aWZpZWRQdWJsaWNLZXlzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmlkZW50aWZpZWRQdWJsaWNLZXlzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNTT1VybHNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRTU09VcmxzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNTT1VybHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U1NPVXJsc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFNTT1VybHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNTT1VybHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0U1NPVXJsc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBlbnRyeVVybDogc3RyaW5nO1xuICAgIHNlc3Npb25Vcmw6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNTT1VybHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFNTT1VybHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U1NPVXJsc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW50cnlVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VudHJ5VXJsJ10gPSB0aGlzLmVudHJ5VXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlc3Npb25VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Nlc3Npb25VcmwnXSA9IHRoaXMuc2Vzc2lvblVybDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlIGltcGxlbWVudHMgaS5DYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZhbGlkQXBwSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENhbkFjdGl2YXRlUmVzcG9uc2VJbnZhbGlkUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52YWxpZEFwcElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52YWxpZEFwcElkcyddID0gdGhpcy5pbnZhbGlkQXBwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlcXVlc3QgaW1wbGVtZW50cyBpLklzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSXNWZW5kb3JEaXN0cmlidXRlZEJ5UGFydG5lcklEUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IElzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXNWZW5kb3JEaXN0cmlidXRlZEJ5UGFydG5lcklEUmVzcG9uc2UgaW1wbGVtZW50cyBpLklzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpc0Rpc3RyaWJ1dGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSXNWZW5kb3JEaXN0cmlidXRlZEJ5UGFydG5lcklEUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBJc1ZlbmRvckRpc3RyaWJ1dGVkQnlQYXJ0bmVySURSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSXNWZW5kb3JEaXN0cmlidXRlZEJ5UGFydG5lcklEUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0Rpc3RyaWJ1dGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0Rpc3RyaWJ1dGVkJ10gPSB0aGlzLmlzRGlzdHJpYnV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEFkZG9uc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RBZGRvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QWRkb25zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RBZGRvbnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RBZGRvbnNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEFwcHJvdmVkQWRkb25zUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdEFwcHJvdmVkQWRkb25zUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGFwcElkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXBwcm92ZWRBZGRvbnNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEFwcHJvdmVkQWRkb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXBwcm92ZWRBZGRvbnNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZHMnXSA9IHRoaXMuYXBwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBcHBzUmVxdWVzdExpc3RBcHBzRmlsdGVyIGltcGxlbWVudHMgaS5MaXN0QXBwc1JlcXVlc3RMaXN0QXBwc0ZpbHRlckludGVyZmFjZSB7XG4gICAgYXBwVHlwZTogZS5BcHBUeXBlO1xuICAgIHJlbGVhc2VUeXBlOiBlLlJlbGVhc2VUeXBlO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGZpbHRlclRlcm06IHN0cmluZztcbiAgICBzdGF0ZTogZS5TdGF0ZUZpbHRlck9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXBwc1JlcXVlc3RMaXN0QXBwc0ZpbHRlciB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RBcHBzUmVxdWVzdExpc3RBcHBzRmlsdGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcFR5cGUpIHttLmFwcFR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkFwcFR5cGU+KGUuQXBwVHlwZSwgcHJvdG8uYXBwVHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ucmVsZWFzZVR5cGUpIHttLnJlbGVhc2VUeXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5SZWxlYXNlVHlwZT4oZS5SZWxlYXNlVHlwZSwgcHJvdG8ucmVsZWFzZVR5cGUpO31cbiAgICAgICAgaWYgKHByb3RvLnN0YXRlKSB7bS5zdGF0ZSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuU3RhdGVGaWx0ZXJPcHRpb25zPihlLlN0YXRlRmlsdGVyT3B0aW9ucywgcHJvdG8uc3RhdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXBwc1JlcXVlc3RMaXN0QXBwc0ZpbHRlckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcFR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcFR5cGUnXSA9IHRoaXMuYXBwVHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWxlYXNlVHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVsZWFzZVR5cGUnXSA9IHRoaXMucmVsZWFzZVR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlclRlcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZpbHRlclRlcm0nXSA9IHRoaXMuZmlsdGVyVGVybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdGUnXSA9IHRoaXMuc3RhdGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEFwcHNGb3JWZW5kb3JJRHNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0QXBwc0ZvclZlbmRvcklEc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHZlbmRvcklkczogc3RyaW5nW107XG4gICAgaW5jbHVkZUFkZG9uczogYm9vbGVhbjtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEFwcHNGb3JWZW5kb3JJRHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEFwcHNGb3JWZW5kb3JJRHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RBcHBzRm9yVmVuZG9ySURzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvcklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmVuZG9ySWRzJ10gPSB0aGlzLnZlbmRvcklkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbmNsdWRlQWRkb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbmNsdWRlQWRkb25zJ10gPSB0aGlzLmluY2x1ZGVBZGRvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYWdlU2l6ZSddID0gdGhpcy5wYWdlU2l6ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBcHBzRm9yVmVuZG9ySURzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RBcHBzRm9yVmVuZG9ySURzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFwcHM6IE1hcmtldHBsYWNlQXBwW107XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RBcHBzRm9yVmVuZG9ySURzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0QXBwc0ZvclZlbmRvcklEc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcHMpIHttLmFwcHMgPSBwcm90by5hcHBzLm1hcChNYXJrZXRwbGFjZUFwcC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXBwc0ZvclZlbmRvcklEc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hcHBzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FwcHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwcyA/ICh0aGlzLmFwcHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXBwczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzTW9yZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzTW9yZSddID0gdGhpcy5oYXNNb3JlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBcHBzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdEFwcHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIGZpbHRlcjogTGlzdEFwcHNSZXF1ZXN0TGlzdEFwcHNGaWx0ZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXBwc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0QXBwc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXIpIHttLmZpbHRlciA9IExpc3RBcHBzUmVxdWVzdExpc3RBcHBzRmlsdGVyLmZyb21Qcm90byhwcm90by5maWx0ZXIpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXBwc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVyICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpbHRlciAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXInXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVyID8gKHRoaXMuZmlsdGVyIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNGaWx0ZXJzIGltcGxlbWVudHMgaS5MaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBzZWFyY2hUZXJtOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNGaWx0ZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzRmlsdGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzRmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlYXJjaFRlcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlYXJjaFRlcm0nXSA9IHRoaXMuc2VhcmNoVGVybTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB2ZW5kb3JJZDogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgZmlsdGVyczogTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzRmlsdGVycztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RSZXF1aXJlZEFwcFN1bW1hcmllc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2ZW5kb3JJZCddID0gdGhpcy52ZW5kb3JJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RSZXF1aXJlZEFwcFN1bW1hcmllc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICByZXF1aXJlZEFwcFN1bW1hcmllczogUmVxdWlyZWRBcHBTdW1tYXJ5W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RSZXF1aXJlZEFwcFN1bW1hcmllc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnJlcXVpcmVkQXBwU3VtbWFyaWVzKSB7bS5yZXF1aXJlZEFwcFN1bW1hcmllcyA9IHByb3RvLnJlcXVpcmVkQXBwU3VtbWFyaWVzLm1hcChSZXF1aXJlZEFwcFN1bW1hcnkuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXF1aXJlZEFwcFN1bW1hcmllcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5yZXF1aXJlZEFwcFN1bW1hcmllcyAhPT0gbnVsbCkge3RvUmV0dXJuWydyZXF1aXJlZEFwcFN1bW1hcmllcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXF1aXJlZEFwcFN1bW1hcmllcyA/ICh0aGlzLnJlcXVpcmVkQXBwU3VtbWFyaWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJlcXVpcmVkQXBwU3VtbWFyaWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFZlbmRvclJlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RWZW5kb3JSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFZlbmRvclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0VmVuZG9yUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0VmVuZG9yUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFZlbmRvclJlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0VmVuZG9yUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHZlbmRvcnM6IEFwcFZlbmRvcltdO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0VmVuZG9yUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0VmVuZG9yUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmVuZG9ycykge20udmVuZG9ycyA9IHByb3RvLnZlbmRvcnMubWFwKEFwcFZlbmRvci5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0VmVuZG9yUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3JzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZlbmRvcnMgIT09IG51bGwpIHt0b1JldHVyblsndmVuZG9ycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52ZW5kb3JzID8gKHRoaXMudmVuZG9ycyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52ZW5kb3JzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2VPcmRlckZvcm1Db250YWluZXIgaW1wbGVtZW50cyBpLkdldE11bHRpT3JkZXJGb3Jtc1Jlc3BvbnNlT3JkZXJGb3JtQ29udGFpbmVySW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIG9yZGVyRm9ybTogT3JkZXJGb3JtO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2VPcmRlckZvcm1Db250YWluZXIge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZU9yZGVyRm9ybUNvbnRhaW5lcigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5vcmRlckZvcm0pIHttLm9yZGVyRm9ybSA9IE9yZGVyRm9ybS5mcm9tUHJvdG8ocHJvdG8ub3JkZXJGb3JtKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2VPcmRlckZvcm1Db250YWluZXJJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJGb3JtICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yZGVyRm9ybSAhPT0gbnVsbCkge3RvUmV0dXJuWydvcmRlckZvcm0nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3JkZXJGb3JtID8gKHRoaXMub3JkZXJGb3JtIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm9yZGVyRm9ybTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlZEFwcFJlc3BvbnNlIGltcGxlbWVudHMgaS5QYWdlZEFwcFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhcHBzOiBNYXJrZXRwbGFjZUFwcFtdO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBhZ2VkQXBwUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBQYWdlZEFwcFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcHMpIHttLmFwcHMgPSBwcm90by5hcHBzLm1hcChNYXJrZXRwbGFjZUFwcC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBhZ2VkQXBwUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcHMgIT09IG51bGwpIHt0b1JldHVyblsnYXBwcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hcHBzID8gKHRoaXMuYXBwcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hcHBzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzTW9yZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzTW9yZSddID0gdGhpcy5oYXNNb3JlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUHJvZHVjdENvc3RSZXNwb25zZVByb2R1Y3RDb3N0RW50cnkgaW1wbGVtZW50cyBpLkdldE11bHRpUHJvZHVjdENvc3RSZXNwb25zZVByb2R1Y3RDb3N0RW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBQcm9kdWN0Q29zdDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpUHJvZHVjdENvc3RSZXNwb25zZVByb2R1Y3RDb3N0RW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2VQcm9kdWN0Q29zdEVudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZhbHVlKSB7bS52YWx1ZSA9IFByb2R1Y3RDb3N0LmZyb21Qcm90byhwcm90by52YWx1ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpUHJvZHVjdENvc3RSZXNwb25zZVByb2R1Y3RDb3N0RW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudmFsdWUgIT09IG51bGwpIHt0b1JldHVyblsndmFsdWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudmFsdWUgPyAodGhpcy52YWx1ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52YWx1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQdWJsaXNoQXBwUmVxdWVzdCBpbXBsZW1lbnRzIGkuUHVibGlzaEFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQdWJsaXNoQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFB1Ymxpc2hBcHBSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5QdWJsaXNoQXBwUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZW1vdmVBcHBJRFJlcXVlc3QgaW1wbGVtZW50cyBpLlJlbW92ZUFwcElEUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBhcHBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVtb3ZlQXBwSURSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVtb3ZlQXBwSURSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVBcHBJRFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUFwcElEUmVzcG9uc2UgaW1wbGVtZW50cyBpLlJlbW92ZUFwcElEUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHZlbmRvcjogQXBwVmVuZG9yO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVtb3ZlQXBwSURSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFJlbW92ZUFwcElEUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmVuZG9yKSB7bS52ZW5kb3IgPSBBcHBWZW5kb3IuZnJvbVByb3RvKHByb3RvLnZlbmRvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlbW92ZUFwcElEUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3IgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudmVuZG9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZlbmRvciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52ZW5kb3IgPyAodGhpcy52ZW5kb3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmVuZG9yO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RBcHBSZXZpZXdSZXF1ZXN0IGltcGxlbWVudHMgaS5SZXF1ZXN0QXBwUmV2aWV3UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlcXVlc3RBcHBSZXZpZXdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVxdWVzdEFwcFJldmlld1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlcXVlc3RBcHBSZXZpZXdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkQXBwU3VtbWFyeSBpbXBsZW1lbnRzIGkuUmVxdWlyZWRBcHBTdW1tYXJ5SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpY29uVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBSZXF1aXJlZEFwcFN1bW1hcnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZXF1aXJlZEFwcFN1bW1hcnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlcXVpcmVkQXBwU3VtbWFyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWNvblVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWNvblVybCddID0gdGhpcy5pY29uVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc3RvcmVBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5SZXN0b3JlQXBwUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlc3RvcmVBcHBSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVzdG9yZUFwcFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlc3RvcmVBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbkFjdGl2YXRlUmVzcG9uc2VTdWNjZXNzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNhbkFjdGl2YXRlUmVzcG9uc2VTdWNjZXNzUmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2FuQWN0aXZhdGVSZXNwb25zZVN1Y2Nlc3NSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENhbkFjdGl2YXRlUmVzcG9uc2VTdWNjZXNzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNhbkFjdGl2YXRlUmVzcG9uc2VTdWNjZXNzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXNwZW5kQXBwUmVxdWVzdCBpbXBsZW1lbnRzIGkuU3VzcGVuZEFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTdXNwZW5kQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFN1c3BlbmRBcHBSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TdXNwZW5kQXBwUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFwcHJvdmVBZGRvblJlcXVlc3QgaW1wbGVtZW50cyBpLlVuYXBwcm92ZUFkZG9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBhZGRvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVbmFwcHJvdmVBZGRvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVbmFwcHJvdmVBZGRvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVuYXBwcm92ZUFkZG9uUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRvbklkJ10gPSB0aGlzLmFkZG9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hcHByb3ZlQXBwUmVxdWVzdCBpbXBsZW1lbnRzIGkuVW5hcHByb3ZlQXBwUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVuYXBwcm92ZUFwcFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVbmFwcHJvdmVBcHBSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VbmFwcHJvdmVBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuc3VzcGVuZEFwcFJlcXVlc3QgaW1wbGVtZW50cyBpLlVuc3VzcGVuZEFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVbnN1c3BlbmRBcHBSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVW5zdXNwZW5kQXBwUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVW5zdXNwZW5kQXBwUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVBcHBBcHByb3ZhbEFuZEJpbGxpbmdTZXR0aW5nc1JlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUFwcEFwcHJvdmFsQW5kQmlsbGluZ1NldHRpbmdzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBhcHByb3ZhbFByb2Nlc3M6IGUuQXBwcm92YWxQcm9jZXNzO1xuICAgIGJpbGxpbmdQcm9jZXNzOiBlLkJpbGxpbmdQcm9jZXNzO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQXBwQXBwcm92YWxBbmRCaWxsaW5nU2V0dGluZ3NSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXBwQXBwcm92YWxBbmRCaWxsaW5nU2V0dGluZ3NSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcHJvdmFsUHJvY2Vzcykge20uYXBwcm92YWxQcm9jZXNzID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5BcHByb3ZhbFByb2Nlc3M+KGUuQXBwcm92YWxQcm9jZXNzLCBwcm90by5hcHByb3ZhbFByb2Nlc3MpO31cbiAgICAgICAgaWYgKHByb3RvLmJpbGxpbmdQcm9jZXNzKSB7bS5iaWxsaW5nUHJvY2VzcyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQmlsbGluZ1Byb2Nlc3M+KGUuQmlsbGluZ1Byb2Nlc3MsIHByb3RvLmJpbGxpbmdQcm9jZXNzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQXBwQXBwcm92YWxBbmRCaWxsaW5nU2V0dGluZ3NSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcHJvdmFsUHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwcm92YWxQcm9jZXNzJ10gPSB0aGlzLmFwcHJvdmFsUHJvY2Vzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5iaWxsaW5nUHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYmlsbGluZ1Byb2Nlc3MnXSA9IHRoaXMuYmlsbGluZ1Byb2Nlc3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlQXBwQ2F0ZWdvcmllc1JlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUFwcENhdGVnb3JpZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGNhdGVnb3J5SWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUFwcENhdGVnb3JpZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXBwQ2F0ZWdvcmllc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUFwcENhdGVnb3JpZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhdGVnb3J5SWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYXRlZ29yeUlkcyddID0gdGhpcy5jYXRlZ29yeUlkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVBcHBGdWxmaWxsbWVudEludGVncmF0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQXBwRnVsZmlsbG1lbnRJbnRlZ3JhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgdXNlc0Z1bGZpbGxtZW50SW50ZWdyYXRpb246IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVBcHBGdWxmaWxsbWVudEludGVncmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUFwcEZ1bGZpbGxtZW50SW50ZWdyYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVBcHBGdWxmaWxsbWVudEludGVncmF0aW9uUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzRnVsZmlsbG1lbnRJbnRlZ3JhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlc0Z1bGZpbGxtZW50SW50ZWdyYXRpb24nXSA9IHRoaXMudXNlc0Z1bGZpbGxtZW50SW50ZWdyYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlQXBwR2VuZXJhbEluZm9ybWF0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQXBwR2VuZXJhbEluZm9ybWF0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVuZG9yOiBzdHJpbmc7XG4gICAgdGFnbGluZTogc3RyaW5nO1xuICAgIHNlcnZpY2VNb2RlbDogc3RyaW5nW107XG4gICAgbG1pQ2F0ZWdvcmllczogZS5NYXJrZXRwbGFjZUFwcExtaUxtaUNhdGVnb3JpZXNbXTtcbiAgICBpY29uOiBzdHJpbmc7XG4gICAgaGVhZGVySW1hZ2U6IHN0cmluZztcbiAgICBzY3JlZW5zaG90OiBzdHJpbmdbXTtcbiAgICBwcmljZTogbnVtYmVyO1xuICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgYmlsbGluZ0ZyZXF1ZW5jeTogc3RyaW5nO1xuICAgIHJlc3RyaWN0aW9uczogUmVzdHJpY3Rpb25zO1xuICAgIGFsbG93UHJpY2VOZWdvdGlhdGlvbjogYm9vbGVhbjtcbiAgICBnZHByQ29tcGxpYW50OiBib29sZWFuO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIHByZXZlbnRQcmljZUNvbnZlcnNpb25CZXR3ZWVuQ3VycmVuY2llczogYm9vbGVhbjtcbiAgICBzdWdnZXN0ZWRSZXRhaWxQcmljZTogbnVtYmVyO1xuICAgIGNvdW50cnk6IFBlcm1pc3Npb25MaXN0cztcbiAgICBjb21taXRtZW50OiBDb21taXRtZW50O1xuICAgIG11bHRpcGxlQWN0aXZhdGlvbnM6IGJvb2xlYW47XG4gICAgdXNlc0VkaXRpb25zOiBib29sZWFuO1xuICAgIGRpc2NvdmVyYWJsZTogYm9vbGVhbjtcbiAgICBlZGl0aW9uSWRzOiBzdHJpbmdbXTtcbiAgICBzdGF0ZTogZS5TdGF0ZTtcbiAgICBjb3N0OiBDb3N0O1xuICAgIHNldHVwRmVlOiBudW1iZXI7XG4gICAgdXNlc0N1c3RvbVByaWNpbmc6IGJvb2xlYW47XG4gICAgZGVsaXZlcnlNZXRob2Q6IGUuRGVsaXZlcnlNZXRob2Q7XG4gICAgY2F0ZWdvcmllczogc3RyaW5nW107XG4gICAgZmVlczogRmVlW107XG4gICAgc3VnZ2VzdGVkUmV0YWlsU2V0dXBGZWU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUFwcEdlbmVyYWxJbmZvcm1hdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVBcHBHZW5lcmFsSW5mb3JtYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmxtaUNhdGVnb3JpZXMpIHttLmxtaUNhdGVnb3JpZXMgPSBwcm90by5sbWlDYXRlZ29yaWVzLm1hcCgodjogc3RyaW5nKSA9PiBlbnVtU3RyaW5nVG9WYWx1ZTxlLk1hcmtldHBsYWNlQXBwTG1pTG1pQ2F0ZWdvcmllcz4oZS5NYXJrZXRwbGFjZUFwcExtaUxtaUNhdGVnb3JpZXMsIHYpKTt9XG4gICAgICAgIGlmIChwcm90by5wcmljZSkge20ucHJpY2UgPSBwYXJzZUludChwcm90by5wcmljZSwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnJlc3RyaWN0aW9ucykge20ucmVzdHJpY3Rpb25zID0gUmVzdHJpY3Rpb25zLmZyb21Qcm90byhwcm90by5yZXN0cmljdGlvbnMpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgaWYgKHByb3RvLnN1Z2dlc3RlZFJldGFpbFByaWNlKSB7bS5zdWdnZXN0ZWRSZXRhaWxQcmljZSA9IHBhcnNlSW50KHByb3RvLnN1Z2dlc3RlZFJldGFpbFByaWNlLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uY291bnRyeSkge20uY291bnRyeSA9IFBlcm1pc3Npb25MaXN0cy5mcm9tUHJvdG8ocHJvdG8uY291bnRyeSk7fVxuICAgICAgICBpZiAocHJvdG8uY29tbWl0bWVudCkge20uY29tbWl0bWVudCA9IENvbW1pdG1lbnQuZnJvbVByb3RvKHByb3RvLmNvbW1pdG1lbnQpO31cbiAgICAgICAgaWYgKHByb3RvLnN0YXRlKSB7bS5zdGF0ZSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuU3RhdGU+KGUuU3RhdGUsIHByb3RvLnN0YXRlKTt9XG4gICAgICAgIGlmIChwcm90by5jb3N0KSB7bS5jb3N0ID0gQ29zdC5mcm9tUHJvdG8ocHJvdG8uY29zdCk7fVxuICAgICAgICBpZiAocHJvdG8uc2V0dXBGZWUpIHttLnNldHVwRmVlID0gcGFyc2VJbnQocHJvdG8uc2V0dXBGZWUsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5kZWxpdmVyeU1ldGhvZCkge20uZGVsaXZlcnlNZXRob2QgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkRlbGl2ZXJ5TWV0aG9kPihlLkRlbGl2ZXJ5TWV0aG9kLCBwcm90by5kZWxpdmVyeU1ldGhvZCk7fVxuICAgICAgICBpZiAocHJvdG8uZmVlcykge20uZmVlcyA9IHByb3RvLmZlZXMubWFwKEZlZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnN1Z2dlc3RlZFJldGFpbFNldHVwRmVlKSB7bS5zdWdnZXN0ZWRSZXRhaWxTZXR1cEZlZSA9IHBhcnNlSW50KHByb3RvLnN1Z2dlc3RlZFJldGFpbFNldHVwRmVlLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUFwcEdlbmVyYWxJbmZvcm1hdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmVuZG9yJ10gPSB0aGlzLnZlbmRvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YWdsaW5lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YWdsaW5lJ10gPSB0aGlzLnRhZ2xpbmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZU1vZGVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZXJ2aWNlTW9kZWwnXSA9IHRoaXMuc2VydmljZU1vZGVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxtaUNhdGVnb3JpZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xtaUNhdGVnb3JpZXMnXSA9IHRoaXMubG1pQ2F0ZWdvcmllczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pY29uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpY29uJ10gPSB0aGlzLmljb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGVhZGVySW1hZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hlYWRlckltYWdlJ10gPSB0aGlzLmhlYWRlckltYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjcmVlbnNob3QgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NjcmVlbnNob3QnXSA9IHRoaXMuc2NyZWVuc2hvdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2UnXSA9IHRoaXMucHJpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnJlbmN5J10gPSB0aGlzLmN1cnJlbmN5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJpbGxpbmdGcmVxdWVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JpbGxpbmdGcmVxdWVuY3knXSA9IHRoaXMuYmlsbGluZ0ZyZXF1ZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXN0cmljdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucmVzdHJpY3Rpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Jlc3RyaWN0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXN0cmljdGlvbnMgPyAodGhpcy5yZXN0cmljdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucmVzdHJpY3Rpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFsbG93UHJpY2VOZWdvdGlhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWxsb3dQcmljZU5lZ290aWF0aW9uJ10gPSB0aGlzLmFsbG93UHJpY2VOZWdvdGlhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5nZHByQ29tcGxpYW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnZHByQ29tcGxpYW50J10gPSB0aGlzLmdkcHJDb21wbGlhbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2ZW50UHJpY2VDb252ZXJzaW9uQmV0d2VlbkN1cnJlbmNpZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByZXZlbnRQcmljZUNvbnZlcnNpb25CZXR3ZWVuQ3VycmVuY2llcyddID0gdGhpcy5wcmV2ZW50UHJpY2VDb252ZXJzaW9uQmV0d2VlbkN1cnJlbmNpZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VnZ2VzdGVkUmV0YWlsUHJpY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1Z2dlc3RlZFJldGFpbFByaWNlJ10gPSB0aGlzLnN1Z2dlc3RlZFJldGFpbFByaWNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50cnkgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY291bnRyeSAhPT0gbnVsbCkge3RvUmV0dXJuWydjb3VudHJ5J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvdW50cnkgPyAodGhpcy5jb3VudHJ5IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvdW50cnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tbWl0bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb21taXRtZW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbW1pdG1lbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29tbWl0bWVudCA/ICh0aGlzLmNvbW1pdG1lbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29tbWl0bWVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aXBsZUFjdGl2YXRpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aXBsZUFjdGl2YXRpb25zJ10gPSB0aGlzLm11bHRpcGxlQWN0aXZhdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc0VkaXRpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzRWRpdGlvbnMnXSA9IHRoaXMudXNlc0VkaXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc2NvdmVyYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGlzY292ZXJhYmxlJ10gPSB0aGlzLmRpc2NvdmVyYWJsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lZGl0aW9uSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlZGl0aW9uSWRzJ10gPSB0aGlzLmVkaXRpb25JZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXRlJ10gPSB0aGlzLnN0YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydjb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvc3QgPyAodGhpcy5jb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvc3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dXBGZWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NldHVwRmVlJ10gPSB0aGlzLnNldHVwRmVlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNDdXN0b21QcmljaW5nICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzQ3VzdG9tUHJpY2luZyddID0gdGhpcy51c2VzQ3VzdG9tUHJpY2luZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWxpdmVyeU1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVsaXZlcnlNZXRob2QnXSA9IHRoaXMuZGVsaXZlcnlNZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2F0ZWdvcmllcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2F0ZWdvcmllcyddID0gdGhpcy5jYXRlZ29yaWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZlZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmVlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydmZWVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZlZXMgPyAodGhpcy5mZWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZlZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VnZ2VzdGVkUmV0YWlsU2V0dXBGZWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1Z2dlc3RlZFJldGFpbFNldHVwRmVlJ10gPSB0aGlzLnN1Z2dlc3RlZFJldGFpbFNldHVwRmVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUFwcEludGVncmF0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQXBwSW50ZWdyYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIHB1YmxpY0tleTogc3RyaW5nO1xuICAgIHJlc2VydmVJZFVybDogc3RyaW5nO1xuICAgIHB1cmNoYXNlV2ViaG9va1VybDogc3RyaW5nO1xuICAgIGFjdGl2YXRpb25SZXF1aXJlc0FwcHJvdmFsOiBib29sZWFuO1xuICAgIGFkZG9uUHVyY2hhc2VXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgdXNlck1vZFdlYmhvb2tVcmw6IHN0cmluZztcbiAgICBhY2NvdW50TW9kV2ViaG9va1VybDogc3RyaW5nO1xuICAgIGNvbnRhY3RXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgZnVsZmlsbG1lbnRFbWFpbDogc3RyaW5nW107XG4gICAgcGFydG5lclNldHRpbmdzV2ViaG9va1VybDogc3RyaW5nO1xuICAgIHBhcnRuZXJDb250YWN0UmVjaXBpZW50czogQ29udGFjdFtdO1xuICAgIHVzZXNJbnRlZ3JhdGlvbjogYm9vbGVhbjtcbiAgICBvcmRlckZvcm1WYWxpZGF0b3JXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgYWxsb3dXaGl0ZUxhYmVsaW5nOiBib29sZWFuO1xuICAgIGN1c3RvbWVyV2ViaG9va1VybDogc3RyaW5nO1xuICAgIHNlbmRDYW5jZWxhdGlvbk5vdGlmaWNhdGlvbnM6IGJvb2xlYW47XG4gICAgY2FuY2VsbGF0aW9uV2ViaG9va1VybDogc3RyaW5nO1xuICAgIHNlcnZpY2VDaGFuZ2VXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgYXBwTGV2ZWxIYXNBZG1pbkRhc2hib2FyZDogYm9vbGVhbjtcbiAgICBoaWRlRnJvbUNsaWVudERhc2hib2FyZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUFwcEludGVncmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUFwcEludGVncmF0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYXJ0bmVyQ29udGFjdFJlY2lwaWVudHMpIHttLnBhcnRuZXJDb250YWN0UmVjaXBpZW50cyA9IHByb3RvLnBhcnRuZXJDb250YWN0UmVjaXBpZW50cy5tYXAoQ29udGFjdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVBcHBJbnRlZ3JhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHVibGljS2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwdWJsaWNLZXknXSA9IHRoaXMucHVibGljS2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc2VydmVJZFVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVzZXJ2ZUlkVXJsJ10gPSB0aGlzLnJlc2VydmVJZFVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wdXJjaGFzZVdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3B1cmNoYXNlV2ViaG9va1VybCddID0gdGhpcy5wdXJjaGFzZVdlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aXZhdGlvblJlcXVpcmVzQXBwcm92YWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGl2YXRpb25SZXF1aXJlc0FwcHJvdmFsJ10gPSB0aGlzLmFjdGl2YXRpb25SZXF1aXJlc0FwcHJvdmFsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZG9uUHVyY2hhc2VXZWJob29rVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRvblB1cmNoYXNlV2ViaG9va1VybCddID0gdGhpcy5hZGRvblB1cmNoYXNlV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VyTW9kV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlck1vZFdlYmhvb2tVcmwnXSA9IHRoaXMudXNlck1vZFdlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudE1vZFdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRNb2RXZWJob29rVXJsJ10gPSB0aGlzLmFjY291bnRNb2RXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRhY3RXZWJob29rVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb250YWN0V2ViaG9va1VybCddID0gdGhpcy5jb250YWN0V2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdWxmaWxsbWVudEVtYWlsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmdWxmaWxsbWVudEVtYWlsJ10gPSB0aGlzLmZ1bGZpbGxtZW50RW1haWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lclNldHRpbmdzV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lclNldHRpbmdzV2ViaG9va1VybCddID0gdGhpcy5wYXJ0bmVyU2V0dGluZ3NXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJDb250YWN0UmVjaXBpZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXJ0bmVyQ29udGFjdFJlY2lwaWVudHMgIT09IG51bGwpIHt0b1JldHVyblsncGFydG5lckNvbnRhY3RSZWNpcGllbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhcnRuZXJDb250YWN0UmVjaXBpZW50cyA/ICh0aGlzLnBhcnRuZXJDb250YWN0UmVjaXBpZW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXJ0bmVyQ29udGFjdFJlY2lwaWVudHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc0ludGVncmF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzSW50ZWdyYXRpb24nXSA9IHRoaXMudXNlc0ludGVncmF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yZGVyRm9ybVZhbGlkYXRvcldlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yZGVyRm9ybVZhbGlkYXRvcldlYmhvb2tVcmwnXSA9IHRoaXMub3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbGxvd1doaXRlTGFiZWxpbmcgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FsbG93V2hpdGVMYWJlbGluZyddID0gdGhpcy5hbGxvd1doaXRlTGFiZWxpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJXZWJob29rVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXN0b21lcldlYmhvb2tVcmwnXSA9IHRoaXMuY3VzdG9tZXJXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbmRDYW5jZWxhdGlvbk5vdGlmaWNhdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlbmRDYW5jZWxhdGlvbk5vdGlmaWNhdGlvbnMnXSA9IHRoaXMuc2VuZENhbmNlbGF0aW9uTm90aWZpY2F0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5jZWxsYXRpb25XZWJob29rVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYW5jZWxsYXRpb25XZWJob29rVXJsJ10gPSB0aGlzLmNhbmNlbGxhdGlvbldlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZUNoYW5nZVdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlcnZpY2VDaGFuZ2VXZWJob29rVXJsJ10gPSB0aGlzLnNlcnZpY2VDaGFuZ2VXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcExldmVsSGFzQWRtaW5EYXNoYm9hcmQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcExldmVsSGFzQWRtaW5EYXNoYm9hcmQnXSA9IHRoaXMuYXBwTGV2ZWxIYXNBZG1pbkRhc2hib2FyZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaWRlRnJvbUNsaWVudERhc2hib2FyZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGlkZUZyb21DbGllbnREYXNoYm9hcmQnXSA9IHRoaXMuaGlkZUZyb21DbGllbnREYXNoYm9hcmQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlQXBwTWFya2V0aW5nSW5mb3JtYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVBcHBNYXJrZXRpbmdJbmZvcm1hdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgbWFya2V0aW5nSW5mbzogTWFya2V0aW5nSW5mb3JtYXRpb247XG4gICAgdXNlc01hcmtldGluZ0luZm9ybWF0aW9uOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQXBwTWFya2V0aW5nSW5mb3JtYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXBwTWFya2V0aW5nSW5mb3JtYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1hcmtldGluZ0luZm8pIHttLm1hcmtldGluZ0luZm8gPSBNYXJrZXRpbmdJbmZvcm1hdGlvbi5mcm9tUHJvdG8ocHJvdG8ubWFya2V0aW5nSW5mbyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUFwcE1hcmtldGluZ0luZm9ybWF0aW9uUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tYXJrZXRpbmdJbmZvICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1hcmtldGluZ0luZm8gIT09IG51bGwpIHt0b1JldHVyblsnbWFya2V0aW5nSW5mbyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tYXJrZXRpbmdJbmZvID8gKHRoaXMubWFya2V0aW5nSW5mbyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tYXJrZXRpbmdJbmZvO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNNYXJrZXRpbmdJbmZvcm1hdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlc01hcmtldGluZ0luZm9ybWF0aW9uJ10gPSB0aGlzLnVzZXNNYXJrZXRpbmdJbmZvcm1hdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVBcHBPcmRlckZvcm1SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVBcHBPcmRlckZvcm1SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIHVzZXNPcmRlckZvcm06IGJvb2xlYW47XG4gICAgb3JkZXJGb3JtOiBPcmRlckZvcm07XG4gICAgdXNlc0FjdGl2YXRpb25TcGVjaWZpY0VudHJ5VXJsOiBib29sZWFuO1xuICAgIGFwcGxpY2F0aW9uVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVBcHBPcmRlckZvcm1SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXBwT3JkZXJGb3JtUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5vcmRlckZvcm0pIHttLm9yZGVyRm9ybSA9IE9yZGVyRm9ybS5mcm9tUHJvdG8ocHJvdG8ub3JkZXJGb3JtKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQXBwT3JkZXJGb3JtUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzT3JkZXJGb3JtICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzT3JkZXJGb3JtJ10gPSB0aGlzLnVzZXNPcmRlckZvcm07fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJGb3JtICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yZGVyRm9ybSAhPT0gbnVsbCkge3RvUmV0dXJuWydvcmRlckZvcm0nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3JkZXJGb3JtID8gKHRoaXMub3JkZXJGb3JtIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm9yZGVyRm9ybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNBY3RpdmF0aW9uU3BlY2lmaWNFbnRyeVVybCddID0gdGhpcy51c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwbGljYXRpb25VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcGxpY2F0aW9uVXJsJ10gPSB0aGlzLmFwcGxpY2F0aW9uVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUFwcFNTT0ludGVncmF0aW9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQXBwU1NPSW50ZWdyYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGVudHJ5VXJsOiBzdHJpbmc7XG4gICAgc2Vzc2lvblVybDogc3RyaW5nO1xuICAgIGxvZ291dFVybDogc3RyaW5nO1xuICAgIHVzZXNTc29JbnRlZ3JhdGlvbjogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUFwcFNTT0ludGVncmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUFwcFNTT0ludGVncmF0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQXBwU1NPSW50ZWdyYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudHJ5VXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbnRyeVVybCddID0gdGhpcy5lbnRyeVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXNzaW9uVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZXNzaW9uVXJsJ10gPSB0aGlzLnNlc3Npb25Vcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9nb3V0VXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsb2dvdXRVcmwnXSA9IHRoaXMubG9nb3V0VXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNTc29JbnRlZ3JhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlc1Nzb0ludGVncmF0aW9uJ10gPSB0aGlzLnVzZXNTc29JbnRlZ3JhdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVBcHBUcmlhbENvbmZpZ3VyYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVBcHBUcmlhbENvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIHRyaWFsc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgZHVyYXRpb246IG51bWJlcjtcbiAgICBlbmRPZlRyaWFsQWN0aW9uOiBlLkVuZE9mVHJpYWxBY3Rpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQXBwVHJpYWxDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUFwcFRyaWFsQ29uZmlndXJhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZW5kT2ZUcmlhbEFjdGlvbikge20uZW5kT2ZUcmlhbEFjdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRW5kT2ZUcmlhbEFjdGlvbnM+KGUuRW5kT2ZUcmlhbEFjdGlvbnMsIHByb3RvLmVuZE9mVHJpYWxBY3Rpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVBcHBUcmlhbENvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyaWFsc0VuYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RyaWFsc0VuYWJsZWQnXSA9IHRoaXMudHJpYWxzRW5hYmxlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kdXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHVyYXRpb24nXSA9IHRoaXMuZHVyYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kT2ZUcmlhbEFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW5kT2ZUcmlhbEFjdGlvbiddID0gdGhpcy5lbmRPZlRyaWFsQWN0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVZlbmRvclJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZVZlbmRvclJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIHJlcG9ydGluZ0NvZGU6IHN0cmluZztcbiAgICBkaXN0cmlidXRpb25TdGF0dXM6IGUuVmVuZG9yRGlzdHJpYnV0aW9uU3RhdHVzO1xuICAgIGlzSW52b2ljZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVWZW5kb3JSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlVmVuZG9yUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kaXN0cmlidXRpb25TdGF0dXMpIHttLmRpc3RyaWJ1dGlvblN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuVmVuZG9yRGlzdHJpYnV0aW9uU3RhdHVzPihlLlZlbmRvckRpc3RyaWJ1dGlvblN0YXR1cywgcHJvdG8uZGlzdHJpYnV0aW9uU3RhdHVzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlVmVuZG9yUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlcG9ydGluZ0NvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JlcG9ydGluZ0NvZGUnXSA9IHRoaXMucmVwb3J0aW5nQ29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXN0cmlidXRpb25TdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rpc3RyaWJ1dGlvblN0YXR1cyddID0gdGhpcy5kaXN0cmlidXRpb25TdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNJbnZvaWNlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNJbnZvaWNlZCddID0gdGhpcy5pc0ludm9pY2VkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVZlbmRvclJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVWZW5kb3JSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdmVuZG9yOiBBcHBWZW5kb3I7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVWZW5kb3JSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZVZlbmRvclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZlbmRvcikge20udmVuZG9yID0gQXBwVmVuZG9yLmZyb21Qcm90byhwcm90by52ZW5kb3IpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVWZW5kb3JSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52ZW5kb3IgIT09IG51bGwpIHt0b1JldHVyblsndmVuZG9yJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZlbmRvciA/ICh0aGlzLnZlbmRvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52ZW5kb3I7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iXX0=
2432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbWFya2V0cGxhY2VfYXBwc19zZGsvdjEvc3JjL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFJLE9BQVksRUFBRSxLQUFhO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxPQUFPLDBCQUEwQjtJQUluQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQ3pDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENB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QztRQUNyTCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sb0JBQW9CO0lBRzdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDbkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FBQztRQUNqRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXdDO1FBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLE1BQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQ25LLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFkZG9uIH0gZnJvbSAnLi9hZGRvbic7XG5pbXBvcnQgeyBBcHBWZW5kb3IgfSBmcm9tICcuL3ZlbmRvcic7XG5pbXBvcnQgeyBDb21taXRtZW50IH0gZnJvbSAnLi9jb21taXRtZW50JztcbmltcG9ydCB7IEZlZSB9IGZyb20gJy4vZmVlJztcbmltcG9ydCB7IEZpZWxkTWFzayB9IGZyb20gJy4vZmllbGQtbWFzayc7XG5pbXBvcnQgeyBNYXJrZXRwbGFjZUFwcCwgTWFya2V0aW5nSW5mb3JtYXRpb24sIENvc3QsIElkZW50aWZpZWRQdWJsaWNLZXksIENvbnRhY3QgfSBmcm9tICcuL2FwcCc7XG5pbXBvcnQgeyBPcmRlckZvcm0gfSBmcm9tICcuL29yZGVyLWZvcm0nO1xuaW1wb3J0IHsgUHJvZHVjdENvc3QgfSBmcm9tICcuL3Byb2R1Y3QtY29zdCc7XG5pbXBvcnQgeyBSZXN0cmljdGlvbnMsIFBlcm1pc3Npb25MaXN0cyB9IGZyb20gJy4vcmVzdHJpY3Rpb25zJztcbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIEFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVyIGltcGxlbWVudHMgaS5BY3RpdmVBcHBFZGl0aW9uSWRlbnRpZmllckludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBlZGl0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVyIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWN0aXZlQXBwRWRpdGlvbklkZW50aWZpZXIoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZWRpdGlvbklkJ10gPSB0aGlzLmVkaXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRBcHBJRFJlcXVlc3QgaW1wbGVtZW50cyBpLkFkZEFwcElEUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBhcHBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkQXBwSURSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkQXBwSURSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRBcHBJRFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZEFwcElEUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFkZEFwcElEUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHZlbmRvcjogQXBwVmVuZG9yO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkQXBwSURSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZEFwcElEUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmVuZG9yKSB7bS52ZW5kb3IgPSBBcHBWZW5kb3IuZnJvbVByb3RvKHByb3RvLnZlbmRvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZEFwcElEUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3IgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudmVuZG9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZlbmRvciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52ZW5kb3IgPyAodGhpcy52ZW5kb3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmVuZG9yO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZG9uUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFkZG9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFkZG9uOiBBZGRvbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZG9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZGRvblJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFkZG9uKSB7bS5hZGRvbiA9IEFkZG9uLmZyb21Qcm90byhwcm90by5hZGRvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZG9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hZGRvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydhZGRvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hZGRvbiA/ICh0aGlzLmFkZG9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFkZG9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZG9uc0xpc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuQWRkb25zTGlzdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhZGRvbnM6IEFkZG9uW107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRvbnNMaXN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZGRvbnNMaXN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWRkb25zKSB7bS5hZGRvbnMgPSBwcm90by5hZGRvbnMubWFwKEFkZG9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZG9uc0xpc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZG9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hZGRvbnMgIT09IG51bGwpIHt0b1JldHVyblsnYWRkb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFkZG9ucyA/ICh0aGlzLmFkZG9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hZGRvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBSZXNwb25zZSBpbXBsZW1lbnRzIGkuQXBwUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFwcDogTWFya2V0cGxhY2VBcHA7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBcHBSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFwcFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcCkge20uYXBwID0gTWFya2V0cGxhY2VBcHAuZnJvbVByb3RvKHByb3RvLmFwcCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFwcFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcCAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHAnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwID8gKHRoaXMuYXBwIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHByb3ZlQWRkb25SZXF1ZXN0IGltcGxlbWVudHMgaS5BcHByb3ZlQWRkb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGFkZG9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFwcHJvdmVBZGRvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBcHByb3ZlQWRkb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BcHByb3ZlQWRkb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZG9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZG9uSWQnXSA9IHRoaXMuYWRkb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHByb3ZlQXBwUmVxdWVzdCBpbXBsZW1lbnRzIGkuQXBwcm92ZUFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBcHByb3ZlQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFwcHJvdmVBcHBSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BcHByb3ZlQXBwUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5BY3RpdmF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkNhbkFjdGl2YXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWRzOiBzdHJpbmdbXTtcbiAgICBhY3RpdmVBcHBJZHM6IHN0cmluZ1tdO1xuICAgIGFjdGl2ZUFwcEVkaXRpb25JZHM6IEFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVyW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDYW5BY3RpdmF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDYW5BY3RpdmF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWN0aXZlQXBwRWRpdGlvbklkcykge20uYWN0aXZlQXBwRWRpdGlvbklkcyA9IHByb3RvLmFjdGl2ZUFwcEVkaXRpb25JZHMubWFwKEFjdGl2ZUFwcEVkaXRpb25JZGVudGlmaWVyLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNhbkFjdGl2YXRlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWRzJ10gPSB0aGlzLmFwcElkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3RpdmVBcHBJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGl2ZUFwcElkcyddID0gdGhpcy5hY3RpdmVBcHBJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aXZlQXBwRWRpdGlvbklkcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hY3RpdmVBcHBFZGl0aW9uSWRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FjdGl2ZUFwcEVkaXRpb25JZHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYWN0aXZlQXBwRWRpdGlvbklkcyA/ICh0aGlzLmFjdGl2ZUFwcEVkaXRpb25JZHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYWN0aXZlQXBwRWRpdGlvbklkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5BY3RpdmF0ZVJlc3BvbnNlIGltcGxlbWVudHMgaS5DYW5BY3RpdmF0ZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZhbGlkUmVzcG9uc2U6IENhbkFjdGl2YXRlUmVzcG9uc2VJbnZhbGlkUmVzcG9uc2U7XG4gICAgc3VjY2Vzc1Jlc3BvbnNlOiBDYW5BY3RpdmF0ZVJlc3BvbnNlU3VjY2Vzc1Jlc3BvbnNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2FuQWN0aXZhdGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENhbkFjdGl2YXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52YWxpZFJlc3BvbnNlKSB7bS5pbnZhbGlkUmVzcG9uc2UgPSBDYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlLmZyb21Qcm90byhwcm90by5pbnZhbGlkUmVzcG9uc2UpO31cbiAgICAgICAgaWYgKHByb3RvLnN1Y2Nlc3NSZXNwb25zZSkge20uc3VjY2Vzc1Jlc3BvbnNlID0gQ2FuQWN0aXZhdGVSZXNwb25zZVN1Y2Nlc3NSZXNwb25zZS5mcm9tUHJvdG8ocHJvdG8uc3VjY2Vzc1Jlc3BvbnNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2FuQWN0aXZhdGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludmFsaWRSZXNwb25zZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZhbGlkUmVzcG9uc2UgIT09IG51bGwpIHt0b1JldHVyblsnaW52YWxpZFJlc3BvbnNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludmFsaWRSZXNwb25zZSA/ICh0aGlzLmludmFsaWRSZXNwb25zZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pbnZhbGlkUmVzcG9uc2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VjY2Vzc1Jlc3BvbnNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN1Y2Nlc3NSZXNwb25zZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzdWNjZXNzUmVzcG9uc2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3VjY2Vzc1Jlc3BvbnNlID8gKHRoaXMuc3VjY2Vzc1Jlc3BvbnNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN1Y2Nlc3NSZXNwb25zZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVBcHBSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVuZG9yOiBzdHJpbmc7XG4gICAgdGFnbGluZTogc3RyaW5nO1xuICAgIHNlcnZpY2VNb2RlbDogc3RyaW5nW107XG4gICAgbG1pQ2F0ZWdvcmllczogZS5NYXJrZXRwbGFjZUFwcExtaUxtaUNhdGVnb3JpZXNbXTtcbiAgICBpY29uOiBzdHJpbmc7XG4gICAgaGVhZGVySW1hZ2U6IHN0cmluZztcbiAgICBzY3JlZW5zaG90OiBzdHJpbmdbXTtcbiAgICBwcmljZTogbnVtYmVyO1xuICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgYmlsbGluZ0ZyZXF1ZW5jeTogc3RyaW5nO1xuICAgIHJlc3RyaWN0aW9uczogUmVzdHJpY3Rpb25zO1xuICAgIGFsbG93UHJpY2VOZWdvdGlhdGlvbjogYm9vbGVhbjtcbiAgICBwdWJsaWNLZXk6IHN0cmluZztcbiAgICByZXNlcnZlSWRVcmw6IHN0cmluZztcbiAgICBwdXJjaGFzZVdlYmhvb2tVcmw6IHN0cmluZztcbiAgICBhY3RpdmF0aW9uUmVxdWlyZXNBcHByb3ZhbDogYm9vbGVhbjtcbiAgICBhZGRvblB1cmNoYXNlV2ViaG9va1VybDogc3RyaW5nO1xuICAgIHVzZXJNb2RXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgYWNjb3VudE1vZFdlYmhvb2tVcmw6IHN0cmluZztcbiAgICBjb250YWN0V2ViaG9va1VybDogc3RyaW5nO1xuICAgIGZ1bGZpbGxtZW50RW1haWw6IHN0cmluZ1tdO1xuICAgIGVudHJ5VXJsOiBzdHJpbmc7XG4gICAgc2Vzc2lvblVybDogc3RyaW5nO1xuICAgIGxvZ291dFVybDogc3RyaW5nO1xuICAgIHVzZXNPcmRlckZvcm06IGJvb2xlYW47XG4gICAgb3JkZXJGb3JtOiBPcmRlckZvcm07XG4gICAgcmVzZWxsZXJNYXJrZXRpbmc6IE1hcmtldGluZ0luZm9ybWF0aW9uO1xuICAgIGVuZFVzZXJNYXJrZXRpbmc6IE1hcmtldGluZ0luZm9ybWF0aW9uO1xuICAgIHByZXZlbnRQcmljZUNvbnZlcnNpb25CZXR3ZWVuQ3VycmVuY2llczogYm9vbGVhbjtcbiAgICBwYXJ0bmVyU2V0dGluZ3NXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgc3VnZ2VzdGVkUmV0YWlsUHJpY2U6IG51bWJlcjtcbiAgICBjb3VudHJ5OiBQZXJtaXNzaW9uTGlzdHM7XG4gICAgY29tbWl0bWVudDogQ29tbWl0bWVudDtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICB2ZW5kb3JJZDogc3RyaW5nO1xuICAgIGN1c3RvbUFwcElkOiBzdHJpbmc7XG4gICAgbXVsdGlwbGVBY3RpdmF0aW9uczogYm9vbGVhbjtcbiAgICB1c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmw6IGJvb2xlYW47XG4gICAgdXNlc1Jlc2VsbGVyTWFya2V0aW5nOiBib29sZWFuO1xuICAgIHVzZXNJbnRlZ3JhdGlvbjogYm9vbGVhbjtcbiAgICB1c2VzRWRpdGlvbnM6IGJvb2xlYW47XG4gICAgdXNlc1Nzb0ludGVncmF0aW9uOiBib29sZWFuO1xuICAgIGRpc2NvdmVyYWJsZTogYm9vbGVhbjtcbiAgICBkaXN0cmlidXRpb25TZXR0aW5nOiBlLkRpc3RyaWJ1dGlvblNldHRpbmc7XG4gICAgb3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uVXJsOiBzdHJpbmc7XG4gICAgYWxsb3dXaGl0ZUxhYmVsaW5nOiBib29sZWFuO1xuICAgIHN0YXRlOiBlLlN0YXRlO1xuICAgIGNvc3Q6IENvc3Q7XG4gICAgc2V0dXBGZWU6IG51bWJlcjtcbiAgICB1c2VzQ3VzdG9tUHJpY2luZzogYm9vbGVhbjtcbiAgICBjdXN0b21lcldlYmhvb2tVcmw6IHN0cmluZztcbiAgICBzZW5kQ2FuY2VsYXRpb25Ob3RpZmljYXRpb25zOiBib29sZWFuO1xuICAgIGNhbmNlbGxhdGlvbldlYmhvb2tVcmw6IHN0cmluZztcbiAgICBkZWxpdmVyeU1ldGhvZDogZS5EZWxpdmVyeU1ldGhvZDtcbiAgICBzZXJ2aWNlQ2hhbmdlV2ViaG9va1VybDogc3RyaW5nO1xuICAgIGFwcExldmVsSGFzQWRtaW5EYXNoYm9hcmQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVBcHBSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlQXBwUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5sbWlDYXRlZ29yaWVzKSB7bS5sbWlDYXRlZ29yaWVzID0gcHJvdG8ubG1pQ2F0ZWdvcmllcy5tYXAoKHY6IHN0cmluZykgPT4gZW51bVN0cmluZ1RvVmFsdWU8ZS5NYXJrZXRwbGFjZUFwcExtaUxtaUNhdGVnb3JpZXM+KGUuTWFya2V0cGxhY2VBcHBMbWlMbWlDYXRlZ29yaWVzLCB2KSk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2UpIHttLnByaWNlID0gcGFyc2VJbnQocHJvdG8ucHJpY2UsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5yZXN0cmljdGlvbnMpIHttLnJlc3RyaWN0aW9ucyA9IFJlc3RyaWN0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucmVzdHJpY3Rpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5vcmRlckZvcm0pIHttLm9yZGVyRm9ybSA9IE9yZGVyRm9ybS5mcm9tUHJvdG8ocHJvdG8ub3JkZXJGb3JtKTt9XG4gICAgICAgIGlmIChwcm90by5yZXNlbGxlck1hcmtldGluZykge20ucmVzZWxsZXJNYXJrZXRpbmcgPSBNYXJrZXRpbmdJbmZvcm1hdGlvbi5mcm9tUHJvdG8ocHJvdG8ucmVzZWxsZXJNYXJrZXRpbmcpO31cbiAgICAgICAgaWYgKHByb3RvLmVuZFVzZXJNYXJrZXRpbmcpIHttLmVuZFVzZXJNYXJrZXRpbmcgPSBNYXJrZXRpbmdJbmZvcm1hdGlvbi5mcm9tUHJvdG8ocHJvdG8uZW5kVXNlck1hcmtldGluZyk7fVxuICAgICAgICBpZiAocHJvdG8uc3VnZ2VzdGVkUmV0YWlsUHJpY2UpIHttLnN1Z2dlc3RlZFJldGFpbFByaWNlID0gcGFyc2VJbnQocHJvdG8uc3VnZ2VzdGVkUmV0YWlsUHJpY2UsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5jb3VudHJ5KSB7bS5jb3VudHJ5ID0gUGVybWlzc2lvbkxpc3RzLmZyb21Qcm90byhwcm90by5jb3VudHJ5KTt9XG4gICAgICAgIGlmIChwcm90by5jb21taXRtZW50KSB7bS5jb21taXRtZW50ID0gQ29tbWl0bWVudC5mcm9tUHJvdG8ocHJvdG8uY29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uZGlzdHJpYnV0aW9uU2V0dGluZykge20uZGlzdHJpYnV0aW9uU2V0dGluZyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRGlzdHJpYnV0aW9uU2V0dGluZz4oZS5EaXN0cmlidXRpb25TZXR0aW5nLCBwcm90by5kaXN0cmlidXRpb25TZXR0aW5nKTt9XG4gICAgICAgIGlmIChwcm90by5zdGF0ZSkge20uc3RhdGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlN0YXRlPihlLlN0YXRlLCBwcm90by5zdGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uY29zdCkge20uY29zdCA9IENvc3QuZnJvbVByb3RvKHByb3RvLmNvc3QpO31cbiAgICAgICAgaWYgKHByb3RvLnNldHVwRmVlKSB7bS5zZXR1cEZlZSA9IHBhcnNlSW50KHByb3RvLnNldHVwRmVlLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uZGVsaXZlcnlNZXRob2QpIHttLmRlbGl2ZXJ5TWV0aG9kID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5EZWxpdmVyeU1ldGhvZD4oZS5EZWxpdmVyeU1ldGhvZCwgcHJvdG8uZGVsaXZlcnlNZXRob2QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmVuZG9yJ10gPSB0aGlzLnZlbmRvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YWdsaW5lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YWdsaW5lJ10gPSB0aGlzLnRhZ2xpbmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZU1vZGVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZXJ2aWNlTW9kZWwnXSA9IHRoaXMuc2VydmljZU1vZGVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxtaUNhdGVnb3JpZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xtaUNhdGVnb3JpZXMnXSA9IHRoaXMubG1pQ2F0ZWdvcmllczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pY29uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpY29uJ10gPSB0aGlzLmljb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGVhZGVySW1hZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hlYWRlckltYWdlJ10gPSB0aGlzLmhlYWRlckltYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjcmVlbnNob3QgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NjcmVlbnNob3QnXSA9IHRoaXMuc2NyZWVuc2hvdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2UnXSA9IHRoaXMucHJpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnJlbmN5J10gPSB0aGlzLmN1cnJlbmN5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJpbGxpbmdGcmVxdWVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JpbGxpbmdGcmVxdWVuY3knXSA9IHRoaXMuYmlsbGluZ0ZyZXF1ZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXN0cmljdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucmVzdHJpY3Rpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Jlc3RyaWN0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXN0cmljdGlvbnMgPyAodGhpcy5yZXN0cmljdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucmVzdHJpY3Rpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFsbG93UHJpY2VOZWdvdGlhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWxsb3dQcmljZU5lZ290aWF0aW9uJ10gPSB0aGlzLmFsbG93UHJpY2VOZWdvdGlhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wdWJsaWNLZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3B1YmxpY0tleSddID0gdGhpcy5wdWJsaWNLZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzZXJ2ZUlkVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXNlcnZlSWRVcmwnXSA9IHRoaXMucmVzZXJ2ZUlkVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnB1cmNoYXNlV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHVyY2hhc2VXZWJob29rVXJsJ10gPSB0aGlzLnB1cmNoYXNlV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3RpdmF0aW9uUmVxdWlyZXNBcHByb3ZhbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWN0aXZhdGlvblJlcXVpcmVzQXBwcm92YWwnXSA9IHRoaXMuYWN0aXZhdGlvblJlcXVpcmVzQXBwcm92YWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkb25QdXJjaGFzZVdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZG9uUHVyY2hhc2VXZWJob29rVXJsJ10gPSB0aGlzLmFkZG9uUHVyY2hhc2VXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJNb2RXZWJob29rVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VyTW9kV2ViaG9va1VybCddID0gdGhpcy51c2VyTW9kV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50TW9kV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudE1vZFdlYmhvb2tVcmwnXSA9IHRoaXMuYWNjb3VudE1vZFdlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdFdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnRhY3RXZWJob29rVXJsJ10gPSB0aGlzLmNvbnRhY3RXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bGZpbGxtZW50RW1haWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Z1bGZpbGxtZW50RW1haWwnXSA9IHRoaXMuZnVsZmlsbG1lbnRFbWFpbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRyeVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW50cnlVcmwnXSA9IHRoaXMuZW50cnlVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2Vzc2lvblVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2Vzc2lvblVybCddID0gdGhpcy5zZXNzaW9uVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvZ291dFVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG9nb3V0VXJsJ10gPSB0aGlzLmxvZ291dFVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzT3JkZXJGb3JtICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzT3JkZXJGb3JtJ10gPSB0aGlzLnVzZXNPcmRlckZvcm07fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJGb3JtICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yZGVyRm9ybSAhPT0gbnVsbCkge3RvUmV0dXJuWydvcmRlckZvcm0nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMub3JkZXJGb3JtID8gKHRoaXMub3JkZXJGb3JtIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm9yZGVyRm9ybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNlbGxlck1hcmtldGluZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5yZXNlbGxlck1hcmtldGluZyAhPT0gbnVsbCkge3RvUmV0dXJuWydyZXNlbGxlck1hcmtldGluZyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXNlbGxlck1hcmtldGluZyA/ICh0aGlzLnJlc2VsbGVyTWFya2V0aW5nIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJlc2VsbGVyTWFya2V0aW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZFVzZXJNYXJrZXRpbmcgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kVXNlck1hcmtldGluZyAhPT0gbnVsbCkge3RvUmV0dXJuWydlbmRVc2VyTWFya2V0aW5nJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZFVzZXJNYXJrZXRpbmcgPyAodGhpcy5lbmRVc2VyTWFya2V0aW5nIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVuZFVzZXJNYXJrZXRpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldmVudFByaWNlQ29udmVyc2lvbkJldHdlZW5DdXJyZW5jaWVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmV2ZW50UHJpY2VDb252ZXJzaW9uQmV0d2VlbkN1cnJlbmNpZXMnXSA9IHRoaXMucHJldmVudFByaWNlQ29udmVyc2lvbkJldHdlZW5DdXJyZW5jaWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJTZXR0aW5nc1dlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJTZXR0aW5nc1dlYmhvb2tVcmwnXSA9IHRoaXMucGFydG5lclNldHRpbmdzV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWdnZXN0ZWRSZXRhaWxQcmljZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VnZ2VzdGVkUmV0YWlsUHJpY2UnXSA9IHRoaXMuc3VnZ2VzdGVkUmV0YWlsUHJpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY291bnRyeSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb3VudHJ5ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvdW50cnknXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY291bnRyeSA/ICh0aGlzLmNvdW50cnkgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY291bnRyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21taXRtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbW1pdG1lbnQgIT09IG51bGwpIHt0b1JldHVyblsnY29tbWl0bWVudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb21taXRtZW50ID8gKHRoaXMuY29tbWl0bWVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3JJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmVuZG9ySWQnXSA9IHRoaXMudmVuZG9ySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tQXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbUFwcElkJ10gPSB0aGlzLmN1c3RvbUFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpcGxlQWN0aXZhdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpcGxlQWN0aXZhdGlvbnMnXSA9IHRoaXMubXVsdGlwbGVBY3RpdmF0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNBY3RpdmF0aW9uU3BlY2lmaWNFbnRyeVVybCddID0gdGhpcy51c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc1Jlc2VsbGVyTWFya2V0aW5nICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzUmVzZWxsZXJNYXJrZXRpbmcnXSA9IHRoaXMudXNlc1Jlc2VsbGVyTWFya2V0aW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNJbnRlZ3JhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlc0ludGVncmF0aW9uJ10gPSB0aGlzLnVzZXNJbnRlZ3JhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzRWRpdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNFZGl0aW9ucyddID0gdGhpcy51c2VzRWRpdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc1Nzb0ludGVncmF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzU3NvSW50ZWdyYXRpb24nXSA9IHRoaXMudXNlc1Nzb0ludGVncmF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc2NvdmVyYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGlzY292ZXJhYmxlJ10gPSB0aGlzLmRpc2NvdmVyYWJsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXN0cmlidXRpb25TZXR0aW5nICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkaXN0cmlidXRpb25TZXR0aW5nJ10gPSB0aGlzLmRpc3RyaWJ1dGlvblNldHRpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybCddID0gdGhpcy5vcmRlckZvcm1WYWxpZGF0b3JXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcGxpY2F0aW9uVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBsaWNhdGlvblVybCddID0gdGhpcy5hcHBsaWNhdGlvblVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbGxvd1doaXRlTGFiZWxpbmcgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FsbG93V2hpdGVMYWJlbGluZyddID0gdGhpcy5hbGxvd1doaXRlTGFiZWxpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXRlJ10gPSB0aGlzLnN0YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydjb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvc3QgPyAodGhpcy5jb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvc3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dXBGZWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NldHVwRmVlJ10gPSB0aGlzLnNldHVwRmVlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNDdXN0b21QcmljaW5nICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzQ3VzdG9tUHJpY2luZyddID0gdGhpcy51c2VzQ3VzdG9tUHJpY2luZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21lcldlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbWVyV2ViaG9va1VybCddID0gdGhpcy5jdXN0b21lcldlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VuZENhbmNlbGF0aW9uTm90aWZpY2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2VuZENhbmNlbGF0aW9uTm90aWZpY2F0aW9ucyddID0gdGhpcy5zZW5kQ2FuY2VsYXRpb25Ob3RpZmljYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbmNlbGxhdGlvbldlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbmNlbGxhdGlvbldlYmhvb2tVcmwnXSA9IHRoaXMuY2FuY2VsbGF0aW9uV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWxpdmVyeU1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVsaXZlcnlNZXRob2QnXSA9IHRoaXMuZGVsaXZlcnlNZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZUNoYW5nZVdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlcnZpY2VDaGFuZ2VXZWJob29rVXJsJ10gPSB0aGlzLnNlcnZpY2VDaGFuZ2VXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcExldmVsSGFzQWRtaW5EYXNoYm9hcmQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcExldmVsSGFzQWRtaW5EYXNoYm9hcmQnXSA9IHRoaXMuYXBwTGV2ZWxIYXNBZG1pbkRhc2hib2FyZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVWZW5kb3JSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVWZW5kb3JSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVWZW5kb3JSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlVmVuZG9yUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlVmVuZG9yUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlVmVuZG9yUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZVZlbmRvclJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB2ZW5kb3I6IEFwcFZlbmRvcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVZlbmRvclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlVmVuZG9yUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmVuZG9yKSB7bS52ZW5kb3IgPSBBcHBWZW5kb3IuZnJvbVByb3RvKHByb3RvLnZlbmRvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVZlbmRvclJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmVuZG9yICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZlbmRvciAhPT0gbnVsbCkge3RvUmV0dXJuWyd2ZW5kb3InXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudmVuZG9yID8gKHRoaXMudmVuZG9yIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZlbmRvcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVBcHBSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUFwcFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZUFwcFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHVwbGljYXRlQXBwUmVxdWVzdCBpbXBsZW1lbnRzIGkuRHVwbGljYXRlQXBwUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IER1cGxpY2F0ZUFwcFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEdXBsaWNhdGVBcHBSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EdXBsaWNhdGVBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIER1cGxpY2F0ZUFwcFJlc3BvbnNlIGltcGxlbWVudHMgaS5EdXBsaWNhdGVBcHBSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IER1cGxpY2F0ZUFwcFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRHVwbGljYXRlQXBwUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkR1cGxpY2F0ZUFwcFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEFkZG9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0QWRkb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGFkZG9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEFkZG9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFkZG9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QWRkb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZG9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZG9uSWQnXSA9IHRoaXMuYWRkb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRBcHBJREZyb21Ta3VSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRBcHBJREZyb21Ta3VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBza3U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEFwcElERnJvbVNrdVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRBcHBJREZyb21Ta3VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBcHBJREZyb21Ta3VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEFwcElERnJvbVNrdVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRBcHBJREZyb21Ta3VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBhZGRvbklkOiBzdHJpbmc7XG4gICAgZWRpdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRBcHBJREZyb21Ta3VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFwcElERnJvbVNrdVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBcHBJREZyb21Ta3VSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRvbklkJ10gPSB0aGlzLmFkZG9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZWRpdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlZGl0aW9uSWQnXSA9IHRoaXMuZWRpdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEFwcFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldEFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgZmllbGRNYXNrOiBGaWVsZE1hc2s7XG4gICAgYnlwYXNzQ2FjaGU6IGJvb2xlYW47XG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRBcHBSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QXBwUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QXBwUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ5cGFzc0NhY2hlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydieXBhc3NDYWNoZSddID0gdGhpcy5ieXBhc3NDYWNoZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbmNsdWRlRGVsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5jbHVkZURlbGV0ZWQnXSA9IHRoaXMuaW5jbHVkZURlbGV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QXBwUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEFwcFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhcHA6IE1hcmtldHBsYWNlQXBwO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXBwUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRBcHBSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hcHApIHttLmFwcCA9IE1hcmtldHBsYWNlQXBwLmZyb21Qcm90byhwcm90by5hcHApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBcHBSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hcHAgIT09IG51bGwpIHt0b1JldHVyblsnYXBwJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFwcCA/ICh0aGlzLmFwcCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hcHA7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QXBwc1RvRGVhY3RpdmF0ZVVwb25EZWFjdGl2YXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRBcHBzVG9EZWFjdGl2YXRlVXBvbkRlYWN0aXZhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkc1RvRGVhY3RpdmF0ZTogc3RyaW5nW107XG4gICAgYWN0aXZlQXBwSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEFwcHNUb0RlYWN0aXZhdGVVcG9uRGVhY3RpdmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFwcHNUb0RlYWN0aXZhdGVVcG9uRGVhY3RpdmF0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QXBwc1RvRGVhY3RpdmF0ZVVwb25EZWFjdGl2YXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWRzVG9EZWFjdGl2YXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZHNUb0RlYWN0aXZhdGUnXSA9IHRoaXMuYXBwSWRzVG9EZWFjdGl2YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGl2ZUFwcElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWN0aXZlQXBwSWRzJ10gPSB0aGlzLmFjdGl2ZUFwcElkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRBcHBzVG9EZWFjdGl2YXRlVXBvbkRlYWN0aXZhdGlvblJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRBcHBzVG9EZWFjdGl2YXRlVXBvbkRlYWN0aXZhdGlvblJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhcHBJZHNUb0JlRGVhY3RpdmF0ZWQ6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXBwc1RvRGVhY3RpdmF0ZVVwb25EZWFjdGl2YXRpb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFwcHNUb0RlYWN0aXZhdGVVcG9uRGVhY3RpdmF0aW9uUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEFwcHNUb0RlYWN0aXZhdGVVcG9uRGVhY3RpdmF0aW9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZHNUb0JlRGVhY3RpdmF0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkc1RvQmVEZWFjdGl2YXRlZCddID0gdGhpcy5hcHBJZHNUb0JlRGVhY3RpdmF0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QXBwc1dpdGhVbnB1Ymxpc2hlZENoYW5nZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRBcHBzV2l0aFVucHVibGlzaGVkQ2hhbmdlc1JlcXVlc3RJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXBwc1dpdGhVbnB1Ymxpc2hlZENoYW5nZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QXBwc1dpdGhVbnB1Ymxpc2hlZENoYW5nZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRBcHBzV2l0aFVucHVibGlzaGVkQ2hhbmdlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRBcHBzV2l0aFVucHVibGlzaGVkQ2hhbmdlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRBcHBzV2l0aFVucHVibGlzaGVkQ2hhbmdlc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhcHBJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QXBwc1dpdGhVbnB1Ymxpc2hlZENoYW5nZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFwcHNXaXRoVW5wdWJsaXNoZWRDaGFuZ2VzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEFwcHNXaXRoVW5wdWJsaXNoZWRDaGFuZ2VzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkcyddID0gdGhpcy5hcHBJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QnlQYXJ0bmVySURSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRCeVBhcnRuZXJJRFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QnlQYXJ0bmVySURSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QnlQYXJ0bmVySURSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRCeVBhcnRuZXJJRFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QnlQYXJ0bmVySURSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0QnlQYXJ0bmVySURSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdmVuZG9yOiBBcHBWZW5kb3I7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRCeVBhcnRuZXJJRFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QnlQYXJ0bmVySURSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52ZW5kb3IpIHttLnZlbmRvciA9IEFwcFZlbmRvci5mcm9tUHJvdG8ocHJvdG8udmVuZG9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QnlQYXJ0bmVySURSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52ZW5kb3IgIT09IG51bGwpIHt0b1JldHVyblsndmVuZG9yJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZlbmRvciA/ICh0aGlzLnZlbmRvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52ZW5kb3I7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aUFwcFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmdbXTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQXBwUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlBcHBSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlBcHBSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXBwczogTWFya2V0cGxhY2VBcHBbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQXBwUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUFwcFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcHMpIHttLmFwcHMgPSBwcm90by5hcHBzLm1hcChNYXJrZXRwbGFjZUFwcC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUFwcFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hcHBzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FwcHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwcyA/ICh0aGlzLmFwcHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXBwczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aU9yZGVyRm9ybXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aU9yZGVyRm9ybXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBhcHBJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlPcmRlckZvcm1zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpT3JkZXJGb3Jtc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpT3JkZXJGb3Jtc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZHMnXSA9IHRoaXMuYXBwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpT3JkZXJGb3Jtc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgb3JkZXJGb3JtQ29udGFpbmVyOiBHZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZU9yZGVyRm9ybUNvbnRhaW5lcltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5vcmRlckZvcm1Db250YWluZXIpIHttLm9yZGVyRm9ybUNvbnRhaW5lciA9IHByb3RvLm9yZGVyRm9ybUNvbnRhaW5lci5tYXAoR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2VPcmRlckZvcm1Db250YWluZXIuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmRlckZvcm1Db250YWluZXIgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JkZXJGb3JtQ29udGFpbmVyICE9PSBudWxsKSB7dG9SZXR1cm5bJ29yZGVyRm9ybUNvbnRhaW5lciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcmRlckZvcm1Db250YWluZXIgPyAodGhpcy5vcmRlckZvcm1Db250YWluZXIgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3JkZXJGb3JtQ29udGFpbmVyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUHJvZHVjdENvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aVByb2R1Y3RDb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG4gICAgYXBwSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpUHJvZHVjdENvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlQcm9kdWN0Q29zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpUHJvZHVjdENvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWRzJ10gPSB0aGlzLmFwcElkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpUHJvZHVjdENvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcHJvZHVjdENvc3Q6IHtba2V5OiBzdHJpbmddOiBQcm9kdWN0Q29zdH07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHJvZHVjdENvc3QpIHttLnByb2R1Y3RDb3N0ID0gT2JqZWN0LmtleXMocHJvdG8ucHJvZHVjdENvc3QpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gUHJvZHVjdENvc3QuZnJvbVByb3RvKHByb3RvLnByb2R1Y3RDb3N0W2tdKTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVByb2R1Y3RDb3N0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9kdWN0Q29zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9kdWN0Q29zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydwcm9kdWN0Q29zdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcm9kdWN0Q29zdCA/ICh0aGlzLnByb2R1Y3RDb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnByb2R1Y3RDb3N0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpVmVuZG9yUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlWZW5kb3JSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlWZW5kb3JSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlWZW5kb3JSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVZlbmRvclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkcyddID0gdGhpcy5pZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlWZW5kb3JSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlWZW5kb3JSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdmVuZG9yczogQXBwVmVuZG9yW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVZlbmRvclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlWZW5kb3JSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52ZW5kb3JzKSB7bS52ZW5kb3JzID0gcHJvdG8udmVuZG9ycy5tYXAoQXBwVmVuZG9yLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpVmVuZG9yUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3JzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZlbmRvcnMgIT09IG51bGwpIHt0b1JldHVyblsndmVuZG9ycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52ZW5kb3JzID8gKHRoaXMudmVuZG9ycyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52ZW5kb3JzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRPd25lZEFwcElEc0J5UGFydG5lcklEUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRPd25lZEFwcElEc0J5UGFydG5lcklEUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRPd25lZEFwcElEc0J5UGFydG5lcklEUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRPd25lZEFwcElEc0J5UGFydG5lcklEUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXBwSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE93bmVkQXBwSURzQnlQYXJ0bmVySURSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0T3duZWRBcHBJRHNCeVBhcnRuZXJJRFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZHMnXSA9IHRoaXMuYXBwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFB1YmxpY0tleXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRQdWJsaWNLZXlzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFB1YmxpY0tleXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UHVibGljS2V5c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFB1YmxpY0tleXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFB1YmxpY0tleXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0UHVibGljS2V5c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwdWJsaWNLZXk6IHN0cmluZztcbiAgICBpZGVudGlmaWVkUHVibGljS2V5czogSWRlbnRpZmllZFB1YmxpY0tleVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0UHVibGljS2V5c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UHVibGljS2V5c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmlkZW50aWZpZWRQdWJsaWNLZXlzKSB7bS5pZGVudGlmaWVkUHVibGljS2V5cyA9IHByb3RvLmlkZW50aWZpZWRQdWJsaWNLZXlzLm1hcChJZGVudGlmaWVkUHVibGljS2V5LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFB1YmxpY0tleXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnB1YmxpY0tleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHVibGljS2V5J10gPSB0aGlzLnB1YmxpY0tleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZGVudGlmaWVkUHVibGljS2V5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pZGVudGlmaWVkUHVibGljS2V5cyAhPT0gbnVsbCkge3RvUmV0dXJuWydpZGVudGlmaWVkUHVibGljS2V5cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pZGVudGlmaWVkUHVibGljS2V5cyA/ICh0aGlzLmlkZW50aWZpZWRQdWJsaWNLZXlzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmlkZW50aWZpZWRQdWJsaWNLZXlzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNTT1VybHNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRTU09VcmxzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNTT1VybHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U1NPVXJsc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFNTT1VybHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNTT1VybHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0U1NPVXJsc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBlbnRyeVVybDogc3RyaW5nO1xuICAgIHNlc3Npb25Vcmw6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNTT1VybHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFNTT1VybHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U1NPVXJsc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW50cnlVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VudHJ5VXJsJ10gPSB0aGlzLmVudHJ5VXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlc3Npb25VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Nlc3Npb25VcmwnXSA9IHRoaXMuc2Vzc2lvblVybDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlIGltcGxlbWVudHMgaS5DYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZhbGlkQXBwSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENhbkFjdGl2YXRlUmVzcG9uc2VJbnZhbGlkUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DYW5BY3RpdmF0ZVJlc3BvbnNlSW52YWxpZFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52YWxpZEFwcElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52YWxpZEFwcElkcyddID0gdGhpcy5pbnZhbGlkQXBwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlcXVlc3QgaW1wbGVtZW50cyBpLklzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSXNWZW5kb3JEaXN0cmlidXRlZEJ5UGFydG5lcklEUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IElzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXNWZW5kb3JEaXN0cmlidXRlZEJ5UGFydG5lcklEUmVzcG9uc2UgaW1wbGVtZW50cyBpLklzVmVuZG9yRGlzdHJpYnV0ZWRCeVBhcnRuZXJJRFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpc0Rpc3RyaWJ1dGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSXNWZW5kb3JEaXN0cmlidXRlZEJ5UGFydG5lcklEUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBJc1ZlbmRvckRpc3RyaWJ1dGVkQnlQYXJ0bmVySURSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSXNWZW5kb3JEaXN0cmlidXRlZEJ5UGFydG5lcklEUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0Rpc3RyaWJ1dGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0Rpc3RyaWJ1dGVkJ10gPSB0aGlzLmlzRGlzdHJpYnV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEFkZG9uc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RBZGRvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QWRkb25zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RBZGRvbnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RBZGRvbnNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEFwcHJvdmVkQWRkb25zUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdEFwcHJvdmVkQWRkb25zUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGFwcElkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXBwcm92ZWRBZGRvbnNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEFwcHJvdmVkQWRkb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXBwcm92ZWRBZGRvbnNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZHMnXSA9IHRoaXMuYXBwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBcHBzUmVxdWVzdExpc3RBcHBzRmlsdGVyIGltcGxlbWVudHMgaS5MaXN0QXBwc1JlcXVlc3RMaXN0QXBwc0ZpbHRlckludGVyZmFjZSB7XG4gICAgYXBwVHlwZTogZS5BcHBUeXBlO1xuICAgIHJlbGVhc2VUeXBlOiBlLlJlbGVhc2VUeXBlO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGZpbHRlclRlcm06IHN0cmluZztcbiAgICBzdGF0ZTogZS5TdGF0ZUZpbHRlck9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXBwc1JlcXVlc3RMaXN0QXBwc0ZpbHRlciB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RBcHBzUmVxdWVzdExpc3RBcHBzRmlsdGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcFR5cGUpIHttLmFwcFR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkFwcFR5cGU+KGUuQXBwVHlwZSwgcHJvdG8uYXBwVHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ucmVsZWFzZVR5cGUpIHttLnJlbGVhc2VUeXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5SZWxlYXNlVHlwZT4oZS5SZWxlYXNlVHlwZSwgcHJvdG8ucmVsZWFzZVR5cGUpO31cbiAgICAgICAgaWYgKHByb3RvLnN0YXRlKSB7bS5zdGF0ZSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuU3RhdGVGaWx0ZXJPcHRpb25zPihlLlN0YXRlRmlsdGVyT3B0aW9ucywgcHJvdG8uc3RhdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXBwc1JlcXVlc3RMaXN0QXBwc0ZpbHRlckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcFR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcFR5cGUnXSA9IHRoaXMuYXBwVHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWxlYXNlVHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVsZWFzZVR5cGUnXSA9IHRoaXMucmVsZWFzZVR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlclRlcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZpbHRlclRlcm0nXSA9IHRoaXMuZmlsdGVyVGVybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdGUnXSA9IHRoaXMuc3RhdGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEFwcHNGb3JWZW5kb3JJRHNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0QXBwc0ZvclZlbmRvcklEc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHZlbmRvcklkczogc3RyaW5nW107XG4gICAgaW5jbHVkZUFkZG9uczogYm9vbGVhbjtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEFwcHNGb3JWZW5kb3JJRHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEFwcHNGb3JWZW5kb3JJRHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RBcHBzRm9yVmVuZG9ySURzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvcklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmVuZG9ySWRzJ10gPSB0aGlzLnZlbmRvcklkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbmNsdWRlQWRkb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbmNsdWRlQWRkb25zJ10gPSB0aGlzLmluY2x1ZGVBZGRvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYWdlU2l6ZSddID0gdGhpcy5wYWdlU2l6ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBcHBzRm9yVmVuZG9ySURzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RBcHBzRm9yVmVuZG9ySURzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFwcHM6IE1hcmtldHBsYWNlQXBwW107XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RBcHBzRm9yVmVuZG9ySURzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0QXBwc0ZvclZlbmRvcklEc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFwcHMpIHttLmFwcHMgPSBwcm90by5hcHBzLm1hcChNYXJrZXRwbGFjZUFwcC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXBwc0ZvclZlbmRvcklEc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hcHBzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FwcHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwcyA/ICh0aGlzLmFwcHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXBwczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzTW9yZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzTW9yZSddID0gdGhpcy5oYXNNb3JlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBcHBzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdEFwcHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIGZpbHRlcjogTGlzdEFwcHNSZXF1ZXN0TGlzdEFwcHNGaWx0ZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXBwc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0QXBwc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXIpIHttLmZpbHRlciA9IExpc3RBcHBzUmVxdWVzdExpc3RBcHBzRmlsdGVyLmZyb21Qcm90byhwcm90by5maWx0ZXIpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXBwc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVyICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpbHRlciAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXInXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVyID8gKHRoaXMuZmlsdGVyIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNGaWx0ZXJzIGltcGxlbWVudHMgaS5MaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBzZWFyY2hUZXJtOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNGaWx0ZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzRmlsdGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzRmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlYXJjaFRlcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlYXJjaFRlcm0nXSA9IHRoaXMuc2VhcmNoVGVybTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB2ZW5kb3JJZDogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgZmlsdGVyczogTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzRmlsdGVycztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RSZXF1aXJlZEFwcFN1bW1hcmllc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2ZW5kb3JJZCddID0gdGhpcy52ZW5kb3JJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RSZXF1aXJlZEFwcFN1bW1hcmllc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICByZXF1aXJlZEFwcFN1bW1hcmllczogUmVxdWlyZWRBcHBTdW1tYXJ5W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UmVxdWlyZWRBcHBTdW1tYXJpZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RSZXF1aXJlZEFwcFN1bW1hcmllc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnJlcXVpcmVkQXBwU3VtbWFyaWVzKSB7bS5yZXF1aXJlZEFwcFN1bW1hcmllcyA9IHByb3RvLnJlcXVpcmVkQXBwU3VtbWFyaWVzLm1hcChSZXF1aXJlZEFwcFN1bW1hcnkuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFJlcXVpcmVkQXBwU3VtbWFyaWVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXF1aXJlZEFwcFN1bW1hcmllcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5yZXF1aXJlZEFwcFN1bW1hcmllcyAhPT0gbnVsbCkge3RvUmV0dXJuWydyZXF1aXJlZEFwcFN1bW1hcmllcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXF1aXJlZEFwcFN1bW1hcmllcyA/ICh0aGlzLnJlcXVpcmVkQXBwU3VtbWFyaWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJlcXVpcmVkQXBwU3VtbWFyaWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFZlbmRvckZpbHRlcnMgaW1wbGVtZW50cyBpLkxpc3RWZW5kb3JGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBzZWFyY2hUZXJtOiBzdHJpbmc7XG4gICAgaXNJbnZvaWNlZDogYm9vbGVhbjtcbiAgICBkaXN0cmlidXRpb25TdGF0dXNlczogZS5WZW5kb3JEaXN0cmlidXRpb25TdGF0dXNbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RWZW5kb3JGaWx0ZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFZlbmRvckZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZGlzdHJpYnV0aW9uU3RhdHVzZXMpIHttLmRpc3RyaWJ1dGlvblN0YXR1c2VzID0gcHJvdG8uZGlzdHJpYnV0aW9uU3RhdHVzZXMubWFwKCh2OiBzdHJpbmcpID0+IGVudW1TdHJpbmdUb1ZhbHVlPGUuVmVuZG9yRGlzdHJpYnV0aW9uU3RhdHVzPihlLlZlbmRvckRpc3RyaWJ1dGlvblN0YXR1cywgdikpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0VmVuZG9yRmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlYXJjaFRlcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlYXJjaFRlcm0nXSA9IHRoaXMuc2VhcmNoVGVybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0ludm9pY2VkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0ludm9pY2VkJ10gPSB0aGlzLmlzSW52b2ljZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzdHJpYnV0aW9uU3RhdHVzZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rpc3RyaWJ1dGlvblN0YXR1c2VzJ10gPSB0aGlzLmRpc3RyaWJ1dGlvblN0YXR1c2VzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RWZW5kb3JSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0VmVuZG9yUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBmaWx0ZXJzOiBMaXN0VmVuZG9yRmlsdGVycztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RWZW5kb3JSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFZlbmRvclJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gTGlzdFZlbmRvckZpbHRlcnMuZnJvbVByb3RvKHByb3RvLmZpbHRlcnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0VmVuZG9yUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0VmVuZG9yUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RWZW5kb3JSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdmVuZG9yczogQXBwVmVuZG9yW107XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgICB0b3RhbFJlc3VsdHM6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RWZW5kb3JSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RWZW5kb3JSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52ZW5kb3JzKSB7bS52ZW5kb3JzID0gcHJvdG8udmVuZG9ycy5tYXAoQXBwVmVuZG9yLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8udG90YWxSZXN1bHRzKSB7bS50b3RhbFJlc3VsdHMgPSBwYXJzZUludChwcm90by50b3RhbFJlc3VsdHMsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFZlbmRvclJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmVuZG9ycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52ZW5kb3JzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZlbmRvcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudmVuZG9ycyA/ICh0aGlzLnZlbmRvcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmVuZG9yczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzTW9yZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzTW9yZSddID0gdGhpcy5oYXNNb3JlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvdGFsUmVzdWx0cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndG90YWxSZXN1bHRzJ10gPSB0aGlzLnRvdGFsUmVzdWx0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZU9yZGVyRm9ybUNvbnRhaW5lciBpbXBsZW1lbnRzIGkuR2V0TXVsdGlPcmRlckZvcm1zUmVzcG9uc2VPcmRlckZvcm1Db250YWluZXJJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgb3JkZXJGb3JtOiBPcmRlckZvcm07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZU9yZGVyRm9ybUNvbnRhaW5lciB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpT3JkZXJGb3Jtc1Jlc3BvbnNlT3JkZXJGb3JtQ29udGFpbmVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm9yZGVyRm9ybSkge20ub3JkZXJGb3JtID0gT3JkZXJGb3JtLmZyb21Qcm90byhwcm90by5vcmRlckZvcm0pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aU9yZGVyRm9ybXNSZXNwb25zZU9yZGVyRm9ybUNvbnRhaW5lckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmRlckZvcm0gIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JkZXJGb3JtICE9PSBudWxsKSB7dG9SZXR1cm5bJ29yZGVyRm9ybSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcmRlckZvcm0gPyAodGhpcy5vcmRlckZvcm0gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3JkZXJGb3JtO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhZ2VkQXBwUmVzcG9uc2UgaW1wbGVtZW50cyBpLlBhZ2VkQXBwUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFwcHM6IE1hcmtldHBsYWNlQXBwW107XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUGFnZWRBcHBSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFBhZ2VkQXBwUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYXBwcykge20uYXBwcyA9IHByb3RvLmFwcHMubWFwKE1hcmtldHBsYWNlQXBwLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFnZWRBcHBSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXBwcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHBzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFwcHMgPyAodGhpcy5hcHBzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYWdlU2l6ZSddID0gdGhpcy5wYWdlU2l6ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlQcm9kdWN0Q29zdFJlc3BvbnNlUHJvZHVjdENvc3RFbnRyeSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlQcm9kdWN0Q29zdFJlc3BvbnNlUHJvZHVjdENvc3RFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IFByb2R1Y3RDb3N0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlQcm9kdWN0Q29zdFJlc3BvbnNlUHJvZHVjdENvc3RFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpUHJvZHVjdENvc3RSZXNwb25zZVByb2R1Y3RDb3N0RW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gUHJvZHVjdENvc3QuZnJvbVByb3RvKHByb3RvLnZhbHVlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlQcm9kdWN0Q29zdFJlc3BvbnNlUHJvZHVjdENvc3RFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2YWx1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFB1Ymxpc2hBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5QdWJsaXNoQXBwUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFB1Ymxpc2hBcHBSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUHVibGlzaEFwcFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlB1Ymxpc2hBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUFwcElEUmVxdWVzdCBpbXBsZW1lbnRzIGkuUmVtb3ZlQXBwSURSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGFwcElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBSZW1vdmVBcHBJRFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZW1vdmVBcHBJRFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlbW92ZUFwcElEUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVtb3ZlQXBwSURSZXNwb25zZSBpbXBsZW1lbnRzIGkuUmVtb3ZlQXBwSURSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdmVuZG9yOiBBcHBWZW5kb3I7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBSZW1vdmVBcHBJRFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVtb3ZlQXBwSURSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52ZW5kb3IpIHttLnZlbmRvciA9IEFwcFZlbmRvci5mcm9tUHJvdG8ocHJvdG8udmVuZG9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmVtb3ZlQXBwSURSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZlbmRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52ZW5kb3IgIT09IG51bGwpIHt0b1JldHVyblsndmVuZG9yJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZlbmRvciA/ICh0aGlzLnZlbmRvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52ZW5kb3I7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVxdWVzdEFwcFJldmlld1JlcXVlc3QgaW1wbGVtZW50cyBpLlJlcXVlc3RBcHBSZXZpZXdSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVxdWVzdEFwcFJldmlld1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZXF1ZXN0QXBwUmV2aWV3UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmVxdWVzdEFwcFJldmlld1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVxdWlyZWRBcHBTdW1tYXJ5IGltcGxlbWVudHMgaS5SZXF1aXJlZEFwcFN1bW1hcnlJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGljb25Vcmw6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlcXVpcmVkQXBwU3VtbWFyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IFJlcXVpcmVkQXBwU3VtbWFyeSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmVxdWlyZWRBcHBTdW1tYXJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pY29uVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpY29uVXJsJ10gPSB0aGlzLmljb25Vcmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzdG9yZUFwcFJlcXVlc3QgaW1wbGVtZW50cyBpLlJlc3RvcmVBcHBSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVzdG9yZUFwcFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZXN0b3JlQXBwUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmVzdG9yZUFwcFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FuQWN0aXZhdGVSZXNwb25zZVN1Y2Nlc3NSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ2FuQWN0aXZhdGVSZXNwb25zZVN1Y2Nlc3NSZXNwb25zZUludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDYW5BY3RpdmF0ZVJlc3BvbnNlU3VjY2Vzc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ2FuQWN0aXZhdGVSZXNwb25zZVN1Y2Nlc3NSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2FuQWN0aXZhdGVSZXNwb25zZVN1Y2Nlc3NSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1c3BlbmRBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5TdXNwZW5kQXBwUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFN1c3BlbmRBcHBSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU3VzcGVuZEFwcFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlN1c3BlbmRBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuYXBwcm92ZUFkZG9uUmVxdWVzdCBpbXBsZW1lbnRzIGkuVW5hcHByb3ZlQWRkb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGFkZG9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVuYXBwcm92ZUFkZG9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVuYXBwcm92ZUFkZG9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVW5hcHByb3ZlQWRkb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZG9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZG9uSWQnXSA9IHRoaXMuYWRkb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFwcHJvdmVBcHBSZXF1ZXN0IGltcGxlbWVudHMgaS5VbmFwcHJvdmVBcHBSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVW5hcHByb3ZlQXBwUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVuYXBwcm92ZUFwcFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVuYXBwcm92ZUFwcFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5zdXNwZW5kQXBwUmVxdWVzdCBpbXBsZW1lbnRzIGkuVW5zdXNwZW5kQXBwUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVuc3VzcGVuZEFwcFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVbnN1c3BlbmRBcHBSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VbnN1c3BlbmRBcHBSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUFwcEFwcHJvdmFsQW5kQmlsbGluZ1NldHRpbmdzUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQXBwQXBwcm92YWxBbmRCaWxsaW5nU2V0dGluZ3NSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGFwcHJvdmFsUHJvY2VzczogZS5BcHByb3ZhbFByb2Nlc3M7XG4gICAgYmlsbGluZ1Byb2Nlc3M6IGUuQmlsbGluZ1Byb2Nlc3M7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVBcHBBcHByb3ZhbEFuZEJpbGxpbmdTZXR0aW5nc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVBcHBBcHByb3ZhbEFuZEJpbGxpbmdTZXR0aW5nc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYXBwcm92YWxQcm9jZXNzKSB7bS5hcHByb3ZhbFByb2Nlc3MgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkFwcHJvdmFsUHJvY2Vzcz4oZS5BcHByb3ZhbFByb2Nlc3MsIHByb3RvLmFwcHJvdmFsUHJvY2Vzcyk7fVxuICAgICAgICBpZiAocHJvdG8uYmlsbGluZ1Byb2Nlc3MpIHttLmJpbGxpbmdQcm9jZXNzID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5CaWxsaW5nUHJvY2Vzcz4oZS5CaWxsaW5nUHJvY2VzcywgcHJvdG8uYmlsbGluZ1Byb2Nlc3MpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVBcHBBcHByb3ZhbEFuZEJpbGxpbmdTZXR0aW5nc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwcm92YWxQcm9jZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHByb3ZhbFByb2Nlc3MnXSA9IHRoaXMuYXBwcm92YWxQcm9jZXNzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJpbGxpbmdQcm9jZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydiaWxsaW5nUHJvY2VzcyddID0gdGhpcy5iaWxsaW5nUHJvY2Vzczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVBcHBDYXRlZ29yaWVzUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQXBwQ2F0ZWdvcmllc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQXBwQ2F0ZWdvcmllc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVBcHBDYXRlZ29yaWVzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQXBwQ2F0ZWdvcmllc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2F0ZWdvcnlJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhdGVnb3J5SWRzJ10gPSB0aGlzLmNhdGVnb3J5SWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUFwcEZ1bGZpbGxtZW50SW50ZWdyYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVBcHBGdWxmaWxsbWVudEludGVncmF0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICB1c2VzRnVsZmlsbG1lbnRJbnRlZ3JhdGlvbjogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUFwcEZ1bGZpbGxtZW50SW50ZWdyYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXBwRnVsZmlsbG1lbnRJbnRlZ3JhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUFwcEZ1bGZpbGxtZW50SW50ZWdyYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNGdWxmaWxsbWVudEludGVncmF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzRnVsZmlsbG1lbnRJbnRlZ3JhdGlvbiddID0gdGhpcy51c2VzRnVsZmlsbG1lbnRJbnRlZ3JhdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVBcHBHZW5lcmFsSW5mb3JtYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVBcHBHZW5lcmFsSW5mb3JtYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2ZW5kb3I6IHN0cmluZztcbiAgICB0YWdsaW5lOiBzdHJpbmc7XG4gICAgc2VydmljZU1vZGVsOiBzdHJpbmdbXTtcbiAgICBsbWlDYXRlZ29yaWVzOiBlLk1hcmtldHBsYWNlQXBwTG1pTG1pQ2F0ZWdvcmllc1tdO1xuICAgIGljb246IHN0cmluZztcbiAgICBoZWFkZXJJbWFnZTogc3RyaW5nO1xuICAgIHNjcmVlbnNob3Q6IHN0cmluZ1tdO1xuICAgIHByaWNlOiBudW1iZXI7XG4gICAgY3VycmVuY3k6IHN0cmluZztcbiAgICBiaWxsaW5nRnJlcXVlbmN5OiBzdHJpbmc7XG4gICAgcmVzdHJpY3Rpb25zOiBSZXN0cmljdGlvbnM7XG4gICAgYWxsb3dQcmljZU5lZ290aWF0aW9uOiBib29sZWFuO1xuICAgIGdkcHJDb21wbGlhbnQ6IGJvb2xlYW47XG4gICAgZmllbGRNYXNrOiBGaWVsZE1hc2s7XG4gICAgcHJldmVudFByaWNlQ29udmVyc2lvbkJldHdlZW5DdXJyZW5jaWVzOiBib29sZWFuO1xuICAgIHN1Z2dlc3RlZFJldGFpbFByaWNlOiBudW1iZXI7XG4gICAgY291bnRyeTogUGVybWlzc2lvbkxpc3RzO1xuICAgIGNvbW1pdG1lbnQ6IENvbW1pdG1lbnQ7XG4gICAgbXVsdGlwbGVBY3RpdmF0aW9uczogYm9vbGVhbjtcbiAgICB1c2VzRWRpdGlvbnM6IGJvb2xlYW47XG4gICAgZGlzY292ZXJhYmxlOiBib29sZWFuO1xuICAgIGVkaXRpb25JZHM6IHN0cmluZ1tdO1xuICAgIHN0YXRlOiBlLlN0YXRlO1xuICAgIGNvc3Q6IENvc3Q7XG4gICAgc2V0dXBGZWU6IG51bWJlcjtcbiAgICB1c2VzQ3VzdG9tUHJpY2luZzogYm9vbGVhbjtcbiAgICBkZWxpdmVyeU1ldGhvZDogZS5EZWxpdmVyeU1ldGhvZDtcbiAgICBjYXRlZ29yaWVzOiBzdHJpbmdbXTtcbiAgICBmZWVzOiBGZWVbXTtcbiAgICBzdWdnZXN0ZWRSZXRhaWxTZXR1cEZlZTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQXBwR2VuZXJhbEluZm9ybWF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUFwcEdlbmVyYWxJbmZvcm1hdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubG1pQ2F0ZWdvcmllcykge20ubG1pQ2F0ZWdvcmllcyA9IHByb3RvLmxtaUNhdGVnb3JpZXMubWFwKCh2OiBzdHJpbmcpID0+IGVudW1TdHJpbmdUb1ZhbHVlPGUuTWFya2V0cGxhY2VBcHBMbWlMbWlDYXRlZ29yaWVzPihlLk1hcmtldHBsYWNlQXBwTG1pTG1pQ2F0ZWdvcmllcywgdikpO31cbiAgICAgICAgaWYgKHByb3RvLnByaWNlKSB7bS5wcmljZSA9IHBhcnNlSW50KHByb3RvLnByaWNlLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8ucmVzdHJpY3Rpb25zKSB7bS5yZXN0cmljdGlvbnMgPSBSZXN0cmljdGlvbnMuZnJvbVByb3RvKHByb3RvLnJlc3RyaWN0aW9ucyk7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICBpZiAocHJvdG8uc3VnZ2VzdGVkUmV0YWlsUHJpY2UpIHttLnN1Z2dlc3RlZFJldGFpbFByaWNlID0gcGFyc2VJbnQocHJvdG8uc3VnZ2VzdGVkUmV0YWlsUHJpY2UsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5jb3VudHJ5KSB7bS5jb3VudHJ5ID0gUGVybWlzc2lvbkxpc3RzLmZyb21Qcm90byhwcm90by5jb3VudHJ5KTt9XG4gICAgICAgIGlmIChwcm90by5jb21taXRtZW50KSB7bS5jb21taXRtZW50ID0gQ29tbWl0bWVudC5mcm9tUHJvdG8ocHJvdG8uY29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uc3RhdGUpIHttLnN0YXRlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5TdGF0ZT4oZS5TdGF0ZSwgcHJvdG8uc3RhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLmNvc3QpIHttLmNvc3QgPSBDb3N0LmZyb21Qcm90byhwcm90by5jb3N0KTt9XG4gICAgICAgIGlmIChwcm90by5zZXR1cEZlZSkge20uc2V0dXBGZWUgPSBwYXJzZUludChwcm90by5zZXR1cEZlZSwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmRlbGl2ZXJ5TWV0aG9kKSB7bS5kZWxpdmVyeU1ldGhvZCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRGVsaXZlcnlNZXRob2Q+KGUuRGVsaXZlcnlNZXRob2QsIHByb3RvLmRlbGl2ZXJ5TWV0aG9kKTt9XG4gICAgICAgIGlmIChwcm90by5mZWVzKSB7bS5mZWVzID0gcHJvdG8uZmVlcy5tYXAoRmVlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uc3VnZ2VzdGVkUmV0YWlsU2V0dXBGZWUpIHttLnN1Z2dlc3RlZFJldGFpbFNldHVwRmVlID0gcGFyc2VJbnQocHJvdG8uc3VnZ2VzdGVkUmV0YWlsU2V0dXBGZWUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQXBwR2VuZXJhbEluZm9ybWF0aW9uUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmVuZG9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2ZW5kb3InXSA9IHRoaXMudmVuZG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhZ2xpbmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RhZ2xpbmUnXSA9IHRoaXMudGFnbGluZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXJ2aWNlTW9kZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlcnZpY2VNb2RlbCddID0gdGhpcy5zZXJ2aWNlTW9kZWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG1pQ2F0ZWdvcmllcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG1pQ2F0ZWdvcmllcyddID0gdGhpcy5sbWlDYXRlZ29yaWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmljb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ljb24nXSA9IHRoaXMuaWNvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oZWFkZXJJbWFnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGVhZGVySW1hZ2UnXSA9IHRoaXMuaGVhZGVySW1hZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2NyZWVuc2hvdCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2NyZWVuc2hvdCddID0gdGhpcy5zY3JlZW5zaG90O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmljZSddID0gdGhpcy5wcmljZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJyZW5jeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3knXSA9IHRoaXMuY3VycmVuY3k7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYmlsbGluZ0ZyZXF1ZW5jeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYmlsbGluZ0ZyZXF1ZW5jeSddID0gdGhpcy5iaWxsaW5nRnJlcXVlbmN5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc3RyaWN0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5yZXN0cmljdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncmVzdHJpY3Rpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnJlc3RyaWN0aW9ucyA/ICh0aGlzLnJlc3RyaWN0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5yZXN0cmljdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWxsb3dQcmljZU5lZ290aWF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhbGxvd1ByaWNlTmVnb3RpYXRpb24nXSA9IHRoaXMuYWxsb3dQcmljZU5lZ290aWF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdkcHJDb21wbGlhbnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dkcHJDb21wbGlhbnQnXSA9IHRoaXMuZ2RwckNvbXBsaWFudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXZlbnRQcmljZUNvbnZlcnNpb25CZXR3ZWVuQ3VycmVuY2llcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJldmVudFByaWNlQ29udmVyc2lvbkJldHdlZW5DdXJyZW5jaWVzJ10gPSB0aGlzLnByZXZlbnRQcmljZUNvbnZlcnNpb25CZXR3ZWVuQ3VycmVuY2llczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWdnZXN0ZWRSZXRhaWxQcmljZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VnZ2VzdGVkUmV0YWlsUHJpY2UnXSA9IHRoaXMuc3VnZ2VzdGVkUmV0YWlsUHJpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY291bnRyeSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb3VudHJ5ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvdW50cnknXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY291bnRyeSA/ICh0aGlzLmNvdW50cnkgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY291bnRyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21taXRtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbW1pdG1lbnQgIT09IG51bGwpIHt0b1JldHVyblsnY29tbWl0bWVudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb21taXRtZW50ID8gKHRoaXMuY29tbWl0bWVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpcGxlQWN0aXZhdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpcGxlQWN0aXZhdGlvbnMnXSA9IHRoaXMubXVsdGlwbGVBY3RpdmF0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzRWRpdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNFZGl0aW9ucyddID0gdGhpcy51c2VzRWRpdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzY292ZXJhYmxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkaXNjb3ZlcmFibGUnXSA9IHRoaXMuZGlzY292ZXJhYmxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXRpb25JZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VkaXRpb25JZHMnXSA9IHRoaXMuZWRpdGlvbklkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdGUnXSA9IHRoaXMuc3RhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Nvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29zdCA/ICh0aGlzLmNvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR1cEZlZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2V0dXBGZWUnXSA9IHRoaXMuc2V0dXBGZWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc0N1c3RvbVByaWNpbmcgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNDdXN0b21QcmljaW5nJ10gPSB0aGlzLnVzZXNDdXN0b21QcmljaW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlbGl2ZXJ5TWV0aG9kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZWxpdmVyeU1ldGhvZCddID0gdGhpcy5kZWxpdmVyeU1ldGhvZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXRlZ29yaWVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYXRlZ29yaWVzJ10gPSB0aGlzLmNhdGVnb3JpZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmVlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5mZWVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZlZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmVlcyA/ICh0aGlzLmZlZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmVlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWdnZXN0ZWRSZXRhaWxTZXR1cEZlZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VnZ2VzdGVkUmV0YWlsU2V0dXBGZWUnXSA9IHRoaXMuc3VnZ2VzdGVkUmV0YWlsU2V0dXBGZWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlQXBwSW50ZWdyYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVBcHBJbnRlZ3JhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgcHVibGljS2V5OiBzdHJpbmc7XG4gICAgcmVzZXJ2ZUlkVXJsOiBzdHJpbmc7XG4gICAgcHVyY2hhc2VXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgYWN0aXZhdGlvblJlcXVpcmVzQXBwcm92YWw6IGJvb2xlYW47XG4gICAgYWRkb25QdXJjaGFzZVdlYmhvb2tVcmw6IHN0cmluZztcbiAgICB1c2VyTW9kV2ViaG9va1VybDogc3RyaW5nO1xuICAgIGFjY291bnRNb2RXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgY29udGFjdFdlYmhvb2tVcmw6IHN0cmluZztcbiAgICBmdWxmaWxsbWVudEVtYWlsOiBzdHJpbmdbXTtcbiAgICBwYXJ0bmVyU2V0dGluZ3NXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgcGFydG5lckNvbnRhY3RSZWNpcGllbnRzOiBDb250YWN0W107XG4gICAgdXNlc0ludGVncmF0aW9uOiBib29sZWFuO1xuICAgIG9yZGVyRm9ybVZhbGlkYXRvcldlYmhvb2tVcmw6IHN0cmluZztcbiAgICBhbGxvd1doaXRlTGFiZWxpbmc6IGJvb2xlYW47XG4gICAgY3VzdG9tZXJXZWJob29rVXJsOiBzdHJpbmc7XG4gICAgc2VuZENhbmNlbGF0aW9uTm90aWZpY2F0aW9uczogYm9vbGVhbjtcbiAgICBjYW5jZWxsYXRpb25XZWJob29rVXJsOiBzdHJpbmc7XG4gICAgc2VydmljZUNoYW5nZVdlYmhvb2tVcmw6IHN0cmluZztcbiAgICBhcHBMZXZlbEhhc0FkbWluRGFzaGJvYXJkOiBib29sZWFuO1xuICAgIGhpZGVGcm9tQ2xpZW50RGFzaGJvYXJkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQXBwSW50ZWdyYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXBwSW50ZWdyYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhcnRuZXJDb250YWN0UmVjaXBpZW50cykge20ucGFydG5lckNvbnRhY3RSZWNpcGllbnRzID0gcHJvdG8ucGFydG5lckNvbnRhY3RSZWNpcGllbnRzLm1hcChDb250YWN0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUFwcEludGVncmF0aW9uUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhcHBJZCddID0gdGhpcy5hcHBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wdWJsaWNLZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3B1YmxpY0tleSddID0gdGhpcy5wdWJsaWNLZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzZXJ2ZUlkVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXNlcnZlSWRVcmwnXSA9IHRoaXMucmVzZXJ2ZUlkVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnB1cmNoYXNlV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHVyY2hhc2VXZWJob29rVXJsJ10gPSB0aGlzLnB1cmNoYXNlV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3RpdmF0aW9uUmVxdWlyZXNBcHByb3ZhbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWN0aXZhdGlvblJlcXVpcmVzQXBwcm92YWwnXSA9IHRoaXMuYWN0aXZhdGlvblJlcXVpcmVzQXBwcm92YWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkb25QdXJjaGFzZVdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZG9uUHVyY2hhc2VXZWJob29rVXJsJ10gPSB0aGlzLmFkZG9uUHVyY2hhc2VXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJNb2RXZWJob29rVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VyTW9kV2ViaG9va1VybCddID0gdGhpcy51c2VyTW9kV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50TW9kV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudE1vZFdlYmhvb2tVcmwnXSA9IHRoaXMuYWNjb3VudE1vZFdlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdFdlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnRhY3RXZWJob29rVXJsJ10gPSB0aGlzLmNvbnRhY3RXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bGZpbGxtZW50RW1haWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Z1bGZpbGxtZW50RW1haWwnXSA9IHRoaXMuZnVsZmlsbG1lbnRFbWFpbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVyU2V0dGluZ3NXZWJob29rVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVyU2V0dGluZ3NXZWJob29rVXJsJ10gPSB0aGlzLnBhcnRuZXJTZXR0aW5nc1dlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lckNvbnRhY3RSZWNpcGllbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhcnRuZXJDb250YWN0UmVjaXBpZW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXJ0bmVyQ29udGFjdFJlY2lwaWVudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFydG5lckNvbnRhY3RSZWNpcGllbnRzID8gKHRoaXMucGFydG5lckNvbnRhY3RSZWNpcGllbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhcnRuZXJDb250YWN0UmVjaXBpZW50czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VzSW50ZWdyYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNJbnRlZ3JhdGlvbiddID0gdGhpcy51c2VzSW50ZWdyYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JkZXJGb3JtVmFsaWRhdG9yV2ViaG9va1VybCddID0gdGhpcy5vcmRlckZvcm1WYWxpZGF0b3JXZWJob29rVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFsbG93V2hpdGVMYWJlbGluZyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWxsb3dXaGl0ZUxhYmVsaW5nJ10gPSB0aGlzLmFsbG93V2hpdGVMYWJlbGluZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21lcldlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbWVyV2ViaG9va1VybCddID0gdGhpcy5jdXN0b21lcldlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VuZENhbmNlbGF0aW9uTm90aWZpY2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2VuZENhbmNlbGF0aW9uTm90aWZpY2F0aW9ucyddID0gdGhpcy5zZW5kQ2FuY2VsYXRpb25Ob3RpZmljYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbmNlbGxhdGlvbldlYmhvb2tVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbmNlbGxhdGlvbldlYmhvb2tVcmwnXSA9IHRoaXMuY2FuY2VsbGF0aW9uV2ViaG9va1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXJ2aWNlQ2hhbmdlV2ViaG9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2VydmljZUNoYW5nZVdlYmhvb2tVcmwnXSA9IHRoaXMuc2VydmljZUNoYW5nZVdlYmhvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwTGV2ZWxIYXNBZG1pbkRhc2hib2FyZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwTGV2ZWxIYXNBZG1pbkRhc2hib2FyZCddID0gdGhpcy5hcHBMZXZlbEhhc0FkbWluRGFzaGJvYXJkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpZGVGcm9tQ2xpZW50RGFzaGJvYXJkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoaWRlRnJvbUNsaWVudERhc2hib2FyZCddID0gdGhpcy5oaWRlRnJvbUNsaWVudERhc2hib2FyZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVBcHBNYXJrZXRpbmdJbmZvcm1hdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUFwcE1hcmtldGluZ0luZm9ybWF0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBtYXJrZXRpbmdJbmZvOiBNYXJrZXRpbmdJbmZvcm1hdGlvbjtcbiAgICB1c2VzTWFya2V0aW5nSW5mb3JtYXRpb246IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVBcHBNYXJrZXRpbmdJbmZvcm1hdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVBcHBNYXJrZXRpbmdJbmZvcm1hdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWFya2V0aW5nSW5mbykge20ubWFya2V0aW5nSW5mbyA9IE1hcmtldGluZ0luZm9ybWF0aW9uLmZyb21Qcm90byhwcm90by5tYXJrZXRpbmdJbmZvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQXBwTWFya2V0aW5nSW5mb3JtYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1hcmtldGluZ0luZm8gIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWFya2V0aW5nSW5mbyAhPT0gbnVsbCkge3RvUmV0dXJuWydtYXJrZXRpbmdJbmZvJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1hcmtldGluZ0luZm8gPyAodGhpcy5tYXJrZXRpbmdJbmZvIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1hcmtldGluZ0luZm87fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc01hcmtldGluZ0luZm9ybWF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzTWFya2V0aW5nSW5mb3JtYXRpb24nXSA9IHRoaXMudXNlc01hcmtldGluZ0luZm9ybWF0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUFwcE9yZGVyRm9ybVJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUFwcE9yZGVyRm9ybVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgdXNlc09yZGVyRm9ybTogYm9vbGVhbjtcbiAgICBvcmRlckZvcm06IE9yZGVyRm9ybTtcbiAgICB1c2VzQWN0aXZhdGlvblNwZWNpZmljRW50cnlVcmw6IGJvb2xlYW47XG4gICAgYXBwbGljYXRpb25Vcmw6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUFwcE9yZGVyRm9ybVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVBcHBPcmRlckZvcm1SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm9yZGVyRm9ybSkge20ub3JkZXJGb3JtID0gT3JkZXJGb3JtLmZyb21Qcm90byhwcm90by5vcmRlckZvcm0pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVBcHBPcmRlckZvcm1SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FwcElkJ10gPSB0aGlzLmFwcElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNPcmRlckZvcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXNPcmRlckZvcm0nXSA9IHRoaXMudXNlc09yZGVyRm9ybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmRlckZvcm0gIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JkZXJGb3JtICE9PSBudWxsKSB7dG9SZXR1cm5bJ29yZGVyRm9ybSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcmRlckZvcm0gPyAodGhpcy5vcmRlckZvcm0gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3JkZXJGb3JtO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXNBY3RpdmF0aW9uU3BlY2lmaWNFbnRyeVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlc0FjdGl2YXRpb25TcGVjaWZpY0VudHJ5VXJsJ10gPSB0aGlzLnVzZXNBY3RpdmF0aW9uU3BlY2lmaWNFbnRyeVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBsaWNhdGlvblVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwbGljYXRpb25VcmwnXSA9IHRoaXMuYXBwbGljYXRpb25Vcmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlQXBwU1NPSW50ZWdyYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVBcHBTU09JbnRlZ3JhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgZW50cnlVcmw6IHN0cmluZztcbiAgICBzZXNzaW9uVXJsOiBzdHJpbmc7XG4gICAgbG9nb3V0VXJsOiBzdHJpbmc7XG4gICAgdXNlc1Nzb0ludGVncmF0aW9uOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQXBwU1NPSW50ZWdyYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXBwU1NPSW50ZWdyYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVBcHBTU09JbnRlZ3JhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW50cnlVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VudHJ5VXJsJ10gPSB0aGlzLmVudHJ5VXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlc3Npb25VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Nlc3Npb25VcmwnXSA9IHRoaXMuc2Vzc2lvblVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2dvdXRVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xvZ291dFVybCddID0gdGhpcy5sb2dvdXRVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlc1Nzb0ludGVncmF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VzU3NvSW50ZWdyYXRpb24nXSA9IHRoaXMudXNlc1Nzb0ludGVncmF0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUFwcFRyaWFsQ29uZmlndXJhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUFwcFRyaWFsQ29uZmlndXJhdGlvblJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgdHJpYWxzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBkdXJhdGlvbjogbnVtYmVyO1xuICAgIGVuZE9mVHJpYWxBY3Rpb246IGUuRW5kT2ZUcmlhbEFjdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVBcHBUcmlhbENvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXBwVHJpYWxDb25maWd1cmF0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5lbmRPZlRyaWFsQWN0aW9uKSB7bS5lbmRPZlRyaWFsQWN0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5FbmRPZlRyaWFsQWN0aW9ucz4oZS5FbmRPZlRyaWFsQWN0aW9ucywgcHJvdG8uZW5kT2ZUcmlhbEFjdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUFwcFRyaWFsQ29uZmlndXJhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXBwSWQnXSA9IHRoaXMuYXBwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJpYWxzRW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndHJpYWxzRW5hYmxlZCddID0gdGhpcy50cmlhbHNFbmFibGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmR1cmF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkdXJhdGlvbiddID0gdGhpcy5kdXJhdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmRPZlRyaWFsQWN0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbmRPZlRyaWFsQWN0aW9uJ10gPSB0aGlzLmVuZE9mVHJpYWxBY3Rpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlVmVuZG9yUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlVmVuZG9yUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG4gICAgcmVwb3J0aW5nQ29kZTogc3RyaW5nO1xuICAgIGRpc3RyaWJ1dGlvblN0YXR1czogZS5WZW5kb3JEaXN0cmlidXRpb25TdGF0dXM7XG4gICAgaXNJbnZvaWNlZDogYm9vbGVhbjtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZVZlbmRvclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVWZW5kb3JSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRpc3RyaWJ1dGlvblN0YXR1cykge20uZGlzdHJpYnV0aW9uU3RhdHVzID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5WZW5kb3JEaXN0cmlidXRpb25TdGF0dXM+KGUuVmVuZG9yRGlzdHJpYnV0aW9uU3RhdHVzLCBwcm90by5kaXN0cmlidXRpb25TdGF0dXMpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVWZW5kb3JSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVwb3J0aW5nQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVwb3J0aW5nQ29kZSddID0gdGhpcy5yZXBvcnRpbmdDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc3RyaWJ1dGlvblN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGlzdHJpYnV0aW9uU3RhdHVzJ10gPSB0aGlzLmRpc3RyaWJ1dGlvblN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0ludm9pY2VkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0ludm9pY2VkJ10gPSB0aGlzLmlzSW52b2ljZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVWZW5kb3JSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlVmVuZG9yUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHZlbmRvcjogQXBwVmVuZG9yO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlVmVuZG9yUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVWZW5kb3JSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52ZW5kb3IpIHttLnZlbmRvciA9IEFwcFZlbmRvci5mcm9tUHJvdG8ocHJvdG8udmVuZG9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlVmVuZG9yUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3IgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudmVuZG9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZlbmRvciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52ZW5kb3IgPyAodGhpcy52ZW5kb3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmVuZG9yO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19