@sunbird-cb/cbp-ai 0.1.88 → 0.1.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.
@@ -436,57 +436,55 @@ export class RoleMappingGenerationComponent {
436
436
  }
437
437
  getMinistryData() {
438
438
  this.apiLoading = true;
439
- this.sharedService.getMinistryData(this.selectedMinistryType).subscribe((data) => {
440
- console.log('data--', data);
441
- this.ministryFullData = data;
442
- this.apiLoading = false;
443
- this.ministryData = [];
444
- if (this.selectedMinistryType === 'ministry') {
445
- data.forEach((item) => {
446
- if (item?.sbOrgType === 'ministry') {
447
- this.ministryData.push(item);
448
- }
449
- });
450
- }
451
- else if (this.selectedMinistryType === 'state') {
452
- data.forEach((item) => {
453
- if (item?.sbOrgType === 'state') {
454
- this.ministryData.push(item);
455
- }
456
- });
457
- }
458
- this.getUserProfileData();
439
+ const requestedType = this.selectedMinistryType;
440
+ return new Promise((resolve) => {
441
+ this.sharedService.getMinistryData(requestedType).subscribe((data) => {
442
+ console.log('data--', data);
443
+ this.apiLoading = false;
444
+ // Ignore stale responses from a type that was changed again before this one returned
445
+ if (requestedType !== this.selectedMinistryType) {
446
+ resolve();
447
+ return;
448
+ }
449
+ this.ministryFullData = data;
450
+ this.ministryData = [];
451
+ if (requestedType === 'ministry') {
452
+ data.forEach((item) => {
453
+ if (item?.sbOrgType === 'ministry') {
454
+ this.ministryData.push(item);
455
+ }
456
+ });
457
+ }
458
+ else if (requestedType === 'state') {
459
+ data.forEach((item) => {
460
+ if (item?.sbOrgType === 'state') {
461
+ this.ministryData.push(item);
462
+ }
463
+ });
464
+ }
465
+ this.getUserProfileData(requestedType, resolve);
466
+ });
459
467
  });
460
468
  }
461
469
  async onMinistryTypeChange(event) {
462
470
  console.log('event', event);
463
- if (this.login) {
464
- await this.getMinistryData();
465
- }
466
471
  this.sharedService.cbpPlanFinalObj['ministryType'] = event.value;
467
472
  this.sharedService.cbpPlanFinalObj['role_mapping_generation'] = [];
468
473
  this.selectedMinistryType = event.value;
469
- localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj));
470
474
  this.ministryData = [];
475
+ if (this.login) {
476
+ await this.getMinistryData();
477
+ }
478
+ localStorage.setItem('cbpPlanFinalObj', JSON.stringify(this.sharedService.cbpPlanFinalObj));
471
479
  if (event?.value === 'state') {
472
480
  this.roleMappingForm.get('ministry')?.setValue(null);
473
481
  this.roleMappingForm.get('sectors')?.setValue([]);
474
482
  this.roleMappingForm.get('departments')?.setValue([]);
475
- this.ministryFullData.forEach((item) => {
476
- if (item?.type === 'state') {
477
- this.ministryData.push(item);
478
- }
479
- });
480
483
  }
481
484
  else if (event?.value === 'ministry') {
482
485
  this.roleMappingForm.get('ministry')?.setValue(null);
483
486
  this.roleMappingForm.get('sectors')?.setValue([]);
484
487
  this.roleMappingForm.get('departments')?.setValue([]);
485
- this.ministryFullData.forEach((item) => {
486
- if (item?.type === 'central') {
487
- this.ministryData.push(item);
488
- }
489
- });
490
488
  }
491
489
  this.sharedService.cbpPlanFinalObj['ministry'] = '';
492
490
  this.sharedService.cbpPlanFinalObj['department_name'] = '';
@@ -1027,20 +1025,26 @@ export class RoleMappingGenerationComponent {
1027
1025
  input.value = '';
1028
1026
  }
1029
1027
  }
1030
- getUserProfileData() {
1028
+ getUserProfileData(requestedType, done) {
1031
1029
  this.sharedService.getUserProfile().subscribe((data) => {
1032
1030
  console.log('data--', data);
1033
1031
  localStorage.setItem('userProfile', JSON.stringify(data));
1034
1032
  this.loginUserOrgIds = data?.organization_ids;
1033
+ // Ignore stale responses from a type that was changed again before this one returned
1034
+ if (requestedType && requestedType !== this.selectedMinistryType) {
1035
+ done?.();
1036
+ return;
1037
+ }
1035
1038
  let filteredMinistryData = [];
1036
1039
  this.ministryFullData.map((item) => {
1037
- if (this.loginUserOrgIds.indexOf(item?.identifier) > -1) {
1040
+ if (this.loginUserOrgIds.indexOf(item?.identifier) > -1 && item?.sbOrgType === (requestedType || this.selectedMinistryType)) {
1038
1041
  filteredMinistryData.push(item);
1039
1042
  }
1040
1043
  });
1041
1044
  this.ministryData = filteredMinistryData;
1042
1045
  this.originalMinistryData = filteredMinistryData;
1043
1046
  this.filteredList = filteredMinistryData;
1047
+ done?.();
1044
1048
  });
1045
1049
  }
1046
1050
  onOpened(opened) {
@@ -1106,4 +1110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1106
1110
  }], loginSuccess: [{
1107
1111
  type: Output
1108
1112
  }] } });
