ax-common-ui-lib 1.0.1-beta.34-testing → 1.0.1-beta.34-testing2

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.
@@ -169,8 +169,8 @@ export class FormBuilderMasterService {
169
169
  if (item.validityConditions) {
170
170
  const validityConditions = typeof item.validityConditions == 'object' ? item.validityConditions : JSON.parse(item.validityConditions);
171
171
  item.invalidityMsg = validityConditions.invalidity_msg;
172
- item.validityConditionJs = validityConditions.validity_conditions_js;
173
- item.validityConditions = validityConditions.validity_conditions;
172
+ item.validityConditionJs = validityConditions.validity_conditions_js ?? item.validityConditionJs;
173
+ item.validityConditions = validityConditions.validity_conditions ?? item.validityConditions;
174
174
  }
175
175
  if (!promptCode) {
176
176
  item.promptMl = {
@@ -570,6 +570,9 @@ export class FormBuilderMasterService {
570
570
  getFormDetailsStorage.ff.forEach(val => {
571
571
  // Push the identifier into the list array
572
572
  list.push(val.identifier);
573
+ if (val.markup && Array.isArray(val.markup)) {
574
+ this.getSubFormIdentifiers(val.markup, list);
575
+ }
573
576
  });
574
577
  }
575
578
  else {
@@ -583,6 +586,9 @@ export class FormBuilderMasterService {
583
586
  getFormDetailsStorage.widgets.forEach(val => {
584
587
  // Push the identifier into the list array
585
588
  list.push(val.identifier);
589
+ if (val.markup && val.markup && Array.isArray(val.markup)) {
590
+ this.getSubFormIdentifiers(val.markup, list);
591
+ }
586
592
  });
587
593
  }
588
594
  else {
@@ -593,6 +599,14 @@ export class FormBuilderMasterService {
593
599
  }
594
600
  return list;
595
601
  }
602
+ getSubFormIdentifiers(markup, list) {
603
+ markup.forEach(val => {
604
+ list.push(val.identifier);
605
+ if (val.markup && val.markup && Array.isArray(val.markup)) {
606
+ this.getSubFormIdentifiers(val.markup, list);
607
+ }
608
+ });
609
+ }
596
610
  /**
597
611
  * Get All List of location
598
612
  *
@@ -1065,4 +1079,4 @@ FormBuilderMasterService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token:
1065
1079
  providedIn: 'root'
1066
1080
  }]
1067
1081
  }], function () { return [{ type: i1.HttpClient }, { type: i2.FormsListService }, { type: i3.CustomStorage }, { type: i4.CommonLibConfigurationService }, { type: i5.FormBuilderMasterMapperService }]; }, null); })();
1068
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1idWlsZGVyLW1hc3Rlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9zY3VscHRvci9mb3JtLWJ1aWxkZXItbWFzdGVyL2Zvcm0tYnVpbGRlci1tYXN0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFrQixNQUFNLE1BQU0sQ0FBQztBQUU1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSwrRkFBK0Y7QUFDL0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7OztBQUt0RixNQUFNLE9BQU8sd0JBQXdCO0lBYW5DLFlBQW9CLFdBQXVCLEVBQ3ZCLGlCQUFtQyxFQUNuQyxlQUE4QixFQUM5QixlQUE4QyxFQUM5QyxrQkFBa0Q7UUFKbEQsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxvQkFBZSxHQUFmLGVBQWUsQ0FBZTtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBK0I7UUFDOUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFnQztRQWZ0RSxVQUFVO1FBQ0YsVUFBSyxHQUFtQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRSxrQ0FBNkIsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3RELHdDQUFtQyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDNUQsNEJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUNoRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxRCxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QiwrQ0FBK0M7UUFDdkMsMEJBQXFCLEdBQThCLElBQUksZUFBZSxDQUFXLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFrQjVHLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLHVCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU3RCw2RUFBNkU7UUFDckUsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakUsaUJBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFoQnBELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLENBQUMsdURBQXVEO1FBQy9GLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakUsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9GO1FBQ0Qsc0VBQXNFO1FBQ3RFLDJCQUEyQjtRQUMzQixvRUFBb0U7UUFDcEUsSUFBSTtJQUNOLENBQUM7SUFTRCxvQkFBb0IsQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDZDQUE2QztJQUNuRixDQUFDO0lBQ0QsaURBQWlEO0lBQ3pDLGtCQUFrQjtRQUN4QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEUsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUNqQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELCtDQUErQztJQUMvQyxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLGNBQXVCLEVBQUUsTUFBYyxFQUFFLFlBQW9CO1FBQ3hFLE1BQU0sUUFBUSxHQUFHO1lBQ2YsY0FBYyxFQUFFLFlBQVk7WUFDNUIsU0FBUyxFQUFFLE1BQU07WUFDakIsZ0JBQWdCLEVBQUUsY0FBYztTQUNqQyxDQUFDO1FBQ0YsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO2dCQUN2SCxhQUFhLEdBQUcsUUFBUSxDQUFDO2dCQUN6QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsTUFBYyxFQUFFLFNBQWlCO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxXQUFXLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbkQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxHQUFHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FDcEcsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7b0JBQzFGLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDckUsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO29CQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFBO2dCQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7Z0JBQzNELElBQUksUUFBUSxFQUFFO29CQUNaLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztvQkFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNoQjs7b0JBQU0sTUFBTSxDQUFDO2FBQ2Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSTtRQUN2QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQixJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksU0FBUyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFO29CQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFVLENBQUMsQ0FBQTtvQkFDdkMsTUFBTSxhQUFhLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFBO29CQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQzt3QkFDN0MsYUFBYSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDOzt3QkFFdkMsYUFBYSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQzdCLGFBQWEsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQTtvQkFDekUsSUFBSSxDQUFDLFFBQVE7d0JBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQTtvQkFDNUIsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUE7b0JBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO29CQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7b0JBQ3BGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7aUJBQ3hEO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsOEJBQThCLENBQUMsSUFBSSxFQUFFLFVBQVU7UUFDN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUMzQixNQUFNLGtCQUFrQixHQUFHLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUNySSxJQUFJLENBQUMsYUFBYSxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztvQkFDdkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO29CQUNyRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsbUJBQW1CLENBQUM7aUJBQ2xFO2dCQUNELElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRzt3QkFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU07cUJBQ2xCLENBQUM7aUJBQ0g7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7b0JBQ2xCLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ3hCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTs0QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7eUJBQ3JDO3dCQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTs0QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3lCQUN6RDt3QkFFRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7NEJBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzt5QkFDM0Q7d0JBRUQsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFOzRCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQzFEO3dCQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTs0QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3lCQUN6RDt3QkFFRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7NEJBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt5QkFDekQ7d0JBRUQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFOzRCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQ3pEO3dCQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTs0QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3lCQUN6RDt3QkFFRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7NEJBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt5QkFDekQ7d0JBRUQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFOzRCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQ3pEO29CQUVILENBQUMsQ0FBQyxDQUFBO2lCQUNIO2dCQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxtQkFBbUIsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUNwRDtnQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7aUJBQ3REO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFDRCxzQkFBc0I7SUFDdEIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQWEsRUFBRSxNQUFjLEVBQUUsV0FBZ0IsRUFBRSxhQUFrQixFQUFFLGNBQXVCO1FBQ2xILG1DQUFtQztRQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7UUFDMUQsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFO2dCQUNyQywwRkFBMEY7Z0JBQzFGLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO29CQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMvQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDO2lCQUNuQzthQUNGO2lCQUNJLElBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxtQkFBbUIsRUFBQztnQkFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUMvRTtpQkFDRSxJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUM7Z0JBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUM5QjtZQUNELElBQUcsSUFBSSxDQUFDLGtCQUFrQixLQUFLLFNBQVMsRUFBQztnQkFDdkMsSUFBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBQztvQkFDN0MsSUFBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUM7d0JBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUMvRDt5QkFDRzt3QkFDSixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDL0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO3FCQUN6QjtpQkFDSjtxQkFDSSxJQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBQztvQkFDaEcsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7b0JBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztpQkFDM0I7YUFDQTtZQUNELElBQUcsSUFBSSxDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBQztnQkFDM0MsSUFBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBQztvQkFDL0MsSUFBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUM7d0JBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUNuRTt5QkFDRzt3QkFDSixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztxQkFDaEM7aUJBQ0Y7cUJBQ0ksSUFBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUM7b0JBQ3BHLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO2lCQUVsQzthQUVDO1lBQ0QsSUFBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUM7Z0JBQzFCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25HLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQzthQUM3QztZQUNELElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBQztnQkFDakIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLENBQUM7YUFDcEM7UUFDTixDQUFDLENBQUMsQ0FBQTtRQUVGLDhDQUE4QztRQUM5Qyw0QkFBNEI7UUFDNUIsNENBQTRDO1FBQzVDLGtGQUFrRjtRQUNsRixxQ0FBcUM7UUFDckMscUNBQXFDO1FBQ3JDLFVBQVU7UUFFViwwRUFBMEU7UUFDMUUseURBQXlEO1FBQ3pELHdDQUF3QztRQUN4QyxVQUFVO1FBQ1YsUUFBUTtRQUNSLFFBQVE7UUFDUixLQUFLO1FBRUwsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQixJQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBQztnQkFDekIsSUFBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUM7b0JBQzVDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO2lCQUNoQzthQUNGO1lBQ0QsSUFBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUM7Z0JBQzNCLElBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFDO29CQUM5QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztpQkFDbEM7YUFDRjtZQUVELGlDQUFpQztZQUMvQix1RUFBdUU7WUFDdkUsMkRBQTJEO1lBQzNELCtEQUErRDtZQUMvRCx5RkFBeUY7WUFDM0YseUVBQXlFO1lBQ3pFLElBQUk7WUFDSixJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLEdBQUc7b0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO2lCQUNsQixDQUFDO2FBQ0g7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7Z0JBQ2xCLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTt3QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7cUJBQ3JDO29CQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTt3QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUN6RDtvQkFFRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7d0JBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztxQkFDM0Q7b0JBRUQsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO3dCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQzFEO29CQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTt3QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUN6RDtvQkFFRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7d0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztxQkFDekQ7b0JBRUQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO3dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ3pEO29CQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTt3QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUN6RDtvQkFFRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7d0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztxQkFDekQ7b0JBRUQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO3dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ3pEO2dCQUNILENBQUMsQ0FBQyxDQUFBO2FBQ0g7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3BDLElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUM7b0JBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3ZDO2dCQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUNwRDtZQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtnQkFDakMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtnQkFDckQsdURBQXVEO2FBQ3hEO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixpQ0FBaUM7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUMvRSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUM3RixpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQTtRQUN0QyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFDakMsaUJBQWlCLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNoQyxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFBO1FBQ3ZDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDOUIsaUJBQWlCLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQTtRQUN4QyxpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUE7UUFDN0MsaUJBQWlCLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQTtRQUNyQyxJQUFJLGlCQUFpQixDQUFDLEVBQUU7WUFDdEIsaUJBQWlCLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7UUFDMUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQzdDLE9BQU8saUJBQWlCLENBQUMsY0FBYyxDQUFBO1FBQ3ZDLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDckMsaUJBQWlCLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN0QyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7WUFDNUIsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUM3QixJQUFJLEdBQUcsSUFBSSxjQUFjLElBQUksR0FBRyxJQUFJLGVBQWUsSUFBSSxHQUFHLElBQUksbUJBQW1CLElBQUksR0FBRyxJQUFJLFdBQVcsRUFBRTtnQkFDdkcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdEQ7WUFDRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDekM7UUFFRCxJQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUM7WUFDOUIsaUJBQWlCLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0RSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDO1NBQ25DO2FBQ0c7WUFDRixpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDL0IsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUM3QjtRQUNELHdEQUF3RDtRQUN4RCxJQUFJLGlCQUFpQixDQUFDLFdBQVcsRUFBRTtZQUMvQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNsRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssMkJBQTJCLEVBQUU7b0JBQzNDLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUMzQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUM3QztRQUNDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDOUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztRQUM5QyxpQkFBaUIsQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDO1FBQ2pELGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUMzQyxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDakQsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxNQUFNLGVBQWUsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLHlDQUF5QztRQUN6QyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM3QyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFBLENBQUMsc0JBQXNCO1FBQ2pELGlCQUFpQixDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLENBQUE7UUFDL0MsT0FBTyxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQTtRQUMxRCxPQUFPLGlCQUFpQixDQUFDLHdCQUF3QixDQUFBO1FBQ2pELGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBRWxFLGVBQWUsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzVILE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsZUFBZSxDQUFDLEdBQUc7UUFDakIsSUFBSTtZQUNGLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNyQixNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksT0FBTyxDQUFDO2dCQUNaLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFO29CQUN4QixJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUU7d0JBQ3BCLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3ZCO29CQUNELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRTt3QkFDdkcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxXQUFXLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxlQUFlLElBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFFLGlCQUFpQjs0QkFDdk4sT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzNCO29CQUNELElBQUksR0FBRyxLQUFLLG1DQUFtQyxJQUFJLEdBQUcsS0FBSywwQkFBMEIsSUFBSSxHQUFHLElBQUksWUFBWSxJQUFJLEdBQUcsSUFBSSxjQUFjLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRTt3QkFDdEosT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3BCO3lCQUNJLElBQUksT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLElBQUksR0FBRyxJQUFJLFdBQVcsSUFBSSxHQUFHLElBQUksV0FBVyxJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLG1CQUFtQixJQUFLLEdBQUcsSUFBSSxVQUFVLEVBQUU7d0JBQ2xMLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO3FCQUN2Qzt5QkFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLElBQUksb0JBQW9CLElBQUksR0FBRyxJQUFJLHNCQUFzQixJQUFJLEdBQUcsSUFBSSxXQUFXLElBQUksR0FBRyxJQUFJLFVBQVUsSUFBSSxHQUFHLElBQUksa0JBQWtCLElBQUksR0FBRyxJQUFJLG9CQUFvQixJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUU7d0JBQ3hPLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUNqRDtpQkFDRjtnQkFDRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtJQUNILENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxNQUFXLEVBQUMsU0FBYyxFQUFDLFNBQWM7UUFDdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMvQixPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxHQUFHLGtDQUFrQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNsSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDSCxDQUFDO0lBRUgscUNBQXFDO0lBQ3JDLFNBQVMsQ0FBQyxHQUFRO1FBQ2hCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzNCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNqQzthQUNGO2lCQUFNO2dCQUNMLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO29CQUNyQixJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7d0JBQ2hCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNqQjt5QkFBTTt3QkFDTCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDckM7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsK0JBQStCO0lBQy9CLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNoRixNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUE7UUFDakMsSUFBSSxhQUFhLENBQUMsT0FBTztZQUN2QixhQUFhLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUM3QixhQUFhLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDN0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUN6RSxJQUFJLENBQUMsUUFBUTtZQUFFLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDNUIsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0lBQ3RGLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBR0QseUVBQXlFO0lBQ3pFLDZCQUE2QjtRQUMzQixJQUFJLENBQUMsbUNBQW1DLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsbUNBQW1DLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCw0QkFBNEI7UUFDMUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsVUFBVSxDQUFDLE1BQWM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUMzRSxpRUFBaUU7UUFDakUsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxhQUFhLENBQUMsTUFBYyxFQUFFLFdBQVc7UUFDdkMsSUFBSSxXQUFXLEVBQUU7WUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTthQUMxRDtTQUNGO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsVUFBVTtRQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUMvRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsNEJBQTRCO1FBQ3pGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVkLDJCQUEyQjtRQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsdURBQXVEO1lBQ3ZELElBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFDO2dCQUMxQyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxxQkFBcUIsS0FBSyxJQUFJLEVBQUU7b0JBQ2hDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ25DLDBDQUEwQzt3QkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzlCLENBQUMsQ0FBQyxDQUFDO2lCQUNOO3FCQUFNO29CQUNILGtFQUFrRTtvQkFDbEUsU0FBUztpQkFDWjthQUNGO2lCQUNHO2dCQUNGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLHFCQUFxQixLQUFLLElBQUksRUFBRTtvQkFDaEMscUJBQXFCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDeEMsMENBQTBDO3dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDOUIsQ0FBQyxDQUFDLENBQUM7aUJBQ047cUJBQU07b0JBQ0gsa0VBQWtFO29CQUNsRSxTQUFTO2lCQUNaO2FBQ0Y7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFQzs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLE1BQU07UUFDeEIsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDM0UsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTthQUNoRTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELGtCQUFrQixDQUFDLE1BQU07UUFDdkIsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDM0UsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFBO1FBQzFCLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRTtnQkFDOUIsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTthQUN4RTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELDJCQUEyQixDQUFDLE1BQU07UUFDaEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDM0UsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUE7UUFDcEMscUJBQXFCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6Qyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDckYsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLHlCQUF5QixDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBTTtRQUNuQixJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLHFCQUFxQixLQUFLLElBQUksRUFBQztZQUNqQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDN0Y7UUFDRCxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBTTtRQUMzQixJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLHFCQUFxQixLQUFLLElBQUksRUFBQztZQUNqQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDN0Y7UUFDRCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBRyxxQkFBcUIsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFDO1lBQy9DLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQztTQUM3RTtRQUNMLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFNO1FBQ3pCLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUkscUJBQXFCLEtBQUssSUFBSSxFQUFDO1lBQ2pDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUM1RixJQUFHLHFCQUFxQixDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUM7Z0JBQzdDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUM7U0FDRjtRQUVELDhCQUE4QjtRQUM5QixNQUFNLFlBQVksR0FBRyxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLDJCQUEyQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxzQkFBc0IsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsOEJBQThCO1FBRXRTLCtDQUErQztRQUMvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUM1QixJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNO1lBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDOUQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDL0UsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFHRCxjQUFjLENBQUMsT0FBZTtRQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssT0FBTyxFQUFFO2dCQUNoRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUI7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQVU7UUFDN0IsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDdEQsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDZixVQUFVLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDbkU7Z0JBQ0QsVUFBVSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDZixVQUFVLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDbkU7Z0JBQ0QsVUFBVSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDdkQ7WUFDRCxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO1FBQ0QsVUFBVSxJQUFJLEdBQUcsQ0FBQztRQUNsQixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsZUFBZSxDQUFDLEVBQVU7UUFDeEIsUUFBUSxFQUFFLEVBQUU7WUFDVixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLElBQUk7Z0JBQ1AsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLGFBQWEsQ0FBQztZQUNuQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssaUJBQWlCO2dCQUNwQixPQUFPLEtBQUssQ0FBQztZQUNmLEtBQUssY0FBYyxDQUFDO1lBQ3BCLEtBQUssY0FBYztnQkFDakIsT0FBTyxHQUFHLENBQUM7WUFDYixLQUFLLHVCQUF1QjtnQkFDMUIsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLGlCQUFpQixDQUFDO1lBQ3ZCLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxHQUFHLENBQUM7WUFDYixLQUFLLDBCQUEwQjtnQkFDN0IsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLGdCQUFnQjtnQkFDbkIsT0FBTyxZQUFZLENBQUM7WUFDdEIsS0FBSyxpQkFBaUI7Z0JBQ3BCLE9BQU8sV0FBVyxDQUFDO1lBQ3JCLEtBQUssb0JBQW9CO2dCQUN2QixPQUFPLFdBQVcsQ0FBQztZQUNyQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxXQUFXLENBQUMsQ0FBQyx1QkFBdUI7WUFDN0M7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFRO1FBQ3hCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLFVBQVUsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFaEUsSUFBSSxHQUFHLENBQUMsbUJBQW1CLEtBQUssYUFBYSxFQUFFO1lBQzdDLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUNoRixVQUFVLElBQUksV0FBVyxDQUFDO1lBQzFCLElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLGFBQWEsRUFBRTtnQkFDMUMsVUFBVSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDOUU7aUJBQU07Z0JBQ0wsVUFBVSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDdEU7WUFDRCxVQUFVLElBQUksUUFBUSxDQUFDO1NBQ3hCO2FBQ0ksSUFBSSxHQUFHLENBQUMsbUJBQW1CLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxtQkFBbUIsRUFBRSxFQUFFLHlDQUF5QztZQUM3SSxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxtQkFBbUIsRUFBRTtnQkFDakQsVUFBVSxHQUFHLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDO2FBQzdGO2lCQUFNO2dCQUNILFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQzthQUM1RjtZQUNELElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLGFBQWEsRUFBRTtnQkFDeEMsVUFBVSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDaEY7aUJBQU07Z0JBQ0gsVUFBVSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDeEU7WUFDRCxVQUFVLElBQUksSUFBSSxDQUFDO1NBQ3BCO2FBQU0sSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDdEQsVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ2hGLElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLGFBQWEsRUFBRTtnQkFDMUMsSUFBSSxHQUFHLENBQUMsbUJBQW1CLEtBQUssVUFBVSxFQUFFO29CQUMxQyxVQUFVLElBQUksY0FBYyxDQUFDO2lCQUM5QjtxQkFBTTtvQkFDTCxVQUFVLElBQUksYUFBYSxDQUFDO2lCQUM3QjthQUNGO2lCQUFNO2dCQUNMLFVBQVUsSUFBSSxXQUFXLENBQUM7Z0JBQzFCLElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLGFBQWEsRUFBRTtvQkFDMUMsVUFBVSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQzlFO3FCQUFNO29CQUNMLFVBQVUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUN0RTtnQkFDRCxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxVQUFVLEVBQUU7b0JBQzFDLFVBQVUsSUFBSSxTQUFTLENBQUM7aUJBQ3pCO3FCQUFNO29CQUNMLFVBQVUsSUFBSSxTQUFTLENBQUM7aUJBQ3pCO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekUsSUFBSSxHQUFHLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM3QyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDckU7aUJBQU0sSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEtBQUssYUFBYSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRTtnQkFDN0YsVUFBVSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUNoRztpQkFBTTtnQkFDTCxVQUFVLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQzdFO1lBQ0QsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEtBQUssYUFBYSxFQUFFO2dCQUMxQyxVQUFVLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUM5RTtpQkFBTSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxhQUFhLEVBQUU7Z0JBQ2pELFVBQVUsSUFBSSxJQUFJLENBQUM7YUFDcEI7aUJBQU07Z0JBQ0wsVUFBVSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzlFO1NBQ0Y7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsVUFBa0IsRUFBRSxRQUFhO1FBQ2pELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFO1lBQzVDLElBQUksVUFBVSxLQUFLLGFBQWEsSUFBSSxVQUFVLEtBQUssYUFBYSxFQUFFO2dCQUNoRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsT0FBTyxZQUFZLFVBQVUsYUFBYSxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQ3BDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFO1lBQ2xDLE9BQU8sYUFBYSxHQUFHLGNBQWMsQ0FBQztTQUN2QzthQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQzNDLElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtnQkFDakIsT0FBTyxLQUFLLENBQUM7YUFDZDtpQkFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7aUJBQU07Z0JBQ0wsT0FBTyxHQUFHLENBQUM7YUFDWjtTQUNGO2FBQU07WUFDTCxPQUFPLEtBQUssR0FBRyxHQUFHLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBSUQsMEJBQTBCO0lBQzFCLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxjQUFtQixFQUFFLE1BQVc7UUFDNUQsTUFBTSxpQkFBaUIsR0FBRztZQUN4QixPQUFPLEVBQUUsTUFBTTtZQUNmLFdBQVcsRUFBRSxjQUFjO1NBQzVCLENBQUE7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxHQUFHLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzNILE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsTUFBTTtRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDaEYsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUM1Qix5REFBeUQ7WUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVc7aUJBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsZ0NBQWdDO2lCQUN0RCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQyx1QkFBdUI7WUFFakUsb0RBQW9EO1lBQ3BELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUMzQyxPQUFPLGNBQWMsQ0FBQztTQUN2QjthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsY0FBYyxDQUFDLFFBQWEsRUFBRSxNQUFXO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4QyxVQUFVLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLFFBQVEsRUFBRTtZQUNaLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ2xILE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXO1FBQ3BFLElBQUk7WUFDQSxPQUFPLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFL0IsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsa0JBQWtCLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEcsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFFeEUsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUN6RyxNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7WUFFakYsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUV6RCxJQUFJLENBQUMsQ0FBQywyQkFBMkIsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFO2dCQUN2RCx5REFBeUQ7Z0JBQ3pELElBQUkscUJBQXFCLEVBQUU7b0JBQ3ZCLEtBQUssQ0FBQyxrREFBa0QsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDekY7Z0JBQ0QsSUFBSSxhQUFhLEVBQUU7b0JBQ2YsS0FBSyxDQUFDLG9EQUFvRCxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDbkY7YUFDSjtpQkFBTTtnQkFDSCxJQUFHLENBQUMsV0FBVyxFQUFDO29CQUNkLDhEQUE4RDtvQkFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO29CQUMvRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO3dCQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyx5QkFBeUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FDckgsQ0FBQyxRQUFhLEVBQUUsRUFBRTs0QkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFDOzRCQUNsRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3RCLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFOzRCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBQzdDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDbEIsQ0FBQyxDQUNKLENBQUM7b0JBQ04sQ0FBQyxDQUFDLENBQUM7aUJBQ0o7cUJBQUk7b0JBQ0gsT0FBTyxFQUFDLFlBQVksRUFBRyxJQUFJLEVBQUMsQ0FBQTtpQkFDN0I7YUFDSjtTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELE1BQU0sS0FBSyxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUMsNEJBQTRCLENBQUMsTUFBYTtRQUN4QyxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7UUFDekIsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNuQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLHNDQUFzQztZQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUN2RSxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDN0IsOENBQThDO2dCQUM5QyxJQUFJLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO29CQUM5RixJQUFJO3dCQUNGLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUNuRTtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUN6RjtpQkFDRjtnQkFDRCxJQUFHLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLEVBQ2xDO29CQUNFLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDO29CQUNqQyxPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztpQkFDbkM7cUJBQ0UsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO29CQUNqRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7b0JBQ3hDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3pELE9BQU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDO29CQUNqQyxPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztpQkFDbkM7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7aUJBQ3pHO2FBQ0Y7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQzthQUNqQztZQUVELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFO2dCQUNwRCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRSw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUNsRTtpQkFBTTtnQkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDdkI7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxNQUFhO1FBQzFDLElBQUksUUFBUSxHQUFVLEVBQUUsQ0FBQztRQUN6QixJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ25CLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMvRCxJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtnQkFDL0IsOENBQThDO2dCQUM5QyxJQUFJLE9BQU8sTUFBTSxDQUFDLG9CQUFvQixLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO29CQUNsRyxJQUFJO3dCQUNGLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUN2RTtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLCtDQUErQyxFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUM3RjtpQkFDRjtnQkFDRCxJQUFHLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLEVBQ3BDO29CQUNFLE9BQU8sTUFBTSxDQUFDLG9CQUFvQixDQUFDO29CQUNuQyxPQUFPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztpQkFDckM7cUJBQ0ksSUFBSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO29CQUNyRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7b0JBQzFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzNELE9BQU8sTUFBTSxDQUFDLG9CQUFvQixDQUFDO29CQUNuQyxPQUFPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztpQkFDckM7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUNuRzthQUNGO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7YUFDbkM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDbkU7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBaUIsRUFBRSxLQUFZLEVBQUUsRUFBVSxFQUFFLGNBQXNCO1FBQ2xGLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDdEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQzthQUNuRTtpQkFBTTtnQkFDTCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzlFLElBQUksTUFBTSxFQUFFO29CQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUU7d0JBQzNCLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7cUJBQzdCO29CQUNELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dCQUN4QyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqQztvQkFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEtBQUssYUFBYSxFQUFFO3dCQUN0RCxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDcEYsSUFBSSxpQkFBaUIsRUFBRTs0QkFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxFQUFFO2dDQUN0QyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7NkJBQ3hDOzRCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0NBQ25ELGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs2QkFDNUM7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxVQUFpQixFQUFFLEVBQVU7UUFDcEMsS0FBSyxJQUFJLE1BQU0sSUFBSSxVQUFVLEVBQUU7WUFDN0IsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLEVBQUUsRUFBRTtnQkFDNUIsT0FBTyxNQUFNLENBQUM7YUFDZjtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUMsQ0FBQyxnQ0FBZ0M7SUFDcEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQWMsRUFBRSxRQUFnQixFQUFFLGFBQWdFO1FBQ2pILE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDckUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7YUFDN0U7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2dHQS9rQ1Usd0JBQXdCOzhFQUF4Qix3QkFBd0IsV0FBeEIsd0JBQXdCLG1CQUh2QixNQUFNO3VGQUdQLHdCQUF3QjtjQUpwQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXhGb3JtIH0gZnJvbSAnLi4vLi4vZm9ybXMvYXgtZm9ybSc7XG5pbXBvcnQgeyBDb21tb25MaWJDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi1saWItY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEpzb25Db252ZXJ0IH0gZnJvbSAnanNvbjJ0eXBlc2NyaXB0JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZvcm1zTGlzdFNlcnZpY2UgfSBmcm9tICcuLi9mb3Jtcy1saXN0L2Zvcm1zLWxpc3Quc2VydmljZSc7XG4vLyBpbXBvcnQgeyBGb3Jtc0xpc3RTZXJ2aWNlIH0gZnJvbSAnYXBwL21vZHVsZXMvYnVpbGQvc2N1bHB0b3IvZm9ybXMtbGlzdC9mb3Jtcy1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViRm9ybSB9IGZyb20gJy4uLy4uL2Zvcm1zL3BhZ2Uvd2lkZ2V0cy9zdWItZm9ybSc7XG5pbXBvcnQgeyBXaWRnZXQgfSBmcm9tICcuLi8uLi9mb3Jtcy9wYWdlL3dpZGdldHMvd2lkZ2V0JztcbmltcG9ydCB7IEN1c3RvbVN0b3JhZ2UgfSBmcm9tICcuL2N1dG9tLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlck1hc3Rlck1hcHBlclNlcnZpY2UgfSBmcm9tICcuL2Zvcm0tYnVpbGRlci1tYXN0ZXItbWFwcGVyLnNlcnZpY2UnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBGb3JtQnVpbGRlck1hc3RlclNlcnZpY2Uge1xuXG4gIC8vIFByaXZhdGVcbiAgcHJpdmF0ZSBfZm9ybTogQmVoYXZpb3JTdWJqZWN0PEF4Rm9ybSB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgcHJpdmF0ZSBfZnVuY3Rpb25DYWxsU3ViamVjdFJvdXRlRm9ybSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfZnVuY3Rpb25DYWxsVXBkYXRlTG9jYWxzdG9yYWdlRm9ybSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfZnVuY3Rpb25DYWxsU2V0RHJvcGJveCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfZm9ybU9iamVjdENvdW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBhbGxGb3JtRmllbGRzOiBhbnkgPSBbXTtcbiAgYXJyYXlfc3ViRm9ybTogYW55ID0gW107XG4gIC8vIEluaXRpYWxpemUgbmV3SWRlbnRpZmllcnMgYXMgQmVoYXZpb3JTdWJqZWN0XG4gIHByaXZhdGUgbmV3SWRlbnRpZmllcnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4odGhpcy5pbml0TmV3SWRlbnRpZmllcnMoKSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCwgXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Zvcm1zTGlzdFNlcnZpY2U6IEZvcm1zTGlzdFNlcnZpY2UsIFxuICAgICAgICAgICAgICBwcml2YXRlIF9jdXN0b21lU3RvcmFnZTogQ3VzdG9tU3RvcmFnZSwgXG4gICAgICAgICAgICAgIHByaXZhdGUgY29tbW9uTGliQ29uZmlnOiBDb21tb25MaWJDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZm9ybWJ1aWxkZXJtYXBwZXI6IEZvcm1CdWlsZGVyTWFzdGVyTWFwcGVyU2VydmljZSkge1xuICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlID0gX2N1c3RvbWVTdG9yYWdlOyAvLyBpbml0aWFsaXplIF9jdXN0b21lU3RvcmFnZSB3aXRoIHRoZSBpbmplY3RlZCBzZXJ2aWNlXG4gICAgY29uc3Qgc3RvcmVkQ291bnQgPSB0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKCdmb3JtT2JqZWN0Q291bnQnKTtcbiAgICBpZiAoc3RvcmVkQ291bnQpIHtcbiAgICAgIHRoaXMuX2Zvcm1PYmplY3RDb3VudC5uZXh0KHBhcnNlSW50KHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ2Zvcm1PYmplY3RDb3VudCcpIHx8ICcwJywgMTApKTtcbiAgICB9XG4gICAgLy8gY29uc3Qgc3RvcmVkSWRlbnRpZmllcnMgPSB0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKCdpZGVudGlmaWVycycpO1xuICAgIC8vIGlmIChzdG9yZWRJZGVudGlmaWVycykge1xuICAgIC8vICAgdGhpcy5uZXdJZGVudGlmaWVyc1N1YmplY3QubmV4dChKU09OLnBhcnNlKHN0b3JlZElkZW50aWZpZXJzKSk7XG4gICAgLy8gfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2NhbENoYW5nZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGxvY2FsQ2hhbmdlc0V4aXN0JCA9IHRoaXMubG9jYWxDaGFuZ2VzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBBZGQgYSBmbGFnIG9yIHN1YmplY3QgdG8gbm90aWZ5IHdoZW4gQ29tcG9uZW50IEEgaGFzIGZpbmlzaGVkIGluaXRpYWxpemluZ1xuICBwcml2YXRlIGluaXRpYWxpemVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpbml0aWFsaXplZCQgPSB0aGlzLmluaXRpYWxpemVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBzZXRMb2NhbENoYW5nZXNFeGlzdChzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMubG9jYWxDaGFuZ2VzU3ViamVjdC5uZXh0KHN0YXRlKTtcbiAgICB0aGlzLmluaXRpYWxpemVkU3ViamVjdC5uZXh0KHRydWUpOyAvLyBOb3RpZnkgdGhhdCB0aGUgc3RhdGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgfVxuICAvLyBJbml0aWFsaXplIG5ldyBpZGVudGlmaWVycyBmcm9tIGN1c3RvbSBzdG9yYWdlXG4gIHByaXZhdGUgaW5pdE5ld0lkZW50aWZpZXJzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdG9yZWRJZGVudGlmaWVycyA9IHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ25ld0lkZW50aWZpZXJzJyk7XG4gICAgcmV0dXJuIHN0b3JlZElkZW50aWZpZXJzID8gSlNPTi5wYXJzZShzdG9yZWRJZGVudGlmaWVycykgOiBbXTtcbiAgfVxuXG4gIC8vIEdldHRlciBmb3IgZm9ybSBvYnNlcnZhYmxlXG4gIGdldCBmb3JtJCgpOiBPYnNlcnZhYmxlPEF4Rm9ybT4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JtLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGFkZCBhIG5ldyBpZGVudGlmaWVyIHRvIHRoZSBhcnJheVxuICBhZGROZXdJZGVudGlmaWVyKGlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRJZGVudGlmaWVycyA9IHRoaXMubmV3SWRlbnRpZmllcnNTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgY29uc3QgdXBkYXRlZElkZW50aWZpZXJzID0gWy4uLmN1cnJlbnRJZGVudGlmaWVycywgaWRlbnRpZmllcl07XG4gICAgdGhpcy5uZXdJZGVudGlmaWVyc1N1YmplY3QubmV4dCh1cGRhdGVkSWRlbnRpZmllcnMpO1xuICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLndyaXRlKCduZXdJZGVudGlmaWVycycsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRJZGVudGlmaWVycykpO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGdldCB0aGUgb2JzZXJ2YWJsZSBhcnJheSBvZiBuZXcgaWRlbnRpZmllcnNcbiAgZ2V0TmV3SWRlbnRpZmllcnMkKCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5uZXdJZGVudGlmaWVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2xlYXIgdGhlIGFycmF5IG9mIG5ldyBpZGVudGlmaWVyc1xuICBjbGVhck5ld0lkZW50aWZpZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubmV3SWRlbnRpZmllcnNTdWJqZWN0Lm5leHQoW10pO1xuICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlbW92ZSgnbmV3SWRlbnRpZmllcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0ZXIgYW5kIEdldHRlciBmb3IgRm9ybU9iamVjdENvdW50XG4gICAqL1xuICBzZXRGb3JtT2JqZWN0Q291bnQoY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY291bnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9mb3JtT2JqZWN0Q291bnQubmV4dChjb3VudCk7XG4gICAgICB0aGlzLl9jdXN0b21lU3RvcmFnZS53cml0ZSgnZm9ybU9iamVjdENvdW50JywgY291bnQudG9TdHJpbmcoKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Rm9ybU9iamVjdENvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1PYmplY3RDb3VudC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0byBjYWxsIGhpZGUvc2hvdyBmb3JtIGFwaVxuICAgKlxuICAgKiBAcGFyYW0gZm9ybUlkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBoaWRlU2hvd0Zvcm0oZm9ybVZpc2liaWxpdHk6IGJvb2xlYW4sIGZvcm1JZDogc3RyaW5nLCBhcHBWZXJzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB7XG4gICAgICAnYXBwVmVyc2lvbklkJzogYXBwVmVyc2lvbklkLFxuICAgICAgJ2Zvcm1faWQnOiBmb3JtSWQsXG4gICAgICAnZm9ybVZpc2liaWxpdHknOiBmb3JtVmlzaWJpbGl0eVxuICAgIH07XG4gICAgbGV0IG5ld0lkZW50aWZpZXIgPSAnJztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5faHR0cENsaWVudC5wb3N0KHRoaXMuY29tbW9uTGliQ29uZmlnLmF4b25hdG9yWDFVcmwgKyAnaGlkZUZvcm1TaG93Rm9ybS8nLCBmb3JtRGF0YSkuc3Vic2NyaWJlKChyZXNwb25zZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIG5ld0lkZW50aWZpZXIgPSByZXNwb25zZTtcbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmb3JtIGRldGFpbCBieSB0aGUgZm9ybSBpZFxuICAgKlxuICAgKiBAcGFyYW0gRm9ybURhdGFcbiAgICogQHJldHVybnMgXG4gICAqL1xuICBnZXRGb3JtRGV0YWlscyhmb3JtSWQ6IHN0cmluZywgc3ViRm9ybUlkOiBzdHJpbmcpOiBQcm9taXNlPEF4Rm9ybT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmb3JtJywgSlNPTi5zdHJpbmdpZnkoeyAnZmlkJzogZm9ybUlkIH0pKTtcbiAgICBjb25zdCBqc29uQ29udmVydDogSnNvbkNvbnZlcnQgPSBuZXcgSnNvbkNvbnZlcnQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFzdWJGb3JtSWQpIHtcbiAgICAgICAgdGhpcy5faHR0cENsaWVudC5wb3N0PGFueT4odGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCArICdnZXRGb3JtRGV0YWlscy8nLCBmb3JtRGF0YSkuc3Vic2NyaWJlKFxuICAgICAgICAgIGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY3VzdG9tZVN0b3JhZ2Uud3JpdGUoJ19zdGF0aWNGb3JtT2JqZWN0JyArIGZvcm1JZCwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZmQuZm9ybSkpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0ganNvbkNvbnZlcnQuZGVzZXJpYWxpemVPYmplY3QocmVzcG9uc2UuZmQuZm9ybSwgQXhGb3JtKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU3ViZm9ybShmb3JtLndpZGdldHMsIGZvcm1JZCwgZm9ybSlcbiAgICAgICAgICAgIHRoaXMuX2Zvcm0ubmV4dChmb3JtKTtcbiAgICAgICAgICAgIHJlc29sdmUoZm9ybSk7XG4gICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IF9zdWJmb3JtID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGZvcm1JZCArIHN1YkZvcm1JZCkpXG4gICAgICAgIGNvbnN0IF9mb3JtID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGZvcm1JZCkpXG4gICAgICAgIGlmIChfc3ViZm9ybSkge1xuICAgICAgICAgIF9mb3JtLndpZGdldHMgPSBfc3ViZm9ybS53aWRnZXRzO1xuICAgICAgICAgIHJlc29sdmUoX2Zvcm0pO1xuICAgICAgICB9IGVsc2UgcmVqZWN0O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU3ViZm9ybSh3aWRnZXRzLCBmb3JtSWQsIGZvcm0pIHtcbiAgICBpZiAod2lkZ2V0cyAmJiB3aWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHdpZGdldHMuZm9yRWFjaChyZXMgPT4ge1xuICAgICAgICBpZiAocmVzLnN1YlR5cGUgPT0gXCJTdWJGb3JtXCIgfHwgcmVzLnN1YlR5cGUgPT0gXCJzdWJmb3JtXCIpIHtcbiAgICAgICAgICBjb25zdCBzdWJmb3JtID0gbmV3IFN1YkZvcm0ocmVzIGFzIGFueSlcbiAgICAgICAgICBjb25zdCBtb2RpZnlTdWJmb3JtID0geyAuLi5mb3JtIH1cbiAgICAgICAgICBpZiAoc3ViZm9ybS5tYXJrdXAgJiYgc3ViZm9ybS5tYXJrdXAubGVuZ3RoID4gMClcbiAgICAgICAgICAgIG1vZGlmeVN1YmZvcm0ud2lkZ2V0cyA9IHN1YmZvcm0ubWFya3VwO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1vZGlmeVN1YmZvcm0ud2lkZ2V0cyA9IFtdO1xuICAgICAgICAgIG1vZGlmeVN1YmZvcm0uaWQgPSBzdWJmb3JtLmlkO1xuICAgICAgICAgIGxldCBfc3ViZm9ybSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZChcIl9zdWJmb3JtXCIgKyBmb3JtSWQpKVxuICAgICAgICAgIGlmICghX3N1YmZvcm0pIF9zdWJmb3JtID0gW11cbiAgICAgICAgICBfc3ViZm9ybS5wdXNoKG1vZGlmeVN1YmZvcm0uaWQpXG4gICAgICAgICAgdGhpcy5fY3VzdG9tZVN0b3JhZ2Uud3JpdGUoXCJfc3ViZm9ybVwiICsgZm9ybUlkLCBKU09OLnN0cmluZ2lmeShfc3ViZm9ybSkpXG4gICAgICAgICAgdGhpcy5fY3VzdG9tZVN0b3JhZ2Uud3JpdGUoZm9ybUlkICsgbW9kaWZ5U3ViZm9ybS5pZCwgSlNPTi5zdHJpbmdpZnkobW9kaWZ5U3ViZm9ybSkpXG4gICAgICAgICAgdGhpcy5jcmVhdGVTdWJmb3JtKG1vZGlmeVN1YmZvcm0ud2lkZ2V0cywgZm9ybUlkLCBmb3JtKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSB2YWxpZGl0eSBjb25kaXRpb24gb2dmIHN1YmZvcm1cbiAgdXBkYXRlVmFsaWRpdHlDb25kaXRpb25TdWJmb3JtKGl0ZW0sIHByb21wdENvZGUpIHtcbiAgICBpZiAoaXRlbS5tYXJrdXApIHtcbiAgICAgIGl0ZW0ubWFya3VwLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHZhbGlkaXR5Q29uZGl0aW9ucyA9IHR5cGVvZiBpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyA9PSAnb2JqZWN0JyA/IGl0ZW0udmFsaWRpdHlDb25kaXRpb25zIDpKU09OLnBhcnNlKGl0ZW0udmFsaWRpdHlDb25kaXRpb25zKTtcbiAgICAgICAgICBpdGVtLmludmFsaWRpdHlNc2cgPSB2YWxpZGl0eUNvbmRpdGlvbnMuaW52YWxpZGl0eV9tc2c7XG4gICAgICAgICAgaXRlbS52YWxpZGl0eUNvbmRpdGlvbkpzID0gdmFsaWRpdHlDb25kaXRpb25zLnZhbGlkaXR5X2NvbmRpdGlvbnNfanM7XG4gICAgICAgICAgaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMgPSB2YWxpZGl0eUNvbmRpdGlvbnMudmFsaWRpdHlfY29uZGl0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXByb21wdENvZGUpIHtcbiAgICAgICAgICBpdGVtLnByb21wdE1sID0ge1xuICAgICAgICAgICAgXCJlblwiOiBpdGVtLnByb21wdFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHt9XG4gICAgICAgICAgcHJvbXB0Q29kZS5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdlbicpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgZW46IGl0ZW0ucHJvbXB0IH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSAnaGknKSB7XG4gICAgICAgICAgICAgIGl0ZW0ucHJvbXB0TWwgPSB7IC4uLml0ZW0ucHJvbXB0TWwsIGhpOiBpdGVtLmhpcHJvbXB0IH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSAnbWFyJykge1xuICAgICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBtYXI6IGl0ZW0ubWFycHJvbXB0IH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSAndGVsJykge1xuICAgICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBtYXI6IGl0ZW0udGVwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdmcicpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgZnI6IGl0ZW0uZnJwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdhcicpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgYXI6IGl0ZW0uYXJwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdKUCcpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgSlA6IGl0ZW0uSlBwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdJRCcpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgSUQ6IGl0ZW0uSURwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdUSCcpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgVEg6IGl0ZW0uVEhwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdUSCcpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgVEg6IGl0ZW0uVEhwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcImNob2ljZWxpc3Qtd2lkZ2V0XCIpIHtcbiAgICAgICAgICBpdGVtLmNob2ljZXMgPSAoaXRlbS5jaG9pY2VzKS5zcGxpdChcIixcIikuam9pbihcIlxcblwiKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJzdWJmb3JtLXdpZGdldFwiKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eUNvbmRpdGlvblN1YmZvcm0oaXRlbSwgcHJvbXB0Q29kZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgLy8gVXBkYXRlIGZvcm0gc2VydmljZVxuICBhc3luYyB1cGRhdGVGb3JtRGV0YWlscyhmb3JtRGF0YTogYW55LCBmb3JtSWQ6IHN0cmluZywgZm9ybURldGFpbHM6IGFueSwgZm9ybVNjcnB0RGF0YTogYW55LCBmb3JtVmlzaWJpbGl0eTogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gRW5zdXJlIGZvcm1EYXRhIGlzIG5vdCB1bmRlZmluZWRcbiAgICBpZiAoIWZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1EYXRhIGlzIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGV0YWlsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtRGV0YWlscykpXG4gICAgZm9ybURhdGEgPSB0aGlzLnJlbW92ZUlkcyhmb3JtRGF0YSlcbiAgICBjb25zdCBwcm9tcHRDb2RlID0gdGhpcy5nZXRGb3JtTGFuZ3VhZ2VzKGZvcm1JZCk7XG5cbiAgICB0aGlzLmFsbEZvcm1GaWVsZHMgPSB0aGlzLmdldEZpbHRlcmVkV2lkZ2V0c0xpc3QoZm9ybUlkKTsgXG5cbiAgICBmb3JtRGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2ZpbGV1cGxvYWQtd2lkZ2V0Jykge1xuICAgICAgICAvLyBBc3N1bWluZyBgc3RyaW5nYCBpcyB0aGUgZm9ybWF0dGVkIHN0cmluZyBjb250YWluaW5nIGFsbG93ZWQgZmlsZSB0eXBlcyBsaWtlIFwicGRmLCBwcHRcIlxuICAgICAgICBpZiAoaXRlbS5hbGxvd2VkRmlsZVR5cGVzKSB7XG4gICAgICAgICAgY29uc3Qgc3RyaW5nID0gaXRlbS5hbGxvd2VkRmlsZVR5cGVzLmpvaW4oJywnKTtcbiAgICAgICAgICBpdGVtLmFsbG93ZWRGaWxlVHlwZVRlbXAgPSBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXRlbS50eXBlID09PSAnY2hvaWNlbGlzdC13aWRnZXQnKXtcbiAgICAgICAgICBpdGVtLnN1YlR5cGUgPSBpdGVtLmNob2ljZXNTb3VyY2U7XG4gICAgICAgICAgaXRlbS5jaG9pY2VzID0gaXRlbS5jaG9pY2VzLnNwbGl0KCcsJykubWFwKGNob2ljZSA9PiBjaG9pY2UudHJpbSgpKS5qb2luKCdcXG4nKVxuICAgICAgICB9XG4gICAgICBlbHNlIGlmKGl0ZW0udHlwZSA9PT0gJ3RpbWVzdGFtcC13aWRnZXQnKXtcbiAgICAgICAgICBpdGVtLnN1YlR5cGUgPSBpdGVtLm1haW5UeXBlO1xuICAgICAgICB9ICBcbiAgICAgICAgaWYoaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgaWYoaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMubm9kZXMgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBpZihpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyl7XG4gICAgICAgICAgICAgIGl0ZW0udmFsaWRpdHlDb25kaXRpb25zID0gSlNPTi5wYXJzZShpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW0udmFsaWRpdHlDb25kaXRpb25zO1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW0uaW52YWxpZGl0eU1zZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGl0ZW0udmFsaWRpdHlDb25kaXRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgJiYgaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMubm9kZXMubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICBkZWxldGUgaXRlbS52YWxpZGl0eUNvbmRpdGlvbnM7XG4gICAgICAgICAgZGVsZXRlIGl0ZW0uaW52YWxpZGl0eU1zZztcbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKGl0ZW0udmlzaWJpbGl0eUNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgIGlmKGl0ZW0udmlzaWJpbGl0eUNvbmRpdGlvbnMubm9kZXMgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgaWYoaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucyl7XG4gICAgICAgICAgICBpdGVtLnZpc2liaWxpdHlDb25kaXRpb25zID0gSlNPTi5wYXJzZShpdGVtLnZpc2liaWxpdHlDb25kaXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICBkZWxldGUgaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucztcbiAgICAgICAgICB9ICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucy5ub2RlcyAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmlzaWJpbGl0eUNvbmRpdGlvbnMubm9kZXMubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICBkZWxldGUgaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucztcblxuICAgICAgICB9XG5cbiAgICAgICAgIH1cbiAgICAgICAgIGlmKGl0ZW0udmFsaWRpdHlEZXBlbmRlbnRzKXtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZERlcGVuZGVudHMgPSBpdGVtLnZhbGlkaXR5RGVwZW5kZW50cy5maWx0ZXIocHRyID0+IHRoaXMuYWxsRm9ybUZpZWxkcy5pbmNsdWRlcyhwdHIpKTtcbiAgICAgICAgICBpdGVtLnZhbGlkaXR5RGVwZW5kZW50cyA9IGZpbHRlcmVkRGVwZW5kZW50cztcbiAgICAgICAgIH1cbiAgICAgICAgIGlmKGl0ZW0uZGVwZW5kYW50KXtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZERlcGVuZGVudHMgPSBpdGVtLmRlcGVuZGFudC5maWx0ZXIocHRyID0+IHRoaXMuYWxsRm9ybUZpZWxkcy5pbmNsdWRlcyhwdHIpKTtcbiAgICAgICAgICBpdGVtLmRlcGVuZGFudCA9IGZpbHRlcmVkRGVwZW5kZW50cztcbiAgICAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gY29uc3QgcHJvY2Vzc1N1YmZvcm1zID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xuICAgIC8vICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAvLyAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3N1YmZvcm0td2lkZ2V0Jykge1xuICAgIC8vICAgICAgIC8vIENoZWNrIGlmICdzdWJfdHlwZScga2V5IGlzIG5vdCBwcmVzZW50IGFuZCBhZGQgaXQgd2l0aCB2YWx1ZSAnc3ViZm9ybSdcbiAgICAvLyAgICAgICBpZiAoISgnc3ViX3R5cGUnIGluIGl0ZW0pKSB7XG4gICAgLy8gICAgICAgICBpdGVtLnN1Yl90eXBlID0gXCJzdWJmb3JtXCI7XG4gICAgLy8gICAgICAgfVxuICAgIFxuICAgIC8vICAgICAgIC8vIElmIHRoZSAnbWFya3VwJyBhcnJheSBleGlzdHMsIHByb2Nlc3MgaXRzIHN1YmZvcm1zIHJlY3Vyc2l2ZWx5XG4gICAgLy8gICAgICAgaWYgKGl0ZW0ubWFya3VwICYmIEFycmF5LmlzQXJyYXkoaXRlbS5tYXJrdXApKSB7XG4gICAgLy8gICAgICAgICBwcm9jZXNzU3ViZm9ybXMoaXRlbS5tYXJrdXApO1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfTtcbiAgICBcbiAgICAvLyBwcm9jZXNzU3ViZm9ybXMoZm9ybURhdGEpO1xuICAgIHRoaXMucHJlcHJvY2Vzc1ZhbGlkaXR5Q29uZGl0aW9ucyhmb3JtRGF0YSk7ICAgICAgXG4gICAgdGhpcy5wcmVwcm9jZXNzVmlzaWRpbGl0eUNvbmRpdGlvbnMoZm9ybURhdGEpO1xuICAgIGZvcm1EYXRhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpZihpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyl7XG4gICAgICAgIGlmKGl0ZW0udmFsaWRpdHlDb25kaXRpb25zLm5vZGVzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICAgZGVsZXRlIGl0ZW0udmFsaWRpdHlDb25kaXRpb25zO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihpdGVtLnZpc2liaWxpdHlDb25kaXRpb25zKXtcbiAgICAgICAgaWYoaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucy5ub2Rlcy5sZW5ndGggPT09IDApe1xuICAgICAgICAgIGRlbGV0ZSBpdGVtLnZpc2liaWxpdHlDb25kaXRpb25zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIChpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucykge1xuICAgICAgICAvLyAgIC8vIGNvbnN0IHZhbGlkaXR5Q29uZGl0aW9ucyA9IEpTT04ucGFyc2UoaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMpO1xuICAgICAgICAvLyAgIC8vIGNvbnN0IHZhbGlkaXR5Q29uZGl0aW9ucyA9IGl0ZW0udmFsaWRpdHlDb25kaXRpb25zO1xuICAgICAgICAvLyAgIC8vIGl0ZW0uaW52YWxpZGl0eU1zZyA9IHZhbGlkaXR5Q29uZGl0aW9ucy5pbnZhbGlkaXR5X21zZztcbiAgICAgICAgLy8gICBpdGVtLnZhbGlkaXR5Q29uZGl0aW9uSnMgPSB0aGlzLnByZWNvbXBpbGVDb25kaXRpb25zKGl0ZW0udmFsaWRpdHlDb25kaXRpb25zLm5vZGVzKTtcbiAgICAgIC8vICAgLy8gaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMgPSB2YWxpZGl0eUNvbmRpdGlvbnMudmFsaWRpdHlfY29uZGl0aW9ucztcbiAgICAgIC8vIH1cbiAgICAgIGlmICghcHJvbXB0Q29kZSkge1xuICAgICAgICBpdGVtLnByb21wdE1sID0ge1xuICAgICAgICAgIFwiZW5cIjogaXRlbS5wcm9tcHRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpdGVtLnByb21wdE1sID0ge31cbiAgICAgICAgcHJvbXB0Q29kZS5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgICAgIGlmIChjb2RlID09PSAnZW4nKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyBlbjogaXRlbS5wcm9tcHQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gJ2hpJykge1xuICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgaGk6IGl0ZW0uaGlwcm9tcHQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gJ21hcicpIHtcbiAgICAgICAgICAgIGl0ZW0ucHJvbXB0TWwgPSB7IC4uLml0ZW0ucHJvbXB0TWwsIG1hcjogaXRlbS5tYXJwcm9tcHQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gJ3RlbCcpIHtcbiAgICAgICAgICAgIGl0ZW0ucHJvbXB0TWwgPSB7IC4uLml0ZW0ucHJvbXB0TWwsIG1hcjogaXRlbS50ZXByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnZnInKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBmcjogaXRlbS5mcnByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnYXInKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBhcjogaXRlbS5hcnByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnSlAnKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBKUDogaXRlbS5KUHByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnSUQnKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBJRDogaXRlbS5JRHByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnVEgnKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBUSDogaXRlbS5USHByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnVEgnKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBUSDogaXRlbS5USHByb21wdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJjaG9pY2VsaXN0LXdpZGdldFwiKSB7XG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoaXRlbS5jaG9pY2VzKSl7XG4gICAgICAgICAgaXRlbS5jaG9pY2VzID0gaXRlbS5jaG9pY2VzLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0uY2hvaWNlcyA9IChpdGVtLmNob2ljZXMpLnNwbGl0KFwiLFwiKS5qb2luKFwiXFxuXCIpXG4gICAgICB9XG4gICAgICBpZiAoaXRlbS50eXBlID09IFwic3ViZm9ybS13aWRnZXRcIikge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5Q29uZGl0aW9uU3ViZm9ybShpdGVtLCBwcm9tcHRDb2RlKVxuICAgICAgICAvLyBmb3JtRGF0YVtpbmRleF0gPSB0aGlzLnByb2Nlc3NJbm5lcldpZGdldEpzb24oaXRlbSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAvLyBTdGF0aWMgdmFsdWUgc2V0IG5lZWQgdG9jaGFuZ2VcbiAgICBjb25zdCBhcHBEZXRhaWxzID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKFwiYXBwRGV0YWlsc1wiICsgZm9ybUlkKSlcbiAgICBjb25zdCBfc3RhdGljRm9ybU9iamVjdCA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZCgnX3N0YXRpY0Zvcm1PYmplY3QnICsgZm9ybUlkKSlcbiAgICBfc3RhdGljRm9ybU9iamVjdC5hID0gYXBwRGV0YWlscy5hcHBJZFxuICAgIF9zdGF0aWNGb3JtT2JqZWN0LnYgPSAoYXBwRGV0YWlscy52ZXJzaW9uKS50b0ZpeGVkKDMpLnRvU3RyaW5nKCk7XG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuZXJyb3JfY291bnQgPSAwXG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuQkVIQVZJT1JTID0gW11cbiAgICBfc3RhdGljRm9ybU9iamVjdC5hbGxvd19hZF9ob2MgPSBcIlRydWVcIlxuICAgIF9zdGF0aWNGb3JtT2JqZWN0LmZ0ID0gXCJhc3NldFwiXG4gICAgX3N0YXRpY0Zvcm1PYmplY3QubXVsdGlsYW5ndWFnZSA9IFwiVHJ1ZVwiXG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuaXNDU1ZFeHBvcnRFbmFibGUgPSBcIkZhbHNlXCJcbiAgICBfc3RhdGljRm9ybU9iamVjdC5pc19wdWJsaWMgPSBcIkZhbHNlXCJcbiAgICBpZiAoX3N0YXRpY0Zvcm1PYmplY3QuZm0pXG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5mbS5hbGxvd19hZF9ob2MgPSB0cnVlXG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuY291bnQgPSBmb3JtRGF0YS5sZW5ndGggLSAxXG4gICAgZGVsZXRlIF9zdGF0aWNGb3JtT2JqZWN0Lm9sZF9uZXdfaWRfbWFwXG4gICAgX3N0YXRpY0Zvcm1PYmplY3Qub2xkX25ld19pZF9tYXAgPSB7fVxuICAgIF9zdGF0aWNGb3JtT2JqZWN0LmZpZCA9IE51bWJlcihmb3JtSWQpXG4gICAgZGVsZXRlIGZvcm1EZXRhaWwud2lkZ2V0c1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZvcm1EZXRhaWwpIHtcbiAgICAgIGRlbGV0ZSBfc3RhdGljRm9ybU9iamVjdFtrZXldXG4gICAgICBpZiAoa2V5ID09ICdhbGxvd19hZF9ob2MnIHx8IGtleSA9PSAnbXVsdGlsYW5ndWFnZScgfHwga2V5ID09ICdpc0NTVkV4cG9ydEVuYWJsZScgfHwga2V5ID09ICdpc19wdWJsaWMnKSB7XG4gICAgICAgIGZvcm1EZXRhaWxba2V5XSA9IGZvcm1EZXRhaWxba2V5XSA/ICdUcnVlJyA6ICdGYWxzZSc7XG4gICAgICB9XG4gICAgICBfc3RhdGljRm9ybU9iamVjdFtrZXldID0gZm9ybURldGFpbFtrZXldXG4gICAgfVxuXG4gICAgaWYoX3N0YXRpY0Zvcm1PYmplY3QuZnN0ID09ICdBJyl7XG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5hZmlkID0gX3N0YXRpY0Zvcm1PYmplY3QudHJhY2tlZGFzc2V0X2lkLnRvU3RyaW5nKCk7XG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5mdCA9ICd0cmFja2luZyc7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5mdCA9ICdhc3NldCc7XG4gICAgfVxuICAgIGlmIChpc05hTihfc3RhdGljRm9ybU9iamVjdC5mcCkpIHtcbiAgICAgIF9zdGF0aWNGb3JtT2JqZWN0LmZwID0gJyc7XG4gIH1cbiAgLy8gRW5zdXJlIF9zdGF0aWNGb3JtT2JqZWN0LmZsYXRfZmllbGRzIGlzIG5vdCB1bmRlZmluZWRcbiAgaWYgKF9zdGF0aWNGb3JtT2JqZWN0LmZsYXRfZmllbGRzKSB7XG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5mbGF0X2ZpZWxkcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjYXB0dXJlZ3BzbG9jYXRpb24td2lkZ2V0Jykge1xuICAgICAgICAgICAgICBfc3RhdGljRm9ybU9iamVjdC5sdmQgPSBpdGVtLmlkZW50aWZpZXI7XG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiZmxhdF9maWVsZHMgaXMgdW5kZWZpbmVkXCIpO1xuICB9XG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuZm4gPSBfc3RhdGljRm9ybU9iamVjdC5uYW1lO1xuICAgIF9zdGF0aWNGb3JtT2JqZWN0LmZvcm1fc2NyaXB0ID0gZm9ybVNjcnB0RGF0YTtcbiAgICBfc3RhdGljRm9ybU9iamVjdC5pc0Zvcm1WaXNpYmxlID0gZm9ybVZpc2liaWxpdHk7XG4gICAgX3N0YXRpY0Zvcm1PYmplY3QubHZzdF9zZXRfbWFudWFsbHkgPSB0cnVlO1xuICAgIGxldCBmZkRhdGEgPSBhd2FpdCB0aGlzLmNvbnZlcnRCb29sZWFucyhmb3JtRGF0YSlcbiAgICBmZkRhdGEgPSB0aGlzLl9mb3JtYnVpbGRlcm1hcHBlci5yZXBsYWNlS2V5c0luSnNvbkFycmF5KGZmRGF0YSk7XG4gICAgY29uc3QgZm9ybURhdGF1cGRhdGVkID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgLy8gX3N0YXRpY0Zvcm1PYmplY3QuZmxhdF9maWVsZHMgPSBmZkRhdGFcbiAgICBfc3RhdGljRm9ybU9iamVjdC5mZiA9IEpTT04uc3RyaW5naWZ5KGZmRGF0YSkgXG4gICAgX3N0YXRpY0Zvcm1PYmplY3Quc3MgPSAnUycgLy9TYXZlIGRyYWZ0IChTIGFuZCBEKVxuICAgIF9zdGF0aWNGb3JtT2JqZWN0LnN0YXR1cyA9IF9zdGF0aWNGb3JtT2JqZWN0LnNzXG4gICAgZGVsZXRlIF9zdGF0aWNGb3JtT2JqZWN0Ll9fanNvbmNvbnZlcnRfX2NsYXNzX2lkZW50aWZpZXJfX1xuICAgIGRlbGV0ZSBfc3RhdGljRm9ybU9iamVjdC5fX2pzb25jb252ZXJ0X19tYXBwaW5nX19cbiAgICBmb3JtRGF0YXVwZGF0ZWQuYXBwZW5kKFwiZm9ybVwiLCBKU09OLnN0cmluZ2lmeShfc3RhdGljRm9ybU9iamVjdCkpO1xuICAgIFxuICAgIGZvcm1EYXRhdXBkYXRlZC5hcHBlbmQoXCJpbWdDaG9pY2VzVG9CZURlbGV0ZWRcIiwgSlNPTi5zdHJpbmdpZnkoW10pKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5faHR0cENsaWVudC5wb3N0KHRoaXMuY29tbW9uTGliQ29uZmlnLmF4b25hdG9yWDFVcmwgKyAndXBkYXRlRm9ybURldGFpbHMvJywgZm9ybURhdGF1cGRhdGVkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIG9iamVjdFxuICBjb252ZXJ0Qm9vbGVhbnMoYXJyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhcnIubWFwKChvYmopID0+IHtcbiAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfTtcbiAgICAgICAgbGV0IHN1YlR5cGU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5ld09iaikge1xuICAgICAgICAgIGlmIChrZXkgPT0gJ3N1YlR5cGUnKSB7XG4gICAgICAgICAgICBzdWJUeXBlID0gbmV3T2JqW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuZXdPYmpba2V5XSAhPSAnU3ViRm9ybScgJiYgbmV3T2JqW2tleV0gIT0gXCJzdWJmb3JtXCIgJiYgbmV3T2JqW2tleV0gIT0gJ2hlYWRlcicgJiYga2V5ID09ICdzdWJUeXBlJykge1xuICAgICAgICAgICAgaWYgKG5ld09ialsnbWFya3VwJ10gIT0gXCJAe3Nybm99XCIgJiYgbmV3T2JqWydtYXJrdXAnXSAhPSBcIkB7aGVhZGVyfVwiICYmIG5ld09ialsnbWFya3VwJ10gIT0gXCJAe2NyZWF0ZWRfb259XCIgJiYgbmV3T2JqWydtYXJrdXAnXSAhPSBcIkB7dXNlcn1cIiAmJiBuZXdPYmpbJ21hcmt1cCddICE9IFwiQHtjcmVhdGVkX2F0fVwiJiYgbmV3T2JqWydtYXJrdXAnXSE9XCJAe2FjdGlvbl9jb3VudH1cIilcbiAgICAgICAgICAgICAgZGVsZXRlIG5ld09ialsnbWFya3VwJ107XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChrZXkgPT09ICdfX2pzb25jb252ZXJ0X19jbGFzc19pZGVudGlmaWVyX18nIHx8IGtleSA9PT0gJ19fanNvbmNvbnZlcnRfX21hcHBpbmdfXycgfHwga2V5ID09ICd3aWRnZXRJY29uJyB8fCBrZXkgPT0gJ3dpZGdldFNlbGVjdCcgfHwga2V5ID09ICduYW1lJykge1xuICAgICAgICAgICAgZGVsZXRlIG5ld09ialtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgbmV3T2JqW2tleV0gPT09ICdib29sZWFuJyAmJiBrZXkgIT0gJ2Nob2ljZXNNbCcgJiYga2V5ICE9ICdjaG9pY2VzTWwnICYmIGtleSAhPSAnbG9hZGluZ0lkJyAmJiBrZXkgIT0gJ21hcmt1cCcgJiYga2V5ICE9ICdpc0NTVkV4cG9ydEVuYWJsZScgICYmIGtleSAhPSAndmFsaWRhdGUnKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IG5ld09ialtrZXldID8gJzEnIDogJzInO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5ld09ialtrZXldID09PSAnb2JqZWN0JyAmJiBrZXkgIT0gJ3ZhbGlkaXR5Q29uZGl0aW9ucycgJiYga2V5ICE9ICd2aXNpYmlsaXR5Q29uZGl0aW9ucycgJiYga2V5ICE9ICdjaG9pY2VzTWwnICYmIGtleSAhPSAncHJvbXB0TWwnICYmIGtleSAhPSAnYWxsb3dlZEZpbGVUeXBlcycgJiYga2V5ICE9ICd2YWxpZGl0eURlcGVuZGVudHMnICYmIGtleSAhPSAnZGVwZW5kZW50cycpIHtcbiAgICAgICAgICAgIG5ld09ialtrZXldID0gdGhpcy5jb252ZXJ0Qm9vbGVhbnMobmV3T2JqW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpY19pZGVudGlmaWVyX2dldF9vcl9jcmVhdGUoZm9ybWlkOiBhbnkscHVibGljX2lkOiBhbnksaXNfcHVibGljOiBhbnkpe1xuICAgIGNvbnN0IFVwZGF0ZWQgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBVcGRhdGVkLmFwcGVuZCgnZm9ybV9pZCcsZm9ybWlkKTtcbiAgICBVcGRhdGVkLmFwcGVuZCgncHVibGljX2lkJyxwdWJsaWNfaWQpO1xuICAgIFVwZGF0ZWQuYXBwZW5kKCdpc19wdWJsaWMnLGlzX3B1YmxpYyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2h0dHBDbGllbnQucG9zdCh0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsICsgJ3B1YmxpY19pZGVudGlmaWVyX2dldF9vcl9jcmVhdGUvJywgVXBkYXRlZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgICB9XG5cbiAgLy8gUmVtb3ZlIHVudXNlIGlkIGZyb20gZW5kIHBsYXlsb2Fkc1xuICByZW1vdmVJZHMob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgb2JqW2ldID0gdGhpcy5yZW1vdmVJZHMob2JqW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdGhpcy5yZW1vdmVJZHMob2JqW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gQWRkIHN1YmZvcm0gaW4gc3ViZnJtIG9iamVjdFxuICBhZGRTdWJmb3JtRGV0YWlscyh3aWRnZXQsIGZvcm1JZCkge1xuICAgIGNvbnN0IGZvcm0gPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ19zdGF0aWNGb3JtT2JqZWN0JyArIGZvcm1JZCkpXG4gICAgY29uc3QgbW9kaWZ5U3ViZm9ybSA9IHsgLi4uZm9ybSB9XG4gICAgaWYgKG1vZGlmeVN1YmZvcm0ud2lkZ2V0cylcbiAgICAgIG1vZGlmeVN1YmZvcm0ud2lkZ2V0cyA9IFtdO1xuICAgIG1vZGlmeVN1YmZvcm0uaWQgPSB3aWRnZXQuaWQ7XG4gICAgbGV0IF9zdWJmb3JtID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKFwiX3N1YmZvcm1cIiArIGZvcm1JZCkpXG4gICAgaWYgKCFfc3ViZm9ybSkgX3N1YmZvcm0gPSBbXVxuICAgIF9zdWJmb3JtLnB1c2gobW9kaWZ5U3ViZm9ybS5pZClcbiAgICB0aGlzLl9jdXN0b21lU3RvcmFnZS53cml0ZShcIl9zdWJmb3JtXCIgKyBmb3JtSWQsIEpTT04uc3RyaW5naWZ5KF9zdWJmb3JtKSk7XG4gICAgdGhpcy5fY3VzdG9tZVN0b3JhZ2Uud3JpdGUoZm9ybUlkICsgbW9kaWZ5U3ViZm9ybS5pZCwgSlNPTi5zdHJpbmdpZnkobW9kaWZ5U3ViZm9ybSkpXG4gIH1cblxuICAvLyBNZXRob2QgdG8gdHJpZ2dlciB0aGUgY29tcG9uZW50IGZ1bmN0aW9uIHdpdGggYSBwYXJhbWV0ZXIgKHJvdXRlIGZvcm0pXG4gIHRyaWdnZXJSb3V0ZUZyb20ocGFyYW1ldGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mdW5jdGlvbkNhbGxTdWJqZWN0Um91dGVGb3JtLm5leHQocGFyYW1ldGVyKTtcbiAgfVxuXG4gIC8vIE9ic2VydmFibGUgdG8gd2hpY2ggdGhlIGNvbXBvbmVudCBjYW4gc3Vic2NyaWJlIChyb3V0ZSBmb3JtKVxuICByb3V0ZUZvcm0oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25DYWxsU3ViamVjdFJvdXRlRm9ybS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG5cbiAgLy8gTWV0aG9kIHRvIHRyaWdnZXIgdGhlIGNvbXBvbmVudCBmdW5jdGlvbiB3aXRoIGEgcGFyYW1ldGVyIChyb3V0ZSBmb3JtKVxuICB0cmlnZ2VyTG9jYWxzdG9yYWdlRm9ybVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9mdW5jdGlvbkNhbGxVcGRhdGVMb2NhbHN0b3JhZ2VGb3JtLm5leHQoKTtcbiAgfVxuXG4gIC8vIE9ic2VydmFibGUgdG8gd2hpY2ggdGhlIGNvbXBvbmVudCBjYW4gc3Vic2NyaWJlIHVzZSBmb3IgdXBkYXRlIGxvY2Fsc3RvcmFnZVxuICB1cGRhdGVMb2NhbEZvcm0oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25DYWxsVXBkYXRlTG9jYWxzdG9yYWdlRm9ybS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byB0cmlnZ2VyIHRoZSBjb21wb25lbnQgZnVuY3Rpb24gc2V0RHJvcFZpZXdcbiAgdHJpZ2dlcnNldERyb3BWaWV3Rm9ybVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9mdW5jdGlvbkNhbGxTZXREcm9wYm94Lm5leHQoKTtcbiAgfVxuXG4gIC8vIE9ic2VydmFibGUgdG8gd2hpY2ggdGhlIGNvbXBvbmVudCBjYW4gc3Vic2NyaWJlIHVzZSBmb3IgdXBkYXRlIGxvY2Fsc3RvcmFnZVxuICBzZXREcm9wVmlldygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbkNhbGxTZXREcm9wYm94LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLy8gR2V0IHN1YmZvcm0gcGFydGljdWxhciBmb3JtXG4gIGdldFN1YmZvcm0oZm9ybUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBfc3ViZm9ybSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZChcIl9zdWJmb3JtXCIgKyBmb3JtSWQpKVxuICAgIC8vIGNvbnN0IHN1YkZvcm0gPSBfc3ViZm9ybS5maWx0ZXIoaXRlbSA9PiBpdGVtLmZvcm1JZCA9PSBmb3JtSWQpXG4gICAgcmV0dXJuIF9zdWJmb3JtO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHN1YmZvcm0gcGFydGljdWxhciBmb3JtXG4gIHJlbW92ZVN1YmZvcm0oZm9ybUlkOiBzdHJpbmcsIHN1YmZvcm1EYXRhKSB7XG4gICAgaWYgKHN1YmZvcm1EYXRhKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YmZvcm1EYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzdWJmb3JtRGF0YVtpXS5pZClcbiAgICAgICAgICB0aGlzLl9jdXN0b21lU3RvcmFnZS5yZW1vdmUoZm9ybUlkICsgc3ViZm9ybURhdGFbaV0uaWQpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlbW92ZShcIl9zdWJmb3JtXCIgKyBmb3JtSWQpXG4gIH1cblxuICBpbnRpYWxpemVBcHBEZXRhaWxzKGZvcm1JZCwgYXBwRGV0YWlscykge1xuICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLndyaXRlKFwiYXBwRGV0YWlsc1wiICsgZm9ybUlkLCBKU09OLnN0cmluZ2lmeShhcHBEZXRhaWxzKSlcbiAgfVxuXG4gIGdldElkZW50aWZlckFycmF5KCk6IGFueVtdIHtcbiAgICBjb25zdCBmb3JtSWRzQXJyYXkgPSB0aGlzLl9mb3Jtc0xpc3RTZXJ2aWNlLmdldEZvcm1JZExpc3QoKTsgLy8gR2V0IHRoZSBhcnJheSBvZiBmb3JtIElEc1xuICAgIGxldCBsaXN0ID0gW107XG4gICAgXG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggZm9ybUlkXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtSWRzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGZvcm1JZHNBcnJheVtpXTtcbiAgICAgICAgLy8gUGFyc2UgdGhlIGZvcm0gZGV0YWlscyBmcm9tIHN0b3JhZ2UgdXNpbmcgdGhlIGZvcm1JZFxuICAgICAgICBpZih0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGl0ZW0pID09PSBudWxsKXtcbiAgICAgICAgICBjb25zdCBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ19zdGF0aWNGb3JtT2JqZWN0JyArIGl0ZW0pKTtcbiAgICAgICAgICBpZiAoZ2V0Rm9ybURldGFpbHNTdG9yYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGdldEZvcm1EZXRhaWxzU3RvcmFnZS5mZi5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBQdXNoIHRoZSBpZGVudGlmaWVyIGludG8gdGhlIGxpc3QgYXJyYXlcbiAgICAgICAgICAgICAgICAgIGxpc3QucHVzaCh2YWwuaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbiBpZiBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgaXMgbnVsbFxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICBjb25zdCBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoaXRlbSkpO1xuICAgICAgICAgIGlmIChnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZ2V0Rm9ybURldGFpbHNTdG9yYWdlLndpZGdldHMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gUHVzaCB0aGUgaWRlbnRpZmllciBpbnRvIHRoZSBsaXN0IGFycmF5XG4gICAgICAgICAgICAgICAgICBsaXN0LnB1c2godmFsLmlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24gaWYgZ2V0Rm9ybURldGFpbHNTdG9yYWdlIGlzIG51bGxcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufVxuXG4gIC8qKlxuICAgKiBHZXQgQWxsIExpc3Qgb2YgbG9jYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGZvcm1JZFxuICAgKlxuICAgKi9cbiAgZ2V0TGlzdExvY2F0aW9uRm9ybShmb3JtSWQpIHtcbiAgICBjb25zdCBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoZm9ybUlkKSlcbiAgICBjb25zdCBsaXN0R3BzID0gW11cbiAgICBnZXRGb3JtRGV0YWlsc1N0b3JhZ2Uud2lkZ2V0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0ubmFtZSA9PSBcIkdQU1wiKSB7XG4gICAgICAgIGxpc3RHcHMucHVzaCh7IHZhbHVlOiBpdGVtLmlkZW50aWZpZXIsIHRleHQ6IGl0ZW0uaWRlbnRpZmllciB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGxpc3RHcHM7XG4gIH1cbiAgZ2V0TGlzdFdoaWNoT2JqZWN0KGZvcm1JZCkge1xuICAgIGNvbnN0IGdldEZvcm1EZXRhaWxzU3RvcmFnZSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZChmb3JtSWQpKVxuICAgIGNvbnN0IGxpc3R3aGljaG9iamVjdCA9IFtdXG4gICAgZ2V0Rm9ybURldGFpbHNTdG9yYWdlLndpZGdldHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLm5hbWUgPT0gXCJDaG9pY2UgTGlzdFwiKSB7XG4gICAgICAgIGxpc3R3aGljaG9iamVjdC5wdXNoKHsgdmFsdWU6IGl0ZW0uaWRlbnRpZmllciwgdGV4dDogaXRlbS5pZGVudGlmaWVyIH0pXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gbGlzdHdoaWNob2JqZWN0O1xuICB9XG5cbiAgZ2V0RXhpc3RpbmdMaXN0V2lkZ2V0T2JqZWN0KGZvcm1JZCl7XG4gICAgY29uc3QgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGZvcm1JZCkpXG4gICAgY29uc3QgZXhoaXN0aW5nbGlzdHdpZGdldG9iamVjdCA9IFtdXG4gICAgZ2V0Rm9ybURldGFpbHNTdG9yYWdlLndpZGdldHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZXhoaXN0aW5nbGlzdHdpZGdldG9iamVjdC5wdXNoKHsgdmFsdWU6IGl0ZW0uaWRlbnRpZmllciwgdGV4dDogaXRlbS5pZGVudGlmaWVyIH0pXG4gICAgfSlcbiAgICByZXR1cm4gZXhoaXN0aW5nbGlzdHdpZGdldG9iamVjdDtcbiAgfVxuXG4gIGdldFdpZGdldHNMaXN0KGZvcm1JZCkge1xuICAgIHZhciBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoZm9ybUlkKSk7XG4gICAgaWYgKGdldEZvcm1EZXRhaWxzU3RvcmFnZSA9PT0gbnVsbCl7XG4gICAgICBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ19zdGF0aWNGb3JtT2JqZWN0JyArIGZvcm1JZCkpO1xuICAgIH1cbiAgICBjb25zdCB3aWRnZXRMaXN0ID0gZ2V0Rm9ybURldGFpbHNTdG9yYWdlLndpZGdldHMubWFwKGl0ZW0gPT4gKHsgdmFsdWU6IGl0ZW0sIHRleHQ6IGl0ZW0gfSkpO1xuICAgIHJldHVybiB3aWRnZXRMaXN0O1xuICB9XG4gIFxuICBnZXRGaWx0ZXJlZFdpZGdldHNMaXN0KGZvcm1JZCkge1xuICAgIHZhciBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoZm9ybUlkKSk7XG4gICAgaWYgKGdldEZvcm1EZXRhaWxzU3RvcmFnZSA9PT0gbnVsbCl7XG4gICAgICBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ19zdGF0aWNGb3JtT2JqZWN0JyArIGZvcm1JZCkpO1xuICAgIH1cbiAgICB2YXIgd2lkZ2V0TGlzdCA9IFtdO1xuICAgIGlmKGdldEZvcm1EZXRhaWxzU3RvcmFnZS53aWRnZXRzICE9PSB1bmRlZmluZWQpe1xuICAgIHdpZGdldExpc3QgPSBnZXRGb3JtRGV0YWlsc1N0b3JhZ2Uud2lkZ2V0cy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzSGlkZGVuID09IGZhbHNlKTtcbiAgICAgICAgfVxuICAgIHJldHVybiB3aWRnZXRMaXN0O1xuICB9XG4gIFxuICBnZXRGaWVsZExpc3RWYWxpZGl0eShmb3JtSWQpIHtcbiAgICBsZXQgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGZvcm1JZCkpO1xuICAgIGlmIChnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPT09IG51bGwpe1xuICAgICAgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKCdfc3RhdGljRm9ybU9iamVjdCcgKyBmb3JtSWQpKTtcbiAgICAgIGlmKGdldEZvcm1EZXRhaWxzU3RvcmFnZS53aWRnZXRzID09PSB1bmRlZmluZWQpe1xuICAgICAgICBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSB0aGlzLl9mb3JtWydfdmFsdWUnXTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRGVmaW5lIHRoZSBkZXNpcmVkIHN1YnR5cGVzXG4gICAgY29uc3QgZGVzaXJlZFR5cGVzID0gWyd0ZXh0Ym94LXdpZGdldCcsICdjaG9pY2VsaXN0LXdpZGdldCcsICdjb3VudGVyLXdpZGdldCcsICdpbWFnZWNhcHR1cmUtd2lkZ2V0JywgJ2NhcHR1cmVncHNsb2NhdGlvbi13aWRnZXQnLCAnY2hpbGRyZWNvcmRzLXdpZGdldCcsICd5ZXNfbm8td2lkZ2V0JywgJ3FyY29kZXNzY2FubmVyLXdpZGdldCcsICdiYXJjb2Rlc3NjYW5uZXItd2lkZ2V0JywgJ2NvbXB1dGVkdmFsdWUtd2lkZ2V0Jywnc3ViZm9ybS13aWRnZXQnXTsgLy8gQWRkIG1vcmUgc3VidHlwZXMgYXMgbmVlZGVkXG4gICAgXG4gICAgLy8gRmlsdGVyIHdpZGdldHMgYmFzZWQgb24gdGhlIGRlc2lyZWQgc3VidHlwZXNcbiAgICBjb25zdCBleHRyYWN0V2lkZ2V0cyA9IGl0ZW0gPT5cbiAgICAgIGl0ZW0udHlwZSA9PT0gJ3N1YmZvcm0td2lkZ2V0JyAmJiBpdGVtLm1hcmt1cFxuICAgICAgICA/IGl0ZW0ubWFya3VwLmZsYXRNYXAoZXh0cmFjdFdpZGdldHMpXG4gICAgICAgIDogW3sgdmFsdWU6IGl0ZW0sIHRleHQ6IGl0ZW0gfV07XG4gICAgXG4gICAgY29uc3Qgd2lkZ2V0TGlzdCA9IGdldEZvcm1EZXRhaWxzU3RvcmFnZS53aWRnZXRzLmZsYXRNYXAoaXRlbSA9PlxuICAgICAgZGVzaXJlZFR5cGVzLmluY2x1ZGVzKGl0ZW0udHlwZSkgJiYgIWl0ZW0uaXNIaWRkZW4gPyBleHRyYWN0V2lkZ2V0cyhpdGVtKSA6IFtdXG4gICAgKTtcbiAgICByZXR1cm4gd2lkZ2V0TGlzdDtcbiAgfVxuICBcblxuICBnZXRGaWVsZE9iamVjdChmaWVsZElkOiBzdHJpbmcpOiBhbnkge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmFsbEZvcm1GaWVsZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmICh0aGlzLmFsbEZvcm1GaWVsZHNbaV0uaWRlbnRpZmllciA9PT0gZmllbGRJZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxGb3JtRmllbGRzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByZWNvbXBpbGVDb25kaXRpb25zKG5vZGVzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBzcGFjZSA9IFwiIFwiO1xuICAgIGxldCBqYXZhc2NyaXB0ID0gXCIoXCI7XG4gICAgbGV0IGZpcnN0X25vZGUgPSB0cnVlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IFwiY29uZGl0aW9uX2dyb3VwXCIgfHwgbm9kZS50eXBlID09PSAyKSB7XG4gICAgICAgIGlmICghZmlyc3Rfbm9kZSkge1xuICAgICAgICAgIGphdmFzY3JpcHQgKz0gc3BhY2UgKyB0aGlzLmNvbXBpbGVPcGVyYXRvcihub2RlLm9wZXJhdG9yKSArIHNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGphdmFzY3JpcHQgKz0gdGhpcy5wcmVjb21waWxlQ29uZGl0aW9ucyhub2RlLm5vZGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZmlyc3Rfbm9kZSkge1xuICAgICAgICAgIGphdmFzY3JpcHQgKz0gc3BhY2UgKyB0aGlzLmNvbXBpbGVPcGVyYXRvcihub2RlLm9wZXJhdG9yKSArIHNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGphdmFzY3JpcHQgKz0gdGhpcy5jb21waWxlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgICAgZmlyc3Rfbm9kZSA9IGZhbHNlO1xuICAgIH1cbiAgICBqYXZhc2NyaXB0ICs9IFwiKVwiO1xuICAgIHJldHVybiBqYXZhc2NyaXB0O1xuICB9XG5cbiAgY29tcGlsZU9wZXJhdG9yKG9wOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAob3ApIHtcbiAgICAgIGNhc2UgXCJBTkRcIjpcbiAgICAgICAgcmV0dXJuIFwiJiZcIjtcbiAgICAgIGNhc2UgXCJPUlwiOlxuICAgICAgICByZXR1cm4gXCJ8fFwiO1xuICAgICAgY2FzZSBcImlzIGVxdWFsIHRvXCI6XG4gICAgICBjYXNlIFwiZXF1YWxzXCI6XG4gICAgICAgIHJldHVybiBcIj09XCI7XG4gICAgICBjYXNlIFwiZG9lcyBub3QgZXF1YWxcIjpcbiAgICAgIGNhc2UgXCJpcyBub3QgZXF1YWwgdG9cIjpcbiAgICAgICAgcmV0dXJuIFwiIT09XCI7XG4gICAgICBjYXNlIFwiaXMgbGVzcyB0aGFuXCI6XG4gICAgICBjYXNlIFwiY29tZXMgYmVmb3JlXCI6XG4gICAgICAgIHJldHVybiBcIjxcIjtcbiAgICAgIGNhc2UgXCJpcyBsZXNzIHRoYW4gb3IgZXF1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiPD1cIjtcbiAgICAgIGNhc2UgXCJpcyBncmVhdGVyIHRoYW5cIjpcbiAgICAgIGNhc2UgXCJjb21lcyBhZnRlclwiOlxuICAgICAgICByZXR1cm4gXCI+XCI7XG4gICAgICBjYXNlIFwiaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsXCI6XG4gICAgICAgIHJldHVybiBcIj49XCI7XG4gICAgICBjYXNlIFwiY291bnQgZXF1YWwgdG9cIjpcbiAgICAgICAgcmV0dXJuIFwiLmxlbmd0aCA9PVwiO1xuICAgICAgY2FzZSBcImNvdW50IGxlc3MgdGhhblwiOlxuICAgICAgICByZXR1cm4gXCIubGVuZ3RoIDxcIjtcbiAgICAgIGNhc2UgXCJjb3VudCBncmVhdGVyIHRoYW5cIjpcbiAgICAgICAgcmV0dXJuIFwiLmxlbmd0aCA+XCI7XG4gICAgICBjYXNlIFwiY29udGFpbnNcIjpcbiAgICAgICAgcmV0dXJuIFwiLmluY2x1ZGVzXCI7IC8vIEFkZGluZyBjb250YWlucyBjYXNlXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gb3A7XG4gICAgfVxuICB9XG5cbiAgY29tcGlsZUV4cHJlc3Npb24oZXhwOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBzcGFjZSA9IFwiIFwiO1xuICAgIGxldCBqYXZhc2NyaXB0O1xuICAgIGNvbnN0IGZpZWxkT2JqID0gdGhpcy5nZXRGaWVsZE9iamVjdChleHAuZXhwcmVzc2lvbl9pZGVudGlmaWVyKTtcblxuICAgIGlmIChleHAuZXhwcmVzc2lvbl9vcGVyYXRvciA9PT0gXCJzdGFydHMgd2l0aFwiKSB7XG4gICAgICBqYXZhc2NyaXB0ID0gYCgke3RoaXMuY29tcGlsZUlkZW50aWZpZXIoZXhwLmV4cHJlc3Npb25faWRlbnRpZmllciwgZmllbGRPYmopfSlgO1xuICAgICAgamF2YXNjcmlwdCArPSBgLmluZGV4T2YoYDtcbiAgICAgIGlmIChleHAuZXhwcmVzc2lvbl92YWx1ZSA9PT0gXCJmaXhlZCB2YWx1ZVwiKSB7XG4gICAgICAgIGphdmFzY3JpcHQgKz0gdGhpcy5jb21waWxlRXhwckZpeGVkVmFsKGV4cC5leHByZXNzaW9uX3ZhbHVlX2ZpeGVkLCBmaWVsZE9iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqYXZhc2NyaXB0ICs9IHRoaXMuY29tcGlsZUlkZW50aWZpZXIoZXhwLmV4cHJlc3Npb25fdmFsdWUsIGZpZWxkT2JqKTtcbiAgICAgIH1cbiAgICAgIGphdmFzY3JpcHQgKz0gYCkgPT0gMGA7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV4cC5leHByZXNzaW9uX29wZXJhdG9yID09PSBcImNvbnRhaW5zXCIgfHwgZXhwLmV4cHJlc3Npb25fb3BlcmF0b3IgPT09IFwiZG9lcyBub3QgY29udGFpbnNcIikgeyAvLyBIYW5kbGluZyBjb250YWlucyBhbmQgZG9lcyBub3QgY29udGFpblxuICAgICAgaWYgKGV4cC5leHByZXNzaW9uX29wZXJhdG9yID09PSBcImRvZXMgbm90IGNvbnRhaW5zXCIpIHtcbiAgICAgICAgICBqYXZhc2NyaXB0ID0gYCEoJHt0aGlzLmNvbXBpbGVJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uX2lkZW50aWZpZXIsIGZpZWxkT2JqKX0uaW5jbHVkZXMoYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgamF2YXNjcmlwdCA9IGAoJHt0aGlzLmNvbXBpbGVJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uX2lkZW50aWZpZXIsIGZpZWxkT2JqKX0uaW5jbHVkZXMoYDtcbiAgICAgIH1cbiAgICAgIGlmIChleHAuZXhwcmVzc2lvbl92YWx1ZSA9PT0gXCJmaXhlZCB2YWx1ZVwiKSB7XG4gICAgICAgICAgamF2YXNjcmlwdCArPSB0aGlzLmNvbXBpbGVFeHByRml4ZWRWYWwoZXhwLmV4cHJlc3Npb25fdmFsdWVfZml4ZWQsIGZpZWxkT2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgamF2YXNjcmlwdCArPSB0aGlzLmNvbXBpbGVJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uX3ZhbHVlLCBmaWVsZE9iaik7XG4gICAgICB9XG4gICAgICBqYXZhc2NyaXB0ICs9IGApKWA7XG4gICAgfSBlbHNlIGlmIChmaWVsZE9iaiAmJiBmaWVsZE9iai5tYWluX3R5cGUgPT09IFwiY2hvaWNlXCIpIHtcbiAgICAgIGphdmFzY3JpcHQgPSBgKCR7dGhpcy5jb21waWxlSWRlbnRpZmllcihleHAuZXhwcmVzc2lvbl9pZGVudGlmaWVyLCBmaWVsZE9iail9KWA7XG4gICAgICBpZiAoZXhwLmV4cHJlc3Npb25fdmFsdWUgPT09IFwiZW1wdHkgdmFsdWVcIikge1xuICAgICAgICBpZiAoZXhwLmV4cHJlc3Npb25fb3BlcmF0b3IgPT09IFwiY29udGFpbnNcIikge1xuICAgICAgICAgIGphdmFzY3JpcHQgKz0gYC5sZW5ndGggPT0gMGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgamF2YXNjcmlwdCArPSBgLmxlbmd0aCA+IDBgO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqYXZhc2NyaXB0ICs9IGAuaW5kZXhPZihgO1xuICAgICAgICBpZiAoZXhwLmV4cHJlc3Npb25fdmFsdWUgPT09IFwiZml4ZWQgdmFsdWVcIikge1xuICAgICAgICAgIGphdmFzY3JpcHQgKz0gdGhpcy5jb21waWxlRXhwckZpeGVkVmFsKGV4cC5leHByZXNzaW9uX3ZhbHVlX2ZpeGVkLCBmaWVsZE9iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgamF2YXNjcmlwdCArPSB0aGlzLmNvbXBpbGVJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uX3ZhbHVlLCBmaWVsZE9iaik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cC5leHByZXNzaW9uX29wZXJhdG9yID09PSBcImNvbnRhaW5zXCIpIHtcbiAgICAgICAgICBqYXZhc2NyaXB0ICs9IGApICE9IC0xYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqYXZhc2NyaXB0ICs9IGApID09IC0xYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBqYXZhc2NyaXB0ID0gdGhpcy5jb21waWxlSWRlbnRpZmllcihleHAuZXhwcmVzc2lvbl9pZGVudGlmaWVyLCBmaWVsZE9iaik7XG4gICAgICBpZiAoZXhwLmV4cHJlc3Npb25fb3BlcmF0b3IuaW5jbHVkZXMoXCJjb3VudFwiKSkge1xuICAgICAgICBqYXZhc2NyaXB0ICs9IHRoaXMuY29tcGlsZU9wZXJhdG9yKGV4cC5leHByZXNzaW9uX29wZXJhdG9yKSArIHNwYWNlO1xuICAgICAgfSBlbHNlIGlmIChleHAuZXhwcmVzc2lvbl92YWx1ZSA9PT0gXCJlbXB0eSB2YWx1ZVwiICYmIGZpZWxkT2JqICYmIGZpZWxkT2JqLm1haW5UeXBlID09PSBcImRhdGVcIikge1xuICAgICAgICBqYXZhc2NyaXB0ID0gZXhwLmV4cHJlc3Npb25faWRlbnRpZmllciArIHNwYWNlICsgdGhpcy5jb21waWxlT3BlcmF0b3IoZXhwLmV4cHJlc3Npb25fb3BlcmF0b3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgamF2YXNjcmlwdCArPSBzcGFjZSArIHRoaXMuY29tcGlsZU9wZXJhdG9yKGV4cC5leHByZXNzaW9uX29wZXJhdG9yKSArIHNwYWNlO1xuICAgICAgfVxuICAgICAgaWYgKGV4cC5leHByZXNzaW9uX3ZhbHVlID09PSBcImZpeGVkIHZhbHVlXCIpIHtcbiAgICAgICAgamF2YXNjcmlwdCArPSB0aGlzLmNvbXBpbGVFeHByRml4ZWRWYWwoZXhwLmV4cHJlc3Npb25fdmFsdWVfZml4ZWQsIGZpZWxkT2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwLmV4cHJlc3Npb25fdmFsdWUgPT09IFwiZW1wdHkgdmFsdWVcIikge1xuICAgICAgICBqYXZhc2NyaXB0ICs9IGAnJ2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqYXZhc2NyaXB0ICs9IHNwYWNlICsgdGhpcy5jb21waWxlSWRlbnRpZmllcihleHAuZXhwcmVzc2lvbl92YWx1ZSwgZmllbGRPYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqYXZhc2NyaXB0O1xuICB9XG5cbiAgY29tcGlsZUlkZW50aWZpZXIoaWRlbnRpZmllcjogc3RyaW5nLCBmaWVsZE9iajogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoZmllbGRPYmogJiYgZmllbGRPYmoubWFpblR5cGUgPT09IFwiZGF0ZVwiKSB7XG4gICAgICBpZiAoaWRlbnRpZmllciA9PT0gXCJlbXB0eV92YWx1ZVwiIHx8IGlkZW50aWZpZXIgPT09IFwiZW1wdHkgdmFsdWVcIikge1xuICAgICAgICByZXR1cm4gXCInJ1wiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBuZXcgRGF0ZSgke2lkZW50aWZpZXJ9KS5nZXRUaW1lKClgO1xuICAgIH1cbiAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgfVxuXG4gIGNvbXBpbGVFeHByRml4ZWRWYWwodmFsOiBhbnksIG9iajogYW55KTogc3RyaW5nIHtcbiAgICBpZiAob2JqICYmIG9iai5tYWluVHlwZSA9PT0gXCJ0ZXh0XCIgJiYgb2JqLmlucHV0VHlwZSA9PT0gXCJudW1lcmljXCIpIHtcbiAgICAgIHJldHVybiBgICR7dmFsfWA7XG4gICAgfVxuICAgIGlmIChvYmogJiYgb2JqLm1haW5UeXBlID09PSBcImRhdGVcIikge1xuICAgICAgcmV0dXJuIGBuZXcgRGF0ZSgnJHt2YWx9JykuZ2V0VGltZSgpYDtcbiAgICB9IGVsc2UgaWYgKG9iaiAmJiBvYmoubWFpblR5cGUgPT09IFwieWVzX25vXCIpIHtcbiAgICAgIGlmICh2YWwgPT09IFwiWWVzXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiJzEnXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbCA9PT0gXCJOb1wiKSB7XG4gICAgICAgIHJldHVybiBcIicwJ1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAgJyR7dmFsfSdgO1xuICAgIH1cbiAgfVxuICBcbiAgXG5cbiAgLy8gVXBkYXRlIG9ubHkgZm9ybSBzY3JpcHRcbiAgYXN5bmMgdXBkYXRlRm9ybVNjcmlwdERldGFpbHMoZm9ybVNjcmlwdERhdGE6IGFueSwgZm9ybUlkOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGZvcm1TY3JpcHREZXRhaWxzID0ge1xuICAgICAgZm9ybV9pZDogZm9ybUlkLFxuICAgICAgZm9ybV9zY3JpcHQ6IGZvcm1TY3JpcHREYXRhXG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9odHRwQ2xpZW50LnBvc3QodGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCArICdzYXZlRm9ybVNjcmlwdC8nLCBmb3JtU2NyaXB0RGV0YWlscykuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdldCBsYW5ndWFnZXMyMlxuICBnZXRGb3JtTGFuZ3VhZ2VzKGZvcm1JZCkge1xuICAgIGNvbnN0IGZvcm0gPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ19zdGF0aWNGb3JtT2JqZWN0JyArIGZvcm1JZCkpXG4gICAgaWYgKGZvcm0gJiYgZm9ybS5sYW5ndWFnZXMyMikge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgXCJjb2RlXCIgdmFsdWVzIGZyb20gdGhlIFwibGFuZ3VhZ2VzMjJcIiBhcnJheVxuICAgICAgY29uc3QgY29kZXMgPSBmb3JtLmxhbmd1YWdlczIyXG4gICAgICAgIC5maWx0ZXIoQXJyYXkuaXNBcnJheSkgLy8gRmlsdGVyIG91dCBub24tYXJyYXkgZWxlbWVudHNcbiAgICAgICAgLm1hcChhcnIgPT4gYXJyLm1hcChpdGVtID0+IGl0ZW0uY29kZSkpIC8vIE1hcCB0byBcImNvZGVcIiB2YWx1ZXNcblxuICAgICAgLy8gRmxhdHRlbiB0aGUgcmVzdWx0IHRvIGdldCBhIHNpbmdsZSBhcnJheSBvZiBjb2Rlc1xuICAgICAgY29uc3QgZmxhdHRlbmVkQ29kZXMgPSBbXS5jb25jYXQoLi4uY29kZXMpO1xuICAgICAgcmV0dXJuIGZsYXR0ZW5lZENvZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLy8gVXBsb2FkIGZvcm0gaWNvblxuICB1cGxvYWRGb3JtSWNvbihmb3JtSWNvbjogYW55LCBmb3JtSWQ6IGFueSkge1xuICAgIGNvbnN0IHVwZGF0ZURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBkZWZhdWxJY29uID0gZm9ybUljb24gPyAnMCcgOiAnMSc7XG4gICAgdXBkYXRlRGF0YS5hcHBlbmQoJ2RlZmF1bHRfaWNvbicsIGRlZmF1bEljb24pO1xuICAgIHVwZGF0ZURhdGEuYXBwZW5kKCdmb3JtX2lkJywgZm9ybUlkKTtcbiAgICBpZiAoZm9ybUljb24pIHtcbiAgICAgIHVwZGF0ZURhdGEuYXBwZW5kKCdmb3JtaWNvbicsIGZvcm1JY29uKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2h0dHBDbGllbnQucG9zdCh0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsICsgJ3NhdmVGb3JtSWNvbi8nLCB1cGRhdGVEYXRhKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5mb3JtSWNvbi5maWxlcGF0aCk7XG4gICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xuXG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZVdpZGdldERlbGl0aW9uKGRlbGV0aW5nX2lkLCBmb3JtX2lkLCB3aWRnZXQsIGlzRm9ybUZyZXNoKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNraW5nIHdpZGdldCB2YWxpZGl0eURlcGVuZGVudHMgYW5kIGRlcGVuZGVudHMuLi5cIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiV2lkZ2V0OlwiLCB3aWRnZXQpO1xuXG4gICAgICAgIGNvbnN0IGhhc1ZhbGlkaXR5RGVwZW5kZW50cyA9IHdpZGdldC52YWxpZGl0eURlcGVuZGVudHMgJiYgd2lkZ2V0LnZhbGlkaXR5RGVwZW5kZW50cy5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBoYXNEZXBlbmRlbnRzID0gd2lkZ2V0LmRlcGVuZGVudHMgJiYgd2lkZ2V0LmRlcGVuZGVudHMubGVuZ3RoID4gMDtcblxuICAgICAgICBjb25zdCB2YWxpZGl0eURlcGVuZGVudHNDb25kaXRpb24gPSAhd2lkZ2V0LnZhbGlkaXR5RGVwZW5kZW50cyB8fCB3aWRnZXQudmFsaWRpdHlEZXBlbmRlbnRzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgY29uc3QgZGVwZW5kZW50c0NvbmRpdGlvbiA9ICF3aWRnZXQuZGVwZW5kZW50cyB8fCB3aWRnZXQuZGVwZW5kZW50cy5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJWYWxpZGl0eURlcGVuZGVudHNDb25kaXRpb246XCIsIHZhbGlkaXR5RGVwZW5kZW50c0NvbmRpdGlvbik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGVwZW5kZW50c0NvbmRpdGlvbjpcIiwgZGVwZW5kZW50c0NvbmRpdGlvbik7XG5cbiAgICAgICAgaWYgKCEodmFsaWRpdHlEZXBlbmRlbnRzQ29uZGl0aW9uICYmIGRlcGVuZGVudHNDb25kaXRpb24pKSB7XG4gICAgICAgICAgICAvLyBJZiBlaXRoZXIgY29uZGl0aW9uIGlzIHRydWUsIHByb2NlZWQgdG8gdGhlIGVsc2UgYmxvY2tcbiAgICAgICAgICAgIGlmIChoYXNWYWxpZGl0eURlcGVuZGVudHMpIHtcbiAgICAgICAgICAgICAgICBhbGVydChcIklkZW50aWZpZXIgdXNlZCBpbiBWYWxpZGl0eSBDb25kaXRpb25zIG9mIEZpZWxkIFwiICsgd2lkZ2V0LnZhbGlkaXR5RGVwZW5kZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzRGVwZW5kZW50cykge1xuICAgICAgICAgICAgICAgIGFsZXJ0KFwiSWRlbnRpZmllciB1c2VkIGluIFZpc2liaWxpdHkgQ29uZGl0aW9ucyBvZiBGaWVsZCBcIiArIHdpZGdldC5kZXBlbmRlbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKCFpc0Zvcm1GcmVzaCl7XG4gICAgICAgICAgICAgIC8vIElmIGJvdGggY29uZGl0aW9ucyBhcmUgZmFsc2UsIHByb2NlZWQgd2l0aCB0aGUgSFRUUCByZXF1ZXN0XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29uZGl0aW9ucyBtZXQsIHByb2NlZWRpbmcgd2l0aCBIVFRQIHJlcXVlc3QuLi5cIik7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9odHRwQ2xpZW50LnBvc3QodGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCArICd2YWxpZGF0ZVdpZGdldERlbGl0aW9uLycsIHsgZGVsZXRpbmdfaWQsIGZvcm1faWQgfSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSFRUUCByZXF1ZXN0IHN1Y2Nlc3NmdWw6XCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkhUVFAgcmVxdWVzdCBmYWlsZWQ6XCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICByZXR1cm4ge2lzX2RlbGV0YWJsZSA6IHRydWV9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gdmFsaWRhdGVXaWRnZXREZWxpdGlvbjpcIiwgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG5cbiAgcHJlcHJvY2Vzc1ZhbGlkaXR5Q29uZGl0aW9ucyhvdXRwdXQ6IGFueVtdKTogYW55W10ge1xuICAgIGxldCBfcmVzdWx0czogYW55W10gPSBbXTtcbiAgICB2YXIgd2lkZ2V0LCBpLCBsZW47XG4gICAgZm9yIChpID0gMCwgbGVuID0gb3V0cHV0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB3aWRnZXQgPSBvdXRwdXRbaV07XG4gICAgICAvLyBSZW1vdmUgZXhpc3RpbmcgdmFsaWRpdHkgZGVwZW5kZW50c1xuICAgICAgdGhpcy5yZW1vdmVEZXBlbmRlbnRzKG91dHB1dCwgd2lkZ2V0LmlkZW50aWZpZXIsICd2YWxpZGl0eURlcGVuZGVudHMnKTtcbiAgICAgIGlmICh3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zKSB7XG4gICAgICAgIC8vIEpTT04gcGFyc2luZyBmb3Igc3RyaW5nIHZhbGlkaXR5IGNvbmRpdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zID09PSAnc3RyaW5nJyAmJiB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zLnRyaW0oKSAhPT0gJ1wiXCInKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGl0eUNvbmRpdGlvbnMgPSBKU09OLnBhcnNlKHdpZGdldC52YWxpZGl0eUNvbmRpdGlvbnMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIEpTT04gZm9ybWF0IGZvciB2YWxpZGl0eUNvbmRpdGlvbnM6XCIsIHdpZGdldC52YWxpZGl0eUNvbmRpdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZih3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zID09ICdcIlwiJylcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucztcbiAgICAgICAgICAgIGRlbGV0ZSB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25KcztcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpZGdldC52YWxpZGl0eUNvbmRpdGlvbnMubm9kZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zLm5vZGVzWzBdLm5vZGVzICYmXG4gICAgICAgICAgICB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zLm5vZGVzWzBdLm5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zO1xuICAgICAgICAgIGRlbGV0ZSB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25KcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25KcyA9IHRoaXMucHJlY29tcGlsZUNvbmRpdGlvbnMod2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucy5ub2Rlcyk7XG4gICAgICAgICAgdGhpcy50cmF2ZXJzZUFuZFZpc2l0KG91dHB1dCwgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucy5ub2Rlcywgd2lkZ2V0LmlkZW50aWZpZXIsIFwidmFsaWRpdHlEZXBlbmRlbnRzXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25KcyA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh3aWRnZXQubWFya3VwICYmIHdpZGdldC50eXBlID09ICdzdWJmb3JtLXdpZGdldCcpIHtcbiAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLiBwcmVwcm9jZXNzVmFsaWRpdHlDb25kaXRpb25zKHdpZGdldC5tYXJrdXApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9yZXN1bHRzO1xuICB9XG5cbiAgcHJlcHJvY2Vzc1Zpc2lkaWxpdHlDb25kaXRpb25zKG91dHB1dDogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IF9yZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIHZhciB3aWRnZXQsIGksIGxlbjtcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBvdXRwdXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHdpZGdldCA9IG91dHB1dFtpXTtcbiAgICAgIC8vIFJlbW92ZSBleGlzdGluZyBkZXBlbmRlbnRzXG4gICAgICB0aGlzLnJlbW92ZURlcGVuZGVudHMob3V0cHV0LCB3aWRnZXQuaWRlbnRpZmllciwgJ2RlcGVuZGVudHMnKTtcbiAgICAgIGlmICh3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMpIHtcbiAgICAgICAgLy8gSlNPTiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsaWRpdHkgY29uZGl0aW9uc1xuICAgICAgICBpZiAodHlwZW9mIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucyA9PT0gJ3N0cmluZycgJiYgd2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25zLnRyaW0oKSAhPT0gJ1wiXCInKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucyA9IEpTT04ucGFyc2Uod2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25zKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBKU09OIGZvcm1hdCBmb3IgdmlzaWJpbGl0eUNvbmRpdGlvbnM6XCIsIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucyA9PSAnXCJcIicpXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucztcbiAgICAgICAgICAgIGRlbGV0ZSB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbkpzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMubm9kZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMubm9kZXNbMF0ubm9kZXMgJiZcbiAgICAgICAgICAgIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucy5ub2Rlc1swXS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkZWxldGUgd2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25zO1xuICAgICAgICAgIGRlbGV0ZSB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbkpzOyAgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25KcyA9IHRoaXMucHJlY29tcGlsZUNvbmRpdGlvbnMod2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25zLm5vZGVzKTtcbiAgICAgICAgICB0aGlzLnRyYXZlcnNlQW5kVmlzaXQob3V0cHV0LCB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMubm9kZXMsIHdpZGdldC5pZGVudGlmaWVyLCBcImRlcGVuZGVudHNcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9uSnMgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAod2lkZ2V0Lm1hcmt1cCAmJiB3aWRnZXQudHlwZSA9PSAnc3ViZm9ybS13aWRnZXQnKSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5wcmVwcm9jZXNzVmlzaWRpbGl0eUNvbmRpdGlvbnMod2lkZ2V0Lm1hcmt1cCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3Jlc3VsdHM7XG4gIH1cblxuICB0cmF2ZXJzZUFuZFZpc2l0KGZpZWxkQXJyYXk6IGFueVtdLCBub2RlczogYW55W10sIGlkOiBzdHJpbmcsIGRlcGVuZGVudHNUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAobm9kZS50eXBlID09PSBcImNvbmRpdGlvbl9ncm91cFwiIHx8IG5vZGUudHlwZSA9PT0gMikge1xuICAgICAgICB0aGlzLnRyYXZlcnNlQW5kVmlzaXQoZmllbGRBcnJheSwgbm9kZS5ub2RlcywgaWQsIGRlcGVuZGVudHNUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB3aWRnZXQgPSB0aGlzLmZpbmRCeUlkKGZpZWxkQXJyYXksIG5vZGUuZXhwcmVzc2lvbi5leHByZXNzaW9uX2lkZW50aWZpZXIpO1xuICAgICAgICBpZiAod2lkZ2V0KSB7XG4gICAgICAgICAgaWYgKCF3aWRnZXRbZGVwZW5kZW50c1R5cGVdKSB7XG4gICAgICAgICAgICB3aWRnZXRbZGVwZW5kZW50c1R5cGVdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghd2lkZ2V0W2RlcGVuZGVudHNUeXBlXS5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgIHdpZGdldFtkZXBlbmRlbnRzVHlwZV0ucHVzaChpZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24uZXhwcmVzc2lvbl92YWx1ZSAhPT0gXCJmaXhlZCB2YWx1ZVwiKSB7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbl93aWRnZXQgPSB0aGlzLmZpbmRCeUlkKGZpZWxkQXJyYXksIG5vZGUuZXhwcmVzc2lvbi5leHByZXNzaW9uX3ZhbHVlKTtcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uX3dpZGdldCkge1xuICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb25fd2lkZ2V0W2RlcGVuZGVudHNUeXBlXSkge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25fd2lkZ2V0W2RlcGVuZGVudHNUeXBlXSA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbl93aWRnZXRbZGVwZW5kZW50c1R5cGVdLmluY2x1ZGVzKGlkKSkge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25fd2lkZ2V0W2RlcGVuZGVudHNUeXBlXS5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpbmRCeUlkKGZpZWxkQXJyYXk6IGFueVtdLCBpZDogc3RyaW5nKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGxldCB3aWRnZXQgb2YgZmllbGRBcnJheSkge1xuICAgICAgaWYgKHdpZGdldC5pZGVudGlmaWVyID09PSBpZCkge1xuICAgICAgICByZXR1cm4gd2lkZ2V0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBSZXR1cm4gdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICB9XG5cbiAgcmVtb3ZlRGVwZW5kZW50cyh3aWRnZXRzOiBhbnlbXSwgd2lkZ2V0SWQ6IHN0cmluZywgZGVwZW5kZW50VHlwZTogJ2RlcGVuZGVudHMnIHwgJ3ZhbGlkaXR5RGVwZW5kZW50cycgfCAnZGVwZW5kYW50Jyk6IHZvaWQge1xuICAgIHdpZGdldHMuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgaWYgKHdpZGdldFtkZXBlbmRlbnRUeXBlXSAmJiB3aWRnZXRbZGVwZW5kZW50VHlwZV0uaW5jbHVkZXMod2lkZ2V0SWQpKSB7XG4gICAgICAgIHdpZGdldFtkZXBlbmRlbnRUeXBlXSA9IHdpZGdldFtkZXBlbmRlbnRUeXBlXS5maWx0ZXIoaWQgPT4gaWQgIT09IHdpZGdldElkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIFxufVxuIl19
1082
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1idWlsZGVyLW1hc3Rlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9zY3VscHRvci9mb3JtLWJ1aWxkZXItbWFzdGVyL2Zvcm0tYnVpbGRlci1tYXN0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFrQixNQUFNLE1BQU0sQ0FBQztBQUU1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSwrRkFBK0Y7QUFDL0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7OztBQUt0RixNQUFNLE9BQU8sd0JBQXdCO0lBYW5DLFlBQW9CLFdBQXVCLEVBQ3ZCLGlCQUFtQyxFQUNuQyxlQUE4QixFQUM5QixlQUE4QyxFQUM5QyxrQkFBa0Q7UUFKbEQsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxvQkFBZSxHQUFmLGVBQWUsQ0FBZTtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBK0I7UUFDOUMsdUJBQWtCLEdBQWxCLGtC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LEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO2FBQzdFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztnR0E5bENVLHdCQUF3Qjs4RUFBeEIsd0JBQXdCLFdBQXhCLHdCQUF3QixtQkFIdkIsTUFBTTt1RkFHUCx3QkFBd0I7Y0FKcEMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF4Rm9ybSB9IGZyb20gJy4uLy4uL2Zvcm1zL2F4LWZvcm0nO1xuaW1wb3J0IHsgQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24tbGliLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBKc29uQ29udmVydCB9IGZyb20gJ2pzb24ydHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3Jtc0xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LnNlcnZpY2UnO1xuLy8gaW1wb3J0IHsgRm9ybXNMaXN0U2VydmljZSB9IGZyb20gJ2FwcC9tb2R1bGVzL2J1aWxkL3NjdWxwdG9yL2Zvcm1zLWxpc3QvZm9ybXMtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YkZvcm0gfSBmcm9tICcuLi8uLi9mb3Jtcy9wYWdlL3dpZGdldHMvc3ViLWZvcm0nO1xuaW1wb3J0IHsgV2lkZ2V0IH0gZnJvbSAnLi4vLi4vZm9ybXMvcGFnZS93aWRnZXRzL3dpZGdldCc7XG5pbXBvcnQgeyBDdXN0b21TdG9yYWdlIH0gZnJvbSAnLi9jdXRvbS1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXJNYXN0ZXJNYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLWJ1aWxkZXItbWFzdGVyLW1hcHBlci5zZXJ2aWNlJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5leHBvcnQgY2xhc3MgRm9ybUJ1aWxkZXJNYXN0ZXJTZXJ2aWNlIHtcblxuICAvLyBQcml2YXRlXG4gIHByaXZhdGUgX2Zvcm06IEJlaGF2aW9yU3ViamVjdDxBeEZvcm0gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIHByaXZhdGUgX2Z1bmN0aW9uQ2FsbFN1YmplY3RSb3V0ZUZvcm0gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2Z1bmN0aW9uQ2FsbFVwZGF0ZUxvY2Fsc3RvcmFnZUZvcm0gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2Z1bmN0aW9uQ2FsbFNldERyb3Bib3ggPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2Zvcm1PYmplY3RDb3VudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgYWxsRm9ybUZpZWxkczogYW55ID0gW107XG4gIGFycmF5X3N1YkZvcm06IGFueSA9IFtdO1xuICAvLyBJbml0aWFsaXplIG5ld0lkZW50aWZpZXJzIGFzIEJlaGF2aW9yU3ViamVjdFxuICBwcml2YXRlIG5ld0lkZW50aWZpZXJzU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KHRoaXMuaW5pdE5ld0lkZW50aWZpZXJzKCkpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsIFxuICAgICAgICAgICAgICBwcml2YXRlIF9mb3Jtc0xpc3RTZXJ2aWNlOiBGb3Jtc0xpc3RTZXJ2aWNlLCBcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY3VzdG9tZVN0b3JhZ2U6IEN1c3RvbVN0b3JhZ2UsIFxuICAgICAgICAgICAgICBwcml2YXRlIGNvbW1vbkxpYkNvbmZpZzogQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Zvcm1idWlsZGVybWFwcGVyOiBGb3JtQnVpbGRlck1hc3Rlck1hcHBlclNlcnZpY2UpIHtcbiAgICB0aGlzLl9jdXN0b21lU3RvcmFnZSA9IF9jdXN0b21lU3RvcmFnZTsgLy8gaW5pdGlhbGl6ZSBfY3VzdG9tZVN0b3JhZ2Ugd2l0aCB0aGUgaW5qZWN0ZWQgc2VydmljZVxuICAgIGNvbnN0IHN0b3JlZENvdW50ID0gdGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZCgnZm9ybU9iamVjdENvdW50Jyk7XG4gICAgaWYgKHN0b3JlZENvdW50KSB7XG4gICAgICB0aGlzLl9mb3JtT2JqZWN0Q291bnQubmV4dChwYXJzZUludCh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKCdmb3JtT2JqZWN0Q291bnQnKSB8fCAnMCcsIDEwKSk7XG4gICAgfVxuICAgIC8vIGNvbnN0IHN0b3JlZElkZW50aWZpZXJzID0gdGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZCgnaWRlbnRpZmllcnMnKTtcbiAgICAvLyBpZiAoc3RvcmVkSWRlbnRpZmllcnMpIHtcbiAgICAvLyAgIHRoaXMubmV3SWRlbnRpZmllcnNTdWJqZWN0Lm5leHQoSlNPTi5wYXJzZShzdG9yZWRJZGVudGlmaWVycykpO1xuICAgIC8vIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9jYWxDaGFuZ2VzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBsb2NhbENoYW5nZXNFeGlzdCQgPSB0aGlzLmxvY2FsQ2hhbmdlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gQWRkIGEgZmxhZyBvciBzdWJqZWN0IHRvIG5vdGlmeSB3aGVuIENvbXBvbmVudCBBIGhhcyBmaW5pc2hlZCBpbml0aWFsaXppbmdcbiAgcHJpdmF0ZSBpbml0aWFsaXplZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaW5pdGlhbGl6ZWQkID0gdGhpcy5pbml0aWFsaXplZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgc2V0TG9jYWxDaGFuZ2VzRXhpc3Qoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsQ2hhbmdlc1N1YmplY3QubmV4dChzdGF0ZSk7XG4gICAgdGhpcy5pbml0aWFsaXplZFN1YmplY3QubmV4dCh0cnVlKTsgLy8gTm90aWZ5IHRoYXQgdGhlIHN0YXRlIGhhcyBiZWVuIGluaXRpYWxpemVkXG4gIH1cbiAgLy8gSW5pdGlhbGl6ZSBuZXcgaWRlbnRpZmllcnMgZnJvbSBjdXN0b20gc3RvcmFnZVxuICBwcml2YXRlIGluaXROZXdJZGVudGlmaWVycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RvcmVkSWRlbnRpZmllcnMgPSB0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKCduZXdJZGVudGlmaWVycycpO1xuICAgIHJldHVybiBzdG9yZWRJZGVudGlmaWVycyA/IEpTT04ucGFyc2Uoc3RvcmVkSWRlbnRpZmllcnMpIDogW107XG4gIH1cblxuICAvLyBHZXR0ZXIgZm9yIGZvcm0gb2JzZXJ2YWJsZVxuICBnZXQgZm9ybSQoKTogT2JzZXJ2YWJsZTxBeEZvcm0+IHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBhZGQgYSBuZXcgaWRlbnRpZmllciB0byB0aGUgYXJyYXlcbiAgYWRkTmV3SWRlbnRpZmllcihpZGVudGlmaWVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50SWRlbnRpZmllcnMgPSB0aGlzLm5ld0lkZW50aWZpZXJzU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHVwZGF0ZWRJZGVudGlmaWVycyA9IFsuLi5jdXJyZW50SWRlbnRpZmllcnMsIGlkZW50aWZpZXJdO1xuICAgIHRoaXMubmV3SWRlbnRpZmllcnNTdWJqZWN0Lm5leHQodXBkYXRlZElkZW50aWZpZXJzKTtcbiAgICB0aGlzLl9jdXN0b21lU3RvcmFnZS53cml0ZSgnbmV3SWRlbnRpZmllcnMnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkSWRlbnRpZmllcnMpKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBnZXQgdGhlIG9ic2VydmFibGUgYXJyYXkgb2YgbmV3IGlkZW50aWZpZXJzXG4gIGdldE5ld0lkZW50aWZpZXJzJCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMubmV3SWRlbnRpZmllcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGNsZWFyIHRoZSBhcnJheSBvZiBuZXcgaWRlbnRpZmllcnNcbiAgY2xlYXJOZXdJZGVudGlmaWVycygpOiB2b2lkIHtcbiAgICB0aGlzLm5ld0lkZW50aWZpZXJzU3ViamVjdC5uZXh0KFtdKTtcbiAgICB0aGlzLl9jdXN0b21lU3RvcmFnZS5yZW1vdmUoJ25ld0lkZW50aWZpZXJzJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0dGVyIGFuZCBHZXR0ZXIgZm9yIEZvcm1PYmplY3RDb3VudFxuICAgKi9cbiAgc2V0Rm9ybU9iamVjdENvdW50KGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvdW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5fZm9ybU9iamVjdENvdW50Lm5leHQoY291bnQpO1xuICAgICAgdGhpcy5fY3VzdG9tZVN0b3JhZ2Uud3JpdGUoJ2Zvcm1PYmplY3RDb3VudCcsIGNvdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZvcm1PYmplY3RDb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JtT2JqZWN0Q291bnQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogdG8gY2FsbCBoaWRlL3Nob3cgZm9ybSBhcGlcbiAgICpcbiAgICogQHBhcmFtIGZvcm1JZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgaGlkZVNob3dGb3JtKGZvcm1WaXNpYmlsaXR5OiBib29sZWFuLCBmb3JtSWQ6IHN0cmluZywgYXBwVmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0ge1xuICAgICAgJ2FwcFZlcnNpb25JZCc6IGFwcFZlcnNpb25JZCxcbiAgICAgICdmb3JtX2lkJzogZm9ybUlkLFxuICAgICAgJ2Zvcm1WaXNpYmlsaXR5JzogZm9ybVZpc2liaWxpdHlcbiAgICB9O1xuICAgIGxldCBuZXdJZGVudGlmaWVyID0gJyc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2h0dHBDbGllbnQucG9zdCh0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsICsgJ2hpZGVGb3JtU2hvd0Zvcm0vJywgZm9ybURhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IHN0cmluZykgPT4ge1xuICAgICAgICBuZXdJZGVudGlmaWVyID0gcmVzcG9uc2U7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZm9ybSBkZXRhaWwgYnkgdGhlIGZvcm0gaWRcbiAgICpcbiAgICogQHBhcmFtIEZvcm1EYXRhXG4gICAqIEByZXR1cm5zIFxuICAgKi9cbiAgZ2V0Rm9ybURldGFpbHMoZm9ybUlkOiBzdHJpbmcsIHN1YkZvcm1JZDogc3RyaW5nKTogUHJvbWlzZTxBeEZvcm0+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZm9ybScsIEpTT04uc3RyaW5naWZ5KHsgJ2ZpZCc6IGZvcm1JZCB9KSk7XG4gICAgY29uc3QganNvbkNvbnZlcnQ6IEpzb25Db252ZXJ0ID0gbmV3IEpzb25Db252ZXJ0KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghc3ViRm9ybUlkKSB7XG4gICAgICAgIHRoaXMuX2h0dHBDbGllbnQucG9zdDxhbnk+KHRoaXMuY29tbW9uTGliQ29uZmlnLmF4b25hdG9yWDFVcmwgKyAnZ2V0Rm9ybURldGFpbHMvJywgZm9ybURhdGEpLnN1YnNjcmliZShcbiAgICAgICAgICBhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLndyaXRlKCdfc3RhdGljRm9ybU9iamVjdCcgKyBmb3JtSWQsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmZkLmZvcm0pKVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGpzb25Db252ZXJ0LmRlc2VyaWFsaXplT2JqZWN0KHJlc3BvbnNlLmZkLmZvcm0sIEF4Rm9ybSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVN1YmZvcm0oZm9ybS53aWRnZXRzLCBmb3JtSWQsIGZvcm0pXG4gICAgICAgICAgICB0aGlzLl9mb3JtLm5leHQoZm9ybSk7XG4gICAgICAgICAgICByZXNvbHZlKGZvcm0pO1xuICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBfc3ViZm9ybSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZChmb3JtSWQgKyBzdWJGb3JtSWQpKVxuICAgICAgICBjb25zdCBfZm9ybSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZChmb3JtSWQpKVxuICAgICAgICBpZiAoX3N1YmZvcm0pIHtcbiAgICAgICAgICBfZm9ybS53aWRnZXRzID0gX3N1YmZvcm0ud2lkZ2V0cztcbiAgICAgICAgICByZXNvbHZlKF9mb3JtKTtcbiAgICAgICAgfSBlbHNlIHJlamVjdDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YmZvcm0od2lkZ2V0cywgZm9ybUlkLCBmb3JtKSB7XG4gICAgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICB3aWRnZXRzLmZvckVhY2gocmVzID0+IHtcbiAgICAgICAgaWYgKHJlcy5zdWJUeXBlID09IFwiU3ViRm9ybVwiIHx8IHJlcy5zdWJUeXBlID09IFwic3ViZm9ybVwiKSB7XG4gICAgICAgICAgY29uc3Qgc3ViZm9ybSA9IG5ldyBTdWJGb3JtKHJlcyBhcyBhbnkpXG4gICAgICAgICAgY29uc3QgbW9kaWZ5U3ViZm9ybSA9IHsgLi4uZm9ybSB9XG4gICAgICAgICAgaWYgKHN1YmZvcm0ubWFya3VwICYmIHN1YmZvcm0ubWFya3VwLmxlbmd0aCA+IDApXG4gICAgICAgICAgICBtb2RpZnlTdWJmb3JtLndpZGdldHMgPSBzdWJmb3JtLm1hcmt1cDtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBtb2RpZnlTdWJmb3JtLndpZGdldHMgPSBbXTtcbiAgICAgICAgICBtb2RpZnlTdWJmb3JtLmlkID0gc3ViZm9ybS5pZDtcbiAgICAgICAgICBsZXQgX3N1YmZvcm0gPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoXCJfc3ViZm9ybVwiICsgZm9ybUlkKSlcbiAgICAgICAgICBpZiAoIV9zdWJmb3JtKSBfc3ViZm9ybSA9IFtdXG4gICAgICAgICAgX3N1YmZvcm0ucHVzaChtb2RpZnlTdWJmb3JtLmlkKVxuICAgICAgICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLndyaXRlKFwiX3N1YmZvcm1cIiArIGZvcm1JZCwgSlNPTi5zdHJpbmdpZnkoX3N1YmZvcm0pKVxuICAgICAgICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLndyaXRlKGZvcm1JZCArIG1vZGlmeVN1YmZvcm0uaWQsIEpTT04uc3RyaW5naWZ5KG1vZGlmeVN1YmZvcm0pKVxuICAgICAgICAgIHRoaXMuY3JlYXRlU3ViZm9ybShtb2RpZnlTdWJmb3JtLndpZGdldHMsIGZvcm1JZCwgZm9ybSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgdmFsaWRpdHkgY29uZGl0aW9uIG9nZiBzdWJmb3JtXG4gIHVwZGF0ZVZhbGlkaXR5Q29uZGl0aW9uU3ViZm9ybShpdGVtLCBwcm9tcHRDb2RlKSB7XG4gICAgaWYgKGl0ZW0ubWFya3VwKSB7XG4gICAgICBpdGVtLm1hcmt1cC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCB2YWxpZGl0eUNvbmRpdGlvbnMgPSB0eXBlb2YgaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMgPT0gJ29iamVjdCcgPyBpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyA6SlNPTi5wYXJzZShpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyk7XG4gICAgICAgICAgaXRlbS5pbnZhbGlkaXR5TXNnID0gdmFsaWRpdHlDb25kaXRpb25zLmludmFsaWRpdHlfbXNnO1xuICAgICAgICAgIGl0ZW0udmFsaWRpdHlDb25kaXRpb25KcyA9IHZhbGlkaXR5Q29uZGl0aW9ucy52YWxpZGl0eV9jb25kaXRpb25zX2pzID8/IGl0ZW0udmFsaWRpdHlDb25kaXRpb25KcztcbiAgICAgICAgICBpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyA9IHZhbGlkaXR5Q29uZGl0aW9ucy52YWxpZGl0eV9jb25kaXRpb25zID8/IGl0ZW0udmFsaWRpdHlDb25kaXRpb25zOyAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXByb21wdENvZGUpIHtcbiAgICAgICAgICBpdGVtLnByb21wdE1sID0ge1xuICAgICAgICAgICAgXCJlblwiOiBpdGVtLnByb21wdFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHt9XG4gICAgICAgICAgcHJvbXB0Q29kZS5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdlbicpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgZW46IGl0ZW0ucHJvbXB0IH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSAnaGknKSB7XG4gICAgICAgICAgICAgIGl0ZW0ucHJvbXB0TWwgPSB7IC4uLml0ZW0ucHJvbXB0TWwsIGhpOiBpdGVtLmhpcHJvbXB0IH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSAnbWFyJykge1xuICAgICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBtYXI6IGl0ZW0ubWFycHJvbXB0IH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSAndGVsJykge1xuICAgICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBtYXI6IGl0ZW0udGVwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdmcicpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgZnI6IGl0ZW0uZnJwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdhcicpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgYXI6IGl0ZW0uYXJwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdKUCcpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgSlA6IGl0ZW0uSlBwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdJRCcpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgSUQ6IGl0ZW0uSURwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdUSCcpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgVEg6IGl0ZW0uVEhwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdUSCcpIHtcbiAgICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgVEg6IGl0ZW0uVEhwcm9tcHQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcImNob2ljZWxpc3Qtd2lkZ2V0XCIpIHtcbiAgICAgICAgICBpdGVtLmNob2ljZXMgPSAoaXRlbS5jaG9pY2VzKS5zcGxpdChcIixcIikuam9pbihcIlxcblwiKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJzdWJmb3JtLXdpZGdldFwiKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eUNvbmRpdGlvblN1YmZvcm0oaXRlbSwgcHJvbXB0Q29kZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgLy8gVXBkYXRlIGZvcm0gc2VydmljZVxuICBhc3luYyB1cGRhdGVGb3JtRGV0YWlscyhmb3JtRGF0YTogYW55LCBmb3JtSWQ6IHN0cmluZywgZm9ybURldGFpbHM6IGFueSwgZm9ybVNjcnB0RGF0YTogYW55LCBmb3JtVmlzaWJpbGl0eTogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gRW5zdXJlIGZvcm1EYXRhIGlzIG5vdCB1bmRlZmluZWRcbiAgICBpZiAoIWZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1EYXRhIGlzIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGV0YWlsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtRGV0YWlscykpXG4gICAgZm9ybURhdGEgPSB0aGlzLnJlbW92ZUlkcyhmb3JtRGF0YSlcbiAgICBjb25zdCBwcm9tcHRDb2RlID0gdGhpcy5nZXRGb3JtTGFuZ3VhZ2VzKGZvcm1JZCk7XG5cbiAgICB0aGlzLmFsbEZvcm1GaWVsZHMgPSB0aGlzLmdldEZpbHRlcmVkV2lkZ2V0c0xpc3QoZm9ybUlkKTsgXG5cbiAgICBmb3JtRGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2ZpbGV1cGxvYWQtd2lkZ2V0Jykge1xuICAgICAgICAvLyBBc3N1bWluZyBgc3RyaW5nYCBpcyB0aGUgZm9ybWF0dGVkIHN0cmluZyBjb250YWluaW5nIGFsbG93ZWQgZmlsZSB0eXBlcyBsaWtlIFwicGRmLCBwcHRcIlxuICAgICAgICBpZiAoaXRlbS5hbGxvd2VkRmlsZVR5cGVzKSB7XG4gICAgICAgICAgY29uc3Qgc3RyaW5nID0gaXRlbS5hbGxvd2VkRmlsZVR5cGVzLmpvaW4oJywnKTtcbiAgICAgICAgICBpdGVtLmFsbG93ZWRGaWxlVHlwZVRlbXAgPSBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXRlbS50eXBlID09PSAnY2hvaWNlbGlzdC13aWRnZXQnKXtcbiAgICAgICAgICBpdGVtLnN1YlR5cGUgPSBpdGVtLmNob2ljZXNTb3VyY2U7XG4gICAgICAgICAgaXRlbS5jaG9pY2VzID0gaXRlbS5jaG9pY2VzLnNwbGl0KCcsJykubWFwKGNob2ljZSA9PiBjaG9pY2UudHJpbSgpKS5qb2luKCdcXG4nKVxuICAgICAgICB9XG4gICAgICBlbHNlIGlmKGl0ZW0udHlwZSA9PT0gJ3RpbWVzdGFtcC13aWRnZXQnKXtcbiAgICAgICAgICBpdGVtLnN1YlR5cGUgPSBpdGVtLm1haW5UeXBlO1xuICAgICAgICB9ICBcbiAgICAgICAgaWYoaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgaWYoaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMubm9kZXMgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBpZihpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyl7XG4gICAgICAgICAgICAgIGl0ZW0udmFsaWRpdHlDb25kaXRpb25zID0gSlNPTi5wYXJzZShpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW0udmFsaWRpdHlDb25kaXRpb25zO1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW0uaW52YWxpZGl0eU1zZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGl0ZW0udmFsaWRpdHlDb25kaXRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgJiYgaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMubm9kZXMubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICBkZWxldGUgaXRlbS52YWxpZGl0eUNvbmRpdGlvbnM7XG4gICAgICAgICAgZGVsZXRlIGl0ZW0uaW52YWxpZGl0eU1zZztcbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKGl0ZW0udmlzaWJpbGl0eUNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgIGlmKGl0ZW0udmlzaWJpbGl0eUNvbmRpdGlvbnMubm9kZXMgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgaWYoaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucyl7XG4gICAgICAgICAgICBpdGVtLnZpc2liaWxpdHlDb25kaXRpb25zID0gSlNPTi5wYXJzZShpdGVtLnZpc2liaWxpdHlDb25kaXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICBkZWxldGUgaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucztcbiAgICAgICAgICB9ICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucy5ub2RlcyAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmlzaWJpbGl0eUNvbmRpdGlvbnMubm9kZXMubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICBkZWxldGUgaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucztcblxuICAgICAgICB9XG5cbiAgICAgICAgIH1cbiAgICAgICAgIGlmKGl0ZW0udmFsaWRpdHlEZXBlbmRlbnRzKXtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZERlcGVuZGVudHMgPSBpdGVtLnZhbGlkaXR5RGVwZW5kZW50cy5maWx0ZXIocHRyID0+IHRoaXMuYWxsRm9ybUZpZWxkcy5pbmNsdWRlcyhwdHIpKTtcbiAgICAgICAgICBpdGVtLnZhbGlkaXR5RGVwZW5kZW50cyA9IGZpbHRlcmVkRGVwZW5kZW50cztcbiAgICAgICAgIH1cbiAgICAgICAgIGlmKGl0ZW0uZGVwZW5kYW50KXtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZERlcGVuZGVudHMgPSBpdGVtLmRlcGVuZGFudC5maWx0ZXIocHRyID0+IHRoaXMuYWxsRm9ybUZpZWxkcy5pbmNsdWRlcyhwdHIpKTtcbiAgICAgICAgICBpdGVtLmRlcGVuZGFudCA9IGZpbHRlcmVkRGVwZW5kZW50cztcbiAgICAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gY29uc3QgcHJvY2Vzc1N1YmZvcm1zID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xuICAgIC8vICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAvLyAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3N1YmZvcm0td2lkZ2V0Jykge1xuICAgIC8vICAgICAgIC8vIENoZWNrIGlmICdzdWJfdHlwZScga2V5IGlzIG5vdCBwcmVzZW50IGFuZCBhZGQgaXQgd2l0aCB2YWx1ZSAnc3ViZm9ybSdcbiAgICAvLyAgICAgICBpZiAoISgnc3ViX3R5cGUnIGluIGl0ZW0pKSB7XG4gICAgLy8gICAgICAgICBpdGVtLnN1Yl90eXBlID0gXCJzdWJmb3JtXCI7XG4gICAgLy8gICAgICAgfVxuICAgIFxuICAgIC8vICAgICAgIC8vIElmIHRoZSAnbWFya3VwJyBhcnJheSBleGlzdHMsIHByb2Nlc3MgaXRzIHN1YmZvcm1zIHJlY3Vyc2l2ZWx5XG4gICAgLy8gICAgICAgaWYgKGl0ZW0ubWFya3VwICYmIEFycmF5LmlzQXJyYXkoaXRlbS5tYXJrdXApKSB7XG4gICAgLy8gICAgICAgICBwcm9jZXNzU3ViZm9ybXMoaXRlbS5tYXJrdXApO1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfTtcbiAgICBcbiAgICAvLyBwcm9jZXNzU3ViZm9ybXMoZm9ybURhdGEpO1xuICAgIHRoaXMucHJlcHJvY2Vzc1ZhbGlkaXR5Q29uZGl0aW9ucyhmb3JtRGF0YSk7ICAgICAgXG4gICAgdGhpcy5wcmVwcm9jZXNzVmlzaWRpbGl0eUNvbmRpdGlvbnMoZm9ybURhdGEpO1xuICAgIGZvcm1EYXRhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpZihpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucyl7XG4gICAgICAgIGlmKGl0ZW0udmFsaWRpdHlDb25kaXRpb25zLm5vZGVzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICAgZGVsZXRlIGl0ZW0udmFsaWRpdHlDb25kaXRpb25zO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihpdGVtLnZpc2liaWxpdHlDb25kaXRpb25zKXtcbiAgICAgICAgaWYoaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9ucy5ub2Rlcy5sZW5ndGggPT09IDApe1xuICAgICAgICAgIGRlbGV0ZSBpdGVtLnZpc2liaWxpdHlDb25kaXRpb25zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIChpdGVtLnZhbGlkaXR5Q29uZGl0aW9ucykge1xuICAgICAgICAvLyAgIC8vIGNvbnN0IHZhbGlkaXR5Q29uZGl0aW9ucyA9IEpTT04ucGFyc2UoaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMpO1xuICAgICAgICAvLyAgIC8vIGNvbnN0IHZhbGlkaXR5Q29uZGl0aW9ucyA9IGl0ZW0udmFsaWRpdHlDb25kaXRpb25zO1xuICAgICAgICAvLyAgIC8vIGl0ZW0uaW52YWxpZGl0eU1zZyA9IHZhbGlkaXR5Q29uZGl0aW9ucy5pbnZhbGlkaXR5X21zZztcbiAgICAgICAgLy8gICBpdGVtLnZhbGlkaXR5Q29uZGl0aW9uSnMgPSB0aGlzLnByZWNvbXBpbGVDb25kaXRpb25zKGl0ZW0udmFsaWRpdHlDb25kaXRpb25zLm5vZGVzKTtcbiAgICAgIC8vICAgLy8gaXRlbS52YWxpZGl0eUNvbmRpdGlvbnMgPSB2YWxpZGl0eUNvbmRpdGlvbnMudmFsaWRpdHlfY29uZGl0aW9ucztcbiAgICAgIC8vIH1cbiAgICAgIGlmICghcHJvbXB0Q29kZSkge1xuICAgICAgICBpdGVtLnByb21wdE1sID0ge1xuICAgICAgICAgIFwiZW5cIjogaXRlbS5wcm9tcHRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpdGVtLnByb21wdE1sID0ge31cbiAgICAgICAgcHJvbXB0Q29kZS5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgICAgIGlmIChjb2RlID09PSAnZW4nKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyBlbjogaXRlbS5wcm9tcHQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gJ2hpJykge1xuICAgICAgICAgICAgaXRlbS5wcm9tcHRNbCA9IHsgLi4uaXRlbS5wcm9tcHRNbCwgaGk6IGl0ZW0uaGlwcm9tcHQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gJ21hcicpIHtcbiAgICAgICAgICAgIGl0ZW0ucHJvbXB0TWwgPSB7IC4uLml0ZW0ucHJvbXB0TWwsIG1hcjogaXRlbS5tYXJwcm9tcHQgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gJ3RlbCcpIHtcbiAgICAgICAgICAgIGl0ZW0ucHJvbXB0TWwgPSB7IC4uLml0ZW0ucHJvbXB0TWwsIG1hcjogaXRlbS50ZXByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnZnInKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBmcjogaXRlbS5mcnByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnYXInKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBhcjogaXRlbS5hcnByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnSlAnKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBKUDogaXRlbS5KUHByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnSUQnKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBJRDogaXRlbS5JRHByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnVEgnKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBUSDogaXRlbS5USHByb21wdCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAnVEgnKSB7XG4gICAgICAgICAgICBpdGVtLnByb21wdE1sID0geyAuLi5pdGVtLnByb21wdE1sLCBUSDogaXRlbS5USHByb21wdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJjaG9pY2VsaXN0LXdpZGdldFwiKSB7XG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoaXRlbS5jaG9pY2VzKSl7XG4gICAgICAgICAgaXRlbS5jaG9pY2VzID0gaXRlbS5jaG9pY2VzLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0uY2hvaWNlcyA9IChpdGVtLmNob2ljZXMpLnNwbGl0KFwiLFwiKS5qb2luKFwiXFxuXCIpXG4gICAgICB9XG4gICAgICBpZiAoaXRlbS50eXBlID09IFwic3ViZm9ybS13aWRnZXRcIikge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5Q29uZGl0aW9uU3ViZm9ybShpdGVtLCBwcm9tcHRDb2RlKVxuICAgICAgICAvLyBmb3JtRGF0YVtpbmRleF0gPSB0aGlzLnByb2Nlc3NJbm5lcldpZGdldEpzb24oaXRlbSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAvLyBTdGF0aWMgdmFsdWUgc2V0IG5lZWQgdG9jaGFuZ2VcbiAgICBjb25zdCBhcHBEZXRhaWxzID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKFwiYXBwRGV0YWlsc1wiICsgZm9ybUlkKSlcbiAgICBjb25zdCBfc3RhdGljRm9ybU9iamVjdCA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZCgnX3N0YXRpY0Zvcm1PYmplY3QnICsgZm9ybUlkKSlcbiAgICBfc3RhdGljRm9ybU9iamVjdC5hID0gYXBwRGV0YWlscy5hcHBJZFxuICAgIF9zdGF0aWNGb3JtT2JqZWN0LnYgPSAoYXBwRGV0YWlscy52ZXJzaW9uKS50b0ZpeGVkKDMpLnRvU3RyaW5nKCk7XG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuZXJyb3JfY291bnQgPSAwXG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuQkVIQVZJT1JTID0gW11cbiAgICBfc3RhdGljRm9ybU9iamVjdC5hbGxvd19hZF9ob2MgPSBcIlRydWVcIlxuICAgIF9zdGF0aWNGb3JtT2JqZWN0LmZ0ID0gXCJhc3NldFwiXG4gICAgX3N0YXRpY0Zvcm1PYmplY3QubXVsdGlsYW5ndWFnZSA9IFwiVHJ1ZVwiXG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuaXNDU1ZFeHBvcnRFbmFibGUgPSBcIkZhbHNlXCJcbiAgICBfc3RhdGljRm9ybU9iamVjdC5pc19wdWJsaWMgPSBcIkZhbHNlXCJcbiAgICBpZiAoX3N0YXRpY0Zvcm1PYmplY3QuZm0pXG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5mbS5hbGxvd19hZF9ob2MgPSB0cnVlXG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuY291bnQgPSBmb3JtRGF0YS5sZW5ndGggLSAxXG4gICAgZGVsZXRlIF9zdGF0aWNGb3JtT2JqZWN0Lm9sZF9uZXdfaWRfbWFwXG4gICAgX3N0YXRpY0Zvcm1PYmplY3Qub2xkX25ld19pZF9tYXAgPSB7fVxuICAgIF9zdGF0aWNGb3JtT2JqZWN0LmZpZCA9IE51bWJlcihmb3JtSWQpXG4gICAgZGVsZXRlIGZvcm1EZXRhaWwud2lkZ2V0c1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZvcm1EZXRhaWwpIHtcbiAgICAgIGRlbGV0ZSBfc3RhdGljRm9ybU9iamVjdFtrZXldXG4gICAgICBpZiAoa2V5ID09ICdhbGxvd19hZF9ob2MnIHx8IGtleSA9PSAnbXVsdGlsYW5ndWFnZScgfHwga2V5ID09ICdpc0NTVkV4cG9ydEVuYWJsZScgfHwga2V5ID09ICdpc19wdWJsaWMnKSB7XG4gICAgICAgIGZvcm1EZXRhaWxba2V5XSA9IGZvcm1EZXRhaWxba2V5XSA/ICdUcnVlJyA6ICdGYWxzZSc7XG4gICAgICB9XG4gICAgICBfc3RhdGljRm9ybU9iamVjdFtrZXldID0gZm9ybURldGFpbFtrZXldXG4gICAgfVxuXG4gICAgaWYoX3N0YXRpY0Zvcm1PYmplY3QuZnN0ID09ICdBJyl7XG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5hZmlkID0gX3N0YXRpY0Zvcm1PYmplY3QudHJhY2tlZGFzc2V0X2lkLnRvU3RyaW5nKCk7XG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5mdCA9ICd0cmFja2luZyc7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5mdCA9ICdhc3NldCc7XG4gICAgfVxuICAgIGlmIChpc05hTihfc3RhdGljRm9ybU9iamVjdC5mcCkpIHtcbiAgICAgIF9zdGF0aWNGb3JtT2JqZWN0LmZwID0gJyc7XG4gIH1cbiAgLy8gRW5zdXJlIF9zdGF0aWNGb3JtT2JqZWN0LmZsYXRfZmllbGRzIGlzIG5vdCB1bmRlZmluZWRcbiAgaWYgKF9zdGF0aWNGb3JtT2JqZWN0LmZsYXRfZmllbGRzKSB7XG4gICAgICBfc3RhdGljRm9ybU9iamVjdC5mbGF0X2ZpZWxkcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjYXB0dXJlZ3BzbG9jYXRpb24td2lkZ2V0Jykge1xuICAgICAgICAgICAgICBfc3RhdGljRm9ybU9iamVjdC5sdmQgPSBpdGVtLmlkZW50aWZpZXI7XG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiZmxhdF9maWVsZHMgaXMgdW5kZWZpbmVkXCIpO1xuICB9XG4gICAgX3N0YXRpY0Zvcm1PYmplY3QuZm4gPSBfc3RhdGljRm9ybU9iamVjdC5uYW1lO1xuICAgIF9zdGF0aWNGb3JtT2JqZWN0LmZvcm1fc2NyaXB0ID0gZm9ybVNjcnB0RGF0YTtcbiAgICBfc3RhdGljRm9ybU9iamVjdC5pc0Zvcm1WaXNpYmxlID0gZm9ybVZpc2liaWxpdHk7XG4gICAgX3N0YXRpY0Zvcm1PYmplY3QubHZzdF9zZXRfbWFudWFsbHkgPSB0cnVlO1xuICAgIGxldCBmZkRhdGEgPSBhd2FpdCB0aGlzLmNvbnZlcnRCb29sZWFucyhmb3JtRGF0YSlcbiAgICBmZkRhdGEgPSB0aGlzLl9mb3JtYnVpbGRlcm1hcHBlci5yZXBsYWNlS2V5c0luSnNvbkFycmF5KGZmRGF0YSk7XG4gICAgY29uc3QgZm9ybURhdGF1cGRhdGVkID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgLy8gX3N0YXRpY0Zvcm1PYmplY3QuZmxhdF9maWVsZHMgPSBmZkRhdGFcbiAgICBfc3RhdGljRm9ybU9iamVjdC5mZiA9IEpTT04uc3RyaW5naWZ5KGZmRGF0YSkgXG4gICAgX3N0YXRpY0Zvcm1PYmplY3Quc3MgPSAnUycgLy9TYXZlIGRyYWZ0IChTIGFuZCBEKVxuICAgIF9zdGF0aWNGb3JtT2JqZWN0LnN0YXR1cyA9IF9zdGF0aWNGb3JtT2JqZWN0LnNzXG4gICAgZGVsZXRlIF9zdGF0aWNGb3JtT2JqZWN0Ll9fanNvbmNvbnZlcnRfX2NsYXNzX2lkZW50aWZpZXJfX1xuICAgIGRlbGV0ZSBfc3RhdGljRm9ybU9iamVjdC5fX2pzb25jb252ZXJ0X19tYXBwaW5nX19cbiAgICBmb3JtRGF0YXVwZGF0ZWQuYXBwZW5kKFwiZm9ybVwiLCBKU09OLnN0cmluZ2lmeShfc3RhdGljRm9ybU9iamVjdCkpO1xuICAgIFxuICAgIGZvcm1EYXRhdXBkYXRlZC5hcHBlbmQoXCJpbWdDaG9pY2VzVG9CZURlbGV0ZWRcIiwgSlNPTi5zdHJpbmdpZnkoW10pKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5faHR0cENsaWVudC5wb3N0KHRoaXMuY29tbW9uTGliQ29uZmlnLmF4b25hdG9yWDFVcmwgKyAndXBkYXRlRm9ybURldGFpbHMvJywgZm9ybURhdGF1cGRhdGVkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIG9iamVjdFxuICBjb252ZXJ0Qm9vbGVhbnMoYXJyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhcnIubWFwKChvYmopID0+IHtcbiAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfTtcbiAgICAgICAgbGV0IHN1YlR5cGU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5ld09iaikge1xuICAgICAgICAgIGlmIChrZXkgPT0gJ3N1YlR5cGUnKSB7XG4gICAgICAgICAgICBzdWJUeXBlID0gbmV3T2JqW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuZXdPYmpba2V5XSAhPSAnU3ViRm9ybScgJiYgbmV3T2JqW2tleV0gIT0gXCJzdWJmb3JtXCIgJiYgbmV3T2JqW2tleV0gIT0gJ2hlYWRlcicgJiYga2V5ID09ICdzdWJUeXBlJykge1xuICAgICAgICAgICAgaWYgKG5ld09ialsnbWFya3VwJ10gIT0gXCJAe3Nybm99XCIgJiYgbmV3T2JqWydtYXJrdXAnXSAhPSBcIkB7aGVhZGVyfVwiICYmIG5ld09ialsnbWFya3VwJ10gIT0gXCJAe2NyZWF0ZWRfb259XCIgJiYgbmV3T2JqWydtYXJrdXAnXSAhPSBcIkB7dXNlcn1cIiAmJiBuZXdPYmpbJ21hcmt1cCddICE9IFwiQHtjcmVhdGVkX2F0fVwiJiYgbmV3T2JqWydtYXJrdXAnXSE9XCJAe2FjdGlvbl9jb3VudH1cIilcbiAgICAgICAgICAgICAgZGVsZXRlIG5ld09ialsnbWFya3VwJ107XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChrZXkgPT09ICdfX2pzb25jb252ZXJ0X19jbGFzc19pZGVudGlmaWVyX18nIHx8IGtleSA9PT0gJ19fanNvbmNvbnZlcnRfX21hcHBpbmdfXycgfHwga2V5ID09ICd3aWRnZXRJY29uJyB8fCBrZXkgPT0gJ3dpZGdldFNlbGVjdCcgfHwga2V5ID09ICduYW1lJykge1xuICAgICAgICAgICAgZGVsZXRlIG5ld09ialtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgbmV3T2JqW2tleV0gPT09ICdib29sZWFuJyAmJiBrZXkgIT0gJ2Nob2ljZXNNbCcgJiYga2V5ICE9ICdjaG9pY2VzTWwnICYmIGtleSAhPSAnbG9hZGluZ0lkJyAmJiBrZXkgIT0gJ21hcmt1cCcgJiYga2V5ICE9ICdpc0NTVkV4cG9ydEVuYWJsZScgICYmIGtleSAhPSAndmFsaWRhdGUnKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IG5ld09ialtrZXldID8gJzEnIDogJzInO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5ld09ialtrZXldID09PSAnb2JqZWN0JyAmJiBrZXkgIT0gJ3ZhbGlkaXR5Q29uZGl0aW9ucycgJiYga2V5ICE9ICd2aXNpYmlsaXR5Q29uZGl0aW9ucycgJiYga2V5ICE9ICdjaG9pY2VzTWwnICYmIGtleSAhPSAncHJvbXB0TWwnICYmIGtleSAhPSAnYWxsb3dlZEZpbGVUeXBlcycgJiYga2V5ICE9ICd2YWxpZGl0eURlcGVuZGVudHMnICYmIGtleSAhPSAnZGVwZW5kZW50cycpIHtcbiAgICAgICAgICAgIG5ld09ialtrZXldID0gdGhpcy5jb252ZXJ0Qm9vbGVhbnMobmV3T2JqW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpY19pZGVudGlmaWVyX2dldF9vcl9jcmVhdGUoZm9ybWlkOiBhbnkscHVibGljX2lkOiBhbnksaXNfcHVibGljOiBhbnkpe1xuICAgIGNvbnN0IFVwZGF0ZWQgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBVcGRhdGVkLmFwcGVuZCgnZm9ybV9pZCcsZm9ybWlkKTtcbiAgICBVcGRhdGVkLmFwcGVuZCgncHVibGljX2lkJyxwdWJsaWNfaWQpO1xuICAgIFVwZGF0ZWQuYXBwZW5kKCdpc19wdWJsaWMnLGlzX3B1YmxpYyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2h0dHBDbGllbnQucG9zdCh0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsICsgJ3B1YmxpY19pZGVudGlmaWVyX2dldF9vcl9jcmVhdGUvJywgVXBkYXRlZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgICB9XG5cbiAgLy8gUmVtb3ZlIHVudXNlIGlkIGZyb20gZW5kIHBsYXlsb2Fkc1xuICByZW1vdmVJZHMob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgb2JqW2ldID0gdGhpcy5yZW1vdmVJZHMob2JqW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdGhpcy5yZW1vdmVJZHMob2JqW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gQWRkIHN1YmZvcm0gaW4gc3ViZnJtIG9iamVjdFxuICBhZGRTdWJmb3JtRGV0YWlscyh3aWRnZXQsIGZvcm1JZCkge1xuICAgIGNvbnN0IGZvcm0gPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ19zdGF0aWNGb3JtT2JqZWN0JyArIGZvcm1JZCkpXG4gICAgY29uc3QgbW9kaWZ5U3ViZm9ybSA9IHsgLi4uZm9ybSB9XG4gICAgaWYgKG1vZGlmeVN1YmZvcm0ud2lkZ2V0cylcbiAgICAgIG1vZGlmeVN1YmZvcm0ud2lkZ2V0cyA9IFtdO1xuICAgIG1vZGlmeVN1YmZvcm0uaWQgPSB3aWRnZXQuaWQ7XG4gICAgbGV0IF9zdWJmb3JtID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKFwiX3N1YmZvcm1cIiArIGZvcm1JZCkpXG4gICAgaWYgKCFfc3ViZm9ybSkgX3N1YmZvcm0gPSBbXVxuICAgIF9zdWJmb3JtLnB1c2gobW9kaWZ5U3ViZm9ybS5pZClcbiAgICB0aGlzLl9jdXN0b21lU3RvcmFnZS53cml0ZShcIl9zdWJmb3JtXCIgKyBmb3JtSWQsIEpTT04uc3RyaW5naWZ5KF9zdWJmb3JtKSk7XG4gICAgdGhpcy5fY3VzdG9tZVN0b3JhZ2Uud3JpdGUoZm9ybUlkICsgbW9kaWZ5U3ViZm9ybS5pZCwgSlNPTi5zdHJpbmdpZnkobW9kaWZ5U3ViZm9ybSkpXG4gIH1cblxuICAvLyBNZXRob2QgdG8gdHJpZ2dlciB0aGUgY29tcG9uZW50IGZ1bmN0aW9uIHdpdGggYSBwYXJhbWV0ZXIgKHJvdXRlIGZvcm0pXG4gIHRyaWdnZXJSb3V0ZUZyb20ocGFyYW1ldGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mdW5jdGlvbkNhbGxTdWJqZWN0Um91dGVGb3JtLm5leHQocGFyYW1ldGVyKTtcbiAgfVxuXG4gIC8vIE9ic2VydmFibGUgdG8gd2hpY2ggdGhlIGNvbXBvbmVudCBjYW4gc3Vic2NyaWJlIChyb3V0ZSBmb3JtKVxuICByb3V0ZUZvcm0oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25DYWxsU3ViamVjdFJvdXRlRm9ybS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG5cbiAgLy8gTWV0aG9kIHRvIHRyaWdnZXIgdGhlIGNvbXBvbmVudCBmdW5jdGlvbiB3aXRoIGEgcGFyYW1ldGVyIChyb3V0ZSBmb3JtKVxuICB0cmlnZ2VyTG9jYWxzdG9yYWdlRm9ybVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9mdW5jdGlvbkNhbGxVcGRhdGVMb2NhbHN0b3JhZ2VGb3JtLm5leHQoKTtcbiAgfVxuXG4gIC8vIE9ic2VydmFibGUgdG8gd2hpY2ggdGhlIGNvbXBvbmVudCBjYW4gc3Vic2NyaWJlIHVzZSBmb3IgdXBkYXRlIGxvY2Fsc3RvcmFnZVxuICB1cGRhdGVMb2NhbEZvcm0oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25DYWxsVXBkYXRlTG9jYWxzdG9yYWdlRm9ybS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byB0cmlnZ2VyIHRoZSBjb21wb25lbnQgZnVuY3Rpb24gc2V0RHJvcFZpZXdcbiAgdHJpZ2dlcnNldERyb3BWaWV3Rm9ybVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9mdW5jdGlvbkNhbGxTZXREcm9wYm94Lm5leHQoKTtcbiAgfVxuXG4gIC8vIE9ic2VydmFibGUgdG8gd2hpY2ggdGhlIGNvbXBvbmVudCBjYW4gc3Vic2NyaWJlIHVzZSBmb3IgdXBkYXRlIGxvY2Fsc3RvcmFnZVxuICBzZXREcm9wVmlldygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbkNhbGxTZXREcm9wYm94LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLy8gR2V0IHN1YmZvcm0gcGFydGljdWxhciBmb3JtXG4gIGdldFN1YmZvcm0oZm9ybUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBfc3ViZm9ybSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZChcIl9zdWJmb3JtXCIgKyBmb3JtSWQpKVxuICAgIC8vIGNvbnN0IHN1YkZvcm0gPSBfc3ViZm9ybS5maWx0ZXIoaXRlbSA9PiBpdGVtLmZvcm1JZCA9PSBmb3JtSWQpXG4gICAgcmV0dXJuIF9zdWJmb3JtO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHN1YmZvcm0gcGFydGljdWxhciBmb3JtXG4gIHJlbW92ZVN1YmZvcm0oZm9ybUlkOiBzdHJpbmcsIHN1YmZvcm1EYXRhKSB7XG4gICAgaWYgKHN1YmZvcm1EYXRhKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YmZvcm1EYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzdWJmb3JtRGF0YVtpXS5pZClcbiAgICAgICAgICB0aGlzLl9jdXN0b21lU3RvcmFnZS5yZW1vdmUoZm9ybUlkICsgc3ViZm9ybURhdGFbaV0uaWQpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlbW92ZShcIl9zdWJmb3JtXCIgKyBmb3JtSWQpXG4gIH1cblxuICBpbnRpYWxpemVBcHBEZXRhaWxzKGZvcm1JZCwgYXBwRGV0YWlscykge1xuICAgIHRoaXMuX2N1c3RvbWVTdG9yYWdlLndyaXRlKFwiYXBwRGV0YWlsc1wiICsgZm9ybUlkLCBKU09OLnN0cmluZ2lmeShhcHBEZXRhaWxzKSlcbiAgfVxuXG4gIGdldElkZW50aWZlckFycmF5KCk6IGFueVtdIHtcbiAgICBjb25zdCBmb3JtSWRzQXJyYXkgPSB0aGlzLl9mb3Jtc0xpc3RTZXJ2aWNlLmdldEZvcm1JZExpc3QoKTsgLy8gR2V0IHRoZSBhcnJheSBvZiBmb3JtIElEc1xuICAgIGxldCBsaXN0OmFueVtdID0gW107XG4gICAgXG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggZm9ybUlkXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtSWRzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGZvcm1JZHNBcnJheVtpXTtcbiAgICAgICAgLy8gUGFyc2UgdGhlIGZvcm0gZGV0YWlscyBmcm9tIHN0b3JhZ2UgdXNpbmcgdGhlIGZvcm1JZFxuICAgICAgICBpZih0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGl0ZW0pID09PSBudWxsKXtcbiAgICAgICAgICBjb25zdCBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoJ19zdGF0aWNGb3JtT2JqZWN0JyArIGl0ZW0pKTtcbiAgICAgICAgICBpZiAoZ2V0Rm9ybURldGFpbHNTdG9yYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGdldEZvcm1EZXRhaWxzU3RvcmFnZS5mZi5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBQdXNoIHRoZSBpZGVudGlmaWVyIGludG8gdGhlIGxpc3QgYXJyYXlcbiAgICAgICAgICAgICAgICAgIGxpc3QucHVzaCh2YWwuaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgICBpZih2YWwubWFya3VwICYmIEFycmF5LmlzQXJyYXkodmFsLm1hcmt1cCkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN1YkZvcm1JZGVudGlmaWVycyh2YWwubWFya3VwLGxpc3QpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24gaWYgZ2V0Rm9ybURldGFpbHNTdG9yYWdlIGlzIG51bGxcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgY29uc3QgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGl0ZW0pKTtcbiAgICAgICAgICBpZiAoZ2V0Rm9ybURldGFpbHNTdG9yYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGdldEZvcm1EZXRhaWxzU3RvcmFnZS53aWRnZXRzLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFB1c2ggdGhlIGlkZW50aWZpZXIgaW50byB0aGUgbGlzdCBhcnJheVxuICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHZhbC5pZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICAgIGlmKHZhbC5tYXJrdXAgJiYgdmFsLm1hcmt1cCAmJiBBcnJheS5pc0FycmF5KHZhbC5tYXJrdXApKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdWJGb3JtSWRlbnRpZmllcnModmFsLm1hcmt1cCxsaXN0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uIGlmIGdldEZvcm1EZXRhaWxzU3RvcmFnZSBpcyBudWxsXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbn1cblxuICBnZXRTdWJGb3JtSWRlbnRpZmllcnMobWFya3VwOmFueVtdLGxpc3Q6YW55W10pOiB2b2lke1xuICAgICAgIG1hcmt1cC5mb3JFYWNoKHZhbD0+e1xuICAgICAgICBsaXN0LnB1c2godmFsLmlkZW50aWZpZXIpO1xuICAgICAgICBpZih2YWwubWFya3VwICYmIHZhbC5tYXJrdXAgJiYgQXJyYXkuaXNBcnJheSh2YWwubWFya3VwKSl7XG4gICAgICAgICAgdGhpcy5nZXRTdWJGb3JtSWRlbnRpZmllcnModmFsLm1hcmt1cCxsaXN0KTtcbiAgICAgICAgfVxuICAgICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IEFsbCBMaXN0IG9mIGxvY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtSWRcbiAgICpcbiAgICovXG4gIGdldExpc3RMb2NhdGlvbkZvcm0oZm9ybUlkKSB7XG4gICAgY29uc3QgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGZvcm1JZCkpXG4gICAgY29uc3QgbGlzdEdwcyA9IFtdXG4gICAgZ2V0Rm9ybURldGFpbHNTdG9yYWdlLndpZGdldHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLm5hbWUgPT0gXCJHUFNcIikge1xuICAgICAgICBsaXN0R3BzLnB1c2goeyB2YWx1ZTogaXRlbS5pZGVudGlmaWVyLCB0ZXh0OiBpdGVtLmlkZW50aWZpZXIgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBsaXN0R3BzO1xuICB9XG4gIGdldExpc3RXaGljaE9iamVjdChmb3JtSWQpIHtcbiAgICBjb25zdCBnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPSBKU09OLnBhcnNlKHRoaXMuX2N1c3RvbWVTdG9yYWdlLnJlYWQoZm9ybUlkKSlcbiAgICBjb25zdCBsaXN0d2hpY2hvYmplY3QgPSBbXVxuICAgIGdldEZvcm1EZXRhaWxzU3RvcmFnZS53aWRnZXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS5uYW1lID09IFwiQ2hvaWNlIExpc3RcIikge1xuICAgICAgICBsaXN0d2hpY2hvYmplY3QucHVzaCh7IHZhbHVlOiBpdGVtLmlkZW50aWZpZXIsIHRleHQ6IGl0ZW0uaWRlbnRpZmllciB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGxpc3R3aGljaG9iamVjdDtcbiAgfVxuXG4gIGdldEV4aXN0aW5nTGlzdFdpZGdldE9iamVjdChmb3JtSWQpe1xuICAgIGNvbnN0IGdldEZvcm1EZXRhaWxzU3RvcmFnZSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZChmb3JtSWQpKVxuICAgIGNvbnN0IGV4aGlzdGluZ2xpc3R3aWRnZXRvYmplY3QgPSBbXVxuICAgIGdldEZvcm1EZXRhaWxzU3RvcmFnZS53aWRnZXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGV4aGlzdGluZ2xpc3R3aWRnZXRvYmplY3QucHVzaCh7IHZhbHVlOiBpdGVtLmlkZW50aWZpZXIsIHRleHQ6IGl0ZW0uaWRlbnRpZmllciB9KVxuICAgIH0pXG4gICAgcmV0dXJuIGV4aGlzdGluZ2xpc3R3aWRnZXRvYmplY3Q7XG4gIH1cblxuICBnZXRXaWRnZXRzTGlzdChmb3JtSWQpIHtcbiAgICB2YXIgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGZvcm1JZCkpO1xuICAgIGlmIChnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPT09IG51bGwpe1xuICAgICAgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKCdfc3RhdGljRm9ybU9iamVjdCcgKyBmb3JtSWQpKTtcbiAgICB9XG4gICAgY29uc3Qgd2lkZ2V0TGlzdCA9IGdldEZvcm1EZXRhaWxzU3RvcmFnZS53aWRnZXRzLm1hcChpdGVtID0+ICh7IHZhbHVlOiBpdGVtLCB0ZXh0OiBpdGVtIH0pKTtcbiAgICByZXR1cm4gd2lkZ2V0TGlzdDtcbiAgfVxuICBcbiAgZ2V0RmlsdGVyZWRXaWRnZXRzTGlzdChmb3JtSWQpIHtcbiAgICB2YXIgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKGZvcm1JZCkpO1xuICAgIGlmIChnZXRGb3JtRGV0YWlsc1N0b3JhZ2UgPT09IG51bGwpe1xuICAgICAgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKCdfc3RhdGljRm9ybU9iamVjdCcgKyBmb3JtSWQpKTtcbiAgICB9XG4gICAgdmFyIHdpZGdldExpc3QgPSBbXTtcbiAgICBpZihnZXRGb3JtRGV0YWlsc1N0b3JhZ2Uud2lkZ2V0cyAhPT0gdW5kZWZpbmVkKXtcbiAgICB3aWRnZXRMaXN0ID0gZ2V0Rm9ybURldGFpbHNTdG9yYWdlLndpZGdldHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc0hpZGRlbiA9PSBmYWxzZSk7XG4gICAgICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0TGlzdDtcbiAgfVxuICBcbiAgZ2V0RmllbGRMaXN0VmFsaWRpdHkoZm9ybUlkKSB7XG4gICAgbGV0IGdldEZvcm1EZXRhaWxzU3RvcmFnZSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZChmb3JtSWQpKTtcbiAgICBpZiAoZ2V0Rm9ybURldGFpbHNTdG9yYWdlID09PSBudWxsKXtcbiAgICAgIGdldEZvcm1EZXRhaWxzU3RvcmFnZSA9IEpTT04ucGFyc2UodGhpcy5fY3VzdG9tZVN0b3JhZ2UucmVhZCgnX3N0YXRpY0Zvcm1PYmplY3QnICsgZm9ybUlkKSk7XG4gICAgICBpZihnZXRGb3JtRGV0YWlsc1N0b3JhZ2Uud2lkZ2V0cyA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgZ2V0Rm9ybURldGFpbHNTdG9yYWdlID0gdGhpcy5fZm9ybVsnX3ZhbHVlJ107XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIERlZmluZSB0aGUgZGVzaXJlZCBzdWJ0eXBlc1xuICAgIGNvbnN0IGRlc2lyZWRUeXBlcyA9IFsndGV4dGJveC13aWRnZXQnLCAnY2hvaWNlbGlzdC13aWRnZXQnLCAnY291bnRlci13aWRnZXQnLCAnaW1hZ2VjYXB0dXJlLXdpZGdldCcsICdjYXB0dXJlZ3BzbG9jYXRpb24td2lkZ2V0JywgJ2NoaWxkcmVjb3Jkcy13aWRnZXQnLCAneWVzX25vLXdpZGdldCcsICdxcmNvZGVzc2Nhbm5lci13aWRnZXQnLCAnYmFyY29kZXNzY2FubmVyLXdpZGdldCcsICdjb21wdXRlZHZhbHVlLXdpZGdldCcsJ3N1YmZvcm0td2lkZ2V0J107IC8vIEFkZCBtb3JlIHN1YnR5cGVzIGFzIG5lZWRlZFxuICAgIFxuICAgIC8vIEZpbHRlciB3aWRnZXRzIGJhc2VkIG9uIHRoZSBkZXNpcmVkIHN1YnR5cGVzXG4gICAgY29uc3QgZXh0cmFjdFdpZGdldHMgPSBpdGVtID0+XG4gICAgICBpdGVtLnR5cGUgPT09ICdzdWJmb3JtLXdpZGdldCcgJiYgaXRlbS5tYXJrdXBcbiAgICAgICAgPyBpdGVtLm1hcmt1cC5mbGF0TWFwKGV4dHJhY3RXaWRnZXRzKVxuICAgICAgICA6IFt7IHZhbHVlOiBpdGVtLCB0ZXh0OiBpdGVtIH1dO1xuICAgIFxuICAgIGNvbnN0IHdpZGdldExpc3QgPSBnZXRGb3JtRGV0YWlsc1N0b3JhZ2Uud2lkZ2V0cy5mbGF0TWFwKGl0ZW0gPT5cbiAgICAgIGRlc2lyZWRUeXBlcy5pbmNsdWRlcyhpdGVtLnR5cGUpICYmICFpdGVtLmlzSGlkZGVuID8gZXh0cmFjdFdpZGdldHMoaXRlbSkgOiBbXVxuICAgICk7XG4gICAgcmV0dXJuIHdpZGdldExpc3Q7XG4gIH1cbiAgXG5cbiAgZ2V0RmllbGRPYmplY3QoZmllbGRJZDogc3RyaW5nKTogYW55IHtcbiAgICBmb3IgKGxldCBpID0gdGhpcy5hbGxGb3JtRmllbGRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5hbGxGb3JtRmllbGRzW2ldLmlkZW50aWZpZXIgPT09IGZpZWxkSWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsRm9ybUZpZWxkc1tpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcmVjb21waWxlQ29uZGl0aW9ucyhub2RlczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgc3BhY2UgPSBcIiBcIjtcbiAgICBsZXQgamF2YXNjcmlwdCA9IFwiKFwiO1xuICAgIGxldCBmaXJzdF9ub2RlID0gdHJ1ZTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBub2RlID0gbm9kZXNbaV07XG4gICAgICBpZiAobm9kZS50eXBlID09PSBcImNvbmRpdGlvbl9ncm91cFwiIHx8IG5vZGUudHlwZSA9PT0gMikge1xuICAgICAgICBpZiAoIWZpcnN0X25vZGUpIHtcbiAgICAgICAgICBqYXZhc2NyaXB0ICs9IHNwYWNlICsgdGhpcy5jb21waWxlT3BlcmF0b3Iobm9kZS5vcGVyYXRvcikgKyBzcGFjZTtcbiAgICAgICAgfVxuICAgICAgICBqYXZhc2NyaXB0ICs9IHRoaXMucHJlY29tcGlsZUNvbmRpdGlvbnMobm9kZS5ub2Rlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWZpcnN0X25vZGUpIHtcbiAgICAgICAgICBqYXZhc2NyaXB0ICs9IHNwYWNlICsgdGhpcy5jb21waWxlT3BlcmF0b3Iobm9kZS5vcGVyYXRvcikgKyBzcGFjZTtcbiAgICAgICAgfVxuICAgICAgICBqYXZhc2NyaXB0ICs9IHRoaXMuY29tcGlsZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTtcbiAgICAgIH1cbiAgICAgIGZpcnN0X25vZGUgPSBmYWxzZTtcbiAgICB9XG4gICAgamF2YXNjcmlwdCArPSBcIilcIjtcbiAgICByZXR1cm4gamF2YXNjcmlwdDtcbiAgfVxuXG4gIGNvbXBpbGVPcGVyYXRvcihvcDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICBjYXNlIFwiQU5EXCI6XG4gICAgICAgIHJldHVybiBcIiYmXCI7XG4gICAgICBjYXNlIFwiT1JcIjpcbiAgICAgICAgcmV0dXJuIFwifHxcIjtcbiAgICAgIGNhc2UgXCJpcyBlcXVhbCB0b1wiOlxuICAgICAgY2FzZSBcImVxdWFsc1wiOlxuICAgICAgICByZXR1cm4gXCI9PVwiO1xuICAgICAgY2FzZSBcImRvZXMgbm90IGVxdWFsXCI6XG4gICAgICBjYXNlIFwiaXMgbm90IGVxdWFsIHRvXCI6XG4gICAgICAgIHJldHVybiBcIiE9PVwiO1xuICAgICAgY2FzZSBcImlzIGxlc3MgdGhhblwiOlxuICAgICAgY2FzZSBcImNvbWVzIGJlZm9yZVwiOlxuICAgICAgICByZXR1cm4gXCI8XCI7XG4gICAgICBjYXNlIFwiaXMgbGVzcyB0aGFuIG9yIGVxdWFsXCI6XG4gICAgICAgIHJldHVybiBcIjw9XCI7XG4gICAgICBjYXNlIFwiaXMgZ3JlYXRlciB0aGFuXCI6XG4gICAgICBjYXNlIFwiY29tZXMgYWZ0ZXJcIjpcbiAgICAgICAgcmV0dXJuIFwiPlwiO1xuICAgICAgY2FzZSBcImlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbFwiOlxuICAgICAgICByZXR1cm4gXCI+PVwiO1xuICAgICAgY2FzZSBcImNvdW50IGVxdWFsIHRvXCI6XG4gICAgICAgIHJldHVybiBcIi5sZW5ndGggPT1cIjtcbiAgICAgIGNhc2UgXCJjb3VudCBsZXNzIHRoYW5cIjpcbiAgICAgICAgcmV0dXJuIFwiLmxlbmd0aCA8XCI7XG4gICAgICBjYXNlIFwiY291bnQgZ3JlYXRlciB0aGFuXCI6XG4gICAgICAgIHJldHVybiBcIi5sZW5ndGggPlwiO1xuICAgICAgY2FzZSBcImNvbnRhaW5zXCI6XG4gICAgICAgIHJldHVybiBcIi5pbmNsdWRlc1wiOyAvLyBBZGRpbmcgY29udGFpbnMgY2FzZVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG9wO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBpbGVFeHByZXNzaW9uKGV4cDogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgc3BhY2UgPSBcIiBcIjtcbiAgICBsZXQgamF2YXNjcmlwdDtcbiAgICBjb25zdCBmaWVsZE9iaiA9IHRoaXMuZ2V0RmllbGRPYmplY3QoZXhwLmV4cHJlc3Npb25faWRlbnRpZmllcik7XG5cbiAgICBpZiAoZXhwLmV4cHJlc3Npb25fb3BlcmF0b3IgPT09IFwic3RhcnRzIHdpdGhcIikge1xuICAgICAgamF2YXNjcmlwdCA9IGAoJHt0aGlzLmNvbXBpbGVJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uX2lkZW50aWZpZXIsIGZpZWxkT2JqKX0pYDtcbiAgICAgIGphdmFzY3JpcHQgKz0gYC5pbmRleE9mKGA7XG4gICAgICBpZiAoZXhwLmV4cHJlc3Npb25fdmFsdWUgPT09IFwiZml4ZWQgdmFsdWVcIikge1xuICAgICAgICBqYXZhc2NyaXB0ICs9IHRoaXMuY29tcGlsZUV4cHJGaXhlZFZhbChleHAuZXhwcmVzc2lvbl92YWx1ZV9maXhlZCwgZmllbGRPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgamF2YXNjcmlwdCArPSB0aGlzLmNvbXBpbGVJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uX3ZhbHVlLCBmaWVsZE9iaik7XG4gICAgICB9XG4gICAgICBqYXZhc2NyaXB0ICs9IGApID09IDBgO1xuICAgIH1cbiAgICBlbHNlIGlmIChleHAuZXhwcmVzc2lvbl9vcGVyYXRvciA9PT0gXCJjb250YWluc1wiIHx8IGV4cC5leHByZXNzaW9uX29wZXJhdG9yID09PSBcImRvZXMgbm90IGNvbnRhaW5zXCIpIHsgLy8gSGFuZGxpbmcgY29udGFpbnMgYW5kIGRvZXMgbm90IGNvbnRhaW5cbiAgICAgIGlmIChleHAuZXhwcmVzc2lvbl9vcGVyYXRvciA9PT0gXCJkb2VzIG5vdCBjb250YWluc1wiKSB7XG4gICAgICAgICAgamF2YXNjcmlwdCA9IGAhKCR7dGhpcy5jb21waWxlSWRlbnRpZmllcihleHAuZXhwcmVzc2lvbl9pZGVudGlmaWVyLCBmaWVsZE9iail9LmluY2x1ZGVzKGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIGphdmFzY3JpcHQgPSBgKCR7dGhpcy5jb21waWxlSWRlbnRpZmllcihleHAuZXhwcmVzc2lvbl9pZGVudGlmaWVyLCBmaWVsZE9iail9LmluY2x1ZGVzKGA7XG4gICAgICB9XG4gICAgICBpZiAoZXhwLmV4cHJlc3Npb25fdmFsdWUgPT09IFwiZml4ZWQgdmFsdWVcIikge1xuICAgICAgICAgIGphdmFzY3JpcHQgKz0gdGhpcy5jb21waWxlRXhwckZpeGVkVmFsKGV4cC5leHByZXNzaW9uX3ZhbHVlX2ZpeGVkLCBmaWVsZE9iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIGphdmFzY3JpcHQgKz0gdGhpcy5jb21waWxlSWRlbnRpZmllcihleHAuZXhwcmVzc2lvbl92YWx1ZSwgZmllbGRPYmopO1xuICAgICAgfVxuICAgICAgamF2YXNjcmlwdCArPSBgKSlgO1xuICAgIH0gZWxzZSBpZiAoZmllbGRPYmogJiYgZmllbGRPYmoubWFpbl90eXBlID09PSBcImNob2ljZVwiKSB7XG4gICAgICBqYXZhc2NyaXB0ID0gYCgke3RoaXMuY29tcGlsZUlkZW50aWZpZXIoZXhwLmV4cHJlc3Npb25faWRlbnRpZmllciwgZmllbGRPYmopfSlgO1xuICAgICAgaWYgKGV4cC5leHByZXNzaW9uX3ZhbHVlID09PSBcImVtcHR5IHZhbHVlXCIpIHtcbiAgICAgICAgaWYgKGV4cC5leHByZXNzaW9uX29wZXJhdG9yID09PSBcImNvbnRhaW5zXCIpIHtcbiAgICAgICAgICBqYXZhc2NyaXB0ICs9IGAubGVuZ3RoID09IDBgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGphdmFzY3JpcHQgKz0gYC5sZW5ndGggPiAwYDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgamF2YXNjcmlwdCArPSBgLmluZGV4T2YoYDtcbiAgICAgICAgaWYgKGV4cC5leHByZXNzaW9uX3ZhbHVlID09PSBcImZpeGVkIHZhbHVlXCIpIHtcbiAgICAgICAgICBqYXZhc2NyaXB0ICs9IHRoaXMuY29tcGlsZUV4cHJGaXhlZFZhbChleHAuZXhwcmVzc2lvbl92YWx1ZV9maXhlZCwgZmllbGRPYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGphdmFzY3JpcHQgKz0gdGhpcy5jb21waWxlSWRlbnRpZmllcihleHAuZXhwcmVzc2lvbl92YWx1ZSwgZmllbGRPYmopO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHAuZXhwcmVzc2lvbl9vcGVyYXRvciA9PT0gXCJjb250YWluc1wiKSB7XG4gICAgICAgICAgamF2YXNjcmlwdCArPSBgKSAhPSAtMWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgamF2YXNjcmlwdCArPSBgKSA9PSAtMWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgamF2YXNjcmlwdCA9IHRoaXMuY29tcGlsZUlkZW50aWZpZXIoZXhwLmV4cHJlc3Npb25faWRlbnRpZmllciwgZmllbGRPYmopO1xuICAgICAgaWYgKGV4cC5leHByZXNzaW9uX29wZXJhdG9yLmluY2x1ZGVzKFwiY291bnRcIikpIHtcbiAgICAgICAgamF2YXNjcmlwdCArPSB0aGlzLmNvbXBpbGVPcGVyYXRvcihleHAuZXhwcmVzc2lvbl9vcGVyYXRvcikgKyBzcGFjZTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwLmV4cHJlc3Npb25fdmFsdWUgPT09IFwiZW1wdHkgdmFsdWVcIiAmJiBmaWVsZE9iaiAmJiBmaWVsZE9iai5tYWluVHlwZSA9PT0gXCJkYXRlXCIpIHtcbiAgICAgICAgamF2YXNjcmlwdCA9IGV4cC5leHByZXNzaW9uX2lkZW50aWZpZXIgKyBzcGFjZSArIHRoaXMuY29tcGlsZU9wZXJhdG9yKGV4cC5leHByZXNzaW9uX29wZXJhdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGphdmFzY3JpcHQgKz0gc3BhY2UgKyB0aGlzLmNvbXBpbGVPcGVyYXRvcihleHAuZXhwcmVzc2lvbl9vcGVyYXRvcikgKyBzcGFjZTtcbiAgICAgIH1cbiAgICAgIGlmIChleHAuZXhwcmVzc2lvbl92YWx1ZSA9PT0gXCJmaXhlZCB2YWx1ZVwiKSB7XG4gICAgICAgIGphdmFzY3JpcHQgKz0gdGhpcy5jb21waWxlRXhwckZpeGVkVmFsKGV4cC5leHByZXNzaW9uX3ZhbHVlX2ZpeGVkLCBmaWVsZE9iaik7XG4gICAgICB9IGVsc2UgaWYgKGV4cC5leHByZXNzaW9uX3ZhbHVlID09PSBcImVtcHR5IHZhbHVlXCIpIHtcbiAgICAgICAgamF2YXNjcmlwdCArPSBgJydgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgamF2YXNjcmlwdCArPSBzcGFjZSArIHRoaXMuY29tcGlsZUlkZW50aWZpZXIoZXhwLmV4cHJlc3Npb25fdmFsdWUsIGZpZWxkT2JqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gamF2YXNjcmlwdDtcbiAgfVxuXG4gIGNvbXBpbGVJZGVudGlmaWVyKGlkZW50aWZpZXI6IHN0cmluZywgZmllbGRPYmo6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGZpZWxkT2JqICYmIGZpZWxkT2JqLm1haW5UeXBlID09PSBcImRhdGVcIikge1xuICAgICAgaWYgKGlkZW50aWZpZXIgPT09IFwiZW1wdHlfdmFsdWVcIiB8fCBpZGVudGlmaWVyID09PSBcImVtcHR5IHZhbHVlXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiJydcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgbmV3IERhdGUoJHtpZGVudGlmaWVyfSkuZ2V0VGltZSgpYDtcbiAgICB9XG4gICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gIH1cblxuICBjb21waWxlRXhwckZpeGVkVmFsKHZhbDogYW55LCBvYmo6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKG9iaiAmJiBvYmoubWFpblR5cGUgPT09IFwidGV4dFwiICYmIG9iai5pbnB1dFR5cGUgPT09IFwibnVtZXJpY1wiKSB7XG4gICAgICByZXR1cm4gYCAke3ZhbH1gO1xuICAgIH1cbiAgICBpZiAob2JqICYmIG9iai5tYWluVHlwZSA9PT0gXCJkYXRlXCIpIHtcbiAgICAgIHJldHVybiBgbmV3IERhdGUoJyR7dmFsfScpLmdldFRpbWUoKWA7XG4gICAgfSBlbHNlIGlmIChvYmogJiYgb2JqLm1haW5UeXBlID09PSBcInllc19ub1wiKSB7XG4gICAgICBpZiAodmFsID09PSBcIlllc1wiKSB7XG4gICAgICAgIHJldHVybiBcIicxJ1wiO1xuICAgICAgfSBlbHNlIGlmICh2YWwgPT09IFwiTm9cIikge1xuICAgICAgICByZXR1cm4gXCInMCdcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgICcke3ZhbH0nYDtcbiAgICB9XG4gIH1cbiAgXG4gIFxuXG4gIC8vIFVwZGF0ZSBvbmx5IGZvcm0gc2NyaXB0XG4gIGFzeW5jIHVwZGF0ZUZvcm1TY3JpcHREZXRhaWxzKGZvcm1TY3JpcHREYXRhOiBhbnksIGZvcm1JZDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBmb3JtU2NyaXB0RGV0YWlscyA9IHtcbiAgICAgIGZvcm1faWQ6IGZvcm1JZCxcbiAgICAgIGZvcm1fc2NyaXB0OiBmb3JtU2NyaXB0RGF0YVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5faHR0cENsaWVudC5wb3N0KHRoaXMuY29tbW9uTGliQ29uZmlnLmF4b25hdG9yWDFVcmwgKyAnc2F2ZUZvcm1TY3JpcHQvJywgZm9ybVNjcmlwdERldGFpbHMpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0sIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBHZXQgbGFuZ3VhZ2VzMjJcbiAgZ2V0Rm9ybUxhbmd1YWdlcyhmb3JtSWQpIHtcbiAgICBjb25zdCBmb3JtID0gSlNPTi5wYXJzZSh0aGlzLl9jdXN0b21lU3RvcmFnZS5yZWFkKCdfc3RhdGljRm9ybU9iamVjdCcgKyBmb3JtSWQpKVxuICAgIGlmIChmb3JtICYmIGZvcm0ubGFuZ3VhZ2VzMjIpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFwiY29kZVwiIHZhbHVlcyBmcm9tIHRoZSBcImxhbmd1YWdlczIyXCIgYXJyYXlcbiAgICAgIGNvbnN0IGNvZGVzID0gZm9ybS5sYW5ndWFnZXMyMlxuICAgICAgICAuZmlsdGVyKEFycmF5LmlzQXJyYXkpIC8vIEZpbHRlciBvdXQgbm9uLWFycmF5IGVsZW1lbnRzXG4gICAgICAgIC5tYXAoYXJyID0+IGFyci5tYXAoaXRlbSA9PiBpdGVtLmNvZGUpKSAvLyBNYXAgdG8gXCJjb2RlXCIgdmFsdWVzXG5cbiAgICAgIC8vIEZsYXR0ZW4gdGhlIHJlc3VsdCB0byBnZXQgYSBzaW5nbGUgYXJyYXkgb2YgY29kZXNcbiAgICAgIGNvbnN0IGZsYXR0ZW5lZENvZGVzID0gW10uY29uY2F0KC4uLmNvZGVzKTtcbiAgICAgIHJldHVybiBmbGF0dGVuZWRDb2RlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVwbG9hZCBmb3JtIGljb25cbiAgdXBsb2FkRm9ybUljb24oZm9ybUljb246IGFueSwgZm9ybUlkOiBhbnkpIHtcbiAgICBjb25zdCB1cGRhdGVEYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgZGVmYXVsSWNvbiA9IGZvcm1JY29uID8gJzAnIDogJzEnO1xuICAgIHVwZGF0ZURhdGEuYXBwZW5kKCdkZWZhdWx0X2ljb24nLCBkZWZhdWxJY29uKTtcbiAgICB1cGRhdGVEYXRhLmFwcGVuZCgnZm9ybV9pZCcsIGZvcm1JZCk7XG4gICAgaWYgKGZvcm1JY29uKSB7XG4gICAgICB1cGRhdGVEYXRhLmFwcGVuZCgnZm9ybWljb24nLCBmb3JtSWNvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9odHRwQ2xpZW50LnBvc3QodGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCArICdzYXZlRm9ybUljb24vJywgdXBkYXRlRGF0YSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UuZm9ybUljb24uZmlsZXBhdGgpO1xuICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcblxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVXaWRnZXREZWxpdGlvbihkZWxldGluZ19pZCwgZm9ybV9pZCwgd2lkZ2V0LCBpc0Zvcm1GcmVzaCk6IFByb21pc2U8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDaGVja2luZyB3aWRnZXQgdmFsaWRpdHlEZXBlbmRlbnRzIGFuZCBkZXBlbmRlbnRzLi4uXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIldpZGdldDpcIiwgd2lkZ2V0KTtcblxuICAgICAgICBjb25zdCBoYXNWYWxpZGl0eURlcGVuZGVudHMgPSB3aWRnZXQudmFsaWRpdHlEZXBlbmRlbnRzICYmIHdpZGdldC52YWxpZGl0eURlcGVuZGVudHMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgaGFzRGVwZW5kZW50cyA9IHdpZGdldC5kZXBlbmRlbnRzICYmIHdpZGdldC5kZXBlbmRlbnRzLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgY29uc3QgdmFsaWRpdHlEZXBlbmRlbnRzQ29uZGl0aW9uID0gIXdpZGdldC52YWxpZGl0eURlcGVuZGVudHMgfHwgd2lkZ2V0LnZhbGlkaXR5RGVwZW5kZW50cy5sZW5ndGggPT09IDA7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVudHNDb25kaXRpb24gPSAhd2lkZ2V0LmRlcGVuZGVudHMgfHwgd2lkZ2V0LmRlcGVuZGVudHMubGVuZ3RoID09PSAwO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVmFsaWRpdHlEZXBlbmRlbnRzQ29uZGl0aW9uOlwiLCB2YWxpZGl0eURlcGVuZGVudHNDb25kaXRpb24pO1xuICAgICAgICBjb25zb2xlLmxvZyhcIkRlcGVuZGVudHNDb25kaXRpb246XCIsIGRlcGVuZGVudHNDb25kaXRpb24pO1xuXG4gICAgICAgIGlmICghKHZhbGlkaXR5RGVwZW5kZW50c0NvbmRpdGlvbiAmJiBkZXBlbmRlbnRzQ29uZGl0aW9uKSkge1xuICAgICAgICAgICAgLy8gSWYgZWl0aGVyIGNvbmRpdGlvbiBpcyB0cnVlLCBwcm9jZWVkIHRvIHRoZSBlbHNlIGJsb2NrXG4gICAgICAgICAgICBpZiAoaGFzVmFsaWRpdHlEZXBlbmRlbnRzKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoXCJJZGVudGlmaWVyIHVzZWQgaW4gVmFsaWRpdHkgQ29uZGl0aW9ucyBvZiBGaWVsZCBcIiArIHdpZGdldC52YWxpZGl0eURlcGVuZGVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0RlcGVuZGVudHMpIHtcbiAgICAgICAgICAgICAgICBhbGVydChcIklkZW50aWZpZXIgdXNlZCBpbiBWaXNpYmlsaXR5IENvbmRpdGlvbnMgb2YgRmllbGQgXCIgKyB3aWRnZXQuZGVwZW5kZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZighaXNGb3JtRnJlc2gpe1xuICAgICAgICAgICAgICAvLyBJZiBib3RoIGNvbmRpdGlvbnMgYXJlIGZhbHNlLCBwcm9jZWVkIHdpdGggdGhlIEhUVFAgcmVxdWVzdFxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvbmRpdGlvbnMgbWV0LCBwcm9jZWVkaW5nIHdpdGggSFRUUCByZXF1ZXN0Li4uXCIpO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5faHR0cENsaWVudC5wb3N0KHRoaXMuY29tbW9uTGliQ29uZmlnLmF4b25hdG9yWDFVcmwgKyAndmFsaWRhdGVXaWRnZXREZWxpdGlvbi8nLCB7IGRlbGV0aW5nX2lkLCBmb3JtX2lkIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkhUVFAgcmVxdWVzdCBzdWNjZXNzZnVsOlwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJIVFRQIHJlcXVlc3QgZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgcmV0dXJuIHtpc19kZWxldGFibGUgOiB0cnVlfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluIHZhbGlkYXRlV2lkZ2V0RGVsaXRpb246XCIsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufVxuXG4gIHByZXByb2Nlc3NWYWxpZGl0eUNvbmRpdGlvbnMob3V0cHV0OiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgX3Jlc3VsdHM6IGFueVtdID0gW107XG4gICAgdmFyIHdpZGdldCwgaSwgbGVuO1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IG91dHB1dC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgd2lkZ2V0ID0gb3V0cHV0W2ldO1xuICAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHZhbGlkaXR5IGRlcGVuZGVudHNcbiAgICAgIHRoaXMucmVtb3ZlRGVwZW5kZW50cyhvdXRwdXQsIHdpZGdldC5pZGVudGlmaWVyLCAndmFsaWRpdHlEZXBlbmRlbnRzJyk7XG4gICAgICBpZiAod2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucykge1xuICAgICAgICAvLyBKU09OIHBhcnNpbmcgZm9yIHN0cmluZyB2YWxpZGl0eSBjb25kaXRpb25zXG4gICAgICAgIGlmICh0eXBlb2Ygd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucyA9PT0gJ3N0cmluZycgJiYgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucy50cmltKCkgIT09ICdcIlwiJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zID0gSlNPTi5wYXJzZSh3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBKU09OIGZvcm1hdCBmb3IgdmFsaWRpdHlDb25kaXRpb25zOlwiLCB3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYod2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucyA9PSAnXCJcIicpXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHdpZGdldC52YWxpZGl0eUNvbmRpdGlvbnM7XG4gICAgICAgICAgICBkZWxldGUgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9uSnM7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aWRnZXQudmFsaWRpdHlDb25kaXRpb25zLm5vZGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucy5ub2Rlc1swXS5ub2RlcyAmJlxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucy5ub2Rlc1swXS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkZWxldGUgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9ucztcbiAgICAgICAgICBkZWxldGUgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9uSnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9uSnMgPSB0aGlzLnByZWNvbXBpbGVDb25kaXRpb25zKHdpZGdldC52YWxpZGl0eUNvbmRpdGlvbnMubm9kZXMpO1xuICAgICAgICAgIHRoaXMudHJhdmVyc2VBbmRWaXNpdChvdXRwdXQsIHdpZGdldC52YWxpZGl0eUNvbmRpdGlvbnMubm9kZXMsIHdpZGdldC5pZGVudGlmaWVyLCBcInZhbGlkaXR5RGVwZW5kZW50c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkZ2V0LnZhbGlkaXR5Q29uZGl0aW9uSnMgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAod2lkZ2V0Lm1hcmt1cCAmJiB3aWRnZXQudHlwZSA9PSAnc3ViZm9ybS13aWRnZXQnKSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy4gcHJlcHJvY2Vzc1ZhbGlkaXR5Q29uZGl0aW9ucyh3aWRnZXQubWFya3VwKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfcmVzdWx0cztcbiAgfVxuXG4gIHByZXByb2Nlc3NWaXNpZGlsaXR5Q29uZGl0aW9ucyhvdXRwdXQ6IGFueVtdKTogYW55W10ge1xuICAgIGxldCBfcmVzdWx0czogYW55W10gPSBbXTtcbiAgICB2YXIgd2lkZ2V0LCBpLCBsZW47XG4gICAgZm9yIChpID0gMCwgbGVuID0gb3V0cHV0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB3aWRnZXQgPSBvdXRwdXRbaV07XG4gICAgICAvLyBSZW1vdmUgZXhpc3RpbmcgZGVwZW5kZW50c1xuICAgICAgdGhpcy5yZW1vdmVEZXBlbmRlbnRzKG91dHB1dCwgd2lkZ2V0LmlkZW50aWZpZXIsICdkZXBlbmRlbnRzJyk7XG4gICAgICBpZiAod2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25zKSB7XG4gICAgICAgIC8vIEpTT04gcGFyc2luZyBmb3Igc3RyaW5nIHZhbGlkaXR5IGNvbmRpdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMgPT09ICdzdHJpbmcnICYmIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucy50cmltKCkgIT09ICdcIlwiJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMgPSBKU09OLnBhcnNlKHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucyk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgSlNPTiBmb3JtYXQgZm9yIHZpc2liaWxpdHlDb25kaXRpb25zOlwiLCB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZih3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMgPT0gJ1wiXCInKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlbGV0ZSB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnM7XG4gICAgICAgICAgICBkZWxldGUgd2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25KcztcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAod2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25zLm5vZGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgd2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25zLm5vZGVzWzBdLm5vZGVzICYmXG4gICAgICAgICAgICB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbnMubm9kZXNbMF0ubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucztcbiAgICAgICAgICBkZWxldGUgd2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25KczsgIFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9uSnMgPSB0aGlzLnByZWNvbXBpbGVDb25kaXRpb25zKHdpZGdldC52aXNpYmlsaXR5Q29uZGl0aW9ucy5ub2Rlcyk7XG4gICAgICAgICAgdGhpcy50cmF2ZXJzZUFuZFZpc2l0KG91dHB1dCwgd2lkZ2V0LnZpc2liaWxpdHlDb25kaXRpb25zLm5vZGVzLCB3aWRnZXQuaWRlbnRpZmllciwgXCJkZXBlbmRlbnRzXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWRnZXQudmlzaWJpbGl0eUNvbmRpdGlvbkpzID0gXCJcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHdpZGdldC5tYXJrdXAgJiYgd2lkZ2V0LnR5cGUgPT0gJ3N1YmZvcm0td2lkZ2V0Jykge1xuICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMucHJlcHJvY2Vzc1Zpc2lkaWxpdHlDb25kaXRpb25zKHdpZGdldC5tYXJrdXApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9yZXN1bHRzO1xuICB9XG5cbiAgdHJhdmVyc2VBbmRWaXNpdChmaWVsZEFycmF5OiBhbnlbXSwgbm9kZXM6IGFueVtdLCBpZDogc3RyaW5nLCBkZXBlbmRlbnRzVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gXCJjb25kaXRpb25fZ3JvdXBcIiB8fCBub2RlLnR5cGUgPT09IDIpIHtcbiAgICAgICAgdGhpcy50cmF2ZXJzZUFuZFZpc2l0KGZpZWxkQXJyYXksIG5vZGUubm9kZXMsIGlkLCBkZXBlbmRlbnRzVHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgd2lkZ2V0ID0gdGhpcy5maW5kQnlJZChmaWVsZEFycmF5LCBub2RlLmV4cHJlc3Npb24uZXhwcmVzc2lvbl9pZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKHdpZGdldCkge1xuICAgICAgICAgIGlmICghd2lkZ2V0W2RlcGVuZGVudHNUeXBlXSkge1xuICAgICAgICAgICAgd2lkZ2V0W2RlcGVuZGVudHNUeXBlXSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXdpZGdldFtkZXBlbmRlbnRzVHlwZV0uaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICB3aWRnZXRbZGVwZW5kZW50c1R5cGVdLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uLmV4cHJlc3Npb25fdmFsdWUgIT09IFwiZml4ZWQgdmFsdWVcIikge1xuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb25fd2lkZ2V0ID0gdGhpcy5maW5kQnlJZChmaWVsZEFycmF5LCBub2RlLmV4cHJlc3Npb24uZXhwcmVzc2lvbl92YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbl93aWRnZXQpIHtcbiAgICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uX3dpZGdldFtkZXBlbmRlbnRzVHlwZV0pIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uX3dpZGdldFtkZXBlbmRlbnRzVHlwZV0gPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb25fd2lkZ2V0W2RlcGVuZGVudHNUeXBlXS5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uX3dpZGdldFtkZXBlbmRlbnRzVHlwZV0ucHVzaChpZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaW5kQnlJZChmaWVsZEFycmF5OiBhbnlbXSwgaWQ6IHN0cmluZyk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChsZXQgd2lkZ2V0IG9mIGZpZWxkQXJyYXkpIHtcbiAgICAgIGlmICh3aWRnZXQuaWRlbnRpZmllciA9PT0gaWQpIHtcbiAgICAgICAgcmV0dXJuIHdpZGdldDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgfVxuXG4gIHJlbW92ZURlcGVuZGVudHMod2lkZ2V0czogYW55W10sIHdpZGdldElkOiBzdHJpbmcsIGRlcGVuZGVudFR5cGU6ICdkZXBlbmRlbnRzJyB8ICd2YWxpZGl0eURlcGVuZGVudHMnIHwgJ2RlcGVuZGFudCcpOiB2b2lkIHtcbiAgICB3aWRnZXRzLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgIGlmICh3aWRnZXRbZGVwZW5kZW50VHlwZV0gJiYgd2lkZ2V0W2RlcGVuZGVudFR5cGVdLmluY2x1ZGVzKHdpZGdldElkKSkge1xuICAgICAgICB3aWRnZXRbZGVwZW5kZW50VHlwZV0gPSB3aWRnZXRbZGVwZW5kZW50VHlwZV0uZmlsdGVyKGlkID0+IGlkICE9PSB3aWRnZXRJZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBcbn1cbiJdfQ==