@bizdoc/core 1.13.34 → 1.13.38

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 (60) hide show
  1. package/assets/themes/brown.min.css +0 -2
  2. package/assets/themes/dark.min.css +3 -5
  3. package/assets/themes/deep-purple-light-blue.min.css +0 -2
  4. package/assets/themes/deep-purple-teal.min.css +0 -2
  5. package/assets/themes/default.min.css +0 -2
  6. package/assets/themes/green.min.css +0 -2
  7. package/assets/themes/indigo.min.css +0 -2
  8. package/esm2020/lib/admin/document-trace/trace-element.component.mjs +4 -4
  9. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +52 -19
  10. package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +16 -13
  11. package/esm2020/lib/chat/chat-info.mjs +2 -3
  12. package/esm2020/lib/chat/conversation.component.mjs +2 -2
  13. package/esm2020/lib/chat/conversation.pane.component.mjs +11 -2
  14. package/esm2020/lib/compose/action/assign-action.component.mjs +19 -43
  15. package/esm2020/lib/compose/trace/flow.component.mjs +46 -32
  16. package/esm2020/lib/compose/trace/trace.component.mjs +8 -12
  17. package/esm2020/lib/core/controls/auto-complete.input.mjs +3 -2
  18. package/esm2020/lib/core/models.mjs +1 -1
  19. package/esm2020/lib/core/slots/slots.component.mjs +2 -2
  20. package/esm2020/lib/core/translations.mjs +11 -7
  21. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +2 -1
  22. package/esm2020/lib/dashboard/cube/compare.widget.mjs +6 -5
  23. package/esm2020/lib/dashboard/score/compare-groups.widget.mjs +206 -0
  24. package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +2 -2
  25. package/esm2020/lib/dashboard/score/pending-results.widget.mjs +5 -9
  26. package/esm2020/lib/home/home.desktop.component.mjs +4 -4
  27. package/esm2020/lib/modules/chart.module.mjs +10 -10
  28. package/esm2020/lib/modules/circular-gauge.module.mjs +1 -1
  29. package/esm2020/lib/modules/dayjs.module.mjs +41 -0
  30. package/esm2020/lib/modules/diagram.module.mjs +1 -1
  31. package/esm2020/lib/modules/gantt.module.mjs +4 -3
  32. package/esm2020/lib/modules/pivot.module.mjs +1 -1
  33. package/esm2020/lib/reports/cube/usage-base.mjs +2 -2
  34. package/esm2020/lib/reports/cube/usage-chart.component.mjs +11 -7
  35. package/esm2020/lib/reports/cube/usage-pivot.component.mjs +21 -3
  36. package/esm2020/lib/reports/report.mobile.component.mjs +3 -3
  37. package/esm2020/lib/reports/report.pane.component.mjs +3 -3
  38. package/esm2020/lib/shared.module.mjs +14 -32
  39. package/esm2020/lib/system.module.mjs +2 -1
  40. package/esm2020/public-api.mjs +2 -2
  41. package/fesm2015/bizdoc-core.mjs +423 -343
  42. package/fesm2015/bizdoc-core.mjs.map +1 -1
  43. package/fesm2020/bizdoc-core.mjs +423 -344
  44. package/fesm2020/bizdoc-core.mjs.map +1 -1
  45. package/lib/admin/form/workflow/workflow.component.d.ts +9 -6
  46. package/lib/compose/action/assign-action.component.d.ts +3 -9
  47. package/lib/core/models.d.ts +1 -0
  48. package/lib/core/translations.d.ts +6 -2
  49. package/lib/dashboard/score/{compare-departments.widget.d.ts → compare-groups.widget.d.ts} +3 -3
  50. package/lib/dashboard/score/pending-results.widget.d.ts +0 -1
  51. package/lib/home/home.desktop.component.d.ts +1 -1
  52. package/lib/modules/chart.module.d.ts +1 -1
  53. package/lib/modules/dayjs.module.d.ts +6 -0
  54. package/lib/reports/cube/usage-base.d.ts +1 -1
  55. package/lib/reports/cube/usage-pivot.component.d.ts +5 -1
  56. package/lib/shared.module.d.ts +21 -19
  57. package/lib/system.module.d.ts +1 -0
  58. package/package.json +1 -1
  59. package/public-api.d.ts +1 -1
  60. package/esm2020/lib/dashboard/score/compare-departments.widget.mjs +0 -206
@@ -42,7 +42,7 @@ export class FlowViewComponent extends TraceBase {
42
42
  };
43
43
  this.scrollSettings = {
44
44
  minZoom: .5,
45
- scrollLimit: 'Limited',
45
+ scrollLimit: 'Diagram',
46
46
  canAutoScroll: true,
47
47
  currentZoom: 1.2,
48
48
  padding: { top: 0, bottom: 0 },
@@ -176,7 +176,7 @@ export class FlowViewComponent extends TraceBase {
176
176
  let configuration = this._configuration[node.type];
177
177
  let recipients = this.model.recipients.
178
178
  filter(r => r.nodeId === node.id &&
179
- r.received >= this.model.issued)
179
+ (!this.model.issued || r.received >= this.model.issued))
180
180
  .sort((r0, r1) => r0.received > r1.received ? 1 : -1);
181
181
  if (recipients.length) {
182
182
  let r = 0;
@@ -377,7 +377,7 @@ export class FlowViewComponent extends TraceBase {
377
377
  if (node.error)
378
378
  tooltip.error = node.error;
379
379
  let annotation, state;
380
- const log = this.model.log.filter(l => l.nodeId === node.id && l.time >= this.model.issued);
380
+ const log = this.model.log.filter(l => l.nodeId === node.id && (!this.model.issued || l.time >= this.model.issued));
381
381
  const stateLog = log.find(l => l.type === 'StateChange');
382
382
  if (stateLog) {
383
383
  state = this._session.profile.states.find(s => s.name === stateLog.state);
@@ -427,32 +427,47 @@ export class FlowViewComponent extends TraceBase {
427
427
  return div;
428
428
  }
429
429
  async _startNode() {
430
- let who, by;
431
- if (this.model.ownerId === this._session.profile.userId && !this._session.isImpersonating)
432
- who = You;
433
- else
434
- who = await this._accounts.get(this.model.ownerId).toPromise();
430
+ let note, role;
431
+ const time = this._fromNow(this.model.issued);
435
432
  if (this.model.ownerById) {
436
- if (this.model.ownerById === this._session.userId)
437
- by = You;
438
- else
439
- by = await this._accounts.get(this.model.ownerById).toPromise();
433
+ if (this.model.ownerById === this._session.userId) {
434
+ if (this.model.ownerId === this._session.profile.userId)
435
+ note = this._translate.personalize('YouSubmittedNoteBy', this._session.profile.byGender, this._session.profile.name, time);
436
+ else {
437
+ const who = await this._accounts.get(this.model.ownerId).toPromise();
438
+ note = this._translate.personalize('YouSubmittedNoteBy', this._session.profile.byGender, who.name, time);
439
+ }
440
+ }
441
+ else {
442
+ const by = await this._accounts.get(this.model.ownerById).toPromise();
443
+ if (this.model.ownerId === this._session.userId)
444
+ note = this._translate.personalize('SubmittedNoteYouBy', by.gender, by.name, time);
445
+ else if (this.model.ownerId === this._session.profile.userId) {
446
+ note = this._translate.personalize('SubmittedNoteBy', by.gender, by.name, this._session.profile.name, time);
447
+ }
448
+ else {
449
+ const who = await this._accounts.get(this.model.ownerId).toPromise();
450
+ note =
451
+ this._translate.personalize('SubmittedNoteBy', by.gender, by.name, who.name, time);
452
+ }
453
+ if (by.role)
454
+ role = `- ${by.role}`;
455
+ }
440
456
  }
441
- let note, role;
442
- if (by) {
443
- if (by === You)
444
- note =
445
- this._translate.get('SubmittedNoteByYou', who === You ? this._translate.get('You') : who.name, this._fromNow(this.model.issued));
446
- else
447
- note =
448
- this._translate.get('SubmittedNoteBy', who === You ? this._translate.get('You') : who.name, by.name, this._fromNow(this.model.issued));
457
+ else {
458
+ if (this.model.ownerId === this._session.userId) {
459
+ if (this._session.isImpersonating)
460
+ note = this._translate.personalize('SubmittedNote', this._session.profile.gender, this._session.profile.name, time);
461
+ else
462
+ note = this._translate.get('YouSubmittedNote', time);
463
+ }
464
+ else {
465
+ const who = await this._accounts.get(this.model.ownerId).toPromise();
466
+ note = this._translate.personalize('SubmittedNote', who.gender, who.name, time);
467
+ if (who.role)
468
+ role = `- ${who.role}`;
469
+ }
449
470
  }
450
- else if (who === You)
451
- note = this._translate.get('YouSubmittedNote', this._fromNow(this.model.issued));
452
- else
453
- note = this._translate.get('SubmittedNote', who.name, this._fromNow(this.model.issued));
454
- if (who !== You && who.role)
455
- role = `- ${who.role}`;
456
471
  return { note, role };
457
472
  }
458
473
  async _note(node, recipient) {
@@ -594,11 +609,10 @@ export class FlowViewComponent extends TraceBase {
594
609
  }
595
610
  }
596
611
  if (recipient.escalated) {
597
- const escalations = this.model.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
598
- const userIds = escalations.map(e => e.userId);
599
- const users = await this._accounts.getAll(userIds).toPromise();
600
- const duration = this._duration.transform(dayjs.duration(escalations[escalations.length - 1].duration, 's'));
601
- tooltip.escalation = this._translate.get('EscalatedTo', this._translate.join(users.map(u => u.name)), duration);
612
+ const escalation = this.model.log.find(l => l.type === 'Escalation' && l.recipientId === recipient.originId);
613
+ const who = await this._accounts.get(escalation.userId).toPromise();
614
+ const duration = this._duration.transform(dayjs.duration(escalation.duration, 's'));
615
+ tooltip.escalation = this._translate.get('EscalatedFrom', who.name, duration);
602
616
  }
603
617
  if (recipient.replied) {
604
618
  const duration = dayjs(recipient.replied).diff(recipient.received, 's');
@@ -656,4 +670,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
656
670
  }], connectorType: [{
657
671
  type: Input
658
672
  }] } });
659
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvbXBvc2UvdHJhY2UvZmxvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBMEMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsRUFBcUIsWUFBWSxFQUFFLFdBQVcsRUFBNEYsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBb0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuYSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7OztBQU8xRCxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUEscURBQXFELENBQUMsQ0FBQztBQUUxSTtBQUNFLCtDQUErQztBQUMvQyxRQUFRLEdBQUcsa0dBQWtHLEVBQzdHLGNBQWMsR0FBRyxtUUFBbVEsRUFDcFIsYUFBYSxHQUFHLHNUQUFzVCxDQUFDO0FBV3pVLHlCQUF5QjtBQUN6QixNQUFNLE9BQU8saUJBQWtCLFNBQVEsU0FBUztJQW9DOUMseUJBQXlCO0lBQ3pCLFlBQW9CLFNBQXlCLEVBQVUsUUFBd0IsRUFBVSxVQUE0QixFQUMzRyxTQUE2QixFQUM3QixXQUF1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LEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9HO1NBQ0Y7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDOUUsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07Z0JBQ3pELE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUNsRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3BCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNoRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDN0QsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFF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QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN2RSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQVU7UUFDekIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELFdBQVc7UUFDVCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pDLENBQUM7OzhHQWhvQlUsaUJBQWlCO2tHQUFqQixpQkFBaUIsbU1BUmxCLEVBQUUsK0NBRUcsQ0FBQyw4QkFBOEIsQ0FBQzsyRkFNcEMsaUJBQWlCO2tCQVY3QixTQUFTOytCQUNFLGFBQWEsWUFDYixFQUFFLGlCQUVHLENBQUMsOEJBQThCLENBQUMsUUFDekM7d0JBQ0osR0FBRyxFQUFFLEtBQUs7cUJBQ1g7b1BBSVEsS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOb2RlTW9kZWwsIENvbm5lY3Rvck1vZGVsLCBMYXlvdXRNb2RlbCwgRGlhZ3JhbVRvb2xzLCBEaWFncmFtLCBEaWFncmFtQ29uc3RyYWludHMsIENvbXBsZXhIaWVyYXJjaGljYWxUcmVlLCBDb21wbGV4SGllcmFyY2hpY2FsVHJlZVNlcnZpY2UsIENvbm5lY3RvckJyaWRnaW5nLCBCcG1uRGlhZ3JhbXMsIERhdGFCaW5kaW5nLCBTY3JvbGxTZXR0aW5nc01vZGVsLCBTbmFwU2V0dGluZ3NNb2RlbCwgU2VnbWVudHMsIExpbmVSb3V0aW5nLCBUcmVlSW5mbywgSU1vdXNlRXZlbnRBcmdzLCBMaW5lRGlzdHJpYnV0aW9uLCBDb25uZWN0aW9uUG9pbnRPcmlnaW4sIFNuYXBDb25zdHJhaW50cywgTm9kZUNvbnN0cmFpbnRzLCBDaGlsZEFycmFuZ2VtZW50IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZGlhZ3JhbXMnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IERvY3VtZW50TW9kZWwsIFJlY2lwaWVudCwgTm9kZUluZm8sIEdlbmRlciwgRmxvd05vZGUsIFVzZXJJbmZvLCBTdGF0ZSB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBnZXRXYXJuIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUcmFjZUJhc2UsIFlvdSwgU1RBUlRfTk9ERSB9IGZyb20gJy4vdHJhY2UuYmFzZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvYWNjb3VudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IER1cmF0aW9uRm9ybWF0UGlwZSB9IGZyb20gJy4uLy4uL2NvcmUvcGlwZXMvZHVyYXRpb24tZm9ybWF0LnBpcGUnO1xyXG5cclxuRGlhZ3JhbS5JbmplY3QoQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsIExpbmVEaXN0cmlidXRpb24vKiwgTGF5b3V0QW5pbWF0aW9uLCBMaW5lUm91dGluZywgQ29ubmVjdG9yQnJpZGdpbmcqLyk7XHJcblxyXG5jb25zdFxyXG4gIC8vRUxMSVBTSVMgPSAnTSA2NTAsIDE1MCBhIDc1LDE1MCAwIDEsMCAxLDAgeicsXHJcbiAgRllJX1BBVEggPSAnTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6JyxcclxuICBFU0NBTEFURURfUEFUSCA9ICdNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eicsXHJcbiAgV0FSTk5JTkdfUEFUSCA9ICdNIDEzLjc2MzczNSwxLjg0MzM3MzUgSCA2LjMwMzczNDkgbCAtNS4yNyw1LjI3IHYgNy40NTk5OTk1IGwgNS4yNyw1LjI3IGggNy40NjAwMDAxIGwgNS4yNywtNS4yNyBWIDcuMTEzMzczNSBaIG0gLTMuNzMsMTQuMjk5OTk5NSBjIC0wLjcyMDAwMDEsMCAtMS4zMDAwMDAxLC0wLjU4IC0xLjMwMDAwMDEsLTEuMyAwLC0wLjcyIDAuNTgsLTEuMyAxLjMwMDAwMDEsLTEuMyAwLjcyLDAgMS4zLDAuNTggMS4zLDEuMyAwLDAuNzIgLTAuNTgsMS4zIC0xLjMsMS4zIHogbSAxLC00LjMgSCA5LjAzMzczNDkgViA1Ljg0MzM3MzUgaCAyLjAwMDAwMDEgeic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1mbG93JyxcclxuICB0ZW1wbGF0ZTogJycsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFtDb21wbGV4SGllcmFyY2hpY2FsVHJlZVNlcnZpY2VdLFxyXG4gIGhvc3Q6IHtcclxuICAgIGRpcjogJ2x0cidcclxuICB9XHJcbn0pXHJcbi8qKiBmbG93LXZpZXcgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIEZsb3dWaWV3Q29tcG9uZW50IGV4dGVuZHMgVHJhY2VCYXNlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIG1vZGVsOiBEb2N1bWVudE1vZGVsPGFueT47XHJcbiAgQElucHV0KCkgY29ubmVjdG9yVHlwZTogU2VnbWVudHMgPSAnT3J0aG9nb25hbCc7XHJcbiAgZGlhZ3JhbTogRGlhZ3JhbTtcclxuICByZWFkb25seSB0b29sOiBEaWFncmFtVG9vbHMgPSBEaWFncmFtVG9vbHMuWm9vbVBhbjtcclxuICByZWFkb25seSBkaWFncmFtQ29uc3RyYWludHM6IERpYWdyYW1Db25zdHJhaW50cyA9XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuRGVmYXVsdCB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuUGFuIHxcclxuICAgIERpYWdyYW1Db25zdHJhaW50cy5MaW5lUm91dGluZyB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuWm9vbTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbGF5b3V0ID0ge1xyXG4gICAgdHlwZTogJ0NvbXBsZXhIaWVyYXJjaGljYWxUcmVlJyxcclxuICAgIGNvbm5lY3Rpb25Qb2ludE9yaWdpbjogQ29ubmVjdGlvblBvaW50T3JpZ2luLkRpZmZlcmVudFBvaW50LFxyXG4gICAgaG9yaXpvbnRhbFNwYWNpbmc6IDUwLFxyXG4gICAgZW5hYmxlUm91dGluZzogdHJ1ZSxcclxuICAgIHZlcnRpY2FsU3BhY2luZzogNTAsXHJcbiAgICAvL2Nvbm5lY3Rpb25EaXJlY3Rpb246ICdPcmllbnRhdGlvbicsXHJcbiAgICBvcmllbnRhdGlvbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1JpZ2h0VG9MZWZ0JyA6ICdMZWZ0VG9SaWdodCcsXHJcbiAgfSBhcyBMYXlvdXRNb2RlbDtcclxuXHJcbiAgcmVhZG9ubHkgc2Nyb2xsU2V0dGluZ3MgPSB7XHJcbiAgICBtaW5ab29tOiAuNSxcclxuICAgIHNjcm9sbExpbWl0OiAnTGltaXRlZCcsXHJcbiAgICBjYW5BdXRvU2Nyb2xsOiB0cnVlLFxyXG4gICAgY3VycmVudFpvb206IDEuMixcclxuICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBib3R0b206IDAgfSxcclxuICAgIGF1dG9TY3JvbGxCb3JkZXI6IHsgdG9wOiAwLCBib3R0b206IDAgfSxcclxuICAgIG1heFpvb206IDIuNVxyXG4gIH0gYXMgU2Nyb2xsU2V0dGluZ3NNb2RlbDtcclxuXHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzID0ge1xyXG4gICAgY29uc3RyYWludHM6IFNuYXBDb25zdHJhaW50cy5Ob25lLFxyXG4gICAgZ3JpZFR5cGU6ICdEb3RzJ1xyXG4gIH0gYXMgU25hcFNldHRpbmdzTW9kZWw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlndXJhdGlvbjogeyBbbmFtZTogc3RyaW5nXTogRmxvd05vZGUgfSA9IHt9O1xyXG4gIHByaXZhdGUgX2FjY2VudENvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICAvKiogd29ya2Zsb3ctdmlldyBjdG9yICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYWNjb3VudHM6IEFjY291bnRTZXJ2aWNlLCBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSwgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHVyYXRpb246IER1cmF0aW9uRm9ybWF0UGlwZSxcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgaHViOiBIdWJTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihodWIpO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5vZGVzLmZvckVhY2gobiA9PlxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uW24ubmFtZV0gPSBuKTtcclxuICAgIF9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9hY2NlbnRDb2xvciA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhfY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9pbml0aWFsaXplKCkge1xyXG4gICAgY29uc3QgeyBjb25uZWN0b3JzLCBub2RlcywgaW5kaWNhdG9ycyB9ID0gYXdhaXQgdGhpcy5fcHJlcGFyZSgpO1xyXG4gICAgdGhpcy5kaWFncmFtICYmIHRoaXMuZGlhZ3JhbS5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gPSBuZXcgRGlhZ3JhbSh7XHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgIGhlaWdodDogMzgwLFxyXG4gICAgICBub2RlcyxcclxuICAgICAgY29ubmVjdG9ycyxcclxuICAgICAgbGF5b3V0OiB0aGlzLmxheW91dCxcclxuICAgICAgdG9vbDogdGhpcy50b29sLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgIHNjcm9sbFNldHRpbmdzOiB0aGlzLnNjcm9sbFNldHRpbmdzLFxyXG4gICAgICBzbmFwU2V0dGluZ3M6IHRoaXMuc25hcFNldHRpbmdzLFxyXG4gICAgICBjb25zdHJhaW50czogdGhpcy5kaWFncmFtQ29uc3RyYWludHMsXHJcbiAgICAgIGdldENvbm5lY3RvckRlZmF1bHRzOiB0aGlzLmNvbm5EZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMubm9kZURlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICB9LCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaWFncmFtLmRvTGF5b3V0KCk7XHJcbiAgICBpbmRpY2F0b3JzLmZvckVhY2goKG4sIGkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5kaWFncmFtLmdldE5vZGVPYmplY3QoKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5wYXJlbnRJZCk7XHJcbiAgICAgIG4ub2Zmc2V0WCA9IHBhcmVudC5vZmZzZXRYICsgKHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/IC0yNSA6IDI1KTtcclxuICAgICAgbi5vZmZzZXRZID0gcGFyZW50Lm9mZnNldFkgKyAyNTtcclxuICAgICAgbi56SW5kZXggPSAxMDAwICsgaTtcclxuICAgICAgdGhpcy5kaWFncmFtLmFkZChuKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFncmFtLmZpdFRvUGFnZSgpO1xyXG4gICAgaW50ZXJ2YWwoNjAwMDApLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoXHJcbiAgICAgIHRoaXMuX3JlZnJlc2guYmluZCh0aGlzKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVmcmVzaCgpIHtcclxuICAgIHN1cGVyLnJlc2V0RXN0aW1hdGVUaW1lKCk7XHJcbiAgICB0aGlzLmRpYWdyYW0ubm9kZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgY29uc3QgeyBub2RlLCByZWNpcGllbnQgfSA9IG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG4gICAgICBpZiAocmVjaXBpZW50KSB7XHJcbiAgICAgICAgaWYgKCFyZWNpcGllbnQucmVwbGllZCAmJiByZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5lc3RpbWF0ZSkgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSk7XHJcbiAgICAgICAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmID0gbm9kZS5zdGFuZGFyZFRpbWUgLSBkYXlqcygpLmRpZmYobm9kZS50aW1lLCAncycpO1xyXG4gICAgICAgICAgICBpZiAoZGlmZiA+IDApXHJcbiAgICAgICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZGlmZikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbi50b29sdGlwLmNvbnRlbnQgPSB0aGlzLl90b29sdGlwKChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpZiAobm9kZSAmJiBub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSksXHJcbiAgICAgICAgICAgIG4udG9vbHRpcC5jb250ZW50ID0gdGhpcy5fdG9vbHRpcCgobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBvYmpcclxuICAgKi9cclxuICBwdWJsaWMgbm9kZURlZmF1bHRzKG9iajogTm9kZU1vZGVsKTogTm9kZU1vZGVsIHtcclxuICAgIGNvbnN0IHsgcmVjaXBpZW50LCBub2RlLCBpbmRpY2F0b3IgfSA9IG9iai5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWw7XHJcblxyXG4gICAgaWYgKGluZGljYXRvcikge1xyXG4gICAgICBvYmoud2lkdGggPSBvYmouaGVpZ2h0ID0gMTU7XHJcbiAgICAgIG9iai5zdHlsZS5zdHJva2VXaWR0aCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgb2JqLndpZHRoID0gb2JqLmhlaWdodCA9IDUwO1xyXG4gICAgICBpZiAob2JqLmFubm90YXRpb25zICYmIG9iai5hbm5vdGF0aW9ucy5sZW5ndGgpIG9iai5hbm5vdGF0aW9uc1swXS5zdHlsZS5jb2xvciA9IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snO1xyXG4gICAgICBpZiAobm9kZSAmJiBub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgb2JqLnN0eWxlLnN0cm9rZUNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgICAgb2JqLnN0eWxlLm9wYWNpdHkgPSBvYmouYW5ub3RhdGlvbnNbMF0uc3R5bGUub3BhY2l0eSA9IC42O1xyXG4gICAgICAgIG9iai5zdHlsZS5maWxsID0gJ3RyYW5zcGFyZW50JztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9hY2NlbnRDb2xvcjtcclxuICAgICAgICBvYmouc3R5bGUuZmlsbCA9IHJlY2lwaWVudCAmJiByZWNpcGllbnQucGVuZGluZyA/XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLmdldEFjY2VudChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZCA/IDUwMCA6IDQwMCkgOiAndHJhbnNwYXJlbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIG9iai5zdHlsZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29ubmVjdG9yXHJcbiAgICovXHJcbiAgcHVibGljIGNvbm5EZWZhdWx0cyhjb25uZWN0b3I6IENvbm5lY3Rvck1vZGVsKSB7XHJcbiAgICBjb25uZWN0b3IudHlwZSA9IHRoaXMuY29ubmVjdG9yVHlwZTtcclxuICAgIGNvbm5lY3Rvci5jb3JuZXJSYWRpdXMgPSA2O1xyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5oZWlnaHQgPSA3O1xyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci53aWR0aCA9IDc7XHJcbiAgICBpZiAoKGNvbm5lY3Rvci5hZGRJbmZvIGFzIENvbm5lY3RvckluZm9Nb2RlbCkuZXN0aW1hdGUpIHtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZURhc2hBcnJheSA9ICcyIDInO1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPVxyXG4gICAgICAgIGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc3R5bGUuZmlsbCA9XHJcbiAgICAgICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5zdHJva2VDb2xvciA9XHJcbiAgICAgICAgdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VXaWR0aCA9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZUNvbG9yID0gY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5zdHJva2VDb2xvciA9IGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc3R5bGUuZmlsbCA9IHRoaXMuX2FjY2VudENvbG9yO1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlV2lkdGggPSAyO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zaGFwZSA9ICdOb25lJztcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZSgpOiBQcm9taXNlPHsgbm9kZXM6IE5vZGVNb2RlbFtdOyBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdOyBpbmRpY2F0b3JzOiBOb2RlTW9kZWxbXSB9PiB7XHJcbiAgICBjb25zdCB7IGNvbm5lY3RvcnM6IGRjb25uZWN0b3JzLCBub2RlczogZG5vZGVzIH0gPSB0aGlzLm1vZGVsLndvcmtmbG93O1xyXG4gICAgY29uc3QgaW5kaWNhdG9yczogTm9kZU1vZGVsW10gPSBbXSwgY29ubmVjdG9yczogQ29ubmVjdG9yTW9kZWxbXSA9IFtdLCBub2RlczogTm9kZU1vZGVsW10gPSBbXTtcclxuICAgIGxldCB6SW5kZXggPSA1MDA7XHJcbiAgICBmb3IgKGxldCBub2RlIG9mIGRub2Rlcykge1xyXG4gICAgICBpZiAobm9kZXMuZmluZChuID0+IG4uaWQgPT0gbm9kZS5pZCkpIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXTtcclxuICAgICAgbGV0IHJlY2lwaWVudHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuXHJcbiAgICAgICAgZmlsdGVyKHIgPT4gci5ub2RlSWQgPT09IG5vZGUuaWQgJiZcclxuICAgICAgICAgIHIucmVjZWl2ZWQgPj0gdGhpcy5tb2RlbC5pc3N1ZWQpXHJcbiAgICAgICAgLnNvcnQoKHIwLCByMSkgPT5cclxuICAgICAgICAgIHIwLnJlY2VpdmVkID4gcjEucmVjZWl2ZWQgPyAxIDogLTEpO1xyXG4gICAgICBpZiAocmVjaXBpZW50cy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgciA9IDA7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgdmFyIHJlY2lwaWVudCA9IHJlY2lwaWVudHNbcl07XHJcbiAgICAgICAgICBsZXQgZXhpc3RzID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlIHVzZXIgcmVjaXBpZW50IG9uIHNhbWUgbm9kZVxyXG4gICAgICAgICAgbGV0IGogPSAwO1xyXG4gICAgICAgICAgd2hpbGUgKGogPCByICYmICFleGlzdHMpIHtcclxuICAgICAgICAgICAgaWYgKHJlY2lwaWVudHNbal0udXNlcklkID09PSByZWNpcGllbnQudXNlcklkKSBleGlzdHMgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIGorKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChleGlzdHMpXHJcbiAgICAgICAgICAgIHJlY2lwaWVudHMuc3BsaWNlKHJlY2lwaWVudC5lc3RpbWF0ZSA/IHIgOiBqLCAxKTtcclxuICAgICAgICAgIGVsc2UgcisrO1xyXG4gICAgICAgIH0gd2hpbGUgKHIgPCByZWNpcGllbnRzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGZvciAociA9IDA7IHIgPCByZWNpcGllbnRzLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICBsZXQgcmVjaXBpZW50ID0gcmVjaXBpZW50c1tyXTtcclxuICAgICAgICAgIGNvbnN0IHsgYW5ub3RhdGlvbiwgdG9vbHRpcCB9ID0gYXdhaXQgdGhpcy5fbm90ZShub2RlLCByZWNpcGllbnQpO1xyXG4gICAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuX3Rvb2x0aXAodG9vbHRpcCk7XHJcbiAgICAgICAgICBjb25zdCBub2QgPSB7XHJcbiAgICAgICAgICAgIGlkOiByID09PSAwID8gbm9kZS5pZCA6IG5vZGUuaWQgKyByLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNoYXBlOiB0aGlzLl9jb25maWd1cmF0aW9uW25vZGUudHlwZV0uc2hhcGUsXHJcbiAgICAgICAgICAgIHpJbmRleDogekluZGV4KyssXHJcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnVG9wQ2VudGVyJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb25zdHJhaW50czogY29udGVudCA/XHJcbiAgICAgICAgICAgICAgTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgfCBOb2RlQ29uc3RyYWludHMuVG9vbHRpcCA6XHJcbiAgICAgICAgICAgICAgTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQsXHJcbiAgICAgICAgICAgIGFkZEluZm86IHsgXHJcbiAgICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgICByZWNpcGllbnQsXHJcbiAgICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWwsXHJcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbe1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogNCB9LFxyXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAnVG9wJyxcclxuICAgICAgICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgICAgICAgIHk6IDEsXHJcbiAgICAgICAgICAgICAgICB4OiAuNVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgbm9kZXMucHVzaChub2QpO1xyXG4gICAgICAgICAgLy8gYWRkIGFjdGlvbiBpbmRpY2F0b3JcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQuYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbmQoYSA9PiBhLm5hbWUgPT09IHJlY2lwaWVudC5hY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAoYWN0aW9uLnNoYXBlICYmICFyZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkluZGljYXRvciA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBub2QuaWQgKyAnYWN0aW9uJyxcclxuICAgICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogYWN0aW9uLnNoYXBlLFxyXG4gICAgICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCcsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgZmlsbDogYWN0aW9uLmNvbG9yIHx8IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDkwMClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKGFjdGlvbkluZGljYXRvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGZ5aSBpbmRpY2F0b3JcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQuZnlpKVxyXG4gICAgICAgICAgICBpbmRpY2F0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBub2QuaWQgKyAnZnlpJyxcclxuICAgICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogRllJX1BBVEgsXHJcbiAgICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiAnIzE5NzZkMidcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2QuaWRcclxuICAgICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgICAgfSBhcyBOb2RlTW9kZWxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIGVzY2FsYXRlIGluZGljYXRvclxyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5lc2NhbGF0ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZXNjYWxhdGVJbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAgICAgaWQ6IG5vZC5pZCArICdlc2NhbGF0ZScsXHJcbiAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IEVTQ0FMQVRFRF9QQVRILFxyXG4gICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgZmlsbDogdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoOTAwKVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVNb2RlbDtcclxuICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKGVzY2FsYXRlSW5kaWNhdG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgYW5ub3RhdGlvbiwgdG9vbHRpcCB9ID0gYXdhaXQgdGhpcy5fc2hhcGUobm9kZSk7XHJcbiAgICAgICAgY29uc3QgeyBzaGFwZSB9ID0gY29uZmlndXJhdGlvbjtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fdG9vbHRpcCh0b29sdGlwKTtcclxuICAgICAgICBub2Rlcy5wdXNoKHtcclxuICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgc2hhcGUsLy86IHt0eXBlOiAnUGF0aCcsIGRhdGE6IEVMTElQU0lTIH0sXHJcbiAgICAgICAgICB6SW5kZXg6IHpJbmRleCsrLFxyXG4gICAgICAgICAgdG9vbHRpcDoge1xyXG4gICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ1RvcENlbnRlcidcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb25zdHJhaW50czogY29udGVudCA/XHJcbiAgICAgICAgICAgIE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLlRvb2x0aXAgOlxyXG4gICAgICAgICAgICBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsLFxyXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFt7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgIG9mZnNldDogc2hhcGUudHlwZSA9PT0gJ1BhdGgnID8ge1xyXG4gICAgICAgICAgICAgIHk6IDFcclxuICAgICAgICAgICAgfSA6IHsgeDogLjUgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IHNoYXBlLnR5cGUgPT09ICdQYXRoJyA/ICdUb3AnIDogJ0NlbnRlcidcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnNoYXBlICYmICFub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnc3RhdGUnLFxyXG4gICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICBkYXRhOiBzdGF0ZS5zaGFwZSxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNYXhZTWF4JyA6ICdYTWluWU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBzdGF0ZS5jb2xvciB8fCAnYmxhY2snXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgbm9kZTogbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlLmVycm9yKSB7XHJcbiAgICAgICAgICBjb25zdCB3YXJubmluZ0luZGljYXRvciA9IHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnZXhjZXB0aW9uJyxcclxuICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogV0FSTk5JTkdfUEFUSCxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBnZXRXYXJuKDgwMClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5pZFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHdhcm5uaW5nSW5kaWNhdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGNvbm5lY3RvciBvZiBkY29ubmVjdG9ycykge1xyXG4gICAgICBsZXQgc291cmNlcyA9IG5vZGVzLmZpbHRlcihuID0+IChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkubm9kZS5pZCA9PT0gY29ubmVjdG9yLnNvdXJjZUlkKSxcclxuICAgICAgICB0YXJnZXRzID0gbm9kZXMuZmlsdGVyKG4gPT4gKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5ub2RlLmlkID09PSBjb25uZWN0b3IudGFyZ2V0SWQpO1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykgXHJcbiAgICAgICAgZm9yIChsZXQgdGFyZ2V0IG9mIHRhcmdldHMpIHtcclxuICAgICAgICAgIGNvbm5lY3RvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2UuaWQsXHJcbiAgICAgICAgICAgIHRhcmdldElEOiB0YXJnZXQuaWQsXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICBlc3RpbWF0ZTogY29ubmVjdG9yLmVzdGltYXRlLFxyXG4gICAgICAgICAgICAgIHRpbWU6IGNvbm5lY3Rvci50aW1lXHJcbiAgICAgICAgICAgIH0gYXMgQ29ubmVjdG9ySW5mb01vZGVsXHJcbiAgICAgICAgICB9IGFzIENvbm5lY3Rvck1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBjb25uZWN0b3JzLCBub2RlcywgaW5kaWNhdG9ycyB9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gbm9kZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3NoYXBlKG5vZGU6IE5vZGVJbmZvKTogUHJvbWlzZTx7IHN0YXRlOiBTdGF0ZTsgYW5ub3RhdGlvbjogc3RyaW5nOyB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsOyB9PiB7XHJcbiAgICBjb25zdCB0b29sdGlwID0ge30gYXMgTm9kZVRvb2x0aXBNb2RlbDtcclxuICAgIGlmIChub2RlLmVycm9yKSB0b29sdGlwLmVycm9yID0gbm9kZS5lcnJvcjtcclxuICAgIGxldCBhbm5vdGF0aW9uOiBzdHJpbmcsIHN0YXRlOiBTdGF0ZTtcclxuICAgIGNvbnN0IGxvZyA9IHRoaXMubW9kZWwubG9nLmZpbHRlcihsID0+IGwubm9kZUlkID09PSBub2RlLmlkICYmIGwudGltZSA+PSB0aGlzLm1vZGVsLmlzc3VlZCk7XHJcbiAgICBjb25zdCBzdGF0ZUxvZyA9IGxvZy5maW5kKGwgPT4gbC50eXBlID09PSAnU3RhdGVDaGFuZ2UnKTtcclxuICAgIGlmIChzdGF0ZUxvZykge1xyXG4gICAgICBzdGF0ZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5zdGF0ZXMuZmluZChzID0+IHMubmFtZSA9PT0gc3RhdGVMb2cuc3RhdGUpO1xyXG5cclxuICAgICAgaWYgKHN0YXRlTG9nLmR1cmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBkYXlqcy5kdXJhdGlvbihzdGF0ZUxvZy5kdXJhdGlvbiwgJ3MnKTtcclxuICAgICAgICB0b29sdGlwLmR1cmF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRHVyYXRpb25UaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGR1cmF0aW9uKSk7XHJcbiAgICAgIH1cclxuICAgICAgYW5ub3RhdGlvbiA9IChub2RlLmVzdGltYXRlID8gc3RhdGUuZnV0dXJlIDogc3RhdGUucGFzdCkgfHwgc3RhdGUudGl0bGU7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZS50eXBlID09PSBTVEFSVF9OT0RFKSB7XHJcbiAgICAgIGlmICghbm9kZS5lc3RpbWF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgbm90ZSwgcm9sZSB9ID0gYXdhaXQgdGhpcy5fc3RhcnROb2RlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5ub3RlID0gbm90ZSxcclxuICAgICAgICAgIHRvb2x0aXAucm9sZSA9IHJvbGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vZGUuZXN0aW1hdGUpXHJcbiAgICAgIHRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKTtcclxuICAgIHJldHVybiB7IHN0YXRlLCB0b29sdGlwLCBhbm5vdGF0aW9uIH07XHJcbiAgfVxyXG4gIHJlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLmRpYWdyYW0pIHRoaXMuZGlhZ3JhbS53aWR0aCA9ICdhdXRvJztcclxuICB9XHJcbiAgcHJpdmF0ZSBfdGltZUVzdGltYXRlKG5vZGU6IE5vZGVJbmZvKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHN1cGVyLl9lc3RpbWF0ZVRpbWUobm9kZSk7XHJcbiAgICBpZiAobWF4KVxyXG4gICAgICByZXR1cm4gIW1pbiB8fCBtaW4gPT09IG1heCA/XHJcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmdldCgnRXN0aW1hdGVUaW1lJywgZGF5anMuZHVyYXRpb24obWF4LCAncycpLmh1bWFuaXplKCkpIDpcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWVSYW5nZScsIGRheWpzLmR1cmF0aW9uKG1pbiwgJ3MnKS5odW1hbml6ZSgpLCBkYXlqcy5kdXJhdGlvbihtYXgsICdzJykuaHVtYW5pemUoKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Rvb2x0aXAob2JqOiBOb2RlVG9vbHRpcE1vZGVsKSB7XHJcbiAgICBjb25zdCB7IG5vdGUsIHJvbGUsIHN1YnN0aXR1dGluZywgZXNjYWxhdGlvbiwgZHVyYXRpb24sIHN0YW5kYXJkVGltZSwgZXN0aW1hdGVkVGltZSwgZXJyb3IsIGZ5aSB9ID0gb2JqXHJcbiAgICBjb25zdCByb3dzID0gW25vdGUsIHN1YnN0aXR1dGluZywgZXNjYWxhdGlvbiwgZHVyYXRpb24sIGZ5aSwgcm9sZSwgZXJyb3IsIHN0YW5kYXJkVGltZSwgZXN0aW1hdGVkVGltZV07XHJcbiAgICBsZXQgZGl2OiBIVE1MRGl2RWxlbWVudDtcclxuICAgIHJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgaWYgKCFyKSByZXR1cm47XHJcbiAgICAgIGlmICghZGl2KSBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgc3Bhbi5pbm5lclRleHQgPSByO1xyXG4gICAgICBkaXYuYXBwZW5kKHNwYW4pO1xyXG4gICAgICBjb25zdCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyk7XHJcbiAgICAgIGRpdi5hcHBlbmQoYnIpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGl2O1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9zdGFydE5vZGUoKTogUHJvbWlzZTx7IG5vdGU6IHN0cmluZywgcm9sZTogc3RyaW5nOyB9PiB7XHJcbiAgICBsZXQgd2hvOiBVc2VySW5mbyB8ICd5b3UnLCBieTogVXNlckluZm8gfCAneW91JztcclxuICAgIGlmICh0aGlzLm1vZGVsLm93bmVySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQgJiYgIXRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKVxyXG4gICAgICB3aG8gPSBZb3U7XHJcbiAgICBlbHNlXHJcbiAgICAgIHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKHRoaXMubW9kZWwub3duZXJCeUlkKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGVsLm93bmVyQnlJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgYnkgPSBZb3U7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBieSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVyQnlJZCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm90ZTogc3RyaW5nLCByb2xlOiBzdHJpbmc7XHJcbiAgICBpZiAoYnkpIHtcclxuICAgICAgaWYgKGJ5ID09PSBZb3UpXHJcbiAgICAgICAgbm90ZSA9XHJcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTdWJtaXR0ZWROb3RlQnlZb3UnLFxyXG4gICAgICAgICAgICB3aG8gPT09IFlvdSA/IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdScpIDogKHdobyBhcyBVc2VySW5mbykubmFtZSxcclxuICAgICAgICAgICAgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG5cclxuICAgICAgZWxzZVxyXG4gICAgICAgIG5vdGUgPVxyXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmdldCgnU3VibWl0dGVkTm90ZUJ5JyxcclxuICAgICAgICAgICAgd2hvID09PSBZb3UgPyB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3UnKSA6ICh3aG8gYXMgVXNlckluZm8pLm5hbWUsXHJcbiAgICAgICAgICAgIChieSBhcyBVc2VySW5mbykubmFtZSxcclxuICAgICAgICAgICAgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHdobyA9PT0gWW91KVxyXG4gICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91U3VibWl0dGVkTm90ZScsIHRoaXMuX2Zyb21Ob3codGhpcy5tb2RlbC5pc3N1ZWQpKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTdWJtaXR0ZWROb3RlJywgKHdobyBhcyBVc2VySW5mbykubmFtZSwgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG4gICAgaWYgKHdobyAhPT0gWW91ICYmIHdoby5yb2xlKVxyXG4gICAgICByb2xlID0gYC0gJHt3aG8ucm9sZX1gO1xyXG4gICAgcmV0dXJuIHsgbm90ZSwgcm9sZSB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbm90ZShub2RlOiBOb2RlSW5mbywgcmVjaXBpZW50OiBSZWNpcGllbnQpOiBQcm9taXNlPHsgYW5ub3RhdGlvbjogc3RyaW5nOyB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsIH0+IHtcclxuICAgIGNvbnN0IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWwgPSB7fTtcclxuXHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8vIHlvdVxyXG4gICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICBhbm5vdGF0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBhbm5vdGF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91Jyk7XHJcbiAgICAgIGlmIChyZWNpcGllbnQucm9sZSkge1xyXG4gICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUucm9sZXMuZmluZChvID0+IG8ubmFtZSA9PT0gcmVjaXBpZW50LnJvbGUpO1xyXG4gICAgICAgIGlmIChyb2xlKSB0b29sdGlwLnJvbGUgPSBgLSAke3JvbGUudGl0bGV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgLy8gc29tZW9uZSBlbHNlXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgYW5ub3RhdGlvbiA9IHdoby5uYW1lO1xyXG4gICAgICBpZiAod2hvLnJvbGUpIHRvb2x0aXAucm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCByb2xlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnJvbGVzLmZpbmQobyA9PiBvLm5hbWUgPT09IHJlY2lwaWVudC5yb2xlKTtcclxuICAgICAgICBpZiAocm9sZSkgdG9vbHRpcC5yb2xlID0gYC0gJHtyb2xlLnRpdGxlfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVwbGllZCk7XHJcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuZmlsdGVyKHIgPT4gci5vcmlnaW5JZCA9PT0gcmVjaXBpZW50LmlkKSwgdG8gPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgaWYgKHRhcmdldHMubGVuZ3RoKSBmb3IgKGxldCBzaWJsaW5nIG9mIHRhcmdldHMpIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQoc2libGluZy51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvLnB1c2god2hvLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmJ5SWQpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlHZW5kZXIpO1xyXG4gICAgICAgICAgaWYgKHRvLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZClcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91VG8nLCBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuam9pbih0byksIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnlZb3VUbycsIGFjdGlvbixcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgd2hvLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKVxyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91JywgYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91JywgYWN0aW9uLCB3aG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYnkgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgYnkuZ2VuZGVyKTtcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSB7XHJcbiAgICAgICAgICAgIGlmICh0by5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VUYWtlbkFjdGlvbkJ5VG8nLCBieS5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uQnknLCBieS5uYW1lLCBhY3Rpb24sIHRpbWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgaWYgKHRvLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnlUbycsIGJ5Lm5hbWUsIGFjdGlvbiwgdGhpcy5fdHJhbnNsYXRlLmpvaW4odG8pLCB3aG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnknLCBieS5uYW1lLCBhY3Rpb24sIHdoby5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodG8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZ2VuZGVyKTtcclxuICAgICAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uVG8nLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHdoby5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCBZb3UpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uJywgYWN0aW9uLCB0aW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgd2hvLm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFyZWNpcGllbnQuZXN0aW1hdGUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlY2VpdmVkKTtcclxuICAgICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKVxyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdSZWNlaXZlZEJ5JywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlciwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVJlY2VpdmVkJywgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRUaW1lJywgd2hvLmdlbmRlciwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0ZUlkKSB7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0ZUlkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZClcclxuICAgICAgICB0b29sdGlwLnN1YnN0aXR1dGluZyA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnU3Vic3RpdHV0aW5nWW91JywgdGhpcy5fc2Vzc2lvbi5nZW5kZXIpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpbmcgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnN1YnN0aXR1dGVJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1YnN0aXR1dGluZ0ZvcicsIHN1YnN0aXR1dGluZy5nZW5kZXIsIHN1YnN0aXR1dGluZy5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlY2lwaWVudC5vcmlnaW5JZCAmJiAhcmVjaXBpZW50LnJlcGxpZWQpIHtcclxuICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5tb2RlbC5yZWNpcGllbnRzLmZpbmQociA9PiByLmlkID09PSByZWNpcGllbnQub3JpZ2luSWQpO1xyXG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBvcmlnaW4uYWN0aW9uKSxcclxuICAgICAgICBhZGplY3RpdmUgPSBhY3Rpb24uYWRqZWN0aXZlIHx8IGFjdGlvbi5wYXN0IHx8IGFjdGlvbi50aXRsZTtcclxuICAgICAgaWYgKChvcmlnaW4uYnlJZCB8fCBvcmlnaW4udXNlcklkKSA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25CeVlvdScsIGFkamVjdGl2ZSk7XHJcbiAgICAgIGVsc2UgaWYgKG9yaWdpbi5ieUlkKSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KG9yaWdpbi51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGNvbnN0IGJ5ID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KG9yaWdpbi5ieUlkKS50b1Byb21pc2UoKTtcclxuICAgICAgICB0b29sdGlwLnN1YnN0aXR1dGluZyA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvbkJ5QnknLCBhZGplY3RpdmUsIGJ5Lm5hbWUsIHdoby5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQob3JpZ2luLnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25CeScsIGFkamVjdGl2ZSwgd2hvLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmVjaXBpZW50LmVzY2FsYXRlZCkge1xyXG4gICAgICBjb25zdCBlc2NhbGF0aW9ucyA9IHRoaXMubW9kZWwubG9nLmZpbHRlcihsID0+IGwudHlwZSA9PT0gJ0VzY2FsYXRpb24nICYmIGwucmVjaXBpZW50SWQgPT09IHJlY2lwaWVudC5pZCk7XHJcbiAgICAgIGNvbnN0IHVzZXJJZHMgPSBlc2NhbGF0aW9ucy5tYXAoZSA9PiBlLnVzZXJJZCk7XHJcbiAgICAgIGNvbnN0IHVzZXJzID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0QWxsKHVzZXJJZHMpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkYXlqcy5kdXJhdGlvbihlc2NhbGF0aW9uc1tlc2NhbGF0aW9ucy5sZW5ndGggLSAxXS5kdXJhdGlvbiwgJ3MnKSk7XHJcbiAgICAgIHRvb2x0aXAuZXNjYWxhdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzY2FsYXRlZFRvJywgdGhpcy5fdHJhbnNsYXRlLmpvaW4odXNlcnMubWFwKHUgPT4gdS5uYW1lKSksIGR1cmF0aW9uKTtcclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGRheWpzKHJlY2lwaWVudC5yZXBsaWVkKS5kaWZmKHJlY2lwaWVudC5yZWNlaXZlZCwgJ3MnKTtcclxuICAgICAgdG9vbHRpcC5kdXJhdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0R1cmF0aW9uVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkdXJhdGlvbikpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVjaXBpZW50LnBlbmRpbmcpIHtcclxuICAgICAgaWYgKHJlY2lwaWVudC5lc3RpbWF0ZSkgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSkge1xyXG4gICAgICAgIGNvbnN0IGRpZmYgPSBub2RlLnN0YW5kYXJkVGltZSAtIGRheWpzKCkuZGlmZihub2RlLnRpbWUsICdzJyk7XHJcbiAgICAgICAgaWYgKGRpZmYgPiAwKVxyXG4gICAgICAgICAgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXN0aW1hdGVUaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRpZmYpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS5zdGFuZGFyZFRpbWUpXHJcbiAgICAgIHRvb2x0aXAuc3RhbmRhcmRUaW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnTm9kZVN0YW5kYXJkVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShub2RlLnN0YW5kYXJkVGltZSkpO1xyXG4gICAgaWYgKHJlY2lwaWVudC5meWkpXHJcbiAgICAgIHRvb2x0aXAuZnlpID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRllJJyk7XHJcbiAgICByZXR1cm4geyBhbm5vdGF0aW9uLCB0b29sdGlwIH07XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FjdGlvbihuYW1lOiBzdHJpbmcsIGdlbmRlcj86IEdlbmRlciB8ICd5b3UnKSB7XHJcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBuYW1lKTtcclxuICAgIGlmICghYWN0aW9uKSByZXR1cm4gbmFtZTtcclxuICAgIGlmIChnZW5kZXIgPT09IFlvdSkge1xyXG4gICAgICBjb25zdCBnZW5kZXIgPSB0aGlzLl9zZXNzaW9uLmdlbmRlciwgcGVyc29uYWwgPVxyXG4gICAgICAgIChnZW5kZXIgPT09ICdNYWxlJyA/IChhY3Rpb24ueW91TWFsZSB8fCBhY3Rpb24ueW91KSA6XHJcbiAgICAgICAgICBnZW5kZXIgPT09ICdGZW1hbGUnID8gKGFjdGlvbi55b3VGZW1hbGUgfHwgYWN0aW9uLnlvdSkgOlxyXG4gICAgICAgICAgICBhY3Rpb24ueW91KTtcclxuICAgICAgcmV0dXJuIChwZXJzb25hbCB8fFxyXG4gICAgICAgIGFjdGlvbi5wYXN0IHx8XHJcbiAgICAgICAgYWN0aW9uLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFzdCA9ICgoZ2VuZGVyID09PSAnTWFsZScgPyAoYWN0aW9uLnBhc3RNYWxlIHx8IGFjdGlvbi5wYXN0KSA6XHJcbiAgICAgIGdlbmRlciA9PT0gJ0ZlbWFsZScgPyAoYWN0aW9uLnBhc3RGZW1hbGUgfHwgYWN0aW9uLnBhc3QpIDogYWN0aW9uLnBhc3QpIHx8XHJcbiAgICAgIGFjdGlvbi50aXRsZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBwYXN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZnJvbU5vdyhkYXRlOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gZGF5anMoZGF0ZSkuZnJvbU5vdygpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gJiYgdGhpcy5kaWFncmFtLmRlc3Ryb3koKTtcclxuICB9XHJcbn1cclxuaW50ZXJmYWNlIENvbm5lY3RvckluZm9Nb2RlbCB7XHJcbiAgZXN0aW1hdGU/OiBib29sZWFuO1xyXG4gIHBhcmVudElkOiBzdHJpbmc7XHJcbiAgdGltZTogRGF0ZVxyXG59XHJcbmludGVyZmFjZSBOb2RlSW5mb01vZGVsIHtcclxuICB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsO1xyXG4gIG5vZGU6IE5vZGVJbmZvO1xyXG4gIHJlY2lwaWVudDogUmVjaXBpZW50XHJcbiAgaW5kaWNhdG9yPzogYm9vbGVhbjtcclxuICBwYXJlbnRJZD86IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgTm9kZVRvb2x0aXBNb2RlbCB7XHJcbiAgZnlpPzogc3RyaW5nO1xyXG4gIGVycm9yPzogc3RyaW5nO1xyXG4gIG5vdGU/OiBzdHJpbmc7XHJcbiAgcm9sZT86IHN0cmluZztcclxuICBmcm9tPzogc3RyaW5nO1xyXG4gIHN1YnN0aXR1dGluZz86IHN0cmluZztcclxuICBlc2NhbGF0aW9uPzogc3RyaW5nO1xyXG4gIHN0YW5kYXJkVGltZT86IHN0cmluZztcclxuICBkdXJhdGlvbj86IHN0cmluZztcclxuICBlc3RpbWF0ZWRUaW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
673
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvbXBvc2UvdHJhY2UvZmxvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBMEMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsRUFBcUIsWUFBWSxFQUFFLFdBQVcsRUFBNEYsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBb0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuYSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7OztBQU8xRCxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUEscURBQXFELENBQUMsQ0FBQztBQUUxSTtBQUNFLCtDQUErQztBQUMvQyxRQUFRLEdBQUcsa0dBQWtHLEVBQzdHLGNBQWMsR0FBRyxtUUFBbVEsRUFDcFIsYUFBYSxHQUFHLHNUQUFzVCxDQUFDO0FBV3pVLHlCQUF5QjtBQUN6QixNQUFNLE9BQU8saUJBQWtCLFNBQVEsU0FBUztJQW9DOUMseUJBQXlCO0lBQ3pCLFlBQW9CLFNBQXlCLEVBQVUsUUFBd0IsRUFBVSxVQUE0QixFQUMzRyxTQUE2QixFQUM3QixXQUF1QyxFQUMvQyxHQUFlO1FBQ2YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSk8sY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUFVLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzNHLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBQzdCLGdCQUFXLEdBQVgsV0FBVyxDQUE0QjtRQXJDeEMsa0JBQWEsR0FBYSxZQUFZLENBQUM7UUFFdkMsU0FBSSxHQUFpQixZQUFZLENBQUMsT0FBTyxDQUFDO1FBQzFDLHVCQUFrQixHQUN6QixrQkFBa0IsQ0FBQyxPQUFPO1lBQzFCLGtCQUFrQixDQUFDLEdBQUc7WUFDdEIsa0JBQWtCLENBQUMsV0FBVztZQUM5QixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDVixXQUFNLEdBQUc7WUFDdkIsSUFBSSxFQUFFLHlCQUF5QjtZQUMvQixxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxjQUFjO1lBQzNELGlCQUFpQixFQUFFLEVBQUU7WUFDckIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLEVBQUU7WUFDbkIscUNBQXFDO1lBQ3JDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhO1NBQ3BELENBQUM7UUFFUixtQkFBYyxHQUFHO1lBQ3hCLE9BQU8sRUFBRSxFQUFFO1lBQ1gsV0FBVyxFQUFFLFNBQVM7WUFDdEIsYUFBYSxFQUFFLElBQUk7WUFDbkIsV0FBVyxFQUFFLEdBQUc7WUFDaEIsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQzlCLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sRUFBRSxHQUFHO1NBQ1UsQ0FBQztRQUVoQixpQkFBWSxHQUFHO1lBQ3RCLFdBQVcsRUFBRSxlQUFlLENBQUMsSUFBSTtZQUNqQyxRQUFRLEVBQUUsTUFBTTtTQUNJLENBQUM7UUFDTixtQkFBYyxHQUFpQyxFQUFFLENBQUM7UUFDM0QsaUJBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBTy9DLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxXQUFXLENBQUMsUUFBdUI7UUFDakMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDTyxLQUFLLENBQUMsV0FBVztRQUN2QixNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztZQUN6QixLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxHQUFHO1lBQ1gsS0FBSztZQUNMLFVBQVU7WUFDVixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsZUFBZSxFQUFFLGFBQWE7WUFDOUIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUNwQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEQsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM5QyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFFLENBQUMsQ0FBQyxPQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3pCLENBQUM7SUFDSixDQUFDO0lBQ08sUUFBUTtRQUNkLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUF3QixDQUFDO1lBQ3ZELElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQzNDLElBQUksU0FBUyxDQUFDLFFBQVE7d0JBQUcsQ0FBQyxDQUFDLE9BQXlCLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNqRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQzlELElBQUksSUFBSSxHQUFHLENBQUM7NEJBQ1QsQ0FBQyxDQUFDLE9BQXlCLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDNUg7b0JBQ0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBRSxDQUFDLENBQUMsT0FBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDekU7YUFDRjtpQkFFQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFDdEIsQ0FBQyxDQUFDLE9BQXlCLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztvQkFDM0UsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBRSxDQUFDLENBQUMsT0FBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRDs7O09BR0c7SUFDSSxZQUFZLENBQUMsR0FBYztRQUNoQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsT0FBd0IsQ0FBQztRQUVwRSxJQUFJLFNBQVMsRUFBRTtZQUNiLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDNUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQzNCO2FBQ0k7WUFDSCxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU07Z0JBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDN0gsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDekIsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDckUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDMUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO2FBQ2hDO2lCQUNJO2dCQUNILEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQzFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQzthQUNsRztZQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNEOzs7T0FHRztJQUNJLFlBQVksQ0FBQyxTQUF5QjtRQUMzQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDcEMsU0FBUyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDM0IsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFLLFNBQVMsQ0FBQyxPQUE4QixDQUFDLFFBQVEsRUFBRTtZQUN0RCxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDeEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUN6QixTQUFTLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJO29CQUNwQyxTQUFTLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXO3dCQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQy9DLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztTQUNqQzthQUNJO1lBQ0gsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3JJLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztTQUNqQztRQUNELFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBQ0QsTUFBTTtJQUNFLEtBQUssQ0FBQyxRQUFRO1FBQ3BCLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUN2RSxNQUFNLFVBQVUsR0FBZ0IsRUFBRSxFQUFFLFVBQVUsR0FBcUIsRUFBRSxFQUFFLEtBQUssR0FBZ0IsRUFBRSxDQUFDO1FBQy9GLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNqQixLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtZQUN2QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQUUsU0FBUztZQUMvQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7Z0JBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3pELElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUNmLEVBQUUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLEdBQUc7b0JBQ0QsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ25CLCtDQUErQztvQkFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDdkIsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxNQUFNOzRCQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7OzRCQUN4RCxDQUFDLEVBQUUsQ0FBQztxQkFDVjtvQkFDRCxJQUFJLE1BQU07d0JBQ1IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7d0JBQzlDLENBQUMsRUFBRSxDQUFDO2lCQUNWLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBRWhDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdEMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QixNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3ZDLE1BQU0sR0FBRyxHQUFHO3dCQUNWLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUU7d0JBQzlDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLO3dCQUMzQyxNQUFNLEVBQUUsTUFBTSxFQUFFO3dCQUNoQixPQUFPLEVBQUU7NEJBQ1AsT0FBTzs0QkFDUCxRQUFRLEVBQUUsV0FBVzt5QkFDdEI7d0JBQ0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzRCQUNwQixlQUFlLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDbkQsZUFBZSxDQUFDLE9BQU87d0JBQ3pCLE9BQU8sRUFBRTs0QkFDUCxPQUFPOzRCQUNQLFNBQVM7NEJBQ1QsSUFBSTt5QkFDWTt3QkFDbEIsV0FBVyxFQUFFLENBQUM7Z0NBQ1osT0FBTyxFQUFFLFVBQVU7Z0NBQ25CLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Z0NBQ2xCLGlCQUFpQixFQUFFLEtBQUs7Z0NBQ3hCLE1BQU0sRUFBRTtvQ0FDTixDQUFDLEVBQUUsQ0FBQztvQ0FDSixDQUFDLEVBQUUsRUFBRTtpQ0FDTjs2QkFDRixDQUFDO3FCQUNVLENBQUM7b0JBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEIsdUJBQXVCO29CQUN2QixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7d0JBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDcEYsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTs0QkFDdEMsTUFBTSxlQUFlLEdBQUc7Z0NBQ3RCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLFFBQVE7Z0NBQ3JCLEtBQUssRUFBRTtvQ0FDTCxJQUFJLEVBQUUsTUFBTTtvQ0FDWixJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUs7b0NBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVO2lDQUN2RDtnQ0FDRCxLQUFLLEVBQUU7b0NBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO2lDQUNuRDtnQ0FDRCxPQUFPLEVBQUU7b0NBQ1AsU0FBUyxFQUFFLElBQUk7b0NBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2lDQUNBOzZCQUNOLENBQUM7NEJBQ2YsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzt5QkFDbEM7cUJBQ0Y7b0JBQ0QsZ0JBQWdCO29CQUNoQixJQUFJLFNBQVMsQ0FBQyxHQUFHO3dCQUNmLFVBQVUsQ0FBQyxJQUFJLENBQUM7NEJBQ2QsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSzs0QkFDbEIsS0FBSyxFQUFFO2dDQUNMLElBQUksRUFBRSxNQUFNO2dDQUNaLElBQUksRUFBRSxRQUFRO2dDQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVOzZCQUN2RDs0QkFDRCxLQUFLLEVBQUU7Z0NBQ0wsSUFBSSxFQUFFLFNBQVM7NkJBQ2hCOzRCQUNELE9BQU8sRUFBRTtnQ0FDUCxTQUFTLEVBQUUsSUFBSTtnQ0FDZixRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7NkJBQ0E7eUJBQ04sQ0FDYixDQUFDO29CQUNKLHFCQUFxQjtvQkFDckIsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO3dCQUN2QixNQUFNLGlCQUFpQixHQUFHOzRCQUN4QixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxVQUFVOzRCQUN2QixLQUFLLEVBQUU7Z0NBQ0wsSUFBSSxFQUFFLE1BQU07Z0NBQ1osSUFBSSxFQUFFLGNBQWM7Z0NBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVOzZCQUN2RDs0QkFDRCxLQUFLLEVBQUU7Z0NBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQzs2QkFDbkM7NEJBQ0QsT0FBTyxFQUFFO2dDQUNQLFNBQVMsRUFBRSxJQUFJO2dDQUNmLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTs2QkFDQTt5QkFDTixDQUFDO3dCQUNmLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztxQkFDcEM7aUJBQ0Y7YUFDRjtpQkFDSTtnQkFDSCxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUM7Z0JBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ1QsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNYLEtBQUs7b0JBQ0wsTUFBTSxFQUFFLE1BQU0sRUFBRTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLE9BQU87d0JBQ1AsUUFBUSxFQUFFLFdBQVc7cUJBQ3RCO29CQUNELFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDcEIsZUFBZSxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ25ELGVBQWUsQ0FBQyxPQUFPO29CQUN6QixPQUFPLEVBQUU7d0JBQ1AsT0FBTzt3QkFDUCxJQUFJO3FCQUNZO29CQUNsQixXQUFXLEVBQUUsQ0FBQzs0QkFDWixPQUFPLEVBQUUsVUFBVTs0QkFDbkIsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQ0FDOUIsQ0FBQyxFQUFFLENBQUM7NkJBQ0wsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFOzRCQUNiLEtBQUssRUFBRSxFQUNOOzRCQUNELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVE7eUJBQzVELENBQUM7aUJBQ0gsQ0FBQyxDQUFDO2dCQUNILElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtvQkFDeEMsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPO3dCQUNyQixLQUFLLEVBQUU7NEJBQ0wsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLOzRCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVTt5QkFDdkQ7d0JBQ0QsS0FBSyxFQUFFOzRCQUNMLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLE9BQU87eUJBQzdCO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxTQUFTLEVBQUUsSUFBSTs0QkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7NEJBQ2pCLElBQUksRUFBRSxJQUFJO3lCQUNNO3FCQUNuQixDQUFDLENBQUM7Z0JBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNkLE1BQU0saUJBQWlCLEdBQUc7d0JBQ3hCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVc7d0JBQ3pCLEtBQUssRUFBRTs0QkFDTCxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsYUFBYTs0QkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVU7eUJBQ3ZEO3dCQUNELEtBQUssRUFBRTs0QkFDTCxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQzt5QkFDbkI7d0JBQ0QsT0FBTyxFQUFFOzRCQUNQLFNBQVMsRUFBRSxJQUFJOzRCQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTt5QkFDRDtxQkFDTixDQUFDO29CQUNmLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDcEM7YUFDRjtTQUNGO1FBQ0QsS0FBSyxJQUFJLFNBQVMsSUFBSSxXQUFXLEVBQUU7WUFDakMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQUMsQ0FBQyxPQUF5QixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUMxRixPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQUMsQ0FBQyxPQUF5QixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNGLEtBQUssSUFBSSxNQUFNLElBQUksT0FBTztnQkFDeEIsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUU7b0JBQzFCLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO3dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7d0JBQ25CLE9BQU8sRUFBRTs0QkFDUCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7NEJBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTt5QkFDQztxQkFDTixDQUFDLENBQUM7aUJBQ3RCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFjO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLEVBQXNCLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMzQyxJQUFJLFVBQWtCLEVBQUUsS0FBWSxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDcEgsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUM7UUFDekQsSUFBSSxRQUFRLEVBQUU7WUFDWixLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTFFLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RCxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQzVGO1lBQ0QsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDekU7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNsQixNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUk7b0JBQ2pCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2FBQ3ZCO1NBQ0Y7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ3BCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDaEQsQ0FBQztJQUNPLGFBQWEsQ0FBQyxJQUFjO1FBQ2xDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLEdBQUc7WUFDTCxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBQ08sUUFBUSxDQUFDLEdBQXFCO1FBQ3BDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUN2RyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDdkcsSUFBSSxHQUFtQixDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsQ0FBQztnQkFBRSxPQUFPO1lBQ2YsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNPLEtBQUssQ0FBQyxVQUFVO1FBQ3RCLElBQUksSUFBWSxFQUFFLElBQVksQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQ3JELElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ2pDO29CQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDckUsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQzlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ25CO2FBQ0Y7aUJBQ0k7Z0JBQ0gsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN0RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDN0MsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQ2hFLEVBQUUsQ0FBQyxJQUFJLEVBQ1AsSUFBSSxDQUFDLENBQUM7cUJBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7b0JBQzVELElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUM3RCxFQUFFLENBQUMsSUFBSSxFQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFDMUIsSUFBSSxDQUFDLENBQUM7aUJBQ1Q7cUJBQ0k7b0JBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNyRSxJQUFJO3dCQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUMzQyxFQUFFLENBQUMsTUFBTSxFQUNULEVBQUUsQ0FBQyxJQUFJLEVBQ1AsR0FBRyxDQUFDLElBQUksRUFDUixJQUFJLENBQUMsQ0FBQztpQkFDWDtnQkFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJO29CQUNULElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN6QjtTQUNGO2FBQ0k7WUFDSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUMvQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZTtvQkFDL0IsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztvQkFFcEgsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3hEO2lCQUNJO2dCQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckUsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2hGLElBQUksR0FBRyxDQUFDLElBQUk7b0JBQ1YsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzFCO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQWMsRUFBRSxTQUFvQjtRQUN0RCxNQUFNLE9BQU8sR0FBcUIsRUFBRSxDQUFDO1FBRXJDLElBQUksVUFBa0IsQ0FBQztRQUV2QixNQUFNO1FBQ04sSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQzdDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlO2dCQUMvQixVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDOztnQkFFeEMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLElBQUk7b0JBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUM1QztTQUNGOztRQUVELGVBQWU7UUFDZjtZQUNFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25FLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3RCLElBQUksR0FBRyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDeEMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlFLElBQUksSUFBSTtvQkFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzVDO1NBQ0Y7UUFDRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7WUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQWMsQ0FBQztZQUNwRyxJQUFJLE9BQU8sQ0FBQyxNQUFNO2dCQUFFLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFO29CQUMvQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDakUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ25CO1lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNsQixJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlFLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTt3QkFDYixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTTs0QkFDbkQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLEVBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs2QkFDM0Q7NEJBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQ25FLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3lCQUM3QztxQkFDRjt5QkFDSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTTt3QkFDeEQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3lCQUM5Rjt3QkFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDbkUsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDaEY7aUJBQ0Y7cUJBQ0k7b0JBQ0gsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUE7b0JBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3pELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7d0JBQ3JELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTs0QkFDYixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3lCQUMzRzs7NEJBRUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDakY7eUJBQ0k7d0JBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ25FLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTs0QkFDYixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7eUJBQ2xIOzs0QkFFQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUN4RjtpQkFDRjthQUNGO2lCQUNJLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM1RSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZTt3QkFDL0IsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzs7d0JBRXhILE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNsRztxQkFDSTtvQkFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDakc7YUFDRjtpQkFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO2dCQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDN0Y7aUJBQ0ksSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNwRTtpQkFDSTtnQkFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDM0U7U0FDRjthQUNJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDN0MsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWU7b0JBQy9CLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O29CQUV6SCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMzRDtpQkFDSTtnQkFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkUsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM5RTtTQUNGO1FBQ0QsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFO1lBQzFCLElBQUksU0FBUyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07Z0JBQ2pELE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDekY7Z0JBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2xGLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0c7U0FDRjtRQUNELElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUM5RSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDekQsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQ2xFLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtnQkFDcEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2hFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM3RCxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEY7aUJBQ0k7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDN0U7U0FDRjtRQUNELElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUN2QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDeEUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUM1RjthQUNJLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUMxQixJQUFJLFNBQVMsQ0FBQyxRQUFRO2dCQUFFLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLElBQUksR0FBRyxDQUFDO29CQUNWLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDL0Y7U0FDRjthQUNJLElBQUksSUFBSSxDQUFDLFlBQVk7WUFDeEIsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM5RyxJQUFJLFNBQVMsQ0FBQyxHQUFHO1lBQ2YsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFDTyxPQUFPLENBQUMsSUFBWSxFQUFFLE1BQXVCO1FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FDM0MsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDdEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxRQUFRO2dCQUNkLE1BQU0sQ0FBQyxJQUFJO2dCQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMvQjtRQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN2RSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQVU7UUFDekIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELFdBQVc7UUFDVCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pDLENBQUM7OzhHQXJwQlUsaUJBQWlCO2tHQUFqQixpQkFBaUIsbU1BUmxCLEVBQUUsK0NBRUcsQ0FBQyw4QkFBOEIsQ0FBQzsyRkFNcEMsaUJBQWlCO2tCQVY3QixTQUFTOytCQUNFLGFBQWEsWUFDYixFQUFFLGlCQUVHLENBQUMsOEJBQThCLENBQUMsUUFDekM7d0JBQ0osR0FBRyxFQUFFLEtBQUs7cUJBQ1g7b1BBSVEsS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOb2RlTW9kZWwsIENvbm5lY3Rvck1vZGVsLCBMYXlvdXRNb2RlbCwgRGlhZ3JhbVRvb2xzLCBEaWFncmFtLCBEaWFncmFtQ29uc3RyYWludHMsIENvbXBsZXhIaWVyYXJjaGljYWxUcmVlLCBDb21wbGV4SGllcmFyY2hpY2FsVHJlZVNlcnZpY2UsIENvbm5lY3RvckJyaWRnaW5nLCBCcG1uRGlhZ3JhbXMsIERhdGFCaW5kaW5nLCBTY3JvbGxTZXR0aW5nc01vZGVsLCBTbmFwU2V0dGluZ3NNb2RlbCwgU2VnbWVudHMsIExpbmVSb3V0aW5nLCBUcmVlSW5mbywgSU1vdXNlRXZlbnRBcmdzLCBMaW5lRGlzdHJpYnV0aW9uLCBDb25uZWN0aW9uUG9pbnRPcmlnaW4sIFNuYXBDb25zdHJhaW50cywgTm9kZUNvbnN0cmFpbnRzLCBDaGlsZEFycmFuZ2VtZW50IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZGlhZ3JhbXMnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IERvY3VtZW50TW9kZWwsIFJlY2lwaWVudCwgTm9kZUluZm8sIEdlbmRlciwgRmxvd05vZGUsIFVzZXJJbmZvLCBTdGF0ZSB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBnZXRXYXJuIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUcmFjZUJhc2UsIFlvdSwgU1RBUlRfTk9ERSB9IGZyb20gJy4vdHJhY2UuYmFzZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvYWNjb3VudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IER1cmF0aW9uRm9ybWF0UGlwZSB9IGZyb20gJy4uLy4uL2NvcmUvcGlwZXMvZHVyYXRpb24tZm9ybWF0LnBpcGUnO1xyXG5cclxuRGlhZ3JhbS5JbmplY3QoQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsIExpbmVEaXN0cmlidXRpb24vKiwgTGF5b3V0QW5pbWF0aW9uLCBMaW5lUm91dGluZywgQ29ubmVjdG9yQnJpZGdpbmcqLyk7XHJcblxyXG5jb25zdFxyXG4gIC8vRUxMSVBTSVMgPSAnTSA2NTAsIDE1MCBhIDc1LDE1MCAwIDEsMCAxLDAgeicsXHJcbiAgRllJX1BBVEggPSAnTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6JyxcclxuICBFU0NBTEFURURfUEFUSCA9ICdNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eicsXHJcbiAgV0FSTk5JTkdfUEFUSCA9ICdNIDEzLjc2MzczNSwxLjg0MzM3MzUgSCA2LjMwMzczNDkgbCAtNS4yNyw1LjI3IHYgNy40NTk5OTk1IGwgNS4yNyw1LjI3IGggNy40NjAwMDAxIGwgNS4yNywtNS4yNyBWIDcuMTEzMzczNSBaIG0gLTMuNzMsMTQuMjk5OTk5NSBjIC0wLjcyMDAwMDEsMCAtMS4zMDAwMDAxLC0wLjU4IC0xLjMwMDAwMDEsLTEuMyAwLC0wLjcyIDAuNTgsLTEuMyAxLjMwMDAwMDEsLTEuMyAwLjcyLDAgMS4zLDAuNTggMS4zLDEuMyAwLDAuNzIgLTAuNTgsMS4zIC0xLjMsMS4zIHogbSAxLC00LjMgSCA5LjAzMzczNDkgViA1Ljg0MzM3MzUgaCAyLjAwMDAwMDEgeic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1mbG93JyxcclxuICB0ZW1wbGF0ZTogJycsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFtDb21wbGV4SGllcmFyY2hpY2FsVHJlZVNlcnZpY2VdLFxyXG4gIGhvc3Q6IHtcclxuICAgIGRpcjogJ2x0cidcclxuICB9XHJcbn0pXHJcbi8qKiBmbG93LXZpZXcgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIEZsb3dWaWV3Q29tcG9uZW50IGV4dGVuZHMgVHJhY2VCYXNlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIG1vZGVsOiBEb2N1bWVudE1vZGVsPGFueT47XHJcbiAgQElucHV0KCkgY29ubmVjdG9yVHlwZTogU2VnbWVudHMgPSAnT3J0aG9nb25hbCc7XHJcbiAgZGlhZ3JhbTogRGlhZ3JhbTtcclxuICByZWFkb25seSB0b29sOiBEaWFncmFtVG9vbHMgPSBEaWFncmFtVG9vbHMuWm9vbVBhbjtcclxuICByZWFkb25seSBkaWFncmFtQ29uc3RyYWludHM6IERpYWdyYW1Db25zdHJhaW50cyA9XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuRGVmYXVsdCB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuUGFuIHxcclxuICAgIERpYWdyYW1Db25zdHJhaW50cy5MaW5lUm91dGluZyB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuWm9vbTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbGF5b3V0ID0ge1xyXG4gICAgdHlwZTogJ0NvbXBsZXhIaWVyYXJjaGljYWxUcmVlJyxcclxuICAgIGNvbm5lY3Rpb25Qb2ludE9yaWdpbjogQ29ubmVjdGlvblBvaW50T3JpZ2luLkRpZmZlcmVudFBvaW50LFxyXG4gICAgaG9yaXpvbnRhbFNwYWNpbmc6IDUwLFxyXG4gICAgZW5hYmxlUm91dGluZzogdHJ1ZSxcclxuICAgIHZlcnRpY2FsU3BhY2luZzogNTAsXHJcbiAgICAvL2Nvbm5lY3Rpb25EaXJlY3Rpb246ICdPcmllbnRhdGlvbicsXHJcbiAgICBvcmllbnRhdGlvbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1JpZ2h0VG9MZWZ0JyA6ICdMZWZ0VG9SaWdodCcsXHJcbiAgfSBhcyBMYXlvdXRNb2RlbDtcclxuXHJcbiAgcmVhZG9ubHkgc2Nyb2xsU2V0dGluZ3MgPSB7XHJcbiAgICBtaW5ab29tOiAuNSxcclxuICAgIHNjcm9sbExpbWl0OiAnRGlhZ3JhbScsXHJcbiAgICBjYW5BdXRvU2Nyb2xsOiB0cnVlLFxyXG4gICAgY3VycmVudFpvb206IDEuMixcclxuICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBib3R0b206IDAgfSxcclxuICAgIGF1dG9TY3JvbGxCb3JkZXI6IHsgdG9wOiAwLCBib3R0b206IDAgfSxcclxuICAgIG1heFpvb206IDIuNVxyXG4gIH0gYXMgU2Nyb2xsU2V0dGluZ3NNb2RlbDtcclxuXHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzID0ge1xyXG4gICAgY29uc3RyYWludHM6IFNuYXBDb25zdHJhaW50cy5Ob25lLFxyXG4gICAgZ3JpZFR5cGU6ICdEb3RzJ1xyXG4gIH0gYXMgU25hcFNldHRpbmdzTW9kZWw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlndXJhdGlvbjogeyBbbmFtZTogc3RyaW5nXTogRmxvd05vZGUgfSA9IHt9O1xyXG4gIHByaXZhdGUgX2FjY2VudENvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICAvKiogd29ya2Zsb3ctdmlldyBjdG9yICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYWNjb3VudHM6IEFjY291bnRTZXJ2aWNlLCBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSwgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHVyYXRpb246IER1cmF0aW9uRm9ybWF0UGlwZSxcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgaHViOiBIdWJTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihodWIpO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5vZGVzLmZvckVhY2gobiA9PlxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uW24ubmFtZV0gPSBuKTtcclxuICAgIF9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9hY2NlbnRDb2xvciA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhfY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9pbml0aWFsaXplKCkge1xyXG4gICAgY29uc3QgeyBjb25uZWN0b3JzLCBub2RlcywgaW5kaWNhdG9ycyB9ID0gYXdhaXQgdGhpcy5fcHJlcGFyZSgpO1xyXG4gICAgdGhpcy5kaWFncmFtICYmIHRoaXMuZGlhZ3JhbS5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gPSBuZXcgRGlhZ3JhbSh7XHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgIGhlaWdodDogMzgwLFxyXG4gICAgICBub2RlcyxcclxuICAgICAgY29ubmVjdG9ycyxcclxuICAgICAgbGF5b3V0OiB0aGlzLmxheW91dCxcclxuICAgICAgdG9vbDogdGhpcy50b29sLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgIHNjcm9sbFNldHRpbmdzOiB0aGlzLnNjcm9sbFNldHRpbmdzLFxyXG4gICAgICBzbmFwU2V0dGluZ3M6IHRoaXMuc25hcFNldHRpbmdzLFxyXG4gICAgICBjb25zdHJhaW50czogdGhpcy5kaWFncmFtQ29uc3RyYWludHMsXHJcbiAgICAgIGdldENvbm5lY3RvckRlZmF1bHRzOiB0aGlzLmNvbm5EZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMubm9kZURlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICB9LCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaWFncmFtLmRvTGF5b3V0KCk7XHJcbiAgICBpbmRpY2F0b3JzLmZvckVhY2goKG4sIGkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5kaWFncmFtLmdldE5vZGVPYmplY3QoKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5wYXJlbnRJZCk7XHJcbiAgICAgIG4ub2Zmc2V0WCA9IHBhcmVudC5vZmZzZXRYICsgKHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/IC0yNSA6IDI1KTtcclxuICAgICAgbi5vZmZzZXRZID0gcGFyZW50Lm9mZnNldFkgKyAyNTtcclxuICAgICAgbi56SW5kZXggPSAxMDAwICsgaTtcclxuICAgICAgdGhpcy5kaWFncmFtLmFkZChuKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFncmFtLmZpdFRvUGFnZSgpO1xyXG4gICAgaW50ZXJ2YWwoNjAwMDApLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoXHJcbiAgICAgIHRoaXMuX3JlZnJlc2guYmluZCh0aGlzKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVmcmVzaCgpIHtcclxuICAgIHN1cGVyLnJlc2V0RXN0aW1hdGVUaW1lKCk7XHJcbiAgICB0aGlzLmRpYWdyYW0ubm9kZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgY29uc3QgeyBub2RlLCByZWNpcGllbnQgfSA9IG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG4gICAgICBpZiAocmVjaXBpZW50KSB7XHJcbiAgICAgICAgaWYgKCFyZWNpcGllbnQucmVwbGllZCAmJiByZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5lc3RpbWF0ZSkgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSk7XHJcbiAgICAgICAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmID0gbm9kZS5zdGFuZGFyZFRpbWUgLSBkYXlqcygpLmRpZmYobm9kZS50aW1lLCAncycpO1xyXG4gICAgICAgICAgICBpZiAoZGlmZiA+IDApXHJcbiAgICAgICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZGlmZikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbi50b29sdGlwLmNvbnRlbnQgPSB0aGlzLl90b29sdGlwKChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpZiAobm9kZSAmJiBub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSksXHJcbiAgICAgICAgICAgIG4udG9vbHRpcC5jb250ZW50ID0gdGhpcy5fdG9vbHRpcCgobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBvYmpcclxuICAgKi9cclxuICBwdWJsaWMgbm9kZURlZmF1bHRzKG9iajogTm9kZU1vZGVsKTogTm9kZU1vZGVsIHtcclxuICAgIGNvbnN0IHsgcmVjaXBpZW50LCBub2RlLCBpbmRpY2F0b3IgfSA9IG9iai5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWw7XHJcblxyXG4gICAgaWYgKGluZGljYXRvcikge1xyXG4gICAgICBvYmoud2lkdGggPSBvYmouaGVpZ2h0ID0gMTU7XHJcbiAgICAgIG9iai5zdHlsZS5zdHJva2VXaWR0aCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgb2JqLndpZHRoID0gb2JqLmhlaWdodCA9IDUwO1xyXG4gICAgICBpZiAob2JqLmFubm90YXRpb25zICYmIG9iai5hbm5vdGF0aW9ucy5sZW5ndGgpIG9iai5hbm5vdGF0aW9uc1swXS5zdHlsZS5jb2xvciA9IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snO1xyXG4gICAgICBpZiAobm9kZSAmJiBub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgb2JqLnN0eWxlLnN0cm9rZUNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgICAgb2JqLnN0eWxlLm9wYWNpdHkgPSBvYmouYW5ub3RhdGlvbnNbMF0uc3R5bGUub3BhY2l0eSA9IC42O1xyXG4gICAgICAgIG9iai5zdHlsZS5maWxsID0gJ3RyYW5zcGFyZW50JztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9hY2NlbnRDb2xvcjtcclxuICAgICAgICBvYmouc3R5bGUuZmlsbCA9IHJlY2lwaWVudCAmJiByZWNpcGllbnQucGVuZGluZyA/XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLmdldEFjY2VudChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZCA/IDUwMCA6IDQwMCkgOiAndHJhbnNwYXJlbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIG9iai5zdHlsZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29ubmVjdG9yXHJcbiAgICovXHJcbiAgcHVibGljIGNvbm5EZWZhdWx0cyhjb25uZWN0b3I6IENvbm5lY3Rvck1vZGVsKSB7XHJcbiAgICBjb25uZWN0b3IudHlwZSA9IHRoaXMuY29ubmVjdG9yVHlwZTtcclxuICAgIGNvbm5lY3Rvci5jb3JuZXJSYWRpdXMgPSA2O1xyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5oZWlnaHQgPSA3O1xyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci53aWR0aCA9IDc7XHJcbiAgICBpZiAoKGNvbm5lY3Rvci5hZGRJbmZvIGFzIENvbm5lY3RvckluZm9Nb2RlbCkuZXN0aW1hdGUpIHtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZURhc2hBcnJheSA9ICcyIDInO1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPVxyXG4gICAgICAgIGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc3R5bGUuZmlsbCA9XHJcbiAgICAgICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5zdHJva2VDb2xvciA9XHJcbiAgICAgICAgdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VXaWR0aCA9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZUNvbG9yID0gY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5zdHJva2VDb2xvciA9IGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc3R5bGUuZmlsbCA9IHRoaXMuX2FjY2VudENvbG9yO1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlV2lkdGggPSAyO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zaGFwZSA9ICdOb25lJztcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZSgpOiBQcm9taXNlPHsgbm9kZXM6IE5vZGVNb2RlbFtdOyBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdOyBpbmRpY2F0b3JzOiBOb2RlTW9kZWxbXSB9PiB7XHJcbiAgICBjb25zdCB7IGNvbm5lY3RvcnM6IGRjb25uZWN0b3JzLCBub2RlczogZG5vZGVzIH0gPSB0aGlzLm1vZGVsLndvcmtmbG93O1xyXG4gICAgY29uc3QgaW5kaWNhdG9yczogTm9kZU1vZGVsW10gPSBbXSwgY29ubmVjdG9yczogQ29ubmVjdG9yTW9kZWxbXSA9IFtdLCBub2RlczogTm9kZU1vZGVsW10gPSBbXTtcclxuICAgIGxldCB6SW5kZXggPSA1MDA7XHJcbiAgICBmb3IgKGxldCBub2RlIG9mIGRub2Rlcykge1xyXG4gICAgICBpZiAobm9kZXMuZmluZChuID0+IG4uaWQgPT0gbm9kZS5pZCkpIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXTtcclxuICAgICAgbGV0IHJlY2lwaWVudHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuXHJcbiAgICAgICAgZmlsdGVyKHIgPT4gci5ub2RlSWQgPT09IG5vZGUuaWQgJiZcclxuICAgICAgICAgICghdGhpcy5tb2RlbC5pc3N1ZWQgfHwgci5yZWNlaXZlZCA+PSB0aGlzLm1vZGVsLmlzc3VlZCkpXHJcbiAgICAgICAgLnNvcnQoKHIwLCByMSkgPT5cclxuICAgICAgICAgIHIwLnJlY2VpdmVkID4gcjEucmVjZWl2ZWQgPyAxIDogLTEpO1xyXG4gICAgICBpZiAocmVjaXBpZW50cy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgciA9IDA7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgdmFyIHJlY2lwaWVudCA9IHJlY2lwaWVudHNbcl07XHJcbiAgICAgICAgICBsZXQgZXhpc3RzID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlIHVzZXIgcmVjaXBpZW50IG9uIHNhbWUgbm9kZVxyXG4gICAgICAgICAgbGV0IGogPSAwO1xyXG4gICAgICAgICAgd2hpbGUgKGogPCByICYmICFleGlzdHMpIHtcclxuICAgICAgICAgICAgaWYgKHJlY2lwaWVudHNbal0udXNlcklkID09PSByZWNpcGllbnQudXNlcklkKSBleGlzdHMgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIGorKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChleGlzdHMpXHJcbiAgICAgICAgICAgIHJlY2lwaWVudHMuc3BsaWNlKHJlY2lwaWVudC5lc3RpbWF0ZSA/IHIgOiBqLCAxKTtcclxuICAgICAgICAgIGVsc2UgcisrO1xyXG4gICAgICAgIH0gd2hpbGUgKHIgPCByZWNpcGllbnRzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGZvciAociA9IDA7IHIgPCByZWNpcGllbnRzLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICBsZXQgcmVjaXBpZW50ID0gcmVjaXBpZW50c1tyXTtcclxuICAgICAgICAgIGNvbnN0IHsgYW5ub3RhdGlvbiwgdG9vbHRpcCB9ID0gYXdhaXQgdGhpcy5fbm90ZShub2RlLCByZWNpcGllbnQpO1xyXG4gICAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuX3Rvb2x0aXAodG9vbHRpcCk7XHJcbiAgICAgICAgICBjb25zdCBub2QgPSB7XHJcbiAgICAgICAgICAgIGlkOiByID09PSAwID8gbm9kZS5pZCA6IG5vZGUuaWQgKyByLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNoYXBlOiB0aGlzLl9jb25maWd1cmF0aW9uW25vZGUudHlwZV0uc2hhcGUsXHJcbiAgICAgICAgICAgIHpJbmRleDogekluZGV4KyssXHJcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnVG9wQ2VudGVyJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb25zdHJhaW50czogY29udGVudCA/XHJcbiAgICAgICAgICAgICAgTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgfCBOb2RlQ29uc3RyYWludHMuVG9vbHRpcCA6XHJcbiAgICAgICAgICAgICAgTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQsXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICB0b29sdGlwLFxyXG4gICAgICAgICAgICAgIHJlY2lwaWVudCxcclxuICAgICAgICAgICAgICBub2RlXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbCxcclxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFt7XHJcbiAgICAgICAgICAgICAgY29udGVudDogYW5ub3RhdGlvbixcclxuICAgICAgICAgICAgICBtYXJnaW46IHsgdG9wOiA0IH0sXHJcbiAgICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6ICdUb3AnLFxyXG4gICAgICAgICAgICAgIG9mZnNldDoge1xyXG4gICAgICAgICAgICAgICAgeTogMSxcclxuICAgICAgICAgICAgICAgIHg6IC41XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XVxyXG4gICAgICAgICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICAgICAgICBub2Rlcy5wdXNoKG5vZCk7XHJcbiAgICAgICAgICAvLyBhZGQgYWN0aW9uIGluZGljYXRvclxyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5hY3Rpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gcmVjaXBpZW50LmFjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChhY3Rpb24uc2hhcGUgJiYgIXJlY2lwaWVudC5wZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYWN0aW9uSW5kaWNhdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IG5vZC5pZCArICdhY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBhY3Rpb24uc2hhcGUsXHJcbiAgICAgICAgICAgICAgICAgIGFsaWduOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnWE1pbllNYXgnIDogJ1hNYXhZTWF4JyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICBmaWxsOiBhY3Rpb24uY29sb3IgfHwgdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoOTAwKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgICAgICB9IGFzIE5vZGVNb2RlbDtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3JzLnB1c2goYWN0aW9uSW5kaWNhdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gZnlpIGluZGljYXRvclxyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5meWkpXHJcbiAgICAgICAgICAgIGluZGljYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG5vZC5pZCArICdmeWknLFxyXG4gICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBGWUlfUEFUSCxcclxuICAgICAgICAgICAgICAgIGFsaWduOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnWE1pbllNYXgnIDogJ1hNYXhZTWF4J1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgIGZpbGw6ICcjMTk3NmQyJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVNb2RlbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gZXNjYWxhdGUgaW5kaWNhdG9yXHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmVzY2FsYXRlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBlc2NhbGF0ZUluZGljYXRvciA9IHtcclxuICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ2VzY2FsYXRlJyxcclxuICAgICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogRVNDQUxBVEVEX1BBVEgsXHJcbiAgICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgICBpbmRpY2F0b3JzLnB1c2goZXNjYWxhdGVJbmRpY2F0b3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB7IHN0YXRlLCBhbm5vdGF0aW9uLCB0b29sdGlwIH0gPSBhd2FpdCB0aGlzLl9zaGFwZShub2RlKTtcclxuICAgICAgICBjb25zdCB7IHNoYXBlIH0gPSBjb25maWd1cmF0aW9uO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLl90b29sdGlwKHRvb2x0aXApO1xyXG4gICAgICAgIG5vZGVzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICBzaGFwZSwvLzoge3R5cGU6ICdQYXRoJywgZGF0YTogRUxMSVBTSVMgfSxcclxuICAgICAgICAgIHpJbmRleDogekluZGV4KyssXHJcbiAgICAgICAgICB0b29sdGlwOiB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnVG9wQ2VudGVyJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbnN0cmFpbnRzOiBjb250ZW50ID9cclxuICAgICAgICAgICAgTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgfCBOb2RlQ29uc3RyYWludHMuVG9vbHRpcCA6XHJcbiAgICAgICAgICAgIE5vZGVDb25zdHJhaW50cy5EZWZhdWx0LFxyXG4gICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICB0b29sdGlwLFxyXG4gICAgICAgICAgICBub2RlXHJcbiAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWwsXHJcbiAgICAgICAgICBhbm5vdGF0aW9uczogW3tcclxuICAgICAgICAgICAgY29udGVudDogYW5ub3RhdGlvbixcclxuICAgICAgICAgICAgb2Zmc2V0OiBzaGFwZS50eXBlID09PSAnUGF0aCcgPyB7XHJcbiAgICAgICAgICAgICAgeTogMVxyXG4gICAgICAgICAgICB9IDogeyB4OiAuNSB9LFxyXG4gICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogc2hhcGUudHlwZSA9PT0gJ1BhdGgnID8gJ1RvcCcgOiAnQ2VudGVyJ1xyXG4gICAgICAgICAgfV1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUuc2hhcGUgJiYgIW5vZGUuZXN0aW1hdGUpXHJcbiAgICAgICAgICBpbmRpY2F0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICBpZDogbm9kZS5pZCArICdzdGF0ZScsXHJcbiAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgIGRhdGE6IHN0YXRlLnNoYXBlLFxyXG4gICAgICAgICAgICAgIGFsaWduOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnWE1heFlNYXgnIDogJ1hNaW5ZTWF4J1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgIGZpbGw6IHN0YXRlLmNvbG9yIHx8ICdibGFjaydcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICBub2RlOiBub2RlXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG5vZGUuZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnN0IHdhcm5uaW5nSW5kaWNhdG9yID0ge1xyXG4gICAgICAgICAgICBpZDogbm9kZS5pZCArICdleGNlcHRpb24nLFxyXG4gICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICBkYXRhOiBXQVJOTklOR19QQVRILFxyXG4gICAgICAgICAgICAgIGFsaWduOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnWE1pbllNYXgnIDogJ1hNYXhZTWF4J1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgIGZpbGw6IGdldFdhcm4oODAwKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLmlkXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICAgICAgICBpbmRpY2F0b3JzLnB1c2god2Fybm5pbmdJbmRpY2F0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgY29ubmVjdG9yIG9mIGRjb25uZWN0b3JzKSB7XHJcbiAgICAgIGxldCBzb3VyY2VzID0gbm9kZXMuZmlsdGVyKG4gPT4gKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5ub2RlLmlkID09PSBjb25uZWN0b3Iuc291cmNlSWQpLFxyXG4gICAgICAgIHRhcmdldHMgPSBub2Rlcy5maWx0ZXIobiA9PiAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLm5vZGUuaWQgPT09IGNvbm5lY3Rvci50YXJnZXRJZCk7XHJcbiAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKVxyXG4gICAgICAgIGZvciAobGV0IHRhcmdldCBvZiB0YXJnZXRzKSB7XHJcbiAgICAgICAgICBjb25uZWN0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICBzb3VyY2VJRDogc291cmNlLmlkLFxyXG4gICAgICAgICAgICB0YXJnZXRJRDogdGFyZ2V0LmlkLFxyXG4gICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgZXN0aW1hdGU6IGNvbm5lY3Rvci5lc3RpbWF0ZSxcclxuICAgICAgICAgICAgICB0aW1lOiBjb25uZWN0b3IudGltZVxyXG4gICAgICAgICAgICB9IGFzIENvbm5lY3RvckluZm9Nb2RlbFxyXG4gICAgICAgICAgfSBhcyBDb25uZWN0b3JNb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY29ubmVjdG9ycywgbm9kZXMsIGluZGljYXRvcnMgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5vZGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9zaGFwZShub2RlOiBOb2RlSW5mbyk6IFByb21pc2U8eyBzdGF0ZTogU3RhdGU7IGFubm90YXRpb246IHN0cmluZzsgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbDsgfT4ge1xyXG4gICAgY29uc3QgdG9vbHRpcCA9IHt9IGFzIE5vZGVUb29sdGlwTW9kZWw7XHJcbiAgICBpZiAobm9kZS5lcnJvcikgdG9vbHRpcC5lcnJvciA9IG5vZGUuZXJyb3I7XHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nLCBzdGF0ZTogU3RhdGU7XHJcbiAgICBjb25zdCBsb2cgPSB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLm5vZGVJZCA9PT0gbm9kZS5pZCAmJiAoIXRoaXMubW9kZWwuaXNzdWVkIHx8IGwudGltZSA+PSB0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG4gICAgY29uc3Qgc3RhdGVMb2cgPSBsb2cuZmluZChsID0+IGwudHlwZSA9PT0gJ1N0YXRlQ2hhbmdlJyk7XHJcbiAgICBpZiAoc3RhdGVMb2cpIHtcclxuICAgICAgc3RhdGUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuc3RhdGVzLmZpbmQocyA9PiBzLm5hbWUgPT09IHN0YXRlTG9nLnN0YXRlKTtcclxuXHJcbiAgICAgIGlmIChzdGF0ZUxvZy5kdXJhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gZGF5anMuZHVyYXRpb24oc3RhdGVMb2cuZHVyYXRpb24sICdzJyk7XHJcbiAgICAgICAgdG9vbHRpcC5kdXJhdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0R1cmF0aW9uVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkdXJhdGlvbikpO1xyXG4gICAgICB9XHJcbiAgICAgIGFubm90YXRpb24gPSAobm9kZS5lc3RpbWF0ZSA/IHN0YXRlLmZ1dHVyZSA6IHN0YXRlLnBhc3QpIHx8IHN0YXRlLnRpdGxlO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gU1RBUlRfTk9ERSkge1xyXG4gICAgICBpZiAoIW5vZGUuZXN0aW1hdGUpIHtcclxuICAgICAgICBjb25zdCB7IG5vdGUsIHJvbGUgfSA9IGF3YWl0IHRoaXMuX3N0YXJ0Tm9kZSgpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IG5vdGUsXHJcbiAgICAgICAgICB0b29sdGlwLnJvbGUgPSByb2xlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub2RlLmVzdGltYXRlKVxyXG4gICAgICB0b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSk7XHJcbiAgICByZXR1cm4geyBzdGF0ZSwgdG9vbHRpcCwgYW5ub3RhdGlvbiB9O1xyXG4gIH1cclxuICByZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5kaWFncmFtKSB0aGlzLmRpYWdyYW0ud2lkdGggPSAnYXV0byc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RpbWVFc3RpbWF0ZShub2RlOiBOb2RlSW5mbyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSBzdXBlci5fZXN0aW1hdGVUaW1lKG5vZGUpO1xyXG4gICAgaWYgKG1heClcclxuICAgICAgcmV0dXJuICFtaW4gfHwgbWluID09PSBtYXggP1xyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZScsIGRheWpzLmR1cmF0aW9uKG1heCwgJ3MnKS5odW1hbml6ZSgpKSA6XHJcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmdldCgnRXN0aW1hdGVUaW1lUmFuZ2UnLCBkYXlqcy5kdXJhdGlvbihtaW4sICdzJykuaHVtYW5pemUoKSwgZGF5anMuZHVyYXRpb24obWF4LCAncycpLmh1bWFuaXplKCkpO1xyXG4gIH1cclxuICBwcml2YXRlIF90b29sdGlwKG9iajogTm9kZVRvb2x0aXBNb2RlbCkge1xyXG4gICAgY29uc3QgeyBub3RlLCByb2xlLCBzdWJzdGl0dXRpbmcsIGVzY2FsYXRpb24sIGR1cmF0aW9uLCBzdGFuZGFyZFRpbWUsIGVzdGltYXRlZFRpbWUsIGVycm9yLCBmeWkgfSA9IG9ialxyXG4gICAgY29uc3Qgcm93cyA9IFtub3RlLCBzdWJzdGl0dXRpbmcsIGVzY2FsYXRpb24sIGR1cmF0aW9uLCBmeWksIHJvbGUsIGVycm9yLCBzdGFuZGFyZFRpbWUsIGVzdGltYXRlZFRpbWVdO1xyXG4gICAgbGV0IGRpdjogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICByb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgIGlmICghcikgcmV0dXJuO1xyXG4gICAgICBpZiAoIWRpdikgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uaW5uZXJUZXh0ID0gcjtcclxuICAgICAgZGl2LmFwcGVuZChzcGFuKTtcclxuICAgICAgY29uc3QgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpO1xyXG4gICAgICBkaXYuYXBwZW5kKGJyKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRpdjtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfc3RhcnROb2RlKCk6IFByb21pc2U8eyBub3RlOiBzdHJpbmcsIHJvbGU6IHN0cmluZzsgfT4ge1xyXG4gICAgbGV0IG5vdGU6IHN0cmluZywgcm9sZTogc3RyaW5nO1xyXG4gICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3codGhpcy5tb2RlbC5pc3N1ZWQpO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsLm93bmVyQnlJZCkge1xyXG4gICAgICBpZiAodGhpcy5tb2RlbC5vd25lckJ5SWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwub3duZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZClcclxuICAgICAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1lvdVN1Ym1pdHRlZE5vdGVCeScsXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ieUdlbmRlcixcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMubW9kZWwub3duZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdZb3VTdWJtaXR0ZWROb3RlQnknLFxyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlHZW5kZXIsXHJcbiAgICAgICAgICAgIHdoby5uYW1lLCB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgYnkgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQodGhpcy5tb2RlbC5vd25lckJ5SWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLm93bmVySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSBcclxuICAgICAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1Ym1pdHRlZE5vdGVZb3VCeScsIGJ5LmdlbmRlcixcclxuICAgICAgICAgICAgYnkubmFtZSxcclxuICAgICAgICAgICAgdGltZSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5tb2RlbC5vd25lcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSB7XHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJtaXR0ZWROb3RlQnknLCBieS5nZW5kZXIsXHJcbiAgICAgICAgICAgIGJ5Lm5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQodGhpcy5tb2RlbC5vd25lcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgIG5vdGUgPVxyXG4gICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1Ym1pdHRlZE5vdGVCeScsXHJcbiAgICAgICAgICAgICAgYnkuZ2VuZGVyLFxyXG4gICAgICAgICAgICAgIGJ5Lm5hbWUsXHJcbiAgICAgICAgICAgICAgd2hvLm5hbWUsXHJcbiAgICAgICAgICAgICAgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChieS5yb2xlKVxyXG4gICAgICAgICAgcm9sZSA9IGAtICR7Ynkucm9sZX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubW9kZWwub3duZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpXHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJtaXR0ZWROb3RlJywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlciwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VTdWJtaXR0ZWROb3RlJywgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMubW9kZWwub3duZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnU3VibWl0dGVkTm90ZScsIHdoby5nZW5kZXIsIHdoby5uYW1lLCB0aW1lKTtcclxuICAgICAgICBpZiAod2hvLnJvbGUpXHJcbiAgICAgICAgICByb2xlID0gYC0gJHt3aG8ucm9sZX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgbm90ZSwgcm9sZSB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbm90ZShub2RlOiBOb2RlSW5mbywgcmVjaXBpZW50OiBSZWNpcGllbnQpOiBQcm9taXNlPHsgYW5ub3RhdGlvbjogc3RyaW5nOyB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsIH0+IHtcclxuICAgIGNvbnN0IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWwgPSB7fTtcclxuXHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8vIHlvdVxyXG4gICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICBhbm5vdGF0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBhbm5vdGF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91Jyk7XHJcbiAgICAgIGlmIChyZWNpcGllbnQucm9sZSkge1xyXG4gICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUucm9sZXMuZmluZChvID0+IG8ubmFtZSA9PT0gcmVjaXBpZW50LnJvbGUpO1xyXG4gICAgICAgIGlmIChyb2xlKSB0b29sdGlwLnJvbGUgPSBgLSAke3JvbGUudGl0bGV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgLy8gc29tZW9uZSBlbHNlXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgYW5ub3RhdGlvbiA9IHdoby5uYW1lO1xyXG4gICAgICBpZiAod2hvLnJvbGUpIHRvb2x0aXAucm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCByb2xlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnJvbGVzLmZpbmQobyA9PiBvLm5hbWUgPT09IHJlY2lwaWVudC5yb2xlKTtcclxuICAgICAgICBpZiAocm9sZSkgdG9vbHRpcC5yb2xlID0gYC0gJHtyb2xlLnRpdGxlfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVwbGllZCk7XHJcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuZmlsdGVyKHIgPT4gci5vcmlnaW5JZCA9PT0gcmVjaXBpZW50LmlkKSwgdG8gPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgaWYgKHRhcmdldHMubGVuZ3RoKSBmb3IgKGxldCBzaWJsaW5nIG9mIHRhcmdldHMpIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQoc2libGluZy51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvLnB1c2god2hvLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmJ5SWQpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlHZW5kZXIpO1xyXG4gICAgICAgICAgaWYgKHRvLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZClcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91VG8nLCBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuam9pbih0byksIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnlZb3VUbycsIGFjdGlvbixcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgd2hvLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKVxyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91JywgYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91JywgYWN0aW9uLCB3aG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYnkgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgYnkuZ2VuZGVyKTtcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSB7XHJcbiAgICAgICAgICAgIGlmICh0by5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VUYWtlbkFjdGlvbkJ5VG8nLCBieS5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uQnknLCBieS5uYW1lLCBhY3Rpb24sIHRpbWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgaWYgKHRvLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnlUbycsIGJ5Lm5hbWUsIGFjdGlvbiwgdGhpcy5fdHJhbnNsYXRlLmpvaW4odG8pLCB3aG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnknLCBieS5uYW1lLCBhY3Rpb24sIHdoby5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodG8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZ2VuZGVyKTtcclxuICAgICAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uVG8nLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHdoby5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCBZb3UpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uJywgYWN0aW9uLCB0aW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgd2hvLm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFyZWNpcGllbnQuZXN0aW1hdGUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlY2VpdmVkKTtcclxuICAgICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKVxyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdSZWNlaXZlZEJ5JywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlciwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVJlY2VpdmVkJywgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRUaW1lJywgd2hvLmdlbmRlciwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0ZUlkKSB7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0ZUlkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZClcclxuICAgICAgICB0b29sdGlwLnN1YnN0aXR1dGluZyA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnU3Vic3RpdHV0aW5nWW91JywgdGhpcy5fc2Vzc2lvbi5nZW5kZXIpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpbmcgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnN1YnN0aXR1dGVJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1YnN0aXR1dGluZ0ZvcicsIHN1YnN0aXR1dGluZy5nZW5kZXIsIHN1YnN0aXR1dGluZy5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlY2lwaWVudC5vcmlnaW5JZCAmJiAhcmVjaXBpZW50LnJlcGxpZWQpIHtcclxuICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5tb2RlbC5yZWNpcGllbnRzLmZpbmQociA9PiByLmlkID09PSByZWNpcGllbnQub3JpZ2luSWQpO1xyXG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBvcmlnaW4uYWN0aW9uKSxcclxuICAgICAgICBhZGplY3RpdmUgPSBhY3Rpb24uYWRqZWN0aXZlIHx8IGFjdGlvbi5wYXN0IHx8IGFjdGlvbi50aXRsZTtcclxuICAgICAgaWYgKChvcmlnaW4uYnlJZCB8fCBvcmlnaW4udXNlcklkKSA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25CeVlvdScsIGFkamVjdGl2ZSk7XHJcbiAgICAgIGVsc2UgaWYgKG9yaWdpbi5ieUlkKSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KG9yaWdpbi51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGNvbnN0IGJ5ID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KG9yaWdpbi5ieUlkKS50b1Byb21pc2UoKTtcclxuICAgICAgICB0b29sdGlwLnN1YnN0aXR1dGluZyA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvbkJ5QnknLCBhZGplY3RpdmUsIGJ5Lm5hbWUsIHdoby5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQob3JpZ2luLnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25CeScsIGFkamVjdGl2ZSwgd2hvLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmVjaXBpZW50LmVzY2FsYXRlZCkge1xyXG4gICAgICBjb25zdCBlc2NhbGF0aW9uID0gdGhpcy5tb2RlbC5sb2cuZmluZChsID0+IGwudHlwZSA9PT0gJ0VzY2FsYXRpb24nICYmIGwucmVjaXBpZW50SWQgPT09IHJlY2lwaWVudC5vcmlnaW5JZCk7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChlc2NhbGF0aW9uLnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRheWpzLmR1cmF0aW9uKGVzY2FsYXRpb24uZHVyYXRpb24sICdzJykpO1xyXG4gICAgICB0b29sdGlwLmVzY2FsYXRpb24gPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc2NhbGF0ZWRGcm9tJywgd2hvLm5hbWUsIGR1cmF0aW9uKTtcclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGRheWpzKHJlY2lwaWVudC5yZXBsaWVkKS5kaWZmKHJlY2lwaWVudC5yZWNlaXZlZCwgJ3MnKTtcclxuICAgICAgdG9vbHRpcC5kdXJhdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0R1cmF0aW9uVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkdXJhdGlvbikpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVjaXBpZW50LnBlbmRpbmcpIHtcclxuICAgICAgaWYgKHJlY2lwaWVudC5lc3RpbWF0ZSkgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSkge1xyXG4gICAgICAgIGNvbnN0IGRpZmYgPSBub2RlLnN0YW5kYXJkVGltZSAtIGRheWpzKCkuZGlmZihub2RlLnRpbWUsICdzJyk7XHJcbiAgICAgICAgaWYgKGRpZmYgPiAwKVxyXG4gICAgICAgICAgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXN0aW1hdGVUaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRpZmYpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS5zdGFuZGFyZFRpbWUpXHJcbiAgICAgIHRvb2x0aXAuc3RhbmRhcmRUaW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnTm9kZVN0YW5kYXJkVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShub2RlLnN0YW5kYXJkVGltZSkpO1xyXG4gICAgaWYgKHJlY2lwaWVudC5meWkpXHJcbiAgICAgIHRvb2x0aXAuZnlpID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRllJJyk7XHJcbiAgICByZXR1cm4geyBhbm5vdGF0aW9uLCB0b29sdGlwIH07XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FjdGlvbihuYW1lOiBzdHJpbmcsIGdlbmRlcj86IEdlbmRlciB8ICd5b3UnKSB7XHJcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBuYW1lKTtcclxuICAgIGlmICghYWN0aW9uKSByZXR1cm4gbmFtZTtcclxuICAgIGlmIChnZW5kZXIgPT09IFlvdSkge1xyXG4gICAgICBjb25zdCBnZW5kZXIgPSB0aGlzLl9zZXNzaW9uLmdlbmRlciwgcGVyc29uYWwgPVxyXG4gICAgICAgIChnZW5kZXIgPT09ICdNYWxlJyA/IChhY3Rpb24ueW91TWFsZSB8fCBhY3Rpb24ueW91KSA6XHJcbiAgICAgICAgICBnZW5kZXIgPT09ICdGZW1hbGUnID8gKGFjdGlvbi55b3VGZW1hbGUgfHwgYWN0aW9uLnlvdSkgOlxyXG4gICAgICAgICAgICBhY3Rpb24ueW91KTtcclxuICAgICAgcmV0dXJuIChwZXJzb25hbCB8fFxyXG4gICAgICAgIGFjdGlvbi5wYXN0IHx8XHJcbiAgICAgICAgYWN0aW9uLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFzdCA9ICgoZ2VuZGVyID09PSAnTWFsZScgPyAoYWN0aW9uLnBhc3RNYWxlIHx8IGFjdGlvbi5wYXN0KSA6XHJcbiAgICAgIGdlbmRlciA9PT0gJ0ZlbWFsZScgPyAoYWN0aW9uLnBhc3RGZW1hbGUgfHwgYWN0aW9uLnBhc3QpIDogYWN0aW9uLnBhc3QpIHx8XHJcbiAgICAgIGFjdGlvbi50aXRsZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBwYXN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZnJvbU5vdyhkYXRlOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gZGF5anMoZGF0ZSkuZnJvbU5vdygpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gJiYgdGhpcy5kaWFncmFtLmRlc3Ryb3koKTtcclxuICB9XHJcbn1cclxuaW50ZXJmYWNlIENvbm5lY3RvckluZm9Nb2RlbCB7XHJcbiAgZXN0aW1hdGU/OiBib29sZWFuO1xyXG4gIHBhcmVudElkOiBzdHJpbmc7XHJcbiAgdGltZTogRGF0ZVxyXG59XHJcbmludGVyZmFjZSBOb2RlSW5mb01vZGVsIHtcclxuICB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsO1xyXG4gIG5vZGU6IE5vZGVJbmZvO1xyXG4gIHJlY2lwaWVudDogUmVjaXBpZW50XHJcbiAgaW5kaWNhdG9yPzogYm9vbGVhbjtcclxuICBwYXJlbnRJZD86IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgTm9kZVRvb2x0aXBNb2RlbCB7XHJcbiAgZnlpPzogc3RyaW5nO1xyXG4gIGVycm9yPzogc3RyaW5nO1xyXG4gIG5vdGU/OiBzdHJpbmc7XHJcbiAgcm9sZT86IHN0cmluZztcclxuICBmcm9tPzogc3RyaW5nO1xyXG4gIHN1YnN0aXR1dGluZz86IHN0cmluZztcclxuICBlc2NhbGF0aW9uPzogc3RyaW5nO1xyXG4gIHN0YW5kYXJkVGltZT86IHN0cmluZztcclxuICBkdXJhdGlvbj86IHN0cmluZztcclxuICBlc3RpbWF0ZWRUaW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==