1109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBdUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBaUIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVTNDLE1BQU0sT0FBTyw4QkFBOEI7SUFvRnpDLFlBQ1UsUUFBc0IsRUFDdkIsYUFBNEIsRUFDM0IsRUFBZSxFQUNmLFFBQXFCLEVBQ3RCLE1BQWlCLEVBQ2pCLGtCQUFzQyxFQUNyQyxNQUFjO1FBTmQsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXhGZixvQkFBZSxHQUFHLEtBQUssQ0FBQTtRQUNoQyxVQUFLLEdBQUcsc0JBQXNCLENBQUM7UUFFL0Isa0JBQWEsR0FBRyxFQUFFLENBQUE7UUFDbEIsZUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUVmLHFCQUFnQixHQUFhLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYTtZQUM1RSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDcEUseUJBQW9CLEdBQVcsVUFBVSxDQUFDO1FBQzFDLGlCQUFZLEdBQVEsRUFBRSxDQUFBO1FBQ3RCLHFCQUFnQixHQUFRLEVBQUUsQ0FBQTtRQUUxQixlQUFVLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLGVBQVUsR0FBRztZQUNYO2dCQUNFLEtBQUssRUFBRSw2QkFBNkI7YUFDckM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsbUJBQW1CO2FBQzNCO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLG1CQUFtQjthQUMzQjtZQUNEO2dCQUNFLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLGFBQWE7YUFDckI7WUFDRDtnQkFDRSxLQUFLLEVBQUUsUUFBUTthQUNoQjtTQUVGLENBQUE7UUFDRCxtQkFBYyxHQUFHLEVBQUUsQ0FBQTtRQUNuQixZQUFPLEdBQUcsS0FBSyxDQUFBO1FBQ2Ysa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsaUJBQVksR0FBRztZQUNiLGlCQUFpQjtZQUNqQixvQkFBb0I7WUFDcEIseUVBQXlFO1lBQ3pFLDBCQUEwQjtZQUMxQixtRUFBbUU7WUFDbkUsWUFBWTtTQUNiLENBQUM7UUFDRixnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFDbEMsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLFVBQUssR0FBRyxLQUFLLENBQUE7UUFDYixnQkFBVyxHQUFRLEVBQUUsQ0FBQTtRQUNyQix1QkFBa0IsR0FBRyxFQUFFLENBQUE7UUFFdkIsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUN0QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBRXRCLDJCQUFzQixHQUFXLEVBQUUsQ0FBQztRQUNwQyxxQkFBZ0IsR0FBRztZQUNqQixxQ0FBcUM7WUFDckMsbURBQW1EO1lBQ25ELDhEQUE4RDtZQUM5RCxnREFBZ0Q7WUFDaEQscUNBQXFDO1lBQ3JDLHNEQUFzRDtTQUN2RCxDQUFDO1FBQ1EsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUM1QyxnQ0FBMkIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO1FBQ3JELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUNoRCx3QkFBbUIsR0FBUSxFQUFFLENBQUE7UUFDN0Isb0JBQWUsR0FBRyxFQUFFLENBQUE7UUFDcEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQix3QkFBbUIsR0FBRyxLQUFLLENBQUE7UUFDM0IsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLHlCQUFvQixHQUFHLEVBQUUsQ0FBQTtRQUN6QixlQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLHFCQUFnQixHQUFRLElBQUksQ0FBQTtRQUM1QixjQUFTLEdBQUcsRUFBRSxDQUFBO1FBQ2QsMEJBQXFCLEdBQUcsSUFBSSxDQUFBO1FBQzVCLGtDQUE2QixHQUFHLElBQUksQ0FBQTtRQUNwQyx1Q0FBa0MsR0FBRyxLQUFLLENBQUE7UUFDMUMsMkNBQXNDLEdBQUcsS0FBSyxDQUFBO1FBQ3RDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBVXJDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxrQkFBa0IsQ0FBTSxFQUFFLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRTlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1FBQzlELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7WUFHM0YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7WUFDdkIseUJBQXlCO1NBQzFCO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO2FBQ3ZCO1lBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDbkMsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQy9DLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNyQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqQixpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsbUJBQW1CLEVBQUUsRUFBRTthQUN4QixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7b0JBQ3pCLFlBQVksRUFBRSxJQUFJO29CQUNsQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxXQUFXLEVBQUUsRUFBRTtvQkFDZixpQkFBaUIsRUFBRSxFQUFFO29CQUNyQixtQkFBbUIsRUFBRSxFQUFFO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO29CQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDL0U7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUM7b0JBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDaEMsa0JBQWtCO3dCQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFbEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFFaEU7Z0JBRUQsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO29CQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFBO29CQUNsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFBO2lCQUMzQztxQkFBTTtvQkFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFBO29CQUNqQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFBO2lCQUMxQztZQUVILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFPSCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBQ3RCLElBQUksT0FBTyxHQUFHO1lBQ1osZUFBZSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1lBQ2xDLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFBO1FBQ0QsSUFBSSxPQUFPLFFBQVEsRUFBRSxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxRQUFRLEVBQUUsV0FBVyxDQUFBO1NBQ2pEO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFFdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUMzQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUE7Z0JBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2dCQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLENBQUE7Z0JBQzNCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7Z0JBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUE7Z0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFDLEVBQUU7b0JBQzdCLElBQUcsSUFBSSxFQUFFLGFBQWEsS0FBSyx1QkFBdUIsRUFBRTt3QkFDbEQsUUFBUSxHQUFFLFFBQVEsR0FBQyxDQUFDLENBQUE7cUJBQ3JCO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUVGLElBQUcsUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDZixJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFBO2lCQUMvQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsa0NBQWtDLEdBQUcsS0FBSyxDQUFBO2lCQUNoRDtnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTthQUNoRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7Z0JBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7Z0JBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUE7YUFDM0M7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUN2RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFBO1lBQ2hFLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1lBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO2dCQUN6QyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQzFHLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRTt3QkFDZixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQTt3QkFDekIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEdBQUcsQ0FBQTtxQkFDbEM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFOzRCQUNuRSxRQUFRLEVBQUUsSUFBSTs0QkFDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzt5QkFDL0IsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFBO3dCQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUE7d0JBQ3RELFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7cUJBQzVGO2dCQUNILENBQUMsQ0FBQyxDQUFBO2FBQ0g7WUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDOUQsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDYixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztnQkFDNUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzNELElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFBO2dCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNoQyxrQkFBa0I7d0JBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUVsRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUVoRTtnQkFFRCxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUE7b0JBQ2xDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUE7aUJBQzNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUE7b0JBQ2pDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUE7aUJBQzFDO1lBRUgsQ0FBQyxDQUFDLENBQUM7WUFFSCxxREFBcUQ7WUFDckQsNkVBQTZFO1lBQzdFLGlDQUFpQztZQUNqQyxvREFBb0Q7WUFDcEQsc0JBQXNCO1lBQ3RCLG1CQUFtQjtZQUNuQix1QkFBdUI7WUFDdkIsNEJBQTRCO1lBQzVCLFFBQVE7WUFDUiw0QkFBNEI7WUFDNUIscUZBQXFGO1lBQ3JGLGFBQWE7WUFDYixrRUFBa0U7WUFDbEUsNkRBQTZEO1lBQzdELE1BQU07WUFDTix1RUFBdUU7WUFDdkUsTUFBTTtZQUVOLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQTthQUNqRTtZQUVELDhCQUE4QjtTQUMvQjthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxLQUFLLE9BQU8sRUFBRTtZQUM1RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFBO1lBQ2pFLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1lBQzVCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbkcsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUE7Z0JBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUE7Z0JBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7WUFDNUUsQ0FBQyxDQUFDLENBQUE7WUFDRixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUE7YUFDakU7WUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDOUQsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDYixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztnQkFDNUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDO2FBQ3pELENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDaEMsa0JBQWtCO3dCQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFbEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFFaEU7Z0JBRUQsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO29CQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFBO29CQUNsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFBO2lCQUMzQztxQkFBTTtvQkFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFBO29CQUNqQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFBO2lCQUMxQztZQUVILENBQUMsQ0FBQyxDQUFDO1lBRUgscURBQXFEO1lBQ3JELDZFQUE2RTtZQUM3RSxpQ0FBaUM7WUFDakMsb0RBQW9EO1lBQ3BELHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsdUJBQXVCO1lBQ3ZCLDRCQUE0QjtZQUM1QixRQUFRO1lBQ1IsNEJBQTRCO1lBQzVCLHFGQUFxRjtZQUNyRixhQUFhO1lBQ2Isa0VBQWtFO1lBQ2xFLDZEQUE2RDtZQUM3RCxNQUFNO1lBQ04sdUVBQXVFO1lBQ3ZFLE1BQU07WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUNuRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUE7YUFDakU7U0FDRjtRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFBO0lBRW5DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFhLEVBQUUsT0FBWTtRQUMxQyxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7UUFFakMsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUFFLFNBQVM7WUFFNUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVsQyxxRkFBcUY7WUFDckYsTUFBTSxPQUFPLEdBQ1gsT0FBTyxhQUFhLEtBQUssUUFBUTtnQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxhQUFhLEtBQUssWUFBWSxDQUFDO1lBRXJDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QjtTQUNGO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELHFCQUFxQjtRQUVuQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUVyQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRSxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzlFLFFBQVEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEYsTUFBTSxJQUFJLEdBQVMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMvRixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN6QixJQUFJLElBQUksRUFBRTtZQUNSLFFBQVEsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxXQUFXLENBQUE7UUFDbEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sQ0FBQTtRQUMvRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3JELElBQUksQ0FBQyxVQUFVLEtBQUssaUJBQWlCLENBQUMsUUFBUSxDQUMvQyxDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFBO1FBQ2pFLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDM0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkMsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBR0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhGLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQTtZQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzlDLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xJLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO29CQUNsRSxLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQztvQkFDakMsVUFBVSxFQUFFLHFCQUFxQjtvQkFDakMsU0FBUyxFQUFFLE9BQU87b0JBQ2xCLFNBQVMsRUFBRSxNQUFNO29CQUNqQixZQUFZLEVBQUUsSUFBSSxDQUFDLCtDQUErQztpQkFDbkUsQ0FBQyxDQUFDO2dCQUVILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3pDLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTt3QkFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTt3QkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDOzRCQUM5SSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQ0FDWixtQkFBbUI7Z0NBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dDQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtnQ0FDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtnQ0FDMUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUE7NEJBQ2pDLENBQUM7NEJBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0NBQ2YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtnQ0FDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO29DQUM1QyxRQUFRLEVBQUUsSUFBSTtvQ0FDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQ0FDL0IsQ0FBQyxDQUFDO2dDQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dDQUNwQixrQ0FBa0M7NEJBQ3BDLENBQUM7eUJBQ0YsQ0FBQyxDQUFDO3FCQUNKO3lCQUFNO3dCQUNMLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO3FCQUNoQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO2FBQ2hDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUNyQztJQUVILENBQUM7SUFHRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDcEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtZQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtZQUN0QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxVQUFVLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxJQUFJLEVBQUUsU0FBUyxLQUFLLFVBQVUsRUFBRTt3QkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7cUJBQzdCO2dCQUNILENBQUMsQ0FBQyxDQUFBO2FBQ0g7aUJBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssT0FBTyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3BCLElBQUksSUFBSSxFQUFFLFNBQVMsS0FBSyxPQUFPLEVBQUU7d0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUM3QjtnQkFDSCxDQUFDLENBQUMsQ0FBQTthQUNIO1lBRUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUE7UUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQUs7UUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7U0FDN0I7UUFJRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1FBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1FBRXZDLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDM0YsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUE7UUFDdEIsSUFBSSxLQUFLLEVBQUUsS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxPQUFPLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUM3QjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7YUFBTSxJQUFJLEtBQUssRUFBRSxLQUFLLEtBQUssVUFBVSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLFNBQVMsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBQzdCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDdEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQTtRQUMzRiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRTtZQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QyxxQ0FBcUM7Z0JBQ3JDLDhDQUE4QztZQUNoRCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDVDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDeEIsK0NBQStDO1FBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFrQixDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFBO1FBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUFDLEVBQUUsQ0FBQTtRQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQTtRQUNqRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNsRSxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzNGLElBQUksa0JBQWtCLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLE9BQU8sRUFBRTtZQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3pFLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFBO2dCQUN6QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUFBO1lBQ25DLENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxVQUFVLEVBQUU7WUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoRixJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUE7b0JBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUE7aUJBQ2xDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTt3QkFDbkUsUUFBUSxFQUFFLElBQUk7d0JBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7cUJBQy9CLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtvQkFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFBO29CQUN0RCxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO2lCQUM1RjtZQUVILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBRUQsVUFBVTtJQUVWLENBQUM7SUFFRCxXQUFXO0lBRVgsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUU5QyxNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxHQUFHO1lBQ1gsUUFBUSxFQUFFLGNBQWM7WUFDeEIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ3RDLFdBQVcsRUFBRTtnQkFDWCxLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUUsSUFBSSxFQUFHLHNDQUFzQzthQUN2RDtZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTtnQkFDWixXQUFXLEVBQUUsVUFBVTthQUN4QjtTQUNGLENBQUM7UUFFRixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRS9DLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixNQUFNLEtBQUssR0FBYSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVoRSx3REFBd0Q7UUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRXpDLGNBQWM7UUFDZCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsK0JBQStCLFFBQVEsUUFBUSxDQUFDO1lBQ25FLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1lBQ2xDLE9BQU87U0FDUjtRQUVELE1BQU0sVUFBVSxHQUFXLEVBQUUsQ0FBQztRQUM5QixNQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWxELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0QixhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBRTtnQkFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQUM7Z0JBQ3BFLFNBQVM7YUFDVjtZQUVELGFBQWE7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQztnQkFDakQsU0FBUzthQUNWO1lBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QjtRQUVELDBDQUEwQztRQUMxQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUVqRSxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO1lBRVIsT0FBTztTQUNSO1FBRUQsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO1FBRS9CLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyw0QkFBNEIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQzFFO1FBRUQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDekIsT0FBTyxFQUFFLHNCQUFzQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBT0QsV0FBVyxDQUFDLEtBQUs7UUFDZixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1lBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUE7WUFFdEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1NBQ3ZCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtTQUNuQjtJQUNILENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUVwQyxxQkFBcUI7UUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNyRCxJQUFJLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLFFBQVEsQ0FDL0MsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUU1QyxxQkFBcUI7UUFDckIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0UsY0FBYyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFFNUUsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7WUFDakMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFO1lBQ3ZDLGNBQWMsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDM0U7UUFFRCx1QkFBdUI7UUFDdkIsTUFBTSxLQUFLLEdBQ1QsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUU5RSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRDLGtDQUFrQztRQUNsQyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO29CQUMzQixjQUFjLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsY0FBYyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFFRCx3QkFBd0I7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9CLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO2dCQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxhQUFhLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7YUFDcEU7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFHSCxxQ0FBcUM7UUFDckMsSUFBSSxHQUFHLEdBQVE7WUFDYixlQUFlLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtZQUMzQyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCO1lBQ2hELGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE9BQU87U0FDN0MsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7WUFDMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzdDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxXQUFXLENBQ3BELENBQUM7WUFFRixHQUFHLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDeEQsR0FBRyxDQUFDLGVBQWUsR0FBRyxjQUFjLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztTQUNyRDtRQUlELGNBQWM7UUFDZCxNQUFNLENBQ0osRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFlLDhCQUE4QjtRQUNyRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQVMsZ0NBQWdDO1NBQ3hEO2FBQ0UsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUNuRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsMEJBQTBCO2dCQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzNEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxLQUFLLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FDN0Q7YUFDQSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUN4QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxzQ0FBc0MsR0FBRyxLQUFLLENBQUE7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUcsa0JBQWtCO2dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRTtvQkFDbEUsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUM7b0JBQ2pDLFVBQVUsRUFBRSxxQkFBcUI7b0JBQ2pDLFNBQVMsRUFBRSxPQUFPO29CQUNsQixTQUFTLEVBQUUsTUFBTTtvQkFDakIsWUFBWSxFQUFFLElBQUksQ0FBQywrQ0FBK0M7aUJBQ25FLENBQUMsQ0FBQztnQkFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN6QyxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7d0JBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7d0JBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFDOUksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0NBQ1osbUJBQW1CO2dDQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQ0FDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0NBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7Z0NBQzFCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBOzRCQUNqQyxDQUFDOzRCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dDQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtvQ0FDNUMsUUFBUSxFQUFFLElBQUk7b0NBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUNBQy9CLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO2dDQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtnQ0FDcEIsa0NBQWtDOzRCQUNwQyxDQUFDO3lCQUNGLENBQUMsQ0FBQztxQkFDSjt5QkFBTSxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7d0JBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO3dCQUNwQixrQ0FBa0M7d0JBQ2xDLCtCQUErQjt3QkFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7d0JBRW5DLDRFQUE0RTt3QkFDNUUsMkNBQTJDO3dCQUMzQyxNQUFNO3dCQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDOzRCQUMzRCxJQUFJLEVBQUUsYUFBYSxDQUFDO3dCQUV0QixZQUFZLENBQUMsT0FBTyxDQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUNuRCxDQUFDO3dCQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFOzRCQUNqQyxtQkFBbUIsRUFBRSxRQUFRO3lCQUM5QixDQUFDLENBQUM7d0JBQ0gsMkJBQTJCO3FCQUU1Qjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtxQkFDckI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2dCQUN2QixJQUFJLENBQUMsc0NBQXNDLEdBQUcsSUFBSSxDQUFBO2dCQUNsRCxPQUFPO2FBQ1I7aUJBQ0ksSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLFdBQVcsRUFBRTtnQkFDckMsSUFBSSxDQUFDLHNDQUFzQyxHQUFHLEtBQUssQ0FBQTtnQkFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBRXJCLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDO29CQUMzRCxJQUFJLEVBQUUsYUFBYSxDQUFDO2dCQUV0QixZQUFZLENBQUMsT0FBTyxDQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUNuRCxDQUFDO2dCQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUVuRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7b0JBQzFELFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUNqQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBR0Qsa0NBQWtDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3BELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdELElBQUksY0FBYyxHQUFRLElBQUksUUFBUSxFQUFFLENBQUM7WUFFekMseUVBQXlFO1lBQ3pFLGlFQUFpRTtZQUNqRSwrRUFBK0U7WUFDL0UsdUZBQXVGO1lBQ3ZGLGNBQWMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRTdFLElBQUksaUJBQWlCLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxjQUFjLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7YUFDN0U7WUFDRCxJQUFJLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFO2dCQUN2QyxjQUFjLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNqRjtZQUNELE1BQU0sSUFBSSxHQUFTLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDL0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDekIsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsY0FBYyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNwRDtZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUE7WUFDL0MsS0FBSyxNQUFNLElBQUksSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQztZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDaEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtZQUNoRSxvQkFBb0I7WUFDcEIsSUFBSSxHQUFHLEdBQUc7Z0JBQ1IsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQ3BDLGFBQWEsRUFBRSxRQUFRLENBQUMsaUJBQWlCO2FBQzFDLENBQUE7WUFDRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxPQUFPLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtnQkFDakUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtnQkFDdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO2dCQUdwRyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGNBQWMsQ0FBQTtnQkFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUE7Z0JBQ3BGLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7YUFFN0I7WUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUE7WUFFOUUsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUN6QyxHQUFHLEVBQ0gsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQ3pCLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUUxRSwrQ0FBK0M7b0JBQy9DLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUU3Qiw0Q0FBNEM7b0JBQzVDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLENBQUMsRUFDRCxHQUFHLEVBQUU7b0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO29CQUM3QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDLEVBQ0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUN4QixDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUE7b0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUNGLENBQUM7YUFDSDtZQUVELFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7U0FFNUY7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLDBEQUEwRDtRQUMxRCxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7WUFDbkIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLDBDQUEwQztTQUMzRDthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0RBQWdEO1NBQ2pFO2FBQU0sSUFBSSxVQUFVLElBQUksRUFBRSxFQUFFO1lBQzNCLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7U0FDckQ7YUFBTSxJQUFJLFVBQVUsSUFBSSxFQUFFLEVBQUU7WUFDM0IsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztTQUN4RDthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsOENBQThDO1NBQy9EO2FBQU07WUFDTCxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUNBQW1DO1NBQ3BEO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksVUFBVSxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUUvQixnREFBZ0Q7UUFDaEQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUNwQiw0Q0FBNEM7WUFDNUMsVUFBVSxHQUFHLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNyQzthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixnREFBZ0Q7WUFDaEQsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNqRDthQUFNLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtZQUMzQixtREFBbUQ7WUFDbkQsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNqRDthQUFNLElBQUksVUFBVSxJQUFJLEdBQUcsRUFBRTtZQUM1QixrREFBa0Q7WUFDbEQsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNqRDthQUFNO1lBQ0wsMkRBQTJEO1lBQzNELFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxzQkFBc0IsR0FBRyxtQ0FBbUMsQ0FBQztRQUVsRSxnREFBZ0Q7UUFDaEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSTtnQkFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFN0MsK0JBQStCO2dCQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNoRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO29CQUMxRCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDakMsQ0FBQyxDQUFDO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO29CQUN4RSxRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDL0IsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLDRCQUE0QjtRQUMxQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxtQ0FBbUMsRUFBRTtZQUN2RSxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLGlCQUFpQixDQUFDLEdBQVE7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVuQywyREFBMkQ7UUFDM0QsSUFBSSxHQUFHLEVBQUUscUJBQXFCLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLENBQUMsRUFBRTtZQUNyRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsa0NBQWtDLENBQUM7WUFFakUsbUVBQW1FO1lBQ25FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQzVDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDdEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUUxQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxPQUFPLElBQUksWUFBWSxFQUFFO2dCQUN6RCx1REFBdUQ7Z0JBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsd0NBQXdDLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDL0YsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsR0FBRyxDQUFDO3dCQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7NEJBQ3BFLFFBQVEsRUFBRSxJQUFJOzRCQUNkLFVBQVUsRUFBRSxDQUFDLGtCQUFrQixDQUFDO3lCQUNqQyxDQUFDLENBQUM7d0JBQ0gsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzlELENBQUM7b0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTs0QkFDakYsUUFBUSxFQUFFLElBQUk7NEJBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7eUJBQy9CLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLDZDQUE2QztnQkFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3BFLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQzt3QkFDcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFOzRCQUNwRSxRQUFRLEVBQUUsSUFBSTs0QkFDZCxVQUFVLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzt5QkFDakMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUM5RCxDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7NEJBQ2pGLFFBQVEsRUFBRSxJQUFJOzRCQUNkLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO3lCQUMvQixDQUFDLENBQUM7b0JBQ0wsQ0FBQztpQkFDRixDQUFDLENBQUM7YUFDSjtTQUNGO2FBQU07WUFDTCxnQ0FBZ0M7WUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFLE1BQU0sSUFBSSxrQ0FBa0MsQ0FBQztZQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO2dCQUNwQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzthQUMvQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFDRCxVQUFVLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVqRSxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRW5DLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1FBRTFFLGdDQUFnQztRQUNoQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBcUIsQ0FBQztZQUN2RSxJQUFJLEtBQUs7Z0JBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBR0Qsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3pELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixDQUFBO1lBQzdDLElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFBO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3ZELG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtpQkFDaEM7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUE7WUFDeEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFBO1lBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQWU7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQWU7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQTtJQUNuQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUs7UUFDZCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQy9DLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRTNDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDL0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQ3BDLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO1NBQ3RDO0lBRUgsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQUs7UUFDeEIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUMvQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUUzQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDM0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQ3BDLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7U0FDbEQ7SUFFSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUM5QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBRTVDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNwRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtRQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO1lBQzNGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1NBQ25GO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRy9GLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFBO1FBRWpFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxjQUFjLEVBQUUsT0FBTyxDQUFBO1FBQy9FLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDM0YsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7SUFDN0IsQ0FBQztJQUVBLGtCQUFrQjtRQUVqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztJQUVqRCxDQUFDOytHQXJ0Q1UsOEJBQThCO21HQUE5Qiw4QkFBOEIsbVlDbkIzQyx1cVhBa05NOzs0RkQvTE8sOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLDZCQUE2QjtpUUFLSyxVQUFVO3NCQUFyRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRWpDLGVBQWU7c0JBQXZCLEtBQUs7Z0JBK0RJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRywyQkFBMkI7c0JBQXBDLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IGh0bWwycGRmIGZyb20gJ2h0bWwycGRmLmpzJztcbmltcG9ydCB7IERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwL2RlbGV0ZS1yb2xlLW1hcHBpbmctcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgb2YsIGNvbmNhdCwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlV2hpbGUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm9sZU1hcHBpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvcm9sZS1tYXBwaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvZXZlbnQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yb2xlLW1hcHBpbmctZ2VuZXJhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJvbGVNYXBwaW5nR2VuZXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdwZGZDb250ZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBkZkNvbnRlbnQhOiBFbGVtZW50UmVmO1xuICBcbiAgQElucHV0KCkgbG9naW5TdGF0dXNGbGFnID0gZmFsc2VcbiAgdGl0bGUgPSAnc3VuYmlyZC1jYi1zdGF0aWN3ZWInO1xuICBpc01haW50ZW5hbmNlUGFnZTogYW55XG4gIHNlbGVjdGVkVmFsdWUgPSAnJ1xuICBzZWFyY2hUZXh0ID0gJydcbiAgZGF0YVNvdXJjZTogYW55XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gWydSZXF1ZXN0SWQnLCAndGl0bGUnLCAncmVxdWVzdG9yJywgJ3JlcXVlc3RUeXBlJyxcbiAgICAncmVxdWVzdFN0YXR1cycsICdhc3NpZ25lZScsICdyZXF1ZXN0ZWRPbicsICdpbnRlcmVzdHMnLCAnYWN0aW9uJ11cbiAgc2VsZWN0ZWRNaW5pc3RyeVR5cGU6IHN0cmluZyA9ICdtaW5pc3RyeSc7XG4gIG1pbmlzdHJ5RGF0YTogYW55ID0gW11cbiAgbWluaXN0cnlGdWxsRGF0YTogYW55ID0gW11cbiAgcm9sZU1hcHBpbmdGb3JtITogRm9ybUdyb3VwO1xuICBkaXNhYmxlQnRuID0gdHJ1ZVxuICBzZWN0b3JEYXRhID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiAnV29tZW4gYW5kIGNoaWxkIGRldmVsb3BtZW50J1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdSdXJhbCBkZXZlbG9wbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnVXJiYW4gZGV2ZWxvcG1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ0hlYWx0aGNhcmUnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ0FncmljdWx0dXJlJ1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdPdGhlcnMnXG4gICAgfVxuXG4gIF1cbiAgZGVwYXJ0bWVudERhdGEgPSBbXVxuICBsb2FkaW5nID0gZmFsc2VcbiAgbWF4RmlsZVNpemVNQiA9IDI1O1xuICBhbGxvd2VkVHlwZXMgPSBbXG4gICAgJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAgJ2FwcGxpY2F0aW9uL21zd29yZCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyxcbiAgICAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyxcbiAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxuICAgICd0ZXh0L3BsYWluJ1xuICBdO1xuICB1cGxvYWRFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHVwbG9hZGVkRmlsZTogRmlsZVtdIHwgbnVsbCA9IG51bGw7XG4gIGxvZ2luID0gZmFsc2VcbiAgY2JwRmluYWxPYmo6IGFueSA9IHt9XG4gIHNlbGVjdGVkTWluaXN0cnlJZCA9ICcnXG4gIG9yaWdpbmFsRm9ybVZhbHVlczogYW55XG4gIGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZnVsbEpzb246IHN0cmluZyA9ICcnO1xuICBwYXJzZWREYXRhOiBhbnk7XG4gIGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2U6IHN0cmluZyA9ICcnO1xuICBwcm9jZXNzaW5nU3RhZ2VzID0gW1xuICAgICdJbml0aWFsaXppbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLicsXG4gICAgJ0FuYWx5emluZyBkZXBhcnRtZW50YWwgY29tcGV0ZW5jeSByZXF1aXJlbWVudHMuLi4nLFxuICAgICdQcm9jZXNzaW5nIHdvcmsgb3JkZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHJvbGUgZGVmaW5pdGlvbnMuLi4nLFxuICAgICdHZW5lcmF0aW5nIGRldGFpbGVkIHJvbGVzICYgcmVzcG9zaWJpbGl0aWVzLi4uJyxcbiAgICAnR2VuZXJhdGluZyBkZXRhaWxlZCBjb21wZXRlbmNpZXMuLi4nLFxuICAgICdWYWxpZGF0aW5nIHJvbGUgbWFwcGluZyAgYW5kIGZpbmFsaXppbmcgdGhlIENCUCBQbGFuJ1xuICBdO1xuICBAT3V0cHV0KCkgc3VjY2Vzc1JvbGVNYXBwaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIGFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSBsb2dpblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBzZWxlY3RlZE1pbmlzdHJ5T2JqOiBhbnkgPSAnJ1xuICBsb2dpblVzZXJPcmdJZHMgPSBbXVxuICBwYW5lbE9wZW4gPSBmYWxzZTtcbiAgZGVwYXJ0bWVudFBhbmVsT3BlbiA9IGZhbHNlXG4gIGZpbHRlcmVkTGlzdCA9IFtdO1xuICBmaWx0ZXJlZERlcGFydG1lbnRMaXN0ID0gW107XG4gIG9yaWdpbmFsTWluaXN0cnlEYXRhID0gW11cbiAgYXBpTG9hZGluZyA9IGZhbHNlXG4gIGZpcnN0QXBpUmVzcG9uc2U6IGFueSA9IG51bGxcbiAgZG9jdW1lbnRzID0gW11cbiAgZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICBkaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgd29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gIHNob3dXb3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gZmFsc2VcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwdWJsaWMgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHVibGljIHJvbGVNYXBwaW5nU2VydmljZTogUm9sZU1hcHBpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oW10pXG4gICAgdGhpcy5pc01haW50ZW5hbmNlUGFnZSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvbWFpbnRlbmFuY2UnKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLmxvZ2luID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrSWZMb2dpbigpXG5cbiAgICB0aGlzLmNicEZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKVxuICAgIGlmICh0aGlzLmNicEZpbmFsT2JqICYmIHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5ICYmIHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUpIHtcblxuXG4gICAgICB0aGlzLmVkaXRNaW5pc3RyeUZvcm0oKVxuICAgICAgLy8gdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5sb2dpbikge1xuICAgICAgICB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgICB9XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBtaW5pc3RyeVR5cGU6IFsnbWluaXN0cnknLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgbWluaXN0cnk6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc2VjdG9yczogW1tdXSxcbiAgICAgICAgZGVwYXJ0bWVudHM6IFsnJ10sIC8vIHNob3duIG9ubHkgaWYgbWluaXN0cnlUeXBlID09ICdzdGF0ZSdcbiAgICAgICAgYWRkaXRpb25hbERldGFpbHM6IFsnJ10sXG4gICAgICAgIGFkZGl0aW9uYWxfZG9jdW1lbnQ6IFtdXG4gICAgICB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5yZXNldCh7XG4gICAgICAgICAgbWluaXN0cnlUeXBlOiB0eXBlLCAvLyBLZWVwIHRoZSBjaGFuZ2VkIHZhbHVlXG4gICAgICAgICAgbWluaXN0cnk6IG51bGwsXG4gICAgICAgICAgc2VjdG9yczogW10sXG4gICAgICAgICAgZGVwYXJ0bWVudHM6IFtdLFxuICAgICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiAnJyxcbiAgICAgICAgICBhZGRpdGlvbmFsX2RvY3VtZW50OiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGhhc1VwbG9hZERvY3VtZW50cyA9IGZhbHNlXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGhhc1VwbG9hZERvY3VtZW50cyA9XG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJy91cGxvYWQtZG9jdW1lbnRzJyk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVXBsb2FkRG9jdW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbi5uZXh0KHN0YXR1cyk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9XG5cblxuXG5cblxuXG4gIH1cblxuICBnZXRVcGxvYWRlZERvY3VtZW50cygpIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuICAgIHRoaXMuYXBpTG9hZGluZyA9IHRydWVcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIHN0YXRlX2NlbnRlcl9pZDogZm9ybURhdGEubWluaXN0cnksXG4gICAgICBpbmNsdWRlX3N1bW1hcnk6IHRydWUsXG4gICAgICBza2lwOiAwLFxuICAgICAgbGltaXQ6IDIwMFxuICAgIH1cbiAgICBpZiAodHlwZW9mIGZvcm1EYXRhPy5kZXBhcnRtZW50cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlcUJvZHlbJ2RlcGFydG1lbnRfaWQnXSA9IGZvcm1EYXRhPy5kZXBhcnRtZW50c1xuICAgIH1cbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXBsb2FkZWREb2N1bWVudHMocmVxQm9keSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgcmVzPy5pdGVtcyAmJiByZXM/Lml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgbGV0IHdBT0NvdW50ID0gMFxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRvY3VtZW50cyA9IHJlcz8uaXRlbXNcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gZmFsc2VcbiAgICAgICAgdGhpcy5kb2N1bWVudHMuZm9yRWFjaCgoaXRlbSk9PntcbiAgICAgICAgICBpZihpdGVtPy5kb2N1bWVudF90eXBlID09PSAnV29yayBBbGxvY2F0aW9uIE9yZGVyJykge1xuICAgICAgICAgICAgd0FPQ291bnQgPXdBT0NvdW50KzFcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYod0FPQ291bnQgPCAxKSB7XG4gICAgICAgICAgdGhpcy53b3JrQWxsb2NhdGlvbk9yZGVyRG9jdW1lbnRNaXNzaW5nID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmRvY3VtZW50cy0tJywgdGhpcy5kb2N1bWVudHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRvY3VtZW50cyA9IFtdXG4gICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGVkaXRNaW5pc3RyeUZvcm0oKSB7XG4gICAgaWYgKHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5LnNiT3JnVHlwZVxuICAgICAgYXdhaXQgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgICAgaWYgKHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENlbnRlckJhc2VkRGVwYXJ0bWVudCh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllcikuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudERhdGEgPSByZXNcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWREZXBhcnRtZW50TGlzdCA9IHJlc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ05vIERlcGFydG1lbnQgRm91bmQgZm9yIFNlbGVjdGVkIE1pbmlzdHJ5JywgJ1gnLCB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSAnJ1xuICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9ICcnXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBtaW5pc3RyeVR5cGU6IFt0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgbWluaXN0cnk6IFt0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHNlY3RvcnM6IFtbXV0sXG4gICAgICAgIGRlcGFydG1lbnRzOiBbdGhpcy5jYnBGaW5hbE9iaj8uZGVwYXJ0bWVudHNdLCAvLyBzaG93biBvbmx5IGlmIG1pbmlzdHJ5VHlwZSA9PSAnc3RhdGUnXG4gICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiBbJyddXG4gICAgICB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChzdGF0dXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgaGFzVXBsb2FkRG9jdW1lbnRzID0gZmFsc2VcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaGFzVXBsb2FkRG9jdW1lbnRzID1cbiAgICAgICAgICAgIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL3VwbG9hZC1kb2N1bWVudHMnKTtcblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoYXNVcGxvYWREb2N1bWVudHMpIHtcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2hlY2tSb2xlTWFwcGluZ0Zvcm1WYWxpZGF0aW9uLm5leHQoc3RhdHVzKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1ZBTElEJykge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IHRydWVcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0eXBlID0+IHtcbiAgICAgIC8vICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoe1xuICAgICAgLy8gICAgIG1pbmlzdHJ5VHlwZTogdHlwZSwgLy8gS2VlcCB0aGUgY2hhbmdlZCB2YWx1ZVxuICAgICAgLy8gICAgIG1pbmlzdHJ5OiBudWxsLFxuICAgICAgLy8gICAgIHNlY3RvcnM6IFtdLFxuICAgICAgLy8gICAgIGRlcGFydG1lbnRzOiBbXSxcbiAgICAgIC8vICAgICBhZGRpdGlvbmFsRGV0YWlsczogJydcbiAgICAgIC8vICAgfSk7XG4gICAgICAvLyAgIGlmICh0eXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICBpZiAodGhpcy5taW5pc3RyeURhdGEgJiYgdGhpcy5taW5pc3RyeURhdGEubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIH1cblxuICAgICAgLy90aGlzLm9uR2VuZXJhdGVSb2xlTWFwcGluZygpXG4gICAgfSBlbHNlIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZVxuICAgICAgYXdhaXQgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgICAgYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldERlcGFydG1lbnRMaXN0KHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmRlcGFydG1lbnREYXRhID0gcmVzXG4gICAgICAgIHRoaXMuZmlsdGVyZWREZXBhcnRtZW50TGlzdCA9IHJlc1xuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0IC0tJywgdGhpcy5maWx0ZXJlZERlcGFydG1lbnRMaXN0KVxuICAgICAgfSlcbiAgICAgIGlmICh0aGlzLm1pbmlzdHJ5RGF0YSAmJiB0aGlzLm1pbmlzdHJ5RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5SWQgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllclxuICAgICAgfVxuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgbWluaXN0cnlUeXBlOiBbdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIG1pbmlzdHJ5OiBbdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBzZWN0b3JzOiBbW11dLFxuICAgICAgICBkZXBhcnRtZW50czogW3RoaXMuY2JwRmluYWxPYmo/LmRlcGFydG1lbnRzXSwgLy8gc2hvd24gb25seSBpZiBtaW5pc3RyeVR5cGUgPT0gJ3N0YXRlJ1xuICAgICAgICBhZGRpdGlvbmFsRGV0YWlsczogW3RoaXMuY2JwRmluYWxPYmo/LmFkZGl0aW9uYWxEZXRhaWxzXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChzdGF0dXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgaGFzVXBsb2FkRG9jdW1lbnRzID0gZmFsc2VcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaGFzVXBsb2FkRG9jdW1lbnRzID1cbiAgICAgICAgICAgIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL3VwbG9hZC1kb2N1bWVudHMnKTtcblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoYXNVcGxvYWREb2N1bWVudHMpIHtcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2hlY2tSb2xlTWFwcGluZ0Zvcm1WYWxpZGF0aW9uLm5leHQoc3RhdHVzKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1ZBTElEJykge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IHRydWVcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudE9yaWdpbmFsID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0eXBlID0+IHtcbiAgICAgIC8vICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoe1xuICAgICAgLy8gICAgIG1pbmlzdHJ5VHlwZTogdHlwZSwgLy8gS2VlcCB0aGUgY2hhbmdlZCB2YWx1ZVxuICAgICAgLy8gICAgIG1pbmlzdHJ5OiBudWxsLFxuICAgICAgLy8gICAgIHNlY3RvcnM6IFtdLFxuICAgICAgLy8gICAgIGRlcGFydG1lbnRzOiBbXSxcbiAgICAgIC8vICAgICBhZGRpdGlvbmFsRGV0YWlsczogJydcbiAgICAgIC8vICAgfSk7XG4gICAgICAvLyAgIGlmICh0eXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgIC8vICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIC8vIH0pO1xuICAgICAgY29uc29sZS5sb2coJ3RoaXMubWluaXN0cnlEYXRhJywgdGhpcy5taW5pc3RyeURhdGEpXG4gICAgICBpZiAodGhpcy5taW5pc3RyeURhdGEgJiYgdGhpcy5taW5pc3RyeURhdGEubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vcmlnaW5hbEZvcm1WYWx1ZXMgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgIHRoaXMuZ2V0VXBsb2FkZWREb2N1bWVudHMoKVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5sb2dpbiA9IHRoaXMubG9naW5TdGF0dXNGbGFnXG5cbiAgfVxuXG4gIGdldENoYW5nZWRGaWVsZHMob3JpZ2luYWw6IGFueSwgY3VycmVudDogYW55KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNoYW5nZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3JpZ2luYWwpIHtcbiAgICAgIGlmICghb3JpZ2luYWwuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFtrZXldO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gY3VycmVudFtrZXldO1xuXG4gICAgICAvLyBGb3IgYXJyYXlzIGFuZCBvYmplY3RzLCB1c2UgSlNPTi5zdHJpbmdpZnkgKG9yIGxvZGFzaCBpc0VxdWFsIGZvciBkZWVwIGNvbXBhcmlzb24pXG4gICAgICBjb25zdCBpc0VxdWFsID1cbiAgICAgICAgdHlwZW9mIG9yaWdpbmFsVmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShvcmlnaW5hbFZhbHVlKSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKVxuICAgICAgICAgIDogb3JpZ2luYWxWYWx1ZSA9PT0gY3VycmVudFZhbHVlO1xuXG4gICAgICBpZiAoIWlzRXF1YWwpIHtcbiAgICAgICAgY2hhbmdlZEtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VkS2V5cztcbiAgfVxuXG4gIG9uR2VuZXJhdGVSb2xlTWFwcGluZygpOiBhbnkge1xuXG4gICAgY29uc3QgY3VycmVudEZvcm1WYWx1ZXMgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgIGNvbnN0IGZvcm1EYXRhOiBhbnkgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnbWluaXN0cnlUeXBlJywgY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnlUeXBlKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ21pbmlzdHJ5JywgY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnkpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnc2VjdG9ycycsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRGb3JtVmFsdWVzLnNlY3RvcnMpKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2RlcGFydG1lbnRzJywgSlNPTi5zdHJpbmdpZnkoY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxEZXRhaWxzJywgY3VycmVudEZvcm1WYWx1ZXMuYWRkaXRpb25hbERldGFpbHMgfHwgJycpO1xuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSB0aGlzLnVwbG9hZGVkRmlsZSB8fCB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnKT8udmFsdWU7XG4gICAgY29uc29sZS5sb2coJ2ZpbGUnLCBmaWxlKVxuICAgIGlmIChmaWxlKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2FkZGl0aW9uYWxfZG9jdW1lbnQnLCBmaWxlKTtcbiAgICB9XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudHMnXSA9IGN1cnJlbnRGb3JtVmFsdWVzPy5kZXBhcnRtZW50c1xuICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKHUgPT4gdS5pZGVudGlmaWVyID09PSBjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cyk7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSBkZXBhcnRtZW50TmFtZT8ub3JnTmFtZVxuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnkgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maW5kKGl0ZW0gPT5cbiAgICAgIGl0ZW0uaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnlcbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5T2JqID0gc2VsZWN0ZWRNaW5pc3RyeTtcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeSddID0gc2VsZWN0ZWRNaW5pc3RyeVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICBjb25zb2xlLmxvZygndGhpcy5yb2xlTWFwcGluZ0Zvcm0nLCB0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICBjb25zb2xlLmxvZygnZm9ybURhdGEtLScsIGZvcm1EYXRhKVxuICAgIGZvciAoY29uc3QgcGFpciBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke3BhaXJbMF19OmAsIHBhaXJbMV0pO1xuICAgIH1cblxuXG4gICAgY29uc3QgY2hhbmdlZEZpZWxkcyA9IHRoaXMuZ2V0Q2hhbmdlZEZpZWxkcyh0aGlzLm9yaWdpbmFsRm9ybVZhbHVlcywgY3VycmVudEZvcm1WYWx1ZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRGaWVsZHMubGVuZ3RoID4gMCB8fCAoZmlsZSAmJiBmaWxlLnNpemUgPiAwKSkge1xuICAgICAgY29uc29sZS5sb2coJ2NoYW5nZWRGaWVsZHMnLCBjaGFuZ2VkRmllbGRzKVxuICAgICAgY29uc29sZS5sb2coJ0NoYW5nZWQgZmllbGRzOicsIGNoYW5nZWRGaWVsZHMpO1xuICAgICAgaWYgKGNoYW5nZWRGaWVsZHMuaW5jbHVkZXMoJ2FkZGl0aW9uYWxEZXRhaWxzJykgJiYgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUuYWRkaXRpb25hbERldGFpbHM/LnRyaW0oKSB8fCAoZmlsZSAmJiBmaWxlLnNpemUgPiAwKSkge1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERlbGV0ZVJvbGVNYXBwaW5nUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7ZG9jdW1lbnRzOiB0aGlzLmRvY3VtZW50c30sXG4gICAgICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgICAgIG1pbkhlaWdodDogJzMwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRlbGV0ZVJvbGVNYXBwaW5nQnlTdGF0ZUFuZERlcGFydG1lbnQodGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWUubWluaXN0cnksIHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLmRlcGFydG1lbnRzKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgY29uc29sZS5sb2coJ05vIGNoYW5nZXMgZGV0ZWN0ZWQuJyk7XG4gICAgfVxuXG4gIH1cblxuXG4gIGdldE1pbmlzdHJ5RGF0YSgpIHtcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldE1pbmlzdHJ5RGF0YSh0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2RhdGEtLScsIGRhdGEpXG4gICAgICB0aGlzLm1pbmlzdHJ5RnVsbERhdGEgPSBkYXRhXG4gICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgdGhpcy5taW5pc3RyeURhdGEgPSBbXVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdtaW5pc3RyeScpIHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgICAgICAgdGhpcy5taW5pc3RyeURhdGEucHVzaChpdGVtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbT8uc2JPcmdUeXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAgICAgICB0aGlzLm1pbmlzdHJ5RGF0YS5wdXNoKGl0ZW0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdldFVzZXJQcm9maWxlRGF0YSgpXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIG9uTWluaXN0cnlUeXBlQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQpXG5cbiAgICBpZiAodGhpcy5sb2dpbikge1xuICAgICAgYXdhaXQgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgIH1cblxuICAgXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydtaW5pc3RyeVR5cGUnXSA9IGV2ZW50LnZhbHVlXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9IFtdXG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9IGV2ZW50LnZhbHVlXG5cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgdGhpcy5taW5pc3RyeURhdGEgPSBbXVxuICAgIGlmIChldmVudD8udmFsdWUgPT09ICdzdGF0ZScpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnknKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLm1pbmlzdHJ5RnVsbERhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbT8udHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgICAgIHRoaXMubWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKGV2ZW50Py52YWx1ZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnc2VjdG9ycycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMubWluaXN0cnlGdWxsRGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtPy50eXBlID09PSAnY2VudHJhbCcpIHtcbiAgICAgICAgICB0aGlzLm1pbmlzdHJ5RGF0YS5wdXNoKGl0ZW0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5J10gPSAnJ1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gJydcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gJydcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoKVxuICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnkpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAvLyAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgIC8vICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgIH0sIDUwMDApXG4gICAgfVxuICB9XG5cbiAgb25NaW5pc3RyeUNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeUlkID0gZXZlbnQudmFsdWU7XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIE1pbmlzdHJ5IElEOicsIHNlbGVjdGVkTWluaXN0cnlJZCk7XG4gICAgdGhpcy5kZXBhcnRtZW50RGF0YSA9IFtdXG4gICAgLy8gWW91IGNhbiBhY2Nlc3MgdGhlIHNlbGVjdGVkIG9iamVjdCBpZiBuZWVkZWRcbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+IGl0ZW0uaWRlbnRpZmllciA9PT0gc2VsZWN0ZWRNaW5pc3RyeUlkKTtcbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlPYmogPSBzZWxlY3RlZE1pbmlzdHJ5XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIE1pbmlzdHJ5OicsIHNlbGVjdGVkTWluaXN0cnkpOyBgYFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5J10gPSBzZWxlY3RlZE1pbmlzdHJ5XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9IFtdXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIGlmIChzZWxlY3RlZE1pbmlzdHJ5SWQgJiYgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldERlcGFydG1lbnRMaXN0KHNlbGVjdGVkTWluaXN0cnlJZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50RGF0YSA9IHJlc1xuICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSByZXNcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChzZWxlY3RlZE1pbmlzdHJ5SWQgJiYgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENlbnRlckJhc2VkRGVwYXJ0bWVudChzZWxlY3RlZE1pbmlzdHJ5SWQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudERhdGEgPSByZXNcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSByZXNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ05vIERlcGFydG1lbnQgRm91bmQgZm9yIFNlbGVjdGVkIE1pbmlzdHJ5JywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gJydcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gJydcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgICAgIH1cblxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG5cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuXG4gIH1cblxuICBkb3dubG9hZFBERigpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wZGZDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgbWFyZ2luOiAwLjUsXG4gICAgICBmaWxlbmFtZTogJ0NCUF9QbGFuLnBkZicsXG4gICAgICBpbWFnZTogeyB0eXBlOiAnanBlZycsIHF1YWxpdHk6IDAuOTggfSxcbiAgICAgIGh0bWwyY2FudmFzOiB7XG4gICAgICAgIHNjYWxlOiAyLFxuICAgICAgICB1c2VDT1JTOiB0cnVlLCAgLy8gSW1wb3J0YW50IGZvciBleHRlcm5hbCBpbWFnZXMvaWNvbnNcbiAgICAgIH0sXG4gICAgICBqc1BERjoge1xuICAgICAgICB1bml0OiAnaW4nLFxuICAgICAgICBmb3JtYXQ6ICdhNCcsXG4gICAgICAgIG9yaWVudGF0aW9uOiAncG9ydHJhaXQnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGh0bWwycGRmKCkuZnJvbShlbGVtZW50KS5zZXQob3B0aW9ucykuc2F2ZSgpO1xuXG4gIH1cblxuICBvbkZpbGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlcztcbiAgICBjb25zdCBtYXhGaWxlcyA9IDM7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpO1xuXG4gICAgLy8gQWx3YXlzIGNsZWFyIGNvbnRyb2wgZmlyc3QgKHByZXZlbnRzIG9sZCB2YWxpZCB2YWx1ZSlcbiAgICBjb250cm9sPy5yZXNldCgpO1xuICAgIGNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICB0aGlzLnVwbG9hZGVkRmlsZSA9IFtdO1xuICAgIHRoaXMudXBsb2FkRXJyb3IgPSBudWxsO1xuXG4gICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIExpbWl0IGNoZWNrXG4gICAgaWYgKGZpbGVzLmxlbmd0aCA+IG1heEZpbGVzKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYFlvdSBjYW4gdXBsb2FkIGEgbWF4aW11bSBvZiAke21heEZpbGVzfSBmaWxlc2A7XG4gICAgICBjb250cm9sPy5zZXRFcnJvcnMoeyBtYXhGaWxlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgICBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICBjb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRGaWxlczogRmlsZVtdID0gW107XG4gICAgY29uc3QgaW52YWxpZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG1heEJ5dGVzID0gdGhpcy5tYXhGaWxlU2l6ZU1CICogMTAyNCAqIDEwMjQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XG5cbiAgICAgIC8vIFNpemUgY2hlY2tcbiAgICAgIGlmIChmaWxlLnNpemUgPiBtYXhCeXRlcykge1xuICAgICAgICBpbnZhbGlkRmlsZXMucHVzaChgJHtmaWxlLm5hbWV9IChleGNlZWRzICR7dGhpcy5tYXhGaWxlU2l6ZU1CfU1CKWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZSBjaGVja1xuICAgICAgaWYgKCF0aGlzLmFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XG4gICAgICAgIGludmFsaWRGaWxlcy5wdXNoKGAke2ZpbGUubmFtZX0gKGludmFsaWQgdHlwZSlgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhbGlkRmlsZXMucHVzaChmaWxlKTtcbiAgICB9XG5cbiAgICAvLyDinYwgTk8gdmFsaWQgZmlsZXMg4oaSIGZvcm0gTVVTVCBCRSBpbnZhbGlkXG4gICAgaWYgKHZhbGlkRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYEludmFsaWQgZmlsZShzKTogJHtpbnZhbGlkRmlsZXMuam9pbignLCAnKX1gO1xuXG4gICAgICBjb250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIGNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWRGaWxlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgICBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICBjb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfSwgNTAwMClcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOKclCBBdCBsZWFzdCBPTkUgdmFsaWQgZmlsZSDihpIgZm9ybSBzaG91bGQgYmUgVkFMSURcbiAgICB0aGlzLnVwbG9hZGVkRmlsZSA9IHZhbGlkRmlsZXM7XG5cbiAgICBpZiAoaW52YWxpZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSBgU29tZSBmaWxlcyB3ZXJlIHNraXBwZWQ6ICR7aW52YWxpZEZpbGVzLmpvaW4oJywgJyl9YDtcbiAgICB9XG5cbiAgICBjb250cm9sPy5zZXRWYWx1ZSh2YWxpZEZpbGVzKTtcbiAgICBjb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgICBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gIH1cblxuXG5cblxuXG5cbiAgbG9naW5TdGF0dXMoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMubG9naW4gPSB0cnVlXG4gICAgICB0aGlzLmxvZ2luU3VjY2Vzcy5lbWl0KHRydWUpXG4gICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID0gJ21pbmlzdHJ5J1xuXG4gICAgICB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9naW4gPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpIHtcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRGb3JtVmFsdWVzID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBsZXQgZm9ybVVwbG9hZERhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIC8vIE1pbmlzdHJ5IHNlbGVjdGlvblxuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnkgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maW5kKGl0ZW0gPT5cbiAgICAgIGl0ZW0uaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnlcbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5T2JqID0gc2VsZWN0ZWRNaW5pc3RyeTtcblxuICAgIC8vIEFwcGVuZCBiYXNlIGZpZWxkc1xuICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX2lkJywgY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnkgfHwgJycpO1xuICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX25hbWUnLCBzZWxlY3RlZE1pbmlzdHJ5Py5vcmdOYW1lIHx8ICcnKTtcblxuICAgIGlmIChjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cykge1xuICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdkZXBhcnRtZW50X2lkJywgY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscykge1xuICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdpbnN0cnVjdGlvbicsIGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdXBsb2FkZWQgZmlsZShzKVxuICAgIGNvbnN0IGZpbGVzOiBGaWxlIHwgRmlsZVtdID1cbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlIHx8IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy52YWx1ZTtcblxuICAgIGNvbnNvbGUubG9nKCdGaWxlcyBzZWxlY3RlZDonLCBmaWxlcyk7XG5cbiAgICAvLyBBcHBlbmQgc2luZ2xlIG9yIG11bHRpcGxlIGZpbGVzXG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWxlcykpIHtcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGUsIGZpbGUubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZXMsIGZpbGVzLm5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlYnVnOiBwcmludCBGb3JtRGF0YVxuICAgIGNvbnNvbGUubG9nKFwiRm9ybURhdGEgRGVidWc6XCIpO1xuICAgIGZvcm1VcGxvYWREYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7a2V5fTogRklMRSAtPiAke3ZhbHVlLm5hbWV9ICgke3ZhbHVlLnNpemV9IGJ5dGVzKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7a2V5fTogJHt2YWx1ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgLy8gQnVpbGQgcmVxdWVzdCBib2R5IGZvciBwb2xsaW5nIEFQSVxuICAgIGxldCByZXE6IGFueSA9IHtcbiAgICAgIHN0YXRlX2NlbnRlcl9pZDogY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnksXG4gICAgICBpbnN0cnVjdGlvbjogY3VycmVudEZvcm1WYWx1ZXMuYWRkaXRpb25hbERldGFpbHMsXG4gICAgICBzdGF0ZV9jZW50ZXJfbmFtZTogc2VsZWN0ZWRNaW5pc3RyeT8ub3JnTmFtZVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJyB8fCBjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cykge1xuICAgICAgY29uc3QgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmRlcGFydG1lbnREYXRhLmZpbmQoXG4gICAgICAgIGQgPT4gZC5pZGVudGlmaWVyID09PSBjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50c1xuICAgICAgKTtcblxuICAgICAgcmVxLmRlcGFydG1lbnRfaWQgPSBjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cyB8fCAnJztcbiAgICAgIHJlcS5kZXBhcnRtZW50X25hbWUgPSBkZXBhcnRtZW50TmFtZT8ub3JnTmFtZSB8fCAnJztcbiAgICB9XG5cblxuXG4gICAgLy8gUG9sbGluZyBBUElcbiAgICBjb25jYXQoXG4gICAgICBvZihudWxsKSwgICAgICAgICAgICAgIC8vIPCflKUgaW1tZWRpYXRlIGZpcnN0IGVtaXNzaW9uXG4gICAgICBpbnRlcnZhbCg1MDAwKSAgICAgICAgIC8vIOKPsSBzdWJzZXF1ZW50IHBvbGxpbmcgZXZlcnkgNXNcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zaGFyZWRTZXJ2aWNlLmdlbmVyYXRlUm9sZU1hcHBpbmcocmVxLCBmaWxlcykpLFxuICAgICAgICB0YXAoZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmZpcnN0QXBpUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IGRhdGE7IC8vIPCfkYggc3RvcmUgZmlyc3QgcmVzcG9uc2VcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaXJzdCBBUEkgcmVzcG9uc2U6JywgdGhpcy5maXJzdEFwaVJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VXaGlsZSgoZGF0YTogYW55KSA9PiBkYXRhPy5zdGF0dXMgIT09ICdDT01QTEVURUQnLCB0cnVlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3JvbGUgbWFwcGluZyBkYXRhLS0nLCBkYXRhKVxuICAgICAgICBpZiAodGhpcy5maXJzdEFwaVJlc3BvbnNlPy5pc19leGlzdGluZykge1xuICAgICAgICAgIHRoaXMuc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpOyAgIC8vIPCfm5Egc3RvcCBwb2xsaW5nXG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgICBkYXRhOiB7ZG9jdW1lbnRzOiB0aGlzLmRvY3VtZW50c30sXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcblxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5kZWxldGVSb2xlTWFwcGluZ0J5U3RhdGVBbmREZXBhcnRtZW50KHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLm1pbmlzdHJ5LCB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5kZXBhcnRtZW50cykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSB0aGlzLnJvdXRlci51cmw7XG5cbiAgICAgICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCk7XG4gICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID1cbiAgICAgICAgICAgICAgICBkYXRhPy5yb2xlX21hcHBpbmdzO1xuXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgICAgICdjYnBQbGFuRmluYWxPYmonLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FpL2xpc3QnXSwge1xuICAgICAgICAgICAgICAgIG9uU2FtZVVybE5hdmlnYXRpb246ICdyZWxvYWQnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcpIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IHRydWVcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YT8uc3RhdHVzID09PSAnQ09NUExFVEVEJykge1xuICAgICAgICAgIHRoaXMuc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9XG4gICAgICAgICAgICBkYXRhPy5yb2xlX21hcHBpbmdzO1xuXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAnY2JwUGxhbkZpbmFsT2JqJyxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDQlAgUGxhbiBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvbGlzdCddKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuXG4gIGdlbmVyYXRlRmluYWxSb2xlTWFwcGluZ1dpdGhTdHJlYW0oKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zb2xlLmxvZygncm9sZU1hcHBpbmdGb3JtJywgdGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgaWYgKHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuICAgICAgY29uc3QgY3VycmVudEZvcm1WYWx1ZXMgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgbGV0IGZvcm1VcGxvYWREYXRhOiBhbnkgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgICAgLy8gZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdtaW5pc3RyeVR5cGUnLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeVR5cGUpO1xuICAgICAgLy8gZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdtaW5pc3RyeScsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5KTtcbiAgICAgIC8vIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnc2VjdG9ycycsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRGb3JtVmFsdWVzLnNlY3RvcnMpKTtcbiAgICAgIC8vIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnZGVwYXJ0bWVudHMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cykpO1xuICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfaWQnLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeSB8fCAnJyk7XG4gICAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9uYW1lJywgY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnkgfHwgJycpO1xuXG4gICAgICBpZiAoY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpIHtcbiAgICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdkZXBhcnRtZW50X2lkJywgY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMgfHwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnaW5zdHJ1Y3Rpb24nLCBjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscyB8fCAnJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWxlOiBGaWxlID0gdGhpcy51cGxvYWRlZEZpbGUgfHwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2ZpbGUnLCBmaWxlKVxuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZSk7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygndGhpcy5yb2xlTWFwcGluZ0Zvcm0nLCB0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIGNvbnNvbGUubG9nKCdmb3JtVXBsb2FkRGF0YS0tJywgZm9ybVVwbG9hZERhdGEpXG4gICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgZm9ybVVwbG9hZERhdGEuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3BhaXJbMF19OmAsIHBhaXJbMV0pO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ0Zvcm0gc3VibWl0dGVkOicsIGZvcm1EYXRhKTtcbiAgICAgIGxldCBzZWN0b3JzID0gQXJyYXkuaXNBcnJheShmb3JtRGF0YS5zZWN0b3JzKSA/IGZvcm1EYXRhLnNlY3RvcnMuam9pbignLCAnKSA6ICcnXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydzZWN0b3JzJ10gPSBmb3JtRGF0YS5zZWN0b3JzXG4gICAgICAvLyBTdWJtaXQgbG9naWMgaGVyZVxuICAgICAgbGV0IHJlcSA9IHtcbiAgICAgICAgXCJzdGF0ZV9jZW50ZXJfaWRcIjogZm9ybURhdGEubWluaXN0cnksXG4gICAgICAgIFwiaW5zdHJ1Y3Rpb25cIjogZm9ybURhdGEuYWRkaXRpb25hbERldGFpbHNcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnIHx8IGZvcm1EYXRhLmRlcGFydG1lbnRzKSB7XG4gICAgICAgIHJlcVsnZGVwYXJ0bWVudF9pZCddID0gZm9ybURhdGEuZGVwYXJ0bWVudHMgPyBmb3JtRGF0YS5kZXBhcnRtZW50cyA6ICcnXG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSBmb3JtRGF0YS5kZXBhcnRtZW50cyA/IGZvcm1EYXRhLmRlcGFydG1lbnRzIDogJydcblxuXG4gICAgICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKHUgPT4gdS5pZGVudGlmaWVyID09PSBmb3JtRGF0YS5kZXBhcnRtZW50cyk7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gZGVwYXJ0bWVudE5hbWVcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnYWRkaXRpb25hbERldGFpbHMnXSA9IGZvcm1EYXRhLmFkZGl0aW9uYWxEZXRhaWxzXG4gICAgICAgIGNvbnNvbGUubG9nKGRlcGFydG1lbnROYW1lKTtcblxuICAgICAgfVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnlUeXBlJ10gPSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlXG5cbiAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgdGhpcy5mdWxsSnNvbiA9ICcnO1xuICAgICAgICB0aGlzLnBhcnNlZERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbMF07XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdTZXJ2aWNlLmdlbmVyYXRlUm9sZU1hcHBpbmcoXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlIHx8IG51bGwsXG4gICAgICAgICAgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIGNodW5rOicsIGNodW5rLCAnVG90YWwgY2h1bmtzOicsIHRoaXMuY2h1bmtzLmxlbmd0aClcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHByb2Nlc3Npbmcgc3RhZ2UgYmFzZWQgb24gY2h1bmsgY291bnRcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvY2Vzc2luZ1N0YWdlKCk7XG5cbiAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIFVJXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgfSwgMCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyZWFtIHN0YXJ0ZWQnKVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzWzBdO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4gdGhpcy5vblN0cmVhbUVuZCgpLFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1N0cmVhbSBmYWlsZWQ6JywgZXJyKVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHJlYW1FcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVQcm9jZXNzaW5nU3RhZ2UoKSB7XG4gICAgY29uc3QgY2h1bmtDb3VudCA9IHRoaXMuY2h1bmtzLmxlbmd0aDtcbiAgICBsZXQgc3RhZ2VJbmRleCA9IDA7XG5cbiAgICAvLyBNdWNoIHNsb3dlciBzdGFnZSBwcm9ncmVzc2lvbiAtIHN0YWdlcyBzdGF5IG11Y2ggbG9uZ2VyXG4gICAgaWYgKGNodW5rQ291bnQgPD0gOCkge1xuICAgICAgc3RhZ2VJbmRleCA9IDA7IC8vIEluaXRpYWxpemluZyAtIHN0YXlzIGZvciBmaXJzdCA4IGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAyMCkge1xuICAgICAgc3RhZ2VJbmRleCA9IDE7IC8vIEFuYWx5emluZyBjb21wZXRlbmN5IHJlcXVpcmVtZW50cyAtIDEyIGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAzNSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDI7IC8vIFByb2Nlc3Npbmcgd29yayBvcmRlciAtIDE1IGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSA1NSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDM7IC8vIEdlbmVyYXRpbmcgcm9sZSBtYXBwaW5ncyAtIDIwIGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSA3NSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDQ7IC8vIENvbXB1dGluZyBmaW5hbCByZWNvbW1lbmRhdGlvbnMgLSAyMCBjaHVua3NcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhZ2VJbmRleCA9IDU7IC8vIEZpbmFsaXppbmcgQ0JQIFBsYW4gLSA3NSsgY2h1bmtzXG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzW3N0YWdlSW5kZXhdO1xuICB9XG5cbiAgZ2V0UHJvZ3Jlc3NQZXJjZW50YWdlKCk6IG51bWJlciB7XG4gICAgY29uc3QgY2h1bmtDb3VudCA9IHRoaXMuY2h1bmtzLmxlbmd0aDtcbiAgICBpZiAoY2h1bmtDb3VudCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgICAvLyBNdWNoIHNsb3dlciBhbmQgc21vb3RoZXIgcHJvZ3Jlc3MgY2FsY3VsYXRpb25cbiAgICBsZXQgcGVyY2VudGFnZSA9IDA7XG5cbiAgICBpZiAoY2h1bmtDb3VudCA8PSAxNSkge1xuICAgICAgLy8gRmlyc3QgMTUgY2h1bmtzID0gMC0yNSUgKHZlcnkgc2xvdyBzdGFydClcbiAgICAgIHBlcmNlbnRhZ2UgPSAoY2h1bmtDb3VudCAvIDE1KSAqIDI1O1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAzNSkge1xuICAgICAgLy8gTmV4dCAyMCBjaHVua3MgPSAyNS01MCUgKHNsb3cgZWFybHkgcHJvZ3Jlc3MpXG4gICAgICBwZXJjZW50YWdlID0gMjUgKyAoKGNodW5rQ291bnQgLSAxNSkgLyAyMCkgKiAyNTtcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gNjApIHtcbiAgICAgIC8vIE5leHQgMjUgY2h1bmtzID0gNTAtNzUlIChzdGVhZHkgbWlkZGxlIHByb2dyZXNzKVxuICAgICAgcGVyY2VudGFnZSA9IDUwICsgKChjaHVua0NvdW50IC0gMzUpIC8gMjUpICogMjU7XG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDEwMCkge1xuICAgICAgLy8gTmV4dCA0MCBjaHVua3MgPSA3NS05MCUgKHNsb3dlciBmaW5hbCBhcHByb2FjaClcbiAgICAgIHBlcmNlbnRhZ2UgPSA3NSArICgoY2h1bmtDb3VudCAtIDYwKSAvIDQwKSAqIDE1O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCZXlvbmQgMTAwIGNodW5rcyA9IDkwLTk1JSAodmVyeSBzbG93IGZpbmFsIHByb2dyZXNzaW9uKVxuICAgICAgcGVyY2VudGFnZSA9IDkwICsgTWF0aC5taW4oKChjaHVua0NvdW50IC0gMTAwKSAvIDUwKSAqIDUsIDUpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLnJvdW5kKHBlcmNlbnRhZ2UpO1xuICB9XG5cbiAgb25TdHJlYW1FbmQoKSB7XG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0NvbXBsZXRpbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLic7XG5cbiAgICAvLyBTaG93IDEwMCUgY29tcGxldGlvbiBicmllZmx5IGJlZm9yZSBmaW5pc2hpbmdcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZnVsbEpzb24gPSB0aGlzLmNodW5rcy5qb2luKCcnKTtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLmZ1bGxKc29uLnJlcGxhY2UoL15gYGBqc29uXFxuLywgJycpLnJlcGxhY2UoL2BgYCQvLCAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGNsZWFuZWQpO1xuICAgICAgICBjb25zb2xlLmxvZygnUGFyc2VkIGRhdGE6JywgdGhpcy5wYXJzZWREYXRhKTtcblxuICAgICAgICAvLyBIYW5kbGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID0gdGhpcy5wYXJzZWREYXRhO1xuICAgICAgICB0aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKTtcblxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NCUCBQbGFuIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0pTT04gcGFyc2UgZXJyb3I6JywgZSk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBnZW5lcmF0ZSBDQlAgUGxhbi4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHByb2dyZXNzIHBlcmNlbnRhZ2UgaW5jbHVkaW5nIGNvbXBsZXRpb24gc3RhdGVcbiAgZ2V0RGlzcGxheVByb2dyZXNzUGVyY2VudGFnZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPT09ICdDb21wbGV0aW5nIENCUCBQbGFuIGdlbmVyYXRpb24uLi4nKSB7XG4gICAgICByZXR1cm4gMTAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRQcm9ncmVzc1BlcmNlbnRhZ2UoKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBzdHJlYW1pbmcgZXJyb3JzLCBlc3BlY2lhbGx5IFwiUm9sZSBtYXBwaW5nIGFscmVhZHkgZXhpc3RzXCJcbiAgaGFuZGxlU3RyZWFtRXJyb3IoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnRXJyb3IgZGV0YWlsczonLCBlcnIpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgXCJSb2xlIG1hcHBpbmcgYWxyZWFkeSBleGlzdHNcIiBlcnJvclxuICAgIGlmIChlcnI/LmlzRXhpc3RpbmdSb2xlTWFwcGluZyB8fCAoZXJyPy5kZXRhaWwgJiYgZXJyLmRldGFpbC5pbmNsdWRlcygnUm9sZSBtYXBwaW5nIGFscmVhZHkgZXhpc3RzJykpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnTG9hZGluZyBleGlzdGluZyByb2xlIG1hcHBpbmcuLi4nO1xuXG4gICAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBHZXQgcm9sZSBtYXBwaW5nIEFQSSBiYXNlZCBvbiBtaW5pc3RyeSB0eXBlXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RhdGVDZW50ZXIgPSBmb3JtRGF0YS5taW5pc3RyeTtcbiAgICAgIGNvbnN0IGRlcGFydG1lbnRJZCA9IGZvcm1EYXRhLmRlcGFydG1lbnRzO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJyAmJiBkZXBhcnRtZW50SWQpIHtcbiAgICAgICAgLy8gQ2FsbCBHZXQgcm9sZSBtYXBwaW5nIGJ5IHN0YXRlIGNlbnRlciBhbmQgZGVwYXJ0bWVudFxuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyQW5kRGVwYXJ0bWVudChzdGF0ZUNlbnRlciwgZGVwYXJ0bWVudElkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFeGlzdGluZyByb2xlIG1hcHBpbmcgbG9hZGVkOicsIHJlcyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPSByZXM7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0V4aXN0aW5nIHJvbGUgbWFwcGluZyBsb2FkZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBleGlzdGluZyByb2xlIG1hcHBpbmc6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGV4aXN0aW5nIHJvbGUgbWFwcGluZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENhbGwgR2V0IHJvbGUgbWFwcGluZyBieSBzdGF0ZSBjZW50ZXIgb25seVxuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyKHN0YXRlQ2VudGVyKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFeGlzdGluZyByb2xlIG1hcHBpbmcgbG9hZGVkOicsIHJlcyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPSByZXM7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0V4aXN0aW5nIHJvbGUgbWFwcGluZyBsb2FkZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBleGlzdGluZyByb2xlIG1hcHBpbmc6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGV4aXN0aW5nIHJvbGUgbWFwcGluZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIG90aGVyIHN0cmVhbWluZyBlcnJvcnNcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyPy5kZXRhaWwgfHwgJ1N0cmVhbSBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uJztcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvck1lc3NhZ2UsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVtb3ZlRmlsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnVwbG9hZGVkRmlsZSB8fCB0aGlzLnVwbG9hZGVkRmlsZS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBvbmUgZmlsZSBhdCB0aGUgZ2l2ZW4gaW5kZXhcbiAgICB0aGlzLnVwbG9hZGVkRmlsZS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gVXBkYXRlIGZvcm0gY29udHJvbCB2YWx1ZVxuICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy5zZXRWYWx1ZSh0aGlzLnVwbG9hZGVkRmlsZSk7XG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBpZiBubyBmaWxlcyBsZWZ0XG4gICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICcnO1xuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkRG9jJykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuXG4gIGdldFVzZXJQcm9maWxlRGF0YSgpIHtcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXNlclByb2ZpbGUoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdkYXRhLS0nLCBkYXRhKVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzZXJQcm9maWxlJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICB0aGlzLmxvZ2luVXNlck9yZ0lkcyA9IGRhdGE/Lm9yZ2FuaXphdGlvbl9pZHNcbiAgICAgIGxldCBmaWx0ZXJlZE1pbmlzdHJ5RGF0YSA9IFtdXG4gICAgICB0aGlzLm1pbmlzdHJ5RnVsbERhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2luVXNlck9yZ0lkcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpID4gLTEpIHtcbiAgICAgICAgICBmaWx0ZXJlZE1pbmlzdHJ5RGF0YS5wdXNoKGl0ZW0pXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHRoaXMubWluaXN0cnlEYXRhID0gZmlsdGVyZWRNaW5pc3RyeURhdGFcbiAgICAgIHRoaXMub3JpZ2luYWxNaW5pc3RyeURhdGEgPSBmaWx0ZXJlZE1pbmlzdHJ5RGF0YVxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSBmaWx0ZXJlZE1pbmlzdHJ5RGF0YTtcbiAgICB9KVxuICB9XG5cbiAgb25PcGVuZWQob3BlbmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSBvcGVuZWQ7XG4gIH1cblxuICBvbk9wZW5lZERlcGFydG1lbnQob3BlbmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kZXBhcnRtZW50UGFuZWxPcGVuID0gb3BlbmVkXG4gIH1cblxuICBmaWx0ZXJEYXRhKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHMgPSBldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maWx0ZXIoeCA9PlxuICAgICAgICB4Lm9yZ05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLm1pbmlzdHJ5RGF0YVxuICAgIH1cblxuICB9XG5cbiAgZmlsdGVyRGVwYXJ0bWVudERhdGEoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSkge1xuICAgICAgY29uc3QgcyA9IGV2ZW50LnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSB0aGlzLmRlcGFydG1lbnREYXRhLmZpbHRlcih4ID0+XG4gICAgICAgIHgub3JnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSB0aGlzLmRlcGFydG1lbnREYXRhXG4gICAgfVxuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9ICcnXG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoKVxuICB9XG5cbiAgb25EZXBhcnRtZW50Q2hhbmdlKCkge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWU7XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gZm9ybURhdGEuZGVwYXJ0bWVudHMgPyBmb3JtRGF0YS5kZXBhcnRtZW50cyA6ICcnXG4gICAgdGhpcy5jYnBGaW5hbE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDQlBQbGFuTG9jYWxTdG9yYWdlKClcbiAgICBpZiAodGhpcy5jYnBGaW5hbE9iaiAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeSAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlKSB7XG4gICAgICB0aGlzLmNicEZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gZm9ybURhdGEuZGVwYXJ0bWVudHMgPyBmb3JtRGF0YS5kZXBhcnRtZW50cyA6ICcnXG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeSA9IHRoaXMubWluaXN0cnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkZW50aWZpZXIgPT09IGZvcm1EYXRhLm1pbmlzdHJ5KTtcblxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9IHNlbGVjdGVkTWluaXN0cnlcblxuICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKHUgPT4gdS5pZGVudGlmaWVyID09PSBmb3JtRGF0YS5kZXBhcnRtZW50cyk7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSBkZXBhcnRtZW50TmFtZT8ub3JnTmFtZVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgfVxuXG4gICBnb1RvVXBsb2FkRG9jdW1lbnQoKSB7XG4gICBcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9haS91cGxvYWQtZG9jdW1lbnRzJ10pO1xuICAgIFxuICB9XG5cblxuXG59XG5cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPCEtLSA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWQgYXMgUERGXCIgKGNsaWNrKT1cImRvd25sb2FkUERGKClcIiAvPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIiAqbmdJZj1cImxvZ2luXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uLW1lZGl1bVwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwiaGlnaGxpZ2h0LWFpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+aUdPVCBBSSBEcml2ZW4gQ0JQPC9zcGFuPlxuICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICA8cD5CdWlsZCBZb3VyIENhcGFjaXR5IFdpdGggQ3VzdG9taXplZCBSb2xlIE1hcHBpbmc8L3A+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJsb2dpblwiIGNsYXNzPVwibXQtMlwiIFtmb3JtR3JvdXBdPVwicm9sZU1hcHBpbmdGb3JtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXBhdG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+LS0+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPi0tPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPHA+Q2hvb3NlIFlvdXIgRGVwYXJ0bWVudDwvcD4tLT5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgPC9kaXY+LS0+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgPC9kaXY+LS0+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1ncm91cCBtdC00XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cInJhZGlvLWJ0bi1ncm91cFwiIGZvcm1Db250cm9sTmFtZT1cIm1pbmlzdHJ5VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGVcIiAoY2hhbmdlKT1cIm9uTWluaXN0cnlUeXBlQ2hhbmdlKCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIExlZnQgcmFkaW8gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cIm1pbmlzdHJ5XCIgY2xhc3M9XCJyYWRpby1idG4gbGVmdC1yYWRpb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYWRpby1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwicmFkaW8taWNvblwiIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnY2VudGVyJz8gJ2NoZWNrZWQtbGFiZWwnOicnXCI+ZG9tYWluPC9tYXQtaWNvbj4gIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknPyAnY2hlY2tlZC1sYWJlbCc6JydcIj5DZW50cmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IHJhZGlvIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJzdGF0ZVwiIGNsYXNzPVwicmFkaW8tYnRuIHJpZ2h0LXJhZGlvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhZGlvLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJyYWRpby1pY29uXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZSc/ICdjaGVja2VkLWxhYmVsJzonJ1wiPmxvY2F0aW9uX29uPC9tYXQtaWNvbj4gIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnPyAnY2hlY2tlZC1sYWJlbCc6JydcIj5TdGF0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknXCI+TWluaXN0cnk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZSdcIj5TdGF0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlYXJjaC1ib3gtd2l0aC1zZWxlY3RcIj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogMjVweDsgcGFkZGluZzogMCAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjO3dpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGFuZWxDbGFzcz1cInNlbGVjdC13aXRoLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknID8gJ1NlbGVjdCBNaW5pc3RyeS8gRGVwYXJ0bWVudCc6J1NlbGVjdCBTdGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25NaW5pc3RyeUNoYW5nZSgkZXZlbnQpXCIgZm9ybUNvbnRyb2xOYW1lPVwibWluaXN0cnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYmFja2dyb3VuZDogd2hpdGU7IHdpZHRoOjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuZWRDaGFuZ2UpPVwib25PcGVuZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiICpuZ0lmPVwicGFuZWxPcGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgKGlucHV0KT1cImZpbHRlckRhdGEoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFtzZWxlY3RlZF09XCJzZWxlY3RlZE1pbmlzdHJ5SWQgPT09IGl0ZW0/LmlkZW50aWZpZXJcIiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbT8uaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkTGlzdFwiPnt7aXRlbT8ub3JnTmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZGVwYXJ0bWVudERhdGE/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+RGVwYXJ0bWVudDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDI1cHg7IHBhZGRpbmc6IDAgMTJweDtib3JkZXI6IDFweCBzb2xpZCAjY2NjO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGFuZWxDbGFzcz1cInNlbGVjdC13aXRoLXNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERlcGFydG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRzXCIgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBiYWNrZ3JvdW5kOiB3aGl0ZTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25EZXBhcnRtZW50Q2hhbmdlKClcIiAob3BlbmVkQ2hhbmdlKT1cIm9uT3BlbmVkRGVwYXJ0bWVudCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgKm5nSWY9XCJkZXBhcnRtZW50UGFuZWxPcGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgKGlucHV0KT1cImZpbHRlckRlcGFydG1lbnREYXRhKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0/LmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZERlcGFydG1lbnRMaXN0XCI+e3tpdGVtPy5vcmdOYW1lfX08L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPlNlY3RvcjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIHN0eWxlPVwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDI1cHg7IHBhZGRpbmc6IDAgMTJweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU2VjdG9yXCIgbXVsdGlwbGUgZm9ybUNvbnRyb2xOYW1lPVwic2VjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJhY2tncm91bmQ6IHdoaXRlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWN0b3JEYXRhXCI+e3tpdGVtPy52YWx1ZX19PC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCI1XCIgcGxhY2Vob2xkZXI9XCJBZGRpdGlvbmFsIGRldGFpbHNcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRpdGlvbmFsRGV0YWlsc1wiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cImRpc2FibGVVcGxvYWREb2N1bWVudCA/ICdidG4tYWN0aXZlLXByaW1hcnktZGlzYWJsZSc6J2J0bi1hY3RpdmUtcHJpbWFyeSdcIiBjbGFzcz1cIlwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlVXBsb2FkRG9jdW1lbnRcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZ29Ub1VwbG9hZERvY3VtZW50KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnVwbG9hZDwvbWF0LWljb24+IE1hbmFnZSBEb2N1bWVudHNcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtNCBzZWN0aW9uXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5VcGxvYWQgRG9jdW1lbnQgKFBERik8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInVwbG9hZERvY1wiIGNsYXNzPVwiZmlsZS11cGxvYWQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtaWNvblwiPvCfk448L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF1cGxvYWRlZEZpbGUgfHwgdXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgdXAgdG8gMyBmaWxlcyAoUERGL1RYVClcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRlZEZpbGU/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImZpbGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiZmlsZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZW1vdmUtZmlsZS1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUZpbGUoaSk7JGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInVwbG9hZERvY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgICAgICAgICAgICAvPiAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmaWxlLXVwbG9hZC1oaW50XCI+TWF4IGZpbGUgc2l6ZToge3ttYXhGaWxlU2l6ZU1CfX1NQjwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidXBsb2FkRG9jXCIgbXVsdGlwbGUgdHlwZT1cImZpbGVcIiAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmRvYywuZG9jeCwueGxzLC54bHN4LC50eHRcIiBjbGFzcz1cImZpbGUtdXBsb2FkLWlucHV0XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkRXJyb3JcIiBjbGFzcz1cImVycm9yXCI+e3sgdXBsb2FkRXJyb3IgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwhLS0gKm5nSWY9XCJyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWUgPT09ICdzdGF0ZSdcIiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+RGlzY2xhaW1lcjogUGxlYXNlIGRvIG5vdCB1cGxvYWQgYW55IGNvbmZpZGVudGlhbCBkb2N1bWVudHMuIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJkb2N1bWVudHM/Lmxlbmd0aCA8IDEgJiYgIShyb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQpICB8fCBzaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZ1wiPlxuICAgICAgICAgICAgICAgIDxwPjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAuODc1cmVtO2ZvbnQtd2VpZ2h0OiBib2xkO1wiPk5vdGU6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiPlBsZWFzZSB1cGxvYWQgdGhlIFdvcmsgQWxsb2NhdGlvbiBPcmRlciBkb2N1bWVudCB0byBnZW5lcmF0ZSB0aGUgQ2FwYWNpdHkgQnVpbGRpbmcgUGxhbiAoQ0JQKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJkb2N1bWVudHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmdcIj48c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogLjg3NXJlbTtmb250LXdlaWdodDogYm9sZDtcIj5Ob3RlOlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIj5QbGVhc2UgdXBsb2FkIHRoZSBXb3JrIEFsbG9jYXRpb24gT3JkZXIgZG9jdW1lbnQgdG8gZ2VuZXJhdGUgdGhlIENhcGFjaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBQbGFuIChDQlApPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQgfHwgKHJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJyAmJiAhcm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udmFsdWUpIHx8IGxvYWRpbmcgfHwgZG9jdW1lbnRzPy5sZW5ndGggPCAxIFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCB8fCAocm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlID09PSAnc3RhdGUnICYmICFyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy52YWx1ZSkgfHwgbG9hZGluZyB8fCBkb2N1bWVudHM/Lmxlbmd0aCA8IDEgPyAnYnRuLWRpc2FibGUnOididG4tYWN0aXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBbdmFsdWVdPVwibG9hZGluZyA/ICdHZW5lcmF0aW5nIENCUC4uLicgOiAnR2VuZXJhdGUgQ0JQJ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdlbmVyYXRlUm9sZU1hcHBpbmcoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZD5cblxuPC9kaXY+XG48IS0tIDxkaXYgKm5nSWY9XCIhbG9naW5cIj5cbiAgICAgICAgPGFwcC1sb2dpbiAoc3VjY2Vzcyk9XCJsb2dpblN0YXR1cygkZXZlbnQpXCI+PC9hcHAtbG9naW4+XG4gICAgPC9kaXY+IC0tPlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImFwaUxvYWRpbmdcIj5cbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGVudFwiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHQgbXQtM1wiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYWluLW1lc3NhZ2VcIj57eyBjdXJyZW50UHJvY2Vzc2luZ1N0YWdlIHx8ICdQcmVwYXJpbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLicgfX08L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1pbmRpY2F0b3JcIiAqbmdJZj1cImNodW5rcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW3N0eWxlLndpZHRoLiVdPVwiZ2V0RGlzcGxheVByb2dyZXNzUGVyY2VudGFnZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInByb2dyZXNzLXRleHRcIj57eyBnZXREaXNwbGF5UHJvZ3Jlc3NQZXJjZW50YWdlKCkgfX0lIENvbXBsZXRlPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0aW1lLWVzdGltYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIFJlYWwtdGltZSBzdHJlYW1pbmcgaW4gcHJvZ3Jlc3MuIFRoaXMgbWF5IHRha2UgMi0zIG1pbnV0ZXMuXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
1113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBdUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBaUIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVTNDLE1BQU0sT0FBTyw4QkFBOEI7SUFvRnpDLFlBQ1UsUUFBc0IsRUFDdkIsYUFBNEIsRUFDM0IsRUFBZSxFQUNmLFFBQXFCLEVBQ3RCLE1BQWlCLEVB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MkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCBodG1sMnBkZiBmcm9tICdodG1sMnBkZi5qcyc7XG5pbXBvcnQgeyBEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIG9mLCBjb25jYXQsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvbGVNYXBwaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3JvbGUtbWFwcGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJvbGUtbWFwcGluZy1nZW5lcmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGUtbWFwcGluZy1nZW5lcmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcm9sZS1tYXBwaW5nLWdlbmVyYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSb2xlTWFwcGluZ0dlbmVyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgncGRmQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZGZDb250ZW50ITogRWxlbWVudFJlZjtcbiAgXG4gIEBJbnB1dCgpIGxvZ2luU3RhdHVzRmxhZyA9IGZhbHNlXG4gIHRpdGxlID0gJ3N1bmJpcmQtY2Itc3RhdGljd2ViJztcbiAgaXNNYWludGVuYW5jZVBhZ2U6IGFueVxuICBzZWxlY3RlZFZhbHVlID0gJydcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIGRhdGFTb3VyY2U6IGFueVxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsnUmVxdWVzdElkJywgJ3RpdGxlJywgJ3JlcXVlc3RvcicsICdyZXF1ZXN0VHlwZScsXG4gICAgJ3JlcXVlc3RTdGF0dXMnLCAnYXNzaWduZWUnLCAncmVxdWVzdGVkT24nLCAnaW50ZXJlc3RzJywgJ2FjdGlvbiddXG4gIHNlbGVjdGVkTWluaXN0cnlUeXBlOiBzdHJpbmcgPSAnbWluaXN0cnknO1xuICBtaW5pc3RyeURhdGE6IGFueSA9IFtdXG4gIG1pbmlzdHJ5RnVsbERhdGE6IGFueSA9IFtdXG4gIHJvbGVNYXBwaW5nRm9ybSE6IEZvcm1Hcm91cDtcbiAgZGlzYWJsZUJ0biA9IHRydWVcbiAgc2VjdG9yRGF0YSA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJ1dvbWVuIGFuZCBjaGlsZCBkZXZlbG9wbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnUnVyYWwgZGV2ZWxvcG1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ1VyYmFuIGRldmVsb3BtZW50J1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdIZWFsdGhjYXJlJ1xuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdBZ3JpY3VsdHVyZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAnT3RoZXJzJ1xuICAgIH1cblxuICBdXG4gIGRlcGFydG1lbnREYXRhID0gW11cbiAgbG9hZGluZyA9IGZhbHNlXG4gIG1heEZpbGVTaXplTUIgPSAyNTtcbiAgYWxsb3dlZFR5cGVzID0gW1xuICAgICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAndGV4dC9wbGFpbidcbiAgXTtcbiAgdXBsb2FkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB1cGxvYWRlZEZpbGU6IEZpbGVbXSB8IG51bGwgPSBudWxsO1xuICBsb2dpbiA9IGZhbHNlXG4gIGNicEZpbmFsT2JqOiBhbnkgPSB7fVxuICBzZWxlY3RlZE1pbmlzdHJ5SWQgPSAnJ1xuICBvcmlnaW5hbEZvcm1WYWx1ZXM6IGFueVxuICBjaHVua3M6IHN0cmluZ1tdID0gW107XG4gIGZ1bGxKc29uOiBzdHJpbmcgPSAnJztcbiAgcGFyc2VkRGF0YTogYW55O1xuICBjdXJyZW50UHJvY2Vzc2luZ1N0YWdlOiBzdHJpbmcgPSAnJztcbiAgcHJvY2Vzc2luZ1N0YWdlcyA9IFtcbiAgICAnSW5pdGlhbGl6aW5nIENCUCBQbGFuIGdlbmVyYXRpb24uLi4nLFxuICAgICdBbmFseXppbmcgZGVwYXJ0bWVudGFsIGNvbXBldGVuY3kgcmVxdWlyZW1lbnRzLi4uJyxcbiAgICAnUHJvY2Vzc2luZyB3b3JrIG9yZGVyIHNwZWNpZmljYXRpb25zIGFuZCByb2xlIGRlZmluaXRpb25zLi4uJyxcbiAgICAnR2VuZXJhdGluZyBkZXRhaWxlZCByb2xlcyAmIHJlc3Bvc2liaWxpdGllcy4uLicsXG4gICAgJ0dlbmVyYXRpbmcgZGV0YWlsZWQgY29tcGV0ZW5jaWVzLi4uJyxcbiAgICAnVmFsaWRhdGluZyByb2xlIG1hcHBpbmcgIGFuZCBmaW5hbGl6aW5nIHRoZSBDQlAgUGxhbidcbiAgXTtcbiAgQE91dHB1dCgpIHN1Y2Nlc3NSb2xlTWFwcGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSBhbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgbG9naW5TdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgc2VsZWN0ZWRNaW5pc3RyeU9iajogYW55ID0gJydcbiAgbG9naW5Vc2VyT3JnSWRzID0gW11cbiAgcGFuZWxPcGVuID0gZmFsc2U7XG4gIGRlcGFydG1lbnRQYW5lbE9wZW4gPSBmYWxzZVxuICBmaWx0ZXJlZExpc3QgPSBbXTtcbiAgZmlsdGVyZWREZXBhcnRtZW50TGlzdCA9IFtdO1xuICBvcmlnaW5hbE1pbmlzdHJ5RGF0YSA9IFtdXG4gIGFwaUxvYWRpbmcgPSBmYWxzZVxuICBmaXJzdEFwaVJlc3BvbnNlOiBhbnkgPSBudWxsXG4gIGRvY3VtZW50cyA9IFtdXG4gIGRpc2FibGVVcGxvYWREb2N1bWVudCA9IHRydWVcbiAgZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gIHdvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICBzaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IGZhbHNlXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV2ZW50U3ZjOiBFdmVudFNlcnZpY2UsXG4gICAgcHVibGljIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyByb2xlTWFwcGluZ1NlcnZpY2U6IFJvbGVNYXBwaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge1xuICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KFtdKVxuICAgIHRoaXMuaXNNYWludGVuYW5jZVBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL21haW50ZW5hbmNlJylcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5sb2dpbiA9IHRoaXMuc2hhcmVkU2VydmljZS5jaGVja0lmTG9naW4oKVxuXG4gICAgdGhpcy5jYnBGaW5hbE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDQlBQbGFuTG9jYWxTdG9yYWdlKClcbiAgICBpZiAodGhpcy5jYnBGaW5hbE9iaiAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeSAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlKSB7XG5cblxuICAgICAgdGhpcy5lZGl0TWluaXN0cnlGb3JtKClcbiAgICAgIC8vIHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMubG9naW4pIHtcbiAgICAgICAgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgICAgfVxuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgbWluaXN0cnlUeXBlOiBbJ21pbmlzdHJ5JywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIG1pbmlzdHJ5OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHNlY3RvcnM6IFtbXV0sXG4gICAgICAgIGRlcGFydG1lbnRzOiBbJyddLCAvLyBzaG93biBvbmx5IGlmIG1pbmlzdHJ5VHlwZSA9PSAnc3RhdGUnXG4gICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzOiBbJyddLFxuICAgICAgICBhZGRpdGlvbmFsX2RvY3VtZW50OiBbXVxuICAgICAgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ3NlY3RvcnMnKT8uc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0eXBlID0+IHtcbiAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoe1xuICAgICAgICAgIG1pbmlzdHJ5VHlwZTogdHlwZSwgLy8gS2VlcCB0aGUgY2hhbmdlZCB2YWx1ZVxuICAgICAgICAgIG1pbmlzdHJ5OiBudWxsLFxuICAgICAgICAgIHNlY3RvcnM6IFtdLFxuICAgICAgICAgIGRlcGFydG1lbnRzOiBbXSxcbiAgICAgICAgICBhZGRpdGlvbmFsRGV0YWlsczogJycsXG4gICAgICAgICAgYWRkaXRpb25hbF9kb2N1bWVudDogW11cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3RhdGUnKSB7XG4gICAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ2RlcGFydG1lbnRzJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgIGxldCBoYXNVcGxvYWREb2N1bWVudHMgPSBmYWxzZVxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBoYXNVcGxvYWREb2N1bWVudHMgPVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvdXBsb2FkLWRvY3VtZW50cycpO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc1VwbG9hZERvY3VtZW50cykge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jaGVja1JvbGVNYXBwaW5nRm9ybVZhbGlkYXRpb24ubmV4dChzdGF0dXMpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuXG5cblxuXG5cblxuICB9XG5cbiAgZ2V0VXBsb2FkZWREb2N1bWVudHMoKSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZTtcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlXG4gICAgbGV0IHJlcUJvZHkgPSB7XG4gICAgICBzdGF0ZV9jZW50ZXJfaWQ6IGZvcm1EYXRhLm1pbmlzdHJ5LFxuICAgICAgaW5jbHVkZV9zdW1tYXJ5OiB0cnVlLFxuICAgICAgc2tpcDogMCxcbiAgICAgIGxpbWl0OiAyMDBcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmb3JtRGF0YT8uZGVwYXJ0bWVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXFCb2R5WydkZXBhcnRtZW50X2lkJ10gPSBmb3JtRGF0YT8uZGVwYXJ0bWVudHNcbiAgICB9XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFVwbG9hZGVkRG9jdW1lbnRzKHJlcUJvZHkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcz8uaXRlbXMgJiYgcmVzPy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGxldCB3QU9Db3VudCA9IDBcbiAgICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kb2N1bWVudHMgPSByZXM/Lml0ZW1zXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZG9jdW1lbnRzLmZvckVhY2goKGl0ZW0pPT57XG4gICAgICAgICAgaWYoaXRlbT8uZG9jdW1lbnRfdHlwZSA9PT0gJ1dvcmsgQWxsb2NhdGlvbiBPcmRlcicpIHtcbiAgICAgICAgICAgIHdBT0NvdW50ID13QU9Db3VudCsxXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKHdBT0NvdW50IDwgMSkge1xuICAgICAgICAgIHRoaXMud29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5kb2N1bWVudHMtLScsIHRoaXMuZG9jdW1lbnRzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXVxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzYWJsZVVwbG9hZERvY3VtZW50T3JpZ2luYWwgPSBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBlZGl0TWluaXN0cnlGb3JtKCkge1xuICAgIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeS5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUgPSB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeS5zYk9yZ1R5cGVcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICAgIGlmICh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDZW50ZXJCYXNlZERlcGFydG1lbnQodGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXIpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRlcGFydG1lbnREYXRhID0gcmVzXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSByZXNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdObyBEZXBhcnRtZW50IEZvdW5kIGZvciBTZWxlY3RlZCBNaW5pc3RyeScsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gJydcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSAnJ1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgbWluaXN0cnlUeXBlOiBbdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIG1pbmlzdHJ5OiBbdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBzZWN0b3JzOiBbW11dLFxuICAgICAgICBkZXBhcnRtZW50czogW3RoaXMuY2JwRmluYWxPYmo/LmRlcGFydG1lbnRzXSwgLy8gc2hvd24gb25seSBpZiBtaW5pc3RyeVR5cGUgPT0gJ3N0YXRlJ1xuICAgICAgICBhZGRpdGlvbmFsRGV0YWlsczogWycnXVxuICAgICAgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGhhc1VwbG9hZERvY3VtZW50cyA9IGZhbHNlXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGhhc1VwbG9hZERvY3VtZW50cyA9XG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJy91cGxvYWQtZG9jdW1lbnRzJyk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVXBsb2FkRG9jdW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbi5uZXh0KHN0YXR1cyk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdzZWN0b3JzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodHlwZSA9PiB7XG4gICAgICAvLyAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnJlc2V0KHtcbiAgICAgIC8vICAgICBtaW5pc3RyeVR5cGU6IHR5cGUsIC8vIEtlZXAgdGhlIGNoYW5nZWQgdmFsdWVcbiAgICAgIC8vICAgICBtaW5pc3RyeTogbnVsbCxcbiAgICAgIC8vICAgICBzZWN0b3JzOiBbXSxcbiAgICAgIC8vICAgICBkZXBhcnRtZW50czogW10sXG4gICAgICAvLyAgICAgYWRkaXRpb25hbERldGFpbHM6ICcnXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gICBpZiAodHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAvLyB9KTtcblxuICAgICAgaWYgKHRoaXMubWluaXN0cnlEYXRhICYmIHRoaXMubWluaXN0cnlEYXRhLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICB9XG5cbiAgICAgIC8vdGhpcy5vbkdlbmVyYXRlUm9sZU1hcHBpbmcoKVxuICAgIH0gZWxzZSBpZiAodGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGVcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TWluaXN0cnlEYXRhKClcbiAgICAgIGF3YWl0IHRoaXMuc2hhcmVkU2VydmljZS5nZXREZXBhcnRtZW50TGlzdCh0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uaWRlbnRpZmllcikuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50RGF0YSA9IHJlc1xuICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSByZXNcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZWREZXBhcnRtZW50TGlzdCAtLScsIHRoaXMuZmlsdGVyZWREZXBhcnRtZW50TGlzdClcbiAgICAgIH0pXG4gICAgICBpZiAodGhpcy5taW5pc3RyeURhdGEgJiYgdGhpcy5taW5pc3RyeURhdGEubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeUlkID0gdGhpcy5jYnBGaW5hbE9iaj8ubWluaXN0cnk/LmlkZW50aWZpZXJcbiAgICAgIH1cbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG1pbmlzdHJ5VHlwZTogW3RoaXMuc2VsZWN0ZWRNaW5pc3RyeVR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBtaW5pc3RyeTogW3RoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc2VjdG9yczogW1tdXSxcbiAgICAgICAgZGVwYXJ0bWVudHM6IFt0aGlzLmNicEZpbmFsT2JqPy5kZXBhcnRtZW50c10sIC8vIHNob3duIG9ubHkgaWYgbWluaXN0cnlUeXBlID09ICdzdGF0ZSdcbiAgICAgICAgYWRkaXRpb25hbERldGFpbHM6IFt0aGlzLmNicEZpbmFsT2JqPy5hZGRpdGlvbmFsRGV0YWlsc11cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGhhc1VwbG9hZERvY3VtZW50cyA9IGZhbHNlXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGhhc1VwbG9hZERvY3VtZW50cyA9XG4gICAgICAgICAgICB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJy91cGxvYWQtZG9jdW1lbnRzJyk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVXBsb2FkRG9jdW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNoZWNrUm9sZU1hcHBpbmdGb3JtVmFsaWRhdGlvbi5uZXh0KHN0YXR1cyk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGxvYWREb2N1bWVudCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdzZWN0b3JzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIC8vIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodHlwZSA9PiB7XG4gICAgICAvLyAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnJlc2V0KHtcbiAgICAgIC8vICAgICBtaW5pc3RyeVR5cGU6IHR5cGUsIC8vIEtlZXAgdGhlIGNoYW5nZWQgdmFsdWVcbiAgICAgIC8vICAgICBtaW5pc3RyeTogbnVsbCxcbiAgICAgIC8vICAgICBzZWN0b3JzOiBbXSxcbiAgICAgIC8vICAgICBkZXBhcnRtZW50czogW10sXG4gICAgICAvLyAgICAgYWRkaXRpb25hbERldGFpbHM6ICcnXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gICBpZiAodHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAvLyAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy5zZXRWYWx1ZShbXSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAvLyB9KTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm1pbmlzdHJ5RGF0YScsIHRoaXMubWluaXN0cnlEYXRhKVxuICAgICAgaWYgKHRoaXMubWluaXN0cnlEYXRhICYmIHRoaXMubWluaXN0cnlEYXRhLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9IHRoaXMuY2JwRmluYWxPYmo/Lm1pbmlzdHJ5Py5pZGVudGlmaWVyXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3JpZ2luYWxGb3JtVmFsdWVzID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMubG9naW4gPSB0aGlzLmxvZ2luU3RhdHVzRmxhZ1xuXG4gIH1cblxuICBnZXRDaGFuZ2VkRmllbGRzKG9yaWdpbmFsOiBhbnksIGN1cnJlbnQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjaGFuZ2VkS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgICBpZiAoIW9yaWdpbmFsLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxba2V5XTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRba2V5XTtcblxuICAgICAgLy8gRm9yIGFycmF5cyBhbmQgb2JqZWN0cywgdXNlIEpTT04uc3RyaW5naWZ5IChvciBsb2Rhc2ggaXNFcXVhbCBmb3IgZGVlcCBjb21wYXJpc29uKVxuICAgICAgY29uc3QgaXNFcXVhbCA9XG4gICAgICAgIHR5cGVvZiBvcmlnaW5hbFZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICA6IG9yaWdpbmFsVmFsdWUgPT09IGN1cnJlbnRWYWx1ZTtcblxuICAgICAgaWYgKCFpc0VxdWFsKSB7XG4gICAgICAgIGNoYW5nZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEtleXM7XG4gIH1cblxuICBvbkdlbmVyYXRlUm9sZU1hcHBpbmcoKTogYW55IHtcblxuICAgIGNvbnN0IGN1cnJlbnRGb3JtVmFsdWVzID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBmb3JtRGF0YTogYW55ID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ21pbmlzdHJ5VHlwZScsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5VHlwZSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdtaW5pc3RyeScsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5KTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3NlY3RvcnMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50Rm9ybVZhbHVlcy5zZWN0b3JzKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZXBhcnRtZW50cycsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRGb3JtVmFsdWVzLmRlcGFydG1lbnRzKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsRGV0YWlscycsIGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzIHx8ICcnKTtcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gdGhpcy51cGxvYWRlZEZpbGUgfHwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdmaWxlJywgZmlsZSlcbiAgICBpZiAoZmlsZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZSk7XG4gICAgfVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSBjdXJyZW50Rm9ybVZhbHVlcz8uZGVwYXJ0bWVudHNcbiAgICBjb25zdCBkZXBhcnRtZW50TmFtZSA9IHRoaXMuZGVwYXJ0bWVudERhdGEuZmluZCh1ID0+IHUuaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpO1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gZGVwYXJ0bWVudE5hbWU/Lm9yZ05hbWVcbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+XG4gICAgICBpdGVtLmlkZW50aWZpZXIgPT09IGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5XG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRNaW5pc3RyeU9iaiA9IHNlbGVjdGVkTWluaXN0cnk7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9IHNlbGVjdGVkTWluaXN0cnlcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgY29uc29sZS5sb2coJ3RoaXMucm9sZU1hcHBpbmdGb3JtJywgdGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgY29uc29sZS5sb2coJ2Zvcm1EYXRhLS0nLCBmb3JtRGF0YSlcbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgZm9ybURhdGEuZW50cmllcygpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgJHtwYWlyWzBdfTpgLCBwYWlyWzFdKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGNoYW5nZWRGaWVsZHMgPSB0aGlzLmdldENoYW5nZWRGaWVsZHModGhpcy5vcmlnaW5hbEZvcm1WYWx1ZXMsIGN1cnJlbnRGb3JtVmFsdWVzKTtcblxuICAgIGlmIChjaGFuZ2VkRmllbGRzLmxlbmd0aCA+IDAgfHwgKGZpbGUgJiYgZmlsZS5zaXplID4gMCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdjaGFuZ2VkRmllbGRzJywgY2hhbmdlZEZpZWxkcylcbiAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VkIGZpZWxkczonLCBjaGFuZ2VkRmllbGRzKTtcbiAgICAgIGlmIChjaGFuZ2VkRmllbGRzLmluY2x1ZGVzKCdhZGRpdGlvbmFsRGV0YWlscycpICYmIHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLmFkZGl0aW9uYWxEZXRhaWxzPy50cmltKCkgfHwgKGZpbGUgJiYgZmlsZS5zaXplID4gMCkpIHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgZGF0YToge2RvY3VtZW50czogdGhpcy5kb2N1bWVudHN9LFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgICAgIG1heEhlaWdodDogJzgwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5kZWxldGVSb2xlTWFwcGluZ0J5U3RhdGVBbmREZXBhcnRtZW50KHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLm1pbmlzdHJ5LCB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5kZXBhcnRtZW50cykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gW11cbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBbXVxuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVGaW5hbFJvbGVNYXBwaW5nKClcbiAgICAgIGNvbnNvbGUubG9nKCdObyBjaGFuZ2VzIGRldGVjdGVkLicpO1xuICAgIH1cblxuICB9XG5cblxuICBnZXRNaW5pc3RyeURhdGEoKSB7XG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHJlcXVlc3RlZFR5cGUgPSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0TWluaXN0cnlEYXRhKHJlcXVlc3RlZFR5cGUpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhLS0nLCBkYXRhKVxuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvLyBJZ25vcmUgc3RhbGUgcmVzcG9uc2VzIGZyb20gYSB0eXBlIHRoYXQgd2FzIGNoYW5nZWQgYWdhaW4gYmVmb3JlIHRoaXMgb25lIHJldHVybmVkXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRUeXBlICE9PSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW5pc3RyeUZ1bGxEYXRhID0gZGF0YVxuICAgICAgICB0aGlzLm1pbmlzdHJ5RGF0YSA9IFtdXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uc2JPcmdUeXBlID09PSAnbWluaXN0cnknKSB7XG4gICAgICAgICAgICAgIHRoaXMubWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZFR5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5zYk9yZ1R5cGUgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5taW5pc3RyeURhdGEucHVzaChpdGVtKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldFVzZXJQcm9maWxlRGF0YShyZXF1ZXN0ZWRUeXBlLCByZXNvbHZlKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgb25NaW5pc3RyeVR5cGVDaGFuZ2UoZXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudClcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5VHlwZSddID0gZXZlbnQudmFsdWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID0gW11cbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID0gZXZlbnQudmFsdWVcbiAgICB0aGlzLm1pbmlzdHJ5RGF0YSA9IFtdXG5cbiAgICBpZiAodGhpcy5sb2dpbikge1xuICAgICAgYXdhaXQgdGhpcy5nZXRNaW5pc3RyeURhdGEoKVxuICAgIH1cblxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICBpZiAoZXZlbnQ/LnZhbHVlID09PSAnc3RhdGUnKSB7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5Jyk/LnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdzZWN0b3JzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUoW10pO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnZhbHVlID09PSAnbWluaXN0cnknKSB7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5Jyk/LnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdzZWN0b3JzJyk/LnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8uc2V0VmFsdWUoW10pO1xuICAgIH1cblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5J10gPSAnJ1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gJydcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gJydcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgLy8gdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoKVxuICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnkpIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAvLyAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnQgPSB0cnVlXG4gICAgICAgIC8vICAgdGhpcy5kaXNhYmxlVXBsb2FkRG9jdW1lbnRPcmlnaW5hbCA9IHRydWVcbiAgICAgIH0sIDUwMDApXG4gICAgfVxuICB9XG5cbiAgb25NaW5pc3RyeUNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeUlkID0gZXZlbnQudmFsdWU7XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIE1pbmlzdHJ5IElEOicsIHNlbGVjdGVkTWluaXN0cnlJZCk7XG4gICAgdGhpcy5kZXBhcnRtZW50RGF0YSA9IFtdXG4gICAgLy8gWW91IGNhbiBhY2Nlc3MgdGhlIHNlbGVjdGVkIG9iamVjdCBpZiBuZWVkZWRcbiAgICBjb25zdCBzZWxlY3RlZE1pbmlzdHJ5ID0gdGhpcy5taW5pc3RyeURhdGEuZmluZChpdGVtID0+IGl0ZW0uaWRlbnRpZmllciA9PT0gc2VsZWN0ZWRNaW5pc3RyeUlkKTtcbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlPYmogPSBzZWxlY3RlZE1pbmlzdHJ5XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIE1pbmlzdHJ5OicsIHNlbGVjdGVkTWluaXN0cnkpOyBgYFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ21pbmlzdHJ5J10gPSBzZWxlY3RlZE1pbmlzdHJ5XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9IFtdXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuICAgIGlmIChzZWxlY3RlZE1pbmlzdHJ5SWQgJiYgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJykge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldERlcGFydG1lbnRMaXN0KHNlbGVjdGVkTWluaXN0cnlJZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50RGF0YSA9IHJlc1xuICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSByZXNcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChzZWxlY3RlZE1pbmlzdHJ5SWQgJiYgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ21pbmlzdHJ5Jykge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENlbnRlckJhc2VkRGVwYXJ0bWVudChzZWxlY3RlZE1pbmlzdHJ5SWQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudERhdGEgPSByZXNcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSByZXNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ05vIERlcGFydG1lbnQgRm91bmQgZm9yIFNlbGVjdGVkIE1pbmlzdHJ5JywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gJydcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gJydcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2JwUGxhbkZpbmFsT2JqJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaikpXG4gICAgICAgIH1cblxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG5cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuXG4gIH1cblxuICBkb3dubG9hZFBERigpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wZGZDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgbWFyZ2luOiAwLjUsXG4gICAgICBmaWxlbmFtZTogJ0NCUF9QbGFuLnBkZicsXG4gICAgICBpbWFnZTogeyB0eXBlOiAnanBlZycsIHF1YWxpdHk6IDAuOTggfSxcbiAgICAgIGh0bWwyY2FudmFzOiB7XG4gICAgICAgIHNjYWxlOiAyLFxuICAgICAgICB1c2VDT1JTOiB0cnVlLCAgLy8gSW1wb3J0YW50IGZvciBleHRlcm5hbCBpbWFnZXMvaWNvbnNcbiAgICAgIH0sXG4gICAgICBqc1BERjoge1xuICAgICAgICB1bml0OiAnaW4nLFxuICAgICAgICBmb3JtYXQ6ICdhNCcsXG4gICAgICAgIG9yaWVudGF0aW9uOiAncG9ydHJhaXQnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGh0bWwycGRmKCkuZnJvbShlbGVtZW50KS5zZXQob3B0aW9ucykuc2F2ZSgpO1xuXG4gIH1cblxuICBvbkZpbGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlcztcbiAgICBjb25zdCBtYXhGaWxlcyA9IDM7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpO1xuXG4gICAgLy8gQWx3YXlzIGNsZWFyIGNvbnRyb2wgZmlyc3QgKHByZXZlbnRzIG9sZCB2YWxpZCB2YWx1ZSlcbiAgICBjb250cm9sPy5yZXNldCgpO1xuICAgIGNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICB0aGlzLnVwbG9hZGVkRmlsZSA9IFtdO1xuICAgIHRoaXMudXBsb2FkRXJyb3IgPSBudWxsO1xuXG4gICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIExpbWl0IGNoZWNrXG4gICAgaWYgKGZpbGVzLmxlbmd0aCA+IG1heEZpbGVzKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYFlvdSBjYW4gdXBsb2FkIGEgbWF4aW11bSBvZiAke21heEZpbGVzfSBmaWxlc2A7XG4gICAgICBjb250cm9sPy5zZXRFcnJvcnMoeyBtYXhGaWxlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgICBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICBjb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRGaWxlczogRmlsZVtdID0gW107XG4gICAgY29uc3QgaW52YWxpZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG1heEJ5dGVzID0gdGhpcy5tYXhGaWxlU2l6ZU1CICogMTAyNCAqIDEwMjQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XG5cbiAgICAgIC8vIFNpemUgY2hlY2tcbiAgICAgIGlmIChmaWxlLnNpemUgPiBtYXhCeXRlcykge1xuICAgICAgICBpbnZhbGlkRmlsZXMucHVzaChgJHtmaWxlLm5hbWV9IChleGNlZWRzICR7dGhpcy5tYXhGaWxlU2l6ZU1CfU1CKWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZSBjaGVja1xuICAgICAgaWYgKCF0aGlzLmFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XG4gICAgICAgIGludmFsaWRGaWxlcy5wdXNoKGAke2ZpbGUubmFtZX0gKGludmFsaWQgdHlwZSlgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhbGlkRmlsZXMucHVzaChmaWxlKTtcbiAgICB9XG5cbiAgICAvLyDinYwgTk8gdmFsaWQgZmlsZXMg4oaSIGZvcm0gTVVTVCBCRSBpbnZhbGlkXG4gICAgaWYgKHZhbGlkRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYEludmFsaWQgZmlsZShzKTogJHtpbnZhbGlkRmlsZXMuam9pbignLCAnKX1gO1xuXG4gICAgICBjb250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIGNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWRGaWxlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgICBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICBjb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICB0aGlzLnJvbGVNYXBwaW5nRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfSwgNTAwMClcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOKclCBBdCBsZWFzdCBPTkUgdmFsaWQgZmlsZSDihpIgZm9ybSBzaG91bGQgYmUgVkFMSURcbiAgICB0aGlzLnVwbG9hZGVkRmlsZSA9IHZhbGlkRmlsZXM7XG5cbiAgICBpZiAoaW52YWxpZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSBgU29tZSBmaWxlcyB3ZXJlIHNraXBwZWQ6ICR7aW52YWxpZEZpbGVzLmpvaW4oJywgJyl9YDtcbiAgICB9XG5cbiAgICBjb250cm9sPy5zZXRWYWx1ZSh2YWxpZEZpbGVzKTtcbiAgICBjb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgICBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gIH1cblxuXG5cblxuXG5cbiAgbG9naW5TdGF0dXMoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMubG9naW4gPSB0cnVlXG4gICAgICB0aGlzLmxvZ2luU3VjY2Vzcy5lbWl0KHRydWUpXG4gICAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID0gJ21pbmlzdHJ5J1xuXG4gICAgICB0aGlzLmdldE1pbmlzdHJ5RGF0YSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9naW4gPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpIHtcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRGb3JtVmFsdWVzID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBsZXQgZm9ybVVwbG9hZERhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIC8vIE1pbmlzdHJ5IHNlbGVjdGlvblxuICAgIGNvbnN0IHNlbGVjdGVkTWluaXN0cnkgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maW5kKGl0ZW0gPT5cbiAgICAgIGl0ZW0uaWRlbnRpZmllciA9PT0gY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnlcbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZE1pbmlzdHJ5T2JqID0gc2VsZWN0ZWRNaW5pc3RyeTtcblxuICAgIC8vIEFwcGVuZCBiYXNlIGZpZWxkc1xuICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX2lkJywgY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnkgfHwgJycpO1xuICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnc3RhdGVfY2VudGVyX25hbWUnLCBzZWxlY3RlZE1pbmlzdHJ5Py5vcmdOYW1lIHx8ICcnKTtcblxuICAgIGlmIChjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cykge1xuICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdkZXBhcnRtZW50X2lkJywgY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscykge1xuICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdpbnN0cnVjdGlvbicsIGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdXBsb2FkZWQgZmlsZShzKVxuICAgIGNvbnN0IGZpbGVzOiBGaWxlIHwgRmlsZVtdID1cbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlIHx8IHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy52YWx1ZTtcblxuICAgIGNvbnNvbGUubG9nKCdGaWxlcyBzZWxlY3RlZDonLCBmaWxlcyk7XG5cbiAgICAvLyBBcHBlbmQgc2luZ2xlIG9yIG11bHRpcGxlIGZpbGVzXG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWxlcykpIHtcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnYWRkaXRpb25hbF9kb2N1bWVudCcsIGZpbGUsIGZpbGUubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZXMsIGZpbGVzLm5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlYnVnOiBwcmludCBGb3JtRGF0YVxuICAgIGNvbnNvbGUubG9nKFwiRm9ybURhdGEgRGVidWc6XCIpO1xuICAgIGZvcm1VcGxvYWREYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7a2V5fTogRklMRSAtPiAke3ZhbHVlLm5hbWV9ICgke3ZhbHVlLnNpemV9IGJ5dGVzKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7a2V5fTogJHt2YWx1ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgLy8gQnVpbGQgcmVxdWVzdCBib2R5IGZvciBwb2xsaW5nIEFQSVxuICAgIGxldCByZXE6IGFueSA9IHtcbiAgICAgIHN0YXRlX2NlbnRlcl9pZDogY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnksXG4gICAgICBpbnN0cnVjdGlvbjogY3VycmVudEZvcm1WYWx1ZXMuYWRkaXRpb25hbERldGFpbHMsXG4gICAgICBzdGF0ZV9jZW50ZXJfbmFtZTogc2VsZWN0ZWRNaW5pc3RyeT8ub3JnTmFtZVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJyB8fCBjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cykge1xuICAgICAgY29uc3QgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmRlcGFydG1lbnREYXRhLmZpbmQoXG4gICAgICAgIGQgPT4gZC5pZGVudGlmaWVyID09PSBjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50c1xuICAgICAgKTtcblxuICAgICAgcmVxLmRlcGFydG1lbnRfaWQgPSBjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cyB8fCAnJztcbiAgICAgIHJlcS5kZXBhcnRtZW50X25hbWUgPSBkZXBhcnRtZW50TmFtZT8ub3JnTmFtZSB8fCAnJztcbiAgICB9XG5cblxuXG4gICAgLy8gUG9sbGluZyBBUElcbiAgICBjb25jYXQoXG4gICAgICBvZihudWxsKSwgICAgICAgICAgICAgIC8vIPCflKUgaW1tZWRpYXRlIGZpcnN0IGVtaXNzaW9uXG4gICAgICBpbnRlcnZhbCg1MDAwKSAgICAgICAgIC8vIOKPsSBzdWJzZXF1ZW50IHBvbGxpbmcgZXZlcnkgNXNcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zaGFyZWRTZXJ2aWNlLmdlbmVyYXRlUm9sZU1hcHBpbmcocmVxLCBmaWxlcykpLFxuICAgICAgICB0YXAoZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmZpcnN0QXBpUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IGRhdGE7IC8vIPCfkYggc3RvcmUgZmlyc3QgcmVzcG9uc2VcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaXJzdCBBUEkgcmVzcG9uc2U6JywgdGhpcy5maXJzdEFwaVJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VXaGlsZSgoZGF0YTogYW55KSA9PiBkYXRhPy5zdGF0dXMgIT09ICdDT01QTEVURUQnLCB0cnVlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3JvbGUgbWFwcGluZyBkYXRhLS0nLCBkYXRhKVxuICAgICAgICBpZiAodGhpcy5maXJzdEFwaVJlc3BvbnNlPy5pc19leGlzdGluZykge1xuICAgICAgICAgIHRoaXMuc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpOyAgIC8vIPCfm5Egc3RvcCBwb2xsaW5nXG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgICBkYXRhOiB7ZG9jdW1lbnRzOiB0aGlzLmRvY3VtZW50c30sXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcblxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5kZWxldGVSb2xlTWFwcGluZ0J5U3RhdGVBbmREZXBhcnRtZW50KHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlLm1pbmlzdHJ5LCB0aGlzLnJvbGVNYXBwaW5nRm9ybS52YWx1ZS5kZXBhcnRtZW50cykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRmluYWxSb2xlTWFwcGluZygpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IFtdXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUZpbmFsUm9sZU1hcHBpbmcoKVxuICAgICAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSB0aGlzLnJvdXRlci51cmw7XG5cbiAgICAgICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCk7XG4gICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID1cbiAgICAgICAgICAgICAgICBkYXRhPy5yb2xlX21hcHBpbmdzO1xuXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgICAgICdjYnBQbGFuRmluYWxPYmonLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FpL2xpc3QnXSwge1xuICAgICAgICAgICAgICAgIG9uU2FtZVVybE5hdmlnYXRpb246ICdyZWxvYWQnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcpIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZyA9IHRydWVcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YT8uc3RhdHVzID09PSAnQ09NUExFVEVEJykge1xuICAgICAgICAgIHRoaXMuc2hvd1dvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsncm9sZV9tYXBwaW5nX2dlbmVyYXRpb24nXSA9XG4gICAgICAgICAgICBkYXRhPy5yb2xlX21hcHBpbmdzO1xuXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAnY2JwUGxhbkZpbmFsT2JqJyxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDQlAgUGxhbiBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvbGlzdCddKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuXG4gIGdlbmVyYXRlRmluYWxSb2xlTWFwcGluZ1dpdGhTdHJlYW0oKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zb2xlLmxvZygncm9sZU1hcHBpbmdGb3JtJywgdGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgaWYgKHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuICAgICAgY29uc3QgY3VycmVudEZvcm1WYWx1ZXMgPSB0aGlzLnJvbGVNYXBwaW5nRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgbGV0IGZvcm1VcGxvYWREYXRhOiBhbnkgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgICAgLy8gZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdtaW5pc3RyeVR5cGUnLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeVR5cGUpO1xuICAgICAgLy8gZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdtaW5pc3RyeScsIGN1cnJlbnRGb3JtVmFsdWVzLm1pbmlzdHJ5KTtcbiAgICAgIC8vIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnc2VjdG9ycycsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRGb3JtVmFsdWVzLnNlY3RvcnMpKTtcbiAgICAgIC8vIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnZGVwYXJ0bWVudHMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50Rm9ybVZhbHVlcy5kZXBhcnRtZW50cykpO1xuICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdzdGF0ZV9jZW50ZXJfaWQnLCBjdXJyZW50Rm9ybVZhbHVlcy5taW5pc3RyeSB8fCAnJyk7XG4gICAgICBmb3JtVXBsb2FkRGF0YS5hcHBlbmQoJ3N0YXRlX2NlbnRlcl9uYW1lJywgY3VycmVudEZvcm1WYWx1ZXMubWluaXN0cnkgfHwgJycpO1xuXG4gICAgICBpZiAoY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMpIHtcbiAgICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdkZXBhcnRtZW50X2lkJywgY3VycmVudEZvcm1WYWx1ZXMuZGVwYXJ0bWVudHMgfHwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRGb3JtVmFsdWVzLmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICAgIGZvcm1VcGxvYWREYXRhLmFwcGVuZCgnaW5zdHJ1Y3Rpb24nLCBjdXJyZW50Rm9ybVZhbHVlcy5hZGRpdGlvbmFsRGV0YWlscyB8fCAnJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWxlOiBGaWxlID0gdGhpcy51cGxvYWRlZEZpbGUgfHwgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2ZpbGUnLCBmaWxlKVxuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgZm9ybVVwbG9hZERhdGEuYXBwZW5kKCdhZGRpdGlvbmFsX2RvY3VtZW50JywgZmlsZSk7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygndGhpcy5yb2xlTWFwcGluZ0Zvcm0nLCB0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIGNvbnNvbGUubG9nKCdmb3JtVXBsb2FkRGF0YS0tJywgZm9ybVVwbG9hZERhdGEpXG4gICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgZm9ybVVwbG9hZERhdGEuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3BhaXJbMF19OmAsIHBhaXJbMV0pO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ0Zvcm0gc3VibWl0dGVkOicsIGZvcm1EYXRhKTtcbiAgICAgIGxldCBzZWN0b3JzID0gQXJyYXkuaXNBcnJheShmb3JtRGF0YS5zZWN0b3JzKSA/IGZvcm1EYXRhLnNlY3RvcnMuam9pbignLCAnKSA6ICcnXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydzZWN0b3JzJ10gPSBmb3JtRGF0YS5zZWN0b3JzXG4gICAgICAvLyBTdWJtaXQgbG9naWMgaGVyZVxuICAgICAgbGV0IHJlcSA9IHtcbiAgICAgICAgXCJzdGF0ZV9jZW50ZXJfaWRcIjogZm9ybURhdGEubWluaXN0cnksXG4gICAgICAgIFwiaW5zdHJ1Y3Rpb25cIjogZm9ybURhdGEuYWRkaXRpb25hbERldGFpbHNcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnIHx8IGZvcm1EYXRhLmRlcGFydG1lbnRzKSB7XG4gICAgICAgIHJlcVsnZGVwYXJ0bWVudF9pZCddID0gZm9ybURhdGEuZGVwYXJ0bWVudHMgPyBmb3JtRGF0YS5kZXBhcnRtZW50cyA6ICcnXG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRzJ10gPSBmb3JtRGF0YS5kZXBhcnRtZW50cyA/IGZvcm1EYXRhLmRlcGFydG1lbnRzIDogJydcblxuXG4gICAgICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKHUgPT4gdS5pZGVudGlmaWVyID09PSBmb3JtRGF0YS5kZXBhcnRtZW50cyk7XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ2RlcGFydG1lbnRfbmFtZSddID0gZGVwYXJ0bWVudE5hbWVcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnYWRkaXRpb25hbERldGFpbHMnXSA9IGZvcm1EYXRhLmFkZGl0aW9uYWxEZXRhaWxzXG4gICAgICAgIGNvbnNvbGUubG9nKGRlcGFydG1lbnROYW1lKTtcblxuICAgICAgfVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnlUeXBlJ10gPSB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlXG5cbiAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgdGhpcy5mdWxsSnNvbiA9ICcnO1xuICAgICAgICB0aGlzLnBhcnNlZERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbMF07XG4gICAgICAgIHRoaXMucm9sZU1hcHBpbmdTZXJ2aWNlLmdlbmVyYXRlUm9sZU1hcHBpbmcoXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlIHx8IG51bGwsXG4gICAgICAgICAgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIGNodW5rOicsIGNodW5rLCAnVG90YWwgY2h1bmtzOicsIHRoaXMuY2h1bmtzLmxlbmd0aClcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHByb2Nlc3Npbmcgc3RhZ2UgYmFzZWQgb24gY2h1bmsgY291bnRcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvY2Vzc2luZ1N0YWdlKCk7XG5cbiAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIFVJXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgfSwgMCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyZWFtIHN0YXJ0ZWQnKVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzWzBdO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4gdGhpcy5vblN0cmVhbUVuZCgpLFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1N0cmVhbSBmYWlsZWQ6JywgZXJyKVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHJlYW1FcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NicFBsYW5GaW5hbE9iaicsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopKVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVQcm9jZXNzaW5nU3RhZ2UoKSB7XG4gICAgY29uc3QgY2h1bmtDb3VudCA9IHRoaXMuY2h1bmtzLmxlbmd0aDtcbiAgICBsZXQgc3RhZ2VJbmRleCA9IDA7XG5cbiAgICAvLyBNdWNoIHNsb3dlciBzdGFnZSBwcm9ncmVzc2lvbiAtIHN0YWdlcyBzdGF5IG11Y2ggbG9uZ2VyXG4gICAgaWYgKGNodW5rQ291bnQgPD0gOCkge1xuICAgICAgc3RhZ2VJbmRleCA9IDA7IC8vIEluaXRpYWxpemluZyAtIHN0YXlzIGZvciBmaXJzdCA4IGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAyMCkge1xuICAgICAgc3RhZ2VJbmRleCA9IDE7IC8vIEFuYWx5emluZyBjb21wZXRlbmN5IHJlcXVpcmVtZW50cyAtIDEyIGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAzNSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDI7IC8vIFByb2Nlc3Npbmcgd29yayBvcmRlciAtIDE1IGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSA1NSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDM7IC8vIEdlbmVyYXRpbmcgcm9sZSBtYXBwaW5ncyAtIDIwIGNodW5rc1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSA3NSkge1xuICAgICAgc3RhZ2VJbmRleCA9IDQ7IC8vIENvbXB1dGluZyBmaW5hbCByZWNvbW1lbmRhdGlvbnMgLSAyMCBjaHVua3NcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhZ2VJbmRleCA9IDU7IC8vIEZpbmFsaXppbmcgQ0JQIFBsYW4gLSA3NSsgY2h1bmtzXG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzW3N0YWdlSW5kZXhdO1xuICB9XG5cbiAgZ2V0UHJvZ3Jlc3NQZXJjZW50YWdlKCk6IG51bWJlciB7XG4gICAgY29uc3QgY2h1bmtDb3VudCA9IHRoaXMuY2h1bmtzLmxlbmd0aDtcbiAgICBpZiAoY2h1bmtDb3VudCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgICAvLyBNdWNoIHNsb3dlciBhbmQgc21vb3RoZXIgcHJvZ3Jlc3MgY2FsY3VsYXRpb25cbiAgICBsZXQgcGVyY2VudGFnZSA9IDA7XG5cbiAgICBpZiAoY2h1bmtDb3VudCA8PSAxNSkge1xuICAgICAgLy8gRmlyc3QgMTUgY2h1bmtzID0gMC0yNSUgKHZlcnkgc2xvdyBzdGFydClcbiAgICAgIHBlcmNlbnRhZ2UgPSAoY2h1bmtDb3VudCAvIDE1KSAqIDI1O1xuICAgIH0gZWxzZSBpZiAoY2h1bmtDb3VudCA8PSAzNSkge1xuICAgICAgLy8gTmV4dCAyMCBjaHVua3MgPSAyNS01MCUgKHNsb3cgZWFybHkgcHJvZ3Jlc3MpXG4gICAgICBwZXJjZW50YWdlID0gMjUgKyAoKGNodW5rQ291bnQgLSAxNSkgLyAyMCkgKiAyNTtcbiAgICB9IGVsc2UgaWYgKGNodW5rQ291bnQgPD0gNjApIHtcbiAgICAgIC8vIE5leHQgMjUgY2h1bmtzID0gNTAtNzUlIChzdGVhZHkgbWlkZGxlIHByb2dyZXNzKVxuICAgICAgcGVyY2VudGFnZSA9IDUwICsgKChjaHVua0NvdW50IC0gMzUpIC8gMjUpICogMjU7XG4gICAgfSBlbHNlIGlmIChjaHVua0NvdW50IDw9IDEwMCkge1xuICAgICAgLy8gTmV4dCA0MCBjaHVua3MgPSA3NS05MCUgKHNsb3dlciBmaW5hbCBhcHByb2FjaClcbiAgICAgIHBlcmNlbnRhZ2UgPSA3NSArICgoY2h1bmtDb3VudCAtIDYwKSAvIDQwKSAqIDE1O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCZXlvbmQgMTAwIGNodW5rcyA9IDkwLTk1JSAodmVyeSBzbG93IGZpbmFsIHByb2dyZXNzaW9uKVxuICAgICAgcGVyY2VudGFnZSA9IDkwICsgTWF0aC5taW4oKChjaHVua0NvdW50IC0gMTAwKSAvIDUwKSAqIDUsIDUpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLnJvdW5kKHBlcmNlbnRhZ2UpO1xuICB9XG5cbiAgb25TdHJlYW1FbmQoKSB7XG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0NvbXBsZXRpbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLic7XG5cbiAgICAvLyBTaG93IDEwMCUgY29tcGxldGlvbiBicmllZmx5IGJlZm9yZSBmaW5pc2hpbmdcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZnVsbEpzb24gPSB0aGlzLmNodW5rcy5qb2luKCcnKTtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLmZ1bGxKc29uLnJlcGxhY2UoL15gYGBqc29uXFxuLywgJycpLnJlcGxhY2UoL2BgYCQvLCAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGNsZWFuZWQpO1xuICAgICAgICBjb25zb2xlLmxvZygnUGFyc2VkIGRhdGE6JywgdGhpcy5wYXJzZWREYXRhKTtcblxuICAgICAgICAvLyBIYW5kbGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydyb2xlX21hcHBpbmdfZ2VuZXJhdGlvbiddID0gdGhpcy5wYXJzZWREYXRhO1xuICAgICAgICB0aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKTtcblxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NCUCBQbGFuIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0pTT04gcGFyc2UgZXJyb3I6JywgZSk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBnZW5lcmF0ZSBDQlAgUGxhbi4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHByb2dyZXNzIHBlcmNlbnRhZ2UgaW5jbHVkaW5nIGNvbXBsZXRpb24gc3RhdGVcbiAgZ2V0RGlzcGxheVByb2dyZXNzUGVyY2VudGFnZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPT09ICdDb21wbGV0aW5nIENCUCBQbGFuIGdlbmVyYXRpb24uLi4nKSB7XG4gICAgICByZXR1cm4gMTAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRQcm9ncmVzc1BlcmNlbnRhZ2UoKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBzdHJlYW1pbmcgZXJyb3JzLCBlc3BlY2lhbGx5IFwiUm9sZSBtYXBwaW5nIGFscmVhZHkgZXhpc3RzXCJcbiAgaGFuZGxlU3RyZWFtRXJyb3IoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnRXJyb3IgZGV0YWlsczonLCBlcnIpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgXCJSb2xlIG1hcHBpbmcgYWxyZWFkeSBleGlzdHNcIiBlcnJvclxuICAgIGlmIChlcnI/LmlzRXhpc3RpbmdSb2xlTWFwcGluZyB8fCAoZXJyPy5kZXRhaWwgJiYgZXJyLmRldGFpbC5pbmNsdWRlcygnUm9sZSBtYXBwaW5nIGFscmVhZHkgZXhpc3RzJykpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnTG9hZGluZyBleGlzdGluZyByb2xlIG1hcHBpbmcuLi4nO1xuXG4gICAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBHZXQgcm9sZSBtYXBwaW5nIEFQSSBiYXNlZCBvbiBtaW5pc3RyeSB0eXBlXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMucm9sZU1hcHBpbmdGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RhdGVDZW50ZXIgPSBmb3JtRGF0YS5taW5pc3RyeTtcbiAgICAgIGNvbnN0IGRlcGFydG1lbnRJZCA9IGZvcm1EYXRhLmRlcGFydG1lbnRzO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSA9PT0gJ3N0YXRlJyAmJiBkZXBhcnRtZW50SWQpIHtcbiAgICAgICAgLy8gQ2FsbCBHZXQgcm9sZSBtYXBwaW5nIGJ5IHN0YXRlIGNlbnRlciBhbmQgZGVwYXJ0bWVudFxuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyQW5kRGVwYXJ0bWVudChzdGF0ZUNlbnRlciwgZGVwYXJ0bWVudElkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFeGlzdGluZyByb2xlIG1hcHBpbmcgbG9hZGVkOicsIHJlcyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPSByZXM7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0V4aXN0aW5nIHJvbGUgbWFwcGluZyBsb2FkZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBleGlzdGluZyByb2xlIG1hcHBpbmc6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGV4aXN0aW5nIHJvbGUgbWFwcGluZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENhbGwgR2V0IHJvbGUgbWFwcGluZyBieSBzdGF0ZSBjZW50ZXIgb25seVxuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Um9sZU1hcHBpbmdCeVN0YXRlQ2VudGVyKHN0YXRlQ2VudGVyKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFeGlzdGluZyByb2xlIG1hcHBpbmcgbG9hZGVkOicsIHJlcyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmpbJ3JvbGVfbWFwcGluZ19nZW5lcmF0aW9uJ10gPSByZXM7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0V4aXN0aW5nIHJvbGUgbWFwcGluZyBsb2FkZWQgc3VjY2Vzc2Z1bGx5IScsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBleGlzdGluZyByb2xlIG1hcHBpbmc6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0ZhaWxlZCB0byBsb2FkIGV4aXN0aW5nIHJvbGUgbWFwcGluZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIG90aGVyIHN0cmVhbWluZyBlcnJvcnNcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyPy5kZXRhaWwgfHwgJ1N0cmVhbSBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uJztcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvck1lc3NhZ2UsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVtb3ZlRmlsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnVwbG9hZGVkRmlsZSB8fCB0aGlzLnVwbG9hZGVkRmlsZS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBvbmUgZmlsZSBhdCB0aGUgZ2l2ZW4gaW5kZXhcbiAgICB0aGlzLnVwbG9hZGVkRmlsZS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gVXBkYXRlIGZvcm0gY29udHJvbCB2YWx1ZVxuICAgIHRoaXMucm9sZU1hcHBpbmdGb3JtLmdldCgnYWRkaXRpb25hbF9kb2N1bWVudCcpPy5zZXRWYWx1ZSh0aGlzLnVwbG9hZGVkRmlsZSk7XG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0uZ2V0KCdhZGRpdGlvbmFsX2RvY3VtZW50Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBpZiBubyBmaWxlcyBsZWZ0XG4gICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICcnO1xuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkRG9jJykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuXG4gIGdldFVzZXJQcm9maWxlRGF0YShyZXF1ZXN0ZWRUeXBlPzogc3RyaW5nLCBkb25lPzogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2RhdGEtLScsIGRhdGEpXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlclByb2ZpbGUnLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgIHRoaXMubG9naW5Vc2VyT3JnSWRzID0gZGF0YT8ub3JnYW5pemF0aW9uX2lkc1xuICAgICAgLy8gSWdub3JlIHN0YWxlIHJlc3BvbnNlcyBmcm9tIGEgdHlwZSB0aGF0IHdhcyBjaGFuZ2VkIGFnYWluIGJlZm9yZSB0aGlzIG9uZSByZXR1cm5lZFxuICAgICAgaWYgKHJlcXVlc3RlZFR5cGUgJiYgcmVxdWVzdGVkVHlwZSAhPT0gdGhpcy5zZWxlY3RlZE1pbmlzdHJ5VHlwZSkge1xuICAgICAgICBkb25lPy4oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGxldCBmaWx0ZXJlZE1pbmlzdHJ5RGF0YSA9IFtdXG4gICAgICB0aGlzLm1pbmlzdHJ5RnVsbERhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2luVXNlck9yZ0lkcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpID4gLTEgJiYgaXRlbT8uc2JPcmdUeXBlID09PSAocmVxdWVzdGVkVHlwZSB8fCB0aGlzLnNlbGVjdGVkTWluaXN0cnlUeXBlKSkge1xuICAgICAgICAgIGZpbHRlcmVkTWluaXN0cnlEYXRhLnB1c2goaXRlbSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgdGhpcy5taW5pc3RyeURhdGEgPSBmaWx0ZXJlZE1pbmlzdHJ5RGF0YVxuICAgICAgdGhpcy5vcmlnaW5hbE1pbmlzdHJ5RGF0YSA9IGZpbHRlcmVkTWluaXN0cnlEYXRhXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IGZpbHRlcmVkTWluaXN0cnlEYXRhO1xuICAgICAgZG9uZT8uKClcbiAgICB9KVxuICB9XG5cbiAgb25PcGVuZWQob3BlbmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSBvcGVuZWQ7XG4gIH1cblxuICBvbk9wZW5lZERlcGFydG1lbnQob3BlbmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kZXBhcnRtZW50UGFuZWxPcGVuID0gb3BlbmVkXG4gIH1cblxuICBmaWx0ZXJEYXRhKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHMgPSBldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLm1pbmlzdHJ5RGF0YS5maWx0ZXIoeCA9PlxuICAgICAgICB4Lm9yZ05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLm1pbmlzdHJ5RGF0YVxuICAgIH1cblxuICB9XG5cbiAgZmlsdGVyRGVwYXJ0bWVudERhdGEoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSkge1xuICAgICAgY29uc3QgcyA9IGV2ZW50LnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSB0aGlzLmRlcGFydG1lbnREYXRhLmZpbHRlcih4ID0+XG4gICAgICAgIHgub3JnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudExpc3QgPSB0aGlzLmRlcGFydG1lbnREYXRhXG4gICAgfVxuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTWluaXN0cnlJZCA9ICcnXG4gICAgdGhpcy5yb2xlTWFwcGluZ0Zvcm0ucmVzZXQoKVxuICB9XG5cbiAgb25EZXBhcnRtZW50Q2hhbmdlKCkge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5yb2xlTWFwcGluZ0Zvcm0udmFsdWU7XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gZm9ybURhdGEuZGVwYXJ0bWVudHMgPyBmb3JtRGF0YS5kZXBhcnRtZW50cyA6ICcnXG4gICAgdGhpcy5jYnBGaW5hbE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDQlBQbGFuTG9jYWxTdG9yYWdlKClcbiAgICBpZiAodGhpcy5jYnBGaW5hbE9iaiAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeSAmJiB0aGlzLmNicEZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlKSB7XG4gICAgICB0aGlzLmNicEZpbmFsT2JqWydkZXBhcnRtZW50cyddID0gZm9ybURhdGEuZGVwYXJ0bWVudHMgPyBmb3JtRGF0YS5kZXBhcnRtZW50cyA6ICcnXG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5pc3RyeSA9IHRoaXMubWluaXN0cnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkZW50aWZpZXIgPT09IGZvcm1EYXRhLm1pbmlzdHJ5KTtcblxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnbWluaXN0cnknXSA9IHNlbGVjdGVkTWluaXN0cnlcblxuICAgIGNvbnN0IGRlcGFydG1lbnROYW1lID0gdGhpcy5kZXBhcnRtZW50RGF0YS5maW5kKHUgPT4gdS5pZGVudGlmaWVyID09PSBmb3JtRGF0YS5kZXBhcnRtZW50cyk7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9ialsnZGVwYXJ0bWVudF9uYW1lJ10gPSBkZXBhcnRtZW50TmFtZT8ub3JnTmFtZVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYnBQbGFuRmluYWxPYmonLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKSlcbiAgICB0aGlzLmdldFVwbG9hZGVkRG9jdW1lbnRzKClcbiAgfVxuXG4gICBnb1RvVXBsb2FkRG9jdW1lbnQoKSB7XG4gICBcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9haS91cGxvYWQtZG9jdW1lbnRzJ10pO1xuICAgIFxuICB9XG5cblxuXG59XG5cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPCEtLSA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWQgYXMgUERGXCIgKGNsaWNrKT1cImRvd25sb2FkUERGKClcIiAvPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIiAqbmdJZj1cImxvZ2luXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uLW1lZGl1bVwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwiaGlnaGxpZ2h0LWFpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+aUdPVCBBSSBEcml2ZW4gQ0JQPC9zcGFuPlxuICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICA8cD5CdWlsZCBZb3VyIENhcGFjaXR5IFdpdGggQ3VzdG9taXplZCBSb2xlIE1hcHBpbmc8L3A+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJsb2dpblwiIGNsYXNzPVwibXQtMlwiIFtmb3JtR3JvdXBdPVwicm9sZU1hcHBpbmdGb3JtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXBhdG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+LS0+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPi0tPlxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPHA+Q2hvb3NlIFlvdXIgRGVwYXJ0bWVudDwvcD4tLT5cbiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgPC9kaXY+LS0+XG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgPC9kaXY+LS0+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1ncm91cCBtdC00XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cInJhZGlvLWJ0bi1ncm91cFwiIGZvcm1Db250cm9sTmFtZT1cIm1pbmlzdHJ5VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGVcIiAoY2hhbmdlKT1cIm9uTWluaXN0cnlUeXBlQ2hhbmdlKCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIExlZnQgcmFkaW8gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cIm1pbmlzdHJ5XCIgY2xhc3M9XCJyYWRpby1idG4gbGVmdC1yYWRpb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYWRpby1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwicmFkaW8taWNvblwiIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnY2VudGVyJz8gJ2NoZWNrZWQtbGFiZWwnOicnXCI+ZG9tYWluPC9tYXQtaWNvbj4gIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknPyAnY2hlY2tlZC1sYWJlbCc6JydcIj5DZW50cmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IHJhZGlvIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJzdGF0ZVwiIGNsYXNzPVwicmFkaW8tYnRuIHJpZ2h0LXJhZGlvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhZGlvLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJyYWRpby1pY29uXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZSc/ICdjaGVja2VkLWxhYmVsJzonJ1wiPmxvY2F0aW9uX29uPC9tYXQtaWNvbj4gIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnc3RhdGUnPyAnY2hlY2tlZC1sYWJlbCc6JydcIj5TdGF0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknXCI+TWluaXN0cnk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRNaW5pc3RyeVR5cGUgPT09ICdzdGF0ZSdcIj5TdGF0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlYXJjaC1ib3gtd2l0aC1zZWxlY3RcIj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogMjVweDsgcGFkZGluZzogMCAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjO3dpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGFuZWxDbGFzcz1cInNlbGVjdC13aXRoLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkTWluaXN0cnlUeXBlID09PSAnbWluaXN0cnknID8gJ1NlbGVjdCBNaW5pc3RyeS8gRGVwYXJ0bWVudCc6J1NlbGVjdCBTdGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25NaW5pc3RyeUNoYW5nZSgkZXZlbnQpXCIgZm9ybUNvbnRyb2xOYW1lPVwibWluaXN0cnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYmFja2dyb3VuZDogd2hpdGU7IHdpZHRoOjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuZWRDaGFuZ2UpPVwib25PcGVuZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiICpuZ0lmPVwicGFuZWxPcGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgKGlucHV0KT1cImZpbHRlckRhdGEoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFtzZWxlY3RlZF09XCJzZWxlY3RlZE1pbmlzdHJ5SWQgPT09IGl0ZW0/LmlkZW50aWZpZXJcIiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbT8uaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkTGlzdFwiPnt7aXRlbT8ub3JnTmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZGVwYXJ0bWVudERhdGE/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+RGVwYXJ0bWVudDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDI1cHg7IHBhZGRpbmc6IDAgMTJweDtib3JkZXI6IDFweCBzb2xpZCAjY2NjO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGFuZWxDbGFzcz1cInNlbGVjdC13aXRoLXNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERlcGFydG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRzXCIgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBiYWNrZ3JvdW5kOiB3aGl0ZTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25EZXBhcnRtZW50Q2hhbmdlKClcIiAob3BlbmVkQ2hhbmdlKT1cIm9uT3BlbmVkRGVwYXJ0bWVudCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgKm5nSWY9XCJkZXBhcnRtZW50UGFuZWxPcGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgKGlucHV0KT1cImZpbHRlckRlcGFydG1lbnREYXRhKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0/LmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZERlcGFydG1lbnRMaXN0XCI+e3tpdGVtPy5vcmdOYW1lfX08L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPlNlY3RvcjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIHN0eWxlPVwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDI1cHg7IHBhZGRpbmc6IDAgMTJweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU2VjdG9yXCIgbXVsdGlwbGUgZm9ybUNvbnRyb2xOYW1lPVwic2VjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJhY2tncm91bmQ6IHdoaXRlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW0/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWN0b3JEYXRhXCI+e3tpdGVtPy52YWx1ZX19PC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCI1XCIgcGxhY2Vob2xkZXI9XCJBZGRpdGlvbmFsIGRldGFpbHNcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRpdGlvbmFsRGV0YWlsc1wiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cImRpc2FibGVVcGxvYWREb2N1bWVudCA/ICdidG4tYWN0aXZlLXByaW1hcnktZGlzYWJsZSc6J2J0bi1hY3RpdmUtcHJpbWFyeSdcIiBjbGFzcz1cIlwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlVXBsb2FkRG9jdW1lbnRcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZ29Ub1VwbG9hZERvY3VtZW50KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnVwbG9hZDwvbWF0LWljb24+IE1hbmFnZSBEb2N1bWVudHNcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSAqbmdJZj1cInJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJ1wiIC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtNCBzZWN0aW9uXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5VcGxvYWQgRG9jdW1lbnQgKFBERik8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInVwbG9hZERvY1wiIGNsYXNzPVwiZmlsZS11cGxvYWQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtaWNvblwiPvCfk448L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF1cGxvYWRlZEZpbGUgfHwgdXBsb2FkZWRGaWxlLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgdXAgdG8gMyBmaWxlcyAoUERGL1RYVClcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRlZEZpbGU/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImZpbGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiZmlsZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZW1vdmUtZmlsZS1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUZpbGUoaSk7JGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInVwbG9hZERvY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgICAgICAgICAgICAvPiAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmaWxlLXVwbG9hZC1oaW50XCI+TWF4IGZpbGUgc2l6ZToge3ttYXhGaWxlU2l6ZU1CfX1NQjwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidXBsb2FkRG9jXCIgbXVsdGlwbGUgdHlwZT1cImZpbGVcIiAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmRvYywuZG9jeCwueGxzLC54bHN4LC50eHRcIiBjbGFzcz1cImZpbGUtdXBsb2FkLWlucHV0XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkRXJyb3JcIiBjbGFzcz1cImVycm9yXCI+e3sgdXBsb2FkRXJyb3IgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwhLS0gKm5nSWY9XCJyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdtaW5pc3RyeVR5cGUnKT8udmFsdWUgPT09ICdzdGF0ZSdcIiAtLT5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+RGlzY2xhaW1lcjogUGxlYXNlIGRvIG5vdCB1cGxvYWQgYW55IGNvbmZpZGVudGlhbCBkb2N1bWVudHMuIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJkb2N1bWVudHM/Lmxlbmd0aCA8IDEgJiYgIShyb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQpICB8fCBzaG93V29ya0FsbG9jYXRpb25PcmRlckRvY3VtZW50TWlzc2luZ1wiPlxuICAgICAgICAgICAgICAgIDxwPjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAuODc1cmVtO2ZvbnQtd2VpZ2h0OiBib2xkO1wiPk5vdGU6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiPlBsZWFzZSB1cGxvYWQgdGhlIFdvcmsgQWxsb2NhdGlvbiBPcmRlciBkb2N1bWVudCB0byBnZW5lcmF0ZSB0aGUgQ2FwYWNpdHkgQnVpbGRpbmcgUGxhbiAoQ0JQKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJkb2N1bWVudHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIndvcmtBbGxvY2F0aW9uT3JkZXJEb2N1bWVudE1pc3NpbmdcIj48c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogLjg3NXJlbTtmb250LXdlaWdodDogYm9sZDtcIj5Ob3RlOlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIj5QbGVhc2UgdXBsb2FkIHRoZSBXb3JrIEFsbG9jYXRpb24gT3JkZXIgZG9jdW1lbnQgdG8gZ2VuZXJhdGUgdGhlIENhcGFjaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBQbGFuIChDQlApPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyb2xlTWFwcGluZ0Zvcm0/LmludmFsaWQgfHwgKHJvbGVNYXBwaW5nRm9ybS5nZXQoJ21pbmlzdHJ5VHlwZScpPy52YWx1ZSA9PT0gJ3N0YXRlJyAmJiAhcm9sZU1hcHBpbmdGb3JtLmdldCgnZGVwYXJ0bWVudHMnKT8udmFsdWUpIHx8IGxvYWRpbmcgfHwgZG9jdW1lbnRzPy5sZW5ndGggPCAxIFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvbGVNYXBwaW5nRm9ybT8uaW52YWxpZCB8fCAocm9sZU1hcHBpbmdGb3JtLmdldCgnbWluaXN0cnlUeXBlJyk/LnZhbHVlID09PSAnc3RhdGUnICYmICFyb2xlTWFwcGluZ0Zvcm0uZ2V0KCdkZXBhcnRtZW50cycpPy52YWx1ZSkgfHwgbG9hZGluZyB8fCBkb2N1bWVudHM/Lmxlbmd0aCA8IDEgPyAnYnRuLWRpc2FibGUnOididG4tYWN0aXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBbdmFsdWVdPVwibG9hZGluZyA/ICdHZW5lcmF0aW5nIENCUC4uLicgOiAnR2VuZXJhdGUgQ0JQJ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdlbmVyYXRlUm9sZU1hcHBpbmcoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZD5cblxuPC9kaXY+XG48IS0tIDxkaXYgKm5nSWY9XCIhbG9naW5cIj5cbiAgICAgICAgPGFwcC1sb2dpbiAoc3VjY2Vzcyk9XCJsb2dpblN0YXR1cygkZXZlbnQpXCI+PC9hcHAtbG9naW4+XG4gICAgPC9kaXY+IC0tPlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImFwaUxvYWRpbmdcIj5cbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGVudFwiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHQgbXQtM1wiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYWluLW1lc3NhZ2VcIj57eyBjdXJyZW50UHJvY2Vzc2luZ1N0YWdlIHx8ICdQcmVwYXJpbmcgQ0JQIFBsYW4gZ2VuZXJhdGlvbi4uLicgfX08L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1pbmRpY2F0b3JcIiAqbmdJZj1cImNodW5rcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW3N0eWxlLndpZHRoLiVdPVwiZ2V0RGlzcGxheVByb2dyZXNzUGVyY2VudGFnZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInByb2dyZXNzLXRleHRcIj57eyBnZXREaXNwbGF5UHJvZ3Jlc3NQZXJjZW50YWdlKCkgfX0lIENvbXBsZXRlPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0aW1lLWVzdGltYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIFJlYWwtdGltZSBzdHJlYW1pbmcgaW4gcHJvZ3Jlc3MuIFRoaXMgbWF5IHRha2UgMi0zIG1pbnV0ZXMuXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==