vcomply-workflow-engine 6.0.88 → 6.0.90

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 (107) hide show
  1. package/esm2022/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +30 -7
  2. package/esm2022/lib/constants/api.constants.mjs +1 -6
  3. package/esm2022/lib/constants/policy.constant.mjs +6 -0
  4. package/esm2022/lib/constants/regix.constants.mjs +4 -0
  5. package/esm2022/lib/constants/responsibility.mjs +8 -0
  6. package/esm2022/lib/interfaces/policy.interface.mjs +2 -0
  7. package/esm2022/lib/interfaces/responsibilty.interface.mjs +1 -1
  8. package/esm2022/lib/more-option/more-option.component.mjs +183 -17
  9. package/esm2022/lib/report-a-case/services/report-a-case.service.mjs +2 -3
  10. package/esm2022/lib/report-a-case/workflow-case/workflow-case.component.mjs +7 -4
  11. package/esm2022/lib/services/common.service.mjs +1 -40
  12. package/esm2022/lib/services/iframe.service.mjs +1 -14
  13. package/esm2022/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +6 -3
  14. package/esm2022/lib/sharedComponents/format-and-evidence/format-and-evidence.component.mjs +21 -10
  15. package/esm2022/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.mjs +1 -5
  16. package/esm2022/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +1 -5
  17. package/esm2022/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +5 -5
  18. package/esm2022/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +1 -2
  19. package/esm2022/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +2 -6
  20. package/esm2022/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +2 -3
  21. package/esm2022/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.mjs +1 -3
  22. package/esm2022/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +1 -5
  23. package/esm2022/lib/sharedComponents/frequency/frequency-random/frequency-random.component.mjs +2 -9
  24. package/esm2022/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +2 -4
  25. package/esm2022/lib/sharedComponents/frequency/frequency.service.mjs +5 -267
  26. package/esm2022/lib/sharedComponents/link-responsibility/link-responsibility.component.mjs +16 -48
  27. package/esm2022/lib/sharedComponents/link-responsibility/link-responsibility.module.mjs +4 -8
  28. package/esm2022/lib/sharedComponents/pipes/risk-class.pipe.mjs +19 -0
  29. package/esm2022/lib/workflow/grc-object/grc-object-container/grc-object-container.component.mjs +17 -45
  30. package/esm2022/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.mjs +10 -13
  31. package/esm2022/lib/workflow/shared/components/program-responsibility-listing/program-responsibility-listing.component.mjs +35 -62
  32. package/esm2022/lib/workflow/shared/services/grc.service.mjs +2 -15
  33. package/esm2022/lib/workflow/shared/workflow-pipes/workflow-pipes.module.mjs +3 -8
  34. package/esm2022/lib/workflow-compliance/workflow-compliance.component.mjs +453 -294
  35. package/esm2022/lib/workflow-engine-container/api-constants.mjs +2 -3
  36. package/esm2022/lib/workflow-engine-container/workflow-engine-container.component.mjs +53 -32
  37. package/esm2022/lib/workflow-engine.module.mjs +7 -11
  38. package/esm2022/lib/workflow-policy/workflow-policy.component.mjs +29 -46
  39. package/esm2022/lib/workflow-program/constants.mjs +3 -3
  40. package/esm2022/lib/workflow-program/workflow-program.component.mjs +338 -123
  41. package/esm2022/lib/workflow-services/policy.service.mjs +9 -8
  42. package/esm2022/lib/workflow-services/programs.service.mjs +113 -26
  43. package/esm2022/lib/workflow-services/responsibility.service.mjs +55 -60
  44. package/fesm2022/vcomply-workflow-engine.mjs +14780 -14946
  45. package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
  46. package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts +3 -0
  47. package/lib/constants/api.constants.d.ts +0 -5
  48. package/lib/constants/policy.constant.d.ts +2 -0
  49. package/lib/constants/regix.constants.d.ts +3 -0
  50. package/lib/constants/responsibility.d.ts +7 -0
  51. package/lib/interfaces/policy.interface.d.ts +5 -0
  52. package/lib/interfaces/responsibilty.interface.d.ts +13 -13
  53. package/lib/services/common.service.d.ts +0 -28
  54. package/lib/services/iframe.service.d.ts +0 -6
  55. package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +6 -0
  56. package/lib/sharedComponents/format-and-evidence/format-and-evidence.component.d.ts +4 -1
  57. package/lib/sharedComponents/frequency/frequency-random/frequency-random.component.d.ts +0 -1
  58. package/lib/sharedComponents/frequency/frequency.service.d.ts +2 -92
  59. package/lib/sharedComponents/link-responsibility/link-responsibility.component.d.ts +1 -2
  60. package/lib/sharedComponents/link-responsibility/link-responsibility.module.d.ts +1 -2
  61. package/lib/sharedComponents/pipes/risk-class.pipe.d.ts +7 -0
  62. package/lib/workflow/grc-object/grc-object-container/grc-object-container.component.d.ts +1 -5
  63. package/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.d.ts +1 -3
  64. package/lib/workflow/shared/components/program-responsibility-listing/program-responsibility-listing.component.d.ts +2 -6
  65. package/lib/workflow/shared/services/grc.service.d.ts +0 -1
  66. package/lib/workflow/shared/workflow-pipes/workflow-pipes.module.d.ts +2 -3
  67. package/lib/workflow-compliance/workflow-compliance.component.d.ts +10 -32
  68. package/lib/workflow-engine-container/api-constants.d.ts +0 -1
  69. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +2 -5
  70. package/lib/workflow-engine.module.d.ts +2 -3
  71. package/lib/workflow-policy/workflow-policy.component.d.ts +0 -9
  72. package/lib/workflow-program/workflow-program.component.d.ts +4 -8
  73. package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
  74. package/lib/workflow-services/policy.service.d.ts +1 -1
  75. package/lib/workflow-services/programs.service.d.ts +53 -13
  76. package/lib/workflow-services/responsibility.service.d.ts +4 -17
  77. package/package.json +1 -1
  78. package/esm2022/lib/constants/mock.mjs +0 -152
  79. package/esm2022/lib/interfaces/frequency.interface.mjs +0 -2
  80. package/esm2022/lib/interfaces/iframe-type.mjs +0 -7
  81. package/esm2022/lib/sharedComponents/list-container/list-container.component.mjs +0 -52
  82. package/esm2022/lib/sharedComponents/program-list/constant.mjs +0 -16
  83. package/esm2022/lib/sharedComponents/program-list/interfaces/data-source.interface.mjs +0 -2
  84. package/esm2022/lib/sharedComponents/program-list/interfaces/list-item.interface.mjs +0 -2
  85. package/esm2022/lib/sharedComponents/program-list/pipes/check-selected-items.pipes.mjs +0 -23
  86. package/esm2022/lib/sharedComponents/program-list/program-list/program-list.component.mjs +0 -182
  87. package/esm2022/lib/sharedComponents/program-list/program-list.module.mjs +0 -47
  88. package/esm2022/lib/sharedComponents/program-list/services/list-utils.service.mjs +0 -27
  89. package/esm2022/lib/sharedComponents/program-list/services/program-list-api.service.mjs +0 -32
  90. package/esm2022/lib/ui-kit/loaders/loaders.module.mjs +0 -24
  91. package/esm2022/lib/ui-kit/loaders/table-loader/table-loader.component.mjs +0 -19
  92. package/esm2022/lib/workflow/shared/workflow-pipes/get-user-details.pipe.mjs +0 -26
  93. package/lib/constants/mock.d.ts +0 -15
  94. package/lib/interfaces/frequency.interface.d.ts +0 -37
  95. package/lib/interfaces/iframe-type.d.ts +0 -5
  96. package/lib/sharedComponents/list-container/list-container.component.d.ts +0 -9
  97. package/lib/sharedComponents/program-list/constant.d.ts +0 -9
  98. package/lib/sharedComponents/program-list/interfaces/data-source.interface.d.ts +0 -4
  99. package/lib/sharedComponents/program-list/interfaces/list-item.interface.d.ts +0 -5
  100. package/lib/sharedComponents/program-list/pipes/check-selected-items.pipes.d.ts +0 -7
  101. package/lib/sharedComponents/program-list/program-list/program-list.component.d.ts +0 -45
  102. package/lib/sharedComponents/program-list/program-list.module.d.ts +0 -14
  103. package/lib/sharedComponents/program-list/services/list-utils.service.d.ts +0 -7
  104. package/lib/sharedComponents/program-list/services/program-list-api.service.d.ts +0 -14
  105. package/lib/ui-kit/loaders/loaders.module.d.ts +0 -8
  106. package/lib/ui-kit/loaders/table-loader/table-loader.component.d.ts +0 -9
  107. package/lib/workflow/shared/workflow-pipes/get-user-details.pipe.d.ts +0 -7
@@ -2,6 +2,8 @@ import { Component, Input, Output, EventEmitter, } from '@angular/core';
2
2
  import { cloneDeep } from 'lodash-es';
3
3
  import moment from 'moment/moment';
4
4
  import * as XLSX from 'xlsx';
5
+ import { RISK_CLASS_LIST } from '../constants/responsibility';
6
+ import { REGEX } from '../constants/regix.constants';
5
7
  import * as i0 from "@angular/core";
6
8
  import * as i1 from "../workflow-services/add-risk.service";
7
9
  import * as i2 from "../workflow-services/responsibility.service";
@@ -117,6 +119,8 @@ export class AddMultipleResponsibilityWithTabComponent {
117
119
  this.showSmiley = false;
118
120
  this.member_obj_id = '';
119
121
  this.ffBulkUploadOptimization = false;
122
+ this.isDayInvalid = false;
123
+ this.isDateFormatInvalid = false;
120
124
  }
121
125
  ngOnChanges(changes) { }
