@vendasta/meetings 0.80.0 → 0.81.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/esm2020/lib/_internal/enums/index.mjs +1 -2
  2. package/esm2020/lib/_internal/google-meet.api.service.mjs +7 -8
  3. package/esm2020/lib/_internal/index.mjs +1 -2
  4. package/esm2020/lib/_internal/interfaces/index.mjs +1 -1
  5. package/esm2020/lib/_internal/interfaces/meeting-guest.interface.mjs +1 -1
  6. package/esm2020/lib/_internal/interfaces/meeting-host.interface.mjs +1 -1
  7. package/esm2020/lib/_internal/interfaces/meeting-type.interface.mjs +1 -1
  8. package/esm2020/lib/_internal/interfaces/shared.interface.mjs +1 -1
  9. package/esm2020/lib/_internal/meeting-guest.api.service.mjs +7 -8
  10. package/esm2020/lib/_internal/meeting-host.api.service.mjs +7 -8
  11. package/esm2020/lib/_internal/meeting-source-api.api.service.mjs +7 -8
  12. package/esm2020/lib/_internal/objects/index.mjs +3 -5
  13. package/esm2020/lib/_internal/objects/meeting-guest.mjs +5 -2
  14. package/esm2020/lib/_internal/objects/meeting-host.mjs +17 -2
  15. package/esm2020/lib/_internal/objects/meeting-type.mjs +28 -1
  16. package/esm2020/lib/_internal/objects/shared.mjs +2 -3
  17. package/esm2020/lib/guest/guest.service.mjs +1 -1
  18. package/esm2020/lib/host/host.service.mjs +11 -2
  19. package/esm2020/lib/index.mjs +3 -4
  20. package/esm2020/lib/shared/meeting-type.mjs +15 -3
  21. package/esm2020/lib/shared/meeting.mjs +3 -2
  22. package/fesm2015/vendasta-meetings.mjs +145 -502
  23. package/fesm2015/vendasta-meetings.mjs.map +1 -1
  24. package/fesm2020/vendasta-meetings.mjs +145 -499
  25. package/fesm2020/vendasta-meetings.mjs.map +1 -1
  26. package/lib/_internal/enums/index.d.ts +0 -1
  27. package/lib/_internal/google-meet.api.service.d.ts +2 -5
  28. package/lib/_internal/index.d.ts +0 -1
  29. package/lib/_internal/interfaces/index.d.ts +2 -4
  30. package/lib/_internal/interfaces/meeting-guest.interface.d.ts +2 -1
  31. package/lib/_internal/interfaces/meeting-host.interface.d.ts +5 -1
  32. package/lib/_internal/interfaces/meeting-type.interface.d.ts +6 -0
  33. package/lib/_internal/interfaces/shared.interface.d.ts +1 -2
  34. package/lib/_internal/meeting-guest.api.service.d.ts +3 -5
  35. package/lib/_internal/meeting-host.api.service.d.ts +3 -5
  36. package/lib/_internal/meeting-source-api.api.service.d.ts +2 -5
  37. package/lib/_internal/objects/index.d.ts +2 -4
  38. package/lib/_internal/objects/meeting-guest.d.ts +2 -1
  39. package/lib/_internal/objects/meeting-host.d.ts +5 -1
  40. package/lib/_internal/objects/meeting-type.d.ts +6 -0
  41. package/lib/_internal/objects/shared.d.ts +1 -2
  42. package/lib/guest/guest.service.d.ts +1 -0
  43. package/lib/host/host.service.d.ts +3 -0
  44. package/lib/index.d.ts +3 -4
  45. package/lib/shared/meeting-type.d.ts +6 -0
  46. package/lib/shared/meeting.d.ts +1 -0
  47. package/package.json +1 -1
  48. package/esm2020/lib/_internal/conversation-analysis.api.service.mjs +0 -50
  49. package/esm2020/lib/_internal/enums/conversation-analysis.enum.mjs +0 -13
  50. package/esm2020/lib/_internal/interfaces/annotations.interface.mjs +0 -8
  51. package/esm2020/lib/_internal/interfaces/conversation-analysis.interface.mjs +0 -2
  52. package/esm2020/lib/_internal/objects/annotations.mjs +0 -30
  53. package/esm2020/lib/_internal/objects/conversation-analysis.mjs +0 -309
  54. package/esm2020/lib/conversation_analysis/conversation-analysis.service.mjs +0 -37
  55. package/lib/_internal/conversation-analysis.api.service.d.ts +0 -15
  56. package/lib/_internal/enums/conversation-analysis.enum.d.ts +0 -5
  57. package/lib/_internal/interfaces/annotations.interface.d.ts +0 -4
  58. package/lib/_internal/interfaces/conversation-analysis.interface.d.ts +0 -53
  59. package/lib/_internal/objects/annotations.d.ts +0 -9
  60. package/lib/_internal/objects/conversation-analysis.d.ts +0 -82
  61. package/lib/conversation_analysis/conversation-analysis.service.d.ts +0 -16
@@ -2,7 +2,7 @@ import { DateRange } from './date-range';
2
2
  import { FieldMask } from './field-mask';
3
3
  import { MeetingType } from './meeting-type';
4
4
  import { TimeRange, Calendar, Preferences, HostUser, Contact, PagedRequestOptions, PagedResponseMetadata, Attendee, Answers, Attachment } from './shared';
5
- import { TimeZone } from './datetime';
5
+ import { TimeZone } from './';
6
6
  import * as e from '../enums';
7
7
  export function enumStringToValue(enumRef, value) {
8
8
  if (typeof value === 'number') {
@@ -322,6 +322,9 @@ export class CreateMeetingTypeRequest {
322
322
  if (proto.meetingType) {
323
323
  m.meetingType = MeetingType.fromProto(proto.meetingType);
324
324
  }
325
+ if (proto.fieldMask) {
326
+ m.fieldMask = FieldMask.fromProto(proto.fieldMask);
327
+ }
325
328
  return m;
326
329
  }
327
330
  constructor(kwargs) {
@@ -335,6 +338,12 @@ export class CreateMeetingTypeRequest {
335
338
  if (typeof this.meetingType !== 'undefined' && this.meetingType !== null) {
336
339
  toReturn['meetingType'] = 'toApiJson' in this.meetingType ? this.meetingType.toApiJson() : this.meetingType;
337
340
  }
341
+ if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {
342
+ toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;
343
+ }
344
+ if (typeof this.hostId !== 'undefined') {
345
+ toReturn['hostId'] = this.hostId;
346
+ }
338
347
  return toReturn;
339
348
  }
340
349
  }
@@ -1241,6 +1250,9 @@ export class Meeting {
1241
1250
  if (typeof this.attachments !== 'undefined' && this.attachments !== null) {
1242
1251
  toReturn['attachments'] = 'toApiJson' in this.attachments ? this.attachments.toApiJson() : this.attachments;
1243
1252
  }
1253
+ if (typeof this.location !== 'undefined') {
1254
+ toReturn['location'] = this.location;
1255
+ }
1244
1256
  return toReturn;
1245
1257
  }
1246
1258
  }
@@ -1548,6 +1560,9 @@ export class UpdateMeetingTypeRequest {
1548
1560
  if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {
1549
1561
  toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;
1550
1562
  }
1563
+ if (typeof this.hostId !== 'undefined') {
1564
+ toReturn['hostId'] = this.hostId;
1565
+ }
1551
1566
  return toReturn;
1552
1567
  }
1553
1568
  }
@@ -1580,4 +1595,4 @@ export class WeekdayAvailability {
1580
1595
  return toReturn;
1581
1596
  }
1582
1597
  }
