@provoly/dashboard 0.22.7 → 0.22.9

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.
@@ -532,14 +532,19 @@ export class WidgetMapComponent extends DataWidgetComponent {
532
532
  this.map.setLayers([...mapStyleLayer]);
533
533
  }
534
534
  }));
535
- this.subscriptions.add(combineLatest([this.wmsFeatures$, this.classicFeatures$, this.widgetSize$, this.displayHeader$]).subscribe(([wmsFeatures, classicFeatures, size, header]) => {
535
+ this.subscriptions.add(combineLatest([this.wmsFeatures$, this.classicFeatures$])
536
+ .pipe(withLatestFrom(this.widgetSize$, this.displayHeader$))
537
+ .subscribe(([[wmsFeatures, classicFeatures], size, header]) => {
536
538
  if (this.map) {
537
539
  this.tooltipIndex = 0;
538
- const popupOverlay = new Overlay({
540
+ if (this.popupOverlay !== null) {
541
+ this.clearTooltip();
542
+ }
543
+ this.popupOverlay = new Overlay({
539
544
  element: this.popup.nativeElement,
540
545
  offset: [9, 9]
541
546
  });
542
- this.map.addOverlay(popupOverlay);
547
+ this.map.addOverlay(this.popupOverlay);
543
548
  this.popupContent.clear();
544
549
  const componentPromises = [];
545
550
  wmsFeatures.forEach((value) => {
@@ -553,7 +558,7 @@ export class WidgetMapComponent extends DataWidgetComponent {
553
558
  this.tooltipNumber = realComponents.length;
554
559
  if (realComponents.length <= 0) {
555
560
  this.popup.nativeElement.hidden = true;
556
- popupOverlay.setPosition([-9999999999, -9999999999]);
561
+ this.popupOverlay?.setPosition([-9999999999, -9999999999]);
557
562
  }
558
563
  else {
559
564
  this.popup.nativeElement.hidden = false;
@@ -572,11 +577,21 @@ export class WidgetMapComponent extends DataWidgetComponent {
572
577
  setTimeout(() => {
573
578
  this.tooltipMove(0);
574
579
  }, 10);
575
- popupOverlay.setPosition(this.map.getCoordinateFromPixel(pixel ?? [0, 0]));
580
+ this.popupOverlay?.setPosition(this.map.getCoordinateFromPixel(pixel ?? [0, 0]));
576
581
  }
577
582
  });
578
583
  }
579
584
  }));
585
+ window.addEventListener('forceCloseMapTooltip', () => {
586
+ this.clearTooltip();
587
+ });
588
+ }
589
+ clearTooltip() {
590
+ if (this.popupOverlay)
591
+ this.map.removeOverlay(this.popupOverlay);
592
+ this.popupContent.clear();
593
+ this.previousTooltip?.destroy();
594
+ this.previousTooltipSub?.unsubscribe();
580
595
  }
581
596
  addEmptyWebGlLayerBelowSlideHeatmaps(layers) {
582
597
  const _layers = [];
@@ -888,7 +903,7 @@ export class WidgetMapComponent extends DataWidgetComponent {
888
903
  FEATURE_COUNT: 10,
889
904
  ...layer.getProperties()['getFeatureInfoAdditionalParameters']
890
905
  });
891
- if (url) {
906
+ if (url && url.indexOf('I=-1') === -1 && url.indexOf('J=-1') === -1) {
892
907
  this.store.dispatch(DashboardActions.getWmsFeatures({
893
908
  url,
894
909
  oClass: layer.getProperties()['oClass'] ?? '',
@@ -1089,4 +1104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
1089
1104
  type: ViewChild,
1090
1105
  args: ['sliderElement']
1091
1106
  }] } });
1092
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1tYXAvY29tcG9uZW50L3dpZGdldC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBT0wsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsbUJBQW1CLEVBRW5CLGNBQWMsRUFFZCxXQUFXLEVBQ1gsbUJBQW1CLEVBRW5CLFNBQVMsRUFhVCxlQUFlLEVBQ2YsU0FBUyxFQUNULGlCQUFpQixFQUlqQixjQUFjLEVBR2QsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixlQUFlLEVBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFXLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhELE9BQU8sRUFBa0IsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWhELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMs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QztZQUM3QixDQUFDO1lBQ0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0E5OUNVLGtCQUFrQixtUUE0R1AsaUJBQWlCO2tHQTVHNUIsa0JBQWtCLG1UQUlNLGdCQUFnQixtSEFDVixXQUFXLHFKQzdIdEQsNm1yQkEyaEJBOzsyRkRuYWEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGdCQUFnQjs7MEJBK0d2QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQjt5Q0ExR2xCLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDQyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ3FDLFlBQVk7c0JBQWxFLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUNHLGtCQUFrQjtzQkFBekUsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQzFCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGlvblJlc3VsdCxcbiAgQXR0cmlidXRlLFxuICBCYXNlVG9vbHRpcENvbXBvbmVudCxcbiAgQmFzZVdpZGdldE1hcExheWVyT3B0aW9ucyxcbiAgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyxcbiAgQ2xhc3MsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBDb25maWdTZWxlY3RvcnMsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YXNldCxcbiAgRGF0YVNvdXJjZVNlbGVjdG9ycyxcbiAgRGF0YXNvdXJjZVV0aWxzLFxuICBEYXRhV2lkZ2V0Q29tcG9uZW50LFxuICBGaWVsZCxcbiAgRmllbGRTZWxlY3RvcnMsXG4gIEZpbHRlckNvbnRleHQsXG4gIEdlb01ldGFkYXRhLFxuICBHZW9tZXRyaWNGaWVsZFR5cGVzLFxuICBHZXRDYXBhYmlsaXRpZXNSZXNwb25zZSxcbiAgSXRlbVV0aWxzLFxuICBNYXBBdXRvTGF5ZXJPcHRpb25zLFxuICBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zLFxuICBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gIE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldE9wdGlvbnMsXG4gIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zLFxuICBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMsXG4gIE5hbWVkUXVlcnlUeXBlcyxcbiAgT3BlcmF0aW9uLFxuICBQUllfR0VPQVVUSF9UT0tFTixcbiAgUHJ5QWdncmVnYXRpb25TZXJ2aWNlLFxuICBQcnlHZW9BdXRoU2VydmljZSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFJlc3VsdHNldFV0aWxzLFxuICBTeW1ib2xTZXJ2aWNlLFxuICBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gIFRvb2x0aXBNb2RlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVCxcbiAgd2lkZ2V0TWFwQ29uZmlnXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBGZWF0dXJlLCBNYXAsIE92ZXJsYXksIFZpZXcgfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBDb29yZGluYXRlIH0gZnJvbSAnb2wvY29vcmRpbmF0ZSc7XG5pbXBvcnQgeyBib3VuZGluZ0V4dGVudCwgY3JlYXRlRW1wdHkgfSBmcm9tICdvbC9leHRlbnQnO1xuaW1wb3J0IHsgQ2lyY2xlLCBHZW9tZXRyeSwgUG9pbnQgfSBmcm9tICdvbC9nZW9tJztcbmltcG9ydCB7IEhlYXRtYXAsIExheWVyLCBUaWxlIH0gZnJvbSAnb2wvbGF5ZXInO1xuaW1wb3J0IEJhc2VMYXllciBmcm9tICdvbC9sYXllci9CYXNlJztcbmltcG9ydCBWZWN0b3JMYXllciBmcm9tICdvbC9sYXllci9WZWN0b3InO1xuaW1wb3J0IHsgUGl4ZWwgfSBmcm9tICdvbC9waXhlbCc7XG5pbXBvcnQgeyBmcm9tTG9uTGF0IH0gZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJ29sL3Byb2ovcHJvajQnO1xuaW1wb3J0IHsgRGF0YVRpbGUsIEltYWdlV01TLCBUaWxlV01TIH0gZnJvbSAnb2wvc291cmNlJztcbmltcG9ydCBWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgeyBTdHlsZSB9IGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCBwcm9qNCBmcm9tICdwcm9qNCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzdGFydFdpdGgsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB3aXRoTGF0ZXN0RnJvbVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uTWFuYWdlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLW1hbmFnZXIuY2xhc3MnO1xuaW1wb3J0IHsgQ3FsVXRpbHMgfSBmcm9tICcuLi91dGlscy9jcWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgWE1MVXRpbHMgfSBmcm9tICcuLi91dGlscy94bWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UnO1xuaW1wb3J0IE1hcGJveFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL01hcGJveFZlY3Rvcic7XG5pbXBvcnQgeyBXaWRnZXRNYXBVdGlscyB9IGZyb20gJy4uL3V0aWxzL3dpZGdldC1tYXAudXRpbHMnO1xuaW1wb3J0IHsgTGF5ZXJTbGlkZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9sYXllci1zbGlkZXIuY2xhc3MnO1xuaW1wb3J0IFRpbGVMYXllciBmcm9tICdvbC9sYXllci9UaWxlJztcbmltcG9ydCBXZWJHTFRpbGVMYXllciBmcm9tICdvbC9sYXllci9XZWJHTFRpbGUnO1xuaW1wb3J0IHsgQXR0cmlidXRpb24sIGRlZmF1bHRzIH0gZnJvbSAnb2wvY29udHJvbCc7XG5pbXBvcnQgVmVjdG9yVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3RvclRpbGUnO1xuXG5leHBvcnQgY29uc3QgVE9PTFRJUF9QQURESU5HID0gMTU7XG5leHBvcnQgY29uc3QgTk9OX01BTkRBVE9SWV9GSVRfTEFZRVJfVFlQRVMgPSBbJ3dtcycsICdnZW9zZXJ2ZXInXTtcblxuLy8gRGVmaW5lIExhbWJlcnQgUHJvamVjdGlvblxucHJvajQuZGVmcyhcbiAgJ0VQU0c6MjE1NCcsXG4gICcrcHJvaj1sY2MgK2xhdF8wPTQ2LjUgK2xvbl8wPTMgK2xhdF8xPTQ5ICtsYXRfMj00NCAreF8wPTcwMDAwMCAreV8wPTY2MDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnMgK3R5cGU9Y3JzJ1xuKTtcbnJlZ2lzdGVyKHByb2o0KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LW1hcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIG1hcFVybCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgQFZpZXdDaGlsZCgnbWFwUmVmJykgbWFwUmVmITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9wdXAnKSBwb3B1cCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcHVwQ29udGVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwb3B1cENvbnRlbnQhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBAVmlld0NoaWxkKCdleHBvcnRUeXBlVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGV4cG9ydFR5cGVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NsaWRlckVsZW1lbnQnKSBzbGlkZXJFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8TWFwV2lkZ2V0T3B0aW9ucz47XG4gIGxheWVyVHlwZXMgPSB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5pbXBsZW1lbnRhdGlvbkxpc3RcbiAgICAuZmlsdGVyKCh0eXBlKSA9PiB0eXBlICE9PSAnYXV0bycpXG4gICAgLnNvcnQoKGEsIGIpID0+XG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJyArIGEpXG4gICAgICAgIC5sb2NhbGVDb21wYXJlKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLicgKyBiKSlcbiAgICApO1xuICBvcHRpb25zQ29weTogTWFwV2lkZ2V0T3B0aW9ucyA9IHt9IGFzIE1hcFdpZGdldE9wdGlvbnM7XG4gIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICBzZWxlY3RlZElkcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBib3R0b21MZWZ0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBsYXllcnMkITogT2JzZXJ2YWJsZTxCYXNlTGF5ZXJbXT47XG4gIG1hcCE6IE1hcDtcbiAgYWRkaXRpb25hbExheWVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZlY3RvckxheWVyPFZlY3RvclNvdXJjZTxHZW9tZXRyeT4+W10+KFtdKTtcbiAgc3R5bGVzJDogT2JzZXJ2YWJsZTxcbiAgICB7XG4gICAgICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgICBsYWJlbDogc3RyaW5nO1xuICAgIH1bXVxuICA+O1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBpID0gMDtcbiAgaXRlbVN0eWxlcyQhOiBPYnNlcnZhYmxlPHtcbiAgICBbaWQ6IHN0cmluZ106IHtcbiAgICAgIGNsYXNzaWM6IFN0eWxlO1xuICAgICAgYm9yZGVyZWQ6IFN0eWxlO1xuICAgIH07XG4gIH0+O1xuICBoZWlnaHQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGFjdGlvbnMkID0gd2lkZ2V0TWFwQ29uZmlnLmFjdGlvbnMkO1xuICBwcml2YXRlIHdtc0ZlYXR1cmVzJDogT2JzZXJ2YWJsZTxhbnlbXT47XG4gIGNsYXNzaWNGZWF0dXJlcyQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIGdlb1NlcnZlckxheWVyRGVzY3JpcHRpb25zJDogT2JzZXJ2YWJsZTxNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNbXT47XG4gIGxlZ2VuZFRhYk9wZW4gPSBmYWxzZTtcbiAgbGF5ZXJzVGFiT3BlbiA9IGZhbHNlO1xuICBsZWdlbmRUYWIgPSAwO1xuICBsZWdlbmRMYXllcnMkITogT2JzZXJ2YWJsZTwoTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpW10+O1xuICBsZWdlbmRUb3AkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGxheWVyc1RvcCQhOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGxlZ2VuZEhlaWdodCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgaW1hZ2VOb3RQcm92aWRlZDogYm9vbGVhbltdID0gW107XG4gIGJhc2ljQWN0aW9ucyQ6IE9ic2VydmFibGU8KCdjbGljaycgfCAnbGFzc28nIHwgJ3JlY3RhbmdsZScgfCAnem9vbScgfCAnbW92ZScgfCAnZXhwb3J0JyB8ICd1cGxvYWQnKVtdPjtcbiAgem9vbUFuZENlbnRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICB6b29tPzoge1xuICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgIG1pbjogbnVtYmVyO1xuICAgICAgbWF4OiBudW1iZXI7XG4gICAgfTtcbiAgICBjZW50ZXI/OiBudW1iZXJbXTtcbiAgfT4oe30pO1xuICBtYXBTdHlsZVVybCQhOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+O1xuICBpbnRlcmFjdGlvbk1hbmFnZXI6IEludGVyYWN0aW9uTWFuYWdlciA9IG5ldyBJbnRlcmFjdGlvbk1hbmFnZXIoKTtcbiAgbWFwU3R5bGVMYXllciQhOiBPYnNlcnZhYmxlPChWZWN0b3JUaWxlTGF5ZXIgfCBUaWxlTGF5ZXI8YW55PilbXT47XG4gIHRvb2x0aXBJbmRleCA9IDA7XG4gIHRvb2x0aXBOdW1iZXIgPSAwO1xuICBTVFlMRV9GUk9NX1VSTCA9ICdfdXJsJztcbiAgTk9fU1RZTEUgPSAnbm9uZSc7XG4gIHdtc0NhcGFiaWxpdGllcyQ6IE9ic2VydmFibGU8XG4gICAgfCB7XG4gICAgICAgIFtwOiBzdHJpbmddOiBHZXRDYXBhYmlsaXRpZXNSZXNwb25zZSB8IG51bGw7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWRcbiAgPjtcbiAgYXV0b0RhdGFzZXRMYXllcnMkOiBPYnNlcnZhYmxlPE1hcEF1dG9MYXllck9wdGlvbnNbXT47XG4gIGZpdEV4dGVudHMkITogT2JzZXJ2YWJsZTxcbiAgICB7XG4gICAgICBkYXRhc291cmNlOiBzdHJpbmc7XG4gICAgICBleHRlbnQ6IENvb3JkaW5hdGVbXTtcbiAgICAgIGVycm9yOiBib29sZWFuO1xuICAgIH1bXVxuICA+O1xuICBkYXRhc291cmNlRmlsdGVycyQ6IE9ic2VydmFibGU8YW55PjtcbiAgdXNlZENsYXNzZXMkOiBPYnNlcnZhYmxlPGFueT47XG4gIGxheWVyU2xpZGVyID0gbmV3IExheWVyU2xpZGVyKCk7XG4gIGhhc1NsaWRlTGF5ZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzbGlkZXM6IHsgaWQ6IHVuZGVmaW5lZCB8IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W107XG4gIHBvc3NpYmxlU3R5bGVzOiB7XG4gICAgW3A6IHN0cmluZ106IHtcbiAgICAgIGxheWVyczogeyBbcDogc3RyaW5nXTogeyBwYXJhbTogc3RyaW5nOyBzdHlsZXM6IHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gfSB9IHwgbnVsbDtcbiAgICAgIHVybDogc3RyaW5nO1xuICAgIH07XG4gIH0gPSB7fTtcbiAgYXR0cmlidXRpb25zID0gbmV3IEF0dHJpYnV0aW9uKCk7XG4gIGFjdGlvbk1lbnVPcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBhdHRyaWJ1dGlvbnMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBvbFpvb21FbGVtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgcHJldmlvdXNMYXllcnM6IEJhc2VMYXllcltdID0gW107XG4gIHByZXZpb3VzVG9vbHRpcD86IENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD47XG4gIHByZXZpb3VzVG9vbHRpcFN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogUHJ5STE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b29sdGlwRmFjdG9yeVNlcnZpY2U6IFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSB3aWRnZXRNYXBMYXllclNlcnZpY2U6IFdpZGdldE1hcExheWVyU2VydmljZSxcbiAgICBwcml2YXRlIHByeUFnZ3JlZ2F0aW9uU2VydmljZTogUHJ5QWdncmVnYXRpb25TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUFJZX0dFT0FVVEhfVE9LRU4pIHByaXZhdGUgZ2VvQXV0aFNlcnZpY2U6IFByeUdlb0F1dGhTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG5cbiAgICB0aGlzLmdldE9sWm9vbUVsZW1lbnQoKTtcblxuICAgIHRoaXMuc2xpZGVzID0gW1xuICAgICAgeyBpZDogJ2FsbCcsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnNsaWRlLmFsbCcpIH0sXG4gICAgICB7IGlkOiAnbGVmdCcsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnNsaWRlLmxlZnQnKSB9LFxuICAgICAgeyBpZDogJ3JpZ2h0JywgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuc2xpZGUucmlnaHQnKSB9XG4gICAgXTtcblxuICAgIHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLndpdGhHZW9BdXRoKHRoaXMuZ2VvQXV0aFNlcnZpY2UpO1xuXG4gICAgdGhpcy5iYXNpY0FjdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFjdGlvbnMkLFxuICAgICAgdGhpcy5hY3Rpb25NZW51T3BlbiQsXG4gICAgICB0aGlzLmludGVyYWN0aW9uTWFuYWdlci5zZWxlY3Rpb25JbnRlcmFjdGlvbi5zZWxlY3Rpb25UeXBlJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFthY3Rpb25zLCBtZW51T3Blbiwgc2VsZWN0aW9uVHlwZV0pID0+XG4gICAgICAgIG1lbnVPcGVuXG4gICAgICAgICAgPyBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24gIT09ICdleHBvcnQnICYmIGFjdGlvbiAhPT0gJ3VwbG9hZCcpXG4gICAgICAgICAgOiBhY3Rpb25zXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSAnZXhwb3J0JyAmJiBhY3Rpb24gIT09ICd1cGxvYWQnKVxuICAgICAgICAgICAgICAuZmlsdGVyKChhY3Rpb24pID0+IHNlbGVjdGlvblR5cGUgPT09IGFjdGlvbilcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NlcylcbiAgICAgIC5waXBlKG1hcCgoY2xhc3NlcykgPT4gY2xhc3Nlcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKSkpO1xuICAgIHRoaXMudXNlZENsYXNzZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5jbGFzc2VzJCwgdGhpcy51c2VkRGF0YXNvdXJjZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW2NsYXNzZXMsIGRhdGFzb3VyY2VzXSkgPT4ge1xuICAgICAgICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoKGNsYXNzSXRlbSkgPT5cbiAgICAgICAgICBkYXRhc291cmNlcy5zb21lKChkYXRhU291cmNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgJ3R5cGUnIGluIGRhdGFTb3VyY2UucmVxdWVzdCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NVUxUSV9DTEFTUyB8fFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuRlVMTF9URVhUXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAnZGF0YXNldCdcbiAgICAgICAgICAgICAgPyBkYXRhU291cmNlLm9DbGFzcyA9PT0gY2xhc3NJdGVtLmlkXG4gICAgICAgICAgICAgIDogZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgJ29DbGFzcycgaW4gZGF0YVNvdXJjZS5yZXF1ZXN0XG4gICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5yZXF1ZXN0Lm9DbGFzcyA9PT0gY2xhc3NJdGVtLmlkXG4gICAgICAgICAgICAgIDogZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgJ3R5cGUnIGluIGRhdGFTb3VyY2UucmVxdWVzdFxuICAgICAgICAgICAgICA/IGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTU9OT19DTEFTU1xuICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5maWVsZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKTtcblxuICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGF0YXNvdXJjZUZpbHRlcnMpLFxuICAgICAgdGhpcy5kYXRhc291cmNlSWRzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbZmlsdGVycywgaWRzXSkgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWx0ZXJzKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsdGVyRHNLZXkpID0+IGlkcy5pbmNsdWRlcyhmaWx0ZXJEc0tleSkpXG4gICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiAoeyAuLi5wLCBbY106IGZpbHRlcnNbY10gfSksIHt9KSBhcyB7XG4gICAgICAgICAgICBbcDogc3RyaW5nXTogRmlsdGVyQ29udGV4dFtdO1xuICAgICAgICAgIH1cbiAgICAgICksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgKTtcblxuICAgIHRoaXMuc3R5bGVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5tYXBTdHlsZXMpLnBpcGUoXG4gICAgICBtYXAoKHN0eWxlcykgPT5cbiAgICAgICAgc3R5bGVzLmNvbmNhdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLk5PX1NUWUxFLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubm9TdHlsZScpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLlNUWUxFX0ZST01fVVJMLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuc3R5bGVGcm9tVXJsJylcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcyk7XG5cbiAgICB0aGlzLmdlb1NlcnZlckxheWVyRGVzY3JpcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2VkRGF0YXNvdXJjZXMkLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbXSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICAgICksXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuZ2VvU2VydmVyVXJsKS5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQpKVxuICAgIF0pLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIG1hcCgoW2RhdGFTb3VyY2VzLCBnZW9TZXJ2ZXJVcmxdKSA9PiB7XG4gICAgICAgIGlmICghZ2VvU2VydmVyVXJsKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiBkYXRhU291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoKGRzKSA9PiBEYXRhc291cmNlVXRpbHMuaXNHZW8oZHMpKVxuICAgICAgICAgIC5tYXAoKGRzKSA9PiB7XG4gICAgICAgICAgICBkcyA9IGRzIGFzIHVua25vd24gYXMgRGF0YXNldDtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhczoge1xuICAgICAgICAgICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgICAgICAgICB9ID0ge307XG4gICAgICAgICAgICBkcy5tZXRhZGF0YT8uZm9yRWFjaCgobSkgPT4gKG1ldGFkYXRhc1ttLm1ldGFkYXRhRGVmLm5hbWVdID0gbS52YWx1ZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2dlb3NlcnZlcicsXG4gICAgICAgICAgICAgIHVybDogYCR7Z2VvU2VydmVyVXJsfS8ke1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdLmxlbmd0aCA+IDAgPyBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXSArICcvJyA6ICcnXG4gICAgICAgICAgICAgIH13bXM/U0VSVklDRT1XTVMmVkVSU0lPTj0xLjMuMGAsXG4gICAgICAgICAgICAgIHBhcmFtVGlsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IHBhcnNlSW50KG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5PUEFDSVRZXSA/PyAxMDAsIDEwKSxcbiAgICAgICAgICAgICAgb0NsYXNzOiBkcy5vQ2xhc3MsXG4gICAgICAgICAgICAgIGtleTogbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0gKyAnOicgKyBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuS0VZXSxcbiAgICAgICAgICAgICAgbmFtZXNwYWNlOiBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXSxcbiAgICAgICAgICAgICAgcGFyYW1MYXllcjogbWV0YWRhdGFzW0dlb01ldGFkYXRhLktFWV0sXG4gICAgICAgICAgICAgIG5hbWU6IGRzLm5hbWUsXG4gICAgICAgICAgICAgIGRhdGFzb3VyY2VJZDogZHMuaWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChsYXllcikgPT4gbGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKSxcbiAgICAgIHN0YXJ0V2l0aChbXSlcbiAgICApO1xuXG4gICAgdGhpcy5hdXRvRGF0YXNldExheWVycyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY2xhc3NlcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnVzZWREYXRhc291cmNlcyQucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFtdKSxcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChkYXRhc291cmNlcykgPT5cbiAgICAgICAgICAgIGRhdGFzb3VyY2VzLmZpbHRlcigoZHMpID0+IGRzLnNvdXJjZVR5cGUgPT09ICdkYXRhc2V0JyAmJiAhRGF0YXNvdXJjZVV0aWxzLmlzR2VvKGRzKSkgYXMgRGF0YXNldFtdXG4gICAgICAgIClcbiAgICAgIClcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAoW2NsYXNzZXMsIGZpZWxkcywgZGF0YVNldHNdKSA9PlxuICAgICAgICAgIGRhdGFTZXRzXG4gICAgICAgICAgICAubWFwKChkcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IGNsYXNzZXMuZmluZCgoY2xhenopID0+IGNsYXp6LmlkID09PSBkcy5vQ2xhc3MpO1xuICAgICAgICAgICAgICBjb25zdCBnZW9BdHRyaWJ1dGVzID0gKFxuICAgICAgICAgICAgICAgIG1vZGVsPy5hdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmKSA9PiBhdHRyLmZpZWxkID09PSBmLmlkKSB9KSkgPz8gW11cbiAgICAgICAgICAgICAgKS5maWx0ZXIoKHsgYXR0ciwgZmllbGQgfSkgPT4gISFmaWVsZCAmJiBHZW9tZXRyaWNGaWVsZFR5cGVzLmluY2x1ZGVzKGZpZWxkLnR5cGUpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGdlb0F0dHJpYnV0ZXMubWFwKFxuICAgICAgICAgICAgICAgIChnZW8pID0+XG4gICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBgJHtkcy5uYW1lfSR7Z2VvQXR0cmlidXRlcy5sZW5ndGggPiAxID8gJyAtICcgKyBnZW8uYXR0ci5uYW1lIDogJyd9YCxcbiAgICAgICAgICAgICAgICAgICAgb0NsYXNzOiBkcy5vQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIGtleTogZHMuaWQsXG4gICAgICAgICAgICAgICAgICAgIHN1YlR5cGU6IGdlby5maWVsZCEudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlczogW2RzLm9DbGFzc10sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogZ2VvLmF0dHIudGVjaG5pY2FsTmFtZVxuICAgICAgICAgICAgICAgICAgfSBhcyBNYXBBdXRvTGF5ZXJPcHRpb25zKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5mbGF0KCkgYXMgTWFwQXV0b0xheWVyT3B0aW9uc1tdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm1hbmlmZXN0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAoKG1hbmlmZXN0Lm9wdGlvbnMgPz8geyBsYXllcnM6IFtdIH0pIGFzIE1hcFdpZGdldE9wdGlvbnMpLmxheWVycz8uZmlsdGVyKChsYXllcikgPT5cbiAgICAgICAgICAgICAgICBbJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpXG4gICAgICAgICAgICAgICkgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNbXVxuICAgICAgICAgICAgKS5tYXAoKGxheWVyKSA9PiBsYXllci51cmwpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHVybHMpID0+IHVybHMuZm9yRWFjaCgodXJsKSA9PiB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuZ2V0Q2FwYWJpbGl0eSh7IHVybCB9KSkpKVxuICAgICk7XG5cbiAgICB0aGlzLndtc0NhcGFiaWxpdGllcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuY2FwYWJpbGl0aWVzKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubWFuaWZlc3QkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMuc3R5bGVzJCxcbiAgICAgIHRoaXMuZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkLFxuICAgICAgdGhpcy53bXNDYXBhYmlsaXRpZXMkLFxuICAgICAgdGhpcy5hdXRvRGF0YXNldExheWVycyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzLCBtYXBTdHlsZXMsIGdlb0xheWVycywgY2FwYWJpbGl0aWVzLCBhdXRvRGF0YXNldExheWVyc10pID0+IHtcbiAgICAgICAgLy8gYXV0byBkZXRlcm1pbmUgbGF5ZXJzIHBhcmFtZXRlcnMgdG8gcHJvdmlkZSBhIHdvcmtpbmcgdmlld1xuICAgICAgICBjb25zdCBhdXRvT3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobWFuaWZlc3Qub3B0aW9ucyA/PyB7fSkpIGFzIE1hcFdpZGdldE9wdGlvbnM7XG4gICAgICAgIGlmICghYXV0b09wdGlvbnMudG9vbHRpcE1vZGUpIHtcbiAgICAgICAgICBhdXRvT3B0aW9ucy50b29sdGlwTW9kZSA9IFRvb2x0aXBNb2RlLkNMSUNLO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gW1xuICAgICAgICAgIC4uLihhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnR5cGUgIT09ICdhdXRvJyksXG4gICAgICAgICAgLi4uKGF1dG9PcHRpb25zLmF1dG9tYXRpY0xheWVyc1xuICAgICAgICAgICAgPyBhdXRvRGF0YXNldExheWVyc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAobGF5ZXIpID0+XG4gICAgICAgICAgICAgICAgICAgICFhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllci5pbmNsdWRlcyhsYXllci5rZXkgKyAnLScgKyBsYXllci5zdWJUeXBlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChsYXllcikgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLmxheWVyLFxuICAgICAgICAgICAgICAgICAgLi4uKChhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgKHByZXZMYXllcikgPT4gcHJldkxheWVyLmtleSA9PT0gbGF5ZXIua2V5ICYmIHByZXZMYXllci5hdHRyaWJ1dGUgPT09IGxheWVyLmF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgICAgKSA/PyB7fSlcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogW10pXG4gICAgICAgIF07XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzPy5mb3JFYWNoKChsYXllciwgaSkgPT4ge1xuICAgICAgICAgIFdpZGdldE1hcFV0aWxzLnBvcHVsYXRlTG9jYXRpb25BdHRyaWJ1dGUobGF5ZXIsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzKTtcbiAgICAgICAgICBXaWRnZXRNYXBVdGlscy5wb3B1bGF0ZUludGVuc2l0eUF0dHJpYnV0ZShsYXllciwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpO1xuICAgICAgICAgIGlmIChhdXRvT3B0aW9ucy5hdHRyaWJ1dGlvbnMpIHtcbiAgICAgICAgICAgIGxheWVyLmF0dHJpYnV0aW9uID0gbGF5ZXIuYXR0cmlidXRpb24gPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhY3R1YWxMYXllcktleXMgPSAoYXV0b09wdGlvbnMubGF5ZXJzID8/IFtdKVxuICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiAobGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKS5rZXkgPz8gbnVsbClcbiAgICAgICAgICAuZmlsdGVyKChrZXkpID0+ICEha2V5KTtcblxuICAgICAgICAvLyBHZXQgYWxsIHByZXZpb3VzIGxheWVycywgd2l0aG91dCBnZW9zZXJ2ZXIgbGF5ZXJzIHRoYXQgYXJlIG5vdCByZXF1ZXN0ZWQgYW55bW9yZSwgdGhlbiBhZGQgbmV3IGdlb3NlcnZlciBsYXllcnMgKHBvdGVudGlhbGx5IHdpdGggYSBwcmVjb25maWcgZnJvbSBtYW5pZmVzdCkuXG4gICAgICAgIGF1dG9PcHRpb25zLmxheWVycyA9IFtcbiAgICAgICAgICAuLi4oYXV0b09wdGlvbnMubGF5ZXJzID8/IFtdKS5tYXAoKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBnZW9MYXllciA9IGdlb0xheWVycy5maW5kKChnZW9MYXllcikgPT4gbGF5ZXIua2V5ID09PSBnZW9MYXllci5rZXkpID8/IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcidcbiAgICAgICAgICAgICAgPyBnZW9MYXllclxuICAgICAgICAgICAgICAgID8geyAuLi5nZW9MYXllciwgLi4ubGF5ZXIsIHVybDogZ2VvTGF5ZXIudXJsIH1cbiAgICAgICAgICAgICAgICA6IChudWxsIGFzIHVua25vd24gYXMgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKVxuICAgICAgICAgICAgICA6IHsgLi4ubGF5ZXIgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi5nZW9MYXllcnMuZmlsdGVyKChsYXllcikgPT4gIWFjdHVhbExheWVyS2V5cy5pbmNsdWRlcyhsYXllci5rZXkpKVxuICAgICAgICBdLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIpO1xuXG4gICAgICAgIGF1dG9PcHRpb25zLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdExheWVyVGl0bGUobGF5ZXIsIGNhcGFiaWxpdGllcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhIW1hcFN0eWxlcyAmJlxuICAgICAgICAgIG1hcFN0eWxlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgKCFhdXRvT3B0aW9ucy5zdHlsZSB8fCAhbWFwU3R5bGVzLm1hcCgoc3R5bGUpID0+IHN0eWxlLmlkZW50aWZpZXIpLmluY2x1ZGVzKGF1dG9PcHRpb25zLnN0eWxlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbGlnaHRTdHlsZXMgPSBtYXBTdHlsZXMuZmlsdGVyKChzdHlsZSkgPT4gIShzdHlsZS5pZGVudGlmaWVyID8/ICctJykuaW5jbHVkZXMoJ2RhcmsnKSk7XG4gICAgICAgICAgYXV0b09wdGlvbnMuc3R5bGUgPSBsaWdodFN0eWxlcy5sZW5ndGggPiAwID8gbGlnaHRTdHlsZXNbMF0uaWRlbnRpZmllciA6IG1hcFN0eWxlc1swXS5pZGVudGlmaWVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllcikge1xuICAgICAgICAgIGNvbnN0IGJhc2UgPSBhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXI7XG5cbiAgICAgICAgICAvLyBSZW1vdmUgZnJvbSBpZ25vcmVBdXRvTGF5ZXJzLCB2YWx1ZXMgdGhhdCBhcmUgbm90IG5lY2Vzc2FyeVxuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlSWdub3JlQXV0b0xheWVyS2V5cyA9IGF1dG9EYXRhc2V0TGF5ZXJzLm1hcCgobGF5ZXIpID0+IGxheWVyLmtleSArICctJyArIGxheWVyLnN1YlR5cGUpO1xuICAgICAgICAgIGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciA9IChhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIgPz8gW10pLmZpbHRlcigoa2V5KSA9PlxuICAgICAgICAgICAgcG9zc2libGVJZ25vcmVBdXRvTGF5ZXJLZXlzLmluY2x1ZGVzKGtleSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyIHx8IGJhc2UubGVuZ3RoICE9PSBhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRNYW5pZmVzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF1dG9PcHRpb25zLmxheWVycyA9IFdpZGdldE1hcFV0aWxzLmFzc2lnbkxheWVyc09yZGVyKGF1dG9PcHRpb25zLmxheWVycyk7XG5cbiAgICAgICAgaWYgKGF1dG9PcHRpb25zLmZpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZvckVhY2goXG4gICAgICAgICAgICAobGF5ZXIpID0+IChsYXllci5maXQgPSAhTk9OX01BTkRBVE9SWV9GSVRfTEFZRVJfVFlQRVMuaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgYXV0b09wdGlvbnMuZml0KVxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlIGF1dG9PcHRpb25zLmZpdDtcbiAgICAgICAgfVxuXG4gICAgICAgIFtcbiAgICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMuZmlsdGVyKChsYXllcikgPT4gWyd3bXMnLCAnZ2Vvc2VydmVyJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkpIGFzIChcbiAgICAgICAgICAgICAgICB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICAgICAgKVtdXG4gICAgICAgICAgICApLm1hcCgobGF5ZXIpID0+IGxheWVyLnVybClcbiAgICAgICAgICApXG4gICAgICAgIF0uZm9yRWFjaCgodXJsKSA9PiB7XG4gICAgICAgICAgaWYgKGNhcGFiaWxpdGllcyAmJiBjYXBhYmlsaXRpZXNbdXJsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuZ2V0Q2FwYWJpbGl0eSh7IHVybDogdXJsIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhdXRvT3B0aW9ucztcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFVybCQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMubWFwVXJsKTtcbiAgICB0aGlzLndtc0ZlYXR1cmVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy53bXNGZWF0dXJlcyk7XG5cbiAgICB0aGlzLmJvdHRvbUxlZnQkID0gdGhpcy53aWRnZXRTaXplJC5waXBlKFxuICAgICAgbWFwKChzaXplKSA9PiBgdHJhbnNsYXRlKDEwcHggLGNhbGMoJHtzaXplLmhlaWdodH1weCAtIDEwMCUgLSAxMHB4KSlgKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1TdHlsZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRTZXQkLCB0aGlzLm1hbmlmZXN0JCwgdGhpcy5zdGF0aWNSZXN1bHRTZXQkXSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChbcnMsIG1hbmlmZXN0LCBzcnNdKSA9PiB7XG4gICAgICAgIGlmICgobWFuaWZlc3QuZGF0YXNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IG1hbmlmZXN0LmRhdGFzb3VyY2UubGVuZ3RoID09PSAwKSAmJiAhc3JzKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHtcbiAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NpYzogU3R5bGU7XG4gICAgICAgICAgICAgICAgYm9yZGVyZWQ6IFN0eWxlO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IE9iamVjdC52YWx1ZXMocnMuaXRlbXMpLnJlZHVjZSgocCwgYykgPT4gYy5sZW5ndGggKyBwLCAwKTtcbiAgICAgICAgICAgICAgaWYgKHRvdGFsID09PSAwKSByZXNvbHZlKHt9KTtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMge1xuICAgICAgICAgICAgICAgIFtpZDogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgY2xhc3NpYzogU3R5bGU7XG4gICAgICAgICAgICAgICAgICBib3JkZXJlZDogU3R5bGU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhycy5pdGVtcykuZm9yRWFjaCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bWJvbFNlcnZpY2UuZ2V0U3ltYm9sQXNJY29uU3R5bGUoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2xBc0ljb25TdHlsZShpdGVtLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgXSkudGhlbigoW3N0eWxlLCBiU3R5bGVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpdGVtLmlkXSA9IHsgY2xhc3NpYzogc3R5bGUsIGJvcmRlcmVkOiBiU3R5bGUgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoID49IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmhlaWdodCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIG1hcCgoW3NpemUsIGRpc3BsYXldKSA9PiAoc2l6ZS5oZWlnaHQgPz8gMTAwKSAtIChkaXNwbGF5ID8gV0lER0VUX0hFQURFUl9IRUlHSFQgOiAwKSksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGlvbnMkID0gdGhpcy5vcHRpb25zJC5waXBlKG1hcCgob3B0aW9ucykgPT4gISFvcHRpb25zLmF0dHJpYnV0aW9ucykpO1xuXG4gICAgdGhpcy5sZWdlbmRUb3AkID0gY29tYmluZUxhdGVzdChbdGhpcy5kaXNwbGF5SGVhZGVyJCwgdGhpcy5hdHRyaWJ1dGlvbnMkXSkucGlwZShcbiAgICAgIG1hcCgoW2hlYWRlciwgYXR0cl0pID0+IDUgKyAoaGVhZGVyID8gV0lER0VUX0hFQURFUl9IRUlHSFQgOiAwKSArIChhdHRyID8gNjEgOiAwKSlcbiAgICApO1xuXG4gICAgdGhpcy5sZWdlbmRIZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSwgdGhpcy5sZWdlbmRUb3AkXSkucGlwZShcbiAgICAgIG1hcCgoW3NpemUsIHRvcF0pID0+IHtcbiAgICAgICAgcmV0dXJuIChzaXplLmhlaWdodCA/PyAxMDApIC0gV0lER0VUX0hFQURFUl9IRUlHSFQgLSB0b3AgLSA1NjsgLy8gNTZweCBpcyB0aGUgdG9vbHRpcCBoZWlnaHQgKyBtYXJnaW5cbiAgICAgIH0pLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCh3bXNDYXBhYmlsaXRpZXMpID0+XG4gICAgICAgICAgICB3bXNDYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgPyBPYmplY3Qua2V5cyh3bXNDYXBhYmlsaXRpZXMpXG4gICAgICAgICAgICAgICAgICAubWFwKCh1cmwpID0+ICh7IHVybCwgbGF5ZXJzOiBYTUxVdGlscy5nZXRQb3NzaWJsZUxheWVyU3R5bGVzKHdtc0NhcGFiaWxpdGllc1t1cmxdPy5kb2MpIH0pKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gKHsgLi4ucCwgW2MudXJsXTogYyB9KSwge30pXG4gICAgICAgICAgICAgIDoge31cbiAgICAgICAgICApLFxuICAgICAgICAgIHN0YXJ0V2l0aCh7fSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChwb3NzaWJsZVN0eWxlcykgPT4gKHRoaXMucG9zc2libGVTdHlsZXMgPSBwb3NzaWJsZVN0eWxlcykpXG4gICAgKTtcblxuICAgIHRoaXMuaGFzU2xpZGVMYXllciQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+XG4gICAgICAgIChvcHRpb25zLmxheWVycyA/PyBbXSkubWFwKChsYXllcikgPT4gISFsYXllci5zbGlkZSAmJiBsYXllci5zbGlkZSAhPT0gJ2FsbCcpLnJlZHVjZSgoYSwgYikgPT4gYSB8fCBiLCBmYWxzZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaW5pdEludGVyYWN0aW9uTWFuYWdlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIuaW5pdCh0aGlzKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hcCA9IG5ldyBNYXAoeyB0YXJnZXQ6IHRoaXMubWFwUmVmLm5hdGl2ZUVsZW1lbnQsIGNvbnRyb2xzOiBkZWZhdWx0cyh7IGF0dHJpYnV0aW9uOiBmYWxzZSB9KSB9KTtcbiAgICB0aGlzLmludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMuaW5pdEludGVyYWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMubGF5ZXJTbGlkZXIuaW5pdCh0aGlzLm1hcCwgdGhpcy5zbGlkZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMubWFwU3R5bGVVcmwkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5tYXBVcmwkXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIHVybF0pID0+IHtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnN0eWxlKSB7XG4gICAgICAgICAgY2FzZSB0aGlzLk5PX1NUWUxFOlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgY2FzZSB0aGlzLlNUWUxFX0ZST01fVVJMOlxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGVVUkwgPz8gJyc7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBgJHt1cmx9L3N0eWxlcy8ke29wdGlvbnMuc3R5bGV9L3N0eWxlLmpzb25gO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuXG4gICAgdGhpcy5tYXBTdHlsZUxheWVyJCA9IHRoaXMubWFwU3R5bGVVcmwkLnBpcGUoXG4gICAgICBtYXAoKHN0eWxlVXJsKSA9PiB7XG4gICAgICAgIGlmICghc3R5bGVVcmwpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBuZXcgTWFwYm94VmVjdG9yTGF5ZXIoe1xuICAgICAgICAgICAgcHJvcGVydGllczogeyB0aXRsZTogJ2JhY2tncm91bmQnIH0sXG4gICAgICAgICAgICBzdHlsZVVybFxuICAgICAgICAgIH0pIC8qICxcbiAgICAgICAgICBuZXcgVGlsZUxheWVyKHtcbiAgICAgICAgICAgIHNvdXJjZTogbmV3IFRpbGVEZWJ1ZygpXG4gICAgICAgICAgfSkgKi9cbiAgICAgICAgXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgob3B0aW9ucykgPT4gKHtcbiAgICAgICAgICAgIGNlbnRlcjogZnJvbUxvbkxhdChvcHRpb25zLmNlbnRlciA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX01BUF9DRU5URVIpLFxuICAgICAgICAgICAgbWF4Wm9vbTogb3B0aW9ucy56b29tPy5tYXggPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgICAgIG1pblpvb206IG9wdGlvbnMuem9vbT8ubWluID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgICAgICB6b29tOiBvcHRpb25zLnpvb20/LnN0YXJ0ID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9TVEFSVFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmlldykgPT4gdGhpcy5tYXAuc2V0VmlldyhuZXcgVmlldyh2aWV3KSkpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgob3B0aW9ucykgPT4gb3B0aW9ucy5hdHRyaWJ1dGlvbnMpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChhdHRyaWJ1dGlvbnMpID0+IHtcbiAgICAgICAgICBpZiAoIWF0dHJpYnV0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLmF0dHJpYnV0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWFwLmFkZENvbnRyb2wodGhpcy5hdHRyaWJ1dGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5sYXllcnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuYWRkaXRpb25hbExheWVycyQsXG4gICAgICB0aGlzLml0ZW1TdHlsZXMkLFxuICAgICAgdGhpcy5kYXRhc291cmNlRmlsdGVycyQsXG4gICAgICB0aGlzLmZpZWxkcyRcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoW3Jlc3VsdFNldCwgb3B0aW9ucywgY2xhc3NlcywgYWRkaXRpb25hbExheWVycywgaXRlbVN0eWxlcywgZmlsdGVycywgZmllbGRzXSkgPT5cbiAgICAgICAgICAhIXJlc3VsdFNldCAmJiAhIW9wdGlvbnMgJiYgISFjbGFzc2VzICYmICEhZmllbGRzXG4gICAgICApLFxuICAgICAgbWFwKChbcmVzdWx0U2V0LCBvcHRpb25zLCBjbGFzc2VzLCBhZGRpdGlvbmFsTGF5ZXJzLCBpdGVtU3R5bGVzLCBmaWx0ZXJzLCBmaWVsZHNdKSA9PiB7XG4gICAgICAgIGxldCBoYXNSZWxhdGlvbkxheWVyID0gbnVsbCBhcyB1bmtub3duIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZTxhbnk+PjtcblxuICAgICAgICBjb25zdCBsYXllcnMgPSAob3B0aW9ucz8ubGF5ZXJzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAobGF5ZXIpID0+IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmRvbnROZWVkTG9jYXRpb24uaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgISFsYXllci5hdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIChsYXllcikgPT4gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuZG9udE5lZWRJbnRlbnNpdHkuaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgISFsYXllci5pbnRlbnNpdHlBdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzRm9yQ2xhc3MgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+ICh7XG4gICAgICAgICAgICAgICAgY2xhc3NJZCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldEF0dHJpYnV0ZXNGb3JEcmF3aW5nKGNsYXNzZXMsIGNsYXNzSWQsIGxheWVyKVxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAocCwgYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICAgICAgICBbYy5jbGFzc0lkXTogY1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHt9IGFzIHtcbiAgICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZW5zaXR5QXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uQXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IGxheWVyQ2xhc3Nlc0lkID0gY2xhc3Nlcy5tYXAoKGNsYXp6KSA9PiBjbGF6ei5pZCk7XG4gICAgICAgICAgICBpZiAoJ2NsYXNzZXMnIGluIGxheWVyICYmICEhbGF5ZXIuY2xhc3NlcyAmJiBsYXllci5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzSWQgPSBsYXllci5jbGFzc2VzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB7IG1pbjogMCwgbWF4OiAwIH07XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoISFsYXllci5pbnRlbnNpdHlBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+XG4gICAgICAgICAgICAgICAgICByZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0ubWFwKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKGl0ZW0sIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10uaW50ZW5zaXR5QXR0cmlidXRlKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIGFzIG51bWJlcltdO1xuXG4gICAgICAgICAgICAgIHJhbmdlID0gdmFsdWVzLnJlZHVjZSgocCwgYykgPT4gKHsgbWluOiBNYXRoLm1pbihwLm1pbiwgYyksIG1heDogTWF0aC5tYXgocC5tYXgsIGMpIH0pLCB7XG4gICAgICAgICAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgIG1heDogLU51bWJlci5NQVhfVkFMVUVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGltcGwgPSB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5sYXllcnNJbXBsZW1lbnRhdGlvbltsYXllci50eXBlXTtcbiAgICAgICAgICAgIGlmICghIWltcGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0TGF5ZXIgPSBpbXBsKFxuICAgICAgICAgICAgICAgIGxheWVyIGFzIGFueSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgICAgICAgIGl0ZW1TdHlsZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCdmaXQnLCBsYXllci5maXQpO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ3R5cGUnLCBsYXllci50eXBlKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCdzbGlkZScsIGxheWVyLnNsaWRlKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCdvcmRlcicsIGxheWVyLm9yZGVyKTtcbiAgICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdyZWxhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBoYXNSZWxhdGlvbkxheWVyID0gcmVzdWx0TGF5ZXIgYXMgdW5rbm93biBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U+O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgndGl0bGUnLCBsYXllci50aXRsZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3FsX2ZpbHRlciA9IENxbFV0aWxzLmdldENRTFBhcmFtc0ZvcihsYXllci5kYXRhc291cmNlSWQsIGZpbHRlcnMsIGNsYXNzZXMsIGZpZWxkcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY3FsX2ZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIENRTCBxdWVyeSB0byBnZW9zZXJ2ZXIgbGF5ZXJzXG4gICAgICAgICAgICAgICAgICAocmVzdWx0TGF5ZXIgYXMgVGlsZTxUaWxlV01TPikuZ2V0U291cmNlKCkhLnVwZGF0ZVBhcmFtcyh7IGNxbF9maWx0ZXIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGxheWVyLnNsaWRlICYmIGxheWVyLnNsaWRlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJTbGlkZXIuYXBwbHlTbGlkZShcbiAgICAgICAgICAgICAgICAgIGxheWVyLnNsaWRlLFxuICAgICAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIgYXMgdW5rbm93biBhcyBUaWxlTGF5ZXI8YW55PiB8IFZlY3RvckxheWVyPGFueT4gfCBIZWF0bWFwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRMYXllcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYExheWVyIHR5cGUgJHtsYXllci50eXBlfSBpcyB1bmtub3duYCk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgQmFzZUxheWVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIpO1xuXG4gICAgICAgIGlmICghIWhhc1JlbGF0aW9uTGF5ZXIpIHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGxheWVyc1xuICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEobGF5ZXIgaW5zdGFuY2VvZiBUaWxlKSlcbiAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PlxuICAgICAgICAgICAgICBsYXllclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZlYXR1cmVzOiBGZWF0dXJlPGFueT4pID0+ICEhZmVhdHVyZXMuZ2V0KCdpZCcpIHx8ICEhZmVhdHVyZXMuZ2V0KCdmZWF0dXJlcycpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSk7XG5cbiAgICAgICAgICByZXN1bHRTZXQucmVsYXRpb25zLmZvckVhY2goKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBmZWF0dXJlcy5maW5kKChmOiBGZWF0dXJlPFBvaW50IHwgQ2lyY2xlPikgPT4gZi5nZXQoJ2lkJykgPT09IHJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gZmVhdHVyZXMuZmluZCgoZjogRmVhdHVyZTxQb2ludCB8IENpcmNsZT4pID0+IGYuZ2V0KCdpZCcpID09PSByZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgICAgICBpZiAoISFzb3VyY2UgJiYgISFkZXN0KSB7XG4gICAgICAgICAgICAgIGhhc1JlbGF0aW9uTGF5ZXIuZ2V0U291cmNlKCk/LmFkZEZlYXR1cmUoV2lkZ2V0TWFwVXRpbHMuZ2V0TGlua0ZlYXR1cmUocmVsYXRpb24sIHNvdXJjZSwgZGVzdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxheWVycy5wdXNoKC4uLmFkZGl0aW9uYWxMYXllcnMpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNpbmdsZUxheWVyKSB7XG4gICAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGxheWVyLnNldFZpc2libGUoaWR4ID09PSAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFJlc29sdmUgYnVnIGRyYXdpbmcgd2ViZ2xsYXllciB3aXRob3V0IG5vdGhpbmcgdW5kZXJuZWF0aDogYWRkIGVtcHR5IGxheWVyIGJlbG93ICovXG4gICAgICAgIGNvbnN0IF9sYXllcnMgPSB0aGlzLmFkZEVtcHR5V2ViR2xMYXllckJlbG93U2xpZGVIZWF0bWFwcyhsYXllcnMpO1xuXG4gICAgICAgIF9sYXllcnMuZm9yRWFjaCgobGF5ZXIsIGluZGV4LCBhcnIpID0+IGxheWVyLnNldCgnekluZGV4JywgYXJyLmxlbmd0aCAtIGluZGV4KSk7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c0xheWVycy5wdXNoKC4uLl9sYXllcnMpO1xuXG4gICAgICAgIHJldHVybiBfbGF5ZXJzO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5maXRFeHRlbnRzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuY2xhc3NlcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLmRhdGFzb3VyY2VGaWx0ZXJzJCxcbiAgICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIHN3aXRjaE1hcCgoW29wdGlvbnMsIGNsYXNzZXMsIGZpZWxkcywgZmlsdGVycywgd21zQ2FwYWJpbGl0aWVzXSkgPT5cbiAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5maW5kKChsYXllcikgPT4gWydnZW9zZXJ2ZXInLCAnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkgJiYgbGF5ZXIuZml0KVxuICAgICAgICAgID8gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgIC4uLigob3B0aW9ucy5sYXllcnM/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInKSA/PyBbXSkgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmZpdClcbiAgICAgICAgICAgICAgICAubWFwKChsYXllcjogTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKSA9PlxuICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLmZpbmQoKGNsYXp6KSA9PiBjbGF6ei5pZCA9PT0gbGF5ZXIub0NsYXNzKSA/PyAoeyBhdHRyaWJ1dGVzOiBbXSB9IGFzIHVua25vd24gYXMgQ2xhc3MpXG4gICAgICAgICAgICAgICAgICApLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpIH0pKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IGF0dHIsIGZpZWxkIH0pID0+IEdlb21ldHJpY0ZpZWxkVHlwZXMuaW5jbHVkZXMoZmllbGQ/LnR5cGUgPz8gJy0tLS0nKSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoeyBhdHRyLCBmaWVsZCB9KSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJ5QWdncmVnYXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWdncmVnYXRlKFtsYXllci5kYXRhc291cmNlSWRdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGluYXRlOiB7IG9wZXJhdGlvbjogT3BlcmF0aW9uLkVYVEVOVCwgYXR0cmlidXRlOiBhdHRyLmlkLCBsYWJlbDogYXR0ci5uYW1lLCBrZWVwMDogZmFsc2UgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoZXh0ZW50UmVzcG9uc2U6IEFnZ3JlZ2F0aW9uUmVzdWx0KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldE1hcFV0aWxzLnByb2plY3RFeHRlbnRBZ2dyZWdhdGlvblJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdtc0NhcGFiaWxpdGllcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHsgZGF0YXNvdXJjZTogbGF5ZXIuZGF0YXNvdXJjZUlkLCBleHRlbnQ6IFtdLCBlcnJvcjogdHJ1ZSB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5mbGF0KCksXG4gICAgICAgICAgICAgIC4uLigob3B0aW9ucy5sYXllcnM/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnR5cGUgPT09ICd3bXMnKSA/PyBbXSkgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNbXSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZml0KVxuICAgICAgICAgICAgICAgIC5tYXAoKGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZW50ID0gWE1MVXRpbHMuZ2V0TGF5ZXJFeHRlbnQobGF5ZXIucGFyYW1MYXllciwgdGhpcy5tYXAsIHdtc0NhcGFiaWxpdGllcyFbbGF5ZXIudXJsXT8uZG9jKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzb3VyY2U6IGB3bXMtJHtsYXllci5wYXJhbUxheWVyfWAsXG4gICAgICAgICAgICAgICAgICAgIGV4dGVudDogZXh0ZW50ID8/IFtdLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogIWV4dGVudFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBvZihbXSlcbiAgICAgICksXG4gICAgICBzdGFydFdpdGgoXG4gICAgICAgIFtdIGFzIHtcbiAgICAgICAgICBkYXRhc291cmNlOiBzdHJpbmc7XG4gICAgICAgICAgZXh0ZW50OiBDb29yZGluYXRlW107XG4gICAgICAgICAgZXJyb3I6IGJvb2xlYW47XG4gICAgICAgIH1bXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmxlZ2VuZExheWVycyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChvcHRpb25zKSA9PlxuICAgICAgICAgIChvcHRpb25zLmxheWVycyA/PyBbXSkuZmlsdGVyKChsYXllcikgPT4gWydnZW9zZXJ2ZXInLCAnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkpIGFzIChcbiAgICAgICAgICAgIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zXG4gICAgICAgICAgICB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zXG4gICAgICAgICAgKVtdXG4gICAgICApLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMubGF5ZXJzVG9wJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMubGVnZW5kVG9wJCwgdGhpcy5sZWdlbmRMYXllcnMkXSkucGlwZShcbiAgICAgIG1hcCgoW2xlZ2VuZFRvcCwgbGF5ZXJzXSkgPT4gbGVnZW5kVG9wICsgKChsYXllcnMubGVuZ3RoID8/IDApID4gMCA/IDUwIDogMCkpXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5sYXllcnNUb3AkLCB0aGlzLmxlZ2VuZExheWVycyQsIHRoaXMub2xab29tRWxlbWVudCQsIHRoaXMuZGlzcGxheUhlYWRlciRdKVxuICAgICAgICAucGlwZSh3aXRoTGF0ZXN0RnJvbSh0aGlzLmxheWVycyQpKVxuICAgICAgICAuc3Vic2NyaWJlKChbW2xheWVyc1RvcCwgbGVnZW5kLCB6b29tRWxlbWVudCwgZGlzcGxheUhlYWRlcl0sIGxheWVyc10pID0+IHtcbiAgICAgICAgICBpZiAoem9vbUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHpvb21FbGVtZW50LnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgICAgICBsYXllcnNUb3AgK1xuICAgICAgICAgICAgICAoKGxlZ2VuZC5sZW5ndGggPz8gMCkgPiAwIHx8IGxheWVycy5sZW5ndGggPiAwID8gMjAgOiAwKSArXG4gICAgICAgICAgICAgICghZGlzcGxheUhlYWRlciA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMClcbiAgICAgICAgICAgIH1weGA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMubWFwU3R5bGVMYXllciQsXG4gICAgICAgIHRoaXMubGF5ZXJzJCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpKSxcbiAgICAgICAgdGhpcy5maXRFeHRlbnRzJCxcbiAgICAgICAgdGhpcy5kYXRhc291cmNlRmlsdGVycyRcbiAgICAgIF0pLnN1YnNjcmliZSgoW21hcFN0eWxlTGF5ZXIsIGxheWVycywgc2VsZWN0ZWRJZHMsIGV4dGVudHMsIGZpbHRlcnNdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5lZWRlZENhbGN1bGF0ZWRFeHRlbnRzID0gbGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAobGF5ZXIpID0+IFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLmdldCgndHlwZScpKSAmJiBsYXllci5nZXQoJ2ZpdCcpXG4gICAgICAgICkubGVuZ3RoO1xuICAgICAgICBjb25zdCBuYkNhbGN1bGF0ZWRFeHRlbnRzID0gZXh0ZW50cy5maWx0ZXIoKGV4dGVudCkgPT4gIWV4dGVudC5lcnJvcikubGVuZ3RoO1xuXG4gICAgICAgIGlmIChuYkNhbGN1bGF0ZWRFeHRlbnRzID49IG5lZWRlZENhbGN1bGF0ZWRFeHRlbnRzKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b0FwcGx5TGF5ZXJzID0gWy4uLmxheWVycywgLi4ubWFwU3R5bGVMYXllcl07XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXRMYXllcnModG9BcHBseUxheWVycyk7XG5cbiAgICAgICAgICAgIHRoaXMuZml0TWFwRm9yT2JqZWN0cyhzZWxlY3RlZElkcywgZXh0ZW50cyk7XG4gICAgICAgICAgICB0aGlzLm1hcC51cGRhdGVTaXplKCk7XG5cbiAgICAgICAgICAgIHRoaXMubWFwXG4gICAgICAgICAgICAgIC5nZXRBbGxMYXllcnMoKVxuICAgICAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gIShsYXllciBpbnN0YW5jZW9mIFRpbGUpKVxuICAgICAgICAgICAgICAuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnZXRGZWF0dXJlcyA9IChsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpPy5nZXRGZWF0dXJlcztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGdldEZlYXR1cmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKT8uZ2V0RmVhdHVyZXMoKS5mb3JFYWNoKChmZWF0dXJlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGZlYXR1cmUuZ2V0KCd0eXBlJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBbJ2J1YmJsZScsICdtYXJrZXInLCAncG9pbnQnLCAnbGluZScsICdwb2x5Z29uJywgJ211bHRpLWxpbmUnLCAnbXVsdGktcG9seWdvbiddLmluY2x1ZGVzKHR5cGUpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmdldChzZWxlY3RlZElkcy5pbmNsdWRlcyhmZWF0dXJlLmdldCgnaWQnKSkgPyAnc2VsZWN0ZWRTdHlsZScgOiAnY2xhc3NpY1N0eWxlJylcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXAuc2V0TGF5ZXJzKFsuLi5tYXBTdHlsZUxheWVyXSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy53bXNGZWF0dXJlcyQsIHRoaXMuY2xhc3NpY0ZlYXR1cmVzJCwgdGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnN1YnNjcmliZShcbiAgICAgICAgKFt3bXNGZWF0dXJlcywgY2xhc3NpY0ZlYXR1cmVzLCBzaXplLCBoZWFkZXJdKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBJbmRleCA9IDA7XG4gICAgICAgICAgICBjb25zdCBwb3B1cE92ZXJsYXkgPSBuZXcgT3ZlcmxheSh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMucG9wdXAubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBbOSwgOV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5tYXAuYWRkT3ZlcmxheShwb3B1cE92ZXJsYXkpO1xuICAgICAgICAgICAgdGhpcy5wb3B1cENvbnRlbnQuY2xlYXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFByb21pc2VzID0gW10gYXMgUHJvbWlzZTxDb21wb25lbnRSZWY8QmFzZVRvb2x0aXBDb21wb25lbnQ+IHwgbnVsbD5bXTtcbiAgICAgICAgICAgIHdtc0ZlYXR1cmVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudFByb21pc2VzLnB1c2godGhpcy5nZW5lcmF0ZVRvb2x0aXAodmFsdWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2xhc3NpY0ZlYXR1cmVzLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29tcG9uZW50UHJvbWlzZXMucHVzaCh0aGlzLmdlbmVyYXRlVG9vbHRpcCh2YWx1ZS52YWx1ZXMpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChjb21wb25lbnRQcm9taXNlcykudGhlbigocHJvbWlzZXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVhbENvbXBvbmVudHMgPSBwcm9taXNlcy5maWx0ZXIoKGNvbXBvbmVudCkgPT4gISFjb21wb25lbnQpO1xuICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBOdW1iZXIgPSByZWFsQ29tcG9uZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgIGlmIChyZWFsQ29tcG9uZW50cy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXAubmF0aXZlRWxlbWVudC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBvcHVwT3ZlcmxheS5zZXRQb3NpdGlvbihbLTk5OTk5OTk5OTksIC05OTk5OTk5OTk5XSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cC5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBnbyBvdXRzaWRlIHRoZSBtYXBcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDAgKyAoaGVhZGVyID8gV0lER0VUX0hFQURFUl9IRUlHSFQgOiAwKSArIFRPT0xUSVBfUEFERElORyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMDAgKyBUT09MVElQX1BBRERJTkdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCBwaXhlbCA9IHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLnRvb2x0aXBFdmVudD8ucGl4ZWw7XG4gICAgICAgICAgICAgICAgaWYgKCEhcGl4ZWwgJiYgcGl4ZWxbMF0gKyByZWN0LndpZHRoID4gc2l6ZS53aWR0aCkge1xuICAgICAgICAgICAgICAgICAgcGl4ZWxbMF0gPSBzaXplLndpZHRoIC0gcmVjdC53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEhcGl4ZWwgJiYgcGl4ZWxbMV0gKyByZWN0LmhlaWdodCA+IHNpemUuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICBwaXhlbFsxXSA9IHNpemUuaGVpZ2h0IC0gcmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwTW92ZSgwKTtcbiAgICAgICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgICAgICAgICAgcG9wdXBPdmVybGF5LnNldFBvc2l0aW9uKHRoaXMubWFwLmdldENvb3JkaW5hdGVGcm9tUGl4ZWwocGl4ZWwgPz8gWzAsIDBdKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVtcHR5V2ViR2xMYXllckJlbG93U2xpZGVIZWF0bWFwcyhsYXllcnM6IEJhc2VMYXllcltdKSB7XG4gICAgY29uc3QgX2xheWVycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpXTtcbiAgICAgIF9sYXllcnMucHVzaChsYXllcik7XG4gICAgICBpZiAobGF5ZXIuZ2V0KCd0eXBlJykgPT09ICdoZWF0bWFwJyAmJiBsYXllci5nZXQoJ3NsaWRlJykpIHtcbiAgICAgICAgY29uc3QgZW1wdHlEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjU2ICogMjU2ICogNCk7XG4gICAgICAgIGNvbnN0IGVtcHR5TGF5ZXIgPSBuZXcgV2ViR0xUaWxlTGF5ZXIoe1xuICAgICAgICAgIHNvdXJjZTogbmV3IERhdGFUaWxlKHtcbiAgICAgICAgICAgIGxvYWRlcigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5RGF0YTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhab29tOiAwLFxuICAgICAgICAgICAgd3JhcFg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgX2xheWVycy5wdXNoKGVtcHR5TGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2xheWVycztcbiAgfVxuXG4gIG92ZXJyaWRlIGluaXRSZXN1bHRTZXQkKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyQsXG4gICAgICB0aGlzLnN0YXRpY1Jlc3VsdFNldCQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmRhdGFzZXRzKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZXN1bHRTZXRzLCByZXN1bHRTZXROYW1lc0FycmF5LCBzdGF0aWNSZXN1bHRTZXQsIGRlZmluaXRpb25zXSkgPT4ge1xuICAgICAgICBpZiAoISFzdGF0aWNSZXN1bHRTZXQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGljUmVzdWx0U2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdFNldEFycmF5ID0gcmVzdWx0U2V0TmFtZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLmZpbmQoKGRzZCkgPT4gZHNkLmlkID09PSByc05hbWUpIGFzIERhdGFzZXQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gIWRlZmluaXRpb24gfHwgIShkZWZpbml0aW9uLm1ldGFkYXRhID8/IFtdKS5maW5kKChtZXRhKSA9PiBtZXRhLm1ldGFkYXRhRGVmLm5hbWUgPT09ICdfZ2VvS2V5Jyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChyc05hbWUpID0+IHJlc3VsdFNldHNbcnNOYW1lID8/ICcnXSlcbiAgICAgICAgICAuZmlsdGVyKChyc05hbWUpID0+ICEhcnNOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFNldEFycmF5LnJlZHVjZSgocnMxLCByczIpID0+IFJlc3VsdHNldFV0aWxzLm1lcmdlUmVzdWx0U2V0cyhyczEsIHJzMiksIHtcbiAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgICAgcmVsYXRpb25zOiBbXSxcbiAgICAgICAgICBtZXJnZWQ6IHJlc3VsdFNldEFycmF5Lmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIHYpID0+IGVxdWFsKHAsIHYpKVxuICAgICk7XG4gIH1cblxuICBnZW5lcmF0ZVRvb2x0aXAodmFsdWU6IHtcbiAgICBvQ2xhc3M6IHN0cmluZztcbiAgICBjb29yZGluYXRlczogUGl4ZWw7XG4gICAgdmFsdWVzOiBhbnk7XG4gIH0pOiBQcm9taXNlPENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD4gfCBudWxsPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQkID0gdGhpcy50b29sdGlwRmFjdG9yeVNlcnZpY2UuZ2VuZXJhdGVUb29sdGlwKHZhbHVlLm9DbGFzcywgdGhpcy5pbmplY3RvciwgdGhpcy5wb3B1cENvbnRlbnQpO1xuICAgICAgdGhpcy5wcmV2aW91c1Rvb2x0aXBTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnByZXZpb3VzVG9vbHRpcFN1YiA9IGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzVG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Rvb2x0aXAuZGVzdHJveSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdmFsdWU7XG4gICAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlLnBvcHVwID0gdGhpcy5wb3B1cDtcbiAgICAgICAgICByZXNvbHZlKGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RGVmYXVsdExheWVyVGl0bGUoXG4gICAgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgICBjYXBhYmlsaXRpZXM6XG4gICAgICB8IHtcbiAgICAgICAgICBbcDogc3RyaW5nXTogR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UgfCBudWxsO1xuICAgICAgICB9XG4gICAgICB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoIWxheWVyLnRpdGxlKSB7XG4gICAgICBpZiAoWydnZW9zZXJ2ZXInLCAnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkpIHtcbiAgICAgICAgY29uc3QgZ2VvTGF5ZXIgPSBsYXllciBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMgfCBNYXBXTVNMYXllckxheWVyT3B0aW9ucztcbiAgICAgICAgY29uc3QgbGF5ZXJDYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMgPyBjYXBhYmlsaXRpZXNbZ2VvTGF5ZXIudXJsXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobGF5ZXJDYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ0xheWVyID0gWE1MVXRpbHMuZ2V0TWF0Y2hpbmdMYXllcihnZW9MYXllci5wYXJhbUxheWVyLCBsYXllckNhcGFiaWxpdGllcy5kb2MpO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0xheWVyKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1RpdGxlID0gWE1MVXRpbHMuZmluZChtYXRjaGluZ0xheWVyLmNoaWxkTm9kZXMsICdUaXRsZScpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVGl0bGUpIHtcbiAgICAgICAgICAgICAgbGF5ZXIudGl0bGUgPVxuICAgICAgICAgICAgICAgICEhbWF0Y2hpbmdUaXRsZS50ZXh0Q29udGVudCAmJiBtYXRjaGluZ1RpdGxlLnRleHRDb250ZW50Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgID8gbWF0Y2hpbmdUaXRsZS50ZXh0Q29udGVudFxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYXllci50aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLiR7bGF5ZXIudHlwZX1gLCB7IC4uLmxheWVyIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpdE1hcEZvck9iamVjdHMoXG4gICAgc2VsZWN0ZWRJZHM/OiBzdHJpbmdbXSxcbiAgICBleHRlbnRzOiB7XG4gICAgICBkYXRhc291cmNlOiBzdHJpbmc7XG4gICAgICBleHRlbnQ6IENvb3JkaW5hdGVbXTtcbiAgICB9W10gPSBbXVxuICApIHtcbiAgICBsZXQgZXh0ZW50ID0gY3JlYXRlRW1wdHkoKTtcbiAgICBjb25zdCBsaXN0T2ZNYXJrZXJzID0gW10gYXMgYW55W107XG5cbiAgICAvKiBNYW5kYXRvcnkgZml0ICovXG4gICAgdGhpcy5tYXBcbiAgICAgIC5nZXRBbGxMYXllcnMoKVxuICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldFByb3BlcnRpZXMoKVsnZml0J10pXG4gICAgICAuZmlsdGVyKChsYXllcikgPT4gISFsYXllci5nZXRTb3VyY2UgJiYgISFsYXllci5nZXRTb3VyY2UoKSAmJiAhIShsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpLmdldEZlYXR1cmVzKVxuICAgICAgLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgIChsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpLmdldEZlYXR1cmVzKCkuZm9yRWFjaCgoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBmZWF0dXJlLmdldCgnaWQnKTtcbiAgICAgICAgICBpZiAoIXNlbGVjdGVkSWRzIHx8IHNlbGVjdGVkSWRzLmxlbmd0aCA8PSAwIHx8IChzZWxlY3RlZElkcy5sZW5ndGggPiAwICYmIHNlbGVjdGVkSWRzLmluY2x1ZGVzKGlkKSkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmVhdHVyZS5nZXQoJ3R5cGUnKSkge1xuICAgICAgICAgICAgICBjYXNlICdoZWF0cG9pbnQnOlxuICAgICAgICAgICAgICBjYXNlICdwb2ludCc6XG4gICAgICAgICAgICAgIGNhc2UgJ21hcmtlcic6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnbGluZSc6XG4gICAgICAgICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaCguLi5mZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgICAgICAgICBjYXNlICdtdWx0aS1saW5lJzpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goLi4uZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCkuZmxhdCgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnbXVsdGktcG9seWdvbic6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpLmZsYXQoKS5mbGF0KCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaChmZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q2VudGVyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHNlbGVjdGVkRXh0ZW50ID0gYm91bmRpbmdFeHRlbnQoXG4gICAgICBsaXN0T2ZNYXJrZXJzLmZpbHRlcigoY29vcmQpID0+ICEhY29vcmQpLmNvbmNhdCguLi5leHRlbnRzLm1hcCgoZXh0ZW50KSA9PiBleHRlbnQuZXh0ZW50KSlcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWRFeHRlbnRbMF0gIT09IEluZmluaXR5ICYmXG4gICAgICBzZWxlY3RlZEV4dGVudFsxXSAhPT0gSW5maW5pdHkgJiZcbiAgICAgIHNlbGVjdGVkRXh0ZW50WzJdICE9PSAtSW5maW5pdHkgJiZcbiAgICAgIHNlbGVjdGVkRXh0ZW50WzNdICE9PSAtSW5maW5pdHlcbiAgICApIHtcbiAgICAgIGV4dGVudCA9IHNlbGVjdGVkRXh0ZW50O1xuICAgIH1cblxuICAgIGlmIChleHRlbnRbMF0gIT09IEluZmluaXR5ICYmIGV4dGVudFsxXSAhPT0gSW5maW5pdHkgJiYgZXh0ZW50WzJdICE9PSAtSW5maW5pdHkgJiYgZXh0ZW50WzNdICE9PSAtSW5maW5pdHkpIHtcbiAgICAgIHRoaXMubWFwLmdldFZpZXcoKS5maXQoZXh0ZW50LCB7IHBhZGRpbmc6IFsyMCwgMjAsIDcwLCA3MF0sIGR1cmF0aW9uOiAyMDAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVzRm9yRHJhd2luZyhjbGFzc2VzOiBDbGFzc1tdLCBjbGFzc0lkOiBzdHJpbmcsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBjbGFzc09iaiA9IGNsYXNzZXMuZmluZCgoY2wpID0+IGNsLmlkID09PSBjbGFzc0lkKSA/PyAoeyBhdHRyaWJ1dGVzOiBbXSBhcyBBdHRyaWJ1dGVbXSB9IGFzIENsYXNzKTtcbiAgICBjb25zdCBsb2NhdGlvbkF0dHJpYnV0ZSA9IHRoaXMuZ2V0TG9jYXRpb25BdHRyaWJ1dGUoY2xhc3NPYmosIGxheWVyKTtcbiAgICBjb25zdCBpbnRlbnNpdHlBdHRyaWJ1dGUgPSB0aGlzLmdldEludGVuc2l0eUF0dHJpYnV0ZShcbiAgICAgIGNsYXNzT2JqLFxuICAgICAgbGF5ZXIgYXMgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9uc1xuICAgICk7XG4gICAgcmV0dXJuIHsgbG9jYXRpb25BdHRyaWJ1dGUsIGludGVuc2l0eUF0dHJpYnV0ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnRlbnNpdHlBdHRyaWJ1dGUoXG4gICAgY2xhc3NPYmo6IENsYXNzIHwgdW5kZWZpbmVkLFxuICAgIGxheWVyOiBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICAoY2xhc3NPYmogfHwgeyBhdHRyaWJ1dGVzOiBbXSB9KS5hdHRyaWJ1dGVzLmZpbmQoXG4gICAgICAgIChhdHRyKSA9PiBhdHRyLnRlY2huaWNhbE5hbWUgPT09IGxheWVyPy5pbnRlbnNpdHlBdHRyaWJ1dGUgPz8gJydcbiAgICAgICkgPz8gKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhdGlvbkF0dHJpYnV0ZShjbGFzc09iajogQ2xhc3MsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpOiBBdHRyaWJ1dGUge1xuICAgIHR5cGUgbGF5ZXJzID0gTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucztcbiAgICBjb25zdCBzcGVjaWZpY0xheWVyID0gbGF5ZXIgYXMgbGF5ZXJzO1xuICAgIHJldHVybiAoXG4gICAgICBjbGFzc09iai5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gKHNwZWNpZmljTGF5ZXI/LmF0dHJpYnV0ZSA/PyBbXSkgPz8gJycpID8/XG4gICAgICAodW5kZWZpbmVkIGFzIHVua25vd24gYXMgQXR0cmlidXRlKVxuICAgICk7XG4gIH1cblxuICBjaGFuZ2VTdHlsZSgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuc3R5bGUgPSAkZXZlbnQ7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuc3R5bGUgIT09IHRoaXMuU1RZTEVfRlJPTV9VUkwpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnN0eWxlVVJMO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0eWxlVVJMKCRldmVudDogRXZlbnQpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5vcHRpb25zQ29weS5zdHlsZVVSTCA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZUZpdCgkZXZlbnQ6IGJvb2xlYW4sIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci5maXQgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VTbGlkZSgkZXZlbnQ6IHVuZGVmaW5lZCB8ICdsZWZ0JyB8ICdyaWdodCcsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci5zbGlkZSA9ICRldmVudDtcbiAgfVxuXG4gIGNoYW5nZUF0dHJpYnV0aW9ucygkZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucyA9ICRldmVudDtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5hdHRyaWJ1dGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5mb3JFYWNoKChsYXllcikgPT4gKGxheWVyLmF0dHJpYnV0aW9uID0gJycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZvckVhY2goKGxheWVyKSA9PiBkZWxldGUgbGF5ZXIuYXR0cmlidXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGFkZExheWVyKCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID0gW107XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLnB1c2goeyBhdHRyaWJ1dGU6ICcnIH0gYXMgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTtcbiAgfVxuXG4gIGNoYW5nZUxheWVyVHlwZSgkZXZlbnQ6IGFueSwgaTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA/PyBbXTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0udHlwZSA9ICRldmVudDtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0udHlwZSA9PT0gJ3dtcycpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXSBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMucGFyYW1MYXllciA9IG9wdGlvbnMucGFyYW1MYXllciA/PyAnJztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID09PSAnd210cycpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXSBhcyBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zLnBhcmFtTGF5ZXIgPSBvcHRpb25zLnBhcmFtTGF5ZXIgPz8gJyc7XG4gICAgICBvcHRpb25zLnN0eWxlID0gb3B0aW9ucy5zdHlsZSA/PyAnJztcbiAgICAgIG9wdGlvbnMubWF0cml4U2V0ID0gb3B0aW9ucy5tYXRyaXhTZXQgPz8gJyc7XG4gICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsID8/ICcnO1xuICAgIH1cbiAgICBpZiAoWydmZWF0dXJlbGF5ZXInLCAndmVjdG9ydGlsZScsICdyYXN0ZXJ0aWxlJ10uaW5jbHVkZXModGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0udHlwZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXSBhcyBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCA/PyAnJztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUaXRsZSgkZXZlbnQ6IGFueSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGxheWVyLnRpdGxlID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgZW1pdE1hbmlmZXN0KCkge1xuICAgIHRoaXMubWFuaWZlc3RNb2RpZmllZC5lbWl0KHtcbiAgICAgIHdpZGdldEluZGV4OiB0aGlzLndpZGdldEluZGV4LFxuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgb3B0aW9uczogeyAuLi50aGlzLm9wdGlvbnNDb3B5LCBsYXllcnM6ICh0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA/PyBbXSkuZmlsdGVyKChsYXllcikgPT4gISFsYXllci50eXBlKSB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VMb2NhdGlvbkF0dHJpYnV0ZXMoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuYXR0cmlidXRlID0gJGV2ZW50O1xuICB9XG5cbiAgbGF5ZXJIYXNJbnRlbnNpdHkobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyk6IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMge1xuICAgIHJldHVybiA8TWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucz5sYXllcjtcbiAgfVxuXG4gIGNoYW5nZUludGVuc2l0eUF0dHJpYnV0ZXMoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllcl8gPSA8TWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucz5sYXllcjtcbiAgICBsYXllcl8uaW50ZW5zaXR5QXR0cmlidXRlID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQ2xhc3NlcygkZXZlbnQ6IHN0cmluZ1tdLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzXG4gICAgICB8IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucztcbiAgICBzcGVjaWZpY0xheWVyLmNsYXNzZXMgPSAkZXZlbnQ7XG4gIH1cblxuICBkZWxldGVMYXllcihpOiBudW1iZXIsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5Py5sYXllcnM/LnNwbGljZShpLCAxKTtcbiAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2F1dG8nKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5Lmlnbm9yZUF1dG9MYXllciA9IFsuLi4odGhpcy5vcHRpb25zQ29weS5pZ25vcmVBdXRvTGF5ZXIgPz8gW10pLCBsYXllci5rZXkgKyAnLScgKyBsYXllci5zdWJUeXBlXTtcbiAgICB9XG4gIH1cblxuICBpbnZlcnRMYXllcnMoaWR4OiBudW1iZXIsIGlkeFdpdGg6IG51bWJlcikge1xuICAgIGlmICghIXRoaXMub3B0aW9uc0NvcHkgJiYgISF0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgY29uc3QgdG1wT3JkZXIgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpZHhXaXRoXS5vcmRlcjtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2lkeFdpdGhdLm9yZGVyID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4XS5vcmRlcjtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2lkeF0ub3JkZXIgPSB0bXBPcmRlcjtcbiAgICAgIGNvbnN0IHRtcEluZGV4ID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4V2l0aF07XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpZHhXaXRoXSA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2lkeF07XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpZHhdID0gdG1wSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVXJsKFxuICAgICRldmVudDogRXZlbnQsXG4gICAgbGF5ZXI6XG4gICAgICB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcEZlYXR1cmVMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdNVFNMYXllckxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNcbiAgKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLnVybCA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZUF0dHJpYnV0aW9uKCRldmVudDogRXZlbnQsIGxheWVyOiBCYXNlV2lkZ2V0TWFwTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLmF0dHJpYnV0aW9uID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlUGFyYW1MYXllcigkZXZlbnQ6IEV2ZW50LCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIucGFyYW1MYXllciA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZVBhcmFtVGlsZWQoJGV2ZW50OiBib29sZWFuLCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci5wYXJhbVRpbGVkID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlTWF0cml4U2V0KCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIubWF0cml4U2V0ID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlUGFyYW1TdHlsZSgkZXZlbnQ6IEV2ZW50LCBsYXllcjogTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLnN0eWxlID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgZXhwb3J0KCkge1xuICAgIFdpZGdldE1hcFV0aWxzLmV4cG9ydE1hcEFzSW1hZ2UodGhpcy5tYXAsICdtYXAucG5nJyk7XG4gIH1cblxuICBvdmVycmlkZSB0b0ltYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFdpZGdldE1hcFV0aWxzLmdldE1hcEFzUG5nKHRoaXMubWFwKTtcbiAgfVxuXG4gIGNoYW5nZUNsdXN0ZXJlZChsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLCAkZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBsYXllci5jbHVzdGVyZWQgPSAkZXZlbnQ7XG4gICAgaWYgKGxheWVyLmNsdXN0ZXJlZCkge1xuICAgICAgbGF5ZXIuY2x1c3RlckRpc3RhbmNlID0gMTA7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQ2x1c3RlckRpc3RhbmNlKGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsICRldmVudDogRXZlbnQpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuY2x1c3RlckRpc3RhbmNlID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlT3BhY2l0eShsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCAkZXZlbnQ6IHN0cmluZykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5vcGFjaXR5ID0gcGFyc2VJbnQoJGV2ZW50LCAxMCk7XG4gIH1cblxuICBnZXRXTVNMYXllcnMoKTogTGF5ZXI8YW55PltdIHtcbiAgICByZXR1cm4gIXRoaXMubWFwXG4gICAgICA/IFtdXG4gICAgICA6IHRoaXMubWFwXG4gICAgICAgICAgLmdldEFsbExheWVycygpXG4gICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldFNvdXJjZSgpIGluc3RhbmNlb2YgVGlsZVdNUyB8fCBsYXllci5nZXRTb3VyY2UoKSBpbnN0YW5jZW9mIEltYWdlV01TKVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIucmVuZGVyZWQgPT09IHRydWUpO1xuICB9XG5cbiAgaXNMYXllclJlbmRlcmVkKGxheWVyOiBhbnkpIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFdNU0xheWVycygpLmZpbmQoKHdtc0xheWVyKSA9PiB3bXNMYXllci5nZXQoJ3RpdGxlJykgPT09IGxheWVyLnRpdGxlKTtcbiAgfVxuXG4gIGlzTGF5ZXJWaXNpYmxlKGxheWVyOiBhbnkpIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFdNU0xheWVycygpXG4gICAgICAuZmluZCgod21zTGF5ZXIpID0+IHdtc0xheWVyLmdldCgndGl0bGUnKSA9PT0gbGF5ZXIudGl0bGUpXG4gICAgICA/LmdldFZpc2libGUoKTtcbiAgfVxuXG4gIGdldEZlYXR1cmVGcm9tU2VydmVyKHdtc0xheWVyczogTGF5ZXI8YW55PltdLCBwaXhlbDogUGl4ZWwpIHtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHdtc0xheWVycykge1xuICAgICAgY29uc3QgdXJsID0gbGF5ZXJcbiAgICAgICAgLmdldFNvdXJjZSgpXG4gICAgICAgIC5nZXRGZWF0dXJlSW5mb1VybChwaXhlbCwgdGhpcy5tYXAuZ2V0VmlldygpLmdldFJlc29sdXRpb24oKSwgdGhpcy5tYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKSwge1xuICAgICAgICAgIElORk9fRk9STUFUOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgRkVBVFVSRV9DT1VOVDogMTAsXG4gICAgICAgICAgLi4ubGF5ZXIuZ2V0UHJvcGVydGllcygpWydnZXRGZWF0dXJlSW5mb0FkZGl0aW9uYWxQYXJhbWV0ZXJzJ11cbiAgICAgICAgfSk7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5nZXRXbXNGZWF0dXJlcyh7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBvQ2xhc3M6IGxheWVyLmdldFByb3BlcnRpZXMoKVsnb0NsYXNzJ10gPz8gJycsXG4gICAgICAgICAgICBjb29yZGluYXRlczogcGl4ZWxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVdtc0NsYXNzKCRldmVudDogYW55LCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci5vQ2xhc3MgPSAkZXZlbnQ7XG4gIH1cblxuICB0b2dnbGVMZWdlbmQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMubGVnZW5kVGFiID0gdGhpcy5sZWdlbmRUYWIgPT09IGluZGV4ID8gLTEgOiBpbmRleDtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZFdpbmRvdygpIHtcbiAgICB0aGlzLmxlZ2VuZFRhYk9wZW4gPSAhdGhpcy5sZWdlbmRUYWJPcGVuO1xuICAgIHRoaXMubGF5ZXJzVGFiT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlTGF5ZXJzV2luZG93KCkge1xuICAgIHRoaXMubGF5ZXJzVGFiT3BlbiA9ICF0aGlzLmxheWVyc1RhYk9wZW47XG4gICAgdGhpcy5sZWdlbmRUYWJPcGVuID0gZmFsc2U7XG4gIH1cblxuICB0b29sdGlwTW92ZShudW1iZXI6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnRvb2x0aXBDYW5Nb3ZlKG51bWJlcikpIHtcbiAgICAgIHRoaXMuc2V0U3R5bGVBc3luYyh0aGlzLnRvb2x0aXBJbmRleCwgJ25vbmUnKTtcbiAgICAgIHRoaXMudG9vbHRpcEluZGV4ID0gdGhpcy50b29sdGlwSW5kZXggKyBudW1iZXI7XG4gICAgICB0aGlzLnNldFN0eWxlQXN5bmModGhpcy50b29sdGlwSW5kZXgsICdibG9jaycpO1xuICAgIH1cbiAgfVxuXG4gIHRvb2x0aXBDYW5Nb3ZlKG51bWJlcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHRpcEluZGV4ICsgbnVtYmVyID49IDAgJiYgdGhpcy50b29sdGlwSW5kZXggKyBudW1iZXIgPCB0aGlzLnRvb2x0aXBOdW1iZXI7XG4gIH1cblxuICBwcml2YXRlIHNldFN0eWxlQXN5bmMoaWR4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldENvbnRhaW5lciA9IHRoaXMucG9wdXBDb250ZW50LmdldChpZHgpO1xuICAgICAgaWYgKHRhcmdldENvbnRhaW5lcikge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRhcmdldENvbnRhaW5lci5yb290Tm9kZXNbMF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cblxuICBnZXQgbWFwTGF5ZXJzKCkge1xuICAgIHJldHVybiAodGhpcy5tYXAgPz8geyBnZXRMYXllcnM6ICgpID0+ICh7IGdldEFycmF5OiAoKSA9PiBbXSB9KSB9KVxuICAgICAgLmdldExheWVycygpXG4gICAgICAuZ2V0QXJyYXkoKVxuICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldCgndGl0bGUnKSAhPT0gJ2JhY2tncm91bmQnKTtcbiAgfVxuXG4gIGdldCByaWdodFNsaWRlTGF5ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLm1hcExheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXQoJ3NsaWRlJykgPT09ICdyaWdodCcpO1xuICB9XG5cbiAgZ2V0IGxlZnRTbGlkZUxheWVycygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBMYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0KCdzbGlkZScpID09PSAnbGVmdCcpO1xuICB9XG5cbiAgY2hhbmdlVmlzaWJpbGl0eShsYXllcjogQmFzZUxheWVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuc2luZ2xlTGF5ZXIpIHtcbiAgICAgIHRoaXMubWFwTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiBsYXllci5zZXRWaXNpYmxlKGZhbHNlKSk7XG4gICAgICBsYXllci5zZXRWaXNpYmxlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXllci5zZXRWaXNpYmxlKCFsYXllci5nZXRWaXNpYmxlKCkpO1xuICAgIH1cbiAgICB0aGlzLm1hcC51cGRhdGVTaXplKCk7XG4gIH1cblxuICBjaGFuZ2VTaW5nbGVMYXllcigkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuc2luZ2xlTGF5ZXIgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VBdXRvTGF5ZXIoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmF1dG9tYXRpY0xheWVycyA9ICRldmVudDtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkuYXV0b21hdGljTGF5ZXJzKSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5pZ25vcmVBdXRvTGF5ZXI7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxheWVyVmlzaWJsZUlkeCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBMYXllcnMubWFwKChsYXllciwgaWR4KSA9PiAobGF5ZXIuZ2V0VmlzaWJsZSgpID8gaWR4IDogMCkpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMucmVzZXRXbXNGZWF0dXJlcygpKTtcblxuICAgIC8vIFRyeWluZyB0byByZWxlYXNlIG9iamVjdHNcbiAgICB0aGlzLmNsZWFyTGF5ZXJzKHRoaXMubWFwLmdldExheWVycygpLmdldEFycmF5KCkpO1xuICAgIHRoaXMuY2xlYXJMYXllcnModGhpcy5wcmV2aW91c0xheWVycyk7XG4gICAgdGhpcy5tYXAuZ2V0UmVuZGVyZXIoKSEuZGlzcG9zZSgpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBkZWxldGUgdGhpcy5tYXA7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMubWFwID0gbnVsbDtcbiAgICB0aGlzLnByZXZpb3VzVG9vbHRpcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnByZXZpb3VzVG9vbHRpcD8uZGVzdHJveSgpO1xuICB9XG5cbiAgZ2V0U3R5bGUoX2xheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllciA9IF9sYXllciBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucztcbiAgICBpZiAobGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnM/LlNUWUxFUykge1xuICAgICAgcmV0dXJuIGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzPy5TVFlMRVM7XG4gICAgfVxuICAgIC8qIE5vdCBtYW5pZmVzdC1kZWZpbmVkIHN0eWxlOiB1c2UgZmlyc3QgaW4gbGluZSBiZWNhdXNlIGl0J3MgdGhlIGRlZmF1bHQgb25lIHNlbnQgYnkgZ2Vvc2VydmVyICovXG4gICAgY29uc3QgcG9zc2libGVTdHlsZXNGb3JVcmwgPSB0aGlzLnBvc3NpYmxlU3R5bGVzW2xheWVyLnVybF0gPz8geyBsYXllcnM6IHt9IH07XG4gICAgbGV0IHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyID0gcG9zc2libGVTdHlsZXNGb3JVcmwubGF5ZXJzIVtsYXllci5wYXJhbUxheWVyXTtcbiAgICBpZiAoIXBvc3NpYmxlc1N0eWxlc0ZvckxheWVyKSB7XG4gICAgICBwb3NzaWJsZXNTdHlsZXNGb3JMYXllciA9IHBvc3NpYmxlU3R5bGVzRm9yVXJsLmxheWVycyFbKGxheWVyLnBhcmFtTGF5ZXIgPz8gJzonKS5zcGxpdCgnOicpWzFdXSA/PyB7IHN0eWxlczogW10gfTtcbiAgICB9XG4gICAgcmV0dXJuIHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyLnN0eWxlc1swXT8uaWQ7XG4gIH1cblxuICBjaGFuZ2VMYXllclN0eWxlKCRldmVudDogYW55LCBfbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyID0gX2xheWVyIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zO1xuICAgIGlmICghbGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnMpIHtcbiAgICAgIGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzID0ge307XG4gICAgfVxuICAgIGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzLlNUWUxFUyA9ICRldmVudDtcbiAgfVxuXG4gIGdldEFzV21zVHlwZShfbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIHJldHVybiBfbGF5ZXIgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnM7XG4gIH1cblxuICBsYXllclN0eWxlT3B0aW9ucyhfbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyID0gX2xheWVyIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zO1xuICAgIGNvbnN0IHBvc3NpYmxlU3R5bGVzRm9yVXJsID0gdGhpcy5wb3NzaWJsZVN0eWxlc1tsYXllci51cmxdID8/IHsgbGF5ZXJzOiB7fSB9O1xuICAgIGxldCBwb3NzaWJsZXNTdHlsZXNGb3JMYXllciA9IHBvc3NpYmxlU3R5bGVzRm9yVXJsLmxheWVycyFbbGF5ZXIucGFyYW1MYXllcl07XG4gICAgaWYgKCFwb3NzaWJsZXNTdHlsZXNGb3JMYXllcikge1xuICAgICAgcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIgPSBwb3NzaWJsZVN0eWxlc0ZvclVybC5sYXllcnMhWyhsYXllci5wYXJhbUxheWVyID8/ICc6Jykuc3BsaXQoJzonKVsxXV0gPz8geyBzdHlsZXM6IFtdIH07XG4gICAgfVxuICAgIHJldHVybiBwb3NzaWJsZXNTdHlsZXNGb3JMYXllci5zdHlsZXM7XG4gIH1cblxuICB0cmlnZ2VyTGF5ZXJSZW5kZXIoKSB7XG4gICAgdGhpcy5tYXAucmVuZGVyKCk7XG4gIH1cblxuICBjaGFuZ2VTbGlkZU9wdGlvbigkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuc2xpZGUgPSAkZXZlbnQ7XG4gICAgaWYgKCRldmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5mb3JFYWNoKChsYXllcikgPT4gKGxheWVyLnNsaWRlID0gJ2FsbCcpKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVNZW51KCkge1xuICAgIHRoaXMuYWN0aW9uTWVudU9wZW4kLm5leHQoIXRoaXMuYWN0aW9uTWVudU9wZW4kLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPbFpvb21FbGVtZW50KCkge1xuICAgIHRoaXMub2xab29tRWxlbWVudCQubmV4dChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub2wtem9vbScpKTtcbiAgICBpZiAoIXRoaXMub2xab29tRWxlbWVudCQuZ2V0VmFsdWUoKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmdldE9sWm9vbUVsZW1lbnQoKSwgNTApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB6b29tSW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub2wtem9vbS1pbicpO1xuICAgICAgaWYgKHpvb21Jbikge1xuICAgICAgICB6b29tSW4uc2V0QXR0cmlidXRlKCdkYXRhLXRvb2x0aXAnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnpvb21JbicpKTtcbiAgICAgICAgem9vbUluLnNldEF0dHJpYnV0ZSgnZGF0YS10b29sdGlwLXBvc2l0aW9uJywgJ2xlZnQnKTtcbiAgICAgICAgem9vbUluLmNsYXNzTGlzdC5hZGQoJ2EtdG9vbHRpcCcsICctLW5vcG9zJyk7XG4gICAgICAgIHpvb21Jbi5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCB6b29tT3V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9sLXpvb20tb3V0Jyk7XG4gICAgICBpZiAoem9vbU91dCkge1xuICAgICAgICB6b29tT3V0LnNldEF0dHJpYnV0ZSgnZGF0YS10b29sdGlwJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC56b29tT3V0JykpO1xuICAgICAgICB6b29tT3V0LnNldEF0dHJpYnV0ZSgnZGF0YS10b29sdGlwLXBvc2l0aW9uJywgJ2xlZnQnKTtcbiAgICAgICAgem9vbU91dC5jbGFzc0xpc3QuYWRkKCdhLXRvb2x0aXAnLCAnLS1ub3BvcycpO1xuICAgICAgICB6b29tT3V0LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTZWxlY3Rpb24oYWN0aW9uOiAnY2xpY2snIHwgJ2xhc3NvJyB8ICdyZWN0YW5nbGUnIHwgJ3pvb20nIHwgJ21vdmUnIHwgJ2V4cG9ydCcgfCAndXBsb2FkJykge1xuICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLnNlbGVjdGlvbkludGVyYWN0aW9uLmNoYW5nZVNlbGVjdGlvbihhY3Rpb24pO1xuICAgIHRoaXMudG9nZ2xlTWVudSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckxheWVycyhsYXllcnM6IEJhc2VMYXllcltdKSB7XG4gICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVMYXllcihsYXllcik7XG4gICAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllciAmJiAobGF5ZXIgYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPikuZ2V0U291cmNlKCkpIHtcbiAgICAgICAgKGxheWVyIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZT4pLmdldFNvdXJjZSgpIS5jbGVhcigpO1xuICAgICAgICBsYXllci5zZXRTb3VyY2UodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIFRpbGVMYXllciAmJiAobGF5ZXIgYXMgVGlsZUxheWVyPGFueT4pLmdldFNvdXJjZSgpKSB7XG4gICAgICAgIChsYXllciBhcyBUaWxlTGF5ZXI8YW55PikuZ2V0U291cmNlKCkuY2xlYXIoKTtcbiAgICAgICAgbGF5ZXIuc2V0U291cmNlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBsYXllci5kaXNwb3NlKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LW1hcC1jc3M+PC9wcnktd2lkZ2V0LW1hcC1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLW1hcFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICNoZWFkZXJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9zdHlsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc3R5bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU3R5bGUoJGV2ZW50KVwiXG4gICAgICAgICAgW2l0ZW1zXT1cInN0eWxlcyQgfCBhc3luY1wiXG4gICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuc3R5bGVcIlxuICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICBiaW5kVmFsdWU9XCJpZGVudGlmaWVyXCJcbiAgICAgICAgICBpZD1cIm1hcF9zdHlsZVwiXG4gICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwib3B0aW9uc0NvcHkuc3R5bGUgPT09IFNUWUxFX0ZST01fVVJMXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJzdHlsZV9VUkxcIj57eyAnQHByeS53aWRnZXQubWFwLnN0eWxlVXJsJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cInN0eWxlX1VSTFwiXG4gICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlU3R5bGVVUkwoJGV2ZW50KVwiXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbnNDb3B5LnN0eWxlVVJMID8/ICcnXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNpbmdsZUxheWVyKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5zaW5nbGVMYXllciA/PyBmYWxzZVwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLnNpbmdsZUxheWVyJyB8IGkxOG4gfX1cbiAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUF1dG9MYXllcigkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYXV0b21hdGljTGF5ZXJzID8/IGZhbHNlXCI+XG4gICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuYXV0b0xheWVyJyB8IGkxOG4gfX1cbiAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUF0dHJpYnV0aW9ucygkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYXR0cmlidXRpb25zID8/IGZhbHNlXCI+XG4gICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuYXR0cmlidXRpb25zJyB8IGkxOG4gfX1cbiAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNsaWRlT3B0aW9uKCRldmVudClcIiBbbmdNb2RlbF09XCJoYXNTbGlkZUxheWVyJCB8IGFzeW5jXCI+XG4gICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGUuZ2xvYmFsJyB8IGkxOG4gfX1cbiAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2FjdGlvbnMgLWhhcy1zZXBhcmF0b3JcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFkZExheWVyKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibGlicmFyeV9hZGRcIj48L3ByeS1pY29uPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuYWRkTGF5ZXInIHwgaTE4biB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsYXllciBvZiBvcHRpb25zQ29weT8ubGF5ZXJzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzX19oZWFkXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiYS1oMyBzZXR0aW5ncy1sYXllci10aXRsZV9fdGl0bGVcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyJyB8IGkxOG4gOiB7IGluZGV4OiBpICsgMSB9IH19PC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJpbnZlcnRMYXllcnMoaSwgaSAtIDEpXCIgKm5nSWY9XCJpID4gMFwiPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZsZWNoZV9oYXV0XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LmFjdGlvbi5tb3ZlVXAnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpICsgMSlcIlxuICAgICAgICAgICAgICAqbmdJZj1cImkgPCAob3B0aW9uc0NvcHk/LmxheWVycz8ubGVuZ3RoID8/IDApIC0gMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2Jhc1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS5hY3Rpb24ubW92ZURvd24nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19fY29udGVudFwiPlxuICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIihsYXllcj8ub3BhY2l0eSA/PyAxMDApICsgJydcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlT3BhY2l0eShsYXllciwgJGV2ZW50KVwiXG4gICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0Lm1hcC5vcGFjaXR5XCJcbiAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICA+PC9wcnktcmFuZ2U+XG5cbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyT3B0aW9ucycgfCBpMThuIDogeyBpbmRleDogaSArIDEgfSB9fTwvbGVnZW5kPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xheWVyVGl0bGVcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyVGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlkPVwibWFwX2xheWVyVGl0bGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVRpdGxlKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIudGl0bGUgPz8gJydcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIiFbJ2dlb3NlcnZlcicsICdhdXRvJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sYXllclR5cGVcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMYXllclR5cGUoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cImxheWVyVHlwZXNcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLnR5cGVcIlxuICAgICAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLlwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJUeXBlXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0QXNXbXNUeXBlKGxheWVyKSBhcyB3bXNsYXllclwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbGF5ZXJTdHlsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTdHlsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5ZXJTdHlsZSgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwibGF5ZXJTdHlsZU9wdGlvbnMobGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFN0eWxlKGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBpZD1cIm1hcF9sYXllclN0eWxlXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUZpdCgkZXZlbnQsIGxheWVyKVwiIFtuZ01vZGVsXT1cImxheWVyLmZpdFwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmZpdCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyZWxhdGlvbicgJiZcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd21zJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXRzJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdnZW9zZXJ2ZXInICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2ZlYXR1cmVsYXllcicgJiZcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAndmVjdG9ydGlsZScgJiZcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmFzdGVydGlsZScgJiZcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnYXV0bydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2NsYXNzZXNcIj57eyAnQHByeS53aWRnZXQubWFwLmNsYXNzZXMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2xhc3NlcygkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cInVzZWRDbGFzc2VzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuY2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgIGlkPVwibWFwX2NsYXNzZXNcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyZWxhdGlvbicgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXMnICYmXG4gICAgICAgICAgICBsYXllci50eXBlICE9PSAnd210cycgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdnZW9zZXJ2ZXInICYmXG4gICAgICAgICAgICBsYXllci50eXBlICE9PSAnZmVhdHVyZWxheWVyJyAmJlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3ZlY3RvcnRpbGUnICYmXG4gICAgICAgICAgICBsYXllci50eXBlICE9PSAncmFzdGVydGlsZSdcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sb2NhdGlvbkF0dHInIHwgaTE4biB9fTwvbGVnZW5kPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGxheWVyXG4gICAgICAgICAgICAgICAgfCBnZW9tZXRyeUZpZWxkc0ZvciA6IHsgcmVzdWx0U2V0OiByZXN1bHRTZXQkLCBjbGFzc2VzOiBsYXllci5jbGFzc2VzLCB0eXBlOiBsYXllci50eXBlIH1cbiAgICAgICAgICAgICAgICB8IGFzeW5jIGFzIGZpZWxkc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgWydoZWF0bWFwJywgJ2J1YmJsZScsICdtYXJrZXInLCAncG9pbnQnLCAnbGluZScsICdwb2x5Z29uJywgJ211bHRpLWxpbmUnLCAnbXVsdGktcG9seWdvbiddLmluZGV4T2YoXG4gICAgICAgICAgICAgICAgICBsYXllci50eXBlXG4gICAgICAgICAgICAgICAgKSA+PSAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xvY2F0aW9uQXR0cmlidXRlX2JvdGhcIj57e1xuICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sb2NhdGlvbkF0dHJpYnV0ZS5ib3RoJyB8IGkxOG5cbiAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxvY2F0aW9uQXR0cmlidXRlcygkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiZmllbGRzXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfbG9jYXRpb25BdHRyaWJ1dGVfYm90aFwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlsnaGVhdG1hcCcsICdidWJibGUnXS5pbmRleE9mKGxheWVyLnR5cGUpID49IDBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfaW50ZW5zaXR5QXR0cmlidXRlXCI+e3tcbiAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAuaW50ZW5zaXR5QXR0cmlidXRlJyB8IGkxOG5cbiAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUludGVuc2l0eUF0dHJpYnV0ZXMoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllckhhc0ludGVuc2l0eShsYXllcikuaW50ZW5zaXR5QXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBpZD1cIm1hcF9pbnRlbnNpdHlBdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd3bXMnIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJyB8fFxuICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3dtdHMnIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSAnZmVhdHVyZWxheWVyJyB8fFxuICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3ZlY3RvcnRpbGUnIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSAncmFzdGVydGlsZSdcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheWVyLnR5cGUgIT09ICdnZW9zZXJ2ZXInXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3VybFwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLnVybCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX3VybFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlVXJsKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIudXJsXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwibGF5ZXIudHlwZSA9PT0gJ3dtcycgfHwgbGF5ZXIudHlwZSA9PT0gJ3dtdHMnXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3dtc19wYXJhbUxheWVyXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMucGFyYW1MYXllcicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfcGFyYW1MYXllclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlUGFyYW1MYXllcigkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5wYXJhbUxheWVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJsYXllci50eXBlID09PSAnd210cydcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX21hdHJpeFNldFwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLm1hdHJpeFNldCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfbWF0cml4U2V0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VNYXRyaXhTZXQoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIubWF0cml4U2V0XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJsYXllci50eXBlID09PSAnd210cydcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3N0eWxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMuc3R5bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX3N0eWxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VQYXJhbVN0eWxlKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnN0eWxlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJsYXllci50eXBlID09PSAnd21zJyB8fCBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJ1wiPlxuICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC50aWxlJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUGFyYW1UaWxlZCgkZXZlbnQsIGxheWVyKVwiIFtuZ01vZGVsXT1cImxheWVyPy5wYXJhbVRpbGVkID8/IGZhbHNlXCI+XG4gICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAud21zLnBhcmFtVGlsZWQnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgPGZpZWxkc2V0ICpuZ0lmPVwibGF5ZXIudHlwZSA9PT0gJ21hcmtlcidcIj5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmNsdXN0ZXJpbmcnIHwgaTE4biB9fTwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2x1c3RlcmVkKGxheWVyLCAkZXZlbnQpXCIgW25nTW9kZWxdPVwibGF5ZXIuY2x1c3RlcmVkXCI+XG4gICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuY2x1c3RlcmVkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXllci5jbHVzdGVyZWRcIj5cbiAgICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuY2x1c3RlcmVkXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2x1c3RlckRpc3RhbmNlKGxheWVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5tYXAuY2x1c3RlckRpc3RhbmNlXCJcbiAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgIG1heD1cIjUwMFwiXG4gICAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwib3B0aW9uc0NvcHkuc2xpZGUgPz8gZmFsc2VcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwic2xpZGVfc2VsZWN0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2xpZGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInNsaWRlc1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5zbGlkZSA/PyAnYWxsJ1wiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBpZD1cInNsaWRlX3NlbGVjdFwiXG4gICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwib3B0aW9uc0NvcHkuYXR0cmlidXRpb25zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImF0dHJpYnV0aW9uXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hdHRyaWJ1dGlvbicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwiYXR0cmlidXRpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZUF0dHJpYnV0aW9uKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5hdHRyaWJ1dGlvbiA/IGxheWVyLmF0dHJpYnV0aW9uIDogJydcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlTGF5ZXIoaSwgbGF5ZXIpXCJcbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiXG4gICAgICAgICAgKm5nSWY9XCJsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJ1wiXG4gICAgICAgICAgZGF0YS1mdW5jPVwiZGVsZXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE5XCIgW2hlaWdodF09XCIxOVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5kZWxldGVMYXllcicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tYnRuLWdyb3VwIC1tYXAtc2VsZWN0aW9uLWNob2ljZSAtdmVydGljYWxcIlxuICAgIFtjbGFzcy4td2l0aC1oZWFkZXJdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW2NsYXNzLi1jbG9zZWRdPVwiIShhY3Rpb25NZW51T3BlbiQgfCBhc3luYylcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIi12ZXJ0aWNhbFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGJhc2ljQWN0aW9ucyQgfCBhc3luY1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5IGEtdG9vbHRpcCBhLXRvb2x0aXAtLXt7IGFjdGlvbiB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVNlbGVjdGlvbihhY3Rpb24pXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC4nICsgYWN0aW9uIHwgaTE4blwiXG4gICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIFtpY29uU3ZnXT1cImFjdGlvblwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuJyArIGFjdGlvbiB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBhLXRvb2x0aXAgLW1hcC10b2dnbGVcIlxuICAgICAgaWQ9XCJvcGVuX21lbnVcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJhY3Rpb25NZW51T3BlbiQgfCBhc3luY1wiXG4gICAgICBhcmlhLWNvbnRyb2xzPVwiZXhwb3J0X3R5cGVcIlxuICAgICAgYXJpYS1oYXNwb3B1cD1cIm1lbnVcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiXG4gICAgPlxuICAgICAgPHByeS1pY29uXG4gICAgICAgIFtpY29uU3ZnXT1cIihhY3Rpb25NZW51T3BlbiQgfCBhc3luYykgPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgIFtoZWlnaHRdPVwiMjRcIlxuICAgICAgPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5vcGVuJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cCAtbWFwLXNlbGVjdGlvbi1jaG9pY2UgLW1hcC1leHBvcnRcIiBbY2xhc3MuLXdpdGgtaGVhZGVyXT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBhLXRvb2x0aXBcIlxuICAgICAgaWQ9XCJleHBvcnRfY2FyZFwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgYXJpYS1jb250cm9scz1cImV4cG9ydF90eXBlXCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJtZW51XCJcbiAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLmV4cG9ydCcgfCBpMThuXCJcbiAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgIChjbGljayk9XCJleHBvcnQoKVwiXG4gICAgPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJmaWxlX2Rvd25sb2FkXCI+PC9wcnktaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmV4cG9ydCcgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJvbC1jb250cm9sIG0tbGF5ZXItc3dpdGNoZXIgbS1tYXAtbGF5ZXItYWN0aW9uXCJcbiAgICAqbmdJZj1cIigobGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJsYXllcnNUb3AkIHwgYXN5bmNcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RvZ2dsZVwiXG4gICAgICBbY2xhc3MuYS10b29sdGlwXT1cIiF0aGlzLmxheWVyc1RhYk9wZW5cIlxuICAgICAgW2NsYXNzLi10b29sdGlwLW5vLXdyYXBdPVwiIXRoaXMubGF5ZXJzVGFiT3BlblwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlTGF5ZXJzV2luZG93KClcIlxuICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAuc2VsZWN0TGF5ZXJzJyB8IGkxOG5cIlxuICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJsYXllcnNcIiBbd2lkdGhdPVwiMThcIiBbaGVpZ2h0XT1cIjE4XCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX19jb250YWluZXJcIiBbY2xhc3MuLWhpZGRlbl09XCIhbGF5ZXJzVGFiT3BlblwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhLWg0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllcnNUaXRsZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgbWFwTGF5ZXJzOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX190aXRsZSBtLWxheWVyLXN3aXRjaGVyX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgKm5nSWY9XCIhKG9wdGlvbnMkIHwgYXN5bmMpPy5zaW5nbGVMYXllcjsgZWxzZSBzaW5nbGVMYXllclwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5nZXRWaXNpYmxlKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VWaXNpYmlsaXR5KGxheWVyKVwiXG4gICAgICAgICAgPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlTGF5ZXI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImxheWVyXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidyYWRpby1sYXllci0nICsgbGF5ZXIuZ2V0KCd0aXRsZScpLnNwbGl0KCcgJylbMF1cIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllclZpc2libGVJZHhcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVZpc2liaWxpdHkobGF5ZXIpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICB7eyBsYXllci5nZXQoJ3RpdGxlJykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwib2wtY29udHJvbCBtLW1hcC1sYXllci1hY3Rpb24gbS1sYXllci1sZWdlbmRcIlxuICAgICpuZ0lmPVwiKChsZWdlbmRMYXllcnMkIHwgYXN5bmMpPy5sZW5ndGggPz8gMCkgPiAwXCJcbiAgICBbc3R5bGUudG9wLnB4XT1cImxlZ2VuZFRvcCQgfCBhc3luY1wiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9fdG9nZ2xlXCJcbiAgICAgIFtjbGFzcy5hLXRvb2x0aXBdPVwiIXRoaXMubGVnZW5kVGFiT3BlblwiXG4gICAgICBbY2xhc3MuLXRvb2x0aXAtbm8td3JhcF09XCIhdGhpcy5sZWdlbmRUYWJPcGVuXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVMZWdlbmRXaW5kb3coKVwiXG4gICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmRzJyB8IGkxOG5cIlxuICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJsZWdlbmRcIiBbd2lkdGhdPVwiMThcIiBbaGVpZ2h0XT1cIjE1XCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX19jb250YWluZXJcIiBbY2xhc3MuLWhpZGRlbl09XCIhbGVnZW5kVGFiT3BlblwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhLWg0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmRzVGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdlb0xheWVyIG9mIGxlZ2VuZExheWVycyQgfCBhc3luYzsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9fdGl0bGUgbS1sYXllci1sZWdlbmRfX3RpdGxlXCIgKGNsaWNrKT1cInRvZ2dsZUxlZ2VuZChpbmRleClcIj5cbiAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICpuZ0lmPVwiaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKSAmJiAhIWdlb0xheWVyLnRpdGxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwibS1sYXllci1sZWdlbmRfX2Ryb3Bkb3duLWljb25cIlxuICAgICAgICAgICAgW2ljb25TdmddPVwibGVnZW5kVGFiID09PSBpbmRleCA/ICdjaGV2cm9uX3RvcCcgOiAnY2hldnJvbl9ib3R0b20nXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjEyXCJcbiAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICB7eyBnZW9MYXllci50aXRsZSB9fVxuICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgKm5nSWY9XCIhaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKVwiXG4gICAgICAgICAgICBjbGFzcz1cImEtdG9vbHRpcFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllckxvYWRFcnJvcicgfCBpMThuXCJcbiAgICAgICAgICAgIFtpY29uU3ZnXT1cIidjbG9zZSdcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjIyXCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMjJcIlxuICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX19pbWFnZVwiXG4gICAgICAgICAgW2NsYXNzLi1oaWRkZW5dPVwiIWxlZ2VuZFRhYk9wZW4gfHwgbGVnZW5kVGFiICE9PSBpbmRleCB8fCAhaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKVwiXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwibGVnZW5kSGVpZ2h0JCB8IGFzeW5jXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZW9MYXllciB8IGxlZ2VuZFVybCA6IHsgY2FwYWJpbGl0aWVzOiAod21zQ2FwYWJpbGl0aWVzJCB8IGFzeW5jKSB9IGFzIHVybFwiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBbc3JjXT1cInVybCB8IGdldFNlY3VyZWRJbWFnZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW2FsdF09XCInQHByeS53aWRnZXQubWFwLmxlZ2VuZCcgfCBpMThuIDogeyBsYXllcjogZ2VvTGF5ZXIudGl0bGUgfVwiXG4gICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZU5vdFByb3ZpZGVkW2luZGV4XSA9IHRydWVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShnZW9MYXllciB8IGxlZ2VuZFVybCA6IHsgY2FwYWJpbGl0aWVzOiAod21zQ2FwYWJpbGl0aWVzJCB8IGFzeW5jKSB9KVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX2Vycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmROb3RQcm92aWRlZCcgfCBpMThuIH19PC9wPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kIC1sZWZ0XCIgKm5nSWY9XCJsZWZ0U2xpZGVMYXllcnMubGVuZ3RoID4gMFwiIFtzdHlsZS50b3AucHhdPVwibGVnZW5kVG9wJCB8IGFzeW5jXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtLW1hcC1zbGlkZS1sZWdlbmRfX3RpdGxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZVRpdGxlJyB8IGkxOG4gfX06PC9zcGFuPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGxheWVyIG9mIGxlZnRTbGlkZUxheWVyc1wiPlxuICAgICAge3sgbGF5ZXIuZ2V0KCd0aXRsZScpIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtLW1hcC1zbGlkZS1sZWdlbmQgLXJpZ2h0XCIgKm5nSWY9XCJyaWdodFNsaWRlTGF5ZXJzLmxlbmd0aCA+IDBcIiBbc3R5bGUudG9wLnB4XT1cImxlZ2VuZFRvcCQgfCBhc3luY1wiPlxuICAgIDxzcGFuIGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kX190aXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGVUaXRsZScgfCBpMThuIH19Ojwvc3Bhbj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsYXllciBvZiByaWdodFNsaWRlTGF5ZXJzXCI+XG4gICAgICB7eyBsYXllci5nZXQoJ3RpdGxlJykgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodCQgfCBhc3luY1wiIGNsYXNzPVwiby1tYXAtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1hcFwiPlxuICAgICAgPGRpdiAjbWFwUmVmIGlkPVwibWFwXCI+PC9kaXY+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgbWluPVwiMFwiXG4gICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgIHN0ZXA9XCIwLjAxXCJcbiAgICAgICAgdmFsdWU9XCI1MFwiXG4gICAgICAgICNzbGlkZXJFbGVtZW50XG4gICAgICAgIGNsYXNzPVwiby1tYXAtc2xpZGVyXCJcbiAgICAgICAgW2NsYXNzLi1oaWRkZW5dPVwiIShoYXNTbGlkZUxheWVyJCB8IGFzeW5jKVwiXG4gICAgICAgIChpbnB1dCk9XCJ0cmlnZ2VyTGF5ZXJSZW5kZXIoKVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICNwb3B1cCBjbGFzcz1cIm0tdG9vbHRpcCBtLXRvb2x0aXAtLXBvcHVwXCIgW2hpZGRlbl09XCJ0cnVlXCIgcm9sZT1cInRvb2x0aXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibS10b29sdGlwLS1wb3B1cF9faGVhZGVyXCI+XG4gICAgICA8cD57eyB0aGlzLnRvb2x0aXBJbmRleCArIDEgfX0gLyB7eyB0aGlzLnRvb2x0aXBOdW1iZXIgfX08L3A+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJ0b29sdGlwTW92ZSgtMSlcIiBbZGlzYWJsZWRdPVwiIXRvb2x0aXBDYW5Nb3ZlKC0xKVwiPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFycm93X2JhY2tcIj48L3ByeS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJ0b29sdGlwTW92ZSgxKVwiIFtkaXNhYmxlZF09XCIhdG9vbHRpcENhbk1vdmUoMSlcIj5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhcnJvd19yaWdodFwiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS10b29sdGlwLS1wb3B1cF9fY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICNwb3B1cENvbnRlbnQ+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
1107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1tYXAvY29tcG9uZW50L3dpZGdldC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBT0wsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsbUJBQW1CLEVBRW5CLGNBQWMsRUFFZCxXQUFXLEVBQ1gsbUJBQW1CLEVBRW5CLFNBQVMsRUFhVCxlQUFlLEVBQ2YsU0FBUyxFQUNULGlCQUFpQixFQUlqQixjQUFjLEVBR2QsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixlQUFlLEVBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFXLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhELE9BQU8sRUFBa0IsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWhELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHeEQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGFBQWEsRUFDYixZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sSUFBSSxFQUNKLEdBQUcsRUFDSCxRQUFRLEVBRVIsRUFBRSxFQUNGLFNBQVMsRUFFVCxTQUFTLEVBQ1QsY0FBYyxFQUNmLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxPQUFPLGlCQUFpQixNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxTQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sY0FBYyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7OztBQUduRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRWxFLDRCQUE0QjtBQUM1QixLQUFLLENBQUMsSUFBSSxDQUNSLFdBQVcsRUFDWCw2SUFBNkksQ0FDOUksQ0FBQztBQUNGLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQU1oQixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsbUJBQW1CO0lBb0d6RCxZQUNFLEtBQWlCLEVBQ1YsZ0JBQWdDLEVBQy9CLHFCQUE0QyxFQUM1QyxhQUE0QixFQUM1QixRQUFrQixFQUNsQixxQkFBNEMsRUFDNUMscUJBQTRDLEVBQ3BELEVBQWMsRUFDaUMsY0FBaUM7UUFFaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQVRWLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZ0I7UUFDL0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUVMLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQXJHbEYsZUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0I7YUFDdkQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO2FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNiLElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsT0FBTyxDQUFDLDRCQUE0QixHQUFHLENBQUMsQ0FBQzthQUN6QyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNsRixDQUFDO1FBQ0osZ0JBQVcsR0FBcUIsRUFBc0IsQ0FBQztRQU92RCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBd0MsRUFBRSxDQUFDLENBQUM7UUFPbkYseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsTUFBQyxHQUFHLENBQUMsQ0FBQztRQVFOLGFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDO1FBRXBDLHFCQUFnQixHQUF5QixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqRSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBS2QscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBRWpDLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBT2pDLEVBQUUsQ0FBQyxDQUFDO1FBRVAsdUJBQWtCLEdBQXVCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUVsRSxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDO1FBaUJsQixnQkFBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFHaEMsbUJBQWMsR0FLVixFQUFFLENBQUM7UUFDUCxpQkFBWSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDakMsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUMsQ0FBQztRQUNsRSxtQkFBYyxHQUFnQixFQUFFLENBQUM7UUFrQi9CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFBRTtZQUNoRixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsRUFBRTtZQUNsRixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRTtTQUNyRixDQUFDO1FBRUYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsZUFBZTtZQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsY0FBYztTQUM1RCxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLENBQ3pDLFFBQVE7WUFDTixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxPQUFPO2lCQUNKLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDO2lCQUM5RCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsQ0FDcEQsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSzthQUN2QixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDNUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUM3QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNsQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQzlCLElBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxZQUFZLElBQUksTUFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDM0UsSUFDRSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsV0FBVzt3QkFDdkQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFDckQsQ0FBQzt3QkFDRCxPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLFNBQVM7b0JBQ3hDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxFQUFFO29CQUNwQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxZQUFZLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQyxPQUFPO3dCQUMxRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEVBQUU7d0JBQzVDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLFlBQVksSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLE9BQU87NEJBQ3hFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsVUFBVTs0QkFDeEQsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQztZQUN2RCxJQUFJLENBQUMsY0FBYztTQUNwQixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FDRCxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDakIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUVsRCxDQUNKLEVBQ0Qsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzVDLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQzlELEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FDWDtZQUNFLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztTQUNoRSxFQUNEO1lBQ0UsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQy9CLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDO1NBQ3JFLENBQ0YsQ0FDRixDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTFFLElBQUksQ0FBQywyQkFBMkIsR0FBRyxhQUFhLENBQUM7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDeEIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNiLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM1QztZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzNFLENBQUMsQ0FBQyxJQUFJLENBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE9BQU8sV0FBVztpQkFDZixNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3pDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNWLEVBQUUsR0FBRyxFQUF3QixDQUFDO2dCQUM5QixNQUFNLFNBQVMsR0FFWCxFQUFFLENBQUM7Z0JBQ1AsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLE9BQU87b0JBQ0wsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLEdBQUcsRUFBRSxHQUFHLFlBQVksSUFDbEIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDekYsK0JBQStCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzVELE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTTtvQkFDakIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO29CQUN4RSxTQUFTLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7b0JBQzNDLFVBQVUsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztvQkFDdEMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO29CQUNiLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRTtpQkFDcEIsQ0FBQztZQUNKLENBQUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQWlDLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsRUFDRixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDM0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUNkLENBQUM7UUFFRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsYUFBYSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRO1lBQ2IsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN4QixTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ2IsR0FBRyxDQUNELENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDZCxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQWMsQ0FDckcsQ0FDRjtTQUNGLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUNELENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FDOUIsUUFBUTthQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUQsTUFBTSxhQUFhLEdBQUcsQ0FDcEIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDbEcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkYsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUN0QixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sQ0FBQztnQkFDQyxJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDM0UsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNO2dCQUNqQixHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFNLENBQUMsSUFBSTtnQkFDeEIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztnQkFDcEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYTthQUNWLENBQUEsQ0FDNUIsQ0FBQztRQUNKLENBQUMsQ0FBQzthQUNELElBQUksRUFBMkIsQ0FDckMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxTQUFTO2FBQ1gsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ2YsQ0FDRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2xGLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FFL0IsQ0FBQSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUM1QixDQUNGO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1RyxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTO1lBQ2QsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsMkJBQTJCO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0I7WUFDckIsSUFBSSxDQUFDLGtCQUFrQjtTQUN4QixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsRUFBRTtZQUNwRyw2REFBNkQ7WUFDN0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQXFCLENBQUM7WUFDM0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0IsV0FBVyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzlDLENBQUM7WUFFRCxXQUFXLENBQUMsTUFBTSxHQUFHO2dCQUNuQixHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO2dCQUN0RSxHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWU7b0JBQzdCLENBQUMsQ0FBQyxpQkFBaUI7eUJBQ2QsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixDQUFDLFdBQVcsQ0FBQyxlQUFlO3dCQUM1QixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDekU7eUJBQ0EsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNmLEdBQUcsS0FBSzt3QkFDUixHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7d0JBQ2pDLGFBQWE7d0JBQ2IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQ3RGLElBQUksRUFBRSxDQUFDO3FCQUNULENBQUMsQ0FBQztvQkFDUCxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztZQUVGLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2QyxjQUFjLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzVFLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sZUFBZSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7aUJBQy9DLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUUsS0FBa0MsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDO2lCQUMvRCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUUxQixnS0FBZ0s7WUFDaEssV0FBVyxDQUFDLE1BQU0sR0FBRztnQkFDbkIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQzFDLGFBQWE7b0JBQ2IsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO29CQUNsRixPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVzt3QkFDL0IsQ0FBQyxDQUFDLFFBQVE7NEJBQ1IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7NEJBQzlDLENBQUMsQ0FBRSxJQUF5Qzt3QkFDOUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDO2dCQUNGLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdCLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUNFLENBQUMsQ0FBQyxTQUFTO2dCQUNYLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMvRixDQUFDO2dCQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM3RixXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ25HLENBQUM7WUFFRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztnQkFFekMsOERBQThEO2dCQUM5RCxNQUFNLDJCQUEyQixHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RyxXQUFXLENBQUMsZUFBZSxHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMvRSwyQkFBMkIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQzFDLENBQUM7Z0JBQ0YsSUFBSSxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDO2dCQUNyQyxDQUFDO2dCQUVELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdkYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQztZQUVELFdBQVcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUxRSxJQUFJLFdBQVcsQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN4QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQ2hHLENBQUM7Z0JBQ0YsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ3pCLENBQUM7WUFFRDtnQkFDRSxHQUFHLElBQUksR0FBRyxDQUVOLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUkvRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUM1QjthQUNGLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzVDLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3RDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsd0JBQXdCLElBQUksQ0FBQyxNQUFNLG9CQUFvQixDQUFDLEVBQ3RFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdGLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNwRixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQ1QsSUFBSSxPQUFPLENBS1IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4RSxJQUFJLEtBQUssS0FBSyxDQUFDO3dCQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDN0IsTUFBTSxNQUFNLEdBQUcsRUFLZCxDQUFDO29CQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUN4QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQzs0QkFDVixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQzs0QkFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO3lCQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTs0QkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDOzRCQUN2RCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO2dDQUN4QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQ2xCLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDaEcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3JGLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUVsRixJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM3RSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkYsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLG9CQUFvQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxzQ0FBc0M7UUFDdkcsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUNWLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FDdEIsZUFBZTtZQUNiLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztpQkFDekIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDM0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELENBQUMsQ0FBQyxFQUFFLENBQ1AsRUFDRCxTQUFTLENBQUMsRUFBRSxDQUFDLENBQ2Q7YUFDQSxTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdEMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDZCxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQzlHLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNyQixRQUFRLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxJQUFJLENBQUMsUUFBUTtvQkFDaEIsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsS0FBSyxJQUFJLENBQUMsY0FBYztvQkFDdEIsT0FBTyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDaEM7b0JBQ0UsT0FBTyxHQUFHLEdBQUcsV0FBVyxPQUFPLENBQUMsS0FBSyxhQUFhLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLG9CQUFvQixFQUFFLENBQ3ZCLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMxQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxPQUFPO2dCQUNMLElBQUksaUJBQWlCLENBQUM7b0JBQ3BCLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7b0JBQ25DLFFBQVE7aUJBQ1QsQ0FBQyxDQUFDOzs7cUJBR0U7YUFDTixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUTthQUNWLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztZQUN2RSxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksY0FBYyxDQUFDLGdCQUFnQjtZQUM3RCxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksY0FBYyxDQUFDLGdCQUFnQjtZQUM3RCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksY0FBYyxDQUFDLGtCQUFrQjtTQUMvRCxDQUFDLENBQUMsRUFDSCxvQkFBb0IsRUFBRSxDQUN2QjthQUNBLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUN6RCxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxRQUFRO2FBQ1YsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUN0QyxvQkFBb0IsRUFBRSxDQUN2QjthQUNBLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQyxRQUFRO1lBQ2IsSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLE9BQU87U0FDYixDQUFDLENBQUMsSUFBSSxDQUNMLE1BQU0sQ0FDSixDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQy9FLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQ3BELEVBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDbkYsSUFBSSxnQkFBZ0IsR0FBRyxJQUFpRCxDQUFDO1lBRXpFLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7aUJBQ25DLE1BQU07WUFDTCxhQUFhO1lBQ2IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUNqRztpQkFDQSxNQUFNO1lBQ0wsYUFBYTtZQUNiLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUMzRztpQkFDQSxHQUFHLENBQUMsQ0FBQyxLQUE0QixFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztxQkFDcEQsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNqQixPQUFPO29CQUNQLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDO2lCQUN6RCxDQUFDLENBQUM7cUJBQ0YsTUFBTSxDQUNMLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDVCxHQUFHLENBQUM7b0JBQ0osQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztpQkFDZixDQUFDLEVBQ0YsRUFLQyxDQUNGLENBQUM7Z0JBRUosSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RFLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxDQUFDO2dCQUVELElBQUksS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLGFBQWE7Z0JBQ2IsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzt5QkFDeEMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDZixTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3BDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQ2hHLENBQ0Y7eUJBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt5QkFDbEMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBYSxDQUFDO29CQUV2RSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dCQUN0RixHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVM7d0JBQ3JCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTO3FCQUN2QixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDWCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQ3RCLEtBQVksRUFDWixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FBQztvQkFDRixXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2xDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDOUIsZ0JBQWdCLEdBQUcsV0FBbUQsQ0FBQztvQkFDekUsQ0FBQztvQkFDRCxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXRDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQzt3QkFDL0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBRTFGLElBQUksVUFBVSxFQUFFLENBQUM7NEJBQ2YsdUNBQXVDOzRCQUN0QyxXQUE2QixDQUFDLFNBQVMsRUFBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7d0JBQzNFLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQ3pCLEtBQUssQ0FBQyxLQUFLLEVBQ1gsV0FBcUUsQ0FDdEUsQ0FBQztvQkFDSixDQUFDO29CQUVELE9BQU8sV0FBVyxDQUFDO2dCQUNyQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDO29CQUNyRCxPQUFPLElBQTRCLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDLENBQUM7aUJBQ0QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTTtxQkFDcEIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDO3FCQUMzQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUs7b0JBQ0gsYUFBYTtxQkFDWixTQUFTLEVBQUU7cUJBQ1gsV0FBVyxFQUFFO3FCQUNiLE1BQU0sQ0FBQyxDQUFDLFFBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzFGO3FCQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFdEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDdkMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBMEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2pHLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3ZCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDbEcsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztZQUVqQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDNUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELHNGQUFzRjtZQUN0RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsb0NBQW9DLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFaEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUVyQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsZ0JBQWdCO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQ2pFLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUM1RixDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUNaLEdBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQWdDO3FCQUNyRyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQzVCLEdBQUcsQ0FBQyxDQUFDLEtBQStCLEVBQUUsRUFBRSxDQUN2QyxDQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBdUIsQ0FDL0YsQ0FBQyxVQUFVO3FCQUNULEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqRixNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7cUJBQ2hGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FDdkIsSUFBSSxDQUFDLHFCQUFxQjtxQkFDdkIsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUMvQixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2lCQUM5RCxDQUFDO3FCQUNqQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBaUMsRUFBRSxFQUFFLENBQ3hDLGNBQWMsQ0FBQyxnQ0FBZ0MsQ0FDN0MsS0FBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsZUFBZSxFQUNmLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FDRixFQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ2xGLENBQ0o7cUJBQ0EsSUFBSSxFQUFFLENBQ1Y7cUJBQ0EsSUFBSSxFQUFFO2dCQUNULEdBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQStCO3FCQUM5RixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQzVCLEdBQUcsQ0FBQyxDQUFDLEtBQThCLEVBQUUsRUFBRTtvQkFDdEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3JHLE9BQU8sRUFBRSxDQUFDO3dCQUNSLFVBQVUsRUFBRSxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUU7d0JBQ3JDLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRTt3QkFDcEIsS0FBSyxFQUFFLENBQUMsTUFBTTtxQkFDZixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2FBQ0wsQ0FBQztZQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ1gsRUFDRCxTQUFTLENBQ1AsRUFJRyxDQUNKLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FDRCxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FHL0UsQ0FDTixFQUNELEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDekUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDOUUsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDM0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDdkUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FDdEIsU0FBUztvQkFDVCxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1QyxJQUFJLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixhQUFhLENBQUM7WUFDWixJQUFJLENBQUMsY0FBYztZQUNuQixJQUFJLENBQUMsT0FBTztZQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxrQkFBa0I7U0FDeEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDdEUsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUMzQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUNoRixDQUFDLE1BQU0sQ0FBQztZQUNULE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBRTdFLElBQUksbUJBQW1CLElBQUksdUJBQXVCLEVBQUUsQ0FBQztnQkFDbkQsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7b0JBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUVsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUV0QixJQUFJLENBQUMsR0FBRzt5QkFDTCxZQUFZLEVBQUU7eUJBQ2QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDO3lCQUMzQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDakIsTUFBTSxXQUFXLEdBQUksS0FBSyxDQUFDLFNBQVMsRUFBbUIsRUFBRSxXQUFXLENBQUM7d0JBQ3JFLElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7NEJBQ3JDLEtBQUssQ0FBQyxTQUFTLEVBQW1CLEVBQUUsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0NBQzFFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0NBQ2pDLElBQ0UsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQzlGLENBQUM7b0NBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUN4RixDQUFDO2dDQUNKLENBQUM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDVixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzNELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixDQUFDO2dCQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxPQUFPLENBQUM7b0JBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7b0JBQ2pDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2YsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxpQkFBaUIsR0FBRyxFQUEwRCxDQUFDO2dCQUNyRixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQzVCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxDQUFDO2dCQUNILGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDckMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzdELENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDL0MsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNuRSxJQUFJLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7b0JBQzNDLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQzdELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO3dCQUN4Qyw0QkFBNEI7d0JBQzVCLE1BQU0sSUFBSSxHQUFHOzRCQUNYLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlOzRCQUNuRSxLQUFLLEVBQUUsR0FBRyxHQUFHLGVBQWU7eUJBQzdCLENBQUM7d0JBQ0YsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7d0JBQ3hELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ2xELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ3JDLENBQUM7d0JBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzs0QkFDcEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzt3QkFDdkMsQ0FBQzt3QkFDRCxVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDUCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLG9DQUFvQyxDQUFDLE1BQW1CO1FBQzlELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBQztvQkFDcEMsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDO3dCQUNuQixNQUFNOzRCQUNKLE9BQU8sU0FBUyxDQUFDO3dCQUNuQixDQUFDO3dCQUNELE9BQU8sRUFBRSxDQUFDO3dCQUNWLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7aUJBQ0gsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRVEsY0FBYztRQUNyQixPQUFPLGFBQWEsQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDaEQsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7U0FDaEQsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUN0RSxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxlQUFlLENBQUM7WUFDekIsQ0FBQztZQUNELE1BQU0sY0FBYyxHQUFHLG1CQUFtQjtpQkFDdkMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUF3QixDQUFDO2dCQUN2RixPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDekcsQ0FBQyxDQUFDO2lCQUNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDekMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ25GLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxFQUFFO2dCQUNiLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTthQUM5QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDNUMsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsS0FJZjtRQUNDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzNELElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2pDLENBQUM7b0JBQ0QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDckMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDdEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQixDQUFDO2dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUNsQixLQUE0QixFQUM1QixZQUlhO1FBRWIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxRQUFRLEdBQUcsS0FBMkQsQ0FBQztnQkFDN0UsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFFaEYsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO29CQUN0QixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUYsSUFBSSxhQUFhLEVBQUUsQ0FBQzt3QkFDbEIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUN2RSxJQUFJLGFBQWEsRUFBRSxDQUFDOzRCQUNsQixLQUFLLENBQUMsS0FBSztnQ0FDVCxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO29DQUNqRSxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVc7b0NBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUM7d0JBQ2xCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZHLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUNkLFdBQXNCLEVBQ3RCLFVBR00sRUFBRTtRQUVSLElBQUksTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQzNCLE1BQU0sYUFBYSxHQUFHLEVBQVcsQ0FBQztRQUVsQyxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLEdBQUc7YUFDTCxZQUFZLEVBQUU7YUFDZCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMvQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFFLEtBQUssQ0FBQyxTQUFTLEVBQW1CLENBQUMsV0FBVyxDQUFDO2FBQ2hILE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2hCLEtBQUssQ0FBQyxTQUFTLEVBQW1CLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3pFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDcEcsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQzVCLEtBQUssV0FBVyxDQUFDO3dCQUNqQixLQUFLLE9BQU8sQ0FBQzt3QkFDYixLQUFLLFFBQVE7NEJBQ1gsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQzs0QkFDM0QsTUFBTTt3QkFDUixLQUFLLE1BQU0sQ0FBQzt3QkFDWixLQUFLLE1BQU07NEJBQ1QsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDOzRCQUM5RCxNQUFNO3dCQUNSLEtBQUssU0FBUyxDQUFDO3dCQUNmLEtBQUssWUFBWTs0QkFDZixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQ3JFLE1BQU07d0JBQ1IsS0FBSyxlQUFlOzRCQUNsQixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQzVFLE1BQU07d0JBQ1I7NEJBQ0UsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDMUQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVMLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FDbkMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUMzRixDQUFDO1FBRUYsSUFDRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtZQUM5QixjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtZQUM5QixjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQy9CLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFDL0IsQ0FBQztZQUNELE1BQU0sR0FBRyxjQUFjLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE9BQWdCLEVBQUUsT0FBZSxFQUFFLEtBQTRCO1FBQzdGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLElBQUssRUFBRSxVQUFVLEVBQUUsRUFBaUIsRUFBWSxDQUFDO1FBQ3pHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDbkQsUUFBUSxFQUNSLEtBQW1FLENBQ3BFLENBQUM7UUFDRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU8scUJBQXFCLENBQzNCLFFBQTJCLEVBQzNCLEtBQWlFO1FBRWpFLE9BQU8sQ0FDTCxDQUFDLFFBQVEsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQzlDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLEtBQUssRUFBRSxrQkFBa0IsSUFBSSxFQUFFLENBQ2pFLElBQUssU0FBa0MsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxRQUFlLEVBQUUsS0FBNEI7UUFFeEUsTUFBTSxhQUFhLEdBQUcsS0FBZSxDQUFDO1FBQ3RDLE9BQU8sQ0FDTCxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLGFBQWEsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hHLFNBQWtDLENBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVc7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYTtRQUMxQixhQUFhO1FBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7SUFDMUQsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFlLEVBQUUsS0FBNEI7UUFDckQsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFvQyxFQUFFLEtBQTRCO1FBQzVFLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFlO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUEyQixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFXLEVBQUUsQ0FBUztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUE0QixDQUFDO1lBQ3RFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUE2QixDQUFDO1lBQ3ZFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBMkIsQ0FBQztZQUNyRSxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVcsRUFBRSxLQUE0QjtRQUNuRCxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsUUFBUSxFQUFFO2dCQUNSLEdBQUcsSUFBSSxDQUFDLFFBQVE7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7YUFDMUc7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsTUFBVyxFQUFFLEtBQTRCO1FBQ2hFLGFBQWE7UUFDYixLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBNEI7UUFDNUMsT0FBbUUsS0FBSyxDQUFDO0lBQzNFLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxNQUFXLEVBQUUsS0FBNEI7UUFDakUsTUFBTSxNQUFNLEdBQStELEtBQUssQ0FBQztRQUNqRixNQUFNLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBZ0IsRUFBRSxLQUE0QjtRQUMxRCxNQUFNLGFBQWEsR0FBRyxLQUdTLENBQUM7UUFDaEMsYUFBYSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFTLEVBQUUsS0FBNEI7UUFDakQsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BILENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVcsRUFBRSxPQUFlO1FBQ3ZDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDNUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQ1AsTUFBYSxFQUNiLEtBTTRCO1FBRTVCLGFBQWE7UUFDYixLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFhLEVBQUUsS0FBZ0M7UUFDL0QsYUFBYTtRQUNiLEtBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQWEsRUFBRSxLQUF5RDtRQUN2RixhQUFhO1FBQ2IsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBZSxFQUFFLEtBQXlEO1FBQ3pGLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBYSxFQUFFLEtBQStCO1FBQzVELGFBQWE7UUFDYixLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO0lBQ2hELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFhLEVBQUUsS0FBK0I7UUFDN0QsYUFBYTtRQUNiLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU07UUFDSixjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVEsT0FBTztRQUNkLE9BQU8sY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFrQyxFQUFFLE1BQWU7UUFDakUsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFrQyxFQUFFLE1BQWE7UUFDckUsYUFBYTtRQUNiLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUE0QixFQUFFLE1BQWM7UUFDeEQsYUFBYTtRQUNiLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNkLENBQUMsQ0FBQyxFQUFFO1lBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO2lCQUNMLFlBQVksRUFBRTtpQkFDZCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLFFBQVEsQ0FBQztnQkFDakcsYUFBYTtpQkFDWixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVTtRQUN2QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2FBQ3pCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzFELEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQXVCLEVBQUUsS0FBWTtRQUN4RCxLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sR0FBRyxHQUFHLEtBQUs7aUJBQ2QsU0FBUyxFQUFFO2lCQUNYLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUU7Z0JBQ2hHLFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQzthQUMvRCxDQUFDLENBQUM7WUFDTCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ2pCLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztvQkFDOUIsR0FBRztvQkFDSCxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7b0JBQzdDLFdBQVcsRUFBRSxLQUFLO2lCQUNuQixDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFXLEVBQUUsS0FBOEI7UUFDeEQsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYztRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztZQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYztRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVGLENBQUM7SUFFTyxhQUFhLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDOUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLGFBQWE7Z0JBQ2IsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQy9ELFNBQVMsRUFBRTthQUNYLFFBQVEsRUFBRTthQUNWLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWdCO1FBQy9CLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzNELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQVc7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBVztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVRLFdBQVc7UUFDbEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUV6RCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2hCLGFBQWE7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQTZCO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLE1BQTRELENBQUM7UUFDM0UsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDdkMsT0FBTyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO1FBQzVDLENBQUM7UUFDRCxrR0FBa0c7UUFDbEcsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM5RSxJQUFJLHVCQUF1QixHQUFHLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDN0IsdUJBQXVCLEdBQUcsb0JBQW9CLENBQUMsTUFBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwSCxDQUFDO1FBQ0QsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFXLEVBQUUsTUFBNkI7UUFDekQsTUFBTSxLQUFLLEdBQUcsTUFBNEQsQ0FBQztRQUMzRSxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDN0MsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUE2QjtRQUN4QyxPQUFPLE1BQTRELENBQUM7SUFDdEUsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQTZCO1FBQzdDLE1BQU0sS0FBSyxHQUFHLE1BQTRELENBQUM7UUFDM0UsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM5RSxJQUFJLHVCQUF1QixHQUFHLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDN0IsdUJBQXVCLEdBQUcsb0JBQW9CLENBQUMsTUFBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwSCxDQUFDO1FBQ0QsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFXO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNoQyxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDcEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO2dCQUM3RixNQUFNLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdkQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztnQkFDL0YsT0FBTyxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDdEQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUErRTtRQUM3RixJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sV0FBVyxDQUFDLE1BQW1CO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLEtBQUssWUFBWSxXQUFXLElBQUssS0FBbUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUNwRixLQUFtQyxDQUFDLFNBQVMsRUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMxRCxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxJQUFJLEtBQUssWUFBWSxTQUFTLElBQUssS0FBd0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUN2RSxLQUF3QixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5QyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTcrQ1Usa0JBQWtCLG1RQTZHUCxpQkFBaUI7a0dBN0c1QixrQkFBa0IsbVRBSU0sZ0JBQWdCLG1IQUNWLFdBQVcscUpDN0h0RCw2bXJCQTJoQkE7OzJGRG5hYSxrQkFBa0I7a0JBSjlCLFNBQVM7K0JBQ0UsZ0JBQWdCOzswQkFnSHZCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCO3lDQTNHbEIsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNDLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDcUMsWUFBWTtzQkFBbEUsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0csa0JBQWtCO3NCQUF6RSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDMUIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBBdHRyaWJ1dGUsXG4gIEJhc2VUb29sdGlwQ29tcG9uZW50LFxuICBCYXNlV2lkZ2V0TWFwTGF5ZXJPcHRpb25zLFxuICBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zLFxuICBDbGFzcyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIENvbmZpZ1NlbGVjdG9ycyxcbiAgRGFzaGJvYXJkQWN0aW9ucyxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBEYXRhc2V0LFxuICBEYXRhU291cmNlU2VsZWN0b3JzLFxuICBEYXRhc291cmNlVXRpbHMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEZpZWxkLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgRmlsdGVyQ29udGV4dCxcbiAgR2VvTWV0YWRhdGEsXG4gIEdlb21ldHJpY0ZpZWxkVHlwZXMsXG4gIEdldENhcGFiaWxpdGllc1Jlc3BvbnNlLFxuICBJdGVtVXRpbHMsXG4gIE1hcEF1dG9MYXllck9wdGlvbnMsXG4gIE1hcEZlYXR1cmVMYXllck9wdGlvbnMsXG4gIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9ucyxcbiAgTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0T3B0aW9ucyxcbiAgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMsXG4gIE1hcFdNVFNMYXllckxheWVyT3B0aW9ucyxcbiAgTmFtZWRRdWVyeVR5cGVzLFxuICBPcGVyYXRpb24sXG4gIFBSWV9HRU9BVVRIX1RPS0VOLFxuICBQcnlBZ2dyZWdhdGlvblNlcnZpY2UsXG4gIFByeUdlb0F1dGhTZXJ2aWNlLFxuICBQcnlJMThuU2VydmljZSxcbiAgUmVzdWx0c2V0VXRpbHMsXG4gIFN5bWJvbFNlcnZpY2UsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgVG9vbHRpcE1vZGUsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hULFxuICB3aWRnZXRNYXBDb25maWdcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCwgT3ZlcmxheSwgVmlldyB9IGZyb20gJ29sJztcbmltcG9ydCB7IENvb3JkaW5hdGUgfSBmcm9tICdvbC9jb29yZGluYXRlJztcbmltcG9ydCB7IGJvdW5kaW5nRXh0ZW50LCBjcmVhdGVFbXB0eSB9IGZyb20gJ29sL2V4dGVudCc7XG5pbXBvcnQgeyBDaXJjbGUsIEdlb21ldHJ5LCBQb2ludCB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgSGVhdG1hcCwgTGF5ZXIsIFRpbGUgfSBmcm9tICdvbC9sYXllcic7XG5pbXBvcnQgQmFzZUxheWVyIGZyb20gJ29sL2xheWVyL0Jhc2UnO1xuaW1wb3J0IFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3Rvcic7XG5pbXBvcnQgeyBQaXhlbCB9IGZyb20gJ29sL3BpeGVsJztcbmltcG9ydCB7IGZyb21Mb25MYXQgfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSAnb2wvcHJvai9wcm9qNCc7XG5pbXBvcnQgeyBEYXRhVGlsZSwgSW1hZ2VXTVMsIFRpbGVXTVMgfSBmcm9tICdvbC9zb3VyY2UnO1xuaW1wb3J0IFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCB7IFN0eWxlIH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZU1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHdpdGhMYXRlc3RGcm9tXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tbWFuYWdlci5jbGFzcyc7XG5pbXBvcnQgeyBDcWxVdGlscyB9IGZyb20gJy4uL3V0aWxzL2NxbC11dGlscy5jbGFzcyc7XG5pbXBvcnQgeyBYTUxVdGlscyB9IGZyb20gJy4uL3V0aWxzL3htbC11dGlscy5jbGFzcyc7XG5pbXBvcnQgeyBXaWRnZXRNYXBMYXllclNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC1tYXAtbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgTWFwYm94VmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvTWFwYm94VmVjdG9yJztcbmltcG9ydCB7IFdpZGdldE1hcFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvd2lkZ2V0LW1hcC51dGlscyc7XG5pbXBvcnQgeyBMYXllclNsaWRlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2xheWVyLXNsaWRlci5jbGFzcyc7XG5pbXBvcnQgVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1RpbGUnO1xuaW1wb3J0IFdlYkdMVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1dlYkdMVGlsZSc7XG5pbXBvcnQgeyBBdHRyaWJ1dGlvbiwgZGVmYXVsdHMgfSBmcm9tICdvbC9jb250cm9sJztcbmltcG9ydCBWZWN0b3JUaWxlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XG5cbmV4cG9ydCBjb25zdCBUT09MVElQX1BBRERJTkcgPSAxNTtcbmV4cG9ydCBjb25zdCBOT05fTUFOREFUT1JZX0ZJVF9MQVlFUl9UWVBFUyA9IFsnd21zJywgJ2dlb3NlcnZlciddO1xuXG4vLyBEZWZpbmUgTGFtYmVydCBQcm9qZWN0aW9uXG5wcm9qNC5kZWZzKFxuICAnRVBTRzoyMTU0JyxcbiAgJytwcm9qPWxjYyArbGF0XzA9NDYuNSArbG9uXzA9MyArbGF0XzE9NDkgK2xhdF8yPTQ0ICt4XzA9NzAwMDAwICt5XzA9NjYwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmcyArdHlwZT1jcnMnXG4pO1xucmVnaXN0ZXIocHJvajQpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LW1hcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRNYXBDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgbWFwVXJsJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBAVmlld0NoaWxkKCdtYXBSZWYnKSBtYXBSZWYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwb3B1cCcpIHBvcHVwITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9wdXBDb250ZW50JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHBvcHVwQ29udGVudCE6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2V4cG9ydFR5cGVUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgZXhwb3J0VHlwZVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnc2xpZGVyRWxlbWVudCcpIHNsaWRlckVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxNYXBXaWRnZXRPcHRpb25zPjtcbiAgbGF5ZXJUeXBlcyA9IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmltcGxlbWVudGF0aW9uTGlzdFxuICAgIC5maWx0ZXIoKHR5cGUpID0+IHR5cGUgIT09ICdhdXRvJylcbiAgICAuc29ydCgoYSwgYikgPT5cbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgICAgICAuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS4nICsgYSlcbiAgICAgICAgLmxvY2FsZUNvbXBhcmUodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJyArIGIpKVxuICAgICk7XG4gIG9wdGlvbnNDb3B5OiBNYXBXaWRnZXRPcHRpb25zID0ge30gYXMgTWFwV2lkZ2V0T3B0aW9ucztcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGZpZWxkcyQ6IE9ic2VydmFibGU8RmllbGRbXT47XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIGJvdHRvbUxlZnQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGxheWVycyQhOiBPYnNlcnZhYmxlPEJhc2VMYXllcltdPjtcbiAgbWFwITogTWFwO1xuICBhZGRpdGlvbmFsTGF5ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPEdlb21ldHJ5Pj5bXT4oW10pO1xuICBzdHlsZXMkOiBPYnNlcnZhYmxlPFxuICAgIHtcbiAgICAgIGlkZW50aWZpZXI6IHN0cmluZztcbiAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgfVtdXG4gID47XG4gIFdJREdFVF9IRUFERVJfSEVJR0hUID0gV0lER0VUX0hFQURFUl9IRUlHSFQ7XG4gIGkgPSAwO1xuICBpdGVtU3R5bGVzJCE6IE9ic2VydmFibGU8e1xuICAgIFtpZDogc3RyaW5nXToge1xuICAgICAgY2xhc3NpYzogU3R5bGU7XG4gICAgICBib3JkZXJlZDogU3R5bGU7XG4gICAgfTtcbiAgfT47XG4gIGhlaWdodCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgYWN0aW9ucyQgPSB3aWRnZXRNYXBDb25maWcuYWN0aW9ucyQ7XG4gIHByaXZhdGUgd21zRmVhdHVyZXMkOiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgY2xhc3NpY0ZlYXR1cmVzJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkOiBPYnNlcnZhYmxlPE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1tdPjtcbiAgbGVnZW5kVGFiT3BlbiA9IGZhbHNlO1xuICBsYXllcnNUYWJPcGVuID0gZmFsc2U7XG4gIGxlZ2VuZFRhYiA9IDA7XG4gIGxlZ2VuZExheWVycyQhOiBPYnNlcnZhYmxlPChNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMgfCBNYXBXTVNMYXllckxheWVyT3B0aW9ucylbXT47XG4gIGxlZ2VuZFRvcCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGF5ZXJzVG9wJCE6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGVnZW5kSGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBpbWFnZU5vdFByb3ZpZGVkOiBib29sZWFuW10gPSBbXTtcbiAgYmFzaWNBY3Rpb25zJDogT2JzZXJ2YWJsZTwoJ2NsaWNrJyB8ICdsYXNzbycgfCAncmVjdGFuZ2xlJyB8ICd6b29tJyB8ICdtb3ZlJyB8ICdleHBvcnQnIHwgJ3VwbG9hZCcpW10+O1xuICB6b29tQW5kQ2VudGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIHpvb20/OiB7XG4gICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgbWluOiBudW1iZXI7XG4gICAgICBtYXg6IG51bWJlcjtcbiAgICB9O1xuICAgIGNlbnRlcj86IG51bWJlcltdO1xuICB9Pih7fSk7XG4gIG1hcFN0eWxlVXJsJCE6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIGludGVyYWN0aW9uTWFuYWdlcjogSW50ZXJhY3Rpb25NYW5hZ2VyID0gbmV3IEludGVyYWN0aW9uTWFuYWdlcigpO1xuICBtYXBTdHlsZUxheWVyJCE6IE9ic2VydmFibGU8KFZlY3RvclRpbGVMYXllciB8IFRpbGVMYXllcjxhbnk+KVtdPjtcbiAgdG9vbHRpcEluZGV4ID0gMDtcbiAgdG9vbHRpcE51bWJlciA9IDA7XG4gIFNUWUxFX0ZST01fVVJMID0gJ191cmwnO1xuICBOT19TVFlMRSA9ICdub25lJztcbiAgd21zQ2FwYWJpbGl0aWVzJDogT2JzZXJ2YWJsZTxcbiAgICB8IHtcbiAgICAgICAgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbDtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZFxuICA+O1xuICBhdXRvRGF0YXNldExheWVycyQ6IE9ic2VydmFibGU8TWFwQXV0b0xheWVyT3B0aW9uc1tdPjtcbiAgZml0RXh0ZW50cyQhOiBPYnNlcnZhYmxlPFxuICAgIHtcbiAgICAgIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgICAgZXJyb3I6IGJvb2xlYW47XG4gICAgfVtdXG4gID47XG4gIGRhdGFzb3VyY2VGaWx0ZXJzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICB1c2VkQ2xhc3NlcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgbGF5ZXJTbGlkZXIgPSBuZXcgTGF5ZXJTbGlkZXIoKTtcbiAgaGFzU2xpZGVMYXllciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNsaWRlczogeyBpZDogdW5kZWZpbmVkIHwgc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgcG9zc2libGVTdHlsZXM6IHtcbiAgICBbcDogc3RyaW5nXToge1xuICAgICAgbGF5ZXJzOiB7IFtwOiBzdHJpbmddOiB7IHBhcmFtOiBzdHJpbmc7IHN0eWxlczogeyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSB9IH0gfCBudWxsO1xuICAgICAgdXJsOiBzdHJpbmc7XG4gICAgfTtcbiAgfSA9IHt9O1xuICBhdHRyaWJ1dGlvbnMgPSBuZXcgQXR0cmlidXRpb24oKTtcbiAgYWN0aW9uTWVudU9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGF0dHJpYnV0aW9ucyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG9sWm9vbUVsZW1lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcmV2aW91c0xheWVyczogQmFzZUxheWVyW10gPSBbXTtcbiAgcHJldmlvdXNUb29sdGlwPzogQ29tcG9uZW50UmVmPEJhc2VUb29sdGlwQ29tcG9uZW50PjtcbiAgcHJldmlvdXNUb29sdGlwU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwb3B1cE92ZXJsYXk/OiBPdmVybGF5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHB1YmxpYyB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHRvb2x0aXBGYWN0b3J5U2VydmljZTogVG9vbHRpcEZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3ltYm9sU2VydmljZTogU3ltYm9sU2VydmljZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHdpZGdldE1hcExheWVyU2VydmljZTogV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJ5QWdncmVnYXRpb25TZXJ2aWNlOiBQcnlBZ2dyZWdhdGlvblNlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChQUllfR0VPQVVUSF9UT0tFTikgcHJpdmF0ZSBnZW9BdXRoU2VydmljZTogUHJ5R2VvQXV0aFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuZ2V0T2xab29tRWxlbWVudCgpO1xuXG4gICAgdGhpcy5zbGlkZXMgPSBbXG4gICAgICB7IGlkOiAnYWxsJywgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuc2xpZGUuYWxsJykgfSxcbiAgICAgIHsgaWQ6ICdsZWZ0JywgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuc2xpZGUubGVmdCcpIH0sXG4gICAgICB7IGlkOiAncmlnaHQnLCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5yaWdodCcpIH1cbiAgICBdO1xuXG4gICAgdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2Uud2l0aEdlb0F1dGgodGhpcy5nZW9BdXRoU2VydmljZSk7XG5cbiAgICB0aGlzLmJhc2ljQWN0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuYWN0aW9ucyQsXG4gICAgICB0aGlzLmFjdGlvbk1lbnVPcGVuJCxcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLnNlbGVjdGlvbkludGVyYWN0aW9uLnNlbGVjdGlvblR5cGUkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2FjdGlvbnMsIG1lbnVPcGVuLCBzZWxlY3Rpb25UeXBlXSkgPT5cbiAgICAgICAgbWVudU9wZW5cbiAgICAgICAgICA/IGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gJ2V4cG9ydCcgJiYgYWN0aW9uICE9PSAndXBsb2FkJylcbiAgICAgICAgICA6IGFjdGlvbnNcbiAgICAgICAgICAgICAgLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24gIT09ICdleHBvcnQnICYmIGFjdGlvbiAhPT0gJ3VwbG9hZCcpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGFjdGlvbikgPT4gc2VsZWN0aW9uVHlwZSA9PT0gYWN0aW9uKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZVxuICAgICAgLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKVxuICAgICAgLnBpcGUobWFwKChjbGFzc2VzKSA9PiBjbGFzc2VzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpKSk7XG4gICAgdGhpcy51c2VkQ2xhc3NlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNsYXNzZXMkLCB0aGlzLnVzZWREYXRhc291cmNlcyRdKS5waXBlKFxuICAgICAgbWFwKChbY2xhc3NlcywgZGF0YXNvdXJjZXNdKSA9PiB7XG4gICAgICAgIHJldHVybiBjbGFzc2VzLmZpbHRlcigoY2xhc3NJdGVtKSA9PlxuICAgICAgICAgIGRhdGFzb3VyY2VzLnNvbWUoKGRhdGFTb3VyY2UpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiAndHlwZScgaW4gZGF0YVNvdXJjZS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLnJlcXVlc3QudHlwZSA9PT0gTmFtZWRRdWVyeVR5cGVzLk1VTFRJX0NMQVNTIHx8XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5GVUxMX1RFWFRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICdkYXRhc2V0J1xuICAgICAgICAgICAgICA/IGRhdGFTb3VyY2Uub0NsYXNzID09PSBjbGFzc0l0ZW0uaWRcbiAgICAgICAgICAgICAgOiBkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiAnb0NsYXNzJyBpbiBkYXRhU291cmNlLnJlcXVlc3RcbiAgICAgICAgICAgICAgPyBkYXRhU291cmNlLnJlcXVlc3Qub0NsYXNzID09PSBjbGFzc0l0ZW0uaWRcbiAgICAgICAgICAgICAgOiBkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiAndHlwZScgaW4gZGF0YVNvdXJjZS5yZXF1ZXN0XG4gICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NT05PX0NMQVNTXG4gICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmZpZWxkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpO1xuXG4gICAgdGhpcy5kYXRhc291cmNlRmlsdGVycyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXRhc291cmNlRmlsdGVycyksXG4gICAgICB0aGlzLmRhdGFzb3VyY2VJZHMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtmaWx0ZXJzLCBpZHNdKSA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbHRlcnMpXG4gICAgICAgICAgICAuZmlsdGVyKChmaWx0ZXJEc0tleSkgPT4gaWRzLmluY2x1ZGVzKGZpbHRlckRzS2V5KSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+ICh7IC4uLnAsIFtjXTogZmlsdGVyc1tjXSB9KSwge30pIGFzIHtcbiAgICAgICAgICAgIFtwOiBzdHJpbmddOiBGaWx0ZXJDb250ZXh0W107XG4gICAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdHlsZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLm1hcFN0eWxlcykucGlwZShcbiAgICAgIG1hcCgoc3R5bGVzKSA9PlxuICAgICAgICBzdHlsZXMuY29uY2F0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMuTk9fU1RZTEUsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5ub1N0eWxlJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMuU1RZTEVfRlJPTV9VUkwsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zdHlsZUZyb21VcmwnKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZElkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuc2VsZWN0ZWRJdGVtSWRzKTtcblxuICAgIHRoaXMuZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnVzZWREYXRhc291cmNlcyQucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFtdKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKVxuICAgICAgKSxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5nZW9TZXJ2ZXJVcmwpLnBpcGUoc3RhcnRXaXRoKHVuZGVmaW5lZCkpXG4gICAgXSkucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgbWFwKChbZGF0YVNvdXJjZXMsIGdlb1NlcnZlclVybF0pID0+IHtcbiAgICAgICAgaWYgKCFnZW9TZXJ2ZXJVcmwpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcigoZHMpID0+IERhdGFzb3VyY2VVdGlscy5pc0dlbyhkcykpXG4gICAgICAgICAgLm1hcCgoZHMpID0+IHtcbiAgICAgICAgICAgIGRzID0gZHMgYXMgdW5rbm93biBhcyBEYXRhc2V0O1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGFzOiB7XG4gICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICAgICAgICAgIH0gPSB7fTtcbiAgICAgICAgICAgIGRzLm1ldGFkYXRhPy5mb3JFYWNoKChtKSA9PiAobWV0YWRhdGFzW20ubWV0YWRhdGFEZWYubmFtZV0gPSBtLnZhbHVlKSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0eXBlOiAnZ2Vvc2VydmVyJyxcbiAgICAgICAgICAgICAgdXJsOiBgJHtnZW9TZXJ2ZXJVcmx9LyR7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0ubGVuZ3RoID4gMCA/IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdICsgJy8nIDogJydcbiAgICAgICAgICAgICAgfXdtcz9TRVJWSUNFPVdNUyZWRVJTSU9OPTEuMy4wYCxcbiAgICAgICAgICAgICAgcGFyYW1UaWxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3BhY2l0eTogcGFyc2VJbnQobWV0YWRhdGFzW0dlb01ldGFkYXRhLk9QQUNJVFldID8/IDEwMCwgMTApLFxuICAgICAgICAgICAgICBvQ2xhc3M6IGRzLm9DbGFzcyxcbiAgICAgICAgICAgICAga2V5OiBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXSArICc6JyArIG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5LRVldLFxuICAgICAgICAgICAgICBuYW1lc3BhY2U6IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdLFxuICAgICAgICAgICAgICBwYXJhbUxheWVyOiBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuS0VZXSxcbiAgICAgICAgICAgICAgbmFtZTogZHMubmFtZSxcbiAgICAgICAgICAgICAgZGF0YXNvdXJjZUlkOiBkcy5pZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiBsYXllciBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpLFxuICAgICAgc3RhcnRXaXRoKFtdKVxuICAgICk7XG5cbiAgICB0aGlzLmF1dG9EYXRhc2V0TGF5ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMudXNlZERhdGFzb3VyY2VzJC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoW10pLFxuICAgICAgICBtYXAoXG4gICAgICAgICAgKGRhdGFzb3VyY2VzKSA9PlxuICAgICAgICAgICAgZGF0YXNvdXJjZXMuZmlsdGVyKChkcykgPT4gZHMuc291cmNlVHlwZSA9PT0gJ2RhdGFzZXQnICYmICFEYXRhc291cmNlVXRpbHMuaXNHZW8oZHMpKSBhcyBEYXRhc2V0W11cbiAgICAgICAgKVxuICAgICAgKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbY2xhc3NlcywgZmllbGRzLCBkYXRhU2V0c10pID0+XG4gICAgICAgICAgZGF0YVNldHNcbiAgICAgICAgICAgIC5tYXAoKGRzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gY2xhc3Nlcy5maW5kKChjbGF6eikgPT4gY2xhenouaWQgPT09IGRzLm9DbGFzcyk7XG4gICAgICAgICAgICAgIGNvbnN0IGdlb0F0dHJpYnV0ZXMgPSAoXG4gICAgICAgICAgICAgICAgbW9kZWw/LmF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiAoeyBhdHRyLCBmaWVsZDogZmllbGRzLmZpbmQoKGYpID0+IGF0dHIuZmllbGQgPT09IGYuaWQpIH0pKSA/PyBbXVxuICAgICAgICAgICAgICApLmZpbHRlcigoeyBhdHRyLCBmaWVsZCB9KSA9PiAhIWZpZWxkICYmIEdlb21ldHJpY0ZpZWxkVHlwZXMuaW5jbHVkZXMoZmllbGQudHlwZSkpO1xuICAgICAgICAgICAgICByZXR1cm4gZ2VvQXR0cmlidXRlcy5tYXAoXG4gICAgICAgICAgICAgICAgKGdlbykgPT5cbiAgICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGAke2RzLm5hbWV9JHtnZW9BdHRyaWJ1dGVzLmxlbmd0aCA+IDEgPyAnIC0gJyArIGdlby5hdHRyLm5hbWUgOiAnJ31gLFxuICAgICAgICAgICAgICAgICAgICBvQ2xhc3M6IGRzLm9DbGFzcyxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBkcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgc3ViVHlwZTogZ2VvLmZpZWxkIS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzOiBbZHMub0NsYXNzXSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlOiBnZW8uYXR0ci50ZWNobmljYWxOYW1lXG4gICAgICAgICAgICAgICAgICB9IGFzIE1hcEF1dG9MYXllck9wdGlvbnMpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZsYXQoKSBhcyBNYXBBdXRvTGF5ZXJPcHRpb25zW11cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubWFuaWZlc3QkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgobWFuaWZlc3QpID0+XG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICgobWFuaWZlc3Qub3B0aW9ucyA/PyB7IGxheWVyczogW10gfSkgYXMgTWFwV2lkZ2V0T3B0aW9ucykubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PlxuICAgICAgICAgICAgICAgIFsnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcbiAgICAgICAgICAgICAgKSBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9uc1tdXG4gICAgICAgICAgICApLm1hcCgobGF5ZXIpID0+IGxheWVyLnVybClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodXJscykgPT4gdXJscy5mb3JFYWNoKCh1cmwpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5nZXRDYXBhYmlsaXR5KHsgdXJsIH0pKSkpXG4gICAgKTtcblxuICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5jYXBhYmlsaXRpZXMpO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5pZmVzdCQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5zdHlsZXMkLFxuICAgICAgdGhpcy5nZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyQsXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyQsXG4gICAgICB0aGlzLmF1dG9EYXRhc2V0TGF5ZXJzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMsIG1hcFN0eWxlcywgZ2VvTGF5ZXJzLCBjYXBhYmlsaXRpZXMsIGF1dG9EYXRhc2V0TGF5ZXJzXSkgPT4ge1xuICAgICAgICAvLyBhdXRvIGRldGVybWluZSBsYXllcnMgcGFyYW1ldGVycyB0byBwcm92aWRlIGEgd29ya2luZyB2aWV3XG4gICAgICAgIGNvbnN0IGF1dG9PcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtYW5pZmVzdC5vcHRpb25zID8/IHt9KSkgYXMgTWFwV2lkZ2V0T3B0aW9ucztcbiAgICAgICAgaWYgKCFhdXRvT3B0aW9ucy50b29sdGlwTW9kZSkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLnRvb2x0aXBNb2RlID0gVG9vbHRpcE1vZGUuQ0xJQ0s7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMgPSBbXG4gICAgICAgICAgLi4uKGF1dG9PcHRpb25zLmxheWVycyA/PyBbXSkuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIudHlwZSAhPT0gJ2F1dG8nKSxcbiAgICAgICAgICAuLi4oYXV0b09wdGlvbnMuYXV0b21hdGljTGF5ZXJzXG4gICAgICAgICAgICA/IGF1dG9EYXRhc2V0TGF5ZXJzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICAgICAgICAgIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciB8fFxuICAgICAgICAgICAgICAgICAgICAhYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmluY2x1ZGVzKGxheWVyLmtleSArICctJyArIGxheWVyLnN1YlR5cGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIsXG4gICAgICAgICAgICAgICAgICAuLi4oKGF1dG9PcHRpb25zLmxheWVycyA/PyBbXSkuZmluZChcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAocHJldkxheWVyKSA9PiBwcmV2TGF5ZXIua2V5ID09PSBsYXllci5rZXkgJiYgcHJldkxheWVyLmF0dHJpYnV0ZSA9PT0gbGF5ZXIuYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICApID8/IHt9KVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBbXSlcbiAgICAgICAgXTtcblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnM/LmZvckVhY2goKGxheWVyLCBpKSA9PiB7XG4gICAgICAgICAgV2lkZ2V0TWFwVXRpbHMucG9wdWxhdGVMb2NhdGlvbkF0dHJpYnV0ZShsYXllciwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpO1xuICAgICAgICAgIFdpZGdldE1hcFV0aWxzLnBvcHVsYXRlSW50ZW5zaXR5QXR0cmlidXRlKGxheWVyLCByZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcyk7XG4gICAgICAgICAgaWYgKGF1dG9PcHRpb25zLmF0dHJpYnV0aW9ucykge1xuICAgICAgICAgICAgbGF5ZXIuYXR0cmlidXRpb24gPSBsYXllci5hdHRyaWJ1dGlvbiA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFjdHVhbExheWVyS2V5cyA9IChhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pXG4gICAgICAgICAgLm1hcCgobGF5ZXIpID0+IChsYXllciBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpLmtleSA/PyBudWxsKVxuICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gISFrZXkpO1xuXG4gICAgICAgIC8vIEdldCBhbGwgcHJldmlvdXMgbGF5ZXJzLCB3aXRob3V0IGdlb3NlcnZlciBsYXllcnMgdGhhdCBhcmUgbm90IHJlcXVlc3RlZCBhbnltb3JlLCB0aGVuIGFkZCBuZXcgZ2Vvc2VydmVyIGxheWVycyAocG90ZW50aWFsbHkgd2l0aCBhIHByZWNvbmZpZyBmcm9tIG1hbmlmZXN0KS5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gW1xuICAgICAgICAgIC4uLihhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pLm1hcCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGdlb0xheWVyID0gZ2VvTGF5ZXJzLmZpbmQoKGdlb0xheWVyKSA9PiBsYXllci5rZXkgPT09IGdlb0xheWVyLmtleSkgPz8gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJ1xuICAgICAgICAgICAgICA/IGdlb0xheWVyXG4gICAgICAgICAgICAgICAgPyB7IC4uLmdlb0xheWVyLCAuLi5sYXllciwgdXJsOiBnZW9MYXllci51cmwgfVxuICAgICAgICAgICAgICAgIDogKG51bGwgYXMgdW5rbm93biBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpXG4gICAgICAgICAgICAgIDogeyAuLi5sYXllciB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLmdlb0xheWVycy5maWx0ZXIoKGxheWVyKSA9PiAhYWN0dWFsTGF5ZXJLZXlzLmluY2x1ZGVzKGxheWVyLmtleSkpXG4gICAgICAgIF0uZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0TGF5ZXJUaXRsZShsYXllciwgY2FwYWJpbGl0aWVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICEhbWFwU3R5bGVzICYmXG4gICAgICAgICAgbWFwU3R5bGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAoIWF1dG9PcHRpb25zLnN0eWxlIHx8ICFtYXBTdHlsZXMubWFwKChzdHlsZSkgPT4gc3R5bGUuaWRlbnRpZmllcikuaW5jbHVkZXMoYXV0b09wdGlvbnMuc3R5bGUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBsaWdodFN0eWxlcyA9IG1hcFN0eWxlcy5maWx0ZXIoKHN0eWxlKSA9PiAhKHN0eWxlLmlkZW50aWZpZXIgPz8gJy0nKS5pbmNsdWRlcygnZGFyaycpKTtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5zdHlsZSA9IGxpZ2h0U3R5bGVzLmxlbmd0aCA+IDAgPyBsaWdodFN0eWxlc1swXS5pZGVudGlmaWVyIDogbWFwU3R5bGVzWzBdLmlkZW50aWZpZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyKSB7XG4gICAgICAgICAgY29uc3QgYmFzZSA9IGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllcjtcblxuICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGlnbm9yZUF1dG9MYXllcnMsIHZhbHVlcyB0aGF0IGFyZSBub3QgbmVjZXNzYXJ5XG4gICAgICAgICAgY29uc3QgcG9zc2libGVJZ25vcmVBdXRvTGF5ZXJLZXlzID0gYXV0b0RhdGFzZXRMYXllcnMubWFwKChsYXllcikgPT4gbGF5ZXIua2V5ICsgJy0nICsgbGF5ZXIuc3ViVHlwZSk7XG4gICAgICAgICAgYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyID0gKGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciA/PyBbXSkuZmlsdGVyKChrZXkpID0+XG4gICAgICAgICAgICBwb3NzaWJsZUlnbm9yZUF1dG9MYXllcktleXMuaW5jbHVkZXMoa2V5KVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIgfHwgYmFzZS5sZW5ndGggIT09IGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdE1hbmlmZXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gV2lkZ2V0TWFwVXRpbHMuYXNzaWduTGF5ZXJzT3JkZXIoYXV0b09wdGlvbnMubGF5ZXJzKTtcblxuICAgICAgICBpZiAoYXV0b09wdGlvbnMuZml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMuZm9yRWFjaChcbiAgICAgICAgICAgIChsYXllcikgPT4gKGxheWVyLmZpdCA9ICFOT05fTUFOREFUT1JZX0ZJVF9MQVlFUl9UWVBFUy5pbmNsdWRlcyhsYXllci50eXBlKSB8fCBhdXRvT3B0aW9ucy5maXQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkZWxldGUgYXV0b09wdGlvbnMuZml0O1xuICAgICAgICB9XG5cbiAgICAgICAgW1xuICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGF1dG9PcHRpb25zLmxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBbJ3dtcycsICdnZW9zZXJ2ZXInXS5pbmNsdWRlcyhsYXllci50eXBlKSkgYXMgKFxuICAgICAgICAgICAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICAgICAgICB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICAgICAgICAgICAgICApW11cbiAgICAgICAgICAgICkubWFwKChsYXllcikgPT4gbGF5ZXIudXJsKVxuICAgICAgICAgIClcbiAgICAgICAgXS5mb3JFYWNoKCh1cmwpID0+IHtcbiAgICAgICAgICBpZiAoY2FwYWJpbGl0aWVzICYmIGNhcGFiaWxpdGllc1t1cmxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5nZXRDYXBhYmlsaXR5KHsgdXJsOiB1cmwgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF1dG9PcHRpb25zO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkLnBpcGUoZmlsdGVyKChvcHQpID0+ICEhb3B0KSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubWFwVXJsJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5tYXBVcmwpO1xuICAgIHRoaXMud21zRmVhdHVyZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLndtc0ZlYXR1cmVzKTtcblxuICAgIHRoaXMuYm90dG9tTGVmdCQgPSB0aGlzLndpZGdldFNpemUkLnBpcGUoXG4gICAgICBtYXAoKHNpemUpID0+IGB0cmFuc2xhdGUoMTBweCAsY2FsYygke3NpemUuaGVpZ2h0fXB4IC0gMTAwJSAtIDEwcHgpKWApLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbVN0eWxlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMubWFuaWZlc3QkLCB0aGlzLnN0YXRpY1Jlc3VsdFNldCRdKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFtycywgbWFuaWZlc3QsIHNyc10pID0+IHtcbiAgICAgICAgaWYgKChtYW5pZmVzdC5kYXRhc291cmNlID09PSB1bmRlZmluZWQgfHwgbWFuaWZlc3QuZGF0YXNvdXJjZS5sZW5ndGggPT09IDApICYmICFzcnMpIHtcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8e1xuICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgICAgICAgICAgICBib3JkZXJlZDogU3R5bGU7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gT2JqZWN0LnZhbHVlcyhycy5pdGVtcykucmVkdWNlKChwLCBjKSA9PiBjLmxlbmd0aCArIHAsIDApO1xuICAgICAgICAgICAgICBpZiAodG90YWwgPT09IDApIHJlc29sdmUoe30pO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyB7XG4gICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICAgICAgICAgICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgICAgICAgICAgICAgIGJvcmRlcmVkOiBTdHlsZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHJzLml0ZW1zKS5mb3JFYWNoKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2xBc0ljb25TdHlsZShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW1ib2xTZXJ2aWNlLmdldFN5bWJvbEFzSWNvblN0eWxlKGl0ZW0sIHRydWUpXG4gICAgICAgICAgICAgICAgICBdKS50aGVuKChbc3R5bGUsIGJTdHlsZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2l0ZW0uaWRdID0geyBjbGFzc2ljOiBzdHlsZSwgYm9yZGVyZWQ6IGJTdHlsZSB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggPj0gdG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaGVpZ2h0JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkZ2V0U2l6ZSQucGlwZShkZWJvdW5jZVRpbWUoMTAwKSksIHRoaXMuZGlzcGxheUhlYWRlciRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgZGlzcGxheV0pID0+IChzaXplLmhlaWdodCA/PyAxMDApIC0gKGRpc3BsYXkgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLmF0dHJpYnV0aW9ucyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUobWFwKChvcHRpb25zKSA9PiAhIW9wdGlvbnMuYXR0cmlidXRpb25zKSk7XG5cbiAgICB0aGlzLmxlZ2VuZFRvcCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRpc3BsYXlIZWFkZXIkLCB0aGlzLmF0dHJpYnV0aW9ucyRdKS5waXBlKFxuICAgICAgbWFwKChbaGVhZGVyLCBhdHRyXSkgPT4gNSArIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApICsgKGF0dHIgPyA2MSA6IDApKVxuICAgICk7XG5cbiAgICB0aGlzLmxlZ2VuZEhlaWdodCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLCB0aGlzLmxlZ2VuZFRvcCRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgdG9wXSkgPT4ge1xuICAgICAgICByZXR1cm4gKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSBXSURHRVRfSEVBREVSX0hFSUdIVCAtIHRvcCAtIDU2OyAvLyA1NnB4IGlzIHRoZSB0b29sdGlwIGhlaWdodCArIG1hcmdpblxuICAgICAgfSksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHdtc0NhcGFiaWxpdGllcykgPT5cbiAgICAgICAgICAgIHdtc0NhcGFiaWxpdGllc1xuICAgICAgICAgICAgICA/IE9iamVjdC5rZXlzKHdtc0NhcGFiaWxpdGllcylcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHVybCkgPT4gKHsgdXJsLCBsYXllcnM6IFhNTFV0aWxzLmdldFBvc3NpYmxlTGF5ZXJTdHlsZXMod21zQ2FwYWJpbGl0aWVzW3VybF0/LmRvYykgfSkpXG4gICAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiAoeyAuLi5wLCBbYy51cmxdOiBjIH0pLCB7fSlcbiAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICksXG4gICAgICAgICAgc3RhcnRXaXRoKHt9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHBvc3NpYmxlU3R5bGVzKSA9PiAodGhpcy5wb3NzaWJsZVN0eWxlcyA9IHBvc3NpYmxlU3R5bGVzKSlcbiAgICApO1xuXG4gICAgdGhpcy5oYXNTbGlkZUxheWVyJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcCgob3B0aW9ucykgPT5cbiAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5tYXAoKGxheWVyKSA9PiAhIWxheWVyLnNsaWRlICYmIGxheWVyLnNsaWRlICE9PSAnYWxsJykucmVkdWNlKChhLCBiKSA9PiBhIHx8IGIsIGZhbHNlKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpbml0SW50ZXJhY3Rpb25NYW5hZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uTWFuYWdlci5pbml0KHRoaXMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWFwID0gbmV3IE1hcCh7IHRhcmdldDogdGhpcy5tYXBSZWYubmF0aXZlRWxlbWVudCwgY29udHJvbHM6IGRlZmF1bHRzKHsgYXR0cmlidXRpb246IGZhbHNlIH0pIH0pO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5pbml0SW50ZXJhY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5sYXllclNsaWRlci5pbml0KHRoaXMubWFwLCB0aGlzLnNsaWRlckVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5tYXBTdHlsZVVybCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLm1hcFVybCRdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgdXJsXSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuc3R5bGUpIHtcbiAgICAgICAgICBjYXNlIHRoaXMuTk9fU1RZTEU6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICBjYXNlIHRoaXMuU1RZTEVfRlJPTV9VUkw6XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5zdHlsZVVSTCA/PyAnJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGAke3VybH0vc3R5bGVzLyR7b3B0aW9ucy5zdHlsZX0vc3R5bGUuanNvbmA7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkID0gdGhpcy5tYXBTdHlsZVVybCQucGlwZShcbiAgICAgIG1hcCgoc3R5bGVVcmwpID0+IHtcbiAgICAgICAgaWYgKCFzdHlsZVVybCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG5ldyBNYXBib3hWZWN0b3JMYXllcih7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IHRpdGxlOiAnYmFja2dyb3VuZCcgfSxcbiAgICAgICAgICAgIHN0eWxlVXJsXG4gICAgICAgICAgfSkgLyogLFxuICAgICAgICAgIG5ldyBUaWxlTGF5ZXIoe1xuICAgICAgICAgICAgc291cmNlOiBuZXcgVGlsZURlYnVnKClcbiAgICAgICAgICB9KSAqL1xuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChvcHRpb25zKSA9PiAoe1xuICAgICAgICAgICAgY2VudGVyOiBmcm9tTG9uTGF0KG9wdGlvbnMuY2VudGVyID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfTUFQX0NFTlRFUiksXG4gICAgICAgICAgICBtYXhab29tOiBvcHRpb25zLnpvb20/Lm1heCA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICAgICAgbWluWm9vbTogb3B0aW9ucy56b29tPy5taW4gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbT8uc3RhcnQgPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX1NUQVJUXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2aWV3KSA9PiB0aGlzLm1hcC5zZXRWaWV3KG5ldyBWaWV3KHZpZXcpKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChvcHRpb25zKSA9PiBvcHRpb25zLmF0dHJpYnV0aW9ucyksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGF0dHJpYnV0aW9ucykgPT4ge1xuICAgICAgICAgIGlmICghYXR0cmlidXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5yZW1vdmVDb250cm9sKHRoaXMuYXR0cmlidXRpb25zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXAuYWRkQ29udHJvbCh0aGlzLmF0dHJpYnV0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmxheWVycyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMucmVzdWx0U2V0JCxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5hZGRpdGlvbmFsTGF5ZXJzJCxcbiAgICAgIHRoaXMuaXRlbVN0eWxlcyQsXG4gICAgICB0aGlzLmRhdGFzb3VyY2VGaWx0ZXJzJCxcbiAgICAgIHRoaXMuZmllbGRzJFxuICAgIF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIChbcmVzdWx0U2V0LCBvcHRpb25zLCBjbGFzc2VzLCBhZGRpdGlvbmFsTGF5ZXJzLCBpdGVtU3R5bGVzLCBmaWx0ZXJzLCBmaWVsZHNdKSA9PlxuICAgICAgICAgICEhcmVzdWx0U2V0ICYmICEhb3B0aW9ucyAmJiAhIWNsYXNzZXMgJiYgISFmaWVsZHNcbiAgICAgICksXG4gICAgICBtYXAoKFtyZXN1bHRTZXQsIG9wdGlvbnMsIGNsYXNzZXMsIGFkZGl0aW9uYWxMYXllcnMsIGl0ZW1TdHlsZXMsIGZpbHRlcnMsIGZpZWxkc10pID0+IHtcbiAgICAgICAgbGV0IGhhc1JlbGF0aW9uTGF5ZXIgPSBudWxsIGFzIHVua25vd24gYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPGFueT4+O1xuXG4gICAgICAgIGNvbnN0IGxheWVycyA9IChvcHRpb25zPy5sYXllcnMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIChsYXllcikgPT4gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuZG9udE5lZWRMb2NhdGlvbi5pbmNsdWRlcyhsYXllci50eXBlKSB8fCAhIWxheWVyLmF0dHJpYnV0ZVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgKGxheWVyKSA9PiB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5kb250TmVlZEludGVuc2l0eS5pbmNsdWRlcyhsYXllci50eXBlKSB8fCAhIWxheWVyLmludGVuc2l0eUF0dHJpYnV0ZVxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKChsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXNGb3JDbGFzcyA9IE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcylcbiAgICAgICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gKHtcbiAgICAgICAgICAgICAgICBjbGFzc0lkLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0QXR0cmlidXRlc0ZvckRyYXdpbmcoY2xhc3NlcywgY2xhc3NJZCwgbGF5ZXIpXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgIChwLCBjKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgICAgICAgIFtjLmNsYXNzSWRdOiBjXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAge30gYXMge1xuICAgICAgICAgICAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgICBpbnRlbnNpdHlBdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBsZXQgbGF5ZXJDbGFzc2VzSWQgPSBjbGFzc2VzLm1hcCgoY2xhenopID0+IGNsYXp6LmlkKTtcbiAgICAgICAgICAgIGlmICgnY2xhc3NlcycgaW4gbGF5ZXIgJiYgISFsYXllci5jbGFzc2VzICYmIGxheWVyLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsYXllckNsYXNzZXNJZCA9IGxheWVyLmNsYXNzZXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByYW5nZSA9IHsgbWluOiAwLCBtYXg6IDAgfTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGlmICghIWxheWVyLmludGVuc2l0eUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXS5tYXAoKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICAgIEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVDYWxjdWxhdGVkVmFsdWUoaXRlbSwgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5pbnRlbnNpdHlBdHRyaWJ1dGUpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgYXMgbnVtYmVyW107XG5cbiAgICAgICAgICAgICAgcmFuZ2UgPSB2YWx1ZXMucmVkdWNlKChwLCBjKSA9PiAoeyBtaW46IE1hdGgubWluKHAubWluLCBjKSwgbWF4OiBNYXRoLm1heChwLm1heCwgYykgfSksIHtcbiAgICAgICAgICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICAgICAgbWF4OiAtTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW1wbCA9IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmxheWVyc0ltcGxlbWVudGF0aW9uW2xheWVyLnR5cGVdO1xuICAgICAgICAgICAgaWYgKCEhaW1wbCkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHRMYXllciA9IGltcGwoXG4gICAgICAgICAgICAgICAgbGF5ZXIgYXMgYW55LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgICAgICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgICAgICAgICByZXN1bHRTZXQsXG4gICAgICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICAgICAgaXRlbVN0eWxlcyxcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ2ZpdCcsIGxheWVyLmZpdCk7XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgndHlwZScsIGxheWVyLnR5cGUpO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ3NsaWRlJywgbGF5ZXIuc2xpZGUpO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ29yZGVyJywgbGF5ZXIub3JkZXIpO1xuICAgICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ3JlbGF0aW9uJykge1xuICAgICAgICAgICAgICAgIGhhc1JlbGF0aW9uTGF5ZXIgPSByZXN1bHRMYXllciBhcyB1bmtub3duIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZT47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCd0aXRsZScsIGxheWVyLnRpdGxlKTtcblxuICAgICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcWxfZmlsdGVyID0gQ3FsVXRpbHMuZ2V0Q1FMUGFyYW1zRm9yKGxheWVyLmRhdGFzb3VyY2VJZCwgZmlsdGVycywgY2xhc3NlcywgZmllbGRzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjcWxfZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgQ1FMIHF1ZXJ5IHRvIGdlb3NlcnZlciBsYXllcnNcbiAgICAgICAgICAgICAgICAgIChyZXN1bHRMYXllciBhcyBUaWxlPFRpbGVXTVM+KS5nZXRTb3VyY2UoKSEudXBkYXRlUGFyYW1zKHsgY3FsX2ZpbHRlciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAobGF5ZXIuc2xpZGUgJiYgbGF5ZXIuc2xpZGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXllclNsaWRlci5hcHBseVNsaWRlKFxuICAgICAgICAgICAgICAgICAgbGF5ZXIuc2xpZGUsXG4gICAgICAgICAgICAgICAgICByZXN1bHRMYXllciBhcyB1bmtub3duIGFzIFRpbGVMYXllcjxhbnk+IHwgVmVjdG9yTGF5ZXI8YW55PiB8IEhlYXRtYXBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdExheWVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTGF5ZXIgdHlwZSAke2xheWVyLnR5cGV9IGlzIHVua25vd25gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBCYXNlTGF5ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgaWYgKCEhaGFzUmVsYXRpb25MYXllcikge1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gbGF5ZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gIShsYXllciBpbnN0YW5jZW9mIFRpbGUpKVxuICAgICAgICAgICAgLm1hcCgobGF5ZXIpID0+XG4gICAgICAgICAgICAgIGxheWVyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmVhdHVyZXM6IEZlYXR1cmU8YW55PikgPT4gISFmZWF0dXJlcy5nZXQoJ2lkJykgfHwgISFmZWF0dXJlcy5nZXQoJ2ZlYXR1cmVzJykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKTtcblxuICAgICAgICAgIHJlc3VsdFNldC5yZWxhdGlvbnMuZm9yRWFjaCgocmVsYXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGZlYXR1cmVzLmZpbmQoKGY6IEZlYXR1cmU8UG9pbnQgfCBDaXJjbGU+KSA9PiBmLmdldCgnaWQnKSA9PT0gcmVsYXRpb24uc291cmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc3QgPSBmZWF0dXJlcy5maW5kKChmOiBGZWF0dXJlPFBvaW50IHwgQ2lyY2xlPikgPT4gZi5nZXQoJ2lkJykgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKTtcbiAgICAgICAgICAgIGlmICghIXNvdXJjZSAmJiAhIWRlc3QpIHtcbiAgICAgICAgICAgICAgaGFzUmVsYXRpb25MYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShXaWRnZXRNYXBVdGlscy5nZXRMaW5rRmVhdHVyZShyZWxhdGlvbiwgc291cmNlLCBkZXN0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGF5ZXJzLnB1c2goLi4uYWRkaXRpb25hbExheWVycyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2luZ2xlTGF5ZXIpIHtcbiAgICAgICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIsIGlkeCkgPT4ge1xuICAgICAgICAgICAgbGF5ZXIuc2V0VmlzaWJsZShpZHggPT09IDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogUmVzb2x2ZSBidWcgZHJhd2luZyB3ZWJnbGxheWVyIHdpdGhvdXQgbm90aGluZyB1bmRlcm5lYXRoOiBhZGQgZW1wdHkgbGF5ZXIgYmVsb3cgKi9cbiAgICAgICAgY29uc3QgX2xheWVycyA9IHRoaXMuYWRkRW1wdHlXZWJHbExheWVyQmVsb3dTbGlkZUhlYXRtYXBzKGxheWVycyk7XG5cbiAgICAgICAgX2xheWVycy5mb3JFYWNoKChsYXllciwgaW5kZXgsIGFycikgPT4gbGF5ZXIuc2V0KCd6SW5kZXgnLCBhcnIubGVuZ3RoIC0gaW5kZXgpKTtcblxuICAgICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzLnB1c2goLi4uX2xheWVycyk7XG5cbiAgICAgICAgcmV0dXJuIF9sYXllcnM7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmZpdEV4dGVudHMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkLFxuICAgICAgdGhpcy53bXNDYXBhYmlsaXRpZXMkXG4gICAgXSkucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgc3dpdGNoTWFwKChbb3B0aW9ucywgY2xhc3NlcywgZmllbGRzLCBmaWx0ZXJzLCB3bXNDYXBhYmlsaXRpZXNdKSA9PlxuICAgICAgICAob3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbmQoKGxheWVyKSA9PiBbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSAmJiBsYXllci5maXQpXG4gICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgLi4uKChvcHRpb25zLmxheWVycz8uZmlsdGVyKChsYXllcikgPT4gbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcicpID8/IFtdKSBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNbXSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZml0KVxuICAgICAgICAgICAgICAgIC5tYXAoKGxheWVyOiBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpID0+XG4gICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMuZmluZCgoY2xhenopID0+IGNsYXp6LmlkID09PSBsYXllci5vQ2xhc3MpID8/ICh7IGF0dHJpYnV0ZXM6IFtdIH0gYXMgdW5rbm93biBhcyBDbGFzcylcbiAgICAgICAgICAgICAgICAgICkuYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChhdHRyKSA9PiAoeyBhdHRyLCBmaWVsZDogZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZCkgfSkpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgYXR0ciwgZmllbGQgfSkgPT4gR2VvbWV0cmljRmllbGRUeXBlcy5pbmNsdWRlcyhmaWVsZD8udHlwZSA/PyAnLS0tLScpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKCh7IGF0dHIsIGZpZWxkIH0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcnlBZ2dyZWdhdGlvblNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZ2dyZWdhdGUoW2xheWVyLmRhdGFzb3VyY2VJZF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkaW5hdGU6IHsgb3BlcmF0aW9uOiBPcGVyYXRpb24uRVhURU5ULCBhdHRyaWJ1dGU6IGF0dHIuaWQsIGxhYmVsOiBhdHRyLm5hbWUsIGtlZXAwOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChleHRlbnRSZXNwb25zZTogQWdncmVnYXRpb25SZXN1bHQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0TWFwVXRpbHMucHJvamVjdEV4dGVudEFnZ3JlZ2F0aW9uUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd21zQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoeyBkYXRhc291cmNlOiBsYXllci5kYXRhc291cmNlSWQsIGV4dGVudDogW10sIGVycm9yOiB0cnVlIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmZsYXQoKSxcbiAgICAgICAgICAgICAgLi4uKChvcHRpb25zLmxheWVycz8uZmlsdGVyKChsYXllcikgPT4gbGF5ZXIudHlwZSA9PT0gJ3dtcycpID8/IFtdKSBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9uc1tdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5maXQpXG4gICAgICAgICAgICAgICAgLm1hcCgobGF5ZXI6IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBleHRlbnQgPSBYTUxVdGlscy5nZXRMYXllckV4dGVudChsYXllci5wYXJhbUxheWVyLCB0aGlzLm1hcCwgd21zQ2FwYWJpbGl0aWVzIVtsYXllci51cmxdPy5kb2MpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNvdXJjZTogYHdtcy0ke2xheWVyLnBhcmFtTGF5ZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW50OiBleHRlbnQgPz8gW10sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAhZXh0ZW50XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IG9mKFtdKVxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgW10gYXMge1xuICAgICAgICAgIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICAgICAgICBleHRlbnQ6IENvb3JkaW5hdGVbXTtcbiAgICAgICAgICBlcnJvcjogYm9vbGVhbjtcbiAgICAgICAgfVtdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMubGVnZW5kTGF5ZXJzJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG9wdGlvbnMpID0+XG4gICAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PiBbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSkgYXMgKFxuICAgICAgICAgICAgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICApW11cbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5sYXllcnNUb3AkID0gY29tYmluZUxhdGVzdChbdGhpcy5sZWdlbmRUb3AkLCB0aGlzLmxlZ2VuZExheWVycyRdKS5waXBlKFxuICAgICAgbWFwKChbbGVnZW5kVG9wLCBsYXllcnNdKSA9PiBsZWdlbmRUb3AgKyAoKGxheWVycy5sZW5ndGggPz8gMCkgPiAwID8gNTAgOiAwKSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmxheWVyc1RvcCQsIHRoaXMubGVnZW5kTGF5ZXJzJCwgdGhpcy5vbFpvb21FbGVtZW50JCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pXG4gICAgICAgIC5waXBlKHdpdGhMYXRlc3RGcm9tKHRoaXMubGF5ZXJzJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtbbGF5ZXJzVG9wLCBsZWdlbmQsIHpvb21FbGVtZW50LCBkaXNwbGF5SGVhZGVyXSwgbGF5ZXJzXSkgPT4ge1xuICAgICAgICAgIGlmICh6b29tRWxlbWVudCkge1xuICAgICAgICAgICAgem9vbUVsZW1lbnQuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgICAgIGxheWVyc1RvcCArXG4gICAgICAgICAgICAgICgobGVnZW5kLmxlbmd0aCA/PyAwKSA+IDAgfHwgbGF5ZXJzLmxlbmd0aCA+IDAgPyAyMCA6IDApICtcbiAgICAgICAgICAgICAgKCFkaXNwbGF5SGVhZGVyID8gV0lER0VUX0hFQURFUl9IRUlHSFQgOiAwKVxuICAgICAgICAgICAgfXB4YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5tYXBTdHlsZUxheWVyJCxcbiAgICAgICAgdGhpcy5sYXllcnMkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSkpLFxuICAgICAgICB0aGlzLmZpdEV4dGVudHMkLFxuICAgICAgICB0aGlzLmRhdGFzb3VyY2VGaWx0ZXJzJFxuICAgICAgXSkuc3Vic2NyaWJlKChbbWFwU3R5bGVMYXllciwgbGF5ZXJzLCBzZWxlY3RlZElkcywgZXh0ZW50cywgZmlsdGVyc10pID0+IHtcbiAgICAgICAgY29uc3QgbmVlZGVkQ2FsY3VsYXRlZEV4dGVudHMgPSBsYXllcnMuZmlsdGVyKFxuICAgICAgICAgIChsYXllcikgPT4gWydnZW9zZXJ2ZXInLCAnd21zJ10uaW5jbHVkZXMobGF5ZXIuZ2V0KCd0eXBlJykpICYmIGxheWVyLmdldCgnZml0JylcbiAgICAgICAgKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG5iQ2FsY3VsYXRlZEV4dGVudHMgPSBleHRlbnRzLmZpbHRlcigoZXh0ZW50KSA9PiAhZXh0ZW50LmVycm9yKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG5iQ2FsY3VsYXRlZEV4dGVudHMgPj0gbmVlZGVkQ2FsY3VsYXRlZEV4dGVudHMpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvQXBwbHlMYXllcnMgPSBbLi4ubGF5ZXJzLCAuLi5tYXBTdHlsZUxheWVyXTtcbiAgICAgICAgICAgIHRoaXMubWFwLnNldExheWVycyh0b0FwcGx5TGF5ZXJzKTtcblxuICAgICAgICAgICAgdGhpcy5maXRNYXBGb3JPYmplY3RzKHNlbGVjdGVkSWRzLCBleHRlbnRzKTtcbiAgICAgICAgICAgIHRoaXMubWFwLnVwZGF0ZVNpemUoKTtcblxuICAgICAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAgICAgLmdldEFsbExheWVycygpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiAhKGxheWVyIGluc3RhbmNlb2YgVGlsZSkpXG4gICAgICAgICAgICAgIC5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdldEZlYXR1cmVzID0gKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSk/LmdldEZlYXR1cmVzO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZ2V0RmVhdHVyZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIChsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpPy5nZXRGZWF0dXJlcygpLmZvckVhY2goKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZmVhdHVyZS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIFsnYnViYmxlJywgJ21hcmtlcicsICdwb2ludCcsICdsaW5lJywgJ3BvbHlnb24nLCAnbXVsdGktbGluZScsICdtdWx0aS1wb2x5Z29uJ10uaW5jbHVkZXModHlwZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuZ2V0KHNlbGVjdGVkSWRzLmluY2x1ZGVzKGZlYXR1cmUuZ2V0KCdpZCcpKSA/ICdzZWxlY3RlZFN0eWxlJyA6ICdjbGFzc2ljU3R5bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hcC5zZXRMYXllcnMoWy4uLm1hcFN0eWxlTGF5ZXJdKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndtc0ZlYXR1cmVzJCwgdGhpcy5jbGFzc2ljRmVhdHVyZXMkXSlcbiAgICAgICAgLnBpcGUod2l0aExhdGVzdEZyb20odGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtbd21zRmVhdHVyZXMsIGNsYXNzaWNGZWF0dXJlc10sIHNpemUsIGhlYWRlcl0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEluZGV4ID0gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcHVwT3ZlcmxheSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyVG9vbHRpcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3B1cE92ZXJsYXkgPSBuZXcgT3ZlcmxheSh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMucG9wdXAubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBbOSwgOV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5tYXAuYWRkT3ZlcmxheSh0aGlzLnBvcHVwT3ZlcmxheSk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwQ29udGVudC5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UHJvbWlzZXMgPSBbXSBhcyBQcm9taXNlPENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD4gfCBudWxsPltdO1xuICAgICAgICAgICAgd21zRmVhdHVyZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgY29tcG9uZW50UHJvbWlzZXMucHVzaCh0aGlzLmdlbmVyYXRlVG9vbHRpcCh2YWx1ZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjbGFzc2ljRmVhdHVyZXMuZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb21wb25lbnRQcm9taXNlcy5wdXNoKHRoaXMuZ2VuZXJhdGVUb29sdGlwKHZhbHVlLnZhbHVlcykpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKGNvbXBvbmVudFByb21pc2VzKS50aGVuKChwcm9taXNlcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZWFsQ29tcG9uZW50cyA9IHByb21pc2VzLmZpbHRlcigoY29tcG9uZW50KSA9PiAhIWNvbXBvbmVudCk7XG4gICAgICAgICAgICAgIHRoaXMudG9vbHRpcE51bWJlciA9IHJlYWxDb21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgaWYgKHJlYWxDb21wb25lbnRzLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cC5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cE92ZXJsYXk/LnNldFBvc2l0aW9uKFstOTk5OTk5OTk5OSwgLTk5OTk5OTk5OTldKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGdvIG91dHNpZGUgdGhlIG1hcFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCArIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApICsgVE9PTFRJUF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwMCArIFRPT0xUSVBfUEFERElOR1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbGV0IHBpeGVsID0gdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIudG9vbHRpcEV2ZW50Py5waXhlbDtcbiAgICAgICAgICAgICAgICBpZiAoISFwaXhlbCAmJiBwaXhlbFswXSArIHJlY3Qud2lkdGggPiBzaXplLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICBwaXhlbFswXSA9IHNpemUud2lkdGggLSByZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoISFwaXhlbCAmJiBwaXhlbFsxXSArIHJlY3QuaGVpZ2h0ID4gc2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgIHBpeGVsWzFdID0gc2l6ZS5oZWlnaHQgLSByZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBNb3ZlKDApO1xuICAgICAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwT3ZlcmxheT8uc2V0UG9zaXRpb24odGhpcy5tYXAuZ2V0Q29vcmRpbmF0ZUZyb21QaXhlbChwaXhlbCA/PyBbMCwgMF0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9yY2VDbG9zZU1hcFRvb2x0aXAnLCAoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyVG9vbHRpcCgpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJUb29sdGlwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwT3ZlcmxheSkgdGhpcy5tYXAucmVtb3ZlT3ZlcmxheSh0aGlzLnBvcHVwT3ZlcmxheSk7XG4gICAgdGhpcy5wb3B1cENvbnRlbnQuY2xlYXIoKTtcbiAgICB0aGlzLnByZXZpb3VzVG9vbHRpcD8uZGVzdHJveSgpO1xuICAgIHRoaXMucHJldmlvdXNUb29sdGlwU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFbXB0eVdlYkdsTGF5ZXJCZWxvd1NsaWRlSGVhdG1hcHMobGF5ZXJzOiBCYXNlTGF5ZXJbXSkge1xuICAgIGNvbnN0IF9sYXllcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbaV07XG4gICAgICBfbGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgaWYgKGxheWVyLmdldCgndHlwZScpID09PSAnaGVhdG1hcCcgJiYgbGF5ZXIuZ2V0KCdzbGlkZScpKSB7XG4gICAgICAgIGNvbnN0IGVtcHR5RGF0YSA9IG5ldyBVaW50OEFycmF5KDI1NiAqIDI1NiAqIDQpO1xuICAgICAgICBjb25zdCBlbXB0eUxheWVyID0gbmV3IFdlYkdMVGlsZUxheWVyKHtcbiAgICAgICAgICBzb3VyY2U6IG5ldyBEYXRhVGlsZSh7XG4gICAgICAgICAgICBsb2FkZXIoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlbXB0eURhdGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4Wm9vbTogMCxcbiAgICAgICAgICAgIHdyYXBYOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIF9sYXllcnMucHVzaChlbXB0eUxheWVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9sYXllcnM7XG4gIH1cblxuICBvdmVycmlkZSBpbml0UmVzdWx0U2V0JCgpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmVzdWx0U2V0cyksXG4gICAgICB0aGlzLmRhdGFzb3VyY2VJZHMkLFxuICAgICAgdGhpcy5zdGF0aWNSZXN1bHRTZXQkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5kYXRhc2V0cylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbcmVzdWx0U2V0cywgcmVzdWx0U2V0TmFtZXNBcnJheSwgc3RhdGljUmVzdWx0U2V0LCBkZWZpbml0aW9uc10pID0+IHtcbiAgICAgICAgaWYgKCEhc3RhdGljUmVzdWx0U2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRpY1Jlc3VsdFNldDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRTZXRBcnJheSA9IHJlc3VsdFNldE5hbWVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKChyc05hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBkZWZpbml0aW9ucy5maW5kKChkc2QpID0+IGRzZC5pZCA9PT0gcnNOYW1lKSBhcyBEYXRhc2V0IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuICFkZWZpbml0aW9uIHx8ICEoZGVmaW5pdGlvbi5tZXRhZGF0YSA/PyBbXSkuZmluZCgobWV0YSkgPT4gbWV0YS5tZXRhZGF0YURlZi5uYW1lID09PSAnX2dlb0tleScpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgocnNOYW1lKSA9PiByZXN1bHRTZXRzW3JzTmFtZSA/PyAnJ10pXG4gICAgICAgICAgLmZpbHRlcigocnNOYW1lKSA9PiAhIXJzTmFtZSk7XG4gICAgICAgIHJldHVybiByZXN1bHRTZXRBcnJheS5yZWR1Y2UoKHJzMSwgcnMyKSA9PiBSZXN1bHRzZXRVdGlscy5tZXJnZVJlc3VsdFNldHMocnMxLCByczIpLCB7XG4gICAgICAgICAgaXRlbXM6IHt9LFxuICAgICAgICAgIHJlbGF0aW9uczogW10sXG4gICAgICAgICAgbWVyZ2VkOiByZXN1bHRTZXRBcnJheS5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCB2KSA9PiBlcXVhbChwLCB2KSlcbiAgICApO1xuICB9XG5cbiAgZ2VuZXJhdGVUb29sdGlwKHZhbHVlOiB7XG4gICAgb0NsYXNzOiBzdHJpbmc7XG4gICAgY29vcmRpbmF0ZXM6IFBpeGVsO1xuICAgIHZhbHVlczogYW55O1xuICB9KTogUHJvbWlzZTxDb21wb25lbnRSZWY8QmFzZVRvb2x0aXBDb21wb25lbnQ+IHwgbnVsbD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50JCA9IHRoaXMudG9vbHRpcEZhY3RvcnlTZXJ2aWNlLmdlbmVyYXRlVG9vbHRpcCh2YWx1ZS5vQ2xhc3MsIHRoaXMuaW5qZWN0b3IsIHRoaXMucG9wdXBDb250ZW50KTtcbiAgICAgIHRoaXMucHJldmlvdXNUb29sdGlwU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5wcmV2aW91c1Rvb2x0aXBTdWIgPSBjb21wb25lbnQkLnN1YnNjcmliZSgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c1Rvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNUb29sdGlwLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlLmRhdGEuaXRlbSA9IHZhbHVlO1xuICAgICAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5wb3B1cCA9IHRoaXMucG9wdXA7XG4gICAgICAgICAgcmVzb2x2ZShjb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldERlZmF1bHRMYXllclRpdGxlKFxuICAgIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gICAgY2FwYWJpbGl0aWVzOlxuICAgICAgfCB7XG4gICAgICAgICAgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKCFsYXllci50aXRsZSkge1xuICAgICAgaWYgKFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGdlb0xheWVyID0gbGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxheWVyQ2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzID8gY2FwYWJpbGl0aWVzW2dlb0xheWVyLnVybF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGxheWVyQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmdldE1hdGNoaW5nTGF5ZXIoZ2VvTGF5ZXIucGFyYW1MYXllciwgbGF5ZXJDYXBhYmlsaXRpZXMuZG9jKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdMYXllcikge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUaXRsZSA9IFhNTFV0aWxzLmZpbmQobWF0Y2hpbmdMYXllci5jaGlsZE5vZGVzLCAnVGl0bGUnKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1RpdGxlKSB7XG4gICAgICAgICAgICAgIGxheWVyLnRpdGxlID1cbiAgICAgICAgICAgICAgICAhIW1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnQgJiYgbWF0Y2hpbmdUaXRsZS50ZXh0Q29udGVudC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IG1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGF5ZXIudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS4ke2xheWVyLnR5cGV9YCwgeyAuLi5sYXllciB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXRNYXBGb3JPYmplY3RzKFxuICAgIHNlbGVjdGVkSWRzPzogc3RyaW5nW10sXG4gICAgZXh0ZW50czoge1xuICAgICAgZGF0YXNvdXJjZTogc3RyaW5nO1xuICAgICAgZXh0ZW50OiBDb29yZGluYXRlW107XG4gICAgfVtdID0gW11cbiAgKSB7XG4gICAgbGV0IGV4dGVudCA9IGNyZWF0ZUVtcHR5KCk7XG4gICAgY29uc3QgbGlzdE9mTWFya2VycyA9IFtdIGFzIGFueVtdO1xuXG4gICAgLyogTWFuZGF0b3J5IGZpdCAqL1xuICAgIHRoaXMubWFwXG4gICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXRQcm9wZXJ0aWVzKClbJ2ZpdCddKVxuICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIuZ2V0U291cmNlICYmICEhbGF5ZXIuZ2V0U291cmNlKCkgJiYgISEobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKS5nZXRGZWF0dXJlcylcbiAgICAgIC5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKS5nZXRGZWF0dXJlcygpLmZvckVhY2goKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZmVhdHVyZS5nZXQoJ2lkJyk7XG4gICAgICAgICAgaWYgKCFzZWxlY3RlZElkcyB8fCBzZWxlY3RlZElkcy5sZW5ndGggPD0gMCB8fCAoc2VsZWN0ZWRJZHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZElkcy5pbmNsdWRlcyhpZCkpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZlYXR1cmUuZ2V0KCd0eXBlJykpIHtcbiAgICAgICAgICAgICAgY2FzZSAnaGVhdHBvaW50JzpcbiAgICAgICAgICAgICAgY2FzZSAncG9pbnQnOlxuICAgICAgICAgICAgICBjYXNlICdtYXJrZXInOlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaChmZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgICBjYXNlICdsaW5rJzpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goLi4uZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgICAgICAgICAgY2FzZSAnbXVsdGktbGluZSc6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpLmZsYXQoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ211bHRpLXBvbHlnb24nOlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaCguLi5mZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKS5mbGF0KCkuZmxhdCgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENlbnRlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZEV4dGVudCA9IGJvdW5kaW5nRXh0ZW50KFxuICAgICAgbGlzdE9mTWFya2Vycy5maWx0ZXIoKGNvb3JkKSA9PiAhIWNvb3JkKS5jb25jYXQoLi4uZXh0ZW50cy5tYXAoKGV4dGVudCkgPT4gZXh0ZW50LmV4dGVudCkpXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIHNlbGVjdGVkRXh0ZW50WzBdICE9PSBJbmZpbml0eSAmJlxuICAgICAgc2VsZWN0ZWRFeHRlbnRbMV0gIT09IEluZmluaXR5ICYmXG4gICAgICBzZWxlY3RlZEV4dGVudFsyXSAhPT0gLUluZmluaXR5ICYmXG4gICAgICBzZWxlY3RlZEV4dGVudFszXSAhPT0gLUluZmluaXR5XG4gICAgKSB7XG4gICAgICBleHRlbnQgPSBzZWxlY3RlZEV4dGVudDtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW50WzBdICE9PSBJbmZpbml0eSAmJiBleHRlbnRbMV0gIT09IEluZmluaXR5ICYmIGV4dGVudFsyXSAhPT0gLUluZmluaXR5ICYmIGV4dGVudFszXSAhPT0gLUluZmluaXR5KSB7XG4gICAgICB0aGlzLm1hcC5nZXRWaWV3KCkuZml0KGV4dGVudCwgeyBwYWRkaW5nOiBbMjAsIDIwLCA3MCwgNzBdLCBkdXJhdGlvbjogMjAwIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0cmlidXRlc0ZvckRyYXdpbmcoY2xhc3NlczogQ2xhc3NbXSwgY2xhc3NJZDogc3RyaW5nLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgY2xhc3NPYmogPSBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0gY2xhc3NJZCkgPz8gKHsgYXR0cmlidXRlczogW10gYXMgQXR0cmlidXRlW10gfSBhcyBDbGFzcyk7XG4gICAgY29uc3QgbG9jYXRpb25BdHRyaWJ1dGUgPSB0aGlzLmdldExvY2F0aW9uQXR0cmlidXRlKGNsYXNzT2JqLCBsYXllcik7XG4gICAgY29uc3QgaW50ZW5zaXR5QXR0cmlidXRlID0gdGhpcy5nZXRJbnRlbnNpdHlBdHRyaWJ1dGUoXG4gICAgICBjbGFzc09iaixcbiAgICAgIGxheWVyIGFzIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB7IGxvY2F0aW9uQXR0cmlidXRlLCBpbnRlbnNpdHlBdHRyaWJ1dGUgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW50ZW5zaXR5QXR0cmlidXRlKFxuICAgIGNsYXNzT2JqOiBDbGFzcyB8IHVuZGVmaW5lZCxcbiAgICBsYXllcjogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNsYXNzT2JqIHx8IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlcy5maW5kKFxuICAgICAgICAoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBsYXllcj8uaW50ZW5zaXR5QXR0cmlidXRlID8/ICcnXG4gICAgICApID8/ICh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYXRpb25BdHRyaWJ1dGUoY2xhc3NPYmo6IENsYXNzLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogQXR0cmlidXRlIHtcbiAgICB0eXBlIGxheWVycyA9IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG4gICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzIGxheWVycztcbiAgICByZXR1cm4gKFxuICAgICAgY2xhc3NPYmouYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLnRlY2huaWNhbE5hbWUgPT09IChzcGVjaWZpY0xheWVyPy5hdHRyaWJ1dGUgPz8gW10pID8/ICcnKSA/P1xuICAgICAgKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgY2hhbmdlU3R5bGUoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnN0eWxlID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnN0eWxlICE9PSB0aGlzLlNUWUxFX0ZST01fVVJMKSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5zdHlsZVVSTDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTdHlsZVVSTCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub3B0aW9uc0NvcHkuc3R5bGVVUkwgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VGaXQoJGV2ZW50OiBib29sZWFuLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIuZml0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlU2xpZGUoJGV2ZW50OiB1bmRlZmluZWQgfCAnbGVmdCcgfCAncmlnaHQnLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIuc2xpZGUgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VBdHRyaWJ1dGlvbnMoJGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hdHRyaWJ1dGlvbnMgPSAkZXZlbnQ7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuYXR0cmlidXRpb25zKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5hdHRyaWJ1dGlvbiA9ICcnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5mb3JFYWNoKChsYXllcikgPT4gZGVsZXRlIGxheWVyLmF0dHJpYnV0aW9uKTtcbiAgICB9XG4gIH1cblxuICBhZGRMYXllcigpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5wdXNoKHsgYXR0cmlidXRlOiAnJyB9IGFzIE1hcFdpZGdldExheWVyT3B0aW9ucyk7XG4gIH1cblxuICBjaGFuZ2VMYXllclR5cGUoJGV2ZW50OiBhbnksIGk6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPz8gW107XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUgPSAkZXZlbnQ7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUgPT09ICd3bXMnKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0gYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zLnBhcmFtTGF5ZXIgPSBvcHRpb25zLnBhcmFtTGF5ZXIgPz8gJyc7XG4gICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsID8/ICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0udHlwZSA9PT0gJ3dtdHMnKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0gYXMgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucy5wYXJhbUxheWVyID0gb3B0aW9ucy5wYXJhbUxheWVyID8/ICcnO1xuICAgICAgb3B0aW9ucy5zdHlsZSA9IG9wdGlvbnMuc3R5bGUgPz8gJyc7XG4gICAgICBvcHRpb25zLm1hdHJpeFNldCA9IG9wdGlvbnMubWF0cml4U2V0ID8/ICcnO1xuICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCA/PyAnJztcbiAgICB9XG4gICAgaWYgKFsnZmVhdHVyZWxheWVyJywgJ3ZlY3RvcnRpbGUnLCAncmFzdGVydGlsZSddLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0gYXMgTWFwRmVhdHVyZUxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVGl0bGUoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci50aXRsZSA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgIG9wdGlvbnM6IHsgLi4udGhpcy5vcHRpb25zQ29weSwgbGF5ZXJzOiAodGhpcy5vcHRpb25zQ29weS5sYXllcnMgPz8gW10pLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIudHlwZSkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlTG9jYXRpb25BdHRyaWJ1dGVzKCRldmVudDogYW55LCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLmF0dHJpYnV0ZSA9ICRldmVudDtcbiAgfVxuXG4gIGxheWVySGFzSW50ZW5zaXR5KGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpOiBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zIHtcbiAgICByZXR1cm4gPE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM+bGF5ZXI7XG4gIH1cblxuICBjaGFuZ2VJbnRlbnNpdHlBdHRyaWJ1dGVzKCRldmVudDogYW55LCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgbGF5ZXJfID0gPE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM+bGF5ZXI7XG4gICAgbGF5ZXJfLmludGVuc2l0eUF0dHJpYnV0ZSA9ICRldmVudDtcbiAgfVxuXG4gIGNoYW5nZUNsYXNzZXMoJGV2ZW50OiBzdHJpbmdbXSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhc1xuICAgICAgfCBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG4gICAgc3BlY2lmaWNMYXllci5jbGFzc2VzID0gJGV2ZW50O1xuICB9XG5cbiAgZGVsZXRlTGF5ZXIoaTogbnVtYmVyLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weT8ubGF5ZXJzPy5zcGxpY2UoaSwgMSk7XG4gICAgaWYgKGxheWVyLnR5cGUgPT09ICdhdXRvJykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5pZ25vcmVBdXRvTGF5ZXIgPSBbLi4uKHRoaXMub3B0aW9uc0NvcHkuaWdub3JlQXV0b0xheWVyID8/IFtdKSwgbGF5ZXIua2V5ICsgJy0nICsgbGF5ZXIuc3ViVHlwZV07XG4gICAgfVxuICB9XG5cbiAgaW52ZXJ0TGF5ZXJzKGlkeDogbnVtYmVyLCBpZHhXaXRoOiBudW1iZXIpIHtcbiAgICBpZiAoISF0aGlzLm9wdGlvbnNDb3B5ICYmICEhdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIGNvbnN0IHRtcE9yZGVyID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4V2l0aF0ub3JkZXI7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpZHhXaXRoXS5vcmRlciA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2lkeF0ub3JkZXI7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpZHhdLm9yZGVyID0gdG1wT3JkZXI7XG4gICAgICBjb25zdCB0bXBJbmRleCA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2lkeFdpdGhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4V2l0aF0gPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpZHhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4XSA9IHRtcEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVVybChcbiAgICAkZXZlbnQ6IEV2ZW50LFxuICAgIGxheWVyOlxuICAgICAgfCBNYXBXTVNMYXllckxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zXG4gICkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci51cmwgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VBdHRyaWJ1dGlvbigkZXZlbnQ6IEV2ZW50LCBsYXllcjogQmFzZVdpZGdldE1hcExheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5hdHRyaWJ1dGlvbiA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZVBhcmFtTGF5ZXIoJGV2ZW50OiBFdmVudCwgbGF5ZXI6IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLnBhcmFtTGF5ZXIgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbVRpbGVkKCRldmVudDogYm9vbGVhbiwgbGF5ZXI6IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIucGFyYW1UaWxlZCA9ICRldmVudDtcbiAgfVxuXG4gIGNoYW5nZU1hdHJpeFNldCgkZXZlbnQ6IEV2ZW50LCBsYXllcjogTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLm1hdHJpeFNldCA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZVBhcmFtU3R5bGUoJGV2ZW50OiBFdmVudCwgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5zdHlsZSA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGV4cG9ydCgpIHtcbiAgICBXaWRnZXRNYXBVdGlscy5leHBvcnRNYXBBc0ltYWdlKHRoaXMubWFwLCAnbWFwLnBuZycpO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBXaWRnZXRNYXBVdGlscy5nZXRNYXBBc1BuZyh0aGlzLm1hcCk7XG4gIH1cblxuICBjaGFuZ2VDbHVzdGVyZWQobGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucywgJGV2ZW50OiBib29sZWFuKSB7XG4gICAgbGF5ZXIuY2x1c3RlcmVkID0gJGV2ZW50O1xuICAgIGlmIChsYXllci5jbHVzdGVyZWQpIHtcbiAgICAgIGxheWVyLmNsdXN0ZXJEaXN0YW5jZSA9IDEwO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUNsdXN0ZXJEaXN0YW5jZShsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLCAkZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLmNsdXN0ZXJEaXN0YW5jZSA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZU9wYWNpdHkobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgJGV2ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIub3BhY2l0eSA9IHBhcnNlSW50KCRldmVudCwgMTApO1xuICB9XG5cbiAgZ2V0V01TTGF5ZXJzKCk6IExheWVyPGFueT5bXSB7XG4gICAgcmV0dXJuICF0aGlzLm1hcFxuICAgICAgPyBbXVxuICAgICAgOiB0aGlzLm1hcFxuICAgICAgICAgIC5nZXRBbGxMYXllcnMoKVxuICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXRTb3VyY2UoKSBpbnN0YW5jZW9mIFRpbGVXTVMgfHwgbGF5ZXIuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBJbWFnZVdNUylcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnJlbmRlcmVkID09PSB0cnVlKTtcbiAgfVxuXG4gIGlzTGF5ZXJSZW5kZXJlZChsYXllcjogYW55KSB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRXTVNMYXllcnMoKS5maW5kKCh3bXNMYXllcikgPT4gd21zTGF5ZXIuZ2V0KCd0aXRsZScpID09PSBsYXllci50aXRsZSk7XG4gIH1cblxuICBpc0xheWVyVmlzaWJsZShsYXllcjogYW55KSB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRXTVNMYXllcnMoKVxuICAgICAgLmZpbmQoKHdtc0xheWVyKSA9PiB3bXNMYXllci5nZXQoJ3RpdGxlJykgPT09IGxheWVyLnRpdGxlKVxuICAgICAgPy5nZXRWaXNpYmxlKCk7XG4gIH1cblxuICBnZXRGZWF0dXJlRnJvbVNlcnZlcih3bXNMYXllcnM6IExheWVyPGFueT5bXSwgcGl4ZWw6IFBpeGVsKSB7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiB3bXNMYXllcnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGxheWVyXG4gICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAuZ2V0RmVhdHVyZUluZm9VcmwocGl4ZWwsIHRoaXMubWFwLmdldFZpZXcoKS5nZXRSZXNvbHV0aW9uKCksIHRoaXMubWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCksIHtcbiAgICAgICAgICBJTkZPX0ZPUk1BVDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIEZFQVRVUkVfQ09VTlQ6IDEwLFxuICAgICAgICAgIC4uLmxheWVyLmdldFByb3BlcnRpZXMoKVsnZ2V0RmVhdHVyZUluZm9BZGRpdGlvbmFsUGFyYW1ldGVycyddXG4gICAgICAgIH0pO1xuICAgICAgaWYgKHVybCAmJiB1cmwuaW5kZXhPZignST0tMScpID09PSAtMSAmJiB1cmwuaW5kZXhPZignSj0tMScpID09PSAtMSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMuZ2V0V21zRmVhdHVyZXMoe1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgb0NsYXNzOiBsYXllci5nZXRQcm9wZXJ0aWVzKClbJ29DbGFzcyddID8/ICcnLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHBpeGVsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VXbXNDbGFzcygkZXZlbnQ6IGFueSwgbGF5ZXI6IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIub0NsYXNzID0gJGV2ZW50O1xuICB9XG5cbiAgdG9nZ2xlTGVnZW5kKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmxlZ2VuZFRhYiA9IHRoaXMubGVnZW5kVGFiID09PSBpbmRleCA/IC0xIDogaW5kZXg7XG4gIH1cblxuICB0b2dnbGVMZWdlbmRXaW5kb3coKSB7XG4gICAgdGhpcy5sZWdlbmRUYWJPcGVuID0gIXRoaXMubGVnZW5kVGFiT3BlbjtcbiAgICB0aGlzLmxheWVyc1RhYk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZUxheWVyc1dpbmRvdygpIHtcbiAgICB0aGlzLmxheWVyc1RhYk9wZW4gPSAhdGhpcy5sYXllcnNUYWJPcGVuO1xuICAgIHRoaXMubGVnZW5kVGFiT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgdG9vbHRpcE1vdmUobnVtYmVyOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy50b29sdGlwQ2FuTW92ZShudW1iZXIpKSB7XG4gICAgICB0aGlzLnNldFN0eWxlQXN5bmModGhpcy50b29sdGlwSW5kZXgsICdub25lJyk7XG4gICAgICB0aGlzLnRvb2x0aXBJbmRleCA9IHRoaXMudG9vbHRpcEluZGV4ICsgbnVtYmVyO1xuICAgICAgdGhpcy5zZXRTdHlsZUFzeW5jKHRoaXMudG9vbHRpcEluZGV4LCAnYmxvY2snKTtcbiAgICB9XG4gIH1cblxuICB0b29sdGlwQ2FuTW92ZShudW1iZXI6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnRvb2x0aXBJbmRleCArIG51bWJlciA+PSAwICYmIHRoaXMudG9vbHRpcEluZGV4ICsgbnVtYmVyIDwgdGhpcy50b29sdGlwTnVtYmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZUFzeW5jKGlkeDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRDb250YWluZXIgPSB0aGlzLnBvcHVwQ29udGVudC5nZXQoaWR4KTtcbiAgICAgIGlmICh0YXJnZXRDb250YWluZXIpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0YXJnZXRDb250YWluZXIucm9vdE5vZGVzWzBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgZ2V0IG1hcExheWVycygpIHtcbiAgICByZXR1cm4gKHRoaXMubWFwID8/IHsgZ2V0TGF5ZXJzOiAoKSA9PiAoeyBnZXRBcnJheTogKCkgPT4gW10gfSkgfSlcbiAgICAgIC5nZXRMYXllcnMoKVxuICAgICAgLmdldEFycmF5KClcbiAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXQoJ3RpdGxlJykgIT09ICdiYWNrZ3JvdW5kJyk7XG4gIH1cblxuICBnZXQgcmlnaHRTbGlkZUxheWVycygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBMYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0KCdzbGlkZScpID09PSAncmlnaHQnKTtcbiAgfVxuXG4gIGdldCBsZWZ0U2xpZGVMYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwTGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldCgnc2xpZGUnKSA9PT0gJ2xlZnQnKTtcbiAgfVxuXG4gIGNoYW5nZVZpc2liaWxpdHkobGF5ZXI6IEJhc2VMYXllcikge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnNpbmdsZUxheWVyKSB7XG4gICAgICB0aGlzLm1hcExheWVycy5mb3JFYWNoKChsYXllcikgPT4gbGF5ZXIuc2V0VmlzaWJsZShmYWxzZSkpO1xuICAgICAgbGF5ZXIuc2V0VmlzaWJsZSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF5ZXIuc2V0VmlzaWJsZSghbGF5ZXIuZ2V0VmlzaWJsZSgpKTtcbiAgICB9XG4gICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuICB9XG5cbiAgY2hhbmdlU2luZ2xlTGF5ZXIoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNpbmdsZUxheWVyID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQXV0b0xheWVyKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hdXRvbWF0aWNMYXllcnMgPSAkZXZlbnQ7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmF1dG9tYXRpY0xheWVycykge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuaWdub3JlQXV0b0xheWVyO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXllclZpc2libGVJZHgoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwTGF5ZXJzLm1hcCgobGF5ZXIsIGlkeCkgPT4gKGxheWVyLmdldFZpc2libGUoKSA/IGlkeCA6IDApKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnJlc2V0V21zRmVhdHVyZXMoKSk7XG5cbiAgICAvLyBUcnlpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG4gICAgdGhpcy5jbGVhckxheWVycyh0aGlzLm1hcC5nZXRMYXllcnMoKS5nZXRBcnJheSgpKTtcbiAgICB0aGlzLmNsZWFyTGF5ZXJzKHRoaXMucHJldmlvdXNMYXllcnMpO1xuICAgIHRoaXMubWFwLmdldFJlbmRlcmVyKCkhLmRpc3Bvc2UoKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZGVsZXRlIHRoaXMubWFwO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm1hcCA9IG51bGw7XG4gICAgdGhpcy5wcmV2aW91c1Rvb2x0aXBTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wcmV2aW91c1Rvb2x0aXA/LmRlc3Ryb3koKTtcbiAgfVxuXG4gIGdldFN0eWxlKF9sYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgbGF5ZXIgPSBfbGF5ZXIgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnM7XG4gICAgaWYgKGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzPy5TVFlMRVMpIHtcbiAgICAgIHJldHVybiBsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycz8uU1RZTEVTO1xuICAgIH1cbiAgICAvKiBOb3QgbWFuaWZlc3QtZGVmaW5lZCBzdHlsZTogdXNlIGZpcnN0IGluIGxpbmUgYmVjYXVzZSBpdCdzIHRoZSBkZWZhdWx0IG9uZSBzZW50IGJ5IGdlb3NlcnZlciAqL1xuICAgIGNvbnN0IHBvc3NpYmxlU3R5bGVzRm9yVXJsID0gdGhpcy5wb3NzaWJsZVN0eWxlc1tsYXllci51cmxdID8/IHsgbGF5ZXJzOiB7fSB9O1xuICAgIGxldCBwb3NzaWJsZXNTdHlsZXNGb3JMYXllciA9IHBvc3NpYmxlU3R5bGVzRm9yVXJsLmxheWVycyFbbGF5ZXIucGFyYW1MYXllcl07XG4gICAgaWYgKCFwb3NzaWJsZXNTdHlsZXNGb3JMYXllcikge1xuICAgICAgcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIgPSBwb3NzaWJsZVN0eWxlc0ZvclVybC5sYXllcnMhWyhsYXllci5wYXJhbUxheWVyID8/ICc6Jykuc3BsaXQoJzonKVsxXV0gPz8geyBzdHlsZXM6IFtdIH07XG4gICAgfVxuICAgIHJldHVybiBwb3NzaWJsZXNTdHlsZXNGb3JMYXllci5zdHlsZXNbMF0/LmlkO1xuICB9XG5cbiAgY2hhbmdlTGF5ZXJTdHlsZSgkZXZlbnQ6IGFueSwgX2xheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllciA9IF9sYXllciBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucztcbiAgICBpZiAoIWxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzKSB7XG4gICAgICBsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycyA9IHt9O1xuICAgIH1cbiAgICBsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycy5TVFlMRVMgPSAkZXZlbnQ7XG4gIH1cblxuICBnZXRBc1dtc1R5cGUoX2xheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICByZXR1cm4gX2xheWVyIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zO1xuICB9XG5cbiAgbGF5ZXJTdHlsZU9wdGlvbnMoX2xheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllciA9IF9sYXllciBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucztcbiAgICBjb25zdCBwb3NzaWJsZVN0eWxlc0ZvclVybCA9IHRoaXMucG9zc2libGVTdHlsZXNbbGF5ZXIudXJsXSA/PyB7IGxheWVyczoge30gfTtcbiAgICBsZXQgcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIgPSBwb3NzaWJsZVN0eWxlc0ZvclVybC5sYXllcnMhW2xheWVyLnBhcmFtTGF5ZXJdO1xuICAgIGlmICghcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIpIHtcbiAgICAgIHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyID0gcG9zc2libGVTdHlsZXNGb3JVcmwubGF5ZXJzIVsobGF5ZXIucGFyYW1MYXllciA/PyAnOicpLnNwbGl0KCc6JylbMV1dID8/IHsgc3R5bGVzOiBbXSB9O1xuICAgIH1cbiAgICByZXR1cm4gcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIuc3R5bGVzO1xuICB9XG5cbiAgdHJpZ2dlckxheWVyUmVuZGVyKCkge1xuICAgIHRoaXMubWFwLnJlbmRlcigpO1xuICB9XG5cbiAgY2hhbmdlU2xpZGVPcHRpb24oJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNsaWRlID0gJGV2ZW50O1xuICAgIGlmICgkZXZlbnQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5zbGlkZSA9ICdhbGwnKSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTWVudSgpIHtcbiAgICB0aGlzLmFjdGlvbk1lbnVPcGVuJC5uZXh0KCF0aGlzLmFjdGlvbk1lbnVPcGVuJC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T2xab29tRWxlbWVudCgpIHtcbiAgICB0aGlzLm9sWm9vbUVsZW1lbnQkLm5leHQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9sLXpvb20nKSk7XG4gICAgaWYgKCF0aGlzLm9sWm9vbUVsZW1lbnQkLmdldFZhbHVlKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5nZXRPbFpvb21FbGVtZW50KCksIDUwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgem9vbUluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9sLXpvb20taW4nKTtcbiAgICAgIGlmICh6b29tSW4pIHtcbiAgICAgICAgem9vbUluLnNldEF0dHJpYnV0ZSgnZGF0YS10b29sdGlwJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC56b29tSW4nKSk7XG4gICAgICAgIHpvb21Jbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcC1wb3NpdGlvbicsICdsZWZ0Jyk7XG4gICAgICAgIHpvb21Jbi5jbGFzc0xpc3QuYWRkKCdhLXRvb2x0aXAnLCAnLS1ub3BvcycpO1xuICAgICAgICB6b29tSW4ucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgICAgfVxuICAgICAgY29uc3Qgem9vbU91dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vbC16b29tLW91dCcpO1xuICAgICAgaWYgKHpvb21PdXQpIHtcbiAgICAgICAgem9vbU91dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuem9vbU91dCcpKTtcbiAgICAgICAgem9vbU91dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcC1wb3NpdGlvbicsICdsZWZ0Jyk7XG4gICAgICAgIHpvb21PdXQuY2xhc3NMaXN0LmFkZCgnYS10b29sdGlwJywgJy0tbm9wb3MnKTtcbiAgICAgICAgem9vbU91dC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU2VsZWN0aW9uKGFjdGlvbjogJ2NsaWNrJyB8ICdsYXNzbycgfCAncmVjdGFuZ2xlJyB8ICd6b29tJyB8ICdtb3ZlJyB8ICdleHBvcnQnIHwgJ3VwbG9hZCcpIHtcbiAgICB0aGlzLmludGVyYWN0aW9uTWFuYWdlci5zZWxlY3Rpb25JbnRlcmFjdGlvbi5jaGFuZ2VTZWxlY3Rpb24oYWN0aW9uKTtcbiAgICB0aGlzLnRvZ2dsZU1lbnUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMYXllcnMobGF5ZXJzOiBCYXNlTGF5ZXJbXSkge1xuICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xuICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIgJiYgKGxheWVyIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZT4pLmdldFNvdXJjZSgpKSB7XG4gICAgICAgIChsYXllciBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U+KS5nZXRTb3VyY2UoKSEuY2xlYXIoKTtcbiAgICAgICAgbGF5ZXIuc2V0U291cmNlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBUaWxlTGF5ZXIgJiYgKGxheWVyIGFzIFRpbGVMYXllcjxhbnk+KS5nZXRTb3VyY2UoKSkge1xuICAgICAgICAobGF5ZXIgYXMgVGlsZUxheWVyPGFueT4pLmdldFNvdXJjZSgpLmNsZWFyKCk7XG4gICAgICAgIGxheWVyLnNldFNvdXJjZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgbGF5ZXIuZGlzcG9zZSgpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1tYXAtY3NzPjwvcHJ5LXdpZGdldC1tYXAtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1tYXBcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgICAjaGVhZGVyXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfc3R5bGVcIj57eyAnQHByeS53aWRnZXQubWFwLnN0eWxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVN0eWxlKCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc109XCJzdHlsZXMkIHwgYXN5bmNcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnN0eWxlXCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgYmluZFZhbHVlPVwiaWRlbnRpZmllclwiXG4gICAgICAgICAgaWQ9XCJtYXBfc3R5bGVcIlxuICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5LnN0eWxlID09PSBTVFlMRV9GUk9NX1VSTFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwic3R5bGVfVVJMXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zdHlsZVVybCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgaWQ9XCJzdHlsZV9VUkxcIlxuICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgKGlucHV0KT1cImNoYW5nZVN0eWxlVVJMKCRldmVudClcIlxuICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25zQ29weS5zdHlsZVVSTCA/PyAnJ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTaW5nbGVMYXllcigkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuc2luZ2xlTGF5ZXIgPz8gZmFsc2VcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zaW5nbGVMYXllcicgfCBpMThuIH19XG4gICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdXRvTGF5ZXIoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmF1dG9tYXRpY0xheWVycyA/PyBmYWxzZVwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmF1dG9MYXllcicgfCBpMThuIH19XG4gICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdHRyaWJ1dGlvbnMoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucyA/PyBmYWxzZVwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmF0dHJpYnV0aW9ucycgfCBpMThuIH19XG4gICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTbGlkZU9wdGlvbigkZXZlbnQpXCIgW25nTW9kZWxdPVwiaGFzU2xpZGVMYXllciQgfCBhc3luY1wiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLnNsaWRlLmdsb2JhbCcgfCBpMThuIH19XG4gICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19hY3Rpb25zIC1oYXMtc2VwYXJhdG9yXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRMYXllcigpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi10ZXh0IC1saW5rLWxpa2VcIj5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImxpYnJhcnlfYWRkXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmFkZExheWVyJyB8IGkxOG4gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGF5ZXIgb2Ygb3B0aW9uc0NvcHk/LmxheWVyczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19faGVhZFwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cImEtaDMgc2V0dGluZ3MtbGF5ZXItdGl0bGVfX3RpdGxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllcicgfCBpMThuIDogeyBpbmRleDogaSArIDEgfSB9fTwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwiaW52ZXJ0TGF5ZXJzKGksIGkgLSAxKVwiICpuZ0lmPVwiaSA+IDBcIj5cbiAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJmbGVjaGVfaGF1dFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS5hY3Rpb24ubW92ZVVwJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbnZlcnRMYXllcnMoaSwgaSArIDEpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpIDwgKG9wdGlvbnNDb3B5Py5sYXllcnM/Lmxlbmd0aCA/PyAwKSAtIDFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZsZWNoZV9iYXNcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVEb3duJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICBbbmdNb2RlbF09XCIobGF5ZXI/Lm9wYWNpdHkgPz8gMTAwKSArICcnXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9wYWNpdHkobGF5ZXIsICRldmVudClcIlxuICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5tYXAub3BhY2l0eVwiXG4gICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuXG4gICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllck9wdGlvbnMnIHwgaTE4biA6IHsgaW5kZXg6IGkgKyAxIH0gfX08L2xlZ2VuZD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sYXllclRpdGxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclRpdGxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cIm1hcF9sYXllclRpdGxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VUaXRsZSgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnRpdGxlID8/ICcnXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCIhWydnZW9zZXJ2ZXInLCAnYXV0byddLmluY2x1ZGVzKGxheWVyLnR5cGUpXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbGF5ZXJUeXBlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUudGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5ZXJUeXBlKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJsYXllclR5cGVzXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci50eXBlXCJcbiAgICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS5cIlxuICAgICAgICAgICAgICAgIGlkPVwibWFwX2xheWVyVHlwZVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwiWydnZW9zZXJ2ZXInLCAnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEFzV21zVHlwZShsYXllcikgYXMgd21zbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xheWVyU3R5bGVcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyU3R5bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxheWVyU3R5bGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImxheWVyU3R5bGVPcHRpb25zKGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRTdHlsZShsYXllcilcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJTdHlsZVwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VGaXQoJGV2ZW50LCBsYXllcilcIiBbbmdNb2RlbF09XCJsYXllci5maXRcIj5cbiAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5maXQnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmVsYXRpb24nICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtcycgJiZcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd210cycgJiZcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdmZWF0dXJlbGF5ZXInICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3ZlY3RvcnRpbGUnICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3Jhc3RlcnRpbGUnICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2F1dG8nXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9jbGFzc2VzXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbGFzc2VzJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsYXNzZXMoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJ1c2VkQ2xhc3NlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmNsYXNzZXNcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICBpZD1cIm1hcF9jbGFzc2VzXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBsYXllci50eXBlICE9PSAncmVsYXRpb24nICYmXG4gICAgICAgICAgICBsYXllci50eXBlICE9PSAnd21zJyAmJlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtdHMnICYmXG4gICAgICAgICAgICBsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJyAmJlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2ZlYXR1cmVsYXllcicgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd2ZWN0b3J0aWxlJyAmJlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3Jhc3RlcnRpbGUnXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAubG9jYXRpb25BdHRyJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBsYXllclxuICAgICAgICAgICAgICAgIHwgZ2VvbWV0cnlGaWVsZHNGb3IgOiB7IHJlc3VsdFNldDogcmVzdWx0U2V0JCwgY2xhc3NlczogbGF5ZXIuY2xhc3NlcywgdHlwZTogbGF5ZXIudHlwZSB9XG4gICAgICAgICAgICAgICAgfCBhc3luYyBhcyBmaWVsZHNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIFsnaGVhdG1hcCcsICdidWJibGUnLCAnbWFya2VyJywgJ3BvaW50JywgJ2xpbmUnLCAncG9seWdvbicsICdtdWx0aS1saW5lJywgJ211bHRpLXBvbHlnb24nXS5pbmRleE9mKFxuICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZVxuICAgICAgICAgICAgICAgICkgPj0gMFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sb2NhdGlvbkF0dHJpYnV0ZV9ib3RoXCI+e3tcbiAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubG9jYXRpb25BdHRyaWJ1dGUuYm90aCcgfCBpMThuXG4gICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMb2NhdGlvbkF0dHJpYnV0ZXMoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xvY2F0aW9uQXR0cmlidXRlX2JvdGhcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ2hlYXRtYXAnLCAnYnViYmxlJ10uaW5kZXhPZihsYXllci50eXBlKSA+PSAwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2ludGVuc2l0eUF0dHJpYnV0ZVwiPnt7XG4gICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmludGVuc2l0eUF0dHJpYnV0ZScgfCBpMThuXG4gICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbnRlbnNpdHlBdHRyaWJ1dGVzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXJIYXNJbnRlbnNpdHkobGF5ZXIpLmludGVuc2l0eUF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfaW50ZW5zaXR5QXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBsYXllci50eXBlID09PSAnd21zJyB8fFxuICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcicgfHxcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd3bXRzJyB8fFxuICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ2ZlYXR1cmVsYXllcicgfHxcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd2ZWN0b3J0aWxlJyB8fFxuICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3Jhc3RlcnRpbGUnXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3dtc191cmxcIj57eyAnQHByeS53aWRnZXQubWFwLndtcy51cmwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlkPVwibWFwX3dtc191cmxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVVybCgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnVybFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXMnIHx8IGxheWVyLnR5cGUgPT09ICd3bXRzJ1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfcGFyYW1MYXllclwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLnBhcmFtTGF5ZXInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX3BhcmFtTGF5ZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVBhcmFtTGF5ZXIoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIucGFyYW1MYXllclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwibGF5ZXIudHlwZSA9PT0gJ3dtdHMnXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3dtc19tYXRyaXhTZXRcIj57eyAnQHByeS53aWRnZXQubWFwLndtcy5tYXRyaXhTZXQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX21hdHJpeFNldFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlTWF0cml4U2V0KCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLm1hdHJpeFNldFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwibGF5ZXIudHlwZSA9PT0gJ3dtdHMnXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3dtc19zdHlsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLnN0eWxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibWFwX3dtc19zdHlsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlUGFyYW1TdHlsZSgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5zdHlsZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwibGF5ZXIudHlwZSA9PT0gJ3dtcycgfHwgbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcidcIj5cbiAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAudGlsZScgfCBpMThuIH19PC9sZWdlbmQ+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVBhcmFtVGlsZWQoJGV2ZW50LCBsYXllcilcIiBbbmdNb2RlbF09XCJsYXllcj8ucGFyYW1UaWxlZCA/PyBmYWxzZVwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLndtcy5wYXJhbVRpbGVkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgIDxmaWVsZHNldCAqbmdJZj1cImxheWVyLnR5cGUgPT09ICdtYXJrZXInXCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbHVzdGVyaW5nJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJlZChsYXllciwgJGV2ZW50KVwiIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmNsdXN0ZXJlZCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGF5ZXIuY2x1c3RlcmVkXCI+XG4gICAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJEaXN0YW5jZShsYXllciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQubWFwLmNsdXN0ZXJEaXN0YW5jZVwiXG4gICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICBtYXg9XCI1MDBcIlxuICAgICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5LnNsaWRlID8/IGZhbHNlXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInNsaWRlX3NlbGVjdFwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGUudGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNsaWRlKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJzbGlkZXNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuc2xpZGUgPz8gJ2FsbCdcIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgaWQ9XCJzbGlkZV9zZWxlY3RcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9uc1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyaWJ1dGlvblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuYXR0cmlidXRpb24nIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImF0dHJpYnV0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VBdHRyaWJ1dGlvbigkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuYXR0cmlidXRpb24gPyBsYXllci5hdHRyaWJ1dGlvbiA6ICcnXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUxheWVyKGksIGxheWVyKVwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi10ZXh0IC1saW5rLWxpa2VcIlxuICAgICAgICAgICpuZ0lmPVwibGF5ZXIudHlwZSAhPT0gJ2dlb3NlcnZlcidcIlxuICAgICAgICAgIGRhdGEtZnVuYz1cImRlbGV0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImRlbGV0ZVwiIFt3aWR0aF09XCIxOVwiIFtoZWlnaHRdPVwiMTlcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC5tYXAuZGVsZXRlTGF5ZXInIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtLWJ0bi1ncm91cCAtbWFwLXNlbGVjdGlvbi1jaG9pY2UgLXZlcnRpY2FsXCJcbiAgICBbY2xhc3MuLXdpdGgtaGVhZGVyXT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFtjbGFzcy4tY2xvc2VkXT1cIiEoYWN0aW9uTWVudU9wZW4kIHwgYXN5bmMpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCItdmVydGljYWxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBiYXNpY0FjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBhLXRvb2x0aXAgYS10b29sdGlwLS17eyBhY3Rpb24gfX1cIlxuICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VTZWxlY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAuJyArIGFjdGlvbiB8IGkxOG5cIlxuICAgICAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBbaWNvblN2Z109XCJhY3Rpb25cIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLicgKyBhY3Rpb24gfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwIC1tYXAtdG9nZ2xlXCJcbiAgICAgIGlkPVwib3Blbl9tZW51XCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiYWN0aW9uTWVudU9wZW4kIHwgYXN5bmNcIlxuICAgICAgYXJpYS1jb250cm9scz1cImV4cG9ydF90eXBlXCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJtZW51XCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KClcIlxuICAgID5cbiAgICAgIDxwcnktaWNvblxuICAgICAgICBbaWNvblN2Z109XCIoYWN0aW9uTWVudU9wZW4kIHwgYXN5bmMpID8gJ2NoZXZyb25fdG9wJyA6ICdjaGV2cm9uX2JvdHRvbSdcIlxuICAgICAgICBbd2lkdGhdPVwiMTJcIlxuICAgICAgICBbaGVpZ2h0XT1cIjI0XCJcbiAgICAgID48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAub3BlbicgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXAgLW1hcC1zZWxlY3Rpb24tY2hvaWNlIC1tYXAtZXhwb3J0XCIgW2NsYXNzLi13aXRoLWhlYWRlcl09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwXCJcbiAgICAgIGlkPVwiZXhwb3J0X2NhcmRcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJleHBvcnRfdHlwZVwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiXG4gICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5leHBvcnQnIHwgaTE4blwiXG4gICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJyaWdodFwiXG4gICAgICAoY2xpY2spPVwiZXhwb3J0KClcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmlsZV9kb3dubG9hZFwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5leHBvcnQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwib2wtY29udHJvbCBtLWxheWVyLXN3aXRjaGVyIG0tbWFwLWxheWVyLWFjdGlvblwiXG4gICAgKm5nSWY9XCIoKGxheWVycyQgfCBhc3luYyk/Lmxlbmd0aCA/PyAwKSA+IDBcIlxuICAgIFtzdHlsZS50b3AucHhdPVwibGF5ZXJzVG9wJCB8IGFzeW5jXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX190b2dnbGVcIlxuICAgICAgW2NsYXNzLmEtdG9vbHRpcF09XCIhdGhpcy5sYXllcnNUYWJPcGVuXCJcbiAgICAgIFtjbGFzcy4tdG9vbHRpcC1uby13cmFwXT1cIiF0aGlzLmxheWVyc1RhYk9wZW5cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUxheWVyc1dpbmRvdygpXCJcbiAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLnNlbGVjdExheWVycycgfCBpMThuXCJcbiAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cImxlZnRcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibGF5ZXJzXCIgW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxOFwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9fY29udGFpbmVyXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxheWVyc1RhYk9wZW5cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYS1oNFwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJzVGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxheWVyIG9mIG1hcExheWVyczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9fdGl0bGUgbS1sYXllci1zd2l0Y2hlcl9fdGl0bGVcIiBbY2xhc3MuLWhpZGRlbl09XCIhbGF5ZXJzVGFiT3BlblwiPlxuICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICpuZ0lmPVwiIShvcHRpb25zJCB8IGFzeW5jKT8uc2luZ2xlTGF5ZXI7IGVsc2Ugc2luZ2xlTGF5ZXJcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuZ2V0VmlzaWJsZSgpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVmlzaWJpbGl0eShsYXllcilcIlxuICAgICAgICAgID48L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUxheWVyPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJsYXllclwiXG4gICAgICAgICAgICAgIFtpZF09XCIncmFkaW8tbGF5ZXItJyArIGxheWVyLmdldCgndGl0bGUnKS5zcGxpdCgnICcpWzBdXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXJWaXNpYmxlSWR4XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImluZGV4XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VWaXNpYmlsaXR5KGxheWVyKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAge3sgbGF5ZXIuZ2V0KCd0aXRsZScpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm9sLWNvbnRyb2wgbS1tYXAtbGF5ZXItYWN0aW9uIG0tbGF5ZXItbGVnZW5kXCJcbiAgICAqbmdJZj1cIigobGVnZW5kTGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RvZ2dsZVwiXG4gICAgICBbY2xhc3MuYS10b29sdGlwXT1cIiF0aGlzLmxlZ2VuZFRhYk9wZW5cIlxuICAgICAgW2NsYXNzLi10b29sdGlwLW5vLXdyYXBdPVwiIXRoaXMubGVnZW5kVGFiT3BlblwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlTGVnZW5kV2luZG93KClcIlxuICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGVnZW5kcycgfCBpMThuXCJcbiAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cImxlZnRcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibGVnZW5kXCIgW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxNVwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9fY29udGFpbmVyXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxlZ2VuZFRhYk9wZW5cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYS1oNFwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGVnZW5kc1RpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBnZW9MYXllciBvZiBsZWdlbmRMYXllcnMkIHwgYXN5bmM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RpdGxlIG0tbGF5ZXItbGVnZW5kX190aXRsZVwiIChjbGljayk9XCJ0b2dnbGVMZWdlbmQoaW5kZXgpXCI+XG4gICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAqbmdJZj1cImlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcikgJiYgISFnZW9MYXllci50aXRsZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX19kcm9wZG93bi1pY29uXCJcbiAgICAgICAgICAgIFtpY29uU3ZnXT1cImxlZ2VuZFRhYiA9PT0gaW5kZXggPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTJcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxMlwiXG4gICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAge3sgZ2VvTGF5ZXIudGl0bGUgfX1cbiAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcilcIlxuICAgICAgICAgICAgY2xhc3M9XCJhLXRvb2x0aXBcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGF5ZXJMb2FkRXJyb3InIHwgaTE4blwiXG4gICAgICAgICAgICBbaWNvblN2Z109XCInY2xvc2UnXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIyMlwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjIyXCJcbiAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9faW1hZ2VcIlxuICAgICAgICAgIFtjbGFzcy4taGlkZGVuXT1cIiFsZWdlbmRUYWJPcGVuIHx8IGxlZ2VuZFRhYiAhPT0gaW5kZXggfHwgIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcilcIlxuICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImxlZ2VuZEhlaWdodCQgfCBhc3luY1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2VvTGF5ZXIgfCBsZWdlbmRVcmwgOiB7IGNhcGFiaWxpdGllczogKHdtc0NhcGFiaWxpdGllcyQgfCBhc3luYykgfSBhcyB1cmxcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgW3NyY109XCJ1cmwgfCBnZXRTZWN1cmVkSW1hZ2UgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFthbHRdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmQnIHwgaTE4biA6IHsgbGF5ZXI6IGdlb0xheWVyLnRpdGxlIH1cIlxuICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VOb3RQcm92aWRlZFtpbmRleF0gPSB0cnVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoZ2VvTGF5ZXIgfCBsZWdlbmRVcmwgOiB7IGNhcGFiaWxpdGllczogKHdtc0NhcGFiaWxpdGllcyQgfCBhc3luYykgfSlcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX19lcnJvclwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGVnZW5kTm90UHJvdmlkZWQnIHwgaTE4biB9fTwvcD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm0tbWFwLXNsaWRlLWxlZ2VuZCAtbGVmdFwiICpuZ0lmPVwibGVmdFNsaWRlTGF5ZXJzLmxlbmd0aCA+IDBcIiBbc3R5bGUudG9wLnB4XT1cImxlZ2VuZFRvcCQgfCBhc3luY1wiPlxuICAgIDxzcGFuIGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kX190aXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGVUaXRsZScgfCBpMThuIH19Ojwvc3Bhbj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsYXllciBvZiBsZWZ0U2xpZGVMYXllcnNcIj5cbiAgICAgIHt7IGxheWVyLmdldCgndGl0bGUnKSB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kIC1yaWdodFwiICpuZ0lmPVwicmlnaHRTbGlkZUxheWVycy5sZW5ndGggPiAwXCIgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tbWFwLXNsaWRlLWxlZ2VuZF9fdGl0bGVcIj57eyAnQHByeS53aWRnZXQubWFwLnNsaWRlVGl0bGUnIHwgaTE4biB9fTo8L3NwYW4+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgcmlnaHRTbGlkZUxheWVyc1wiPlxuICAgICAge3sgbGF5ZXIuZ2V0KCd0aXRsZScpIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHQkIHwgYXN5bmNcIiBjbGFzcz1cIm8tbWFwLXdyYXBwZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1tYXBcIj5cbiAgICAgIDxkaXYgI21hcFJlZiBpZD1cIm1hcFwiPjwvZGl2PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgIG1pbj1cIjBcIlxuICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICBzdGVwPVwiMC4wMVwiXG4gICAgICAgIHZhbHVlPVwiNTBcIlxuICAgICAgICAjc2xpZGVyRWxlbWVudFxuICAgICAgICBjbGFzcz1cIm8tbWFwLXNsaWRlclwiXG4gICAgICAgIFtjbGFzcy4taGlkZGVuXT1cIiEoaGFzU2xpZGVMYXllciQgfCBhc3luYylcIlxuICAgICAgICAoaW5wdXQpPVwidHJpZ2dlckxheWVyUmVuZGVyKClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAjcG9wdXAgY2xhc3M9XCJtLXRvb2x0aXAgbS10b29sdGlwLS1wb3B1cFwiIFtoaWRkZW5dPVwidHJ1ZVwiIHJvbGU9XCJ0b29sdGlwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcC0tcG9wdXBfX2hlYWRlclwiPlxuICAgICAgPHA+e3sgdGhpcy50b29sdGlwSW5kZXggKyAxIH19IC8ge3sgdGhpcy50b29sdGlwTnVtYmVyIH19PC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5IGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwidG9vbHRpcE1vdmUoLTEpXCIgW2Rpc2FibGVkXT1cIiF0b29sdGlwQ2FuTW92ZSgtMSlcIj5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhcnJvd19iYWNrXCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5IGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwidG9vbHRpcE1vdmUoMSlcIiBbZGlzYWJsZWRdPVwiIXRvb2x0aXBDYW5Nb3ZlKDEpXCI+XG4gICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3dfcmlnaHRcIj48L3ByeS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcC0tcG9wdXBfX2NvbnRhaW5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAjcG9wdXBDb250ZW50PjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19