122
126
  ngOnInit() {
@@ -380,9 +384,15 @@ export class AddMultipleResponsibilityWithTabComponent {
380
384
  return false;
381
385
  }
382
386
  else {
387
+ const monthFormatRegex = REGEX.MONTH;
388
+ if (!monthFormatRegex.test(month)) {
389
+ this.isDateFormatInvalid = true;
390
+ return false;
391
+ }
383
392
  const monthAndYear = month.split("'");
384
393
  const startDate = moment(day + '-' + monthAndYear[0] + '-' + 20 + monthAndYear[1] + ' 00:00:00', 'DD-MMMM-YYYY HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');
385
394
  if (startDate == 'Invalid date') {
395
+ this.isDayInvalid = true;
386
396
  return false;
387
397
  }
388
398
  setTimeout(() => { }, 5);
@@ -1142,6 +1152,8 @@ export class AddMultipleResponsibilityWithTabComponent {
1142
1152
  : false;
1143
1153
  obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
1144
1154
  obj['validDate'] = this.compareWithCurrentDate(obj?.day, obj?.month);
1155
+ obj['isDateFormatInvalid'] = this.isDateFormatInvalid;
1156
+ obj['isDayInvalid'] = this.isDayInvalid;
1145
1157
  obj['isPastDate'] = this.isPastDate(obj?.day, obj?.month);
1146
1158
  obj['isValid'] =
1147
1159
  obj['isValidData'] &&
@@ -1149,7 +1161,8 @@ export class AddMultipleResponsibilityWithTabComponent {
1149
1161
  !obj['isPastDate'] &&
1150
1162
  obj?.frequency?.length &&
1151
1163
  !Object.values(obj['userValidateWithProgram']).includes(false) &&
1152
- obj['isValidUser'];
1164
+ obj['isValidUser'] &&
1165
+ this.isValidRiskClass(obj?.reportClass);
1153
1166
  return obj;
1154
1167
  }
1155
1168
  else {
@@ -1192,7 +1205,8 @@ export class AddMultipleResponsibilityWithTabComponent {
1192
1205
  obj['validDate'] &&
1193
1206
  !obj['isPastDate'] &&
1194
1207
  obj?.frequency?.length &&
1195
- obj['isValidUser'];
1208
+ obj['isValidUser'] &&
1209
+ this.isValidRiskClass(obj?.reportClass);
1196
1210
  return obj;
1197
1211
  }
1198
1212
  break;
@@ -1235,7 +1249,8 @@ export class AddMultipleResponsibilityWithTabComponent {
1235
1249
  obj['isValid'] =
1236
1250
  obj['isValidData'] &&
1237
1251
  !Object.values(obj['userValidateWithProgram']).includes(false) &&
1238
- obj['isValidUser'];
1252
+ obj['isValidUser'] &&
1253
+ this.isValidRiskClass(obj?.reportClass);
1239
1254
  return obj;
1240
1255
  }
1241
1256
  else {
@@ -1269,7 +1284,8 @@ export class AddMultipleResponsibilityWithTabComponent {
1269
1284
  obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
1270
1285
  ? true
1271
1286
  : false;
1272
- obj['isValid'] = obj['isValidData'] && obj['isValidUser'];
1287
+ obj['isValid'] = obj['isValidData'] && obj['isValidUser'] &&
1288
+ this.isValidRiskClass(obj?.reportClass);
1273
1289
  return obj;
1274
1290
  }
1275
1291
  }
@@ -1314,7 +1330,8 @@ export class AddMultipleResponsibilityWithTabComponent {
1314
1330
  obj['isValidData'] &&
1315
1331
  !Object.values(obj['userValidateWithProgram']).includes(false) &&
1316
1332
  obj?.parentResponsibility?.length &&
1317
- obj['isValidUser'];
1333
+ obj['isValidUser'] &&
1334
+ this.isValidRiskClass(obj?.reportClass);
1318
1335
  return obj;
1319
1336
  }
1320
1337
  else {
@@ -1353,7 +1370,8 @@ export class AddMultipleResponsibilityWithTabComponent {
1353
1370
  obj['isValid'] =
1354
1371
  obj['isValidData'] &&
1355
1372
  obj?.parentResponsibility?.length &&
1356
- obj['isValidUser'];
1373
+ obj['isValidUser'] &&
1374
+ this.isValidRiskClass(obj?.reportClass);
1357
1375
  return obj;
1358
1376
  }
1359
1377
  }
@@ -1361,6 +1379,11 @@ export class AddMultipleResponsibilityWithTabComponent {
1361
1379
  }
1362
1380
  }
1363
1381
  }
1382
+ isValidRiskClass(riskClass) {
1383
+ if (!riskClass)
1384
+ return true;
1385
+ return RISK_CLASS_LIST.includes(riskClass?.toLowerCase());
1386
+ }
1364
1387
  /**
1365
1388
  * It takes a string, removes all whitespace, and returns the string
1366
1389
  * @param {any} name - the name of the responsibility
@@ -1577,4 +1600,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1577
1600
  }], featureflag: [{
1578
1601
  type: Input
1579
1602
  }] } });
1580
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7O0FBa0I3QixNQUFNLE9BQU8seUNBQXlDO0lBc0JwRCxJQUEyQixnQkFBZ0IsQ0FBQyxJQUFTO1FBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQXVGRCxZQUNVLFdBQTJCLEVBQzNCLHFCQUE0QyxFQUM1QyxXQUF3QixFQUN4QixnQkFBc0MsRUFDdEMsUUFBeUIsRUFDekIsYUFBNEI7UUFMNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzNCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFzQjtR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ZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkZFJpc2tTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYWRkLXJpc2suc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBGcmVxdWVuY3lCdWxrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2ZyZXF1ZW5jeS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWZyYW1lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2lmcmFtZS5zZXJ2aWNlJztcblxudHlwZSBBT0EgPSBhbnlbXVtdO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW1xuICAgICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQubGVzcycsXG4gICAgJy4uL2Zvcm1zLmxlc3MnLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5V2l0aFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGlzTm90aWZpY2F0aW9uUGVuZGluZyA9IDA7XG4gIEBPdXRwdXQoKSBjbG9zZUFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHF1ZXJ5UGFyYW06IHN0cmluZyA9ICcnO1xuICByZWNlbnRSZXNwb25zaWJpbGl0eVVybDogYW55ID0ge1xuICAgIGJ5UmVzcG9uc2liaWxpdGllczogeyB0eXBlOiBbJ3JlY2VudF9yZXNwb25zaWJpbGl0aWVzJ10sIHN1YlR5cGU6IFsnQ0MnXSB9LFxuICAgIGJ5U3RhdHVzOiB7IHR5cGU6IFtdLCBzdWJUeXBlOiBbXSB9LFxuICAgIGZpbHRlck9iamVjdDoge1xuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IFtdLFxuICAgICAgZW50cnVzdGVkQnk6IFtdLFxuICAgICAgZW50cnVzdGVkVG86IFtdLFxuICAgICAgcmlza0lkczogW10sXG4gICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBbXSxcbiAgICB9LFxuICAgIHRpbWVQZXJpb2REZXRhaWxzOiB7IHR5cGU6ICcnLCBzZWxlY3RlZFBlcmlvZDogJycsIHNlbGVjdGVkWWVhcjogJycgfSxcbiAgICBzdGF0dXM6ICcnLFxuICB9O1xuXG4gIEBJbnB1dCgndXBsb2FkZWRGaWxlJykgc2V0IHVwbG9hZGVkRmlsZURhdGEoZGF0YTogYW55KSB7XG4gICAgdGhpcy51cGxvYWRlZEZpbGUoZGF0YSk7XG4gIH1cbiAgQElucHV0KCkgb3JnRGV0YWlscyE6IGFueTtcbiAgQElucHV0KCkgZmVhdHVyZSE6IGFueTtcblxuICB1cmwgPVxuICAgICdxPXtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9JztcbiAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkOiBhbnkgPSB7XG4gICAgaGVhZGVyOiBbXSxcbiAgICByZXBvcnRzOiBbXSxcbiAgfTtcbiAgdGFiVHlwZTogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJyA9ICdmcmVxdWVuY3knO1xuICB0YWJJbmRleDogYW55ID0ge1xuICAgIGZyZXF1ZW5jeTogMCxcbiAgICBvbmdvaW5nOiAxLFxuICAgIG9uQ29tcGxldGlvbjogMixcbiAgfTtcblxuICBidWxrVXBsb2FkOiBhbnkgPSB7XG4gICAgZnJlcXVlbmN5OiB7XG4gICAgICBoZWFkZXI6IFtdLFxuICAgICAgc3ViSGVhZGluZzogW10sXG4gICAgICByZXBvcnRzOiBbXSxcbiAgICB9LFxuICAgIG9uZ29pbmc6IHtcbiAgICAgIGhlYWRlcjogW10sXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcbiAgICAgIHJlcG9ydHM6IFtdLFxuICAgIH0sXG4gICAgb25Db21wbGV0aW9uOiB7XG4gICAgICBoZWFkZXI6IFtdLFxuICAgICAgc3ViSGVhZGluZzogW10sXG4gICAgICByZXBvcnRzOiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIHRlbXBsYXRlSW5mbzogYW55ID0ge1xuICAgIGNhdGVnb3J5TGlzdDogW10sXG4gICAgcmNMaXN0OiBbXSxcbiAgICBhc3NpZ25vcnNMaXN0OiBbXSxcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcbiAgICByZXZpZXdlckxpc3Q6IFtdLFxuICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcbiAgICBtZW1iZXJJZDogJycsXG4gIH07XG4gIGlzTG9hZGVyID0gZmFsc2U7XG4gIHNob3dDYXRlZ29yeUxpc3QgPSBmYWxzZTtcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XG4gIGRvd25sb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBsb2FkZXIgPSBmYWxzZTtcbiAgaXNGaWxlRW1wdHkgPSBmYWxzZTtcbiAgaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcbiAgaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xuICBmaWxlTmFtZTogYW55O1xuICBkYXRhOiBhbnk7XG4gIHNob3dFeGNlbCA9IGZhbHNlO1xuICB1cGxvYWRlZEZpbGVzOiBhbnkgPSBbXTtcbiAgZmlsZVJlc3BvbnNlOiBhbnkgPSBbXTtcbiAgZmlsZVZhbHVlOiBhbnk7XG4gIG1lbWJlcklkID0gMDtcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xuICBlcnJvck1lc3NhZ2UgPSAnIGludmFsaWQgZmlsZSBlcnJvcic7XG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcbiAgZG93bmxvYWRQZXJjZW50ID0gMDtcbiAgZGVmYXVsdE93bmVyID0gJyc7XG4gIHNtaWxleU1lc3NhZ2UgPSBgWW91J3JlIEFsbCBTZXQhIFdlJ3JlIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0IGFuZCB5b3Ugd2lsbCBiZSBub3RpZmllZCB2aWEgZW1haWwgdXBvbiBjb21wbGV0aW9uLmA7XG4gIGFjdGlvbkJ1dHRvbnMgPSBbXG4gICAge1xuICAgICAgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJyxcbiAgICAgIGNsYXNzOiAnd2hpdGUtYnRuJyxcbiAgICAgIGlkOiAnYWRkTW9yZScsXG4gICAgfSxcbiAgICB7XG4gICAgICBidXR0b25UZXh0OiB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZ1xuICAgICAgICA/ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgSW4gUXVldWUnXG4gICAgICAgIDogJ1ZpZXcgUmVzcG9uc2liaWxpdGllcycsXG4gICAgICBjbGFzczogJ2JsdWUtYnRuJyxcbiAgICAgIGlkOiAndmlldycsXG4gICAgfSxcbiAgXTtcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xuICBtZW1iZXJfb2JqX2lkID0gJyc7XG4gIHJpc2tDbGFzc0VuYWJsZWQ6IGFueTtcbiAgdXNlckluZm8hOiBhbnk7XG4gIHJlc3BvbnNpYmlsaXR5RGF0YSE6IGFueTtcbiAgQElucHV0KCkgZmVhdHVyZWZsYWc6IGFueTtcbiAgZmZCdWxrVXBsb2FkT3B0aW1pemF0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByaXNrU2VydmljZTogQWRkUmlza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIGZyZXF1ZW5jeVNlcnZpY2U6IEZyZXF1ZW5jeUJ1bGtTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICBwcml2YXRlIGlmcmFtZVNlcnZpY2U6IElmcmFtZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHt9XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xuICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XG4gICAgdGhpcy5tZW1iZXJfb2JqX2lkID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLl9pZDtcbiAgICB0aGlzLnVzZXJJbmZvID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLnVzZXI7XG4gICAgdGhpcy5kZWZhdWx0T3duZXIgPSB0aGlzLnVzZXJJbmZvXG4gICAgICA/IHRoaXMudXNlckluZm8ubmFtZSArICcgKCcgKyB0aGlzLnVzZXJJbmZvLmVtYWlsICsgJyknXG4gICAgICA6ICcnO1xuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLnJpc2tDbGFzc0VuYWJsZWQgPSByZXMuZW5hYmxlX3Jpc2tjbGFzcztcbiAgICB9KTtcbiAgICB0aGlzLmZmQnVsa1VwbG9hZE9wdGltaXphdGlvbiA9IHRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKFxuICAgICAgJ2ZmX2J1bGtfdXBsb2FkX29wdGltaXphdGlvbidcbiAgICApO1xuICB9XG5cbiAgdHJpZ2dlckJyb3dzZUZpbGUoKSB7XG4gICAgY29uc3QgZ2V0RmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlSW5wdXQnKTtcbiAgICBpZiAoZ2V0RmlsZSkge1xuICAgICAgZ2V0RmlsZS5jbGljaygpO1xuICAgIH1cbiAgfVxuICBnZXRVc2VyRGV0YWlscygpIHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPSByZXMubm90aWZpY2F0aW9uX3BlbmRpbmdfZmxhZztcbiAgICB9KTtcbiAgfVxuXG4gIHVwbG9hZGVkRmlsZShldmVudDogYW55LCB0YWJUeXBlPzogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xuICAgICAgICBoZWFkZXI6IFtdLFxuICAgICAgICByZXBvcnRzOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvID0ge1xuICAgICAgICBjYXRlZ29yeUxpc3Q6IFtdLFxuICAgICAgICByY0xpc3Q6IFtdLFxuICAgICAgICBhc3NpZ25vcnNMaXN0OiBbXSxcbiAgICAgICAgYXNzaWduZWVzTGlzdDogW10sXG4gICAgICAgIHJldmlld2VyTGlzdDogW10sXG4gICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcbiAgICAgICAgbWVtYmVySWQ6ICcnLFxuICAgICAgfTtcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdO1xuICAgICAgY29uc3QgcmVmZXJlbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Njcm9sbFJlZmVyZW5jZScpO1xuICAgICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgICByZWZlcmVuY2Uuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xuICAgICAgdGhpcy5maWxlTmFtZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXS5uYW1lO1xuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goZXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gZXZlbnQudGFyZ2V0IGFzIERhdGFUcmFuc2ZlcjtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY3VybHlcbiAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoICE9PSAxKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgbXVsdGlwbGUgZmlsZXMnKTtcbiAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XG4gICAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1sxXTtcbiAgICAgICAgY29uc3Qgc2hlZXQyOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzJdO1xuICAgICAgICBjb25zdCBzaGVldDM6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbM107XG4gICAgICAgIGNvbnN0IHdzbmFtZTE6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbNF07XG4gICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xuICAgICAgICBjb25zdCBzaGVldFJlcG9ydDI6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3NoZWV0Ml07XG4gICAgICAgIGNvbnN0IHNoZWV0UmVwb3J0MzogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbc2hlZXQzXTtcbiAgICAgICAgY29uc3QgdGVtcERhdGE6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZTFdO1xuICAgICAgICBjb25zdCB0RGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih0ZW1wRGF0YSwgeyBoZWFkZXI6IDEgfSkgYXMgQU9BO1xuICAgICAgICBjb25zdCB0ZW1wTGlzdCA9IHREYXRhLmZpbHRlcihcbiAgICAgICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldE9yZ2FuaXphdGlvbkRldGFpbHModGVtcExpc3QpO1xuICAgICAgICB3Yi5TaGVldE5hbWVzLmZvckVhY2goKHNoZWV0OiBhbnkpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHNoZWV0Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlICdmcmVxdWVuY3kgcmVzcG9uc2liaWxpdGllcyc6XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUZvckRpZmZlcmVudFRhYnMod3MsIHNoZWV0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnOlxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHNoZWV0UmVwb3J0Miwgc2hlZXQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29uIGNvbXBsZXRpb24gcmVzcG9uc2liaWxpdGllcyc6XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUZvckRpZmZlcmVudFRhYnMoc2hlZXRSZXBvcnQzLCBzaGVldCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRhcmdldC5maWxlc1swXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSB3b3Jrc2hlZXQgYW5kIGEgc2hlZXQgbmFtZSwgYW5kIHRoZW4gaXQgc2V0cyB0aGUgZGF0YSBmb3IgZGlmZmVyZW50IHRhYnMuXG4gICAqIEBwYXJhbSB3cyAtIFhMU1guV29ya1NoZWV0LCBzaGVldDogc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaGVldCAtIHN0cmluZyAtIHRoZSBuYW1lIG9mIHRoZSBzaGVldCBpbiB0aGUgZXhjZWwgZmlsZVxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCIgd2hpY2ggaXMgYW4gb2JqZWN0LlxuICAgKi9cbiAgc2V0RGF0YUZvckRpZmZlcmVudFRhYnMod3M6IFhMU1guV29ya1NoZWV0LCBzaGVldDogc3RyaW5nKSB7XG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZDogYW55ID0ge1xuICAgICAgaGVhZGVyOiBbXSxcbiAgICAgIHJlcG9ydHM6IFtdLFxuICAgICAgc3ViSGVhZGluZzogW10sXG4gICAgfTtcbiAgICBsZXQgc2hlZXRWYWx1ZSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3cywge1xuICAgICAgaGVhZGVyOiAxLFxuICAgICAgcmF3OiBmYWxzZSxcbiAgICB9KSBhcyBBT0E7XG4gICAgbGV0IGRhdGEgPSBzaGVldFZhbHVlLmZpbHRlcigocmVzOiBhbnkpID0+IHtcbiAgICAgIGxldCBpc1VuZGVmaW5lZCA9ICcnO1xuICAgICAgcmVzLmZvckVhY2goKGVsOiBhbnkpID0+IHtcbiAgICAgICAgaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZCArIGVsO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2hlZXRWYWx1ZVsyXSAmJiBzaGVldFZhbHVlWzJdWzFdID09PSAnUHJvZ3JhbScpIHtcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDkgJiYgcmVzWzhdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhKHJlcz8ubGVuZ3RoID09PSA2ICYmIHJlc1s1XSA9PT0gJycgJiYgIWlzVW5kZWZpbmVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5maWxlTmFtZS5zdWJzdHIoLTUpICE9PSAnLnhsc3gnKSB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcbiAgICAgICAgJyBSRVRSWSc7XG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyID0gY2xvbmVEZWVwKGRhdGFbMl0pO1xuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nID0gY2xvbmVEZWVwKGRhdGFbM10pO1xuXG4gICAgZGF0YSA9IGRhdGEuc2xpY2UoNSk7XG4gICAgaWYgKHRoaXMubWVtYmVyX29ial9pZCAhPSB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXG4gICAgICAgICcgUkVUUlknO1xuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2liaWxpdHlEYXRhID0gZGF0YS5maWx0ZXIoXG4gICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxuICAgICk7XG4gICAgcmVzcG9uc2liaWxpdHlEYXRhLmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XG4gICAgICBsZXQgdmFsaWREYXRlO1xuICAgICAgY29uc3QgdmFsaWRVc2VyID0gdGhpcy5yZXR1cm5JZHMocmVwb3J0WzJdLCAnZW50cnVzdGVkX3RvJylcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2U7XG4gICAgICBpZiAocmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nKSB7XG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNF0sIHJlcG9ydFs1XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzVdLCByZXBvcnRbNl0pO1xuICAgICAgfVxuICAgICAgLyogUHVzaGluZyB0aGUgcmVwb3J0IGRldGFpbHMgaW50byB0aGUgYnVsa1VwbG9hZCBvYmplY3QgYXMgcGVyIHRhYiB0YWJzICovXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdmcmVxdWVuY3kgcmVzcG9uc2liaWxpdGllcycpIHtcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXG4gICAgICAgICAgICByZXBvcnQsXG4gICAgICAgICAgICAnZnJlcXVlbmN5JyxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5oZWFkZXIgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlcjtcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5zdWJIZWFkaW5nID1cbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcbiAgICAgIH1cbiAgICAgIGlmIChzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcycpIHtcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXG4gICAgICAgICAgICByZXBvcnQsXG4gICAgICAgICAgICAnb25nb2luZycsXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25nb2luZy5zdWJIZWFkaW5nID1cbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLnJlcG9ydHMgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnJlcG9ydHM7XG4gICAgICB9XG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbiBjb21wbGV0aW9uIHJlc3BvbnNpYmlsaXRpZXMnKSB7XG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXG4gICAgICAgICAgdGhpcy5zZXRSZXBvcnREZXRhaWxzKFxuICAgICAgICAgICAgcmVwb3J0LFxuICAgICAgICAgICAgJ29uQ29tcGxldGlvbicsXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24uaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24uc3ViSGVhZGluZyA9XG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5zdWJIZWFkaW5nO1xuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLnJlcG9ydHMgPVxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLmNoZWNrRW1wdHlGaWxlKGRhdGEpO1xuICAgIC8qIENoZWNraW5nIGlmIHRoZSBmaWxlIGlzIGVtcHR5LCBpZiBpdCBpcyBlbXB0eSBpdCB3aWxsIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyBub3RcbiAgICBlbXB0eSBpdCB3aWxsIGNoZWNrIGlmIHRoZSBmaWxlIGlzIHRoZSBjb3JyZWN0IGZpbGUsIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGxcbiAgICByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4gSWYgaXQgaXMgdGhlIGNvcnJlY3QgZmlsZSBpdCB3aWxsIGNhbGwgdGhlIGZpbGVVcGxvYWQoKSBmdW5jdGlvbi4gKi9cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxuICAgICAgICAnWW91IGhhdmUgdXBsb2FkZWQgYSBibGFuayB0ZW1wbGF0ZS4gUGxlYXNlIGFkZCBkZXRhaWxzIGZvciBhbGwgbWFuZGF0b3J5IGZpZWxkcy4gUkVUUlknO1xuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IHRydWU7XG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LmhlYWRlclswXSAhPT0gJ1Jlc3BvbnNpYmlsaXR5IE5hbWUqJyAmJlxuICAgICAgdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKicgJiZcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKidcbiAgICApIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xuICAgICAgICAnIFJFVFJZJztcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xuICAgICAgdGhpcy5maWxlVXBsb2FkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xuICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dFeGNlbCA9IHRydWU7XG4gICAgdGhpcy5maWxlVmFsdWUgPSAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGEgZnJlcXVlbmN5IG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIGZyZXF1ZW5jeSBvYmplY3QgYW5kIHNldCB0aGUgdGFiVHlwZSB0byBmcmVxdWVuY3kuIElmIG5vdCwgY2hlY2tcbiAgICogaWYgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGhhcyBhbiBvbmdvaW5nIG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uZ29pbmcgb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gb25nb2luZy4gSWYgbm90LCBjaGVjayBpZlxuICAgKiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGFuIG9uQ29tcGxldGlvbiBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcbiAgICogcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHRvIHRoZSBvbkNvbXBsZXRpb24gb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gb25Db21wbGV0aW9uLiBJZiBub3QsXG4gICAqIHJldHVybiB0cnVlLlxuICAgKiA8L2NvZGU+XG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55ID0ge1xuICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuXG4gICAqL1xuICBjaGVja0VtcHR5RmlsZShkYXRhPzogYW55KSB7XG4gICAgbGV0IGlzRW1wdHkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdmcmVxdWVuY3knO1xuICAgIH0gZWxzZSBpZiAodGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5yZXBvcnRzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nO1xuICAgICAgdGhpcy50YWJUeXBlID0gJ29uZ29pbmcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LnJlcG9ydHM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbjtcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbkNvbXBsZXRpb24nO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0VtcHR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzRW1wdHk7XG4gIH1cblxuICBjb21wYXJlV2l0aEN1cnJlbnREYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXG4gICAgICB7IHZhbHVlOiAxLCBtb250aDogJ0phbicgfSxcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXG4gICAgICB7IHZhbHVlOiA0LCBtb250aDogJ0FwcicgfSxcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXG4gICAgICB7IHZhbHVlOiA3LCBtb250aDogJ0p1bCcgfSxcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXG4gICAgICB7IHZhbHVlOiAxMCwgbW9udGg6ICdPY3QnIH0sXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXG4gICAgXTtcblxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIShkYXkgJiYgbW9udGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1vbnRoQW5kWWVhciA9IG1vbnRoLnNwbGl0KFwiJ1wiKTtcblxuICAgICAgY29uc3Qgc3RhcnREYXRlID0gbW9tZW50KFxuICAgICAgICBkYXkgKyAnLScgKyBtb250aEFuZFllYXJbMF0gKyAnLScgKyAyMCArIG1vbnRoQW5kWWVhclsxXSArICcgMDA6MDA6MDAnLFxuICAgICAgICAnREQtTU1NTS1ZWVlZIEhIOm1tOnNzJ1xuICAgICAgKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICAgIGlmIChzdGFydERhdGUgPT0gJ0ludmFsaWQgZGF0ZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHt9LCA1KTtcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICBkYXRlX3ZhbHVlLnNldE1vbnRoKFxuICAgICAgICB0eXBlb2YgbW9udGggIT09ICdudW1iZXInXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cbiAgICAgICAgICAgICAgPy52YWx1ZSAtIDFcbiAgICAgICAgICA6IG1vbnRoXG4gICAgICApO1xuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcihOdW1iZXIoMjAgKyBtb250aC5zcGxpdChcIidcIilbMV0pKTtcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnREYXRlPy50b0pTT04oKT8uc3BsaXQoJ1QnKVswXSAhPVxuICAgICAgICAgIGRhdGVfdmFsdWU/LnRvSlNPTigpPy5zcGxpdCgnVCcpWzBdICYmXG4gICAgICAgIGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpc1Bhc3REYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxuICAgICAgeyB2YWx1ZTogMiwgbW9udGg6ICdGZWInIH0sXG4gICAgICB7IHZhbHVlOiAzLCBtb250aDogJ01hcicgfSxcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxuICAgICAgeyB2YWx1ZTogNSwgbW9udGg6ICdNYXknIH0sXG4gICAgICB7IHZhbHVlOiA2LCBtb250aDogJ0p1bicgfSxcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxuICAgICAgeyB2YWx1ZTogOCwgbW9udGg6ICdBdWcnIH0sXG4gICAgICB7IHZhbHVlOiA5LCBtb250aDogJ1NlcCcgfSxcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcbiAgICAgIHsgdmFsdWU6IDExLCBtb250aDogJ05vdicgfSxcbiAgICAgIHsgdmFsdWU6IDEyLCBtb250aDogJ0RlYycgfSxcbiAgICBdO1xuXG4gICAgaWYgKCEoZGF5IHx8IG1vbnRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIShkYXkgJiYgbW9udGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnN0IHJlcG9ydERhdGUgPSBuZXcgRGF0ZShkYXkgKyBtb250aC5zcGxpdChcIidcIikpO1xuICAgICAgY29uc3QgZGF0ZV92YWx1ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBkYXRlX3ZhbHVlLnNldE1vbnRoKFxuICAgICAgICB0eXBlb2YgbW9udGggIT09ICdudW1iZXInXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cbiAgICAgICAgICAgICAgPy52YWx1ZSAtIDFcbiAgICAgICAgICA6IG1vbnRoXG4gICAgICApO1xuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcihOdW1iZXIoMjAgKyBtb250aC5zcGxpdChcIidcIilbMV0pKTtcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XG4gICAgICBpZiAoY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkVGVtcGxhdGUoKSB7XG4gICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BRElORyc7XG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xuICAgIGNvbnN0IGRvd25sb2FkRGF0ZSA9IG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IGBFbnRydXN0IFJlc3BvbnNpYmlsaXRpZXMtJHtkb3dubG9hZERhdGVbMl19LSR7ZG93bmxvYWREYXRlWzFdfS0ke2Rvd25sb2FkRGF0ZVszXX0ueGxzeGA7XG5cbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmRvd25sb2FkUmVzcG9uc2liaWxpdHlUZW1wbGF0ZSgpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XG4gICAgICAgICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAxMDAgKiAoZGF0YS5sb2FkZWQgLyBkYXRhLnRvdGFsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gdGhpcy5yaXNrU2VydmljZS5kb3duTG9hZEZpbGUoXG4gICAgICAgICAgICAgIGRhdGEuYm9keSxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3hsc3gnLFxuICAgICAgICAgICAgICBmaWxlTmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LCAxNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BREVEJztcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKCkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICBsZXQgcGF5bG9hZDogYW55ID0gW107XG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkOiBhbnkgPSBbXTtcbiAgICBjb25zdCBmcmVxdWVuY3lUeXBlQXJyYXkgPSBbJzEnLCAnMicsICczJywgJzQnLCAnNycsICcwJywgJzYnLCAnOSddO1xuICAgIGNvbnN0IGRlZmF1bHRXaW5kb3cgPSBbMCwgMiwgNywgMzAsIDcsIDE1LCAzLCAzMF07XG4gICAgY29uc3QgZGVmYXVsdEZhaWxlZERheSA9IFsxLCAyLCA1LCA1LCA1LCA1LCA1LCA1XTtcbiAgICBsZXQgdmFsaWRSZXNwb25zaWJpbGl0aWVzID0gMDtcbiAgICBsZXQgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/LmNvbmNhdChcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cyxcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzXG4gICAgKTtcbiAgICByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZCA9XG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KFxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHMsXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzXG4gICAgICApO1xuICAgIGlmICh0aGlzLmZmQnVsa1VwbG9hZE9wdGltaXphdGlvbikge1xuICAgICAgcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/LmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXBvcnQ/LmlzVmFsaWQpIHtcbiAgICAgICAgICB2YWxpZFJlc3BvbnNpYmlsaXRpZXMgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBwYXlsb2FkID0ge1xuICAgICAgICBvcmlnaW5hbEZpbGVuYW1lOiB0aGlzLmZpbGVSZXNwb25zZVswXT8ub3JpZ2luYWxfZmlsZW5hbWUsXG4gICAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVSZXNwb25zZVswXT8uZmlsZW5hbWUsXG4gICAgICAgIGZpbGVQYXRoOiB0aGlzLmZpbGVSZXNwb25zZVswXT8uZmlsZXBhdGgsXG4gICAgICAgIHRvdGFsUmVzcG9uc2liaWxpdHlDb3VudDogcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/Lmxlbmd0aCxcbiAgICAgICAgdmFsaWRSZXNwb25zaWJpbGl0eUNvdW50OiB2YWxpZFJlc3BvbnNpYmlsaXRpZXMsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuZm9yRWFjaCgocmVwb3J0OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcG9ydC5pc1ZhbGlkKSB7XG4gICAgICAgICAgaWYgKHJlcG9ydD8ucmVzcG9uc2liaWxpdHlDYXRlZ29yeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVwb3J0LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmNEZXRhaWxzOiBhbnkgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgIHJlcG9ydD8ucmVzcG9uc2liaWxpdHlDZW50ZXIsXG4gICAgICAgICAgICAncmNfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCByZXZpZXdlckRldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgcmVwb3J0Py5yZXZpZXdlcixcbiAgICAgICAgICAgICdyZXZpZXdlcidcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGFzc2lnbm9yRGV0YWlsczogYW55ID0gcmVwb3J0Py5hc3NpZ25vclxuICAgICAgICAgICAgPyB0aGlzLnJldHVybklkcyhyZXBvcnQ/LmFzc2lnbm9yLCAnYXNzaWdub3InKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICBjb25zdCBjY0RldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydD8ub3ZlcnNlZXIsICdjYycpO1xuICAgICAgICAgIGNvbnN0IGNjRmFpbHVyZURldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgcmVwb3J0Lm5vdGlmeU9uRmFpbHVyZSxcbiAgICAgICAgICAgICdjY0ZhaWx1cmUnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgIGxldCBvbmdvaW5nUmVtaW5kZXJUeXBlOiBhbnkgPSB7XG4gICAgICAgICAgICBXZWVrbHk6IDEsXG4gICAgICAgICAgICBNb250aGx5OiAyLFxuICAgICAgICAgICAgUXVhcnRlcmx5OiAzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgb25nb2luZ1ZhbHVlcyA9IHtcbiAgICAgICAgICAgIHNldFJlbWluZGVyOiByZXBvcnQ/LnNldFJlbWluZGVyLFxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IG9uZ29pbmdSZW1pbmRlclR5cGVbcmVwb3J0Py5mcmVxdWVuY3lSZW1pbmRlcl0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBmcmVxdWVuY3lWYWx1ZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChcbiAgICAgICAgICAgIHJlcG9ydD8uZnJlcXVlbmN5LFxuICAgICAgICAgICAgcmVwb3J0Py5kYXksXG4gICAgICAgICAgICByZXBvcnQ/Lm1vbnRoLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICByZXBvcnQ/LmR1ZURhdGUsXG4gICAgICAgICAgICBvbmdvaW5nVmFsdWVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkYXRlQW5kTW9udGggPSByZXBvcnQ/Lm1vbnRoPy5zcGxpdChcIidcIik7XG4gICAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZUFuZE1vbnRoXG4gICAgICAgICAgICA/IG1vbWVudChcbiAgICAgICAgICAgICAgICByZXBvcnQ/LmRheSArXG4gICAgICAgICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgICAgICAgZGF0ZUFuZE1vbnRoWzBdICtcbiAgICAgICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgICAgICAyMCArXG4gICAgICAgICAgICAgICAgICBkYXRlQW5kTW9udGhbMV0gK1xuICAgICAgICAgICAgICAgICAgJyAwMDowMDowMCcsXG4gICAgICAgICAgICAgICAgJ0RELU1NTU0tWVlZWSBISDptbTpzcydcbiAgICAgICAgICAgICAgKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxuICAgICAgICAgICAgOiAnJztcblxuICAgICAgICAgIGxldCBjb21wbGV0ZURheXM7XG4gICAgICAgICAgbGV0IG5vdENvbXBsZXRlRGF5cztcbiAgICAgICAgICBjb25zdCBmcmVxdWVuY3lUeXBlID0gZnJlcXVlbmN5VmFsdWU/LnNwbGl0KCd+JylbMF07XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVwb3J0LnJlc3BvbnNpYmlsaXR5V2luZG93ICYmXG4gICAgICAgICAgICByZXBvcnQucmVzcG9uc2liaWxpdHlXaW5kb3cgIT09ICcnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb21wbGV0ZURheXMgPSByZXBvcnQ/LnJlc3BvbnNpYmlsaXR5V2luZG93O1xuICAgICAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5VHlwZUFycmF5Py5pbmNsdWRlcyhmcmVxdWVuY3lUeXBlKSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhPZkFycmF5ID0gZnJlcXVlbmN5VHlwZUFycmF5Py5pbmRleE9mKGZyZXF1ZW5jeVR5cGUpO1xuICAgICAgICAgICAgY29tcGxldGVEYXlzID0gZGVmYXVsdFdpbmRvd1tpbmRleE9mQXJyYXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVwb3J0Py5mYWlsZWRBZnRlciAmJiByZXBvcnQ/LmZhaWxlZEFmdGVyICE9PSAnJykge1xuICAgICAgICAgICAgbm90Q29tcGxldGVEYXlzID0gcmVwb3J0Py5mYWlsZWRBZnRlcjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeVR5cGVBcnJheS5pbmNsdWRlcyhmcmVxdWVuY3lUeXBlKSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhPZkFycmF5ID0gZnJlcXVlbmN5VHlwZUFycmF5Py5pbmRleE9mKGZyZXF1ZW5jeVR5cGUpO1xuICAgICAgICAgICAgbm90Q29tcGxldGVEYXlzID0gZGVmYXVsdEZhaWxlZERheVtpbmRleE9mQXJyYXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudGVtcGxhdGVJbmZvPy5tZW1iZXJJZCxcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5vcmdhbml6YXRpb25JZCxcbiAgICAgICAgICAgIG1lbWJlcl9pZDogYXNzaWdub3JEZXRhaWxzXG4gICAgICAgICAgICAgID8gYXNzaWdub3JEZXRhaWxzPy5tZW1iZXJJZFxuICAgICAgICAgICAgICA6IHRoaXMubWVtYmVySWQsXG4gICAgICAgICAgICBtZW1iZXJfbmFtZTogYXNzaWdub3JEZXRhaWxzXG4gICAgICAgICAgICAgID8gcmVwb3J0Py5hc3NpZ25vclxuICAgICAgICAgICAgICAgID8gcmVwb3J0Py5hc3NpZ25vci5zcGxpdCgnICgnKVswXVxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRPd25lclxuICAgICAgICAgICAgICA/IHRoaXMuZGVmYXVsdE93bmVyPy5zcGxpdCgnICgnKVswXVxuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgbWVtYmVyX2VtYWlsOiBhc3NpZ25vckRldGFpbHNcbiAgICAgICAgICAgICAgPyByZXBvcnQ/LmFzc2lnbm9yXG4gICAgICAgICAgICAgICAgPyByZXBvcnQ/LmFzc2lnbm9yPy5zcGxpdCgnICgnKVsxXT8ucmVwbGFjZSgnKScsICcnKVxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRPd25lclxuICAgICAgICAgICAgICA/IHRoaXMuZGVmYXVsdE93bmVyPy5zcGxpdCgnICgnKVsxXS5yZXBsYWNlKCcpJywgJycpXG4gICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICBjcmVhdGVkX2J5OiBhc3NpZ25vckRldGFpbHMgPyB0aGlzLm1lbWJlcklkIDogMCxcbiAgICAgICAgICAgIHJlcG9ydF9uYW1lOiByZXBvcnQ/LnJlc3BvbnNpYmlsaXR5TmFtZSA/PyAnJyxcbiAgICAgICAgICAgIGVudHJ1c3RlZF90bzogcmVwb3J0Py5hc3NpZ25lZT8uc3BsaXQoJyAoJylbMF0gPz8gJycsXG4gICAgICAgICAgICBlbnRydXN0ZWRfdG9faWQ6IHRoaXMuaXNHcm91cFNlbGVjdGVkKHJlcG9ydD8uYXNzaWduZWUpXG4gICAgICAgICAgICAgID8gdGhpcy5nZXRFbXBsb3llZUlkRnJvbUdyb3VwKHJlcG9ydD8uYXNzaWduZWUpXG4gICAgICAgICAgICAgIDogdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpPy50b1N0cmluZygpID8/XG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBlbWFpbF9hZGRyZXNzOiAhdGhpcy5pc0dyb3VwU2VsZWN0ZWQocmVwb3J0Py5hc3NpZ25lZSlcbiAgICAgICAgICAgICAgPyByZXBvcnQ/LmFzc2lnbmVlPy5zcGxpdCgnICgnKVsxXT8ucmVwbGFjZSgnKScsICcnKSA/PyAnJ1xuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgaXNHcm91cEFzc2lnblRvOiByZXBvcnQ/LmFzc2lnbmVlVHlwZT8uaW5jbHVkZXMoJ0FueScpID8gMSA6IDAsXG4gICAgICAgICAgICBjYXRlZ29yeV9uYW1lX3dpdGhfdHJlZTogJycsXG4gICAgICAgICAgICBjYXRlZ29yeV9pZDpcbiAgICAgICAgICAgICAgdGhpcy5nZXRQcm9ncmFtSWQoXG4gICAgICAgICAgICAgICAgcmVwb3J0Py5wcm9ncmFtLFxuICAgICAgICAgICAgICAgIHJlcG9ydD8ucHJvZ3JhbUNhdGVnb3J5XG4gICAgICAgICAgICAgICkuY2F0ZWdvcnlJZD8udG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgICAgIHByb2dyYW1fY2F0X2lkczogdGhpcy5nZXRQcm9ncmFtSWQoXG4gICAgICAgICAgICAgIHJlcG9ydD8ucHJvZ3JhbSxcbiAgICAgICAgICAgICAgcmVwb3J0Py5wcm9ncmFtQ2F0ZWdvcnlcbiAgICAgICAgICAgICk/LnByb2dyYW1JZFxuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvZ3JhbUlkKHJlcG9ydD8ucHJvZ3JhbSwgcmVwb3J0Py5wcm9ncmFtQ2F0ZWdvcnkpXG4gICAgICAgICAgICAgICAgICAgID8ucHJvZ3JhbUlkLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgIHJjX25hbWU6IHJjRGV0YWlscyA/IHJjRGV0YWlscz8ubmFtZSA6ICcnLFxuICAgICAgICAgICAgcmNfaWQ6IHJjRGV0YWlscyA/IHJjRGV0YWlscz8ucmNJZCA6IDAsXG4gICAgICAgICAgICBlbnRpdHlfdHJlZTpcbiAgICAgICAgICAgICAgcmNEZXRhaWxzICYmIHJjRGV0YWlscz8ucmNJZFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50X3JjX2lkczogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5wYXJlbnRJZHMgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICByY19pZDogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5yY0lkIDogMCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgdXNlckdyb3VwSWRzOiB7XG4gICAgICAgICAgICAgIGFzc2lnbmVlQWxsR3JvdXBJZHM6XG4gICAgICAgICAgICAgICAgIXJlcG9ydD8uYXNzaWduZWVUeXBlPy5pbmNsdWRlcygnQW55JykgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmlzR3JvdXBTZWxlY3RlZChyZXBvcnQ/LmFzc2lnbmVlKVxuICAgICAgICAgICAgICAgICAgPyBbdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXVxuICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgYXNzaWduZWVBbnlvbmVHcm91cElkczpcbiAgICAgICAgICAgICAgICByZXBvcnQ/LmFzc2lnbmVlVHlwZT8uaW5jbHVkZXMoJ0FueScpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc0dyb3VwU2VsZWN0ZWQocmVwb3J0Py5hc3NpZ25lZSlcbiAgICAgICAgICAgICAgICAgID8gW3RoaXMucmV0dXJuSWRzKHJlcG9ydD8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKV1cbiAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgIGNjRW1haWxHcm91cElkczogW10sXG4gICAgICAgICAgICAgIGZhaWx1cmVDQ0VtYWlsR3JvdXBJZHM6IFtdLFxuICAgICAgICAgICAgICByZXZpZXdlckdyb3VwSWRzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmcmVxdWVuY3lfaGFuZGxlcjogZnJlcXVlbmN5VmFsdWUsXG4gICAgICAgICAgICBjb21wbGlhbmNlX3R5cGU6IGZyZXF1ZW5jeVZhbHVlPy5zcGxpdCgnficpWzBdLFxuICAgICAgICAgICAgZnJlcXVlbmN5X2Rlc2NyaXB0aW9uOiByZXBvcnQ/LmZyZXF1ZW5jeSxcbiAgICAgICAgICAgIHN0YXJ0X2RhdGU6IHJlcG9ydD8uZGF5ID8gc3RhcnREYXRlIDogY3VycmVudERhdGUgKyAnIDAwOjAwOjAwJyxcbiAgICAgICAgICAgIHJpc2tfY2xhc3M6IHJlcG9ydD8ucmVwb3J0Q2xhc3MgPz8gJycsXG4gICAgICAgICAgICByaXNrX2NsYXNzSWQ6IHJlcG9ydD8ucmVwb3J0Q2xhc3NcbiAgICAgICAgICAgICAgPyB0aGlzLnJldHVybklkcyhyZXBvcnQ/LnJlcG9ydENsYXNzLCAncmlza19jbGFzcycpXG4gICAgICAgICAgICAgIDogdGhpcy5yaXNrQ2xhc3NFbmFibGVkXG4gICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICA6IDIsXG4gICAgICAgICAgICBkb2NfdXRjOiAwLFxuICAgICAgICAgICAgY29tbWVudDogcmVwb3J0Py5ub3RlcyA/PyAnJyxcbiAgICAgICAgICAgIGNjX21haWw6IGNjRGV0YWlscyA/IGNjRGV0YWlscz8uZW1haWwgOiAnJyxcbiAgICAgICAgICAgIGNjX21haWxfaWQ6IGNjRGV0YWlscyA/IGNjRGV0YWlscz8uZW1wbG95ZWVJZCA6ICcnLFxuICAgICAgICAgICAgY2NfZmFpbGVkX21haWw6IGNjRmFpbHVyZURldGFpbHMgPyBjY0ZhaWx1cmVEZXRhaWxzPy5lbWFpbCA6ICcnLFxuICAgICAgICAgICAgY2NfZmFpbHVyZV9pZDogY2NGYWlsdXJlRGV0YWlscyA/IGNjRmFpbHVyZURldGFpbHM/LmVtcGxveWVlSWQgOiAwLFxuICAgICAgICAgICAgc2VuZF9yZW1pbmRlcjogJycsXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzpcbiAgICAgICAgICAgICAgZnJlcXVlbmN5VHlwZSA9PT0gJzEnXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBjb21wbGV0ZURheXMgJiYgY29tcGxldGVEYXlzICE9ICcnXG4gICAgICAgICAgICAgICAgPyBjb21wbGV0ZURheXNcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICBmYWlsZWRfYWZ0ZXI6XG4gICAgICAgICAgICAgIG5vdENvbXBsZXRlRGF5cyAmJiBub3RDb21wbGV0ZURheXMgIT0gJycgPyBub3RDb21wbGV0ZURheXMgOiAwLFxuICAgICAgICAgICAgZXhjZWxfc2hlZXRfbmFtZTogJycsXG4gICAgICAgICAgICByZXBvcnRfdXBsb2FkX2ZsYWc6XG4gICAgICAgICAgICAgIHJlcG9ydD8uaXNGb3JtYXQgPT09ICdZZXMnICYmXG4gICAgICAgICAgICAgIHJlcG9ydD8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk/Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgIHJlcG9ydF9pZDogMCxcbiAgICAgICAgICAgIGlzX2Fzc2lnbmVkX2ZsYWc6IDAsXG4gICAgICAgICAgICBwcml2YXRlX2xpYnJhcnlfaWQ6IDAsXG4gICAgICAgICAgICBrZXljb21wbGlhbmNlOiByZXBvcnQ/LmtleVJlc3BvbnNpYmlsaXR5ID09PSAnWWVzJyA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAgIGtleV9jb21wbGlhbmNlOiByZXBvcnQ/LmtleVJlc3BvbnNpYmlsaXR5ID09PSAnWWVzJyA/IDEgOiAwLFxuICAgICAgICAgICAgcmV2aWV3ZXJJZDogcmV2aWV3ZXJEZXRhaWxzID8gcmV2aWV3ZXJEZXRhaWxzPy5lbXBsb3llZUlkIDogMCxcbiAgICAgICAgICAgIHJldmlld2VyX2FycjpcbiAgICAgICAgICAgICAgcmV2aWV3ZXJEZXRhaWxzICYmIHJldmlld2VyRGV0YWlscz8uZW1wbG95ZWVJZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXZpZXdlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyX2lkOiByZXZpZXdlckRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJldmlld2VyRGV0YWlscz8uZW1wbG95ZWVJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2aWV3ZXJfYWNjZXB0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTRVFVRU5USUFMJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgcmV2aWV3ZXJXaW5kb3c6XG4gICAgICAgICAgICAgIHJlcG9ydD8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiAmJlxuICAgICAgICAgICAgICByZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4gIT09ICcnXG4gICAgICAgICAgICAgICAgPyByZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5cbiAgICAgICAgICAgICAgICA6IDIsXG4gICAgICAgICAgICByZXZpZXdlckZhaWx1cmU6XG4gICAgICAgICAgICAgIHJlcG9ydD8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXIgJiZcbiAgICAgICAgICAgICAgcmVwb3J0Py5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlciAhPT0gJydcbiAgICAgICAgICAgICAgICA/IHJlcG9ydD8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXJcbiAgICAgICAgICAgICAgICA6IDIsXG4gICAgICAgICAgICByZXZpZXdlcl9lbWFpbDogcmV2aWV3ZXJEZXRhaWxzID8gcmV2aWV3ZXJEZXRhaWxzPy5lbWFpbCA6ICcnLFxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydD8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHlcbiAgICAgICAgICAgICAgPyByZXBvcnQuZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHlcbiAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIGRvY3VtZW50YXJ5RXZpZGVuY2U6IHJlcG9ydD8uZXZpZGVuY2VOb3RlcyA/PyAnJyxcbiAgICAgICAgICAgIGlzZG9jdW1lbnRhcnlFdmlkZW5jZTpcbiAgICAgICAgICAgICAgcmVwb3J0LmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9PT0gJ1llcycgPyAxIDogMCxcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0Lm9iamVjdGl2ZSA/PyAnJyxcbiAgICAgICAgICAgIGV4Y2VsX3NoZWV0X2luZm86IHRoaXMuZmlsZVJlc3BvbnNlLFxuICAgICAgICAgICAgc2hvd0xpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgY3VzdG9tX3RhZ3M6ICdbXScsXG4gICAgICAgICAgICBxdWVzdGlvbm5haXJlX3R5cGU6ICcnLFxuICAgICAgICAgICAgb25fY29tcGxldGlvbl9vZl90eXBlOlxuICAgICAgICAgICAgICByZXBvcnQ/LmZyZXF1ZW5jeSA9PT0gJ09uIENvbXBsZXRpb24gb2YnIHx8XG4gICAgICAgICAgICAgIHJlcG9ydD8uZnJlcXVlbmN5Py50b0xvd2VyQ2FzZSgpID09PSAnb25nb2luZydcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICBvbl9jb21wbGV0aW9uX29mOiB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgICAgcmVwb3J0Py5wYXJlbnRSZXNwb25zaWJpbGl0eSxcbiAgICAgICAgICAgICAgJ3BhcmVudFJlc3BvbnNpYmlsaXR5J1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgICAgICAgICByZXBvcnQ/LnBhcmVudFJlc3BvbnNpYmlsaXR5LFxuICAgICAgICAgICAgICAgICAgICAncGFyZW50UmVzcG9uc2liaWxpdHknXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHBheWxvYWQucHVzaChvYmopO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuYWRkQnVsa1Jlc3BvbnNpYmlsaXR5KHBheWxvYWQpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xuICAgICAgICB0aGlzLnN1Ym1pdFdvcmtmbG93KCk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxuICAgICAgICAgICdhbGVydCdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc3VibWl0V29ya2Zsb3coKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHsgdHlwZTogJ3N1Ym1pdCcgfTtcbiAgICBjb25zdCB0YXJnZXRPcmlnaW4gPSB0aGlzLmdldE9yaWdpbigpO1xuICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JpZ2luKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gIH1cblxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ3JjX2lkJzpcbiAgICAgICAgbGV0IHJjT2JqID0geyBuYW1lOiAnJywgcmNJZDogMCwgcGFyZW50SWRzOiBbXSB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgocmNfZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJjX2VsZW1lbnQubmFtZSA9PSBpdGVtKSB7XG4gICAgICAgICAgICBsZXQgbmFtZTtcbiAgICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUuaW5jbHVkZXMoJ1tXSVRISU5dJykpIHtcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZS5zcGxpdCgnIFtXSVRISU5dICcpWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJjT2JqID0ge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICByY0lkOiByY19lbGVtZW50LnJjX2lkLFxuICAgICAgICAgICAgICBwYXJlbnRJZHM6IHJjX2VsZW1lbnQucGFyZW50SWRzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmNPYmo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmV2aWV3ZXInOlxuICAgICAgICBsZXQgcmV2aWV3ZXJPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChyZXZpZXdlckVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXZpZXdlckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcbiAgICAgICAgICAgIHJldmlld2VyT2JqID0ge1xuICAgICAgICAgICAgICBuYW1lOiByZXZpZXdlckVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogcmV2aWV3ZXJFbGVtZW50Lm15X21lbWJlcl9pZCxcbiAgICAgICAgICAgICAgZW1haWw6IHJldmlld2VyRWxlbWVudC5lbWFpbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJldmlld2VyT2JqO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzaWdub3InOlxuICAgICAgICBsZXQgYXNzaWdub3JPYmogPSB7IG5hbWU6ICcnLCBtZW1iZXJJZDogMCwgZW1haWw6ICcnIH07XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbm9yc0xpc3QuZm9yRWFjaCgoYXNzaWdub3JFbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoYXNzaWdub3JFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XG4gICAgICAgICAgICBhc3NpZ25vck9iaiA9IHtcbiAgICAgICAgICAgICAgbmFtZTogYXNzaWdub3JFbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIGVtYWlsOiBhc3NpZ25vckVsZW1lbnQuZW1haWwsXG4gICAgICAgICAgICAgIG1lbWJlcklkOiBhc3NpZ25vckVsZW1lbnQubWVtYmVyX2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXNzaWdub3JPYmo7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIGxldCBjY09iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKGNjRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNjRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xuICAgICAgICAgICAgY2NPYmogPSB7XG4gICAgICAgICAgICAgIG5hbWU6IGNjRWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiBjY0VsZW1lbnQuZW1wbG95ZWVfaWQsXG4gICAgICAgICAgICAgIGVtYWlsOiBjY0VsZW1lbnQuZW1haWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjY09iajtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0ZhaWx1cmUnOlxuICAgICAgICBsZXQgY2NmT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgoY2NmRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNjZkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcbiAgICAgICAgICAgIGNjZk9iaiA9IHtcbiAgICAgICAgICAgICAgbmFtZTogY2NmRWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiBjY2ZFbGVtZW50LmVtcGxveWVlX2lkLFxuICAgICAgICAgICAgICBlbWFpbDogY2NmRWxlbWVudC5lbWFpbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNjZk9iajtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2VudHJ1c3RlZF90byc6XG4gICAgICAgIGxldCBlbXBJZCA9IDA7XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XG4gICAgICAgICAgICBlbXBJZCA9IGVuRWxlbWVudC5lbXBsb3llZV9pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZW1wSWQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdwYXJlbnRSZXNwb25zaWJpbGl0eSc6XG4gICAgICAgIGxldCBpZCA9IDA7XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBhcmVudFJlc3BvbnNpYmlsaXR5LmZvckVhY2goXG4gICAgICAgICAgKHJlc3BvbnNpYmlsaXR5OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zaWJpbGl0eT8ubmFtZSA9PT0gaXRlbSkge1xuICAgICAgICAgICAgICBpZCA9IHJlc3BvbnNpYmlsaXR5LmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmlza19jbGFzcyc6XG4gICAgICAgIGlmIChpdGVtID09ICdMb3cnKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTG93LU1lZGl1bScpIHtcbiAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdNZWRpdW0tSGlnaCcpIHtcbiAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdIaWdoJykge1xuICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xuICAgICAgaGVhZGVyOiBbXSxcbiAgICAgIHJlcG9ydHM6IFtdLFxuICAgIH07XG4gICAgdGhpcy5idWxrVXBsb2FkID0ge1xuICAgICAgZnJlcXVlbmN5OiB7XG4gICAgICAgIGhlYWRlcjogW10sXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxuICAgICAgICByZXBvcnRzOiBbXSxcbiAgICAgIH0sXG4gICAgICBvbmdvaW5nOiB7XG4gICAgICAgIGhlYWRlcjogW10sXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxuICAgICAgICByZXBvcnRzOiBbXSxcbiAgICAgIH0sXG4gICAgICBvbkNvbXBsZXRpb246IHtcbiAgICAgICAgaGVhZGVyOiBbXSxcbiAgICAgICAgc3ViSGVhZGluZzogW10sXG4gICAgICAgIHJlcG9ydHM6IFtdLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XG4gICAgICBjYXRlZ29yeUxpc3Q6IFtdLFxuICAgICAgcmNMaXN0OiBbXSxcbiAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxuICAgICAgYXNzaWduZWVzTGlzdDogW10sXG4gICAgICByZXZpZXdlckxpc3Q6IFtdLFxuICAgICAgbWVtYmVySWQ6ICcnLFxuICAgIH07XG5cbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xuICAgIHRoaXMuZmlsZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eS5lbWl0KCk7XG4gIH1cbiAgYWN0aW9uKGV2ZW50OiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlICdhZGRNb3JlJzpcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICB0aGlzLnZpZXdSZXNwb25zaWJpbGl0aWVzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlU21pbGV5KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yZXNwb25zaWJpbGl0eURhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xuICB9XG5cbiAgdmlld1Jlc3BvbnNpYmlsaXRpZXMoKTogdm9pZCB7XG4gICAgbGV0IHVybDogc3RyaW5nO1xuICAgIGxldCB1cmxTdWJzdHJpbmcgPSAnJztcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZykge1xuICAgICAgaWYgKHRoaXMuZmVhdHVyZWZsYWcpIHtcbiAgICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXR5PycgKyB0aGlzLnVybDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFN1YnN0cmluZyA9XG4gICAgICAgICAgJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXRpZXMvcmVzcG9uc2liaWxpdGllcy1xdWV1ZSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZlYXR1cmVmbGFnKSB7XG4gICAgICAgIHRoaXMucXVlcnlQYXJhbSA9IEpTT04/LnN0cmluZ2lmeSh0aGlzLnJlY2VudFJlc3BvbnNpYmlsaXR5VXJsKTtcbiAgICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXR5P3E9JyArIHRoaXMucXVlcnlQYXJhbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvY29tcGxpYW5jZS8jLycgKyB1cmxTdWJzdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvY29tcGxpYW5jZS8jLycgKyB1cmxTdWJzdHJpbmc7XG4gICAgfVxuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodXJsLCB0cnVlKTtcbiAgfVxuXG4gIC8vIFVwbG9hZCBGaWxlIHRvIHRoZSBzZXJ2ZXJcbiAgZmlsZVVwbG9hZCgpIHtcbiAgICB0aGlzLmZpbGVSZXNwb25zZSA9IFtdO1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGZpbGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbMF1bMF07XG4gICAgZm9ybURhdGEuYXBwZW5kKCdzb3VyY2VmaWxlJywgZmlsZSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZXN0aW5hdGlvbicsICdidWxrdXBsb2FkL2VudHJ1c3QvJyArIHRoaXMudXNlckluZm8uZW1haWwpO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmZpbGVVcGxvYWQoZm9ybURhdGEpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzPy5maWxlbmFtZSkge1xuICAgICAgICAgIHRoaXMuZmlsZVJlc3BvbnNlLnB1c2gocmVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgJ2FsZXJ0J1xuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRPcmdhbml6YXRpb25EZXRhaWxzKHRlbXBMaXN0OiBhbnkpIHtcbiAgICBpZiAodGVtcExpc3RbMF0gIT09IHVuZGVmaW5lZCAmJiB0ZW1wTGlzdFswXVsxOF0pIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkID0gdGVtcExpc3RbMF1bMThdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcbiAgICAgICAgJyBSRVRSWSc7XG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGVtcExpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiByZWd1bGF0aW9ucyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXG4gICAgICBpZiAoZWxlbWVudFsyNl0gJiYgdHlwZW9mIGVsZW1lbnRbMjZdID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCByZWd1bGF0aW9ucyA9IHtcbiAgICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFsyMl0sXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50WzI2XSxcbiAgICAgICAgICBhc3NpZ25lZTogSlNPTi5wYXJzZShlbGVtZW50WzMwXSksXG4gICAgICAgICAgcmV2aWV3ZXI6IEpTT04ucGFyc2UoZWxlbWVudFszMV0pLFxuICAgICAgICAgIG92ZXJzZWVyOiBKU09OLnBhcnNlKGVsZW1lbnRbMzJdKT8uY29uY2F0KEpTT04ucGFyc2UoZWxlbWVudFszM10pKSxcbiAgICAgICAgICBwcm9ncmFtVHlwZTogMSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gocmVndWxhdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiBzdGFuZGFyZHMgUHJvZ3JhbXMgaW50byB0aGUgY2F0ZWdvcnlMaXN0IGFycmF5LiAqL1xuICAgICAgaWYgKGVsZW1lbnRbMjddICYmIHR5cGVvZiBlbGVtZW50WzI3XSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3Qgc3RhbmRhcmRzID0ge1xuICAgICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50WzIzXSxcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbMjddLFxuICAgICAgICAgIGFzc2lnbmVlOiBKU09OLnBhcnNlKGVsZW1lbnRbMzRdKSxcbiAgICAgICAgICByZXZpZXdlcjogSlNPTi5wYXJzZShlbGVtZW50WzM1XSksXG4gICAgICAgICAgb3ZlcnNlZXI6IEpTT04ucGFyc2UoZWxlbWVudFszNl0pPy5jb25jYXQoSlNPTi5wYXJzZShlbGVtZW50WzM3XSkpLFxuICAgICAgICAgIHByb2dyYW1UeXBlOiAyLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChzdGFuZGFyZHMpO1xuICAgICAgfVxuXG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiBpbnRlcm5hbCBDb250cm9scyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXG4gICAgICBpZiAoZWxlbWVudFsyOF0gJiYgdHlwZW9mIGVsZW1lbnRbMjhdID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBpbnRlcm5hbENvbnRyb2xzID0ge1xuICAgICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50WzI0XSxcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbMjhdLFxuICAgICAgICAgIGFzc2lnbmVlOiBKU09OLnBhcnNlKGVsZW1lbnRbMzhdKSxcbiAgICAgICAgICByZXZpZXdlcjogSlNPTi5wYXJzZShlbGVtZW50WzM5XSksXG4gICAgICAgICAgb3ZlcnNlZXI6IEpTT04ucGFyc2UoZWxlbWVudFs0MF0pPy5jb25jYXQoSlNPTi5wYXJzZShlbGVtZW50WzQxXSkpLFxuICAgICAgICAgIHByb2dyYW1UeXBlOiAzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChpbnRlcm5hbENvbnRyb2xzKTtcbiAgICAgIH1cblxuICAgICAgLyogUHVzaGluZyB0aGUgdmFsdWUgb2Ygb3RoZXJzIFByb2dyYW1zIGludG8gdGhlIGNhdGVnb3J5TGlzdCBhcnJheS4gKi9cbiAgICAgIGlmIChlbGVtZW50WzI5XSAmJiB0eXBlb2YgZWxlbWVudFsyOV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IG90aGVycyA9IHtcbiAgICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFsyNV0sXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50WzI5XSxcbiAgICAgICAgICBhc3NpZ25lZTogSlNPTi5wYXJzZShlbGVtZW50WzQyXSksXG4gICAgICAgICAgcmV2aWV3ZXI6IEpTT04ucGFyc2UoZWxlbWVudFs0M10pLFxuICAgICAgICAgIG92ZXJzZWVyOiBKU09OLnBhcnNlKGVsZW1lbnRbNDRdKT8uY29uY2F0KEpTT04ucGFyc2UoZWxlbWVudFs0NV0pKSxcbiAgICAgICAgICBwcm9ncmFtVHlwZTogMCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gob3RoZXJzKTtcbiAgICAgIH1cblxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbOV0gaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eS4gSWYgaXQgaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgaXQgaXNcbiAgICAgIHB1c2hpbmcgdGhlIGVsZW1lbnRbOV0gKFJDKSB0byB0aGUgYXJyYXkgKHJjTGlzdCkuICovXG4gICAgICBpZiAoZWxlbWVudFs5XSAmJiBlbGVtZW50WzldICE9ICcgJykge1xuICAgICAgICBjb25zdCByYyA9IHtcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzldLFxuICAgICAgICAgIHJjX2lkOiBlbGVtZW50WzEwXSxcbiAgICAgICAgICBwYXJlbnRJZHM6IEpTT04ucGFyc2UoZWxlbWVudFsxMV0pLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QucHVzaChyYyk7XG4gICAgICB9XG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFsyXSBpcyBub3QgZW1wdHkgYW5kIG5vdCBlcXVhbCB0byBzcGFjZS4gSWYgaXQgaXMgbm90IGVtcHR5IGFuZCBub3RcbiAgICAgIGVxdWFsIHRvIHNwYWNlLCB0aGVuIGl0IGlzIHB1c2hpbmcgdGhlIGFzc2lnbmVlIG9iamVjdCB0byB0aGUgYXNzaWduZWVzTGlzdCBhcnJheS4gKi9cbiAgICAgIGlmIChlbGVtZW50WzE5XSAmJiBlbGVtZW50WzE5XSAhPSAnICcpIHtcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB7XG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50WzE5XSxcbiAgICAgICAgICAvLyBuYW1lOiBlbGVtZW50WzExXS5zcGxpdCgnICgnKVswXSxcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzE5XSxcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFsxOV0sXG4gICAgICAgICAgZW1wbG95ZWVfaWQ6IGVsZW1lbnRbMjBdLFxuICAgICAgICAgIG15X21lbWJlcl9pZDogSlNPTi5wYXJzZShlbGVtZW50WzIxXSksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QucHVzaChhc3NpZ25lZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50WzJdICYmIGVsZW1lbnRbMl0gIT0gJyAnKSB7XG4gICAgICAgIGNvbnN0IHJldmlld2VyID0ge1xuICAgICAgICAgIG5hbWVBbmRFbWFpbDogZWxlbWVudFsyXSxcbiAgICAgICAgICAvLyBuYW1lOiBlbGVtZW50WzExXS5zcGxpdCgnICgnKVswXSxcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzBdLFxuICAgICAgICAgIGVtYWlsOiBlbGVtZW50WzFdLFxuICAgICAgICAgIGVtcGxveWVlX2lkOiBlbGVtZW50WzNdLFxuICAgICAgICAgIG15X21lbWJlcl9pZDogZWxlbWVudFs0XSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmV2aWV3ZXJMaXN0LnB1c2gocmV2aWV3ZXIpO1xuICAgICAgfVxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbMl0gaXMgbm90IGVtcHR5IGFuZCBub3QgZXF1YWwgdG8gc3BhY2UuIElmIGl0IGlzIG5vdCBlbXB0eSBhbmQgbm90XG4gICAgICBlcXVhbCB0byBzcGFjZSwgaXQgd2lsbCBjcmVhdGUgYW4gb2JqZWN0IGFuZCBwdXNoIGl0IHRvIHRoZSBhc3NpZ25vcnNMaXN0IGFycmF5LiAqL1xuICAgICAgaWYgKGVsZW1lbnRbMl0gJiYgZWxlbWVudFsyXSAhPSAnICcpIHtcbiAgICAgICAgY29uc3QgYXNzaWdub3IgPSB7XG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50WzJdLFxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbMF0sXG4gICAgICAgICAgZW1haWw6IGVsZW1lbnRbMV0sXG4gICAgICAgICAgLy8gbmFtZTogZWxlbWVudFsxNF0uc3BsaXQoJyAoJylbMF0sXG4gICAgICAgICAgLy8gZW1haWw6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJyksXG4gICAgICAgICAgbWVtYmVyX2lkOiBlbGVtZW50WzRdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25vcnNMaXN0LnB1c2goYXNzaWdub3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgMTd0aCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0cnVlLiBJZiBpdCBpcywgaXQgaXMgY3JlYXRpbmcgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAgICAxNnRoIGVsZW1lbnQgYXMgdGhlIG5hbWUgYW5kIHRoZSAxN3RoIGVsZW1lbnQgYXMgdGhlIGlkLiAqL1xuICAgICAgaWYgKGVsZW1lbnRbMTddKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFJlc3BvbnNpYmlsaXR5ID0ge1xuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbMTZdLFxuICAgICAgICAgIGlkOiBKU09OLnBhcnNlKGVsZW1lbnRbMTddKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucGFyZW50UmVzcG9uc2liaWxpdHkucHVzaChwYXJlbnRSZXNwb25zaWJpbGl0eSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcy4gYW5kIHB1c2ggdGhlIGNoaWxkIGNhdGVnb3JpZXMgdG8gdGhlaXIgcGFyZW50IHByb2dyYW0gKi9cbiAgICBpZiAodGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0Py5sZW5ndGgpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdD8uZm9yRWFjaCgoY2F0ZWdvcnk6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBpbmRleCA9IHRlbXBMaXN0WzBdPy5pbmRleE9mKGNhdGVnb3J5Py5wcm9ncmFtSWQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgbGV0IGNoaWxkQ2F0ZWdvcnkgPSBbXTtcbiAgICAgICAgICAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcy4gKi9cbiAgICAgICAgICBmb3IgKGxldCBqID0gMTsgdHJ1ZTsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGVtcExpc3Rbal0gJiYgdGVtcExpc3Rbal1baW5kZXhdKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRlbXBMaXN0W2pdW2luZGV4IC0gMV0sXG4gICAgICAgICAgICAgICAgaWQ6IHRlbXBMaXN0W2pdW2luZGV4XSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgY2hpbGRDYXRlZ29yeS5wdXNoKGNhdGVnb3J5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3RbaV1bJ2NoaWxkQ2F0ZWdvcnknXSA9IGNoaWxkQ2F0ZWdvcnk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBldmVudCwgd2hpY2ggaXMgYSBzdHJpbmcsIGFuZCB0aGVuIGl0IHNldHMgdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB0b1xuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGJ1bGtVcGxvYWQgdmFyaWFibGUsIHdoaWNoIGlzIGFuIG9iamVjdCwgYW5kIHRoZW4gaXQgYWNjZXNzZXMgdGhlIHByb3BlcnR5IG9mXG4gICAqIHRoYXQgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgZXZlbnQgc3RyaW5nLlxuICAgKlxuICAgKiBTbyBpZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdmcmVxdWVuY3knLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG9cbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxuICAgKlxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdvbmdvaW5nJywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZVxuICAgKiB2YWx1ZSBvZiB0aGUgb25nb2luZyBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXG4gICAqXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uQ29tcGxldGlvbicsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGVcbiAgICogdmFsdWUgb2YgdGhlIG9uQ29tcGxldGlvbiBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXG4gICAqXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgYW55dGhpbmcgZWxzZSwgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gc3RyaW5nIC0gdGhlIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBmcm9tIHRoZSBjaGlsZCBjb21wb25lbnQgKGZyZXF1ZW5jeSB8IG9uZ29pbmcgfCBvbkNvbXBsZXRpb24pXG4gICAqL1xuICBzZWxlY3RlZFRhYihldmVudDogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJykge1xuICAgIHRoaXMudGFiVHlwZSA9IGV2ZW50O1xuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb25nb2luZyc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29uQ29tcGxldGlvbic6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGluIGEgcmVwb3J0LCBhIHRhYiB0eXBlLCBhbmQgYSBib29sZWFuIHZhbHVlLiBJdCB0aGVuIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBidW5jaCBvZlxuICAgKiBwcm9wZXJ0aWVzLlxuICAgKiA8L2NvZGU+XG4gICAqIEBwYXJhbSB7YW55fSByZXBvcnQgLSBhbnkgPSZndDsgdGhlIGFycmF5IG9mIGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYlR5cGUgLSBzdHJpbmcgLSB0aGlzIGlzIHRoZSB0eXBlIG9mIHRhYiB0aGF0IGlzIHNlbGVjdGVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJvZ3JhbSAtIGJvb2xlYW5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKi9cbiAgc2V0UmVwb3J0RGV0YWlscyhyZXBvcnQ6IGFueSwgdGFiVHlwZTogc3RyaW5nLCBpc1Byb2dyYW06IGJvb2xlYW4pIHtcbiAgICBsZXQgb2JqOiBhbnk7XG4gICAgc3dpdGNoICh0YWJUeXBlKSB7XG4gICAgICBjYXNlICdmcmVxdWVuY3knOiB7XG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcbiAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzhdLFxuICAgICAgICAgICAgZGF5OiByZXBvcnRbOV0sXG4gICAgICAgICAgICBtb250aDogcmVwb3J0WzEwXSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFsxMl0sXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTRdLFxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTVdLFxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxNl0sXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE3XSxcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMThdLFxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTldLFxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE5XSxcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMjBdLFxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMF0sXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMjFdLFxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsyMl0sXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIzXSxcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzI0XSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XG4gICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XG4gICAgICAgICAgb2JqWydpc1Bhc3REYXRlJ10gPSB0aGlzLmlzUGFzdERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxuICAgICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSAmJlxuICAgICAgICAgICAgIW9ialsnaXNQYXN0RGF0ZSddICYmXG4gICAgICAgICAgICBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmXG4gICAgICAgICAgICAhT2JqZWN0LnZhbHVlcyhvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10pLmluY2x1ZGVzKGZhbHNlKSAmJlxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcbiAgICAgICAgICAgIGRheTogcmVwb3J0WzZdLFxuICAgICAgICAgICAgbW9udGg6IHJlcG9ydFs3XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzldLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEyXSxcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE1XSxcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzE3XSxcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMTldLFxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcbiAgICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gJiZcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxuICAgICAgICAgICAgb2JqPy5mcmVxdWVuY3k/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdvbmdvaW5nJzoge1xuICAgICAgICBpZiAoaXNQcm9ncmFtKSB7XG4gICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxuICAgICAgICAgICAgcHJvZ3JhbTogcmVwb3J0WzJdLFxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFs1XSxcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcbiAgICAgICAgICAgIHNldFJlbWluZGVyOiByZXBvcnRbOV0sXG4gICAgICAgICAgICBmcmVxdWVuY3lSZW1pbmRlcjogcmVwb3J0WzEwXSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTFdLFxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMl0sXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxM10sXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE0XSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTVdLFxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNl0sXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxN10sXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTddLFxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxOF0sXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE4XSxcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxOV0sXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzIwXSxcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjFdLFxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjJdLFxuICAgICAgICAgIH07XG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ107XG4gICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzJdLFxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs2XSxcbiAgICAgICAgICAgIGZyZXF1ZW5jeVJlbWluZGVyOiByZXBvcnRbN10sXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzhdLFxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFs5XSxcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEwXSxcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTFdLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxMl0sXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzEzXSxcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE0XSxcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNF0sXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzE1XSxcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTVdLFxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE2XSxcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMTddLFxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsxOF0sXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsxOV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIG9ialsnaXNWYWxpZCddID0gb2JqWydpc1ZhbGlkRGF0YSddICYmIG9ialsnaXNWYWxpZFVzZXInXTtcbiAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdvbkNvbXBsZXRpb24nOiB7XG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcbiAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzhdLFxuICAgICAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs5XSxcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFsxMF0sXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzExXSxcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxM10sXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzE0XSxcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE1XSxcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTZdLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxN10sXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE4XSxcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE5XSxcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxOV0sXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMjBdLFxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzIxXSxcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjJdLFxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyM10sXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyNF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcbiAgICAgICAgICAgIG9iaj8ucGFyZW50UmVzcG9uc2liaWxpdHk/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNl0sXG4gICAgICAgICAgICBkdWVEYXRlOiByZXBvcnRbN10sXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzhdLFxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMV0sXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTRdLFxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTZdLFxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxOF0sXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjFdLFxuICAgICAgICAgIH07XG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcbiAgICAgICAgICAgIG9iaj8ucGFyZW50UmVzcG9uc2liaWxpdHk/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIHJlbW92ZXMgYWxsIHdoaXRlc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBzdHJpbmdcbiAgICogQHBhcmFtIHthbnl9IG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcmVzcG9uc2liaWxpdHlcbiAgICogQHJldHVybnMgdGhlIHRyaW1tZWROYW1lIHZhcmlhYmxlLlxuICAgKi9cbiAgY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShuYW1lOiBhbnkpIHtcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB2YXIgdHJpbW1lZE5hbWUgPSBuYW1lLnRvU3RyaW5nKCkucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcbiAgICAgIHRyaW1tZWROYW1lID0gdHJpbW1lZE5hbWUucmVwbGFjZSgvICArL2csICcgJyk7XG4gICAgfVxuICAgIHJldHVybiB0cmltbWVkTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcmVzcG9uc2liaWxpdHkgbmFtZSBpcyB2YWxpZCwgYW5kIHRoZSBhc3NpZ25lZSBhbmQgYXNzaWdub3IgYXJlIG5vdCBlbXB0eSwgdGhlbiByZXR1cm5cbiAgICogdHJ1ZS4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2VcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgLSB0aGUgZGF0YSB0aGF0IGlzIGJlaW5nIHBhc3NlZCBpblxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXG4gICAqL1xuICBpc1ZhbGlkRGF0YShkYXRhOiBhbnkpIHtcbiAgICBjb25zdCByZXNwb25zaWJpbGl0eSA9IHRoaXMuY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShcbiAgICAgIGRhdGE/LnJlc3BvbnNpYmlsaXR5TmFtZVxuICAgICk/Lmxlbmd0aFxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICAgIGNvbnN0IGFzc2lnbmVlID0gZGF0YT8uYXNzaWduZWU/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcbiAgICBjb25zdCBmcmVxdWVuY3kgPSBkYXRhPy5mcmVxdWVuY3k/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcbiAgICBpZiAoYXNzaWduZWUgJiYgcmVzcG9uc2liaWxpdHkgJiYgZnJlcXVlbmN5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgYXNzaWdub3IgaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25vciBpcyBub3Qgc2V0XG4gICAqIGFuZCB0aGUgZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgdGhlXG4gICAqIHNhbWUgYXMgdGhlIHJldmlld2VyLCBvdmVyc2Vlciwgb3IgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCBhbmQgdGhlXG4gICAqIGRlZmF1bHRPd25lciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIHJldmlld2VyIGlzIHRoZSBzYW1lIGFzXG4gICAqIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCwgdGhlbiByZXR1cm4gZmFsc2UuIE90aGVyd2lzZSxcbiAgICogcmV0dXJuIHRydWVcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgLSB0aGlzIGlzIHRoZSBkYXRhIHRoYXQgaXMgcGFzc2VkIGluIGZyb20gdGhlIGZvcm0uXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzVmFsaWRVc2VycyhkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAoZGF0YT8uYXNzaWdub3IgJiZcbiAgICAgICAgKGRhdGE/LmFzc2lnbm9yID09IGRhdGE/Lm92ZXJzZWVyIHx8XG4gICAgICAgICAgZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcbiAgICAgICghZGF0YT8uYXNzaWdub3IgJiZcbiAgICAgICAgKHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm92ZXJzZWVyIHx8XG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcbiAgICAgIChkYXRhPy5hc3NpZ25lZSAmJlxuICAgICAgICAoZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ucmV2aWV3ZXIgfHxcbiAgICAgICAgICBkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5vdmVyc2VlciB8fFxuICAgICAgICAgIGRhdGE/LmFzc2lnbmVlID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XG4gICAgICAoIWRhdGE/LmFzc2lnbmVlICYmXG4gICAgICAgICh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5vdmVyc2VlciB8fFxuICAgICAgICAgIHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XG4gICAgICAoZGF0YT8ucmV2aWV3ZXIgJiZcbiAgICAgICAgKGRhdGE/LnJldmlld2VyID09IGRhdGE/Lm92ZXJzZWVyIHx8XG4gICAgICAgICAgZGF0YT8ucmV2aWV3ZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcbiAgICAgICFkYXRhPy5hc3NpZ25lZVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgaW4gYSBkYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCA0IGJvb2xlYW4gcHJvcGVydGllcy5cbiAgICogVGhlIGJvb2xlYW4gcHJvcGVydGllcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWVzIG9mIHRoZSBkYXRhIG9iamVjdC5cbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgPSB7XG4gICAqIEByZXR1cm5zIHtcbiAgICogICBpc1ZhbGlkQXNzaWduZWU6IHRydWUsXG4gICAqICAgaXNWYWxpZEFzc2lnbm9yOiB0cnVlLFxuICAgKiAgIGlzVmFsaWRSZXZpZXdlcjogdHJ1ZSxcbiAgICogICBpc1ZhbGlkT3ZlcnNlZXI6IHRydWVcbiAgICogfVxuICAgKi9cbiAgdmFsaWRhdGVEYXRhV2l0aFByb2dyYW0oZGF0YTogYW55KTogYW55IHtcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdD8uZmlsdGVyKFxuICAgICAgKHByb2dyYW06IGFueSkgPT4gcHJvZ3JhbT8ucHJvZ3JhbU5hbWUgPT09IGRhdGE/LnByb2dyYW1cbiAgICApO1xuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWduZWUgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZmlsdGVyKFxuICAgICAgKGFzc2lnbmVlOiBhbnkpID0+IGFzc2lnbmVlPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LmFzc2lnbmVlXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZEFzc2lnbm9yID0gdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbm9yc0xpc3Q/LmZpbHRlcihcbiAgICAgIChhc3NpZ25vcjogYW55KSA9PiBhc3NpZ25vcj8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5hc3NpZ25vclxuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0ZWRSZXZpZXdlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcbiAgICAgIChyZXZpZXdlcjogYW55KSA9PiByZXZpZXdlcj8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5yZXZpZXdlclxuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0ZWRPdmVyc2VlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcbiAgICAgIChvdmVyc2VlcjogYW55KSA9PiBvdmVyc2Vlcj8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5vdmVyc2VlclxuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmUgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0Py5maWx0ZXIoXG4gICAgICAobm90aWZ5T25GYWlsdXJlOiBhbnkpID0+XG4gICAgICAgIG5vdGlmeU9uRmFpbHVyZT8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmVcbiAgICApO1xuICAgIGxldCBpc1ZhbGlkQXNzaWduZWUgPSB0cnVlO1xuICAgIGxldCBpc1ZhbGlkQXNzaWdub3IgPSB0cnVlO1xuICAgIGxldCBpc1ZhbGlkUmV2aWV3ZXIgPSB0cnVlO1xuICAgIGxldCBpc1ZhbGlkT3ZlcnNlZXIgPSB0cnVlO1xuICAgIGxldCBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgICBpZiAocHJvZ3JhbSAmJiB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikge1xuICAgICAgaWYgKHByb2dyYW1bMF0/LmFzc2lnbmVlPy5sZW5ndGggJiYgc2VsZWN0ZWRBc3NpZ25lZT8ubGVuZ3RoKSB7XG4gICAgICAgIGlzVmFsaWRBc3NpZ25lZSA9IHByb2dyYW1bMF0/LmFzc2lnbmVlPy5pbmNsdWRlcyhcbiAgICAgICAgICBzZWxlY3RlZEFzc2lnbmVlWzBdPy5teV9tZW1iZXJfaWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAocHJvZ3JhbVswXT8ucmV2aWV3ZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZFJldmlld2VyPy5sZW5ndGgpIHtcbiAgICAgICAgaXNWYWxpZFJldmlld2VyID0gcHJvZ3JhbVswXT8ucmV2aWV3ZXI/LmluY2x1ZGVzKFxuICAgICAgICAgIHNlbGVjdGVkUmV2aWV3ZXJbMF0/Lm15X21lbWJlcl9pZFxuICAgICAgICApXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkT3ZlcnNlZXI/Lmxlbmd0aCkge1xuICAgICAgICBpc1ZhbGlkT3ZlcnNlZXIgPSBwcm9ncmFtWzBdPy5vdmVyc2Vlcj8uaW5jbHVkZXMoXG4gICAgICAgICAgc2VsZWN0ZWRPdmVyc2VlclswXT8ubXlfbWVtYmVyX2lkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5sZW5ndGggJiYgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmU/Lmxlbmd0aCkge1xuICAgICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKFxuICAgICAgICAgIHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlWzBdPy5teV9tZW1iZXJfaWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkQXNzaWduZWU6IGlzVmFsaWRBc3NpZ25lZSxcbiAgICAgIGlzVmFsaWRBc3NpZ25vcjogaXNWYWxpZEFzc2lnbm9yLFxuICAgICAgaXNWYWxpZFJldmlld2VyOiBpc1ZhbGlkUmV2aWV3ZXIsXG4gICAgICBpc1ZhbGlkT3ZlcnNlZXI6IGlzVmFsaWRPdmVyc2VlcixcbiAgICAgIGlzVmFsaWROb3RpZnlPbkZhaWx1cmU6IGlzVmFsaWROb3RpZnlPbkZhaWx1cmUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyB0d28gc3RyaW5ncyBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRocmVlIHByb3BlcnRpZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb2dyYW1OYW1lIC0gc3RyaW5nIC0mZ3Q7IE5hbWUgb2YgdGhlIHByb2dyYW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGlsZVByb2dyYW1dIC0gc3RyaW5nID0mZ3Q7IHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHN1Yi1wcm9ncmFtXG4gICAqIEByZXR1cm5zIHtcbiAgICogICBwcm9ncmFtSWQ6IDEsXG4gICAqICAgY2hpbGRQcm9ncmFtSWQ6IDIsXG4gICAqICAgY2F0ZWdvcnlJZDogJzEsMidcbiAgICogfVxuICAgKi9cbiAgZ2V0UHJvZ3JhbUlkKHByb2dyYW1OYW1lOiBzdHJpbmcsIGNoaWxlUHJvZ3JhbT86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3Q/LmZpbHRlcihcbiAgICAgIChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LnByb2dyYW1OYW1lID09PSBwcm9ncmFtTmFtZVxuICAgICk7XG4gICAgbGV0IHN1YlByb2dyYW07XG4gICAgbGV0IHN1YlByb2dyYW1JZDtcbiAgICBsZXQgY2F0ZWdvcnlJZDtcbiAgICBpZiAoY2hpbGVQcm9ncmFtPy5sZW5ndGggJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XG4gICAgICBzdWJQcm9ncmFtID0gcHJvZ3JhbVswXT8uY2hpbGRDYXRlZ29yeT8uZmlsdGVyKFxuICAgICAgICAoc3ViUHJvZ3JhbTogYW55KSA9PiBzdWJQcm9ncmFtPy5uYW1lID09PSBjaGlsZVByb2dyYW1cbiAgICAgICk7XG4gICAgICBzdWJQcm9ncmFtSWQgPSBzdWJQcm9ncmFtPy5sZW5ndGggPyBzdWJQcm9ncmFtWzBdPy5pZCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoc3ViUHJvZ3JhbUlkICYmIHByb2dyYW0/Lmxlbmd0aCkge1xuICAgICAgY2F0ZWdvcnlJZCA9XG4gICAgICAgIHByb2dyYW1bMF0/LnByb2dyYW1JZD8udG9TdHJpbmcoKSArICcsJyArIHN1YlByb2dyYW1JZD8udG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHByb2dyYW0/Lmxlbmd0aCkge1xuICAgICAgY2F0ZWdvcnlJZCA9IHByb2dyYW1bMF0/LnByb2dyYW1JZD8udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2dyYW1JZDogcHJvZ3JhbT8ubGVuZ3RoID8gcHJvZ3JhbVswXT8ucHJvZ3JhbUlkIDogdW5kZWZpbmVkLFxuICAgICAgY2hpbGRQcm9ncmFtSWQ6IHN1YlByb2dyYW1JZCxcbiAgICAgIGNhdGVnb3J5SWQ6IGNhdGVnb3J5SWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gLSB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBncm91cCB0aGF0IGlzIHNlbGVjdGVkIGZyb20gdGhlIGRyb3Bkb3duLlxuICAgKiBpdCB3aWxsIHJldHVybiBlbXBsb3llZSBpZCBpbiB0aGlzIGZvcm0gJzEyMzQsMjM0NScuXG4gICAqL1xuICBnZXRFbXBsb3llZUlkRnJvbUdyb3VwKGl0ZW06IGFueSkge1xuICAgIGxldCBlbXBJZDogYW55ID0gW107XG4gICAgbGV0IGVtcGxveWVlX2lkOiBhbnkgPSBbXTtcbiAgICB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcbiAgICAgIGlmIChlbkVsZW1lbnQ/Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XG4gICAgICAgIGVtcElkID0gZW5FbGVtZW50Py5teV9tZW1iZXJfaWQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGVtcElkPy5sZW5ndGgpIHtcbiAgICAgIGVtcElkPy5mb3JFYWNoKChpZDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHVzZXI/Lm15X21lbWJlcl9pZCA9PSBpZCkge1xuICAgICAgICAgICAgZW1wbG95ZWVfaWQ/LnB1c2godXNlcj8uZW1wbG95ZWVfaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVtcGxveWVlX2lkPy50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBpdGVtIGlzIGEgZ3JvdXAsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIGFueSAtIHRoZSBpdGVtIHRoYXQgaXMgYmVpbmcgY2hlY2tlZFxuICAgKi9cbiAgaXNHcm91cFNlbGVjdGVkKGl0ZW06IGFueSkge1xuICAgIGxldCBpc0dyb3VwID0gZmFsc2U7XG4gICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWduZWVzTGlzdC5mb3JFYWNoKChlbkVsZW1lbnQ6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGVuRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSAmJlxuICAgICAgICAoaXRlbT8uaW5jbHVkZXMoJ1VzZXJzKScpIHx8IGl0ZW0/LmluY2x1ZGVzKCdVc2VyKScpKSAmJlxuICAgICAgICB0eXBlb2YgZW5FbGVtZW50Py5teV9tZW1iZXJfaWQgPT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICBpc0dyb3VwID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNHcm91cDtcbiAgfVxufVxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2tcIiBbYXR0ci5pZF09XCInc2Nyb2xsUmVmZXJlbmNlJ1wiID5cbiAgICA8IS0gLSBtYWluIGNvbnRhaW5lciBzdGFydHMgaGVyZSAtIC0+XG4gICAgPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc3ByZWFkc2hlZXQtbXVsdGlwbGUtY2F0ZWdvcnkuc3ZnXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGg0PllvdSBjYW4gZW50cnVzdCBtdWx0aXBsZSByZXNwb25zaWJpbGl0aWVzIGluIGp1c3QgdHdvIGVhc3kgc3RlcHM6PC9oND5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3RcIj5cbiAgICAgICAgICAgICAgICA8bGk+RG93bmxvYWQgdGhlIHRlbXBsYXRlIGFuZCBmaWxsIGluIHRoZSBkZXRhaWxzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlVwbG9hZCB0aGUgLnhsc3ggZmlsZSBhbmQgeW914oCZcmUgZ29vZCB0byBnbyE8L2xpPlxuICAgICAgICAgICAgPC91bD5cblxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRvd25sb2FkXCIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ05PVF9ET1dOTE9BRElORydcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYjs8L2k+IERvd25sb2FkIFRlbXBsYXRlPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURJTkcnXCI+XG4gICAgICAgICAgICAgICAgRG93bmxvYWQgaW4gUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICA8YXBwLWxpbmUtbG9hZGVyIFtsb2FkZXJIZWlnaHRdPVwiJzInXCI+PC9hcHAtbGluZS1sb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ0RPV05MT0FERUQnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLXByb2dyZXNzXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWM7PC9pPkRvd25sb2FkIENvbXBsZXRlPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLWFnYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIElzIHRoZSBmaWxlIG5vdCBkb3dubG9hZGVkP1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIj5SZXRyeSBEb3dubG9hZDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzV3JvbmdGaWxlIHx8IGlzV3JvbmdGb3JtYXR8fCBpc0ZpbGVFbXB0eVwiXG4gICAgICAgICAgICA+e3tlcnJvck1lc3NhZ2V9fTwvcD4gIFxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiAtLT5cbjxhcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3ICpuZ0lmPVwic2hvd0V4Y2VsXCJcbiAgICBbcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXT1cInJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZFwiXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXG4gICAgW2ZpbGVOYW1lXT1cImZpbGVOYW1lXCJcbiAgICBbbG9hZGVyXT1cImxvYWRlclwiXG4gICAgW2RlZmF1bHRPd25lcl09XCJkZWZhdWx0T3duZXJcIlxuICAgIFt0YWJUeXBlXT1cInRhYlR5cGVcIlxuICAgIFtidWxrVXBsb2FkXT1cImJ1bGtVcGxvYWRcIlxuICAgIChzdWJtaXRSZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQpPVwic3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKClcIlxuICAgIChzZWxlY3RlZFRhYik9XCJzZWxlY3RlZFRhYigkZXZlbnQpXCJcbiAgICAoY2FuY2VsKT1cInJlc2V0KClcIlxuICAgIFtyZXNwb25zaWJpbGl0eVR5cGVdPVwiJ211bHRpVGFiJ1wiPlxuPC9hcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3PlxuPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cblxuPGlucHV0IHR5cGU9XCJmaWxlXCIgWyhuZ01vZGVsKV09XCJmaWxlVmFsdWVcIiBpZD1cImZpbGVJbnB1dFwiIGNsYXNzPVwiaGlkZGVuLWlucHV0XCIgYWNjZXB0PVwiLnhsc3hcIiAoY2hhbmdlKT1cInVwbG9hZGVkRmlsZSgkZXZlbnQpXCIgbXVsdGlwbGUgLz5cbjxhcHAtc21pbGV5LWRpYWxvZy1pbmxpbmUgKm5nSWY9XCJzaG93U21pbGV5XCIgW21lc3NhZ2VdPVwic21pbGV5TWVzc2FnZVwiIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIiAoYWN0aW9uKT1cImFjdGlvbigkZXZlbnQpXCIgKGNsb3NlU21pbGV5KT1cImNsb3NlU21pbGV5KCRldmVudClcIj48L2FwcC1zbWlsZXktZGlhbG9nLWlubGluZT4iXX0=
1603
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFZckQsTUFBTSxPQUFPLHlDQUF5QztJQXNCcEQsSUFBMkIsZ0JBQWdCLENBQUMsSUFBUztRQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUF3RkQsWUFDVSxXQUEyQixFQUMzQixxQkFBNEMsRUFDNUMsV0FBd0IsRUFDeEIsZ0JBQXNDLEVBQ3RDLFFBQXlCLEVBQ3pCLGFBQTRCO1FBTDVCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQiww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UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBZGRSaXNrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2FkZC1yaXNrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnJlcXVlbmN5QnVsa1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9mcmVxdWVuY3kuc2VydmljZSc7XG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9yZXNwb25zaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZnJhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBSSVNLX0NMQVNTX0xJU1QgfSBmcm9tICcuLi9jb25zdGFudHMvcmVzcG9uc2liaWxpdHknO1xuaW1wb3J0IHsgUkVHRVggfSBmcm9tICcuLi9jb25zdGFudHMvcmVnaXguY29uc3RhbnRzJztcblxudHlwZSBBT0EgPSBhbnlbXVtdO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW1xuICAgICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQubGVzcycsXG4gICAgJy4uL2Zvcm1zLmxlc3MnLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5V2l0aFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGlzTm90aWZpY2F0aW9uUGVuZGluZyA9IDA7XG4gIEBPdXRwdXQoKSBjbG9zZUFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHF1ZXJ5UGFyYW06IHN0cmluZyA9ICcnO1xuICByZWNlbnRSZXNwb25zaWJpbGl0eVVybDogYW55ID0ge1xuICAgIGJ5UmVzcG9uc2liaWxpdGllczogeyB0eXBlOiBbJ3JlY2VudF9yZXNwb25zaWJpbGl0aWVzJ10sIHN1YlR5cGU6IFsnQ0MnXSB9LFxuICAgIGJ5U3RhdHVzOiB7IHR5cGU6IFtdLCBzdWJUeXBlOiBbXSB9LFxuICAgIGZpbHRlck9iamVjdDoge1xuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IFtdLFxuICAgICAgZW50cnVzdGVkQnk6IFtdLFxuICAgICAgZW50cnVzdGVkVG86IFtdLFxuICAgICAgcmlza0lkczogW10sXG4gICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBbXSxcbiAgICB9LFxuICAgIHRpbWVQZXJpb2REZXRhaWxzOiB7IHR5cGU6ICcnLCBzZWxlY3RlZFBlcmlvZDogJycsIHNlbGVjdGVkWWVhcjogJycgfSxcbiAgICBzdGF0dXM6ICcnLFxuICB9O1xuXG4gIEBJbnB1dCgndXBsb2FkZWRGaWxlJykgc2V0IHVwbG9hZGVkRmlsZURhdGEoZGF0YTogYW55KSB7XG4gICAgdGhpcy51cGxvYWRlZEZpbGUoZGF0YSk7XG4gIH1cbiAgQElucHV0KCkgb3JnRGV0YWlscyE6IGFueTtcbiAgQElucHV0KCkgZmVhdHVyZSE6IGFueTtcblxuICB1cmwgPVxuICAgICdxPXtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9JztcbiAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkOiBhbnkgPSB7XG4gICAgaGVhZGVyOiBbXSxcbiAgICByZXBvcnRzOiBbXSxcbiAgfTtcbiAgdGFiVHlwZTogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJyA9ICdmcmVxdWVuY3knO1xuICB0YWJJbmRleDogYW55ID0ge1xuICAgIGZyZXF1ZW5jeTogMCxcbiAgICBvbmdvaW5nOiAxLFxuICAgIG9uQ29tcGxldGlvbjogMixcbiAgfTtcblxuICBidWxrVXBsb2FkOiBhbnkgPSB7XG4gICAgZnJlcXVlbmN5OiB7XG4gICAgICBoZWFkZXI6IFtdLFxuICAgICAgc3ViSGVhZGluZzogW10sXG4gICAgICByZXBvcnRzOiBbXSxcbiAgICB9LFxuICAgIG9uZ29pbmc6IHtcbiAgICAgIGhlYWRlcjogW10sXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcbiAgICAgIHJlcG9ydHM6IFtdLFxuICAgIH0sXG4gICAgb25Db21wbGV0aW9uOiB7XG4gICAgICBoZWFkZXI6IFtdLFxuICAgICAgc3ViSGVhZGluZzogW10sXG4gICAgICByZXBvcnRzOiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIHRlbXBsYXRlSW5mbzogYW55ID0ge1xuICAgIGNhdGVnb3J5TGlzdDogW10sXG4gICAgcmNMaXN0OiBbXSxcbiAgICBhc3NpZ25vcnNMaXN0OiBbXSxcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcbiAgICByZXZpZXdlckxpc3Q6IFtdLFxuICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcbiAgICBtZW1iZXJJZDogJycsXG4gIH07XG4gIGlzTG9hZGVyID0gZmFsc2U7XG4gIHNob3dDYXRlZ29yeUxpc3QgPSBmYWxzZTtcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XG4gIGRvd25sb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBsb2FkZXIgPSBmYWxzZTtcbiAgaXNGaWxlRW1wdHkgPSBmYWxzZTtcbiAgaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcbiAgaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xuICBmaWxlTmFtZTogYW55O1xuICBkYXRhOiBhbnk7XG4gIHNob3dFeGNlbCA9IGZhbHNlO1xuICB1cGxvYWRlZEZpbGVzOiBhbnkgPSBbXTtcbiAgZmlsZVJlc3BvbnNlOiBhbnkgPSBbXTtcbiAgZmlsZVZhbHVlOiBhbnk7XG4gIG1lbWJlcklkID0gMDtcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xuICBlcnJvck1lc3NhZ2UgPSAnIGludmFsaWQgZmlsZSBlcnJvcic7XG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcbiAgZG93bmxvYWRQZXJjZW50ID0gMDtcbiAgZGVmYXVsdE93bmVyID0gJyc7XG4gIHNtaWxleU1lc3NhZ2UgPSBgWW91J3JlIEFsbCBTZXQhIFdlJ3JlIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0IGFuZCB5b3Ugd2lsbCBiZSBub3RpZmllZCB2aWEgZW1haWwgdXBvbiBjb21wbGV0aW9uLmA7XG4gIGFjdGlvbkJ1dHRvbnMgPSBbXG4gICAge1xuICAgICAgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJyxcbiAgICAgIGNsYXNzOiAnd2hpdGUtYnRuJyxcbiAgICAgIGlkOiAnYWRkTW9yZScsXG4gICAgfSxcbiAgICB7XG4gICAgICBidXR0b25UZXh0OiB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZ1xuICAgICAgICA/ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgSW4gUXVldWUnXG4gICAgICAgIDogJ1ZpZXcgUmVzcG9uc2liaWxpdGllcycsXG4gICAgICBjbGFzczogJ2JsdWUtYnRuJyxcbiAgICAgIGlkOiAndmlldycsXG4gICAgfSxcbiAgXTtcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xuICBtZW1iZXJfb2JqX2lkID0gJyc7XG4gIHJpc2tDbGFzc0VuYWJsZWQ6IGFueTtcbiAgdXNlckluZm8hOiBhbnk7XG4gIHJlc3BvbnNpYmlsaXR5RGF0YSE6IGFueTtcbiAgQElucHV0KCkgZmVhdHVyZWZsYWc6IGFueTtcbiAgZmZCdWxrVXBsb2FkT3B0aW1pemF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRGF5SW52YWxpZCA9IGZhbHNlO1xuICBpc0RhdGVGb3JtYXRJbnZhbGlkID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmlza1NlcnZpY2U6IEFkZFJpc2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lCdWxrU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpZnJhbWVTZXJ2aWNlOiBJZnJhbWVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7fVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xuICAgIHRoaXMubWVtYmVyX29ial9pZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS5faWQ7XG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS51c2VyO1xuICAgIHRoaXMuZGVmYXVsdE93bmVyID0gdGhpcy51c2VySW5mb1xuICAgICAgPyB0aGlzLnVzZXJJbmZvLm5hbWUgKyAnICgnICsgdGhpcy51c2VySW5mby5lbWFpbCArICcpJ1xuICAgICAgOiAnJztcbiAgICB0aGlzLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25EZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5yaXNrQ2xhc3NFbmFibGVkID0gcmVzLmVuYWJsZV9yaXNrY2xhc3M7XG4gICAgfSk7XG4gICAgdGhpcy5mZkJ1bGtVcGxvYWRPcHRpbWl6YXRpb24gPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcbiAgICAgICdmZl9idWxrX3VwbG9hZF9vcHRpbWl6YXRpb24nXG4gICAgKTtcbiAgfVxuXG4gIHRyaWdnZXJCcm93c2VGaWxlKCkge1xuICAgIGNvbnN0IGdldEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZUlucHV0Jyk7XG4gICAgaWYgKGdldEZpbGUpIHtcbiAgICAgIGdldEZpbGUuY2xpY2soKTtcbiAgICB9XG4gIH1cbiAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VySW5mbygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID0gcmVzLm5vdGlmaWNhdGlvbl9wZW5kaW5nX2ZsYWc7XG4gICAgfSk7XG4gIH1cblxuICB1cGxvYWRlZEZpbGUoZXZlbnQ6IGFueSwgdGFiVHlwZT86IGFueSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHtcbiAgICAgICAgaGVhZGVyOiBbXSxcbiAgICAgICAgcmVwb3J0czogW10sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcbiAgICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcbiAgICAgICAgcmNMaXN0OiBbXSxcbiAgICAgICAgYXNzaWdub3JzTGlzdDogW10sXG4gICAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxuICAgICAgICByZXZpZXdlckxpc3Q6IFtdLFxuICAgICAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXG4gICAgICAgIG1lbWJlcklkOiAnJyxcbiAgICAgIH07XG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzY3JvbGxSZWZlcmVuY2UnKTtcbiAgICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgcmVmZXJlbmNlLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBldmVudC50YXJnZXQuZmlsZXNbMF0ubmFtZTtcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKGV2ZW50LnRhcmdldC5maWxlcyk7XG4gICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2ZW50LnRhcmdldCBhcyBEYXRhVHJhbnNmZXI7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGN1cmx5XG4gICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIG11bHRpcGxlIGZpbGVzJyk7XG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xuICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMV07XG4gICAgICAgIGNvbnN0IHNoZWV0Mjogc3RyaW5nID0gd2IuU2hlZXROYW1lc1syXTtcbiAgICAgICAgY29uc3Qgc2hlZXQzOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzNdO1xuICAgICAgICBjb25zdCB3c25hbWUxOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzRdO1xuICAgICAgICBjb25zdCB3czogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lXTtcbiAgICAgICAgY29uc3Qgc2hlZXRSZXBvcnQyOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1tzaGVldDJdO1xuICAgICAgICBjb25zdCBzaGVldFJlcG9ydDM6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3NoZWV0M107XG4gICAgICAgIGNvbnN0IHRlbXBEYXRhOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWUxXTtcbiAgICAgICAgY29uc3QgdERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHsgaGVhZGVyOiAxIH0pIGFzIEFPQTtcbiAgICAgICAgY29uc3QgdGVtcExpc3QgPSB0RGF0YS5maWx0ZXIoXG4gICAgICAgICAgKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRPcmdhbml6YXRpb25EZXRhaWxzKHRlbXBMaXN0KTtcbiAgICAgICAgd2IuU2hlZXROYW1lcy5mb3JFYWNoKChzaGVldDogYW55KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChzaGVldD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnZnJlcXVlbmN5IHJlc3BvbnNpYmlsaXRpZXMnOlxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzLCBzaGVldCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25nb2luZyByZXNwb25zaWJpbGl0aWVzJzpcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyhzaGVldFJlcG9ydDIsIHNoZWV0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvbiBjb21wbGV0aW9uIHJlc3BvbnNpYmlsaXRpZXMnOlxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHNoZWV0UmVwb3J0Mywgc2hlZXQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgd29ya3NoZWV0IGFuZCBhIHNoZWV0IG5hbWUsIGFuZCB0aGVuIGl0IHNldHMgdGhlIGRhdGEgZm9yIGRpZmZlcmVudCB0YWJzLlxuICAgKiBAcGFyYW0gd3MgLSBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hlZXQgLSBzdHJpbmcgLSB0aGUgbmFtZSBvZiB0aGUgc2hlZXQgaW4gdGhlIGV4Y2VsIGZpbGVcbiAgICogQHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBcInJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZFwiIHdoaWNoIGlzIGFuIG9iamVjdC5cbiAgICovXG4gIHNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzOiBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZykge1xuICAgIGxldCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ6IGFueSA9IHtcbiAgICAgIGhlYWRlcjogW10sXG4gICAgICByZXBvcnRzOiBbXSxcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxuICAgIH07XG4gICAgbGV0IHNoZWV0VmFsdWUgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcbiAgICAgIGhlYWRlcjogMSxcbiAgICAgIHJhdzogZmFsc2UsXG4gICAgfSkgYXMgQU9BO1xuICAgIGxldCBkYXRhID0gc2hlZXRWYWx1ZS5maWx0ZXIoKHJlczogYW55KSA9PiB7XG4gICAgICBsZXQgaXNVbmRlZmluZWQgPSAnJztcbiAgICAgIHJlcy5mb3JFYWNoKChlbDogYW55KSA9PiB7XG4gICAgICAgIGlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQgKyBlbDtcbiAgICAgIH0pO1xuICAgICAgaWYgKHNoZWV0VmFsdWVbMl0gJiYgc2hlZXRWYWx1ZVsyXVsxXSA9PT0gJ1Byb2dyYW0nKSB7XG4gICAgICAgIHJldHVybiAhKHJlcz8ubGVuZ3RoID09PSA5ICYmIHJlc1s4XSA9PT0gJycgJiYgIWlzVW5kZWZpbmVkLmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gNiAmJiByZXNbNV0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZmlsZU5hbWUuc3Vic3RyKC01KSAhPT0gJy54bHN4Jykge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXG4gICAgICAgICcgUkVUUlknO1xuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlciA9IGNsb25lRGVlcChkYXRhWzJdKTtcbiAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuc3ViSGVhZGluZyA9IGNsb25lRGVlcChkYXRhWzNdKTtcblxuICAgIGRhdGEgPSBkYXRhLnNsaWNlKDUpO1xuICAgIGlmICh0aGlzLm1lbWJlcl9vYmpfaWQgIT0gdGhpcy50ZW1wbGF0ZUluZm8ubWVtYmVySWQpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xuICAgICAgICAnIFJFVFJZJztcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5RGF0YSA9IGRhdGEuZmlsdGVyKFxuICAgICAgKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDBcbiAgICApO1xuICAgIHJlc3BvbnNpYmlsaXR5RGF0YS5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xuICAgICAgbGV0IHZhbGlkRGF0ZTtcbiAgICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydFsyXSwgJ2VudHJ1c3RlZF90bycpXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgICAgaWYgKHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJykge1xuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzRdLCByZXBvcnRbNV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWREYXRlID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKHJlcG9ydFs1XSwgcmVwb3J0WzZdKTtcbiAgICAgIH1cbiAgICAgIC8qIFB1c2hpbmcgdGhlIHJlcG9ydCBkZXRhaWxzIGludG8gdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGFzIHBlciB0YWIgdGFicyAqL1xuICAgICAgaWYgKHNoZWV0Py50b0xvd2VyQ2FzZSgpID09PSAnZnJlcXVlbmN5IHJlc3BvbnNpYmlsaXRpZXMnKSB7XG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXG4gICAgICAgICAgdGhpcy5zZXRSZXBvcnREZXRhaWxzKFxuICAgICAgICAgICAgcmVwb3J0LFxuICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuc3ViSGVhZGluZyA9XG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5zdWJIZWFkaW5nO1xuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQuZnJlcXVlbmN5LnJlcG9ydHMgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnJlcG9ydHM7XG4gICAgICB9XG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnKSB7XG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXG4gICAgICAgICAgdGhpcy5zZXRSZXBvcnREZXRhaWxzKFxuICAgICAgICAgICAgcmVwb3J0LFxuICAgICAgICAgICAgJ29uZ29pbmcnLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25nb2luZy5oZWFkZXIgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlcjtcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuc3ViSGVhZGluZyA9XG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5zdWJIZWFkaW5nO1xuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25nb2luZy5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xuICAgICAgfVxuICAgICAgaWYgKHNoZWV0Py50b0xvd2VyQ2FzZSgpID09PSAnb24gY29tcGxldGlvbiByZXNwb25zaWJpbGl0aWVzJykge1xuICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQucmVwb3J0cy5wdXNoKFxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcbiAgICAgICAgICAgIHJlcG9ydCxcbiAgICAgICAgICAgICdvbkNvbXBsZXRpb24nLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLnN1YkhlYWRpbmcgPVxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uc3ViSGVhZGluZztcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5yZXBvcnRzID1cbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnJlcG9ydHM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBpc0VtcHR5ID0gdGhpcy5jaGVja0VtcHR5RmlsZShkYXRhKTtcbiAgICAvKiBDaGVja2luZyBpZiB0aGUgZmlsZSBpcyBlbXB0eSwgaWYgaXQgaXMgZW1wdHkgaXQgd2lsbCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4gSWYgaXQgaXMgbm90XG4gICAgZW1wdHkgaXQgd2lsbCBjaGVjayBpZiB0aGUgZmlsZSBpcyB0aGUgY29ycmVjdCBmaWxlLCBpZiBpdCBpcyBub3QgdGhlIGNvcnJlY3QgZmlsZSBpdCB3aWxsXG4gICAgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UuIElmIGl0IGlzIHRoZSBjb3JyZWN0IGZpbGUgaXQgd2lsbCBjYWxsIHRoZSBmaWxlVXBsb2FkKCkgZnVuY3Rpb24uICovXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cbiAgICAgICAgJ1lvdSBoYXZlIHVwbG9hZGVkIGEgYmxhbmsgdGVtcGxhdGUuIFBsZWFzZSBhZGQgZGV0YWlscyBmb3IgYWxsIG1hbmRhdG9yeSBmaWVsZHMuIFJFVFJZJztcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5Py5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKicgJiZcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonXG4gICAgKSB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcbiAgICAgICAgJyBSRVRSWSc7XG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XG4gICAgdGhpcy5zaG93RXhjZWwgPSB0cnVlO1xuICAgIHRoaXMuZmlsZVZhbHVlID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGhhcyBhIGZyZXF1ZW5jeSBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcbiAgICogcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHRvIHRoZSBmcmVxdWVuY3kgb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gZnJlcXVlbmN5LiBJZiBub3QsIGNoZWNrXG4gICAqIGlmIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25nb2luZyBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcbiAgICogcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHRvIHRoZSBvbmdvaW5nIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uZ29pbmcuIElmIG5vdCwgY2hlY2sgaWZcbiAgICogdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGhhcyBhbiBvbkNvbXBsZXRpb24gb2JqZWN0IHdpdGggYSByZXBvcnRzIGFycmF5LCBzZXQgdGhlXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgb25Db21wbGV0aW9uIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uQ29tcGxldGlvbi4gSWYgbm90LFxuICAgKiByZXR1cm4gdHJ1ZS5cbiAgICogPC9jb2RlPlxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgY2hlY2tFbXB0eUZpbGUoZGF0YT86IGFueSkge1xuICAgIGxldCBpc0VtcHR5ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5Py5yZXBvcnRzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XG4gICAgICB0aGlzLnRhYlR5cGUgPSAnZnJlcXVlbmN5JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZztcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbmdvaW5nJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XG4gICAgICB0aGlzLnRhYlR5cGUgPSAnb25Db21wbGV0aW9uJztcbiAgICB9IGVsc2Uge1xuICAgICAgaXNFbXB0eSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBpc0VtcHR5O1xuICB9XG5cbiAgY29tcGFyZVdpdGhDdXJyZW50RGF0ZShkYXk6IGFueSwgbW9udGg6IGFueSkge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtb250aE5hbWVzID0gW1xuICAgICAgeyB2YWx1ZTogMSwgbW9udGg6ICdKYW4nIH0sXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcbiAgICAgIHsgdmFsdWU6IDMsIG1vbnRoOiAnTWFyJyB9LFxuICAgICAgeyB2YWx1ZTogNCwgbW9udGg6ICdBcHInIH0sXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcbiAgICAgIHsgdmFsdWU6IDYsIG1vbnRoOiAnSnVuJyB9LFxuICAgICAgeyB2YWx1ZTogNywgbW9udGg6ICdKdWwnIH0sXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcbiAgICAgIHsgdmFsdWU6IDksIG1vbnRoOiAnU2VwJyB9LFxuICAgICAgeyB2YWx1ZTogMTAsIG1vbnRoOiAnT2N0JyB9LFxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxuICAgICAgeyB2YWx1ZTogMTIsIG1vbnRoOiAnRGVjJyB9LFxuICAgIF07XG5cbiAgICBpZiAoIShkYXkgfHwgbW9udGgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtb250aEZvcm1hdFJlZ2V4ID0gUkVHRVguTU9OVEg7XG4gICAgICBpZiAoIW1vbnRoRm9ybWF0UmVnZXgudGVzdChtb250aCkpIHtcbiAgICAgICAgdGhpcy5pc0RhdGVGb3JtYXRJbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtb250aEFuZFllYXIgPSBtb250aC5zcGxpdChcIidcIik7XG5cbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG1vbWVudChcbiAgICAgICAgZGF5ICsgJy0nICsgbW9udGhBbmRZZWFyWzBdICsgJy0nICsgMjAgKyBtb250aEFuZFllYXJbMV0gKyAnIDAwOjAwOjAwJyxcbiAgICAgICAgJ0RELU1NTU0tWVlZWSBISDptbTpzcydcbiAgICAgICkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyk7XG4gICAgICBpZiAoc3RhcnREYXRlID09ICdJbnZhbGlkIGRhdGUnKSB7XG4gICAgICAgIHRoaXMuaXNEYXlJbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHt9LCA1KTtcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICBkYXRlX3ZhbHVlLnNldE1vbnRoKFxuICAgICAgICB0eXBlb2YgbW9udGggIT09ICdudW1iZXInXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cbiAgICAgICAgICAgICAgPy52YWx1ZSAtIDFcbiAgICAgICAgICA6IG1vbnRoXG4gICAgICApO1xuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcihOdW1iZXIoMjAgKyBtb250aC5zcGxpdChcIidcIilbMV0pKTtcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnREYXRlPy50b0pTT04oKT8uc3BsaXQoJ1QnKVswXSAhPVxuICAgICAgICAgIGRhdGVfdmFsdWU/LnRvSlNPTigpPy5zcGxpdCgnVCcpWzBdICYmXG4gICAgICAgIGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpc1Bhc3REYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxuICAgICAgeyB2YWx1ZTogMiwgbW9udGg6ICdGZWInIH0sXG4gICAgICB7IHZhbHVlOiAzLCBtb250aDogJ01hcicgfSxcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxuICAgICAgeyB2YWx1ZTogNSwgbW9udGg6ICdNYXknIH0sXG4gICAgICB7IHZhbHVlOiA2LCBtb250aDogJ0p1bicgfSxcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxuICAgICAgeyB2YWx1ZTogOCwgbW9udGg6ICdBdWcnIH0sXG4gICAgICB7IHZhbHVlOiA5LCBtb250aDogJ1NlcCcgfSxcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcbiAgICAgIHsgdmFsdWU6IDExLCBtb250aDogJ05vdicgfSxcbiAgICAgIHsgdmFsdWU6IDEyLCBtb250aDogJ0RlYycgfSxcbiAgICBdO1xuXG4gICAgaWYgKCEoZGF5IHx8IG1vbnRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIShkYXkgJiYgbW9udGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnN0IHJlcG9ydERhdGUgPSBuZXcgRGF0ZShkYXkgKyBtb250aC5zcGxpdChcIidcIikpO1xuICAgICAgY29uc3QgZGF0ZV92YWx1ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBkYXRlX3ZhbHVlLnNldE1vbnRoKFxuICAgICAgICB0eXBlb2YgbW9udGggIT09ICdudW1iZXInXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cbiAgICAgICAgICAgICAgPy52YWx1ZSAtIDFcbiAgICAgICAgICA6IG1vbnRoXG4gICAgICApO1xuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcihOdW1iZXIoMjAgKyBtb250aC5zcGxpdChcIidcIilbMV0pKTtcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XG4gICAgICBpZiAoY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkVGVtcGxhdGUoKSB7XG4gICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BRElORyc7XG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xuICAgIGNvbnN0IGRvd25sb2FkRGF0ZSA9IG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IGBFbnRydXN0IFJlc3BvbnNpYmlsaXRpZXMtJHtkb3dubG9hZERhdGVbMl19LSR7ZG93bmxvYWREYXRlWzFdfS0ke2Rvd25sb2FkRGF0ZVszXX0ueGxzeGA7XG5cbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmRvd25sb2FkUmVzcG9uc2liaWxpdHlUZW1wbGF0ZSgpLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XG4gICAgICAgICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAxMDAgKiAoZGF0YS5sb2FkZWQgLyBkYXRhLnRvdGFsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gdGhpcy5yaXNrU2VydmljZS5kb3duTG9hZEZpbGUoXG4gICAgICAgICAgICAgIGRhdGEuYm9keSxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3hsc3gnLFxuICAgICAgICAgICAgICBmaWxlTmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LCAxNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BREVEJztcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKCkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICBsZXQgcGF5bG9hZDogYW55ID0gW107XG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkOiBhbnkgPSBbXTtcbiAgICBjb25zdCBmcmVxdWVuY3lUeXBlQXJyYXkgPSBbJzEnLCAnMicsICczJywgJzQnLCAnNycsICcwJywgJzYnLCAnOSddO1xuICAgIGNvbnN0IGRlZmF1bHRXaW5kb3cgPSBbMCwgMiwgNywgMzAsIDcsIDE1LCAzLCAzMF07XG4gICAgY29uc3QgZGVmYXVsdEZhaWxlZERheSA9IFsxLCAyLCA1LCA1LCA1LCA1LCA1LCA1XTtcbiAgICBsZXQgdmFsaWRSZXNwb25zaWJpbGl0aWVzID0gMDtcbiAgICBsZXQgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/LmNvbmNhdChcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cyxcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzXG4gICAgKTtcbiAgICByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZCA9XG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KFxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHMsXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzXG4gICAgICApO1xuICAgIGlmICh0aGlzLmZmQnVsa1VwbG9hZE9wdGltaXphdGlvbikge1xuICAgICAgcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/LmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXBvcnQ/LmlzVmFsaWQpIHtcbiAgICAgICAgICB2YWxpZFJlc3BvbnNpYmlsaXRpZXMgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBwYXlsb2FkID0ge1xuICAgICAgICBvcmlnaW5hbEZpbGVuYW1lOiB0aGlzLmZpbGVSZXNwb25zZVswXT8ub3JpZ2luYWxfZmlsZW5hbWUsXG4gICAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVSZXNwb25zZVswXT8uZmlsZW5hbWUsXG4gICAgICAgIGZpbGVQYXRoOiB0aGlzLmZpbGVSZXNwb25zZVswXT8uZmlsZXBhdGgsXG4gICAgICAgIHRvdGFsUmVzcG9uc2liaWxpdHlDb3VudDogcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/Lmxlbmd0aCxcbiAgICAgICAgdmFsaWRSZXNwb25zaWJpbGl0eUNvdW50OiB2YWxpZFJlc3BvbnNpYmlsaXRpZXMsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuZm9yRWFjaCgocmVwb3J0OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcG9ydC5pc1ZhbGlkKSB7XG4gICAgICAgICAgaWYgKHJlcG9ydD8ucmVzcG9uc2liaWxpdHlDYXRlZ29yeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVwb3J0LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmNEZXRhaWxzOiBhbnkgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgIHJlcG9ydD8ucmVzcG9uc2liaWxpdHlDZW50ZXIsXG4gICAgICAgICAgICAncmNfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCByZXZpZXdlckRldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgcmVwb3J0Py5yZXZpZXdlcixcbiAgICAgICAgICAgICdyZXZpZXdlcidcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGFzc2lnbm9yRGV0YWlsczogYW55ID0gcmVwb3J0Py5hc3NpZ25vclxuICAgICAgICAgICAgPyB0aGlzLnJldHVybklkcyhyZXBvcnQ/LmFzc2lnbm9yLCAnYXNzaWdub3InKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICBjb25zdCBjY0RldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydD8ub3ZlcnNlZXIsICdjYycpO1xuICAgICAgICAgIGNvbnN0IGNjRmFpbHVyZURldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgcmVwb3J0Lm5vdGlmeU9uRmFpbHVyZSxcbiAgICAgICAgICAgICdjY0ZhaWx1cmUnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgIGxldCBvbmdvaW5nUmVtaW5kZXJUeXBlOiBhbnkgPSB7XG4gICAgICAgICAgICBXZWVrbHk6IDEsXG4gICAgICAgICAgICBNb250aGx5OiAyLFxuICAgICAgICAgICAgUXVhcnRlcmx5OiAzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgb25nb2luZ1ZhbHVlcyA9IHtcbiAgICAgICAgICAgIHNldFJlbWluZGVyOiByZXBvcnQ/LnNldFJlbWluZGVyLFxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IG9uZ29pbmdSZW1pbmRlclR5cGVbcmVwb3J0Py5mcmVxdWVuY3lSZW1pbmRlcl0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBmcmVxdWVuY3lWYWx1ZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChcbiAgICAgICAgICAgIHJlcG9ydD8uZnJlcXVlbmN5LFxuICAgICAgICAgICAgcmVwb3J0Py5kYXksXG4gICAgICAgICAgICByZXBvcnQ/Lm1vbnRoLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICByZXBvcnQ/LmR1ZURhdGUsXG4gICAgICAgICAgICBvbmdvaW5nVmFsdWVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkYXRlQW5kTW9udGggPSByZXBvcnQ/Lm1vbnRoPy5zcGxpdChcIidcIik7XG4gICAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZUFuZE1vbnRoXG4gICAgICAgICAgICA/IG1vbWVudChcbiAgICAgICAgICAgICAgICByZXBvcnQ/LmRheSArXG4gICAgICAgICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgICAgICAgZGF0ZUFuZE1vbnRoWzBdICtcbiAgICAgICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgICAgICAyMCArXG4gICAgICAgICAgICAgICAgICBkYXRlQW5kTW9udGhbMV0gK1xuICAgICAgICAgICAgICAgICAgJyAwMDowMDowMCcsXG4gICAgICAgICAgICAgICAgJ0RELU1NTU0tWVlZWSBISDptbTpzcydcbiAgICAgICAgICAgICAgKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxuICAgICAgICAgICAgOiAnJztcblxuICAgICAgICAgIGxldCBjb21wbGV0ZURheXM7XG4gICAgICAgICAgbGV0IG5vdENvbXBsZXRlRGF5cztcbiAgICAgICAgICBjb25zdCBmcmVxdWVuY3lUeXBlID0gZnJlcXVlbmN5VmFsdWU/LnNwbGl0KCd+JylbMF07XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVwb3J0LnJlc3BvbnNpYmlsaXR5V2luZG93ICYmXG4gICAgICAgICAgICByZXBvcnQucmVzcG9uc2liaWxpdHlXaW5kb3cgIT09ICcnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb21wbGV0ZURheXMgPSByZXBvcnQ/LnJlc3BvbnNpYmlsaXR5V2luZG93O1xuICAgICAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5VHlwZUFycmF5Py5pbmNsdWRlcyhmcmVxdWVuY3lUeXBlKSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhPZkFycmF5ID0gZnJlcXVlbmN5VHlwZUFycmF5Py5pbmRleE9mKGZyZXF1ZW5jeVR5cGUpO1xuICAgICAgICAgICAgY29tcGxldGVEYXlzID0gZGVmYXVsdFdpbmRvd1tpbmRleE9mQXJyYXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVwb3J0Py5mYWlsZWRBZnRlciAmJiByZXBvcnQ/LmZhaWxlZEFmdGVyICE9PSAnJykge1xuICAgICAgICAgICAgbm90Q29tcGxldGVEYXlzID0gcmVwb3J0Py5mYWlsZWRBZnRlcjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeVR5cGVBcnJheS5pbmNsdWRlcyhmcmVxdWVuY3lUeXBlKSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhPZkFycmF5ID0gZnJlcXVlbmN5VHlwZUFycmF5Py5pbmRleE9mKGZyZXF1ZW5jeVR5cGUpO1xuICAgICAgICAgICAgbm90Q29tcGxldGVEYXlzID0gZGVmYXVsdEZhaWxlZERheVtpbmRleE9mQXJyYXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudGVtcGxhdGVJbmZvPy5tZW1iZXJJZCxcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5vcmdhbml6YXRpb25JZCxcbiAgICAgICAgICAgIG1lbWJlcl9pZDogYXNzaWdub3JEZXRhaWxzXG4gICAgICAgICAgICAgID8gYXNzaWdub3JEZXRhaWxzPy5tZW1iZXJJZFxuICAgICAgICAgICAgICA6IHRoaXMubWVtYmVySWQsXG4gICAgICAgICAgICBtZW1iZXJfbmFtZTogYXNzaWdub3JEZXRhaWxzXG4gICAgICAgICAgICAgID8gcmVwb3J0Py5hc3NpZ25vclxuICAgICAgICAgICAgICAgID8gcmVwb3J0Py5hc3NpZ25vci5zcGxpdCgnICgnKVswXVxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRPd25lclxuICAgICAgICAgICAgICA/IHRoaXMuZGVmYXVsdE93bmVyPy5zcGxpdCgnICgnKVswXVxuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgbWVtYmVyX2VtYWlsOiBhc3NpZ25vckRldGFpbHNcbiAgICAgICAgICAgICAgPyByZXBvcnQ/LmFzc2lnbm9yXG4gICAgICAgICAgICAgICAgPyByZXBvcnQ/LmFzc2lnbm9yPy5zcGxpdCgnICgnKVsxXT8ucmVwbGFjZSgnKScsICcnKVxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRPd25lclxuICAgICAgICAgICAgICA/IHRoaXMuZGVmYXVsdE93bmVyPy5zcGxpdCgnICgnKVsxXS5yZXBsYWNlKCcpJywgJycpXG4gICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICBjcmVhdGVkX2J5OiBhc3NpZ25vckRldGFpbHMgPyB0aGlzLm1lbWJlcklkIDogMCxcbiAgICAgICAgICAgIHJlcG9ydF9uYW1lOiByZXBvcnQ/LnJlc3BvbnNpYmlsaXR5TmFtZSA/PyAnJyxcbiAgICAgICAgICAgIGVudHJ1c3RlZF90bzogcmVwb3J0Py5hc3NpZ25lZT8uc3BsaXQoJyAoJylbMF0gPz8gJycsXG4gICAgICAgICAgICBlbnRydXN0ZWRfdG9faWQ6IHRoaXMuaXNHcm91cFNlbGVjdGVkKHJlcG9ydD8uYXNzaWduZWUpXG4gICAgICAgICAgICAgID8gdGhpcy5nZXRFbXBsb3llZUlkRnJvbUdyb3VwKHJlcG9ydD8uYXNzaWduZWUpXG4gICAgICAgICAgICAgIDogdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpPy50b1N0cmluZygpID8/XG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBlbWFpbF9hZGRyZXNzOiAhdGhpcy5pc0dyb3VwU2VsZWN0ZWQocmVwb3J0Py5hc3NpZ25lZSlcbiAgICAgICAgICAgICAgPyByZXBvcnQ/LmFzc2lnbmVlPy5zcGxpdCgnICgnKVsxXT8ucmVwbGFjZSgnKScsICcnKSA/PyAnJ1xuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgaXNHcm91cEFzc2lnblRvOiByZXBvcnQ/LmFzc2lnbmVlVHlwZT8uaW5jbHVkZXMoJ0FueScpID8gMSA6IDAsXG4gICAgICAgICAgICBjYXRlZ29yeV9uYW1lX3dpdGhfdHJlZTogJycsXG4gICAgICAgICAgICBjYXRlZ29yeV9pZDpcbiAgICAgICAgICAgICAgdGhpcy5nZXRQcm9ncmFtSWQoXG4gICAgICAgICAgICAgICAgcmVwb3J0Py5wcm9ncmFtLFxuICAgICAgICAgICAgICAgIHJlcG9ydD8ucHJvZ3JhbUNhdGVnb3J5XG4gICAgICAgICAgICAgICkuY2F0ZWdvcnlJZD8udG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgICAgIHByb2dyYW1fY2F0X2lkczogdGhpcy5nZXRQcm9ncmFtSWQoXG4gICAgICAgICAgICAgIHJlcG9ydD8ucHJvZ3JhbSxcbiAgICAgICAgICAgICAgcmVwb3J0Py5wcm9ncmFtQ2F0ZWdvcnlcbiAgICAgICAgICAgICk/LnByb2dyYW1JZFxuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvZ3JhbUlkKHJlcG9ydD8ucHJvZ3JhbSwgcmVwb3J0Py5wcm9ncmFtQ2F0ZWdvcnkpXG4gICAgICAgICAgICAgICAgICAgID8ucHJvZ3JhbUlkLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgIHJjX25hbWU6IHJjRGV0YWlscyA/IHJjRGV0YWlscz8ubmFtZSA6ICcnLFxuICAgICAgICAgICAgcmNfaWQ6IHJjRGV0YWlscyA/IHJjRGV0YWlscz8ucmNJZCA6IDAsXG4gICAgICAgICAgICBlbnRpdHlfdHJlZTpcbiAgICAgICAgICAgICAgcmNEZXRhaWxzICYmIHJjRGV0YWlscz8ucmNJZFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50X3JjX2lkczogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5wYXJlbnRJZHMgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICByY19pZDogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5yY0lkIDogMCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgdXNlckdyb3VwSWRzOiB7XG4gICAgICAgICAgICAgIGFzc2lnbmVlQWxsR3JvdXBJZHM6XG4gICAgICAgICAgICAgICAgIXJlcG9ydD8uYXNzaWduZWVUeXBlPy5pbmNsdWRlcygnQW55JykgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmlzR3JvdXBTZWxlY3RlZChyZXBvcnQ/LmFzc2lnbmVlKVxuICAgICAgICAgICAgICAgICAgPyBbdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXVxuICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgYXNzaWduZWVBbnlvbmVHcm91cElkczpcbiAgICAgICAgICAgICAgICByZXBvcnQ/LmFzc2lnbmVlVHlwZT8uaW5jbHVkZXMoJ0FueScpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc0dyb3VwU2VsZWN0ZWQocmVwb3J0Py5hc3NpZ25lZSlcbiAgICAgICAgICAgICAgICAgID8gW3RoaXMucmV0dXJuSWRzKHJlcG9ydD8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKV1cbiAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgIGNjRW1haWxHcm91cElkczogW10sXG4gICAgICAgICAgICAgIGZhaWx1cmVDQ0VtYWlsR3JvdXBJZHM6IFtdLFxuICAgICAgICAgICAgICByZXZpZXdlckdyb3VwSWRzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmcmVxdWVuY3lfaGFuZGxlcjogZnJlcXVlbmN5VmFsdWUsXG4gICAgICAgICAgICBjb21wbGlhbmNlX3R5cGU6IGZyZXF1ZW5jeVZhbHVlPy5zcGxpdCgnficpWzBdLFxuICAgICAgICAgICAgZnJlcXVlbmN5X2Rlc2NyaXB0aW9uOiByZXBvcnQ/LmZyZXF1ZW5jeSxcbiAgICAgICAgICAgIHN0YXJ0X2RhdGU6IHJlcG9ydD8uZGF5ID8gc3RhcnREYXRlIDogY3VycmVudERhdGUgKyAnIDAwOjAwOjAwJyxcbiAgICAgICAgICAgIHJpc2tfY2xhc3M6IHJlcG9ydD8ucmVwb3J0Q2xhc3MgPz8gJycsXG4gICAgICAgICAgICByaXNrX2NsYXNzSWQ6IHJlcG9ydD8ucmVwb3J0Q2xhc3NcbiAgICAgICAgICAgICAgPyB0aGlzLnJldHVybklkcyhyZXBvcnQ/LnJlcG9ydENsYXNzLCAncmlza19jbGFzcycpXG4gICAgICAgICAgICAgIDogdGhpcy5yaXNrQ2xhc3NFbmFibGVkXG4gICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICA6IDIsXG4gICAgICAgICAgICBkb2NfdXRjOiAwLFxuICAgICAgICAgICAgY29tbWVudDogcmVwb3J0Py5ub3RlcyA/PyAnJyxcbiAgICAgICAgICAgIGNjX21haWw6IGNjRGV0YWlscyA/IGNjRGV0YWlscz8uZW1haWwgOiAnJyxcbiAgICAgICAgICAgIGNjX21haWxfaWQ6IGNjRGV0YWlscyA/IGNjRGV0YWlscz8uZW1wbG95ZWVJZCA6ICcnLFxuICAgICAgICAgICAgY2NfZmFpbGVkX21haWw6IGNjRmFpbHVyZURldGFpbHMgPyBjY0ZhaWx1cmVEZXRhaWxzPy5lbWFpbCA6ICcnLFxuICAgICAgICAgICAgY2NfZmFpbHVyZV9pZDogY2NGYWlsdXJlRGV0YWlscyA/IGNjRmFpbHVyZURldGFpbHM/LmVtcGxveWVlSWQgOiAwLFxuICAgICAgICAgICAgc2VuZF9yZW1pbmRlcjogJycsXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzpcbiAgICAgICAgICAgICAgZnJlcXVlbmN5VHlwZSA9PT0gJzEnXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBjb21wbGV0ZURheXMgJiYgY29tcGxldGVEYXlzICE9ICcnXG4gICAgICAgICAgICAgICAgPyBjb21wbGV0ZURheXNcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICBmYWlsZWRfYWZ0ZXI6XG4gICAgICAgICAgICAgIG5vdENvbXBsZXRlRGF5cyAmJiBub3RDb21wbGV0ZURheXMgIT0gJycgPyBub3RDb21wbGV0ZURheXMgOiAwLFxuICAgICAgICAgICAgZXhjZWxfc2hlZXRfbmFtZTogJycsXG4gICAgICAgICAgICByZXBvcnRfdXBsb2FkX2ZsYWc6XG4gICAgICAgICAgICAgIHJlcG9ydD8uaXNGb3JtYXQgPT09ICdZZXMnICYmXG4gICAgICAgICAgICAgIHJlcG9ydD8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk/Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgIHJlcG9ydF9pZDogMCxcbiAgICAgICAgICAgIGlzX2Fzc2lnbmVkX2ZsYWc6IDAsXG4gICAgICAgICAgICBwcml2YXRlX2xpYnJhcnlfaWQ6IDAsXG4gICAgICAgICAgICBrZXljb21wbGlhbmNlOiByZXBvcnQ/LmtleVJlc3BvbnNpYmlsaXR5ID09PSAnWWVzJyA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAgIGtleV9jb21wbGlhbmNlOiByZXBvcnQ/LmtleVJlc3BvbnNpYmlsaXR5ID09PSAnWWVzJyA/IDEgOiAwLFxuICAgICAgICAgICAgcmV2aWV3ZXJJZDogcmV2aWV3ZXJEZXRhaWxzID8gcmV2aWV3ZXJEZXRhaWxzPy5lbXBsb3llZUlkIDogMCxcbiAgICAgICAgICAgIHJldmlld2VyX2FycjpcbiAgICAgICAgICAgICAgcmV2aWV3ZXJEZXRhaWxzICYmIHJldmlld2VyRGV0YWlscz8uZW1wbG95ZWVJZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXZpZXdlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyX2lkOiByZXZpZXdlckRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJldmlld2VyRGV0YWlscz8uZW1wbG95ZWVJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2aWV3ZXJfYWNjZXB0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTRVFVRU5USUFMJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgcmV2aWV3ZXJXaW5kb3c6XG4gICAgICAgICAgICAgIHJlcG9ydD8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiAmJlxuICAgICAgICAgICAgICByZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4gIT09ICcnXG4gICAgICAgICAgICAgICAgPyByZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5cbiAgICAgICAgICAgICAgICA6IDIsXG4gICAgICAgICAgICByZXZpZXdlckZhaWx1cmU6XG4gICAgICAgICAgICAgIHJlcG9ydD8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXIgJiZcbiAgICAgICAgICAgICAgcmVwb3J0Py5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlciAhPT0gJydcbiAgICAgICAgICAgICAgICA/IHJlcG9ydD8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXJcbiAgICAgICAgICAgICAgICA6IDIsXG4gICAgICAgICAgICByZXZpZXdlcl9lbWFpbDogcmV2aWV3ZXJEZXRhaWxzID8gcmV2aWV3ZXJEZXRhaWxzPy5lbWFpbCA6ICcnLFxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydD8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHlcbiAgICAgICAgICAgICAgPyByZXBvcnQuZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHlcbiAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIGRvY3VtZW50YXJ5RXZpZGVuY2U6IHJlcG9ydD8uZXZpZGVuY2VOb3RlcyA/PyAnJyxcbiAgICAgICAgICAgIGlzZG9jdW1lbnRhcnlFdmlkZW5jZTpcbiAgICAgICAgICAgICAgcmVwb3J0LmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9PT0gJ1llcycgPyAxIDogMCxcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0Lm9iamVjdGl2ZSA/PyAnJyxcbiAgICAgICAgICAgIGV4Y2VsX3NoZWV0X2luZm86IHRoaXMuZmlsZVJlc3BvbnNlLFxuICAgICAgICAgICAgc2hvd0xpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgY3VzdG9tX3RhZ3M6ICdbXScsXG4gICAgICAgICAgICBxdWVzdGlvbm5haXJlX3R5cGU6ICcnLFxuICAgICAgICAgICAgb25fY29tcGxldGlvbl9vZl90eXBlOlxuICAgICAgICAgICAgICByZXBvcnQ/LmZyZXF1ZW5jeSA9PT0gJ09uIENvbXBsZXRpb24gb2YnIHx8XG4gICAgICAgICAgICAgIHJlcG9ydD8uZnJlcXVlbmN5Py50b0xvd2VyQ2FzZSgpID09PSAnb25nb2luZydcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICBvbl9jb21wbGV0aW9uX29mOiB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgICAgcmVwb3J0Py5wYXJlbnRSZXNwb25zaWJpbGl0eSxcbiAgICAgICAgICAgICAgJ3BhcmVudFJlc3BvbnNpYmlsaXR5J1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgICAgICAgICByZXBvcnQ/LnBhcmVudFJlc3BvbnNpYmlsaXR5LFxuICAgICAgICAgICAgICAgICAgICAncGFyZW50UmVzcG9uc2liaWxpdHknXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHBheWxvYWQucHVzaChvYmopO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuYWRkQnVsa1Jlc3BvbnNpYmlsaXR5KHBheWxvYWQpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xuICAgICAgICB0aGlzLnN1Ym1pdFdvcmtmbG93KCk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxuICAgICAgICAgICdhbGVydCdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc3VibWl0V29ya2Zsb3coKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHsgdHlwZTogJ3N1Ym1pdCcgfTtcbiAgICBjb25zdCB0YXJnZXRPcmlnaW4gPSB0aGlzLmdldE9yaWdpbigpO1xuICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JpZ2luKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gIH1cblxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ3JjX2lkJzpcbiAgICAgICAgbGV0IHJjT2JqID0geyBuYW1lOiAnJywgcmNJZDogMCwgcGFyZW50SWRzOiBbXSB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgocmNfZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJjX2VsZW1lbnQubmFtZSA9PSBpdGVtKSB7XG4gICAgICAgICAgICBsZXQgbmFtZTtcbiAgICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUuaW5jbHVkZXMoJ1tXSVRISU5dJykpIHtcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZS5zcGxpdCgnIFtXSVRISU5dICcpWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJjT2JqID0ge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICByY0lkOiByY19lbGVtZW50LnJjX2lkLFxuICAgICAgICAgICAgICBwYXJlbnRJZHM6IHJjX2VsZW1lbnQucGFyZW50SWRzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmNPYmo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmV2aWV3ZXInOlxuICAgICAgICBsZXQgcmV2aWV3ZXJPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChyZXZpZXdlckVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXZpZXdlckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcbiAgICAgICAgICAgIHJldmlld2VyT2JqID0ge1xuICAgICAgICAgICAgICBuYW1lOiByZXZpZXdlckVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogcmV2aWV3ZXJFbGVtZW50Lm15X21lbWJlcl9pZCxcbiAgICAgICAgICAgICAgZW1haWw6IHJldmlld2VyRWxlbWVudC5lbWFpbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJldmlld2VyT2JqO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzaWdub3InOlxuICAgICAgICBsZXQgYXNzaWdub3JPYmogPSB7IG5hbWU6ICcnLCBtZW1iZXJJZDogMCwgZW1haWw6ICcnIH07XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbm9yc0xpc3QuZm9yRWFjaCgoYXNzaWdub3JFbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoYXNzaWdub3JFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XG4gICAgICAgICAgICBhc3NpZ25vck9iaiA9IHtcbiAgICAgICAgICAgICAgbmFtZTogYXNzaWdub3JFbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIGVtYWlsOiBhc3NpZ25vckVsZW1lbnQuZW1haWwsXG4gICAgICAgICAgICAgIG1lbWJlcklkOiBhc3NpZ25vckVsZW1lbnQubWVtYmVyX2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXNzaWdub3JPYmo7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIGxldCBjY09iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKGNjRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNjRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xuICAgICAgICAgICAgY2NPYmogPSB7XG4gICAgICAgICAgICAgIG5hbWU6IGNjRWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiBjY0VsZW1lbnQuZW1wbG95ZWVfaWQsXG4gICAgICAgICAgICAgIGVtYWlsOiBjY0VsZW1lbnQuZW1haWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjY09iajtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0ZhaWx1cmUnOlxuICAgICAgICBsZXQgY2NmT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgoY2NmRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNjZkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcbiAgICAgICAgICAgIGNjZk9iaiA9IHtcbiAgICAgICAgICAgICAgbmFtZTogY2NmRWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiBjY2ZFbGVtZW50LmVtcGxveWVlX2lkLFxuICAgICAgICAgICAgICBlbWFpbDogY2NmRWxlbWVudC5lbWFpbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNjZk9iajtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2VudHJ1c3RlZF90byc6XG4gICAgICAgIGxldCBlbXBJZCA9IDA7XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XG4gICAgICAgICAgICBlbXBJZCA9IGVuRWxlbWVudC5lbXBsb3llZV9pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZW1wSWQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdwYXJlbnRSZXNwb25zaWJpbGl0eSc6XG4gICAgICAgIGxldCBpZCA9IDA7XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBhcmVudFJlc3BvbnNpYmlsaXR5LmZvckVhY2goXG4gICAgICAgICAgKHJlc3BvbnNpYmlsaXR5OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zaWJpbGl0eT8ubmFtZSA9PT0gaXRlbSkge1xuICAgICAgICAgICAgICBpZCA9IHJlc3BvbnNpYmlsaXR5LmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmlza19jbGFzcyc6XG4gICAgICAgIGlmIChpdGVtID09ICdMb3cnKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTG93LU1lZGl1bScpIHtcbiAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdNZWRpdW0tSGlnaCcpIHtcbiAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdIaWdoJykge1xuICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xuICAgICAgaGVhZGVyOiBbXSxcbiAgICAgIHJlcG9ydHM6IFtdLFxuICAgIH07XG4gICAgdGhpcy5idWxrVXBsb2FkID0ge1xuICAgICAgZnJlcXVlbmN5OiB7XG4gICAgICAgIGhlYWRlcjogW10sXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxuICAgICAgICByZXBvcnRzOiBbXSxcbiAgICAgIH0sXG4gICAgICBvbmdvaW5nOiB7XG4gICAgICAgIGhlYWRlcjogW10sXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxuICAgICAgICByZXBvcnRzOiBbXSxcbiAgICAgIH0sXG4gICAgICBvbkNvbXBsZXRpb246IHtcbiAgICAgICAgaGVhZGVyOiBbXSxcbiAgICAgICAgc3ViSGVhZGluZzogW10sXG4gICAgICAgIHJlcG9ydHM6IFtdLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XG4gICAgICBjYXRlZ29yeUxpc3Q6IFtdLFxuICAgICAgcmNMaXN0OiBbXSxcbiAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxuICAgICAgYXNzaWduZWVzTGlzdDogW10sXG4gICAgICByZXZpZXdlckxpc3Q6IFtdLFxuICAgICAgbWVtYmVySWQ6ICcnLFxuICAgIH07XG5cbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xuICAgIHRoaXMuZmlsZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eS5lbWl0KCk7XG4gIH1cbiAgYWN0aW9uKGV2ZW50OiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlICdhZGRNb3JlJzpcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICB0aGlzLnZpZXdSZXNwb25zaWJpbGl0aWVzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlU21pbGV5KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yZXNwb25zaWJpbGl0eURhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xuICB9XG5cbiAgdmlld1Jlc3BvbnNpYmlsaXRpZXMoKTogdm9pZCB7XG4gICAgbGV0IHVybDogc3RyaW5nO1xuICAgIGxldCB1cmxTdWJzdHJpbmcgPSAnJztcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZykge1xuICAgICAgaWYgKHRoaXMuZmVhdHVyZWZsYWcpIHtcbiAgICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXR5PycgKyB0aGlzLnVybDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFN1YnN0cmluZyA9XG4gICAgICAgICAgJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXRpZXMvcmVzcG9uc2liaWxpdGllcy1xdWV1ZSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZlYXR1cmVmbGFnKSB7XG4gICAgICAgIHRoaXMucXVlcnlQYXJhbSA9IEpTT04/LnN0cmluZ2lmeSh0aGlzLnJlY2VudFJlc3BvbnNpYmlsaXR5VXJsKTtcbiAgICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXR5P3E9JyArIHRoaXMucXVlcnlQYXJhbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvY29tcGxpYW5jZS8jLycgKyB1cmxTdWJzdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvY29tcGxpYW5jZS8jLycgKyB1cmxTdWJzdHJpbmc7XG4gICAgfVxuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodXJsLCB0cnVlKTtcbiAgfVxuXG4gIC8vIFVwbG9hZCBGaWxlIHRvIHRoZSBzZXJ2ZXJcbiAgZmlsZVVwbG9hZCgpIHtcbiAgICB0aGlzLmZpbGVSZXNwb25zZSA9IFtdO1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGZpbGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbMF1bMF07XG4gICAgZm9ybURhdGEuYXBwZW5kKCdzb3VyY2VmaWxlJywgZmlsZSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZXN0aW5hdGlvbicsICdidWxrdXBsb2FkL2VudHJ1c3QvJyArIHRoaXMudXNlckluZm8uZW1haWwpO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmZpbGVVcGxvYWQoZm9ybURhdGEpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzPy5maWxlbmFtZSkge1xuICAgICAgICAgIHRoaXMuZmlsZVJlc3BvbnNlLnB1c2gocmVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgJ2FsZXJ0J1xuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRPcmdhbml6YXRpb25EZXRhaWxzKHRlbXBMaXN0OiBhbnkpIHtcbiAgICBpZiAodGVtcExpc3RbMF0gIT09IHVuZGVmaW5lZCAmJiB0ZW1wTGlzdFswXVsxOF0pIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkID0gdGVtcExpc3RbMF1bMThdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcbiAgICAgICAgJyBSRVRSWSc7XG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGVtcExpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiByZWd1bGF0aW9ucyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXG4gICAgICBpZiAoZWxlbWVudFsyNl0gJiYgdHlwZW9mIGVsZW1lbnRbMjZdID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCByZWd1bGF0aW9ucyA9IHtcbiAgICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFsyMl0sXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50WzI2XSxcbiAgICAgICAgICBhc3NpZ25lZTogSlNPTi5wYXJzZShlbGVtZW50WzMwXSksXG4gICAgICAgICAgcmV2aWV3ZXI6IEpTT04ucGFyc2UoZWxlbWVudFszMV0pLFxuICAgICAgICAgIG92ZXJzZWVyOiBKU09OLnBhcnNlKGVsZW1lbnRbMzJdKT8uY29uY2F0KEpTT04ucGFyc2UoZWxlbWVudFszM10pKSxcbiAgICAgICAgICBwcm9ncmFtVHlwZTogMSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gocmVndWxhdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiBzdGFuZGFyZHMgUHJvZ3JhbXMgaW50byB0aGUgY2F0ZWdvcnlMaXN0IGFycmF5LiAqL1xuICAgICAgaWYgKGVsZW1lbnRbMjddICYmIHR5cGVvZiBlbGVtZW50WzI3XSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3Qgc3RhbmRhcmRzID0ge1xuICAgICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50WzIzXSxcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbMjddLFxuICAgICAgICAgIGFzc2lnbmVlOiBKU09OLnBhcnNlKGVsZW1lbnRbMzRdKSxcbiAgICAgICAgICByZXZpZXdlcjogSlNPTi5wYXJzZShlbGVtZW50WzM1XSksXG4gICAgICAgICAgb3ZlcnNlZXI6IEpTT04ucGFyc2UoZWxlbWVudFszNl0pPy5jb25jYXQoSlNPTi5wYXJzZShlbGVtZW50WzM3XSkpLFxuICAgICAgICAgIHByb2dyYW1UeXBlOiAyLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChzdGFuZGFyZHMpO1xuICAgICAgfVxuXG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiBpbnRlcm5hbCBDb250cm9scyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXG4gICAgICBpZiAoZWxlbWVudFsyOF0gJiYgdHlwZW9mIGVsZW1lbnRbMjhdID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBpbnRlcm5hbENvbnRyb2xzID0ge1xuICAgICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50WzI0XSxcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbMjhdLFxuICAgICAgICAgIGFzc2lnbmVlOiBKU09OLnBhcnNlKGVsZW1lbnRbMzhdKSxcbiAgICAgICAgICByZXZpZXdlcjogSlNPTi5wYXJzZShlbGVtZW50WzM5XSksXG4gICAgICAgICAgb3ZlcnNlZXI6IEpTT04ucGFyc2UoZWxlbWVudFs0MF0pPy5jb25jYXQoSlNPTi5wYXJzZShlbGVtZW50WzQxXSkpLFxuICAgICAgICAgIHByb2dyYW1UeXBlOiAzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChpbnRlcm5hbENvbnRyb2xzKTtcbiAgICAgIH1cblxuICAgICAgLyogUHVzaGluZyB0aGUgdmFsdWUgb2Ygb3RoZXJzIFByb2dyYW1zIGludG8gdGhlIGNhdGVnb3J5TGlzdCBhcnJheS4gKi9cbiAgICAgIGlmIChlbGVtZW50WzI5XSAmJiB0eXBlb2YgZWxlbWVudFsyOV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IG90aGVycyA9IHtcbiAgICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFsyNV0sXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50WzI5XSxcbiAgICAgICAgICBhc3NpZ25lZTogSlNPTi5wYXJzZShlbGVtZW50WzQyXSksXG4gICAgICAgICAgcmV2aWV3ZXI6IEpTT04ucGFyc2UoZWxlbWVudFs0M10pLFxuICAgICAgICAgIG92ZXJzZWVyOiBKU09OLnBhcnNlKGVsZW1lbnRbNDRdKT8uY29uY2F0KEpTT04ucGFyc2UoZWxlbWVudFs0NV0pKSxcbiAgICAgICAgICBwcm9ncmFtVHlwZTogMCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gob3RoZXJzKTtcbiAgICAgIH1cblxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbOV0gaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eS4gSWYgaXQgaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgaXQgaXNcbiAgICAgIHB1c2hpbmcgdGhlIGVsZW1lbnRbOV0gKFJDKSB0byB0aGUgYXJyYXkgKHJjTGlzdCkuICovXG4gICAgICBpZiAoZWxlbWVudFs5XSAmJiBlbGVtZW50WzldICE9ICcgJykge1xuICAgICAgICBjb25zdCByYyA9IHtcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzldLFxuICAgICAgICAgIHJjX2lkOiBlbGVtZW50WzEwXSxcbiAgICAgICAgICBwYXJlbnRJZHM6IEpTT04ucGFyc2UoZWxlbWVudFsxMV0pLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QucHVzaChyYyk7XG4gICAgICB9XG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFsyXSBpcyBub3QgZW1wdHkgYW5kIG5vdCBlcXVhbCB0byBzcGFjZS4gSWYgaXQgaXMgbm90IGVtcHR5IGFuZCBub3RcbiAgICAgIGVxdWFsIHRvIHNwYWNlLCB0aGVuIGl0IGlzIHB1c2hpbmcgdGhlIGFzc2lnbmVlIG9iamVjdCB0byB0aGUgYXNzaWduZWVzTGlzdCBhcnJheS4gKi9cbiAgICAgIGlmIChlbGVtZW50WzE5XSAmJiBlbGVtZW50WzE5XSAhPSAnICcpIHtcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB7XG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50WzE5XSxcbiAgICAgICAgICAvLyBuYW1lOiBlbGVtZW50WzExXS5zcGxpdCgnICgnKVswXSxcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzE5XSxcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFsxOV0sXG4gICAgICAgICAgZW1wbG95ZWVfaWQ6IGVsZW1lbnRbMjBdLFxuICAgICAgICAgIG15X21lbWJlcl9pZDogSlNPTi5wYXJzZShlbGVtZW50WzIxXSksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QucHVzaChhc3NpZ25lZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50WzJdICYmIGVsZW1lbnRbMl0gIT0gJyAnKSB7XG4gICAgICAgIGNvbnN0IHJldmlld2VyID0ge1xuICAgICAgICAgIG5hbWVBbmRFbWFpbDogZWxlbWVudFsyXSxcbiAgICAgICAgICAvLyBuYW1lOiBlbGVtZW50WzExXS5zcGxpdCgnICgnKVswXSxcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzBdLFxuICAgICAgICAgIGVtYWlsOiBlbGVtZW50WzFdLFxuICAgICAgICAgIGVtcGxveWVlX2lkOiBlbGVtZW50WzNdLFxuICAgICAgICAgIG15X21lbWJlcl9pZDogZWxlbWVudFs0XSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmV2aWV3ZXJMaXN0LnB1c2gocmV2aWV3ZXIpO1xuICAgICAgfVxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbMl0gaXMgbm90IGVtcHR5IGFuZCBub3QgZXF1YWwgdG8gc3BhY2UuIElmIGl0IGlzIG5vdCBlbXB0eSBhbmQgbm90XG4gICAgICBlcXVhbCB0byBzcGFjZSwgaXQgd2lsbCBjcmVhdGUgYW4gb2JqZWN0IGFuZCBwdXNoIGl0IHRvIHRoZSBhc3NpZ25vcnNMaXN0IGFycmF5LiAqL1xuICAgICAgaWYgKGVsZW1lbnRbMl0gJiYgZWxlbWVudFsyXSAhPSAnICcpIHtcbiAgICAgICAgY29uc3QgYXNzaWdub3IgPSB7XG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50WzJdLFxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbMF0sXG4gICAgICAgICAgZW1haWw6IGVsZW1lbnRbMV0sXG4gICAgICAgICAgLy8gbmFtZTogZWxlbWVudFsxNF0uc3BsaXQoJyAoJylbMF0sXG4gICAgICAgICAgLy8gZW1haWw6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJyksXG4gICAgICAgICAgbWVtYmVyX2lkOiBlbGVtZW50WzRdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25vcnNMaXN0LnB1c2goYXNzaWdub3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgMTd0aCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB0cnVlLiBJZiBpdCBpcywgaXQgaXMgY3JlYXRpbmcgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAgICAxNnRoIGVsZW1lbnQgYXMgdGhlIG5hbWUgYW5kIHRoZSAxN3RoIGVsZW1lbnQgYXMgdGhlIGlkLiAqL1xuICAgICAgaWYgKGVsZW1lbnRbMTddKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFJlc3BvbnNpYmlsaXR5ID0ge1xuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbMTZdLFxuICAgICAgICAgIGlkOiBKU09OLnBhcnNlKGVsZW1lbnRbMTddKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucGFyZW50UmVzcG9uc2liaWxpdHkucHVzaChwYXJlbnRSZXNwb25zaWJpbGl0eSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcy4gYW5kIHB1c2ggdGhlIGNoaWxkIGNhdGVnb3JpZXMgdG8gdGhlaXIgcGFyZW50IHByb2dyYW0gKi9cbiAgICBpZiAodGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0Py5sZW5ndGgpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdD8uZm9yRWFjaCgoY2F0ZWdvcnk6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBpbmRleCA9IHRlbXBMaXN0WzBdPy5pbmRleE9mKGNhdGVnb3J5Py5wcm9ncmFtSWQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgbGV0IGNoaWxkQ2F0ZWdvcnkgPSBbXTtcbiAgICAgICAgICAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcy4gKi9cbiAgICAgICAgICBmb3IgKGxldCBqID0gMTsgdHJ1ZTsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGVtcExpc3Rbal0gJiYgdGVtcExpc3Rbal1baW5kZXhdKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRlbXBMaXN0W2pdW2luZGV4IC0gMV0sXG4gICAgICAgICAgICAgICAgaWQ6IHRlbXBMaXN0W2pdW2luZGV4XSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgY2hpbGRDYXRlZ29yeS5wdXNoKGNhdGVnb3J5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3RbaV1bJ2NoaWxkQ2F0ZWdvcnknXSA9IGNoaWxkQ2F0ZWdvcnk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBldmVudCwgd2hpY2ggaXMgYSBzdHJpbmcsIGFuZCB0aGVuIGl0IHNldHMgdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB0b1xuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGJ1bGtVcGxvYWQgdmFyaWFibGUsIHdoaWNoIGlzIGFuIG9iamVjdCwgYW5kIHRoZW4gaXQgYWNjZXNzZXMgdGhlIHByb3BlcnR5IG9mXG4gICAqIHRoYXQgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgZXZlbnQgc3RyaW5nLlxuICAgKlxuICAgKiBTbyBpZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdmcmVxdWVuY3knLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG9cbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxuICAgKlxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdvbmdvaW5nJywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZVxuICAgKiB2YWx1ZSBvZiB0aGUgb25nb2luZyBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXG4gICAqXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uQ29tcGxldGlvbicsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGVcbiAgICogdmFsdWUgb2YgdGhlIG9uQ29tcGxldGlvbiBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXG4gICAqXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgYW55dGhpbmcgZWxzZSwgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gc3RyaW5nIC0gdGhlIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBmcm9tIHRoZSBjaGlsZCBjb21wb25lbnQgKGZyZXF1ZW5jeSB8IG9uZ29pbmcgfCBvbkNvbXBsZXRpb24pXG4gICAqL1xuICBzZWxlY3RlZFRhYihldmVudDogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJykge1xuICAgIHRoaXMudGFiVHlwZSA9IGV2ZW50O1xuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb25nb2luZyc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29uQ29tcGxldGlvbic6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGluIGEgcmVwb3J0LCBhIHRhYiB0eXBlLCBhbmQgYSBib29sZWFuIHZhbHVlLiBJdCB0aGVuIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBidW5jaCBvZlxuICAgKiBwcm9wZXJ0aWVzLlxuICAgKiA8L2NvZGU+XG4gICAqIEBwYXJhbSB7YW55fSByZXBvcnQgLSBhbnkgPSZndDsgdGhlIGFycmF5IG9mIGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYlR5cGUgLSBzdHJpbmcgLSB0aGlzIGlzIHRoZSB0eXBlIG9mIHRhYiB0aGF0IGlzIHNlbGVjdGVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJvZ3JhbSAtIGJvb2xlYW5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKi9cbiAgc2V0UmVwb3J0RGV0YWlscyhyZXBvcnQ6IGFueSwgdGFiVHlwZTogc3RyaW5nLCBpc1Byb2dyYW06IGJvb2xlYW4pIHtcbiAgICBsZXQgb2JqOiBhbnk7XG4gICAgc3dpdGNoICh0YWJUeXBlKSB7XG4gICAgICBjYXNlICdmcmVxdWVuY3knOiB7XG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcbiAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzhdLFxuICAgICAgICAgICAgZGF5OiByZXBvcnRbOV0sXG4gICAgICAgICAgICBtb250aDogcmVwb3J0WzEwXSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFsxMl0sXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTRdLFxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTVdLFxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxNl0sXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE3XSxcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMThdLFxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTldLFxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE5XSxcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMjBdLFxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMF0sXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMjFdLFxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsyMl0sXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIzXSxcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzI0XSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XG4gICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XG4gICAgICAgICAgb2JqWydpc0RhdGVGb3JtYXRJbnZhbGlkJ10gPSB0aGlzLmlzRGF0ZUZvcm1hdEludmFsaWQ7XG4gICAgICAgICAgb2JqWydpc0RheUludmFsaWQnXSA9IHRoaXMuaXNEYXlJbnZhbGlkO1xuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcbiAgICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gJiZcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxuICAgICAgICAgICAgb2JqPy5mcmVxdWVuY3k/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcbiAgICAgICAgICAgIGRheTogcmVwb3J0WzZdLFxuICAgICAgICAgICAgbW9udGg6IHJlcG9ydFs3XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzldLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEyXSxcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE1XSxcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzE3XSxcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMTldLFxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcbiAgICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gJiZcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxuICAgICAgICAgICAgb2JqPy5mcmVxdWVuY3k/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXG4gICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ29uZ29pbmcnOiB7XG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcbiAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzhdLFxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs5XSxcbiAgICAgICAgICAgIGZyZXF1ZW5jeVJlbWluZGVyOiByZXBvcnRbMTBdLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMV0sXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzEyXSxcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEzXSxcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTRdLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNV0sXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE2XSxcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE3XSxcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxN10sXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzE4XSxcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMThdLFxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE5XSxcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjBdLFxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMV0sXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMl0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcbiAgICAgICAgICAgIHNldFJlbWluZGVyOiByZXBvcnRbNl0sXG4gICAgICAgICAgICBmcmVxdWVuY3lSZW1pbmRlcjogcmVwb3J0WzddLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFs4XSxcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbOV0sXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMF0sXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzExXSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTJdLFxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxM10sXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNF0sXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTRdLFxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxNV0sXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE1XSxcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxNl0sXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE3XSxcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMThdLFxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMTldLFxuICAgICAgICAgIH07XG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcbiAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXG4gICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzoge1xuICAgICAgICBpZiAoaXNQcm9ncmFtKSB7XG4gICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxuICAgICAgICAgICAgcHJvZ3JhbTogcmVwb3J0WzJdLFxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFs1XSxcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbOV0sXG4gICAgICAgICAgICBkdWVEYXRlOiByZXBvcnRbMTBdLFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzEyXSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTNdLFxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNF0sXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxNV0sXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE2XSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTddLFxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxOF0sXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxOV0sXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsyMF0sXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzIwXSxcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyMV0sXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzIyXSxcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjNdLFxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjRdLFxuICAgICAgICAgIH07XG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXG4gICAgICAgICAgICBvYmo/LnBhcmVudFJlc3BvbnNpYmlsaXR5Py5sZW5ndGggJiZcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNl0sXG4gICAgICAgICAgICBkdWVEYXRlOiByZXBvcnRbN10sXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzhdLFxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMV0sXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTRdLFxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTZdLFxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxOF0sXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjFdLFxuICAgICAgICAgIH07XG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcbiAgICAgICAgICAgIG9iaj8ucGFyZW50UmVzcG9uc2liaWxpdHk/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXG4gICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRSaXNrQ2xhc3Mocmlza0NsYXNzOiBhbnkpIHtcbiAgICBpZighcmlza0NsYXNzKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gUklTS19DTEFTU19MSVNULmluY2x1ZGVzKHJpc2tDbGFzcz8udG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIHN0cmluZywgcmVtb3ZlcyBhbGwgd2hpdGVzcGFjZSwgYW5kIHJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBAcGFyYW0ge2FueX0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSByZXNwb25zaWJpbGl0eVxuICAgKiBAcmV0dXJucyB0aGUgdHJpbW1lZE5hbWUgdmFyaWFibGUuXG4gICAqL1xuICBjaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKG5hbWU6IGFueSkge1xuICAgIGNvbnN0IHJlID0gLyZuYnNwO3w8YnI+L2c7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHZhciB0cmltbWVkTmFtZSA9IG5hbWUudG9TdHJpbmcoKS5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xuICAgICAgdHJpbW1lZE5hbWUgPSB0cmltbWVkTmFtZS5yZXBsYWNlKC8gICsvZywgJyAnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyaW1tZWROYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSByZXNwb25zaWJpbGl0eSBuYW1lIGlzIHZhbGlkLCBhbmQgdGhlIGFzc2lnbmVlIGFuZCBhc3NpZ25vciBhcmUgbm90IGVtcHR5LCB0aGVuIHJldHVyblxuICAgKiB0cnVlLiBPdGhlcndpc2UsIHJldHVybiBmYWxzZVxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgcGFzc2VkIGluXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIGlzVmFsaWREYXRhKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5ID0gdGhpcy5jaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKFxuICAgICAgZGF0YT8ucmVzcG9uc2liaWxpdHlOYW1lXG4gICAgKT8ubGVuZ3RoXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG4gICAgY29uc3QgYXNzaWduZWUgPSBkYXRhPy5hc3NpZ25lZT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGRhdGE/LmZyZXF1ZW5jeT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmIChhc3NpZ25lZSAmJiByZXNwb25zaWJpbGl0eSAmJiBmcmVxdWVuY3kpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBhc3NpZ25vciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbm9yIGlzIG5vdCBzZXRcbiAgICogYW5kIHRoZSBkZWZhdWx0T3duZXIgaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyB0aGVcbiAgICogc2FtZSBhcyB0aGUgcmV2aWV3ZXIsIG92ZXJzZWVyLCBvciBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyBub3Qgc2V0IGFuZCB0aGVcbiAgICogZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgcmV2aWV3ZXIgaXMgdGhlIHNhbWUgYXNcbiAgICogdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyBub3Qgc2V0LCB0aGVuIHJldHVybiBmYWxzZS4gT3RoZXJ3aXNlLFxuICAgKiByZXR1cm4gdHJ1ZVxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoaXMgaXMgdGhlIGRhdGEgdGhhdCBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgZm9ybS5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgaXNWYWxpZFVzZXJzKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIChkYXRhPy5hc3NpZ25vciAmJlxuICAgICAgICAoZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcbiAgICAgICAgICBkYXRhPy5hc3NpZ25vciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxuICAgICAgKCFkYXRhPy5hc3NpZ25vciAmJlxuICAgICAgICAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcbiAgICAgICAgICB0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxuICAgICAgKGRhdGE/LmFzc2lnbmVlICYmXG4gICAgICAgIChkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5yZXZpZXdlciB8fFxuICAgICAgICAgIGRhdGE/LmFzc2lnbmVlID09IGRhdGE/Lm92ZXJzZWVyIHx8XG4gICAgICAgICAgZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcbiAgICAgICghZGF0YT8uYXNzaWduZWUgJiZcbiAgICAgICAgKHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm92ZXJzZWVyIHx8XG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcbiAgICAgIChkYXRhPy5yZXZpZXdlciAmJlxuICAgICAgICAoZGF0YT8ucmV2aWV3ZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcbiAgICAgICAgICBkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxuICAgICAgIWRhdGE/LmFzc2lnbmVlXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBpbiBhIGRhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIDQgYm9vbGVhbiBwcm9wZXJ0aWVzLlxuICAgKiBUaGUgYm9vbGVhbiBwcm9wZXJ0aWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZXMgb2YgdGhlIGRhdGEgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcbiAgICogQHJldHVybnMge1xuICAgKiAgIGlzVmFsaWRBc3NpZ25lZTogdHJ1ZSxcbiAgICogICBpc1ZhbGlkQXNzaWdub3I6IHRydWUsXG4gICAqICAgaXNWYWxpZFJldmlld2VyOiB0cnVlLFxuICAgKiAgIGlzVmFsaWRPdmVyc2VlcjogdHJ1ZVxuICAgKiB9XG4gICAqL1xuICB2YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShkYXRhOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0Py5maWx0ZXIoXG4gICAgICAocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5wcm9ncmFtTmFtZSA9PT0gZGF0YT8ucHJvZ3JhbVxuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0ZWRBc3NpZ25lZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5maWx0ZXIoXG4gICAgICAoYXNzaWduZWU6IGFueSkgPT4gYXNzaWduZWU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWduZWVcbiAgICApO1xuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWdub3IgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWdub3JzTGlzdD8uZmlsdGVyKFxuICAgICAgKGFzc2lnbm9yOiBhbnkpID0+IGFzc2lnbm9yPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LmFzc2lnbm9yXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZFJldmlld2VyID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxuICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LnJldmlld2VyXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZE92ZXJzZWVyID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxuICAgICAgKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/Lm92ZXJzZWVyXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcbiAgICAgIChub3RpZnlPbkZhaWx1cmU6IGFueSkgPT5cbiAgICAgICAgbm90aWZ5T25GYWlsdXJlPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZVxuICAgICk7XG4gICAgbGV0IGlzVmFsaWRBc3NpZ25lZSA9IHRydWU7XG4gICAgbGV0IGlzVmFsaWRBc3NpZ25vciA9IHRydWU7XG4gICAgbGV0IGlzVmFsaWRSZXZpZXdlciA9IHRydWU7XG4gICAgbGV0IGlzVmFsaWRPdmVyc2VlciA9IHRydWU7XG4gICAgbGV0IGlzVmFsaWROb3RpZnlPbkZhaWx1cmUgPSB0cnVlO1xuICAgIGlmIChwcm9ncmFtICYmIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XG4gICAgICBpZiAocHJvZ3JhbVswXT8uYXNzaWduZWU/Lmxlbmd0aCAmJiBzZWxlY3RlZEFzc2lnbmVlPy5sZW5ndGgpIHtcbiAgICAgICAgaXNWYWxpZEFzc2lnbmVlID0gcHJvZ3JhbVswXT8uYXNzaWduZWU/LmluY2x1ZGVzKFxuICAgICAgICAgIHNlbGVjdGVkQXNzaWduZWVbMF0/Lm15X21lbWJlcl9pZFxuICAgICAgICApXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9ncmFtWzBdPy5yZXZpZXdlcj8ubGVuZ3RoICYmIHNlbGVjdGVkUmV2aWV3ZXI/Lmxlbmd0aCkge1xuICAgICAgICBpc1ZhbGlkUmV2aWV3ZXIgPSBwcm9ncmFtWzBdPy5yZXZpZXdlcj8uaW5jbHVkZXMoXG4gICAgICAgICAgc2VsZWN0ZWRSZXZpZXdlclswXT8ubXlfbWVtYmVyX2lkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5sZW5ndGggJiYgc2VsZWN0ZWRPdmVyc2Vlcj8ubGVuZ3RoKSB7XG4gICAgICAgIGlzVmFsaWRPdmVyc2VlciA9IHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5pbmNsdWRlcyhcbiAgICAgICAgICBzZWxlY3RlZE92ZXJzZWVyWzBdPy5teV9tZW1iZXJfaWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAocHJvZ3JhbVswXT8ub3ZlcnNlZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZT8ubGVuZ3RoKSB7XG4gICAgICAgIGlzVmFsaWROb3RpZnlPbkZhaWx1cmUgPSBwcm9ncmFtWzBdPy5vdmVyc2Vlcj8uaW5jbHVkZXMoXG4gICAgICAgICAgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmVbMF0/Lm15X21lbWJlcl9pZFxuICAgICAgICApXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWRBc3NpZ25lZTogaXNWYWxpZEFzc2lnbmVlLFxuICAgICAgaXNWYWxpZEFzc2lnbm9yOiBpc1ZhbGlkQXNzaWdub3IsXG4gICAgICBpc1ZhbGlkUmV2aWV3ZXI6IGlzVmFsaWRSZXZpZXdlcixcbiAgICAgIGlzVmFsaWRPdmVyc2VlcjogaXNWYWxpZE92ZXJzZWVyLFxuICAgICAgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZTogaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIHR3byBzdHJpbmdzIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhyZWUgcHJvcGVydGllc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvZ3JhbU5hbWUgLSBzdHJpbmcgLSZndDsgTmFtZSBvZiB0aGUgcHJvZ3JhbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoaWxlUHJvZ3JhbV0gLSBzdHJpbmcgPSZndDsgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgc3ViLXByb2dyYW1cbiAgICogQHJldHVybnMge1xuICAgKiAgIHByb2dyYW1JZDogMSxcbiAgICogICBjaGlsZFByb2dyYW1JZDogMixcbiAgICogICBjYXRlZ29yeUlkOiAnMSwyJ1xuICAgKiB9XG4gICAqL1xuICBnZXRQcm9ncmFtSWQocHJvZ3JhbU5hbWU6IHN0cmluZywgY2hpbGVQcm9ncmFtPzogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdD8uZmlsdGVyKFxuICAgICAgKHByb2dyYW06IGFueSkgPT4gcHJvZ3JhbT8ucHJvZ3JhbU5hbWUgPT09IHByb2dyYW1OYW1lXG4gICAgKTtcbiAgICBsZXQgc3ViUHJvZ3JhbTtcbiAgICBsZXQgc3ViUHJvZ3JhbUlkO1xuICAgIGxldCBjYXRlZ29yeUlkO1xuICAgIGlmIChjaGlsZVByb2dyYW0/Lmxlbmd0aCAmJiBwcm9ncmFtPy5sZW5ndGgpIHtcbiAgICAgIHN1YlByb2dyYW0gPSBwcm9ncmFtWzBdPy5jaGlsZENhdGVnb3J5Py5maWx0ZXIoXG4gICAgICAgIChzdWJQcm9ncmFtOiBhbnkpID0+IHN1YlByb2dyYW0/Lm5hbWUgPT09IGNoaWxlUHJvZ3JhbVxuICAgICAgKTtcbiAgICAgIHN1YlByb2dyYW1JZCA9IHN1YlByb2dyYW0/Lmxlbmd0aCA/IHN1YlByb2dyYW1bMF0/LmlkIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChzdWJQcm9ncmFtSWQgJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XG4gICAgICBjYXRlZ29yeUlkID1cbiAgICAgICAgcHJvZ3JhbVswXT8ucHJvZ3JhbUlkPy50b1N0cmluZygpICsgJywnICsgc3ViUHJvZ3JhbUlkPy50b1N0cmluZygpO1xuICAgIH0gZWxzZSBpZiAocHJvZ3JhbT8ubGVuZ3RoKSB7XG4gICAgICBjYXRlZ29yeUlkID0gcHJvZ3JhbVswXT8ucHJvZ3JhbUlkPy50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtPy5sZW5ndGggPyBwcm9ncmFtWzBdPy5wcm9ncmFtSWQgOiB1bmRlZmluZWQsXG4gICAgICBjaGlsZFByb2dyYW1JZDogc3ViUHJvZ3JhbUlkLFxuICAgICAgY2F0ZWdvcnlJZDogY2F0ZWdvcnlJZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nIGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwIHRoYXQgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcGRvd24uXG4gICAqIGl0IHdpbGwgcmV0dXJuIGVtcGxveWVlIGlkIGluIHRoaXMgZm9ybSAnMTIzNCwyMzQ1Jy5cbiAgICovXG4gIGdldEVtcGxveWVlSWRGcm9tR3JvdXAoaXRlbTogYW55KSB7XG4gICAgbGV0IGVtcElkOiBhbnkgPSBbXTtcbiAgICBsZXQgZW1wbG95ZWVfaWQ6IGFueSA9IFtdO1xuICAgIHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5mb3JFYWNoKChlbkVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGVuRWxlbWVudD8ubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcbiAgICAgICAgZW1wSWQgPSBlbkVsZW1lbnQ/Lm15X21lbWJlcl9pZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZW1wSWQ/Lmxlbmd0aCkge1xuICAgICAgZW1wSWQ/LmZvckVhY2goKGlkOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodXNlcj8ubXlfbWVtYmVyX2lkID09IGlkKSB7XG4gICAgICAgICAgICBlbXBsb3llZV9pZD8ucHVzaCh1c2VyPy5lbXBsb3llZV9pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZW1wbG95ZWVfaWQ/LnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGl0ZW0gaXMgYSBncm91cCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqIEBwYXJhbSB7YW55fSBpdGVtIC0gYW55IC0gdGhlIGl0ZW0gdGhhdCBpcyBiZWluZyBjaGVja2VkXG4gICAqL1xuICBpc0dyb3VwU2VsZWN0ZWQoaXRlbTogYW55KSB7XG4gICAgbGV0IGlzR3JvdXAgPSBmYWxzZTtcbiAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKGVuRWxlbWVudDogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtICYmXG4gICAgICAgIChpdGVtPy5pbmNsdWRlcygnVXNlcnMpJykgfHwgaXRlbT8uaW5jbHVkZXMoJ1VzZXIpJykpICYmXG4gICAgICAgIHR5cGVvZiBlbkVsZW1lbnQ/Lm15X21lbWJlcl9pZCA9PSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGlzR3JvdXAgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc0dyb3VwO1xuICB9XG59XG4iLCI8IS0tIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlza1wiIFthdHRyLmlkXT1cIidzY3JvbGxSZWZlcmVuY2UnXCIgPlxuICAgIDwhLSAtIG1haW4gY29udGFpbmVyIHN0YXJ0cyBoZXJlIC0gLT5cbiAgICA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2stYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2stY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9zcHJlYWRzaGVldC1tdWx0aXBsZS1jYXRlZ29yeS5zdmdcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aDQ+WW91IGNhbiBlbnRydXN0IG11bHRpcGxlIHJlc3BvbnNpYmlsaXRpZXMgaW4ganVzdCB0d28gZWFzeSBzdGVwczo8L2g0PlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsaT5Eb3dubG9hZCB0aGUgdGVtcGxhdGUgYW5kIGZpbGwgaW4gdGhlIGRldGFpbHMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+VXBsb2FkIHRoZSAueGxzeCBmaWxlIGFuZCB5b3XigJlyZSBnb29kIHRvIGdvITwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZG93bmxvYWRcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnTk9UX0RPV05MT0FESU5HJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFiOzwvaT4gRG93bmxvYWQgVGVtcGxhdGU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiICpuZ0lmPVwiZG93bmxvYWRTdGF0dXMgPT09ICdET1dOTE9BRElORydcIj5cbiAgICAgICAgICAgICAgICBEb3dubG9hZCBpbiBQcm9ncmVzc1xuICAgICAgICAgICAgICAgIDxhcHAtbGluZS1sb2FkZXIgW2xvYWRlckhlaWdodF09XCInMidcIj48L2FwcC1saW5lLWxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURFRCdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYzs8L2k+RG93bmxvYWQgQ29tcGxldGU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tYWdhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgSXMgdGhlIGZpbGUgbm90IGRvd25sb2FkZWQ/XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlJldHJ5IERvd25sb2FkPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNXcm9uZ0ZpbGUgfHwgaXNXcm9uZ0Zvcm1hdHx8IGlzRmlsZUVtcHR5XCJcbiAgICAgICAgICAgID57e2Vycm9yTWVzc2FnZX19PC9wPiAgXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+IC0tPlxuPGFwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXcgKm5nSWY9XCJzaG93RXhjZWxcIlxuICAgIFtyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRdPVwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCJcbiAgICBbYnVsa1VwbG9hZF09XCJidWxrVXBsb2FkXCJcbiAgICBbZmlsZU5hbWVdPVwiZmlsZU5hbWVcIlxuICAgIFtsb2FkZXJdPVwibG9hZGVyXCJcbiAgICBbZGVmYXVsdE93bmVyXT1cImRlZmF1bHRPd25lclwiXG4gICAgW3RhYlR5cGVdPVwidGFiVHlwZVwiXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXG4gICAgKHN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCk9XCJzdWJtaXRSZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQoKVwiXG4gICAgKHNlbGVjdGVkVGFiKT1cInNlbGVjdGVkVGFiKCRldmVudClcIlxuICAgIChjYW5jZWwpPVwicmVzZXQoKVwiXG4gICAgW3Jlc3BvbnNpYmlsaXR5VHlwZV09XCInbXVsdGlUYWInXCI+XG48L2FwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXc+XG48YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJsb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxuXG48aW5wdXQgdHlwZT1cImZpbGVcIiBbKG5nTW9kZWwpXT1cImZpbGVWYWx1ZVwiIGlkPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiBhY2NlcHQ9XCIueGxzeFwiIChjaGFuZ2UpPVwidXBsb2FkZWRGaWxlKCRldmVudClcIiBtdWx0aXBsZSAvPlxuPGFwcC1zbWlsZXktZGlhbG9nLWlubGluZSAqbmdJZj1cInNob3dTbWlsZXlcIiBbbWVzc2FnZV09XCJzbWlsZXlNZXNzYWdlXCIgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiIChhY3Rpb24pPVwiYWN0aW9uKCRldmVudClcIiAoY2xvc2VTbWlsZXkpPVwiY2xvc2VTbWlsZXkoJGV2ZW50KVwiPjwvYXBwLXNtaWxleS1kaWFsb2ctaW5saW5lPiJdfQ==