1583
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVldGluZy1ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbWVldGluZ3Nfc2RrL3NyYy9saWIvX2ludGVybmFsL29iamVjdHMvbWVldGluZy1ob3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUosT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUU5QixNQUFNLFVBQVUsaUJBQWlCLENBQUksT0FBWSxFQUFFLEtBQWE7SUFDOUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLE9BQU8sb0VBQW9FO0lBSTdFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLG9FQUFvRSxFQUFFLENBQUM7UUFDbkYsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBd0Y7UUFDaEcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNE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QVcsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLEtBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFDO1FBQzdKLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLEdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUFDO1FBQ2pKLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLE9BQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQ3pLLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLE9BQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQ3pLLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFB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QVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQUM7UUFDbEUsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsU0FBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3JMLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJy4vZGF0ZS1yYW5nZSc7XG5pbXBvcnQgeyBGaWVsZE1hc2sgfSBmcm9tICcuL2ZpZWxkLW1hc2snO1xuaW1wb3J0IHsgTWVldGluZ1R5cGUgfSBmcm9tICcuL21lZXRpbmctdHlwZSc7XG5pbXBvcnQgeyBUaW1lUmFuZ2UsIENhbGVuZGFyLCBQcmVmZXJlbmNlcywgSG9zdFVzZXIsIENvbnRhY3QsIFBhZ2VkUmVxdWVzdE9wdGlvbnMsIFBhZ2VkUmVzcG9uc2VNZXRhZGF0YSwgQXR0ZW5kZWUsIEFuc3dlcnMsIEF0dGFjaG1lbnQgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBUaW1lWm9uZSB9IGZyb20gJy4vZGF0ZXRpbWUnO1xuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnkgaW1wbGVtZW50cyBpLkVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBFbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzUmVxdWVzdEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNFbnRyeSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSG9zdElkUmVxdWVzdEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNFbnRyeSBpbXBsZW1lbnRzIGkuQnVpbGRIb3N0SWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQnVpbGRIb3N0SWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQnVpbGRIb3N0SWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5CdWlsZEhvc3RJZFJlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNFbnRyeSBpbXBsZW1lbnRzIGkuSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Jc0NhbGVuZGFyQ29uZmlndXJlZFJlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF2YWlsYWJpbGl0eVJ1bGUgaW1wbGVtZW50cyBpLkF2YWlsYWJpbGl0eVJ1bGVJbnRlcmZhY2Uge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICBkYXk6IGUuRGF5T2ZXZWVrO1xuICAgIHRpbWVTbG90OiBUaW1lUmFuZ2U7XG4gICAgdGltZVpvbmU6IFRpbWVab25lO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQXZhaWxhYmlsaXR5UnVsZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEF2YWlsYWJpbGl0eVJ1bGUoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZGF5KSB7bS5kYXkgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkRheU9mV2Vlaz4oZS5EYXlPZldlZWssIHByb3RvLmRheSk7fVxuICAgICAgICBpZiAocHJvdG8udGltZVNsb3QpIHttLnRpbWVTbG90ID0gVGltZVJhbmdlLmZyb21Qcm90byhwcm90by50aW1lU2xvdCk7fVxuICAgICAgICBpZiAocHJvdG8udGltZVpvbmUpIHttLnRpbWVab25lID0gVGltZVpvbmUuZnJvbVByb3RvKHByb3RvLnRpbWVab25lKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQXZhaWxhYmlsaXR5UnVsZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaG9zdElkJ10gPSB0aGlzLmhvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nVHlwZUlkJ10gPSB0aGlzLm1lZXRpbmdUeXBlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkYXknXSA9IHRoaXMuZGF5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpbWVTbG90ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRpbWVTbG90ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RpbWVTbG90J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRpbWVTbG90ID8gKHRoaXMudGltZVNsb3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGltZVNsb3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVpvbmUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGltZVpvbmUgIT09IG51bGwpIHt0b1JldHVyblsndGltZVpvbmUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVpvbmUgPyAodGhpcy50aW1lWm9uZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50aW1lWm9uZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEhvc3RJZFJlcXVlc3QgaW1wbGVtZW50cyBpLkJ1aWxkSG9zdElkUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICAgdXNlcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCdWlsZEhvc3RJZFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBCdWlsZEhvc3RJZFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcykge20uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3RvLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gcHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc1trXTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5CdWlsZEhvc3RJZFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgIT09IG51bGwpIHt0b1JldHVyblsnYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzID8gKHRoaXMuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlcklkJ10gPSB0aGlzLnVzZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEhvc3RJZFJlc3BvbnNlIGltcGxlbWVudHMgaS5CdWlsZEhvc3RJZFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBob3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJ1aWxkSG9zdElkUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBCdWlsZEhvc3RJZFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5CdWlsZEhvc3RJZFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydob3N0SWQnXSA9IHRoaXMuaG9zdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1Jlc3BvbnNlQ2FsZW5kYXJNZWV0aW5nVHlwZXNNYXBFbnRyeSBpbXBsZW1lbnRzIGkuR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVzcG9uc2VDYWxlbmRhck1lZXRpbmdUeXBlc01hcEVudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogTWVldGluZ1R5cGVMaXN0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVzcG9uc2VDYWxlbmRhck1lZXRpbmdUeXBlc01hcEVudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVzcG9uc2VDYWxlbmRhck1lZXRpbmdUeXBlc01hcEVudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZhbHVlKSB7bS52YWx1ZSA9IE1lZXRpbmdUeXBlTGlzdC5mcm9tUHJvdG8ocHJvdG8udmFsdWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXNwb25zZUNhbGVuZGFyTWVldGluZ1R5cGVzTWFwRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudmFsdWUgIT09IG51bGwpIHt0b1JldHVyblsndmFsdWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudmFsdWUgPyAodGhpcy52YWx1ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52YWx1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5jZWxNZWV0aW5nUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ2FuY2VsTWVldGluZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2FuY2VsTWVldGluZ1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDYW5jZWxNZWV0aW5nUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2FuY2VsTWVldGluZ1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZXRpbmdJZCddID0gdGhpcy5tZWV0aW5nSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FuY2VsbGF0aW9uUmVhc29uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYW5jZWxsYXRpb25SZWFzb24nXSA9IHRoaXMuY2FuY2VsbGF0aW9uUmVhc29uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUF2YWlsYWJpbGl0eVJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZUF2YWlsYWJpbGl0eVJlcXVlc3RJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlQXZhaWxhYmlsaXR5UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUF2YWlsYWJpbGl0eVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZUF2YWlsYWJpbGl0eVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVBdmFpbGFiaWxpdHlSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlQXZhaWxhYmlsaXR5UmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlQXZhaWxhYmlsaXR5UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVBdmFpbGFiaWxpdHlSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlQXZhaWxhYmlsaXR5UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVDYWxlbmRhclJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZUNhbGVuZGFyUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY2FsZW5kYXI6IENhbGVuZGFyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNhbGVuZGFyKSB7bS5jYWxlbmRhciA9IENhbGVuZGFyLmZyb21Qcm90byhwcm90by5jYWxlbmRhcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZUNhbGVuZGFyUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFyICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNhbGVuZGFyICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NhbGVuZGFyJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNhbGVuZGFyID8gKHRoaXMuY2FsZW5kYXIgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY2FsZW5kYXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlQ2FsZW5kYXJSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlQ2FsZW5kYXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlQ2FsZW5kYXJSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUNhbGVuZGFyUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZUNhbGVuZGFyUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRhcklkJ10gPSB0aGlzLmNhbGVuZGFySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlc1JlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVEZWZhdWx0TWVldGluZ1R5cGVzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRhcklkJ10gPSB0aGlzLmNhbGVuZGFySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWRzJ10gPSB0aGlzLmNhbGVuZGFySWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU1lZXRpbmdUeXBlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlTWVldGluZ1R5cGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNZWV0aW5nVHlwZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNZWV0aW5nVHlwZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVldGluZ1R5cGUpIHttLm1lZXRpbmdUeXBlID0gTWVldGluZ1R5cGUuZnJvbVByb3RvKHByb3RvLm1lZXRpbmdUeXBlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlTWVldGluZ1R5cGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ1R5cGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVldGluZ1R5cGUgIT09IG51bGwpIHt0b1JldHVyblsnbWVldGluZ1R5cGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVldGluZ1R5cGUgPyAodGhpcy5tZWV0aW5nVHlwZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZWV0aW5nVHlwZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVNZWV0aW5nVHlwZVJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVNZWV0aW5nVHlwZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlTWVldGluZ1R5cGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU1lZXRpbmdUeXBlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZU1lZXRpbmdUeXBlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlQXZhaWxhYmlsaXR5UmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlQXZhaWxhYmlsaXR5UmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVBdmFpbGFiaWxpdHlSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlQXZhaWxhYmlsaXR5UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlQXZhaWxhYmlsaXR5UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZU1lZXRpbmdUeXBlUmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlTWVldGluZ1R5cGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlTWVldGluZ1R5cGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlTWVldGluZ1R5cGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVNZWV0aW5nVHlwZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9lc0NhbGVuZGFyRXhpc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5Eb2VzQ2FsZW5kYXJFeGlzdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNhbGVuZGFySWRlbnRpZmllcjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRG9lc0NhbGVuZGFyRXhpc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRG9lc0NhbGVuZGFyRXhpc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Eb2VzQ2FsZW5kYXJFeGlzdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkZW50aWZpZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWRlbnRpZmllciddID0gdGhpcy5jYWxlbmRhcklkZW50aWZpZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9lc0NhbGVuZGFyRXhpc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuRG9lc0NhbGVuZGFyRXhpc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZXhpc3RzOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRG9lc0NhbGVuZGFyRXhpc3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IERvZXNDYWxlbmRhckV4aXN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRvZXNDYWxlbmRhckV4aXN0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5leGlzdHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2V4aXN0cyddID0gdGhpcy5leGlzdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdFJlcXVlc3QgaW1wbGVtZW50cyBpLkVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBleHRlcm5hbElkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4dGVybmFsSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydleHRlcm5hbElkcyddID0gdGhpcy5leHRlcm5hbElkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FsZW5kYXJJZHMnXSA9IHRoaXMuY2FsZW5kYXJJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcykge20uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3RvLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gcHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc1trXTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlcklkJ10gPSB0aGlzLnVzZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgIT09IG51bGwpIHt0b1JldHVyblsnYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzID8gKHRoaXMuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBFbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWQnXSA9IHRoaXMuY2FsZW5kYXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnMgaW1wbGVtZW50cyBpLkxpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgbWVldGluZ1R5cGVJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RGaWx0ZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RGaWx0ZXJzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hvc3RJZCddID0gdGhpcy5ob3N0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ1R5cGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVldGluZ1R5cGVJZCddID0gdGhpcy5tZWV0aW5nVHlwZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzIGltcGxlbWVudHMgaS5MaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSB7XG4gICAgbWVldGluZ1R5cGVJZHM6IHN0cmluZ1tdO1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIHRpbWVTcGFuOiBEYXRlUmFuZ2U7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVycyB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRpbWVTcGFuKSB7bS50aW1lU3BhbiA9IERhdGVSYW5nZS5mcm9tUHJvdG8ocHJvdG8udGltZVNwYW4pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdUeXBlSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nVHlwZUlkcyddID0gdGhpcy5tZWV0aW5nVHlwZUlkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hvc3RJZCddID0gdGhpcy5ob3N0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVNwYW4gIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGltZVNwYW4gIT09IG51bGwpIHt0b1JldHVyblsndGltZVNwYW4nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVNwYW4gPyAodGhpcy50aW1lU3BhbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50aW1lU3Bhbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIb3N0TWVldGluZ1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldEhvc3RNZWV0aW5nUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgbG9jYXRpb246IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEhvc3RNZWV0aW5nUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEhvc3RNZWV0aW5nUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0SG9zdE1lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nSWQnXSA9IHRoaXMubWVldGluZ0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsb2NhdGlvbiddID0gdGhpcy5sb2NhdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIb3N0TWVldGluZ1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRIb3N0TWVldGluZ1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZWV0aW5nOiBNZWV0aW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SG9zdE1lZXRpbmdSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEhvc3RNZWV0aW5nUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVldGluZykge20ubWVldGluZyA9IE1lZXRpbmcuZnJvbVByb3RvKHByb3RvLm1lZXRpbmcpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRIb3N0TWVldGluZ1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWV0aW5nICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVldGluZyA/ICh0aGlzLm1lZXRpbmcgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIb3N0UHJlZmVyZW5jZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRIb3N0UHJlZmVyZW5jZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBob3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEhvc3RQcmVmZXJlbmNlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRIb3N0UHJlZmVyZW5jZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRIb3N0UHJlZmVyZW5jZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydob3N0SWQnXSA9IHRoaXMuaG9zdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEhvc3RQcmVmZXJlbmNlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRIb3N0UHJlZmVyZW5jZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcHJlZmVyZW5jZXM6IFByZWZlcmVuY2VzO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SG9zdFByZWZlcmVuY2VzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRIb3N0UHJlZmVyZW5jZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wcmVmZXJlbmNlcykge20ucHJlZmVyZW5jZXMgPSBQcmVmZXJlbmNlcy5mcm9tUHJvdG8ocHJvdG8ucHJlZmVyZW5jZXMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRIb3N0UHJlZmVyZW5jZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZWZlcmVuY2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByZWZlcmVuY2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ByZWZlcmVuY2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByZWZlcmVuY2VzID8gKHRoaXMucHJlZmVyZW5jZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJlZmVyZW5jZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0SG9zdHNGb3JDYWxlbmRhclJlcXVlc3QgaW1wbGVtZW50cyBpLkdldEhvc3RzRm9yQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRIb3N0c0ZvckNhbGVuZGFyUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEhvc3RzRm9yQ2FsZW5kYXJSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRIb3N0c0ZvckNhbGVuZGFyUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWQnXSA9IHRoaXMuY2FsZW5kYXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIb3N0c0ZvckNhbGVuZGFyUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEhvc3RzRm9yQ2FsZW5kYXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaG9zdFVzZXJzOiBIb3N0VXNlcltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SG9zdHNGb3JDYWxlbmRhclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0SG9zdHNGb3JDYWxlbmRhclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmhvc3RVc2Vycykge20uaG9zdFVzZXJzID0gcHJvdG8uaG9zdFVzZXJzLm1hcChIb3N0VXNlci5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRIb3N0c0ZvckNhbGVuZGFyUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob3N0VXNlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaG9zdFVzZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2hvc3RVc2VycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ob3N0VXNlcnMgPyAodGhpcy5ob3N0VXNlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaG9zdFVzZXJzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNhbGVuZGFySWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWRzJ10gPSB0aGlzLmNhbGVuZGFySWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXA6IHtba2V5OiBzdHJpbmddOiBNZWV0aW5nVHlwZUxpc3R9O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jYWxlbmRhck1lZXRpbmdUeXBlc01hcCkge20uY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXAgPSBPYmplY3Qua2V5cyhwcm90by5jYWxlbmRhck1lZXRpbmdUeXBlc01hcCkucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBNZWV0aW5nVHlwZUxpc3QuZnJvbVByb3RvKHByb3RvLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwW2tdKTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NhbGVuZGFyTWVldGluZ1R5cGVzTWFwJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwID8gKHRoaXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXAgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXA7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSG9zdEJvb2tNZWV0aW5nUmVxdWVzdCBpbXBsZW1lbnRzIGkuSG9zdEJvb2tNZWV0aW5nUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVldGluZ1NvdXJjZTogZS5NZWV0aW5nU291cmNlO1xuICAgIGNhbGVuZGFySWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgdGltZVNsb3Q6IERhdGVSYW5nZTtcbiAgICBhdHRlbmRlZXM6IENvbnRhY3RbXTtcbiAgICB0b3BpYzogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSG9zdEJvb2tNZWV0aW5nUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEhvc3RCb29rTWVldGluZ1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVldGluZ1NvdXJjZSkge20ubWVldGluZ1NvdXJjZSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuTWVldGluZ1NvdXJjZT4oZS5NZWV0aW5nU291cmNlLCBwcm90by5tZWV0aW5nU291cmNlKTt9XG4gICAgICAgIGlmIChwcm90by50aW1lU2xvdCkge20udGltZVNsb3QgPSBEYXRlUmFuZ2UuZnJvbVByb3RvKHByb3RvLnRpbWVTbG90KTt9XG4gICAgICAgIGlmIChwcm90by5hdHRlbmRlZXMpIHttLmF0dGVuZGVlcyA9IHByb3RvLmF0dGVuZGVlcy5tYXAoQ29udGFjdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Ib3N0Qm9va01lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ1NvdXJjZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVldGluZ1NvdXJjZSddID0gdGhpcy5tZWV0aW5nU291cmNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWQnXSA9IHRoaXMuY2FsZW5kYXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nVHlwZUlkJ10gPSB0aGlzLm1lZXRpbmdUeXBlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVNsb3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGltZVNsb3QgIT09IG51bGwpIHt0b1JldHVyblsndGltZVNsb3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVNsb3QgPyAodGhpcy50aW1lU2xvdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50aW1lU2xvdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdHRlbmRlZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXR0ZW5kZWVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2F0dGVuZGVlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hdHRlbmRlZXMgPyAodGhpcy5hdHRlbmRlZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXR0ZW5kZWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvcGljICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0b3BpYyddID0gdGhpcy50b3BpYzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0Qm9va01lZXRpbmdSZXNwb25zZSBpbXBsZW1lbnRzIGkuSG9zdEJvb2tNZWV0aW5nUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSG9zdEJvb2tNZWV0aW5nUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBIb3N0Qm9va01lZXRpbmdSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSG9zdEJvb2tNZWV0aW5nUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZXRpbmdJZCddID0gdGhpcy5tZWV0aW5nSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSG9zdEdldENhbGVuZGFyUmVxdWVzdCBpbXBsZW1lbnRzIGkuSG9zdEdldENhbGVuZGFyUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSG9zdEdldENhbGVuZGFyUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEhvc3RHZXRDYWxlbmRhclJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkhvc3RHZXRDYWxlbmRhclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRhcklkJ10gPSB0aGlzLmNhbGVuZGFySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSG9zdEdldENhbGVuZGFyUmVzcG9uc2UgaW1wbGVtZW50cyBpLkhvc3RHZXRDYWxlbmRhclJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcjogQ2FsZW5kYXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBIb3N0R2V0Q2FsZW5kYXJSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEhvc3RHZXRDYWxlbmRhclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNhbGVuZGFyKSB7bS5jYWxlbmRhciA9IENhbGVuZGFyLmZyb21Qcm90byhwcm90by5jYWxlbmRhcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkhvc3RHZXRDYWxlbmRhclJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXIgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2FsZW5kYXIgIT09IG51bGwpIHt0b1JldHVyblsnY2FsZW5kYXInXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2FsZW5kYXIgPyAodGhpcy5jYWxlbmRhciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYWxlbmRhcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0R2V0TWVldGluZ1R5cGVSZXF1ZXN0IGltcGxlbWVudHMgaS5Ib3N0R2V0TWVldGluZ1R5cGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhclNsdWc6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZVNsdWc6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEhvc3RHZXRNZWV0aW5nVHlwZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBIb3N0R2V0TWVldGluZ1R5cGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Ib3N0R2V0TWVldGluZ1R5cGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJTbHVnICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRhclNsdWcnXSA9IHRoaXMuY2FsZW5kYXJTbHVnO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdUeXBlU2x1ZyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVldGluZ1R5cGVTbHVnJ10gPSB0aGlzLm1lZXRpbmdUeXBlU2x1Zzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0R2V0TWVldGluZ1R5cGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuSG9zdEdldE1lZXRpbmdUeXBlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEhvc3RHZXRNZWV0aW5nVHlwZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSG9zdEdldE1lZXRpbmdUeXBlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVldGluZ1R5cGUpIHttLm1lZXRpbmdUeXBlID0gTWVldGluZ1R5cGUuZnJvbVByb3RvKHByb3RvLm1lZXRpbmdUeXBlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSG9zdEdldE1lZXRpbmdUeXBlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWV0aW5nVHlwZSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZWV0aW5nVHlwZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWV0aW5nVHlwZSA/ICh0aGlzLm1lZXRpbmdUeXBlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lZXRpbmdUeXBlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhvc3RMaXN0TWVldGluZ1R5cGVzUmVxdWVzdCBpbXBsZW1lbnRzIGkuSG9zdExpc3RNZWV0aW5nVHlwZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBob3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEhvc3RMaXN0TWVldGluZ1R5cGVzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEhvc3RMaXN0TWVldGluZ1R5cGVzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSG9zdExpc3RNZWV0aW5nVHlwZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydob3N0SWQnXSA9IHRoaXMuaG9zdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhvc3RMaXN0TWVldGluZ1R5cGVzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkhvc3RMaXN0TWVldGluZ1R5cGVzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmdUeXBlczogTWVldGluZ1R5cGVbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEhvc3RMaXN0TWVldGluZ1R5cGVzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBIb3N0TGlzdE1lZXRpbmdUeXBlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lZXRpbmdUeXBlcykge20ubWVldGluZ1R5cGVzID0gcHJvdG8ubWVldGluZ1R5cGVzLm1hcChNZWV0aW5nVHlwZS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Ib3N0TGlzdE1lZXRpbmdUeXBlc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ1R5cGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZXRpbmdUeXBlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydtZWV0aW5nVHlwZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVldGluZ1R5cGVzID8gKHRoaXMubWVldGluZ1R5cGVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lZXRpbmdUeXBlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJc0NhbGVuZGFyQ29uZmlndXJlZFJlcXVlc3QgaW1wbGVtZW50cyBpLklzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICAgdXNlcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJc0NhbGVuZGFyQ29uZmlndXJlZFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBJc0NhbGVuZGFyQ29uZmlndXJlZFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcykge20uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3RvLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gcHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc1trXTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Jc0NhbGVuZGFyQ29uZmlndXJlZFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgIT09IG51bGwpIHt0b1JldHVyblsnYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzID8gKHRoaXMuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlcklkJ10gPSB0aGlzLnVzZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlIGltcGxlbWVudHMgaS5Jc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpc0NvbmZpZ3VyZWQ6IGJvb2xlYW47XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IElzQ2FsZW5kYXJDb25maWd1cmVkUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklzQ2FsZW5kYXJDb25maWd1cmVkUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0NvbmZpZ3VyZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzQ29uZmlndXJlZCddID0gdGhpcy5pc0NvbmZpZ3VyZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FsZW5kYXJJZCddID0gdGhpcy5jYWxlbmRhcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElzSG9zdENvbmZpZ3VyZWRSZXF1ZXN0IGltcGxlbWVudHMgaS5Jc0hvc3RDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJc0hvc3RDb25maWd1cmVkUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IElzSG9zdENvbmZpZ3VyZWRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Jc0hvc3RDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaG9zdElkJ10gPSB0aGlzLmhvc3RJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2UgaW1wbGVtZW50cyBpLklzSG9zdENvbmZpZ3VyZWRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaXNDb25maWd1cmVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Jc0hvc3RDb25maWd1cmVkUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0NvbmZpZ3VyZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzQ29uZmlndXJlZCddID0gdGhpcy5pc0NvbmZpZ3VyZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuICAgIGZpbHRlcnM6IExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVycztcbiAgICB0aW1lWm9uZTogVGltZVpvbmU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIGlmIChwcm90by50aW1lWm9uZSkge20udGltZVpvbmUgPSBUaW1lWm9uZS5mcm9tUHJvdG8ocHJvdG8udGltZVpvbmUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aW1lWm9uZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lWm9uZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50aW1lWm9uZSA/ICh0aGlzLnRpbWVab25lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVab25lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBdmFpbGFiaWxpdHlSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdEF2YWlsYWJpbGl0eVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhdmFpbGFiaWxpdHlSdWxlczogQXZhaWxhYmlsaXR5UnVsZVtdO1xuICAgIG1ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXZhaWxhYmlsaXR5UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0QXZhaWxhYmlsaXR5UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYXZhaWxhYmlsaXR5UnVsZXMpIHttLmF2YWlsYWJpbGl0eVJ1bGVzID0gcHJvdG8uYXZhaWxhYmlsaXR5UnVsZXMubWFwKEF2YWlsYWJpbGl0eVJ1bGUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5tZXRhZGF0YSkge20ubWV0YWRhdGEgPSBQYWdlZFJlc3BvbnNlTWV0YWRhdGEuZnJvbVByb3RvKHByb3RvLm1ldGFkYXRhKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdEF2YWlsYWJpbGl0eVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXZhaWxhYmlsaXR5UnVsZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXZhaWxhYmlsaXR5UnVsZXMgIT09IG51bGwpIHt0b1JldHVyblsnYXZhaWxhYmlsaXR5UnVsZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXZhaWxhYmlsaXR5UnVsZXMgPyAodGhpcy5hdmFpbGFiaWxpdHlSdWxlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hdmFpbGFiaWxpdHlSdWxlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGZpbHRlcnM6IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG4gICAgdGltZVpvbmU6IFRpbWVab25lO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmlsdGVycykge20uZmlsdGVycyA9IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICBpZiAocHJvdG8udGltZVpvbmUpIHttLnRpbWVab25lID0gVGltZVpvbmUuZnJvbVByb3RvKHByb3RvLnRpbWVab25lKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdPcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ09wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nT3B0aW9ucyA/ICh0aGlzLnBhZ2luZ09wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nT3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aW1lWm9uZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lWm9uZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50aW1lWm9uZSA/ICh0aGlzLnRpbWVab25lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVab25lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RCb29rZWRNZWV0aW5nc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVldGluZ3M6IE1lZXRpbmdbXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEJvb2tlZE1lZXRpbmdzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5ncykge20ubWVldGluZ3MgPSBwcm90by5tZWV0aW5ncy5tYXAoTWVldGluZy5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZXRpbmdzICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmdzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lZXRpbmdzID8gKHRoaXMubWVldGluZ3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZ3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZWV0aW5nIGltcGxlbWVudHMgaS5NZWV0aW5nSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGV2ZW50VHlwZUlkOiBzdHJpbmc7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgZW5kOiBEYXRlO1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgdXBkYXRlZDogRGF0ZTtcbiAgICBhdHRlbmRlZXM6IEF0dGVuZGVlW107XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBqb2luTWVldGluZ1VybDogc3RyaW5nO1xuICAgIHRvcGljOiBzdHJpbmc7XG4gICAgZm9ybUFuc3dlcnM6IEFuc3dlcnM7XG4gICAgbWV0YWRhdGE6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNZWV0aW5nIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTWVldGluZygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGFydCkge20uc3RhcnQgPSBuZXcgRGF0ZShwcm90by5zdGFydCk7fVxuICAgICAgICBpZiAocHJvdG8uZW5kKSB7bS5lbmQgPSBuZXcgRGF0ZShwcm90by5lbmQpO31cbiAgICAgICAgaWYgKHByb3RvLmNyZWF0ZWQpIHttLmNyZWF0ZWQgPSBuZXcgRGF0ZShwcm90by5jcmVhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by51cGRhdGVkKSB7bS51cGRhdGVkID0gbmV3IERhdGUocHJvdG8udXBkYXRlZCk7fVxuICAgICAgICBpZiAocHJvdG8uYXR0ZW5kZWVzKSB7bS5hdHRlbmRlZXMgPSBwcm90by5hdHRlbmRlZXMubWFwKEF0dGVuZGVlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZm9ybUFuc3dlcnMpIHttLmZvcm1BbnN3ZXJzID0gQW5zd2Vycy5mcm9tUHJvdG8ocHJvdG8uZm9ybUFuc3dlcnMpO31cbiAgICAgICAgaWYgKHByb3RvLm1ldGFkYXRhKSB7bS5tZXRhZGF0YSA9IE9iamVjdC5rZXlzKHByb3RvLm1ldGFkYXRhKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IHByb3RvLm1ldGFkYXRhW2tdOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICBpZiAocHJvdG8uYXR0YWNobWVudHMpIHttLmF0dGFjaG1lbnRzID0gcHJvdG8uYXR0YWNobWVudHMubWFwKEF0dGFjaG1lbnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTWVldGluZ0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ldmVudFR5cGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXZlbnRUeXBlSWQnXSA9IHRoaXMuZXZlbnRUeXBlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydob3N0SWQnXSA9IHRoaXMuaG9zdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXJ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXJ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXJ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXJ0ID8gKHRoaXMuc3RhcnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhcnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVuZCAhPT0gbnVsbCkge3RvUmV0dXJuWydlbmQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZW5kID8gKHRoaXMuZW5kIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVuZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWQgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdGVkID8gKHRoaXMuY3JlYXRlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudXBkYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWyd1cGRhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnVwZGF0ZWQgPyAodGhpcy51cGRhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnVwZGF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXR0ZW5kZWVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmF0dGVuZGVlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhdHRlbmRlZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXR0ZW5kZWVzID8gKHRoaXMuYXR0ZW5kZWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmF0dGVuZGVlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZXNjcmlwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVzY3JpcHRpb24nXSA9IHRoaXMuZGVzY3JpcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuam9pbk1lZXRpbmdVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2pvaW5NZWV0aW5nVXJsJ10gPSB0aGlzLmpvaW5NZWV0aW5nVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvcGljICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0b3BpYyddID0gdGhpcy50b3BpYzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtQW5zd2VycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5mb3JtQW5zd2VycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmb3JtQW5zd2VycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5mb3JtQW5zd2VycyA/ICh0aGlzLmZvcm1BbnN3ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZvcm1BbnN3ZXJzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ21ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1ldGFkYXRhID8gKHRoaXMubWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWV0YWRhdGE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXR0YWNobWVudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXR0YWNobWVudHMgIT09IG51bGwpIHt0b1JldHVyblsnYXR0YWNobWVudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXR0YWNobWVudHMgPyAodGhpcy5hdHRhY2htZW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hdHRhY2htZW50czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZWV0aW5nVHlwZUxpc3QgaW1wbGVtZW50cyBpLk1lZXRpbmdUeXBlTGlzdEludGVyZmFjZSB7XG4gICAgbWVldGluZ1R5cGVzOiBNZWV0aW5nVHlwZVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTWVldGluZ1R5cGVMaXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTWVldGluZ1R5cGVMaXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lZXRpbmdUeXBlcykge20ubWVldGluZ1R5cGVzID0gcHJvdG8ubWVldGluZ1R5cGVzLm1hcChNZWV0aW5nVHlwZS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NZWV0aW5nVHlwZUxpc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVldGluZ1R5cGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWV0aW5nVHlwZXMgPyAodGhpcy5tZWV0aW5nVHlwZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZ1R5cGVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3RNZXRhZGF0YUVudHJ5IGltcGxlbWVudHMgaS5VcGRhdGVNZWV0aW5nTWV0YWRhdGFSZXF1ZXN0TWV0YWRhdGFFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3RNZXRhZGF0YUVudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlTWVldGluZ01ldGFkYXRhUmVxdWVzdE1ldGFkYXRhRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3RNZXRhZGF0YUVudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2YWx1ZSddID0gdGhpcy52YWx1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZWV0aW5nTWV0YWRhdGFFbnRyeSBpbXBsZW1lbnRzIGkuTWVldGluZ01ldGFkYXRhRW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNZWV0aW5nTWV0YWRhdGFFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IE1lZXRpbmdNZXRhZGF0YUVudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NZWV0aW5nTWV0YWRhdGFFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmFsdWUnXSA9IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzY2hlZHVsZU1lZXRpbmdSZXF1ZXN0IGltcGxlbWVudHMgaS5SZXNjaGVkdWxlTWVldGluZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHN0YXJ0OiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVzY2hlZHVsZU1lZXRpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVzY2hlZHVsZU1lZXRpbmdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXJ0KSB7bS5zdGFydCA9IG5ldyBEYXRlKHByb3RvLnN0YXJ0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmVzY2hlZHVsZU1lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nSWQnXSA9IHRoaXMubWVldGluZ0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXJ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXJ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXJ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXJ0ID8gKHRoaXMuc3RhcnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhcnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0IGltcGxlbWVudHMgaS5TZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnRhY3RJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb250YWN0SWQnXSA9IHRoaXMuY29udGFjdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlcklkJ10gPSB0aGlzLnVzZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nVHlwZUlkJ10gPSB0aGlzLm1lZXRpbmdUeXBlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0R2VuZXJhbEF2YWlsYWJpbGl0eVJlcXVlc3QgaW1wbGVtZW50cyBpLlNldEdlbmVyYWxBdmFpbGFiaWxpdHlSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgZGF5czogZS5EYXlPZldlZWtbXTtcbiAgICB0aW1lU2xvdDogVGltZVJhbmdlO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZTtcbiAgICB3ZWVrZGF5c0F2YWlsYWJpbGl0eTogV2Vla2RheUF2YWlsYWJpbGl0eVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2V0R2VuZXJhbEF2YWlsYWJpbGl0eVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRHZW5lcmFsQXZhaWxhYmlsaXR5UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kYXlzKSB7bS5kYXlzID0gcHJvdG8uZGF5cy5tYXAoKHY6IHN0cmluZykgPT4gZW51bVN0cmluZ1RvVmFsdWU8ZS5EYXlPZldlZWs+KGUuRGF5T2ZXZWVrLCB2KSk7fVxuICAgICAgICBpZiAocHJvdG8udGltZVNsb3QpIHttLnRpbWVTbG90ID0gVGltZVJhbmdlLmZyb21Qcm90byhwcm90by50aW1lU2xvdCk7fVxuICAgICAgICBpZiAocHJvdG8udGltZVpvbmUpIHttLnRpbWVab25lID0gVGltZVpvbmUuZnJvbVByb3RvKHByb3RvLnRpbWVab25lKTt9XG4gICAgICAgIGlmIChwcm90by53ZWVrZGF5c0F2YWlsYWJpbGl0eSkge20ud2Vla2RheXNBdmFpbGFiaWxpdHkgPSBwcm90by53ZWVrZGF5c0F2YWlsYWJpbGl0eS5tYXAoV2Vla2RheUF2YWlsYWJpbGl0eS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZXRHZW5lcmFsQXZhaWxhYmlsaXR5UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaG9zdElkJ10gPSB0aGlzLmhvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nVHlwZUlkJ10gPSB0aGlzLm1lZXRpbmdUeXBlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF5cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGF5cyddID0gdGhpcy5kYXlzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpbWVTbG90ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRpbWVTbG90ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RpbWVTbG90J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRpbWVTbG90ID8gKHRoaXMudGltZVNsb3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGltZVNsb3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVpvbmUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGltZVpvbmUgIT09IG51bGwpIHt0b1JldHVyblsndGltZVpvbmUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVpvbmUgPyAodGhpcy50aW1lWm9uZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50aW1lWm9uZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53ZWVrZGF5c0F2YWlsYWJpbGl0eSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy53ZWVrZGF5c0F2YWlsYWJpbGl0eSAhPT0gbnVsbCkge3RvUmV0dXJuWyd3ZWVrZGF5c0F2YWlsYWJpbGl0eSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy53ZWVrZGF5c0F2YWlsYWJpbGl0eSA/ICh0aGlzLndlZWtkYXlzQXZhaWxhYmlsaXR5IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLndlZWtkYXlzQXZhaWxhYmlsaXR5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUF2YWlsYWJpbGl0eVJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUF2YWlsYWJpbGl0eVJlcXVlc3RJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQXZhaWxhYmlsaXR5UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUF2YWlsYWJpbGl0eVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUF2YWlsYWJpbGl0eVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVDYWxlbmRhclJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUNhbGVuZGFyUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuICAgIGNhbGVuZGFyVXBkYXRlOiBDYWxlbmRhcjtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUNhbGVuZGFyUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUNhbGVuZGFyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jYWxlbmRhclVwZGF0ZSkge20uY2FsZW5kYXJVcGRhdGUgPSBDYWxlbmRhci5mcm9tUHJvdG8ocHJvdG8uY2FsZW5kYXJVcGRhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVDYWxlbmRhclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRhcklkJ10gPSB0aGlzLmNhbGVuZGFySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJVcGRhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2FsZW5kYXJVcGRhdGUgIT09IG51bGwpIHt0b1JldHVyblsnY2FsZW5kYXJVcGRhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2FsZW5kYXJVcGRhdGUgPyAodGhpcy5jYWxlbmRhclVwZGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYWxlbmRhclVwZGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUhvc3RQcmVmZXJlbmNlc1JlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUhvc3RQcmVmZXJlbmNlc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIHByZWZlcmVuY2VzOiBQcmVmZXJlbmNlcztcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUhvc3RQcmVmZXJlbmNlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVIb3N0UHJlZmVyZW5jZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByZWZlcmVuY2VzKSB7bS5wcmVmZXJlbmNlcyA9IFByZWZlcmVuY2VzLmZyb21Qcm90byhwcm90by5wcmVmZXJlbmNlcyk7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUhvc3RQcmVmZXJlbmNlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hvc3RJZCddID0gdGhpcy5ob3N0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJlZmVyZW5jZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJlZmVyZW5jZXMgIT09IG51bGwpIHt0b1JldHVyblsncHJlZmVyZW5jZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJlZmVyZW5jZXMgPyAodGhpcy5wcmVmZXJlbmNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmVmZXJlbmNlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVNZWV0aW5nTWV0YWRhdGFSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1ldGFkYXRhKSB7bS5tZXRhZGF0YSA9IE9iamVjdC5rZXlzKHByb3RvLm1ldGFkYXRhKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IHByb3RvLm1ldGFkYXRhW2tdOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZXRpbmdJZCddID0gdGhpcy5tZWV0aW5nSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVNZWV0aW5nVHlwZVJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZU1lZXRpbmdUeXBlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGU7XG4gICAgZmllbGRNYXNrOiBGaWVsZE1hc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVNZWV0aW5nVHlwZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVNZWV0aW5nVHlwZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVldGluZ1R5cGUpIHttLm1lZXRpbmdUeXBlID0gTWVldGluZ1R5cGUuZnJvbVByb3RvKHByb3RvLm1lZXRpbmdUeXBlKTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlTWVldGluZ1R5cGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdUeXBlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZXRpbmdUeXBlICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lZXRpbmdUeXBlID8gKHRoaXMubWVldGluZ1R5cGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZ1R5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXZWVrZGF5QXZhaWxhYmlsaXR5IGltcGxlbWVudHMgaS5XZWVrZGF5QXZhaWxhYmlsaXR5SW50ZXJmYWNlIHtcbiAgICBkYXk6IGUuRGF5T2ZXZWVrO1xuICAgIHRpbWVTbG90czogVGltZVJhbmdlW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBXZWVrZGF5QXZhaWxhYmlsaXR5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgV2Vla2RheUF2YWlsYWJpbGl0eSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kYXkpIHttLmRheSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRGF5T2ZXZWVrPihlLkRheU9mV2VlaywgcHJvdG8uZGF5KTt9XG4gICAgICAgIGlmIChwcm90by50aW1lU2xvdHMpIHttLnRpbWVTbG90cyA9IHByb3RvLnRpbWVTbG90cy5tYXAoVGltZVJhbmdlLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLldlZWtkYXlBdmFpbGFiaWxpdHlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RheSddID0gdGhpcy5kYXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVNsb3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRpbWVTbG90cyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lU2xvdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVNsb3RzID8gKHRoaXMudGltZVNsb3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVTbG90czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiJdfQ==
1598
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVldGluZy1ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbWVldGluZ3Nfc2RrL3NyYy9saWIvX2ludGVybmFsL29iamVjdHMvbWVldGluZy1ob3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUosT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM5QixPQUFPLEtBQUssQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUU5QixNQUFNLFVBQVUsaUJBQWlCLENBQUksT0FBWSxFQUFFLEtBQWE7SUFDOUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLE9BQU8sb0VBQW9FO0lBSTdFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLG9FQUFvRSxFQUFFLENBQUM7UUFDbkYsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBd0Y7UUFDaEcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNE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O1NBQUM7UUFDckwsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi9kYXRlLXJhbmdlJztcbmltcG9ydCB7IEZpZWxkTWFzayB9IGZyb20gJy4vZmllbGQtbWFzayc7XG5pbXBvcnQgeyBNZWV0aW5nVHlwZSB9IGZyb20gJy4vbWVldGluZy10eXBlJztcbmltcG9ydCB7IFRpbWVSYW5nZSwgQ2FsZW5kYXIsIFByZWZlcmVuY2VzLCBIb3N0VXNlciwgQ29udGFjdCwgUGFnZWRSZXF1ZXN0T3B0aW9ucywgUGFnZWRSZXNwb25zZU1ldGFkYXRhLCBBdHRlbmRlZSwgQW5zd2VycywgQXR0YWNobWVudCB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IFRpbWVab25lIH0gZnJvbSAnLi8nO1xuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnkgaW1wbGVtZW50cyBpLkVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBFbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzUmVxdWVzdEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNFbnRyeSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSG9zdElkUmVxdWVzdEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNFbnRyeSBpbXBsZW1lbnRzIGkuQnVpbGRIb3N0SWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQnVpbGRIb3N0SWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQnVpbGRIb3N0SWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5CdWlsZEhvc3RJZFJlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNFbnRyeSBpbXBsZW1lbnRzIGkuSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0QXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc0VudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Jc0NhbGVuZGFyQ29uZmlndXJlZFJlcXVlc3RBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF2YWlsYWJpbGl0eVJ1bGUgaW1wbGVtZW50cyBpLkF2YWlsYWJpbGl0eVJ1bGVJbnRlcmZhY2Uge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICBkYXk6IGUuRGF5T2ZXZWVrO1xuICAgIHRpbWVTbG90OiBUaW1lUmFuZ2U7XG4gICAgdGltZVpvbmU6ICBUaW1lWm9uZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEF2YWlsYWJpbGl0eVJ1bGUge1xuICAgICAgICBsZXQgbSA9IG5ldyBBdmFpbGFiaWxpdHlSdWxlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRheSkge20uZGF5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5EYXlPZldlZWs+KGUuRGF5T2ZXZWVrLCBwcm90by5kYXkpO31cbiAgICAgICAgaWYgKHByb3RvLnRpbWVTbG90KSB7bS50aW1lU2xvdCA9IFRpbWVSYW5nZS5mcm9tUHJvdG8ocHJvdG8udGltZVNsb3QpO31cbiAgICAgICAgaWYgKHByb3RvLnRpbWVab25lKSB7bS50aW1lWm9uZSA9ICBUaW1lWm9uZS5mcm9tUHJvdG8ocHJvdG8udGltZVpvbmUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BdmFpbGFiaWxpdHlSdWxlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydob3N0SWQnXSA9IHRoaXMuaG9zdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdUeXBlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlSWQnXSA9IHRoaXMubWVldGluZ1R5cGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RheSddID0gdGhpcy5kYXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVNsb3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGltZVNsb3QgIT09IG51bGwpIHt0b1JldHVyblsndGltZVNsb3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVNsb3QgPyAodGhpcy50aW1lU2xvdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50aW1lU2xvdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aW1lWm9uZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lWm9uZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50aW1lWm9uZSA/ICh0aGlzLnRpbWVab25lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVab25lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSG9zdElkUmVxdWVzdCBpbXBsZW1lbnRzIGkuQnVpbGRIb3N0SWRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICB1c2VySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJ1aWxkSG9zdElkUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEJ1aWxkSG9zdElkUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzKSB7bS5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcykucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBwcm90by5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzW2tdOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJ1aWxkSG9zdElkUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgPyAodGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VySWQnXSA9IHRoaXMudXNlcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSG9zdElkUmVzcG9uc2UgaW1wbGVtZW50cyBpLkJ1aWxkSG9zdElkUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQnVpbGRIb3N0SWRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEJ1aWxkSG9zdElkUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJ1aWxkSG9zdElkUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hvc3RJZCddID0gdGhpcy5ob3N0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVzcG9uc2VDYWxlbmRhck1lZXRpbmdUeXBlc01hcEVudHJ5IGltcGxlbWVudHMgaS5HZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXNwb25zZUNhbGVuZGFyTWVldGluZ1R5cGVzTWFwRW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBNZWV0aW5nVHlwZUxpc3Q7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXNwb25zZUNhbGVuZGFyTWVldGluZ1R5cGVzTWFwRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXNwb25zZUNhbGVuZGFyTWVldGluZ1R5cGVzTWFwRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gTWVldGluZ1R5cGVMaXN0LmZyb21Qcm90byhwcm90by52YWx1ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1Jlc3BvbnNlQ2FsZW5kYXJNZWV0aW5nVHlwZXNNYXBFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2YWx1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbmNlbE1lZXRpbmdSZXF1ZXN0IGltcGxlbWVudHMgaS5DYW5jZWxNZWV0aW5nUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgY2FuY2VsbGF0aW9uUmVhc29uOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDYW5jZWxNZWV0aW5nUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENhbmNlbE1lZXRpbmdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DYW5jZWxNZWV0aW5nUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVldGluZ0lkJ10gPSB0aGlzLm1lZXRpbmdJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5jZWxsYXRpb25SZWFzb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbmNlbGxhdGlvblJlYXNvbiddID0gdGhpcy5jYW5jZWxsYXRpb25SZWFzb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlQXZhaWxhYmlsaXR5UmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlQXZhaWxhYmlsaXR5UmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVBdmFpbGFiaWxpdHlSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlQXZhaWxhYmlsaXR5UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlQXZhaWxhYmlsaXR5UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUF2YWlsYWJpbGl0eVJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVBdmFpbGFiaWxpdHlSZXNwb25zZUludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVBdmFpbGFiaWxpdHlSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUF2YWlsYWJpbGl0eVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVBdmFpbGFiaWxpdHlSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUNhbGVuZGFyUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcjogQ2FsZW5kYXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVDYWxlbmRhclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVDYWxlbmRhclJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY2FsZW5kYXIpIHttLmNhbGVuZGFyID0gQ2FsZW5kYXIuZnJvbVByb3RvKHByb3RvLmNhbGVuZGFyKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXIgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2FsZW5kYXIgIT09IG51bGwpIHt0b1JldHVyblsnY2FsZW5kYXInXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2FsZW5kYXIgPyAodGhpcy5jYWxlbmRhciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYWxlbmRhcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVDYWxlbmRhclJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVDYWxlbmRhclJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVDYWxlbmRhclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlQ2FsZW5kYXJSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlQ2FsZW5kYXJSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWQnXSA9IHRoaXMuY2FsZW5kYXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVEZWZhdWx0TWVldGluZ1R5cGVzUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNhbGVuZGFySWQ6IHN0cmluZztcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVEZWZhdWx0TWVldGluZ1R5cGVzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVEZWZhdWx0TWVldGluZ1R5cGVzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWQnXSA9IHRoaXMuY2FsZW5kYXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FsZW5kYXJJZHMnXSA9IHRoaXMuY2FsZW5kYXJJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlTWVldGluZ1R5cGVSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVNZWV0aW5nVHlwZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcbiAgICBob3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU1lZXRpbmdUeXBlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU1lZXRpbmdUeXBlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5nVHlwZSkge20ubWVldGluZ1R5cGUgPSBNZWV0aW5nVHlwZS5mcm9tUHJvdG8ocHJvdG8ubWVldGluZ1R5cGUpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNZWV0aW5nVHlwZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWV0aW5nVHlwZSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZWV0aW5nVHlwZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWV0aW5nVHlwZSA/ICh0aGlzLm1lZXRpbmdUeXBlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lZXRpbmdUeXBlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydob3N0SWQnXSA9IHRoaXMuaG9zdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU1lZXRpbmdUeXBlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZU1lZXRpbmdUeXBlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNZWV0aW5nVHlwZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTWVldGluZ1R5cGVSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlTWVldGluZ1R5cGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVBdmFpbGFiaWxpdHlSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVBdmFpbGFiaWxpdHlSZXF1ZXN0SW50ZXJmYWNlIHtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUF2YWlsYWJpbGl0eVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVBdmFpbGFiaWxpdHlSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVBdmFpbGFiaWxpdHlSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlTWVldGluZ1R5cGVSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVNZWV0aW5nVHlwZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVNZWV0aW5nVHlwZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVNZWV0aW5nVHlwZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZU1lZXRpbmdUeXBlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2VzQ2FsZW5kYXJFeGlzdFJlcXVlc3QgaW1wbGVtZW50cyBpLkRvZXNDYWxlbmRhckV4aXN0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgY2FsZW5kYXJJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEb2VzQ2FsZW5kYXJFeGlzdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEb2VzQ2FsZW5kYXJFeGlzdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRvZXNDYWxlbmRhckV4aXN0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWRlbnRpZmllciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FsZW5kYXJJZGVudGlmaWVyJ10gPSB0aGlzLmNhbGVuZGFySWRlbnRpZmllcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2VzQ2FsZW5kYXJFeGlzdFJlc3BvbnNlIGltcGxlbWVudHMgaS5Eb2VzQ2FsZW5kYXJFeGlzdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBleGlzdHM6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEb2VzQ2FsZW5kYXJFeGlzdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRG9lc0NhbGVuZGFyRXhpc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRG9lc0NhbGVuZGFyRXhpc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4aXN0cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXhpc3RzJ10gPSB0aGlzLmV4aXN0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0UmVxdWVzdCBpbXBsZW1lbnRzIGkuRW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGV4dGVybmFsSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXh0ZXJuYWxJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2V4dGVybmFsSWRzJ10gPSB0aGlzLmV4dGVybmFsSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuRW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBFbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRhcklkcyddID0gdGhpcy5jYWxlbmRhcklkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzUmVxdWVzdCBpbXBsZW1lbnRzIGkuRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBFbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzKSB7bS5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcykucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBwcm90by5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzW2tdOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VySWQnXSA9IHRoaXMudXNlcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgPyAodGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5FbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNhbGVuZGFySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FsZW5kYXJJZCddID0gdGhpcy5jYWxlbmRhcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVycyBpbXBsZW1lbnRzIGkuTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaG9zdElkJ10gPSB0aGlzLmhvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nVHlwZUlkJ10gPSB0aGlzLm1lZXRpbmdUeXBlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMgaW1wbGVtZW50cyBpLkxpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBtZWV0aW5nVHlwZUlkczogc3RyaW5nW107XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgdGltZVNwYW46IERhdGVSYW5nZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGltZVNwYW4pIHttLnRpbWVTcGFuID0gRGF0ZVJhbmdlLmZyb21Qcm90byhwcm90by50aW1lU3Bhbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ1R5cGVJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlSWRzJ10gPSB0aGlzLm1lZXRpbmdUeXBlSWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaG9zdElkJ10gPSB0aGlzLmhvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lU3BhbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aW1lU3BhbiAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lU3BhbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50aW1lU3BhbiA/ICh0aGlzLnRpbWVTcGFuIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVTcGFuO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEhvc3RNZWV0aW5nUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0SG9zdE1lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBsb2NhdGlvbjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SG9zdE1lZXRpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0SG9zdE1lZXRpbmdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRIb3N0TWVldGluZ1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZXRpbmdJZCddID0gdGhpcy5tZWV0aW5nSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xvY2F0aW9uJ10gPSB0aGlzLmxvY2F0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEhvc3RNZWV0aW5nUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEhvc3RNZWV0aW5nUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmc6IE1lZXRpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRIb3N0TWVldGluZ1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0SG9zdE1lZXRpbmdSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5nKSB7bS5tZWV0aW5nID0gTWVldGluZy5mcm9tUHJvdG8ocHJvdG8ubWVldGluZyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEhvc3RNZWV0aW5nUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZXRpbmcgIT09IG51bGwpIHt0b1JldHVyblsnbWVldGluZyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWV0aW5nID8gKHRoaXMubWVldGluZyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZWV0aW5nO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEhvc3RQcmVmZXJlbmNlc1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldEhvc3RQcmVmZXJlbmNlc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SG9zdFByZWZlcmVuY2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEhvc3RQcmVmZXJlbmNlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEhvc3RQcmVmZXJlbmNlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hvc3RJZCddID0gdGhpcy5ob3N0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0SG9zdFByZWZlcmVuY2VzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEhvc3RQcmVmZXJlbmNlc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwcmVmZXJlbmNlczogUHJlZmVyZW5jZXM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRIb3N0UHJlZmVyZW5jZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEhvc3RQcmVmZXJlbmNlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByZWZlcmVuY2VzKSB7bS5wcmVmZXJlbmNlcyA9IFByZWZlcmVuY2VzLmZyb21Qcm90byhwcm90by5wcmVmZXJlbmNlcyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEhvc3RQcmVmZXJlbmNlc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJlZmVyZW5jZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJlZmVyZW5jZXMgIT09IG51bGwpIHt0b1JldHVyblsncHJlZmVyZW5jZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJlZmVyZW5jZXMgPyAodGhpcy5wcmVmZXJlbmNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmVmZXJlbmNlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIb3N0c0ZvckNhbGVuZGFyUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0SG9zdHNGb3JDYWxlbmRhclJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNhbGVuZGFySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEhvc3RzRm9yQ2FsZW5kYXJSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0SG9zdHNGb3JDYWxlbmRhclJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEhvc3RzRm9yQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FsZW5kYXJJZCddID0gdGhpcy5jYWxlbmRhcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEhvc3RzRm9yQ2FsZW5kYXJSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0SG9zdHNGb3JDYWxlbmRhclJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBob3N0VXNlcnM6IEhvc3RVc2VyW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRIb3N0c0ZvckNhbGVuZGFyUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRIb3N0c0ZvckNhbGVuZGFyUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaG9zdFVzZXJzKSB7bS5ob3N0VXNlcnMgPSBwcm90by5ob3N0VXNlcnMubWFwKEhvc3RVc2VyLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEhvc3RzRm9yQ2FsZW5kYXJSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvc3RVc2VycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5ob3N0VXNlcnMgIT09IG51bGwpIHt0b1JldHVyblsnaG9zdFVzZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmhvc3RVc2VycyA/ICh0aGlzLmhvc3RVc2VycyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5ob3N0VXNlcnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FsZW5kYXJJZHMnXSA9IHRoaXMuY2FsZW5kYXJJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhck1lZXRpbmdUeXBlc01hcDoge1trZXk6IHN0cmluZ106IE1lZXRpbmdUeXBlTGlzdH07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNZWV0aW5nVHlwZXNGb3JDYWxlbmRhcnNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwKSB7bS5jYWxlbmRhck1lZXRpbmdUeXBlc01hcCA9IE9iamVjdC5rZXlzKHByb3RvLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IE1lZXRpbmdUeXBlTGlzdC5mcm9tUHJvdG8ocHJvdG8uY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXBba10pOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFyc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXAgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXAgIT09IG51bGwpIHt0b1JldHVyblsnY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXAnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXAgPyAodGhpcy5jYWxlbmRhck1lZXRpbmdUeXBlc01hcCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYWxlbmRhck1lZXRpbmdUeXBlc01hcDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0Qm9va01lZXRpbmdSZXF1ZXN0IGltcGxlbWVudHMgaS5Ib3N0Qm9va01lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZWV0aW5nU291cmNlOiBlLk1lZXRpbmdTb3VyY2U7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICB0aW1lU2xvdDogRGF0ZVJhbmdlO1xuICAgIGF0dGVuZGVlczogQ29udGFjdFtdO1xuICAgIHRvcGljOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBIb3N0Qm9va01lZXRpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSG9zdEJvb2tNZWV0aW5nUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5nU291cmNlKSB7bS5tZWV0aW5nU291cmNlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5NZWV0aW5nU291cmNlPihlLk1lZXRpbmdTb3VyY2UsIHByb3RvLm1lZXRpbmdTb3VyY2UpO31cbiAgICAgICAgaWYgKHByb3RvLnRpbWVTbG90KSB7bS50aW1lU2xvdCA9IERhdGVSYW5nZS5mcm9tUHJvdG8ocHJvdG8udGltZVNsb3QpO31cbiAgICAgICAgaWYgKHByb3RvLmF0dGVuZGVlcykge20uYXR0ZW5kZWVzID0gcHJvdG8uYXR0ZW5kZWVzLm1hcChDb250YWN0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkhvc3RCb29rTWVldGluZ1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nU291cmNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nU291cmNlJ10gPSB0aGlzLm1lZXRpbmdTb3VyY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsZW5kYXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FsZW5kYXJJZCddID0gdGhpcy5jYWxlbmRhcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdUeXBlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlSWQnXSA9IHRoaXMubWVldGluZ1R5cGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lU2xvdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aW1lU2xvdCAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lU2xvdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50aW1lU2xvdCA/ICh0aGlzLnRpbWVTbG90IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVTbG90O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmF0dGVuZGVlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hdHRlbmRlZXMgIT09IG51bGwpIHt0b1JldHVyblsnYXR0ZW5kZWVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmF0dGVuZGVlcyA/ICh0aGlzLmF0dGVuZGVlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hdHRlbmRlZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9waWMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RvcGljJ10gPSB0aGlzLnRvcGljO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhvc3RCb29rTWVldGluZ1Jlc3BvbnNlIGltcGxlbWVudHMgaS5Ib3N0Qm9va01lZXRpbmdSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBIb3N0Qm9va01lZXRpbmdSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEhvc3RCb29rTWVldGluZ1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Ib3N0Qm9va01lZXRpbmdSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVldGluZ0lkJ10gPSB0aGlzLm1lZXRpbmdJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0R2V0Q2FsZW5kYXJSZXF1ZXN0IGltcGxlbWVudHMgaS5Ib3N0R2V0Q2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBIb3N0R2V0Q2FsZW5kYXJSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSG9zdEdldENhbGVuZGFyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSG9zdEdldENhbGVuZGFyUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWQnXSA9IHRoaXMuY2FsZW5kYXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0R2V0Q2FsZW5kYXJSZXNwb25zZSBpbXBsZW1lbnRzIGkuSG9zdEdldENhbGVuZGFyUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGNhbGVuZGFyOiBDYWxlbmRhcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEhvc3RHZXRDYWxlbmRhclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSG9zdEdldENhbGVuZGFyUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY2FsZW5kYXIpIHttLmNhbGVuZGFyID0gQ2FsZW5kYXIuZnJvbVByb3RvKHByb3RvLmNhbGVuZGFyKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSG9zdEdldENhbGVuZGFyUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jYWxlbmRhciAhPT0gbnVsbCkge3RvUmV0dXJuWydjYWxlbmRhciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jYWxlbmRhciA/ICh0aGlzLmNhbGVuZGFyIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNhbGVuZGFyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhvc3RHZXRNZWV0aW5nVHlwZVJlcXVlc3QgaW1wbGVtZW50cyBpLkhvc3RHZXRNZWV0aW5nVHlwZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNhbGVuZGFyU2x1Zzogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlU2x1Zzogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSG9zdEdldE1lZXRpbmdUeXBlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEhvc3RHZXRNZWV0aW5nVHlwZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkhvc3RHZXRNZWV0aW5nVHlwZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhclNsdWcgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFyU2x1ZyddID0gdGhpcy5jYWxlbmRhclNsdWc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ1R5cGVTbHVnICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nVHlwZVNsdWcnXSA9IHRoaXMubWVldGluZ1R5cGVTbHVnO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhvc3RHZXRNZWV0aW5nVHlwZVJlc3BvbnNlIGltcGxlbWVudHMgaS5Ib3N0R2V0TWVldGluZ1R5cGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVldGluZ1R5cGU6IE1lZXRpbmdUeXBlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSG9zdEdldE1lZXRpbmdUeXBlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBIb3N0R2V0TWVldGluZ1R5cGVSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5nVHlwZSkge20ubWVldGluZ1R5cGUgPSBNZWV0aW5nVHlwZS5mcm9tUHJvdG8ocHJvdG8ubWVldGluZ1R5cGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Ib3N0R2V0TWVldGluZ1R5cGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdUeXBlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZXRpbmdUeXBlICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lZXRpbmdUeXBlID8gKHRoaXMubWVldGluZ1R5cGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZ1R5cGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSG9zdExpc3RNZWV0aW5nVHlwZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5Ib3N0TGlzdE1lZXRpbmdUeXBlc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSG9zdExpc3RNZWV0aW5nVHlwZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSG9zdExpc3RNZWV0aW5nVHlwZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Ib3N0TGlzdE1lZXRpbmdUeXBlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hvc3RJZCddID0gdGhpcy5ob3N0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSG9zdExpc3RNZWV0aW5nVHlwZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuSG9zdExpc3RNZWV0aW5nVHlwZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVldGluZ1R5cGVzOiBNZWV0aW5nVHlwZVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSG9zdExpc3RNZWV0aW5nVHlwZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEhvc3RMaXN0TWVldGluZ1R5cGVzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVldGluZ1R5cGVzKSB7bS5tZWV0aW5nVHlwZXMgPSBwcm90by5tZWV0aW5nVHlwZXMubWFwKE1lZXRpbmdUeXBlLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkhvc3RMaXN0TWVldGluZ1R5cGVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVldGluZ1R5cGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWV0aW5nVHlwZXMgPyAodGhpcy5tZWV0aW5nVHlwZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZ1R5cGVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdCBpbXBsZW1lbnRzIGkuSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICB1c2VySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzKSB7bS5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvdG8uYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcykucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBwcm90by5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzW2tdOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgPyAodGhpcy5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VySWQnXSA9IHRoaXMudXNlcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElzQ2FsZW5kYXJDb25maWd1cmVkUmVzcG9uc2UgaW1wbGVtZW50cyBpLklzQ2FsZW5kYXJDb25maWd1cmVkUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGlzQ29uZmlndXJlZDogYm9vbGVhbjtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzQ29uZmlndXJlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNDb25maWd1cmVkJ10gPSB0aGlzLmlzQ29uZmlndXJlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRhcklkJ10gPSB0aGlzLmNhbGVuZGFySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXNIb3N0Q29uZmlndXJlZFJlcXVlc3QgaW1wbGVtZW50cyBpLklzSG9zdENvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBob3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElzSG9zdENvbmZpZ3VyZWRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSXNIb3N0Q29uZmlndXJlZFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklzSG9zdENvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydob3N0SWQnXSA9IHRoaXMuaG9zdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZSBpbXBsZW1lbnRzIGkuSXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpc0NvbmZpZ3VyZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklzSG9zdENvbmZpZ3VyZWRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzQ29uZmlndXJlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNDb25maWd1cmVkJ10gPSB0aGlzLmlzQ29uZmlndXJlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG4gICAgZmlsdGVyczogTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RGaWx0ZXJzO1xuICAgIHRpbWVab25lOiAgVGltZVpvbmU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIGlmIChwcm90by50aW1lWm9uZSkge20udGltZVpvbmUgPSAgVGltZVpvbmUuZnJvbVByb3RvKHByb3RvLnRpbWVab25lKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdEF2YWlsYWJpbGl0eVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVpvbmUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGltZVpvbmUgIT09IG51bGwpIHt0b1JldHVyblsndGltZVpvbmUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVpvbmUgPyAodGhpcy50aW1lWm9uZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50aW1lWm9uZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0QXZhaWxhYmlsaXR5UmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RBdmFpbGFiaWxpdHlSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYXZhaWxhYmlsaXR5UnVsZXM6IEF2YWlsYWJpbGl0eVJ1bGVbXTtcbiAgICBtZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEF2YWlsYWJpbGl0eVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEF2YWlsYWJpbGl0eVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmF2YWlsYWJpbGl0eVJ1bGVzKSB7bS5hdmFpbGFiaWxpdHlSdWxlcyA9IHByb3RvLmF2YWlsYWJpbGl0eVJ1bGVzLm1hcChBdmFpbGFiaWxpdHlSdWxlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5tZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RBdmFpbGFiaWxpdHlSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmF2YWlsYWJpbGl0eVJ1bGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmF2YWlsYWJpbGl0eVJ1bGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2F2YWlsYWJpbGl0eVJ1bGVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmF2YWlsYWJpbGl0eVJ1bGVzID8gKHRoaXMuYXZhaWxhYmlsaXR5UnVsZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXZhaWxhYmlsaXR5UnVsZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBmaWx0ZXJzOiBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVycztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuICAgIHRpbWVab25lOiAgVGltZVpvbmU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMuZnJvbVByb3RvKHByb3RvLmZpbHRlcnMpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by50aW1lWm9uZSkge20udGltZVpvbmUgPSAgVGltZVpvbmUuZnJvbVByb3RvKHByb3RvLnRpbWVab25lKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdPcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ09wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nT3B0aW9ucyA/ICh0aGlzLnBhZ2luZ09wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nT3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aW1lWm9uZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lWm9uZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50aW1lWm9uZSA/ICh0aGlzLnRpbWVab25lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVab25lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RCb29rZWRNZWV0aW5nc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVldGluZ3M6IE1lZXRpbmdbXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEJvb2tlZE1lZXRpbmdzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5ncykge20ubWVldGluZ3MgPSBwcm90by5tZWV0aW5ncy5tYXAoTWVldGluZy5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZXRpbmdzICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmdzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lZXRpbmdzID8gKHRoaXMubWVldGluZ3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZ3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZWV0aW5nIGltcGxlbWVudHMgaS5NZWV0aW5nSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGV2ZW50VHlwZUlkOiBzdHJpbmc7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgZW5kOiBEYXRlO1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgdXBkYXRlZDogRGF0ZTtcbiAgICBhdHRlbmRlZXM6IEF0dGVuZGVlW107XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBqb2luTWVldGluZ1VybDogc3RyaW5nO1xuICAgIHRvcGljOiBzdHJpbmc7XG4gICAgZm9ybUFuc3dlcnM6IEFuc3dlcnM7XG4gICAgbWV0YWRhdGE6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50W107XG4gICAgbG9jYXRpb246IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1lZXRpbmcge1xuICAgICAgICBsZXQgbSA9IG5ldyBNZWV0aW5nKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXJ0KSB7bS5zdGFydCA9IG5ldyBEYXRlKHByb3RvLnN0YXJ0KTt9XG4gICAgICAgIGlmIChwcm90by5lbmQpIHttLmVuZCA9IG5ldyBEYXRlKHByb3RvLmVuZCk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLnVwZGF0ZWQpIHttLnVwZGF0ZWQgPSBuZXcgRGF0ZShwcm90by51cGRhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by5hdHRlbmRlZXMpIHttLmF0dGVuZGVlcyA9IHByb3RvLmF0dGVuZGVlcy5tYXAoQXR0ZW5kZWUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5mb3JtQW5zd2Vycykge20uZm9ybUFuc3dlcnMgPSBBbnN3ZXJzLmZyb21Qcm90byhwcm90by5mb3JtQW5zd2Vycyk7fVxuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gT2JqZWN0LmtleXMocHJvdG8ubWV0YWRhdGEpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gcHJvdG8ubWV0YWRhdGFba107IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIGlmIChwcm90by5hdHRhY2htZW50cykge20uYXR0YWNobWVudHMgPSBwcm90by5hdHRhY2htZW50cy5tYXAoQXR0YWNobWVudC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NZWV0aW5nSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2ZW50VHlwZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydldmVudFR5cGVJZCddID0gdGhpcy5ldmVudFR5cGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hvc3RJZCddID0gdGhpcy5ob3N0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnQgIT09IG51bGwpIHt0b1JldHVyblsnc3RhcnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhcnQgPyAodGhpcy5zdGFydCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGFydDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VuZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lbmQgPyAodGhpcy5lbmQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW5kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy51cGRhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3VwZGF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudXBkYXRlZCA/ICh0aGlzLnVwZGF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudXBkYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdHRlbmRlZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXR0ZW5kZWVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2F0dGVuZGVlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hdHRlbmRlZXMgPyAodGhpcy5hdHRlbmRlZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXR0ZW5kZWVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5qb2luTWVldGluZ1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnam9pbk1lZXRpbmdVcmwnXSA9IHRoaXMuam9pbk1lZXRpbmdVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9waWMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RvcGljJ10gPSB0aGlzLnRvcGljO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1BbnN3ZXJzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZvcm1BbnN3ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Zvcm1BbnN3ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZvcm1BbnN3ZXJzID8gKHRoaXMuZm9ybUFuc3dlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZm9ybUFuc3dlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdHRhY2htZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hdHRhY2htZW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydhdHRhY2htZW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hdHRhY2htZW50cyA/ICh0aGlzLmF0dGFjaG1lbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmF0dGFjaG1lbnRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsb2NhdGlvbiddID0gdGhpcy5sb2NhdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZWV0aW5nVHlwZUxpc3QgaW1wbGVtZW50cyBpLk1lZXRpbmdUeXBlTGlzdEludGVyZmFjZSB7XG4gICAgbWVldGluZ1R5cGVzOiBNZWV0aW5nVHlwZVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTWVldGluZ1R5cGVMaXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTWVldGluZ1R5cGVMaXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lZXRpbmdUeXBlcykge20ubWVldGluZ1R5cGVzID0gcHJvdG8ubWVldGluZ1R5cGVzLm1hcChNZWV0aW5nVHlwZS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NZWV0aW5nVHlwZUxpc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVldGluZ1R5cGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWV0aW5nVHlwZXMgPyAodGhpcy5tZWV0aW5nVHlwZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZ1R5cGVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3RNZXRhZGF0YUVudHJ5IGltcGxlbWVudHMgaS5VcGRhdGVNZWV0aW5nTWV0YWRhdGFSZXF1ZXN0TWV0YWRhdGFFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3RNZXRhZGF0YUVudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlTWVldGluZ01ldGFkYXRhUmVxdWVzdE1ldGFkYXRhRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3RNZXRhZGF0YUVudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2YWx1ZSddID0gdGhpcy52YWx1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZWV0aW5nTWV0YWRhdGFFbnRyeSBpbXBsZW1lbnRzIGkuTWVldGluZ01ldGFkYXRhRW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNZWV0aW5nTWV0YWRhdGFFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IE1lZXRpbmdNZXRhZGF0YUVudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NZWV0aW5nTWV0YWRhdGFFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmFsdWUnXSA9IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzY2hlZHVsZU1lZXRpbmdSZXF1ZXN0IGltcGxlbWVudHMgaS5SZXNjaGVkdWxlTWVldGluZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHN0YXJ0OiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVzY2hlZHVsZU1lZXRpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVzY2hlZHVsZU1lZXRpbmdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXJ0KSB7bS5zdGFydCA9IG5ldyBEYXRlKHByb3RvLnN0YXJ0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmVzY2hlZHVsZU1lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nSWQnXSA9IHRoaXMubWVldGluZ0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXJ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXJ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXJ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXJ0ID8gKHRoaXMuc3RhcnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhcnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0IGltcGxlbWVudHMgaS5TZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbnRhY3RJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb250YWN0SWQnXSA9IHRoaXMuY29udGFjdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlcklkJ10gPSB0aGlzLnVzZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nVHlwZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nVHlwZUlkJ10gPSB0aGlzLm1lZXRpbmdUeXBlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0R2VuZXJhbEF2YWlsYWJpbGl0eVJlcXVlc3QgaW1wbGVtZW50cyBpLlNldEdlbmVyYWxBdmFpbGFiaWxpdHlSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgZGF5czogZS5EYXlPZldlZWtbXTtcbiAgICB0aW1lU2xvdDogVGltZVJhbmdlO1xuICAgIHRpbWVab25lOiAgVGltZVpvbmU7XG4gICAgd2Vla2RheXNBdmFpbGFiaWxpdHk6IFdlZWtkYXlBdmFpbGFiaWxpdHlbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldEdlbmVyYWxBdmFpbGFiaWxpdHlSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2V0R2VuZXJhbEF2YWlsYWJpbGl0eVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZGF5cykge20uZGF5cyA9IHByb3RvLmRheXMubWFwKCh2OiBzdHJpbmcpID0+IGVudW1TdHJpbmdUb1ZhbHVlPGUuRGF5T2ZXZWVrPihlLkRheU9mV2VlaywgdikpO31cbiAgICAgICAgaWYgKHByb3RvLnRpbWVTbG90KSB7bS50aW1lU2xvdCA9IFRpbWVSYW5nZS5mcm9tUHJvdG8ocHJvdG8udGltZVNsb3QpO31cbiAgICAgICAgaWYgKHByb3RvLnRpbWVab25lKSB7bS50aW1lWm9uZSA9ICBUaW1lWm9uZS5mcm9tUHJvdG8ocHJvdG8udGltZVpvbmUpO31cbiAgICAgICAgaWYgKHByb3RvLndlZWtkYXlzQXZhaWxhYmlsaXR5KSB7bS53ZWVrZGF5c0F2YWlsYWJpbGl0eSA9IHByb3RvLndlZWtkYXlzQXZhaWxhYmlsaXR5Lm1hcChXZWVrZGF5QXZhaWxhYmlsaXR5LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNldEdlbmVyYWxBdmFpbGFiaWxpdHlSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydob3N0SWQnXSA9IHRoaXMuaG9zdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdUeXBlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZXRpbmdUeXBlSWQnXSA9IHRoaXMubWVldGluZ1R5cGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXlzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkYXlzJ10gPSB0aGlzLmRheXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVNsb3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGltZVNsb3QgIT09IG51bGwpIHt0b1JldHVyblsndGltZVNsb3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVNsb3QgPyAodGhpcy50aW1lU2xvdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50aW1lU2xvdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aW1lWm9uZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lWm9uZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50aW1lWm9uZSA/ICh0aGlzLnRpbWVab25lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVab25lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndlZWtkYXlzQXZhaWxhYmlsaXR5ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLndlZWtkYXlzQXZhaWxhYmlsaXR5ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3dlZWtkYXlzQXZhaWxhYmlsaXR5J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLndlZWtkYXlzQXZhaWxhYmlsaXR5ID8gKHRoaXMud2Vla2RheXNBdmFpbGFiaWxpdHkgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMud2Vla2RheXNBdmFpbGFiaWxpdHk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlQXZhaWxhYmlsaXR5UmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQXZhaWxhYmlsaXR5UmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVBdmFpbGFiaWxpdHlSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQXZhaWxhYmlsaXR5UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlQXZhaWxhYmlsaXR5UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUNhbGVuZGFyUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgY2FsZW5kYXJVcGRhdGU6IENhbGVuZGFyO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQ2FsZW5kYXJSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQ2FsZW5kYXJSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNhbGVuZGFyVXBkYXRlKSB7bS5jYWxlbmRhclVwZGF0ZSA9IENhbGVuZGFyLmZyb21Qcm90byhwcm90by5jYWxlbmRhclVwZGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUNhbGVuZGFyUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGFySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGFySWQnXSA9IHRoaXMuY2FsZW5kYXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRhclVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jYWxlbmRhclVwZGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydjYWxlbmRhclVwZGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jYWxlbmRhclVwZGF0ZSA/ICh0aGlzLmNhbGVuZGFyVXBkYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNhbGVuZGFyVXBkYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlSG9zdFByZWZlcmVuY2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlSG9zdFByZWZlcmVuY2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgcHJlZmVyZW5jZXM6IFByZWZlcmVuY2VzO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlSG9zdFByZWZlcmVuY2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUhvc3RQcmVmZXJlbmNlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHJlZmVyZW5jZXMpIHttLnByZWZlcmVuY2VzID0gUHJlZmVyZW5jZXMuZnJvbVByb3RvKHByb3RvLnByZWZlcmVuY2VzKTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlSG9zdFByZWZlcmVuY2VzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaG9zdElkJ10gPSB0aGlzLmhvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmVmZXJlbmNlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmVmZXJlbmNlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydwcmVmZXJlbmNlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcmVmZXJlbmNlcyA/ICh0aGlzLnByZWZlcmVuY2VzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnByZWZlcmVuY2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkTWFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWVsZE1hc2sgIT09IG51bGwpIHt0b1JldHVyblsnZmllbGRNYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpZWxkTWFzayA/ICh0aGlzLmZpZWxkTWFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWVsZE1hc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTWVldGluZ01ldGFkYXRhUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlTWVldGluZ01ldGFkYXRhUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlTWVldGluZ01ldGFkYXRhUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZU1lZXRpbmdNZXRhZGF0YVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gT2JqZWN0LmtleXMocHJvdG8ubWV0YWRhdGEpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gcHJvdG8ubWV0YWRhdGFba107IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlTWVldGluZ01ldGFkYXRhUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVldGluZ0lkJ10gPSB0aGlzLm1lZXRpbmdJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1lZXRpbmdUeXBlUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlTWVldGluZ1R5cGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcbiAgICBob3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU1lZXRpbmdUeXBlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZU1lZXRpbmdUeXBlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5nVHlwZSkge20ubWVldGluZ1R5cGUgPSBNZWV0aW5nVHlwZS5mcm9tUHJvdG8ocHJvdG8ubWVldGluZ1R5cGUpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVNZWV0aW5nVHlwZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZ1R5cGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVldGluZ1R5cGUgIT09IG51bGwpIHt0b1JldHVyblsnbWVldGluZ1R5cGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVldGluZ1R5cGUgPyAodGhpcy5tZWV0aW5nVHlwZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZWV0aW5nVHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaG9zdElkJ10gPSB0aGlzLmhvc3RJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXZWVrZGF5QXZhaWxhYmlsaXR5IGltcGxlbWVudHMgaS5XZWVrZGF5QXZhaWxhYmlsaXR5SW50ZXJmYWNlIHtcbiAgICBkYXk6IGUuRGF5T2ZXZWVrO1xuICAgIHRpbWVTbG90czogVGltZVJhbmdlW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBXZWVrZGF5QXZhaWxhYmlsaXR5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgV2Vla2RheUF2YWlsYWJpbGl0eSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kYXkpIHttLmRheSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRGF5T2ZXZWVrPihlLkRheU9mV2VlaywgcHJvdG8uZGF5KTt9XG4gICAgICAgIGlmIChwcm90by50aW1lU2xvdHMpIHttLnRpbWVTbG90cyA9IHByb3RvLnRpbWVTbG90cy5tYXAoVGltZVJhbmdlLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLldlZWtkYXlBdmFpbGFiaWxpdHlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RheSddID0gdGhpcy5kYXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVNsb3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRpbWVTbG90cyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aW1lU2xvdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGltZVNsb3RzID8gKHRoaXMudGltZVNsb3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpbWVTbG90czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiJdfQ==