vcomply-workflow-engine 2.6.72 → 2.6.73

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 (38) hide show
  1. package/bundles/vcomply-workflow-engine.umd.js +26 -31
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/log-an-issue/log-an-issue.component.ngfactory.js +6 -6
  4. package/esm2015/lib/more-option/more-option.component.js +2 -8
  5. package/esm2015/lib/more-option/more-option.component.ngfactory.js +1 -1
  6. package/esm2015/lib/more-option/more-option.component.ngsummary.json +1 -1
  7. package/esm2015/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.ngfactory.js +4 -4
  8. package/esm2015/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.ngfactory.js +4 -4
  9. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview.module.ngfactory.js +3 -3
  10. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview.module.ngsummary.json +1 -1
  11. package/esm2015/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.ngfactory.js +4 -4
  12. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment.module.ngfactory.js +3 -3
  13. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment.module.ngsummary.json +1 -1
  14. package/esm2015/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.ngfactory.js +4 -4
  15. package/esm2015/lib/workflow-assessment/workflow-assessment.component.ngfactory.js +4 -4
  16. package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +9 -11
  17. package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +5 -5
  18. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +2 -2
  19. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +2 -2
  20. package/esm2015/lib/workflow-engine.module.ngfactory.js +3 -3
  21. package/esm2015/lib/workflow-engine.module.ngsummary.json +1 -1
  22. package/esm2015/lib/workflow-policy/workflow-policy.component.ngfactory.js +4 -4
  23. package/esm2015/lib/workflow-program/create-program-ui/create-program-ui.module.ngfactory.js +1 -1
  24. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.js +2 -3
  25. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.ngfactory.js +12 -12
  26. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.ngsummary.json +1 -1
  27. package/esm2015/lib/workflow-program/workflow-program.component.js +3 -8
  28. package/esm2015/lib/workflow-program/workflow-program.component.ngfactory.js +12 -12
  29. package/esm2015/lib/workflow-program/workflow-program.component.ngsummary.json +1 -1
  30. package/esm2015/lib/workflow-risk/workflow-risk.component.ngfactory.js +5 -5
  31. package/esm2015/lib/workflow-survey-form/workflow-survey-form.component.ngfactory.js +4 -4
  32. package/fesm2015/vcomply-workflow-engine.js +13 -27
  33. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  34. package/lib/more-option/more-option.component.d.ts +0 -2
  35. package/lib/workflow-program/create-program-ui/role-list/role-list.component.d.ts +0 -1
  36. package/lib/workflow-program/workflow-program.component.d.ts +0 -2
  37. package/package.json +2 -2
  38. package/vcomply-workflow-engine.metadata.json +1 -1
@@ -895,7 +895,7 @@ export class WorkflowComplianceComponent {
895
895
  }
896
896
  }
897
897
  saveSelectedList(type, selectedItems) {
898
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
898
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
899
899
  switch (type) {
900
900
  case 'assignors':
901
901
  if (this.invalidType === 'whom') {
@@ -995,13 +995,11 @@ export class WorkflowComplianceComponent {
995
995
  }
996
996
  });
997
997
  this.responsibilityForm.formatAndEvidence.evidenceRequired = ((_w = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.program) === null || _w === void 0 ? void 0 : _w.evidence_upload_flag) ? true : false;
998
- this.responsibilityForm.assignees.whoCanComplete = (((_x = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.program) === null || _x === void 0 ? void 0 : _x.default_assignee_type) == 'ANYONE') ? 'ANY_ONE' : 'ALL';
999
- this.responsibilityForm.reviewers.sequentialWorkflow = (((_y = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.program) === null || _y === void 0 ? void 0 : _y.default_reviewers_type) === 'SEQUENTIAL') ? true : false;
1000
- if ((_z = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.program) === null || _z === void 0 ? void 0 : _z.evidence_upload_flag) {
998
+ if ((_x = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.program) === null || _x === void 0 ? void 0 : _x.evidence_upload_flag) {
1001
999
  this.moreOptions.FORMATE_EVIDENCE = true;
1002
1000
  }
1003
- if (!(((_0 = this.selectedProgram) === null || _0 === void 0 ? void 0 : _0.programType) === 0 && ((_2 = (_1 = this.selectedProgram) === null || _1 === void 0 ? void 0 : _1.name) === null || _2 === void 0 ? void 0 : _2.toLowerCase()) === 'uncategorized')) {
1004
- if ((_3 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.program) === null || _3 === void 0 ? void 0 : _3._id) {
1001
+ if (!(((_y = this.selectedProgram) === null || _y === void 0 ? void 0 : _y.programType) === 0 && ((_0 = (_z = this.selectedProgram) === null || _z === void 0 ? void 0 : _z.name) === null || _0 === void 0 ? void 0 : _0.toLowerCase()) === 'uncategorized')) {
1002
+ if ((_1 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.program) === null || _1 === void 0 ? void 0 : _1._id) {
1005
1003
  this.filterListsAccordingToProgram(selectedItems.program._id);
1006
1004
  }
1007
1005
  else {
@@ -1053,10 +1051,10 @@ export class WorkflowComplianceComponent {
1053
1051
  this.responsibilityForm.riskMatrix = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.riskMatrix;
1054
1052
  break;
1055
1053
  case 'formate_evidence':
1056
- this.responsibilityForm.formatAndEvidence.formatRequired = (_4 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.isFormateUploaded) !== null && _4 !== void 0 ? _4 : false;
1057
- this.responsibilityForm.formatAndEvidence.formatFiles = (_5 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.files) !== null && _5 !== void 0 ? _5 : [];
1058
- this.responsibilityForm.formatAndEvidence.formatLinks = (_6 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.links) !== null && _6 !== void 0 ? _6 : [];
1059
- this.responsibilityForm.formatAndEvidence.evidenceRequired = (_7 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.isEvidenceRequired) !== null && _7 !== void 0 ? _7 : false;
1054
+ this.responsibilityForm.formatAndEvidence.formatRequired = (_2 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.isFormateUploaded) !== null && _2 !== void 0 ? _2 : false;
1055
+ this.responsibilityForm.formatAndEvidence.formatFiles = (_3 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.files) !== null && _3 !== void 0 ? _3 : [];
1056
+ this.responsibilityForm.formatAndEvidence.formatLinks = (_4 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.links) !== null && _4 !== void 0 ? _4 : [];
1057
+ this.responsibilityForm.formatAndEvidence.evidenceRequired = (_5 = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.isEvidenceRequired) !== null && _5 !== void 0 ? _5 : false;
1060
1058
  break;
1061
1059
  case 'reviewFrequency':
1062
1060
  this.responsibilityForm.reviewers.reviewFrequency = {
@@ -2422,4 +2420,4 @@ WorkflowComplianceComponent.propDecorators = {
2422
2420
  onReviewerTypeChange: [{ type: Output }],
2423
2421
  whatInput: [{ type: ViewChild, args: ['what',] }]
2424
2422
  };
2425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1jb21wbGlhbmNlL3dvcmtmbG93LWNvbXBsaWFuY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVV4RSxNQUFNLE9BQU8sMkJBQTJCO0lBb1F0QyxZQUNVLFdBQXdCLEVBQ3hCLHFCQUE0QyxFQUM1QyxnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsUUFBeUIsRUFDekIsVUFBdUIsRUFDdkIsY0FBK0I7UUFOL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtR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QjtnQkFDbkMsdWw3RUFBbUQ7O2FBSXBEOzs7WUFqQlEsV0FBVztZQUNYLHFCQUFxQjtZQUNyQixnQkFBZ0I7WUFFaEIsWUFBWTtZQUNaLGVBQWU7WUFMZixXQUFXO1lBUVgsZUFBZTs7O21CQWNyQixLQUFLOytCQUNMLEtBQUs7K0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUNMLEtBQUssU0FBQyxZQUFZOzRCQU9sQixNQUFNOzZCQUNOLE1BQU07MENBQ04sTUFBTTs0QkFDTixNQUFNO3dCQUNOLE1BQU07Z0NBQ04sTUFBTTtxQ0FDTixNQUFNO3lCQUNOLE1BQU07eUJBQ04sS0FBSzt5QkFDTCxLQUFLO2lDQUdMLEtBQUssU0FBQyxpQkFBaUI7bUNBV3RCLE1BQU07bUNBQ04sTUFBTTtpQ0FDTixNQUFNO21DQUNOLE1BQU07d0JBeU5QLFNBQVMsU0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9yZXNwb25zaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnJlcXVlbmN5U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZnJlcXVlbmN5L2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IFVpS2l0U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3VpLWtpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQcm9ncmFtc1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9wcm9ncmFtcy5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC13b3JrZmxvdy1jb21wbGlhbmNlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vd29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vd29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ10sXHJcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dDb21wbGlhbmNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4vKiBEZWZpbmluZyB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBvbmVudC4gKi9cclxuICBASW5wdXQoKSBtb2RlID0gJ0NSRUFURSc7XHJcbiAgQElucHV0KCkgcmVzcG9uc2liaWxpdHlJZCA9ICcnO1xyXG4gIEBJbnB1dCgpIGZyYW1ld29ya0RldGFpbHM6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKSBpc0VudHJ1c3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgnY2xvc2VPbkVzYycpIHNldCBjbG9zZU9uRXNjKGVzY2FwZUNvbmRpdGlvbjogYm9vbGVhbikge1xyXG4gICAgaWYgKGVzY2FwZUNvbmRpdGlvbikge1xyXG4gICAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByZXNldEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGVja3BvaW50Q291bnRVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByY1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIG9wZW5lZEZyb20gITogYW55OyAvL3doZW4gb3BlbmVkIGZyb20gcmlzayB0cmVhdG1lbnQgaXQgd2lsbCBiZSAnUklTS19UUkVBVE1FTlQnXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRSQzogbnVtYmVyID0gMDsgLy8gNC01IGRpZ2l0IGlkIG9mIHNlbGVjdGVkIHJjIGJ5IGRlZmF1bHQgd2hlbiBvcGVuZWQgZnJvbSByaXNrIHRyZWF0bWVudFxyXG4gIC8vIEBJbnB1dCgpIHNlbGVjdGVkUHJvZ3JhbTogYW55ID0gbnVsbDtcclxuICBzZWxlY3RlZFByb2dyYW0gOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgnc2VsZWN0ZWRQcm9ncmFtJykgc2V0IHNldFNlbGVjdGVkUHJvZ3JhbShwcm9ncmFtOiBhbnkpIHtcclxuICAgIGlmKHByb2dyYW0gJiYgT2JqZWN0LmtleXMocHJvZ3JhbSk/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSBbXTtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlua2VkUHJvZ3JhbSA9IFtdO1xyXG4gICAgICAvLyB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtLnB1c2gocHJvZ3JhbSk7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0ucHVzaChwcm9ncmFtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAvKiBDcmVhdGluZyBhbiBldmVudCBlbWl0dGVyLiAqL1xyXG4gICBAT3V0cHV0KCkgb25SZW1vdmluZ0NoZWNrcG9pbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICBAT3V0cHV0KCkgaXNBc3Nlc3NtZW50RGlzYWJsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgIEBPdXRwdXQoKSBhc3NpZ25lZVR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIGl0IHdpbGwgZW1pdCB3aGVuIGFzc2lnbmVlIHR5cGUgY2hhbmdlXHJcbiAgIEBPdXRwdXQoKSBvblJldmlld2VyVHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gaXQgd2lsbCBlbWl0IHdoZW4gcmV2aWV3ZXIgdHlwZSBjaGFuZ2VcclxuXHJcbiAgc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICBkZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgbW9kZTogJ3ByaW1lJyxcclxuICAgIGNvbG9yUGFsZXR0ZTogdHJ1ZSxcclxuICAgIGxpbms6IHRydWUsXHJcbiAgICBwbGFjZWhvbGRlcjogJ0FkZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbXBsZXRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5JyxcclxuICB9O1xyXG4gIHByb2dyYW1QZW9wbGVMaXN0OiBhbnkgPSB7XHJcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgIHJldmlld2Vyc0xpc3Q6IFtdLFxyXG4gICAgb3ZlcnNlZXJzTGlzdDogW10sXHJcbiAgfVxyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIHN1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gIGVkaXREZXRhaWxzITogYW55O1xyXG4gIHNtaWxleU1lc3NhZ2UgPSBgRG9uZSFgO1xyXG4gIGFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICB7IGJ1dHRvblRleHQ6ICdFbnRydXN0IE1vcmUgUmVzcG9uc2liaWxpdGllcycsIGNsYXNzOiAnd2hpdGUtYnRuJywgaWQ6ICdhZGRNb3JlJyB9LFxyXG4gICAgeyBidXR0b25UZXh0OiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJywgY2xhc3M6ICdibHVlLWJ0bicsIGlkOiAndmlldycgfSxcclxuICBdO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBtZW1iZXJJZCA9IDA7XHJcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xyXG4gIHJjTGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGFzc2lnbm9yc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBhc3NpZ25lZXNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBncm91cHNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRGcmFtZXdvcmtWYWx1ZXMhOiBhbnk7XHJcbiAgaGFzUmV2aWV3ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIC8vIHVzZXJzTGlzdDogYW55W10gPSBbXTtcclxuICBhc3NpZ25vcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGFzc2lnbmVlc0xpc3Q6IGFueVtdID0gW107XHJcbiAgcmV2aWV3ZXJzTGlzdDogYW55W10gPSBbXTtcclxuICBvdmVyc2VlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICBhbGxVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYmVoYWxmT2ZVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIGFsbENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYXNzdXJhbmNlUmVxdWlyZXNBdWRpdExpc3Q6IGFueVtdID0gW107XHJcbiAgZ3JvdXBzTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgYWRtaW5zTGlzdDogYW55W10gPSBbXTtcclxuICByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcclxuICBub25SZW1vdmFibGVVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIHJlc3BvbnNpYmlsaXR5Rm9ybTogYW55ID0ge1xyXG4gICAgYXNzaWdub3JzOiB7XHJcbiAgICAgIGVuYWJsZTogZmFsc2UsXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgcmVzcG9uc2liaWxpdHk6IHtcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiBmYWxzZSxcclxuICAgIH0sXHJcbiAgICBhc3NpZ25lZXM6IHtcclxuICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTEwnLFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGZyZXF1ZW5jeTogJycsXHJcbiAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICBvYmplY3RpdmU6ICcnLFxyXG4gICAgcmM6IFtdLFxyXG4gICAgY2F0ZWdvcnk6IFtdLFxyXG4gICAgcHJvZ3JhbTogW10sXHJcbiAgICBwcm9ncmFtX3NlbGVjdGVkX2lkczogW10sXHJcbiAgICBjaGVja3BvaW50SW5zdHJ1Y3Rpb246ICcnLFxyXG4gICAgY3VzdG9tVGFnczogW10sXHJcbiAgICBjaGVja3BvaW50czogW10sXHJcbiAgICByZXZpZXdlcnM6IHtcclxuICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxyXG4gICAgICByZXZpZXdGcmVxdWVuY3k6IHtcclxuICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IDIsXHJcbiAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMlxyXG4gICAgICB9LFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuXHJcbiAgICBvdmVyc2VlcnM6IHtcclxuICAgICAgbm90aWZ5TGlzdDogW10sXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcclxuICAgICAgZm9ybWF0UmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBmb3JtYXRGaWxlczogW10sXHJcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcclxuICAgICAgZXZpZGVuY2VSZXF1aXJlZDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgYXNzdXJhbmNlTGlzdDogW10sXHJcbiAgICByZXF1aXJlc0F1ZGl0TGlzdDogW10sXHJcbiAgICByaXNrQ2xhc3M6IDEsXHJcbiAgICByaXNrTWF0cml4OiAnMCwwLDAsMCwwLDAnLFxyXG4gICAgYXVkaXRfY2F0ZWdvcnlfZGV0YWlsczoge1xyXG4gICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgc2FtcGxlOiA1LFxyXG4gICAgICBwZXJjZW50YWdlOiAzMCxcclxuICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcxfjB+M34xJyxcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6ICcyMzo1OTowMCdcclxuICAgIH0sXHJcbiAgICBhc3Nlc3NtZW50OiB7XHJcbiAgICAgIGNhdGVnb3J5X2lkOiAnJywgYXNzZXNzbWVudF9pZDogJydcclxuICAgIH0sXHJcbiAgICBuZXdfY2hlY2twb2ludHM6IHt9LFxyXG4gICAgbGlua2VkUHJvZ3JhbTogW10sXHJcbiAgfTtcclxuICBtb3JlT3B0aW9uczogYW55ID0ge1xyXG4gICAgT0JKRUNUSVZFOiBmYWxzZSxcclxuICAgIFJDOiBmYWxzZSxcclxuICAgIENBVEVHT1JZOiBmYWxzZSxcclxuICAgIFBST0dSQU06IGZhbHNlLFxyXG4gICAgRk9STUFURV9FVklERU5DRTogZmFsc2UsXHJcbiAgICBDSEVDS1BPSU5UUzogZmFsc2UsXHJcbiAgICBBU1NFU1NNRU5UOiBmYWxzZSxcclxuICAgIFJJU0tfQ0xBU1NJRklDQVRJT046IGZhbHNlLFxyXG4gICAgUkVWSUVXRVI6IGZhbHNlLFxyXG4gICAgT1ZFUlNFRVI6IGZhbHNlLFxyXG4gICAgQVNTVVJBTkNFOiBmYWxzZSxcclxuICAgIEFQUFM6IGZhbHNlLFxyXG4gICAgUkVRVUlSRVNfQVVESVQ6IGZhbHNlLFxyXG4gICAgQ0hFQ0tQT0lOVFNfTkVXOiBmYWxzZVxyXG4gIH07XHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICBzaWRlU2VsZWN0b3JFbGVtZW50czogYW55ID0gWydhc3N1cmFuY2UnLCAnZnJhbWV3b3JrJywgJ2Fzc2lnbm9ycycsICdhc3NpZ25lZXMnLCAnY2F0ZWdvcnknLCAncHJvZ3JhbScsICdyYycsICdjaGVja3BvaW50cycsICdmcmVxdWVuY3knLCAncmV2aWV3ZXInLCAncmV2aWV3ZXJGcmVxdWVuY3knLCAnb3ZlcnNlZXInLCAnb3ZlcnNlZXJOb3RpZnknLCAncmlza0NhbGN1bGF0b3InLCAnaXNBc3Nlc3NtZW50JywgJ3JlcXVpcmVzX2F1ZGl0JywgJ2NoZWNrcG9pbnRzLW5ldyddO1xyXG5cclxuICBmb2N1cyA9IHtcclxuICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogZmFsc2UsXHJcbiAgICBkZXNjcmlwdGlvbjogZmFsc2UsXHJcbiAgICBvYmplY3RpdmU6IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIGNhdGVnb3JpZXM6IGFueSA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgc3RhbmRhcmRzOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgaW50ZXJuYWxDb250cm9sczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGFsbFByb2dyYW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICByaXNrQ2xhc3NpZmljYXRpb24gPSBbXHJcbiAgICB7IG5hbWU6ICdMb3cnLCB2YWx1ZTogMSwgY2xhc3M6ICdsb3cnIH0sXHJcbiAgICB7IG5hbWU6ICdMb3ctTWVkaXVtJywgdmFsdWU6IDIsIGNsYXNzOiAnbG93LW1lZCcgfSxcclxuICAgIHsgbmFtZTogJ01lZGl1bS1IaWdoJywgdmFsdWU6IDMsIGNsYXNzOiAnbWVkLWhpZ2gnIH0sXHJcbiAgICB7IG5hbWU6ICdIaWdoJywgdmFsdWU6IDQsIGNsYXNzOiAnaGlnaCcgfVxyXG4gIF07XHJcblxyXG4gIGFzc2lnbm9yTW9kZSA9ICdjaGVja2JveCc7XHJcbiAgcmNNb2RlID0gJ2NoZWNrYm94JztcclxuICBpbnZhbGlkVHlwZSA9ICcnO1xyXG4gIHJlc3BvbnNpYmlsaXR5UGF5bG9hZCE6IGFueTtcclxuICBhc3NpZ25lZVJhZGlvU2VsZWN0ID0gZmFsc2U7XHJcbiAgcHJvZ3JhbXNMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyBmcmVxdWVuY3kgdmFyaWFibGUgZGVjbGFyYXRpb25cclxuICBmcmVxdWVuY3lEZXRhaWxzID0ge1xyXG4gICAgcGF0dGVybjogJycsXHJcbiAgICBub3RpZmljYXRpb25QZW5kaW5nOiAwLFxyXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXHJcbiAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcclxuICAgIHNlbGVjdGVkUmVwb3J0OiAwLFxyXG4gICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXHJcbiAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgIHN0YXJ0T25UaGVEYXk6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgIHdpbmRvdzogMCxcclxuICAgIGZhaWxlZDogMCxcclxuICAgIHRpbWU6ICcxMTo1OSBwbScsXHJcbiAgICBmYWlsZWRUaW1lOiAnJyxcclxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDBcclxuICB9O1xyXG4gIGZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0hvdyBvZnRlbiBkb2VzIHRoZSByZXNwb25zaWJpbGl0eSBvY2N1cj8nO1xyXG4gIHNob3J0TW9udGg6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICBpc0VkaXRXaGF0OiBCb29sZWFuID0gdHJ1ZTtcclxuICBpc0ZyYW1ld29ya0F2YWlsYWJsZSA9IDE7XHJcbiAgaXNOb3RpZmljYXRpb25QZW5kaW5nID0gMDtcclxuXHJcbiAgYXNzdXJhbmNlRmxhZyE6IGFueTtcclxuICByaXNrQ2xhc3NpZmljYXRpb25GbGFnITogYW55O1xyXG4gIGhpZGRlbkxpc3Q6IGFueVtdID0gW107XHJcbiAgc3Vic2NyaXB0aW9uRGV0YWlscyE6IGFueTtcclxuICBpc1Jpc2tFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzRHVwbGljYXRlRW50cnVzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGF1ZGl0VGltZTogc3RyaW5nID0gJzExOjU5IHBtJztcclxuICBzZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZTogbnVtYmVyID0gMjtcclxuICBzYW1wbGVWYWx1ZTogYW55O1xyXG4gIHNhbXBsZVBlcmNlbnRhZ2U6IGFueTtcclxuICBzZWxlY3RlZFNhbXBsZSE6IG51bWJlcjtcclxuICBpc1NhbXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRlbXBDaGVja1ZhbHVlOiBudW1iZXIgPSAtMTtcclxuICBpc0Fzc2Vzc21lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtYW5hZ2VQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hlY2twb2ludENvdW50OiBudW1iZXIgPSAwO1xyXG4gIHJvbGVCYXNlZFBlcm1pc3Npb25zICE6IGFueTtcclxuICBpc0dyb3VwQXNzaWduZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByZXNwb25zaWJpbGl0eURhdGEgITogYW55O1xyXG4gIG9yaWdpbmFsQXNzaWduZWUgITogYW55O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnd2hhdCcpIHdoYXRJbnB1dCE6IEVsZW1lbnRSZWY7XHJcbiAgdW5TdWJzY3JpYmVQcm9ncmFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5U2VydmljZSxcclxuICAgIHByaXZhdGUgdWlLaXRTZXJ2aWNlOiBVaUtpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBlcm1pc3Npb246IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtU2VydmljZTogUHJvZ3JhbXNTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb21wbGlhbmNlU3VibW9kdWxlID0gcmVzLnJvbGVBY3Rpb25zW3Jlcy5yb2xlQWN0aW9ucy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUubW9kdWxlTmFtZSA9PSAnY29tcGxpYW5jZScpXS5zdWJNb2R1bGU7XHJcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gY29tcGxpYW5jZVN1Ym1vZHVsZVtjb21wbGlhbmNlU3VibW9kdWxlLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5zdWJNb2R1bGVOYW1lID09ICdQcm9ncmFtcycpXS5wZXJtaXNzaW9ucztcclxuICAgICAgdGhpcy5tYW5hZ2VQZXJtaXNzaW9uID0gKHBlcm1pc3Npb25zW3Blcm1pc3Npb25zLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5uYW1lID09ICdtYW5hZ2UgcHJvZ3JhbXMnKV0uZW5hYmxlKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMubWFuYWdlUGVybWlzc2lvbikge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdDQVRFR09SWScpO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdQUk9HUkFNJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yeUxpc3QoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgLy8gICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lID0gXCJhYmNkZWZcIlxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0FTU0VTU01FTlQnKTtcclxuICAgIHRoaXMuZ2V0UkNMaXN0KCk7XHJcbiAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QoKTtcclxuICAgIHRoaXMuZ2V0QXNzaWduZWVzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRBc3N1cmFuY2UoKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRBc3N1cmFuY2VGb3JSZXF1aXJlc0F1ZGl0KCk7XHJcbiAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICB0aGlzLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKTtcclxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHRoaXMuc2hvcnRNb250aCA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5tb250aEFycmF5Lm1hcChtb250aCA9PiBtb250aC5zdWJzdHJpbmcoMCwgMykpO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpIHtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKTtcclxuICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNSaXNrRW5hYmxlID0gcmVzLmVuYWJsZV9yaXNrY2xhc3MgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGlmICghcmVzLmVuYWJsZV9yaXNrY2xhc3MpIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUklTS19DTEFTU0lGSUNBVElPTicpO1xyXG4gICAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGV0YWlscyA9IHJlcztcclxuICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uRGV0YWlsc1swXS5hc3Nlc3NtZW50X2ZsYWcpIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QgPSB0aGlzLmhpZGRlbkxpc3QuZmlsdGVyKGVsZSA9PiBlbGUgIT09ICdBU1NFU1NNRU5UJylcclxuICAgICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gIH1cclxuICBhY3RpdmF0ZVNlbGVjdG9yKHR5cGU6IGFueSwgZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSBldmVudCA/IHR5cGUgOiAnJztcclxuICAgIGlmICh0eXBlID09PSAnY2hlY2twb2ludHMtbmV3JykgdGhpcy5hdXRoU2VydmljZS5wcmV2aWV3UGFuZWwubmV4dChldmVudCk7XHJcbiAgICBpZiAodGhpcy5zaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3aGF0Q2hhbmdlZChldmVudDogYW55KSB7XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlO1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmludmFsaWRUeXBlID09PSAnd2hhdCcpIHtcclxuICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGFjdGl2ZURlc2VsZWN0b3IoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBhZGRNb3JlSW5mbyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcclxuICAgIGlmIChldmVudC5jb2RlID09PSAnQ0hFQ0tQT0lOVFNfTkVXJyAmJiBldmVudC5jaGVja3BvaW50X25ldyAmJiB0aGlzLmNoZWNrcG9pbnRDb3VudCkge1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnNbZXZlbnQuY29kZV0gPSBldmVudC5jaGVja2VkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UkNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlPy5nZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QocGFyYW1zKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYywgJ2l0ZW1faWQnKTtcclxuICAgICAgY29uc3QgUkMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGlkcy5pbmNsdWRlcyhlbGVtZW50Lml0ZW1faWQpKTtcclxuICAgICAgaWYgKFJDPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IFJDO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZEZyb20gPT09ICdSSVNLX1RSRUFUTUVOVCcpIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IHRoaXMuc2V0TGlzdCh0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsIFt0aGlzLnNlbGVjdGVkUkNdLCAnaXRlbV9pZCcpO1xyXG4gICAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgICAgICAgIHsgYnV0dG9uVGV4dDogJ0dvIHRvIHJpc2sgdHJlYXRtZW50JywgY2xhc3M6ICdibHVlLWJ0bicsIGlkOiAndmlldycgfSxcclxuICAgICAgICBdXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KFsnUkMnXSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckRldGFpbHMoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZyA9IHJlcy5ub3RpZmljYXRpb25fcGVuZGluZ19mbGFnO1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9IHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID8gJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyBpbiBRdWV1ZScgOiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRBc3N1cmFuY2UoKSB7XHJcbiAgICB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3N1cmFuY2UoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QgPSByZXM7XHJcbiAgICAgIGlmICgodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzICYmICF0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHNbMF0uYXNzdXJhbmNlX2ZsYWcpIHx8IHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQVNTVVJBTkNFJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gICAgICB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzdXJhbmNlRm9yUmVxdWlyZXNBdWRpdCgpIHtcclxuICAgIC8vIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEFzc3VyYW5jZUZvclJlcXVpcmVzQXVkaXQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlUmVxdWlyZXNBdWRpdExpc3QgPSByZXM7XHJcbiAgICAgIGlmICgodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzICYmICF0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHNbMF0uYXVkaXRfZmxhZykgfHwgdGhpcy5hc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdSRVFVSVJFU19BVURJVCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcclxuICAgICAgLy8gdGhpcy5hc3N1cmFuY2VDYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAvLyB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldE9yZ2FuaXphdGlvbkRldGFpbHMoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNGcmFtZXdvcmtBdmFpbGFibGUgPSByZXM/LmVuYWJsZV9yZXNwb25zaWJpbGl0eV9mcmFtZXdvcms7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0Q2F0ZWdvcmllc0xpc3QoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHJlcztcclxuICAgICAgdGhpcy5hbGxDYXRlZ29yaWVzID0gY2xvbmVEZWVwKHJlcyk7XHJcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLm90aGVycy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDEpIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5yZWd1bGF0aW9ucy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDIpIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5zdGFuZGFyZHMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAzKSB7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMuaW50ZXJuYWxDb250cm9scy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBmaWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbShwcm9ncmFtX2lkPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnVuU3Vic2NyaWJlUHJvZ3JhbS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuU3Vic2NyaWJlUHJvZ3JhbS5jb21wbGV0ZSgpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgdGhpcy5nZXRQZW9wbGVMaXN0QWdhaW5zdFBJRChwcm9ncmFtX2lkKTtcclxuICAgICAgdGhpcy5nZXRSQ0xpc3QocHJvZ3JhbV9pZClcclxuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KHByb2dyYW1faWQpO1xyXG4gICAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QocHJvZ3JhbV9pZCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRBc3NpZ25lZXNMaXN0KCk7XHJcbiAgICAgIHRoaXMuZ2V0UkNMaXN0KCk7XHJcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xyXG4gICAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1EZXRhaWxzKHByb2dyYW1JZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5nZXRQcm9ncmFtKHByb2dyYW1JZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXM/LmFzc2Vzc21lbnQgJiYgcmVzPy5hc3Nlc3NtZW50Py5sZW5ndGggJiYgT2JqZWN0LmtleXModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQpPy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yeUFzc2Vzc21lbnQgPSByZXM/LmFzc2Vzc21lbnQuZmlsdGVyKChhc3Nlc3NtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50Py5jYXRlZ29yeV9pZCA9PT0gYXNzZXNzbWVudD8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIGlmKGNhdGVnb3J5QXNzZXNzbWVudD8ubGVuZ3RoICYmIGNhdGVnb3J5QXNzZXNzbWVudFswXT8uYXNzZXNzbWVudElkcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCBpc0V4aXN0ID0gY2F0ZWdvcnlBc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50SWRzLmluY2x1ZGVzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkKTtcclxuICAgICAgICAgIGlmKCFpc0V4aXN0KXtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzZXNzbWVudCA9IHsgYXNzZXNzbWVudF9pZDogXCJcIiwgY2F0ZWdvcnlfaWQ6IFwiXCIgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0geyBhc3Nlc3NtZW50X2lkOiBcIlwiLCBjYXRlZ29yeV9pZDogXCJcIiB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0ocHJvZ3JhbV9pZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdldFBlb3BsZUxpc3RBZ2FpbnN0UElEKHByb2dyYW1faWQpO1xyXG4gICAgdGhpcy5nZXRSQ0xpc3QocHJvZ3JhbV9pZClcclxuICAgIHRoaXMuZ2V0R3JvdXBzTGlzdChwcm9ncmFtX2lkKTtcclxuICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdChwcm9ncmFtX2lkKTtcclxuICB9XHJcblxyXG4gIGdldEFzc2lnbm9yc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0QXNzaWdub3JzTGlzdChwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5iZWhhbGZPZlVzZXJzTGlzdCA9IHJlcztcclxuICAgICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZXNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblBlb3BsZShwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5hbGxVc2Vyc0xpc3QgPSByZXMubWFwKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xyXG4gICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZW9wbGVMaXN0QWdhaW5zdFBJRChwcm9ncmFtX2lkOiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblBlb3BsZShwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0ID0gcmVzLmFzc2lnbmVlLm1hcCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcclxuICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCA9IHJlcy5vdmVyc2Vlci5tYXAoKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHVzZXIubWVtYmVyX25hbWUgPSB1c2VyLmVtcGxveWVlX25hbWU7XHJcbiAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJldmlld2Vyc0xpc3QgPSByZXMucmV2aWV3ZXIubWFwKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xyXG4gICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wcm9ncmFtUGVvcGxlTGlzdCA9IHtcclxuICAgICAgICBhc3NpZ25lZXNMaXN0OiBbLi4uIG5ldyBTZXQodGhpcy5hc3NpZ25lZXNMaXN0KV0sXHJcbiAgICAgICAgcmV2aWV3ZXJzTGlzdDogWy4uLiBuZXcgU2V0KHRoaXMucmV2aWV3ZXJzTGlzdCldLFxyXG4gICAgICAgIG92ZXJzZWVyc0xpc3Q6IFsuLi4gbmV3IFNldCh0aGlzLm92ZXJzZWVyc0xpc3QpXSxcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfaWRzIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Lmxlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICBjb25zdCBhbGxJZHMgPSBbLi4ubmV3IFNldChpZHMpLCAuLi5uZXcgU2V0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcyldXHJcbiAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbElkcy5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcy5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfcmV2aWV3ZXJzIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgY29uc3QgYWxsSWRzID0gWy4uLm5ldyBTZXQoaWRzKSwgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfcmV2aWV3ZXJzKV1cclxuICAgICAgICBjb25zdCByZXZpZXdlcnMgPSB0aGlzLnJldmlld2Vyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbElkcy5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIC8vIGNvbnN0IHJldmlld2VycyA9IHRoaXMucmV2aWV3ZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X3Jldmlld2Vycy5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIGlmIChyZXZpZXdlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IHJldmlld2VycztcclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkVWSUVXRVIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X292ZXJzZWVycyB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Py5sZW5ndGggfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdCwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgIGNvbnN0IGFsbERlZmF1bHRDQ0lkcyA9IFsuLi5uZXcgU2V0KGlkcyksIC4uLm5ldyBTZXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbCldXHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJzQ0MgPSB0aGlzLm92ZXJzZWVyc0xpc3Q/LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBhbGxEZWZhdWx0Q0NJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIC8vIGNvbnN0IG92ZXJzZWVycyA9IHRoaXMub3ZlcnNlZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X292ZXJzZWVycy5jY19lbWFpbC5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIGNvbnN0IG5vdGlmeUxpc3RJZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgIGNvbnN0IGFsbERlZmF1bHRDQ0ZhaWx1cmVJZHMgPSBbLi4ubmV3IFNldChub3RpZnlMaXN0SWRzKSwgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWwpXVxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyc0NDRmFpbHVyZSA9IHRoaXMub3ZlcnNlZXJzTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbERlZmF1bHRDQ0ZhaWx1cmVJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIC8vIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IHRoaXMub3ZlcnNlZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X292ZXJzZWVycy5mYWlsdXJlX2NjX2VtYWlsLmluY2x1ZGVzKGVsZW1lbnQubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgLy8gaWYgKG92ZXJzZWVycy5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gb3ZlcnNlZXJzO1xyXG4gICAgICAgIC8vICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGlmIChub3RpZnlPdmVyc2VlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IG5vdGlmeU92ZXJzZWVycztcclxuICAgICAgICAvLyAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgaWYgKG92ZXJzZWVyc0NDLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBvdmVyc2VlcnNDQztcclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3ZlcnNlZXJzQ0NGYWlsdXJlLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBvdmVyc2VlcnNDQ0ZhaWx1cmU7XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1vcmVPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9yZU9wdGlvbnNba2V5XSkge1xyXG4gICAgICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goa2V5KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuXHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGdldEdyb3Vwc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uR3JvdXBzKHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy51blN1YnNjcmliZVByb2dyYW0pKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSByZXMgPz8gW107XHJcbiAgICAgIGNvbnN0IGdyb3VwczogYW55ID0gW107XHJcbiAgICAgIGRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgIGdyb3VwTmFtZTogZWxlbWVudC5ncm91cF9uYW1lLFxyXG4gICAgICAgICAgdXNlcklkczogZWxlbWVudC5tZW1iZXJfaWRzLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZ3JvdXBzLnB1c2gob2JqKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IGdyb3VwcztcclxuICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyAmJiBwcm9ncmFtX2lkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBkYXRhLmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzLmluY2x1ZGVzKGVsZW1lbnQuZ3JvdXBfaWQpKTtcclxuICAgICAgICBpZiAoZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IG1lbWJlcklkczogYW55W10gPSBbXTtcclxuICAgICAgICAgIHNlbGVjdGVkR3JvdXBzLmZvckVhY2goKGVhY2hHcm91cDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlYWNoR3JvdXA/Lm1lbWJlcl9pZHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIG1lbWJlcklkcyA9IFsuLi5uZXcgU2V0KG1lbWJlcklkcy5jb25jYXQoZWFjaEdyb3VwPy5tZW1iZXJfaWRzKSldXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbElkcyA9IFsuLi5uZXcgU2V0KGlkcyksIC4uLm5ldyBTZXQobWVtYmVySWRzKV1cclxuICAgICAgICAgICAgY29uc3QgYXNzaWdub3JzID0gdGhpcy5hc3NpZ25lZXNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBhbGxJZHMuaW5jbHVkZXMoZWxlbWVudC5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgaWYgKGFzc2lnbm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IGFzc2lnbm9ycztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYXNzaWdub3JzID0gdGhpcy5hc3NpZ25lZXNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBtZW1iZXJJZHMuaW5jbHVkZXMoZWxlbWVudC5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgaWYgKGFzc2lnbm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IGFzc2lnbm9ycztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldEVkaXRSZXNwb25zaWJpbGl0eURldGFpbHMoaWQ6IGFueSkge1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZWRpdFJlc3BvbnNpYmlsaXR5KGlkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNEdXBsaWNhdGVFbnRydXN0ID0gdHJ1ZTtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxBc3NpZ25lZSA9IFtOdW1iZXIocmVzLmFzc2lnbmVkX3RvKV07XHJcbiAgICAgICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCk/LnVzZXI7XHJcbiAgICAgICAgdGhpcy5pc0dyb3VwQXNzaWduZWQgPSByZXM/LmlzR3JvdXBBc3NpZ25UbyA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICBjb25zdCBjdXJyZW50c1VlckluZm8gPSB7XHJcbiAgICAgICAgICBtZW1iZXJfZW1haWw6IGN1cnJlbnRVc2VyPy5lbWFpbCxcclxuICAgICAgICAgIG1lbWJlcl9pZDogY3VycmVudFVzZXIuaWQsXHJcbiAgICAgICAgICBtZW1iZXJfbmFtZTogY3VycmVudFVzZXIubmFtZSxcclxuICAgICAgICAgIG9yZ2FuaXNhdGlvbl9pZDogY3VycmVudFVzZXIub3JnYW5pc2F0aW9uX2lkLFxyXG4gICAgICAgICAgX2lkOiB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkuX2lkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RQbGFuQ2F0ZWdvcnkgPSB0eXBlb2YgKHJlcz8udGVzdHBsYW5fY2F0ZWdvcnlfaWQpID09PSAnc3RyaW5nJyA/IFtdIDogcmVzPy50ZXN0cGxhbl9jYXRlZ29yeV9pZDtcclxuICAgICAgICBjb25zdCByZXF1aXJlZEF1ZGl0Q2F0ZWdvcnlJZCA9IHJlcz8uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscz8uY2F0ZWdvcnlfaWQgPyBbcmVzPy5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzPy5jYXRlZ29yeV9pZF0gOiBbXTtcclxuICAgICAgICBjb25zdCByZXZpZXdlckRldGFpbHMgPSBPYmplY3Qua2V5cyhyZXM/LnJldmlld2VyX2Fycik7XHJcbiAgICAgICAgdGhpcy5oYXNSZXZpZXdlciA9IHJldmlld2VyRGV0YWlscy5sZW5ndGggPiAwXHJcbiAgICAgICAgdGhpcy5hc3NpZ25lZVJhZGlvU2VsZWN0ID0gKHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkPy5sZW5ndGggPT0gMCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0VudHJ1c3QgPSByZXMuaXNHcm91cEFzc2lnblRvID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGxldCBsaW5rYWdlID0gcmVzPy5saW5rZWRQcm9ncmFtRGV0YWlscztcclxuICAgICAgICBsaW5rYWdlLnB1c2gocmVzPy5wcm9ncmFtRGV0YWlscyk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0gPSB7XHJcbiAgICAgICAgICBhc3NpZ25vcnM6IHtcclxuICAgICAgICAgICAgZW5hYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlzdDogdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWdub3JzTGlzdCwgW3Jlcy5tZW1iZXJfaWRdLCAnbWVtYmVyX2lkJykubGVuZ3RoID4gMCA/IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbm9yc0xpc3QsIFtyZXMubWVtYmVyX2lkXSwgJ21lbWJlcl9pZCcpIDogW2N1cnJlbnRzVWVySW5mb10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHk6IHtcclxuICAgICAgICAgICAgbmFtZTogcmVzPy5yZXBvcnRfbmFtZSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcz8ua2V5X2NvbXBsaWFuY2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYXNzaWduZWVzOiB7XHJcbiAgICAgICAgICAgIHdob0NhbkNvbXBsZXRlOiAocmVzLmlzR3JvdXBBc3NpZ25UbykgPyAnQU5ZX09ORScgOiAnQUxMJyxcclxuICAgICAgICAgICAgbGlzdDogKHJlcy5hc3NpZ25lZF90b19tZW1iZXJfaWQubGVuZ3RoID09IDApID8gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgW051bWJlcihyZXMuYXNzaWduZWRfdG8pXSwgJ2VtcGxveWVlX2lkJykgOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIHJlcy5hc3NpZ25lZF90b19tZW1iZXJfaWQsICdteV9tZW1iZXJfaWQnKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmcmVxdWVuY3k6IHJlcz8uZnJlcXVlbmN5X2RldGFpbHMsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzPy5yZW1hcmtzLFxyXG4gICAgICAgICAgb2JqZWN0aXZlOiByZXM/Lm9iamVjdGl2ZSxcclxuICAgICAgICAgIHJjOiB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCBbTnVtYmVyKHJlcz8ucmNfaWQpXSwgJ3JjX2lkJyksXHJcbiAgICAgICAgICBjYXRlZ29yeTogKHJlcz8ucHJvZ3JhbV9jYXRfaWRzPy5sZW5ndGgpID8gcmVzPy5jYXRlZ29yeV9pZHNfYXJyYXkuZmlsdGVyKChlbGU6IGFueSkgPT4gIXJlcy5wcm9ncmFtX2NhdF9pZHMuaW5jbHVkZXMoZWxlKSkgOiByZXM/LmNhdGVnb3J5X2lkc19hcnJheSxcclxuICAgICAgICAgIHByb2dyYW1fc2VsZWN0ZWRfaWRzOiByZXM/LmNhdGVnb3J5X2lkLnNwbGl0KCcsJykgPz8gW10sXHJcbiAgICAgICAgICBjYXRlZ29yeV9pZDogcmVzPy5jYXRlZ29yeV9pZCA/PyAnJyxcclxuXHJcbiAgICAgICAgICBsaW5rZWRQcm9ncmFtOiBsaW5rYWdlID8/IHJlcz8ubGlua2VkUHJvZ3JhbURldGFpbHMsXHJcbiAgICAgICAgICBwcm9ncmFtOiAocmVzPy5wcm9ncmFtRGV0YWlscz8uY2F0ZWdvcnlfaWQpID8gW3Jlcz8ucHJvZ3JhbURldGFpbHNdIDogW10sXHJcbiAgICAgICAgICBjaGVja3BvaW50SW5zdHJ1Y3Rpb246IHJlcz8uY2hlY2twb2ludF9kZXNjcmlwdGlvbixcclxuICAgICAgICAgIGN1c3RvbVRhZ3M6IChyZXM/LmN1c3RvbV90YWdzKSA/IEpTT04ucGFyc2UocmVzPy5jdXN0b21fdGFncykgOiAnJyxcclxuICAgICAgICAgIGNoZWNrcG9pbnRzOiAocmVzPy5jaGVja3BvaW50X2RldGFpbHMpID8gSlNPTi5wYXJzZShyZXM/LmNoZWNrcG9pbnRfZGV0YWlscykgOiAnJyxcclxuICAgICAgICAgIHJldmlld2Vyczoge1xyXG4gICAgICAgICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6IChyZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlID09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xyXG4gICAgICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogKHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCkgPyByZXM/LnJldmlld19hZnRlcl9kYXlzIDogMixcclxuICAgICAgICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiAocmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwKSA/IHJlcz8ucmV2aWV3X2ZhaWxlZF9hZnRlcl9kYXlzIDogMlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhY2NlcHRlZERhdGE6IHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCA/IHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnJldmlld2VycyA6IFtdLFxyXG4gICAgICAgICAgICBsaXN0OiByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyB0aGlzLnNldFJldmlld2VyUGF5bG9hZChyZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnMsICdvYmplY3QnLCByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlKSA6IFtdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb3ZlcnNlZXJzOiB7XHJcbiAgICAgICAgICAgIGxpc3Q6IChyZXM/LmNjX2VtYWlsKSA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIE9iamVjdC5rZXlzKHJlcz8uY2NfZW1haWwpLm1hcChOdW1iZXIpLCAnZW1wbG95ZWVfaWQnKSA6IFtdLFxyXG4gICAgICAgICAgICBub3RpZnlMaXN0OiAocmVzPy5mYWlsdXJlX2NjX2VtYWlsKSA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIE9iamVjdC5rZXlzKHJlcz8uZmFpbHVyZV9jY19lbWFpbCkubWFwKE51bWJlciksICdlbXBsb3llZV9pZCcpIDogW10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcclxuICAgICAgICAgICAgZm9ybWF0UmVxdWlyZWQ6IChyZXM/LnJlcG9ydF9mb3JtYXQubGVuZ3RoID4gMCB8fCByZXM/LmxpbmtfZm9yX2RldGFpbHM/Lmxlbmd0aCA+IDApID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb3JtYXRGaWxlczogcmVzPy5yZXBvcnRfZm9ybWF0LFxyXG4gICAgICAgICAgICBmb3JtYXRMaW5rczogcmVzPy5saW5rX2Zvcl9kZXRhaWxzLFxyXG4gICAgICAgICAgICBldmlkZW5jZVJlcXVpcmVkOiAocmVzPy5yZXBvcnRfdXBsb2FkX2ZsYWcpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFzc3VyYW5jZUxpc3Q6IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0LCB0ZXN0UGxhbkNhdGVnb3J5LCAnY2F0ZWdvcnlfaWQnKSxcclxuICAgICAgICAgIHJlcXVpcmVzQXVkaXRMaXN0OiB0aGlzLnNldExpc3QodGhpcy5hc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdCwgcmVxdWlyZWRBdWRpdENhdGVnb3J5SWQsICdjYXRlZ29yeV9pZCcpLFxyXG4gICAgICAgICAgcmlza0NsYXNzOiByZXM/LnJpc2tfY2xhc3MsXHJcbiAgICAgICAgICByaXNrTWF0cml4OiByZXM/LnJpc2tfbWF0cml4X2RhdGFcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtID0gcmVzPy5wcm9ncmFtRGV0YWlscz8uY2F0ZWdvcnlfaWQgPyByZXMucHJvZ3JhbURldGFpbHMgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZFByb2dyYW0/Ll9pZCl7dGhpcy5nZXRMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbSh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uX2lkKTt9XHJcbiAgICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPSByZXMubm90aWZpY2F0aW9uX3BlbmRpbmc7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgaW4gUXVldWUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyA1fjB+MH4wIHRoaXMgaXMgZm9yIG90aGVyIGZyZXF1ZW5jeVxyXG4gICAgICAgIGlmIChyZXMuZnJlcXVlbmN5X2RldGFpbHMgIT09ICcnICYmIHJlcy5mcmVxdWVuY3lfZGV0YWlscyAhPT0gJzV+MH4wfjAnKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKHJlcyk7XHJcbiAgICAgICAgICB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKHJlcyk7XHJcbiAgICAgICAgICByZXMucGxhY2Vob2xkZXIgPSB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmlzRW50cnVzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLm1vZGUgPSAnQ1JFQVRFJztcclxuICAgICAgICAgIHRoaXMuYXNzaWduZWVSYWRpb1NlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmVuYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICAgICAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuaXNFbnRydXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubW9kZSA9ICdDUkVBVEUnO1xyXG4gICAgICAgICAgdGhpcy5hc3NpZ25lZVJhZGlvU2VsZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMuZW5hYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgICAgICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgaWYgKHJlcy5mcmVxdWVuY3lfZGV0YWlscy5zcGxpdCgnficpWzBdICE9PSA2KSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXM/LnJjX2lkID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5yY1NlbGVjdGVkLmVtaXQodHJ1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcz8uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZUFzc3VyYW5jZUxpc3QocmVzPy5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgICAgICAgc2FtcGxlOiAwLFxyXG4gICAgICAgICAgICBwZXJjZW50YWdlOiAwLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogJycsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeV90aW1lOiAnJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFzc2Vzc21lbnREZXRhaWxzKHJlcy5hc3Nlc3NtZW50LCByZXMucXVlc3Rpb25uYWlyZV90eXBlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cykge1xyXG4gICAgICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICAgICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNBc3Nlc3NtZW50RGlzYWJsZWQuZW1pdCh0cnVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRFZGl0TW9yZU9wdGlvbnMocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGlkcz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdC5maW5kSW5kZXgoKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudCk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuSWRzKGxpc3Q6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGxpc3QubWFwKGVsZSA9PiB7IGlmIChlbGVba2V5XSkgeyByZXR1cm4gZWxlW2tleV07IH0gfSkuZmlsdGVyKGVsZSA9PiBlbGUpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmV2aWV3ZXJQYXlsb2FkKGlkczogYW55W10sIHR5cGU6IHN0cmluZywgYWNjZXB0ZWREYXRhPzogQXJyYXk8YW55PiwgcmV2aWV3ZXJUeXBlPzogc3RyaW5nKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgY29uc3QgaWRPYmpBcnJheSA9IHRoaXMucmV0dXJuSWRzKGlkcywgJ21lbWJlcl9pZCcpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXRMaXN0KHRoaXMucmV2aWV3ZXJzTGlzdCwgaWRPYmpBcnJheSwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgY29uc3QgcGF5TG9hZDogYW55ID0gW107XHJcbiAgICAgIGNvbnN0IGlkc0xpc3QgPSB0aGlzLnJldHVybklkcyhpZHMsICdteV9tZW1iZXJfaWQnKTtcclxuICAgICAgaWRzTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICBpZiAoKGFjY2VwdGVkRGF0YSA/PyBbXSk/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGluZGV4ID0gYWNjZXB0ZWREYXRhPy5maW5kSW5kZXgoZWxlID0+IGVsZS5tZW1iZXJfaWQgPT09IGVsZW1lbnQpID8/IC0xXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhY2NlcHRTdGF0dXMgPSAoaW5kZXggPiAtMSAmJiBhY2NlcHRlZERhdGEpID8gYWNjZXB0ZWREYXRhW2luZGV4XS5yZXZpZXdlcl9hY2NlcHQgOiAwXHJcbiAgICAgICAgaWYgKGFjY2VwdFN0YXR1cyA9PT0gMCAmJiByZXZpZXdlclR5cGUgPT09ICdBTllPTkUnKSB7XHJcbiAgICAgICAgICBhY2NlcHRTdGF0dXMgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlMb2FkLnB1c2goeyBtZW1iZXJfaWQ6IGVsZW1lbnQsIHJldmlld2VyX2FjY2VwdDogYWNjZXB0U3RhdHVzIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHBheUxvYWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLnJjTGlzdExvYWRlZCAmJiB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgJiYgdGhpcy5hc3NpZ25vcnNMaXN0TG9hZGVkICYmXHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgJiYgdGhpcy5hc3N1cmFuY2VDYXRlZ29yeUxpc3RMb2FkZWQgJiYgdGhpcy5ncm91cHNMaXN0TG9hZGVkKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5mcmFtZXdvcmtEZXRhaWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmVudHJ1c3RGcmFtZXdvcmsodGhpcy5mcmFtZXdvcmtEZXRhaWxzWzBdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgdGhpcy5nZXRFZGl0UmVzcG9uc2liaWxpdHlEZXRhaWxzKHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0pIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ucHVzaCh0aGlzLnNlbGVjdGVkUHJvZ3JhbSk7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcy5wdXNoKHRoaXMuc2VsZWN0ZWRQcm9ncmFtLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gdGhpcy5zZWxlY3RlZFByb2dyYW0/LmNhdGVnb3J5X2lkPy50b1N0cmluZygpO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID0gKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5kZWZhdWx0X2Fzc2lnbmVlX3R5cGUgPT0gJ0FOWU9ORScpID8gJ0FOWV9PTkUnIDogJ0FMTCc7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID0gKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5kZWZhdWx0X3Jldmlld2Vyc190eXBlID09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBwcm9ncmFtQ3VzdG9tVGFncyA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5jdXN0b21fdGFncyA/IEpTT04ucGFyc2UodGhpcy5zZWxlY3RlZFByb2dyYW0uY3VzdG9tX3RhZ3MpIDogW107XHJcbiAgICAgICAgICBwcm9ncmFtQ3VzdG9tVGFncy5mb3JFYWNoKCh0YWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0YWdEYXRhID0gSlNPTi5wYXJzZSh0YWcpO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID0gKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5ldmlkZW5jZV91cGxvYWRfZmxhZykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuUFJPR1JBTSA9IHRydWU7XHJcbiAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUFJPR1JBTScpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5ldmlkZW5jZV91cGxvYWRfZmxhZykge1xyXG4gICAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnRk9STUFURV9FVklERU5DRScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGNoZWNrZWRNb3JlT3B0aW9ucyk7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5faWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzYXZlU2VsZWN0ZWRMaXN0KHR5cGU6IHN0cmluZywgc2VsZWN0ZWRJdGVtczogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnYXNzaWdub3JzJzpcclxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkVHlwZSA9PT0gJ3dob20nKSB7XHJcbiAgICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWdub3JzTGlzdCwgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSwgJ21lbWJlcl9pZCcpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxyXG4gICAgICAgIGlmICh0aGlzLmludmFsaWRUeXBlID09PSAnd2hvJykge1xyXG4gICAgICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNFbnRydXN0ICYmIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSAhPT0gJ0FOWV9PTkUnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIFtzZWxlY3RlZEl0ZW1zLmVtcGxveWVlX2lkXSwgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2l0ZW1faWQnKTtcclxuICAgICAgICB0aGlzLnJjU2VsZWN0ZWQuZW1pdCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5sZW5ndGggPiAwKVxyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyddWydjYXRlZ29yeV9pZCddID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IHNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhZyA9IGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT09ICcnICYmIGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT09IFwibnVsbFwiICYmIGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT0gXCJbXVwiID8gSlNPTi5wYXJzZShlbGVtZW50LmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJzZWxlY3RlZEl0ZW1zc2VsZWN0ZWRJdGVtc3NlbGVjdGVkSXRlbXNzZWxlY3RlZEl0ZW1zXCIsc2VsZWN0ZWRJdGVtcylcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5saW5rZWRQcm9ncmFtID0gc2VsZWN0ZWRJdGVtcz8ubGlua2VkUHJvZ3JhbTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0gJiYgISh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ucHJvZ3JhbVR5cGUgPT09IDAgJiYgdGhpcy5zZWxlY3RlZFByb2dyYW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd1bmNhdGVnb3JpemVkJyApKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IChzZWxlY3RlZEl0ZW1zLmNhdGVnb3JpZXMpID8gc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzIDogW107XHJcbiAgICAgICAgICBsZXQgY2F0ZWdvcnlJZCA9IHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQgKyAnLCcgKyBjYXRlZ29yeUlkO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPSBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZD8udG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzID0gWy4uLm5ldyBTZXQoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcyksIC4uLm5ldyBTZXQoW3NlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50KSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50KT8ubGVuZ3RoID8gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtLl9pZCkgOiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSAoc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzKSA/IHNlbGVjdGVkSXRlbXMuY2F0ZWdvcmllcyA6IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPSAnJztcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzID0gW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzID0gW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtID0gKHNlbGVjdGVkSXRlbXMucHJvZ3JhbSkgPyBbc2VsZWN0ZWRJdGVtcy5wcm9ncmFtXSA6IFtdO1xyXG4gICAgICAgICAgbGV0IGNhdGVnb3J5SWQgPSBzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yaWVzPy50b1N0cmluZygpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeV9pZCA9IHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkICsgJywnICsgY2F0ZWdvcnlJZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQ/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcyA9IFsuLi5uZXcgU2V0KHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXMpLCAuLi5uZXcgU2V0KFtzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZF0pXTtcclxuICAgICAgICAgIGNvbnN0IHByb2dyYW1DdXN0b21UYWdzID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3MgPyBKU09OLnBhcnNlKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgICAgICAgcHJvZ3JhbUN1c3RvbVRhZ3M/LmZvckVhY2goKHRhZzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0eXBlb2YgdGFnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh0YWcpIDogdGFnO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID0gKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmV2aWRlbmNlX3VwbG9hZF9mbGFnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9IChzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5kZWZhdWx0X2Fzc2lnbmVlX3R5cGUgPT0gJ0FOWU9ORScpID8gJ0FOWV9PTkUnIDogJ0FMTCc7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID0gKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmRlZmF1bHRfcmV2aWV3ZXJzX3R5cGUgPT09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZighKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5wcm9ncmFtVHlwZSA9PT0gMCAmJiB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3VuY2F0ZWdvcml6ZWQnICkpe1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uX2lkICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0oc2VsZWN0ZWRJdGVtcy5wcm9ncmFtLl9pZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMucmV2aWV3ZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXInOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXJOb3RpZnknOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzdXJhbmNlJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QsIHNlbGVjdGVkSXRlbXMsICdjYXRlZ29yeV9pZCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXF1aXJlc19hdWRpdCc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVxdWlyZXNBdWRpdExpc3QgPSB0aGlzLnNldExpc3QodGhpcy5hc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdCwgW3NlbGVjdGVkSXRlbXM/LmNhdGVnb3J5X2lkXSwgJ2NhdGVnb3J5X2lkJyk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ2F1ZGl0X2NhdGVnb3J5X2RldGFpbHMnXVsnY2F0ZWdvcnlfaWQnXSA9IHNlbGVjdGVkSXRlbXM/LmNhdGVnb3J5X2lkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgPSBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50RGV0YWlscztcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50SW5zdHJ1Y3Rpb24gPSBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhbGN1bGF0ZWRyaXNrJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrQ2xhc3MgPSBzZWxlY3RlZEl0ZW1zPy5yaXNrQ2xhc3M7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmlza01hdHJpeCA9IHNlbGVjdGVkSXRlbXM/LnJpc2tNYXRyaXg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Zvcm1hdGVfZXZpZGVuY2UnOlxyXG5cclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRSZXF1aXJlZCA9IHNlbGVjdGVkSXRlbXM/LmlzRm9ybWF0ZVVwbG9hZGVkID8/IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdEZpbGVzID0gc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0TGlua3MgPSBzZWxlY3RlZEl0ZW1zPy5saW5rcyA/PyBbXTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID0gc2VsZWN0ZWRJdGVtcz8uaXNFdmlkZW5jZVJlcXVpcmVkID8/IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXZpZXdGcmVxdWVuY3knOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kgPSB7XHJcbiAgICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IHNlbGVjdGVkSXRlbXMuY29tcGxldGVEYXlzLFxyXG4gICAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogc2VsZWN0ZWRJdGVtcy5ub3RDb21wbGV0ZWQsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKTtcclxuICB9XHJcblxyXG5cclxuICByZW1vdmUodHlwZTogYW55LCBldmVudD86IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3JjJzpcclxuICAgICAgICBjb25zdCByY0luZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMuZmluZEluZGV4KChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZCk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMuc3BsaWNlKHJjSW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMucmNTZWxlY3RlZC5lbWl0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjLmxlbmd0aCA+IDApXHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVxdWlyZXNBdWRpdExpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtWydhdWRpdF9jYXRlZ29yeV9kZXRhaWxzJ11bJ2NhdGVnb3J5X2lkJ10gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzaWdub3JzJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzaWduZWVzJzpcclxuICAgICAgICBjb25zdCBlbnRydXN0SW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdC5maW5kSW5kZXgoKG93bmVyOiBhbnkpID0+IG93bmVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdC5zcGxpY2UoZW50cnVzdEluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIGNvbnN0IHJldmlld2VySW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdC5maW5kSW5kZXgoKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdC5zcGxpY2UocmV2aWV3ZXJJbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXInOlxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVySW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdC5maW5kSW5kZXgoKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdC5zcGxpY2Uob3ZlcnNlZXJJbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXJOb3RpZnlMaXN0JzpcclxuICAgICAgICBjb25zdCBvdmVyc2Vlck5vdGlmeUluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QuZmluZEluZGV4KChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdC5zcGxpY2Uob3ZlcnNlZXJOb3RpZnlJbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkuZmluZEluZGV4KChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICAgIGNvbnN0IHRhZyA9IEpTT04ucGFyc2UoZXZlbnQuY3VzdG9tX3RhZ3MpO1xyXG4gICAgICAgIGlmICh0YWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGFnLmZvckVhY2goKHRhZ0RhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleENUID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4Q1QgIT0gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnNwbGljZShpbmRleENULCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGFnID0gSlNPTi5wYXJzZShlbGVtZW50LmN1c3RvbV90YWdzKTtcclxuICAgICAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGFnLmZvckVhY2goKHRhZ0RhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleCgodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwcm9ncmFtJzpcclxuICAgICAgICB0aGlzLmNoZWNrRGVmYXVsdFByb2dyYW1PblJlbW92ZShldmVudCk7XHJcbiAgICAgICAgLy8gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSBbXTtcclxuICAgICAgICAvLyB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtID0gW107XHJcblxyXG4gICAgICAgIC8vIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0oKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVxdWlyZXNfYXVkaXQnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyA9IHtcclxuICAgICAgICAgIGNhdGVnb3J5X2lkOiAwLFxyXG4gICAgICAgICAgc2FtcGxlOiAwLFxyXG4gICAgICAgICAgcGVyY2VudGFnZTogMCxcclxuICAgICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiAnJyxcclxuICAgICAgICAgIGZyZXF1ZW5jeV90aW1lOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzdXJhbmNlJzpcclxuICAgICAgICBjb25zdCBhc3N1cmFuY2VJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZUxpc3QuZmluZEluZGV4KChhc3N1cmFuY2U6IGFueSkgPT4gYXNzdXJhbmNlLmNhdGVnb3J5X2lkID09IGFzc3VyYW5jZS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzdXJhbmNlTGlzdC5zcGxpY2UoYXNzdXJhbmNlSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjaGVja3BvaW50JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cy5zcGxpY2UoZXZlbnQsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3Nlc3NtZW50JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0ge1xyXG4gICAgICAgICAgY2F0ZWdvcnlfaWQ6IFwiXCIsXHJcbiAgICAgICAgICBhc3Nlc3NtZW50X2lkOiBcIlwiLFxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25ldy1jaGVja3BvaW50cyc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubmV3X2NoZWNrcG9pbnRzID0ge307XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50Q291bnQgPSAwO1xyXG4gICAgICAgIHRoaXMuY2hlY2twb2ludENvdW50VXBkYXRlZC5lbWl0KHRoaXMuY2hlY2twb2ludENvdW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVudHJ1c3RGcmFtZXdvcmsoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eSA9IHtcclxuICAgICAgbmFtZTogZXZlbnQucmVwb3J0X25hbWUsXHJcbiAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiAoZXZlbnQua2V5X2NvbXBsaWFuY2UpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG5ld1N0YXJ0RGF0ZSA9IGV2ZW50LnN0YXJ0X2RhdGUgfHwgZXZlbnQuc3RhcnRfZGF0ZSAhPSBudWxsIHx8IGV2ZW50LnN0YXJ0X2RhdGUgIT09ICcnID8gbmV3IERhdGUoZXZlbnQuc3RhcnRfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IHB2dFRlbXBsYXRlID0gZXZlbnQuZnJlcXVlbmN5X3RlbXBsYXRlICYmIGV2ZW50LmZyZXF1ZW5jeV90ZW1wbGF0ZSAhPT0gJycgPyBldmVudC5mcmVxdWVuY3lfdGVtcGxhdGUgOiBldmVudC5mcmVxdWVuY3k7XHJcbiAgICBjb25zdCBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0OiBhbnkgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2Uuc2hvcnRIYW5kX2ZyZXFDYWwoXHJcbiAgICAgIHB2dFRlbXBsYXRlLFxyXG4gICAgICBuZXdTdGFydERhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgICBuZXdTdGFydERhdGUuZ2V0TW9udGgoKSxcclxuICAgICAgbmV3U3RhcnREYXRlLmdldEZ1bGxZZWFyKClcclxuICAgICk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3Q/LnBhdHRlcm47XHJcbiAgICBldmVudC5mcmVxdWVuY3lfZGV0YWlscyA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV9kZXRhaWxzO1xyXG4gICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSAnMjM6NTk6MDAnO1xyXG4gICAgZXZlbnQucmVtaW5kZXJfYmVmb3JlX2RheXMgPSBldmVudC5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPyBldmVudC5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgOiAyOztcclxuICAgIGV2ZW50LmZhaWxlZF9hZnRlcl9kYXlzID0gZXZlbnQubWFya19mYWlsZWRfYWZ0ZXIgPyBldmVudC5tYXJrX2ZhaWxlZF9hZnRlciA6IDI7XHJcbiAgICBldmVudC5saWZlY3ljbGVfZGV0YWlscyA9ICcwMDAwLTAwLTAwfn4wJztcclxuICAgIGV2ZW50LnN0YXJ0X29mX2RheV91dGMgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZnJhbWV3b3JrU3RhcnREYXRlKGV2ZW50KTtcclxuICAgIGV2ZW50Lm9uX2NvbXBsZXRpb25fb2YgPSBbXTtcclxuICAgIGV2ZW50LmRvbV91dGMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0LmNvbnRpbnVvdXNfZmFpbGVkX2RheXNcclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV90aW1lID0gJzIzOjU5OjAwJztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlbWluZGVyX2JlZm9yZV9kYXlzID0gZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlID8gZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlIDogMjs7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyID8gZXZlbnQubWFya19mYWlsZWRfYWZ0ZXIgOiAyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlmZWN5Y2xlRGV0YWlscyA9ICcwMDAwLTAwLTAwfn4wJztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnN0YXJ0X29mX2RheV91dGMgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZnJhbWV3b3JrU3RhcnREYXRlKGV2ZW50KS50b0ZpeGVkKCkudG9TdHJpbmcoKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9uX2NvbXBsZXRpb25fb2YgPSBbXTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRvbV91dGMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRlc2NyaXB0aW9uID0gZXZlbnQucmVtYXJrcy50cmltKCkgIT0gJycgPyBldmVudC5yZW1hcmtzIDogJyc7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzID0gZXZlbnQuY3VzdG9tX3RhZ3MgJiYgZXZlbnQuY3VzdG9tX3RhZ3MgIT09IG51bGwgJiYgZXZlbnQuY3VzdG9tX3RhZ3MgIT09ICdudWxsJyAmJiBldmVudC5jdXN0b21fdGFncyAhPT0gJycgPyBKU09OLnBhcnNlKGV2ZW50LmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gZXZlbnQuY29udHJvbF9vYmplY3RpdmUgPyBldmVudC5jb250cm9sX29iamVjdGl2ZSA6ICcnO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSB0aGlzLnNldExpc3QodGhpcy5hbGxDYXRlZ29yaWVzLCBbZXZlbnQuY2F0ZWdvcnlfaWRdLCAnY2F0ZWdvcnlfaWQnKTsgLy9cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzID0gMjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Tk90Q29tcGxldGVkRGF5cyA9IDI7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdC5maW5kKChyYzogYW55KSA9PiByYy5yY19pZCA9PT0gZXZlbnQuZW50aXR5X2lkKSA/IFt0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmluZCgocmM6IGFueSkgPT4gcmMucmNfaWQgPT09IGV2ZW50LmVudGl0eV9pZCldIDogW107XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrQ2xhc3MgPSB0aGlzLmlzUmlza0VuYWJsZSA/IDEgOiAyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJpdmF0ZV9saWJyYXJ5X2lkID0gZXZlbnQucmVwb3J0X2lkO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X2RldGFpbHM7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jbGFzc2lmaWNhdGlvbiA9IHRoaXMuaXNSaXNrRW5hYmxlID8gMSA6IDI7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gZnJlcXVlbmN5RGV0YWlsc09iamVjdC5jb250aW51b3VzX2ZhaWxlZF9kYXlzXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZnJhbWV3b3JrU3RhcnREYXRlKGV2ZW50KTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlID0ge1xyXG4gICAgICBldmlkZW5jZVJlcXVpcmVkOiBldmVudC5yZXBvcnRfdXBsb2FkX2ZsYWcgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIGZvcm1hdEZpbGVzOiBldmVudC5yZXBvcnRfZm9ybWF0LFxyXG4gICAgICBmb3JtYXRMaW5rczogIShldmVudC5yZXBvcnRfZm9ybWF0X2xpbmspIHx8IGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluayA9PSAnJyA/IFtdIDogW2V2ZW50LnJlcG9ydF9mb3JtYXRfbGlua10sXHJcbiAgICAgIGZvcm1hdFJlcXVpcmVkOiAoZXZlbnQucmVwb3J0X2Zvcm1hdC5sZW5ndGggPiAwIHx8ICgoZXZlbnQucmVwb3J0X2Zvcm1hdF9saW5rKSAmJiBldmVudC5yZXBvcnRfZm9ybWF0X2xpbmsgIT0gJycpKSA/IHRydWUgOiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyA9IHtcclxuICAgICAgY2F0ZWdvcnlfaWQ6IDAsXHJcbiAgICAgIHNhbXBsZTogNSxcclxuICAgICAgcGVyY2VudGFnZTogMzAsXHJcbiAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiAnMX4wfjN+MScsXHJcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiAnMjM6NTk6MDAnXHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSAnMTE6NTkgcG0nO1xyXG4gICAgaWYgKGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzICE9PSAnJyAmJiBldmVudC5mcmVxdWVuY3lfZGV0YWlscyAhPT0gJzV+MH4wfjAnKSB7XHJcbiAgICAgIHRoaXMuZnJlcXVlbmN5UG9wdWxhdGlvbihldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9ICcyMzo1OTowMCc7XHJcbiAgICBldmVudC5wbGFjZWhvbGRlciA9IHRoaXMuZ2V0RnJlcXVlbmN5UGxhY2Vob2xkZXIoZXZlbnQpO1xyXG4gICAgY29uc3QgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSAhPT0gJycpIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ09CSkVDVElWRScpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLk9CSkVDVElWRSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUklTS19DTEFTU0lGSUNBVElPTicpO1xyXG4gICAgdGhpcy5tb3JlT3B0aW9ucy5SSVNLX0NMQVNTSUZJQ0FUSU9OID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdDQVRFR09SWScpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkNBVEVHT1JZID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmZvcm1hdEFuZEV2aWRlbmNlPy5ldmlkZW5jZVJlcXVpcmVkIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5mb3JtYXRBbmRFdmlkZW5jZT8uZm9ybWF0UmVxdWlyZWQpIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0ZPUk1BVEVfRVZJREVOQ0UnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5lbnRpdHlfaWQgPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSQycpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuICAgIC8vICBldmVudC5wbGFjZWhvbGRlclxyXG4gIH1cclxuXHJcbiAgYXNzaWduRnJvbUZyYW1ld29yayhmcmVxT2JqOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiZnJlcXV1dXV1XCIsZnJlcU9iailcclxuICAgIGlmIChmcmVxT2JqLmRhdGEpIHtcclxuICAgICAgLy8gdGhpcy5yZXNldCgpO1xyXG4gICAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKTtcclxuICAgICAgY29uc3QgbmV3U3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgIGNvbnN0IGZyZXF1ZW5jeURldGFpbHNPYmplY3Q6IGFueSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChcclxuICAgICAgICBmcmVxT2JqLmRhdGEuZnJlcXVlbmN5LFxyXG4gICAgICAgIG5ld1N0YXJ0RGF0ZS5nZXREYXRlKCksXHJcbiAgICAgICAgbmV3U3RhcnREYXRlLmdldE1vbnRoKCksXHJcbiAgICAgICAgbmV3U3RhcnREYXRlLmdldEZ1bGxZZWFyKClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGxldCBldmVudDogYW55ID0ge307XHJcbiAgICAgIGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzID0gZnJlcXVlbmN5RGV0YWlsc09iamVjdD8ucGF0dGVybjtcclxuICAgICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSAnMjM6NTk6MDAnO1xyXG4gICAgICBldmVudC5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9IDI7XHJcbiAgICAgIGV2ZW50LmZhaWxlZF9hZnRlcl9kYXlzID0gMjtcclxuICAgICAgZXZlbnQubGlmZWN5Y2xlX2RldGFpbHMgPSAnMDAwMC0wMC0wMH5+MCc7XHJcbiAgICAgIGV2ZW50LnN0YXJ0X29mX2RheV91dGMgPSBEYXRlLm5vdygpIC8gMTAwMDtcclxuICAgICAgZXZlbnQub25fY29tcGxldGlvbl9vZiA9IFtdO1xyXG4gICAgICBldmVudC5kb21fdXRjID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgIGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0LmNvbnRpbnVvdXNfZmFpbGVkX2RheXNcclxuICAgICAgdGhpcy5nZXRGcmVxdWVuY3lQbGFjZWhvbGRlcihldmVudClcclxuICAgICAgZXZlbnQucGxhY2Vob2xkZXIgPSB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyXHJcbiAgICAgIGV2ZW50LmZyZXF1ZW5jeV90aW1lID0gJzExOjU5IHBtJztcclxuICAgICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50KTtcclxuXHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUgPSBmcmVxT2JqLmRhdGEubmFtZSA/PyAnJztcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gZnJlcU9iai5kYXRhLm9iamVjdGl2ZXMgPz8gJyc7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9ZnJlcXVlbmN5RGV0YWlsc09iamVjdD8ucGF0dGVybiA/PycnO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSBldmVudC5zdGFydF9vZl9kYXlfdXRjO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cz0gZXZlbnQucmVtaW5kZXJfYmVmb3JlX2RheXM7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXM9IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXM7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZhaWxlZF9hZnRlcl9kYXlzPSBldmVudC5mYWlsZWRfYWZ0ZXJfZGF5cztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZyYW1ld29ya1ZhbHVlcyA9IGZyZXFPYmouc2VsZWN0ZWRGcmFtZXdvcmtEYXRhID8/IHVuZGVmaW5lZDtcclxuICAgICAgaWYoZnJlcU9iaj8uZGF0YT8uZGVzY3JpcHRpb24pe1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRlc2NyaXB0aW9uID0gZnJlcU9iaj8uZGF0YT8uZGVzY3JpcHRpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYoZnJlcU9iaj8uZGF0YT8ub2JqZWN0aXZlcyl7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gZnJlcU9iai5kYXRhLm9iamVjdGl2ZXMgPz8gJyc7XHJcbiAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PQkpFQ1RJVkUgPSB0cnVlO1xyXG4gICAgICAgIGxldCBjaGVja2VkTW9yZU9wdGlvbnMgPVtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9yZU9wdGlvbnMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm1vcmVPcHRpb25zW2tleV0pIHtcclxuICAgICAgICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goa2V5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaEFsbExpc3RzKCkge1xyXG4gICAgbGV0IGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCByZXZpZXdlcnNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBhc3NpZ25lZUlkczogYW55ID0gW107XHJcblxyXG4gICAgY29uc3QgYWxsVXNlcnMgPSBjbG9uZURlZXAodGhpcy5hbGxVc2Vyc0xpc3QpO1xyXG4gICAgY29uc3QgYmVoYWxmVXNlcnMgPSBjbG9uZURlZXAodGhpcy5iZWhhbGZPZlVzZXJzTGlzdCk7XHJcblxyXG4gICAgY29uc3QgYXNzaWdub3JzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0KTtcclxuICAgIGNvbnN0IGFzc2lnbmVlcyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCk7XHJcblxyXG4gICAgY29uc3QgcmV2aWV3ZXJzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0KTtcclxuICAgIGNvbnN0IG92ZXJzZWVyTGlzdCA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCk7XHJcbiAgICBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QpO1xyXG4gICAgYXNzaWdub3JzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyLm1lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIGFzc2lnbmVlcz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godXNlci5teV9tZW1iZXJfaWQpO1xyXG4gICAgICBhc3NpZ25lZUlkcy5wdXNoKHVzZXIubXlfbWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godGhpcy5tZW1iZXJJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2aWV3ZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgcmV2aWV3ZXJzSWRzLnB1c2godXNlci5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBvdmVyc2Vlckxpc3Q/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXIubXlfbWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyLm15X21lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzKV07XHJcbiAgICBhc3NpZ25lZUlkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbmVlSWRzKV07XHJcbiAgICByZXZpZXdlcnNJZHMgPSBbLi4ubmV3IFNldChyZXZpZXdlcnNJZHMpXTtcclxuICAgIG92ZXJzZWVySWRzID0gWy4uLm5ldyBTZXQob3ZlcnNlZXJJZHMpXTtcclxuXHJcblxyXG4gICAgdGhpcy5hc3NpZ25vcnNMaXN0ID0gYmVoYWxmVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEob3ZlcnNlZXJJZHMuaW5jbHVkZXModXNlci5tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmFzc2lnbmVlc0xpc3QgPSBhbGxVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShyZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpIHx8IG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIubXlfbWVtYmVyX2lkKSkpO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5yZXZpZXdlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEob3ZlcnNlZXJJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpIHx8IGFzc2lnbmVlSWRzLmluY2x1ZGVzKHVzZXIubXlfbWVtYmVyX2lkKSkpO1xyXG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpIHx8IHJldmlld2Vyc0lkcy5pbmNsdWRlcyh1c2VyLm15X21lbWJlcl9pZCkpKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCkge1xyXG4gICAgbGV0IGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCByZXZpZXdlcnNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBhc3NpZ25lZUlkczogYW55ID0gW107XHJcbiAgICBjb25zdCBiZWhhbGZVc2VycyA9IGNsb25lRGVlcCh0aGlzLmJlaGFsZk9mVXNlcnNMaXN0KTtcclxuICAgIGNvbnN0IGFzc2lnbm9ycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCk7XHJcbiAgICBjb25zdCBhc3NpZ25lZXMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QpO1xyXG4gICAgY29uc3QgcmV2aWV3ZXJzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0KTtcclxuICAgIGNvbnN0IG92ZXJzZWVyTGlzdCA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCk7XHJcbiAgICBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QpO1xyXG4gICAgYXNzaWdub3JzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyLm1lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIGFzc2lnbmVlcz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godXNlci5teV9tZW1iZXJfaWQpO1xyXG4gICAgICBhc3NpZ25lZUlkcy5wdXNoKHVzZXIubXlfbWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godGhpcy5tZW1iZXJJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2aWV3ZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgcmV2aWV3ZXJzSWRzLnB1c2godXNlci5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBvdmVyc2Vlckxpc3Q/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXIubXlfbWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyLm15X21lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzID0gWy4uLm5ldyBTZXQoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMpXTtcclxuICAgIGFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQoYXNzaWduZWVJZHMpXTtcclxuICAgIHJldmlld2Vyc0lkcyA9IFsuLi5uZXcgU2V0KHJldmlld2Vyc0lkcyldO1xyXG4gICAgb3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldChvdmVyc2VlcklkcyldO1xyXG5cclxuXHJcbiAgICB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IHRoaXMucHJvZ3JhbVBlb3BsZUxpc3QuYXNzaWduZWVzTGlzdC5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShyZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpIHx8IG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIubXlfbWVtYmVyX2lkKSkpO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5yZXZpZXdlcnNMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdC5yZXZpZXdlcnNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAhKG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIubXlfbWVtYmVyX2lkKSB8fCBhc3NpZ25lZUlkcy5pbmNsdWRlcyh1c2VyLm15X21lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMub3ZlcnNlZXJzTGlzdCA9IHRoaXMucHJvZ3JhbVBlb3BsZUxpc3Qub3ZlcnNlZXJzTGlzdC5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5pbmNsdWRlcyh1c2VyLm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIubXlfbWVtYmVyX2lkKSkpO1xyXG4gIH1cclxuXHJcbiAvKipcclxuICAqIElmIHRoZSBmb3JtIGlzIHZhbGlkLCB0aGVuIGlmIHRoZSBtb2RlIGlzIEVESVQsIHRoZW4gc2V0IHRoZSBvcmdhbml6YXRpb25JZCBhbmQgbWVtYmVySWQgdG8gdGhlXHJcbiAgKiBhdXRoU2VydmljZSB2YWx1ZXMsIGFuZCB0aGVuIGNhbGwgdGhlIGVudHJ1c3RSZXNwb25zaWJpbGl0eSBmdW5jdGlvbiB3aXRoIHRoZSByZXNwb25zaWJpbGl0eUZvcm0gYXNcclxuICAqIGEgcGFyYW1ldGVyLlxyXG4gICpcclxuICAqIElmIHRoZSBtb2RlIGlzIG5vdCBFRElULCB0aGVuIGNhbGwgdGhlIGVudHJ1c3RSZXNwb25zaWJpbGl0eSBmdW5jdGlvbiB3aXRoIHRoZSByZXNwb25zaWJpbGl0eUZvcm1cclxuICAqIGFzIGEgcGFyYW1ldGVyLlxyXG4gICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlLlxyXG4gICovXHJcbiAgc3VibWl0UmVzcG9uc2liaWxpdHkoKSB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGVSZXNwb25zaWJpbGl0eSgpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKTtcclxuICAgICAgdGhpcy5lbnRydXN0UmVzcG9uc2liaWxpdHkodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0pO1xyXG4gICAgICAvLyBlZGl0IGNvbmRpdGlvbnNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50cnVzdFJlc3BvbnNpYmlsaXR5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICogSWYgdGhlIHJlc3BvbnNpYmlsaXR5IG5hbWUgaXMgZW1wdHksIG9yIHRoZSBmcmVxdWVuY3kgaXMgZW1wdHksIG9yIHRoZSBhc3NpZ25lZXMgbGlzdCBpcyBlbXB0eSxcclxuICAqIHRoZW4gcmV0dXJuIGZhbHNlLiBPdGhlcndpc2UsIHJldHVybiB0cnVlLlxyXG4gICovXHJcbiAgdmFsaWRhdGVSZXNwb25zaWJpbGl0eSgpIHtcclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMuZW5hYmxlICYmIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gXCJ3aG9tXCI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lLnRyaW0oKSA9PSAnJykge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJ3doYXQnO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICd3aG8nO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5IHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PSAnJyB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPT09ICcnIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJzV+MH4wfjAnKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnd2hlbic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBpZiAoIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZS50cmltKCkgPT0gJydcclxuICAgICAgfHwgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09PSAnJyB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPT09ICc1fjB+MH4wJykgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbnRydXN0UmVzcG9uc2liaWxpdHkoZW50cnVzdEZvcm06IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHN0YXJ0RGF0ZSA9IG1vbWVudChwYXJzZUludChlbnRydXN0Rm9ybS5zdGFydERhdGUpICogMTAwMCkuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzc1wiKTtcclxuICAgIHN0YXJ0RGF0ZSA9IG1vbWVudChzdGFydERhdGUuc3BsaXQoJyAnKVswXSArIFwiIDAwOjAwOjAwXCIpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIik7XHJcbiAgICBjb25zdCByY0RldGFpbHMgPSBlbnRydXN0Rm9ybS5yYy5sZW5ndGggPiAwID8gZW50cnVzdEZvcm0ucmMubWFwKChyYzogYW55KTogYW55ID0+IHtcclxuICAgICAgaWYgKHJjKSB7XHJcbiAgICAgICAgY29uc3QgcmNEZXRhaWxzQXJyID0ge1xyXG4gICAgICAgICAgcGFyZW50X3JjX2lkczogcmMucGFyZW50X3JjX2lkcyxcclxuICAgICAgICAgIHJjX2lkOiByYy5yY19pZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHJjRGV0YWlsc0FycjtcclxuICAgICAgfVxyXG4gICAgfSkgOiBbXTtcclxuICAgIGNvbnN0IG1vcmVPcHRpb25zID0gdGhpcy5tb3JlT3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBjaGVja0NvbnRpbnVvdXNGYWlsZWRWYWx1ZSA9IChkZXRhaWxzOiBzdHJpbmcpID0+IHtcclxuICAgICAgY29uc3QgZnJlcXVlbmN5VHlwZSA9IHBhcnNlSW50KGRldGFpbHMuc3BsaXQoJ34nKVswXSk7XHJcbiAgICAgIGlmIChmcmVxdWVuY3lUeXBlID09PSAxIHx8IGZyZXF1ZW5jeVR5cGUgPT09IDIgfHwgZnJlcXVlbmN5VHlwZSA9PT0gMykge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxpbmtlZFByb2dyYW1JZHM6IGFueVtdID0gW107XHJcbiAgICBsZXQgbGlua2VkQ2F0ZWdvcnlJZHM6IGFueVtdID0gW107XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ubGlua2VkUHJvZ3JhbT8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgaWYodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmNhdGVnb3J5X2lkICE9PSBlbGU/LmNhdGVnb3J5X2lkKXtcclxuICAgICAgICBjb25zdCBwcm9ncmFtID0ge1xyXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGU/LmNhdGVnb3J5X2lkLFxyXG4gICAgICAgICAgcHJvZ3JhbU9iamVjdElkOiBlbGU/Ll9pZCxcclxuICAgICAgICAgIHN1YlByb2dyYW1JZHM6IGVsZT8uY2hpbGRfaWQ/LmZpbHRlciggKGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Py5pbmNsdWRlcyhlbCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5rZWRQcm9ncmFtSWRzPy5wdXNoKHByb2dyYW0pO1xyXG4gICAgICAgIGxpbmtlZENhdGVnb3J5SWRzPy5wdXNoKGVsZT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGxldCBjYXRlZ29yeUlkc0V4Y2VwdERlZmF1bHQ6YW55ID0gW11cclxuICAgIGNhdGVnb3J5SWRzRXhjZXB0RGVmYXVsdCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeT8uZmlsdGVyKCAoZWw6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gKGVsICE9PSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgICYmICF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2hpbGRfaWQ/LmluY2x1ZGVzKGVsKSlcclxuICAgIH0pXHJcblxyXG5cclxuICAgIGNvbnN0IHJlbWFya3MgPSAoZW50cnVzdEZvcm0uZGVzY3JpcHRpb24ucmVwbGFjZSgvXFwmbmJzcDsvZywgJycpLnRyaW0oKSAhPT0gJycpID8gZW50cnVzdEZvcm0uZGVzY3JpcHRpb24gOiAnJ1xyXG4gICAgY29uc3Qgb2JqZWN0aXZlID0gKGVudHJ1c3RGb3JtLm9iamVjdGl2ZS5yZXBsYWNlKC9cXCZuYnNwOy9nLCAnJykudHJpbSgpICE9PSAnJykgPyBlbnRydXN0Rm9ybS5vYmplY3RpdmUgOiAnJ1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgYXBwX2Fzc29jaWF0aW9uOiBbXSxcclxuICAgICAgYXNzaWduZWRfdG86IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtLmFzc2lnbmVlcy5saXN0LCAnZW1wbG95ZWVfaWQnKS50b1N0cmluZygpLFxyXG4gICAgICBwcm9ncmFtX2NhdF9pZHM6IG1vcmVPcHRpb25zPy5QUk9HUkFNID8gKChlbnRydXN0Rm9ybT8ucHJvZ3JhbT8ubGVuZ3RoKSA/IFtlbnRydXN0Rm9ybS5wcm9ncmFtWzBdLmNhdGVnb3J5X2lkXSA6IFtdKTpbXSxcclxuICAgICAgbGlua2VkX3Byb2dyYW1faWRzOiBsaW5rZWRQcm9ncmFtSWRzLFxyXG4gICAgICBsaW5rZWRfY2F0ZWdvcnlfaWRzOiB0aGlzLmdldFVuaXF1ZUlkcyhbLi4uY2F0ZWdvcnlJZHNFeGNlcHREZWZhdWx0LCAuLi5saW5rZWRDYXRlZ29yeUlkc10gKSxcclxuICAgICAgLy8gY2F0ZWdvcnlfaWQ6ICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbV9zZWxlY3RlZF9pZHM/Lmxlbmd0aCA+IDApID8gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmNhdGVnb3J5X2lkIDogJycsXHJcbiAgICAgIGNhdGVnb3J5X2lkOiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1fc2VsZWN0ZWRfaWRzPy5sZW5ndGggPiAwKSA/IHRoaXMuZ2V0VW5pcXVlSWRzKFsuLi50aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uY2F0ZWdvcnksIC4uLmxpbmtlZENhdGVnb3J5SWRzICwgLi4uW2VudHJ1c3RGb3JtLnByb2dyYW1bMF0uY2F0ZWdvcnlfaWRdXSApPy50b1N0cmluZygpIDogJycsXHJcbiAgICAgIGNjX2VtYWlsOiAobW9yZU9wdGlvbnMuT1ZFUlNFRVIpID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0ub3ZlcnNlZXJzLmxpc3QsICdlbXBsb3llZV9pZCcpLnRvU3RyaW5nKCkgOiAnJyxcclxuICAgICAgY2hlY2twb2ludF9kZXNjcmlwdGlvbjogKG1vcmVPcHRpb25zLkNIRUNLUE9JTlRTKSA/IGVudHJ1c3RGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvbiA6ICcnLFxyXG4gICAgICBjaGVja3BvaW50X2RldGFpbHM6IChtb3JlT3B0aW9ucy5DSEVDS1BPSU5UUykgPyBKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cykgOiAnJyxcclxuICAgICAgY2hlY2twb2ludF9mbGFnOiAwLFxyXG4gICAgICBjb2xsYWJvcmF0b3JfbWFya19kb25lOiAwLFxyXG4gICAgICBjb21tZW50OiAnJyxcclxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogY2hlY2tDb250aW51b3VzRmFpbGVkVmFsdWUoZW50cnVzdEZvcm0uZnJlcXVlbmN5KSA/IGVudHJ1c3RGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgOiAwLFxyXG4gICAgICBjb3N0X29mX2NvbXBsaWFuY2U6ICcnLFxyXG4gICAgICBjcmVhdGVkX2J5OiBlbnRydXN0Rm9ybS5hc3NpZ25vcnMubGlzdD8ubGVuZ3RoIDwgMSA/IDAgOiB0aGlzLm1lbWJlcklkLFxyXG4gICAgICBjcmVhdGlvbl93aW5kb3c6IDAsXHJcbiAgICAgIGN1c3RvbV90YWdzOiBKU09OLnN0cmluZ2lmeShlbnRydXN0Rm9ybS5jdXN0b21UYWdzKSxcclxuICAgICAgZW50aXR5X3RyZWU6IChtb3JlT3B0aW9ucy5SQykgPyByY0RldGFpbHMgOiBbXSxcclxuICAgICAgZW50cnVzdF9mcm9tX3Jpc2s6IHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JJU0tfVFJFQVRNRU5UJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgZmFpbGVkX2FmdGVyX2RheXM6IGVudHJ1c3RGb3JtLmZhaWxlZF9hZnRlcl9kYXlzLFxyXG4gICAgICBmYWlsZWRfdGltZV91dGM6IGVudHJ1c3RGb3JtLmZhaWxlZF90aW1lX3V0YyxcclxuICAgICAgZmFpbHVyZV9jY19lbWFpbDogKG1vcmVPcHRpb25zLk9WRVJTRUVSKSA/IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0LCAnZW1wbG95ZWVfaWQnKS50b1N0cmluZygpIDogJycsXHJcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBlbnRydXN0Rm9ybS5mcmVxdWVuY3ksXHJcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBlbnRydXN0Rm9ybS50aW1lSW4yNEhyID8/IFwiMjM6NTk6MDBcIixcclxuICAgICAgZ3JjX29iamVjdF9pZDogMCxcclxuICAgICAgZ3JjX3JlbGF0aW9uc2hpcDogJycsXHJcbiAgICAgIGlmX3Rlc3RwbGFuX2ZhaWxlZDogMCxcclxuICAgICAgaW1wYWN0OiAnJyxcclxuICAgICAgaXNHcm91cEFzc2lnblRvOiAoZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09ICdBTllfT05FJykgPyAxIDogMCxcclxuICAgICAgaXNfa2V5X2NvbXBsaWFuY2U6IGVudHJ1c3RGb3JtLnJlc3BvbnNpYmlsaXR5LmtleVJlc3BvbnNpYmlsaXR5ID8gMSA6IDAsXHJcbiAgICAgIGxpYnJhcnlfcmVwb3J0X2lkOiAwLFxyXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZW50cnVzdEZvcm0ubGlmZWN5Y2xlRGV0YWlscyA/PyAnMDAwMC0wMC0wMH5+MCcsXHJcbiAgICAgIGxpbmtfZm9yX2RldGFpbHM6IChtb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFKSA/IGVudHJ1c3RGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdExpbmtzIDogW10sXHJcbiAgICAgIGxpbmthZ2VzOiB7IGNvbXBsaWFuY2U6IFtdIH0sXHJcbiAgICAgIG1lbWJlcl9pZDogdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QsICdtZW1iZXJfaWQnKS5sZW5ndGggPiAwID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QsICdtZW1iZXJfaWQnKVswXSA6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgIG9iamVjdGl2ZTogKG1vcmVPcHRpb25zLk9CSkVDVElWRSkgPyBvYmplY3RpdmUgOiAnJyxcclxuICAgICAgb25fY29tcGxldGlvbl9vZjogZW50cnVzdEZvcm0ucmVwb3J0SWQgPyBbZW50cnVzdEZvcm0ucmVwb3J0SWRdIDogW10sXHJcbiAgICAgIG9uX2NvbXBsZXRpb25fb2ZfdHlwZTogMSxcclxuICAgICAgb3JnYW5pc2F0aW9uX2lkOiB0aGlzLm9yZ2FuaXphdGlvbklkLFxyXG4gICAgICBvdmVycmlkZV93ZWVrbHk6IDAsXHJcbiAgICAgIHBhcmVudF9pZDogMCxcclxuICAgICAgcGVuYWx0eTogJycsXHJcbiAgICAgIHByaXZhdGVfbGlicmFyeV9pZDogMCxcclxuICAgICAgcmVtYXJrczogcmVtYXJrcyxcclxuICAgICAgcmVtaW5kZXJfYmVmb3JlX2RheXM6IGVudHJ1c3RGb3JtLnJlbWluZGVyX2JlZm9yZV9kYXlzLFxyXG4gICAgICByZXBvcnRfZm9ybWF0OiAobW9yZU9wdGlvbnMuRk9STUFURV9FVklERU5DRSkgPyBlbnRydXN0Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRGaWxlcyA6IFtdLFxyXG4gICAgICByZXBvcnRfZm9ybWF0X2xpbms6ICcnLFxyXG4gICAgICByZXBvcnRfbmFtZTogZW50cnVzdEZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSxcclxuICAgICAgcmVwb3J0X3VwbG9hZF9mbGFnOiBlbnRydXN0Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID8gMSA6IDAsXHJcbiAgICAgIHJldmlld19hZnRlcl9kYXlzOiAobW9yZU9wdGlvbnMuUkVWSUVXRVIpID8gZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdDb21wbGV0ZURheXMgPT09ICcnID8gMCA6IE51bWJlcihlbnRydXN0Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld0NvbXBsZXRlRGF5cykgOiAwLFxyXG4gICAgICByZXZpZXdfZmFpbGVkX2FmdGVyX2RheXM6IChtb3JlT3B0aW9ucy5SRVZJRVdFUikgPyBlbnRydXN0Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld05PdENvbXBsZXRlZERheXMgPT09ICcnID8gMCA6IE51bWJlcihlbnRydXN0Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld05PdENvbXBsZXRlZERheXMpIDogMCxcclxuICAgICAgcmV2aWV3ZXJfYXJyOiAobW9yZU9wdGlvbnMuUkVWSUVXRVIpID8ge1xyXG4gICAgICAgIGxldmVsMToge1xyXG4gICAgICAgICAgcmV2aWV3ZXJzOiB0aGlzLnNldFJldmlld2VyUGF5bG9hZChlbnRydXN0Rm9ybS5yZXZpZXdlcnMubGlzdCwgJ2xpc3QnLCBlbnRydXN0Rm9ybS5yZXZpZXdlcnMuYWNjZXB0ZWREYXRhLCAoZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdykgPyAnU0VRVUVOVElBTCcgOiAnQU5ZT05FJyksXHJcbiAgICAgICAgICB0eXBlOiAoZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdykgPyAnU0VRVUVOVElBTCcgOiAnQU5ZT05FJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0gOiB7fSxcclxuICAgICAgcmV2aWV3ZXJfY2hlY2twb2ludHM6IFt7IGNoZWNrcG9pbnRzOiBbXSwgaW5zdHJ1Y3Rpb246ICcnIH1dLFxyXG4gICAgICByZXZpZXdlcl9pZDogMCxcclxuICAgICAgcmlza19jbGFzczogdGhpcy5pc1Jpc2tFbmFibGUgPyBlbnRydXN0Rm9ybS5yaXNrQ2xhc3MgOiAyLFxyXG4gICAgICByaXNrX2lkczogJycsXHJcbiAgICAgIHJpc2tfbWF0cml4X2RhdGE6IChtb3JlT3B0aW9ucy5SSVNLX0NMQVNTSUZJQ0FUSU9OKSA/IGVudHJ1c3RGb3JtLnJpc2tNYXRyaXggOiAnMCwwLDAsMCwwLDAnLFxyXG4gICAgICBzYW1wbGVfc2l6ZTogMCxcclxuICAgICAgc3RhcnRfZGF0ZV91dGM6IHN0YXJ0RGF0ZSxcclxuICAgICAgc3RhdHV0b3J5X2RheTogMCxcclxuICAgICAgdGVzdF9yZXF1aXJlZF9mbGFnOiAobW9yZU9wdGlvbnMuQVNTVVJBTkNFKSA/IChlbnRydXN0Rm9ybS5hc3N1cmFuY2VMaXN0Lmxlbmd0aCA+IDAgPyAxIDogMCkgOiAwLFxyXG4gICAgICB0ZXN0cGxhbl9jYXRlZ29yeV9pZDogKG1vcmVPcHRpb25zLkFTU1VSQU5DRSkgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5hc3N1cmFuY2VMaXN0LCAnY2F0ZWdvcnlfaWQnKSA6IFtdLFxyXG4gICAgICB0ZXN0cGxhbl9jYXRlZ29yeV9tYW5hZ2VyOiAnJyxcclxuICAgICAgYXVkaXRfY2F0ZWdvcnlfZGV0YWlsczogbW9yZU9wdGlvbnMuUkVRVUlSRVNfQVVESVQgJiYgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmF1ZGl0X2NhdGVnb3J5X2RldGFpbHM/LmNhdGVnb3J5X2lkID8ge1xyXG4gICAgICAgIGNhdGVnb3J5X2lkOiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzLmNhdGVnb3J5X2lkLFxyXG4gICAgICAgIHNhbXBsZTogdGhpcy5zZWxlY3RlZFNhbXBsZSA9PT0gMCA/IHRoaXMuc2FtcGxlVmFsdWUgOiAwLFxyXG4gICAgICAgIHBlcmNlbnRhZ2U6IHRoaXMuc2VsZWN0ZWRTYW1wbGUgPT09IDEgPyB0aGlzLnNhbXBsZVBlcmNlbnRhZ2UgOiAwLFxyXG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiBgMX4wfiR7dGhpcy5zZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZX1+MWAsXHJcbiAgICAgICAgZnJlcXVlbmN5X3RpbWU6IG1vbWVudCh0aGlzLmF1ZGl0VGltZSwgJ0hIOm1tIGEnKS5mb3JtYXQoJ0hIOm1tOnNzJylcclxuICAgICAgfSA6IHtcclxuICAgICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgICBzYW1wbGU6IDAsXHJcbiAgICAgICAgcGVyY2VudGFnZTogMCxcclxuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogYGAsXHJcbiAgICAgICAgZnJlcXVlbmN5X3RpbWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2Vzc21lbnQ6IHtcclxuICAgICAgICBjYXRlZ29yeV9pZDogbW9yZU9wdGlvbnMuQVNTRVNTTUVOVCA/IGVudHJ1c3RGb3JtPy5hc3Nlc3NtZW50Py5jYXRlZ29yeV9pZCA6ICcnLFxyXG4gICAgICAgIGFzc2Vzc21lbnRfaWQ6IG1vcmVPcHRpb25zLkFTU0VTU01FTlQgPyBlbnRydXN0Rm9ybT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCA6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2Vzc21lbnRfY2hlY2twb2ludDogbW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID8gKE9iamVjdC5rZXlzKGVudHJ1c3RGb3JtPy5uZXdfY2hlY2twb2ludHMpLmxlbmd0aCA+IDAgPyBlbnRydXN0Rm9ybT8ubmV3X2NoZWNrcG9pbnRzIDoge30pIDoge30sXHJcbiAgICAgIHF1ZXN0aW9ubmFpcmVfdHlwZTogbW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID8gKE9iamVjdC5rZXlzKGVudHJ1c3RGb3JtPy5uZXdfY2hlY2twb2ludHMpLmxlbmd0aCA+IDAgPyAnYXNzZXNzbWVudF9jaGVja3BvaW50JyA6IChtb3JlT3B0aW9ucy5BU1NFU1NNRU5UICYmIGVudHJ1c3RGb3JtPy5hc3Nlc3NtZW50Py5jYXRlZ29yeV9pZCA/ICdhc3Nlc3NtZW50JyA6IChKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cykgIT0gJycgJiYgbW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMgPyAnY2hlY2twb2ludCcgOiAnJykpKSA6ICcnXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnQ1JFQVRFJyAmJiAhdGhpcy5pc0R1cGxpY2F0ZUVudHJ1c3QpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2Uuc3VibWl0RW50cnVzdChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eURhdGEgPSByZXM7XHJcblxyXG5cclxuICAgICAgICBpZiAocmVzLm1lc3NhZ2UgJiYgcmVzLm1lc3NhZ2UudG9Mb3dlckNhc2UoKSA9PT0gJ2J1bGsgZW50cnVzdCcpIHtcclxuICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBZb3UgaGF2ZSBlbnRydXN0ZWQgJHtyZXMuY2FsY3VsYXRlX25vX29mX3Jlc3BvbnNpYmlpdGllc30gcmVzcG9uc2liaWxpdGllcy4gVGhlc2Ugd291bGQgYmUgcmVmbGVjdGVkIHdpdGhpbiB5b3VyIGFjY291bnQgaW4gc29tZXRpbWUuYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nICYmIHBheWxvYWQuY3JlYXRlZF9ieSA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPSAnVGhpcyByZXNwb25zaWJpbGl0eSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlLidcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHBheWxvYWQuY3JlYXRlZF9ieSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zWzFdLmJ1dHRvblRleHQgPSBcIlZpZXcgUmVzcG9uc2liaWxpdGllc1wiO1xyXG4gICAgICAgICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPSBgWW91IGp1c3QgY3JlYXRlZCBhIHJlc3BvbnNpYmlsaXR5IG9uIGJlaGFsZiAke2VudHJ1c3RGb3JtLmFzc2lnbm9ycy5saXN0LmZpbmQoKG1lbWJlcjogYW55KSA9PiBtZW1iZXIubWVtYmVyX2lkID09PSBwYXlsb2FkLm1lbWJlcl9pZCkubWVtYmVyX25hbWV9YDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy90aGlzLnJlc2V0KCk7XHJcbiAgICAgIH0sXHJcbiAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JywgJ2FsZXJ0Jyk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnIHx8IHRoaXMuaXNEdXBsaWNhdGVFbnRydXN0KSB7XHJcbiAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBUaGUgcmVzcG9uc2liaWxpdHkgaGFzIGJlZW4gbW9kaWZpZWQuYDtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UudXBkYXRlRW50cnVzdChwYXlsb2FkLCB0aGlzLnJlc3BvbnNpYmlsaXR5SWQsIHRydWUpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzRHVwbGljYXRlRW50cnVzdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyB0aGlzLnJlc2V0Rm9ybSgpO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCAnYWxlcnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAvKipcclxuICAqIEl0IHJlc2V0cyB0aGUgZm9ybS5cclxuICAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybSA9IHtcclxuICAgICAgYXNzaWdub3JzOiB7XHJcbiAgICAgICAgZW5hYmxlOiBmYWxzZSxcclxuICAgICAgICBsaXN0OiBbXVxyXG4gICAgICB9LFxyXG4gICAgICByZXNwb25zaWJpbGl0eToge1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAgYXNzaWduZWVzOiB7XHJcbiAgICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTEwnLFxyXG4gICAgICAgIGxpc3Q6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIGZyZXF1ZW5jeTogJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgb2JqZWN0aXZlOiAnJyxcclxuICAgICAgcmM6IFtdLFxyXG4gICAgICBjYXRlZ29yeTogW10sXHJcbiAgICAgIGNoZWNrcG9pbnRJbnN0cnVjdGlvbjogJycsXHJcbiAgICAgIGN1c3RvbVRhZ3M6IFtdLFxyXG4gICAgICBjaGVja3BvaW50czogW10sXHJcbiAgICAgIHJldmlld2Vyczoge1xyXG4gICAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogdHJ1ZSxcclxuICAgICAgICByZXZpZXdGcmVxdWVuY3k6IHtcclxuICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogMixcclxuICAgICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IDJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxpc3Q6IFtdXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvdmVyc2VlcnM6IHtcclxuICAgICAgICBub3RpZnlMaXN0OiBbXSxcclxuICAgICAgICBsaXN0OiBbXVxyXG4gICAgICB9LFxyXG4gICAgICBmb3JtYXRBbmRFdmlkZW5jZToge1xyXG4gICAgICAgIGZvcm1hdFJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBmb3JtYXRGaWxlczogW10sXHJcbiAgICAgICAgZm9ybWF0TGlua3M6IFtdLFxyXG4gICAgICAgIGV2aWRlbmNlUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICBhc3N1cmFuY2VMaXN0OiBbXSxcclxuICAgICAgcmVxdWlyZXNBdWRpdExpc3Q6IFtdLFxyXG4gICAgICByaXNrQ2xhc3M6IDEsXHJcbiAgICAgIHJpc2tNYXRyaXg6ICcwLDAsMCwwLDAsMCcsXHJcbiAgICAgIHByb2dyYW06IFtdLFxyXG4gICAgICBwcm9ncmFtX3NlbGVjdGVkX2lkczogW11cclxuICAgIH07XHJcbiAgICB0aGlzLm1vcmVPcHRpb25zID0ge1xyXG4gICAgICBPQkpFQ1RJVkU6IGZhbHNlLFxyXG4gICAgICBSQzogZmFsc2UsXHJcbiAgICAgIENBVEVHT1JZOiBmYWxzZSxcclxuICAgICAgRk9STUFURV9FVklERU5DRTogZmFsc2UsXHJcbiAgICAgIENIRUNLUE9JTlRTOiBmYWxzZSxcclxuICAgICAgUklTS19DTEFTU0lGSUNBVElPTjogZmFsc2UsXHJcbiAgICAgIFJFVklFV0VSOiBmYWxzZSxcclxuICAgICAgT1ZFUlNFRVI6IGZhbHNlLFxyXG4gICAgICBBU1NVUkFOQ0U6IGZhbHNlLFxyXG4gICAgICBBUFBTOiBmYWxzZSxcclxuICAgIH07XHJcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0hvdyBvZnRlbiBkb2VzIHRoZSByZXNwb25zaWJpbGl0eSBvY2N1cj8nO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzID0ge1xyXG4gICAgICBwYXR0ZXJuOiAnJyxcclxuICAgICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcclxuICAgICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXHJcbiAgICAgIGRlYWN0aXZhdGlvblZhbHVlOiAwLFxyXG4gICAgICBzZWxlY3RlZFJlcG9ydDogMCxcclxuICAgICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXHJcbiAgICAgIHN0YXJ0RGF0ZTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXHJcbiAgICAgIHdpbmRvdzogMCxcclxuICAgICAgZmFpbGVkOiAwLFxyXG4gICAgICB0aW1lOiAnMTE6NTkgcG0nLFxyXG4gICAgICBmYWlsZWRUaW1lOiAnJyxcclxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogMFxyXG4gICAgfVxyXG4gICAgdGhpcy5zYW1wbGVWYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2FtcGxlUGVyY2VudGFnZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSAtMTtcclxuICAgIHRoaXMuc2VuZEF1ZGl0UmVtaW5kZXJzVmFsdWUgPSAyO1xyXG4gICAgdGhpcy5hdWRpdFRpbWUgPSAnMTE6NTkgcG0nXHJcbiAgICB0aGlzLm1vZGUgPSAnQ1JFQVRFJ1xyXG4gICAgdGhpcy5pc0VudHJ1c3QgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXNldEZvcm0uZW1pdCh0cnVlKTtcclxuICB9XHJcbiAgYWN0aW9uKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLm9wZW5lZEZyb20gPT09ICdSSVNLX1RSRUFUTUVOVCcpIHtcclxuICAgICAgdGhpcy5jbG9zZVNtaWxleSgnZHMnKTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlldyc6XHJcbiAgICAgICAgdGhpcy52aWV3UmVzcG9uc2liaWxpdGllcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICB2aWV3UmVzcG9uc2liaWxpdGllcygpOiB2b2lkIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGxldCB1cmxTdWJzdHJpbmcgPSAnJztcclxuICAgIHRoaXMuZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSk7XHJcbiAgICBpZiAodGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgJiYgdGhpcy5yZXNwb25zaWJpbGl0eVBheWxvYWQuY3JlYXRlZF9ieSA9PSAwKSB7XHJcbiAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzL3Jlc3BvbnNpYmlsaXRpZXMtcXVldWUnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5UGF5bG9hZC5jcmVhdGVkX2J5ID4gMCAmJiB0aGlzLm1vZGUgIT09ICdFRElUJykge1xyXG4gICAgICB1cmxTdWJzdHJpbmcgPSAnY29tcGxpYW5jZS9tYW5hZ2UtcmVzcG9uc2liaWxpdGllcy9vdmVyc2lnaHQtcmVzcG9uc2liaWxpdGllcz90YWI9NCZwYWdlPTEnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXRpZXMnO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy8jLycgKyB1cmxTdWJzdHJpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL2NvbXBsaWFuY2UvIy8nICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgIT09ICdFRElUJykge1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VTbWlsZXkoJ2RzJylcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSk7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yZXNwb25zaWJpbGl0eURhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gIH1cclxuICAvLyBmb3IgZWRpdCByZXNwb25zaWJpbGl0eVxyXG4gIGZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscyxcclxuICAgICAgd2luZG93OiBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXMsXHJcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8uZmFpbGVkX2FmdGVyX2RheXMsXHJcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogZXZlbnQuZmFpbGVkX3RpbWVfdXRjLFxyXG4gICAgICBsaWZlY3ljbGVEZXRhaWxzOiBldmVudD8ubGlmZWN5Y2xlX2RldGFpbHMsXHJcbiAgICAgIHN0YXJ0RnJvbTogTnVtYmVyKGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjKSxcclxuICAgICAgdGltZUluMjRIcjogZXZlbnQuZnJlcXVlbmN5X3RpbWUsXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXHJcbiAgICAgIHN0YXJ0RGF0ZTogTnVtYmVyKGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjKSxcclxuICAgICAgcmVwb3J0SWQ6IGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDAsXHJcbiAgICAgIHRpbWVJbjEyaHI6IHRoaXMuZnJlcXVlbmN5U2VydmljZS50aW1lSW4xMihldmVudC5mcmVxdWVuY3lfdGltZSAhPSAnJyA/IGV2ZW50LmZyZXF1ZW5jeV90aW1lIDogJzIzOjU5OjAwJylcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZyZXF1ZW5jeURhdGEoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBmcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5wYXR0ZXJuID0gZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZFRpbWUgPSBldmVudD8uZnJlcXVlbmN5X3RpbWU7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gZXZlbnQ/LnJlbWluZGVyX2JlZm9yZV9kYXlzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IGV2ZW50Py5mYWlsZWRfYWZ0ZXJfZGF5cztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5saWZlY3ljbGUgPSBldmVudD8ubGlmZWN5Y2xlX2RldGFpbHM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc3RhcnREYXRlID0gZXZlbnQ/LnN0YXJ0X29mX2RheV91dGM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSBldmVudD8ub25fY29tcGxldGlvbl9vZlswXSA/PyAwO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gZXZlbnQ/LmRvbV91dGM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IGV2ZW50Py5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGV2ZW50Py5wbGFjZWhvbGRlcjtcclxuICB9XHJcblxyXG4gIGZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaW52YWxpZFR5cGUgPT09ICd3aGVuJykge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSBldmVudC5wYXR0ZXJuO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPSAoZXZlbnQuY2FzZSA9PT0gXCJkYWlseVwiKSA/IDAgOiBldmVudC53aW5kb3dcclxuICAgIC8vdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPSBldmVudC53aW5kb3c7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50LmZhaWxlZEFmdGVyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX3RpbWVfdXRjID0gZXZlbnQuZmFpbGVkX3RpbWVfdXRjO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlmZWN5Y2xlRGV0YWlscyA9IGV2ZW50LmxpZmVjeWNsZURldGFpbHM7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXBvcnRJZCA9IGV2ZW50LnJlcG9ydElkID8/IDA7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSBldmVudC5zdGFydEZyb207XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS50aW1lSW4yNEhyID0gZXZlbnQudGltZUluMjRIcjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCBmYWxzZSk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogZXZlbnQucGF0dGVybixcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXHJcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXHJcbiAgICAgIGZhaWxlZF9hZnRlcl9kYXlzOiBldmVudC5mYWlsZWRBZnRlcixcclxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXHJcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcclxuICAgICAgb25fY29tcGxldGlvbl9vZjogW2V2ZW50LnJlcG9ydElkXSxcclxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5wbGFjZWhvbGRlclxyXG4gICAgfTtcclxuICAgIHRoaXMuZnJlcXVlbmN5UG9wdWxhdGlvbihwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQmxhbmsoZGF0YTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBsZXQgdGV4dCA9IGRhdGE7XHJcbiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcJm5ic3A7L2csICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJdCB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyBhIHN0cmluZy5cclxuICAqIEBwYXJhbSB7YW55fSByZXMgLSBhbnkgPSB7XHJcbiAgKi9cclxuICBnZXRGcmVxdWVuY3lQbGFjZWhvbGRlcihyZXM6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHJlcy5mcmVxdWVuY3lfZGV0YWlscykge1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeURldGFpbHMgPSByZXM/LmZyZXF1ZW5jeV9kZXRhaWxzLnNwbGl0KCd+Jyk7XHJcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5VGltZSA9IHJlcz8uZnJlcXVlbmN5X3RpbWUgPT09ICcwMDowMDowMCcgPyAnMTI6MDAgYW0nIDogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKHJlcz8uZnJlcXVlbmN5X3RpbWUpO1xyXG4gICAgICAgIHN3aXRjaCAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1swXSkpIHtcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdGhpcy5nZXREYWlseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgdGhpcy5nZXRXZWVrbHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TW9udGhseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgdGhpcy5nZXRRdWFydGVybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDk6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Qmlhbm51YWxQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0WWVhcmx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZU9iamVjdCA9IG5ldyBEYXRlKG1vbWVudChmcmVxdWVuY3lEZXRhaWxzWzFdICsgJy0nICsgZnJlcXVlbmN5RGV0YWlsc1syXSArICctJyArIGZyZXF1ZW5jeURldGFpbHNbM10gKyAnIDAwOjAwOjAwJywgJ1lZWVktTU0tREQgSEg6bW06c3MnKS51bml4KCkgKiAxMDAwKTtcclxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICAgICAgJ09uZSBUaW1lICcgKyBkYXRlT2JqZWN0LmdldERhdGUoKSArICcgJyArIHRoaXMuc2hvcnRNb250aFtkYXRlT2JqZWN0LmdldE1vbnRoKCldICsgJyAnICsgZGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgdGhpcy5nZXRSYW5kb21QbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnWW91IGhhdmUgc2VsZWN0ZWQgYW4gb25nb2luZyBmcmVxdWVuY3kuJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgdGhpcy5nZXRPbkNvbXBsZXRpb25PZihmcmVxdWVuY3lEZXRhaWxzLCByZXM/Lm9uX2NvbXBsZXRpb25fb2ZbMF0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuLyoqXHJcbiAqIEl0IGdldHMgdGhlIGZyZXF1ZW5jeSBkZXRhaWxzIGFuZCByZXBvcnQgaWQsIHRoZW4gaXQgc2V0cyB0aGUgZnJlcXVlbmN5IHBsYWNlaG9sZGVyIHRvIHRoZSBmcmVxdWVuY3lcclxuICogZGV0YWlscyBhbmQgdGhlbiBpdCBnZXRzIHRoZSBvbiBjb21wbGV0aW9uIG9mIHJlc3BvbnNpYmlsaXR5IGFuZCBzZXRzIHRoZSBmcmVxdWVuY3kgcGxhY2Vob2xkZXIgdG9cclxuICogdGhlIGZyZXF1ZW5jeSBkZXRhaWxzIGFuZCB0aGUgcmVwb3J0IG5hbWUuXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzBdID0mZ3Q7IFwiMVwiXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXBvcnRJZCAtIG51bWJlclxyXG4gKi9cclxuICBnZXRPbkNvbXBsZXRpb25PZihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIHJlcG9ydElkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyAnICsgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMSA/ICdkYXlzJyA6ICdkYXknKSArICcgYWZ0ZXIgY29tcGxldGlvbiBvZiAnO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmdldE9uQ29tcGxldGlvbk9mUmVzcG9uc2liaWxpdHkoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcG9ydERldGFpbHMgPSByZXMuZmluZCgoZWxlOiBhbnkpID0+IGVsZS5SZXBvcnRJZCA9PSByZXBvcnRJZCk7XHJcbiAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyAnICsgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMSA/ICdkYXlzJyA6ICdkYXknKSArICcgYWZ0ZXIgY29tcGxldGlvbiBvZiAnICsgKHJlcG9ydERldGFpbHMgPyByZXBvcnREZXRhaWxzLnJlcG9ydF9uYW1lIDogJycpO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIFwiSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbM10gaXMgMSwgdGhlbiBzZXQgdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIHRvICdEYWlseSBieSAnICsgZnJlcXVlbmN5VGltZSxcclxuICogb3RoZXJ3aXNlIGlmIGZyZXF1ZW5jeURldGFpbHNbM10gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gc2V0IHRoZSBmcmVxdWVuY3lQbGFjZWhvbGRlciB0byAnRXZlcnkgJyArXHJcbiAqIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pICsgJyBkYXlzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lLlwiXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzAsIDAsIDAsIDFdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMjowMCBBTVwiXHJcbiAqL1xyXG4gIGdldERhaWx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcclxuICAgIHtcclxuICAgICAgZnJlcXVlbmN5RGV0YWlscyA9IGZyZXF1ZW5jeURldGFpbHMubWFwKE51bWJlcik7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRGFpbHkgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAnICsgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgKyAnIGRheXMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogSXQgdGFrZXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzLlxyXG4gKlxyXG4gKiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMsIGxpa2UgdGhpczpcclxuICpcclxuICogZ2V0V2Vla2x5UGxhY2Vob2xkZXIoW1wiMVwiLFwiMiwzLDQsNSw2LDdcIixcIjFcIixcIjFcIl0sIFwiMTA6MDAgQU1cIilcclxuICpcclxuICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzLCBsaWtlIHRoaXM6XHJcbiAqXHJcbiAqIFwiRXZlcnkgTW9uZGF5LFR1ZXNkYXksV2VkbmVzZGF5LFRodXJzZGF5LEZyaWRheSxTYXR1cmRheSBieSAxMDowMCBBTVwiPC9jb2RlPlxyXG4gKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxLDIsMyw0LDVcIiwgXCJcIiwgXCIxXCIsIFwiXCJdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAqL1xyXG4gIGdldFdlZWtseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF5ID0gZnJlcXVlbmN5RGV0YWlsc1sxXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmRheU5hbWVbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRXZlcnkgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSBhbHRlcm5hdGUgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAzcmQgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRXZlcnkgJyArIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoICcgKyBzZWxlY3RlZERheS5qb2luKCkgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEl0IHRha2VzIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBudW1iZXJzLCBjb252ZXJ0cyB0aGVtIHRvIG1vbnRoIG5hbWVzLCBhbmQgdGhlbiBhZGRzIHRoZW0gdG8gYVxyXG4gKiBzZW50ZW5jZS5cclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMVwiLCBcIjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXCJdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAqL1xyXG4gIGdldE1vbnRobHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGVsZSkgLSAxXTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMXN0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEgfHwgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICogSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gaXMgMSwgMiwgMywgMjEsIDIyLCAyMywgb3IgZ3JlYXRlciB0aGFuIDMsIHRoZW4gc2V0IHRoZVxyXG4gICogZnJlcXVlbmN5UGxhY2Vob2xkZXIgdG8gYSBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBhbmQgdGhlIGZyZXF1ZW5jeURldGFpbHNbMl1cclxuICAqIGFuZCB0aGUgZnJlcXVlbmN5VGltZS5cclxuICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gW1wiM1wiLCBcIjFcIiwgXCIxLDIsM1wiXVxyXG4gICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAqL1xyXG4gIGdldFF1YXJ0ZXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHF1YXJ0ZXJseSA9IFsnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLCAnRmVicnVhcnksIE1heSwgQXVndXN0LCBOb3ZlbWJlcicsICcgTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInXTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICczcmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mIGV2ZXJ5ICcgKyBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycyBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbW9udGggbmFtZXMuXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMVwiLCBcIjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXCJdXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAgKi9cclxuICBnZXRCaWFubnVhbFBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyBsZXNzIHRoYW4gMiwgdGhlbiB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgaXMgc2V0IHRvIHRoZSAxc3QsIDJuZCxcclxuICAqIDNyZCwgb3IgbnRoIG9mIGV2ZXJ5IG1vbnRoIGJ5IGZyZXF1ZW5jeVRpbWUuXHJcbiAgKlxyXG4gICogSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIGlzIHNldCB0byB0aGUgMXN0LCAybmQsXHJcbiAgKiAzcmQsIG9yIG50aCBvZiBldmVyeSBtb250aCwgSW50ZXJ2YWw6IGV2ZXJ5IHllYXJTZXF1ZW5jZSB5ZWFycyBieSBmcmVxdWVuY3lUaW1lLlxyXG4gICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCJZZWFybHlcIiwgXCIxXCIsIFwiMVwiLCBcIjFcIl1cclxuICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAgKi9cclxuICBnZXRZZWFybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCB5ZWFyU2VxdWVuY2UgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA+IDAgPyBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA6IDE7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA8IDIpIHtcclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMXN0IG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMikge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdzdCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnbmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAxKSB7XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3QgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnLCBJbnRlcnZhbDogZXZlcnkgJyArIHllYXJTZXF1ZW5jZSArICcgeWVhcnMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcsIEludGVydmFsOiBldmVyeSAnICsgeWVhclNlcXVlbmNlICsgJyB5ZWFycyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICd0aCBvZiAgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxIHx8IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSkge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogSXQgdGFrZXMgYSBmcmVxdWVuY3lEZXRhaWxzIGFycmF5IGFuZCBhIGZyZXF1ZW5jeVRpbWUgYXJyYXkgYW5kIHJldHVybnMgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzQsMSwxLDFdXHJcbiAqL1xyXG4gIGdldFJhbmRvbVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICBjb25zdCBxdWFydGVybHkgPSBbJ0phbnVhcnksIEFwcmlsLCBKdWx5LCBPY3RvYmVyJywgJ0ZlYnJ1YXJ5LCBNYXksIEF1Z3VzdCwgTm92ZW1iZXInLCAnIE1hcmNoLCBKdW5lLCBTZXB0ZW1iZXIsIERlY2VtYmVyJ107XHJcbiAgICB7XHJcbiAgICAgIHN3aXRjaCAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5IHdlZWsgZm9yICcgKyBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyByYW5kb20gaW5zdGFuY2VzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICAnIEV2ZXJ5ICcgK1xyXG4gICAgICAgICAgICBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cclxuICAgICAgICAgICAgfSkgK1xyXG4gICAgICAgICAgICAnIGZvciAnICtcclxuICAgICAgICAgICAgZnJlcXVlbmN5RGV0YWlsc1szXSArXHJcbiAgICAgICAgICAgICcgcmFuZG9tIGluc3RhbmNlcyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5ICcgKyBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICsgJyBmb3IgJyArIGZyZXF1ZW5jeURldGFpbHNbM10gKyAnIHJhbmRvbSBpbnN0YW5jZXMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSB5ZWFyIGZvciAnICsgZnJlcXVlbmN5RGV0YWlsc1szXSArICcgcmFuZG9tIGluc3RhbmNlcyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogXCJXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgZWRpdCBidXR0b24sIHRoZSBlZGl0IGJ1dHRvbiBpcyBoaWRkZW4gYW5kIHRoZSBpbnB1dCBmaWVsZCBpcyBzaG93bi5cclxuICogV2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGlucHV0IGZpZWxkLCB0aGUgaW5wdXQgZmllbGQgaXMgaGlkZGVuIGFuZCB0aGUgZWRpdCBidXR0b24gaXMgc2hvd24uXCJcclxuICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBmdW5jdGlvblxyXG4gKi9cclxuICBvbkVkaXRXaGF0KGV2ZW50OiBhbnkpIHtcclxuXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIHRoaXMgd2lsbCBtYWtlIHRoZSBleGVjdXRpb24gYWZ0ZXIgdGhlIGFib3ZlIGJvb2xlYW4gaGFzIGNoYW5nZWRcclxuICAgICAgdGhpcy5pc0VkaXRXaGF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMud2hhdElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICpcclxuICAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHBhcmFtZXRlciBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzLlxyXG4gICogQHBhcmFtIHthbnl9IFtyZXNdIC0gaXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIEFQSVxyXG4gICovXHJcbiAgZ2V0RWRpdE1vcmVPcHRpb25zKHJlcz86IGFueSkge1xyXG4gICAgbGV0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlICE9PSAnJykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT0JKRUNUSVZFJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuT0JKRUNUSVZFID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSSVNLX0NMQVNTSUZJQ0FUSU9OJyk7XHJcbiAgICB0aGlzLm1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtLmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1BST0dSQU0nKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5QUk9HUkFNID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdFJlcXVpcmVkKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdGT1JNQVRFX0VWSURFTkNFJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuRk9STUFURV9FVklERU5DRSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUkMnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SQyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSRVZJRVdFUicpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJFVklFV0VSID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT1ZFUlNFRVInKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQVNTVVJBTkNFJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQVNTVVJBTkNFID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVxdWlyZXNBdWRpdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUkVRVUlSRVNfQVVESVQnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SRVFVSVJFU19BVURJVCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcy5xdWVzdGlvbm5haXJlX3R5cGUgPT09ICdhc3Nlc3NtZW50Jykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQVNTRVNTTUVOVCcpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkFTU0VTU01FTlQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXMucXVlc3Rpb25uYWlyZV90eXBlID09PSAnYXNzZXNzbWVudF9jaGVja3BvaW50Jykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQ0hFQ0tQT0lOVFNfTkVXJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRm9ybWF0ICYgRXZpZGVuY2VcclxuICB0ZXN0RnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZS50cmltKCkgIT09ICcnICYmIHRoaXMuaXNFZGl0V2hhdCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5pc0VkaXRXaGF0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kZXNjcmlwdGlvbiA9PSAnPGJyPicpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPSAnJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPT0gJzxicj4nKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2aWV3ZXJUeXBlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPSBldmVudCA9PT0gJ1NFUVVFTlRJQUwnID8gdHJ1ZSA6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFNhbXBsZURhdGEoZXZlbnQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IGV2ZW50O1xyXG4gICAgdGhpcy50ZW1wQ2hlY2tWYWx1ZSA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBJdCBwb3B1bGF0ZXMgYSBsaXN0IG9mIGFzc3VyYW5jZSBjYXRlZ29yaWVzIGJhc2VkIG9uIHRoZSB0ZXN0IHBsYW4gY2F0ZWdvcnkgc2VsZWN0ZWQuXHJcbiAqIEBwYXJhbSB7YW55fSB0ZXN0UGxhbkNhdGVnb3J5IC0gYW55XHJcbiAqL1xyXG4gIHBvcHVsYXRlQXNzdXJhbmNlTGlzdCh0ZXN0UGxhbkNhdGVnb3J5OiBhbnkpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZSA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0LCBbdGVzdFBsYW5DYXRlZ29yeT8uY2F0ZWdvcnlfaWRdLCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB0ZXN0UGxhbkNhdGVnb3J5O1xyXG4gICAgaWYgKHRlc3RQbGFuQ2F0ZWdvcnkuc2FtcGxlKSB7XHJcbiAgICAgIHRoaXMuaXNTYW1wbGUgPSB0cnVlXHJcbiAgICAgIHRoaXMuc2FtcGxlVmFsdWUgPSB0ZXN0UGxhbkNhdGVnb3J5LnNhbXBsZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRlc3RQbGFuQ2F0ZWdvcnkucGVyY2VudGFnZSkge1xyXG4gICAgICB0aGlzLmlzU2FtcGxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYW1wbGVQZXJjZW50YWdlID0gdGVzdFBsYW5DYXRlZ29yeS5wZXJjZW50YWdlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gMTtcclxuICAgIH1cclxuICAgIHRoaXMudGVtcENoZWNrVmFsdWUgPSB0aGlzLnNlbGVjdGVkU2FtcGxlO1xyXG4gICAgdGhpcy5zZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZSA9IHRlc3RQbGFuQ2F0ZWdvcnkuZnJlcXVlbmN5X3BhdHRlcm4gPyBwYXJzZUludCh0ZXN0UGxhbkNhdGVnb3J5LmZyZXF1ZW5jeV9wYXR0ZXJuLnNwbGl0KCd+JylbMl0pIDogMjtcclxuICAgIHRoaXMuYXVkaXRUaW1lID0gbW9tZW50KHRlc3RQbGFuQ2F0ZWdvcnk/LmZyZXF1ZW5jeV90aW1lLCAnSEg6bW06c3MnKS5mb3JtYXQoJ0hIOm1tIGEnKTtcclxuXHJcbiAgfVxyXG5cclxuICAvL29uIHNhbXBsZSB0b2dnbGUgb24vb2ZmXHJcbiAgY2hlY2tJbnB1dFZhbHVlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBrZXkgPSBldmVudC5jaGFyQ29kZTsgIC8vICAgICAgICAga2V5ID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gICAgcmV0dXJuICgoa2V5ID4gNDcgJiYga2V5IDwgNTgpIHx8IGtleSA9PSA0NSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHN3aXRjaEVuYWJsZShldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSB0aGlzLnRlbXBDaGVja1ZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IC0xXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiAgc2VsZWN0IEFzc2Vzc21lbnQgbGlzdCBhbmQgc2V0IGlkIHRvIHBheWxvYWRcclxuICBvbkFzc2Vzc21lbnRTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pc0Fzc2Vzc21lbnQgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSBldmVudDtcclxuICB9XHJcbiAgLy8gVE9ETzogUG9wdWxhdGUgYXNzZXNzbWVudCBkYXRhIGZyb20gYWxyZWFkeSBzZWxlY3RlZCBkYXRhXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYXNzZXNzbWVudERldGFpbHMgOiBzZWxlY3RlZCBhc3Nlc3NtZW50IGRldGFpbHMgbGlrZSBpdCdzIG9iamVjdCBpZCBhbmQgY2F0ZWdvcnlfaWRcclxuICAgKi9cclxuICBnZXRBc3Nlc3NtZW50RGV0YWlscyhhc3Nlc3NtZW50RGV0YWlsczogYW55LCB0eXBlPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3Nlc3NtZW50RGV0YWlsc0J5SUQoYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2Fzc2Vzc21lbnQnKSB7XHJcblxyXG4gICAgICAgICAgY29uc3QgY2F0ZWdvcnlEZXRhaWxzID0gcmVzWzBdLmNhdGVnb3J5LmZpbmQoKGVsZTogYW55KSA9PiBlbGUuX2lkID09IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuQVNTRVNTTUVOVCA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBhc3Nlc3NtZW50RGF0YSA9IHtcclxuICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkLFxyXG4gICAgICAgICAgICBhc3Nlc3NtZW50X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxyXG4gICAgICAgICAgICBhc3Nlc3NtZW50RGV0YWlsczoge1xyXG4gICAgICAgICAgICAgIGlkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxyXG4gICAgICAgICAgICAgIGFzc2Vzc21lbnRfbmFtZTogcmVzWzBdLmFzc2Vzc21lbnRfbmFtZSxcclxuICAgICAgICAgICAgICBxdWVzdGlvbnM6IHJlc1swXS5xdWVzdGlvbnNDb3VudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYXRlZ29yeV9kZXRhaWxzOiBjYXRlZ29yeURldGFpbHNcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFzc2Vzc21lbnREYXRhKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucG9zdEFzc2Vzc21lbnQoeyBhc3Nlc3NtZW50RGV0YWlsczogcmVzWzBdLnF1ZXN0aW9ucyB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBvblJlbW92ZUNoZWNrcG9pbnRzKHR5cGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5vblJlbW92aW5nQ2hlY2twb2ludC5lbWl0KHR5cGUpXHJcbiAgfVxyXG5cclxuICByZW1vdmVDaGVja3BvaW50KCkge1xyXG4gICAgdGhpcy5tb3JlT3B0aW9ucy5DSEVDS1BPSU5UUyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgPSBbXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgQXNzZXNzbWVudCBkZXRhaWxzXHJcbiAqL1xyXG4gIHBvc3RBc3Nlc3NtZW50KGV2ZW50OiBhbnkpIHtcclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5uZXdfY2hlY2twb2ludHMgPSBldmVudC5hc3Nlc3NtZW50RGV0YWlscztcclxuICAgIHRoaXMuY2hlY2twb2ludENvdW50ID0gZXZlbnQuYXNzZXNzbWVudERldGFpbHMuZWxlbWVudHMubGVuZ3RoO1xyXG4gICAgdGhpcy5jaGVja3BvaW50Q291bnRVcGRhdGVkLmVtaXQodGhpcy5jaGVja3BvaW50Q291bnQpO1xyXG4gICAgdGhpcy5zZXRJc1VwbG9hZGVkKGZhbHNlKVxyXG4gIH1cclxuXHJcblxyXG4gIHNldElzVXBsb2FkZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCFldmVudCkgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKClcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UucHJldmlld1BhbmVsLm5leHQoZXZlbnQpO1xyXG5cclxuICB9XHJcblxyXG4gIGNoZWNrRGVmYXVsdFByb2dyYW1PblJlbW92ZShwcm9ncmFtOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCc9PT0+MTEnLHRoaXMuc2VsZWN0ZWRQcm9ncmFtLCBwcm9ncmFtKVxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ubGlua2VkUHJvZ3JhbT8uZmluZEluZGV4KCAoZWw6IGFueSkgPT4gZWw/LmNhdGVnb3J5X2lkID09PSBwcm9ncmFtPy5jYXRlZ29yeV9pZCk7XHJcbiAgICBpZihpbmRleCAhPT0gLTEpe1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ubGlua2VkUHJvZ3JhbT8uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgY29uc3QgdXBkYXRlZENhdGVnb3JpZXMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uY2F0ZWdvcnk/LmZpbHRlcigoZWw6IGFueSkgPT4gIShlbCA9PT0gcHJvZ3JhbT8uY2F0ZWdvcnlfaWQgfHwgcHJvZ3JhbT8uY2hpbGRfaWQ/LmluY2x1ZGVzKGVsKSkpO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IHVwZGF0ZWRDYXRlZ29yaWVzO1xyXG4gICAgfVxyXG4gICAgLy8gaWYodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW0gJiYgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmNhdGVnb3J5X2lkID09PSBwcm9ncmFtPy5jYXRlZ29yeV9pZCkge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZygnPT09PicsdGhpcy5zZWxlY3RlZFByb2dyYW0sIHByb2dyYW0pXHJcbiAgICAvLyAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gW107XHJcbiAgICAvLyAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSBbXTtcclxuICAgIC8vICAgdGhpcy5maWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbSgpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGFuIGFycmF5IG9mIG51bWJlcnMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdW5pcXVlIG51bWJlcnMuXHJcbiAgICogQHBhcmFtIHthbnl9IGFycmF5IC0gVGhlIGFycmF5IHlvdSB3YW50IHRvIGdldCB0aGUgdW5pcXVlIHZhbHVlcyBmcm9tLlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMuXHJcbiAgICovXHJcbiAgZ2V0VW5pcXVlSWRzKGFycmF5OmFueSl7XHJcbiAgICBjb25zdCB1bmlxdWUgPSBbLi4ubmV3IFNldChhcnJheSldO1xyXG4gICAgcmV0dXJuIHVuaXF1ZTtcclxuICB9XHJcblxyXG4gIG9wZW5Bc3NpZ25lZUNoYW5nZUNvbmZpcm1hdGlvbihldmVudDogYW55KSB7XHJcbiAgICBpZihldmVudCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPSBcIkFOWV9PTkVcIlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID0gJyc7XHJcbiAgICAgIHRoaXMuYXNzaWduZWVUeXBlQ2hhbmdlLmVtaXQodHJ1ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogSWYgdGhlIG1vZGUgaXMgRURJVCwgZW1pdCB0aGUgZXZlbnQuXHJcbiAqIEBwYXJhbSB7YW55fSBldmVudCAtIGFueSAtIHRoZSBldmVudCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSByYWRpbyBidXR0b25cclxuICovXHJcbiAgb25SZXZpZXdlcldvcmtmbG93Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdyA9ICBldmVudCA9PT0gJ3NlcXVlbnRpYWwnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICBpZih0aGlzLm1vZGUgPT09ICdFRElUJyAmJiB0aGlzLmhhc1Jldmlld2VyKSB7XHJcbiAgICAgICAgdGhpcy5vblJldmlld2VyVHlwZUNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICAgICAgfVxyXG5cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
2423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1jb21wbGlhbmNlL3dvcmtmbG93LWNvbXBsaWFuY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVV4RSxNQUFNLE9BQU8sMkJBQTJCO0lBb1F0QyxZQUNVLFdBQXdCLEVBQ3hCLHFCQUE0QyxFQUM1QyxnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsUUFBeUIsRUFDekIsVUFBdUIsRUFDdkIsY0FBK0I7UUFOL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtR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QU07d0JBeU5QLFNBQVMsU0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9yZXNwb25zaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnJlcXVlbmN5U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZnJlcXVlbmN5L2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IFVpS2l0U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3VpLWtpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQcm9ncmFtc1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9wcm9ncmFtcy5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC13b3JrZmxvdy1jb21wbGlhbmNlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vd29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vd29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ10sXHJcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dDb21wbGlhbmNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4vKiBEZWZpbmluZyB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBvbmVudC4gKi9cclxuICBASW5wdXQoKSBtb2RlID0gJ0NSRUFURSc7XHJcbiAgQElucHV0KCkgcmVzcG9uc2liaWxpdHlJZCA9ICcnO1xyXG4gIEBJbnB1dCgpIGZyYW1ld29ya0RldGFpbHM6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKSBpc0VudHJ1c3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgnY2xvc2VPbkVzYycpIHNldCBjbG9zZU9uRXNjKGVzY2FwZUNvbmRpdGlvbjogYm9vbGVhbikge1xyXG4gICAgaWYgKGVzY2FwZUNvbmRpdGlvbikge1xyXG4gICAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByZXNldEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGVja3BvaW50Q291bnRVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByY1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIG9wZW5lZEZyb20gITogYW55OyAvL3doZW4gb3BlbmVkIGZyb20gcmlzayB0cmVhdG1lbnQgaXQgd2lsbCBiZSAnUklTS19UUkVBVE1FTlQnXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRSQzogbnVtYmVyID0gMDsgLy8gNC01IGRpZ2l0IGlkIG9mIHNlbGVjdGVkIHJjIGJ5IGRlZmF1bHQgd2hlbiBvcGVuZWQgZnJvbSByaXNrIHRyZWF0bWVudFxyXG4gIC8vIEBJbnB1dCgpIHNlbGVjdGVkUHJvZ3JhbTogYW55ID0gbnVsbDtcclxuICBzZWxlY3RlZFByb2dyYW0gOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgnc2VsZWN0ZWRQcm9ncmFtJykgc2V0IHNldFNlbGVjdGVkUHJvZ3JhbShwcm9ncmFtOiBhbnkpIHtcclxuICAgIGlmKHByb2dyYW0gJiYgT2JqZWN0LmtleXMocHJvZ3JhbSk/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSBbXTtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlua2VkUHJvZ3JhbSA9IFtdO1xyXG4gICAgICAvLyB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtLnB1c2gocHJvZ3JhbSk7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0ucHVzaChwcm9ncmFtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAvKiBDcmVhdGluZyBhbiBldmVudCBlbWl0dGVyLiAqL1xyXG4gICBAT3V0cHV0KCkgb25SZW1vdmluZ0NoZWNrcG9pbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICBAT3V0cHV0KCkgaXNBc3Nlc3NtZW50RGlzYWJsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgIEBPdXRwdXQoKSBhc3NpZ25lZVR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIGl0IHdpbGwgZW1pdCB3aGVuIGFzc2lnbmVlIHR5cGUgY2hhbmdlXHJcbiAgIEBPdXRwdXQoKSBvblJldmlld2VyVHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gaXQgd2lsbCBlbWl0IHdoZW4gcmV2aWV3ZXIgdHlwZSBjaGFuZ2VcclxuXHJcbiAgc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICBkZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgbW9kZTogJ3ByaW1lJyxcclxuICAgIGNvbG9yUGFsZXR0ZTogdHJ1ZSxcclxuICAgIGxpbms6IHRydWUsXHJcbiAgICBwbGFjZWhvbGRlcjogJ0FkZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbXBsZXRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5JyxcclxuICB9O1xyXG4gIHByb2dyYW1QZW9wbGVMaXN0OiBhbnkgPSB7XHJcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgIHJldmlld2Vyc0xpc3Q6IFtdLFxyXG4gICAgb3ZlcnNlZXJzTGlzdDogW10sXHJcbiAgfVxyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIHN1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gIGVkaXREZXRhaWxzITogYW55O1xyXG4gIHNtaWxleU1lc3NhZ2UgPSBgRG9uZSFgO1xyXG4gIGFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICB7IGJ1dHRvblRleHQ6ICdFbnRydXN0IE1vcmUgUmVzcG9uc2liaWxpdGllcycsIGNsYXNzOiAnd2hpdGUtYnRuJywgaWQ6ICdhZGRNb3JlJyB9LFxyXG4gICAgeyBidXR0b25UZXh0OiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJywgY2xhc3M6ICdibHVlLWJ0bicsIGlkOiAndmlldycgfSxcclxuICBdO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBtZW1iZXJJZCA9IDA7XHJcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xyXG4gIHJjTGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGFzc2lnbm9yc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBhc3NpZ25lZXNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBncm91cHNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRGcmFtZXdvcmtWYWx1ZXMhOiBhbnk7XHJcbiAgaGFzUmV2aWV3ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIC8vIHVzZXJzTGlzdDogYW55W10gPSBbXTtcclxuICBhc3NpZ25vcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGFzc2lnbmVlc0xpc3Q6IGFueVtdID0gW107XHJcbiAgcmV2aWV3ZXJzTGlzdDogYW55W10gPSBbXTtcclxuICBvdmVyc2VlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICBhbGxVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYmVoYWxmT2ZVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIGFsbENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYXNzdXJhbmNlUmVxdWlyZXNBdWRpdExpc3Q6IGFueVtdID0gW107XHJcbiAgZ3JvdXBzTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgYWRtaW5zTGlzdDogYW55W10gPSBbXTtcclxuICByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcclxuICBub25SZW1vdmFibGVVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIHJlc3BvbnNpYmlsaXR5Rm9ybTogYW55ID0ge1xyXG4gICAgYXNzaWdub3JzOiB7XHJcbiAgICAgIGVuYWJsZTogZmFsc2UsXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgcmVzcG9uc2liaWxpdHk6IHtcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiBmYWxzZSxcclxuICAgIH0sXHJcbiAgICBhc3NpZ25lZXM6IHtcclxuICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTEwnLFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGZyZXF1ZW5jeTogJycsXHJcbiAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICBvYmplY3RpdmU6ICcnLFxyXG4gICAgcmM6IFtdLFxyXG4gICAgY2F0ZWdvcnk6IFtdLFxyXG4gICAgcHJvZ3JhbTogW10sXHJcbiAgICBwcm9ncmFtX3NlbGVjdGVkX2lkczogW10sXHJcbiAgICBjaGVja3BvaW50SW5zdHJ1Y3Rpb246ICcnLFxyXG4gICAgY3VzdG9tVGFnczogW10sXHJcbiAgICBjaGVja3BvaW50czogW10sXHJcbiAgICByZXZpZXdlcnM6IHtcclxuICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxyXG4gICAgICByZXZpZXdGcmVxdWVuY3k6IHtcclxuICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IDIsXHJcbiAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMlxyXG4gICAgICB9LFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuXHJcbiAgICBvdmVyc2VlcnM6IHtcclxuICAgICAgbm90aWZ5TGlzdDogW10sXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcclxuICAgICAgZm9ybWF0UmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBmb3JtYXRGaWxlczogW10sXHJcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcclxuICAgICAgZXZpZGVuY2VSZXF1aXJlZDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgYXNzdXJhbmNlTGlzdDogW10sXHJcbiAgICByZXF1aXJlc0F1ZGl0TGlzdDogW10sXHJcbiAgICByaXNrQ2xhc3M6IDEsXHJcbiAgICByaXNrTWF0cml4OiAnMCwwLDAsMCwwLDAnLFxyXG4gICAgYXVkaXRfY2F0ZWdvcnlfZGV0YWlsczoge1xyXG4gICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgc2FtcGxlOiA1LFxyXG4gICAgICBwZXJjZW50YWdlOiAzMCxcclxuICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcxfjB+M34xJyxcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6ICcyMzo1OTowMCdcclxuICAgIH0sXHJcbiAgICBhc3Nlc3NtZW50OiB7XHJcbiAgICAgIGNhdGVnb3J5X2lkOiAnJywgYXNzZXNzbWVudF9pZDogJydcclxuICAgIH0sXHJcbiAgICBuZXdfY2hlY2twb2ludHM6IHt9LFxyXG4gICAgbGlua2VkUHJvZ3JhbTogW10sXHJcbiAgfTtcclxuICBtb3JlT3B0aW9uczogYW55ID0ge1xyXG4gICAgT0JKRUNUSVZFOiBmYWxzZSxcclxuICAgIFJDOiBmYWxzZSxcclxuICAgIENBVEVHT1JZOiBmYWxzZSxcclxuICAgIFBST0dSQU06IGZhbHNlLFxyXG4gICAgRk9STUFURV9FVklERU5DRTogZmFsc2UsXHJcbiAgICBDSEVDS1BPSU5UUzogZmFsc2UsXHJcbiAgICBBU1NFU1NNRU5UOiBmYWxzZSxcclxuICAgIFJJU0tfQ0xBU1NJRklDQVRJT046IGZhbHNlLFxyXG4gICAgUkVWSUVXRVI6IGZhbHNlLFxyXG4gICAgT1ZFUlNFRVI6IGZhbHNlLFxyXG4gICAgQVNTVVJBTkNFOiBmYWxzZSxcclxuICAgIEFQUFM6IGZhbHNlLFxyXG4gICAgUkVRVUlSRVNfQVVESVQ6IGZhbHNlLFxyXG4gICAgQ0hFQ0tQT0lOVFNfTkVXOiBmYWxzZVxyXG4gIH07XHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICBzaWRlU2VsZWN0b3JFbGVtZW50czogYW55ID0gWydhc3N1cmFuY2UnLCAnZnJhbWV3b3JrJywgJ2Fzc2lnbm9ycycsICdhc3NpZ25lZXMnLCAnY2F0ZWdvcnknLCAncHJvZ3JhbScsICdyYycsICdjaGVja3BvaW50cycsICdmcmVxdWVuY3knLCAncmV2aWV3ZXInLCAncmV2aWV3ZXJGcmVxdWVuY3knLCAnb3ZlcnNlZXInLCAnb3ZlcnNlZXJOb3RpZnknLCAncmlza0NhbGN1bGF0b3InLCAnaXNBc3Nlc3NtZW50JywgJ3JlcXVpcmVzX2F1ZGl0JywgJ2NoZWNrcG9pbnRzLW5ldyddO1xyXG5cclxuICBmb2N1cyA9IHtcclxuICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogZmFsc2UsXHJcbiAgICBkZXNjcmlwdGlvbjogZmFsc2UsXHJcbiAgICBvYmplY3RpdmU6IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIGNhdGVnb3JpZXM6IGFueSA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgc3RhbmRhcmRzOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgaW50ZXJuYWxDb250cm9sczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGFsbFByb2dyYW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICByaXNrQ2xhc3NpZmljYXRpb24gPSBbXHJcbiAgICB7IG5hbWU6ICdMb3cnLCB2YWx1ZTogMSwgY2xhc3M6ICdsb3cnIH0sXHJcbiAgICB7IG5hbWU6ICdMb3ctTWVkaXVtJywgdmFsdWU6IDIsIGNsYXNzOiAnbG93LW1lZCcgfSxcclxuICAgIHsgbmFtZTogJ01lZGl1bS1IaWdoJywgdmFsdWU6IDMsIGNsYXNzOiAnbWVkLWhpZ2gnIH0sXHJcbiAgICB7IG5hbWU6ICdIaWdoJywgdmFsdWU6IDQsIGNsYXNzOiAnaGlnaCcgfVxyXG4gIF07XHJcblxyXG4gIGFzc2lnbm9yTW9kZSA9ICdjaGVja2JveCc7XHJcbiAgcmNNb2RlID0gJ2NoZWNrYm94JztcclxuICBpbnZhbGlkVHlwZSA9ICcnO1xyXG4gIHJlc3BvbnNpYmlsaXR5UGF5bG9hZCE6IGFueTtcclxuICBhc3NpZ25lZVJhZGlvU2VsZWN0ID0gZmFsc2U7XHJcbiAgcHJvZ3JhbXNMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyBmcmVxdWVuY3kgdmFyaWFibGUgZGVjbGFyYXRpb25cclxuICBmcmVxdWVuY3lEZXRhaWxzID0ge1xyXG4gICAgcGF0dGVybjogJycsXHJcbiAgICBub3RpZmljYXRpb25QZW5kaW5nOiAwLFxyXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXHJcbiAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcclxuICAgIHNlbGVjdGVkUmVwb3J0OiAwLFxyXG4gICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXHJcbiAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgIHN0YXJ0T25UaGVEYXk6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgIHdpbmRvdzogMCxcclxuICAgIGZhaWxlZDogMCxcclxuICAgIHRpbWU6ICcxMTo1OSBwbScsXHJcbiAgICBmYWlsZWRUaW1lOiAnJyxcclxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDBcclxuICB9O1xyXG4gIGZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0hvdyBvZnRlbiBkb2VzIHRoZSByZXNwb25zaWJpbGl0eSBvY2N1cj8nO1xyXG4gIHNob3J0TW9udGg6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICBpc0VkaXRXaGF0OiBCb29sZWFuID0gdHJ1ZTtcclxuICBpc0ZyYW1ld29ya0F2YWlsYWJsZSA9IDE7XHJcbiAgaXNOb3RpZmljYXRpb25QZW5kaW5nID0gMDtcclxuXHJcbiAgYXNzdXJhbmNlRmxhZyE6IGFueTtcclxuICByaXNrQ2xhc3NpZmljYXRpb25GbGFnITogYW55O1xyXG4gIGhpZGRlbkxpc3Q6IGFueVtdID0gW107XHJcbiAgc3Vic2NyaXB0aW9uRGV0YWlscyE6IGFueTtcclxuICBpc1Jpc2tFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzRHVwbGljYXRlRW50cnVzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGF1ZGl0VGltZTogc3RyaW5nID0gJzExOjU5IHBtJztcclxuICBzZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZTogbnVtYmVyID0gMjtcclxuICBzYW1wbGVWYWx1ZTogYW55O1xyXG4gIHNhbXBsZVBlcmNlbnRhZ2U6IGFueTtcclxuICBzZWxlY3RlZFNhbXBsZSE6IG51bWJlcjtcclxuICBpc1NhbXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRlbXBDaGVja1ZhbHVlOiBudW1iZXIgPSAtMTtcclxuICBpc0Fzc2Vzc21lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtYW5hZ2VQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hlY2twb2ludENvdW50OiBudW1iZXIgPSAwO1xyXG4gIHJvbGVCYXNlZFBlcm1pc3Npb25zICE6IGFueTtcclxuICBpc0dyb3VwQXNzaWduZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByZXNwb25zaWJpbGl0eURhdGEgITogYW55O1xyXG4gIG9yaWdpbmFsQXNzaWduZWUgITogYW55O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnd2hhdCcpIHdoYXRJbnB1dCE6IEVsZW1lbnRSZWY7XHJcbiAgdW5TdWJzY3JpYmVQcm9ncmFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5U2VydmljZSxcclxuICAgIHByaXZhdGUgdWlLaXRTZXJ2aWNlOiBVaUtpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBlcm1pc3Npb246IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtU2VydmljZTogUHJvZ3JhbXNTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb21wbGlhbmNlU3VibW9kdWxlID0gcmVzLnJvbGVBY3Rpb25zW3Jlcy5yb2xlQWN0aW9ucy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUubW9kdWxlTmFtZSA9PSAnY29tcGxpYW5jZScpXS5zdWJNb2R1bGU7XHJcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gY29tcGxpYW5jZVN1Ym1vZHVsZVtjb21wbGlhbmNlU3VibW9kdWxlLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5zdWJNb2R1bGVOYW1lID09ICdQcm9ncmFtcycpXS5wZXJtaXNzaW9ucztcclxuICAgICAgdGhpcy5tYW5hZ2VQZXJtaXNzaW9uID0gKHBlcm1pc3Npb25zW3Blcm1pc3Npb25zLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5uYW1lID09ICdtYW5hZ2UgcHJvZ3JhbXMnKV0uZW5hYmxlKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMubWFuYWdlUGVybWlzc2lvbikge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdDQVRFR09SWScpO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdQUk9HUkFNJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yeUxpc3QoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgLy8gICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lID0gXCJhYmNkZWZcIlxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0FTU0VTU01FTlQnKTtcclxuICAgIHRoaXMuZ2V0UkNMaXN0KCk7XHJcbiAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QoKTtcclxuICAgIHRoaXMuZ2V0QXNzaWduZWVzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRBc3N1cmFuY2UoKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRBc3N1cmFuY2VGb3JSZXF1aXJlc0F1ZGl0KCk7XHJcbiAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICB0aGlzLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKTtcclxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHRoaXMuc2hvcnRNb250aCA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5tb250aEFycmF5Lm1hcChtb250aCA9PiBtb250aC5zdWJzdHJpbmcoMCwgMykpO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpIHtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKTtcclxuICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNSaXNrRW5hYmxlID0gcmVzLmVuYWJsZV9yaXNrY2xhc3MgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGlmICghcmVzLmVuYWJsZV9yaXNrY2xhc3MpIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUklTS19DTEFTU0lGSUNBVElPTicpO1xyXG4gICAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGV0YWlscyA9IHJlcztcclxuICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uRGV0YWlsc1swXS5hc3Nlc3NtZW50X2ZsYWcpIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QgPSB0aGlzLmhpZGRlbkxpc3QuZmlsdGVyKGVsZSA9PiBlbGUgIT09ICdBU1NFU1NNRU5UJylcclxuICAgICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gIH1cclxuICBhY3RpdmF0ZVNlbGVjdG9yKHR5cGU6IGFueSwgZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSBldmVudCA/IHR5cGUgOiAnJztcclxuICAgIGlmICh0eXBlID09PSAnY2hlY2twb2ludHMtbmV3JykgdGhpcy5hdXRoU2VydmljZS5wcmV2aWV3UGFuZWwubmV4dChldmVudCk7XHJcbiAgICBpZiAodGhpcy5zaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3aGF0Q2hhbmdlZChldmVudDogYW55KSB7XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlO1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmludmFsaWRUeXBlID09PSAnd2hhdCcpIHtcclxuICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGFjdGl2ZURlc2VsZWN0b3IoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBhZGRNb3JlSW5mbyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcclxuICAgIGlmIChldmVudC5jb2RlID09PSAnQ0hFQ0tQT0lOVFNfTkVXJyAmJiBldmVudC5jaGVja3BvaW50X25ldyAmJiB0aGlzLmNoZWNrcG9pbnRDb3VudCkge1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnNbZXZlbnQuY29kZV0gPSBldmVudC5jaGVja2VkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UkNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlPy5nZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QocGFyYW1zKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYywgJ2l0ZW1faWQnKTtcclxuICAgICAgY29uc3QgUkMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGlkcy5pbmNsdWRlcyhlbGVtZW50Lml0ZW1faWQpKTtcclxuICAgICAgaWYgKFJDPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IFJDO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZEZyb20gPT09ICdSSVNLX1RSRUFUTUVOVCcpIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IHRoaXMuc2V0TGlzdCh0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsIFt0aGlzLnNlbGVjdGVkUkNdLCAnaXRlbV9pZCcpO1xyXG4gICAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgICAgICAgIHsgYnV0dG9uVGV4dDogJ0dvIHRvIHJpc2sgdHJlYXRtZW50JywgY2xhc3M6ICdibHVlLWJ0bicsIGlkOiAndmlldycgfSxcclxuICAgICAgICBdXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KFsnUkMnXSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckRldGFpbHMoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZyA9IHJlcy5ub3RpZmljYXRpb25fcGVuZGluZ19mbGFnO1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9IHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID8gJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyBpbiBRdWV1ZScgOiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRBc3N1cmFuY2UoKSB7XHJcbiAgICB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3N1cmFuY2UoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QgPSByZXM7XHJcbiAgICAgIGlmICgodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzICYmICF0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHNbMF0uYXNzdXJhbmNlX2ZsYWcpIHx8IHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQVNTVVJBTkNFJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gICAgICB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzdXJhbmNlRm9yUmVxdWlyZXNBdWRpdCgpIHtcclxuICAgIC8vIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEFzc3VyYW5jZUZvclJlcXVpcmVzQXVkaXQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlUmVxdWlyZXNBdWRpdExpc3QgPSByZXM7XHJcbiAgICAgIGlmICgodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzICYmICF0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHNbMF0uYXVkaXRfZmxhZykgfHwgdGhpcy5hc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdSRVFVSVJFU19BVURJVCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcclxuICAgICAgLy8gdGhpcy5hc3N1cmFuY2VDYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAvLyB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldE9yZ2FuaXphdGlvbkRldGFpbHMoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNGcmFtZXdvcmtBdmFpbGFibGUgPSByZXM/LmVuYWJsZV9yZXNwb25zaWJpbGl0eV9mcmFtZXdvcms7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0Q2F0ZWdvcmllc0xpc3QoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHJlcztcclxuICAgICAgdGhpcy5hbGxDYXRlZ29yaWVzID0gY2xvbmVEZWVwKHJlcyk7XHJcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLm90aGVycy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDEpIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5yZWd1bGF0aW9ucy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDIpIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5zdGFuZGFyZHMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAzKSB7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMuaW50ZXJuYWxDb250cm9scy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBmaWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbShwcm9ncmFtX2lkPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnVuU3Vic2NyaWJlUHJvZ3JhbS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuU3Vic2NyaWJlUHJvZ3JhbS5jb21wbGV0ZSgpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgdGhpcy5nZXRQZW9wbGVMaXN0QWdhaW5zdFBJRChwcm9ncmFtX2lkKTtcclxuICAgICAgdGhpcy5nZXRSQ0xpc3QocHJvZ3JhbV9pZClcclxuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KHByb2dyYW1faWQpO1xyXG4gICAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QocHJvZ3JhbV9pZCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRBc3NpZ25lZXNMaXN0KCk7XHJcbiAgICAgIHRoaXMuZ2V0UkNMaXN0KCk7XHJcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xyXG4gICAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1EZXRhaWxzKHByb2dyYW1JZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5nZXRQcm9ncmFtKHByb2dyYW1JZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXM/LmFzc2Vzc21lbnQgJiYgcmVzPy5hc3Nlc3NtZW50Py5sZW5ndGggJiYgT2JqZWN0LmtleXModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQpPy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yeUFzc2Vzc21lbnQgPSByZXM/LmFzc2Vzc21lbnQuZmlsdGVyKChhc3Nlc3NtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50Py5jYXRlZ29yeV9pZCA9PT0gYXNzZXNzbWVudD8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIGlmKGNhdGVnb3J5QXNzZXNzbWVudD8ubGVuZ3RoICYmIGNhdGVnb3J5QXNzZXNzbWVudFswXT8uYXNzZXNzbWVudElkcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCBpc0V4aXN0ID0gY2F0ZWdvcnlBc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50SWRzLmluY2x1ZGVzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkKTtcclxuICAgICAgICAgIGlmKCFpc0V4aXN0KXtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzZXNzbWVudCA9IHsgYXNzZXNzbWVudF9pZDogXCJcIiwgY2F0ZWdvcnlfaWQ6IFwiXCIgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0geyBhc3Nlc3NtZW50X2lkOiBcIlwiLCBjYXRlZ29yeV9pZDogXCJcIiB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0ocHJvZ3JhbV9pZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdldFBlb3BsZUxpc3RBZ2FpbnN0UElEKHByb2dyYW1faWQpO1xyXG4gICAgdGhpcy5nZXRSQ0xpc3QocHJvZ3JhbV9pZClcclxuICAgIHRoaXMuZ2V0R3JvdXBzTGlzdChwcm9ncmFtX2lkKTtcclxuICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdChwcm9ncmFtX2lkKTtcclxuICB9XHJcblxyXG4gIGdldEFzc2lnbm9yc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0QXNzaWdub3JzTGlzdChwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5iZWhhbGZPZlVzZXJzTGlzdCA9IHJlcztcclxuICAgICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZXNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblBlb3BsZShwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5hbGxVc2Vyc0xpc3QgPSByZXMubWFwKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xyXG4gICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZW9wbGVMaXN0QWdhaW5zdFBJRChwcm9ncmFtX2lkOiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblBlb3BsZShwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0ID0gcmVzLmFzc2lnbmVlLm1hcCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcclxuICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCA9IHJlcy5vdmVyc2Vlci5tYXAoKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHVzZXIubWVtYmVyX25hbWUgPSB1c2VyLmVtcGxveWVlX25hbWU7XHJcbiAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJldmlld2Vyc0xpc3QgPSByZXMucmV2aWV3ZXIubWFwKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xyXG4gICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wcm9ncmFtUGVvcGxlTGlzdCA9IHtcclxuICAgICAgICBhc3NpZ25lZXNMaXN0OiBbLi4uIG5ldyBTZXQodGhpcy5hc3NpZ25lZXNMaXN0KV0sXHJcbiAgICAgICAgcmV2aWV3ZXJzTGlzdDogWy4uLiBuZXcgU2V0KHRoaXMucmV2aWV3ZXJzTGlzdCldLFxyXG4gICAgICAgIG92ZXJzZWVyc0xpc3Q6IFsuLi4gbmV3IFNldCh0aGlzLm92ZXJzZWVyc0xpc3QpXSxcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfaWRzIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Lmxlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICBjb25zdCBhbGxJZHMgPSBbLi4ubmV3IFNldChpZHMpLCAuLi5uZXcgU2V0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcyldXHJcbiAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbElkcy5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcy5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfcmV2aWV3ZXJzIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgY29uc3QgYWxsSWRzID0gWy4uLm5ldyBTZXQoaWRzKSwgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfcmV2aWV3ZXJzKV1cclxuICAgICAgICBjb25zdCByZXZpZXdlcnMgPSB0aGlzLnJldmlld2Vyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbElkcy5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIC8vIGNvbnN0IHJldmlld2VycyA9IHRoaXMucmV2aWV3ZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X3Jldmlld2Vycy5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIGlmIChyZXZpZXdlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IHJldmlld2VycztcclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkVWSUVXRVIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X292ZXJzZWVycyB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Py5sZW5ndGggfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdCwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgIGNvbnN0IGFsbERlZmF1bHRDQ0lkcyA9IFsuLi5uZXcgU2V0KGlkcyksIC4uLm5ldyBTZXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbCldXHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJzQ0MgPSB0aGlzLm92ZXJzZWVyc0xpc3Q/LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBhbGxEZWZhdWx0Q0NJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIC8vIGNvbnN0IG92ZXJzZWVycyA9IHRoaXMub3ZlcnNlZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X292ZXJzZWVycy5jY19lbWFpbC5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIGNvbnN0IG5vdGlmeUxpc3RJZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgIGNvbnN0IGFsbERlZmF1bHRDQ0ZhaWx1cmVJZHMgPSBbLi4ubmV3IFNldChub3RpZnlMaXN0SWRzKSwgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWwpXVxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyc0NDRmFpbHVyZSA9IHRoaXMub3ZlcnNlZXJzTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbERlZmF1bHRDQ0ZhaWx1cmVJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIC8vIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IHRoaXMub3ZlcnNlZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X292ZXJzZWVycy5mYWlsdXJlX2NjX2VtYWlsLmluY2x1ZGVzKGVsZW1lbnQubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgLy8gaWYgKG92ZXJzZWVycy5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gb3ZlcnNlZXJzO1xyXG4gICAgICAgIC8vICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGlmIChub3RpZnlPdmVyc2VlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IG5vdGlmeU92ZXJzZWVycztcclxuICAgICAgICAvLyAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgaWYgKG92ZXJzZWVyc0NDLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBvdmVyc2VlcnNDQztcclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3ZlcnNlZXJzQ0NGYWlsdXJlLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBvdmVyc2VlcnNDQ0ZhaWx1cmU7XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1vcmVPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9yZU9wdGlvbnNba2V5XSkge1xyXG4gICAgICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goa2V5KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuXHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGdldEdyb3Vwc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uR3JvdXBzKHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy51blN1YnNjcmliZVByb2dyYW0pKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSByZXMgPz8gW107XHJcbiAgICAgIGNvbnN0IGdyb3VwczogYW55ID0gW107XHJcbiAgICAgIGRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgIGdyb3VwTmFtZTogZWxlbWVudC5ncm91cF9uYW1lLFxyXG4gICAgICAgICAgdXNlcklkczogZWxlbWVudC5tZW1iZXJfaWRzLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZ3JvdXBzLnB1c2gob2JqKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IGdyb3VwcztcclxuICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyAmJiBwcm9ncmFtX2lkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBkYXRhLmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzLmluY2x1ZGVzKGVsZW1lbnQuZ3JvdXBfaWQpKTtcclxuICAgICAgICBpZiAoZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IG1lbWJlcklkczogYW55W10gPSBbXTtcclxuICAgICAgICAgIHNlbGVjdGVkR3JvdXBzLmZvckVhY2goKGVhY2hHcm91cDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlYWNoR3JvdXA/Lm1lbWJlcl9pZHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIG1lbWJlcklkcyA9IFsuLi5uZXcgU2V0KG1lbWJlcklkcy5jb25jYXQoZWFjaEdyb3VwPy5tZW1iZXJfaWRzKSldXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbElkcyA9IFsuLi5uZXcgU2V0KGlkcyksIC4uLm5ldyBTZXQobWVtYmVySWRzKV1cclxuICAgICAgICAgICAgY29uc3QgYXNzaWdub3JzID0gdGhpcy5hc3NpZ25lZXNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBhbGxJZHMuaW5jbHVkZXMoZWxlbWVudC5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgaWYgKGFzc2lnbm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IGFzc2lnbm9ycztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYXNzaWdub3JzID0gdGhpcy5hc3NpZ25lZXNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBtZW1iZXJJZHMuaW5jbHVkZXMoZWxlbWVudC5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgaWYgKGFzc2lnbm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IGFzc2lnbm9ycztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldEVkaXRSZXNwb25zaWJpbGl0eURldGFpbHMoaWQ6IGFueSkge1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZWRpdFJlc3BvbnNpYmlsaXR5KGlkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNEdXBsaWNhdGVFbnRydXN0ID0gdHJ1ZTtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxBc3NpZ25lZSA9IFtOdW1iZXIocmVzLmFzc2lnbmVkX3RvKV07XHJcbiAgICAgICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCk/LnVzZXI7XHJcbiAgICAgICAgdGhpcy5pc0dyb3VwQXNzaWduZWQgPSByZXM/LmlzR3JvdXBBc3NpZ25UbyA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICBjb25zdCBjdXJyZW50c1VlckluZm8gPSB7XHJcbiAgICAgICAgICBtZW1iZXJfZW1haWw6IGN1cnJlbnRVc2VyPy5lbWFpbCxcclxuICAgICAgICAgIG1lbWJlcl9pZDogY3VycmVudFVzZXIuaWQsXHJcbiAgICAgICAgICBtZW1iZXJfbmFtZTogY3VycmVudFVzZXIubmFtZSxcclxuICAgICAgICAgIG9yZ2FuaXNhdGlvbl9pZDogY3VycmVudFVzZXIub3JnYW5pc2F0aW9uX2lkLFxyXG4gICAgICAgICAgX2lkOiB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkuX2lkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RQbGFuQ2F0ZWdvcnkgPSB0eXBlb2YgKHJlcz8udGVzdHBsYW5fY2F0ZWdvcnlfaWQpID09PSAnc3RyaW5nJyA/IFtdIDogcmVzPy50ZXN0cGxhbl9jYXRlZ29yeV9pZDtcclxuICAgICAgICBjb25zdCByZXF1aXJlZEF1ZGl0Q2F0ZWdvcnlJZCA9IHJlcz8uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscz8uY2F0ZWdvcnlfaWQgPyBbcmVzPy5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzPy5jYXRlZ29yeV9pZF0gOiBbXTtcclxuICAgICAgICBjb25zdCByZXZpZXdlckRldGFpbHMgPSBPYmplY3Qua2V5cyhyZXM/LnJldmlld2VyX2Fycik7XHJcbiAgICAgICAgdGhpcy5oYXNSZXZpZXdlciA9IHJldmlld2VyRGV0YWlscy5sZW5ndGggPiAwXHJcbiAgICAgICAgdGhpcy5hc3NpZ25lZVJhZGlvU2VsZWN0ID0gKHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkPy5sZW5ndGggPT0gMCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0VudHJ1c3QgPSByZXMuaXNHcm91cEFzc2lnblRvID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGxldCBsaW5rYWdlID0gcmVzPy5saW5rZWRQcm9ncmFtRGV0YWlscztcclxuICAgICAgICBsaW5rYWdlLnB1c2gocmVzPy5wcm9ncmFtRGV0YWlscyk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0gPSB7XHJcbiAgICAgICAgICBhc3NpZ25vcnM6IHtcclxuICAgICAgICAgICAgZW5hYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlzdDogdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWdub3JzTGlzdCwgW3Jlcy5tZW1iZXJfaWRdLCAnbWVtYmVyX2lkJykubGVuZ3RoID4gMCA/IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbm9yc0xpc3QsIFtyZXMubWVtYmVyX2lkXSwgJ21lbWJlcl9pZCcpIDogW2N1cnJlbnRzVWVySW5mb10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHk6IHtcclxuICAgICAgICAgICAgbmFtZTogcmVzPy5yZXBvcnRfbmFtZSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcz8ua2V5X2NvbXBsaWFuY2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYXNzaWduZWVzOiB7XHJcbiAgICAgICAgICAgIHdob0NhbkNvbXBsZXRlOiAocmVzLmlzR3JvdXBBc3NpZ25UbykgPyAnQU5ZX09ORScgOiAnQUxMJyxcclxuICAgICAgICAgICAgbGlzdDogKHJlcy5hc3NpZ25lZF90b19tZW1iZXJfaWQubGVuZ3RoID09IDApID8gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgW051bWJlcihyZXMuYXNzaWduZWRfdG8pXSwgJ2VtcGxveWVlX2lkJykgOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIHJlcy5hc3NpZ25lZF90b19tZW1iZXJfaWQsICdteV9tZW1iZXJfaWQnKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmcmVxdWVuY3k6IHJlcz8uZnJlcXVlbmN5X2RldGFpbHMsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzPy5yZW1hcmtzLFxyXG4gICAgICAgICAgb2JqZWN0aXZlOiByZXM/Lm9iamVjdGl2ZSxcclxuICAgICAgICAgIHJjOiB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCBbTnVtYmVyKHJlcz8ucmNfaWQpXSwgJ3JjX2lkJyksXHJcbiAgICAgICAgICBjYXRlZ29yeTogKHJlcz8ucHJvZ3JhbV9jYXRfaWRzPy5sZW5ndGgpID8gcmVzPy5jYXRlZ29yeV9pZHNfYXJyYXkuZmlsdGVyKChlbGU6IGFueSkgPT4gIXJlcy5wcm9ncmFtX2NhdF9pZHMuaW5jbHVkZXMoZWxlKSkgOiByZXM/LmNhdGVnb3J5X2lkc19hcnJheSxcclxuICAgICAgICAgIHByb2dyYW1fc2VsZWN0ZWRfaWRzOiByZXM/LmNhdGVnb3J5X2lkLnNwbGl0KCcsJykgPz8gW10sXHJcbiAgICAgICAgICBjYXRlZ29yeV9pZDogcmVzPy5jYXRlZ29yeV9pZCA/PyAnJyxcclxuXHJcbiAgICAgICAgICBsaW5rZWRQcm9ncmFtOiBsaW5rYWdlID8/IHJlcz8ubGlua2VkUHJvZ3JhbURldGFpbHMsXHJcbiAgICAgICAgICBwcm9ncmFtOiAocmVzPy5wcm9ncmFtRGV0YWlscz8uY2F0ZWdvcnlfaWQpID8gW3Jlcz8ucHJvZ3JhbURldGFpbHNdIDogW10sXHJcbiAgICAgICAgICBjaGVja3BvaW50SW5zdHJ1Y3Rpb246IHJlcz8uY2hlY2twb2ludF9kZXNjcmlwdGlvbixcclxuICAgICAgICAgIGN1c3RvbVRhZ3M6IChyZXM/LmN1c3RvbV90YWdzKSA/IEpTT04ucGFyc2UocmVzPy5jdXN0b21fdGFncykgOiAnJyxcclxuICAgICAgICAgIGNoZWNrcG9pbnRzOiAocmVzPy5jaGVja3BvaW50X2RldGFpbHMpID8gSlNPTi5wYXJzZShyZXM/LmNoZWNrcG9pbnRfZGV0YWlscykgOiAnJyxcclxuICAgICAgICAgIHJldmlld2Vyczoge1xyXG4gICAgICAgICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6IChyZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlID09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xyXG4gICAgICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogKHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCkgPyByZXM/LnJldmlld19hZnRlcl9kYXlzIDogMixcclxuICAgICAgICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiAocmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwKSA/IHJlcz8ucmV2aWV3X2ZhaWxlZF9hZnRlcl9kYXlzIDogMlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhY2NlcHRlZERhdGE6IHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCA/IHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnJldmlld2VycyA6IFtdLFxyXG4gICAgICAgICAgICBsaXN0OiByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyB0aGlzLnNldFJldmlld2VyUGF5bG9hZChyZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnMsICdvYmplY3QnLCByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlKSA6IFtdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb3ZlcnNlZXJzOiB7XHJcbiAgICAgICAgICAgIGxpc3Q6IChyZXM/LmNjX2VtYWlsKSA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIE9iamVjdC5rZXlzKHJlcz8uY2NfZW1haWwpLm1hcChOdW1iZXIpLCAnZW1wbG95ZWVfaWQnKSA6IFtdLFxyXG4gICAgICAgICAgICBub3RpZnlMaXN0OiAocmVzPy5mYWlsdXJlX2NjX2VtYWlsKSA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIE9iamVjdC5rZXlzKHJlcz8uZmFpbHVyZV9jY19lbWFpbCkubWFwKE51bWJlciksICdlbXBsb3llZV9pZCcpIDogW10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcclxuICAgICAgICAgICAgZm9ybWF0UmVxdWlyZWQ6IChyZXM/LnJlcG9ydF9mb3JtYXQubGVuZ3RoID4gMCB8fCByZXM/LmxpbmtfZm9yX2RldGFpbHM/Lmxlbmd0aCA+IDApID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb3JtYXRGaWxlczogcmVzPy5yZXBvcnRfZm9ybWF0LFxyXG4gICAgICAgICAgICBmb3JtYXRMaW5rczogcmVzPy5saW5rX2Zvcl9kZXRhaWxzLFxyXG4gICAgICAgICAgICBldmlkZW5jZVJlcXVpcmVkOiAocmVzPy5yZXBvcnRfdXBsb2FkX2ZsYWcpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFzc3VyYW5jZUxpc3Q6IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0LCB0ZXN0UGxhbkNhdGVnb3J5LCAnY2F0ZWdvcnlfaWQnKSxcclxuICAgICAgICAgIHJlcXVpcmVzQXVkaXRMaXN0OiB0aGlzLnNldExpc3QodGhpcy5hc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdCwgcmVxdWlyZWRBdWRpdENhdGVnb3J5SWQsICdjYXRlZ29yeV9pZCcpLFxyXG4gICAgICAgICAgcmlza0NsYXNzOiByZXM/LnJpc2tfY2xhc3MsXHJcbiAgICAgICAgICByaXNrTWF0cml4OiByZXM/LnJpc2tfbWF0cml4X2RhdGFcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtID0gcmVzPy5wcm9ncmFtRGV0YWlscz8uY2F0ZWdvcnlfaWQgPyByZXMucHJvZ3JhbURldGFpbHMgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZFByb2dyYW0/Ll9pZCl7dGhpcy5nZXRMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbSh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uX2lkKTt9XHJcbiAgICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPSByZXMubm90aWZpY2F0aW9uX3BlbmRpbmc7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgaW4gUXVldWUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyA1fjB+MH4wIHRoaXMgaXMgZm9yIG90aGVyIGZyZXF1ZW5jeVxyXG4gICAgICAgIGlmIChyZXMuZnJlcXVlbmN5X2RldGFpbHMgIT09ICcnICYmIHJlcy5mcmVxdWVuY3lfZGV0YWlscyAhPT0gJzV+MH4wfjAnKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKHJlcyk7XHJcbiAgICAgICAgICB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKHJlcyk7XHJcbiAgICAgICAgICByZXMucGxhY2Vob2xkZXIgPSB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmlzRW50cnVzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLm1vZGUgPSAnQ1JFQVRFJztcclxuICAgICAgICAgIHRoaXMuYXNzaWduZWVSYWRpb1NlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmVuYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICAgICAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuaXNFbnRydXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubW9kZSA9ICdDUkVBVEUnO1xyXG4gICAgICAgICAgdGhpcy5hc3NpZ25lZVJhZGlvU2VsZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMuZW5hYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgICAgICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgaWYgKHJlcy5mcmVxdWVuY3lfZGV0YWlscy5zcGxpdCgnficpWzBdICE9PSA2KSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXM/LnJjX2lkID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5yY1NlbGVjdGVkLmVtaXQodHJ1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcz8uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZUFzc3VyYW5jZUxpc3QocmVzPy5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgICAgICAgc2FtcGxlOiAwLFxyXG4gICAgICAgICAgICBwZXJjZW50YWdlOiAwLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogJycsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeV90aW1lOiAnJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFzc2Vzc21lbnREZXRhaWxzKHJlcy5hc3Nlc3NtZW50LCByZXMucXVlc3Rpb25uYWlyZV90eXBlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cykge1xyXG4gICAgICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICAgICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNBc3Nlc3NtZW50RGlzYWJsZWQuZW1pdCh0cnVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRFZGl0TW9yZU9wdGlvbnMocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGlkcz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdC5maW5kSW5kZXgoKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudCk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuSWRzKGxpc3Q6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGxpc3QubWFwKGVsZSA9PiB7IGlmIChlbGVba2V5XSkgeyByZXR1cm4gZWxlW2tleV07IH0gfSkuZmlsdGVyKGVsZSA9PiBlbGUpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmV2aWV3ZXJQYXlsb2FkKGlkczogYW55W10sIHR5cGU6IHN0cmluZywgYWNjZXB0ZWREYXRhPzogQXJyYXk8YW55PiwgcmV2aWV3ZXJUeXBlPzogc3RyaW5nKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgY29uc3QgaWRPYmpBcnJheSA9IHRoaXMucmV0dXJuSWRzKGlkcywgJ21lbWJlcl9pZCcpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXRMaXN0KHRoaXMucmV2aWV3ZXJzTGlzdCwgaWRPYmpBcnJheSwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgY29uc3QgcGF5TG9hZDogYW55ID0gW107XHJcbiAgICAgIGNvbnN0IGlkc0xpc3QgPSB0aGlzLnJldHVybklkcyhpZHMsICdteV9tZW1iZXJfaWQnKTtcclxuICAgICAgaWRzTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICBpZiAoKGFjY2VwdGVkRGF0YSA/PyBbXSk/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGluZGV4ID0gYWNjZXB0ZWREYXRhPy5maW5kSW5kZXgoZWxlID0+IGVsZS5tZW1iZXJfaWQgPT09IGVsZW1lbnQpID8/IC0xXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhY2NlcHRTdGF0dXMgPSAoaW5kZXggPiAtMSAmJiBhY2NlcHRlZERhdGEpID8gYWNjZXB0ZWREYXRhW2luZGV4XS5yZXZpZXdlcl9hY2NlcHQgOiAwXHJcbiAgICAgICAgaWYgKGFjY2VwdFN0YXR1cyA9PT0gMCAmJiByZXZpZXdlclR5cGUgPT09ICdBTllPTkUnKSB7XHJcbiAgICAgICAgICBhY2NlcHRTdGF0dXMgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlMb2FkLnB1c2goeyBtZW1iZXJfaWQ6IGVsZW1lbnQsIHJldmlld2VyX2FjY2VwdDogYWNjZXB0U3RhdHVzIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHBheUxvYWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLnJjTGlzdExvYWRlZCAmJiB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgJiYgdGhpcy5hc3NpZ25vcnNMaXN0TG9hZGVkICYmXHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgJiYgdGhpcy5hc3N1cmFuY2VDYXRlZ29yeUxpc3RMb2FkZWQgJiYgdGhpcy5ncm91cHNMaXN0TG9hZGVkKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5mcmFtZXdvcmtEZXRhaWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmVudHJ1c3RGcmFtZXdvcmsodGhpcy5mcmFtZXdvcmtEZXRhaWxzWzBdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgdGhpcy5nZXRFZGl0UmVzcG9uc2liaWxpdHlEZXRhaWxzKHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0pIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ucHVzaCh0aGlzLnNlbGVjdGVkUHJvZ3JhbSk7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcy5wdXNoKHRoaXMuc2VsZWN0ZWRQcm9ncmFtLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gdGhpcy5zZWxlY3RlZFByb2dyYW0/LmNhdGVnb3J5X2lkPy50b1N0cmluZygpO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID0gKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5kZWZhdWx0X2Fzc2lnbmVlX3R5cGUgPT0gJ0FOWU9ORScpID8gJ0FOWV9PTkUnIDogJ0FMTCc7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID0gKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5kZWZhdWx0X3Jldmlld2Vyc190eXBlID09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBwcm9ncmFtQ3VzdG9tVGFncyA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5jdXN0b21fdGFncyA/IEpTT04ucGFyc2UodGhpcy5zZWxlY3RlZFByb2dyYW0uY3VzdG9tX3RhZ3MpIDogW107XHJcbiAgICAgICAgICBwcm9ncmFtQ3VzdG9tVGFncy5mb3JFYWNoKCh0YWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0YWdEYXRhID0gSlNPTi5wYXJzZSh0YWcpO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID0gKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5ldmlkZW5jZV91cGxvYWRfZmxhZykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuUFJPR1JBTSA9IHRydWU7XHJcbiAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUFJPR1JBTScpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5ldmlkZW5jZV91cGxvYWRfZmxhZykge1xyXG4gICAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnRk9STUFURV9FVklERU5DRScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGNoZWNrZWRNb3JlT3B0aW9ucyk7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5faWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzYXZlU2VsZWN0ZWRMaXN0KHR5cGU6IHN0cmluZywgc2VsZWN0ZWRJdGVtczogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnYXNzaWdub3JzJzpcclxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkVHlwZSA9PT0gJ3dob20nKSB7XHJcbiAgICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWdub3JzTGlzdCwgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSwgJ21lbWJlcl9pZCcpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxyXG4gICAgICAgIGlmICh0aGlzLmludmFsaWRUeXBlID09PSAnd2hvJykge1xyXG4gICAgICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNFbnRydXN0ICYmIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSAhPT0gJ0FOWV9PTkUnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIFtzZWxlY3RlZEl0ZW1zLmVtcGxveWVlX2lkXSwgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2l0ZW1faWQnKTtcclxuICAgICAgICB0aGlzLnJjU2VsZWN0ZWQuZW1pdCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5sZW5ndGggPiAwKVxyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyddWydjYXRlZ29yeV9pZCddID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IHNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhZyA9IGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT09ICcnICYmIGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT09IFwibnVsbFwiICYmIGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT0gXCJbXVwiID8gSlNPTi5wYXJzZShlbGVtZW50LmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJzZWxlY3RlZEl0ZW1zc2VsZWN0ZWRJdGVtc3NlbGVjdGVkSXRlbXNzZWxlY3RlZEl0ZW1zXCIsc2VsZWN0ZWRJdGVtcylcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5saW5rZWRQcm9ncmFtID0gc2VsZWN0ZWRJdGVtcz8ubGlua2VkUHJvZ3JhbTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0gJiYgISh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ucHJvZ3JhbVR5cGUgPT09IDAgJiYgdGhpcy5zZWxlY3RlZFByb2dyYW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd1bmNhdGVnb3JpemVkJyApKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IChzZWxlY3RlZEl0ZW1zLmNhdGVnb3JpZXMpID8gc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzIDogW107XHJcbiAgICAgICAgICBsZXQgY2F0ZWdvcnlJZCA9IHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQgKyAnLCcgKyBjYXRlZ29yeUlkO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPSBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZD8udG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzID0gWy4uLm5ldyBTZXQoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcyksIC4uLm5ldyBTZXQoW3NlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50KSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50KT8ubGVuZ3RoID8gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtLl9pZCkgOiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSAoc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzKSA/IHNlbGVjdGVkSXRlbXMuY2F0ZWdvcmllcyA6IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPSAnJztcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzID0gW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzID0gW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtID0gKHNlbGVjdGVkSXRlbXMucHJvZ3JhbSkgPyBbc2VsZWN0ZWRJdGVtcy5wcm9ncmFtXSA6IFtdO1xyXG4gICAgICAgICAgbGV0IGNhdGVnb3J5SWQgPSBzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yaWVzPy50b1N0cmluZygpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeV9pZCA9IHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkICsgJywnICsgY2F0ZWdvcnlJZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQ/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcyA9IFsuLi5uZXcgU2V0KHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXMpLCAuLi5uZXcgU2V0KFtzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZF0pXTtcclxuICAgICAgICAgIGNvbnN0IHByb2dyYW1DdXN0b21UYWdzID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3MgPyBKU09OLnBhcnNlKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgICAgICAgcHJvZ3JhbUN1c3RvbVRhZ3M/LmZvckVhY2goKHRhZzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0eXBlb2YgdGFnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh0YWcpIDogdGFnO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID0gKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmV2aWRlbmNlX3VwbG9hZF9mbGFnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5ldmlkZW5jZV91cGxvYWRfZmxhZykge1xyXG4gICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmKCEodGhpcy5zZWxlY3RlZFByb2dyYW0/LnByb2dyYW1UeXBlID09PSAwICYmIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSAndW5jYXRlZ29yaXplZCcgKSl7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5faWQgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbShzZWxlY3RlZEl0ZW1zLnByb2dyYW0uX2lkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXZpZXdlcic6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5yZXZpZXdlcnNMaXN0LCBzZWxlY3RlZEl0ZW1zLCAnZW1wbG95ZWVfaWQnKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlcic6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBzZWxlY3RlZEl0ZW1zLCAnZW1wbG95ZWVfaWQnKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlck5vdGlmeSc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBzZWxlY3RlZEl0ZW1zLCAnZW1wbG95ZWVfaWQnKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3N1cmFuY2UnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZUxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5hc3N1cmFuY2VDYXRlZ29yaWVzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2NhdGVnb3J5X2lkJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JlcXVpcmVzX2F1ZGl0JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZVJlcXVpcmVzQXVkaXRMaXN0LCBbc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcnlfaWRdLCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyddWydjYXRlZ29yeV9pZCddID0gc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcnlfaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NoZWNrcG9pbnRzJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cyA9IHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnREZXRhaWxzO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvbiA9IHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnRJbnN0cnVjdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2FsY3VsYXRlZHJpc2snOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJpc2tDbGFzcyA9IHNlbGVjdGVkSXRlbXM/LnJpc2tDbGFzcztcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrTWF0cml4ID0gc2VsZWN0ZWRJdGVtcz8ucmlza01hdHJpeDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZm9ybWF0ZV9ldmlkZW5jZSc6XHJcblxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdFJlcXVpcmVkID0gc2VsZWN0ZWRJdGVtcz8uaXNGb3JtYXRlVXBsb2FkZWQgPz8gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0RmlsZXMgPSBzZWxlY3RlZEl0ZW1zPy5maWxlcyA/PyBbXTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRMaW5rcyA9IHNlbGVjdGVkSXRlbXM/LmxpbmtzID8/IFtdO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPSBzZWxlY3RlZEl0ZW1zPy5pc0V2aWRlbmNlUmVxdWlyZWQgPz8gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld0ZyZXF1ZW5jeSc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeSA9IHtcclxuICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogc2VsZWN0ZWRJdGVtcy5jb21wbGV0ZURheXMsXHJcbiAgICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiBzZWxlY3RlZEl0ZW1zLm5vdENvbXBsZXRlZCxcclxuICAgICAgICB9O1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xyXG4gIH1cclxuXHJcblxyXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50PzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5maW5kSW5kZXgoKHJjOiBhbnkpID0+IHJjLnJjX2lkID09IGV2ZW50LnJjX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5zcGxpY2UocmNJbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5yY1NlbGVjdGVkLmVtaXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMubGVuZ3RoID4gMClcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ2F1ZGl0X2NhdGVnb3J5X2RldGFpbHMnXVsnY2F0ZWdvcnlfaWQnXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25vcnMnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0ID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxyXG4gICAgICAgIGNvbnN0IGVudHJ1c3RJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LmZpbmRJbmRleCgob3duZXI6IGFueSkgPT4gb3duZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LnNwbGljZShlbnRydXN0SW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdyZXZpZXdlcic6XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0LmZpbmRJbmRleCgocmV2aWV3ZXI6IGFueSkgPT4gcmV2aWV3ZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0LnNwbGljZShyZXZpZXdlckluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlcic6XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0LmZpbmRJbmRleCgob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0LnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlck5vdGlmeUxpc3QnOlxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyTm90aWZ5SW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdC5maW5kSW5kZXgoKG92ZXJzZWVyTjogYW55KSA9PiBvdmVyc2Vlck4uZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0LnNwbGljZShvdmVyc2Vlck5vdGlmeUluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxyXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeS5maW5kSW5kZXgoKGNhdGVnb3J5OiBhbnkpID0+IGNhdGVnb3J5LmNhdGVnb3J5X2lkID09IGV2ZW50LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeS5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgY29uc3QgdGFnID0gSlNPTi5wYXJzZShldmVudC5jdXN0b21fdGFncyk7XHJcbiAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4Q1QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleCgodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhDVCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3Muc3BsaWNlKGluZGV4Q1QsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0YWcgPSBKU09OLnBhcnNlKGVsZW1lbnQuY3VzdG9tX3RhZ3MpO1xyXG4gICAgICAgICAgICBpZiAodGFnLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Byb2dyYW0nOlxyXG4gICAgICAgIHRoaXMuY2hlY2tEZWZhdWx0UHJvZ3JhbU9uUmVtb3ZlKGV2ZW50KTtcclxuICAgICAgICAvLyB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IFtdO1xyXG4gICAgICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5maWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXF1aXJlc19hdWRpdCc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVxdWlyZXNBdWRpdExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzID0ge1xyXG4gICAgICAgICAgY2F0ZWdvcnlfaWQ6IDAsXHJcbiAgICAgICAgICBzYW1wbGU6IDAsXHJcbiAgICAgICAgICBwZXJjZW50YWdlOiAwLFxyXG4gICAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcnLFxyXG4gICAgICAgICAgZnJlcXVlbmN5X3RpbWU6ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3N1cmFuY2UnOlxyXG4gICAgICAgIGNvbnN0IGFzc3VyYW5jZUluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzdXJhbmNlTGlzdC5maW5kSW5kZXgoKGFzc3VyYW5jZTogYW55KSA9PiBhc3N1cmFuY2UuY2F0ZWdvcnlfaWQgPT0gYXNzdXJhbmNlLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0LnNwbGljZShhc3N1cmFuY2VJbmRleCwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NoZWNrcG9pbnQnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzLnNwbGljZShldmVudCwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2Vzc21lbnQnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSB7XHJcbiAgICAgICAgICBjYXRlZ29yeV9pZDogXCJcIixcclxuICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6IFwiXCIsXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbmV3LWNoZWNrcG9pbnRzJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5uZXdfY2hlY2twb2ludHMgPSB7fTtcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnRDb3VudCA9IDA7XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50Q291bnRVcGRhdGVkLmVtaXQodGhpcy5jaGVja3BvaW50Q291bnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW50cnVzdEZyYW1ld29yayhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5ID0ge1xyXG4gICAgICBuYW1lOiBldmVudC5yZXBvcnRfbmFtZSxcclxuICAgICAga2V5UmVzcG9uc2liaWxpdHk6IChldmVudC5rZXlfY29tcGxpYW5jZSkgPyB0cnVlIDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgbmV3U3RhcnREYXRlID0gZXZlbnQuc3RhcnRfZGF0ZSB8fCBldmVudC5zdGFydF9kYXRlICE9IG51bGwgfHwgZXZlbnQuc3RhcnRfZGF0ZSAhPT0gJycgPyBuZXcgRGF0ZShldmVudC5zdGFydF9kYXRlICogMTAwMCkgOiBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgcHZ0VGVtcGxhdGUgPSBldmVudC5mcmVxdWVuY3lfdGVtcGxhdGUgJiYgZXZlbnQuZnJlcXVlbmN5X3RlbXBsYXRlICE9PSAnJyA/IGV2ZW50LmZyZXF1ZW5jeV90ZW1wbGF0ZSA6IGV2ZW50LmZyZXF1ZW5jeTtcclxuICAgIGNvbnN0IGZyZXF1ZW5jeURldGFpbHNPYmplY3Q6IGFueSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChcclxuICAgICAgcHZ0VGVtcGxhdGUsXHJcbiAgICAgIG5ld1N0YXJ0RGF0ZS5nZXREYXRlKCksXHJcbiAgICAgIG5ld1N0YXJ0RGF0ZS5nZXRNb250aCgpLFxyXG4gICAgICBuZXdTdGFydERhdGUuZ2V0RnVsbFllYXIoKVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV9kZXRhaWxzID0gZnJlcXVlbmN5RGV0YWlsc09iamVjdD8ucGF0dGVybjtcclxuICAgIGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X2RldGFpbHM7XHJcbiAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9ICcyMzo1OTowMCc7XHJcbiAgICBldmVudC5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9IGV2ZW50LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA/IGV2ZW50LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA6IDI7O1xyXG4gICAgZXZlbnQuZmFpbGVkX2FmdGVyX2RheXMgPSBldmVudC5tYXJrX2ZhaWxlZF9hZnRlciA/IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyIDogMjtcclxuICAgIGV2ZW50LmxpZmVjeWNsZV9kZXRhaWxzID0gJzAwMDAtMDAtMDB+fjAnO1xyXG4gICAgZXZlbnQuc3RhcnRfb2ZfZGF5X3V0YyA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5mcmFtZXdvcmtTdGFydERhdGUoZXZlbnQpO1xyXG4gICAgZXZlbnQub25fY29tcGxldGlvbl9vZiA9IFtdO1xyXG4gICAgZXZlbnQuZG9tX3V0YyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3QuY29udGludW91c19mYWlsZWRfZGF5c1xyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV9kZXRhaWxzO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X3RpbWUgPSAnMjM6NTk6MDAnO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPSBldmVudC5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPyBldmVudC5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgOiAyOztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZhaWxlZF9hZnRlcl9kYXlzID0gZXZlbnQubWFya19mYWlsZWRfYWZ0ZXIgPyBldmVudC5tYXJrX2ZhaWxlZF9hZnRlciA6IDI7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5saWZlY3ljbGVEZXRhaWxzID0gJzAwMDAtMDAtMDB+fjAnO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uc3RhcnRfb2ZfZGF5X3V0YyA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5mcmFtZXdvcmtTdGFydERhdGUoZXZlbnQpLnRvRml4ZWQoKS50b1N0cmluZygpO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub25fY29tcGxldGlvbl9vZiA9IFtdO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZG9tX3V0YyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPSBldmVudC5yZW1hcmtzLnRyaW0oKSAhPSAnJyA/IGV2ZW50LnJlbWFya3MgOiAnJztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MgPSBldmVudC5jdXN0b21fdGFncyAmJiBldmVudC5jdXN0b21fdGFncyAhPT0gbnVsbCAmJiBldmVudC5jdXN0b21fdGFncyAhPT0gJ251bGwnICYmIGV2ZW50LmN1c3RvbV90YWdzICE9PSAnJyA/IEpTT04ucGFyc2UoZXZlbnQuY3VzdG9tX3RhZ3MpIDogW107XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPSBldmVudC5jb250cm9sX29iamVjdGl2ZSA/IGV2ZW50LmNvbnRyb2xfb2JqZWN0aXZlIDogJyc7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbENhdGVnb3JpZXMsIFtldmVudC5jYXRlZ29yeV9pZF0sICdjYXRlZ29yeV9pZCcpOyAvL1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdDb21wbGV0ZURheXMgPSAyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdOT3RDb21wbGV0ZWREYXlzID0gMjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LmZpbmQoKHJjOiBhbnkpID0+IHJjLnJjX2lkID09PSBldmVudC5lbnRpdHlfaWQpID8gW3RoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdC5maW5kKChyYzogYW55KSA9PiByYy5yY19pZCA9PT0gZXZlbnQuZW50aXR5X2lkKV0gOiBbXTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJpc2tDbGFzcyA9IHRoaXMuaXNSaXNrRW5hYmxlID8gMSA6IDI7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcml2YXRlX2xpYnJhcnlfaWQgPSBldmVudC5yZXBvcnRfaWQ7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNsYXNzaWZpY2F0aW9uID0gdGhpcy5pc1Jpc2tFbmFibGUgPyAxIDogMjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0LmNvbnRpbnVvdXNfZmFpbGVkX2RheXNcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnN0YXJ0RGF0ZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5mcmFtZXdvcmtTdGFydERhdGUoZXZlbnQpO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UgPSB7XHJcbiAgICAgIGV2aWRlbmNlUmVxdWlyZWQ6IGV2ZW50LnJlcG9ydF91cGxvYWRfZmxhZyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgZm9ybWF0RmlsZXM6IGV2ZW50LnJlcG9ydF9mb3JtYXQsXHJcbiAgICAgIGZvcm1hdExpbmtzOiAhKGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluaykgfHwgZXZlbnQucmVwb3J0X2Zvcm1hdF9saW5rID09ICcnID8gW10gOiBbZXZlbnQucmVwb3J0X2Zvcm1hdF9saW5rXSxcclxuICAgICAgZm9ybWF0UmVxdWlyZWQ6IChldmVudC5yZXBvcnRfZm9ybWF0Lmxlbmd0aCA+IDAgfHwgKChldmVudC5yZXBvcnRfZm9ybWF0X2xpbmspICYmIGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluayAhPSAnJykpID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzID0ge1xyXG4gICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgc2FtcGxlOiA1LFxyXG4gICAgICBwZXJjZW50YWdlOiAzMCxcclxuICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcxfjB+M34xJyxcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6ICcyMzo1OTowMCdcclxuICAgIH1cclxuXHJcbiAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9ICcxMTo1OSBwbSc7XHJcbiAgICBpZiAoZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgIT09ICcnICYmIGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzICE9PSAnNX4wfjB+MCcpIHtcclxuICAgICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50LmZyZXF1ZW5jeV90aW1lID0gJzIzOjU5OjAwJztcclxuICAgIGV2ZW50LnBsYWNlaG9sZGVyID0gdGhpcy5nZXRGcmVxdWVuY3lQbGFjZWhvbGRlcihldmVudCk7XHJcbiAgICBjb25zdCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlICE9PSAnJykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT0JKRUNUSVZFJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuT0JKRUNUSVZFID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSSVNLX0NMQVNTSUZJQ0FUSU9OJyk7XHJcbiAgICB0aGlzLm1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0NBVEVHT1JZJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0FURUdPUlkgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZm9ybWF0QW5kRXZpZGVuY2U/LmV2aWRlbmNlUmVxdWlyZWQgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmZvcm1hdEFuZEV2aWRlbmNlPy5mb3JtYXRSZXF1aXJlZCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnRk9STUFURV9FVklERU5DRScpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmVudGl0eV9pZCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JDJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xyXG4gICAgLy8gIGV2ZW50LnBsYWNlaG9sZGVyXHJcbiAgfVxyXG5cclxuICBhc3NpZ25Gcm9tRnJhbWV3b3JrKGZyZXFPYmo6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJmcmVxdXV1dXVcIixmcmVxT2JqKVxyXG4gICAgaWYgKGZyZXFPYmouZGF0YSkge1xyXG4gICAgICAvLyB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xyXG4gICAgICBjb25zdCBuZXdTdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgY29uc3QgZnJlcXVlbmN5RGV0YWlsc09iamVjdDogYW55ID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnNob3J0SGFuZF9mcmVxQ2FsKFxyXG4gICAgICAgIGZyZXFPYmouZGF0YS5mcmVxdWVuY3ksXHJcbiAgICAgICAgbmV3U3RhcnREYXRlLmdldERhdGUoKSxcclxuICAgICAgICBuZXdTdGFydERhdGUuZ2V0TW9udGgoKSxcclxuICAgICAgICBuZXdTdGFydERhdGUuZ2V0RnVsbFllYXIoKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGV0IGV2ZW50OiBhbnkgPSB7fTtcclxuICAgICAgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0Py5wYXR0ZXJuO1xyXG4gICAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9ICcyMzo1OTowMCc7XHJcbiAgICAgIGV2ZW50LnJlbWluZGVyX2JlZm9yZV9kYXlzID0gMjtcclxuICAgICAgZXZlbnQuZmFpbGVkX2FmdGVyX2RheXMgPSAyO1xyXG4gICAgICBldmVudC5saWZlY3ljbGVfZGV0YWlscyA9ICcwMDAwLTAwLTAwfn4wJztcclxuICAgICAgZXZlbnQuc3RhcnRfb2ZfZGF5X3V0YyA9IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICBldmVudC5vbl9jb21wbGV0aW9uX29mID0gW107XHJcbiAgICAgIGV2ZW50LmRvbV91dGMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3QuY29udGludW91c19mYWlsZWRfZGF5c1xyXG4gICAgICB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKGV2ZW50KVxyXG4gICAgICBldmVudC5wbGFjZWhvbGRlciA9IHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXJcclxuICAgICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSAnMTE6NTkgcG0nO1xyXG4gICAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQpO1xyXG5cclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSA9IGZyZXFPYmouZGF0YS5uYW1lID8/ICcnO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPSBmcmVxT2JqLmRhdGEub2JqZWN0aXZlcyA/PyAnJztcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID1mcmVxdWVuY3lEZXRhaWxzT2JqZWN0Py5wYXR0ZXJuID8/Jyc7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnN0YXJ0RGF0ZSA9IGV2ZW50LnN0YXJ0X29mX2RheV91dGM7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlbWluZGVyX2JlZm9yZV9kYXlzPSBldmVudC5yZW1pbmRlcl9iZWZvcmVfZGF5cztcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY29udGludW91c19mYWlsZWRfZGF5cz0gZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cztcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX2FmdGVyX2RheXM9IGV2ZW50LmZhaWxlZF9hZnRlcl9kYXlzO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRnJhbWV3b3JrVmFsdWVzID0gZnJlcU9iai5zZWxlY3RlZEZyYW1ld29ya0RhdGEgPz8gdW5kZWZpbmVkO1xyXG4gICAgICBpZihmcmVxT2JqPy5kYXRhPy5kZXNjcmlwdGlvbil7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPSBmcmVxT2JqPy5kYXRhPy5kZXNjcmlwdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpZihmcmVxT2JqPy5kYXRhPy5vYmplY3RpdmVzKXtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPSBmcmVxT2JqLmRhdGEub2JqZWN0aXZlcyA/PyAnJztcclxuICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9CSkVDVElWRSA9IHRydWU7XHJcbiAgICAgICAgbGV0IGNoZWNrZWRNb3JlT3B0aW9ucyA9W107XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5tb3JlT3B0aW9ucykge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9yZU9wdGlvbnNba2V5XSkge1xyXG4gICAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaChrZXkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByZWZyZXNoQWxsTGlzdHMoKSB7XHJcbiAgICBsZXQgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XHJcbiAgICBsZXQgb3ZlcnNlZXJJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IGFzc2lnbmVlSWRzOiBhbnkgPSBbXTtcclxuXHJcbiAgICBjb25zdCBhbGxVc2VycyA9IGNsb25lRGVlcCh0aGlzLmFsbFVzZXJzTGlzdCk7XHJcbiAgICBjb25zdCBiZWhhbGZVc2VycyA9IGNsb25lRGVlcCh0aGlzLmJlaGFsZk9mVXNlcnNMaXN0KTtcclxuXHJcbiAgICBjb25zdCBhc3NpZ25vcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QpO1xyXG4gICAgY29uc3QgYXNzaWduZWVzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0KTtcclxuXHJcbiAgICBjb25zdCByZXZpZXdlcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QpO1xyXG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0KTtcclxuICAgIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCk7XHJcbiAgICBhc3NpZ25vcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5wdXNoKHVzZXIubWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgYXNzaWduZWVzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyLm15X21lbWJlcl9pZCk7XHJcbiAgICAgIGFzc2lnbmVlSWRzLnB1c2godXNlci5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh0aGlzLm1lbWJlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZpZXdlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICByZXZpZXdlcnNJZHMucHVzaCh1c2VyLm15X21lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIG92ZXJzZWVyTGlzdD8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlci5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBub3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXIubXlfbWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzID0gWy4uLm5ldyBTZXQoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMpXTtcclxuICAgIGFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQoYXNzaWduZWVJZHMpXTtcclxuICAgIHJldmlld2Vyc0lkcyA9IFsuLi5uZXcgU2V0KHJldmlld2Vyc0lkcyldO1xyXG4gICAgb3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldChvdmVyc2VlcklkcyldO1xyXG5cclxuXHJcbiAgICB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAhKHJldmlld2Vyc0lkcy5pbmNsdWRlcyh1c2VyLm15X21lbWJlcl9pZCkgfHwgb3ZlcnNlZXJJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpKSk7XHJcblxyXG5cclxuXHJcbiAgICB0aGlzLnJldmlld2Vyc0xpc3QgPSBhbGxVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLm15X21lbWJlcl9pZCkgfHwgYXNzaWduZWVJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSBhbGxVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5pbmNsdWRlcyh1c2VyLm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIubXlfbWVtYmVyX2lkKSkpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKSB7XHJcbiAgICBsZXQgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XHJcbiAgICBsZXQgb3ZlcnNlZXJJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IGFzc2lnbmVlSWRzOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IGJlaGFsZlVzZXJzID0gY2xvbmVEZWVwKHRoaXMuYmVoYWxmT2ZVc2Vyc0xpc3QpO1xyXG4gICAgY29uc3QgYXNzaWdub3JzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0KTtcclxuICAgIGNvbnN0IGFzc2lnbmVlcyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCk7XHJcbiAgICBjb25zdCByZXZpZXdlcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QpO1xyXG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0KTtcclxuICAgIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCk7XHJcbiAgICBhc3NpZ25vcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5wdXNoKHVzZXIubWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgYXNzaWduZWVzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyLm15X21lbWJlcl9pZCk7XHJcbiAgICAgIGFzc2lnbmVlSWRzLnB1c2godXNlci5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh0aGlzLm1lbWJlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZpZXdlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICByZXZpZXdlcnNJZHMucHVzaCh1c2VyLm15X21lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIG92ZXJzZWVyTGlzdD8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlci5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBub3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXIubXlfbWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyldO1xyXG4gICAgYXNzaWduZWVJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25lZUlkcyldO1xyXG4gICAgcmV2aWV3ZXJzSWRzID0gWy4uLm5ldyBTZXQocmV2aWV3ZXJzSWRzKV07XHJcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XHJcblxyXG5cclxuICAgIHRoaXMuYXNzaWdub3JzTGlzdCA9IGJlaGFsZlVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAhKG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKSkpO1xyXG4gICAgdGhpcy5hc3NpZ25lZXNMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdC5hc3NpZ25lZXNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAhKHJldmlld2Vyc0lkcy5pbmNsdWRlcyh1c2VyLm15X21lbWJlcl9pZCkgfHwgb3ZlcnNlZXJJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpKSk7XHJcblxyXG5cclxuXHJcbiAgICB0aGlzLnJldmlld2Vyc0xpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0LnJldmlld2Vyc0xpc3QuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEob3ZlcnNlZXJJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpIHx8IGFzc2lnbmVlSWRzLmluY2x1ZGVzKHVzZXIubXlfbWVtYmVyX2lkKSkpO1xyXG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdC5vdmVyc2VlcnNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAhKGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLmluY2x1ZGVzKHVzZXIubXlfbWVtYmVyX2lkKSB8fCByZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5teV9tZW1iZXJfaWQpKSk7XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICogSWYgdGhlIGZvcm0gaXMgdmFsaWQsIHRoZW4gaWYgdGhlIG1vZGUgaXMgRURJVCwgdGhlbiBzZXQgdGhlIG9yZ2FuaXphdGlvbklkIGFuZCBtZW1iZXJJZCB0byB0aGVcclxuICAqIGF1dGhTZXJ2aWNlIHZhbHVlcywgYW5kIHRoZW4gY2FsbCB0aGUgZW50cnVzdFJlc3BvbnNpYmlsaXR5IGZ1bmN0aW9uIHdpdGggdGhlIHJlc3BvbnNpYmlsaXR5Rm9ybSBhc1xyXG4gICogYSBwYXJhbWV0ZXIuXHJcbiAgKlxyXG4gICogSWYgdGhlIG1vZGUgaXMgbm90IEVESVQsIHRoZW4gY2FsbCB0aGUgZW50cnVzdFJlc3BvbnNpYmlsaXR5IGZ1bmN0aW9uIHdpdGggdGhlIHJlc3BvbnNpYmlsaXR5Rm9ybVxyXG4gICogYXMgYSBwYXJhbWV0ZXIuXHJcbiAgKiBAcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuXHJcbiAgKi9cclxuICBzdWJtaXRSZXNwb25zaWJpbGl0eSgpIHtcclxuICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZVJlc3BvbnNpYmlsaXR5KCk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09ICdFRElUJykge1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xyXG4gICAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgICB0aGlzLmVudHJ1c3RSZXNwb25zaWJpbGl0eSh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybSk7XHJcbiAgICAgIC8vIGVkaXQgY29uZGl0aW9uc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRydXN0UmVzcG9uc2liaWxpdHkodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJZiB0aGUgcmVzcG9uc2liaWxpdHkgbmFtZSBpcyBlbXB0eSwgb3IgdGhlIGZyZXF1ZW5jeSBpcyBlbXB0eSwgb3IgdGhlIGFzc2lnbmVlcyBsaXN0IGlzIGVtcHR5LFxyXG4gICogdGhlbiByZXR1cm4gZmFsc2UuIE90aGVyd2lzZSwgcmV0dXJuIHRydWUuXHJcbiAgKi9cclxuICB2YWxpZGF0ZVJlc3BvbnNpYmlsaXR5KCkge1xyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5lbmFibGUgJiYgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSBcIndob21cIjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUudHJpbSgpID09ICcnKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnd2hhdCc7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJ3dobyc7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09ICcnIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJycgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09PSAnNX4wfjB+MCcpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICd3aGVuJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnJztcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGlmICghdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lLnRyaW0oKSA9PSAnJ1xyXG4gICAgICB8fCAoIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPT09ICcnIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJzV+MH4wfjAnKSB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVudHJ1c3RSZXNwb25zaWJpbGl0eShlbnRydXN0Rm9ybTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgc3RhcnREYXRlID0gbW9tZW50KHBhcnNlSW50KGVudHJ1c3RGb3JtLnN0YXJ0RGF0ZSkgKiAxMDAwKS5mb3JtYXQoXCJZWVlZLU1NLUREIEhIOm1tOnNzXCIpO1xyXG4gICAgc3RhcnREYXRlID0gbW9tZW50KHN0YXJ0RGF0ZS5zcGxpdCgnICcpWzBdICsgXCIgMDA6MDA6MDBcIikuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzc1wiKTtcclxuICAgIGNvbnN0IHJjRGV0YWlscyA9IGVudHJ1c3RGb3JtLnJjLmxlbmd0aCA+IDAgPyBlbnRydXN0Rm9ybS5yYy5tYXAoKHJjOiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgICBpZiAocmMpIHtcclxuICAgICAgICBjb25zdCByY0RldGFpbHNBcnIgPSB7XHJcbiAgICAgICAgICBwYXJlbnRfcmNfaWRzOiByYy5wYXJlbnRfcmNfaWRzLFxyXG4gICAgICAgICAgcmNfaWQ6IHJjLnJjX2lkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmNEZXRhaWxzQXJyO1xyXG4gICAgICB9XHJcbiAgICB9KSA6IFtdO1xyXG4gICAgY29uc3QgbW9yZU9wdGlvbnMgPSB0aGlzLm1vcmVPcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IGNoZWNrQ29udGludW91c0ZhaWxlZFZhbHVlID0gKGRldGFpbHM6IHN0cmluZykgPT4ge1xyXG4gICAgICBjb25zdCBmcmVxdWVuY3lUeXBlID0gcGFyc2VJbnQoZGV0YWlscy5zcGxpdCgnficpWzBdKTtcclxuICAgICAgaWYgKGZyZXF1ZW5jeVR5cGUgPT09IDEgfHwgZnJlcXVlbmN5VHlwZSA9PT0gMiB8fCBmcmVxdWVuY3lUeXBlID09PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbGlua2VkUHJvZ3JhbUlkczogYW55W10gPSBbXTtcclxuICAgIGxldCBsaW5rZWRDYXRlZ29yeUlkczogYW55W10gPSBbXTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBpZih0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgIT09IGVsZT8uY2F0ZWdvcnlfaWQpe1xyXG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSB7XHJcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZT8uY2F0ZWdvcnlfaWQsXHJcbiAgICAgICAgICBwcm9ncmFtT2JqZWN0SWQ6IGVsZT8uX2lkLFxyXG4gICAgICAgICAgc3ViUHJvZ3JhbUlkczogZWxlPy5jaGlsZF9pZD8uZmlsdGVyKCAoZWw6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnk/LmluY2x1ZGVzKGVsKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmtlZFByb2dyYW1JZHM/LnB1c2gocHJvZ3JhbSk7XHJcbiAgICAgICAgbGlua2VkQ2F0ZWdvcnlJZHM/LnB1c2goZWxlPy5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgbGV0IGNhdGVnb3J5SWRzRXhjZXB0RGVmYXVsdDphbnkgPSBbXVxyXG4gICAgY2F0ZWdvcnlJZHNFeGNlcHREZWZhdWx0ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmNhdGVnb3J5Py5maWx0ZXIoIChlbDogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiAoZWwgIT09IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5jYXRlZ29yeV9pZCAgJiYgIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5jaGlsZF9pZD8uaW5jbHVkZXMoZWwpKVxyXG4gICAgfSlcclxuXHJcblxyXG4gICAgY29uc3QgcmVtYXJrcyA9IChlbnRydXN0Rm9ybS5kZXNjcmlwdGlvbi5yZXBsYWNlKC9cXCZuYnNwOy9nLCAnJykudHJpbSgpICE9PSAnJykgPyBlbnRydXN0Rm9ybS5kZXNjcmlwdGlvbiA6ICcnXHJcbiAgICBjb25zdCBvYmplY3RpdmUgPSAoZW50cnVzdEZvcm0ub2JqZWN0aXZlLnJlcGxhY2UoL1xcJm5ic3A7L2csICcnKS50cmltKCkgIT09ICcnKSA/IGVudHJ1c3RGb3JtLm9iamVjdGl2ZSA6ICcnXHJcbiAgICBsZXQgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBhcHBfYXNzb2NpYXRpb246IFtdLFxyXG4gICAgICBhc3NpZ25lZF90bzogdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0uYXNzaWduZWVzLmxpc3QsICdlbXBsb3llZV9pZCcpLnRvU3RyaW5nKCksXHJcbiAgICAgIHByb2dyYW1fY2F0X2lkczogbW9yZU9wdGlvbnM/LlBST0dSQU0gPyAoKGVudHJ1c3RGb3JtPy5wcm9ncmFtPy5sZW5ndGgpID8gW2VudHJ1c3RGb3JtLnByb2dyYW1bMF0uY2F0ZWdvcnlfaWRdIDogW10pOltdLFxyXG4gICAgICBsaW5rZWRfcHJvZ3JhbV9pZHM6IGxpbmtlZFByb2dyYW1JZHMsXHJcbiAgICAgIGxpbmtlZF9jYXRlZ29yeV9pZHM6IHRoaXMuZ2V0VW5pcXVlSWRzKFsuLi5jYXRlZ29yeUlkc0V4Y2VwdERlZmF1bHQsIC4uLmxpbmtlZENhdGVnb3J5SWRzXSApLFxyXG4gICAgICAvLyBjYXRlZ29yeV9pZDogKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtX3NlbGVjdGVkX2lkcz8ubGVuZ3RoID4gMCkgPyB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uY2F0ZWdvcnlfaWQgOiAnJyxcclxuICAgICAgY2F0ZWdvcnlfaWQ6ICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbV9zZWxlY3RlZF9pZHM/Lmxlbmd0aCA+IDApID8gdGhpcy5nZXRVbmlxdWVJZHMoWy4uLnRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeSwgLi4ubGlua2VkQ2F0ZWdvcnlJZHMgLCAuLi5bZW50cnVzdEZvcm0ucHJvZ3JhbVswXS5jYXRlZ29yeV9pZF1dICk/LnRvU3RyaW5nKCkgOiAnJyxcclxuICAgICAgY2NfZW1haWw6IChtb3JlT3B0aW9ucy5PVkVSU0VFUikgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5vdmVyc2VlcnMubGlzdCwgJ2VtcGxveWVlX2lkJykudG9TdHJpbmcoKSA6ICcnLFxyXG4gICAgICBjaGVja3BvaW50X2Rlc2NyaXB0aW9uOiAobW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMpID8gZW50cnVzdEZvcm0uY2hlY2twb2ludEluc3RydWN0aW9uIDogJycsXHJcbiAgICAgIGNoZWNrcG9pbnRfZGV0YWlsczogKG1vcmVPcHRpb25zLkNIRUNLUE9JTlRTKSA/IEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzKSA6ICcnLFxyXG4gICAgICBjaGVja3BvaW50X2ZsYWc6IDAsXHJcbiAgICAgIGNvbGxhYm9yYXRvcl9tYXJrX2RvbmU6IDAsXHJcbiAgICAgIGNvbW1lbnQ6ICcnLFxyXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBjaGVja0NvbnRpbnVvdXNGYWlsZWRWYWx1ZShlbnRydXN0Rm9ybS5mcmVxdWVuY3kpID8gZW50cnVzdEZvcm0uY29udGludW91c19mYWlsZWRfZGF5cyA6IDAsXHJcbiAgICAgIGNvc3Rfb2ZfY29tcGxpYW5jZTogJycsXHJcbiAgICAgIGNyZWF0ZWRfYnk6IGVudHJ1c3RGb3JtLmFzc2lnbm9ycy5saXN0Py5sZW5ndGggPCAxID8gMCA6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgIGNyZWF0aW9uX3dpbmRvdzogMCxcclxuICAgICAgY3VzdG9tX3RhZ3M6IEpTT04uc3RyaW5naWZ5KGVudHJ1c3RGb3JtLmN1c3RvbVRhZ3MpLFxyXG4gICAgICBlbnRpdHlfdHJlZTogKG1vcmVPcHRpb25zLlJDKSA/IHJjRGV0YWlscyA6IFtdLFxyXG4gICAgICBlbnRydXN0X2Zyb21fcmlzazogdGhpcy5vcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZW50cnVzdEZvcm0uZmFpbGVkX2FmdGVyX2RheXMsXHJcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogZW50cnVzdEZvcm0uZmFpbGVkX3RpbWVfdXRjLFxyXG4gICAgICBmYWlsdXJlX2NjX2VtYWlsOiAobW9yZU9wdGlvbnMuT1ZFUlNFRVIpID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QsICdlbXBsb3llZV9pZCcpLnRvU3RyaW5nKCkgOiAnJyxcclxuICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IGVudHJ1c3RGb3JtLmZyZXF1ZW5jeSxcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGVudHJ1c3RGb3JtLnRpbWVJbjI0SHIgPz8gXCIyMzo1OTowMFwiLFxyXG4gICAgICBncmNfb2JqZWN0X2lkOiAwLFxyXG4gICAgICBncmNfcmVsYXRpb25zaGlwOiAnJyxcclxuICAgICAgaWZfdGVzdHBsYW5fZmFpbGVkOiAwLFxyXG4gICAgICBpbXBhY3Q6ICcnLFxyXG4gICAgICBpc0dyb3VwQXNzaWduVG86IChlbnRydXN0Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPT0gJ0FOWV9PTkUnKSA/IDEgOiAwLFxyXG4gICAgICBpc19rZXlfY29tcGxpYW5jZTogZW50cnVzdEZvcm0ucmVzcG9uc2liaWxpdHkua2V5UmVzcG9uc2liaWxpdHkgPyAxIDogMCxcclxuICAgICAgbGlicmFyeV9yZXBvcnRfaWQ6IDAsXHJcbiAgICAgIGxpZmVjeWNsZV9kZXRhaWxzOiBlbnRydXN0Rm9ybS5saWZlY3ljbGVEZXRhaWxzID8/ICcwMDAwLTAwLTAwfn4wJyxcclxuICAgICAgbGlua19mb3JfZGV0YWlsczogKG1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UpID8gZW50cnVzdEZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0TGlua3MgOiBbXSxcclxuICAgICAgbGlua2FnZXM6IHsgY29tcGxpYW5jZTogW10gfSxcclxuICAgICAgbWVtYmVyX2lkOiB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5hc3NpZ25vcnMubGlzdCwgJ21lbWJlcl9pZCcpLmxlbmd0aCA+IDAgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5hc3NpZ25vcnMubGlzdCwgJ21lbWJlcl9pZCcpWzBdIDogdGhpcy5tZW1iZXJJZCxcclxuICAgICAgb2JqZWN0aXZlOiAobW9yZU9wdGlvbnMuT0JKRUNUSVZFKSA/IG9iamVjdGl2ZSA6ICcnLFxyXG4gICAgICBvbl9jb21wbGV0aW9uX29mOiBlbnRydXN0Rm9ybS5yZXBvcnRJZCA/IFtlbnRydXN0Rm9ybS5yZXBvcnRJZF0gOiBbXSxcclxuICAgICAgb25fY29tcGxldGlvbl9vZl90eXBlOiAxLFxyXG4gICAgICBvcmdhbmlzYXRpb25faWQ6IHRoaXMub3JnYW5pemF0aW9uSWQsXHJcbiAgICAgIG92ZXJyaWRlX3dlZWtseTogMCxcclxuICAgICAgcGFyZW50X2lkOiAwLFxyXG4gICAgICBwZW5hbHR5OiAnJyxcclxuICAgICAgcHJpdmF0ZV9saWJyYXJ5X2lkOiAwLFxyXG4gICAgICByZW1hcmtzOiByZW1hcmtzLFxyXG4gICAgICByZW1pbmRlcl9iZWZvcmVfZGF5czogZW50cnVzdEZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMsXHJcbiAgICAgIHJlcG9ydF9mb3JtYXQ6IChtb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFKSA/IGVudHJ1c3RGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdEZpbGVzIDogW10sXHJcbiAgICAgIHJlcG9ydF9mb3JtYXRfbGluazogJycsXHJcbiAgICAgIHJlcG9ydF9uYW1lOiBlbnRydXN0Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lLFxyXG4gICAgICByZXBvcnRfdXBsb2FkX2ZsYWc6IGVudHJ1c3RGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPyAxIDogMCxcclxuICAgICAgcmV2aWV3X2FmdGVyX2RheXM6IChtb3JlT3B0aW9ucy5SRVZJRVdFUikgPyBlbnRydXN0Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld0NvbXBsZXRlRGF5cyA9PT0gJycgPyAwIDogTnVtYmVyKGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzKSA6IDAsXHJcbiAgICAgIHJldmlld19mYWlsZWRfYWZ0ZXJfZGF5czogKG1vcmVPcHRpb25zLlJFVklFV0VSKSA/IGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Tk90Q29tcGxldGVkRGF5cyA9PT0gJycgPyAwIDogTnVtYmVyKGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Tk90Q29tcGxldGVkRGF5cykgOiAwLFxyXG4gICAgICByZXZpZXdlcl9hcnI6IChtb3JlT3B0aW9ucy5SRVZJRVdFUikgPyB7XHJcbiAgICAgICAgbGV2ZWwxOiB7XHJcbiAgICAgICAgICByZXZpZXdlcnM6IHRoaXMuc2V0UmV2aWV3ZXJQYXlsb2FkKGVudHJ1c3RGb3JtLnJldmlld2Vycy5saXN0LCAnbGlzdCcsIGVudHJ1c3RGb3JtLnJldmlld2Vycy5hY2NlcHRlZERhdGEsIChlbnRydXN0Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93KSA/ICdTRVFVRU5USUFMJyA6ICdBTllPTkUnKSxcclxuICAgICAgICAgIHR5cGU6IChlbnRydXN0Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93KSA/ICdTRVFVRU5USUFMJyA6ICdBTllPTkUnXHJcbiAgICAgICAgfSxcclxuICAgICAgfSA6IHt9LFxyXG4gICAgICByZXZpZXdlcl9jaGVja3BvaW50czogW3sgY2hlY2twb2ludHM6IFtdLCBpbnN0cnVjdGlvbjogJycgfV0sXHJcbiAgICAgIHJldmlld2VyX2lkOiAwLFxyXG4gICAgICByaXNrX2NsYXNzOiB0aGlzLmlzUmlza0VuYWJsZSA/IGVudHJ1c3RGb3JtLnJpc2tDbGFzcyA6IDIsXHJcbiAgICAgIHJpc2tfaWRzOiAnJyxcclxuICAgICAgcmlza19tYXRyaXhfZGF0YTogKG1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04pID8gZW50cnVzdEZvcm0ucmlza01hdHJpeCA6ICcwLDAsMCwwLDAsMCcsXHJcbiAgICAgIHNhbXBsZV9zaXplOiAwLFxyXG4gICAgICBzdGFydF9kYXRlX3V0Yzogc3RhcnREYXRlLFxyXG4gICAgICBzdGF0dXRvcnlfZGF5OiAwLFxyXG4gICAgICB0ZXN0X3JlcXVpcmVkX2ZsYWc6IChtb3JlT3B0aW9ucy5BU1NVUkFOQ0UpID8gKGVudHJ1c3RGb3JtLmFzc3VyYW5jZUxpc3QubGVuZ3RoID4gMCA/IDEgOiAwKSA6IDAsXHJcbiAgICAgIHRlc3RwbGFuX2NhdGVnb3J5X2lkOiAobW9yZU9wdGlvbnMuQVNTVVJBTkNFKSA/IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtLmFzc3VyYW5jZUxpc3QsICdjYXRlZ29yeV9pZCcpIDogW10sXHJcbiAgICAgIHRlc3RwbGFuX2NhdGVnb3J5X21hbmFnZXI6ICcnLFxyXG4gICAgICBhdWRpdF9jYXRlZ29yeV9kZXRhaWxzOiBtb3JlT3B0aW9ucy5SRVFVSVJFU19BVURJVCAmJiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscz8uY2F0ZWdvcnlfaWQgPyB7XHJcbiAgICAgICAgY2F0ZWdvcnlfaWQ6IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMuY2F0ZWdvcnlfaWQsXHJcbiAgICAgICAgc2FtcGxlOiB0aGlzLnNlbGVjdGVkU2FtcGxlID09PSAwID8gdGhpcy5zYW1wbGVWYWx1ZSA6IDAsXHJcbiAgICAgICAgcGVyY2VudGFnZTogdGhpcy5zZWxlY3RlZFNhbXBsZSA9PT0gMSA/IHRoaXMuc2FtcGxlUGVyY2VudGFnZSA6IDAsXHJcbiAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm46IGAxfjB+JHt0aGlzLnNlbmRBdWRpdFJlbWluZGVyc1ZhbHVlfX4xYCxcclxuICAgICAgICBmcmVxdWVuY3lfdGltZTogbW9tZW50KHRoaXMuYXVkaXRUaW1lLCAnSEg6bW0gYScpLmZvcm1hdCgnSEg6bW06c3MnKVxyXG4gICAgICB9IDoge1xyXG4gICAgICAgIGNhdGVnb3J5X2lkOiAwLFxyXG4gICAgICAgIHNhbXBsZTogMCxcclxuICAgICAgICBwZXJjZW50YWdlOiAwLFxyXG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiBgYCxcclxuICAgICAgICBmcmVxdWVuY3lfdGltZTogJydcclxuICAgICAgfSxcclxuICAgICAgYXNzZXNzbWVudDoge1xyXG4gICAgICAgIGNhdGVnb3J5X2lkOiBtb3JlT3B0aW9ucy5BU1NFU1NNRU5UID8gZW50cnVzdEZvcm0/LmFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkIDogJycsXHJcbiAgICAgICAgYXNzZXNzbWVudF9pZDogbW9yZU9wdGlvbnMuQVNTRVNTTUVOVCA/IGVudHJ1c3RGb3JtPy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkIDogJydcclxuICAgICAgfSxcclxuICAgICAgYXNzZXNzbWVudF9jaGVja3BvaW50OiBtb3JlT3B0aW9ucy5DSEVDS1BPSU5UU19ORVcgPyAoT2JqZWN0LmtleXMoZW50cnVzdEZvcm0/Lm5ld19jaGVja3BvaW50cykubGVuZ3RoID4gMCA/IGVudHJ1c3RGb3JtPy5uZXdfY2hlY2twb2ludHMgOiB7fSkgOiB7fSxcclxuICAgICAgcXVlc3Rpb25uYWlyZV90eXBlOiBtb3JlT3B0aW9ucy5DSEVDS1BPSU5UU19ORVcgPyAoT2JqZWN0LmtleXMoZW50cnVzdEZvcm0/Lm5ld19jaGVja3BvaW50cykubGVuZ3RoID4gMCA/ICdhc3Nlc3NtZW50X2NoZWNrcG9pbnQnIDogKG1vcmVPcHRpb25zLkFTU0VTU01FTlQgJiYgZW50cnVzdEZvcm0/LmFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkID8gJ2Fzc2Vzc21lbnQnIDogKEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzKSAhPSAnJyAmJiBtb3JlT3B0aW9ucy5DSEVDS1BPSU5UUyA/ICdjaGVja3BvaW50JyA6ICcnKSkpIDogJydcclxuICAgIH07XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5UGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnICYmICF0aGlzLmlzRHVwbGljYXRlRW50cnVzdCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5zdWJtaXRFbnRydXN0KHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcclxuXHJcblxyXG4gICAgICAgIGlmIChyZXMubWVzc2FnZSAmJiByZXMubWVzc2FnZS50b0xvd2VyQ2FzZSgpID09PSAnYnVsayBlbnRydXN0Jykge1xyXG4gICAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFlvdSBoYXZlIGVudHJ1c3RlZCAke3Jlcy5jYWxjdWxhdGVfbm9fb2ZfcmVzcG9uc2liaWl0aWVzfSByZXNwb25zaWJpbGl0aWVzLiBUaGVzZSB3b3VsZCBiZSByZWZsZWN0ZWQgd2l0aGluIHlvdXIgYWNjb3VudCBpbiBzb21ldGltZS5gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgJiYgcGF5bG9hZC5jcmVhdGVkX2J5ID09IDApIHtcclxuICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9ICdUaGlzIHJlc3BvbnNpYmlsaXR5IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBub3RpZmljYXRpb24gcXVldWUuJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5jcmVhdGVkX2J5ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9IFwiVmlldyBSZXNwb25zaWJpbGl0aWVzXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBZb3UganVzdCBjcmVhdGVkIGEgcmVzcG9uc2liaWxpdHkgb24gYmVoYWxmICR7ZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QuZmluZCgobWVtYmVyOiBhbnkpID0+IG1lbWJlci5tZW1iZXJfaWQgPT09IHBheWxvYWQubWVtYmVyX2lkKS5tZW1iZXJfbmFtZX1gO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMucmVzZXQoKTtcclxuICAgICAgfSxcclxuICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCAnYWxlcnQnKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcgfHwgdGhpcy5pc0R1cGxpY2F0ZUVudHJ1c3QpIHtcclxuICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFRoZSByZXNwb25zaWJpbGl0eSBoYXMgYmVlbiBtb2RpZmllZC5gO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS51cGRhdGVFbnRydXN0KHBheWxvYWQsIHRoaXMucmVzcG9uc2liaWxpdHlJZCwgdHJ1ZSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNEdXBsaWNhdGVFbnRydXN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIHRoaXMucmVzZXRGb3JtKCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsICdhbGVydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICogSXQgcmVzZXRzIHRoZSBmb3JtLlxyXG4gICovXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtID0ge1xyXG4gICAgICBhc3NpZ25vcnM6IHtcclxuICAgICAgICBlbmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGxpc3Q6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5OiB7XHJcbiAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICBhc3NpZ25lZXM6IHtcclxuICAgICAgICB3aG9DYW5Db21wbGV0ZTogJ0FMTCcsXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgZnJlcXVlbmN5OiAnJyxcclxuICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICBvYmplY3RpdmU6ICcnLFxyXG4gICAgICByYzogW10sXHJcbiAgICAgIGNhdGVnb3J5OiBbXSxcclxuICAgICAgY2hlY2twb2ludEluc3RydWN0aW9uOiAnJyxcclxuICAgICAgY3VzdG9tVGFnczogW10sXHJcbiAgICAgIGNoZWNrcG9pbnRzOiBbXSxcclxuICAgICAgcmV2aWV3ZXJzOiB7XHJcbiAgICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxyXG4gICAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xyXG4gICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAyLFxyXG4gICAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuXHJcbiAgICAgIG92ZXJzZWVyczoge1xyXG4gICAgICAgIG5vdGlmeUxpc3Q6IFtdLFxyXG4gICAgICAgIGxpc3Q6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvcm1hdEFuZEV2aWRlbmNlOiB7XHJcbiAgICAgICAgZm9ybWF0UmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgIGZvcm1hdEZpbGVzOiBbXSxcclxuICAgICAgICBmb3JtYXRMaW5rczogW10sXHJcbiAgICAgICAgZXZpZGVuY2VSZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc3VyYW5jZUxpc3Q6IFtdLFxyXG4gICAgICByZXF1aXJlc0F1ZGl0TGlzdDogW10sXHJcbiAgICAgIHJpc2tDbGFzczogMSxcclxuICAgICAgcmlza01hdHJpeDogJzAsMCwwLDAsMCwwJyxcclxuICAgICAgcHJvZ3JhbTogW10sXHJcbiAgICAgIHByb2dyYW1fc2VsZWN0ZWRfaWRzOiBbXVxyXG4gICAgfTtcclxuICAgIHRoaXMubW9yZU9wdGlvbnMgPSB7XHJcbiAgICAgIE9CSkVDVElWRTogZmFsc2UsXHJcbiAgICAgIFJDOiBmYWxzZSxcclxuICAgICAgQ0FURUdPUlk6IGZhbHNlLFxyXG4gICAgICBGT1JNQVRFX0VWSURFTkNFOiBmYWxzZSxcclxuICAgICAgQ0hFQ0tQT0lOVFM6IGZhbHNlLFxyXG4gICAgICBSSVNLX0NMQVNTSUZJQ0FUSU9OOiBmYWxzZSxcclxuICAgICAgUkVWSUVXRVI6IGZhbHNlLFxyXG4gICAgICBPVkVSU0VFUjogZmFsc2UsXHJcbiAgICAgIEFTU1VSQU5DRTogZmFsc2UsXHJcbiAgICAgIEFQUFM6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnSG93IG9mdGVuIGRvZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9jY3VyPyc7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMgPSB7XHJcbiAgICAgIHBhdHRlcm46ICcnLFxyXG4gICAgICBub3RpZmljYXRpb25QZW5kaW5nOiAwLFxyXG4gICAgICBkYXRlT2ZNb2RpZmllZDogMCxcclxuICAgICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXHJcbiAgICAgIHNlbGVjdGVkUmVwb3J0OiAwLFxyXG4gICAgICBsaWZlY3ljbGU6ICcwMDAwLTAwLTAwfn4wJyxcclxuICAgICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXHJcbiAgICAgIHN0YXJ0T25UaGVEYXk6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgICAgd2luZG93OiAwLFxyXG4gICAgICBmYWlsZWQ6IDAsXHJcbiAgICAgIHRpbWU6ICcxMTo1OSBwbScsXHJcbiAgICAgIGZhaWxlZFRpbWU6ICcnLFxyXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAwXHJcbiAgICB9XHJcbiAgICB0aGlzLnNhbXBsZVZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zYW1wbGVQZXJjZW50YWdlID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IC0xO1xyXG4gICAgdGhpcy5zZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZSA9IDI7XHJcbiAgICB0aGlzLmF1ZGl0VGltZSA9ICcxMTo1OSBwbSdcclxuICAgIHRoaXMubW9kZSA9ICdDUkVBVEUnXHJcbiAgICB0aGlzLmlzRW50cnVzdCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc2V0Rm9ybS5lbWl0KHRydWUpO1xyXG4gIH1cclxuICBhY3Rpb24oZXZlbnQ6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JJU0tfVFJFQVRNRU5UJykge1xyXG4gICAgICB0aGlzLmNsb3NlU21pbGV5KCdkcycpO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHN3aXRjaCAoZXZlbnQpIHtcclxuICAgICAgY2FzZSAnYWRkTW9yZSc6XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWV3JzpcclxuICAgICAgICB0aGlzLnZpZXdSZXNwb25zaWJpbGl0aWVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHZpZXdSZXNwb25zaWJpbGl0aWVzKCk6IHZvaWQge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgbGV0IHVybFN1YnN0cmluZyA9ICcnO1xyXG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgIGlmICh0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZyAmJiB0aGlzLnJlc3BvbnNpYmlsaXR5UGF5bG9hZC5jcmVhdGVkX2J5ID09IDApIHtcclxuICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXRpZXMvcmVzcG9uc2liaWxpdGllcy1xdWV1ZSc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlQYXlsb2FkLmNyZWF0ZWRfYnkgPiAwICYmIHRoaXMubW9kZSAhPT0gJ0VESVQnKSB7XHJcbiAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzL292ZXJzaWdodC1yZXNwb25zaWJpbGl0aWVzP3RhYj00JnBhZ2U9MSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmxTdWJzdHJpbmcgPSAnY29tcGxpYW5jZS9tYW5hZ2UtcmVzcG9uc2liaWxpdGllcyc7XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnLyMvJyArIHVybFN1YnN0cmluZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvY29tcGxpYW5jZS8jLycgKyB1cmxTdWJzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSAhPT0gJ0VESVQnKSB7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbG9zZVNtaWxleSgnZHMnKVxyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuICBjbG9zZVNtaWxleShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcclxuICAgIC8vIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHRoaXMucmVzcG9uc2liaWxpdHlEYXRhKTtcclxuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHsgZXZ0OiB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSwgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgfVxyXG4gIC8vIGZvciBlZGl0IHJlc3BvbnNpYmlsaXR5XHJcbiAgZnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgcGF0dGVybjogZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzLFxyXG4gICAgICB3aW5kb3c6IGV2ZW50Py5yZW1pbmRlcl9iZWZvcmVfZGF5cyxcclxuICAgICAgZmFpbGVkQWZ0ZXI6IGV2ZW50Py5mYWlsZWRfYWZ0ZXJfZGF5cyxcclxuICAgICAgZmFpbGVkX3RpbWVfdXRjOiBldmVudC5mYWlsZWRfdGltZV91dGMsXHJcbiAgICAgIGxpZmVjeWNsZURldGFpbHM6IGV2ZW50Py5saWZlY3ljbGVfZGV0YWlscyxcclxuICAgICAgc3RhcnRGcm9tOiBOdW1iZXIoZXZlbnQ/LnN0YXJ0X29mX2RheV91dGMpLFxyXG4gICAgICB0aW1lSW4yNEhyOiBldmVudC5mcmVxdWVuY3lfdGltZSxcclxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyxcclxuICAgICAgc3RhcnREYXRlOiBOdW1iZXIoZXZlbnQ/LnN0YXJ0X29mX2RheV91dGMpLFxyXG4gICAgICByZXBvcnRJZDogZXZlbnQ/Lm9uX2NvbXBsZXRpb25fb2ZbMF0gPz8gMCxcclxuICAgICAgdGltZUluMTJocjogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKGV2ZW50LmZyZXF1ZW5jeV90aW1lICE9ICcnID8gZXZlbnQuZnJlcXVlbmN5X3RpbWUgOiAnMjM6NTk6MDAnKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZnJlcXVlbmN5RGF0YShkYXRhKTtcclxuICB9XHJcblxyXG4gIGZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnBhdHRlcm4gPSBldmVudD8uZnJlcXVlbmN5X2RldGFpbHM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuZmFpbGVkVGltZSA9IGV2ZW50Py5mcmVxdWVuY3lfdGltZTtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy53aW5kb3cgPSBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuZmFpbGVkID0gZXZlbnQ/LmZhaWxlZF9hZnRlcl9kYXlzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9IGV2ZW50Py5saWZlY3ljbGVfZGV0YWlscztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSBldmVudD8uc3RhcnRfb2ZfZGF5X3V0YztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zZWxlY3RlZFJlcG9ydCA9IGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDA7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuZGF0ZU9mTW9kaWZpZWQgPSBldmVudD8uZG9tX3V0YztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gZXZlbnQ/LmNvbnRpbnVvdXNfZmFpbGVkX2RheXM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gZXZlbnQ/LnBsYWNlaG9sZGVyO1xyXG4gIH1cclxuXHJcbiAgZnJlcXVlbmN5RGF0YShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pbnZhbGlkVHlwZSA9PT0gJ3doZW4nKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnJztcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9IGV2ZW50LnBhdHRlcm47XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9IChldmVudC5jYXNlID09PSBcImRhaWx5XCIpID8gMCA6IGV2ZW50LndpbmRvd1xyXG4gICAgLy90aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9IGV2ZW50LndpbmRvdztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZhaWxlZF9hZnRlcl9kYXlzID0gZXZlbnQuZmFpbGVkQWZ0ZXI7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mYWlsZWRfdGltZV91dGMgPSBldmVudC5mYWlsZWRfdGltZV91dGM7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5saWZlY3ljbGVEZXRhaWxzID0gZXZlbnQubGlmZWN5Y2xlRGV0YWlscztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcG9ydElkID0gZXZlbnQucmVwb3J0SWQgPz8gMDtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnN0YXJ0RGF0ZSA9IGV2ZW50LnN0YXJ0RnJvbTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnRpbWVJbjI0SHIgPSBldmVudC50aW1lSW4yNEhyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY29udGludW91c19mYWlsZWRfZGF5cyA9IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXM7XHJcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIGZhbHNlKTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBldmVudC5wYXR0ZXJuLFxyXG4gICAgICBmcmVxdWVuY3lfdGltZTogZXZlbnQudGltZUluMTJocixcclxuICAgICAgcmVtaW5kZXJfYmVmb3JlX2RheXM6IGV2ZW50LndpbmRvdyxcclxuICAgICAgZmFpbGVkX2FmdGVyX2RheXM6IGV2ZW50LmZhaWxlZEFmdGVyLFxyXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZXZlbnQubGlmZWN5Y2xlRGV0YWlscyxcclxuICAgICAgc3RhcnRfb2ZfZGF5X3V0YzogZXZlbnQuc3RhcnRGcm9tLFxyXG4gICAgICBvbl9jb21wbGV0aW9uX29mOiBbZXZlbnQucmVwb3J0SWRdLFxyXG4gICAgICBkb21fdXRjOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcclxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyxcclxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LnBsYWNlaG9sZGVyXHJcbiAgICB9O1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKHBheWxvYWQpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tCbGFuayhkYXRhOiBzdHJpbmcpIHtcclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIGxldCB0ZXh0ID0gZGF0YTtcclxuICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFwmbmJzcDsvZywgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAvKipcclxuICAqIEl0IHRha2VzIGEgc3RyaW5nIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxyXG4gICogQHBhcmFtIHthbnl9IHJlcyAtIGFueSA9IHtcclxuICAqL1xyXG4gIGdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKHJlczogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAocmVzLmZyZXF1ZW5jeV9kZXRhaWxzKSB7XHJcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5RGV0YWlscyA9IHJlcz8uZnJlcXVlbmN5X2RldGFpbHMuc3BsaXQoJ34nKTtcclxuICAgICAgICBjb25zdCBmcmVxdWVuY3lUaW1lID0gcmVzPy5mcmVxdWVuY3lfdGltZSA9PT0gJzAwOjAwOjAwJyA/ICcxMjowMCBhbScgOiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIocmVzPy5mcmVxdWVuY3lfdGltZSk7XHJcbiAgICAgICAgc3dpdGNoIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzBdKSkge1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICB0aGlzLmdldERhaWx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICB0aGlzLmdldFdlZWtseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgdGhpcy5nZXRNb250aGx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICB0aGlzLmdldFF1YXJ0ZXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgOTpcclxuICAgICAgICAgICAgdGhpcy5nZXRCaWFubnVhbFBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgdGhpcy5nZXRZZWFybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBjb25zdCBkYXRlT2JqZWN0ID0gbmV3IERhdGUobW9tZW50KGZyZXF1ZW5jeURldGFpbHNbMV0gKyAnLScgKyBmcmVxdWVuY3lEZXRhaWxzWzJdICsgJy0nICsgZnJlcXVlbmN5RGV0YWlsc1szXSArICcgMDA6MDA6MDAnLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLnVuaXgoKSAqIDEwMDApO1xyXG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XHJcbiAgICAgICAgICAgICAgICAnT25lIFRpbWUgJyArIGRhdGVPYmplY3QuZ2V0RGF0ZSgpICsgJyAnICsgdGhpcy5zaG9ydE1vbnRoW2RhdGVPYmplY3QuZ2V0TW9udGgoKV0gKyAnICcgKyBkYXRlT2JqZWN0LmdldEZ1bGxZZWFyKCkgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICB0aGlzLmdldFJhbmRvbVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdZb3UgaGF2ZSBzZWxlY3RlZCBhbiBvbmdvaW5nIGZyZXF1ZW5jeS4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICB0aGlzLmdldE9uQ29tcGxldGlvbk9mKGZyZXF1ZW5jeURldGFpbHMsIHJlcz8ub25fY29tcGxldGlvbl9vZlswXSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4vKipcclxuICogSXQgZ2V0cyB0aGUgZnJlcXVlbmN5IGRldGFpbHMgYW5kIHJlcG9ydCBpZCwgdGhlbiBpdCBzZXRzIHRoZSBmcmVxdWVuY3kgcGxhY2Vob2xkZXIgdG8gdGhlIGZyZXF1ZW5jeVxyXG4gKiBkZXRhaWxzIGFuZCB0aGVuIGl0IGdldHMgdGhlIG9uIGNvbXBsZXRpb24gb2YgcmVzcG9uc2liaWxpdHkgYW5kIHNldHMgdGhlIGZyZXF1ZW5jeSBwbGFjZWhvbGRlciB0b1xyXG4gKiB0aGUgZnJlcXVlbmN5IGRldGFpbHMgYW5kIHRoZSByZXBvcnQgbmFtZS5cclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbMF0gPSZndDsgXCIxXCJcclxuICogQHBhcmFtIHtudW1iZXJ9IHJlcG9ydElkIC0gbnVtYmVyXHJcbiAqL1xyXG4gIGdldE9uQ29tcGxldGlvbk9mKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgcmVwb3J0SWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGZyZXF1ZW5jeURldGFpbHNbM10gKyAnICcgKyAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAxID8gJ2RheXMnIDogJ2RheScpICsgJyBhZnRlciBjb21wbGV0aW9uIG9mICc7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZ2V0T25Db21wbGV0aW9uT2ZSZXNwb25zaWJpbGl0eSgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgcmVwb3J0RGV0YWlscyA9IHJlcy5maW5kKChlbGU6IGFueSkgPT4gZWxlLlJlcG9ydElkID09IHJlcG9ydElkKTtcclxuICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGZyZXF1ZW5jeURldGFpbHNbM10gKyAnICcgKyAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAxID8gJ2RheXMnIDogJ2RheScpICsgJyBhZnRlciBjb21wbGV0aW9uIG9mICcgKyAocmVwb3J0RGV0YWlscyA/IHJlcG9ydERldGFpbHMucmVwb3J0X25hbWUgOiAnJyk7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4vKipcclxuICogXCJJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1szXSBpcyAxLCB0aGVuIHNldCB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgdG8gJ0RhaWx5IGJ5ICcgKyBmcmVxdWVuY3lUaW1lLFxyXG4gKiBvdGhlcndpc2UgaWYgZnJlcXVlbmN5RGV0YWlsc1szXSBpcyBncmVhdGVyIHRoYW4gMSwgdGhlbiBzZXQgdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIHRvICdFdmVyeSAnICtcclxuICogcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgKyAnIGRheXMgYnkgJyArIGZyZXF1ZW5jeVRpbWUuXCJcclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbMCwgMCwgMCwgMV1cclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEyOjAwIEFNXCJcclxuICovXHJcbiAgZ2V0RGFpbHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBmcmVxdWVuY3lEZXRhaWxzID0gZnJlcXVlbmN5RGV0YWlscy5tYXAoTnVtYmVyKTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdEYWlseSBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA+IDEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5ICcgKyBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSArICcgZGF5cyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycyBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMuXHJcbiAqXHJcbiAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycywgbGlrZSB0aGlzOlxyXG4gKlxyXG4gKiBnZXRXZWVrbHlQbGFjZWhvbGRlcihbXCIxXCIsXCIyLDMsNCw1LDYsN1wiLFwiMVwiLFwiMVwiXSwgXCIxMDowMCBBTVwiKVxyXG4gKlxyXG4gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMsIGxpa2UgdGhpczpcclxuICpcclxuICogXCJFdmVyeSBNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5IGJ5IDEwOjAwIEFNXCI8L2NvZGU+XHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gW1wiMVwiLCBcIjEsMiwzLDQsNVwiLCBcIlwiLCBcIjFcIiwgXCJcIl1cclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICovXHJcbiAgZ2V0V2Vla2x5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcclxuICAgIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWREYXkgPSBmcmVxdWVuY3lEZXRhaWxzWzFdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZGF5TmFtZVtwYXJzZUludChlbGUpIC0gMV07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAnICsgc2VsZWN0ZWREYXkuam9pbigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPT09IDIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5IGFsdGVybmF0ZSAnICsgc2VsZWN0ZWREYXkuam9pbigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPT09IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5IDNyZCAnICsgc2VsZWN0ZWREYXkuam9pbigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAnICsgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogSXQgdGFrZXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMsIGNvbnZlcnRzIHRoZW0gdG8gbW9udGggbmFtZXMsIGFuZCB0aGVuIGFkZHMgdGhlbSB0byBhXHJcbiAqIHNlbnRlbmNlLlxyXG4gKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxXCIsIFwiMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTJcIl1cclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICovXHJcbiAgZ2V0TW9udGhseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyAxLCAyLCAzLCAyMSwgMjIsIDIzLCBvciBncmVhdGVyIHRoYW4gMywgdGhlbiBzZXQgdGhlXHJcbiAgKiBmcmVxdWVuY3lQbGFjZWhvbGRlciB0byBhIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzFdIGFuZCB0aGUgZnJlcXVlbmN5RGV0YWlsc1syXVxyXG4gICogYW5kIHRoZSBmcmVxdWVuY3lUaW1lLlxyXG4gICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIzXCIsIFwiMVwiLCBcIjEsMiwzXCJdXHJcbiAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5VGltZSAtIFwiMTA6MDAgQU1cIlxyXG4gICovXHJcbiAgZ2V0UXVhcnRlcmx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcclxuICAgIHtcclxuICAgICAgY29uc3QgcXVhcnRlcmx5ID0gWydKYW51YXJ5LCBBcHJpbCwgSnVseSwgT2N0b2JlcicsICdGZWJydWFyeSwgTWF5LCBBdWd1c3QsIE5vdmVtYmVyJywgJyBNYXJjaCwgSnVuZSwgU2VwdGVtYmVyLCBEZWNlbWJlciddO1xyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzFzdCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIxIHx8IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdzdCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mIGV2ZXJ5ICcgKyBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICd0aCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBudW1iZXJzIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBtb250aCBuYW1lcy5cclxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxXCIsIFwiMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTJcIl1cclxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5VGltZSAtIFwiMTA6MDAgQU1cIlxyXG4gICAqL1xyXG4gIGdldEJpYW5udWFsUGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcclxuICAgIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKS5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChlbGUpIC0gMV07XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzFzdCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMm5kIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICczcmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIxIHx8IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdzdCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnbmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICd0aCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAvKipcclxuICAqIElmIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzFdIGlzIGxlc3MgdGhhbiAyLCB0aGVuIHRoZSBmcmVxdWVuY3lQbGFjZWhvbGRlciBpcyBzZXQgdG8gdGhlIDFzdCwgMm5kLFxyXG4gICogM3JkLCBvciBudGggb2YgZXZlcnkgbW9udGggYnkgZnJlcXVlbmN5VGltZS5cclxuICAqXHJcbiAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyBncmVhdGVyIHRoYW4gMSwgdGhlbiB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgaXMgc2V0IHRvIHRoZSAxc3QsIDJuZCxcclxuICAqIDNyZCwgb3IgbnRoIG9mIGV2ZXJ5IG1vbnRoLCBJbnRlcnZhbDogZXZlcnkgeWVhclNlcXVlbmNlIHllYXJzIGJ5IGZyZXF1ZW5jeVRpbWUuXHJcbiAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIlllYXJseVwiLCBcIjFcIiwgXCIxXCIsIFwiMVwiXVxyXG4gICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAqL1xyXG4gIGdldFllYXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHllYXJTZXF1ZW5jZSA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMCA/IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pIDogMTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pIDwgMikge1xyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkIG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICd0aCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxIHx8IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSkge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDEpIHtcclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzFzdCAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnLCBJbnRlcnZhbDogZXZlcnkgJyArIHllYXJTZXF1ZW5jZSArICcgeWVhcnMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMikge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMm5kICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcsIEludGVydmFsOiBldmVyeSAnICsgeWVhclNlcXVlbmNlICsgJyB5ZWFycyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICczcmQgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XHJcbiAgICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoIG9mICAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnLCBJbnRlcnZhbDogZXZlcnkgJyArIHllYXJTZXF1ZW5jZSArICcgeWVhcnMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEgfHwgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIxKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdyZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBJdCB0YWtlcyBhIGZyZXF1ZW5jeURldGFpbHMgYXJyYXkgYW5kIGEgZnJlcXVlbmN5VGltZSBhcnJheSBhbmQgcmV0dXJucyBhIHN0cmluZy5cclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbNCwxLDEsMV1cclxuICovXHJcbiAgZ2V0UmFuZG9tUGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcclxuICAgIGNvbnN0IHF1YXJ0ZXJseSA9IFsnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLCAnRmVicnVhcnksIE1heSwgQXVndXN0LCBOb3ZlbWJlcicsICcgTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInXTtcclxuICAgIHtcclxuICAgICAgc3dpdGNoIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRXZlcnkgd2VlayBmb3IgJyArIGZyZXF1ZW5jeURldGFpbHNbM10gKyAnIHJhbmRvbSBpbnN0YW5jZXMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XHJcbiAgICAgICAgICAgICcgRXZlcnkgJyArXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKS5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChlbGUpIC0gMV07XHJcbiAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBhbGlnblxyXG4gICAgICAgICAgICB9KSArXHJcbiAgICAgICAgICAgICcgZm9yICcgK1xyXG4gICAgICAgICAgICBmcmVxdWVuY3lEZXRhaWxzWzNdICtcclxuICAgICAgICAgICAgJyByYW5kb20gaW5zdGFuY2VzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGZvciAnICsgZnJlcXVlbmN5RGV0YWlsc1szXSArICcgcmFuZG9tIGluc3RhbmNlcyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5IHllYXIgZm9yICcgKyBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyByYW5kb20gaW5zdGFuY2VzJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBcIldoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBlZGl0IGJ1dHRvbiwgdGhlIGVkaXQgYnV0dG9uIGlzIGhpZGRlbiBhbmQgdGhlIGlucHV0IGZpZWxkIGlzIHNob3duLlxyXG4gKiBXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgaW5wdXQgZmllbGQsIHRoZSBpbnB1dCBmaWVsZCBpcyBoaWRkZW4gYW5kIHRoZSBlZGl0IGJ1dHRvbiBpcyBzaG93bi5cIlxyXG4gKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBhbnkgLSB0aGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGZ1bmN0aW9uXHJcbiAqL1xyXG4gIG9uRWRpdFdoYXQoZXZlbnQ6IGFueSkge1xyXG5cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gdGhpcyB3aWxsIG1ha2UgdGhlIGV4ZWN1dGlvbiBhZnRlciB0aGUgYWJvdmUgYm9vbGVhbiBoYXMgY2hhbmdlZFxyXG4gICAgICB0aGlzLmlzRWRpdFdoYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy53aGF0SW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKlxyXG4gICogVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgcGFyYW1ldGVyIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHN0cmluZ3MuXHJcbiAgKiBAcGFyYW0ge2FueX0gW3Jlc10gLSBpcyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgQVBJXHJcbiAgKi9cclxuICBnZXRFZGl0TW9yZU9wdGlvbnMocmVzPzogYW55KSB7XHJcbiAgICBsZXQgY2hlY2tlZE1vcmVPcHRpb25zID0gW11cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgIT09ICcnKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdPQkpFQ1RJVkUnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PQkpFQ1RJVkUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JJU0tfQ0xBU1NJRklDQVRJT04nKTtcclxuICAgIHRoaXMubW9yZU9wdGlvbnMuUklTS19DTEFTU0lGSUNBVElPTiA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUFJPR1JBTScpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlBST0dSQU0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0UmVxdWlyZWQpIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0ZPUk1BVEVfRVZJREVOQ0UnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSQycpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQ0hFQ0tQT0lOVFMnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5DSEVDS1BPSU5UUyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JFVklFV0VSJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkVWSUVXRVIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QubGVuZ3RoID4gMCB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdPVkVSU0VFUicpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzdXJhbmNlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdBU1NVUkFOQ0UnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5BU1NVUkFOQ0UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSRVFVSVJFU19BVURJVCcpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJFUVVJUkVTX0FVRElUID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzLnF1ZXN0aW9ubmFpcmVfdHlwZSA9PT0gJ2Fzc2Vzc21lbnQnKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdBU1NFU1NNRU5UJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQVNTRVNTTUVOVCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcy5xdWVzdGlvbm5haXJlX3R5cGUgPT09ICdhc3Nlc3NtZW50X2NoZWNrcG9pbnQnKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdDSEVDS1BPSU5UU19ORVcnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5DSEVDS1BPSU5UU19ORVcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvLyBGb3JtYXQgJiBFdmlkZW5jZVxyXG4gIHRlc3RGdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lLnRyaW0oKSAhPT0gJycgJiYgdGhpcy5pc0VkaXRXaGF0ID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmlzRWRpdFdoYXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRlc2NyaXB0aW9uID09ICc8YnI+Jykge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSA9PSAnPGJyPicpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXZpZXdlclR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdyA9IGV2ZW50ID09PSAnU0VRVUVOVElBTCcgPyB0cnVlIDogZmFsc2VcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkU2FtcGxlRGF0YShldmVudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gZXZlbnQ7XHJcbiAgICB0aGlzLnRlbXBDaGVja1ZhbHVlID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEl0IHBvcHVsYXRlcyBhIGxpc3Qgb2YgYXNzdXJhbmNlIGNhdGVnb3JpZXMgYmFzZWQgb24gdGhlIHRlc3QgcGxhbiBjYXRlZ29yeSBzZWxlY3RlZC5cclxuICogQHBhcmFtIHthbnl9IHRlc3RQbGFuQ2F0ZWdvcnkgLSBhbnlcclxuICovXHJcbiAgcG9wdWxhdGVBc3N1cmFuY2VMaXN0KHRlc3RQbGFuQ2F0ZWdvcnk6IGFueSkge1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzdXJhbmNlID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QsIFt0ZXN0UGxhbkNhdGVnb3J5Py5jYXRlZ29yeV9pZF0sICdjYXRlZ29yeV9pZCcpO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyA9IHRlc3RQbGFuQ2F0ZWdvcnk7XHJcbiAgICBpZiAodGVzdFBsYW5DYXRlZ29yeS5zYW1wbGUpIHtcclxuICAgICAgdGhpcy5pc1NhbXBsZSA9IHRydWVcclxuICAgICAgdGhpcy5zYW1wbGVWYWx1ZSA9IHRlc3RQbGFuQ2F0ZWdvcnkuc2FtcGxlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGVzdFBsYW5DYXRlZ29yeS5wZXJjZW50YWdlKSB7XHJcbiAgICAgIHRoaXMuaXNTYW1wbGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNhbXBsZVBlcmNlbnRhZ2UgPSB0ZXN0UGxhbkNhdGVnb3J5LnBlcmNlbnRhZ2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy50ZW1wQ2hlY2tWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRTYW1wbGU7XHJcbiAgICB0aGlzLnNlbmRBdWRpdFJlbWluZGVyc1ZhbHVlID0gdGVzdFBsYW5DYXRlZ29yeS5mcmVxdWVuY3lfcGF0dGVybiA/IHBhcnNlSW50KHRlc3RQbGFuQ2F0ZWdvcnkuZnJlcXVlbmN5X3BhdHRlcm4uc3BsaXQoJ34nKVsyXSkgOiAyO1xyXG4gICAgdGhpcy5hdWRpdFRpbWUgPSBtb21lbnQodGVzdFBsYW5DYXRlZ29yeT8uZnJlcXVlbmN5X3RpbWUsICdISDptbTpzcycpLmZvcm1hdCgnSEg6bW0gYScpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vb24gc2FtcGxlIHRvZ2dsZSBvbi9vZmZcclxuICBjaGVja0lucHV0VmFsdWUoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IGtleSA9IGV2ZW50LmNoYXJDb2RlOyAgLy8gICAgICAgICBrZXkgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICByZXR1cm4gKChrZXkgPiA0NyAmJiBrZXkgPCA1OCkgfHwga2V5ID09IDQ1KTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgc3dpdGNoRW5hYmxlKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IHRoaXMudGVtcENoZWNrVmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gLTFcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPRE86ICBzZWxlY3QgQXNzZXNzbWVudCBsaXN0IGFuZCBzZXQgaWQgdG8gcGF5bG9hZFxyXG4gIG9uQXNzZXNzbWVudFNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmlzQXNzZXNzbWVudCA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzZXNzbWVudCA9IGV2ZW50O1xyXG4gIH1cclxuICAvLyBUT0RPOiBQb3B1bGF0ZSBhc3Nlc3NtZW50IGRhdGEgZnJvbSBhbHJlYWR5IHNlbGVjdGVkIGRhdGFcclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBhc3Nlc3NtZW50RGV0YWlscyA6IHNlbGVjdGVkIGFzc2Vzc21lbnQgZGV0YWlscyBsaWtlIGl0J3Mgb2JqZWN0IGlkIGFuZCBjYXRlZ29yeV9pZFxyXG4gICAqL1xyXG4gIGdldEFzc2Vzc21lbnREZXRhaWxzKGFzc2Vzc21lbnREZXRhaWxzOiBhbnksIHR5cGU/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEFzc2Vzc21lbnREZXRhaWxzQnlJRChhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmICh0eXBlID09PSAnYXNzZXNzbWVudCcpIHtcclxuXHJcbiAgICAgICAgICBjb25zdCBjYXRlZ29yeURldGFpbHMgPSByZXNbMF0uY2F0ZWdvcnkuZmluZCgoZWxlOiBhbnkpID0+IGVsZS5faWQgPT0gYXNzZXNzbWVudERldGFpbHMuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5BU1NFU1NNRU5UID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbnN0IGFzc2Vzc21lbnREYXRhID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeV9pZDogYXNzZXNzbWVudERldGFpbHMuY2F0ZWdvcnlfaWQsXHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmFzc2Vzc21lbnRfaWQsXHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnREZXRhaWxzOiB7XHJcbiAgICAgICAgICAgICAgaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmFzc2Vzc21lbnRfaWQsXHJcbiAgICAgICAgICAgICAgYXNzZXNzbWVudF9uYW1lOiByZXNbMF0uYXNzZXNzbWVudF9uYW1lLFxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uczogcmVzWzBdLnF1ZXN0aW9uc0NvdW50XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhdGVnb3J5X2RldGFpbHM6IGNhdGVnb3J5RGV0YWlsc1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzZXNzbWVudCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXNzZXNzbWVudERhdGEpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5DSEVDS1BPSU5UU19ORVcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wb3N0QXNzZXNzbWVudCh7IGFzc2Vzc21lbnREZXRhaWxzOiByZXNbMF0ucXVlc3Rpb25zIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIG9uUmVtb3ZlQ2hlY2twb2ludHModHlwZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9uUmVtb3ZpbmdDaGVja3BvaW50LmVtaXQodHlwZSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUNoZWNrcG9pbnQoKSB7XHJcbiAgICB0aGlzLm1vcmVPcHRpb25zLkNIRUNLUE9JTlRTID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCBBc3Nlc3NtZW50IGRldGFpbHNcclxuICovXHJcbiAgcG9zdEFzc2Vzc21lbnQoZXZlbnQ6IGFueSkge1xyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm5ld19jaGVja3BvaW50cyA9IGV2ZW50LmFzc2Vzc21lbnREZXRhaWxzO1xyXG4gICAgdGhpcy5jaGVja3BvaW50Q291bnQgPSBldmVudC5hc3Nlc3NtZW50RGV0YWlscy5lbGVtZW50cy5sZW5ndGg7XHJcbiAgICB0aGlzLmNoZWNrcG9pbnRDb3VudFVwZGF0ZWQuZW1pdCh0aGlzLmNoZWNrcG9pbnRDb3VudCk7XHJcbiAgICB0aGlzLnNldElzVXBsb2FkZWQoZmFsc2UpXHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0SXNVcGxvYWRlZChldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKVxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5wcmV2aWV3UGFuZWwubmV4dChldmVudCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tEZWZhdWx0UHJvZ3JhbU9uUmVtb3ZlKHByb2dyYW06IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJz09PT4xMScsdGhpcy5zZWxlY3RlZFByb2dyYW0sIHByb2dyYW0pXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKTtcclxuICAgIGlmKGluZGV4ICE9PSAtMSl7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCB1cGRhdGVkQ2F0ZWdvcmllcyA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeT8uZmlsdGVyKChlbDogYW55KSA9PiAhKGVsID09PSBwcm9ncmFtPy5jYXRlZ29yeV9pZCB8fCBwcm9ncmFtPy5jaGlsZF9pZD8uaW5jbHVkZXMoZWwpKSk7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gdXBkYXRlZENhdGVnb3JpZXM7XHJcbiAgICB9XHJcbiAgICAvLyBpZih0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbSAmJiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCc9PT0+Jyx0aGlzLnNlbGVjdGVkUHJvZ3JhbSwgcHJvZ3JhbSlcclxuICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSBbXTtcclxuICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xyXG4gICAgLy8gICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYW4gYXJyYXkgb2YgbnVtYmVycyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB1bmlxdWUgbnVtYmVycy5cclxuICAgKiBAcGFyYW0ge2FueX0gYXJyYXkgLSBUaGUgYXJyYXkgeW91IHdhbnQgdG8gZ2V0IHRoZSB1bmlxdWUgdmFsdWVzIGZyb20uXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcy5cclxuICAgKi9cclxuICBnZXRVbmlxdWVJZHMoYXJyYXk6YW55KXtcclxuICAgIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KGFycmF5KV07XHJcbiAgICByZXR1cm4gdW5pcXVlO1xyXG4gIH1cclxuXHJcbiAgb3BlbkFzc2lnbmVlQ2hhbmdlQ29uZmlybWF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9IFwiQU5ZX09ORVwiXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPSAnJztcclxuICAgICAgdGhpcy5hc3NpZ25lZVR5cGVDaGFuZ2UuZW1pdCh0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBJZiB0aGUgbW9kZSBpcyBFRElULCBlbWl0IHRoZSBldmVudC5cclxuICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIHJhZGlvIGJ1dHRvblxyXG4gKi9cclxuICBvblJldmlld2VyV29ya2Zsb3dDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID0gIGV2ZW50ID09PSAnc2VxdWVudGlhbCcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnICYmIHRoaXMuaGFzUmV2aWV3ZXIpIHtcclxuICAgICAgICB0aGlzLm9uUmV2aWV3ZXJUeXBlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcblxyXG4gIH1cclxufVxyXG5cclxuIl19