master-control 0.4.56 → 0.4.58

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.
@@ -1266,9 +1266,10 @@ export class MedialQuestionsComponent {
1266
1266
  singleQuestion['isShowQuestionInUI'] = true;
1267
1267
  }
1268
1268
  // Disable the question if it has a default value
1269
+ let isEnableDefaultQuestions = this.defaultValues()['isEnableDefaultQuestions'] ? true : false;
1269
1270
  const questionId = singleQuestion['questionId']?.toString();
1270
1271
  const hasDefaultValue = !this.checkIfValueIsEmpty(this.defaultValues()) && Object.keys(this.defaultValues()).includes(questionId);
1271
- if (hasDefaultValue && singleQuestion['field']) {
1272
+ if (hasDefaultValue && singleQuestion['field'] && !isEnableDefaultQuestions) {
1272
1273
  singleQuestion['field'] = {
1273
1274
  ...singleQuestion['field'],
1274
1275
  isDisable: true
@@ -2654,4 +2655,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2654
2655
  type: ViewChild,
2655
2656
  args: ['addressInput']
2656
2657
  }] } });
2657
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQXlCLEtBQUssRUFBMEMsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVwTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7OztBQXlCOUUsTUFBTSxPQUFPLHdCQUF3QjtJQXFJaEI7SUFBdUI7SUFwSWhDLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDekQsU0FBUyxHQUFTLEtBQUssRUFBTyxDQUFDLENBQUMsMkJBQTJCO0lBQ2xELGlCQUFpQixDQUFpQjtJQUMzQyxzQkFBc0IsR0FBRyxLQUFLLEVBQU8sQ0FBQztJQUN0Qyx5QkFBeUIsR0FBUyxLQUFLLEVBQU8sQ0FBQztJQUMvQyxhQUFhLEdBQVMsS0FBSyxFQUFPLENBQUM7SUFDbkMsVUFBVSxHQUFRLEtBQUssRUFBTyxDQUFDO0lBQy9CLFVBQVUsR0FBUyxFQUFFLENBQUM7SUFDdEIsOEJBQThCLEdBQVMsSUFBSSxDQUFDO0lBQzVDLDJCQUEyQixHQUFTLEVBQUUsQ0FBQztJQUNaLFlBQVksQ0FBZ0M7SUFDL0QsWUFBWSxDQUFtQztJQUN2RCxxQkFBcUIsR0FBUSxFQUFFLENBQUM7SUFDaEMscUJBQXFCLEdBQVEsRUFBRSxDQUFDO0lBQ2hDLEtBQUssR0FBUSxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7SUFDbkMsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUN2QixrQkFBa0IsR0FBUSxFQUFFLENBQUM7SUFDN0IsbUJBQW1CLEdBQVEsRUFBRSxDQUFDO0lBQzlCLE1BQU0sR0FBOEIsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZFLFFBQVEsQ0FBTTtJQUNkLFNBQVMsQ0FBTTtJQUNmLElBQUksQ0FBTTtJQUNWLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFHakIsZUFBZSxHQUFRO1FBQ3JCLDBCQUEwQixFQUFFLE1BQU07UUFDbEMsd0JBQXdCLEVBQUUsQ0FBQztRQUMzQiwyQkFBMkIsRUFBRSxDQUFDO1FBQzlCLDJCQUEyQixFQUFFLENBQUM7S0FDL0IsQ0FBQztJQUNGLGNBQWMsR0FBUSxFQUFFLENBQUM7SUFDekIsNkJBQTZCLEdBQVEsRUFBRSxDQUFDO0lBQ3hDLHdCQUF3QixHQUFRLEVBQUUsQ0FBQztJQUNuQywwQkFBMEIsR0FBUSxFQUFFLENBQUM7SUFDckMsY0FBYyxHQUFRLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNyRSwrQkFBK0IsR0FBUTtRQUNyQztZQUNFLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNEO1lBQ0UsS0FBSyxFQUFFLE1BQU07WUFDYixLQUFLLEVBQUUsTUFBTTtTQUNkO0tBQ0YsQ0FBQztJQUNGLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsa0JBQWtCLEdBQVUsRUFBRSxDQUFDO0lBQy9CLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsQixhQUFhLENBQU07SUFDbkIsaUJBQWlCLEdBQVM7UUFDUixjQUFjLEVBQUU7WUFDWixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixjQUFjLEVBQUUsSUFBSTtZQUNwQixVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixPQUFPLEVBQUUsSUFBSTtZQUNiLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLDBCQUEwQixFQUFFLElBQUk7WUFDaEMsT0FBTyxFQUFFLElBQUk7WUFDYixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixZQUFZLEVBQUUsSUFBSTtZQUNsQiw0QkFBNEIsRUFBRSxJQUFJO1lBQ2xDLDBCQUEwQixFQUFFLElBQUk7WUFDaEMsK0JBQStCLEVBQUUsSUFBSTtZQUNyQywrQkFBK0IsRUFBRSxJQUFJO1lBQ3JDLGlDQUFpQyxFQUFFLElBQUk7WUFDdkMsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxhQUFhLEVBQUUsSUFBSTtZQUNuQixlQUFlLEVBQUUsa0NBQWtDO1lBQ25ELGFBQWEsRUFBRSxPQUFPO1lBQ3RCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsV0FBVyxFQUFFLElBQUk7WUFDakIsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7U0FDbkI7UUFDRCxXQUFXLEVBQUUsUUFBUTtRQUNyQixPQUFPLEVBQUUsWUFBWTtRQUNyQixhQUFhLEVBQUUsSUFBSTtRQUNuQixRQUFRLEVBQUUsa0NBQWtDO1FBQzVDLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLFlBQVksRUFBRTtZQUNWLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLDRCQUE0QjtZQUMvQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsU0FBUyxFQUFFLElBQUk7WUFDZixnQkFBZ0IsRUFBRSxFQUFFO1NBQ3ZCO1FBQ0QsU0FBUyxFQUFFLEVBQUU7UUFDYixVQUFVLEVBQUUsUUFBUTtRQUNwQixPQUFPLEVBQUUsSUFBSTtRQUNiLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFO1lBQ1YsUUFBUSxFQUFFLEVBQUU7U0FDZjtRQUNELGFBQWEsRUFBRSxJQUFJO1FBQ25CLGFBQWEsRUFBRSxJQUFJO1FBQ25CLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsYUFBYSxFQUFFLFFBQVE7S0FDMUIsQ0FBQztJQUNoQixXQUFXLEdBQWdCLElBQUksQ0FBQztJQUVoQyw0QkFBNEI7SUFDNUIsV0FBVyxHQUF3RCxFQUFFLENBQUM7SUFDdEUsWUFBWSxHQUErQixFQUFFLENBQUM7SUFDOUMsWUFBbUIsTUFBYyxFQUFTLGFBQTZCO1FBQXBELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNELENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFDRSxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsSCxDQUFDLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUM1SCxDQUFDO1lBQ0QsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixHQUFHO3dCQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ2xCLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUztxQkFDcEIsQ0FBQztvQkFDRixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEcsSUFBRyxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV6RCxnREFBZ0Q7UUFDaEQsaUVBQWlFO1FBQ2pFLHFEQUFxRDtRQUNyRCxpREFBaUQ7UUFDakQsc0JBQXNCO1FBQ3RCLHVGQUF1RjtRQUN2RixtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLG9GQUFvRjtRQUNwRixtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLHVGQUF1RjtRQUN2RixtQkFBbUI7UUFDbkIsVUFBVTtRQUNWLFVBQVU7UUFDVixNQUFNO1FBQ04sTUFBTTtJQUNSLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FDckQsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQ2hDO1lBQ0UsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ2xCLHFCQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtZQUN4QyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQztTQUM5RCxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtTQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFdEMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUU7WUFDN0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQ2hDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQXFDO1FBQ2hFLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUN6QyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZTtRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN6RCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHO3dCQUNaLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO3dCQUNuQixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtxQkFDcEIsQ0FBQztvQkFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQ1QsdURBQXVELEdBQUcsTUFBTSxDQUNqRSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQVU7UUFDNUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFFakMseUJBQXlCO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsRUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ25DLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RCxPQUFPO1FBQ1QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxJQUNFLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDMUMsQ0FBQztnQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQix3REFBd0Q7UUFDeEQsd0NBQXdDO1FBRXhDLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3RCxPQUFPLENBQUMsbUJBQW1CLENBQ3pCO1lBQ0UsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDbkIsRUFDRCxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QixJQUNFLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO2dCQUNwRCxXQUFXLEVBQ1gsQ0FBQztnQkFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDekQsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO29CQUM3QixTQUFTLEVBQUUsVUFBVSxDQUFDLHFCQUFxQixDQUFDLFNBQVM7b0JBQ3JELGNBQWMsRUFBRSxVQUFVLENBQUMscUJBQXFCLENBQUMsY0FBYztvQkFDL0QsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2lCQUNwQyxDQUFDLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFlO1FBQzNCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ3pDLGVBQWUsQ0FDSSxDQUFDO1FBQ3RCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzlDLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDbEQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FDOUIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxVQUFVLENBQ2hCO1lBQ0UsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzVCLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztTQUMxQyxFQUNELENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2hCLElBQUksTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDbEUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUU1QyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztvQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7b0JBRXBCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVztRQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsK0JBQStCLENBQUMsVUFBZ0I7UUFDOUMsSUFBRyxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSyxXQUFXLElBQUksVUFBVSxDQUFDLHNCQUFzQixDQUFDLEtBQU0sZUFBZSxFQUFFLENBQUM7WUFDakgsSUFBSSxDQUFDLDhCQUE4QixHQUFHLFVBQVUsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVJLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW9CLEVBQUUsRUFBRTtnQkFDNUUsSUFBSSxDQUFDLCtCQUErQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUN6VCxJQUFJLFdBQVcsR0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9HLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFlLEVBQUUsZUFBd0IsRUFBRSxFQUFFO2dCQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN4SCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQXFCLEVBQUUscUJBQThCLEVBQUUsRUFBRTt3QkFDekosSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUM1QyxJQUFHLGVBQWUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUkscUJBQXFCLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNuTCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFDakMsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBRXhDLElBQUksU0FBUyxHQUFTLEtBQUssQ0FBQztRQUM1QixJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxFQUFHLENBQUM7WUFDbkYsSUFBSSw2QkFBNkIsR0FBVSxjQUFjLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDL0YsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksZUFBZSxHQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO2dCQUMzRCxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDL0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFDcEQsQ0FBQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxrQkFBdUIsRUFBRSxFQUFFO3dCQUM1RCxJQUFJLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDbEUsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUN4QyxDQUFDLGNBQW1CLEVBQUUsRUFBRTtnQ0FDdEIsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztvQ0FDbEQsY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGNBQWMsQ0FDN0MsY0FBYyxDQUNmLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQ0FDMUIsQ0FBQztnQ0FDRCxjQUFjLENBQUMsY0FBYyxDQUFDO29DQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0NBRXJELGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dDQUV4RCxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO29DQUNyRCxjQUFjLENBQUMsYUFBYSxDQUFDO3dDQUMzQixvSEFBb0gsQ0FBQztnQ0FDekgsQ0FBQztnQ0FDRCxvRUFBb0U7Z0NBQ3BFLDRNQUE0TTtnQ0FDNU0sSUFBSTtnQ0FDSixJQUNFLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO29DQUM3QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQ25DLEVBQ0QsQ0FBQztvQ0FDRCxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQ3hDLENBQUMseUJBQThCLEVBQUUsRUFBRTt3Q0FDakMsSUFBSSxrQkFBa0IsR0FBUSxrQkFBa0IsQ0FDOUMsY0FBYyxDQUNmLENBQUMsTUFBTSxDQUNOLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDZCxNQUFNLENBQUMsWUFBWSxDQUFDOzRDQUNwQix5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUM5QyxDQUFDO3dDQUNGLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDOzRDQUNsQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7Z0RBQ3BDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUM7d0NBQ3JELENBQUM7b0NBQ0gsQ0FBQyxDQUNGLENBQUM7Z0NBQ0osQ0FBQztnQ0FFRCxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQ0FDbEQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7d0NBQ3ZELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25ELEVBQ0QsQ0FBQzt3Q0FDRCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQ2xCLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FDN0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFOzRDQUNuQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxFQUNELENBQUM7Z0RBQ0QsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FDckMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FBQzs0Q0FDSixDQUFDO3dDQUNILENBQUMsQ0FBQyxDQUFDO29DQUNMLENBQUM7Z0NBQ0gsQ0FBQztnQ0FFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO29DQUNwRCxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dDQUM3QyxDQUFDO2dDQUVELGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDakQsQ0FBQyxDQUNGLENBQUM7NEJBRUYsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0NBQzNELFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQ0FDdkMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUM7b0NBQzlDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxRQUFRLENBQ2pDLGNBQWMsQ0FDZixDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0NBQzlCLENBQUM7Z0NBRUQsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQ0FDaEQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNyRCxXQUFXLEVBQUUsUUFBUTt3Q0FDckIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBQ0QsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQ0FDaEQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNyRCxXQUFXLEVBQUUsUUFBUTt3Q0FDckIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBQ0QsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQ0FDL0MsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNwRCxXQUFXLEVBQUUsVUFBVTt3Q0FDdkIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBRUQsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssYUFBYSxFQUFFLENBQUM7b0NBQy9DLElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssYUFBYSxFQUFFLENBQUM7d0NBQ3ZELDhEQUE4RDt3Q0FDOUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3Q0FDOUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQzs0Q0FDNUIsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQzs0Q0FDM0MsYUFBYSxFQUFFLEdBQUc7eUNBQ25CLENBQUMsQ0FBQztvQ0FDTCxDQUFDO29DQUNELFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7b0NBQzlCLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQzVCLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0NBQzNDLGFBQWEsRUFBRSxHQUFHO3FDQUNuQixDQUFDLENBQUM7Z0NBQ0wsQ0FBQztnQ0FFRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGNBQWMsRUFBRSxDQUFDO29DQUN4RCxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFDO2dDQUN6QyxDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDOzRCQUVILGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDckMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO3dCQUNKLENBQUM7d0JBRUQsSUFBSSxrQkFBa0IsR0FBUSxFQUFFLENBQUM7d0JBQ2pDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTs0QkFDbkMsSUFBSSxXQUFXLEdBQVEsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQzFELENBQUM7NEJBQ0YsSUFBSSxHQUFHLEdBQVE7Z0NBQ2IsSUFBSSxFQUFFLEtBQUs7Z0NBQ1gsVUFBVSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDdkQsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDL0MsQ0FBQyxDQUFDLFdBQVc7b0NBQ2IsQ0FBQyxDQUFDLEVBQUU7Z0NBQ04sV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDakQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0NBQ3pCLENBQUMsQ0FBQyxFQUFFO2dDQUNOLG9CQUFvQixFQUFFLEtBQUs7Z0NBQzNCLFdBQVcsRUFBRSxJQUFJOzZCQUNsQixDQUFDOzRCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQ0FDM0MsNkJBQTZCO2dDQUM3QixJQUFJLHdCQUF3QixHQUFRLFdBQVcsQ0FBQyxNQUFNLENBQ3BELENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGFBQWEsQ0FDM0QsQ0FBQztnQ0FDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztvQ0FDeEQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDcEIsWUFBWSxFQUFFLEtBQUs7d0NBQ25CLGtCQUFrQixFQUFFLElBQUk7d0NBQ3hCLHNCQUFzQixFQUFFOzRDQUN0QixnQkFBZ0IsRUFDZCx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NENBQzNDLG9CQUFvQixFQUFFLEdBQUc7eUNBQzFCO3FDQUNGLENBQUMsQ0FBQztnQ0FDTCxDQUFDO2dDQUVELDBDQUEwQztnQ0FDMUMsSUFBSSwyQkFBMkIsR0FBUSxXQUFXLENBQUMsTUFBTSxDQUN2RCxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxhQUFhLENBQzNELENBQUM7Z0NBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7b0NBQzNELGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDdEMsWUFBWSxFQUFFLGlCQUFpQjt3Q0FDL0IsZ0JBQWdCLEVBQUUsR0FBRzt3Q0FDckIsWUFBWSxFQUFFLG1CQUFtQjt3Q0FDakMsa0JBQWtCLEVBQUUsSUFBSTt3Q0FDeEIsc0JBQXNCLEVBQUU7NENBQ3RCLGdCQUFnQixFQUNkLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0Q0FDOUMsb0JBQW9CLEVBQUUsZUFBZTt5Q0FDdEM7cUNBQ0YsQ0FBQyxDQUFDO29DQUNILEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQ3BCLFlBQVksRUFBRSxpQkFBaUI7d0NBQy9CLGdCQUFnQixFQUFFLEdBQUc7d0NBQ3JCLFlBQVksRUFBRSxtQkFBbUI7d0NBQ2pDLGtCQUFrQixFQUFFLElBQUk7d0NBQ3hCLHNCQUFzQixFQUFFOzRDQUN0QixnQkFBZ0IsRUFDZCwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NENBQzlDLG9CQUFvQixFQUFFLGVBQWU7eUNBQ3RDO3FDQUNGLENBQUMsQ0FBQztnQ0FDTCxDQUFDOzRCQUNILENBQUM7NEJBQ0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMvQixDQUFDLENBQUMsQ0FBQzt3QkFDSCwrSUFBK0k7d0JBQy9JLGdFQUFnRTt3QkFDaEUsSUFBSSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7d0JBQ2hDLElBQUk7b0JBQ04sQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztZQUVDLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxFQUFHLENBQUM7Z0JBQzFULElBQUksbUJBQW1CLEdBQVEsS0FBSyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO2dCQUMzQyxJQUFJLFdBQVcsR0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2dCQUMvRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBZSxFQUFFLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ3hILElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBcUIsRUFBRSxFQUFFOzRCQUN6SCxJQUFJLENBQUMsK0JBQStCLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBQ3hELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDO29CQUNsRSxJQUFJLENBQUMsYUFBYTt5QkFDZixlQUFlLENBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFDeEIsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxFQUM3QyxJQUFJLENBQUMsOEJBQThCLENBQUMsWUFBWSxDQUFDLENBQ2xEO3lCQUNBLFNBQVMsQ0FDUixDQUFDLG1CQUF3QixFQUFFLEVBQUU7d0JBQzNCLElBQUksYUFBYSxHQUFRLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7NEJBQ25ELG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQ0FDL0MsV0FBVyxDQUFDLGNBQWMsQ0FBQztvQ0FDekIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQzNDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDMUIsQ0FBQztnQ0FFSixXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQ0FDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQ0FDdEQsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQ0FDL0MsQ0FBQzs0QkFDSCxDQUFDLENBQUMsQ0FBQzs0QkFFSCxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO2dDQUNyQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUN4QyxDQUFDOzRCQUNGLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsR0FBUSxFQUFFLEVBQUU7Z0NBQzdDLElBQUksV0FBVyxHQUFRLG1CQUFtQixDQUFDLE1BQU0sQ0FDL0MsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssQ0FDeEMsQ0FBQztnQ0FDRixJQUFJLEdBQUcsR0FBUTtvQ0FDYixJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUc7b0NBQ2hCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7d0NBQy9DLENBQUMsQ0FBQyxXQUFXO3dDQUNiLENBQUMsQ0FBQyxFQUFFO29DQUNOLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7d0NBQ2pELENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO3dDQUN6QixDQUFDLENBQUMsRUFBRTtvQ0FDTixvQkFBb0IsRUFBRSxJQUFJO29DQUMxQixXQUFXLEVBQUUsSUFBSTtvQ0FDakIsVUFBVSxFQUNSLElBQUksQ0FBQyw4QkFBOEIsQ0FDakMsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFO2lDQUNmLENBQUM7Z0NBQ0YsdURBQXVEO2dDQUN2RCw2REFBNkQ7Z0NBQzdELEtBQUs7Z0NBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzlCLENBQUMsQ0FBQyxDQUFDOzRCQUNILElBQUksQ0FBQywyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQzs0QkFDdkQsMEpBQTBKOzRCQUMxSixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuRCxjQUFjLENBQ2YsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN2RCxjQUFjLENBQ2YsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7NEJBRTNDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO3dCQUNoQyxDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7d0JBQ2hDLENBQUM7b0JBQ0gsQ0FBQyxFQUNELENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ1gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQ2hDLENBQUMsQ0FDRixDQUFDO2dCQUNOLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQztnQkFDRCxvRUFBb0U7Z0JBQ3BFLGlJQUFpSTtnQkFDakksNkZBQTZGO2dCQUM3RixvQ0FBb0M7Z0JBQ3BDLDZDQUE2QztnQkFDN0MsOEdBQThHO2dCQUM5Ryw0R0FBNEc7Z0JBRTVHLDZFQUE2RTtnQkFHN0UsMk1BQTJNO2dCQUMzTSx1SEFBdUg7Z0JBQ3ZILG9FQUFvRTtnQkFDcEUsa0ZBQWtGO2dCQUNsRiw0RUFBNEU7Z0JBQzVFLDJMQUEyTDtnQkFDM0wsK0tBQStLO2dCQUMvSywrRUFBK0U7Z0JBQy9FLDJFQUEyRTtnQkFDM0UsK0VBQStFO2dCQUMvRSxvRkFBb0Y7Z0JBQ3BGLDZCQUE2QjtnQkFDN0IseUJBQXlCO2dCQUN6Qix1QkFBdUI7Z0JBQ3ZCLHVCQUF1QjtnQkFDdkIsMEZBQTBGO2dCQUMxRix1QkFBdUI7Z0JBQ3ZCLDhFQUE4RTtnQkFDOUUsZ0JBQWdCO2dCQUVKLHFEQUFxRDtnQkFDckQsK0VBQStFO2dCQUMvRSxJQUFJO2dCQUNKLHNEQUFzRDtnQkFDdEQscURBQXFEO2dCQUNyRCwrRkFBK0Y7Z0JBQy9GLHdFQUF3RTtnQkFDeEUsMkVBQTJFO2dCQUMzRSxhQUFhO2dCQUNiLHdFQUF3RTtnQkFDeEUsaUVBQWlFO2dCQUNqRSxNQUFNO2dCQUNOLElBQUk7Z0JBQ2hCLGtJQUFrSTtnQkFDbEksdUpBQXVKO2dCQUN2SixvRkFBb0Y7Z0JBQ3BGLHFCQUFxQjtnQkFDckIscUJBQXFCO2dCQUNyQiw4S0FBOEs7Z0JBRTlLLDZIQUE2SDtnQkFDN0gsa0ZBQWtGO2dCQUNsRixtQkFBbUI7Z0JBRW5CLGdJQUFnSTtnQkFDaEksNENBQTRDO2dCQUc1QyxxQkFBcUI7Z0JBQ3JCLDZEQUE2RDtnQkFDN0QsdUhBQXVIO2dCQUN2SCw0REFBNEQ7Z0JBQzVELG9EQUFvRDtnQkFDcEQsMENBQTBDO2dCQUMxQyxxQkFBcUI7Z0JBQ3JCLHNJQUFzSTtnQkFDdEksa0RBQWtEO2dCQUNsRCwwREFBMEQ7Z0JBQzFELGlEQUFpRDtnQkFDakQsMEVBQTBFO2dCQUMxRSwwRUFBMEU7Z0JBQzFFLG9FQUFvRTtnQkFDcEUsbUVBQW1FO2dCQUNuRSw2QkFBNkI7Z0JBQzdCLHdGQUF3RjtnQkFDeEYsMEVBQTBFO2dCQUMxRSw0QkFBNEI7Z0JBQzVCLCtGQUErRjtnQkFDL0YsMEJBQTBCO2dCQUMxQiw2QkFBNkI7Z0JBQzdCLHdFQUF3RTtnQkFDeEUscUZBQXFGO2dCQUNyRiw0QkFBNEI7Z0JBQzVCLHdHQUF3RztnQkFDeEcsc0ZBQXNGO2dCQUN0RixvSEFBb0g7Z0JBQ3BILCtCQUErQjtnQkFDL0IsaUVBQWlFO2dCQUNqRSx5SEFBeUg7Z0JBQ3pILDhCQUE4QjtnQkFDOUIsOEJBQThCO2dCQUM5QiwwQkFBMEI7Z0JBQzFCLHFHQUFxRztnQkFDckcsb0RBQW9EO2dCQUNwRCwyQkFBMkI7Z0JBRTNCLDJFQUEyRTtnQkFFM0UseUZBQXlGO2dCQUN6Rix1RkFBdUY7Z0JBQ3ZGLHdIQUF3SDtnQkFDeEgsaUNBQWlDO2dCQUNqQyw2QkFBNkI7Z0JBQzdCLGlGQUFpRjtnQkFDakYsd0VBQXdFO2dCQUN4RSwwQkFBMEI7Z0JBQzFCLDBCQUEwQjtnQkFDMUIsb0lBQW9JO2dCQUNwSSx3RUFBd0U7Z0JBQ3hFLDJJQUEySTtnQkFDM0kseUNBQXlDO2dCQUN6Qyw0Q0FBNEM7Z0JBQzVDLGdHQUFnRztnQkFDaEcsOEdBQThHO2dCQUM5RyxzREFBc0Q7Z0JBQ3RELDZDQUE2QztnQkFDN0MsMEVBQTBFO2dCQUMxRSwyQkFBMkI7Z0JBQzNCLGdGQUFnRjtnQkFDaEYsc0ZBQXNGO2dCQUN0Riw4QkFBOEI7Z0JBQzlCLHFEQUFxRDtnQkFDckQseUJBQXlCO2dCQUN6Qiw4RUFBOEU7Z0JBQzlFLGlMQUFpTDtnQkFDakwsOE1BQThNO2dCQUM5TSxzQkFBc0I7Z0JBQ3RCLG9EQUFvRDtnQkFDcEQsK0RBQStEO2dCQUMvRCxxQkFBcUI7Z0JBQ3JCLGtDQUFrQztnQkFDbEMsOERBQThEO2dCQUM5RCwwREFBMEQ7Z0JBQzFELG9CQUFvQjtnQkFDcEIsbUJBQW1CO2dCQUNuQixnQkFBZ0I7Z0JBQ2hCLHdCQUF3QjtnQkFDeEIsc0RBQXNEO2dCQUN0RCxtQkFBbUI7Z0JBRW5CLGtIQUFrSDtnQkFDbEgseURBQXlEO2dCQUN6RCw0RUFBNEU7Z0JBQzVFLDREQUE0RDtnQkFDNUQseUJBQXlCO2dCQUN6QixxQkFBcUI7Z0JBQ3JCLGtFQUFrRTtnQkFDbEUsZ0JBQWdCO2dCQUNoQix1REFBdUQ7Z0JBQ3ZELGdCQUFnQjtnQkFDaEIsWUFBWTtnQkFDWixZQUFZO2dCQUNaLFFBQVE7Z0JBQ1IsTUFBTTtnQkFDTixNQUFNO1lBQ1IsQ0FBQztRQUdMLENBQUM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7WUFDekMsWUFBWSxFQUFFO2dCQUNaLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixXQUFXLEVBQUUsU0FBUztnQkFDdEIsV0FBVyxFQUFFLE9BQU87Z0JBQ3BCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixxQkFBcUIsRUFBRSxTQUFTO2dCQUNoQyxtQkFBbUIsRUFBRSxTQUFTO2dCQUM5Qix3QkFBd0IsRUFBRSxLQUFLO2dCQUMvQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxnQkFBZ0IsRUFBRSxPQUFPO2dCQUN6QixnQkFBZ0IsRUFBRSxTQUFTO2dCQUMzQixlQUFlLEVBQUUsSUFBSTtnQkFDckIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLDBCQUEwQixFQUFFLElBQUk7Z0JBQ2hDLHdCQUF3QixFQUFFLElBQUk7Z0JBQzlCLDZCQUE2QixFQUFFLElBQUk7Z0JBQ25DLDZCQUE2QixFQUFFLElBQUk7Z0JBQ25DLCtCQUErQixFQUFFLElBQUk7Z0JBQ3JDLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixZQUFZLEVBQUUsU0FBUztnQkFDdkIsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNLEVBQUUsSUFBSTtnQkFDWixXQUFXLEVBQUUsSUFBSTtnQkFDakIsYUFBYSxFQUFFLDZDQUE2QztnQkFDNUQsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7WUFDRCxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFdBQVcsRUFBRSxFQUFFO1lBQ2YsTUFBTSxFQUFFLEVBQUU7WUFDVixTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsS0FBSztnQkFDakIsZUFBZSxFQUFFLDRCQUE0QjtnQkFDN0MsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsY0FBYyxFQUFFLEVBQUU7YUFDbkI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsS0FBSyxFQUFFLElBQUk7b0JBQ1gsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLE1BQU07b0JBQ2IsS0FBSyxFQUFFLE1BQU07aUJBQ2Q7YUFDRjtZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEVBQUU7WUFDZCxXQUFXLEVBQUUsSUFBSTtZQUNqQixXQUFXLEVBQUUsS0FBSztZQUNsQixlQUFlLEVBQUUsS0FBSztZQUN0QixXQUFXLEVBQUUsUUFBUTtTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUFDLFNBQWM7UUFFbEMsSUFBSSxTQUFTLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2pELElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUFRLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzVMLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsSUFBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFM0UsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7WUFDeEUsU0FBUyxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQkFDcEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFSCxhQUFhLENBQUMsVUFBa0IsRUFBRSxRQUFhO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBRXBDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQ3ZELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBSWxDLHNCQUFzQjtRQUN0QixJQUFJLFVBQVUsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbEQsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRTVDLG9EQUFvRDtRQUNwRCxJQUFJLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDOUMsQ0FBQztRQUVHLENBQUM7UUFHSCxnQ0FBZ0M7UUFDaEMsSUFBSSxVQUFVLEVBQUUsU0FBUyxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7WUFDM0QsTUFBTSxNQUFNLEdBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRSxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ25DLElBQUksVUFBVSxDQUFDLE9BQU8sSUFBRSxVQUFVLEVBQUUsQ0FBQztnQkFDbkMsa0NBQWtDO2dCQUNsQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO29CQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTix5Q0FBeUM7Z0JBQ3pDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQztvQkFDekUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQy9DLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVqRixDQUFDO0lBSUQsZ0JBQWdCLENBQUMsVUFBa0I7UUFDakMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxVQUFrQixFQUFFLFFBQWE7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRS9FLElBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBQyxDQUFDO1lBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0MsTUFBTSxVQUFVLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUM7WUFHL0MsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsSUFBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDOUMsT0FBTyxVQUFVLEVBQUUsZUFBZSxJQUFJLDhCQUE4QixDQUFDO2dCQUVyRSxDQUFDO2dCQUNELE9BQU8sVUFBVSxFQUFFLGVBQWUsSUFBSSxnQkFBZ0IsUUFBUSxFQUFFLFlBQVksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUdqRyxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxVQUFVLEVBQUUsY0FBYyxJQUFJLG9CQUFvQixDQUFDO1lBQzNELENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLHdCQUF3QixRQUFRLEVBQUUsWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3JFLENBQUM7UUFFRCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVTtRQUM1QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FDTCxLQUFLLEtBQUssU0FBUztZQUNuQixLQUFLLEtBQUssSUFBSTtZQUNkLEtBQUssS0FBSyxFQUFFO1lBQ1osQ0FBQyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLGVBQWUsRUFBRSxDQUFDO29CQUM3QyxPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sS0FBSztpQkFDVCxRQUFRLEVBQUU7aUJBQ1YsT0FBTyxDQUNOLFFBQVEsRUFDUixDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQ2pFLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFnQjtRQUN2QixJQUFJLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxZQUFZLEdBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7Z0JBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsS0FBSyxFQUFFLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztvQkFDekMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO2lCQUNoRCxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLFNBQVMsR0FBUyxLQUFLLENBQUM7UUFDNUIsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsRUFBRyxDQUFDO1lBQ25GLElBQUksNkJBQTZCLEdBQVUsY0FBYyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQy9GLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxJQUFJLFNBQVMsR0FBUSxJQUFJLENBQUM7UUFDMUIsSUFBSSxTQUFTLEdBQVEsR0FBRyxDQUFDO1FBQ3pCLElBQUksT0FBTyxHQUFRLElBQUksQ0FBQztRQUN4QixJQUFJLGNBQWMsR0FBUSxJQUFJLENBQUM7UUFDaEMsSUFBSSxVQUFVLEdBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQztZQUMxRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVU7WUFDMUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVILElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxVQUFVLEdBQUcsRUFBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBTSxjQUFjLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hHLFlBQVksR0FBRztnQkFDSCxhQUFhLEVBQUUsT0FBTztnQkFDdEIsYUFBYSxFQUFFLFNBQVM7Z0JBQ3hCLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixZQUFZLEVBQUUsUUFBUTtnQkFDdEIsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIsdUJBQXVCLEVBQUUsSUFBSTtnQkFDN0IscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsMEJBQTBCLEVBQUUsSUFBSTtnQkFDaEMsT0FBTyxFQUFFLElBQUk7Z0JBQ2Isa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsa0JBQWtCLEVBQUUsU0FBUztnQkFDN0IsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLDRCQUE0QixFQUFFLElBQUk7Z0JBQ2xDLDBCQUEwQixFQUFFLElBQUk7Z0JBQ2hDLCtCQUErQixFQUFFLElBQUk7Z0JBQ3JDLCtCQUErQixFQUFFLElBQUk7Z0JBQ3JDLGlDQUFpQyxFQUFFLElBQUk7Z0JBQ3ZDLGtCQUFrQixFQUFFLFNBQVM7Z0JBQzdCLGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixjQUFjLEVBQUUsU0FBUztnQkFDekIsbUJBQW1CLEVBQUUsU0FBUztnQkFDOUIsa0JBQWtCLEVBQUUsU0FBUztnQkFDN0Isa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSTtnQkFDZCxhQUFhLEVBQUUsSUFBSTtnQkFDbkIsZUFBZSxFQUFFLHlDQUF5QztnQkFDMUQsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsU0FBUyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN4QyxPQUFPLEdBQUcsVUFBVSxDQUFDO29CQUNyQixjQUFjLEdBQUcsMkJBQTJCLENBQUM7b0JBQzdDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDaEQsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ25DLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLENBQUM7cUJBQU0sSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssY0FBYyxFQUFFLENBQUM7b0JBQ3BELE9BQU8sR0FBRyxtQkFBbUIsQ0FBQztvQkFDOUIsY0FBYyxHQUFHLHVDQUF1QyxDQUFDO29CQUN6RCxVQUFVLENBQUMsNEJBQTRCLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ25ELENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNmLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxVQUFVLEVBQUUsVUFBVTtZQUN0QixZQUFZLEVBQUUsWUFBWTtZQUMxQixXQUFXLEVBQ1QsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVc7Z0JBQ3pDLENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssY0FBYztvQkFDOUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFNBQVM7b0JBQzNDLENBQUMsQ0FBQyxPQUFPO29CQUNULENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3QkFDMUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLGFBQWE7d0JBQy9DLENBQUMsQ0FBQyxVQUFVO3dCQUNaLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTs0QkFDNUMsQ0FBQyxDQUFDLE1BQU07NEJBQ1IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO2dDQUM1QyxDQUFDLENBQUMsUUFBUTtnQ0FDVixDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVc7b0NBQzdDLENBQUMsQ0FBQyxNQUFNO29DQUNSLENBQUMsQ0FBQyxFQUFFO1lBQ1IsU0FBUyxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDcEMsU0FBUztZQUNULEtBQUssRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDO1lBQ2xDLFdBQVcsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDO1lBQ3hDLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ2xFLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxPQUFPO2dCQUNQLGNBQWM7YUFDZjtZQUNELFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLFVBQVU7WUFDbkIsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxRQUFjO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDMUQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW1CLEVBQUUsRUFBRTt3QkFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzs0QkFDdkMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUM3QyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRCxFQUNELENBQUM7Z0NBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzRCQUM1RCxDQUFDOzRCQUNELElBQUk7d0JBQ04sQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDOUMsQ0FBQzt3QkFFRCxpREFBaUQ7d0JBQ2pELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQzt3QkFDNUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2xJLElBQUksZUFBZSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzRCQUMvQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0NBQ3hCLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztnQ0FDMUIsU0FBUyxFQUFFLElBQUk7NkJBQ2hCLENBQUM7d0JBQ0osQ0FBQzt3QkFFRCxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQzs0QkFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUM5RCxJQUFJLG9CQUFvQixHQUFRLGNBQWMsQ0FDNUMsY0FBYyxDQUNmLENBQUMsTUFBTSxDQUNOLENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FDakIsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FDdEQsQ0FBQztnQ0FDRixjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUNwQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7b0NBQ3pCLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUM7d0NBQy9DLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUNsQixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUMvQyxDQUNGO3dDQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQy9DLEVBQ0QsQ0FBQzt3Q0FDRCxtQkFBbUI7d0NBQ25CLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3BDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTs0Q0FDekIseUNBQXlDOzRDQUN6QyxJQUNFLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7Z0RBQzdDLE1BQU0sRUFDTixDQUFDO2dEQUNELGlCQUFpQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0RBQ3BDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FDekIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FBQzs0Q0FDSixDQUFDO3dDQUNILENBQUMsQ0FDRixDQUFDO29DQUNKLENBQUM7eUNBQU0sQ0FBQzt3Q0FDTixpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO29DQUN2QyxDQUFDO2dDQUNILENBQUMsQ0FDRixDQUFDOzRCQUNKLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELDBMQUEwTDtnQkFDMUwsYUFBYSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN0RCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMvQixDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUM5RCxDQUNGLENBQUM7Z0JBQ0YsaUVBQWlFO2dCQUNqRSxnR0FBZ0c7Z0JBQ2hHLDRDQUE0QztnQkFDNUMsdUtBQXVLO2dCQUN2SyxnRkFBZ0Y7Z0JBQ2hGLDZOQUE2TjtnQkFDN04sMkRBQTJEO2dCQUMzRCxvRkFBb0Y7Z0JBQ3BGLFVBQVU7Z0JBQ1YsVUFBVTtnQkFDVixNQUFNO2dCQUNOLDBQQUEwUDtnQkFDMVAsNENBQTRDO2dCQUM1Qyx1S0FBdUs7Z0JBQ3ZLLGdGQUFnRjtnQkFDaEYsNk5BQTZOO2dCQUM3TiwyREFBMkQ7Z0JBQzNELG9GQUFvRjtnQkFDcEYsVUFBVTtnQkFDVixVQUFVO2dCQUNWLE1BQU07Z0JBQ04sSUFBSTtnQkFDSixJQUFJLGVBQWUsR0FBUSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FDakQsQ0FBQyxnQkFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FDNUQsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUM5QyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO3dCQUM3QyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUNoQyxDQUFDLDBCQUErQixFQUFFLEVBQUU7NEJBQ2xDLDBCQUEwQixDQUFDLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUN6RCwyTUFBMk07NEJBQzNNLHFEQUFxRDs0QkFDckQsdURBQXVEOzRCQUN2RCxJQUFJO3dCQUNOLENBQUMsQ0FDRixDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVsRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUdqRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFrQixFQUFFLEVBQUU7Z0JBQy9ELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3BELElBQUksY0FBYyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBSTNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxZQUFZLENBQUMsZUFBb0I7UUFDL0IsSUFBSSxZQUFZLEdBQVEsS0FBSyxDQUFDO1FBQzlCLElBQUksWUFBWSxHQUFRLEVBQUUsQ0FBQztRQUMzQixvSkFBb0o7UUFDcEosd0ZBQXdGO1FBRXhGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFO1lBQ3ZFLElBQUksbUJBQW1CLEdBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsbUJBQXdCLEVBQUUsRUFBRSxDQUMzQixtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDckMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUNoQyxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNsQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO29CQUNyRCxJQUNFLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0JBQzVDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRzt3QkFDOUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ2hELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUM7d0JBQzdDLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHOzRCQUM3RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7NEJBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7Z0NBQ2hELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO3FDQUNyQyxRQUFRLEVBQUU7cUNBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7NEJBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQzt3QkFDdEcsOERBQThEO3dCQUM5RCx3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsK0NBQStDO3dCQUMvQyxlQUFlO3lCQUNoQixFQUNELENBQUM7d0JBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQ0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQztZQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFDbkUsQ0FBQztZQUNELFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDcEUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzlEO1lBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzlELENBQ0Y7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUNsQixlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUM5RCxLQUFLLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQ3ZFLENBQUM7WUFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxjQUFjLENBQUMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNwRCxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLENBQUM7WUFDbEUsK0VBQStFO1lBQy9FLGtGQUFrRjtZQUNsRixxRkFBcUY7WUFDckYscUZBQXFGO1lBQ3JGLHFEQUFxRDtZQUNyRCxnTkFBZ047WUFDaE4sNkRBQTZEO1lBQzdELE1BQU07WUFDTixNQUFNO1lBQ04sa0RBQWtEO1lBQ2xELHFMQUFxTDtZQUNyTCw4REFBOEQ7WUFDOUQsTUFBTTtZQUNOLE1BQU07WUFDTixtREFBbUQ7WUFDbkQsMExBQTBMO1lBQzFMLDhEQUE4RDtZQUM5RCxNQUFNO1lBQ04sTUFBTTtZQUNOLG1EQUFtRDtZQUNuRCwwTEFBMEw7WUFDMUwsOERBQThEO1lBQzlELE1BQU07WUFDTixNQUFNO1FBQ1IsQ0FBQztRQUNELG1DQUFtQztRQUNuQyxpQ0FBaUM7UUFDakMsdUNBQXVDO1FBQ3ZDLElBQUksT0FBTyxHQUFRLElBQUksQ0FBQztRQUN4QixxS0FBcUs7UUFDckssbUtBQW1LO1FBQ25LLDZIQUE2SDtRQUM3SCw2S0FBNks7UUFDN0ssMktBQTJLO1FBQzNLLGdMQUFnTDtRQUNoTCxNQUFNO1FBQ04sSUFBSTtRQUVKLHFEQUFxRDtRQUNyRCx5SkFBeUo7UUFDekoscUdBQXFHO1FBQ3JHLG1GQUFtRjtRQUNuRix3UkFBd1I7UUFDeFIsMEVBQTBFO1FBQzFFLGtGQUFrRjtRQUNsRixxUUFBcVE7UUFFclEsdURBQXVEO1FBQ3ZELG1GQUFtRjtRQUNuRixpSUFBaUk7UUFDakksK0hBQStIO1FBQy9ILG1SQUFtUjtRQUNuUixtQ0FBbUM7UUFDbkMsdUZBQXVGO1FBQ3ZGLDhGQUE4RjtRQUM5Rix3RkFBd0Y7UUFDeEYsdUZBQXVGO1FBQ3ZGLG9FQUFvRTtRQUNwRSxzQkFBc0I7UUFDdEIsNEdBQTRHO1FBQzVHLG1FQUFtRTtRQUNuRSw4REFBOEQ7UUFDOUQsa0VBQWtFO1FBQ2xFLHlDQUF5QztRQUN6QyxzRkFBc0Y7UUFDdEYsMEJBQTBCO1FBQzFCLDZCQUE2QjtRQUM3QiwwSEFBMEg7UUFDMUgsdUpBQXVKO1FBQ3ZKLDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0MsdUlBQXVJO1FBQ3ZJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsK0pBQStKO1FBQy9KLHVEQUF1RDtRQUN2RCxnREFBZ0Q7UUFDaEQsNkNBQTZDO1FBQzdDLHlJQUF5STtRQUN6SSxtQ0FBbUM7UUFDbkMscURBQXFEO1FBQ3JELCtEQUErRDtRQUMvRCxnREFBZ0Q7UUFDaEQsNkNBQTZDO1FBQzdDLHlJQUF5STtRQUN6SSxtQ0FBbUM7UUFDbkMscURBQXFEO1FBQ3JELDBCQUEwQjtRQUMxQixtR0FBbUc7UUFDbkcsdURBQXVEO1FBQ3ZELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0Msd0lBQXdJO1FBQ3hJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsOERBQThEO1FBQzlELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0Msd0lBQXdJO1FBQ3hJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsMEJBQTBCO1FBQzFCLHdCQUF3QjtRQUV4QixzQkFBc0I7UUFFdEIsa0NBQWtDO1FBQ2xDLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLDZDQUE2QztRQUM3QyxrSUFBa0k7UUFDbEksaUZBQWlGO1FBQ2pGLGlHQUFpRztRQUNqRywrRUFBK0U7UUFDL0UsaUNBQWlDO1FBQ2pDLHFGQUFxRjtRQUNyRiw0RkFBNEY7UUFDNUYsc0ZBQXNGO1FBQ3RGLHFGQUFxRjtRQUNyRixrRUFBa0U7UUFDbEUsb0JBQW9CO1FBQ3BCLGdIQUFnSDtRQUNoSCxpRUFBaUU7UUFDakUsNERBQTREO1FBQzVELGdFQUFnRTtRQUNoRSx1Q0FBdUM7UUFDdkMsbUVBQW1FO1FBQ25FLHdCQUF3QjtRQUN4QiwyQkFBMkI7UUFDM0IsdUdBQXVHO1FBQ3ZHLHFKQUFxSjtRQUNySiw0Q0FBNEM7UUFDNUMseUNBQXlDO1FBQ3pDLHFJQUFxSTtRQUNySSwrQkFBK0I7UUFDL0IsaURBQWlEO1FBQ2pELDZKQUE2SjtRQUM3SixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QsOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCx3QkFBd0I7UUFDeEIsaUdBQWlHO1FBQ2pHLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHNJQUFzSTtRQUN0SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDREQUE0RDtRQUM1RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHNJQUFzSTtRQUN0SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixzQkFBc0I7UUFDdEIsb0JBQW9CO1FBRXBCLGdDQUFnQztRQUNoQyxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBRWhCLGNBQWM7UUFFZCw2RUFBNkU7UUFDN0UsZ0RBQWdEO1FBQ2hELG1CQUFtQjtRQUNuQixnRUFBZ0U7UUFDaEUsb0ZBQW9GO1FBQ3BGLDJEQUEyRDtRQUMzRCwyQkFBMkI7UUFDM0Isc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsZ0ZBQWdGO1FBQ2hGLDJFQUEyRTtRQUMzRSx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLDRFQUE0RTtRQUM1RSxzRUFBc0U7UUFDdEUsc0dBQXNHO1FBQ3RHLDRKQUE0SjtRQUM1SixrQkFBa0I7UUFDbEIsaUNBQWlDO1FBQ2pDLHFGQUFxRjtRQUNyRix5R0FBeUc7UUFDekcsaUVBQWlFO1FBQ2pFLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLGtFQUFrRTtRQUNsRSxvQkFBb0I7UUFDcEIsNERBQTREO1FBQzVELGdFQUFnRTtRQUNoRSx1Q0FBdUM7UUFDdkMsa0hBQWtIO1FBQ2xILHdCQUF3QjtRQUN4QiwyQkFBMkI7UUFDM0Isc0pBQXNKO1FBQ3RKLHFKQUFxSjtRQUNySiw0Q0FBNEM7UUFDNUMseUNBQXlDO1FBQ3pDLHFJQUFxSTtRQUNySSwrQkFBK0I7UUFDL0IsaURBQWlEO1FBQ2pELDZKQUE2SjtRQUM3SixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QsOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCx3QkFBd0I7UUFDeEIsaUdBQWlHO1FBQ2pHLHNEQUFzRDtRQUN0RCxzQkFBc0I7UUFDdEIsb0JBQW9CO1FBRXBCLGdDQUFnQztRQUNoQyxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBRWhCLG1CQUFtQjtRQUNuQiwyRUFBMkU7UUFDM0UsaUVBQWlFO1FBQ2pFLDJEQUEyRDtRQUMzRCx1REFBdUQ7UUFDdkQseUJBQXlCO1FBQ3pCLGtCQUFrQjtRQUNsQiwwT0FBME87UUFDMU8sNEVBQTRFO1FBQzVFLDhMQUE4TDtRQUM5TCw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QywySEFBMkg7UUFDM0gsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQiwrSkFBK0o7UUFDL0oscUpBQXFKO1FBQ3JKLG1JQUFtSTtRQUNuSSw0Q0FBNEM7UUFDNUMsaURBQWlEO1FBQ2pELDZKQUE2SjtRQUM3SixxREFBcUQ7UUFDckQscUlBQXFJO1FBQ3JJLDhDQUE4QztRQUM5QyxtREFBbUQ7UUFDbkQsNkRBQTZEO1FBQzdELHFJQUFxSTtRQUNySSw4Q0FBOEM7UUFDOUMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcsc0RBQXNEO1FBQ3RELHNCQUFzQjtRQUN0QixvQkFBb0I7UUFDcEIsbUNBQW1DO1FBQ25DLGdDQUFnQztRQUNoQyxrQkFBa0I7UUFFbEIsZ0JBQWdCO1FBQ2hCLHNEQUFzRDtRQUN0RCxpRkFBaUY7UUFDakYsMkRBQTJEO1FBQzNELG9GQUFvRjtRQUNwRiw4REFBOEQ7UUFDOUQsa0JBQWtCO1FBQ2xCLCtCQUErQjtRQUMvQixxRUFBcUU7UUFDckUsbUZBQW1GO1FBQ25GLHVGQUF1RjtRQUN2Riw4R0FBOEc7UUFDOUcsc0lBQXNJO1FBQ3RJLG9TQUFvUztRQUVwUyw0RkFBNEY7UUFDNUYsc0ZBQXNGO1FBQ3RGLHFGQUFxRjtRQUNyRixvQkFBb0I7UUFDcEIsbUNBQW1DO1FBQ25DLHVGQUF1RjtRQUN2Rix3R0FBd0c7UUFDeEcsbUVBQW1FO1FBQ25FLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUseUNBQXlDO1FBQ3pDLHFIQUFxSDtRQUNySCwwQkFBMEI7UUFDMUIsc0JBQXNCO1FBQ3RCLGtDQUFrQztRQUNsQyxvQkFBb0I7UUFDcEIsa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUVoQixzREFBc0Q7UUFDdEQsa0dBQWtHO1FBQ2xHLCtGQUErRjtRQUMvRiwwQkFBMEI7UUFDMUIseURBQXlEO1FBQ3pELG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsb0VBQW9FO1FBQ3BFLG1IQUFtSDtRQUNuSCw0SEFBNEg7UUFDNUgseUJBQXlCO1FBQ3pCLHdDQUF3QztRQUN4QyxtRkFBbUY7UUFDbkYscUVBQXFFO1FBQ3JFLDRDQUE0QztRQUM1Qyx5SUFBeUk7UUFDekksNkJBQTZCO1FBQzdCLHlCQUF5QjtRQUN6Qix1QkFBdUI7UUFDdkIsdUJBQXVCO1FBQ3ZCLG1CQUFtQjtRQUNuQixnQkFBZ0I7UUFFaEIsZ0RBQWdEO1FBQ2hELGtGQUFrRjtRQUNsRiw0RUFBNEU7UUFDNUUsOEhBQThIO1FBQzlILHlGQUF5RjtRQUN6RixtRUFBbUU7UUFDbkUsc0JBQXNCO1FBQ3RCLG9DQUFvQztRQUNwQywwRUFBMEU7UUFDMUUsd0ZBQXdGO1FBQ3hGLDRGQUE0RjtRQUM1RixvSEFBb0g7UUFDcEgsMklBQTJJO1FBQzNJLHVTQUF1UztRQUV2UyxpR0FBaUc7UUFDakcsMkZBQTJGO1FBQzNGLDBGQUEwRjtRQUMxRix5QkFBeUI7UUFDekIsd0NBQXdDO1FBQ3hDLG9GQUFvRjtRQUNwRixtR0FBbUc7UUFDbkcsc0VBQXNFO1FBQ3RFLGlFQUFpRTtRQUNqRSxxRUFBcUU7UUFDckUsNENBQTRDO1FBQzVDLHdIQUF3SDtRQUN4SCw2QkFBNkI7UUFDN0IseUJBQXlCO1FBQ3pCLHFDQUFxQztRQUNyQywwQkFBMEI7UUFDMUIsdUJBQXVCO1FBQ3ZCLG1CQUFtQjtRQUNuQixtQkFBbUI7UUFDbkIsaUJBQWlCO1FBRWpCLFlBQVk7UUFDWixZQUFZO1FBQ1osUUFBUTtRQUNSLFFBQVE7UUFDUixJQUFJO1FBRUoseUVBQXlFO1FBQ3pFLGlCQUFpQjtRQUNqQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osb0NBQW9DO1lBQ3BDLHlCQUF5QjtZQUN6QixJQUFJLFVBQVUsR0FBUSxFQUFFLENBQUM7WUFDekIsSUFBSSx5QkFBeUIsR0FBUSxFQUFFLENBQUM7WUFDeEMsSUFBSSxnQkFBZ0IsR0FBUSxFQUFFLENBQUM7WUFDL0IsSUFBSSxnQkFBZ0IsR0FBUSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7Z0JBQy9DLG9FQUFvRTtnQkFDcEUsb0VBQW9FO2dCQUNwRSxPQUFPO2dCQUNQLCtEQUErRDtnQkFDL0QseUVBQXlFO2dCQUN6RSx3QkFBd0I7Z0JBQ3hCLDBFQUEwRTtnQkFDMUUseUJBQXlCO2dCQUN6QixNQUFNO2dCQUNKLDhCQUE4QjtnQkFDOUIsSUFBSSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMzRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ2pJLENBQUM7Z0JBQ0YsSUFBSSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ2xJLENBQUM7Z0JBQ0YsSUFBSSxlQUFlLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDckQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUMvSCxDQUFDO2dCQUNGLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUk7b0JBQzNELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO29CQUNoRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsSUFBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxJQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQ2pELEVBQ0QsQ0FBQztvQkFDRCx3QkFBd0I7b0JBQ3hCLElBQUksbUJBQW1CLEdBQVEseUJBQXlCLENBQUMsU0FBUyxDQUNoRSxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7d0JBQ3pELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7b0JBQ0YsSUFBSSxtQkFBbUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUMvQix5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQzs0QkFDdEQsUUFBUSxDQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDakIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQzs0QkFDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7NEJBQ3ZDLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQ2xELE1BQU0sRUFBRSxRQUFRLENBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLFFBQVEsRUFBRTs0QkFDWixnQkFBZ0IsRUFBRSxDQUFDOzRCQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7NEJBQzFDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7eUJBQ2pELENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUVELG1CQUFtQjtvQkFDbkIsSUFBSSxjQUFjLEdBQVEsQ0FDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLFFBQVEsQ0FDL0QsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsSUFBSSxZQUFZLEdBQ2QsVUFBVSxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7d0JBQzdELENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNsQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLHVCQUF1QixHQUN6Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzt3QkFDckQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQztvQkFDSixJQUFJLHVCQUF1QixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ25DLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUMxRCxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7NEJBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDOzRCQUN2QyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUM5QyxNQUFNLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRTs0QkFDM0MsZ0JBQWdCLEVBQUUsQ0FBQzs0QkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDOzRCQUMxQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO3lCQUM3QyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxpQkFBaUI7b0JBRWpCLElBQUkscUJBQXFCLEdBQ3ZCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzt3QkFDbkQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQztvQkFDSixJQUFJLHFCQUFxQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2pDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUN4RCxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7NEJBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDOzRCQUN2QyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDNUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUU7NEJBQzNDLGdCQUFnQixFQUFFLENBQUM7NEJBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzs0QkFDMUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7eUJBQzNDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEtBQUssTUFBTTtvQkFDN0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDakQ7b0JBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsRUFDRCxDQUFDO29CQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQzt3QkFDL0MsSUFBSSxjQUFjLEdBQ2hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NEJBQzFELEVBQUU7NEJBQ0osVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLFVBQVUsR0FBUSxDQUNwQixVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUN0QyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDYixJQUFJLHFCQUFxQixHQUN2Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQ25ELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7d0JBQ0osSUFBSSxxQkFBcUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNqQyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQ0FDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQ0FDM0QsR0FBRztvQ0FDSCxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2pCLENBQUM7NkJBQU0sQ0FBQzs0QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7Z0NBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO2dDQUN2QyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQ0FDNUMsTUFBTSxFQUNKLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0NBQzNELEdBQUc7b0NBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDaEUsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dDQUMxQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzs2QkFDM0MsQ0FBQyxDQUFDO3dCQUNMLENBQUM7d0JBQ0QsSUFBSSx1QkFBdUIsR0FDekIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQ3JELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7d0JBQ0osSUFBSSx1QkFBdUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNuQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQ0FDMUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUN4QyxDQUFDOzZCQUFNLENBQUM7NEJBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDO2dDQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztnQ0FDdkMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQ0FDOUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0NBQzNDLGdCQUFnQixFQUFFLENBQUM7Z0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztnQ0FDMUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzs2QkFDN0MsQ0FBQyxDQUFDO3dCQUNMLENBQUM7d0JBQ0QsSUFBSSxtQkFBbUIsR0FDckIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQ3pELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7d0JBQ0osSUFBSSxtQkFBbUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUMvQix5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQ0FDdEQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNwQyxDQUFDOzZCQUFNLENBQUM7NEJBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDO2dDQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztnQ0FDdkMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQ0FDbEQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0NBQ3ZDLGdCQUFnQixFQUFFLENBQUM7Z0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztnQ0FDMUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzs2QkFDakQsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7b0JBQ2hELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQ2pFLENBQUM7b0JBQ0QsSUFBSSxzQkFBc0IsR0FBUSx5QkFBeUIsQ0FBQyxNQUFNLENBQ2hFLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxZQUFZLENBQUM7d0JBQzVCLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUN6QyxDQUFDO29CQUNGLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUM7d0JBQ2pELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzlELENBQUM7d0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDMUQsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hDLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO29CQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUM3RCxDQUFDO29CQUNELElBQUksMEJBQTBCLEdBQzVCLHlCQUF5QixDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFlBQVksQ0FBQzt3QkFDNUIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ3JDLENBQUM7b0JBQ0osSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQzt3QkFDckQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDbEUsQ0FBQzt3QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUN0RCwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDNUMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO29CQUMxQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDM0QsQ0FBQztvQkFDRCxJQUFJLHdCQUF3QixHQUMxQix5QkFBeUIsQ0FBQyxNQUFNLENBQzlCLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxZQUFZLENBQUM7d0JBQzVCLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FDbkMsQ0FBQztvQkFDSixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDO3dCQUNuRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNoRSxDQUFDO3dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUNwRCx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDMUMsQ0FBQztnQkFDSCxDQUFDO2dCQUNILElBQUk7Z0JBQ0osSUFBSSw0QkFBNEIsR0FBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDL0QsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUMzQjtvQkFDQyxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxVQUFlLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxXQUFXLENBQ2hFO29CQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsSUFDRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7b0JBQzNCLDRCQUE0QixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUNyRCxDQUFDO29CQUNELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7d0JBQ3pELElBQUksY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssY0FBYyxFQUFFLENBQUM7NEJBQzlELElBQUksY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztnQ0FDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7NEJBQ2pFLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7NEJBQzVELENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxJQUFJLGlCQUFpQixHQUFRLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUM5RCxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUNwQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7Z0NBQ3pCLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLENBQ0Y7b0NBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsRUFDRCxDQUFDO29DQUNELGlCQUFpQixDQUFDLElBQUksQ0FDcEIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FBQztnQ0FDSixDQUFDOzRCQUNILENBQUMsQ0FDRixDQUFDO3dCQUNKLENBQUM7d0JBQ0QsSUFDRSxjQUFjLENBQUMsb0JBQW9CLENBQUM7NEJBQ3BDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOytCQUMxQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2hGLENBQUM7NEJBQ0Qsd0JBQXdCOzRCQUV4QixJQUFJLDBCQUEwQixHQUM1Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsZUFBb0IsRUFBRSxFQUFFLENBQ3ZCLGVBQWUsQ0FBQyxZQUFZLENBQUM7Z0NBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7Z0NBQzlCLGVBQWUsQ0FBQyxZQUFZLENBQUM7b0NBQzNCLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDaEMsQ0FBQzs0QkFDSixJQUFJLDBCQUEwQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3RDLElBQUksR0FBRyxHQUFRO29DQUNiLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO29DQUN2QyxVQUFVLEVBQUUsY0FBYyxDQUFDLFlBQVksQ0FBQztvQ0FDeEMsTUFBTSxFQUFFLEVBQUU7b0NBQ1YsZ0JBQWdCLEVBQUUsQ0FBQztvQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29DQUMxQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQztpQ0FDdkMsQ0FBQztnQ0FDRixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDOUUseUJBQXlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN0QyxDQUFDO2lDQUFNLENBQUM7Z0NBQ04seUJBQXlCLENBQUMsMEJBQTBCLENBQUMsQ0FDbkQsUUFBUSxDQUNULEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDcEUsQ0FBQzt3QkFDSCxDQUFDOzZCQUFNLElBQ0wsY0FBYyxDQUFDLG9CQUFvQixDQUFDOzRCQUNwQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTs0QkFDN0MsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25ELEVBQ0QsQ0FBQzs0QkFDRCx3QkFBd0I7NEJBQ3hCLElBQUksMEJBQTBCLEdBQzVCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxlQUFvQixFQUFFLEVBQUUsQ0FDdkIsZUFBZSxDQUFDLFlBQVksQ0FBQztnQ0FDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQztnQ0FDOUIsZUFBZSxDQUFDLFlBQVksQ0FBQztvQ0FDM0IsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNoQyxDQUFDOzRCQUNKLElBQUksMEJBQTBCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEMsSUFBSSxHQUFHLEdBQVE7b0NBQ2IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7b0NBQ3ZDLFVBQVUsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDO29DQUN4QyxNQUFNLEVBQ0osY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0NBQzNDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDt3Q0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7b0NBQ3hELGdCQUFnQixFQUFFLENBQUM7b0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQ0FDMUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxXQUFXLENBQUM7aUNBQ3ZDLENBQUM7Z0NBQ0YseUJBQXlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN0QyxDQUFDO2lDQUFNLENBQUM7Z0NBQ04seUJBQXlCLENBQUMsMEJBQTBCLENBQUMsQ0FDbkQsUUFBUSxDQUNUO29DQUNDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO3dDQUMzQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7d0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7NEJBQzNELENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCw4SEFBOEg7d0JBQzlILDhPQUE4Tzt3QkFDOU8sNENBQTRDO3dCQUM1Qyx1QkFBdUI7d0JBQ3ZCLGlEQUFpRDt3QkFDakQsa0RBQWtEO3dCQUNsRCwwTkFBME47d0JBQzFOLDZCQUE2Qjt3QkFDN0Isb0RBQW9EO3dCQUNwRCxnREFBZ0Q7d0JBQ2hELFNBQVM7d0JBQ1QsMkNBQTJDO3dCQUMzQywwREFBMEQ7d0JBQzFELDBDQUEwQzt3QkFDMUMsd0VBQXdFO3dCQUN4RSxnRkFBZ0Y7d0JBQ2hGLDhLQUE4Szt3QkFDOUssZ0ZBQWdGO3dCQUNoRixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsVUFBVTt3QkFDVixzREFBc0Q7d0JBQ3RELFFBQVE7d0JBQ1IsYUFBYTt3QkFDYiwwREFBMEQ7d0JBQzFELDBEQUEwRDt3QkFDMUQsMENBQTBDO3dCQUMxQyx3RUFBd0U7d0JBQ3hFLGdGQUFnRjt3QkFDaEYsOEtBQThLO3dCQUM5SyxnRkFBZ0Y7d0JBQ2hGLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLHdHQUF3Rzt3QkFDeEcsZUFBZTt3QkFDZixxUkFBcVI7d0JBQ3JSLFFBQVE7d0JBRVIsTUFBTTt3QkFFTixJQUFJO3dCQUVKLHFFQUFxRTt3QkFDckUsZ1BBQWdQO3dCQUNoUCxxQkFBcUI7d0JBQ3JCLCtDQUErQzt3QkFDL0MsZ0RBQWdEO3dCQUNoRCx1REFBdUQ7d0JBQ3ZELDJCQUEyQjt3QkFDM0Isa0RBQWtEO3dCQUNsRCw4Q0FBOEM7d0JBQzlDLE9BQU87d0JBQ1Asa0RBQWtEO3dCQUNsRCwyQ0FBMkM7d0JBQzNDLGFBQWE7d0JBQ2Isc0hBQXNIO3dCQUN0SCxNQUFNO3dCQUNOLElBQUk7b0JBQ04sQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxNQUFNO2dCQUNOLElBQUk7WUFDTixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksMkJBQTJCLEdBQVE7Z0JBQ3JDLEdBQUcsSUFBSSxHQUFHLENBQ1IseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FDM0IsQ0FDRjthQUNGLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQztnQkFDM0QsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUNqRCxDQUFDLFlBQWlCLEVBQUUsRUFBRSxDQUNwQixZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQ2hFLENBQUM7Z0JBQ0YsSUFBSSwyQkFBMkIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzdDLGdCQUFnQixHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FDakQsQ0FBQyxZQUFpQixFQUFFLEVBQUUsQ0FDcEIsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUNoRSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxpQkFBaUIsR0FBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO2dCQUM5QyxjQUFjLENBQUMsT0FBTyxDQUNwQix1QkFBdUIsRUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNqQyxDQUFDO2dCQUNGLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFBO2dCQUNwRixDQUFDO2dCQUNELHFHQUFxRztnQkFDckcsOFpBQThaO1lBQ2hhLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlDLGNBQWMsQ0FBQyxPQUFPLENBQ3BCLHVCQUF1QixFQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQ2pDLENBQUM7Z0JBQ0YsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMvQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7Z0JBQ3BGLENBQUM7Z0JBQ0Qsc0dBQXNHO2dCQUN0Ryw4WkFBOFo7WUFDaGEsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVk7UUFDekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUQsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUNFLElBQUksS0FBSyxNQUFNO2dCQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsRUFDckMsQ0FBQztnQkFDRCxVQUFVLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxpQkFBdUIsS0FBSztRQUNuRCxJQUFJLE9BQU8sR0FBUSxJQUFJLENBQUM7UUFDeEIsSUFBSSxpQkFBaUIsR0FBUyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDckUsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3ZELENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO3dCQUM5RCxjQUFjO3dCQUNkLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzs0QkFDN0QsZUFBZTt3QkFDakIsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDOzRCQUM3RCxrQkFBa0IsQ0FBQztvQkFDdkIsT0FBTyxFQUNQLENBQUM7b0JBQ0Qsd0NBQXdDO29CQUN4QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQzt3QkFDbEUsSUFBSSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxDQUNyRCxDQUFDO3dCQUNGLElBQUksZUFBZSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3JELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLENBQ3JELENBQUM7d0JBQ0YsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDNUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDOzRCQUMxQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRDtnQ0FDQyxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsQ0FBQyxFQUNKLENBQUM7NEJBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQzs0QkFDaEIsaUJBQWlCLEdBQUcsd0NBQXdDLENBQUM7NEJBQzdELElBQUcsY0FBYyxFQUFFLENBQUM7Z0NBQ2xCLElBQUksVUFBVSxHQUFRLDZCQUE2QixDQUFDO2dDQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUNsQyxDQUFDOzRCQUNELHVFQUF1RTs0QkFDdkUsNEVBQTRFOzRCQUM1RSxzRUFBc0U7NEJBQ3RFLHFFQUFxRTs0QkFDckUsa0RBQWtEOzRCQUNsRCxJQUFJOzRCQUNKLDBGQUEwRjs0QkFDMUYsaURBQWlEOzRCQUNqRCw0Q0FBNEM7NEJBQzVDLGdEQUFnRDs0QkFDaEQsdUJBQXVCOzRCQUN2QixvRUFBb0U7NEJBQ3BFLFFBQVE7NEJBQ1IsV0FBVzs0QkFDWCxzR0FBc0c7NEJBRXRHLElBQUk7NEJBRUosZ0JBQWdCOzRCQUNoQixJQUFJO3dCQUNOLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCw4QkFBOEI7b0JBQzlCLElBQUkscUJBQXFCLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDM0QsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUssQ0FDcEQsQ0FBQztvQkFDRixJQUNFLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsS0FBSyxJQUFJO3dCQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQ7d0JBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7d0JBQ2hELE9BQU8sRUFDUCxDQUFDO3dCQUNELE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ2hCLGlCQUFpQixHQUFHLG1DQUFtQyxDQUFDO3dCQUV4RCxJQUFHLGNBQWMsRUFBRSxDQUFDOzRCQUNsQixJQUFJLFVBQVUsR0FBUSw2QkFBNkIsQ0FBQzs0QkFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDbEMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7b0JBQzVELGlDQUFpQztvQkFDakMsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQzt3QkFDNUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDaEUsaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7d0JBQ3ZDLE9BQU87d0JBQ1AsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEtBQUssWUFBWTt3QkFDbEQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLO3dCQUNuRCxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxhQUFhO3dCQUNuRCxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGNBQWM7d0JBQzVELGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLGlCQUFpQjt3QkFDdkQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNO3dCQUNwRCxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU07d0JBQ3BELGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRzt3QkFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ3REO3dCQUNELHdEQUF3RDt3QkFDeEQsaUhBQWlIO3dCQUNqSCxtSUFBbUk7d0JBQ25JLE9BQU8sRUFDUCxDQUFDO3dCQUNELGlCQUFpQixHQUFHLG1DQUFtQyxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzt3QkFDdEYsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFFaEIsSUFBRyxjQUFjLEVBQUUsQ0FBQzs0QkFDbEIsSUFBSSxVQUFVLEdBQVEsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2xDLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxPQUFPO29CQUNQLCtEQUErRDtvQkFDL0QscURBQXFEO29CQUNyRCwrQ0FBK0M7b0JBQy9DLE1BQU07b0JBQ04sOE5BQThOO29CQUM5TixnRUFBZ0U7b0JBQ2hFLGtMQUFrTDtvQkFDbEwsZ0RBQWdEO29CQUNoRCxvREFBb0Q7b0JBQ3BELDJCQUEyQjtvQkFDM0IsK0dBQStHO29CQUMvRyxZQUFZO29CQUNaLGVBQWU7b0JBQ2YsbUpBQW1KO29CQUNuSix5SUFBeUk7b0JBQ3pJLHVIQUF1SDtvQkFDdkgsZ0NBQWdDO29CQUNoQyxxQ0FBcUM7b0JBQ3JDLGlKQUFpSjtvQkFDakoseUNBQXlDO29CQUN6Qyx5SEFBeUg7b0JBQ3pILGtDQUFrQztvQkFDbEMsdUNBQXVDO29CQUN2QyxpREFBaUQ7b0JBQ2pELHlIQUF5SDtvQkFDekgsa0NBQWtDO29CQUNsQyx1Q0FBdUM7b0JBQ3ZDLFlBQVk7b0JBQ1oscUZBQXFGO29CQUNyRiwwQ0FBMEM7b0JBQzFDLFVBQVU7b0JBQ1YsUUFBUTtvQkFDUix1QkFBdUI7b0JBQ3ZCLG9CQUFvQjtvQkFDcEIsTUFBTTtvQkFFTixJQUFJO29CQUNKLHVDQUF1QztvQkFDdkMsSUFDRSxPQUFPO3dCQUNQLGlCQUFpQixDQUFDLFlBQVksS0FBSyxhQUFhO3dCQUNoRCxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDdkMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDaEUsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLEVBQzdDLENBQUM7d0JBQ0QsSUFDRSxDQUFDLE9BQU87NEJBQ04sOEVBQThFOzRCQUM5RSxtRUFBbUU7NEJBQ25FLHVFQUF1RTs0QkFDdkUsOEZBQThGOzRCQUM5RiwrSUFBK0k7NEJBQy9JLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0NBQ25ELEdBQUcsQ0FBQzs0QkFDUixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3RELElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUN0RDt3QkFDRCxJQUFJO3dCQUNKLGlFQUFpRTswQkFDakUsQ0FBQzs0QkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDOzRCQUNoQixpQkFBaUIsR0FBRyxtQ0FBbUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7NEJBRXRGLElBQUcsY0FBYyxFQUFFLENBQUM7Z0NBQ2xCLElBQUksVUFBVSxHQUFRLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUNsQyxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFFRCx1Q0FBdUM7b0JBQ3ZDLG1GQUFtRjtvQkFDbkYsZ0ZBQWdGO29CQUNoRixXQUFXO29CQUNYLDBDQUEwQztvQkFDMUMscURBQXFEO29CQUNyRCwyREFBMkQ7b0JBQzNELHFEQUFxRDtvQkFDckQsb0dBQW9HO29CQUNwRyw2R0FBNkc7b0JBQzdHLFVBQVU7b0JBQ1YseUJBQXlCO29CQUN6QixvRUFBb0U7b0JBQ3BFLHNEQUFzRDtvQkFDdEQsNkJBQTZCO29CQUM3QiwwSEFBMEg7b0JBQzFILGNBQWM7b0JBQ2QsVUFBVTtvQkFDVixRQUFRO29CQUNSLFFBQVE7b0JBQ1IsSUFBSTtnQkFDTixDQUFDLENBQUMsQ0FBQztnQkFFSCxtQ0FBbUM7Z0JBQ25DLHFFQUFxRTtnQkFDckUsK0RBQStEO2dCQUMvRCxpSEFBaUg7Z0JBQ2pILDRFQUE0RTtnQkFDNUUsc0RBQXNEO2dCQUN0RCxTQUFTO2dCQUNULHVCQUF1QjtnQkFDdkIsc0ZBQXNGO2dCQUN0RiwyRUFBMkU7Z0JBQzNFLCtFQUErRTtnQkFDL0UsdUdBQXVHO2dCQUN2Ryx1SkFBdUo7Z0JBQ3ZKLDRVQUE0VTtnQkFFNVUsb0ZBQW9GO2dCQUNwRiw4RUFBOEU7Z0JBQzlFLDZFQUE2RTtnQkFDN0UsWUFBWTtnQkFDWiwyQkFBMkI7Z0JBQzNCLHVFQUF1RTtnQkFDdkUsc0ZBQXNGO2dCQUN0Rix5REFBeUQ7Z0JBQ3pELG9EQUFvRDtnQkFDcEQsd0RBQXdEO2dCQUN4RCwrQkFBK0I7Z0JBQy9CLDJHQUEyRztnQkFDM0csZ0JBQWdCO2dCQUNoQixZQUFZO2dCQUNaLHdCQUF3QjtnQkFDeEIsYUFBYTtnQkFDYixVQUFVO2dCQUNWLE1BQU07Z0JBQ04sTUFBTTtnQkFDTixJQUFJO1lBQ04sQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVFLGNBQWMsQ0FBQyxPQUFPLENBQUMsOEJBQThCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDaEUsY0FBYyxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZGLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ25FLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNSLGNBQWMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDM0QsY0FBYyxDQUFDLE9BQU8sQ0FBQyxzQ0FBc0MsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRWxGLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ25FLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHlCQUF5QixDQUFDLFFBQWM7UUFDdEMsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxlQUFlLElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssV0FBVyxFQUFHLENBQUM7WUFDOUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBRXZELG1EQUFtRDtZQUNuRCxJQUFJLGNBQWMsR0FBUyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBRW5JLElBQ0UsY0FBYyxLQUFNLENBQUMsQ0FBQyxFQUN0QixDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQWUsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxDQUFBO1lBQ3JNLENBQUM7WUFDRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQ2xCLEVBQUUsQ0FBQztnQkFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUM7WUFDN1AsQ0FBQztZQUNELHdHQUF3RztZQUN4Ryw4QkFBOEI7WUFDOUIsa0NBQWtDO1lBQ2xDLHNFQUFzRTtZQUN0RSxLQUFLO1lBQ0wsNERBQTREO1lBQzVELE9BQU87WUFDUCxnRUFBZ0U7WUFDaEUscUNBQXFDO1lBQ3JDLG1FQUFtRTtZQUNuRSw0QkFBNEI7WUFDNUIsUUFBUTtZQUNSLFNBQVM7WUFDVCxxQ0FBcUM7WUFDckMsbUVBQW1FO1lBQ25FLDRCQUE0QjtZQUM1Qix3QkFBd0I7WUFDeEIsTUFBTTtZQUNOLE1BQU07WUFDSiwrREFBK0Q7WUFDL0Qsd0JBQXdCO1lBQ3hCLDhEQUE4RDtZQUM5RCx3QkFBd0I7WUFDeEIsaURBQWlEO1lBQ2pELDZCQUE2QjtZQUM3QixzQ0FBc0M7WUFDdEMsK0NBQStDO1lBQy9DLFdBQVc7WUFDWCx3Q0FBd0M7WUFDeEMsK0NBQStDO1lBQy9DLFdBQVc7WUFDWCxpREFBaUQ7WUFDakQsS0FBSztZQUNQLElBQUk7WUFDSixrRUFBa0U7WUFDbEUsbUJBQW1CO1lBQ25CLG1EQUFtRDtZQUNuRCxrREFBa0Q7WUFDbEQsc0VBQXNFO1lBQ3RFLHVCQUF1QjtZQUN2QiwwQkFBMEI7WUFDMUIsTUFBTTtZQUNOLE1BQU07WUFFTixzTEFBc0w7WUFDdEwsbUVBQW1FO1lBQ25FLG1EQUFtRDtZQUNuRCwrREFBK0Q7WUFDL0QsdUJBQXVCO1lBQ3ZCLDJCQUEyQjtZQUMzQixNQUFNO1lBQ04sTUFBTTtZQUNOLDZCQUE2QjtZQUU3QixJQUFJLGdCQUFnQixHQUFTLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckYsaUNBQWlDO1lBQ2pDLG9CQUFvQjtZQUNwQixrQ0FBa0M7WUFDbEMsd0VBQXdFO1lBQ3hFLG1CQUFtQjtZQUNuQixNQUFNO1lBQ04sS0FBSztZQUNMLElBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsYyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FDOUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDWiw4QkFBOEI7b0JBQzlCLElBQUksYUFBYSxHQUFRLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFOzRCQUNoQyxXQUFXLENBQ1QsY0FBYyxDQUNmLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQy9DLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDMUIsQ0FBQzs0QkFDRixXQUFXLENBQUMsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUM7NEJBQzFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLElBQUksQ0FBQzs0QkFDM0MsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQ2hDO2dDQUNELENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUMvQyxDQUFDO2dDQUNELFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHO29DQUNoQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7aUNBQ2hDLENBQUM7NEJBQ0osQ0FBQzs0QkFDRCxJQUNFLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO2dDQUMxQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQ2hDLEVBQ0QsQ0FBQztnQ0FDRCxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQ3JDLENBQUMseUJBQThCLEVBQUUsRUFBRTtvQ0FDakMsSUFBSSxrQkFBa0IsR0FBUSxJQUFJLENBQUMsTUFBTSxDQUN2QyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQ2QsTUFBTSxDQUFDLFlBQVksQ0FBQzt3Q0FDcEIseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FDOUMsQ0FBQztvQ0FDRixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3Q0FDbEMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDOzRDQUNwQyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29DQUNyRCxDQUFDO2dDQUNILENBQUMsQ0FDRixDQUFDOzRCQUNKLENBQUM7NEJBQ0QsT0FBTzs0QkFDUCwrQkFBK0I7NEJBQy9CLGtDQUFrQzs0QkFDbEMsTUFBTTs0QkFDTixNQUFNOzRCQUNOLDhEQUE4RDs0QkFDOUQsMkVBQTJFOzRCQUMzRSx5Q0FBeUM7NEJBQ3pDLFNBQVM7NEJBQ1QsUUFBUTs0QkFDUixJQUFJOzRCQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3RELGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQy9DLENBQUM7NEJBQ0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQ3BELENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxJQUFJLENBQ1AsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO3dCQUNGLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsR0FBUSxFQUFFLEVBQUU7NEJBQzdDLElBQUksV0FBVyxHQUFRLElBQUksQ0FBQyxNQUFNLENBQ2hDLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssQ0FDL0QsQ0FBQzs0QkFDRixJQUFJLEdBQUcsR0FBUTtnQ0FDYixJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUc7Z0NBQ2hCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7b0NBQy9DLENBQUMsQ0FBQyxXQUFXO29DQUNiLENBQUMsQ0FBQyxFQUFFO2dDQUNOLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDcEMsV0FBVyxDQUNaO29DQUNDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29DQUN6QixDQUFDLENBQUMsRUFBRTtnQ0FDTixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0NBQzNCLG9CQUFvQixFQUFFLElBQUk7Z0NBQzFCLFdBQVcsRUFBRSxJQUFJOzZCQUNsQixDQUFDOzRCQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM5QixDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO3dCQUN4QyxtSEFBbUg7d0JBQ25ILGtDQUFrQzt3QkFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQ3JJLENBQUM7b0JBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ2pDLENBQUMsRUFDRCxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNYLDhCQUE4QjtnQkFDaEMsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxLQUFvQztRQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQsd0JBQXdCO1FBQ3BCLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsNEJBQTRCLENBQzdCLEtBQUssTUFBTTtZQUNaLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsQ0FDRixFQUNELENBQUM7WUFDRCxJQUFJLGNBQWMsR0FBUSxDQUN4QixVQUFVLENBQ1IsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsNkJBQTZCLENBQzlCLENBQ0YsR0FBRyxRQUFRLENBQ2IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLFlBQVksR0FDZCxVQUFVLENBQ1IsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO2lCQUNsQixRQUFRLEVBQUU7aUJBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqQixHQUFHLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEMsRUFDRCxDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLDBCQUEwQixDQUMzQixHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RDLEVBQ0QsQ0FBQztnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUI7b0JBQ0MsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO3dCQUM5QyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7d0JBQzlDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTt3QkFDNUMsQ0FBQyxDQUFDLFlBQVk7NkJBQ1QsUUFBUSxFQUFFOzZCQUNWLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ2IsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDZCxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsNEJBQTRCLENBQzdCLEtBQUssSUFBSTtZQUNWLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUNsQiwwQkFBMEIsQ0FDM0IsQ0FDRjtZQUNELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsQ0FDRixFQUNELENBQUM7WUFDRCxJQUFJLGNBQWMsR0FDaEIsVUFBVSxDQUNSLFVBQVUsQ0FDUixJQUFJLENBQUMsZUFBZSxDQUNsQiwwQkFBMEIsQ0FDM0IsQ0FDRixDQUFDLFFBQVEsRUFBRTtnQkFDVixHQUFHO2dCQUNILFVBQVUsQ0FDUixJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsQ0FDRixDQUFDLFFBQVEsRUFBRSxDQUNmLEdBQUcsRUFBRSxDQUFDO1lBQ1QsSUFBSSxVQUFVLEdBQVEsQ0FDcEIsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFFBQVEsQ0FDdEMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsR0FBRyxVQUFVLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFSCxjQUFjLENBQUMsU0FBYztRQUMzQixNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRSxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUVwRCxNQUFNLGVBQWUsR0FBUSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFL0QsaUVBQWlFO1FBQ2pFLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN6QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNwRCxNQUFNLGFBQWEsR0FDakIsZUFBZSxLQUFLLE1BQU07Z0JBQ3hCLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Z0JBQ1osQ0FBQyxDQUFFLGVBQStCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUUvRCxNQUFNLGFBQWEsR0FDakIsZUFBZSxLQUFLLE1BQU07Z0JBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxJQUFJLENBQUM7Z0JBQy9ELENBQUMsQ0FBRSxlQUErQixDQUFDLFNBQVMsQ0FBQztZQUVqRCxNQUFNLGNBQWMsR0FDbEIsV0FBVyxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxHQUFHLGFBQWEsR0FBRyxZQUFZLENBQUM7WUFFckUsSUFBSSxlQUFlLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELENBQUM7aUJBQU0sQ0FBQztnQkFDTCxlQUErQixDQUFDLFFBQVEsQ0FBQztvQkFDeEMsR0FBRyxFQUFFLGNBQWM7b0JBQ25CLFFBQVEsRUFBRSxRQUFRO2lCQUNuQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBRTFELHdDQUF3QztZQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVULHVFQUF1RTtZQUN2RSxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBVyxFQUFFLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQ2pELGlEQUFpRDtnQkFDakQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN6RCxPQUFPLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQzFELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFFakUsNERBQTREO2dCQUM1RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDcEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQzFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDakMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO29CQUN4RCxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3pELENBQUMsQ0FBQyxDQUFDO2dCQUNILGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtvQkFDdkMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO29CQUMzRCxRQUFRLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQzVELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDO1lBRUYsbUNBQW1DO1lBQ25DLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUV0RCxpREFBaUQ7WUFDakQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRXZELDRFQUE0RTtZQUM1RSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTVELDhCQUE4QjtZQUM5QixPQUFPLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFOUQsb0VBQW9FO1lBQ3BFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3BFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDakMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNyRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7WUFFSCwwREFBMEQ7WUFDMUQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDMUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN2QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3hELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLElBQXdCO1FBQ2xELElBQUksTUFBTSxHQUFHLElBQUksRUFBRSxhQUFhLENBQUM7UUFDakMsT0FBTyxNQUFNLEVBQUUsQ0FBQztZQUNkLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUQsSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQW5tR1Usd0JBQXdCOzRGQUF4Qix3QkFBd0Isd3lDQ3hDckMsMHFXQXVOTSx3MkNEaE1GLFlBQVksNlZBQ1osV0FBVyxneEJBQ1gsbUJBQW1CLCtCQUNuQixnQkFBZ0IsMkhBQ2hCLGNBQWMsMkhBQ2QsaUJBQWlCLDhIQUNqQixlQUFlLGtKQUNmLFlBQVkscUtBQ1osZUFBZSw4TUFDZix1QkFBdUIsNklBQ3ZCLGdCQUFnQiwraUNBQ2hCLGVBQWUsMkVBQ2Ysb0JBQW9COzs0RkFLWCx3QkFBd0I7a0JBdEJwQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBRVA7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2Ysb0JBQW9CO3FCQUNyQjt1R0FLUyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHb29nbGVNYXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZ29vZ2xlLW1hcHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE5nWm9uZSwgQWZ0ZXJWaWV3SW5pdCwgaW5wdXQsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgcXVlc3Rpb25zUmVzcG9uc2UgZnJvbSAnLi9xdWVzdGlvbnMuanNvbidcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IERvYkNvbXBvbmVudCB9IGZyb20gJy4uL2RvYi9kb2IuY29tcG9uZW50JztcbmltcG9ydCB7IFVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpcGxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGlwbGUtc2VsZWN0L211bHRpcGxlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHJMaW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vaHItbGluZS9oci1saW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXN0ZXJDb250cm9sU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1wcmV2aWV3L2ZpbGUtcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbWVkaWFsLXF1ZXN0aW9ucycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGV4dGJveENvbXBvbmVudCxcbiAgICBSYWRpb0NvbXBvbmVudCxcbiAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICBTZWxlY3RDb21wb25lbnQsXG4gICAgRG9iQ29tcG9uZW50LFxuICAgIFVwbG9hZENvbXBvbmVudCxcbiAgICBNdWx0aXBsZVNlbGVjdENvbXBvbmVudCxcbiAgICBHb29nbGVNYXBzTW9kdWxlLFxuICAgIEhyTGluZUNvbXBvbmVudCxcbiAgICBGaWxlUHJldmlld0NvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNZWRpYWxRdWVzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAT3V0cHV0KCkgcXVlc3Rpb25zVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgY2x1c3RlcklkIDogYW55ID0gaW5wdXQ8YW55PigpOyAvLyBub24gbWFuZGF0b3J5IGNsdXN0ZXIgaWRcbiAgQElucHV0KCkgdHJpZ2dlclZhbGlkYXRpb24/OiBTdWJqZWN0PHZvaWQ+O1xuICBtZWRpYWxRdWVzdGlvblJlc3BvbnNlID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlIDogYW55ID0gaW5wdXQ8YW55PigpO1xuICBkZWZhdWx0VmFsdWVzIDogYW55ID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25UeXBlOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblV3SWQgOiBhbnkgPSBcIlwiO1xuICBpc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgOiBhbnkgPSBudWxsO1xuICBtZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgOiBhbnkgPSB7fTtcbiAgQFZpZXdDaGlsZCgnYWRkcmVzc0lucHV0JykgYWRkcmVzc0lucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcHJpdmF0ZSBhdXRvY29tcGxldGUhOiBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlO1xuICBzYXZlUXVlc3Rpb25SZXF1ZXN0TGE6IGFueSA9IFtdO1xuICBzYXZlUXVlc3Rpb25SZXF1ZXN0UGg6IGFueSA9IFtdO1xuICBmaWVsZDogYW55ID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBxdWVzdGlvbkxpc3Q6IGFueSA9IFtdO1xuICBjdXJyZW50Q29vcmRpbmF0ZXM6IGFueSA9IHt9O1xuICBwZXJzb25Vd1Jlc3BvbnNlT2JqOiBhbnkgPSBbXTtcbiAgY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0geyBsYXQ6IDQwLjczMDYxLCBsbmc6IC03My45MzUyNDIgfTtcbiAgbGF0aXR1ZGU6IGFueTtcbiAgbG9uZ2l0dWRlOiBhbnk7XG4gIHpvb206IGFueTtcbiAgbWFya2VyOiBhbnkgPSB7fTtcblxuXG4gIHBlcnNvblV3QW5zd2VyczogYW55ID0ge1xuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0OiAnRkVFVCcsXG4gICAgbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0OiAwLFxuICAgIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dDogMCxcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQ6IDAsXG4gIH07XG4gIG1lZFF1ZXN0aW9uT2JqOiBhbnkgPSB7fTtcbiAgbGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3g6IGFueSA9IFtdO1xuICBtZWRpY2FsUXVlc3Rpb25zRmVldExpc3Q6IGFueSA9IFtdO1xuICBtZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdDogYW55ID0gW107XG4gIHF1ZXN0aW9uSGVhZGVyOiBhbnkgPSBbJ2VpYSBkZXRhaWxzJywgJ2FiaGEgZGV0YWlscycsICdwZXAgZGV0YWlscyddO1xuICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdFR5cGVzOiBhbnkgPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdDbScsXG4gICAgICB2YWx1ZTogJ0NNJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnRmVldCcsXG4gICAgICB2YWx1ZTogJ0ZFRVQnLFxuICAgIH0sXG4gIF07XG4gIHNob3dEcm9wZG93biA9IGZhbHNlO1xuICBhZGRyZXNzU3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gIGhvdmVyZWRJbmRleCA9IC0xO1xuICBzZWFyY2hUaW1lb3V0OiBhbnk7XG4gIGhvcml6b250YWxMaW5lT2JqIDogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xTdHlsZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclJhZGl1c1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXJldENvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm51ZGdlRGlzcGxheUltYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJMSV9DT01fR0VOX0NUUkxfaHJMaW5lX2hyTGluZV9WMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJTdHlsZVwiOiBcInNvbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJmaWVsZE5hbWVcIjogXCJockxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcInNvbGlkIGxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwbGFjZUhvbGRlclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNWaXNpYmxlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNEaXNhYmxlXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRWYWx1ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRvcnNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1aXJlZE1lc3NhZ2VcIjogXCJUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluTGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4TGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5NZXNzYWdlXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IFtdLFxuICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IFwiY29sLTEyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcImltYWdlVXJsXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiY29uZmlnRGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImhyVGV4dFwiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YURhdGFPYmpcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Nob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ29udHJvbFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcImhyTGluZVwiXG4gICAgICAgICAgICAgICAgfTtcbiAgcHJldmlld0ZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcblxuICAvLyBWYWxpZGF0aW9uIHN0YXRlIHRyYWNraW5nXG4gIGZpZWxkRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHsgW2Vycm9yVHlwZTogc3RyaW5nXTogYm9vbGVhbiB9IH0gPSB7fTtcbiAgZmllbGRUb3VjaGVkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmdab25lOiBOZ1pvbmUsIHB1YmxpYyBtYXN0ZXJTZXJ2aWNlIDogTWFzdGVyU2VydmljZSkge1xuICAgIGNvbnNvbGUubG9nKCdtZWRpYWxRdWVzdGlvblJlc3BvbnNlZWVlZWUnLCB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKSk7XG4gICAgY29uc29sZS5sb2coJ3BlcnNvbnR5cGUnLCB0aGlzLnBlcnNvblR5cGUoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyVmFsaWRhdGlvbikge1xuICAgIHRoaXMudHJpZ2dlclZhbGlkYXRpb24uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKHRydWUpO1xuICAgIH0pO1xuICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgKChjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddLmN1cnJlbnRWYWx1ZSkpIHx8XG4gICAgICAoKGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddLmN1cnJlbnRWYWx1ZSkpXG4gICAgKSB7XG4gICAgICBpZiAoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigocG9zaXRpb24pID0+IHtcbiAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xuICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZTtcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHtcbiAgICAgICAgICAgIGxhdDogdGhpcy5sYXRpdHVkZSxcbiAgICAgICAgICAgIGxuZzogdGhpcy5sb25naXR1ZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgLi4udGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpO1xuICAgIH1cblxuICAgIGlmKCgoY2hhbmdlc1snZGVmYXVsdFZhbHVlcyddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ2RlZmF1bHRWYWx1ZXMnXS5jdXJyZW50VmFsdWUpKSkge1xuICAgICAgaWYodHlwZW9mIHRoaXMuZGVmYXVsdFZhbHVlcygpID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2VycyA9IHsuLi50aGlzLnBlcnNvblV3QW5zd2VycywgLi4udGhpcy5kZWZhdWx0VmFsdWVzKCl9O1xuICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gJyc7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gJyc7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJyc7XG5cbiAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgIGlmIChzZWN0aW9uLnF1ZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHNlY3Rpb24ucXVlc3Rpb25zKSkge1xuICAgIC8vICAgICBzZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgc3dpdGNoIChxdWVzdGlvbi5jYW1tdW5kYVF1ZXN0aW9uQ29kZSkge1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhUJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFRGJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFRJJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKFxuICAgICAgdGhpcy5hZGRyZXNzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICB7XG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcbiAgICAgICAgY29tcG9uZW50UmVzdHJpY3Rpb25zOiB7IGNvdW50cnk6ICdJTicgfSxcbiAgICAgICAgZmllbGRzOiBbJ3BsYWNlX2lkJywgJ2dlb21ldHJ5JywgJ25hbWUnLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLm9uUGxhY2VTZWxlY3RlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uUGxhY2VTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBwbGFjZSA9IHRoaXMuYXV0b2NvbXBsZXRlLmdldFBsYWNlKCk7XG5cbiAgICBpZiAoIXBsYWNlLmdlb21ldHJ5IHx8ICFwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ05vIGRldGFpbHMgYXZhaWxhYmxlIGZvciBpbnB1dDogJywgcGxhY2UubmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbjtcbiAgICB0aGlzLmNlbnRlciA9IHtcbiAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXG4gICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcblxuICAgIGlmIChwbGFjZS5nZW9tZXRyeS52aWV3cG9ydCkge1xuICAgICAgdGhpcy56b29tID0gMTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuem9vbSA9IDEzO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBwbGFjZTonLCB7XG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxuICAgICAgYWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCk6IHZvaWQge1xuICAgIGNvbnN0IGFkZHJlc3NEYXRhID0ge1xuICAgICAgcGxhY2VJZDogcGxhY2UucGxhY2VfaWQsXG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxuICAgICAgZm9ybWF0dGVkQWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXG4gICAgfTtcbiAgfVxuXG4gIHNlYXJjaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIGdlb2NvZGVyLmdlb2NvZGUoeyBhZGRyZXNzOiBhZGRyZXNzIH0sIChyZXN1bHRzLCBzdGF0dXMpID0+IHtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cyAmJiByZXN1bHRzWzBdKSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbjtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHtcbiAgICAgICAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXG4gICAgICAgICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnR2VvY29kZSB3YXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAnICsgc3RhdHVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkFkZHJlc3NJbnB1dEtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIC8vIENsZWFyIHByZXZpb3VzIHRpbWVvdXRcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYXJyb3cga2V5IG5hdmlnYXRpb25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggKyAxLFxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5ob3ZlcmVkSW5kZXggLSAxLCAtMSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPj0gMCAmJlxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdEFkZHJlc3ModGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA8IDIpIHtcbiAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hBZGRyZXNzZXMocXVlcnkpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBzZWFyY2hBZGRyZXNzZXMocXVlcnk6IHN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdGhpcyB3aXRoIHlvdXIgYWN0dWFsIGFkZHJlc3Mgc2VhcmNoIEFQSSBjYWxsXG4gICAgLy8gRm9yIGV4YW1wbGUsIHVzaW5nIEdvb2dsZSBQbGFjZXMgQVBJOlxuXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2VydmljZSgpO1xuICAgIHNlcnZpY2UuZ2V0UGxhY2VQcmVkaWN0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHF1ZXJ5LFxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXG4gICAgICB9LFxuICAgICAgKHByZWRpY3Rpb25zLCBzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiZcbiAgICAgICAgICBwcmVkaWN0aW9uc1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IHByZWRpY3Rpb25zLm1hcCgocHJlZGljdGlvbikgPT4gKHtcbiAgICAgICAgICAgIHBsYWNlX2lkOiBwcmVkaWN0aW9uLnBsYWNlX2lkLFxuICAgICAgICAgICAgbWFpbl90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5tYWluX3RleHQsXG4gICAgICAgICAgICBzZWNvbmRhcnlfdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcuc2Vjb25kYXJ5X3RleHQsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJlZGljdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgY29uc3QgYWRkcmVzc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcjYWRkcmVzc0lucHV0J1xuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoYWRkcmVzc0lucHV0KSB7XG4gICAgICBhZGRyZXNzSW5wdXQudmFsdWUgPSBzdWdnZXN0aW9uLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2UoXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICk7XG4gICAgc2VydmljZS5nZXREZXRhaWxzKFxuICAgICAge1xuICAgICAgICBwbGFjZUlkOiBzdWdnZXN0aW9uLnBsYWNlX2lkLFxuICAgICAgICBmaWVsZHM6IFsnZ2VvbWV0cnknLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcbiAgICAgIH0sXG4gICAgICAocGxhY2UsIHN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJiBwbGFjZSkge1xuICAgICAgICAgIGNvbnN0IGxhdCA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubGF0KCk7XG4gICAgICAgICAgY29uc3QgbG5nID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sbmcoKTtcblxuICAgICAgICAgIGlmIChsYXQgIT09IHVuZGVmaW5lZCAmJiBsbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBsbmc7XG4gICAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gbGF0O1xuXG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgbGF0LCBsbmcgfTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5wdXRCbHVyKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShhcnJheU9mT2JqIDogYW55KSB7XG4gICAgaWYoYXJyYXlPZk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicgfHwgYXJyYXlPZk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gICdMaWZlTWVkaUNuZHRuJykge1xuICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgPSBhcnJheU9mT2JqO1xuICAgIH1cbiAgICBpZih0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYXJyYXlPZk9ialsncGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5J10pKSB7XG4gICAgICBhcnJheU9mT2JqWydwZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHknXS5mb3JFYWNoKChzaW5nbGVTdWJBcnJheSA6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlU3ViQXJyYXkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpIHtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3QpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCkpIHtcbiAgICAgIGxldCBhcnJheU9mS2V5cyA6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpO1xuICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55LCBzaW5nbGVLZXlMZW5ndGggOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSwgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoIDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBlcnNvblV3QW5zd2VycyhzaW5nbGVBbnN3ZXJPYmopO1xuICAgICAgICAgICAgaWYoc2luZ2xlS2V5TGVuZ3RoID09PSAoYXJyYXlPZktleXMubGVuZ3RoIC0gMSkgJiYgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoID09PSAodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCkge1xuICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gW107XG4gICAgbGV0IGRhdGE6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpO1xuICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3ggPSBbXTtcblxuICAgIGxldCBpc0Rpc2FibGUgOiBhbnkgPSBmYWxzZTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKSkgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkgIDogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAgIGxldCBwZXJzb25Vd0lkQXJyYXk6IGFueSA9IFtdO1xuICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgIHBlcnNvblV3SWRBcnJheS5wdXNoKHNpbmdsZVF1ZXN0aW9uT2JqWydwZXJzb25VV0lkJ10pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pXG4gICAgICApIHtcblxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3SWQgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXSkpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3RpdGxlJ10gPT09ICdNZWRpY2FsIERldGFpbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXG4gICAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZSgvXFxcXG4vZywgJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV07XG5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzaW5nbGVRdWVzdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1BBTicpIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICd7XCJUeXBlXCI6XCJBbHBoYU51bWVyaWNcIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIi9eKFthLXpBLVpdKXs1fShbMC05XSl7NH0oW2EtekEtWl0pezF9PyQvXCJ9JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0Z0Y2FDbnRjRGV0bHMnKSB7XG4gICAgICAgICAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID0gJ3tcImN1c3RvbVZhbGlkYXRpb25cIjpbe1wiY291bnRyeVwiOlwiSU5cIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIigoXls2LTldKXsxfShbMC05XSl7OX0kKVwifSx7XCJjb3VudHJ5XCI6XCJPVEhFUlwiLFwiTWluVmFsdWVcIjpcIjVcIixcIk1heFZhbHVlXCI6XCIxNFwifV19JztcbiAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgICAgICAgXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCcpIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xuICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlQWxsKCdcXFxcbicsICc8YnI+Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0ZlZXRMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ0ZSRUVURVhUJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXV1bXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ04nLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnWScsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPSAnSEFSRCBDT1BZJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uc29ydChcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25zTGlzdEZvckxBOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnc3RlcCddID09PSBzdGVwc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgc3RlcDogc3RlcHMsXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSkge1xuICAgICAgICAgICAgICAgIC8vIEhhcmQgQ29weSBhbmQgTWFwIHF1ZXN0aW9uXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdNQVAnLFxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdZJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGlmIE5SSSB0aGVuIHBhc3Nwb3J0IHVwbG9hZCBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ05hdGlvbmFsaXR5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcXVlc3Rpb25zTGlzdEZvckxBLnB1c2gob2JqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlcjogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddKTtcbiAgICAgICAgICAgIC8vIGlmIChsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXIgIT09IHRoaXMubnVtYmVyTWludXNPbmUpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gcXVlc3Rpb25zTGlzdEZvckxBO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmogPSBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0KSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpICkge1xuICAgICAgICAgIGxldCBpc1N1YlF1ZXN0aW9uRXhpc3RzOiBhbnkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA9IG51bGw7XG4gICAgICAgICAgbGV0IGFycmF5T2ZLZXlzIDogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCk7XG4gICAgICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldKSkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShzaW5nbGVBbnN3ZXJPYmopO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldFN1YlF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsXG4gICAgICAgICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbJ2Fuc3dlciddLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChzdWJRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydChcbiAgICAgICAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGVyc29uVVdJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgKHNpbmdsZTogYW55KSA9PiBzaW5nbGVbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ11cbiAgICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gc3ViUXVlc3Rpb25SZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgICAgICAgICAgICAgICBdID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpLmZvckVhY2goKHNpbmdsZVBlcnNvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF0pKSB7XG4gICAgICAgICAgLy8gICAgIGxldCBhcnJheU9mS2V5cyA9IE9iamVjdC5rZXlzKHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXSk7XG4gICAgICAgICAgLy8gICAgIGlmIChhcnJheU9mS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoYW5zd2VyT2JqOiBhbnkpID0+IHtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG5cblxuICAgICAgICAgIC8vICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IFtdO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gbGV0IGxpc3RPZk9wdGlvbnNTZWxlY3RlZCA6IGFueSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxpc3RPZk9wdGlvbnNTZWxlY3RlZC5mb3JFYWNoKChzaW5nbGVFbGVtZW50IDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZERvbWFpblZhbHVlT2JqIDogYW55ID0gZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10uZmlsdGVyKChzaW5nbGVPYmogOiBhbnkpID0+IHNpbmdsZU9ialsnZG9tYWluSW50ZXJuYWxWYWx1ZSddID09PSBzaW5nbGVFbGVtZW50KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkRG9tYWluVmFsdWVPYmopKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0ucHVzaCh7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICAgIGxhYmVsIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluVWlWYWx1ZSddLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICB2YWx1ZSA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlclxuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBhbnN3ZXJPYmpbJ2Fuc3dlciddO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxldCBmZWV0QW5zd2VyID0gYW5zd2VyT2JqWydhbnN3ZXInXS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IGZlZXRBbnN3ZXJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIGlmIChzaW5nbGVRdWVzdGlvblJlc3BvbnNlWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddICYmIHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bicgfHwgYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgaXNTdWJRdWVzdGlvbkV4aXN0cyA9IHRydWU7XG5cblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yRGlzZWFzZVwiOiBcIm1kZWljYWxIaXN0b3J5XCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiYXBpVXJsXCI6IFwiaHR0cHM6Ly9wcmVwcm9kLWRpcmVjdHBvcnRhbGxpZmUuZ29kaWdpdC5jb20vRGlyZWN0UG9ydGFsTGlmZS9saWZlL2ZldGNoU3ViUXVlc3Rpb25zXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidXJsUGFyYW1Gb3JQZXJzb25Vd0lkXCI6IFwicGVyc29uVVdJRFwiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInRva2VuQ29va2llUGFyYW1cIjogXCJ2M1Rva2VuXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiaXNTZW5kVG9rZW5cIjogZmFsc2VcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnModGhpcy5maWVsZCgpPy5jb25maWdEYXRhLCBhbnN3ZXJPYmpbJ2Fuc3dlciddLCBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSkuc3Vic2NyaWJlKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoc3ViUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblJlc3BvbnNlKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pICYmXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSA9IFtzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT4gb2JqZWN0WydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwcyk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9iaiA6IFtdLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddIDogJycsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogYW5zd2VyT2JqWydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc2FibGVDb25maXJtYXRpb25CdXR0b24gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gZWxzZSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKHR5cGVvZiBhbnN3ZXJPYmouYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnWScgJiYgYW5zd2VyT2JqLmFuc3dlciAhPT0gJ04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqLmFuc3dlci5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKS5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlcl0gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5hbnN3ZXJdID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmopO1xuICAgICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vIH0pO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcblxuICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ10gPSB7XG4gICAgICBjb250cm9sU3R5bGU6IHtcbiAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgIGNvbnRyb2xNZXRhSWQ6ICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICB9LFxuICAgICAgZmllbGROYW1lOiBudWxsLFxuICAgICAgbGFiZWw6ICdmZWV0IC8gaW5jaGVzJyxcbiAgICAgIHBsYWNlSG9sZGVyOiAnJyxcbiAgICAgIG1ldGFJZDogJycsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0Rpc2FibGU6IGlzRGlzYWJsZSxcbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgaXNSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVkTWVzc2FnZTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5JyxcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgICBtaW5MZW5ndGhNZXNzYWdlOiBudWxsLFxuICAgICAgICBtYXhMZW5ndGg6IDE1MCxcbiAgICAgICAgbWF4TGVuZ3RoTWVzc2FnZTogbnVsbCxcbiAgICAgICAgcGF0dGVybjogbnVsbCxcbiAgICAgICAgcGF0dGVybk1lc3NhZ2U6ICcnLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQ20nLFxuICAgICAgICAgIHZhbHVlOiAnQ00nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGZWV0JyxcbiAgICAgICAgICB2YWx1ZTogJ0ZFRVQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBzdHlsZTogbnVsbCxcbiAgICAgIGltYWdlVXJsOiBudWxsLFxuICAgICAgY29uZmlnRGF0YToge30sXG4gICAgICBtZXRhRGF0YU9iajogbnVsbCxcbiAgICAgIGlzU2hvd0xhYmVsOiBmYWxzZSxcbiAgICAgIGlzTWFzdGVyQ29udHJvbDogZmFsc2UsXG4gICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmo6IGFueSkge1xuXG4gICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IGFuc3dlck9ialsnYW5zd2VyJ107XG4gICAgfVxuICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xuICAgICAgbGV0IGZlZXRBbnN3ZXIgPSBhbnN3ZXJPYmpbJ2Fuc3dlciddLnNwbGl0KCcuJyk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmpbJ2Fuc3dlciddKSAmJiBhbnN3ZXJPYmpbJ2Fuc3dlciddLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gZmVldEFuc3dlclsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcwJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10pO1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSkge1xuICAgICAgaWYoZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmoucGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5KSkge1xuICAgICAgYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eS5mb3JFYWNoKChzdWJxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUGVyc29uVXdBbnN3ZXJzKHN1YnF1ZXN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKClcbiAgICB9XG4gIH1cblxudmFsaWRhdGVGaWVsZChxdWVzdGlvbklkOiBzdHJpbmcsIHF1ZXN0aW9uOiBhbnkpIHtcbiAgdGhpcy5maWVsZFRvdWNoZWRbcXVlc3Rpb25JZF0gPSB0cnVlO1xuXG4gICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRGaWVsZChxdWVzdGlvbik/LnZhbGlkYXRvcnM7XG4gICBjb25zdCB2YWx1ZSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uSWRdO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBlcnJvcnMgb2JqZWN0IGZvciB0aGlzIGZpZWxkXG4gICAgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSA9IHt9O1xuXG5cblxuICAgIC8vIFJlcXVpcmVkIHZhbGlkYXRpb25cbiAgICBpZiAodmFsaWRhdG9ycz8uaXNSZXF1aXJlZCAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWUpKSB7XG4gICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWydyZXF1aXJlZCddID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIG90aGVyIHZhbGlkYXRpb25zIGlmIHZhbHVlIGlzIGVtcHR5XG4gICAgaWYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZSkpIHJldHVybjtcblxuICAgIC8vIFR5cGUgdmFsaWRhdGlvbiBmcm9tIEpTT04gKE51bWVyaWMsIEFscGhhTnVtZXJpYylcbiAgICBpZiAodmFsaWRhdG9ycz8ucGF0dGVybikge1xuICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodmFsaWRhdG9ycy5wYXR0ZXJuKTtcbiAgaWYgKCFyZWdleC50ZXN0KHZhbHVlLnRvU3RyaW5nKCkpKSB7XG4gICAgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXVsndHlwZSddID0gdHJ1ZTtcbiAgfVxuXG4gICAgICB9XG5cblxuICAgIC8vIE1pblZhbHVlIHZhbGlkYXRpb24gZnJvbSBKU09OXG4gICAgaWYgKHZhbGlkYXRvcnM/Lm1pbkxlbmd0aCAmJiB2YWxpZGF0b3JzLm1heExlbmd0aCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgbWluVmFsID12YWxpZGF0b3JzLm1pbkxlbmd0aDtcbiAgICAgIGNvbnN0IG1heFZhbD0gdmFsaWRhdG9ycy5tYXhMZW5ndGg7XG4gICAgICBpZiAodmFsaWRhdG9ycy5wYXR0ZXJuPT0nXlswLTldKyQnKSB7XG4gICAgICAgIC8vIEZvciBudW1lcmljLCBjb21wYXJlIGFzIG51bWJlcnNcbiAgICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IG1pblZhbCB8fCBwYXJzZUludCh2YWx1ZSkgPiBtYXhWYWwpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWydyYW5nZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG90aGVyIHR5cGVzLCBjb21wYXJlIHN0cmluZyBsZW5ndGhcbiAgICAgICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoIDwgbWluVmFsIHx8IHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID4gbWF4VmFsKSB7XG4gICAgICAgICAgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXVsncmFuZ2UnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnVmFsaWRhdGlvbiBlcnJvcnMgZm9yJywgcXVlc3Rpb25JZCwgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSk7XG5cbiAgfVxuXG5cblxuICBoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkVG91Y2hlZFtxdWVzdGlvbklkXSAmJlxuICAgICAgICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdICYmXG4gICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0pLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbklkOiBzdHJpbmcsIHF1ZXN0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5maWVsZFRvdWNoZWRbcXVlc3Rpb25JZF0gfHwgIXRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0pIHJldHVybiAnJztcblxuICAgIGlmKHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0pe1xuICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF07XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHF1ZXN0aW9uPy5maWVsZD8udmFsaWRhdG9ycztcblxuXG4gICAgaWYgKGVycm9yc1sncmVxdWlyZWQnXSkge1xuICAgICAgaWYocXVlc3Rpb24/LmZpZWxkPy5jb250cm9sVHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgcmV0dXJuIHZhbGlkYXRvcnM/LnJlcXVpcmVkTWVzc2FnZSB8fCBgUGxlYXNlIHNlbGVjdCBhbnkgb25lIG9wdGlvbmA7XG5cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0b3JzPy5yZXF1aXJlZE1lc3NhZ2UgfHwgYFBsZWFzZSBlbnRlciAke3F1ZXN0aW9uPy5xdWVzdGlvblRleHQgfHwgJ3RoaXMgZmllbGQnfWA7XG5cblxuICAgIH1cbiAgICBpZiAoZXJyb3JzWyd0eXBlJ10pIHtcbiAgICAgcmV0dXJuIHZhbGlkYXRvcnM/LnBhdHRlcm5NZXNzYWdlIHx8ICdJbnZhbGlkIGlucHV0IHR5cGUnO1xuICAgIH1cbiAgICBpZiAoZXJyb3JzWydyYW5nZSddKSB7XG4gICAgICByZXR1cm4gYFBsZWFzZSBlbnRlciBhIHZhbGlkICR7cXVlc3Rpb24/LnF1ZXN0aW9uVGV4dCB8fCAndmFsdWUnfWA7XG4gICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHZhbHVlID09PSAnJyB8fFxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSAne30nXG4gICAgKTtcbiAgfVxuXG4gIGdldFRpdGxlQ2FzZShoZWFkZXI6IGFueSk6IGFueSB7XG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25IZWFkZXIuaW5jbHVkZXMoaGVhZGVyLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIGxldCB2YWwgPSBoZWFkZXIuc3BsaXQoJyAnKTtcbiAgICAgICAgcmV0dXJuIHZhbFswXS50b1VwcGVyQ2FzZSgpICsgJyAnICsgdGhpcy50b1RpdGxlQ2FzZSh2YWxbMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGhlYWRlci50b1VwcGVyQ2FzZSgpID09PSAnRkFUQ0EgREVUQUlMUycpIHtcbiAgICAgICAgICByZXR1cm4gaGVhZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGhlYWRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9UaXRsZUNhc2UodmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgIC9cXHdcXFMqL2csXG4gICAgICAgICAgKHR4dDogYW55KSA9PiB0eHRbMF0udG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkKHF1ZXN0aW9uT2JqOiBhbnkpIHtcbiAgICBsZXQgb3B0aW9uc09iajogYW55ID0gW107XG4gICAgbGV0IGNvbnRyb2xTdHlsZSA6IGFueSA9IHt9O1xuICAgIGlmIChxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pIHtcbiAgICAgIHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVPcHRpb25WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIG9wdGlvbnNPYmoucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5VaVZhbHVlJ10sXG4gICAgICAgICAgdmFsdWU6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBpc0Rpc2FibGUgOiBhbnkgPSBmYWxzZTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKSkgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkgIDogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIGxldCBtaW5MZW5ndGg6IGFueSA9IG51bGw7XG4gICAgbGV0IG1heExlbmd0aDogYW55ID0gMjAwO1xuICAgIGxldCBwYXR0ZXJuOiBhbnkgPSBudWxsO1xuICAgIGxldCBwYXR0ZXJuTWVzc2FnZTogYW55ID0gbnVsbDtcbiAgIGxldCBjb25maWdEYXRhOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSlcbiAgPyB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGFcbiAgOiB7fTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25PYmpbJ2NvbmZpZ0RhdGEnXSkpIHtcbiAgICAgIGNvbmZpZ0RhdGEgPSB7Li4uY29uZmlnRGF0YSwgLi4ucXVlc3Rpb25PYmpbJ2NvbmZpZ0RhdGEnXX07XG4gICAgfVxuXG4gICAgaWYocXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAgJ1JBRElPIEJVVFRPTicgfHwgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpIHtcbiAgICAgIGNvbnRyb2xTdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMTJweFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IFwiNDAwXCIsXG4gICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogXCJNdWxpc2hcIixcbiAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImJhY2tncm91bmRcIjogXCIjRkZGRkZGXCIsXG4gICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBcIiNmZmJiMDBcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IFwiI0VDRUNFQ1wiLFxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBcIiNFQ0VDRUNcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxuICAgICAgICAgICAgICAgICAgXCJjcmVhdGVkRGF0ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJpc01hc3RlckNzc1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJjb250cm9sTWV0YUlkXCI6IFwiQUxMX0NPTV9HRU5fQ1RSTF9yYWRpb19ub21pbmVlR2VuZGVyX1YxXCIsXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcbiAgICAgICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSkpIHtcbiAgICAgIGxldCB2YWxpZGF0aW9uT2JqOiBhbnkgPSBKU09OLnBhcnNlKHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ10pKSB7XG4gICAgICAgIG1pbkxlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ107XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddKSkge1xuICAgICAgICBtYXhMZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnVHlwZSddKSkge1xuICAgICAgICBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycpIHtcbiAgICAgICAgICBwYXR0ZXJuID0gJ15bMC05XSskJztcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9ICdPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJztcbiAgICAgICAgICBjb25maWdEYXRhWydpc0FsbG93TnVtYmVyc0luVGV4dEZpZWxkcyddID0gdHJ1ZTtcbiAgICAgICAgICBtYXhMZW5ndGggPSAnOScucmVwZWF0KE51bWJlcihtYXhMZW5ndGgpKTtcbiAgICAgICAgICBjb25maWdEYXRhWydtYXhWYWx1ZSddID0gbWF4TGVuZ3RoO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21pblZhbHVlJ10gPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ0FscGhhTnVtZXJpYycpIHtcbiAgICAgICAgICBwYXR0ZXJuID0gJ15bYS16QS1aMC05XFxcXHNdKyQnO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gJ09ubHkgbGV0dGVycyBhbmQgbnVtYmVycyBhcmUgYWxsb3dlZC4nO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2lzQWxsb3dOdW1iZXJzSW5UZXh0RmllbGRzJ10gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXR0ZXJuID0gbnVsbDtcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnRGF0YTogY29uZmlnRGF0YSxcbiAgICAgIGNvbnRyb2xTdHlsZTogY29udHJvbFN0eWxlLFxuICAgICAgY29udHJvbFR5cGU6XG4gICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCdcbiAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcbiAgICAgICAgICA/ICdyYWRpbydcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyB8fFxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nXG4gICAgICAgICAgPyAnY2hlY2tib3gnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICA/ICdkYXRlJ1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nXG4gICAgICAgICAgPyAnc2VsZWN0J1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJ1xuICAgICAgICAgID8gJ2ZpbGUnXG4gICAgICAgICAgOiAnJyxcbiAgICAgIGZpZWxkTmFtZTogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXSxcbiAgICAgIGlzRGlzYWJsZSxcbiAgICAgIGxhYmVsOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXG4gICAgICBwbGFjZUhvbGRlcjogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVGV4dCddLFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBpc1JlcXVpcmVkOiBxdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIG1pbkxlbmd0aCxcbiAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICBwYXR0ZXJuLFxuICAgICAgICBwYXR0ZXJuTWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICBjc3NDbGFzczogXCJtYi0yXCIsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBvcHRpb25zOiBvcHRpb25zT2JqLFxuICAgICAgaXNTaG93TGFiZWw6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKHF1ZXN0aW9uPzogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcycsIHRoaXMucXVlc3Rpb25MaXN0KVxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucXVlc3Rpb25MaXN0KSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93UXVlc3Rpb24oc2luZ2xlUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgcXVlc3Rpb24gaWYgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBoYXNEZWZhdWx0VmFsdWUgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZGVmYXVsdFZhbHVlcygpKSAmJiBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRWYWx1ZXMoKSkuaW5jbHVkZXMocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICBpZiAoaGFzRGVmYXVsdFZhbHVlICYmIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0ge1xuICAgICAgICAgICAgICAgIC4uLnNpbmdsZVF1ZXN0aW9uWydmaWVsZCddLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNOb25lSW5Eb21haW5WYWx1ZXM6IGFueSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcbiAgICAgICAgICAgICAgICBdLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlT2JqWydkb21haW5VaVZhbHVlJ10udG9VcHBlckNhc2UoKSA9PT0gJ05PTkUnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzTm9uZUluRG9tYWluVmFsdWVzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbmUgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgc2VsZWN0ZWQgY2hlY2tib3ggcXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5kb21haW5VaVZhbHVlLnRvVXBwZXJDYXNlKCkgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05PTkUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3Q6IGFueSA9IHRoaXMuaXNCbG9ja2VkUXVlc3Rpb25zTGlzdC5maWx0ZXIoKHNpbmdsZUJsb2NrZWRPYmo6IGFueSkgPT4gc2luZ2xlQmxvY2tlZE9ialsnc2VjdGlvblRpdGxlJ10udHJpbSgpID09PSBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRyaW0oKSk7XG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3QpKSB7XG4gICAgICAgIC8vICAgaWYgKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQ3VzdG9tZXJGbG93ICYmICF0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmICgoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JBZ2VudEZsb3cgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMjAnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA1JyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNicpICYmIHRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IGhpZGRlblF1ZXN0aW9uczogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKFxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uT2JqOiBhbnkpID0+ICFzaW5nbGVTZWN0aW9uT2JqWydzaG93U2VjdGlvbiddXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGlkZGVuUXVlc3Rpb25zKSkge1xuICAgICAgICAgIGhpZGRlblF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25MaXN0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10pO1xuXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBsaXN0JywgdGhpcy5xdWVzdGlvbkxpc3QpO1xuXG5cbiAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnMpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzKS5mb3JFYWNoKChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzRm9yRmllbGQgPSB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdO1xuICAgICAgICBpZiAoZXJyb3JzRm9yRmllbGQgJiYgT2JqZWN0LmtleXMoZXJyb3JzRm9yRmllbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbklkXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGFuc3dlcnMnLCB0aGlzLnBlcnNvblV3QW5zd2Vycyk7XG4gICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKCk7XG5cblxuXG4gICAgdGhpcy5xdWVzdGlvbnNWYWx1ZUNoYW5nZS5lbWl0KHRoaXMucGVyc29uVXdBbnN3ZXJzKTtcbiAgfVxuXG4gIHNob3dRdWVzdGlvbihjdXJyZW50UXVlc3Rpb246IGFueSkge1xuICAgIGxldCBzaG93UXVlc3Rpb246IGFueSA9IGZhbHNlO1xuICAgIGxldCBzdWJRdWVzdGlvbnM6IGFueSA9IFtdO1xuICAgIC8vIGxldCBjdXJyZW50U2VjdGlvbkluZGV4OiBhbnkgPSBxdWVzdGlvbnNSZXNwb25zZVsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gcGVyc29uUm9sZSlcbiAgICAvLyBsZXQgcm9sZSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtjdXJyZW50U2VjdGlvbkluZGV4XVsncm9sZSddXG5cbiAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF0ucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgIGxldCBpc1N1YlF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBbXTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pKSB7XG4gICAgICAgIGlzU3ViUXVlc3Rpb25PYmplY3QgPSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZpbHRlcihcbiAgICAgICAgICAocXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PlxuICAgICAgICAgICAgcXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvblsncXVlc3Rpb25JZCddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdWJRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN1YlF1ZXN0aW9ucy5wdXNoKHNpbmdsZVF1ZXN0aW9uKTtcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdC5mb3JFYWNoKChzaW5nbGVTdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gIT09ICchJyAmJlxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSA9PT1cbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKSB8fFxuICAgICAgICAgICAgKHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSA9PT0gJyEnICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSAhPT1cbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCchJylbMV0pIHx8XG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXT8uaW5jbHVkZXMoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSlcbiAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0/LmZpbHRlcihcbiAgICAgICAgICAgICAgLy8gICAoc2luZ2xlT2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgIC8vICAgICBzaW5nbGVPYmogPT09XG4gICAgICAgICAgICAgIC8vICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXG4gICAgICAgICAgICAgIC8vICkubGVuZ3RoID4gMFxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9ucykgJiZcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICApIHtcbiAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ10pICYmXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXG4gICAgICApICYmXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXG4gICAgICAgIF1cbiAgICAgICkgJiZcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXG4gICAgICBdID09PSBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25BbnN3ZXInXVxuICAgICkge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknKSB7XG4gICAgICBzaG93UXVlc3Rpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3dRdWVzdGlvbjtcbiAgfVxuXG4gIHNhdmVRdWVzdGlvbkRldGFpbHMoKSB7XG4gICAgLy8gcmVtb3ZlIGFsbCBjaGVja2JveCBxdWVzdGlvbnMgcHJlc2VudCBpbiB2YWx1ZXNcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94KSkge1xuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVka2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ10pO1xuICAgICAgLy8gbGV0IHBvbGljeUFzc3VyZWRLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ10pO1xuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT25lS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ10pO1xuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkVHdvS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ10pO1xuICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKGlzTmFOKE51bWJlcihzaW5nbGVLZXkpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgICAvLyBwb2xpY3lBc3N1cmVkS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgICAvLyBsaWZlQXNzdXJlZE9uZUtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgICAvLyBsaWZlQXNzdXJlZFR3b0tleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgfVxuICAgIC8vIGxldCBoZWlnaHRJbkluY2hlc09iajogYW55ID0gW107XG4gICAgLy8gbGV0IGhlaWdodEluRmVldE9iajogYW55ID0gW107XG4gICAgLy8gbGV0IGhlaWdodEluQ2VudGltZXRlck9iajogYW55ID0gW107XG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XG4gICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XG4gICAgLy8gICBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcpO1xuICAgIC8vICAgaWYgKGxhSW5kZXggIT09IC0xICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF0pKSB7XG4gICAgLy8gICAgIGhlaWdodEluSW5jaGVzT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcbiAgICAvLyAgICAgaGVpZ2h0SW5GZWV0T2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcbiAgICAvLyAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIHZhbGlkYXRpb24gZm9yIG1lZGljYWwgYW5kIG5vbiBtZWRpY2FsIHF1ZXN0aW9ucyA6XG4gICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmouZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqOiBhbnksIHNpbmdsZVBlcnNvbkluZGV4OiBhbnkpID0+IHtcbiAgICAvLyAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgICAgIGxldCByb2xlOiBhbnkgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkJyA/IFwibGlmZSBhc3N1cmVkXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ3BvbGljeUhvbGRlcicgPyBcInBvbGljeSBob2xkZXJcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWRPbmUnID8gXCJKb2ludCBMaWZlIDFcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWRUd28nID8gXCJKb2ludCBMaWZlIDJcIiA6IFwiXCI7XG4gICAgLy8gICAgICAgc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdURUxMX1VTX01PUkUnIHx8IHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT0gJ0JBU0lDX0RFVEFJTFMnKSAmJiBpc1ZhbGlkKSB7XG5cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgZW50ZXJlZCBpbiBmZWV0XG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddKSkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFT05FJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRVRXTycpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgIC8vICAgICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKTtcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10pICYmXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFT05FJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRVRXTycpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcbiAgICAvLyAgICAgICAgICAgICBpZiAoXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdERUNMQVJBVElPTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRGJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgICgoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgLy8gICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKSAmJiBpc1ZhbGlkXG4gICAgLy8gICAgICAgICAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICBpZiAoXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHJlZGlyZWN0XG4gICAgLy8gICAgICAgICAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iajogYW55ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5xdWVzdGlvbnNQYXNzcG9ydFVwbG9hZE9iai5maWx0ZXIoKHNpbmdsZU9iajogYW55KSA9PiAoc2luZ2xlT2JqWydwZXJzb25UeXBlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddICYmIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVPYmpbJ2Rtc0lkJ10pKSk7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGRlY2xhcmF0aW9uIHF1ZXN0aW9uc1xuICAgIC8vICAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnMpICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0gPT09ICdOJykgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xuXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIG1lZGljYWwgc3ViIHF1ZXN0aW9uc1xuICAgIC8vICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpKSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgaWYgKFxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hvd1N1YlF1ZXN0aW9uKHF1ZXN0aW9uKSAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAoKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHF1ZXN0aW9uLCAnbGlmZUFzc3VyZWQnKSkpXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICkge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgYW5zd2VyIGFsbCBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgJyArIHF1ZXN0aW9uWydxdWVzdGlvbklkJ10gKyAnICcgKyBxdWVzdGlvblsncXVlc3Rpb25UZXh0J11cbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgLy8gfVxuICAgIC8vICAgICAgICAgICB9KTtcblxuICAgIC8vICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxuICAgIC8vICAgICAgICAgICAvLyBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zKSAmJiBpc1ZhbGlkKXtcbiAgICAvLyAgICAgICAgICAgLy8gc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6YW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXG4gICAgLy8gICAgICAgICAgIC8vICAgICApe1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICBpZiggaXNWYWxpZCAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnMpICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0gPT09ICdOJykgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xuXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xuICAgIC8vICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICB9XG4gICAgLy8gICAgICAgICAgIC8vIH0pO1xuICAgIC8vICAgICAgICAgICAvLyB9XG5cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuXG4gICAgLy8gaWYgKChpc1ZhbGlkIHx8IHNhdmVkcmFmdCkgfHwgdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xuICAgIC8vIGlmIChpc1ZhbGlkKSB7XG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KHRydWUpO1xuICAgICAgLy8gbGV0IHJlcXVlc3Q6IGFueSA9IFtdO1xuICAgICAgbGV0IG1haW5SZXFPYmo6IGFueSA9IFtdO1xuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnM6IGFueSA9IFtdO1xuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yTGE6IGFueSA9IFtdO1xuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yUGg6IGFueSA9IFtdO1xuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10pKSB7XG4gICAgICAgIC8vIHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vIGlmIChcbiAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXG4gICAgICAgIC8vICAgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgLy8gICAgICdURUxMX1VTX01PUkUnIHx8XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgIC8vICAgICAgICdCQVNJQ19ERVRBSUxTJylcbiAgICAgICAgLy8gKSB7XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXG4gICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgICApICYmICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgICkgJiYgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gcGFzcyBoZWlnaHQgaW4gY20gb2JqXG4gICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNtT2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICAgICApLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGluY2hlc1xuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSAqIDAuMzkzNzAxXG4gICAgICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KChoZWlnaHRJbkluY2hlcyAvIDEyKS50b1N0cmluZygpLnNwbGl0KCcuJylbMV0pID4gMTJcbiAgICAgICAgICAgICAgICA/IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDEpXG4gICAgICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcbiAgICAgICAgICAgIGxldCBpbmNoZXNvYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpbmNoZXNvYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tpbmNoZXNvYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoZWlnaHQgaW4gZmVldFxuXG4gICAgICAgICAgICBsZXQgZmVldE9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmZWV0T2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmVldE9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUZsb2F0KGhlaWdodEluRmVldCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluRmVldE9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSkge1xuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10pICpcbiAgICAgICAgICAgICAgICAgIDEyICtcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSk7XG4gICAgICAgICAgICAgIGxldCBoZWlnaHRJbkNtOiBhbnkgPSAoXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkluY2hlcykgLyAwLjM5MzcwMVxuICAgICAgICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10udG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tpbmNoZXNvYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoY21PYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2NtT2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5DbSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbUFuc3dlck9iamVjdDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxuICAgICAgICAgICAgICAgIGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3Q6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgIGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxuICAgICAgICAgICAgICAgIGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldEFuc3dlck9iamVjdCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IGlzTm9EaXNwbGF5UXVlc3Rpb25JblNlY3Rpb246IGFueSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ11cbiAgICAgICAgKVxuICAgICAgICAgID8gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAoc2luZ2xlRGF0YTogYW55KSA9PiBzaW5nbGVEYXRhWydxdWVzdGlvblR5cGUnXSA9PT0gJ05PRElTUExBWSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gfHxcbiAgICAgICAgICAgIGlzTm9EaXNwbGF5UXVlc3Rpb25JblNlY3Rpb24ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKVxuICAgICAgICApIHtcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XG4gICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSA9ICdFbmdsaXNoJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FycjogYW55ID0gW107XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJ1xuICAgICAgICAgICAgICAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIGZvciBjaGVja2JveCBxdWVzdGlvblxuXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogJycsXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvYmpbJ2Fuc3dlciddID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXG4gICAgICAgICAgICAgICAgXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gbm9uIGNoZWNrYm94IHF1ZXN0aW9uXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXG4gICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXG4gICAgICAgICAgICAgICAgICAnYW5zd2VyJ1xuICAgICAgICAgICAgICAgIF0gPVxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYoc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB7XG4gICAgICAgICAgICAvLyAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KChzaW5nbGVBbnN3ZXJPYmogOiBhbnkpID0+IChzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAgJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXG4gICAgICAgICAgICAvLyAgIGlmKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAvLyAgICAgICBhbnN3ZXI6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgLy8gICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgIC8vICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgIC8vICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgLy8gICAgIH07XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAvLyAgICAgaWYoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAvLyAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnIgOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWUgOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgb2JqWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgIC8vIG9iamVjdCBhbHJlYWR5IHRoZXJlIHNvIG92ZXIgcmlkZSB0aGUgbmV3IGFuc3dlclxuICAgICAgICAgICAgLy8gICAgIGlmKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XG4gICAgICAgICAgICAvLyAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlIDogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdWydhbnN3ZXInXSA9ICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgPyB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSksICd5eXl5LU1NLWRkJykgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgIC8vICAgICB9XG5cbiAgICAgICAgICAgIC8vICAgfVxuXG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JldEZpbmFuY0VsZ2JsJykge1xuICAgICAgICAgICAgLy8gICBsZXQgZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iajogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXG4gICAgICAgICAgICAvLyAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgIC8vICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAvLyAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgIC8vICAgICBhbnN3ZXI6IHRoaXMuc2hhcmVkU2VydmljZS5maW5hbmNpYWxFbGlnaWJpbGl0eSxcbiAgICAgICAgICAgIC8vICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgLy8gICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgIC8vICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgIC8vICAgfTtcbiAgICAgICAgICAgIC8vICAgaWYgKGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4XVsnYW5zd2VyJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHk7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfSk7XG4gICAgICBsZXQgZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0OiBhbnkgPSBbXG4gICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5tYXAoKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgIGl0ZW0ucGVyc29uVVdJZC50b1N0cmluZygpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgXTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdCkpIHtcbiAgICAgICAgbWFpblJlcXVlc3RGb3JMYSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cbiAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMF1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBtYWluUmVxdWVzdEZvclBoID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XG4gICAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgc2F2ZVJlcXVlc3RzQXJyYXk6IGFueSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkobWFpblJlcXVlc3RGb3JMYSkgJiYgdGhpcy5wZXJzb25UeXBlKCkgIT09ICdQSCcpIHtcbiAgICAgICAgdGhpcy5zYXZlUXVlc3Rpb25SZXF1ZXN0TGEgPSBtYWluUmVxdWVzdEZvckxhO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICdzYXZlUXVlc3Rpb25SZXF1ZXN0TGEnLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpXG4gICAgICAgICk7XG4gICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBMQV8ke3RoaXMuY2x1c3RlcklkKCl9YCwgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSkpXG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSAmJiB0aGlzLnBlcnNvblR5cGUoKSA9PT0gJ1BIJykge1xuICAgICAgICB0aGlzLnNhdmVRdWVzdGlvblJlcXVlc3RQaCA9IG1haW5SZXF1ZXN0Rm9yTGE7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RQaCcsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmNsdXN0ZXJJZCgpKSkge1xuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYFBIXyR7dGhpcy5jbHVzdGVySWQoKX1gLCBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKSlcbiAgICAgICAgfVxuICAgICAgICAvLyAgc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCk7XG4gIH1cblxuICBnZXRDb29raWVWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgIGxldCB0b2tlbk5hbWUgPSAnJztcbiAgICBsZXQgdG9rZW5WYWx1ZSA9ICcnO1xuICAgIGNvbnN0IGluZGV4MiA9IDI7XG4gICAgY29va2llLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiYgISFkYXRhLnNwbGl0KCc9JylbMV0pIHtcbiAgICAgICAgdG9rZW5OYW1lID0gZGF0YS5zcGxpdCgnPScpWzBdLnRyaW0oKTtcbiAgICAgICAgdG9rZW5WYWx1ZSA9IGRhdGEuc3BsaXQoJz0nKVsxXTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbmFtZSA9PT0gJ2xpbmsnICYmXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXSAhPT0gbnVsbCAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgdG9rZW5WYWx1ZSA9IHRva2VuVmFsdWUgKyAnPScgKyBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdG9rZW5WYWx1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucyhmb2N1c09uSW5WYWxpZCA6IGFueSA9IGZhbHNlKSB7XG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XG4gICAgbGV0IHZhbGlkYXRpb25NZXNzYWdlIDogYW55ID0gJyc7XG4gICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkgJiYgaXNWYWxpZCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJlxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgICAgICAnVEVMTF9VU19NT1JFJyB8fFxuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAgICAgICAnQkFTSUNfREVUQUlMUycgfHxcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgICAgICAgJ1BFUlNPTkFMX0RFVEFJTFMnKSAmJlxuICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxuICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcbiAgICAgICAgICAgICAgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlc2A7XG4gICAgICAgICAgICAgIGlmKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9ICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIC8vIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAvLyAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxuICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcblxuICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIGNlbnRpbWV0ZXJgO1xuXG4gICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCc7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgLy8gKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIC8vICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgICAgICAgICAvLyAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKVxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ107XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgKFxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAvLyApIHtcbiAgICAgICAgICAvLyAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcbiAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XG4gICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xuICAgICAgICAgIC8vICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAvLyAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAgICAgICAvLyAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgICAgICAgIC8vICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgLy8gICB9XG5cbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNWYWxpZCAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoaXNWYWxpZCAmJlxuICAgICAgICAgICAgICAgIC8vICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dKSAmJlxuICAgICAgICAgICAgICAgIC8vICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dID09PVxuICAgICAgICAgICAgICAgICAgJ04nKSB8fFxuICAgICAgICAgICAgICAhdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gfHxcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gKVxuICAgICAgICAgICAgICAvLyB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcblxuICAgICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xuICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxuICAgICAgICAgIC8vICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXG4gICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cbiAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XG4gICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xuICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgICAgICAvLyAgICAgKXtcbiAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcbiAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxuICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25UeXBlKCkpICYmIHRoaXMucGVyc29uVHlwZSA9PT0gJ1BIJykge1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXNNZWRpY2FsUXVlc3Rpb25zVmFsaWRGb3JQSCcsIGlzVmFsaWQpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndmFsaWRhdGlvbk1lc3NhZ2VGb3JNZWRpY2FsUXVlc3Rpb25zRm9yUEgnLCB2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYFBIXyR7dGhpcy5jbHVzdGVySWQoKX1faXNWYWxpZGAsIGlzVmFsaWQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpc01lZGljYWxRdWVzdGlvbnNWYWxpZCcsIGlzVmFsaWQpO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3ZhbGlkYXRpb25NZXNzYWdlRm9yTWVkaWNhbFF1ZXN0aW9ucycsIHZhbGlkYXRpb25NZXNzYWdlKTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgTEFfJHt0aGlzLmNsdXN0ZXJJZCgpfV9pc1ZhbGlkYCwgaXNWYWxpZClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9uIDogYW55KSB7XG4gICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bicgfHwgcXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nICkge1xuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0ubGVuZ3RoID4gMFxuXG4gICAgICAvLyBpZiBub25lIGlzIHNlbGVjdGVkIHRoZW4gcmVtb3ZlIGFsbCBhbmQgY2FsbCBBUElcbiAgICAgIGxldCBpc05vbmVTZWxlY3RlZCA6IGFueSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbmRJbmRleCgoc2luZ2xlT2JqIDphbnkpID0+IHNpbmdsZU9iaiA9PT0gJ05vTWVkSGlzdHJ5Jyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNOb25lU2VsZWN0ZWQgIT09ICAtMVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maWx0ZXIoKHNpbmdsZU9iaiA6IGFueSkgPT4gc2luZ2xlT2JqID09PSAnTm9NZWRIaXN0cnknKVxuICAgICAgfVxuICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdFxuICAgICAgICApKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+ICgodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHx8ICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pICYmICFzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSkgKSk7XG4gICAgICB9XG4gICAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KFxuICAgICAgLy8gICAoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+XG4gICAgICAvLyAgICAgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09XG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXG4gICAgICAvLyApO1xuICAgICAgLy8gcmVtb3ZlIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyBmcm9tIHF1ZXN0aW9ucyByZXNwb25zZSBsaXN0XG4gICAgICAvLyBpZiAoXG4gICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXggIT09IHRoaXMubnVtYmVyQ29uc3RhbnQubnVtYmVybWludXMxICYmXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICApICYmXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAvLyAgICAgXVsncXVlc3Rpb25MaXN0J11cbiAgICAgIC8vICAgKVxuICAgICAgLy8gKSB7XG4gICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcbiAgICAgICAgLy8gXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialtcbiAgICAgICAgLy8gICAncXVlc3Rpb25zUmVzcG9uc2UnXG4gICAgICAgIC8vIF1bY3VycmVudFNlY3Rpb25JbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcbiAgICAgICAgLy8gICAoc2luZ2xlTGlzdEl0ZW06IGFueSkgPT5cbiAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cbiAgICAgICAgLy8gICAgICkgfHxcbiAgICAgICAgLy8gICAgICghdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAvLyAgICAgICBzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXVxuICAgICAgICAvLyAgICAgKSAmJlxuICAgICAgICAvLyAgICAgICAhc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pXG4gICAgICAgIC8vICk7XG4gICAgICAvLyB9XG4gICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgIC8vICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgIC8vIF0uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgIC8vICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAvLyAgICAgXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcblxuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb24gOiBhbnkpID0+ICghc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpKTtcbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZU1hc3Rlck9iajogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIC8vICAgaWYgKHNpbmdsZU1hc3Rlck9ialsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkge1xuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9ucyddID0gW107XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheSh0cnVlKTtcblxuICAgICAgbGV0IHNlbGVjdGVkRGlzZWFzZXMgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS50b1N0cmluZygpO1xuICAgICAgLy8gbGV0IHJlcXVlc3Q6IGFueSA9IEpTT04ucGFyc2UoXG4gICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgLy8gICAgIHRoaXMuZmV0Y2hTdWJRdWVzdGlvbnNMaXN0W1xuICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXG4gICAgICAvLyAgICAgXS50b1N0cmluZygpXG4gICAgICAvLyAgIClcbiAgICAgIC8vICk7XG4gICAgICBpZihxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCdhcGlVcmwnKSAmJiBxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCd1cmxQYXJhbUZvckRpc2Vhc2UnKSAmJiBxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCd1cmxQYXJhbUZvclBlcnNvblV3SWQnKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ2FwaVVybCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yRGlzZWFzZSddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yUGVyc29uVXdJZCddKSkge1xuICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2UuZ2V0U3ViUXVlc3Rpb25zKHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10sIHNlbGVjdGVkRGlzZWFzZXMsIHRoaXMucGVyc29uVXdJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xuICAgICAgICAgICAgICAgIF0gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgKFxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAvLyAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddXG4gICAgICAgICAgICAgICAgLy8gICApXG4gICAgICAgICAgICAgICAgLy8gKSB7XG4gICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnN1Yk1lZGljYWxRdWVzdGlvbnNEb21haW5JbnRlcm5hbFZhbHVlc0xpc3QucHVzaChcbiAgICAgICAgICAgICAgICAvLyAgICAgICBzdWJEb21haW5bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRhdGEuc29ydChcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBkYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10gPT09IHN0ZXBzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmpcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogdGhpcy5wZXJzb25Vd0lkLFxuICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QucHVzaChvYmopO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgICAvLyBtZXJnZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgaW50byBwZXJzb24gdXcgbWFpbiBxdWVzdGlvbnMgcmVzcG9uc2UgKHJlcXVpcmVkIGZvciBzaG93IHF1ZXN0aW9uIGZ1bmN0aW9uIHRvIHdvcmspXG4gICAgICAgICAgICAgIC8vIGNsZWFyaW5nIG9uIHRvcCBiZWZvcmUgYXBpIGNhbGxcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcbiAgfVxuICBvbkRvY3VtZW50RmlsZVByZXZpZXcoZXZlbnQ6IHsgZmlsZTogRmlsZSwgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ByZXZpZXcgcmVxdWVzdGVkIGZvcjonLCBldmVudC5maWxlLm5hbWUpO1xuICAgIHRoaXMucHJldmlld0ZpbGUgPSBldmVudC5maWxlO1xuICB9XG5cbiAgY2xvc2VGaWxlUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gbnVsbDtcbiAgfVxuXG4gIGNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xuICAgICAgICBdID09PSAnRkVFVCcgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICAgICAgXVxuICAgICAgICAgICkgKiAwLjM5MzcwMVxuICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgIGxldCBoZWlnaHRJbkZlZXQ6IGFueSA9XG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIChoZWlnaHRJbkluY2hlcyAvIDEyKVxuICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXVxuICAgICAgICAgICkgPiAxMlxuICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxuICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgXSA9IGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXG4gICAgICAgICAgXSA9XG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTEnICYmXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTInICYmXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTMnXG4gICAgICAgICAgICAgID8gaGVpZ2h0SW5GZWV0XG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCcuJylbMV1cbiAgICAgICAgICAgICAgICAgIC5jaGFyQXQoMClcbiAgICAgICAgICAgICAgOiBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXG4gICAgICAgIF0gPT09ICdDTScgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgXVxuICAgICAgICApICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID1cbiAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCdcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApLnRvU3RyaW5nKClcbiAgICAgICAgICApICogMTI7XG4gICAgICAgIGxldCBoZWlnaHRJbkNtOiBhbnkgPSAoXG4gICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkluY2hlcykgLyAwLjM5MzcwMVxuICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXG4gICAgICAgIF0gPSBoZWlnaHRJbkNtO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIH1cblxuICBmb2N1c1RvRWxlbWVudChlbGVtZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IGVsZW1lbnRDb2xsZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlbGVtZW50SWQpO1xuICAgIGNvbnN0IGhlYWRlck9mZnNldCA9IDEyMDtcbiAgICBpZiAoIWVsZW1lbnRDb2xsZWN0aW9uIHx8IGVsZW1lbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudENvbGxlY3Rpb25bMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdCBzY3JvbGxDb250YWluZXI6IGFueSA9IHRoaXMuZ2V0U2Nyb2xsYWJsZVBhcmVudChlbGVtZW50KTtcblxuICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGZyYW1lIHNvIGxheW91dCBpcyBzZXR0bGVkIGJlZm9yZSBzY3JvbGxpbmcuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPVxuICAgICAgICBzY3JvbGxDb250YWluZXIgPT09IHdpbmRvd1xuICAgICAgICAgID8geyB0b3A6IDAgfVxuICAgICAgICAgIDogKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPVxuICAgICAgICBzY3JvbGxDb250YWluZXIgPT09IHdpbmRvd1xuICAgICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgMFxuICAgICAgICAgIDogKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuXG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9XG4gICAgICAgIGVsZW1lbnRSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wICsgY3VycmVudFNjcm9sbCAtIGhlYWRlck9mZnNldDtcblxuICAgICAgaWYgKHNjcm9sbENvbnRhaW5lciA9PT0gd2luZG93KSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogdGFyZ2V0UG9zaXRpb24sIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvKHtcbiAgICAgICAgICB0b3A6IHRhcmdldFBvc2l0aW9uLFxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdibGlua19tZScsICdpbnZhbGlkLWZpZWxkLW9uZS11aScpO1xuXG4gICAgICAvLyBSZW1vdmUgYmxpbmsgYW5pbWF0aW9uIGFmdGVyIGR1cmF0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdibGlua19tZScpO1xuICAgICAgfSwgMzUwMCk7XG5cbiAgICAgIC8vIFJlbW92ZSBpbnZhbGlkLWZpZWxkLW9uZS11aSBjbGFzcyB3aGVuIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIGZpZWxkXG4gICAgICBjb25zdCByZW1vdmVJbnZhbGlkQ2xhc3MgPSAoZXZlbnQ/OiBhbnkpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpbnZhbGlkLWZpZWxkLW9uZS11aScpO1xuICAgICAgICAvLyBDbGVhbiB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIGZyb20gbWFpbiBlbGVtZW50XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MsIHRydWUpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ25nTW9kZWxDaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIGV2ZW50IGxpc3RlbmVycyBmcm9tIGNoaWxkIHJhZGlvL2NoZWNrYm94IGlucHV0c1xuICAgICAgICBjb25zdCByYWRpb0lucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyk7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94SW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgICAgcmFkaW9JbnB1dHMuZm9yRWFjaCgocmFkaW86IGFueSkgPT4ge1xuICAgICAgICAgIHJhZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgICAgcmFkaW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2hlY2tib3hJbnB1dHMuZm9yRWFjaCgoY2hlY2tib3g6IGFueSkgPT4ge1xuICAgICAgICAgIGNoZWNrYm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgICAgY2hlY2tib3gucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEZvciB0ZXh0Ym94IC0gdHJpZ2dlcnMgb24gdHlwaW5nXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gRm9yIHNlbGVjdCBkcm9wZG93biAtIHRyaWdnZXJzIG9uIHZhbHVlIGNoYW5nZVxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAvLyBGb3IgZGlyZWN0IGNsaWNrIG9uIHRoZSBlbGVtZW50IC0gdXNlIGNhcHR1cmUgcGhhc2UgdG8gY2F0Y2ggY2hpbGQgZXZlbnRzXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzLCB0cnVlKTtcblxuICAgICAgLy8gRm9yIEFuZ3VsYXIgbmdNb2RlbCBjaGFuZ2VzXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ25nTW9kZWxDaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAvLyBIYW5kbGUgcmFkaW8gYnV0dG9ucyB3aXRoaW4gdGhlIGVsZW1lbnQgKGNvbW1vbiBpbiBBbmd1bGFyIGZvcm1zKVxuICAgICAgY29uc3QgcmFkaW9JbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpO1xuICAgICAgcmFkaW9JbnB1dHMuZm9yRWFjaCgocmFkaW86IGFueSkgPT4ge1xuICAgICAgICByYWRpby5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICByYWRpby5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIGNoZWNrYm94ZXMgd2l0aGluIHRoZSBlbGVtZW50IChmb3IgbXVsdGktc2VsZWN0KVxuICAgICAgY29uc3QgY2hlY2tib3hJbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuICAgICAgY2hlY2tib3hJbnB1dHMuZm9yRWFjaCgoY2hlY2tib3g6IGFueSkgPT4ge1xuICAgICAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2Nyb2xsYWJsZVBhcmVudChub2RlOiBIVE1MRWxlbWVudCB8IG51bGwpOiBIVE1MRWxlbWVudCB8IFdpbmRvdyB7XG4gICAgbGV0IHBhcmVudCA9IG5vZGU/LnBhcmVudEVsZW1lbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgY29uc3Qgb3ZlcmZsb3dZID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KS5vdmVyZmxvd1k7XG4gICAgICBpZiAob3ZlcmZsb3dZID09PSAnYXV0bycgfHwgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJykge1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbn1cbiIsIjxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgcXVlc3Rpb25MaXN0XCI+XG4gIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgIWNoZWNrSWZWYWx1ZUlzRW1wdHkoc2VjdGlvblsncXVlc3Rpb25zJ10pICYmXG4gICAgICAgIHNlY3Rpb25bJ3Nob3dTZWN0aW9uJ11cbiAgICAgIFwiIGNsYXNzPVwiY2FyZCBwLTMgbWItNFwiIGlkPVwicGVyc29uVXdNZWRpY2FsUXVlc3Rpb25zXCI+XG4gICAgPGg2IGNsYXNzPVwicGFnZS10aXRsZSBib2xkLWxhYmVsXCI+XG4gICAgICB7eyBnZXRUaXRsZUNhc2Uoc2VjdGlvbltcInNlY3Rpb25OYW1lXCJdKSB9fVxuICAgIDwvaDY+XG4gICAgPGxpYi1oci1saW5lIFtmaWVsZF09XCJob3Jpem9udGFsTGluZU9ialwiIC8+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb25zIG9mIHNlY3Rpb25bJ3F1ZXN0aW9ucyddXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdJTUFHRSBURVhUJ1wiPlxuICAgICAgICAgIDxpbWcgW3NyY109XCJxdWVzdGlvbnNbJ3NhbXBsZVMzTGluayddXCIgY2xhc3M9XCJkLWJsb2NrIG14LWF1dG9cIiBbYWx0XT1cInF1ZXN0aW9uc1sndGl0bGUnXVwiPlxuICAgICAgICAgIDxoMyBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uc1sncXVlc3Rpb25UZXh0J11cIj48L2gzPlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG15LTFcIj5cbiAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiXG4gICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpOyByZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjYXJkLXRvcGljIGQtYmxvY2sgZmllbGQtbGFibGVcIj5IZWlnaHRcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjZWUwMDAwXCI+JiM0Mjs8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cIiAnY29sLWF1dG8gcHgtMCBteS0wIHB5LTAgaGVpZ2h0aW5wdXQgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1wiXG4gICAgICAgICAgaWQ9XCJtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXRcIiAoZm9jdXNvdXQpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLTEyIG15LTFcIiAqbmdJZj1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IHB5LTAgaGVpZ2h0SW5wdXRzXCI+XG4gICAgICAgICAgICAgIDxsaWItdGV4dGJveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XG4gICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpOyBjaGVja0FuZFVwZGF0ZUhlaWdodFVuaXQoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBwZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXG4gICAgICAgICAgICAgICAgXSA9PT0gJ0ZFRVQnXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxuICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cbiAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiXG4gICAgICAgICAgICAgICAgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XG4gICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja0FuZFVwZGF0ZUhlaWdodFVuaXQoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMCBwdC0wXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdNQVAnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFwLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLXNlYXJjaC1jb250YWluZXIgbWItM1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBsb25naXR1ZGVcIiBzdGVwPVwiYW55XCIgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgY2FyZC10b3BpY1wiPkxhdGl0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGxhdGl0dWRlXCIgc3RlcD1cImFueVwiIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxpbnB1dCAjYWRkcmVzc0lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBmb3IgYWRkcmVzc1wiXG4gICAgICAgICAgICAgIChrZXl1cCk9XCJvbkFkZHJlc3NJbnB1dEtleXVwKCRldmVudClcIiAoZm9jdXMpPVwic2hvd0Ryb3Bkb3duID0gdHJ1ZVwiIChibHVyKT1cIm9uSW5wdXRCbHVyKClcIlxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RHJvcGRvd24gJiYgYWRkcmVzc1N1Z2dlc3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1kcm9wZG93biBwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBtdC0xXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ6LWluZGV4OiAxMDAwOyBtYXgtaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IGJvcmRlci1yYWRpdXM6IDRweDsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3VnZ2VzdGlvbiBvZiBhZGRyZXNzU3VnZ2VzdGlvbnM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcC0yXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XCIgKG1vdXNlZG93bik9XCJzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb24pXCJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkSW5kZXggPSBpXCIgW2NsYXNzLmJnLWxpZ2h0XT1cImhvdmVyZWRJbmRleCA9PT0gaVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+e3sgc3VnZ2VzdGlvbi5tYWluX3RleHQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgc3VnZ2VzdGlvbi5zZWNvbmRhcnlfdGV4dCB9fTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U3RhcnQgdHlwaW5nIHRvIHNlYXJjaCBmb3IgYWRkcmVzc2VzPC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Z29vZ2xlLW1hcCBbY2VudGVyXT1cImNlbnRlclwiIFt6b29tXT1cInpvb21cIj5cbiAgICAgICAgICAgIDxtYXAtbWFya2VyIFtwb3NpdGlvbl09XCJjdXJyZW50Q29vcmRpbmF0ZXNcIj48L21hcC1tYXJrZXI+XG4gICAgICAgICAgPC9nb29nbGUtbWFwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgKHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdSQURJTyBCVVRUT04nIHx8XG4gICAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykgJiZcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiPlxuICAgICAgICA8bGliLXJhZGlvIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKTsgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiXG4gICAgICAgICAgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHRleHQtZGFuZ2VyIG10LTFcIiAqbmdJZj1cImhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25zLnF1ZXN0aW9uSWQpXCI+XG4gICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm15LTFcIiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItbXVsdGlwbGUtc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKTsgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbnMpXCJcbiAgICAgICAgICBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPGxpYi1jaGVja2JveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7IHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIlxuICAgICAgICAgIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgIHt7IGdldEZpZWxkRXJyb3JNZXNzYWdlKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS0xXCIgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgXCIgKGZvY3Vzb3V0KT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIj5cbiAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKTsgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHRleHQtZGFuZ2VyIG10LTFcIiAqbmdJZj1cImhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25zLnF1ZXN0aW9uSWQpXCI+XG4gICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm15LTFcIiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIlwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoZmlsZVByZXZpZXcpPVwib25Eb2N1bWVudEZpbGVQcmV2aWV3KCRldmVudClcIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7XCIgLz5cbiAgICAgICAgPGxpYi1maWxlLXByZXZpZXcgKm5nSWY9XCIgcHJldmlld0ZpbGVcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgW2ZpbGVdPVwicHJldmlld0ZpbGVcIlxuICAgICAgICAgIChjbG9zZWQpPVwiY2xvc2VGaWxlUHJldmlldygpXCI+XG4gICAgICAgIDwvbGliLWZpbGUtcHJldmlldz5cbiAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
2658
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQXlCLEtBQUssRUFBMEMsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVwTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLG9C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Q0FBQyxTQUFTLENBQUM7WUFDNUQsSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQXBtR1Usd0JBQXdCOzRGQUF4Qix3QkFBd0Isd3lDQ3hDckMsMHFXQXVOTSx3MkNEaE1GLFlBQVksNlZBQ1osV0FBVyxneEJBQ1gsbUJBQW1CLCtCQUNuQixnQkFBZ0IsMkhBQ2hCLGNBQWMsMkhBQ2QsaUJBQWlCLDhIQUNqQixlQUFlLGtKQUNmLFlBQVkscUtBQ1osZUFBZSw4TUFDZix1QkFBdUIsNklBQ3ZCLGdCQUFnQiwraUNBQ2hCLGVBQWUsMkVBQ2Ysb0JBQW9COzs0RkFLWCx3QkFBd0I7a0JBdEJwQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBRVA7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2Ysb0JBQW9CO3FCQUNyQjt1R0FLUyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHb29nbGVNYXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZ29vZ2xlLW1hcHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE5nWm9uZSwgQWZ0ZXJWaWV3SW5pdCwgaW5wdXQsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgcXVlc3Rpb25zUmVzcG9uc2UgZnJvbSAnLi9xdWVzdGlvbnMuanNvbidcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IERvYkNvbXBvbmVudCB9IGZyb20gJy4uL2RvYi9kb2IuY29tcG9uZW50JztcbmltcG9ydCB7IFVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpcGxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGlwbGUtc2VsZWN0L211bHRpcGxlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHJMaW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vaHItbGluZS9oci1saW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXN0ZXJDb250cm9sU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1wcmV2aWV3L2ZpbGUtcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbWVkaWFsLXF1ZXN0aW9ucycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGV4dGJveENvbXBvbmVudCxcbiAgICBSYWRpb0NvbXBvbmVudCxcbiAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICBTZWxlY3RDb21wb25lbnQsXG4gICAgRG9iQ29tcG9uZW50LFxuICAgIFVwbG9hZENvbXBvbmVudCxcbiAgICBNdWx0aXBsZVNlbGVjdENvbXBvbmVudCxcbiAgICBHb29nbGVNYXBzTW9kdWxlLFxuICAgIEhyTGluZUNvbXBvbmVudCxcbiAgICBGaWxlUHJldmlld0NvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNZWRpYWxRdWVzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAT3V0cHV0KCkgcXVlc3Rpb25zVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgY2x1c3RlcklkIDogYW55ID0gaW5wdXQ8YW55PigpOyAvLyBub24gbWFuZGF0b3J5IGNsdXN0ZXIgaWRcbiAgQElucHV0KCkgdHJpZ2dlclZhbGlkYXRpb24/OiBTdWJqZWN0PHZvaWQ+O1xuICBtZWRpYWxRdWVzdGlvblJlc3BvbnNlID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlIDogYW55ID0gaW5wdXQ8YW55PigpO1xuICBkZWZhdWx0VmFsdWVzIDogYW55ID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25UeXBlOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblV3SWQgOiBhbnkgPSBcIlwiO1xuICBpc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgOiBhbnkgPSBudWxsO1xuICBtZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgOiBhbnkgPSB7fTtcbiAgQFZpZXdDaGlsZCgnYWRkcmVzc0lucHV0JykgYWRkcmVzc0lucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcHJpdmF0ZSBhdXRvY29tcGxldGUhOiBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlO1xuICBzYXZlUXVlc3Rpb25SZXF1ZXN0TGE6IGFueSA9IFtdO1xuICBzYXZlUXVlc3Rpb25SZXF1ZXN0UGg6IGFueSA9IFtdO1xuICBmaWVsZDogYW55ID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBxdWVzdGlvbkxpc3Q6IGFueSA9IFtdO1xuICBjdXJyZW50Q29vcmRpbmF0ZXM6IGFueSA9IHt9O1xuICBwZXJzb25Vd1Jlc3BvbnNlT2JqOiBhbnkgPSBbXTtcbiAgY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0geyBsYXQ6IDQwLjczMDYxLCBsbmc6IC03My45MzUyNDIgfTtcbiAgbGF0aXR1ZGU6IGFueTtcbiAgbG9uZ2l0dWRlOiBhbnk7XG4gIHpvb206IGFueTtcbiAgbWFya2VyOiBhbnkgPSB7fTtcblxuXG4gIHBlcnNvblV3QW5zd2VyczogYW55ID0ge1xuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0OiAnRkVFVCcsXG4gICAgbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0OiAwLFxuICAgIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dDogMCxcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQ6IDAsXG4gIH07XG4gIG1lZFF1ZXN0aW9uT2JqOiBhbnkgPSB7fTtcbiAgbGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3g6IGFueSA9IFtdO1xuICBtZWRpY2FsUXVlc3Rpb25zRmVldExpc3Q6IGFueSA9IFtdO1xuICBtZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdDogYW55ID0gW107XG4gIHF1ZXN0aW9uSGVhZGVyOiBhbnkgPSBbJ2VpYSBkZXRhaWxzJywgJ2FiaGEgZGV0YWlscycsICdwZXAgZGV0YWlscyddO1xuICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdFR5cGVzOiBhbnkgPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdDbScsXG4gICAgICB2YWx1ZTogJ0NNJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnRmVldCcsXG4gICAgICB2YWx1ZTogJ0ZFRVQnLFxuICAgIH0sXG4gIF07XG4gIHNob3dEcm9wZG93biA9IGZhbHNlO1xuICBhZGRyZXNzU3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gIGhvdmVyZWRJbmRleCA9IC0xO1xuICBzZWFyY2hUaW1lb3V0OiBhbnk7XG4gIGhvcml6b250YWxMaW5lT2JqIDogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xTdHlsZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclJhZGl1c1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXJldENvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm51ZGdlRGlzcGxheUltYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJMSV9DT01fR0VOX0NUUkxfaHJMaW5lX2hyTGluZV9WMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJTdHlsZVwiOiBcInNvbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJmaWVsZE5hbWVcIjogXCJockxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcInNvbGlkIGxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwbGFjZUhvbGRlclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNWaXNpYmxlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNEaXNhYmxlXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRWYWx1ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRvcnNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1aXJlZE1lc3NhZ2VcIjogXCJUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluTGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4TGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5NZXNzYWdlXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IFtdLFxuICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IFwiY29sLTEyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcImltYWdlVXJsXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiY29uZmlnRGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImhyVGV4dFwiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YURhdGFPYmpcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Nob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ29udHJvbFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcImhyTGluZVwiXG4gICAgICAgICAgICAgICAgfTtcbiAgcHJldmlld0ZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcblxuICAvLyBWYWxpZGF0aW9uIHN0YXRlIHRyYWNraW5nXG4gIGZpZWxkRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHsgW2Vycm9yVHlwZTogc3RyaW5nXTogYm9vbGVhbiB9IH0gPSB7fTtcbiAgZmllbGRUb3VjaGVkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmdab25lOiBOZ1pvbmUsIHB1YmxpYyBtYXN0ZXJTZXJ2aWNlIDogTWFzdGVyU2VydmljZSkge1xuICAgIGNvbnNvbGUubG9nKCdtZWRpYWxRdWVzdGlvblJlc3BvbnNlZWVlZWUnLCB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKSk7XG4gICAgY29uc29sZS5sb2coJ3BlcnNvbnR5cGUnLCB0aGlzLnBlcnNvblR5cGUoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyVmFsaWRhdGlvbikge1xuICAgIHRoaXMudHJpZ2dlclZhbGlkYXRpb24uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKHRydWUpO1xuICAgIH0pO1xuICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgKChjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddLmN1cnJlbnRWYWx1ZSkpIHx8XG4gICAgICAoKGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddLmN1cnJlbnRWYWx1ZSkpXG4gICAgKSB7XG4gICAgICBpZiAoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigocG9zaXRpb24pID0+IHtcbiAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xuICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZTtcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHtcbiAgICAgICAgICAgIGxhdDogdGhpcy5sYXRpdHVkZSxcbiAgICAgICAgICAgIGxuZzogdGhpcy5sb25naXR1ZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgLi4udGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpO1xuICAgIH1cblxuICAgIGlmKCgoY2hhbmdlc1snZGVmYXVsdFZhbHVlcyddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ2RlZmF1bHRWYWx1ZXMnXS5jdXJyZW50VmFsdWUpKSkge1xuICAgICAgaWYodHlwZW9mIHRoaXMuZGVmYXVsdFZhbHVlcygpID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2VycyA9IHsuLi50aGlzLnBlcnNvblV3QW5zd2VycywgLi4udGhpcy5kZWZhdWx0VmFsdWVzKCl9O1xuICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gJyc7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gJyc7XG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJyc7XG5cbiAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgIGlmIChzZWN0aW9uLnF1ZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHNlY3Rpb24ucXVlc3Rpb25zKSkge1xuICAgIC8vICAgICBzZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgc3dpdGNoIChxdWVzdGlvbi5jYW1tdW5kYVF1ZXN0aW9uQ29kZSkge1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhUJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFRGJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFRJJzpcbiAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKFxuICAgICAgdGhpcy5hZGRyZXNzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICB7XG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcbiAgICAgICAgY29tcG9uZW50UmVzdHJpY3Rpb25zOiB7IGNvdW50cnk6ICdJTicgfSxcbiAgICAgICAgZmllbGRzOiBbJ3BsYWNlX2lkJywgJ2dlb21ldHJ5JywgJ25hbWUnLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLm9uUGxhY2VTZWxlY3RlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uUGxhY2VTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBwbGFjZSA9IHRoaXMuYXV0b2NvbXBsZXRlLmdldFBsYWNlKCk7XG5cbiAgICBpZiAoIXBsYWNlLmdlb21ldHJ5IHx8ICFwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ05vIGRldGFpbHMgYXZhaWxhYmxlIGZvciBpbnB1dDogJywgcGxhY2UubmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbjtcbiAgICB0aGlzLmNlbnRlciA9IHtcbiAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXG4gICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcblxuICAgIGlmIChwbGFjZS5nZW9tZXRyeS52aWV3cG9ydCkge1xuICAgICAgdGhpcy56b29tID0gMTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuem9vbSA9IDEzO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBwbGFjZTonLCB7XG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxuICAgICAgYWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCk6IHZvaWQge1xuICAgIGNvbnN0IGFkZHJlc3NEYXRhID0ge1xuICAgICAgcGxhY2VJZDogcGxhY2UucGxhY2VfaWQsXG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxuICAgICAgZm9ybWF0dGVkQWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXG4gICAgfTtcbiAgfVxuXG4gIHNlYXJjaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIGdlb2NvZGVyLmdlb2NvZGUoeyBhZGRyZXNzOiBhZGRyZXNzIH0sIChyZXN1bHRzLCBzdGF0dXMpID0+IHtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cyAmJiByZXN1bHRzWzBdKSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbjtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHtcbiAgICAgICAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXG4gICAgICAgICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnR2VvY29kZSB3YXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAnICsgc3RhdHVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkFkZHJlc3NJbnB1dEtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIC8vIENsZWFyIHByZXZpb3VzIHRpbWVvdXRcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYXJyb3cga2V5IG5hdmlnYXRpb25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggKyAxLFxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5ob3ZlcmVkSW5kZXggLSAxLCAtMSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPj0gMCAmJlxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdEFkZHJlc3ModGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA8IDIpIHtcbiAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hBZGRyZXNzZXMocXVlcnkpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBzZWFyY2hBZGRyZXNzZXMocXVlcnk6IHN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdGhpcyB3aXRoIHlvdXIgYWN0dWFsIGFkZHJlc3Mgc2VhcmNoIEFQSSBjYWxsXG4gICAgLy8gRm9yIGV4YW1wbGUsIHVzaW5nIEdvb2dsZSBQbGFjZXMgQVBJOlxuXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2VydmljZSgpO1xuICAgIHNlcnZpY2UuZ2V0UGxhY2VQcmVkaWN0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHF1ZXJ5LFxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXG4gICAgICB9LFxuICAgICAgKHByZWRpY3Rpb25zLCBzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiZcbiAgICAgICAgICBwcmVkaWN0aW9uc1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IHByZWRpY3Rpb25zLm1hcCgocHJlZGljdGlvbikgPT4gKHtcbiAgICAgICAgICAgIHBsYWNlX2lkOiBwcmVkaWN0aW9uLnBsYWNlX2lkLFxuICAgICAgICAgICAgbWFpbl90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5tYWluX3RleHQsXG4gICAgICAgICAgICBzZWNvbmRhcnlfdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcuc2Vjb25kYXJ5X3RleHQsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJlZGljdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgY29uc3QgYWRkcmVzc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcjYWRkcmVzc0lucHV0J1xuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoYWRkcmVzc0lucHV0KSB7XG4gICAgICBhZGRyZXNzSW5wdXQudmFsdWUgPSBzdWdnZXN0aW9uLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2UoXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICk7XG4gICAgc2VydmljZS5nZXREZXRhaWxzKFxuICAgICAge1xuICAgICAgICBwbGFjZUlkOiBzdWdnZXN0aW9uLnBsYWNlX2lkLFxuICAgICAgICBmaWVsZHM6IFsnZ2VvbWV0cnknLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcbiAgICAgIH0sXG4gICAgICAocGxhY2UsIHN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJiBwbGFjZSkge1xuICAgICAgICAgIGNvbnN0IGxhdCA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubGF0KCk7XG4gICAgICAgICAgY29uc3QgbG5nID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sbmcoKTtcblxuICAgICAgICAgIGlmIChsYXQgIT09IHVuZGVmaW5lZCAmJiBsbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBsbmc7XG4gICAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gbGF0O1xuXG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgbGF0LCBsbmcgfTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5wdXRCbHVyKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShhcnJheU9mT2JqIDogYW55KSB7XG4gICAgaWYoYXJyYXlPZk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicgfHwgYXJyYXlPZk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gICdMaWZlTWVkaUNuZHRuJykge1xuICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgPSBhcnJheU9mT2JqO1xuICAgIH1cbiAgICBpZih0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYXJyYXlPZk9ialsncGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5J10pKSB7XG4gICAgICBhcnJheU9mT2JqWydwZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHknXS5mb3JFYWNoKChzaW5nbGVTdWJBcnJheSA6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlU3ViQXJyYXkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpIHtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3QpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCkpIHtcbiAgICAgIGxldCBhcnJheU9mS2V5cyA6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpO1xuICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55LCBzaW5nbGVLZXlMZW5ndGggOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSwgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoIDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBlcnNvblV3QW5zd2VycyhzaW5nbGVBbnN3ZXJPYmopO1xuICAgICAgICAgICAgaWYoc2luZ2xlS2V5TGVuZ3RoID09PSAoYXJyYXlPZktleXMubGVuZ3RoIC0gMSkgJiYgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoID09PSAodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCkge1xuICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gW107XG4gICAgbGV0IGRhdGE6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpO1xuICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3ggPSBbXTtcblxuICAgIGxldCBpc0Rpc2FibGUgOiBhbnkgPSBmYWxzZTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKSkgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkgIDogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAgIGxldCBwZXJzb25Vd0lkQXJyYXk6IGFueSA9IFtdO1xuICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgIHBlcnNvblV3SWRBcnJheS5wdXNoKHNpbmdsZVF1ZXN0aW9uT2JqWydwZXJzb25VV0lkJ10pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pXG4gICAgICApIHtcblxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3SWQgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXSkpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3RpdGxlJ10gPT09ICdNZWRpY2FsIERldGFpbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXG4gICAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZSgvXFxcXG4vZywgJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV07XG5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzaW5nbGVRdWVzdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1BBTicpIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICd7XCJUeXBlXCI6XCJBbHBoYU51bWVyaWNcIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIi9eKFthLXpBLVpdKXs1fShbMC05XSl7NH0oW2EtekEtWl0pezF9PyQvXCJ9JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0Z0Y2FDbnRjRGV0bHMnKSB7XG4gICAgICAgICAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID0gJ3tcImN1c3RvbVZhbGlkYXRpb25cIjpbe1wiY291bnRyeVwiOlwiSU5cIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIigoXls2LTldKXsxfShbMC05XSl7OX0kKVwifSx7XCJjb3VudHJ5XCI6XCJPVEhFUlwiLFwiTWluVmFsdWVcIjpcIjVcIixcIk1heFZhbHVlXCI6XCIxNFwifV19JztcbiAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgICAgICAgXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCcpIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xuICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlQWxsKCdcXFxcbicsICc8YnI+Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0ZlZXRMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ0ZSRUVURVhUJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXV1bXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ04nLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnWScsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPSAnSEFSRCBDT1BZJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uc29ydChcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25zTGlzdEZvckxBOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnc3RlcCddID09PSBzdGVwc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgc3RlcDogc3RlcHMsXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSkge1xuICAgICAgICAgICAgICAgIC8vIEhhcmQgQ29weSBhbmQgTWFwIHF1ZXN0aW9uXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdNQVAnLFxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdZJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGlmIE5SSSB0aGVuIHBhc3Nwb3J0IHVwbG9hZCBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ05hdGlvbmFsaXR5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcXVlc3Rpb25zTGlzdEZvckxBLnB1c2gob2JqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlcjogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddKTtcbiAgICAgICAgICAgIC8vIGlmIChsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXIgIT09IHRoaXMubnVtYmVyTWludXNPbmUpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gcXVlc3Rpb25zTGlzdEZvckxBO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmogPSBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0KSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpICkge1xuICAgICAgICAgIGxldCBpc1N1YlF1ZXN0aW9uRXhpc3RzOiBhbnkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA9IG51bGw7XG4gICAgICAgICAgbGV0IGFycmF5T2ZLZXlzIDogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCk7XG4gICAgICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldKSkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShzaW5nbGVBbnN3ZXJPYmopO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldFN1YlF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsXG4gICAgICAgICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbJ2Fuc3dlciddLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChzdWJRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydChcbiAgICAgICAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGVyc29uVVdJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgKHNpbmdsZTogYW55KSA9PiBzaW5nbGVbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ11cbiAgICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gc3ViUXVlc3Rpb25SZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgICAgICAgICAgICAgICBdID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpLmZvckVhY2goKHNpbmdsZVBlcnNvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF0pKSB7XG4gICAgICAgICAgLy8gICAgIGxldCBhcnJheU9mS2V5cyA9IE9iamVjdC5rZXlzKHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXSk7XG4gICAgICAgICAgLy8gICAgIGlmIChhcnJheU9mS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoYW5zd2VyT2JqOiBhbnkpID0+IHtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG5cblxuICAgICAgICAgIC8vICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IFtdO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gbGV0IGxpc3RPZk9wdGlvbnNTZWxlY3RlZCA6IGFueSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxpc3RPZk9wdGlvbnNTZWxlY3RlZC5mb3JFYWNoKChzaW5nbGVFbGVtZW50IDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZERvbWFpblZhbHVlT2JqIDogYW55ID0gZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10uZmlsdGVyKChzaW5nbGVPYmogOiBhbnkpID0+IHNpbmdsZU9ialsnZG9tYWluSW50ZXJuYWxWYWx1ZSddID09PSBzaW5nbGVFbGVtZW50KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkRG9tYWluVmFsdWVPYmopKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0ucHVzaCh7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICAgIGxhYmVsIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluVWlWYWx1ZSddLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICB2YWx1ZSA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlclxuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBhbnN3ZXJPYmpbJ2Fuc3dlciddO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxldCBmZWV0QW5zd2VyID0gYW5zd2VyT2JqWydhbnN3ZXInXS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IGZlZXRBbnN3ZXJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIGlmIChzaW5nbGVRdWVzdGlvblJlc3BvbnNlWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddICYmIHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bicgfHwgYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgaXNTdWJRdWVzdGlvbkV4aXN0cyA9IHRydWU7XG5cblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yRGlzZWFzZVwiOiBcIm1kZWljYWxIaXN0b3J5XCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiYXBpVXJsXCI6IFwiaHR0cHM6Ly9wcmVwcm9kLWRpcmVjdHBvcnRhbGxpZmUuZ29kaWdpdC5jb20vRGlyZWN0UG9ydGFsTGlmZS9saWZlL2ZldGNoU3ViUXVlc3Rpb25zXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidXJsUGFyYW1Gb3JQZXJzb25Vd0lkXCI6IFwicGVyc29uVVdJRFwiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInRva2VuQ29va2llUGFyYW1cIjogXCJ2M1Rva2VuXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiaXNTZW5kVG9rZW5cIjogZmFsc2VcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnModGhpcy5maWVsZCgpPy5jb25maWdEYXRhLCBhbnN3ZXJPYmpbJ2Fuc3dlciddLCBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSkuc3Vic2NyaWJlKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoc3ViUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblJlc3BvbnNlKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pICYmXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSA9IFtzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT4gb2JqZWN0WydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwcyk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9iaiA6IFtdLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddIDogJycsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogYW5zd2VyT2JqWydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc2FibGVDb25maXJtYXRpb25CdXR0b24gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gZWxzZSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKHR5cGVvZiBhbnN3ZXJPYmouYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnWScgJiYgYW5zd2VyT2JqLmFuc3dlciAhPT0gJ04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqLmFuc3dlci5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKS5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlcl0gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5hbnN3ZXJdID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmopO1xuICAgICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vIH0pO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcblxuICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ10gPSB7XG4gICAgICBjb250cm9sU3R5bGU6IHtcbiAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgIGNvbnRyb2xNZXRhSWQ6ICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICB9LFxuICAgICAgZmllbGROYW1lOiBudWxsLFxuICAgICAgbGFiZWw6ICdmZWV0IC8gaW5jaGVzJyxcbiAgICAgIHBsYWNlSG9sZGVyOiAnJyxcbiAgICAgIG1ldGFJZDogJycsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0Rpc2FibGU6IGlzRGlzYWJsZSxcbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgaXNSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVkTWVzc2FnZTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5JyxcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgICBtaW5MZW5ndGhNZXNzYWdlOiBudWxsLFxuICAgICAgICBtYXhMZW5ndGg6IDE1MCxcbiAgICAgICAgbWF4TGVuZ3RoTWVzc2FnZTogbnVsbCxcbiAgICAgICAgcGF0dGVybjogbnVsbCxcbiAgICAgICAgcGF0dGVybk1lc3NhZ2U6ICcnLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQ20nLFxuICAgICAgICAgIHZhbHVlOiAnQ00nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGZWV0JyxcbiAgICAgICAgICB2YWx1ZTogJ0ZFRVQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBzdHlsZTogbnVsbCxcbiAgICAgIGltYWdlVXJsOiBudWxsLFxuICAgICAgY29uZmlnRGF0YToge30sXG4gICAgICBtZXRhRGF0YU9iajogbnVsbCxcbiAgICAgIGlzU2hvd0xhYmVsOiBmYWxzZSxcbiAgICAgIGlzTWFzdGVyQ29udHJvbDogZmFsc2UsXG4gICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmo6IGFueSkge1xuXG4gICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IGFuc3dlck9ialsnYW5zd2VyJ107XG4gICAgfVxuICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xuICAgICAgbGV0IGZlZXRBbnN3ZXIgPSBhbnN3ZXJPYmpbJ2Fuc3dlciddLnNwbGl0KCcuJyk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmpbJ2Fuc3dlciddKSAmJiBhbnN3ZXJPYmpbJ2Fuc3dlciddLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gZmVldEFuc3dlclsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcwJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10pO1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSkge1xuICAgICAgaWYoZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmoucGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5KSkge1xuICAgICAgYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eS5mb3JFYWNoKChzdWJxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUGVyc29uVXdBbnN3ZXJzKHN1YnF1ZXN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKClcbiAgICB9XG4gIH1cblxudmFsaWRhdGVGaWVsZChxdWVzdGlvbklkOiBzdHJpbmcsIHF1ZXN0aW9uOiBhbnkpIHtcbiAgdGhpcy5maWVsZFRvdWNoZWRbcXVlc3Rpb25JZF0gPSB0cnVlO1xuXG4gICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRGaWVsZChxdWVzdGlvbik/LnZhbGlkYXRvcnM7XG4gICBjb25zdCB2YWx1ZSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uSWRdO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBlcnJvcnMgb2JqZWN0IGZvciB0aGlzIGZpZWxkXG4gICAgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSA9IHt9O1xuXG5cblxuICAgIC8vIFJlcXVpcmVkIHZhbGlkYXRpb25cbiAgICBpZiAodmFsaWRhdG9ycz8uaXNSZXF1aXJlZCAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWUpKSB7XG4gICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWydyZXF1aXJlZCddID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIG90aGVyIHZhbGlkYXRpb25zIGlmIHZhbHVlIGlzIGVtcHR5XG4gICAgaWYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZSkpIHJldHVybjtcblxuICAgIC8vIFR5cGUgdmFsaWRhdGlvbiBmcm9tIEpTT04gKE51bWVyaWMsIEFscGhhTnVtZXJpYylcbiAgICBpZiAodmFsaWRhdG9ycz8ucGF0dGVybikge1xuICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodmFsaWRhdG9ycy5wYXR0ZXJuKTtcbiAgaWYgKCFyZWdleC50ZXN0KHZhbHVlLnRvU3RyaW5nKCkpKSB7XG4gICAgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXVsndHlwZSddID0gdHJ1ZTtcbiAgfVxuXG4gICAgICB9XG5cblxuICAgIC8vIE1pblZhbHVlIHZhbGlkYXRpb24gZnJvbSBKU09OXG4gICAgaWYgKHZhbGlkYXRvcnM/Lm1pbkxlbmd0aCAmJiB2YWxpZGF0b3JzLm1heExlbmd0aCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgbWluVmFsID12YWxpZGF0b3JzLm1pbkxlbmd0aDtcbiAgICAgIGNvbnN0IG1heFZhbD0gdmFsaWRhdG9ycy5tYXhMZW5ndGg7XG4gICAgICBpZiAodmFsaWRhdG9ycy5wYXR0ZXJuPT0nXlswLTldKyQnKSB7XG4gICAgICAgIC8vIEZvciBudW1lcmljLCBjb21wYXJlIGFzIG51bWJlcnNcbiAgICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IG1pblZhbCB8fCBwYXJzZUludCh2YWx1ZSkgPiBtYXhWYWwpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWydyYW5nZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG90aGVyIHR5cGVzLCBjb21wYXJlIHN0cmluZyBsZW5ndGhcbiAgICAgICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoIDwgbWluVmFsIHx8IHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID4gbWF4VmFsKSB7XG4gICAgICAgICAgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXVsncmFuZ2UnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnVmFsaWRhdGlvbiBlcnJvcnMgZm9yJywgcXVlc3Rpb25JZCwgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSk7XG5cbiAgfVxuXG5cblxuICBoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkVG91Y2hlZFtxdWVzdGlvbklkXSAmJlxuICAgICAgICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdICYmXG4gICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0pLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbklkOiBzdHJpbmcsIHF1ZXN0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5maWVsZFRvdWNoZWRbcXVlc3Rpb25JZF0gfHwgIXRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0pIHJldHVybiAnJztcblxuICAgIGlmKHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0pe1xuICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF07XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHF1ZXN0aW9uPy5maWVsZD8udmFsaWRhdG9ycztcblxuXG4gICAgaWYgKGVycm9yc1sncmVxdWlyZWQnXSkge1xuICAgICAgaWYocXVlc3Rpb24/LmZpZWxkPy5jb250cm9sVHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgcmV0dXJuIHZhbGlkYXRvcnM/LnJlcXVpcmVkTWVzc2FnZSB8fCBgUGxlYXNlIHNlbGVjdCBhbnkgb25lIG9wdGlvbmA7XG5cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0b3JzPy5yZXF1aXJlZE1lc3NhZ2UgfHwgYFBsZWFzZSBlbnRlciAke3F1ZXN0aW9uPy5xdWVzdGlvblRleHQgfHwgJ3RoaXMgZmllbGQnfWA7XG5cblxuICAgIH1cbiAgICBpZiAoZXJyb3JzWyd0eXBlJ10pIHtcbiAgICAgcmV0dXJuIHZhbGlkYXRvcnM/LnBhdHRlcm5NZXNzYWdlIHx8ICdJbnZhbGlkIGlucHV0IHR5cGUnO1xuICAgIH1cbiAgICBpZiAoZXJyb3JzWydyYW5nZSddKSB7XG4gICAgICByZXR1cm4gYFBsZWFzZSBlbnRlciBhIHZhbGlkICR7cXVlc3Rpb24/LnF1ZXN0aW9uVGV4dCB8fCAndmFsdWUnfWA7XG4gICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHZhbHVlID09PSAnJyB8fFxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSAne30nXG4gICAgKTtcbiAgfVxuXG4gIGdldFRpdGxlQ2FzZShoZWFkZXI6IGFueSk6IGFueSB7XG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25IZWFkZXIuaW5jbHVkZXMoaGVhZGVyLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIGxldCB2YWwgPSBoZWFkZXIuc3BsaXQoJyAnKTtcbiAgICAgICAgcmV0dXJuIHZhbFswXS50b1VwcGVyQ2FzZSgpICsgJyAnICsgdGhpcy50b1RpdGxlQ2FzZSh2YWxbMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGhlYWRlci50b1VwcGVyQ2FzZSgpID09PSAnRkFUQ0EgREVUQUlMUycpIHtcbiAgICAgICAgICByZXR1cm4gaGVhZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGhlYWRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9UaXRsZUNhc2UodmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgIC9cXHdcXFMqL2csXG4gICAgICAgICAgKHR4dDogYW55KSA9PiB0eHRbMF0udG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkKHF1ZXN0aW9uT2JqOiBhbnkpIHtcbiAgICBsZXQgb3B0aW9uc09iajogYW55ID0gW107XG4gICAgbGV0IGNvbnRyb2xTdHlsZSA6IGFueSA9IHt9O1xuICAgIGlmIChxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pIHtcbiAgICAgIHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVPcHRpb25WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIG9wdGlvbnNPYmoucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5VaVZhbHVlJ10sXG4gICAgICAgICAgdmFsdWU6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBpc0Rpc2FibGUgOiBhbnkgPSBmYWxzZTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKSkgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkgIDogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIGxldCBtaW5MZW5ndGg6IGFueSA9IG51bGw7XG4gICAgbGV0IG1heExlbmd0aDogYW55ID0gMjAwO1xuICAgIGxldCBwYXR0ZXJuOiBhbnkgPSBudWxsO1xuICAgIGxldCBwYXR0ZXJuTWVzc2FnZTogYW55ID0gbnVsbDtcbiAgIGxldCBjb25maWdEYXRhOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSlcbiAgPyB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGFcbiAgOiB7fTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25PYmpbJ2NvbmZpZ0RhdGEnXSkpIHtcbiAgICAgIGNvbmZpZ0RhdGEgPSB7Li4uY29uZmlnRGF0YSwgLi4ucXVlc3Rpb25PYmpbJ2NvbmZpZ0RhdGEnXX07XG4gICAgfVxuXG4gICAgaWYocXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAgJ1JBRElPIEJVVFRPTicgfHwgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpIHtcbiAgICAgIGNvbnRyb2xTdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMTJweFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IFwiNDAwXCIsXG4gICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogXCJNdWxpc2hcIixcbiAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImJhY2tncm91bmRcIjogXCIjRkZGRkZGXCIsXG4gICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBcIiNmZmJiMDBcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IFwiI0VDRUNFQ1wiLFxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBcIiNFQ0VDRUNcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxuICAgICAgICAgICAgICAgICAgXCJjcmVhdGVkRGF0ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJpc01hc3RlckNzc1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJjb250cm9sTWV0YUlkXCI6IFwiQUxMX0NPTV9HRU5fQ1RSTF9yYWRpb19ub21pbmVlR2VuZGVyX1YxXCIsXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcbiAgICAgICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSkpIHtcbiAgICAgIGxldCB2YWxpZGF0aW9uT2JqOiBhbnkgPSBKU09OLnBhcnNlKHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ10pKSB7XG4gICAgICAgIG1pbkxlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ107XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddKSkge1xuICAgICAgICBtYXhMZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnVHlwZSddKSkge1xuICAgICAgICBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycpIHtcbiAgICAgICAgICBwYXR0ZXJuID0gJ15bMC05XSskJztcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9ICdPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJztcbiAgICAgICAgICBjb25maWdEYXRhWydpc0FsbG93TnVtYmVyc0luVGV4dEZpZWxkcyddID0gdHJ1ZTtcbiAgICAgICAgICBtYXhMZW5ndGggPSAnOScucmVwZWF0KE51bWJlcihtYXhMZW5ndGgpKTtcbiAgICAgICAgICBjb25maWdEYXRhWydtYXhWYWx1ZSddID0gbWF4TGVuZ3RoO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21pblZhbHVlJ10gPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ0FscGhhTnVtZXJpYycpIHtcbiAgICAgICAgICBwYXR0ZXJuID0gJ15bYS16QS1aMC05XFxcXHNdKyQnO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gJ09ubHkgbGV0dGVycyBhbmQgbnVtYmVycyBhcmUgYWxsb3dlZC4nO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2lzQWxsb3dOdW1iZXJzSW5UZXh0RmllbGRzJ10gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXR0ZXJuID0gbnVsbDtcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnRGF0YTogY29uZmlnRGF0YSxcbiAgICAgIGNvbnRyb2xTdHlsZTogY29udHJvbFN0eWxlLFxuICAgICAgY29udHJvbFR5cGU6XG4gICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCdcbiAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcbiAgICAgICAgICA/ICdyYWRpbydcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyB8fFxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nXG4gICAgICAgICAgPyAnY2hlY2tib3gnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICA/ICdkYXRlJ1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nXG4gICAgICAgICAgPyAnc2VsZWN0J1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJ1xuICAgICAgICAgID8gJ2ZpbGUnXG4gICAgICAgICAgOiAnJyxcbiAgICAgIGZpZWxkTmFtZTogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXSxcbiAgICAgIGlzRGlzYWJsZSxcbiAgICAgIGxhYmVsOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXG4gICAgICBwbGFjZUhvbGRlcjogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVGV4dCddLFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBpc1JlcXVpcmVkOiBxdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIG1pbkxlbmd0aCxcbiAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICBwYXR0ZXJuLFxuICAgICAgICBwYXR0ZXJuTWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICBjc3NDbGFzczogXCJtYi0yXCIsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBvcHRpb25zOiBvcHRpb25zT2JqLFxuICAgICAgaXNTaG93TGFiZWw6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKHF1ZXN0aW9uPzogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcycsIHRoaXMucXVlc3Rpb25MaXN0KVxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucXVlc3Rpb25MaXN0KSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93UXVlc3Rpb24oc2luZ2xlUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgcXVlc3Rpb24gaWYgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgICAgbGV0IGlzRW5hYmxlRGVmYXVsdFF1ZXN0aW9ucyA6IGFueSA9IHRoaXMuZGVmYXVsdFZhbHVlcygpWydpc0VuYWJsZURlZmF1bHRRdWVzdGlvbnMnXSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddPy50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgaGFzRGVmYXVsdFZhbHVlID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZXMoKSkgJiYgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0VmFsdWVzKCkpLmluY2x1ZGVzKHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgaWYgKGhhc0RlZmF1bHRWYWx1ZSAmJiBzaW5nbGVRdWVzdGlvblsnZmllbGQnXSAmJiAhaXNFbmFibGVEZWZhdWx0UXVlc3Rpb25zKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0ge1xuICAgICAgICAgICAgICAgIC4uLnNpbmdsZVF1ZXN0aW9uWydmaWVsZCddLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNOb25lSW5Eb21haW5WYWx1ZXM6IGFueSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcbiAgICAgICAgICAgICAgICBdLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlT2JqWydkb21haW5VaVZhbHVlJ10udG9VcHBlckNhc2UoKSA9PT0gJ05PTkUnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzTm9uZUluRG9tYWluVmFsdWVzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbmUgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgc2VsZWN0ZWQgY2hlY2tib3ggcXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5kb21haW5VaVZhbHVlLnRvVXBwZXJDYXNlKCkgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05PTkUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3Q6IGFueSA9IHRoaXMuaXNCbG9ja2VkUXVlc3Rpb25zTGlzdC5maWx0ZXIoKHNpbmdsZUJsb2NrZWRPYmo6IGFueSkgPT4gc2luZ2xlQmxvY2tlZE9ialsnc2VjdGlvblRpdGxlJ10udHJpbSgpID09PSBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRyaW0oKSk7XG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3QpKSB7XG4gICAgICAgIC8vICAgaWYgKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQ3VzdG9tZXJGbG93ICYmICF0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmICgoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JBZ2VudEZsb3cgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMjAnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA1JyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNicpICYmIHRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IGhpZGRlblF1ZXN0aW9uczogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKFxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uT2JqOiBhbnkpID0+ICFzaW5nbGVTZWN0aW9uT2JqWydzaG93U2VjdGlvbiddXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGlkZGVuUXVlc3Rpb25zKSkge1xuICAgICAgICAgIGhpZGRlblF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25MaXN0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10pO1xuXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBsaXN0JywgdGhpcy5xdWVzdGlvbkxpc3QpO1xuXG5cbiAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnMpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzKS5mb3JFYWNoKChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzRm9yRmllbGQgPSB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdO1xuICAgICAgICBpZiAoZXJyb3JzRm9yRmllbGQgJiYgT2JqZWN0LmtleXMoZXJyb3JzRm9yRmllbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbklkXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGFuc3dlcnMnLCB0aGlzLnBlcnNvblV3QW5zd2Vycyk7XG4gICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKCk7XG5cblxuXG4gICAgdGhpcy5xdWVzdGlvbnNWYWx1ZUNoYW5nZS5lbWl0KHRoaXMucGVyc29uVXdBbnN3ZXJzKTtcbiAgfVxuXG4gIHNob3dRdWVzdGlvbihjdXJyZW50UXVlc3Rpb246IGFueSkge1xuICAgIGxldCBzaG93UXVlc3Rpb246IGFueSA9IGZhbHNlO1xuICAgIGxldCBzdWJRdWVzdGlvbnM6IGFueSA9IFtdO1xuICAgIC8vIGxldCBjdXJyZW50U2VjdGlvbkluZGV4OiBhbnkgPSBxdWVzdGlvbnNSZXNwb25zZVsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gcGVyc29uUm9sZSlcbiAgICAvLyBsZXQgcm9sZSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtjdXJyZW50U2VjdGlvbkluZGV4XVsncm9sZSddXG5cbiAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF0ucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgIGxldCBpc1N1YlF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBbXTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pKSB7XG4gICAgICAgIGlzU3ViUXVlc3Rpb25PYmplY3QgPSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZpbHRlcihcbiAgICAgICAgICAocXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PlxuICAgICAgICAgICAgcXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvblsncXVlc3Rpb25JZCddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdWJRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN1YlF1ZXN0aW9ucy5wdXNoKHNpbmdsZVF1ZXN0aW9uKTtcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdC5mb3JFYWNoKChzaW5nbGVTdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gIT09ICchJyAmJlxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSA9PT1cbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKSB8fFxuICAgICAgICAgICAgKHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSA9PT0gJyEnICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSAhPT1cbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCchJylbMV0pIHx8XG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXT8uaW5jbHVkZXMoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSlcbiAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0/LmZpbHRlcihcbiAgICAgICAgICAgICAgLy8gICAoc2luZ2xlT2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgIC8vICAgICBzaW5nbGVPYmogPT09XG4gICAgICAgICAgICAgIC8vICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXG4gICAgICAgICAgICAgIC8vICkubGVuZ3RoID4gMFxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9ucykgJiZcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICApIHtcbiAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ10pICYmXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXG4gICAgICApICYmXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXG4gICAgICAgIF1cbiAgICAgICkgJiZcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXG4gICAgICBdID09PSBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25BbnN3ZXInXVxuICAgICkge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknKSB7XG4gICAgICBzaG93UXVlc3Rpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3dRdWVzdGlvbjtcbiAgfVxuXG4gIHNhdmVRdWVzdGlvbkRldGFpbHMoKSB7XG4gICAgLy8gcmVtb3ZlIGFsbCBjaGVja2JveCBxdWVzdGlvbnMgcHJlc2VudCBpbiB2YWx1ZXNcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94KSkge1xuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVka2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ10pO1xuICAgICAgLy8gbGV0IHBvbGljeUFzc3VyZWRLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ10pO1xuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT25lS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ10pO1xuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkVHdvS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ10pO1xuICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKGlzTmFOKE51bWJlcihzaW5nbGVLZXkpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgICAvLyBwb2xpY3lBc3N1cmVkS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgICAvLyBsaWZlQXNzdXJlZE9uZUtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgICAvLyBsaWZlQXNzdXJlZFR3b0tleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgfVxuICAgIC8vIGxldCBoZWlnaHRJbkluY2hlc09iajogYW55ID0gW107XG4gICAgLy8gbGV0IGhlaWdodEluRmVldE9iajogYW55ID0gW107XG4gICAgLy8gbGV0IGhlaWdodEluQ2VudGltZXRlck9iajogYW55ID0gW107XG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XG4gICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XG4gICAgLy8gICBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcpO1xuICAgIC8vICAgaWYgKGxhSW5kZXggIT09IC0xICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF0pKSB7XG4gICAgLy8gICAgIGhlaWdodEluSW5jaGVzT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcbiAgICAvLyAgICAgaGVpZ2h0SW5GZWV0T2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcbiAgICAvLyAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIHZhbGlkYXRpb24gZm9yIG1lZGljYWwgYW5kIG5vbiBtZWRpY2FsIHF1ZXN0aW9ucyA6XG4gICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmouZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqOiBhbnksIHNpbmdsZVBlcnNvbkluZGV4OiBhbnkpID0+IHtcbiAgICAvLyAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgICAgIGxldCByb2xlOiBhbnkgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkJyA/IFwibGlmZSBhc3N1cmVkXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ3BvbGljeUhvbGRlcicgPyBcInBvbGljeSBob2xkZXJcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWRPbmUnID8gXCJKb2ludCBMaWZlIDFcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWRUd28nID8gXCJKb2ludCBMaWZlIDJcIiA6IFwiXCI7XG4gICAgLy8gICAgICAgc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdURUxMX1VTX01PUkUnIHx8IHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT0gJ0JBU0lDX0RFVEFJTFMnKSAmJiBpc1ZhbGlkKSB7XG5cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgZW50ZXJlZCBpbiBmZWV0XG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddKSkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFT05FJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRVRXTycpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgIC8vICAgICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKTtcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10pICYmXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFT05FJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRVRXTycpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcbiAgICAvLyAgICAgICAgICAgICBpZiAoXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdERUNMQVJBVElPTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRGJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgICgoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgLy8gICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKSAmJiBpc1ZhbGlkXG4gICAgLy8gICAgICAgICAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICBpZiAoXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHJlZGlyZWN0XG4gICAgLy8gICAgICAgICAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iajogYW55ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5xdWVzdGlvbnNQYXNzcG9ydFVwbG9hZE9iai5maWx0ZXIoKHNpbmdsZU9iajogYW55KSA9PiAoc2luZ2xlT2JqWydwZXJzb25UeXBlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddICYmIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVPYmpbJ2Rtc0lkJ10pKSk7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGRlY2xhcmF0aW9uIHF1ZXN0aW9uc1xuICAgIC8vICAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnMpICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0gPT09ICdOJykgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xuXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIG1lZGljYWwgc3ViIHF1ZXN0aW9uc1xuICAgIC8vICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpKSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgaWYgKFxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hvd1N1YlF1ZXN0aW9uKHF1ZXN0aW9uKSAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAoKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHF1ZXN0aW9uLCAnbGlmZUFzc3VyZWQnKSkpXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICkge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgYW5zd2VyIGFsbCBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgJyArIHF1ZXN0aW9uWydxdWVzdGlvbklkJ10gKyAnICcgKyBxdWVzdGlvblsncXVlc3Rpb25UZXh0J11cbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgLy8gfVxuICAgIC8vICAgICAgICAgICB9KTtcblxuICAgIC8vICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxuICAgIC8vICAgICAgICAgICAvLyBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zKSAmJiBpc1ZhbGlkKXtcbiAgICAvLyAgICAgICAgICAgLy8gc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6YW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXG4gICAgLy8gICAgICAgICAgIC8vICAgICApe1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICBpZiggaXNWYWxpZCAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnMpICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0gPT09ICdOJykgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xuXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xuICAgIC8vICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICB9XG4gICAgLy8gICAgICAgICAgIC8vIH0pO1xuICAgIC8vICAgICAgICAgICAvLyB9XG5cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuXG4gICAgLy8gaWYgKChpc1ZhbGlkIHx8IHNhdmVkcmFmdCkgfHwgdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xuICAgIC8vIGlmIChpc1ZhbGlkKSB7XG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KHRydWUpO1xuICAgICAgLy8gbGV0IHJlcXVlc3Q6IGFueSA9IFtdO1xuICAgICAgbGV0IG1haW5SZXFPYmo6IGFueSA9IFtdO1xuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnM6IGFueSA9IFtdO1xuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yTGE6IGFueSA9IFtdO1xuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yUGg6IGFueSA9IFtdO1xuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10pKSB7XG4gICAgICAgIC8vIHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vIGlmIChcbiAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXG4gICAgICAgIC8vICAgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgLy8gICAgICdURUxMX1VTX01PUkUnIHx8XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgIC8vICAgICAgICdCQVNJQ19ERVRBSUxTJylcbiAgICAgICAgLy8gKSB7XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXG4gICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgICApICYmICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgICkgJiYgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gcGFzcyBoZWlnaHQgaW4gY20gb2JqXG4gICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNtT2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICAgICApLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGluY2hlc1xuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSAqIDAuMzkzNzAxXG4gICAgICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KChoZWlnaHRJbkluY2hlcyAvIDEyKS50b1N0cmluZygpLnNwbGl0KCcuJylbMV0pID4gMTJcbiAgICAgICAgICAgICAgICA/IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDEpXG4gICAgICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcbiAgICAgICAgICAgIGxldCBpbmNoZXNvYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpbmNoZXNvYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tpbmNoZXNvYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoZWlnaHQgaW4gZmVldFxuXG4gICAgICAgICAgICBsZXQgZmVldE9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmZWV0T2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmVldE9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUZsb2F0KGhlaWdodEluRmVldCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluRmVldE9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSkge1xuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10pICpcbiAgICAgICAgICAgICAgICAgIDEyICtcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSk7XG4gICAgICAgICAgICAgIGxldCBoZWlnaHRJbkNtOiBhbnkgPSAoXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkluY2hlcykgLyAwLjM5MzcwMVxuICAgICAgICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10udG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tpbmNoZXNvYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoY21PYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2NtT2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5DbSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbUFuc3dlck9iamVjdDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxuICAgICAgICAgICAgICAgIGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3Q6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgIGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxuICAgICAgICAgICAgICAgIGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldEFuc3dlck9iamVjdCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IGlzTm9EaXNwbGF5UXVlc3Rpb25JblNlY3Rpb246IGFueSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ11cbiAgICAgICAgKVxuICAgICAgICAgID8gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAoc2luZ2xlRGF0YTogYW55KSA9PiBzaW5nbGVEYXRhWydxdWVzdGlvblR5cGUnXSA9PT0gJ05PRElTUExBWSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gfHxcbiAgICAgICAgICAgIGlzTm9EaXNwbGF5UXVlc3Rpb25JblNlY3Rpb24ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKVxuICAgICAgICApIHtcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XG4gICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSA9ICdFbmdsaXNoJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FycjogYW55ID0gW107XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJ1xuICAgICAgICAgICAgICAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIGZvciBjaGVja2JveCBxdWVzdGlvblxuXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogJycsXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvYmpbJ2Fuc3dlciddID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXG4gICAgICAgICAgICAgICAgXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gbm9uIGNoZWNrYm94IHF1ZXN0aW9uXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXG4gICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXG4gICAgICAgICAgICAgICAgICAnYW5zd2VyJ1xuICAgICAgICAgICAgICAgIF0gPVxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYoc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB7XG4gICAgICAgICAgICAvLyAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KChzaW5nbGVBbnN3ZXJPYmogOiBhbnkpID0+IChzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAgJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXG4gICAgICAgICAgICAvLyAgIGlmKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAvLyAgICAgICBhbnN3ZXI6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgLy8gICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgIC8vICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgIC8vICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgLy8gICAgIH07XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAvLyAgICAgaWYoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAvLyAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnIgOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWUgOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgb2JqWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgIC8vIG9iamVjdCBhbHJlYWR5IHRoZXJlIHNvIG92ZXIgcmlkZSB0aGUgbmV3IGFuc3dlclxuICAgICAgICAgICAgLy8gICAgIGlmKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XG4gICAgICAgICAgICAvLyAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlIDogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdWydhbnN3ZXInXSA9ICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgPyB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSksICd5eXl5LU1NLWRkJykgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgIC8vICAgICB9XG5cbiAgICAgICAgICAgIC8vICAgfVxuXG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JldEZpbmFuY0VsZ2JsJykge1xuICAgICAgICAgICAgLy8gICBsZXQgZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iajogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXG4gICAgICAgICAgICAvLyAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgIC8vICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAvLyAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgIC8vICAgICBhbnN3ZXI6IHRoaXMuc2hhcmVkU2VydmljZS5maW5hbmNpYWxFbGlnaWJpbGl0eSxcbiAgICAgICAgICAgIC8vICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgLy8gICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgIC8vICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgIC8vICAgfTtcbiAgICAgICAgICAgIC8vICAgaWYgKGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4XVsnYW5zd2VyJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHk7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfSk7XG4gICAgICBsZXQgZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0OiBhbnkgPSBbXG4gICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5tYXAoKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgIGl0ZW0ucGVyc29uVVdJZC50b1N0cmluZygpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgXTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdCkpIHtcbiAgICAgICAgbWFpblJlcXVlc3RGb3JMYSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cbiAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMF1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBtYWluUmVxdWVzdEZvclBoID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XG4gICAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgc2F2ZVJlcXVlc3RzQXJyYXk6IGFueSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkobWFpblJlcXVlc3RGb3JMYSkgJiYgdGhpcy5wZXJzb25UeXBlKCkgIT09ICdQSCcpIHtcbiAgICAgICAgdGhpcy5zYXZlUXVlc3Rpb25SZXF1ZXN0TGEgPSBtYWluUmVxdWVzdEZvckxhO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICdzYXZlUXVlc3Rpb25SZXF1ZXN0TGEnLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpXG4gICAgICAgICk7XG4gICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBMQV8ke3RoaXMuY2x1c3RlcklkKCl9YCwgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSkpXG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSAmJiB0aGlzLnBlcnNvblR5cGUoKSA9PT0gJ1BIJykge1xuICAgICAgICB0aGlzLnNhdmVRdWVzdGlvblJlcXVlc3RQaCA9IG1haW5SZXF1ZXN0Rm9yTGE7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RQaCcsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmNsdXN0ZXJJZCgpKSkge1xuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYFBIXyR7dGhpcy5jbHVzdGVySWQoKX1gLCBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKSlcbiAgICAgICAgfVxuICAgICAgICAvLyAgc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCk7XG4gIH1cblxuICBnZXRDb29raWVWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgIGxldCB0b2tlbk5hbWUgPSAnJztcbiAgICBsZXQgdG9rZW5WYWx1ZSA9ICcnO1xuICAgIGNvbnN0IGluZGV4MiA9IDI7XG4gICAgY29va2llLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiYgISFkYXRhLnNwbGl0KCc9JylbMV0pIHtcbiAgICAgICAgdG9rZW5OYW1lID0gZGF0YS5zcGxpdCgnPScpWzBdLnRyaW0oKTtcbiAgICAgICAgdG9rZW5WYWx1ZSA9IGRhdGEuc3BsaXQoJz0nKVsxXTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbmFtZSA9PT0gJ2xpbmsnICYmXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXSAhPT0gbnVsbCAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgdG9rZW5WYWx1ZSA9IHRva2VuVmFsdWUgKyAnPScgKyBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdG9rZW5WYWx1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucyhmb2N1c09uSW5WYWxpZCA6IGFueSA9IGZhbHNlKSB7XG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XG4gICAgbGV0IHZhbGlkYXRpb25NZXNzYWdlIDogYW55ID0gJyc7XG4gICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkgJiYgaXNWYWxpZCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJlxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgICAgICAnVEVMTF9VU19NT1JFJyB8fFxuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAgICAgICAnQkFTSUNfREVUQUlMUycgfHxcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgICAgICAgJ1BFUlNPTkFMX0RFVEFJTFMnKSAmJlxuICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxuICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcbiAgICAgICAgICAgICAgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlc2A7XG4gICAgICAgICAgICAgIGlmKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9ICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIC8vIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAvLyAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxuICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcblxuICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIGNlbnRpbWV0ZXJgO1xuXG4gICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCc7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgLy8gKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIC8vICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgICAgICAgICAvLyAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKVxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ107XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgKFxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAvLyApIHtcbiAgICAgICAgICAvLyAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcbiAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XG4gICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xuICAgICAgICAgIC8vICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAvLyAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAgICAgICAvLyAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgICAgICAgIC8vICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgLy8gICB9XG5cbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNWYWxpZCAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoaXNWYWxpZCAmJlxuICAgICAgICAgICAgICAgIC8vICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dKSAmJlxuICAgICAgICAgICAgICAgIC8vICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dID09PVxuICAgICAgICAgICAgICAgICAgJ04nKSB8fFxuICAgICAgICAgICAgICAhdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gfHxcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gKVxuICAgICAgICAgICAgICAvLyB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcblxuICAgICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xuICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxuICAgICAgICAgIC8vICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXG4gICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cbiAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XG4gICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xuICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgICAgICAvLyAgICAgKXtcbiAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcbiAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxuICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25UeXBlKCkpICYmIHRoaXMucGVyc29uVHlwZSA9PT0gJ1BIJykge1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXNNZWRpY2FsUXVlc3Rpb25zVmFsaWRGb3JQSCcsIGlzVmFsaWQpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndmFsaWRhdGlvbk1lc3NhZ2VGb3JNZWRpY2FsUXVlc3Rpb25zRm9yUEgnLCB2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYFBIXyR7dGhpcy5jbHVzdGVySWQoKX1faXNWYWxpZGAsIGlzVmFsaWQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpc01lZGljYWxRdWVzdGlvbnNWYWxpZCcsIGlzVmFsaWQpO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3ZhbGlkYXRpb25NZXNzYWdlRm9yTWVkaWNhbFF1ZXN0aW9ucycsIHZhbGlkYXRpb25NZXNzYWdlKTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgTEFfJHt0aGlzLmNsdXN0ZXJJZCgpfV9pc1ZhbGlkYCwgaXNWYWxpZClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9uIDogYW55KSB7XG4gICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bicgfHwgcXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nICkge1xuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0ubGVuZ3RoID4gMFxuXG4gICAgICAvLyBpZiBub25lIGlzIHNlbGVjdGVkIHRoZW4gcmVtb3ZlIGFsbCBhbmQgY2FsbCBBUElcbiAgICAgIGxldCBpc05vbmVTZWxlY3RlZCA6IGFueSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbmRJbmRleCgoc2luZ2xlT2JqIDphbnkpID0+IHNpbmdsZU9iaiA9PT0gJ05vTWVkSGlzdHJ5Jyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNOb25lU2VsZWN0ZWQgIT09ICAtMVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maWx0ZXIoKHNpbmdsZU9iaiA6IGFueSkgPT4gc2luZ2xlT2JqID09PSAnTm9NZWRIaXN0cnknKVxuICAgICAgfVxuICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdFxuICAgICAgICApKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+ICgodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHx8ICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pICYmICFzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSkgKSk7XG4gICAgICB9XG4gICAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KFxuICAgICAgLy8gICAoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+XG4gICAgICAvLyAgICAgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09XG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXG4gICAgICAvLyApO1xuICAgICAgLy8gcmVtb3ZlIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyBmcm9tIHF1ZXN0aW9ucyByZXNwb25zZSBsaXN0XG4gICAgICAvLyBpZiAoXG4gICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXggIT09IHRoaXMubnVtYmVyQ29uc3RhbnQubnVtYmVybWludXMxICYmXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICApICYmXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAvLyAgICAgXVsncXVlc3Rpb25MaXN0J11cbiAgICAgIC8vICAgKVxuICAgICAgLy8gKSB7XG4gICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcbiAgICAgICAgLy8gXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialtcbiAgICAgICAgLy8gICAncXVlc3Rpb25zUmVzcG9uc2UnXG4gICAgICAgIC8vIF1bY3VycmVudFNlY3Rpb25JbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcbiAgICAgICAgLy8gICAoc2luZ2xlTGlzdEl0ZW06IGFueSkgPT5cbiAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cbiAgICAgICAgLy8gICAgICkgfHxcbiAgICAgICAgLy8gICAgICghdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAvLyAgICAgICBzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXVxuICAgICAgICAvLyAgICAgKSAmJlxuICAgICAgICAvLyAgICAgICAhc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pXG4gICAgICAgIC8vICk7XG4gICAgICAvLyB9XG4gICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgIC8vICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgIC8vIF0uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgIC8vICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAvLyAgICAgXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcblxuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb24gOiBhbnkpID0+ICghc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpKTtcbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZU1hc3Rlck9iajogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIC8vICAgaWYgKHNpbmdsZU1hc3Rlck9ialsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkge1xuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9ucyddID0gW107XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheSh0cnVlKTtcblxuICAgICAgbGV0IHNlbGVjdGVkRGlzZWFzZXMgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS50b1N0cmluZygpO1xuICAgICAgLy8gbGV0IHJlcXVlc3Q6IGFueSA9IEpTT04ucGFyc2UoXG4gICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgLy8gICAgIHRoaXMuZmV0Y2hTdWJRdWVzdGlvbnNMaXN0W1xuICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXG4gICAgICAvLyAgICAgXS50b1N0cmluZygpXG4gICAgICAvLyAgIClcbiAgICAgIC8vICk7XG4gICAgICBpZihxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCdhcGlVcmwnKSAmJiBxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCd1cmxQYXJhbUZvckRpc2Vhc2UnKSAmJiBxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCd1cmxQYXJhbUZvclBlcnNvblV3SWQnKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ2FwaVVybCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yRGlzZWFzZSddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yUGVyc29uVXdJZCddKSkge1xuICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2UuZ2V0U3ViUXVlc3Rpb25zKHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10sIHNlbGVjdGVkRGlzZWFzZXMsIHRoaXMucGVyc29uVXdJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xuICAgICAgICAgICAgICAgIF0gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgKFxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAvLyAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddXG4gICAgICAgICAgICAgICAgLy8gICApXG4gICAgICAgICAgICAgICAgLy8gKSB7XG4gICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnN1Yk1lZGljYWxRdWVzdGlvbnNEb21haW5JbnRlcm5hbFZhbHVlc0xpc3QucHVzaChcbiAgICAgICAgICAgICAgICAvLyAgICAgICBzdWJEb21haW5bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRhdGEuc29ydChcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBkYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10gPT09IHN0ZXBzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmpcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogdGhpcy5wZXJzb25Vd0lkLFxuICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QucHVzaChvYmopO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgICAvLyBtZXJnZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgaW50byBwZXJzb24gdXcgbWFpbiBxdWVzdGlvbnMgcmVzcG9uc2UgKHJlcXVpcmVkIGZvciBzaG93IHF1ZXN0aW9uIGZ1bmN0aW9uIHRvIHdvcmspXG4gICAgICAgICAgICAgIC8vIGNsZWFyaW5nIG9uIHRvcCBiZWZvcmUgYXBpIGNhbGxcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcbiAgfVxuICBvbkRvY3VtZW50RmlsZVByZXZpZXcoZXZlbnQ6IHsgZmlsZTogRmlsZSwgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ByZXZpZXcgcmVxdWVzdGVkIGZvcjonLCBldmVudC5maWxlLm5hbWUpO1xuICAgIHRoaXMucHJldmlld0ZpbGUgPSBldmVudC5maWxlO1xuICB9XG5cbiAgY2xvc2VGaWxlUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gbnVsbDtcbiAgfVxuXG4gIGNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xuICAgICAgICBdID09PSAnRkVFVCcgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICAgICAgXVxuICAgICAgICAgICkgKiAwLjM5MzcwMVxuICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgIGxldCBoZWlnaHRJbkZlZXQ6IGFueSA9XG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIChoZWlnaHRJbkluY2hlcyAvIDEyKVxuICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXVxuICAgICAgICAgICkgPiAxMlxuICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxuICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgXSA9IGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXG4gICAgICAgICAgXSA9XG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTEnICYmXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTInICYmXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTMnXG4gICAgICAgICAgICAgID8gaGVpZ2h0SW5GZWV0XG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCcuJylbMV1cbiAgICAgICAgICAgICAgICAgIC5jaGFyQXQoMClcbiAgICAgICAgICAgICAgOiBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXG4gICAgICAgIF0gPT09ICdDTScgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgXVxuICAgICAgICApICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID1cbiAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCdcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApLnRvU3RyaW5nKClcbiAgICAgICAgICApICogMTI7XG4gICAgICAgIGxldCBoZWlnaHRJbkNtOiBhbnkgPSAoXG4gICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkluY2hlcykgLyAwLjM5MzcwMVxuICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXG4gICAgICAgIF0gPSBoZWlnaHRJbkNtO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIH1cblxuICBmb2N1c1RvRWxlbWVudChlbGVtZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IGVsZW1lbnRDb2xsZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlbGVtZW50SWQpO1xuICAgIGNvbnN0IGhlYWRlck9mZnNldCA9IDEyMDtcbiAgICBpZiAoIWVsZW1lbnRDb2xsZWN0aW9uIHx8IGVsZW1lbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudENvbGxlY3Rpb25bMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdCBzY3JvbGxDb250YWluZXI6IGFueSA9IHRoaXMuZ2V0U2Nyb2xsYWJsZVBhcmVudChlbGVtZW50KTtcblxuICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGZyYW1lIHNvIGxheW91dCBpcyBzZXR0bGVkIGJlZm9yZSBzY3JvbGxpbmcuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPVxuICAgICAgICBzY3JvbGxDb250YWluZXIgPT09IHdpbmRvd1xuICAgICAgICAgID8geyB0b3A6IDAgfVxuICAgICAgICAgIDogKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPVxuICAgICAgICBzY3JvbGxDb250YWluZXIgPT09IHdpbmRvd1xuICAgICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgMFxuICAgICAgICAgIDogKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuXG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9XG4gICAgICAgIGVsZW1lbnRSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wICsgY3VycmVudFNjcm9sbCAtIGhlYWRlck9mZnNldDtcblxuICAgICAgaWYgKHNjcm9sbENvbnRhaW5lciA9PT0gd2luZG93KSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogdGFyZ2V0UG9zaXRpb24sIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvKHtcbiAgICAgICAgICB0b3A6IHRhcmdldFBvc2l0aW9uLFxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdibGlua19tZScsICdpbnZhbGlkLWZpZWxkLW9uZS11aScpO1xuXG4gICAgICAvLyBSZW1vdmUgYmxpbmsgYW5pbWF0aW9uIGFmdGVyIGR1cmF0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdibGlua19tZScpO1xuICAgICAgfSwgMzUwMCk7XG5cbiAgICAgIC8vIFJlbW92ZSBpbnZhbGlkLWZpZWxkLW9uZS11aSBjbGFzcyB3aGVuIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIGZpZWxkXG4gICAgICBjb25zdCByZW1vdmVJbnZhbGlkQ2xhc3MgPSAoZXZlbnQ/OiBhbnkpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpbnZhbGlkLWZpZWxkLW9uZS11aScpO1xuICAgICAgICAvLyBDbGVhbiB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIGZyb20gbWFpbiBlbGVtZW50XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MsIHRydWUpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ25nTW9kZWxDaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIGV2ZW50IGxpc3RlbmVycyBmcm9tIGNoaWxkIHJhZGlvL2NoZWNrYm94IGlucHV0c1xuICAgICAgICBjb25zdCByYWRpb0lucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyk7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94SW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgICAgcmFkaW9JbnB1dHMuZm9yRWFjaCgocmFkaW86IGFueSkgPT4ge1xuICAgICAgICAgIHJhZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgICAgcmFkaW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2hlY2tib3hJbnB1dHMuZm9yRWFjaCgoY2hlY2tib3g6IGFueSkgPT4ge1xuICAgICAgICAgIGNoZWNrYm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgICAgY2hlY2tib3gucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEZvciB0ZXh0Ym94IC0gdHJpZ2dlcnMgb24gdHlwaW5nXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gRm9yIHNlbGVjdCBkcm9wZG93biAtIHRyaWdnZXJzIG9uIHZhbHVlIGNoYW5nZVxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAvLyBGb3IgZGlyZWN0IGNsaWNrIG9uIHRoZSBlbGVtZW50IC0gdXNlIGNhcHR1cmUgcGhhc2UgdG8gY2F0Y2ggY2hpbGQgZXZlbnRzXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzLCB0cnVlKTtcblxuICAgICAgLy8gRm9yIEFuZ3VsYXIgbmdNb2RlbCBjaGFuZ2VzXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ25nTW9kZWxDaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAvLyBIYW5kbGUgcmFkaW8gYnV0dG9ucyB3aXRoaW4gdGhlIGVsZW1lbnQgKGNvbW1vbiBpbiBBbmd1bGFyIGZvcm1zKVxuICAgICAgY29uc3QgcmFkaW9JbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpO1xuICAgICAgcmFkaW9JbnB1dHMuZm9yRWFjaCgocmFkaW86IGFueSkgPT4ge1xuICAgICAgICByYWRpby5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICByYWRpby5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIGNoZWNrYm94ZXMgd2l0aGluIHRoZSBlbGVtZW50IChmb3IgbXVsdGktc2VsZWN0KVxuICAgICAgY29uc3QgY2hlY2tib3hJbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuICAgICAgY2hlY2tib3hJbnB1dHMuZm9yRWFjaCgoY2hlY2tib3g6IGFueSkgPT4ge1xuICAgICAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2Nyb2xsYWJsZVBhcmVudChub2RlOiBIVE1MRWxlbWVudCB8IG51bGwpOiBIVE1MRWxlbWVudCB8IFdpbmRvdyB7XG4gICAgbGV0IHBhcmVudCA9IG5vZGU/LnBhcmVudEVsZW1lbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgY29uc3Qgb3ZlcmZsb3dZID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KS5vdmVyZmxvd1k7XG4gICAgICBpZiAob3ZlcmZsb3dZID09PSAnYXV0bycgfHwgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJykge1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbn1cbiIsIjxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgcXVlc3Rpb25MaXN0XCI+XG4gIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgIWNoZWNrSWZWYWx1ZUlzRW1wdHkoc2VjdGlvblsncXVlc3Rpb25zJ10pICYmXG4gICAgICAgIHNlY3Rpb25bJ3Nob3dTZWN0aW9uJ11cbiAgICAgIFwiIGNsYXNzPVwiY2FyZCBwLTMgbWItNFwiIGlkPVwicGVyc29uVXdNZWRpY2FsUXVlc3Rpb25zXCI+XG4gICAgPGg2IGNsYXNzPVwicGFnZS10aXRsZSBib2xkLWxhYmVsXCI+XG4gICAgICB7eyBnZXRUaXRsZUNhc2Uoc2VjdGlvbltcInNlY3Rpb25OYW1lXCJdKSB9fVxuICAgIDwvaDY+XG4gICAgPGxpYi1oci1saW5lIFtmaWVsZF09XCJob3Jpem9udGFsTGluZU9ialwiIC8+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb25zIG9mIHNlY3Rpb25bJ3F1ZXN0aW9ucyddXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdJTUFHRSBURVhUJ1wiPlxuICAgICAgICAgIDxpbWcgW3NyY109XCJxdWVzdGlvbnNbJ3NhbXBsZVMzTGluayddXCIgY2xhc3M9XCJkLWJsb2NrIG14LWF1dG9cIiBbYWx0XT1cInF1ZXN0aW9uc1sndGl0bGUnXVwiPlxuICAgICAgICAgIDxoMyBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uc1sncXVlc3Rpb25UZXh0J11cIj48L2gzPlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG15LTFcIj5cbiAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiXG4gICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpOyByZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjYXJkLXRvcGljIGQtYmxvY2sgZmllbGQtbGFibGVcIj5IZWlnaHRcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjZWUwMDAwXCI+JiM0Mjs8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cIiAnY29sLWF1dG8gcHgtMCBteS0wIHB5LTAgaGVpZ2h0aW5wdXQgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1wiXG4gICAgICAgICAgaWQ9XCJtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXRcIiAoZm9jdXNvdXQpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLTEyIG15LTFcIiAqbmdJZj1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IHB5LTAgaGVpZ2h0SW5wdXRzXCI+XG4gICAgICAgICAgICAgIDxsaWItdGV4dGJveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XG4gICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpOyBjaGVja0FuZFVwZGF0ZUhlaWdodFVuaXQoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBwZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXG4gICAgICAgICAgICAgICAgXSA9PT0gJ0ZFRVQnXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxuICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cbiAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiXG4gICAgICAgICAgICAgICAgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XG4gICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja0FuZFVwZGF0ZUhlaWdodFVuaXQoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMCBwdC0wXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdNQVAnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFwLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLXNlYXJjaC1jb250YWluZXIgbWItM1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBsb25naXR1ZGVcIiBzdGVwPVwiYW55XCIgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgY2FyZC10b3BpY1wiPkxhdGl0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGxhdGl0dWRlXCIgc3RlcD1cImFueVwiIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxpbnB1dCAjYWRkcmVzc0lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBmb3IgYWRkcmVzc1wiXG4gICAgICAgICAgICAgIChrZXl1cCk9XCJvbkFkZHJlc3NJbnB1dEtleXVwKCRldmVudClcIiAoZm9jdXMpPVwic2hvd0Ryb3Bkb3duID0gdHJ1ZVwiIChibHVyKT1cIm9uSW5wdXRCbHVyKClcIlxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RHJvcGRvd24gJiYgYWRkcmVzc1N1Z2dlc3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1kcm9wZG93biBwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBtdC0xXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ6LWluZGV4OiAxMDAwOyBtYXgtaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IGJvcmRlci1yYWRpdXM6IDRweDsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3VnZ2VzdGlvbiBvZiBhZGRyZXNzU3VnZ2VzdGlvbnM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcC0yXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XCIgKG1vdXNlZG93bik9XCJzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb24pXCJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkSW5kZXggPSBpXCIgW2NsYXNzLmJnLWxpZ2h0XT1cImhvdmVyZWRJbmRleCA9PT0gaVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+e3sgc3VnZ2VzdGlvbi5tYWluX3RleHQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgc3VnZ2VzdGlvbi5zZWNvbmRhcnlfdGV4dCB9fTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U3RhcnQgdHlwaW5nIHRvIHNlYXJjaCBmb3IgYWRkcmVzc2VzPC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Z29vZ2xlLW1hcCBbY2VudGVyXT1cImNlbnRlclwiIFt6b29tXT1cInpvb21cIj5cbiAgICAgICAgICAgIDxtYXAtbWFya2VyIFtwb3NpdGlvbl09XCJjdXJyZW50Q29vcmRpbmF0ZXNcIj48L21hcC1tYXJrZXI+XG4gICAgICAgICAgPC9nb29nbGUtbWFwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgKHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdSQURJTyBCVVRUT04nIHx8XG4gICAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykgJiZcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiPlxuICAgICAgICA8bGliLXJhZGlvIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKTsgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiXG4gICAgICAgICAgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHRleHQtZGFuZ2VyIG10LTFcIiAqbmdJZj1cImhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25zLnF1ZXN0aW9uSWQpXCI+XG4gICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm15LTFcIiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItbXVsdGlwbGUtc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKTsgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbnMpXCJcbiAgICAgICAgICBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPGxpYi1jaGVja2JveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7IHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIlxuICAgICAgICAgIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgIHt7IGdldEZpZWxkRXJyb3JNZXNzYWdlKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS0xXCIgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgXCIgKGZvY3Vzb3V0KT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIj5cbiAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKTsgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHRleHQtZGFuZ2VyIG10LTFcIiAqbmdJZj1cImhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25zLnF1ZXN0aW9uSWQpXCI+XG4gICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm15LTFcIiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIlwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoZmlsZVByZXZpZXcpPVwib25Eb2N1bWVudEZpbGVQcmV2aWV3KCRldmVudClcIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7XCIgLz5cbiAgICAgICAgPGxpYi1maWxlLXByZXZpZXcgKm5nSWY9XCIgcHJldmlld0ZpbGVcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgW2ZpbGVdPVwicHJldmlld0ZpbGVcIlxuICAgICAgICAgIChjbG9zZWQpPVwiY2xvc2VGaWxlUHJldmlldygpXCI+XG4gICAgICAgIDwvbGliLWZpbGUtcHJldmlldz5cbiAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19