@provoly/dashboard 1.4.30 → 1.4.31

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.
@@ -9,7 +9,7 @@ import { fromLonLat } from 'ol/proj';
9
9
  import { register } from 'ol/proj/proj4';
10
10
  import { DataTile, ImageWMS, TileWMS } from 'ol/source';
11
11
  import proj4 from 'proj4';
12
- import { BehaviorSubject, catchError, combineLatest, debounceTime, delay, distinctUntilChanged, filter, from, map, mergeMap, of, startWith, switchMap, withLatestFrom } from 'rxjs';
12
+ import { BehaviorSubject, catchError, combineLatest, debounceTime, delay, distinctUntilChanged, filter, from, fromEvent, map, mergeMap, of, startWith, switchMap, withLatestFrom } from 'rxjs';
13
13
  import { InteractionManager } from '../interaction/interaction-manager.class';
14
14
  import { CqlUtils } from '../utils/cql-utils.class';
15
15
  import { XMLUtils } from '../utils/xml-utils.class';
@@ -535,11 +535,20 @@ export class WidgetMapComponent extends DataWidgetComponent {
535
535
  this.layers$,
536
536
  this.selectedIds$.pipe(distinctUntilChanged((p, c) => equal(p, c))),
537
537
  this.fitExtents$,
538
- this.datasourceFilters$
539
- ]).subscribe(([mapStyleLayer, layers, selectedIds, extents, filters]) => {
538
+ this.datasourceFilters$,
539
+ fromEvent(window, 'wms-layer-refresh').pipe(startWith(new CustomEvent(`wms-layer-refresh`, { detail: true })))
540
+ ]).subscribe(([mapStyleLayer, layers, selectedIds, extents, filters, refreshEvent]) => {
540
541
  const neededCalculatedExtents = layers.filter((layer) => ['geoserver', 'wms'].includes(layer.get('type')) && layer.get('fit')).length;
541
542
  const nbCalculatedExtents = extents.filter((extent) => !extent.error).length;
542
543
  if (nbCalculatedExtents >= neededCalculatedExtents) {
544
+ if (!refreshEvent.detail) {
545
+ this.map
546
+ .getAllLayers()
547
+ .filter((l) => l instanceof TileLayer)
548
+ .forEach((l) => {
549
+ l.getSource().refresh();
550
+ });
551
+ }
543
552
  setTimeout(() => {
544
553
  const toApplyLayers = [...layers, ...mapStyleLayer];
545
554
  this.map.setLayers(toApplyLayers);
@@ -1204,4 +1213,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1204
1213
  type: ViewChild,
1205
1214
  args: ['sliderElement']
1206
1215
  }] } });
1207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1tYXAvY29tcG9uZW50L3dpZGdldC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBTUwsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsbUJBQW1CLEVBRW5CLGNBQWMsRUFFZCxXQUFXLEVBQ1gsbUJBQW1CLEVBRW5CLFNBQVMsRUFjVCxlQUFlLEVBQ2YsU0FBUyxFQUNULGlCQUFpQixFQUlqQixjQUFjLEVBR2QsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixlQUFlLEVBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEQsT0FBTyxFQUFrQixJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUs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QUFXLHFKQy9IdEQsaTRvQ0FrdEJBOzsyRkQxbEJhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDRSxnQkFBZ0I7OzBCQThHdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7eUNBdkdsQixNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNxQyxZQUFZO3NCQUFsRSxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRyxrQkFBa0I7c0JBQXpFLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUMxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBBdHRyaWJ1dGUsXG4gIEJhc2VXaWRnZXRNYXBMYXllck9wdGlvbnMsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFzZXQsXG4gIERhdGFTb3VyY2VTZWxlY3RvcnMsXG4gIERhdGFzb3VyY2VVdGlscyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWx0ZXJDb250ZXh0LFxuICBHZW9NZXRhZGF0YSxcbiAgR2VvbWV0cmljRmllbGRUeXBlcyxcbiAgR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UsXG4gIEl0ZW1VdGlscyxcbiAgTGF5ZXJHcm91cCxcbiAgTWFwQXV0b0xheWVyT3B0aW9ucyxcbiAgTWFwRmVhdHVyZUxheWVyT3B0aW9ucyxcbiAgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRPcHRpb25zLFxuICBNYXBXTVNMYXllckxheWVyT3B0aW9ucyxcbiAgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zLFxuICBOYW1lZFF1ZXJ5VHlwZXMsXG4gIE9wZXJhdGlvbixcbiAgUFJZX0dFT0FVVEhfVE9LRU4sXG4gIFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgUHJ5R2VvQXV0aFNlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBSZXN1bHRzZXRVdGlscyxcbiAgU3ltYm9sU2VydmljZSxcbiAgVG9vbHRpcEZhY3RvcnlTZXJ2aWNlLFxuICBUb29sdGlwTW9kZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQsXG4gIHdpZGdldE1hcENvbmZpZ1xufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgRmVhdHVyZSwgTWFwLCBWaWV3IH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuaW1wb3J0IHsgYm91bmRpbmdFeHRlbnQsIGNyZWF0ZUVtcHR5IH0gZnJvbSAnb2wvZXh0ZW50JztcbmltcG9ydCB7IENpcmNsZSwgR2VvbWV0cnksIFBvaW50IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBIZWF0bWFwLCBMYXllciwgVGlsZSB9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvQmFzZSc7XG5pbXBvcnQgVmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCB7IGZyb21Mb25MYXQgfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSAnb2wvcHJvai9wcm9qNCc7XG5pbXBvcnQgeyBEYXRhVGlsZSwgSW1hZ2VXTVMsIFRpbGVXTVMgfSBmcm9tICdvbC9zb3VyY2UnO1xuaW1wb3J0IFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCB7IFN0eWxlIH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZU1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB3aXRoTGF0ZXN0RnJvbVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uTWFuYWdlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLW1hbmFnZXIuY2xhc3MnO1xuaW1wb3J0IHsgQ3FsVXRpbHMgfSBmcm9tICcuLi91dGlscy9jcWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgWE1MVXRpbHMgfSBmcm9tICcuLi91dGlscy94bWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UnO1xuaW1wb3J0IE1hcGJveFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL01hcGJveFZlY3Rvcic7XG5pbXBvcnQgeyBXaWRnZXRNYXBVdGlscyB9IGZyb20gJy4uL3V0aWxzL3dpZGdldC1tYXAudXRpbHMnO1xuaW1wb3J0IHsgTGF5ZXJTbGlkZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9sYXllci1zbGlkZXIuY2xhc3MnO1xuaW1wb3J0IFRpbGVMYXllciBmcm9tICdvbC9sYXllci9UaWxlJztcbmltcG9ydCBXZWJHTFRpbGVMYXllciBmcm9tICdvbC9sYXllci9XZWJHTFRpbGUnO1xuaW1wb3J0IHsgQXR0cmlidXRpb24sIGRlZmF1bHRzIH0gZnJvbSAnb2wvY29udHJvbCc7XG5pbXBvcnQgVmVjdG9yVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFRvb2x0aXBNYW5hZ2VyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vdG9vbHRpcC1tYW5hZ2VyLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IFRPT0xUSVBfUEFERElORyA9IDE1O1xuZXhwb3J0IGNvbnN0IE5PTl9NQU5EQVRPUllfRklUX0xBWUVSX1RZUEVTID0gWyd3bXMnLCAnZ2Vvc2VydmVyJ107XG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9HUk9VUCA9ICdERUZBVUxUJztcblxuLy8gRGVmaW5lIExhbWJlcnQgUHJvamVjdGlvblxucHJvajQuZGVmcyhcbiAgJ0VQU0c6MjE1NCcsXG4gICcrcHJvaj1sY2MgK2xhdF8wPTQ2LjUgK2xvbl8wPTMgK2xhdF8xPTQ5ICtsYXRfMj00NCAreF8wPTcwMDAwMCAreV8wPTY2MDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnMgK3R5cGU9Y3JzJ1xuKTtcbnJlZ2lzdGVyKHByb2o0KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LW1hcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuICBpZCA9IGAke1dpZGdldE1hcENvbXBvbmVudC5pZENvdW50ZXIrK31gO1xuICBtYXBVcmwkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBWaWV3Q2hpbGQoJ21hcFJlZicpIG1hcFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcHVwJykgcG9wdXAhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwb3B1cENvbnRlbnQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcG9wdXBDb250ZW50ITogVmlld0NvbnRhaW5lclJlZjtcbiAgQFZpZXdDaGlsZCgnZXhwb3J0VHlwZVRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBleHBvcnRUeXBlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdzbGlkZXJFbGVtZW50Jykgc2xpZGVyRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPE1hcFdpZGdldE9wdGlvbnM+O1xuICBsYXllclR5cGVzID0gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuaW1wbGVtZW50YXRpb25MaXN0XG4gICAgLmZpbHRlcigodHlwZSkgPT4gdHlwZSAhPT0gJ2F1dG8nKVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgIC5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLicgKyBhKVxuICAgICAgICAubG9jYWxlQ29tcGFyZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS4nICsgYikpXG4gICAgKTtcbiAgb3B0aW9uc0NvcHk6IE1hcFdpZGdldE9wdGlvbnMgPSB7fSBhcyBNYXBXaWRnZXRPcHRpb25zO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgc2VsZWN0ZWRJZHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgbGF5ZXJzJCE6IE9ic2VydmFibGU8QmFzZUxheWVyW10+O1xuICBtYXAhOiBNYXA7XG4gIGFkZGl0aW9uYWxMYXllcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U8R2VvbWV0cnk+PltdPihbXSk7XG4gIHN0eWxlcyQ6IE9ic2VydmFibGU8XG4gICAge1xuICAgICAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAgICAgbGFiZWw6IHN0cmluZztcbiAgICB9W11cbiAgPjtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcbiAgaSA9IDA7XG4gIGl0ZW1TdHlsZXMkITogT2JzZXJ2YWJsZTx7XG4gICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgIGJvcmRlcmVkOiBTdHlsZTtcbiAgICB9O1xuICB9PjtcbiAgaGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBhY3Rpb25zJCA9IHdpZGdldE1hcENvbmZpZy5hY3Rpb25zJDtcbiAgZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkOiBPYnNlcnZhYmxlPE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1tdPjtcbiAgbGVnZW5kVGFiT3BlbiA9IGZhbHNlO1xuICBsYXllcnNUYWJPcGVuID0gZmFsc2U7XG4gIGxlZ2VuZFRhYkNsb3NlZDogYm9vbGVhbltdID0gW107XG4gIGxlZ2VuZExheWVycyQhOiBPYnNlcnZhYmxlPChNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMgfCBNYXBXTVNMYXllckxheWVyT3B0aW9ucylbXT47XG4gIGxlZ2VuZFRvcCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGF5ZXJzVG9wJCE6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGVnZW5kSGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBsYXllcnNIZWlnaHQkITogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBpbWFnZU5vdFByb3ZpZGVkOiBib29sZWFuW10gPSBbXTtcbiAgYmFzaWNBY3Rpb25zJDogT2JzZXJ2YWJsZTwoJ2NsaWNrJyB8ICdsYXNzbycgfCAncmVjdGFuZ2xlJyB8ICd6b29tJyB8ICdtb3ZlJyB8ICdleHBvcnQnIHwgJ3VwbG9hZCcpW10+O1xuICB6b29tQW5kQ2VudGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIHpvb20/OiB7XG4gICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgbWluOiBudW1iZXI7XG4gICAgICBtYXg6IG51bWJlcjtcbiAgICB9O1xuICAgIGNlbnRlcj86IG51bWJlcltdO1xuICB9Pih7fSk7XG4gIG1hcFN0eWxlVXJsJCE6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIGludGVyYWN0aW9uTWFuYWdlcjogSW50ZXJhY3Rpb25NYW5hZ2VyID0gbmV3IEludGVyYWN0aW9uTWFuYWdlcigpO1xuICB0b29sdGlwTWFuYWdlcjogVG9vbHRpcE1hbmFnZXIgPSBuZXcgVG9vbHRpcE1hbmFnZXIoKTtcbiAgbWFwU3R5bGVMYXllciQhOiBPYnNlcnZhYmxlPChWZWN0b3JUaWxlTGF5ZXIgfCBUaWxlTGF5ZXI8YW55PilbXT47XG4gIFNUWUxFX0ZST01fVVJMID0gJ191cmwnO1xuICBOT19TVFlMRSA9ICdub25lJztcbiAgd21zQ2FwYWJpbGl0aWVzJDogT2JzZXJ2YWJsZTxcbiAgICB8IHtcbiAgICAgICAgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbDtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZFxuICA+O1xuICBhdXRvRGF0YXNldExheWVycyQ6IE9ic2VydmFibGU8TWFwQXV0b0xheWVyT3B0aW9uc1tdPjtcbiAgZml0RXh0ZW50cyQhOiBPYnNlcnZhYmxlPFxuICAgIHtcbiAgICAgIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgICAgZXJyb3I6IGJvb2xlYW47XG4gICAgfVtdXG4gID47XG4gIGRhdGFzb3VyY2VGaWx0ZXJzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICB1c2VkQ2xhc3NlcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgbGF5ZXJTbGlkZXIgPSBuZXcgTGF5ZXJTbGlkZXIoKTtcbiAgaGFzU2xpZGVMYXllciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNsaWRlczogeyBpZDogdW5kZWZpbmVkIHwgc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgcG9zc2libGVTdHlsZXM6IHtcbiAgICBbcDogc3RyaW5nXToge1xuICAgICAgbGF5ZXJzOiB7IFtwOiBzdHJpbmddOiB7IHBhcmFtOiBzdHJpbmc7IHN0eWxlczogeyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSB9IH0gfCBudWxsO1xuICAgICAgdXJsOiBzdHJpbmc7XG4gICAgfTtcbiAgfSA9IHt9O1xuICBhdHRyaWJ1dGlvbnMgPSBuZXcgQXR0cmlidXRpb24oKTtcbiAgYWN0aW9uTWVudU9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGF0dHJpYnV0aW9ucyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG9sWm9vbUVsZW1lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcmV2aW91c0xheWVyczogQmFzZUxheWVyW10gPSBbXTtcbiAgbGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeW1ib2xTZXJ2aWNlOiBTeW1ib2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgd2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlOiBXaWRnZXRNYXBMYXllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcnlBZ2dyZWdhdGlvblNlcnZpY2U6IFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBSWV9HRU9BVVRIX1RPS0VOKSBwcml2YXRlIGdlb0F1dGhTZXJ2aWNlOiBQcnlHZW9BdXRoU2VydmljZVxuICApIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuXG4gICAgdGhpcy5nZXRPbFpvb21FbGVtZW50KCk7XG5cbiAgICB0aGlzLnNsaWRlcyA9IFtcbiAgICAgIHsgaWQ6ICdhbGwnLCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5hbGwnKSB9LFxuICAgICAgeyBpZDogJ2xlZnQnLCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5sZWZ0JykgfSxcbiAgICAgIHsgaWQ6ICdyaWdodCcsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnNsaWRlLnJpZ2h0JykgfVxuICAgIF07XG5cbiAgICB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS53aXRoR2VvQXV0aCh0aGlzLmdlb0F1dGhTZXJ2aWNlKTtcblxuICAgIHRoaXMuYmFzaWNBY3Rpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hY3Rpb25zJCxcbiAgICAgIHRoaXMuYWN0aW9uTWVudU9wZW4kLFxuICAgICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIuc2VsZWN0aW9uSW50ZXJhY3Rpb24uc2VsZWN0aW9uVHlwZSRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbYWN0aW9ucywgbWVudU9wZW4sIHNlbGVjdGlvblR5cGVdKSA9PlxuICAgICAgICBtZW51T3BlblxuICAgICAgICAgID8gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSAnZXhwb3J0JyAmJiBhY3Rpb24gIT09ICd1cGxvYWQnKVxuICAgICAgICAgIDogYWN0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gJ2V4cG9ydCcgJiYgYWN0aW9uICE9PSAndXBsb2FkJylcbiAgICAgICAgICAgICAgLmZpbHRlcigoYWN0aW9uKSA9PiBzZWxlY3Rpb25UeXBlID09PSBhY3Rpb24pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpXG4gICAgICAucGlwZShtYXAoKGNsYXNzZXMpID0+IGNsYXNzZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSkpKTtcbiAgICB0aGlzLnVzZWRDbGFzc2VzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2xhc3NlcyQsIHRoaXMudXNlZERhdGFzb3VyY2VzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCBkYXRhc291cmNlc10pID0+IHtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKChjbGFzc0l0ZW0pID0+XG4gICAgICAgICAgZGF0YXNvdXJjZXMuc29tZSgoZGF0YVNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmICd0eXBlJyBpbiBkYXRhU291cmNlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTVVMVElfQ0xBU1MgfHxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLnJlcXVlc3QudHlwZSA9PT0gTmFtZWRRdWVyeVR5cGVzLkZVTExfVEVYVFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ2RhdGFzZXQnXG4gICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5vQ2xhc3MgPT09IGNsYXNzSXRlbS5pZFxuICAgICAgICAgICAgICA6IGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmICdvQ2xhc3MnIGluIGRhdGFTb3VyY2UucmVxdWVzdFxuICAgICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5yZXF1ZXN0Lm9DbGFzcyA9PT0gY2xhc3NJdGVtLmlkXG4gICAgICAgICAgICAgICAgOiBkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiAndHlwZScgaW4gZGF0YVNvdXJjZS5yZXF1ZXN0XG4gICAgICAgICAgICAgICAgICA/IGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTU9OT19DTEFTU1xuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG5cbiAgICB0aGlzLmRhdGFzb3VyY2VGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmRhdGFzb3VyY2VGaWx0ZXJzKSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAoW2ZpbHRlcnMsIGlkc10pID0+XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsdGVycylcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpbHRlckRzS2V5KSA9PiBpZHMuaW5jbHVkZXMoZmlsdGVyRHNLZXkpKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gKHsgLi4ucCwgW2NdOiBmaWx0ZXJzW2NdIH0pLCB7fSkgYXMge1xuICAgICAgICAgICAgW3A6IHN0cmluZ106IEZpbHRlckNvbnRleHRbXTtcbiAgICAgICAgICB9XG4gICAgICApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKVxuICAgICk7XG5cbiAgICB0aGlzLnN0eWxlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMubWFwU3R5bGVzKS5waXBlKFxuICAgICAgbWFwKChzdHlsZXMpID0+XG4gICAgICAgIHN0eWxlcy5jb25jYXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5OT19TVFlMRSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLm5vU3R5bGUnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5TVFlMRV9GUk9NX1VSTCxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnN0eWxlRnJvbVVybCcpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuXG4gICAgdGhpcy5nZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudXNlZERhdGFzb3VyY2VzJC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoW10pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgICApLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmdlb1NlcnZlclVybCkucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSlcbiAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICBtYXAoKFtkYXRhU291cmNlcywgZ2VvU2VydmVyVXJsXSkgPT4ge1xuICAgICAgICBpZiAoIWdlb1NlcnZlclVybCkgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gZGF0YVNvdXJjZXNcbiAgICAgICAgICAuZmlsdGVyKChkcykgPT4gRGF0YXNvdXJjZVV0aWxzLmlzR2VvKGRzKSlcbiAgICAgICAgICAubWFwKChkcykgPT4ge1xuICAgICAgICAgICAgZHMgPSBkcyBhcyB1bmtub3duIGFzIERhdGFzZXQ7XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YXM6IHtcbiAgICAgICAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgICAgICAgICAgfSA9IHt9O1xuICAgICAgICAgICAgZHMubWV0YWRhdGE/LmZvckVhY2goKG0pID0+IChtZXRhZGF0YXNbbS5tZXRhZGF0YURlZi5uYW1lXSA9IG0udmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdnZW9zZXJ2ZXInLFxuICAgICAgICAgICAgICB1cmw6IGAke2dlb1NlcnZlclVybH0vJHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXS5sZW5ndGggPiAwID8gbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0gKyAnLycgOiAnJ1xuICAgICAgICAgICAgICB9d21zP1NFUlZJQ0U9V01TJlZFUlNJT049MS4zLjBgLFxuICAgICAgICAgICAgICBwYXJhbVRpbGVkOiB0cnVlLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBwYXJzZUludChtZXRhZGF0YXNbR2VvTWV0YWRhdGEuT1BBQ0lUWV0gPz8gMTAwLCAxMCksXG4gICAgICAgICAgICAgIG9DbGFzczogZHMub0NsYXNzLFxuICAgICAgICAgICAgICBrZXk6IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdICsgJzonICsgbWV0YWRhdGFzW0dlb01ldGFkYXRhLktFWV0sXG4gICAgICAgICAgICAgIG5hbWVzcGFjZTogbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0sXG4gICAgICAgICAgICAgIHBhcmFtTGF5ZXI6IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5LRVldLFxuICAgICAgICAgICAgICBuYW1lOiBkcy5uYW1lLFxuICAgICAgICAgICAgICBkYXRhc291cmNlSWQ6IGRzLmlkLFxuICAgICAgICAgICAgICBncm91cDogREVGQVVMVF9MQVlFUl9HUk9VUFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiBsYXllciBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpLFxuICAgICAgc3RhcnRXaXRoKFtdKVxuICAgICk7XG5cbiAgICB0aGlzLmF1dG9EYXRhc2V0TGF5ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMudXNlZERhdGFzb3VyY2VzJC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoW10pLFxuICAgICAgICBtYXAoXG4gICAgICAgICAgKGRhdGFzb3VyY2VzKSA9PlxuICAgICAgICAgICAgZGF0YXNvdXJjZXMuZmlsdGVyKChkcykgPT4gZHMuc291cmNlVHlwZSA9PT0gJ2RhdGFzZXQnICYmICFEYXRhc291cmNlVXRpbHMuaXNHZW8oZHMpKSBhcyBEYXRhc2V0W11cbiAgICAgICAgKVxuICAgICAgKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbY2xhc3NlcywgZGF0YVNldHNdKSA9PlxuICAgICAgICAgIGRhdGFTZXRzXG4gICAgICAgICAgICAubWFwKChkcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IGNsYXNzZXMuZmluZCgoY2xhenopID0+IGNsYXp6LmlkID09PSBkcy5vQ2xhc3MpO1xuICAgICAgICAgICAgICBjb25zdCBnZW9BdHRyaWJ1dGVzID0gKG1vZGVsPy5hdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYXR0cikgPz8gW10pLmZpbHRlcigoYXR0cikgPT5cbiAgICAgICAgICAgICAgICBHZW9tZXRyaWNGaWVsZFR5cGVzLmluY2x1ZGVzKGF0dHIuZmllbGQudHlwZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGdlb0F0dHJpYnV0ZXMubWFwKFxuICAgICAgICAgICAgICAgIChhdHRyKSA9PlxuICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7ZHMubmFtZX0ke2dlb0F0dHJpYnV0ZXMubGVuZ3RoID4gMSA/ICcgLSAnICsgYXR0ci5uYW1lIDogJyd9YCxcbiAgICAgICAgICAgICAgICAgICAgb0NsYXNzOiBkcy5vQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIGtleTogZHMuaWQsXG4gICAgICAgICAgICAgICAgICAgIHN1YlR5cGU6IGF0dHIuZmllbGQhLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFtkcy5vQ2xhc3NdLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IGF0dHIudGVjaG5pY2FsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IERFRkFVTFRfTEFZRVJfR1JPVVBcbiAgICAgICAgICAgICAgICAgIH0pIGFzIE1hcEF1dG9MYXllck9wdGlvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmxhdCgpIGFzIE1hcEF1dG9MYXllck9wdGlvbnNbXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5tYW5pZmVzdCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChtYW5pZmVzdCkgPT5cbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKCgobWFuaWZlc3Qub3B0aW9ucyA/PyB7IGxheWVyczogW10gfSkgYXMgTWFwV2lkZ2V0T3B0aW9ucykubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PlxuICAgICAgICAgICAgICAgIFsnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcbiAgICAgICAgICAgICAgKSBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9uc1tdXG4gICAgICAgICAgICApLm1hcCgobGF5ZXIpID0+IGxheWVyLnVybClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodXJscykgPT4gdXJscy5mb3JFYWNoKCh1cmwpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5nZXRDYXBhYmlsaXR5KHsgdXJsIH0pKSkpXG4gICAgKTtcblxuICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5jYXBhYmlsaXRpZXMpO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5pZmVzdCQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5zdHlsZXMkLFxuICAgICAgdGhpcy5nZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyQsXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyQsXG4gICAgICB0aGlzLmF1dG9EYXRhc2V0TGF5ZXJzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMsIG1hcFN0eWxlcywgZ2VvTGF5ZXJzLCBjYXBhYmlsaXRpZXMsIGF1dG9EYXRhc2V0TGF5ZXJzXSkgPT4ge1xuICAgICAgICAvLyBhdXRvIGRldGVybWluZSBsYXllcnMgcGFyYW1ldGVycyB0byBwcm92aWRlIGEgd29ya2luZyB2aWV3XG4gICAgICAgIGNvbnN0IGF1dG9PcHRpb25zID0gc3RydWN0dXJlZENsb25lKG1hbmlmZXN0Lm9wdGlvbnMgPz8ge30pIGFzIE1hcFdpZGdldE9wdGlvbnM7XG4gICAgICAgIGlmICghYXV0b09wdGlvbnMudG9vbHRpcE1vZGUpIHtcbiAgICAgICAgICBhdXRvT3B0aW9ucy50b29sdGlwTW9kZSA9IFRvb2x0aXBNb2RlLkNMSUNLO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gW1xuICAgICAgICAgIC4uLihhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnR5cGUgIT09ICdhdXRvJyksXG4gICAgICAgICAgLi4uKGF1dG9PcHRpb25zLmF1dG9tYXRpY0xheWVyc1xuICAgICAgICAgICAgPyBhdXRvRGF0YXNldExheWVyc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAobGF5ZXIpID0+XG4gICAgICAgICAgICAgICAgICAgICFhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllci5pbmNsdWRlcyhsYXllci5rZXkgKyAnLScgKyBsYXllci5zdWJUeXBlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChsYXllcikgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLmxheWVyLFxuICAgICAgICAgICAgICAgICAgLi4uKChhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgKHByZXZMYXllcikgPT4gcHJldkxheWVyLmtleSA9PT0gbGF5ZXIua2V5ICYmIHByZXZMYXllci5hdHRyaWJ1dGUgPT09IGxheWVyLmF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgICAgKSA/PyB7fSlcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogW10pXG4gICAgICAgIF07XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzPy5mb3JFYWNoKChsYXllciwgaSkgPT4ge1xuICAgICAgICAgIFdpZGdldE1hcFV0aWxzLnBvcHVsYXRlTG9jYXRpb25BdHRyaWJ1dGUobGF5ZXIsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzKTtcbiAgICAgICAgICBXaWRnZXRNYXBVdGlscy5wb3B1bGF0ZUludGVuc2l0eUF0dHJpYnV0ZShsYXllciwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpO1xuICAgICAgICAgIGlmIChhdXRvT3B0aW9ucy5hdHRyaWJ1dGlvbnMpIHtcbiAgICAgICAgICAgIGxheWVyLmF0dHJpYnV0aW9uID0gbGF5ZXIuYXR0cmlidXRpb24gPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhY3R1YWxMYXllcktleXMgPSAoYXV0b09wdGlvbnMubGF5ZXJzID8/IFtdKVxuICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiAobGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKS5rZXkgPz8gbnVsbClcbiAgICAgICAgICAuZmlsdGVyKChrZXkpID0+ICEha2V5KTtcblxuICAgICAgICAvLyBHZXQgYWxsIHByZXZpb3VzIGxheWVycywgd2l0aG91dCBnZW9zZXJ2ZXIgbGF5ZXJzIHRoYXQgYXJlIG5vdCByZXF1ZXN0ZWQgYW55bW9yZSwgdGhlbiBhZGQgbmV3IGdlb3NlcnZlciBsYXllcnMgKHBvdGVudGlhbGx5IHdpdGggYSBwcmVjb25maWcgZnJvbSBtYW5pZmVzdCkuXG4gICAgICAgIGF1dG9PcHRpb25zLmxheWVycyA9IFtcbiAgICAgICAgICAuLi4oYXV0b09wdGlvbnMubGF5ZXJzID8/IFtdKS5tYXAoKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBnZW9MYXllciA9IGdlb0xheWVycy5maW5kKChnZW9MYXllcikgPT4gbGF5ZXIua2V5ID09PSBnZW9MYXllci5rZXkpID8/IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcidcbiAgICAgICAgICAgICAgPyBnZW9MYXllclxuICAgICAgICAgICAgICAgID8geyAuLi5nZW9MYXllciwgLi4ubGF5ZXIsIHVybDogZ2VvTGF5ZXIudXJsIH1cbiAgICAgICAgICAgICAgICA6IChudWxsIGFzIHVua25vd24gYXMgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKVxuICAgICAgICAgICAgICA6IHsgLi4ubGF5ZXIgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi5nZW9MYXllcnMuZmlsdGVyKChsYXllcikgPT4gIWFjdHVhbExheWVyS2V5cy5pbmNsdWRlcyhsYXllci5rZXkpKVxuICAgICAgICBdLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIpO1xuXG4gICAgICAgIGF1dG9PcHRpb25zLmxheWVycy5mb3JFYWNoKChsYXllciwgaW5kZXgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRMYXllclRpdGxlKGxheWVyLCBpbmRleCwgY2FwYWJpbGl0aWVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICEhbWFwU3R5bGVzICYmXG4gICAgICAgICAgbWFwU3R5bGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAoIWF1dG9PcHRpb25zLnN0eWxlIHx8ICFtYXBTdHlsZXMubWFwKChzdHlsZSkgPT4gc3R5bGUuaWRlbnRpZmllcikuaW5jbHVkZXMoYXV0b09wdGlvbnMuc3R5bGUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBsaWdodFN0eWxlcyA9IG1hcFN0eWxlcy5maWx0ZXIoKHN0eWxlKSA9PiAhKHN0eWxlLmlkZW50aWZpZXIgPz8gJy0nKS5pbmNsdWRlcygnZGFyaycpKTtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5zdHlsZSA9IGxpZ2h0U3R5bGVzLmxlbmd0aCA+IDAgPyBsaWdodFN0eWxlc1swXS5pZGVudGlmaWVyIDogbWFwU3R5bGVzWzBdLmlkZW50aWZpZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyKSB7XG4gICAgICAgICAgY29uc3QgYmFzZSA9IGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllcjtcblxuICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGlnbm9yZUF1dG9MYXllcnMsIHZhbHVlcyB0aGF0IGFyZSBub3QgbmVjZXNzYXJ5XG4gICAgICAgICAgY29uc3QgcG9zc2libGVJZ25vcmVBdXRvTGF5ZXJLZXlzID0gYXV0b0RhdGFzZXRMYXllcnMubWFwKChsYXllcikgPT4gbGF5ZXIua2V5ICsgJy0nICsgbGF5ZXIuc3ViVHlwZSk7XG4gICAgICAgICAgYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyID0gKGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciA/PyBbXSkuZmlsdGVyKChrZXkpID0+XG4gICAgICAgICAgICBwb3NzaWJsZUlnbm9yZUF1dG9MYXllcktleXMuaW5jbHVkZXMoa2V5KVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIgfHwgYmFzZS5sZW5ndGggIT09IGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdE1hbmlmZXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gV2lkZ2V0TWFwVXRpbHMuYXNzaWduTGF5ZXJzT3JkZXIoYXV0b09wdGlvbnMubGF5ZXJzKTtcblxuICAgICAgICBpZiAoYXV0b09wdGlvbnMuZml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMuZm9yRWFjaChcbiAgICAgICAgICAgIChsYXllcikgPT4gKGxheWVyLmZpdCA9ICFOT05fTUFOREFUT1JZX0ZJVF9MQVlFUl9UWVBFUy5pbmNsdWRlcyhsYXllci50eXBlKSB8fCBhdXRvT3B0aW9ucy5maXQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkZWxldGUgYXV0b09wdGlvbnMuZml0O1xuICAgICAgICB9XG5cbiAgICAgICAgW1xuICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGF1dG9PcHRpb25zLmxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBbJ3dtcycsICdnZW9zZXJ2ZXInXS5pbmNsdWRlcyhsYXllci50eXBlKSkgYXMgKFxuICAgICAgICAgICAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICAgICAgICB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICAgICAgICAgICAgICApW11cbiAgICAgICAgICAgICkubWFwKChsYXllcikgPT4gbGF5ZXIudXJsKVxuICAgICAgICAgIClcbiAgICAgICAgXS5mb3JFYWNoKCh1cmwpID0+IHtcbiAgICAgICAgICBpZiAoY2FwYWJpbGl0aWVzICYmIGNhcGFiaWxpdGllc1t1cmxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5nZXRDYXBhYmlsaXR5KHsgdXJsOiB1cmwgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gYXV0b09wdGlvbnMubGF5ZXJzLm1hcCgobGF5ZXIpID0+ICh7XG4gICAgICAgICAgLi4ubGF5ZXIsXG4gICAgICAgICAgdGl0bGU6IGxheWVyLnRpdGxlID8/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLiR7bGF5ZXIudHlwZX1gLCB7IC4uLmxheWVyIH0pLFxuICAgICAgICAgIGdyb3VwOiBsYXllci5ncm91cCA/PyBERUZBVUxUX0xBWUVSX0dST1VQXG4gICAgICAgIH0pKTtcblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllckdyb3VwcyA9IGF1dG9PcHRpb25zLmxheWVyR3JvdXBzID8/IFtdO1xuICAgICAgICBpZiAoIWF1dG9PcHRpb25zLmxheWVyR3JvdXBzLmZpbmQoKGcpID0+IGcubmFtZSA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCkpIHtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5sYXllckdyb3Vwcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6ICdERUZBVUxUJyxcbiAgICAgICAgICAgIHNpbmdsZUxheWVyOiBmYWxzZSxcbiAgICAgICAgICAgIHZpc2libGVMYXllcnM6IGF1dG9PcHRpb25zLmxheWVyc1xuICAgICAgICAgICAgICA/IGF1dG9PcHRpb25zLmxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCkubWFwKChsYXllcikgPT4gbGF5ZXIudGl0bGUpXG4gICAgICAgICAgICAgIDogKFtdIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIH0gYXMgTGF5ZXJHcm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXV0b09wdGlvbnM7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHN0cnVjdHVyZWRDbG9uZShvcHRpb25zKTtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZvckVhY2goXG4gICAgICAgICAgKGxheWVyKSA9PiAodGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSA/PyAnTUlTU0lORyBUSVRMRSddID0gZmFsc2UpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnM/Lm1hcCgobGF5ZXIpID0+ICh7XG4gICAgICAgICAgLi4ubGF5ZXIsXG4gICAgICAgICAgZ3JvdXA6IGxheWVyLmdyb3VwID8/IERFRkFVTFRfTEFZRVJfR1JPVVBcbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5tYXBVcmwkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLm1hcFVybCk7XG5cbiAgICB0aGlzLmJvdHRvbUxlZnQkID0gdGhpcy53aWRnZXRTaXplJC5waXBlKFxuICAgICAgbWFwKChzaXplKSA9PiBgdHJhbnNsYXRlKDEwcHggLGNhbGMoJHtzaXplLmhlaWdodH1weCAtIDEwMCUgLSAxMHB4KSlgKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1TdHlsZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRTZXQkLCB0aGlzLm1hbmlmZXN0JCwgdGhpcy5zdGF0aWNSZXN1bHRTZXQkXSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChbcnMsIG1hbmlmZXN0LCBzcnNdKSA9PiB7XG4gICAgICAgIGlmICgobWFuaWZlc3QuZGF0YXNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IG1hbmlmZXN0LmRhdGFzb3VyY2UubGVuZ3RoID09PSAwKSAmJiAhc3JzKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHtcbiAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NpYzogU3R5bGU7XG4gICAgICAgICAgICAgICAgYm9yZGVyZWQ6IFN0eWxlO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IE9iamVjdC52YWx1ZXMocnMuaXRlbXMpLnJlZHVjZSgocCwgYykgPT4gYy5sZW5ndGggKyBwLCAwKTtcbiAgICAgICAgICAgICAgaWYgKHRvdGFsID09PSAwKSByZXNvbHZlKHt9KTtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMge1xuICAgICAgICAgICAgICAgIFtpZDogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgY2xhc3NpYzogU3R5bGU7XG4gICAgICAgICAgICAgICAgICBib3JkZXJlZDogU3R5bGU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhycy5pdGVtcykuZm9yRWFjaCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bWJvbFNlcnZpY2UuZ2V0U3ltYm9sQXNJY29uU3R5bGUoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2xBc0ljb25TdHlsZShpdGVtLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgXSkudGhlbigoW3N0eWxlLCBiU3R5bGVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpdGVtLmlkXSA9IHsgY2xhc3NpYzogc3R5bGUsIGJvcmRlcmVkOiBiU3R5bGUgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoID49IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmhlaWdodCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIG1hcCgoW3NpemUsIGRpc3BsYXldKSA9PiAoc2l6ZS5oZWlnaHQgPz8gMTAwKSAtIChkaXNwbGF5ID8gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWUgOiAwKSksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGlvbnMkID0gdGhpcy5vcHRpb25zJC5waXBlKG1hcCgob3B0aW9ucykgPT4gISFvcHRpb25zLmF0dHJpYnV0aW9ucykpO1xuXG4gICAgdGhpcy5sZWdlbmRUb3AkID0gY29tYmluZUxhdGVzdChbdGhpcy5kaXNwbGF5SGVhZGVyJCwgdGhpcy5hdHRyaWJ1dGlvbnMkXSkucGlwZShcbiAgICAgIG1hcCgoW2hlYWRlciwgYXR0cl0pID0+IDUgKyAoaGVhZGVyID8gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWUgOiAwKSArIChhdHRyID8gNjEgOiAwKSlcbiAgICApO1xuXG4gICAgdGhpcy5sZWdlbmRIZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSwgdGhpcy5sZWdlbmRUb3AkXSkucGlwZShcbiAgICAgIG1hcCgoW3NpemUsIHRvcF0pID0+IHtcbiAgICAgICAgcmV0dXJuIChzaXplLmhlaWdodCA/PyAxMDApIC0gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWUgLSB0b3AgLSA1NjsgLy8gNTZweCBpcyB0aGUgcG9waW4gdGl0bGUgaGVpZ2h0ICsgbWFyZ2luXG4gICAgICB9KSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy53bXNDYXBhYmlsaXRpZXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgod21zQ2FwYWJpbGl0aWVzKSA9PlxuICAgICAgICAgICAgd21zQ2FwYWJpbGl0aWVzXG4gICAgICAgICAgICAgID8gT2JqZWN0LmtleXMod21zQ2FwYWJpbGl0aWVzKVxuICAgICAgICAgICAgICAgICAgLm1hcCgodXJsKSA9PiAoeyB1cmwsIGxheWVyczogWE1MVXRpbHMuZ2V0UG9zc2libGVMYXllclN0eWxlcyh3bXNDYXBhYmlsaXRpZXNbdXJsXT8uZG9jKSB9KSlcbiAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+ICh7IC4uLnAsIFtjLnVybF06IGMgfSksIHt9KVxuICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdGFydFdpdGgoe30pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocG9zc2libGVTdHlsZXMpID0+ICh0aGlzLnBvc3NpYmxlU3R5bGVzID0gcG9zc2libGVTdHlsZXMpKVxuICAgICk7XG5cbiAgICB0aGlzLmhhc1NsaWRlTGF5ZXIkID0gdGhpcy5vcHRpb25zJC5waXBlKFxuICAgICAgbWFwKChvcHRpb25zKSA9PlxuICAgICAgICAob3B0aW9ucy5sYXllcnMgPz8gW10pLm1hcCgobGF5ZXIpID0+ICEhbGF5ZXIuc2xpZGUgJiYgbGF5ZXIuc2xpZGUgIT09ICdhbGwnKS5yZWR1Y2UoKGEsIGIpID0+IGEgfHwgYiwgZmFsc2UpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGluaXRJbnRlcmFjdGlvbk1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLmluaXQodGhpcyk7XG4gIH1cblxuICBpbml0VG9vbHRpcE1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHRpcE1hbmFnZXIuaW5pdChcbiAgICAgIHRoaXMudG9vbHRpcEZhY3RvcnlTZXJ2aWNlLFxuICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgIHRoaXMuc3RvcmUsXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMsXG4gICAgICB0aGlzLndpZGdldFNpemUkLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJCxcbiAgICAgIHRoaXMubWFwLFxuICAgICAgdGhpcy5wb3B1cCxcbiAgICAgIHRoaXMucG9wdXBDb250ZW50LFxuICAgICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIsXG4gICAgICB0aGlzXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hcCA9IG5ldyBNYXAoeyB0YXJnZXQ6IHRoaXMubWFwUmVmLm5hdGl2ZUVsZW1lbnQsIGNvbnRyb2xzOiBkZWZhdWx0cyh7IGF0dHJpYnV0aW9uOiBmYWxzZSB9KSB9KTtcbiAgICB0aGlzLmludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMuaW5pdEludGVyYWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMubGF5ZXJTbGlkZXIuaW5pdCh0aGlzLm1hcCwgdGhpcy5zbGlkZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSB0aGlzLmluaXRUb29sdGlwTWFuYWdlcigpO1xuICAgIHRoaXMubWFwU3R5bGVVcmwkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5tYXBVcmwkXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIHVybF0pID0+IHtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnN0eWxlKSB7XG4gICAgICAgICAgY2FzZSB0aGlzLk5PX1NUWUxFOlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgY2FzZSB0aGlzLlNUWUxFX0ZST01fVVJMOlxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGVVUkwgPz8gJyc7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBgJHt1cmx9L3N0eWxlcy8ke29wdGlvbnMuc3R5bGV9L3N0eWxlLmpzb25gO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuXG4gICAgdGhpcy5tYXBTdHlsZUxheWVyJCA9IHRoaXMubWFwU3R5bGVVcmwkLnBpcGUoXG4gICAgICBtYXAoKHN0eWxlVXJsKSA9PiB7XG4gICAgICAgIGlmICghc3R5bGVVcmwpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBuZXcgTWFwYm94VmVjdG9yTGF5ZXIoe1xuICAgICAgICAgICAgcHJvcGVydGllczogeyB0aXRsZTogJ2JhY2tncm91bmQnIH0sXG4gICAgICAgICAgICBzdHlsZVVybFxuICAgICAgICAgIH0pIC8qICxcbiAgICAgICAgICBuZXcgVGlsZUxheWVyKHtcbiAgICAgICAgICAgIHNvdXJjZTogbmV3IFRpbGVEZWJ1ZygpXG4gICAgICAgICAgfSkgKi9cbiAgICAgICAgXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgob3B0aW9ucykgPT4gKHtcbiAgICAgICAgICAgIGNlbnRlcjogZnJvbUxvbkxhdChvcHRpb25zLmNlbnRlciA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX01BUF9DRU5URVIpLFxuICAgICAgICAgICAgbWF4Wm9vbTogb3B0aW9ucy56b29tPy5tYXggPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgICAgIG1pblpvb206IG9wdGlvbnMuem9vbT8ubWluID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgICAgICB6b29tOiBvcHRpb25zLnpvb20/LnN0YXJ0ID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9TVEFSVFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmlldykgPT4gdGhpcy5tYXAuc2V0VmlldyhuZXcgVmlldyh2aWV3KSkpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgob3B0aW9ucykgPT4gb3B0aW9ucy5hdHRyaWJ1dGlvbnMpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChhdHRyaWJ1dGlvbnMpID0+IHtcbiAgICAgICAgICBpZiAoIWF0dHJpYnV0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLmF0dHJpYnV0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWFwLmFkZENvbnRyb2wodGhpcy5hdHRyaWJ1dGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5sYXllcnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuYWRkaXRpb25hbExheWVycyQsXG4gICAgICB0aGlzLml0ZW1TdHlsZXMkLFxuICAgICAgdGhpcy5kYXRhc291cmNlRmlsdGVycyQsXG4gICAgICB0aGlzLmZpZWxkcyRcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoW3Jlc3VsdFNldCwgb3B0aW9ucywgY2xhc3NlcywgYWRkaXRpb25hbExheWVycywgaXRlbVN0eWxlcywgZmlsdGVycywgZmllbGRzXSkgPT5cbiAgICAgICAgICAhIXJlc3VsdFNldCAmJiAhIW9wdGlvbnMgJiYgISFjbGFzc2VzICYmICEhZmllbGRzXG4gICAgICApLFxuICAgICAgbWFwKChbcmVzdWx0U2V0LCBvcHRpb25zLCBjbGFzc2VzLCBhZGRpdGlvbmFsTGF5ZXJzLCBpdGVtU3R5bGVzLCBmaWx0ZXJzLCBmaWVsZHNdKSA9PiB7XG4gICAgICAgIGxldCBoYXNSZWxhdGlvbkxheWVyID0gbnVsbCBhcyB1bmtub3duIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZTxhbnk+PjtcblxuICAgICAgICBjb25zdCBsYXllcnMgPSAob3B0aW9ucz8ubGF5ZXJzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAobGF5ZXIpID0+IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmRvbnROZWVkTG9jYXRpb24uaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgISFsYXllci5hdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIChsYXllcikgPT4gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuZG9udE5lZWRJbnRlbnNpdHkuaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgISFsYXllci5pbnRlbnNpdHlBdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgaWR4LCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlc0ZvckNsYXNzID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAgICAgICAubWFwKChjbGFzc0lkKSA9PiAoe1xuICAgICAgICAgICAgICAgIGNsYXNzSWQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRBdHRyaWJ1dGVzRm9yRHJhd2luZyhjbGFzc2VzLCBjbGFzc0lkLCBsYXllcilcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKHAsIGMpID0+ICh7XG4gICAgICAgICAgICAgICAgICAuLi5wLFxuICAgICAgICAgICAgICAgICAgW2MuY2xhc3NJZF06IGNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB7fSBhcyB7XG4gICAgICAgICAgICAgICAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICAgICAgICAgICAgICAgIGludGVuc2l0eUF0dHJpYnV0ZTogQXR0cmlidXRlO1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGxldCBsYXllckNsYXNzZXNJZCA9IGNsYXNzZXMubWFwKChjbGF6eikgPT4gY2xhenouaWQpO1xuICAgICAgICAgICAgaWYgKCdjbGFzc2VzJyBpbiBsYXllciAmJiAhIWxheWVyLmNsYXNzZXMgJiYgbGF5ZXIuY2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxheWVyQ2xhc3Nlc0lkID0gbGF5ZXIuY2xhc3NlcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHJhbmdlID0geyBtaW46IDAsIG1heDogMCB9O1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgaWYgKCEhbGF5ZXIuaW50ZW5zaXR5QXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcylcbiAgICAgICAgICAgICAgICAubWFwKChjbGFzc0lkKSA9PlxuICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdLm1hcCgoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICAgICAgSXRlbVV0aWxzLmdldEF0dHJpYnV0ZUNhbGN1bGF0ZWRWYWx1ZShpdGVtLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmludGVuc2l0eUF0dHJpYnV0ZSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSBhcyBudW1iZXJbXTtcblxuICAgICAgICAgICAgICByYW5nZSA9IHZhbHVlcy5yZWR1Y2UoKHAsIGMpID0+ICh7IG1pbjogTWF0aC5taW4ocC5taW4sIGMpLCBtYXg6IE1hdGgubWF4KHAubWF4LCBjKSB9KSwge1xuICAgICAgICAgICAgICAgIG1pbjogTnVtYmVyLk1BWF9WQUxVRSxcbiAgICAgICAgICAgICAgICBtYXg6IC1OdW1iZXIuTUFYX1ZBTFVFXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbXBsID0gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UubGF5ZXJzSW1wbGVtZW50YXRpb25bbGF5ZXIudHlwZV07XG4gICAgICAgICAgICBpZiAoISFpbXBsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdExheWVyID0gaW1wbChcbiAgICAgICAgICAgICAgICBsYXllciBhcyBhbnksXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgICAgICAgICAgIGxheWVyQ2xhc3Nlc0lkLFxuICAgICAgICAgICAgICAgIHJlc3VsdFNldCxcbiAgICAgICAgICAgICAgICByYW5nZSxcbiAgICAgICAgICAgICAgICBpdGVtU3R5bGVzLFxuICAgICAgICAgICAgICAgIHRoaXMubWFwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgnZml0JywgbGF5ZXIuZml0KTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCd0eXBlJywgbGF5ZXIudHlwZSk7XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgnc2xpZGUnLCBsYXllci5zbGlkZSk7XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgnb3JkZXInLCBsYXllci5vcmRlcik7XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgnZ3JvdXAnLCBsYXllci5ncm91cCA/PyBERUZBVUxUX0xBWUVSX0dST1VQKTtcbiAgICAgICAgICAgICAgY29uc3QgbWF4TGF5ZXJPcmRlciA9IE1hdGgubWF4KC4uLmFycmF5Lm1hcCgobCkgPT4gbC5vcmRlciA/PyAwKSk7XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldFpJbmRleChtYXhMYXllck9yZGVyICsgMSAtIChsYXllci5vcmRlciA/PyBpZHgpKTtcbiAgICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdyZWxhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBoYXNSZWxhdGlvbkxheWVyID0gcmVzdWx0TGF5ZXIgYXMgdW5rbm93biBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U+O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgndGl0bGUnLCBsYXllci50aXRsZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3FsX2ZpbHRlciA9IENxbFV0aWxzLmdldENRTFBhcmFtc0ZvcihsYXllci5kYXRhc291cmNlSWQsIGZpbHRlcnMsIGNsYXNzZXMsIGZpZWxkcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY3FsX2ZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIENRTCBxdWVyeSB0byBnZW9zZXJ2ZXIgbGF5ZXJzXG4gICAgICAgICAgICAgICAgICAocmVzdWx0TGF5ZXIgYXMgVGlsZTxUaWxlV01TPikuZ2V0U291cmNlKCkhLnVwZGF0ZVBhcmFtcyh7IGNxbF9maWx0ZXIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGxheWVyLnNsaWRlICYmIGxheWVyLnNsaWRlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJTbGlkZXIuYXBwbHlTbGlkZShcbiAgICAgICAgICAgICAgICAgIGxheWVyLnNsaWRlLFxuICAgICAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIgYXMgdW5rbm93biBhcyBUaWxlTGF5ZXI8YW55PiB8IFZlY3RvckxheWVyPGFueT4gfCBIZWF0bWFwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRMYXllcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYExheWVyIHR5cGUgJHtsYXllci50eXBlfSBpcyB1bmtub3duYCk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgQmFzZUxheWVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIpO1xuXG4gICAgICAgIGlmICghIWhhc1JlbGF0aW9uTGF5ZXIpIHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGxheWVyc1xuICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEobGF5ZXIgaW5zdGFuY2VvZiBUaWxlKSlcbiAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PlxuICAgICAgICAgICAgICBsYXllclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZlYXR1cmVzOiBGZWF0dXJlPGFueT4pID0+ICEhZmVhdHVyZXMuZ2V0KCdpZCcpIHx8ICEhZmVhdHVyZXMuZ2V0KCdmZWF0dXJlcycpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSk7XG5cbiAgICAgICAgICByZXN1bHRTZXQucmVsYXRpb25zLmZvckVhY2goKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBmZWF0dXJlcy5maW5kKChmOiBGZWF0dXJlPFBvaW50IHwgQ2lyY2xlPikgPT4gZi5nZXQoJ2lkJykgPT09IHJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gZmVhdHVyZXMuZmluZCgoZjogRmVhdHVyZTxQb2ludCB8IENpcmNsZT4pID0+IGYuZ2V0KCdpZCcpID09PSByZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgICAgICBpZiAoISFzb3VyY2UgJiYgISFkZXN0KSB7XG4gICAgICAgICAgICAgIGhhc1JlbGF0aW9uTGF5ZXIuZ2V0U291cmNlKCk/LmFkZEZlYXR1cmUoV2lkZ2V0TWFwVXRpbHMuZ2V0TGlua0ZlYXR1cmUocmVsYXRpb24sIHNvdXJjZSwgZGVzdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxheWVycy5wdXNoKC4uLmFkZGl0aW9uYWxMYXllcnMpO1xuXG4gICAgICAgIGNvbnN0IHZpc2libGVMYXllcnMgPSBvcHRpb25zLmxheWVyR3JvdXBzIS5tYXAoKGdyb3VwKSA9PiBncm91cC52aXNpYmxlTGF5ZXJzKS5mbGF0KCk7XG4gICAgICAgIGxheWVycy5mb3JFYWNoKChsYXllciwgaWR4KSA9PiB7XG4gICAgICAgICAgaWYgKCF2aXNpYmxlTGF5ZXJzLmluY2x1ZGVzKGxheWVyLmdldCgndGl0bGUnKSkpIHtcbiAgICAgICAgICAgIGxheWVyLnNldFZpc2libGUoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyogUmVzb2x2ZSBidWcgZHJhd2luZyB3ZWJnbGxheWVyIHdpdGhvdXQgbm90aGluZyB1bmRlcm5lYXRoOiBhZGQgZW1wdHkgbGF5ZXIgYmVsb3cgKi9cbiAgICAgICAgY29uc3QgX2xheWVycyA9IHRoaXMuYWRkRW1wdHlXZWJHbExheWVyQmVsb3dTbGlkZUhlYXRtYXBzKGxheWVycyk7XG4gICAgICAgIHRoaXMucHJldmlvdXNMYXllcnMucHVzaCguLi5fbGF5ZXJzKTtcbiAgICAgICAgcmV0dXJuIF9sYXllcnM7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmZpdEV4dGVudHMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkLFxuICAgICAgdGhpcy53bXNDYXBhYmlsaXRpZXMkXG4gICAgXSkucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgc3dpdGNoTWFwKChbb3B0aW9ucywgY2xhc3NlcywgZmlsdGVycywgd21zQ2FwYWJpbGl0aWVzXSkgPT5cbiAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5maW5kKChsYXllcikgPT4gWydnZW9zZXJ2ZXInLCAnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkgJiYgbGF5ZXIuZml0KVxuICAgICAgICAgID8gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgIC4uLigob3B0aW9ucy5sYXllcnM/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInKSA/PyBbXSkgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmZpdClcbiAgICAgICAgICAgICAgICAubWFwKChsYXllcjogTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKSA9PlxuICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLmZpbmQoKGNsYXp6KSA9PiBjbGF6ei5pZCA9PT0gbGF5ZXIub0NsYXNzKSA/PyAoeyBhdHRyaWJ1dGVzOiBbXSB9IGFzIHVua25vd24gYXMgQ2xhc3MpXG4gICAgICAgICAgICAgICAgICApLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoYXR0cikgPT4gR2VvbWV0cmljRmllbGRUeXBlcy5pbmNsdWRlcyhhdHRyLmZpZWxkLnR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChhdHRyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJ5QWdncmVnYXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWdncmVnYXRlKFtsYXllci5kYXRhc291cmNlSWRdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGluYXRlOiB7IG9wZXJhdGlvbjogT3BlcmF0aW9uLkVYVEVOVCwgYXR0cmlidXRlOiBhdHRyLmlkLCBsYWJlbDogYXR0ci5uYW1lLCBrZWVwMDogZmFsc2UgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoZXh0ZW50UmVzcG9uc2U6IEFnZ3JlZ2F0aW9uUmVzdWx0KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldE1hcFV0aWxzLnByb2plY3RFeHRlbnRBZ2dyZWdhdGlvblJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5maWVsZCEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd21zQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoeyBkYXRhc291cmNlOiBsYXllci5kYXRhc291cmNlSWQsIGV4dGVudDogW10sIGVycm9yOiB0cnVlIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmZsYXQoKSxcbiAgICAgICAgICAgICAgLi4uKChvcHRpb25zLmxheWVycz8uZmlsdGVyKChsYXllcikgPT4gbGF5ZXIudHlwZSA9PT0gJ3dtcycpID8/IFtdKSBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9uc1tdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5maXQpXG4gICAgICAgICAgICAgICAgLm1hcCgobGF5ZXI6IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBleHRlbnQgPSBYTUxVdGlscy5nZXRMYXllckV4dGVudChsYXllci5wYXJhbUxheWVyLCB0aGlzLm1hcCwgd21zQ2FwYWJpbGl0aWVzIVtsYXllci51cmxdPy5kb2MpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNvdXJjZTogYHdtcy0ke2xheWVyLnBhcmFtTGF5ZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW50OiBleHRlbnQgPz8gW10sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAhZXh0ZW50XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IG9mKFtdKVxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgW10gYXMge1xuICAgICAgICAgIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICAgICAgICBleHRlbnQ6IENvb3JkaW5hdGVbXTtcbiAgICAgICAgICBlcnJvcjogYm9vbGVhbjtcbiAgICAgICAgfVtdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMubGVnZW5kTGF5ZXJzJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG9wdGlvbnMpID0+XG4gICAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PiBbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSkgYXMgKFxuICAgICAgICAgICAgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICApW11cbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5sYXllcnNUb3AkID0gY29tYmluZUxhdGVzdChbdGhpcy5sZWdlbmRUb3AkLCB0aGlzLmxlZ2VuZExheWVycyRdKS5waXBlKFxuICAgICAgbWFwKChbbGVnZW5kVG9wLCBsYXllcnNdKSA9PiBsZWdlbmRUb3AgKyAoKGxheWVycy5sZW5ndGggPz8gMCkgPiAwID8gNTAgOiAwKSlcbiAgICApO1xuXG4gICAgdGhpcy5sYXllcnNIZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSwgdGhpcy5sYXllcnNUb3AkXSkucGlwZShcbiAgICAgIG1hcCgoW3NpemUsIHRvcF0pID0+IHtcbiAgICAgICAgcmV0dXJuIChzaXplLmhlaWdodCA/PyAxMDApIC0gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWUgLSB0b3AgLSA1MDsgLy8gNTBweCBhY3RzIGFzIGJvdHRvbSBtYXJnaW5cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmxheWVyc1RvcCQsIHRoaXMubGVnZW5kTGF5ZXJzJCwgdGhpcy5vbFpvb21FbGVtZW50JCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pXG4gICAgICAgIC5waXBlKHdpdGhMYXRlc3RGcm9tKHRoaXMubGF5ZXJzJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtbbGF5ZXJzVG9wLCBsZWdlbmQsIHpvb21FbGVtZW50LCBkaXNwbGF5SGVhZGVyXSwgbGF5ZXJzXSkgPT4ge1xuICAgICAgICAgIGlmICh6b29tRWxlbWVudCkge1xuICAgICAgICAgICAgem9vbUVsZW1lbnQuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgICAgIGxheWVyc1RvcCArXG4gICAgICAgICAgICAgICgobGVnZW5kLmxlbmd0aCA/PyAwKSA+IDAgfHwgbGF5ZXJzLmxlbmd0aCA+IDAgPyAyMCA6IDApICtcbiAgICAgICAgICAgICAgKCFkaXNwbGF5SGVhZGVyID8gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWUgOiAwKVxuICAgICAgICAgICAgfXB4YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5tYXBTdHlsZUxheWVyJCxcbiAgICAgICAgdGhpcy5sYXllcnMkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSkpLFxuICAgICAgICB0aGlzLmZpdEV4dGVudHMkLFxuICAgICAgICB0aGlzLmRhdGFzb3VyY2VGaWx0ZXJzJFxuICAgICAgXSkuc3Vic2NyaWJlKChbbWFwU3R5bGVMYXllciwgbGF5ZXJzLCBzZWxlY3RlZElkcywgZXh0ZW50cywgZmlsdGVyc10pID0+IHtcbiAgICAgICAgY29uc3QgbmVlZGVkQ2FsY3VsYXRlZEV4dGVudHMgPSBsYXllcnMuZmlsdGVyKFxuICAgICAgICAgIChsYXllcikgPT4gWydnZW9zZXJ2ZXInLCAnd21zJ10uaW5jbHVkZXMobGF5ZXIuZ2V0KCd0eXBlJykpICYmIGxheWVyLmdldCgnZml0JylcbiAgICAgICAgKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG5iQ2FsY3VsYXRlZEV4dGVudHMgPSBleHRlbnRzLmZpbHRlcigoZXh0ZW50KSA9PiAhZXh0ZW50LmVycm9yKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG5iQ2FsY3VsYXRlZEV4dGVudHMgPj0gbmVlZGVkQ2FsY3VsYXRlZEV4dGVudHMpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvQXBwbHlMYXllcnMgPSBbLi4ubGF5ZXJzLCAuLi5tYXBTdHlsZUxheWVyXTtcbiAgICAgICAgICAgIHRoaXMubWFwLnNldExheWVycyh0b0FwcGx5TGF5ZXJzKTtcblxuICAgICAgICAgICAgdGhpcy5maXRNYXBGb3JPYmplY3RzKHNlbGVjdGVkSWRzLCBleHRlbnRzKTtcbiAgICAgICAgICAgIHRoaXMubWFwLnVwZGF0ZVNpemUoKTtcblxuICAgICAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAgICAgLmdldEFsbExheWVycygpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiAhKGxheWVyIGluc3RhbmNlb2YgVGlsZSkpXG4gICAgICAgICAgICAgIC5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdldEZlYXR1cmVzID0gKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSk/LmdldEZlYXR1cmVzO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZ2V0RmVhdHVyZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIChsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpPy5nZXRGZWF0dXJlcygpLmZvckVhY2goKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZmVhdHVyZS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIFsnYnViYmxlJywgJ21hcmtlcicsICdwb2ludCcsICdsaW5lJywgJ3BvbHlnb24nLCAnbXVsdGktbGluZScsICdtdWx0aS1wb2x5Z29uJ10uaW5jbHVkZXModHlwZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuZ2V0KHNlbGVjdGVkSWRzLmluY2x1ZGVzKGZlYXR1cmUuZ2V0KCdpZCcpKSA/ICdzZWxlY3RlZFN0eWxlJyA6ICdjbGFzc2ljU3R5bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hcC5zZXRMYXllcnMoWy4uLm1hcFN0eWxlTGF5ZXJdKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFbXB0eVdlYkdsTGF5ZXJCZWxvd1NsaWRlSGVhdG1hcHMobGF5ZXJzOiBCYXNlTGF5ZXJbXSkge1xuICAgIGNvbnN0IF9sYXllcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbaV07XG4gICAgICBfbGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgaWYgKGxheWVyLmdldCgndHlwZScpID09PSAnaGVhdG1hcCcgJiYgbGF5ZXIuZ2V0KCdzbGlkZScpKSB7XG4gICAgICAgIGNvbnN0IGVtcHR5RGF0YSA9IG5ldyBVaW50OEFycmF5KDI1NiAqIDI1NiAqIDQpO1xuICAgICAgICBjb25zdCBlbXB0eUxheWVyID0gbmV3IFdlYkdMVGlsZUxheWVyKHtcbiAgICAgICAgICBzb3VyY2U6IG5ldyBEYXRhVGlsZSh7XG4gICAgICAgICAgICBsb2FkZXIoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlbXB0eURhdGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4Wm9vbTogMCxcbiAgICAgICAgICAgIHdyYXBYOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIF9sYXllcnMucHVzaChlbXB0eUxheWVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9sYXllcnM7XG4gIH1cblxuICBvdmVycmlkZSBpbml0UmVzdWx0U2V0JCgpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmVzdWx0U2V0cyksXG4gICAgICB0aGlzLmRhdGFzb3VyY2VJZHMkLFxuICAgICAgdGhpcy5zdGF0aWNSZXN1bHRTZXQkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5kYXRhc2V0cylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbcmVzdWx0U2V0cywgcmVzdWx0U2V0TmFtZXNBcnJheSwgc3RhdGljUmVzdWx0U2V0LCBkZWZpbml0aW9uc10pID0+IHtcbiAgICAgICAgaWYgKCEhc3RhdGljUmVzdWx0U2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRpY1Jlc3VsdFNldDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRTZXRBcnJheSA9IHJlc3VsdFNldE5hbWVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKChyc05hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBkZWZpbml0aW9ucy5maW5kKChkc2QpID0+IGRzZC5pZCA9PT0gcnNOYW1lKSBhcyBEYXRhc2V0IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuICFkZWZpbml0aW9uIHx8ICEoZGVmaW5pdGlvbi5tZXRhZGF0YSA/PyBbXSkuZmluZCgobWV0YSkgPT4gbWV0YS5tZXRhZGF0YURlZi5uYW1lID09PSAnX2dlb0tleScpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgocnNOYW1lKSA9PiByZXN1bHRTZXRzW3JzTmFtZSA/PyAnJ10pXG4gICAgICAgICAgLmZpbHRlcigocnNOYW1lKSA9PiAhIXJzTmFtZSk7XG4gICAgICAgIHJldHVybiByZXN1bHRTZXRBcnJheS5yZWR1Y2UoKHJzMSwgcnMyKSA9PiBSZXN1bHRzZXRVdGlscy5tZXJnZVJlc3VsdFNldHMocnMxLCByczIpLCB7XG4gICAgICAgICAgaXRlbXM6IHt9LFxuICAgICAgICAgIHJlbGF0aW9uczogW10sXG4gICAgICAgICAgbWVyZ2VkOiByZXN1bHRTZXRBcnJheS5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCB2KSA9PiBlcXVhbChwLCB2KSlcbiAgICApO1xuICB9XG5cbiAgc2V0RGVmYXVsdExheWVyVGl0bGUoXG4gICAgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNhcGFiaWxpdGllczpcbiAgICAgIHwge1xuICAgICAgICAgIFtwOiBzdHJpbmddOiBHZXRDYXBhYmlsaXRpZXNSZXNwb25zZSB8IG51bGw7XG4gICAgICAgIH1cbiAgICAgIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGlmICghbGF5ZXIudGl0bGUpIHtcbiAgICAgIGlmIChbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSkge1xuICAgICAgICBjb25zdCBnZW9MYXllciA9IGxheWVyIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgICBjb25zdCBsYXllckNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyA/IGNhcGFiaWxpdGllc1tnZW9MYXllci51cmxdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChsYXllckNhcGFiaWxpdGllcykge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nTGF5ZXIgPSBYTUxVdGlscy5nZXRNYXRjaGluZ0xheWVyKGdlb0xheWVyLnBhcmFtTGF5ZXIsIGxheWVyQ2FwYWJpbGl0aWVzLmRvYyk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nTGF5ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVGl0bGUgPSBYTUxVdGlscy5maW5kKG1hdGNoaW5nTGF5ZXIuY2hpbGROb2RlcywgJ1RpdGxlJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUaXRsZSkge1xuICAgICAgICAgICAgICBsYXllci50aXRsZSA9XG4gICAgICAgICAgICAgICAgISFtYXRjaGluZ1RpdGxlLnRleHRDb250ZW50ICYmIG1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgPyBtYXRjaGluZ1RpdGxlLnRleHRDb250ZW50XG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGF5ZXIudGl0bGUgPSBnZW9MYXllci5wYXJhbUxheWVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYXllci50aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLiR7bGF5ZXIudHlwZX1gLCB7IC4uLmxheWVyIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpdE1hcEZvck9iamVjdHMoXG4gICAgc2VsZWN0ZWRJZHM/OiBzdHJpbmdbXSxcbiAgICBleHRlbnRzOiB7XG4gICAgICBkYXRhc291cmNlOiBzdHJpbmc7XG4gICAgICBleHRlbnQ6IENvb3JkaW5hdGVbXTtcbiAgICB9W10gPSBbXVxuICApIHtcbiAgICBsZXQgZXh0ZW50ID0gY3JlYXRlRW1wdHkoKTtcbiAgICBjb25zdCBsaXN0T2ZNYXJrZXJzID0gW10gYXMgYW55W107XG5cbiAgICAvKiBNYW5kYXRvcnkgZml0ICovXG4gICAgdGhpcy5tYXBcbiAgICAgIC5nZXRBbGxMYXllcnMoKVxuICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldFByb3BlcnRpZXMoKVsnZml0J10pXG4gICAgICAuZmlsdGVyKChsYXllcikgPT4gISFsYXllci5nZXRTb3VyY2UgJiYgISFsYXllci5nZXRTb3VyY2UoKSAmJiAhIShsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpLmdldEZlYXR1cmVzKVxuICAgICAgLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgIChsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpLmdldEZlYXR1cmVzKCkuZm9yRWFjaCgoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBmZWF0dXJlLmdldCgnaWQnKTtcbiAgICAgICAgICBpZiAoIXNlbGVjdGVkSWRzIHx8IHNlbGVjdGVkSWRzLmxlbmd0aCA8PSAwIHx8IChzZWxlY3RlZElkcy5sZW5ndGggPiAwICYmIHNlbGVjdGVkSWRzLmluY2x1ZGVzKGlkKSkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmVhdHVyZS5nZXQoJ3R5cGUnKSkge1xuICAgICAgICAgICAgICBjYXNlICdoZWF0cG9pbnQnOlxuICAgICAgICAgICAgICBjYXNlICdwb2ludCc6XG4gICAgICAgICAgICAgIGNhc2UgJ21hcmtlcic6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnbGluZSc6XG4gICAgICAgICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaCguLi5mZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgICAgICAgICBjYXNlICdtdWx0aS1saW5lJzpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goLi4uZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCkuZmxhdCgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnbXVsdGktcG9seWdvbic6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpLmZsYXQoKS5mbGF0KCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaChmZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q2VudGVyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHNlbGVjdGVkRXh0ZW50ID0gYm91bmRpbmdFeHRlbnQoXG4gICAgICBsaXN0T2ZNYXJrZXJzLmZpbHRlcigoY29vcmQpID0+ICEhY29vcmQpLmNvbmNhdCguLi5leHRlbnRzLm1hcCgoZXh0ZW50KSA9PiBleHRlbnQuZXh0ZW50KSlcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWRFeHRlbnRbMF0gIT09IEluZmluaXR5ICYmXG4gICAgICBzZWxlY3RlZEV4dGVudFsxXSAhPT0gSW5maW5pdHkgJiZcbiAgICAgIHNlbGVjdGVkRXh0ZW50WzJdICE9PSAtSW5maW5pdHkgJiZcbiAgICAgIHNlbGVjdGVkRXh0ZW50WzNdICE9PSAtSW5maW5pdHlcbiAgICApIHtcbiAgICAgIGV4dGVudCA9IHNlbGVjdGVkRXh0ZW50O1xuICAgIH1cblxuICAgIGlmIChleHRlbnRbMF0gIT09IEluZmluaXR5ICYmIGV4dGVudFsxXSAhPT0gSW5maW5pdHkgJiYgZXh0ZW50WzJdICE9PSAtSW5maW5pdHkgJiYgZXh0ZW50WzNdICE9PSAtSW5maW5pdHkpIHtcbiAgICAgIHRoaXMubWFwLmdldFZpZXcoKS5maXQoZXh0ZW50LCB7IHBhZGRpbmc6IFsyMCwgMjAsIDcwLCA3MF0sIGR1cmF0aW9uOiAyMDAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVzRm9yRHJhd2luZyhjbGFzc2VzOiBDbGFzc1tdLCBjbGFzc0lkOiBzdHJpbmcsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBjbGFzc09iaiA9IGNsYXNzZXMuZmluZCgoY2wpID0+IGNsLmlkID09PSBjbGFzc0lkKSA/PyAoeyBhdHRyaWJ1dGVzOiBbXSBhcyBBdHRyaWJ1dGVbXSB9IGFzIENsYXNzKTtcbiAgICBjb25zdCBsb2NhdGlvbkF0dHJpYnV0ZSA9IHRoaXMuZ2V0TG9jYXRpb25BdHRyaWJ1dGUoY2xhc3NPYmosIGxheWVyKTtcbiAgICBjb25zdCBpbnRlbnNpdHlBdHRyaWJ1dGUgPSB0aGlzLmdldEludGVuc2l0eUF0dHJpYnV0ZShcbiAgICAgIGNsYXNzT2JqLFxuICAgICAgbGF5ZXIgYXMgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9uc1xuICAgICk7XG4gICAgcmV0dXJuIHsgbG9jYXRpb25BdHRyaWJ1dGUsIGludGVuc2l0eUF0dHJpYnV0ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnRlbnNpdHlBdHRyaWJ1dGUoXG4gICAgY2xhc3NPYmo6IENsYXNzIHwgdW5kZWZpbmVkLFxuICAgIGxheWVyOiBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICAoY2xhc3NPYmogfHwgeyBhdHRyaWJ1dGVzOiBbXSB9KS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gbGF5ZXI/LmludGVuc2l0eUF0dHJpYnV0ZSkgPz9cbiAgICAgICh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYXRpb25BdHRyaWJ1dGUoY2xhc3NPYmo6IENsYXNzLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogQXR0cmlidXRlIHtcbiAgICB0eXBlIGxheWVycyA9IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG4gICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzIGxheWVycztcbiAgICByZXR1cm4gKFxuICAgICAgY2xhc3NPYmouYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLnRlY2huaWNhbE5hbWUgPT09IHNwZWNpZmljTGF5ZXI/LmF0dHJpYnV0ZSkgPz9cbiAgICAgICh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVN0eWxlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zdHlsZSA9ICRldmVudDtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zdHlsZSAhPT0gdGhpcy5TVFlMRV9GUk9NX1VSTCkge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3R5bGVVUkw7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3R5bGVVUkwoJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnN0eWxlVVJMID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlRml0KCRldmVudDogYm9vbGVhbiwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGxheWVyLmZpdCA9ICRldmVudDtcbiAgfVxuXG4gIGNoYW5nZVNsaWRlKCRldmVudDogdW5kZWZpbmVkIHwgJ2xlZnQnIHwgJ3JpZ2h0JywgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGxheWVyLnNsaWRlID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRpb25zKCRldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuYXR0cmlidXRpb25zID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZvckVhY2goKGxheWVyKSA9PiAobGF5ZXIuYXR0cmlidXRpb24gPSAnJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IGRlbGV0ZSBsYXllci5hdHRyaWJ1dGlvbik7XG4gICAgfVxuICB9XG5cbiAgYWRkTGF5ZXIoZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IFtdO1xuICAgIH1cbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBAcHJ5LndpZGdldC5tYXAubGF5ZXJgLCB7IGluZGV4OiB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5sZW5ndGggKyAxIH0pO1xuXG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMucHVzaCh7XG4gICAgICBhdHRyaWJ1dGU6ICcnLFxuICAgICAgZ3JvdXA6IGdyb3VwLm5hbWUsXG4gICAgICB0aXRsZSxcbiAgICAgIHR5cGU6ICdtYXJrZXInXG4gICAgfSk7XG4gICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVt0aXRsZV0gPSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyR3JvdXAoZ3JvdXAsIHVuZGVmaW5lZCwgdGl0bGUpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJPcmRlcigpO1xuICB9XG5cbiAgY2hhbmdlTGF5ZXJUeXBlKCRldmVudDogYW55LCBpOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID8/IFtdO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID09PSAnd21zJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucy5wYXJhbUxheWVyID0gb3B0aW9ucy5wYXJhbUxheWVyID8/ICcnO1xuICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCA/PyAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUgPT09ICd3bXRzJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcFdNVFNMYXllckxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMucGFyYW1MYXllciA9IG9wdGlvbnMucGFyYW1MYXllciA/PyAnJztcbiAgICAgIG9wdGlvbnMuc3R5bGUgPSBvcHRpb25zLnN0eWxlID8/ICcnO1xuICAgICAgb3B0aW9ucy5tYXRyaXhTZXQgPSBvcHRpb25zLm1hdHJpeFNldCA/PyAnJztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICAgIGlmIChbJ2ZlYXR1cmVsYXllcicsICd2ZWN0b3J0aWxlJywgJ3Jhc3RlcnRpbGUnXS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlKSkge1xuICAgICAgbGV0IG9wdGlvbnM6IE1hcEZlYXR1cmVMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0gYXMgTWFwRmVhdHVyZUxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5ZXJHcm91cFNpbmdsZUxheWVyKGdyb3VwOiBMYXllckdyb3VwLCBzaW5nbGVMYXllcjogYm9vbGVhbikge1xuICAgIHRoaXMudXBkYXRlTGF5ZXJHcm91cChncm91cCwgc2luZ2xlTGF5ZXIsIHNpbmdsZUxheWVyID8gW2dyb3VwLnZpc2libGVMYXllcnNbMF1dIDogZ3JvdXAudmlzaWJsZUxheWVycyk7XG4gIH1cblxuICB1cGRhdGVMYXllckdyb3VwKGdyb3VwOiBMYXllckdyb3VwIHwgc3RyaW5nLCBzaW5nbGVMYXllcj86IGJvb2xlYW4sIHZpc2libGVMYXllcnM/OiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIGNvbnN0IGxheWVyR3JvdXAgPSB0eXBlb2YgZ3JvdXAgPT09ICdzdHJpbmcnID8gdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyEuZmluZCgoZykgPT4gZy5uYW1lID09PSBncm91cCkgOiBncm91cDtcbiAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyEuZmluZEluZGV4KChnKSA9PiBnLm5hbWUgPT09IGxheWVyR3JvdXAhLm5hbWUpO1xuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzIS5tYXAoKGcsIGkpID0+XG4gICAgICBpID09PSBncm91cEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZyxcbiAgICAgICAgICAgIHNpbmdsZUxheWVyOiBzaW5nbGVMYXllciA/PyBsYXllckdyb3VwIS5zaW5nbGVMYXllcixcbiAgICAgICAgICAgIHZpc2libGVMYXllcnM6XG4gICAgICAgICAgICAgIHR5cGVvZiB2aXNpYmxlTGF5ZXJzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gWy4uLmxheWVyR3JvdXAhLnZpc2libGVMYXllcnMsIHZpc2libGVMYXllcnNdXG4gICAgICAgICAgICAgICAgOiB2aXNpYmxlTGF5ZXJzID8/IGxheWVyR3JvdXAhLnZpc2libGVMYXllcnNcbiAgICAgICAgICB9XG4gICAgICAgIDogZ1xuICAgICk7XG4gIH1cblxuICBjaGFuZ2VUaXRsZSgkZXZlbnQ6IEV2ZW50LCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBncm91cDogTGF5ZXJHcm91cCkge1xuICAgIGNvbnN0IG5ld1RpdGxlID0gKCRldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJHcm91cChcbiAgICAgIGdyb3VwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5vcHRpb25zQ29weVxuICAgICAgICAubGF5ZXJHcm91cHMhLmZpbHRlcigoZykgPT4gZy5uYW1lID09PSBncm91cC5uYW1lKVxuICAgICAgICAubWFwKChnLCBpKSA9PiBnLnZpc2libGVMYXllcnMubWFwKChsKSA9PiAobCA9PT0gbGF5ZXIudGl0bGUgPyBuZXdUaXRsZSA6IGwpKSlcbiAgICAgICAgLmZsYXQoKVxuICAgICk7XG4gICAgZGVsZXRlIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXTtcbiAgICBsYXllci50aXRsZSA9IG5ld1RpdGxlO1xuICAgIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbmV3VGl0bGVdID0gdHJ1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLnJlbW92ZUVtcHR5TGF5ZXJHcm91cHMoKTtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgIG9wdGlvbnM6IHsgLi4udGhpcy5vcHRpb25zQ29weSwgbGF5ZXJzOiAodGhpcy5vcHRpb25zQ29weS5sYXllcnMgPz8gW10pLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIudHlwZSkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlTG9jYXRpb25BdHRyaWJ1dGVzKCRldmVudDogYW55LCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLmF0dHJpYnV0ZSA9ICRldmVudDtcbiAgfVxuXG4gIGxheWVySGFzSW50ZW5zaXR5KGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpOiBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zIHtcbiAgICByZXR1cm4gPE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM+bGF5ZXI7XG4gIH1cblxuICBjaGFuZ2VJbnRlbnNpdHlBdHRyaWJ1dGVzKCRldmVudDogYW55LCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgbGF5ZXJfID0gPE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM+bGF5ZXI7XG4gICAgbGF5ZXJfLmludGVuc2l0eUF0dHJpYnV0ZSA9ICRldmVudDtcbiAgfVxuXG4gIGNoYW5nZUNsYXNzZXMoJGV2ZW50OiBzdHJpbmdbXSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhc1xuICAgICAgfCBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG4gICAgc3BlY2lmaWNMYXllci5jbGFzc2VzID0gJGV2ZW50O1xuICB9XG5cbiAgZGVsZXRlTGF5ZXIoaTogbnVtYmVyLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBncm91cDogTGF5ZXJHcm91cCkge1xuICAgIHRoaXMub3B0aW9uc0NvcHk/LmxheWVycz8uc3BsaWNlKGksIDEpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJHcm91cChcbiAgICAgIGdyb3VwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZ3JvdXAudmlzaWJsZUxheWVycy5maWx0ZXIoKGwpID0+IGwgIT09IGxheWVyLnRpdGxlKVxuICAgICk7XG4gICAgdGhpcy5yZW1vdmVFbXB0eUxheWVyR3JvdXBzKCk7XG4gICAgaWYgKGxheWVyLnR5cGUgPT09ICdhdXRvJykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5pZ25vcmVBdXRvTGF5ZXIgPSBbLi4uKHRoaXMub3B0aW9uc0NvcHkuaWdub3JlQXV0b0xheWVyID8/IFtdKSwgbGF5ZXIua2V5ICsgJy0nICsgbGF5ZXIuc3ViVHlwZV07XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVXJsKFxuICAgICRldmVudDogRXZlbnQsXG4gICAgbGF5ZXI6XG4gICAgICB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcEZlYXR1cmVMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdNVFNMYXllckxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNcbiAgKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLnVybCA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZUF0dHJpYnV0aW9uKCRldmVudDogRXZlbnQsIGxheWVyOiBCYXNlV2lkZ2V0TWFwTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLmF0dHJpYnV0aW9uID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlUGFyYW1MYXllcigkZXZlbnQ6IEV2ZW50LCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIucGFyYW1MYXllciA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZVBhcmFtVGlsZWQoJGV2ZW50OiBib29sZWFuLCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci5wYXJhbVRpbGVkID0gJGV2ZW50O1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIuY2xlYXJUb29sdGlwKCk7XG4gIH1cblxuICBjaGFuZ2VNYXRyaXhTZXQoJGV2ZW50OiBFdmVudCwgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5tYXRyaXhTZXQgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbVN0eWxlKCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuc3R5bGUgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBleHBvcnQoKSB7XG4gICAgV2lkZ2V0TWFwVXRpbHMuZXhwb3J0TWFwQXNJbWFnZSh0aGlzLm1hcCwgJ21hcC5wbmcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gV2lkZ2V0TWFwVXRpbHMuZ2V0TWFwQXNQbmcodGhpcy5tYXApO1xuICB9XG5cbiAgY2hhbmdlQ2x1c3RlcmVkKGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsICRldmVudDogYm9vbGVhbikge1xuICAgIGxheWVyLmNsdXN0ZXJlZCA9ICRldmVudDtcbiAgICBpZiAobGF5ZXIuY2x1c3RlcmVkKSB7XG4gICAgICBsYXllci5jbHVzdGVyRGlzdGFuY2UgPSAxMDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VDbHVzdGVyRGlzdGFuY2UobGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucywgJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5jbHVzdGVyRGlzdGFuY2UgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VPcGFjaXR5KGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsICRldmVudDogc3RyaW5nKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLm9wYWNpdHkgPSBwYXJzZUludCgkZXZlbnQsIDEwKTtcbiAgfVxuXG4gIGdldFdNU0xheWVycygpOiBMYXllcjxhbnk+W10ge1xuICAgIHJldHVybiAhdGhpcy5tYXBcbiAgICAgID8gW11cbiAgICAgIDogdGhpcy5tYXBcbiAgICAgICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBUaWxlV01TIHx8IGxheWVyLmdldFNvdXJjZSgpIGluc3RhbmNlb2YgSW1hZ2VXTVMpXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5yZW5kZXJlZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBpc0xheWVyUmVuZGVyZWQobGF5ZXI6IGFueSkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0V01TTGF5ZXJzKCkuZmluZChcbiAgICAgICh3bXNMYXllcikgPT4gd21zTGF5ZXIuZ2V0KCd0aXRsZScpID09PSBsYXllci50aXRsZSAmJiB3bXNMYXllci5nZXQoJ2dyb3VwJykgPT09IGxheWVyLmdyb3VwXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVdtc0NsYXNzKCRldmVudDogYW55LCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci5vQ2xhc3MgPSAkZXZlbnQ7XG4gIH1cblxuICB0b2dnbGVMZWdlbmQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMubGVnZW5kVGFiQ2xvc2VkW2luZGV4XSA9ICF0aGlzLmxlZ2VuZFRhYkNsb3NlZFtpbmRleF07XG4gIH1cblxuICB0b2dnbGVMZWdlbmRXaW5kb3coKSB7XG4gICAgdGhpcy5sZWdlbmRUYWJPcGVuID0gIXRoaXMubGVnZW5kVGFiT3BlbjtcbiAgICB0aGlzLmxheWVyc1RhYk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZUxheWVyc1dpbmRvdygpIHtcbiAgICB0aGlzLmxheWVyc1RhYk9wZW4gPSAhdGhpcy5sYXllcnNUYWJPcGVuO1xuICAgIHRoaXMubGVnZW5kVGFiT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IG1hcExheWVycygpIHtcbiAgICByZXR1cm4gKHRoaXMubWFwID8/IHsgZ2V0TGF5ZXJzOiAoKSA9PiAoeyBnZXRBcnJheTogKCkgPT4gW10gfSkgfSlcbiAgICAgIC5nZXRMYXllcnMoKVxuICAgICAgLmdldEFycmF5KClcbiAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXQoJ3RpdGxlJykgIT09ICdiYWNrZ3JvdW5kJyk7XG4gIH1cblxuICBnZXQgcmlnaHRTbGlkZUxheWVycygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBMYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0KCdzbGlkZScpID09PSAncmlnaHQnKTtcbiAgfVxuXG4gIGdldCBsZWZ0U2xpZGVMYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwTGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldCgnc2xpZGUnKSA9PT0gJ2xlZnQnKTtcbiAgfVxuXG4gIGNoYW5nZVZpc2liaWxpdHkoZ3JvdXA6IExheWVyR3JvdXAsIF9sYXllcj86IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IG9sTGF5ZXIgPSB0aGlzLm1hcExheWVycy5maW5kKFxuICAgICAgKGxheWVyKSA9PiBsYXllci5nZXRQcm9wZXJ0aWVzKClbJ3RpdGxlJ10gPT09IF9sYXllcj8udGl0bGUgJiYgbGF5ZXIuZ2V0UHJvcGVydGllcygpWydncm91cCddID09PSBncm91cC5uYW1lXG4gICAgKTtcbiAgICBpZiAoZ3JvdXAuc2luZ2xlTGF5ZXIpIHtcbiAgICAgIGNvbnN0IGdyb3VwTGF5ZXJzID1cbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZpbHRlcigobCkgPT4gbC5ncm91cCA9PT0gZ3JvdXAubmFtZSkubWFwKChsYXllcikgPT4gbGF5ZXIudGl0bGUpID8/IFtdO1xuXG4gICAgICB0aGlzLm1hcExheWVyc1xuICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0UHJvcGVydGllcygpWydncm91cCddID09PSBncm91cC5uYW1lKVxuICAgICAgICAuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICBpZiAoZ3JvdXBMYXllcnMuaW5jbHVkZXMobGF5ZXIuZ2V0UHJvcGVydGllcygpWyd0aXRsZSddKSkge1xuICAgICAgICAgICAgbGF5ZXIuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIGlmIChfbGF5ZXIpIHtcbiAgICAgICAgb2xMYXllcj8uc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllclZpc2liaWxpdHkoZ3JvdXAubmFtZSwgW19sYXllci50aXRsZSFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNpYmlsaXR5KGdyb3VwLm5hbWUsIFtdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb2xMYXllcj8uc2V0VmlzaWJsZSghb2xMYXllcj8uZ2V0VmlzaWJsZSgpKTtcblxuICAgICAgY29uc3QgdmlzaWJsZUxheWVycyA9IGdyb3VwLnZpc2libGVMYXllcnMuaW5jbHVkZXMoX2xheWVyPy50aXRsZSEpXG4gICAgICAgID8gZ3JvdXAudmlzaWJsZUxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllciAhPT0gX2xheWVyPy50aXRsZSlcbiAgICAgICAgOiBbLi4uZ3JvdXAudmlzaWJsZUxheWVycywgX2xheWVyPy50aXRsZSFdO1xuICAgICAgdGhpcy51cGRhdGVMYXllclZpc2liaWxpdHkoZ3JvdXAubmFtZSwgdmlzaWJsZUxheWVycyk7XG4gICAgfVxuICAgIHRoaXMubWFwLnVwZGF0ZVNpemUoKTtcbiAgfVxuXG4gIGlzTGF5ZXJWaXNpYmxlKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwPzogTGF5ZXJHcm91cCk6IGJvb2xlYW4ge1xuICAgIGlmIChncm91cCAmJiBncm91cC52aXNpYmxlTGF5ZXJzKSB7XG4gICAgICByZXR1cm4gZ3JvdXAudmlzaWJsZUxheWVycy5pbmNsdWRlcyhsYXllci50aXRsZSA/PyAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3B0aW9uc0NvcHlcbiAgICAgICAgLmxheWVyR3JvdXBzIS5maW5kKChnKSA9PiBnLm5hbWUgPT09IGxheWVyLmdyb3VwKVxuICAgICAgICA/LnZpc2libGVMYXllcnMuaW5jbHVkZXMobGF5ZXIudGl0bGUgPz8gJycpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUxheWVyVmlzaWJpbGl0eShuYW1lOiBzdHJpbmcsIHZpc2libGVMYXllcnM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyA9IFtcbiAgICAgIC4uLih0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzID8/IFtdKS5tYXAoKGdyb3VwKSA9PlxuICAgICAgICBncm91cC5uYW1lID09PSBuYW1lXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgICB2aXNpYmxlTGF5ZXJzOiB2aXNpYmxlTGF5ZXJzXG4gICAgICAgICAgICAgICAgPyB0eXBlb2YgdmlzaWJsZUxheWVycyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgID8gWy4uLmdyb3VwLnZpc2libGVMYXllcnMsIHZpc2libGVMYXllcnNdXG4gICAgICAgICAgICAgICAgICA6IHZpc2libGVMYXllcnNcbiAgICAgICAgICAgICAgICA6IGdyb3VwLnZpc2libGVMYXllcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IGdyb3VwXG4gICAgICApXG4gICAgXTtcbiAgfVxuXG4gIGNoYW5nZUF1dG9MYXllcigkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuYXV0b21hdGljTGF5ZXJzID0gJGV2ZW50O1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weS5hdXRvbWF0aWNMYXllcnMpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5Lmlnbm9yZUF1dG9MYXllcjtcbiAgICB9XG4gIH1cblxuICBnZXQgbGF5ZXJWaXNpYmxlSWR4KCkge1xuICAgIHJldHVybiB0aGlzLm1hcExheWVycy5tYXAoKGxheWVyLCBpZHgpID0+IChsYXllci5nZXRWaXNpYmxlKCkgPyBpZHggOiAwKSkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgfHwgLTE7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuXG4gICAgLy8gVHJ5aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xuICAgIHRoaXMuY2xlYXJMYXllcnModGhpcy5tYXAuZ2V0TGF5ZXJzKCkuZ2V0QXJyYXkoKSk7XG4gICAgdGhpcy5jbGVhckxheWVycyh0aGlzLnByZXZpb3VzTGF5ZXJzKTtcbiAgICB0aGlzLm1hcC5nZXRSZW5kZXJlcigpIS5kaXNwb3NlKCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGRlbGV0ZSB0aGlzLm1hcDtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5tYXAgPSBudWxsO1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIuZGVzdHJveSgpO1xuICB9XG5cbiAgZ2V0U3R5bGUoX2xheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllciA9IF9sYXllciBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucztcbiAgICBpZiAobGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnM/LlNUWUxFUykge1xuICAgICAgcmV0dXJuIGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzPy5TVFlMRVM7XG4gICAgfVxuICAgIC8qIE5vdCBtYW5pZmVzdC1kZWZpbmVkIHN0eWxlOiB1c2UgZmlyc3QgaW4gbGluZSBiZWNhdXNlIGl0J3MgdGhlIGRlZmF1bHQgb25lIHNlbnQgYnkgZ2Vvc2VydmVyICovXG4gICAgY29uc3QgcG9zc2libGVTdHlsZXNGb3JVcmwgPSB0aGlzLnBvc3NpYmxlU3R5bGVzW2xheWVyLnVybF0gPz8geyBsYXllcnM6IHt9IH07XG4gICAgbGV0IHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyID0gcG9zc2libGVTdHlsZXNGb3JVcmwubGF5ZXJzIVtsYXllci5wYXJhbUxheWVyXTtcbiAgICBpZiAoIXBvc3NpYmxlc1N0eWxlc0ZvckxheWVyKSB7XG4gICAgICBwb3NzaWJsZXNTdHlsZXNGb3JMYXllciA9IHBvc3NpYmxlU3R5bGVzRm9yVXJsLmxheWVycyFbKGxheWVyLnBhcmFtTGF5ZXIgPz8gJzonKS5zcGxpdCgnOicpWzFdXSA/PyB7IHN0eWxlczogW10gfTtcbiAgICB9XG4gICAgcmV0dXJuIHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyLnN0eWxlc1swXT8uaWQ7XG4gIH1cblxuICBjaGFuZ2VMYXllclN0eWxlKCRldmVudDogYW55LCBfbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyID0gX2xheWVyIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zO1xuICAgIGlmICghbGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnMpIHtcbiAgICAgIGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzID0ge307XG4gICAgfVxuICAgIGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzLlNUWUxFUyA9ICRldmVudDtcbiAgfVxuXG4gIGdldEFzV21zVHlwZShfbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIHJldHVybiBfbGF5ZXIgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnM7XG4gIH1cblxuICBsYXllclN0eWxlT3B0aW9ucyhfbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyID0gX2xheWVyIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zO1xuICAgIGNvbnN0IHBvc3NpYmxlU3R5bGVzRm9yVXJsID0gdGhpcy5wb3NzaWJsZVN0eWxlc1tsYXllci51cmxdID8/IHsgbGF5ZXJzOiB7fSB9O1xuICAgIGxldCBwb3NzaWJsZXNTdHlsZXNGb3JMYXllciA9IHBvc3NpYmxlU3R5bGVzRm9yVXJsLmxheWVycyFbbGF5ZXIucGFyYW1MYXllcl07XG4gICAgaWYgKCFwb3NzaWJsZXNTdHlsZXNGb3JMYXllcikge1xuICAgICAgcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIgPSBwb3NzaWJsZVN0eWxlc0ZvclVybC5sYXllcnMhWyhsYXllci5wYXJhbUxheWVyID8/ICc6Jykuc3BsaXQoJzonKVsxXV0gPz8geyBzdHlsZXM6IFtdIH07XG4gICAgfVxuICAgIHJldHVybiBwb3NzaWJsZXNTdHlsZXNGb3JMYXllci5zdHlsZXM7XG4gIH1cblxuICB0cmlnZ2VyTGF5ZXJSZW5kZXIoKSB7XG4gICAgdGhpcy5tYXAucmVuZGVyKCk7XG4gIH1cblxuICBjaGFuZ2VTbGlkZU9wdGlvbigkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuc2xpZGUgPSAkZXZlbnQ7XG4gICAgaWYgKCRldmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5mb3JFYWNoKChsYXllcikgPT4gKGxheWVyLnNsaWRlID0gJ2FsbCcpKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVNZW51KCkge1xuICAgIHRoaXMuYWN0aW9uTWVudU9wZW4kLm5leHQoIXRoaXMuYWN0aW9uTWVudU9wZW4kLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPbFpvb21FbGVtZW50KCkge1xuICAgIHRoaXMub2xab29tRWxlbWVudCQubmV4dChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub2wtem9vbScpKTtcbiAgICBpZiAoIXRoaXMub2xab29tRWxlbWVudCQuZ2V0VmFsdWUoKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmdldE9sWm9vbUVsZW1lbnQoKSwgNTApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB6b29tSW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub2wtem9vbS1pbicpO1xuICAgICAgaWYgKHpvb21Jbikge1xuICAgICAgICB6b29tSW4uc2V0QXR0cmlidXRlKCdkYXRhLXRvb2x0aXAnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnpvb21JbicpKTtcbiAgICAgICAgem9vbUluLnNldEF0dHJpYnV0ZSgnZGF0YS10b29sdGlwLXBvc2l0aW9uJywgJ2xlZnQnKTtcbiAgICAgICAgem9vbUluLmNsYXNzTGlzdC5hZGQoJ2EtdG9vbHRpcCcsICctLW5vcG9zJyk7XG4gICAgICAgIHpvb21Jbi5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCB6b29tT3V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9sLXpvb20tb3V0Jyk7XG4gICAgICBpZiAoem9vbU91dCkge1xuICAgICAgICB6b29tT3V0LnNldEF0dHJpYnV0ZSgnZGF0YS10b29sdGlwJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC56b29tT3V0JykpO1xuICAgICAgICB6b29tT3V0LnNldEF0dHJpYnV0ZSgnZGF0YS10b29sdGlwLXBvc2l0aW9uJywgJ2xlZnQnKTtcbiAgICAgICAgem9vbU91dC5jbGFzc0xpc3QuYWRkKCdhLXRvb2x0aXAnLCAnLS1ub3BvcycpO1xuICAgICAgICB6b29tT3V0LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTZWxlY3Rpb24oYWN0aW9uOiAnY2xpY2snIHwgJ2xhc3NvJyB8ICdyZWN0YW5nbGUnIHwgJ3pvb20nIHwgJ21vdmUnIHwgJ2V4cG9ydCcgfCAndXBsb2FkJykge1xuICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLnNlbGVjdGlvbkludGVyYWN0aW9uLmNoYW5nZVNlbGVjdGlvbihhY3Rpb24pO1xuICAgIHRoaXMudG9nZ2xlTWVudSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckxheWVycyhsYXllcnM6IEJhc2VMYXllcltdKSB7XG4gICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVMYXllcihsYXllcik7XG4gICAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllciAmJiAobGF5ZXIgYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPikuZ2V0U291cmNlKCkpIHtcbiAgICAgICAgKGxheWVyIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZT4pLmdldFNvdXJjZSgpIS5jbGVhcigpO1xuICAgICAgICBsYXllci5zZXRTb3VyY2UodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIFRpbGVMYXllciAmJiAobGF5ZXIgYXMgVGlsZUxheWVyPGFueT4pLmdldFNvdXJjZSgpKSB7XG4gICAgICAgIChsYXllciBhcyBUaWxlTGF5ZXI8YW55PikuZ2V0U291cmNlKCkuY2xlYXIoKTtcbiAgICAgICAgbGF5ZXIuc2V0U291cmNlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBsYXllci5kaXNwb3NlKCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMYXllckdyb3VwKCkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMgPSBbXG4gICAgICAuLi50aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzISxcbiAgICAgIHtcbiAgICAgICAgbmFtZTpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MuZ3JvdXAnKSArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAodGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyEubGVuZ3RoICsgMSksXG4gICAgICAgIHNpbmdsZUxheWVyOiBmYWxzZSxcbiAgICAgICAgdmlzaWJsZUxheWVyczogW11cbiAgICAgIH1cbiAgICBdO1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3Vwc1t0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuYWRkTGF5ZXIoZ3JvdXApO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJHcm91cE5hbWUoZ3JvdXA6IExheWVyR3JvdXAsICRldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBbbmFtZSwgc2luZ2xlTGF5ZXIsIHZpc2libGVMYXllcnNdID0gW2dyb3VwLm5hbWUsIGdyb3VwLnNpbmdsZUxheWVyLCBncm91cC52aXNpYmxlTGF5ZXJzXTtcbiAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyEuZmluZEluZGV4KChnKSA9PiBnLm5hbWUgPT09IGdyb3VwLm5hbWUpO1xuICAgIGNvbnN0IG5ld05hbWUgPSAoJGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG5cbiAgICBpZiAobmFtZSA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCkge1xuICAgICAgY29uc3QgbGF5ZXJzVG9UcmFuc2ZlciA9XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCkubWFwKChsKSA9PiBsLnRpdGxlKSA/PyBbXTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMgPSBbXG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMhLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogbmV3TmFtZSxcbiAgICAgICAgICBzaW5nbGVMYXllcixcbiAgICAgICAgICB2aXNpYmxlTGF5ZXJzOiB2aXNpYmxlTGF5ZXJzIS5maWx0ZXIoKGwpID0+IGxheWVyc1RvVHJhbnNmZXIuaW5jbHVkZXMobCkpXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzID0gdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3Vwcy5tYXAoKGcsIGkpID0+XG4gICAgICAgIGkgPT09IGdyb3VwSW5kZXhcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgbmFtZTogREVGQVVMVF9MQVlFUl9HUk9VUCxcbiAgICAgICAgICAgICAgc2luZ2xlTGF5ZXIsXG4gICAgICAgICAgICAgIHZpc2libGVMYXllcnM6IHZpc2libGVMYXllcnMhLmZpbHRlcigobCkgPT4gIWxheWVyc1RvVHJhbnNmZXIuaW5jbHVkZXMobCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBnXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzID0gdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyEubWFwKChnLCBpKSA9PlxuICAgICAgICBpID09PSBncm91cEluZGV4ID8geyBuYW1lOiBuZXdOYW1lLCBzaW5nbGVMYXllciwgdmlzaWJsZUxheWVycyB9IDogZ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gdXBkYXRlIGdyb3VwcyBvbiBvcHRpb25zIGxheWVyc1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5tYXAoKGxheWVyKSA9PlxuICAgICAgICBsYXllci5ncm91cCA9PT0gbmFtZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5sYXllcixcbiAgICAgICAgICAgICAgZ3JvdXA6IG5ld05hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IGxheWVyXG4gICAgICApO1xuICAgIH1cbiAgICAvLyB1cGRhdGUgZ3JvdXBzIG9uIG9sIGxheWVyc1xuICAgIHRoaXMubWFwTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXIuZ2V0UHJvcGVydGllcygpWydncm91cCddID09PSBuYW1lKSBsYXllci5zZXQoJ2dyb3VwJywgbmV3TmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVMYXllckdyb3VwKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzIS5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5uYW1lICE9PSBuYW1lKTtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5tYXAoKGxheWVyKSA9PlxuICAgICAgbGF5ZXIuZ3JvdXAgPT0gbmFtZSA/IHsgLi4ubGF5ZXIsIGdyb3VwOiBERUZBVUxUX0xBWUVSX0dST1VQIH0gOiBsYXllclxuICAgICk7XG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxNYXBXaWRnZXRMYXllck9wdGlvbnNbXT4sIGdyb3VwOiBMYXllckdyb3VwKTogdm9pZCB7XG4gICAgY29uc3QgbW92ZWRMYXllciA9IGV2ZW50Lml0ZW0uZGF0YSBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnM7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkICE9PSBldmVudC5jb250YWluZXIuaWQpIHtcbiAgICAgIHRoaXMubW92ZUxheWVyQmV0d2Vlbkdyb3VwcyhcbiAgICAgICAgbW92ZWRMYXllcixcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5ZXItZ3JvdXAnKSA/PyBERUZBVUxUX0xBWUVSX0dST1VQXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLm1vdmVMYXllckluT3B0aW9ucyhldmVudC5jdXJyZW50SW5kZXgsIGV2ZW50Lml0ZW0uZGF0YSBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwKTtcbiAgfVxuXG4gIG1vdmVMYXllckJldHdlZW5Hcm91cHMobW92ZWRMYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBuZXdHcm91cDogc3RyaW5nKSB7XG4gICAgLy8gcmVtb3ZlIGl0IGZyb20gb2xkIGdyb3VwXG4gICAgdGhpcy51cGRhdGVMYXllckdyb3VwKFxuICAgICAgbW92ZWRMYXllci5ncm91cCEsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzXG4gICAgICAgID8uZmluZCgoZ3JvdXApID0+IGdyb3VwLm5hbWUgPT09IG1vdmVkTGF5ZXIuZ3JvdXAhKVxuICAgICAgICA/LnZpc2libGVMYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIgIT09IG1vdmVkTGF5ZXIudGl0bGUpXG4gICAgKTtcblxuICAgIC8vIGFkZCBpdCB0byBuZXcgZ3JvdXBcbiAgICBtb3ZlZExheWVyLmdyb3VwID0gbmV3R3JvdXA7XG4gICAgdGhpcy51cGRhdGVMYXllckdyb3VwKG5ld0dyb3VwID8/IERFRkFVTFRfTEFZRVJfR1JPVVAsIHVuZGVmaW5lZCwgbW92ZWRMYXllci50aXRsZSEpO1xuICAgIHRoaXMucmVtb3ZlRW1wdHlMYXllckdyb3VwcygpO1xuICB9XG5cbiAgbW92ZUxheWVySW5PcHRpb25zKHRhcmdldElkeEluR3JvdXA6IG51bWJlciwgbW92ZWRMYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBncm91cDogTGF5ZXJHcm91cCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgY29uc3QgZ3JvdXBMYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSk7XG4gICAgICAvLyBpbmRleGVzIGluIG9wdGlvbnNDb3B5XG4gICAgICBjb25zdCBmcm9tSW5kZXggPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5maW5kSW5kZXgoKGxheWVyKSA9PiBsYXllci50aXRsZSA9PT0gbW92ZWRMYXllci50aXRsZSk7XG4gICAgICBjb25zdCB0b0luZGV4ID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnMuZmluZEluZGV4KChsYXllcikgPT4gbGF5ZXIudGl0bGUgPT09IGdyb3VwTGF5ZXJzW3RhcmdldElkeEluR3JvdXBdLnRpdGxlKTtcblxuICAgICAgbGV0IG5ld09yZGVyID0gdG9JbmRleDtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLnNwbGljZShmcm9tSW5kZXgsIDEpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMuc3BsaWNlKHRvSW5kZXgsIDAsIHsgLi4ubW92ZWRMYXllciwgb3JkZXI6IG5ld09yZGVyIH0pO1xuICAgICAgdGhpcy51cGRhdGVMYXllck9yZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRXhwYW5kQWxsKGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXSA9ICF0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdO1xuICAgIGNvbnN0IGxheWVyc1RvRXhwYW5kID1cbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSkubWFwKChsYXllcikgPT4gbGF5ZXIudGl0bGUpID8/IFtdO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZSkuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcnNUb0V4cGFuZC5pbmNsdWRlcyhsYXllcikpXG4gICAgICAgIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXJdID0gdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUxheWVyRXhwYW5kKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdID0gIXRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXTtcbiAgICBpZiAodGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdKSB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdID0gdHJ1ZTtcbiAgICBpZiAoZ3JvdXAudmlzaWJsZUxheWVycy5ldmVyeSgobGF5ZXJUaXRsZSkgPT4gIXRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXJUaXRsZV0pKSB7XG4gICAgICB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5ZXJPcmRlcigpIHtcbiAgICBsZXQgb3JkZXIgPSAxO1xuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHM/LmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBncm91cExheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSk7XG4gICAgICBpZiAoZ3JvdXBMYXllcnMpIHtcbiAgICAgICAgZ3JvdXBMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5vcmRlciA9IG9yZGVyKyspKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlzR3JvdXBVc2VkQnlXaWRnZXRMYXllcnMoZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LnNvbWUoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSk7XG4gIH1cblxuICByZW1vdmVFbXB0eUxheWVyR3JvdXBzKCkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzIS5maWx0ZXIoXG4gICAgICAoZ3JvdXApID0+XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5zb21lKChsYXllcikgPT4gbGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWUpIHx8IGdyb3VwLm5hbWUgPT09IERFRkFVTFRfTEFZRVJfR1JPVVBcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IERFRkFVTFRfTEFZRVJfR1JPVVAgPSBERUZBVUxUX0xBWUVSX0dST1VQO1xufVxuIiwiPHByeS13aWRnZXQtbWFwLWNzcz48L3ByeS13aWRnZXQtbWFwLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tbWFwXCI+XG4gIEBpZiAoZGlzcGxheUhlYWRlciQgfCBhc3luYykge1xuICAgIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgICAgICNoZWFkZXJcbiAgICAgID5cbiAgICAgIDxwcnktc2V0dGluZ3NcbiAgICAgICAgKHNhdmVUcmlnZ2VyZWQpPVwiZW1pdE1hbmlmZXN0KClcIlxuICAgICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfc3R5bGVcIj57eyAnQHByeS53aWRnZXQubWFwLnN0eWxlJyB8IGkxOG4gfX0gOjwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVN0eWxlKCRldmVudClcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInN0eWxlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5zdHlsZVwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJpZGVudGlmaWVyXCJcbiAgICAgICAgICAgIGlkPVwibWFwX3N0eWxlXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChvcHRpb25zQ29weS5zdHlsZSA9PT0gU1RZTEVfRlJPTV9VUkwpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwic3R5bGVfVVJMXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zdHlsZVVybCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cInN0eWxlX1VSTFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlU3R5bGVVUkwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25zQ29weS5zdHlsZVVSTCA/PyAnJ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdXRvTGF5ZXIoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmF1dG9tYXRpY0xheWVycyA/PyBmYWxzZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuYXV0b0xheWVyJyB8IGkxOG4gfX1cbiAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQXR0cmlidXRpb25zKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hdHRyaWJ1dGlvbnMgPz8gZmFsc2VcIj5cbiAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmF0dHJpYnV0aW9ucycgfCBpMThuIH19XG4gICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNsaWRlT3B0aW9uKCRldmVudClcIiBbbmdNb2RlbF09XCJoYXNTbGlkZUxheWVyJCB8IGFzeW5jXCI+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5nbG9iYWwnIHwgaTE4biB9fVxuICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NcIiBjZGtEcm9wTGlzdEdyb3VwIGNka0RyYWdCb3VuZGFyeT5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLnRpdGxlJyB8IGkxOG4gfX08L2g0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiIChjbGljayk9XCJhZGRMYXllckdyb3VwKClcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5hZGRMYXllckdyb3VwJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIG9wdGlvbnNDb3B5LmxheWVyR3JvdXBzOyB0cmFjayBncm91cDsgbGV0IGdyb3VwSWR4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICBAaWYgKGlzR3JvdXBVc2VkQnlXaWRnZXRMYXllcnMoZ3JvdXApKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGQgby1sYXllci1zZXR0aW5nc19fZ3JvdXAtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbGF5ZXJHcm91cFRpdGxlLXt7IGdyb3VwSWR4IH19XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5sYXllckdyb3VwTmFtZScgfCBpMThuIH19PHNwYW4gY2xhc3M9XCItb2JsaWdhdG9yeS1yZWRcIj4qPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3Mub3B0aW9uYWxDb2xvbicgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGQgdS1kaXNwbGF5LWZsZXggLXJvdyAtZ2FwLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF9sYXllckdyb3VwVGl0bGUte3sgZ3JvdXBJZHggfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVMYXllckdyb3VwTmFtZShncm91cCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ3JvdXAubmFtZSA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCA/ICgnQHByeS53aWRnZXQubWFwLm5vR3JvdXAnIHwgaTE4bikgOiBncm91cC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5uYW1lICE9PSBERUZBVUxUX0xBWUVSX0dST1VQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4tLWljb24tb25seSBhLXRvb2x0aXAgby1sYXllci1zZXR0aW5nc19fZGVsZXRlLWdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5kZWxldGVHcm91cCcgfCBpMThuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVMYXllckdyb3VwKGdyb3VwLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIxNlwiIFt3aWR0aF09XCIxNlwiIGljb25Tdmc9XCJiaW5fbm9ybWFsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLm5hbWUgIT09IERFRkFVTFRfTEFZRVJfR1JPVVApIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cF9faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibXVsdGlzZWxlY3Rpb24te3sgZ3JvdXBJZHggfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ3JvdXAuc2luZ2xlTGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGF5ZXJHcm91cFNpbmdsZUxheWVyKGdyb3VwLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJncm91cC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm11bHRpc2VsZWN0aW9uLXt7IGdyb3VwSWR4IH19XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5tdWx0aXBsZUxheWVyJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLXJhZGlvLWdyb3VwX19pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtb25vc2VsZWN0aW9uLXt7IGdyb3VwSWR4IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdyb3VwLnNpbmdsZUxheWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUxheWVyR3JvdXBTaW5nbGVMYXllcihncm91cCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJncm91cC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1vbm9zZWxlY3Rpb24te3sgZ3JvdXBJZHggfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLnNpbmdsZUxheWVyJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkTGF5ZXIoZ3JvdXApXCIgY2xhc3M9XCJhLWJ0biAtbGluay1saWtlXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICsge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hZGRMYXllcicgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVFeHBhbmRBbGwoZ3JvdXApXCIgY2xhc3M9XCJhLWJ0biAtbGluay1saWtlXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBsYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXVxuICAgICAgICAgICAgICAgICAgICA/ICgnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MuZm9sZEFsbCcgfCBpMThuKVxuICAgICAgICAgICAgICAgICAgICA6ICgnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MudW5mb2xkQWxsJyB8IGkxOG4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19sYXllcnNcIlxuICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgZ3JvdXApXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtbGF5ZXItZ3JvdXBdPVwiZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAZm9yIChsYXllciBvZiBvcHRpb25zQ29weT8ubGF5ZXJzOyB0cmFjayBsYXllcjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmIChsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiby1sYXllci1zZXR0aW5nc19fbGF5ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwibGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJsYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19sYXllci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZGlzYWJsZWRdPVwibGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctaGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25Tdmc9XCJkcmFnX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0bi0taWNvbi1vbmx5IHVuZm9sZC1sYXllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTGF5ZXJFeHBhbmQobGF5ZXIsIGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uU3ZnXT1cImxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV0gPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJhLWg1XCI+e3sgbGF5ZXIudGl0bGUgPz8gKCdAcHJ5LndpZGdldC5tYXAubGF5ZXInIHwgaTE4bjogeyBpbmRleDogaSArIDEgfSkgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiby1sYXllci1zZXR0aW5nc19fZGVsZXRlLWxheWVyIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmRlbGV0ZUxheWVyJyB8IGkxOG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVMYXllcihpLCBsYXllciwgZ3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMTZcIiBbd2lkdGhdPVwiMTZcIiBpY29uU3ZnPVwiYmluX25vcm1hbFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2xheWVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19fY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCIobGF5ZXI/Lm9wYWNpdHkgPz8gMTAwKSArICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlT3BhY2l0eShsYXllciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQubWFwLm9wYWNpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1yYW5nZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllck9wdGlvbnMnIHwgaTE4bjogeyBpbmRleDogaSArIDEgfSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJsYXllcl97eyBpICsgMSB9fV90aXRsZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmxheWVyVGl0bGUnIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibGF5ZXJfe3sgaSArIDEgfX1fdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VUaXRsZSgkZXZlbnQsIGxheWVyLCBncm91cClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFbJ2dlb3NlcnZlcicsICdhdXRvJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xheWVyVHlwZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLnRpdGxlJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxheWVyVHlwZSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImxheWVyVHlwZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0QXNXbXNUeXBlKGxheWVyKTsgYXMgd21zbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sYXllclN0eWxlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmxheWVyU3R5bGUnIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5ZXJTdHlsZSgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImxheWVyU3R5bGVPcHRpb25zKGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3R5bGUobGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xheWVyU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUZpdCgkZXZlbnQsIGxheWVyKVwiIFtuZ01vZGVsXT1cImxheWVyLmZpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5maXQnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmVsYXRpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd210cycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdmZWF0dXJlbGF5ZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3ZlY3RvcnRpbGUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3Jhc3RlcnRpbGUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2F1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9jbGFzc2VzXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbGFzc2VzJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2xhc3NlcygkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJ1c2VkQ2xhc3NlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuY2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2NsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3JlbGF0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXRzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2dlb3NlcnZlcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdmZWF0dXJlbGF5ZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAndmVjdG9ydGlsZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyYXN0ZXJ0aWxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmxvY2F0aW9uQXR0cicgfCBpMThuIH19PC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGdlb21ldHJ5RmllbGRzRm9yOiB7IHJlc3VsdFNldDogcmVzdWx0U2V0JCwgY2xhc3NlczogbGF5ZXIuY2xhc3NlcywgdHlwZTogbGF5ZXIudHlwZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhc3luYzsgYXMgZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWF0bWFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWJibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmtlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9pbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvbHlnb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpLWxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpLXBvbHlnb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLmluZGV4T2YobGF5ZXIudHlwZSkgPj0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbG9jYXRpb25BdHRyaWJ1dGVfYm90aFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmxvY2F0aW9uQXR0cmlidXRlLmJvdGgnIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9jYXRpb25BdHRyaWJ1dGVzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF9sb2NhdGlvbkF0dHJpYnV0ZV9ib3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFsnaGVhdG1hcCcsICdidWJibGUnXS5pbmRleE9mKGxheWVyLnR5cGUpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2ludGVuc2l0eUF0dHJpYnV0ZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmludGVuc2l0eUF0dHJpYnV0ZScgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbnRlbnNpdHlBdHRyaWJ1dGVzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXJIYXNJbnRlbnNpdHkobGF5ZXIpLmludGVuc2l0eUF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfaW50ZW5zaXR5QXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd3bXMnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3dtdHMnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAnZmVhdHVyZWxheWVyJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3ZlY3RvcnRpbGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAncmFzdGVydGlsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3VybFwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLnVybCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfdXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VVcmwoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxheWVyLnR5cGUgPT09ICd3bXMnIHx8IGxheWVyLnR5cGUgPT09ICd3bXRzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3BhcmFtTGF5ZXJcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLndtcy5wYXJhbUxheWVyJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfcGFyYW1MYXllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlUGFyYW1MYXllcigkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5wYXJhbUxheWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxheWVyLnR5cGUgPT09ICd3bXRzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX21hdHJpeFNldFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAud21zLm1hdHJpeFNldCcgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX21hdHJpeFNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlTWF0cml4U2V0KCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLm1hdHJpeFNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsYXllci50eXBlID09PSAnd210cycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3dtc19zdHlsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLnN0eWxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX3dtc19zdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlUGFyYW1TdHlsZSgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5zdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsYXllci50eXBlID09PSAnd21zJyB8fCBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAudGlsZScgfCBpMThuIH19PC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVBhcmFtVGlsZWQoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllcj8ucGFyYW1UaWxlZCA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMucGFyYW1UaWxlZCcgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsYXllci50eXBlID09PSAnbWFya2VyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmNsdXN0ZXJpbmcnIHwgaTE4biB9fTwvbGVnZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDbHVzdGVyZWQobGF5ZXIsICRldmVudClcIiBbbmdNb2RlbF09XCJsYXllci5jbHVzdGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuY2x1c3RlcmVkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobGF5ZXIuY2x1c3RlcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuY2x1c3RlcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2x1c3RlckRpc3RhbmNlKGxheWVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5tYXAuY2x1c3RlckRpc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAob3B0aW9uc0NvcHkuc2xpZGUgPz8gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInNsaWRlX3NlbGVjdFwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGUudGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2xpZGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzbGlkZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLnNsaWRlID8/ICdhbGwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2xpZGVfc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYXR0cmlidXRpb25cIj57eyAnQHByeS53aWRnZXQubWFwLmF0dHJpYnV0aW9uJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF0dHJpYnV0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VBdHRyaWJ1dGlvbigkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLmF0dHJpYnV0aW9uID8gbGF5ZXIuYXR0cmlidXRpb24gOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvcHJ5LXNldHRpbmdzPlxuICAgIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG4gIH1cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtLWJ0bi1ncm91cCAtbWFwLXNlbGVjdGlvbi1jaG9pY2UgLXZlcnRpY2FsXCJcbiAgICBbY2xhc3MuLXdpdGgtaGVhZGVyXT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFtjbGFzcy4tY2xvc2VkXT1cIiEoYWN0aW9uTWVudU9wZW4kIHwgYXN5bmMpXCJcbiAgICA+XG4gICAgPGRpdiBjbGFzcz1cIi12ZXJ0aWNhbFwiPlxuICAgICAgQGZvciAoYWN0aW9uIG9mIGJhc2ljQWN0aW9ucyQgfCBhc3luYzsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwIGEtdG9vbHRpcC0te3sgYWN0aW9uIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2VsZWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLicgKyBhY3Rpb24gfCBpMThuXCJcbiAgICAgICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBbaWNvblN2Z109XCJhY3Rpb25cIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLicgKyBhY3Rpb24gfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5IGEtdG9vbHRpcCAtbWFwLXRvZ2dsZVwiXG4gICAgICBpZD1cIm9wZW5fbWVudVwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImFjdGlvbk1lbnVPcGVuJCB8IGFzeW5jXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJleHBvcnRfdHlwZVwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgpXCJcbiAgICAgID5cbiAgICAgIDxwcnktaWNvblxuICAgICAgICBbaWNvblN2Z109XCIoYWN0aW9uTWVudU9wZW4kIHwgYXN5bmMpID8gJ2NoZXZyb25fdG9wJyA6ICdjaGV2cm9uX2JvdHRvbSdcIlxuICAgICAgICBbd2lkdGhdPVwiMTJcIlxuICAgICAgICBbaGVpZ2h0XT1cIjI0XCJcbiAgICAgID48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAub3BlbicgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXAgLW1hcC1zZWxlY3Rpb24tY2hvaWNlIC1tYXAtZXhwb3J0XCIgW2NsYXNzLi13aXRoLWhlYWRlcl09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwXCJcbiAgICAgIGlkPVwiZXhwb3J0X2NhcmRcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJleHBvcnRfdHlwZVwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiXG4gICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5leHBvcnQnIHwgaTE4blwiXG4gICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJyaWdodFwiXG4gICAgICAoY2xpY2spPVwiZXhwb3J0KClcIlxuICAgICAgPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJmaWxlX2Rvd25sb2FkXCI+PC9wcnktaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmV4cG9ydCcgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICBAaWYgKChsYXllcnMkIHwgYXN5bmMpPy5sZW5ndGgpIHtcbiAgICA8ZGl2IGNsYXNzPVwib2wtY29udHJvbCBtLW1hcC1hY3Rpb24gbS1tYXAtYWN0aW9uLS1sYXllcnNcIiBbc3R5bGUudG9wLnB4XT1cImxheWVyc1RvcCQgfCBhc3luY1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cIm0tbWFwLWFjdGlvbl9fYnV0dG9uXCJcbiAgICAgICAgW2NsYXNzLmEtdG9vbHRpcF09XCIhdGhpcy5sYXllcnNUYWJPcGVuXCJcbiAgICAgICAgW2NsYXNzLi10b29sdGlwLW5vLXdyYXBdPVwiIXRoaXMubGF5ZXJzVGFiT3BlblwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVMYXllcnNXaW5kb3coKVwiXG4gICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLnNlbGVjdExheWVycycgfCBpMThuXCJcbiAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgID5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJsYXllcnNcIiBbd2lkdGhdPVwiMThcIiBbaGVpZ2h0XT1cIjE4XCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW4gLW1heC13aWR0aC0yMjBcIiBbY2xhc3MuLWhpZGRlbl09XCIhbGF5ZXJzVGFiT3BlblwiIFtzdHlsZS50b3AucHhdPVwibGF5ZXJzVG9wJCB8IGFzeW5jXCI+XG4gICAgICA8aDQgY2xhc3M9XCJhLWg0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLnNlbGVjdExheWVycycgfCBpMThuIH19PC9oND5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX2NvbnRlbnRcIiBbc3R5bGUubWF4LWhlaWdodC5weF09XCJsYXllcnNIZWlnaHQkIHwgYXN5bmNcIj5cbiAgICAgICAgQGZvciAoZ3JvdXAgb2YgKG9wdGlvbnMkIHwgYXN5bmMpPy5sYXllckdyb3VwcyA/PyBbXTsgdHJhY2sgZ3JvdXA7IGxldCBncm91cElkeCA9ICRpbmRleCkge1xuICAgICAgICAgIEBpZiAoaXNHcm91cFVzZWRCeVdpZGdldExheWVycyhncm91cCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX3RpdGxlIG0tbWFwLXBvcC1pbl9fZ3JvdXAtdGl0bGVcIj5cbiAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiYS1oNVwiPlxuICAgICAgICAgICAgICAgIHt7IGdyb3VwLm5hbWUgPT09IERFRkFVTFRfTEFZRVJfR1JPVVAgPyAoJ0Bwcnkud2lkZ2V0Lm1hcC5ub0dyb3VwJyB8IGkxOG4pIDogZ3JvdXAubmFtZSB9fVxuICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGdyb3VwLnNpbmdsZUxheWVyKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX3JhZGlvc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX3RpdGxlXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxheWVyc1RhYk9wZW5cIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJpZCArICctJyArIGdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cInt7IGlkIH19LXJhZGlvLWxheWVyLWdyb3VwLXt7IGdyb3VwSWR4IH19XCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ3JvdXAudmlzaWJsZUxheWVycy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVmlzaWJpbGl0eShncm91cClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInt7IGlkIH19LXJhZGlvLWxheWVyLWdyb3VwLXt7IGdyb3VwSWR4IH19XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLm5vTGF5ZXInIHwgaTE4blxuICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBmb3IgKGxheWVyIG9mIG9wdGlvbnNDb3B5LmxheWVyczsgdHJhY2sgbGF5ZXI7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgQGlmIChsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtcG9wLWluX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaWQgKyAnLScgKyBncm91cC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX0tcmFkaW8te3sgZ3JvdXAubmFtZSB9fS1sYXllci17eyBpbmRleCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJncm91cC52aXNpYmxlTGF5ZXJzWzBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVZpc2liaWxpdHkoZ3JvdXAsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ7eyBpZCB9fS1yYWRpby17eyBncm91cC5uYW1lIH19LWxheWVyLXt7IGluZGV4IH19XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnRpdGxlID8/ICgnQHByeS53aWRnZXQubWFwLm1pc3NpbmdUaXRsZScgfCBpMThuKVxuICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAZm9yIChsYXllciBvZiBvcHRpb25zQ29weS5sYXllcnM7IHRyYWNrIGxheWVyOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGxheWVyLmdyb3VwID09PSBncm91cC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtcG9wLWluX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpc0xheWVyVmlzaWJsZShsYXllciwgZ3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVZpc2liaWxpdHkoZ3JvdXAsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjaGVja2JveC1sYXllci17eyBpbmRleCB9fVwiXG4gICAgICAgICAgICAgICAgICAgID48L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoZWNrYm94LWxheWVyLXt7IGluZGV4IH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbGF5ZXIudGl0bGUgPz8gKCdAcHJ5LndpZGdldC5tYXAubWlzc2luZ1RpdGxlJyB8IGkxOG4pIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoKGxlZ2VuZExheWVycyQgfCBhc3luYyk/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJvbC1jb250cm9sIG0tbWFwLWFjdGlvbiBtLW1hcC1hY3Rpb24tLWxlZ2VuZFwiIFtzdHlsZS50b3AucHhdPVwibGVnZW5kVG9wJCB8IGFzeW5jXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtjbGFzcy5hLXRvb2x0aXBdPVwiIXRoaXMubGVnZW5kVGFiT3BlblwiXG4gICAgICAgIFtjbGFzcy4tdG9vbHRpcC1uby13cmFwXT1cIiF0aGlzLmxlZ2VuZFRhYk9wZW5cIlxuICAgICAgICBjbGFzcz1cIm0tbWFwLWFjdGlvbl9fYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUxlZ2VuZFdpbmRvdygpXCJcbiAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGVnZW5kcycgfCBpMThuXCJcbiAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgID5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJsZWdlbmRcIiBbd2lkdGhdPVwiMThcIiBbaGVpZ2h0XT1cIjE1XCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5cIiBbY2xhc3MuLWhpZGRlbl09XCIhbGVnZW5kVGFiT3BlblwiIFtzdHlsZS50b3AucHhdPVwibGVnZW5kVG9wJCB8IGFzeW5jXCI+XG4gICAgICA8aDQgY2xhc3M9XCJhLWg0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmRzVGl0bGUnIHwgaTE4biB9fTwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtcG9wLWluX19jb250ZW50XCIgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwibGF5ZXJzSGVpZ2h0JCB8IGFzeW5jXCI+XG4gICAgICAgIEBmb3IgKGdlb0xheWVyIG9mIGxlZ2VuZExheWVycyQgfCBhc3luYzsgdHJhY2sgZ2VvTGF5ZXI7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgIEBpZiAoaXNMYXllclZpc2libGUoZ2VvTGF5ZXIpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtcG9wLWluX190aXRsZVwiIChjbGljayk9XCJ0b2dnbGVMZWdlbmQoaW5kZXgpXCI+XG4gICAgICAgICAgICAgIEBpZiAoaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKSAmJiAhIWdlb0xheWVyLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tbWFwLXBvcC1pbl9fZHJvcGRvd24taWNvblwiXG4gICAgICAgICAgICAgICAgICBbaWNvblN2Z109XCJsZWdlbmRUYWJDbG9zZWRbaW5kZXhdID8gJ2NoZXZyb25fYm90dG9tJyA6ICdjaGV2cm9uX3RvcCdcIlxuICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTJcIlxuICAgICAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxoNSBjbGFzcz1cImEtaDVcIj57eyBnZW9MYXllci50aXRsZSB9fTwvaDU+XG4gICAgICAgICAgICAgIEBpZiAoIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcikpIHtcbiAgICAgICAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLmxheWVyTG9hZEVycm9yJyB8IGkxOG5cIlxuICAgICAgICAgICAgICAgICAgW2ljb25TdmddPVwiJ2Nsb3NlJ1wiXG4gICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMjJcIlxuICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIyMlwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm0tbWFwLXBvcC1pbl9faW1hZ2VcIlxuICAgICAgICAgICAgW2NsYXNzLi1oaWRkZW5dPVwiIWxlZ2VuZFRhYk9wZW4gfHwgbGVnZW5kVGFiQ2xvc2VkW2luZGV4XSB8fCAhaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKVwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJsZWdlbmRIZWlnaHQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChnZW9MYXllciB8IGxlZ2VuZFVybDogeyBjYXBhYmlsaXRpZXM6ICh3bXNDYXBhYmlsaXRpZXMkIHwgYXN5bmMpIH07IGFzIHVybCkge1xuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgW3NyY109XCJ1cmwgfCBnZXRTZWN1cmVkSW1hZ2UgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgW2FsdF09XCInQHByeS53aWRnZXQubWFwLmxlZ2VuZCcgfCBpMThuOiB7IGxheWVyOiBnZW9MYXllci50aXRsZSB9XCJcbiAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VOb3RQcm92aWRlZFtpbmRleF0gPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghKGdlb0xheWVyIHwgbGVnZW5kVXJsOiB7IGNhcGFiaWxpdGllczogKHdtc0NhcGFiaWxpdGllcyQgfCBhc3luYykgfSkpIHtcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX2Vycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmROb3RQcm92aWRlZCcgfCBpMThuIH19PC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBpZiAobGVmdFNsaWRlTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kIC1sZWZ0XCIgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kX190aXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGVUaXRsZScgfCBpMThuIH19Ojwvc3Bhbj5cbiAgICAgIEBmb3IgKGxheWVyIG9mIGxlZnRTbGlkZUxheWVyczsgdHJhY2sgbGF5ZXIpIHtcbiAgICAgICAgPGRpdj57eyBsYXllci5nZXQoJ3RpdGxlJykgfX08L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBpZiAocmlnaHRTbGlkZUxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgPGRpdiBjbGFzcz1cIm0tbWFwLXNsaWRlLWxlZ2VuZCAtcmlnaHRcIiBbc3R5bGUudG9wLnB4XT1cImxlZ2VuZFRvcCQgfCBhc3luY1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtLW1hcC1zbGlkZS1sZWdlbmRfX3RpdGxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZVRpdGxlJyB8IGkxOG4gfX06PC9zcGFuPlxuICAgICAgQGZvciAobGF5ZXIgb2YgcmlnaHRTbGlkZUxheWVyczsgdHJhY2sgbGF5ZXIpIHtcbiAgICAgICAgPGRpdj57eyBsYXllci5nZXQoJ3RpdGxlJykgfX08L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHQkIHwgYXN5bmNcIiBjbGFzcz1cIm8tbWFwLXdyYXBwZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1tYXBcIj5cbiAgICAgIDxkaXYgI21hcFJlZiBpZD1cIm1hcFwiPjwvZGl2PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgIG1pbj1cIjBcIlxuICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICBzdGVwPVwiMC4wMVwiXG4gICAgICAgIHZhbHVlPVwiNTBcIlxuICAgICAgICAjc2xpZGVyRWxlbWVudFxuICAgICAgICBjbGFzcz1cIm8tbWFwLXNsaWRlclwiXG4gICAgICAgIFtjbGFzcy4taGlkZGVuXT1cIiEoaGFzU2xpZGVMYXllciQgfCBhc3luYylcIlxuICAgICAgICAoaW5wdXQpPVwidHJpZ2dlckxheWVyUmVuZGVyKClcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICNwb3B1cCBjbGFzcz1cIm0tdG9vbHRpcCBtLXRvb2x0aXAtLXBvcHVwXCIgW2hpZGRlbl09XCJ0cnVlXCIgcm9sZT1cInRvb2x0aXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibS10b29sdGlwLS1wb3B1cF9faGVhZGVyXCI+XG4gICAgICA8cD57eyAoKHRvb2x0aXBNYW5hZ2VyLnRvb2x0aXBEaXNwbGF5ZWRJbmRleCQgfCBhc3luYykgPz8gMCkgKyAxIH19IC8ge3sgdG9vbHRpcE1hbmFnZXIudG9vbHRpcE51bWJlciB9fTwvcD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvb2x0aXBNYW5hZ2VyLnRvb2x0aXBNb3ZlKC0xKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhdG9vbHRpcE1hbmFnZXIudG9vbHRpcENhbk1vdmUoLTEpXCJcbiAgICAgICAgPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFycm93X2JhY2tcIj48L3ByeS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgYS1idG4tLWljb24tb25seVwiXG4gICAgICAgIChjbGljayk9XCJ0b29sdGlwTWFuYWdlci50b29sdGlwTW92ZSgxKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhdG9vbHRpcE1hbmFnZXIudG9vbHRpcENhbk1vdmUoMSlcIlxuICAgICAgICA+XG4gICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3dfcmlnaHRcIj48L3ByeS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJ0b29sdGlwTWFuYWdlci5jbGVhclRvb2x0aXAodHJ1ZSlcIj5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS10b29sdGlwLS1wb3B1cF9fY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICNwb3B1cENvbnRlbnQ+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
1216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1tYXAvY29tcG9uZW50L3dpZGdldC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBTUwsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsbUJBQW1CLEVBRW5CLGNBQWMsRUFFZCxXQUFXLEVBQ1gsbUJBQW1CLEVBRW5CLFNBQVMsRUFjVCxlQUFlLEVBQ2YsU0FBUyxFQUNULGlCQUFpQixFQUlqQixjQUFjLEVBR2QsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixlQUFlLEVBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEQsT0FBTyxFQUFrQixJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUs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LEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFZLENBQUMsTUFBTSxDQUNqRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUM3RyxDQUFDO0lBQ0osQ0FBQzs4R0E3b0RVLGtCQUFrQixtUUEyR1AsaUJBQWlCO2tHQTNHNUIsa0JBQWtCLG1UQU1NLGdCQUFnQixtSEFDVixXQUFXLHFKQ2hJdEQsaTRvQ0FrdEJBOzsyRkR6bEJhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDRSxnQkFBZ0I7OzBCQThHdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7eUNBdkdsQixNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNxQyxZQUFZO3NCQUFsRSxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRyxrQkFBa0I7c0JBQXpFLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUMxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBBdHRyaWJ1dGUsXG4gIEJhc2VXaWRnZXRNYXBMYXllck9wdGlvbnMsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFzZXQsXG4gIERhdGFTb3VyY2VTZWxlY3RvcnMsXG4gIERhdGFzb3VyY2VVdGlscyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWx0ZXJDb250ZXh0LFxuICBHZW9NZXRhZGF0YSxcbiAgR2VvbWV0cmljRmllbGRUeXBlcyxcbiAgR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UsXG4gIEl0ZW1VdGlscyxcbiAgTGF5ZXJHcm91cCxcbiAgTWFwQXV0b0xheWVyT3B0aW9ucyxcbiAgTWFwRmVhdHVyZUxheWVyT3B0aW9ucyxcbiAgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRPcHRpb25zLFxuICBNYXBXTVNMYXllckxheWVyT3B0aW9ucyxcbiAgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zLFxuICBOYW1lZFF1ZXJ5VHlwZXMsXG4gIE9wZXJhdGlvbixcbiAgUFJZX0dFT0FVVEhfVE9LRU4sXG4gIFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgUHJ5R2VvQXV0aFNlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBSZXN1bHRzZXRVdGlscyxcbiAgU3ltYm9sU2VydmljZSxcbiAgVG9vbHRpcEZhY3RvcnlTZXJ2aWNlLFxuICBUb29sdGlwTW9kZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQsXG4gIHdpZGdldE1hcENvbmZpZ1xufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgRmVhdHVyZSwgTWFwLCBWaWV3IH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuaW1wb3J0IHsgYm91bmRpbmdFeHRlbnQsIGNyZWF0ZUVtcHR5IH0gZnJvbSAnb2wvZXh0ZW50JztcbmltcG9ydCB7IENpcmNsZSwgR2VvbWV0cnksIFBvaW50IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBIZWF0bWFwLCBMYXllciwgVGlsZSB9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvQmFzZSc7XG5pbXBvcnQgVmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCB7IGZyb21Mb25MYXQgfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSAnb2wvcHJvai9wcm9qNCc7XG5pbXBvcnQgeyBEYXRhVGlsZSwgSW1hZ2VXTVMsIFRpbGVXTVMgfSBmcm9tICdvbC9zb3VyY2UnO1xuaW1wb3J0IFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCB7IFN0eWxlIH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHdpdGhMYXRlc3RGcm9tXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tbWFuYWdlci5jbGFzcyc7XG5pbXBvcnQgeyBDcWxVdGlscyB9IGZyb20gJy4uL3V0aWxzL2NxbC11dGlscy5jbGFzcyc7XG5pbXBvcnQgeyBYTUxVdGlscyB9IGZyb20gJy4uL3V0aWxzL3htbC11dGlscy5jbGFzcyc7XG5pbXBvcnQgeyBXaWRnZXRNYXBMYXllclNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC1tYXAtbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgTWFwYm94VmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvTWFwYm94VmVjdG9yJztcbmltcG9ydCB7IFdpZGdldE1hcFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvd2lkZ2V0LW1hcC51dGlscyc7XG5pbXBvcnQgeyBMYXllclNsaWRlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2xheWVyLXNsaWRlci5jbGFzcyc7XG5pbXBvcnQgVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1RpbGUnO1xuaW1wb3J0IFdlYkdMVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1dlYkdMVGlsZSc7XG5pbXBvcnQgeyBBdHRyaWJ1dGlvbiwgZGVmYXVsdHMgfSBmcm9tICdvbC9jb250cm9sJztcbmltcG9ydCBWZWN0b3JUaWxlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgVG9vbHRpcE1hbmFnZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi90b29sdGlwLW1hbmFnZXIuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgVE9PTFRJUF9QQURESU5HID0gMTU7XG5leHBvcnQgY29uc3QgTk9OX01BTkRBVE9SWV9GSVRfTEFZRVJfVFlQRVMgPSBbJ3dtcycsICdnZW9zZXJ2ZXInXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0dST1VQID0gJ0RFRkFVTFQnO1xuXG4vLyBEZWZpbmUgTGFtYmVydCBQcm9qZWN0aW9uXG5wcm9qNC5kZWZzKFxuICAnRVBTRzoyMTU0JyxcbiAgJytwcm9qPWxjYyArbGF0XzA9NDYuNSArbG9uXzA9MyArbGF0XzE9NDkgK2xhdF8yPTQ0ICt4XzA9NzAwMDAwICt5XzA9NjYwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmcyArdHlwZT1jcnMnXG4pO1xucmVnaXN0ZXIocHJvajQpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LW1hcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRNYXBDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgc3RhdGljIGlkQ291bnRlciA9IDA7XG4gIGlkID0gYCR7V2lkZ2V0TWFwQ29tcG9uZW50LmlkQ291bnRlcisrfWA7XG4gIG1hcFVybCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgQFZpZXdDaGlsZCgnbWFwUmVmJykgbWFwUmVmITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9wdXAnKSBwb3B1cCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcHVwQ29udGVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwb3B1cENvbnRlbnQhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBAVmlld0NoaWxkKCdleHBvcnRUeXBlVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGV4cG9ydFR5cGVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NsaWRlckVsZW1lbnQnKSBzbGlkZXJFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8TWFwV2lkZ2V0T3B0aW9ucz47XG4gIGxheWVyVHlwZXMgPSB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5pbXBsZW1lbnRhdGlvbkxpc3RcbiAgICAuZmlsdGVyKCh0eXBlKSA9PiB0eXBlICE9PSAnYXV0bycpXG4gICAgLnNvcnQoKGEsIGIpID0+XG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJyArIGEpXG4gICAgICAgIC5sb2NhbGVDb21wYXJlKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLicgKyBiKSlcbiAgICApO1xuICBvcHRpb25zQ29weTogTWFwV2lkZ2V0T3B0aW9ucyA9IHt9IGFzIE1hcFdpZGdldE9wdGlvbnM7XG4gIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICBzZWxlY3RlZElkcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBib3R0b21MZWZ0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBsYXllcnMkITogT2JzZXJ2YWJsZTxCYXNlTGF5ZXJbXT47XG4gIG1hcCE6IE1hcDtcbiAgYWRkaXRpb25hbExheWVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZlY3RvckxheWVyPFZlY3RvclNvdXJjZTxHZW9tZXRyeT4+W10+KFtdKTtcbiAgc3R5bGVzJDogT2JzZXJ2YWJsZTxcbiAgICB7XG4gICAgICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgICBsYWJlbDogc3RyaW5nO1xuICAgIH1bXVxuICA+O1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBpID0gMDtcbiAgaXRlbVN0eWxlcyQhOiBPYnNlcnZhYmxlPHtcbiAgICBbaWQ6IHN0cmluZ106IHtcbiAgICAgIGNsYXNzaWM6IFN0eWxlO1xuICAgICAgYm9yZGVyZWQ6IFN0eWxlO1xuICAgIH07XG4gIH0+O1xuICBoZWlnaHQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGFjdGlvbnMkID0gd2lkZ2V0TWFwQ29uZmlnLmFjdGlvbnMkO1xuICBnZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyQ6IE9ic2VydmFibGU8TWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zW10+O1xuICBsZWdlbmRUYWJPcGVuID0gZmFsc2U7XG4gIGxheWVyc1RhYk9wZW4gPSBmYWxzZTtcbiAgbGVnZW5kVGFiQ2xvc2VkOiBib29sZWFuW10gPSBbXTtcbiAgbGVnZW5kTGF5ZXJzJCE6IE9ic2VydmFibGU8KE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zKVtdPjtcbiAgbGVnZW5kVG9wJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBsYXllcnNUb3AkITogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBsZWdlbmRIZWlnaHQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGxheWVyc0hlaWdodCQhOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGltYWdlTm90UHJvdmlkZWQ6IGJvb2xlYW5bXSA9IFtdO1xuICBiYXNpY0FjdGlvbnMkOiBPYnNlcnZhYmxlPCgnY2xpY2snIHwgJ2xhc3NvJyB8ICdyZWN0YW5nbGUnIHwgJ3pvb20nIHwgJ21vdmUnIHwgJ2V4cG9ydCcgfCAndXBsb2FkJylbXT47XG4gIHpvb21BbmRDZW50ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgem9vbT86IHtcbiAgICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgICBtaW46IG51bWJlcjtcbiAgICAgIG1heDogbnVtYmVyO1xuICAgIH07XG4gICAgY2VudGVyPzogbnVtYmVyW107XG4gIH0+KHt9KTtcbiAgbWFwU3R5bGVVcmwkITogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgaW50ZXJhY3Rpb25NYW5hZ2VyOiBJbnRlcmFjdGlvbk1hbmFnZXIgPSBuZXcgSW50ZXJhY3Rpb25NYW5hZ2VyKCk7XG4gIHRvb2x0aXBNYW5hZ2VyOiBUb29sdGlwTWFuYWdlciA9IG5ldyBUb29sdGlwTWFuYWdlcigpO1xuICBtYXBTdHlsZUxheWVyJCE6IE9ic2VydmFibGU8KFZlY3RvclRpbGVMYXllciB8IFRpbGVMYXllcjxhbnk+KVtdPjtcbiAgU1RZTEVfRlJPTV9VUkwgPSAnX3VybCc7XG4gIE5PX1NUWUxFID0gJ25vbmUnO1xuICB3bXNDYXBhYmlsaXRpZXMkOiBPYnNlcnZhYmxlPFxuICAgIHwge1xuICAgICAgICBbcDogc3RyaW5nXTogR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UgfCBudWxsO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkXG4gID47XG4gIGF1dG9EYXRhc2V0TGF5ZXJzJDogT2JzZXJ2YWJsZTxNYXBBdXRvTGF5ZXJPcHRpb25zW10+O1xuICBmaXRFeHRlbnRzJCE6IE9ic2VydmFibGU8XG4gICAge1xuICAgICAgZGF0YXNvdXJjZTogc3RyaW5nO1xuICAgICAgZXh0ZW50OiBDb29yZGluYXRlW107XG4gICAgICBlcnJvcjogYm9vbGVhbjtcbiAgICB9W11cbiAgPjtcbiAgZGF0YXNvdXJjZUZpbHRlcnMkOiBPYnNlcnZhYmxlPGFueT47XG4gIHVzZWRDbGFzc2VzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICBsYXllclNsaWRlciA9IG5ldyBMYXllclNsaWRlcigpO1xuICBoYXNTbGlkZUxheWVyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc2xpZGVzOiB7IGlkOiB1bmRlZmluZWQgfCBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdO1xuICBwb3NzaWJsZVN0eWxlczoge1xuICAgIFtwOiBzdHJpbmddOiB7XG4gICAgICBsYXllcnM6IHsgW3A6IHN0cmluZ106IHsgcGFyYW06IHN0cmluZzsgc3R5bGVzOiB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdIH0gfSB8IG51bGw7XG4gICAgICB1cmw6IHN0cmluZztcbiAgICB9O1xuICB9ID0ge307XG4gIGF0dHJpYnV0aW9ucyA9IG5ldyBBdHRyaWJ1dGlvbigpO1xuICBhY3Rpb25NZW51T3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgYXR0cmlidXRpb25zJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgb2xab29tRWxlbWVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIHByZXZpb3VzTGF5ZXJzOiBCYXNlTGF5ZXJbXSA9IFtdO1xuICBsYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogUHJ5STE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b29sdGlwRmFjdG9yeVNlcnZpY2U6IFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSB3aWRnZXRNYXBMYXllclNlcnZpY2U6IFdpZGdldE1hcExheWVyU2VydmljZSxcbiAgICBwcml2YXRlIHByeUFnZ3JlZ2F0aW9uU2VydmljZTogUHJ5QWdncmVnYXRpb25TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUFJZX0dFT0FVVEhfVE9LRU4pIHByaXZhdGUgZ2VvQXV0aFNlcnZpY2U6IFByeUdlb0F1dGhTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG5cbiAgICB0aGlzLmdldE9sWm9vbUVsZW1lbnQoKTtcblxuICAgIHRoaXMuc2xpZGVzID0gW1xuICAgICAgeyBpZDogJ2FsbCcsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnNsaWRlLmFsbCcpIH0sXG4gICAgICB7IGlkOiAnbGVmdCcsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnNsaWRlLmxlZnQnKSB9LFxuICAgICAgeyBpZDogJ3JpZ2h0JywgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuc2xpZGUucmlnaHQnKSB9XG4gICAgXTtcblxuICAgIHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLndpdGhHZW9BdXRoKHRoaXMuZ2VvQXV0aFNlcnZpY2UpO1xuXG4gICAgdGhpcy5iYXNpY0FjdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFjdGlvbnMkLFxuICAgICAgdGhpcy5hY3Rpb25NZW51T3BlbiQsXG4gICAgICB0aGlzLmludGVyYWN0aW9uTWFuYWdlci5zZWxlY3Rpb25JbnRlcmFjdGlvbi5zZWxlY3Rpb25UeXBlJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFthY3Rpb25zLCBtZW51T3Blbiwgc2VsZWN0aW9uVHlwZV0pID0+XG4gICAgICAgIG1lbnVPcGVuXG4gICAgICAgICAgPyBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24gIT09ICdleHBvcnQnICYmIGFjdGlvbiAhPT0gJ3VwbG9hZCcpXG4gICAgICAgICAgOiBhY3Rpb25zXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSAnZXhwb3J0JyAmJiBhY3Rpb24gIT09ICd1cGxvYWQnKVxuICAgICAgICAgICAgICAuZmlsdGVyKChhY3Rpb24pID0+IHNlbGVjdGlvblR5cGUgPT09IGFjdGlvbilcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NlcylcbiAgICAgIC5waXBlKG1hcCgoY2xhc3NlcykgPT4gY2xhc3Nlcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKSkpO1xuICAgIHRoaXMudXNlZENsYXNzZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5jbGFzc2VzJCwgdGhpcy51c2VkRGF0YXNvdXJjZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW2NsYXNzZXMsIGRhdGFzb3VyY2VzXSkgPT4ge1xuICAgICAgICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoKGNsYXNzSXRlbSkgPT5cbiAgICAgICAgICBkYXRhc291cmNlcy5zb21lKChkYXRhU291cmNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgJ3R5cGUnIGluIGRhdGFTb3VyY2UucmVxdWVzdCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NVUxUSV9DTEFTUyB8fFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuRlVMTF9URVhUXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAnZGF0YXNldCdcbiAgICAgICAgICAgICAgPyBkYXRhU291cmNlLm9DbGFzcyA9PT0gY2xhc3NJdGVtLmlkXG4gICAgICAgICAgICAgIDogZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgJ29DbGFzcycgaW4gZGF0YVNvdXJjZS5yZXF1ZXN0XG4gICAgICAgICAgICAgICAgPyBkYXRhU291cmNlLnJlcXVlc3Qub0NsYXNzID09PSBjbGFzc0l0ZW0uaWRcbiAgICAgICAgICAgICAgICA6IGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmICd0eXBlJyBpbiBkYXRhU291cmNlLnJlcXVlc3RcbiAgICAgICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NT05PX0NMQVNTXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5maWVsZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKTtcblxuICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGF0YXNvdXJjZUZpbHRlcnMpLFxuICAgICAgdGhpcy5kYXRhc291cmNlSWRzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbZmlsdGVycywgaWRzXSkgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWx0ZXJzKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsdGVyRHNLZXkpID0+IGlkcy5pbmNsdWRlcyhmaWx0ZXJEc0tleSkpXG4gICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiAoeyAuLi5wLCBbY106IGZpbHRlcnNbY10gfSksIHt9KSBhcyB7XG4gICAgICAgICAgICBbcDogc3RyaW5nXTogRmlsdGVyQ29udGV4dFtdO1xuICAgICAgICAgIH1cbiAgICAgICksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgKTtcblxuICAgIHRoaXMuc3R5bGVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5tYXBTdHlsZXMpLnBpcGUoXG4gICAgICBtYXAoKHN0eWxlcykgPT5cbiAgICAgICAgc3R5bGVzLmNvbmNhdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLk5PX1NUWUxFLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubm9TdHlsZScpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLlNUWUxFX0ZST01fVVJMLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuc3R5bGVGcm9tVXJsJylcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcyk7XG5cbiAgICB0aGlzLmdlb1NlcnZlckxheWVyRGVzY3JpcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2VkRGF0YXNvdXJjZXMkLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbXSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICAgICksXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuZ2VvU2VydmVyVXJsKS5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQpKVxuICAgIF0pLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIG1hcCgoW2RhdGFTb3VyY2VzLCBnZW9TZXJ2ZXJVcmxdKSA9PiB7XG4gICAgICAgIGlmICghZ2VvU2VydmVyVXJsKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiBkYXRhU291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoKGRzKSA9PiBEYXRhc291cmNlVXRpbHMuaXNHZW8oZHMpKVxuICAgICAgICAgIC5tYXAoKGRzKSA9PiB7XG4gICAgICAgICAgICBkcyA9IGRzIGFzIHVua25vd24gYXMgRGF0YXNldDtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhczoge1xuICAgICAgICAgICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgICAgICAgICB9ID0ge307XG4gICAgICAgICAgICBkcy5tZXRhZGF0YT8uZm9yRWFjaCgobSkgPT4gKG1ldGFkYXRhc1ttLm1ldGFkYXRhRGVmLm5hbWVdID0gbS52YWx1ZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2dlb3NlcnZlcicsXG4gICAgICAgICAgICAgIHVybDogYCR7Z2VvU2VydmVyVXJsfS8ke1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdLmxlbmd0aCA+IDAgPyBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXSArICcvJyA6ICcnXG4gICAgICAgICAgICAgIH13bXM/U0VSVklDRT1XTVMmVkVSU0lPTj0xLjMuMGAsXG4gICAgICAgICAgICAgIHBhcmFtVGlsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IHBhcnNlSW50KG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5PUEFDSVRZXSA/PyAxMDAsIDEwKSxcbiAgICAgICAgICAgICAgb0NsYXNzOiBkcy5vQ2xhc3MsXG4gICAgICAgICAgICAgIGtleTogbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0gKyAnOicgKyBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuS0VZXSxcbiAgICAgICAgICAgICAgbmFtZXNwYWNlOiBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXSxcbiAgICAgICAgICAgICAgcGFyYW1MYXllcjogbWV0YWRhdGFzW0dlb01ldGFkYXRhLktFWV0sXG4gICAgICAgICAgICAgIG5hbWU6IGRzLm5hbWUsXG4gICAgICAgICAgICAgIGRhdGFzb3VyY2VJZDogZHMuaWQsXG4gICAgICAgICAgICAgIGdyb3VwOiBERUZBVUxUX0xBWUVSX0dST1VQXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgobGF5ZXIpID0+IGxheWVyIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyk7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcblxuICAgIHRoaXMuYXV0b0RhdGFzZXRMYXllcnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy51c2VkRGF0YXNvdXJjZXMkLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbXSksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoZGF0YXNvdXJjZXMpID0+XG4gICAgICAgICAgICBkYXRhc291cmNlcy5maWx0ZXIoKGRzKSA9PiBkcy5zb3VyY2VUeXBlID09PSAnZGF0YXNldCcgJiYgIURhdGFzb3VyY2VVdGlscy5pc0dlbyhkcykpIGFzIERhdGFzZXRbXVxuICAgICAgICApXG4gICAgICApXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtjbGFzc2VzLCBkYXRhU2V0c10pID0+XG4gICAgICAgICAgZGF0YVNldHNcbiAgICAgICAgICAgIC5tYXAoKGRzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gY2xhc3Nlcy5maW5kKChjbGF6eikgPT4gY2xhenouaWQgPT09IGRzLm9DbGFzcyk7XG4gICAgICAgICAgICAgIGNvbnN0IGdlb0F0dHJpYnV0ZXMgPSAobW9kZWw/LmF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiBhdHRyKSA/PyBbXSkuZmlsdGVyKChhdHRyKSA9PlxuICAgICAgICAgICAgICAgIEdlb21ldHJpY0ZpZWxkVHlwZXMuaW5jbHVkZXMoYXR0ci5maWVsZC50eXBlKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gZ2VvQXR0cmlidXRlcy5tYXAoXG4gICAgICAgICAgICAgICAgKGF0dHIpID0+XG4gICAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBgJHtkcy5uYW1lfSR7Z2VvQXR0cmlidXRlcy5sZW5ndGggPiAxID8gJyAtICcgKyBhdHRyLm5hbWUgOiAnJ31gLFxuICAgICAgICAgICAgICAgICAgICBvQ2xhc3M6IGRzLm9DbGFzcyxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBkcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgc3ViVHlwZTogYXR0ci5maWVsZCEudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlczogW2RzLm9DbGFzc10sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0ci50ZWNobmljYWxOYW1lLFxuICAgICAgICAgICAgICAgICAgICBncm91cDogREVGQVVMVF9MQVlFUl9HUk9VUFxuICAgICAgICAgICAgICAgICAgfSkgYXMgTWFwQXV0b0xheWVyT3B0aW9uc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5mbGF0KCkgYXMgTWFwQXV0b0xheWVyT3B0aW9uc1tdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm1hbmlmZXN0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAoKChtYW5pZmVzdC5vcHRpb25zID8/IHsgbGF5ZXJzOiBbXSB9KSBhcyBNYXBXaWRnZXRPcHRpb25zKS5sYXllcnMgPz8gW10pLmZpbHRlcigobGF5ZXIpID0+XG4gICAgICAgICAgICAgICAgWyd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKVxuICAgICAgICAgICAgICApIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zW11cbiAgICAgICAgICAgICkubWFwKChsYXllcikgPT4gbGF5ZXIudXJsKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh1cmxzKSA9PiB1cmxzLmZvckVhY2goKHVybCkgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmdldENhcGFiaWxpdHkoeyB1cmwgfSkpKSlcbiAgICApO1xuXG4gICAgdGhpcy53bXNDYXBhYmlsaXRpZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmNhcGFiaWxpdGllcyk7XG5cbiAgICB0aGlzLm9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1hbmlmZXN0JCxcbiAgICAgIHRoaXMucmVzdWx0U2V0JCxcbiAgICAgIHRoaXMuY2xhc3NlcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnN0eWxlcyQsXG4gICAgICB0aGlzLmdlb1NlcnZlckxheWVyRGVzY3JpcHRpb25zJCxcbiAgICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJCxcbiAgICAgIHRoaXMuYXV0b0RhdGFzZXRMYXllcnMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW21hbmlmZXN0LCByZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcywgbWFwU3R5bGVzLCBnZW9MYXllcnMsIGNhcGFiaWxpdGllcywgYXV0b0RhdGFzZXRMYXllcnNdKSA9PiB7XG4gICAgICAgIC8vIGF1dG8gZGV0ZXJtaW5lIGxheWVycyBwYXJhbWV0ZXJzIHRvIHByb3ZpZGUgYSB3b3JraW5nIHZpZXdcbiAgICAgICAgY29uc3QgYXV0b09wdGlvbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUobWFuaWZlc3Qub3B0aW9ucyA/PyB7fSkgYXMgTWFwV2lkZ2V0T3B0aW9ucztcbiAgICAgICAgaWYgKCFhdXRvT3B0aW9ucy50b29sdGlwTW9kZSkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLnRvb2x0aXBNb2RlID0gVG9vbHRpcE1vZGUuQ0xJQ0s7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMgPSBbXG4gICAgICAgICAgLi4uKGF1dG9PcHRpb25zLmxheWVycyA/PyBbXSkuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIudHlwZSAhPT0gJ2F1dG8nKSxcbiAgICAgICAgICAuLi4oYXV0b09wdGlvbnMuYXV0b21hdGljTGF5ZXJzXG4gICAgICAgICAgICA/IGF1dG9EYXRhc2V0TGF5ZXJzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICAgICAgICAgIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciB8fFxuICAgICAgICAgICAgICAgICAgICAhYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmluY2x1ZGVzKGxheWVyLmtleSArICctJyArIGxheWVyLnN1YlR5cGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIsXG4gICAgICAgICAgICAgICAgICAuLi4oKGF1dG9PcHRpb25zLmxheWVycyA/PyBbXSkuZmluZChcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAocHJldkxheWVyKSA9PiBwcmV2TGF5ZXIua2V5ID09PSBsYXllci5rZXkgJiYgcHJldkxheWVyLmF0dHJpYnV0ZSA9PT0gbGF5ZXIuYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICApID8/IHt9KVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBbXSlcbiAgICAgICAgXTtcblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnM/LmZvckVhY2goKGxheWVyLCBpKSA9PiB7XG4gICAgICAgICAgV2lkZ2V0TWFwVXRpbHMucG9wdWxhdGVMb2NhdGlvbkF0dHJpYnV0ZShsYXllciwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpO1xuICAgICAgICAgIFdpZGdldE1hcFV0aWxzLnBvcHVsYXRlSW50ZW5zaXR5QXR0cmlidXRlKGxheWVyLCByZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcyk7XG4gICAgICAgICAgaWYgKGF1dG9PcHRpb25zLmF0dHJpYnV0aW9ucykge1xuICAgICAgICAgICAgbGF5ZXIuYXR0cmlidXRpb24gPSBsYXllci5hdHRyaWJ1dGlvbiA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFjdHVhbExheWVyS2V5cyA9IChhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pXG4gICAgICAgICAgLm1hcCgobGF5ZXIpID0+IChsYXllciBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpLmtleSA/PyBudWxsKVxuICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gISFrZXkpO1xuXG4gICAgICAgIC8vIEdldCBhbGwgcHJldmlvdXMgbGF5ZXJzLCB3aXRob3V0IGdlb3NlcnZlciBsYXllcnMgdGhhdCBhcmUgbm90IHJlcXVlc3RlZCBhbnltb3JlLCB0aGVuIGFkZCBuZXcgZ2Vvc2VydmVyIGxheWVycyAocG90ZW50aWFsbHkgd2l0aCBhIHByZWNvbmZpZyBmcm9tIG1hbmlmZXN0KS5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gW1xuICAgICAgICAgIC4uLihhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pLm1hcCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGdlb0xheWVyID0gZ2VvTGF5ZXJzLmZpbmQoKGdlb0xheWVyKSA9PiBsYXllci5rZXkgPT09IGdlb0xheWVyLmtleSkgPz8gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJ1xuICAgICAgICAgICAgICA/IGdlb0xheWVyXG4gICAgICAgICAgICAgICAgPyB7IC4uLmdlb0xheWVyLCAuLi5sYXllciwgdXJsOiBnZW9MYXllci51cmwgfVxuICAgICAgICAgICAgICAgIDogKG51bGwgYXMgdW5rbm93biBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpXG4gICAgICAgICAgICAgIDogeyAuLi5sYXllciB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLmdlb0xheWVycy5maWx0ZXIoKGxheWVyKSA9PiAhYWN0dWFsTGF5ZXJLZXlzLmluY2x1ZGVzKGxheWVyLmtleSkpXG4gICAgICAgIF0uZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZvckVhY2goKGxheWVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdExheWVyVGl0bGUobGF5ZXIsIGluZGV4LCBjYXBhYmlsaXRpZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISFtYXBTdHlsZXMgJiZcbiAgICAgICAgICBtYXBTdHlsZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICghYXV0b09wdGlvbnMuc3R5bGUgfHwgIW1hcFN0eWxlcy5tYXAoKHN0eWxlKSA9PiBzdHlsZS5pZGVudGlmaWVyKS5pbmNsdWRlcyhhdXRvT3B0aW9ucy5zdHlsZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGxpZ2h0U3R5bGVzID0gbWFwU3R5bGVzLmZpbHRlcigoc3R5bGUpID0+ICEoc3R5bGUuaWRlbnRpZmllciA/PyAnLScpLmluY2x1ZGVzKCdkYXJrJykpO1xuICAgICAgICAgIGF1dG9PcHRpb25zLnN0eWxlID0gbGlnaHRTdHlsZXMubGVuZ3RoID4gMCA/IGxpZ2h0U3R5bGVzWzBdLmlkZW50aWZpZXIgOiBtYXBTdHlsZXNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIpIHtcbiAgICAgICAgICBjb25zdCBiYXNlID0gYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyO1xuXG4gICAgICAgICAgLy8gUmVtb3ZlIGZyb20gaWdub3JlQXV0b0xheWVycywgdmFsdWVzIHRoYXQgYXJlIG5vdCBuZWNlc3NhcnlcbiAgICAgICAgICBjb25zdCBwb3NzaWJsZUlnbm9yZUF1dG9MYXllcktleXMgPSBhdXRvRGF0YXNldExheWVycy5tYXAoKGxheWVyKSA9PiBsYXllci5rZXkgKyAnLScgKyBsYXllci5zdWJUeXBlKTtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIgPSAoYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyID8/IFtdKS5maWx0ZXIoKGtleSkgPT5cbiAgICAgICAgICAgIHBvc3NpYmxlSWdub3JlQXV0b0xheWVyS2V5cy5pbmNsdWRlcyhrZXkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciB8fCBiYXNlLmxlbmd0aCAhPT0gYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0TWFuaWZlc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMgPSBXaWRnZXRNYXBVdGlscy5hc3NpZ25MYXllcnNPcmRlcihhdXRvT3B0aW9ucy5sYXllcnMpO1xuXG4gICAgICAgIGlmIChhdXRvT3B0aW9ucy5maXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLmxheWVycy5mb3JFYWNoKFxuICAgICAgICAgICAgKGxheWVyKSA9PiAobGF5ZXIuZml0ID0gIU5PTl9NQU5EQVRPUllfRklUX0xBWUVSX1RZUEVTLmluY2x1ZGVzKGxheWVyLnR5cGUpIHx8IGF1dG9PcHRpb25zLmZpdClcbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSBhdXRvT3B0aW9ucy5maXQ7XG4gICAgICAgIH1cblxuICAgICAgICBbXG4gICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IFsnd21zJywgJ2dlb3NlcnZlciddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSBhcyAoXG4gICAgICAgICAgICAgICAgfCBNYXBXTVNMYXllckxheWVyT3B0aW9uc1xuICAgICAgICAgICAgICAgIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zXG4gICAgICAgICAgICAgIClbXVxuICAgICAgICAgICAgKS5tYXAoKGxheWVyKSA9PiBsYXllci51cmwpXG4gICAgICAgICAgKVxuICAgICAgICBdLmZvckVhY2goKHVybCkgPT4ge1xuICAgICAgICAgIGlmIChjYXBhYmlsaXRpZXMgJiYgY2FwYWJpbGl0aWVzW3VybF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmdldENhcGFiaWxpdHkoeyB1cmw6IHVybCB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMgPSBhdXRvT3B0aW9ucy5sYXllcnMubWFwKChsYXllcikgPT4gKHtcbiAgICAgICAgICAuLi5sYXllcixcbiAgICAgICAgICB0aXRsZTogbGF5ZXIudGl0bGUgPz8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJHtsYXllci50eXBlfWAsIHsgLi4ubGF5ZXIgfSksXG4gICAgICAgICAgZ3JvdXA6IGxheWVyLmdyb3VwID8/IERFRkFVTFRfTEFZRVJfR1JPVVBcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGF1dG9PcHRpb25zLmxheWVyR3JvdXBzID0gYXV0b09wdGlvbnMubGF5ZXJHcm91cHMgPz8gW107XG4gICAgICAgIGlmICghYXV0b09wdGlvbnMubGF5ZXJHcm91cHMuZmluZCgoZykgPT4gZy5uYW1lID09PSBERUZBVUxUX0xBWUVSX0dST1VQKSkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLmxheWVyR3JvdXBzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogJ0RFRkFVTFQnLFxuICAgICAgICAgICAgc2luZ2xlTGF5ZXI6IGZhbHNlLFxuICAgICAgICAgICAgdmlzaWJsZUxheWVyczogYXV0b09wdGlvbnMubGF5ZXJzXG4gICAgICAgICAgICAgID8gYXV0b09wdGlvbnMubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdyb3VwID09PSBERUZBVUxUX0xBWUVSX0dST1VQKS5tYXAoKGxheWVyKSA9PiBsYXllci50aXRsZSlcbiAgICAgICAgICAgICAgOiAoW10gYXMgc3RyaW5nW10pXG4gICAgICAgICAgfSBhcyBMYXllckdyb3VwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdXRvT3B0aW9ucztcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaChcbiAgICAgICAgICAobGF5ZXIpID0+ICh0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlID8/ICdNSVNTSU5HIFRJVExFJ10gPSBmYWxzZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8ubWFwKChsYXllcikgPT4gKHtcbiAgICAgICAgICAuLi5sYXllcixcbiAgICAgICAgICBncm91cDogbGF5ZXIuZ3JvdXAgPz8gREVGQVVMVF9MQVlFUl9HUk9VUFxuICAgICAgICB9KSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFVybCQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMubWFwVXJsKTtcblxuICAgIHRoaXMuYm90dG9tTGVmdCQgPSB0aGlzLndpZGdldFNpemUkLnBpcGUoXG4gICAgICBtYXAoKHNpemUpID0+IGB0cmFuc2xhdGUoMTBweCAsY2FsYygke3NpemUuaGVpZ2h0fXB4IC0gMTAwJSAtIDEwcHgpKWApLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbVN0eWxlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMubWFuaWZlc3QkLCB0aGlzLnN0YXRpY1Jlc3VsdFNldCRdKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFtycywgbWFuaWZlc3QsIHNyc10pID0+IHtcbiAgICAgICAgaWYgKChtYW5pZmVzdC5kYXRhc291cmNlID09PSB1bmRlZmluZWQgfHwgbWFuaWZlc3QuZGF0YXNvdXJjZS5sZW5ndGggPT09IDApICYmICFzcnMpIHtcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8e1xuICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgICAgICAgICAgICBib3JkZXJlZDogU3R5bGU7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gT2JqZWN0LnZhbHVlcyhycy5pdGVtcykucmVkdWNlKChwLCBjKSA9PiBjLmxlbmd0aCArIHAsIDApO1xuICAgICAgICAgICAgICBpZiAodG90YWwgPT09IDApIHJlc29sdmUoe30pO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyB7XG4gICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICAgICAgICAgICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgICAgICAgICAgICAgIGJvcmRlcmVkOiBTdHlsZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHJzLml0ZW1zKS5mb3JFYWNoKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2xBc0ljb25TdHlsZShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW1ib2xTZXJ2aWNlLmdldFN5bWJvbEFzSWNvblN0eWxlKGl0ZW0sIHRydWUpXG4gICAgICAgICAgICAgICAgICBdKS50aGVuKChbc3R5bGUsIGJTdHlsZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2l0ZW0uaWRdID0geyBjbGFzc2ljOiBzdHlsZSwgYm9yZGVyZWQ6IGJTdHlsZSB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggPj0gdG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaGVpZ2h0JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkZ2V0U2l6ZSQucGlwZShkZWJvdW5jZVRpbWUoMTAwKSksIHRoaXMuZGlzcGxheUhlYWRlciRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgZGlzcGxheV0pID0+IChzaXplLmhlaWdodCA/PyAxMDApIC0gKGRpc3BsYXkgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLmF0dHJpYnV0aW9ucyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUobWFwKChvcHRpb25zKSA9PiAhIW9wdGlvbnMuYXR0cmlidXRpb25zKSk7XG5cbiAgICB0aGlzLmxlZ2VuZFRvcCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRpc3BsYXlIZWFkZXIkLCB0aGlzLmF0dHJpYnV0aW9ucyRdKS5waXBlKFxuICAgICAgbWFwKChbaGVhZGVyLCBhdHRyXSkgPT4gNSArIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApICsgKGF0dHIgPyA2MSA6IDApKVxuICAgICk7XG5cbiAgICB0aGlzLmxlZ2VuZEhlaWdodCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLCB0aGlzLmxlZ2VuZFRvcCRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgdG9wXSkgPT4ge1xuICAgICAgICByZXR1cm4gKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSAtIHRvcCAtIDU2OyAvLyA1NnB4IGlzIHRoZSBwb3BpbiB0aXRsZSBoZWlnaHQgKyBtYXJnaW5cbiAgICAgIH0pLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCh3bXNDYXBhYmlsaXRpZXMpID0+XG4gICAgICAgICAgICB3bXNDYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgPyBPYmplY3Qua2V5cyh3bXNDYXBhYmlsaXRpZXMpXG4gICAgICAgICAgICAgICAgICAubWFwKCh1cmwpID0+ICh7IHVybCwgbGF5ZXJzOiBYTUxVdGlscy5nZXRQb3NzaWJsZUxheWVyU3R5bGVzKHdtc0NhcGFiaWxpdGllc1t1cmxdPy5kb2MpIH0pKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gKHsgLi4ucCwgW2MudXJsXTogYyB9KSwge30pXG4gICAgICAgICAgICAgIDoge31cbiAgICAgICAgICApLFxuICAgICAgICAgIHN0YXJ0V2l0aCh7fSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChwb3NzaWJsZVN0eWxlcykgPT4gKHRoaXMucG9zc2libGVTdHlsZXMgPSBwb3NzaWJsZVN0eWxlcykpXG4gICAgKTtcblxuICAgIHRoaXMuaGFzU2xpZGVMYXllciQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+XG4gICAgICAgIChvcHRpb25zLmxheWVycyA/PyBbXSkubWFwKChsYXllcikgPT4gISFsYXllci5zbGlkZSAmJiBsYXllci5zbGlkZSAhPT0gJ2FsbCcpLnJlZHVjZSgoYSwgYikgPT4gYSB8fCBiLCBmYWxzZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaW5pdEludGVyYWN0aW9uTWFuYWdlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIuaW5pdCh0aGlzKTtcbiAgfVxuXG4gIGluaXRUb29sdGlwTWFuYWdlcigpIHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwTWFuYWdlci5pbml0KFxuICAgICAgdGhpcy50b29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgdGhpcy5zdG9yZSxcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyxcbiAgICAgIHRoaXMud2lkZ2V0U2l6ZSQsXG4gICAgICB0aGlzLmRpc3BsYXlIZWFkZXIkLFxuICAgICAgdGhpcy5tYXAsXG4gICAgICB0aGlzLnBvcHVwLFxuICAgICAgdGhpcy5wb3B1cENvbnRlbnQsXG4gICAgICB0aGlzLmludGVyYWN0aW9uTWFuYWdlcixcbiAgICAgIHRoaXNcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWFwID0gbmV3IE1hcCh7IHRhcmdldDogdGhpcy5tYXBSZWYubmF0aXZlRWxlbWVudCwgY29udHJvbHM6IGRlZmF1bHRzKHsgYXR0cmlidXRpb246IGZhbHNlIH0pIH0pO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5pbml0SW50ZXJhY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5sYXllclNsaWRlci5pbml0KHRoaXMubWFwLCB0aGlzLnNsaWRlckVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlciA9IHRoaXMuaW5pdFRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgdGhpcy5tYXBTdHlsZVVybCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLm1hcFVybCRdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgdXJsXSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuc3R5bGUpIHtcbiAgICAgICAgICBjYXNlIHRoaXMuTk9fU1RZTEU6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICBjYXNlIHRoaXMuU1RZTEVfRlJPTV9VUkw6XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5zdHlsZVVSTCA/PyAnJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGAke3VybH0vc3R5bGVzLyR7b3B0aW9ucy5zdHlsZX0vc3R5bGUuanNvbmA7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkID0gdGhpcy5tYXBTdHlsZVVybCQucGlwZShcbiAgICAgIG1hcCgoc3R5bGVVcmwpID0+IHtcbiAgICAgICAgaWYgKCFzdHlsZVVybCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG5ldyBNYXBib3hWZWN0b3JMYXllcih7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IHRpdGxlOiAnYmFja2dyb3VuZCcgfSxcbiAgICAgICAgICAgIHN0eWxlVXJsXG4gICAgICAgICAgfSkgLyogLFxuICAgICAgICAgIG5ldyBUaWxlTGF5ZXIoe1xuICAgICAgICAgICAgc291cmNlOiBuZXcgVGlsZURlYnVnKClcbiAgICAgICAgICB9KSAqL1xuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChvcHRpb25zKSA9PiAoe1xuICAgICAgICAgICAgY2VudGVyOiBmcm9tTG9uTGF0KG9wdGlvbnMuY2VudGVyID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfTUFQX0NFTlRFUiksXG4gICAgICAgICAgICBtYXhab29tOiBvcHRpb25zLnpvb20/Lm1heCA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICAgICAgbWluWm9vbTogb3B0aW9ucy56b29tPy5taW4gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbT8uc3RhcnQgPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX1NUQVJUXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2aWV3KSA9PiB0aGlzLm1hcC5zZXRWaWV3KG5ldyBWaWV3KHZpZXcpKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChvcHRpb25zKSA9PiBvcHRpb25zLmF0dHJpYnV0aW9ucyksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGF0dHJpYnV0aW9ucykgPT4ge1xuICAgICAgICAgIGlmICghYXR0cmlidXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5yZW1vdmVDb250cm9sKHRoaXMuYXR0cmlidXRpb25zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXAuYWRkQ29udHJvbCh0aGlzLmF0dHJpYnV0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmxheWVycyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMucmVzdWx0U2V0JCxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5hZGRpdGlvbmFsTGF5ZXJzJCxcbiAgICAgIHRoaXMuaXRlbVN0eWxlcyQsXG4gICAgICB0aGlzLmRhdGFzb3VyY2VGaWx0ZXJzJCxcbiAgICAgIHRoaXMuZmllbGRzJFxuICAgIF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIChbcmVzdWx0U2V0LCBvcHRpb25zLCBjbGFzc2VzLCBhZGRpdGlvbmFsTGF5ZXJzLCBpdGVtU3R5bGVzLCBmaWx0ZXJzLCBmaWVsZHNdKSA9PlxuICAgICAgICAgICEhcmVzdWx0U2V0ICYmICEhb3B0aW9ucyAmJiAhIWNsYXNzZXMgJiYgISFmaWVsZHNcbiAgICAgICksXG4gICAgICBtYXAoKFtyZXN1bHRTZXQsIG9wdGlvbnMsIGNsYXNzZXMsIGFkZGl0aW9uYWxMYXllcnMsIGl0ZW1TdHlsZXMsIGZpbHRlcnMsIGZpZWxkc10pID0+IHtcbiAgICAgICAgbGV0IGhhc1JlbGF0aW9uTGF5ZXIgPSBudWxsIGFzIHVua25vd24gYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPGFueT4+O1xuXG4gICAgICAgIGNvbnN0IGxheWVycyA9IChvcHRpb25zPy5sYXllcnMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIChsYXllcikgPT4gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuZG9udE5lZWRMb2NhdGlvbi5pbmNsdWRlcyhsYXllci50eXBlKSB8fCAhIWxheWVyLmF0dHJpYnV0ZVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgKGxheWVyKSA9PiB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5kb250TmVlZEludGVuc2l0eS5pbmNsdWRlcyhsYXllci50eXBlKSB8fCAhIWxheWVyLmludGVuc2l0eUF0dHJpYnV0ZVxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKChsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBpZHgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzRm9yQ2xhc3MgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+ICh7XG4gICAgICAgICAgICAgICAgY2xhc3NJZCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldEF0dHJpYnV0ZXNGb3JEcmF3aW5nKGNsYXNzZXMsIGNsYXNzSWQsIGxheWVyKVxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAocCwgYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICAgICAgICBbYy5jbGFzc0lkXTogY1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHt9IGFzIHtcbiAgICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZW5zaXR5QXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uQXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IGxheWVyQ2xhc3Nlc0lkID0gY2xhc3Nlcy5tYXAoKGNsYXp6KSA9PiBjbGF6ei5pZCk7XG4gICAgICAgICAgICBpZiAoJ2NsYXNzZXMnIGluIGxheWVyICYmICEhbGF5ZXIuY2xhc3NlcyAmJiBsYXllci5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzSWQgPSBsYXllci5jbGFzc2VzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB7IG1pbjogMCwgbWF4OiAwIH07XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoISFsYXllci5pbnRlbnNpdHlBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+XG4gICAgICAgICAgICAgICAgICByZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0ubWFwKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKGl0ZW0sIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10uaW50ZW5zaXR5QXR0cmlidXRlKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIGFzIG51bWJlcltdO1xuXG4gICAgICAgICAgICAgIHJhbmdlID0gdmFsdWVzLnJlZHVjZSgocCwgYykgPT4gKHsgbWluOiBNYXRoLm1pbihwLm1pbiwgYyksIG1heDogTWF0aC5tYXgocC5tYXgsIGMpIH0pLCB7XG4gICAgICAgICAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgIG1heDogLU51bWJlci5NQVhfVkFMVUVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGltcGwgPSB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5sYXllcnNJbXBsZW1lbnRhdGlvbltsYXllci50eXBlXTtcbiAgICAgICAgICAgIGlmICghIWltcGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0TGF5ZXIgPSBpbXBsKFxuICAgICAgICAgICAgICAgIGxheWVyIGFzIGFueSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgICAgICAgIGl0ZW1TdHlsZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCdmaXQnLCBsYXllci5maXQpO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ3R5cGUnLCBsYXllci50eXBlKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCdzbGlkZScsIGxheWVyLnNsaWRlKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCdvcmRlcicsIGxheWVyLm9yZGVyKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCdncm91cCcsIGxheWVyLmdyb3VwID8/IERFRkFVTFRfTEFZRVJfR1JPVVApO1xuICAgICAgICAgICAgICBjb25zdCBtYXhMYXllck9yZGVyID0gTWF0aC5tYXgoLi4uYXJyYXkubWFwKChsKSA9PiBsLm9yZGVyID8/IDApKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0WkluZGV4KG1heExheWVyT3JkZXIgKyAxIC0gKGxheWVyLm9yZGVyID8/IGlkeCkpO1xuICAgICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ3JlbGF0aW9uJykge1xuICAgICAgICAgICAgICAgIGhhc1JlbGF0aW9uTGF5ZXIgPSByZXN1bHRMYXllciBhcyB1bmtub3duIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZT47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCd0aXRsZScsIGxheWVyLnRpdGxlKTtcblxuICAgICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcWxfZmlsdGVyID0gQ3FsVXRpbHMuZ2V0Q1FMUGFyYW1zRm9yKGxheWVyLmRhdGFzb3VyY2VJZCwgZmlsdGVycywgY2xhc3NlcywgZmllbGRzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjcWxfZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgQ1FMIHF1ZXJ5IHRvIGdlb3NlcnZlciBsYXllcnNcbiAgICAgICAgICAgICAgICAgIChyZXN1bHRMYXllciBhcyBUaWxlPFRpbGVXTVM+KS5nZXRTb3VyY2UoKSEudXBkYXRlUGFyYW1zKHsgY3FsX2ZpbHRlciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAobGF5ZXIuc2xpZGUgJiYgbGF5ZXIuc2xpZGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXllclNsaWRlci5hcHBseVNsaWRlKFxuICAgICAgICAgICAgICAgICAgbGF5ZXIuc2xpZGUsXG4gICAgICAgICAgICAgICAgICByZXN1bHRMYXllciBhcyB1bmtub3duIGFzIFRpbGVMYXllcjxhbnk+IHwgVmVjdG9yTGF5ZXI8YW55PiB8IEhlYXRtYXBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdExheWVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTGF5ZXIgdHlwZSAke2xheWVyLnR5cGV9IGlzIHVua25vd25gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBCYXNlTGF5ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgaWYgKCEhaGFzUmVsYXRpb25MYXllcikge1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gbGF5ZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gIShsYXllciBpbnN0YW5jZW9mIFRpbGUpKVxuICAgICAgICAgICAgLm1hcCgobGF5ZXIpID0+XG4gICAgICAgICAgICAgIGxheWVyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmVhdHVyZXM6IEZlYXR1cmU8YW55PikgPT4gISFmZWF0dXJlcy5nZXQoJ2lkJykgfHwgISFmZWF0dXJlcy5nZXQoJ2ZlYXR1cmVzJykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKTtcblxuICAgICAgICAgIHJlc3VsdFNldC5yZWxhdGlvbnMuZm9yRWFjaCgocmVsYXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGZlYXR1cmVzLmZpbmQoKGY6IEZlYXR1cmU8UG9pbnQgfCBDaXJjbGU+KSA9PiBmLmdldCgnaWQnKSA9PT0gcmVsYXRpb24uc291cmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc3QgPSBmZWF0dXJlcy5maW5kKChmOiBGZWF0dXJlPFBvaW50IHwgQ2lyY2xlPikgPT4gZi5nZXQoJ2lkJykgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKTtcbiAgICAgICAgICAgIGlmICghIXNvdXJjZSAmJiAhIWRlc3QpIHtcbiAgICAgICAgICAgICAgaGFzUmVsYXRpb25MYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShXaWRnZXRNYXBVdGlscy5nZXRMaW5rRmVhdHVyZShyZWxhdGlvbiwgc291cmNlLCBkZXN0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGF5ZXJzLnB1c2goLi4uYWRkaXRpb25hbExheWVycyk7XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZUxheWVycyA9IG9wdGlvbnMubGF5ZXJHcm91cHMhLm1hcCgoZ3JvdXApID0+IGdyb3VwLnZpc2libGVMYXllcnMpLmZsYXQoKTtcbiAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyLCBpZHgpID0+IHtcbiAgICAgICAgICBpZiAoIXZpc2libGVMYXllcnMuaW5jbHVkZXMobGF5ZXIuZ2V0KCd0aXRsZScpKSkge1xuICAgICAgICAgICAgbGF5ZXIuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvKiBSZXNvbHZlIGJ1ZyBkcmF3aW5nIHdlYmdsbGF5ZXIgd2l0aG91dCBub3RoaW5nIHVuZGVybmVhdGg6IGFkZCBlbXB0eSBsYXllciBiZWxvdyAqL1xuICAgICAgICBjb25zdCBfbGF5ZXJzID0gdGhpcy5hZGRFbXB0eVdlYkdsTGF5ZXJCZWxvd1NsaWRlSGVhdG1hcHMobGF5ZXJzKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0xheWVycy5wdXNoKC4uLl9sYXllcnMpO1xuICAgICAgICByZXR1cm4gX2xheWVycztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZml0RXh0ZW50cyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5kYXRhc291cmNlRmlsdGVycyQsXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyRcbiAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICBzd2l0Y2hNYXAoKFtvcHRpb25zLCBjbGFzc2VzLCBmaWx0ZXJzLCB3bXNDYXBhYmlsaXRpZXNdKSA9PlxuICAgICAgICAob3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbmQoKGxheWVyKSA9PiBbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSAmJiBsYXllci5maXQpXG4gICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgLi4uKChvcHRpb25zLmxheWVycz8uZmlsdGVyKChsYXllcikgPT4gbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcicpID8/IFtdKSBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNbXSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZml0KVxuICAgICAgICAgICAgICAgIC5tYXAoKGxheWVyOiBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpID0+XG4gICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMuZmluZCgoY2xhenopID0+IGNsYXp6LmlkID09PSBsYXllci5vQ2xhc3MpID8/ICh7IGF0dHJpYnV0ZXM6IFtdIH0gYXMgdW5rbm93biBhcyBDbGFzcylcbiAgICAgICAgICAgICAgICAgICkuYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChhdHRyKSA9PiBHZW9tZXRyaWNGaWVsZFR5cGVzLmluY2x1ZGVzKGF0dHIuZmllbGQudHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcnlBZ2dyZWdhdGlvblNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZ2dyZWdhdGUoW2xheWVyLmRhdGFzb3VyY2VJZF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkaW5hdGU6IHsgb3BlcmF0aW9uOiBPcGVyYXRpb24uRVhURU5ULCBhdHRyaWJ1dGU6IGF0dHIuaWQsIGxhYmVsOiBhdHRyLm5hbWUsIGtlZXAwOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChleHRlbnRSZXNwb25zZTogQWdncmVnYXRpb25SZXN1bHQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0TWFwVXRpbHMucHJvamVjdEV4dGVudEFnZ3JlZ2F0aW9uUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmZpZWxkISxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bXNDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7IGRhdGFzb3VyY2U6IGxheWVyLmRhdGFzb3VyY2VJZCwgZXh0ZW50OiBbXSwgZXJyb3I6IHRydWUgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmxhdCgpLFxuICAgICAgICAgICAgICAuLi4oKG9wdGlvbnMubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci50eXBlID09PSAnd21zJykgPz8gW10pIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmZpdClcbiAgICAgICAgICAgICAgICAubWFwKChsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVudCA9IFhNTFV0aWxzLmdldExheWVyRXh0ZW50KGxheWVyLnBhcmFtTGF5ZXIsIHRoaXMubWFwLCB3bXNDYXBhYmlsaXRpZXMhW2xheWVyLnVybF0/LmRvYyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhc291cmNlOiBgd21zLSR7bGF5ZXIucGFyYW1MYXllcn1gLFxuICAgICAgICAgICAgICAgICAgICBleHRlbnQ6IGV4dGVudCA/PyBbXSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICFleHRlbnRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogb2YoW10pXG4gICAgICApLFxuICAgICAgc3RhcnRXaXRoKFxuICAgICAgICBbXSBhcyB7XG4gICAgICAgICAgZGF0YXNvdXJjZTogc3RyaW5nO1xuICAgICAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgICAgICAgIGVycm9yOiBib29sZWFuO1xuICAgICAgICB9W11cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5sZWdlbmRMYXllcnMkID0gdGhpcy5vcHRpb25zJC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAob3B0aW9ucykgPT5cbiAgICAgICAgICAob3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbHRlcigobGF5ZXIpID0+IFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSBhcyAoXG4gICAgICAgICAgICB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICAgICAgICAgICAgfCBNYXBXTVNMYXllckxheWVyT3B0aW9uc1xuICAgICAgICAgIClbXVxuICAgICAgKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLmxheWVyc1RvcCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmxlZ2VuZFRvcCQsIHRoaXMubGVnZW5kTGF5ZXJzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtsZWdlbmRUb3AsIGxheWVyc10pID0+IGxlZ2VuZFRvcCArICgobGF5ZXJzLmxlbmd0aCA/PyAwKSA+IDAgPyA1MCA6IDApKVxuICAgICk7XG5cbiAgICB0aGlzLmxheWVyc0hlaWdodCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLCB0aGlzLmxheWVyc1RvcCRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgdG9wXSkgPT4ge1xuICAgICAgICByZXR1cm4gKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSAtIHRvcCAtIDUwOyAvLyA1MHB4IGFjdHMgYXMgYm90dG9tIG1hcmdpblxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMubGF5ZXJzVG9wJCwgdGhpcy5sZWdlbmRMYXllcnMkLCB0aGlzLm9sWm9vbUVsZW1lbnQkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSlcbiAgICAgICAgLnBpcGUod2l0aExhdGVzdEZyb20odGhpcy5sYXllcnMkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoW1tsYXllcnNUb3AsIGxlZ2VuZCwgem9vbUVsZW1lbnQsIGRpc3BsYXlIZWFkZXJdLCBsYXllcnNdKSA9PiB7XG4gICAgICAgICAgaWYgKHpvb21FbGVtZW50KSB7XG4gICAgICAgICAgICB6b29tRWxlbWVudC5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAgICAgbGF5ZXJzVG9wICtcbiAgICAgICAgICAgICAgKChsZWdlbmQubGVuZ3RoID8/IDApID4gMCB8fCBsYXllcnMubGVuZ3RoID4gMCA/IDIwIDogMCkgK1xuICAgICAgICAgICAgICAoIWRpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApXG4gICAgICAgICAgICB9cHhgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkLFxuICAgICAgICB0aGlzLmxheWVycyQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKSksXG4gICAgICAgIHRoaXMuZml0RXh0ZW50cyQsXG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkLFxuICAgICAgICBmcm9tRXZlbnQ8Q3VzdG9tRXZlbnQ+KHdpbmRvdywgJ3dtcy1sYXllci1yZWZyZXNoJykucGlwZShcbiAgICAgICAgICBzdGFydFdpdGgobmV3IEN1c3RvbUV2ZW50KGB3bXMtbGF5ZXItcmVmcmVzaGAsIHsgZGV0YWlsOiB0cnVlIH0pKVxuICAgICAgICApIGFzIE9ic2VydmFibGU8Q3VzdG9tRXZlbnQ+XG4gICAgICBdKS5zdWJzY3JpYmUoKFttYXBTdHlsZUxheWVyLCBsYXllcnMsIHNlbGVjdGVkSWRzLCBleHRlbnRzLCBmaWx0ZXJzLCByZWZyZXNoRXZlbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5lZWRlZENhbGN1bGF0ZWRFeHRlbnRzID0gbGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAobGF5ZXIpID0+IFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLmdldCgndHlwZScpKSAmJiBsYXllci5nZXQoJ2ZpdCcpXG4gICAgICAgICkubGVuZ3RoO1xuICAgICAgICBjb25zdCBuYkNhbGN1bGF0ZWRFeHRlbnRzID0gZXh0ZW50cy5maWx0ZXIoKGV4dGVudCkgPT4gIWV4dGVudC5lcnJvcikubGVuZ3RoO1xuXG4gICAgICAgIGlmIChuYkNhbGN1bGF0ZWRFeHRlbnRzID49IG5lZWRlZENhbGN1bGF0ZWRFeHRlbnRzKSB7XG4gICAgICAgICAgaWYgKCFyZWZyZXNoRXZlbnQuZGV0YWlsKSB7XG4gICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgICAgICAgICAgLmZpbHRlcigobCkgPT4gbCBpbnN0YW5jZW9mIFRpbGVMYXllcilcbiAgICAgICAgICAgICAgLmZvckVhY2goKGwpID0+IHtcbiAgICAgICAgICAgICAgICBsLmdldFNvdXJjZSgpIS5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9BcHBseUxheWVycyA9IFsuLi5sYXllcnMsIC4uLm1hcFN0eWxlTGF5ZXJdO1xuICAgICAgICAgICAgdGhpcy5tYXAuc2V0TGF5ZXJzKHRvQXBwbHlMYXllcnMpO1xuXG4gICAgICAgICAgICB0aGlzLmZpdE1hcEZvck9iamVjdHMoc2VsZWN0ZWRJZHMsIGV4dGVudHMpO1xuICAgICAgICAgICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuXG4gICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEobGF5ZXIgaW5zdGFuY2VvZiBUaWxlKSlcbiAgICAgICAgICAgICAgLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0RmVhdHVyZXMgPSAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKT8uZ2V0RmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBnZXRGZWF0dXJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSk/LmdldEZlYXR1cmVzKCkuZm9yRWFjaCgoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBmZWF0dXJlLmdldCgndHlwZScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgWydidWJibGUnLCAnbWFya2VyJywgJ3BvaW50JywgJ2xpbmUnLCAncG9seWdvbicsICdtdWx0aS1saW5lJywgJ211bHRpLXBvbHlnb24nXS5pbmNsdWRlcyh0eXBlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5nZXQoc2VsZWN0ZWRJZHMuaW5jbHVkZXMoZmVhdHVyZS5nZXQoJ2lkJykpID8gJ3NlbGVjdGVkU3R5bGUnIDogJ2NsYXNzaWNTdHlsZScpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWFwLnNldExheWVycyhbLi4ubWFwU3R5bGVMYXllcl0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVtcHR5V2ViR2xMYXllckJlbG93U2xpZGVIZWF0bWFwcyhsYXllcnM6IEJhc2VMYXllcltdKSB7XG4gICAgY29uc3QgX2xheWVycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpXTtcbiAgICAgIF9sYXllcnMucHVzaChsYXllcik7XG4gICAgICBpZiAobGF5ZXIuZ2V0KCd0eXBlJykgPT09ICdoZWF0bWFwJyAmJiBsYXllci5nZXQoJ3NsaWRlJykpIHtcbiAgICAgICAgY29uc3QgZW1wdHlEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjU2ICogMjU2ICogNCk7XG4gICAgICAgIGNvbnN0IGVtcHR5TGF5ZXIgPSBuZXcgV2ViR0xUaWxlTGF5ZXIoe1xuICAgICAgICAgIHNvdXJjZTogbmV3IERhdGFUaWxlKHtcbiAgICAgICAgICAgIGxvYWRlcigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5RGF0YTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhab29tOiAwLFxuICAgICAgICAgICAgd3JhcFg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgX2xheWVycy5wdXNoKGVtcHR5TGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2xheWVycztcbiAgfVxuXG4gIG92ZXJyaWRlIGluaXRSZXN1bHRTZXQkKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyQsXG4gICAgICB0aGlzLnN0YXRpY1Jlc3VsdFNldCQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmRhdGFzZXRzKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZXN1bHRTZXRzLCByZXN1bHRTZXROYW1lc0FycmF5LCBzdGF0aWNSZXN1bHRTZXQsIGRlZmluaXRpb25zXSkgPT4ge1xuICAgICAgICBpZiAoISFzdGF0aWNSZXN1bHRTZXQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGljUmVzdWx0U2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdFNldEFycmF5ID0gcmVzdWx0U2V0TmFtZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLmZpbmQoKGRzZCkgPT4gZHNkLmlkID09PSByc05hbWUpIGFzIERhdGFzZXQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gIWRlZmluaXRpb24gfHwgIShkZWZpbml0aW9uLm1ldGFkYXRhID8/IFtdKS5maW5kKChtZXRhKSA9PiBtZXRhLm1ldGFkYXRhRGVmLm5hbWUgPT09ICdfZ2VvS2V5Jyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChyc05hbWUpID0+IHJlc3VsdFNldHNbcnNOYW1lID8/ICcnXSlcbiAgICAgICAgICAuZmlsdGVyKChyc05hbWUpID0+ICEhcnNOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFNldEFycmF5LnJlZHVjZSgocnMxLCByczIpID0+IFJlc3VsdHNldFV0aWxzLm1lcmdlUmVzdWx0U2V0cyhyczEsIHJzMiksIHtcbiAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgICAgcmVsYXRpb25zOiBbXSxcbiAgICAgICAgICBtZXJnZWQ6IHJlc3VsdFNldEFycmF5Lmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIHYpID0+IGVxdWFsKHAsIHYpKVxuICAgICk7XG4gIH1cblxuICBzZXREZWZhdWx0TGF5ZXJUaXRsZShcbiAgICBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2FwYWJpbGl0aWVzOlxuICAgICAgfCB7XG4gICAgICAgICAgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKCFsYXllci50aXRsZSkge1xuICAgICAgaWYgKFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGdlb0xheWVyID0gbGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxheWVyQ2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzID8gY2FwYWJpbGl0aWVzW2dlb0xheWVyLnVybF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGxheWVyQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmdldE1hdGNoaW5nTGF5ZXIoZ2VvTGF5ZXIucGFyYW1MYXllciwgbGF5ZXJDYXBhYmlsaXRpZXMuZG9jKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdMYXllcikge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUaXRsZSA9IFhNTFV0aWxzLmZpbmQobWF0Y2hpbmdMYXllci5jaGlsZE5vZGVzLCAnVGl0bGUnKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1RpdGxlKSB7XG4gICAgICAgICAgICAgIGxheWVyLnRpdGxlID1cbiAgICAgICAgICAgICAgICAhIW1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnQgJiYgbWF0Y2hpbmdUaXRsZS50ZXh0Q29udGVudC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IG1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXllci50aXRsZSA9IGdlb0xheWVyLnBhcmFtTGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxheWVyLnRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJHtsYXllci50eXBlfWAsIHsgLi4ubGF5ZXIgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZml0TWFwRm9yT2JqZWN0cyhcbiAgICBzZWxlY3RlZElkcz86IHN0cmluZ1tdLFxuICAgIGV4dGVudHM6IHtcbiAgICAgIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgIH1bXSA9IFtdXG4gICkge1xuICAgIGxldCBleHRlbnQgPSBjcmVhdGVFbXB0eSgpO1xuICAgIGNvbnN0IGxpc3RPZk1hcmtlcnMgPSBbXSBhcyBhbnlbXTtcblxuICAgIC8qIE1hbmRhdG9yeSBmaXQgKi9cbiAgICB0aGlzLm1hcFxuICAgICAgLmdldEFsbExheWVycygpXG4gICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0UHJvcGVydGllcygpWydmaXQnXSlcbiAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiAhIWxheWVyLmdldFNvdXJjZSAmJiAhIWxheWVyLmdldFNvdXJjZSgpICYmICEhKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSkuZ2V0RmVhdHVyZXMpXG4gICAgICAuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSkuZ2V0RmVhdHVyZXMoKS5mb3JFYWNoKChmZWF0dXJlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGZlYXR1cmUuZ2V0KCdpZCcpO1xuICAgICAgICAgIGlmICghc2VsZWN0ZWRJZHMgfHwgc2VsZWN0ZWRJZHMubGVuZ3RoIDw9IDAgfHwgKHNlbGVjdGVkSWRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaWQpKSkge1xuICAgICAgICAgICAgc3dpdGNoIChmZWF0dXJlLmdldCgndHlwZScpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2hlYXRwb2ludCc6XG4gICAgICAgICAgICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgICAgICAgICAgY2FzZSAnbWFya2VyJzpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgICAgICAgY2FzZSAnbGluayc6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAncG9seWdvbic6XG4gICAgICAgICAgICAgIGNhc2UgJ211bHRpLWxpbmUnOlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaCguLi5mZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKS5mbGF0KCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdtdWx0aS1wb2x5Z29uJzpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goLi4uZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCkuZmxhdCgpLmZsYXQoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDZW50ZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRFeHRlbnQgPSBib3VuZGluZ0V4dGVudChcbiAgICAgIGxpc3RPZk1hcmtlcnMuZmlsdGVyKChjb29yZCkgPT4gISFjb29yZCkuY29uY2F0KC4uLmV4dGVudHMubWFwKChleHRlbnQpID0+IGV4dGVudC5leHRlbnQpKVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZEV4dGVudFswXSAhPT0gSW5maW5pdHkgJiZcbiAgICAgIHNlbGVjdGVkRXh0ZW50WzFdICE9PSBJbmZpbml0eSAmJlxuICAgICAgc2VsZWN0ZWRFeHRlbnRbMl0gIT09IC1JbmZpbml0eSAmJlxuICAgICAgc2VsZWN0ZWRFeHRlbnRbM10gIT09IC1JbmZpbml0eVxuICAgICkge1xuICAgICAgZXh0ZW50ID0gc2VsZWN0ZWRFeHRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGV4dGVudFswXSAhPT0gSW5maW5pdHkgJiYgZXh0ZW50WzFdICE9PSBJbmZpbml0eSAmJiBleHRlbnRbMl0gIT09IC1JbmZpbml0eSAmJiBleHRlbnRbM10gIT09IC1JbmZpbml0eSkge1xuICAgICAgdGhpcy5tYXAuZ2V0VmlldygpLmZpdChleHRlbnQsIHsgcGFkZGluZzogWzIwLCAyMCwgNzAsIDcwXSwgZHVyYXRpb246IDIwMCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEF0dHJpYnV0ZXNGb3JEcmF3aW5nKGNsYXNzZXM6IENsYXNzW10sIGNsYXNzSWQ6IHN0cmluZywgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGNsYXNzT2JqID0gY2xhc3Nlcy5maW5kKChjbCkgPT4gY2wuaWQgPT09IGNsYXNzSWQpID8/ICh7IGF0dHJpYnV0ZXM6IFtdIGFzIEF0dHJpYnV0ZVtdIH0gYXMgQ2xhc3MpO1xuICAgIGNvbnN0IGxvY2F0aW9uQXR0cmlidXRlID0gdGhpcy5nZXRMb2NhdGlvbkF0dHJpYnV0ZShjbGFzc09iaiwgbGF5ZXIpO1xuICAgIGNvbnN0IGludGVuc2l0eUF0dHJpYnV0ZSA9IHRoaXMuZ2V0SW50ZW5zaXR5QXR0cmlidXRlKFxuICAgICAgY2xhc3NPYmosXG4gICAgICBsYXllciBhcyBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zXG4gICAgKTtcbiAgICByZXR1cm4geyBsb2NhdGlvbkF0dHJpYnV0ZSwgaW50ZW5zaXR5QXR0cmlidXRlIH07XG4gIH1cblxuICBwcml2YXRlIGdldEludGVuc2l0eUF0dHJpYnV0ZShcbiAgICBjbGFzc09iajogQ2xhc3MgfCB1bmRlZmluZWQsXG4gICAgbGF5ZXI6IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChjbGFzc09iaiB8fCB7IGF0dHJpYnV0ZXM6IFtdIH0pLmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBsYXllcj8uaW50ZW5zaXR5QXR0cmlidXRlKSA/P1xuICAgICAgKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhdGlvbkF0dHJpYnV0ZShjbGFzc09iajogQ2xhc3MsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpOiBBdHRyaWJ1dGUge1xuICAgIHR5cGUgbGF5ZXJzID0gTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucztcbiAgICBjb25zdCBzcGVjaWZpY0xheWVyID0gbGF5ZXIgYXMgbGF5ZXJzO1xuICAgIHJldHVybiAoXG4gICAgICBjbGFzc09iai5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gc3BlY2lmaWNMYXllcj8uYXR0cmlidXRlKSA/P1xuICAgICAgKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgY2hhbmdlU3R5bGUoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnN0eWxlID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnN0eWxlICE9PSB0aGlzLlNUWUxFX0ZST01fVVJMKSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5zdHlsZVVSTDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTdHlsZVVSTCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub3B0aW9uc0NvcHkuc3R5bGVVUkwgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VGaXQoJGV2ZW50OiBib29sZWFuLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIuZml0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlU2xpZGUoJGV2ZW50OiB1bmRlZmluZWQgfCAnbGVmdCcgfCAncmlnaHQnLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIuc2xpZGUgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VBdHRyaWJ1dGlvbnMoJGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hdHRyaWJ1dGlvbnMgPSAkZXZlbnQ7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuYXR0cmlidXRpb25zKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5hdHRyaWJ1dGlvbiA9ICcnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5mb3JFYWNoKChsYXllcikgPT4gZGVsZXRlIGxheWVyLmF0dHJpYnV0aW9uKTtcbiAgICB9XG4gIH1cblxuICBhZGRMYXllcihncm91cDogTGF5ZXJHcm91cCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID0gW107XG4gICAgfVxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllcmAsIHsgaW5kZXg6IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLmxlbmd0aCArIDEgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5wdXNoKHtcbiAgICAgIGF0dHJpYnV0ZTogJycsXG4gICAgICBncm91cDogZ3JvdXAubmFtZSxcbiAgICAgIHRpdGxlLFxuICAgICAgdHlwZTogJ21hcmtlcidcbiAgICB9KTtcbiAgICB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW3RpdGxlXSA9IGZhbHNlO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJHcm91cChncm91cCwgdW5kZWZpbmVkLCB0aXRsZSk7XG4gICAgdGhpcy51cGRhdGVMYXllck9yZGVyKCk7XG4gIH1cblxuICBjaGFuZ2VMYXllclR5cGUoJGV2ZW50OiBhbnksIGk6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPz8gW107XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUgPSAkZXZlbnQ7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUgPT09ICd3bXMnKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0gYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zLnBhcmFtTGF5ZXIgPSBvcHRpb25zLnBhcmFtTGF5ZXIgPz8gJyc7XG4gICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsID8/ICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0udHlwZSA9PT0gJ3dtdHMnKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0gYXMgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucy5wYXJhbUxheWVyID0gb3B0aW9ucy5wYXJhbUxheWVyID8/ICcnO1xuICAgICAgb3B0aW9ucy5zdHlsZSA9IG9wdGlvbnMuc3R5bGUgPz8gJyc7XG4gICAgICBvcHRpb25zLm1hdHJpeFNldCA9IG9wdGlvbnMubWF0cml4U2V0ID8/ICcnO1xuICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCA/PyAnJztcbiAgICB9XG4gICAgaWYgKFsnZmVhdHVyZWxheWVyJywgJ3ZlY3RvcnRpbGUnLCAncmFzdGVydGlsZSddLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUpKSB7XG4gICAgICBsZXQgb3B0aW9uczogTWFwRmVhdHVyZUxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXSBhcyBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCA/PyAnJztcbiAgICB9XG4gIH1cblxuICB1cGRhdGVMYXllckdyb3VwU2luZ2xlTGF5ZXIoZ3JvdXA6IExheWVyR3JvdXAsIHNpbmdsZUxheWVyOiBib29sZWFuKSB7XG4gICAgdGhpcy51cGRhdGVMYXllckdyb3VwKGdyb3VwLCBzaW5nbGVMYXllciwgc2luZ2xlTGF5ZXIgPyBbZ3JvdXAudmlzaWJsZUxheWVyc1swXV0gOiBncm91cC52aXNpYmxlTGF5ZXJzKTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyR3JvdXAoZ3JvdXA6IExheWVyR3JvdXAgfCBzdHJpbmcsIHNpbmdsZUxheWVyPzogYm9vbGVhbiwgdmlzaWJsZUxheWVycz86IHN0cmluZ1tdIHwgc3RyaW5nKSB7XG4gICAgY29uc3QgbGF5ZXJHcm91cCA9IHR5cGVvZiBncm91cCA9PT0gJ3N0cmluZycgPyB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzIS5maW5kKChnKSA9PiBnLm5hbWUgPT09IGdyb3VwKSA6IGdyb3VwO1xuICAgIGNvbnN0IGdyb3VwSW5kZXggPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzIS5maW5kSW5kZXgoKGcpID0+IGcubmFtZSA9PT0gbGF5ZXJHcm91cCEubmFtZSk7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMhLm1hcCgoZywgaSkgPT5cbiAgICAgIGkgPT09IGdyb3VwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5nLFxuICAgICAgICAgICAgc2luZ2xlTGF5ZXI6IHNpbmdsZUxheWVyID8/IGxheWVyR3JvdXAhLnNpbmdsZUxheWVyLFxuICAgICAgICAgICAgdmlzaWJsZUxheWVyczpcbiAgICAgICAgICAgICAgdHlwZW9mIHZpc2libGVMYXllcnMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBbLi4ubGF5ZXJHcm91cCEudmlzaWJsZUxheWVycywgdmlzaWJsZUxheWVyc11cbiAgICAgICAgICAgICAgICA6IHZpc2libGVMYXllcnMgPz8gbGF5ZXJHcm91cCEudmlzaWJsZUxheWVyc1xuICAgICAgICAgIH1cbiAgICAgICAgOiBnXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVRpdGxlKCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgY29uc3QgbmV3VGl0bGUgPSAoJGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy51cGRhdGVMYXllckdyb3VwKFxuICAgICAgZ3JvdXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5XG4gICAgICAgIC5sYXllckdyb3VwcyEuZmlsdGVyKChnKSA9PiBnLm5hbWUgPT09IGdyb3VwLm5hbWUpXG4gICAgICAgIC5tYXAoKGcsIGkpID0+IGcudmlzaWJsZUxheWVycy5tYXAoKGwpID0+IChsID09PSBsYXllci50aXRsZSA/IG5ld1RpdGxlIDogbCkpKVxuICAgICAgICAuZmxhdCgpXG4gICAgKTtcbiAgICBkZWxldGUgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdO1xuICAgIGxheWVyLnRpdGxlID0gbmV3VGl0bGU7XG4gICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtuZXdUaXRsZV0gPSB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgZW1pdE1hbmlmZXN0KCkge1xuICAgIHRoaXMucmVtb3ZlRW1wdHlMYXllckdyb3VwcygpO1xuICAgIHRoaXMubWFuaWZlc3RNb2RpZmllZC5lbWl0KHtcbiAgICAgIHdpZGdldEluZGV4OiB0aGlzLndpZGdldEluZGV4LFxuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgb3B0aW9uczogeyAuLi50aGlzLm9wdGlvbnNDb3B5LCBsYXllcnM6ICh0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA/PyBbXSkuZmlsdGVyKChsYXllcikgPT4gISFsYXllci50eXBlKSB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VMb2NhdGlvbkF0dHJpYnV0ZXMoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuYXR0cmlidXRlID0gJGV2ZW50O1xuICB9XG5cbiAgbGF5ZXJIYXNJbnRlbnNpdHkobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyk6IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMge1xuICAgIHJldHVybiA8TWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucz5sYXllcjtcbiAgfVxuXG4gIGNoYW5nZUludGVuc2l0eUF0dHJpYnV0ZXMoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllcl8gPSA8TWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucz5sYXllcjtcbiAgICBsYXllcl8uaW50ZW5zaXR5QXR0cmlidXRlID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQ2xhc3NlcygkZXZlbnQ6IHN0cmluZ1tdLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzXG4gICAgICB8IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucztcbiAgICBzcGVjaWZpY0xheWVyLmNsYXNzZXMgPSAkZXZlbnQ7XG4gIH1cblxuICBkZWxldGVMYXllcihpOiBudW1iZXIsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weT8ubGF5ZXJzPy5zcGxpY2UoaSwgMSk7XG4gICAgdGhpcy51cGRhdGVMYXllckdyb3VwKFxuICAgICAgZ3JvdXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBncm91cC52aXNpYmxlTGF5ZXJzLmZpbHRlcigobCkgPT4gbCAhPT0gbGF5ZXIudGl0bGUpXG4gICAgKTtcbiAgICB0aGlzLnJlbW92ZUVtcHR5TGF5ZXJHcm91cHMoKTtcbiAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2F1dG8nKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5Lmlnbm9yZUF1dG9MYXllciA9IFsuLi4odGhpcy5vcHRpb25zQ29weS5pZ25vcmVBdXRvTGF5ZXIgPz8gW10pLCBsYXllci5rZXkgKyAnLScgKyBsYXllci5zdWJUeXBlXTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VVcmwoXG4gICAgJGV2ZW50OiBFdmVudCxcbiAgICBsYXllcjpcbiAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwRmVhdHVyZUxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIudXJsID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRpb24oJGV2ZW50OiBFdmVudCwgbGF5ZXI6IEJhc2VXaWRnZXRNYXBMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuYXR0cmlidXRpb24gPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbUxheWVyKCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5wYXJhbUxheWVyID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlUGFyYW1UaWxlZCgkZXZlbnQ6IGJvb2xlYW4sIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucykge1xuICAgIGxheWVyLnBhcmFtVGlsZWQgPSAkZXZlbnQ7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlci5jbGVhclRvb2x0aXAoKTtcbiAgfVxuXG4gIGNoYW5nZU1hdHJpeFNldCgkZXZlbnQ6IEV2ZW50LCBsYXllcjogTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLm1hdHJpeFNldCA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZVBhcmFtU3R5bGUoJGV2ZW50OiBFdmVudCwgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5zdHlsZSA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGV4cG9ydCgpIHtcbiAgICBXaWRnZXRNYXBVdGlscy5leHBvcnRNYXBBc0ltYWdlKHRoaXMubWFwLCAnbWFwLnBuZycpO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBXaWRnZXRNYXBVdGlscy5nZXRNYXBBc1BuZyh0aGlzLm1hcCk7XG4gIH1cblxuICBjaGFuZ2VDbHVzdGVyZWQobGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucywgJGV2ZW50OiBib29sZWFuKSB7XG4gICAgbGF5ZXIuY2x1c3RlcmVkID0gJGV2ZW50O1xuICAgIGlmIChsYXllci5jbHVzdGVyZWQpIHtcbiAgICAgIGxheWVyLmNsdXN0ZXJEaXN0YW5jZSA9IDEwO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUNsdXN0ZXJEaXN0YW5jZShsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLCAkZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLmNsdXN0ZXJEaXN0YW5jZSA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZU9wYWNpdHkobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgJGV2ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIub3BhY2l0eSA9IHBhcnNlSW50KCRldmVudCwgMTApO1xuICB9XG5cbiAgZ2V0V01TTGF5ZXJzKCk6IExheWVyPGFueT5bXSB7XG4gICAgcmV0dXJuICF0aGlzLm1hcFxuICAgICAgPyBbXVxuICAgICAgOiB0aGlzLm1hcFxuICAgICAgICAgIC5nZXRBbGxMYXllcnMoKVxuICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXRTb3VyY2UoKSBpbnN0YW5jZW9mIFRpbGVXTVMgfHwgbGF5ZXIuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBJbWFnZVdNUylcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnJlbmRlcmVkID09PSB0cnVlKTtcbiAgfVxuXG4gIGlzTGF5ZXJSZW5kZXJlZChsYXllcjogYW55KSB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRXTVNMYXllcnMoKS5maW5kKFxuICAgICAgKHdtc0xheWVyKSA9PiB3bXNMYXllci5nZXQoJ3RpdGxlJykgPT09IGxheWVyLnRpdGxlICYmIHdtc0xheWVyLmdldCgnZ3JvdXAnKSA9PT0gbGF5ZXIuZ3JvdXBcbiAgICApO1xuICB9XG5cbiAgY2hhbmdlV21zQ2xhc3MoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucykge1xuICAgIGxheWVyLm9DbGFzcyA9ICRldmVudDtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5sZWdlbmRUYWJDbG9zZWRbaW5kZXhdID0gIXRoaXMubGVnZW5kVGFiQ2xvc2VkW2luZGV4XTtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZFdpbmRvdygpIHtcbiAgICB0aGlzLmxlZ2VuZFRhYk9wZW4gPSAhdGhpcy5sZWdlbmRUYWJPcGVuO1xuICAgIHRoaXMubGF5ZXJzVGFiT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlTGF5ZXJzV2luZG93KCkge1xuICAgIHRoaXMubGF5ZXJzVGFiT3BlbiA9ICF0aGlzLmxheWVyc1RhYk9wZW47XG4gICAgdGhpcy5sZWdlbmRUYWJPcGVuID0gZmFsc2U7XG4gIH1cblxuICBnZXQgbWFwTGF5ZXJzKCkge1xuICAgIHJldHVybiAodGhpcy5tYXAgPz8geyBnZXRMYXllcnM6ICgpID0+ICh7IGdldEFycmF5OiAoKSA9PiBbXSB9KSB9KVxuICAgICAgLmdldExheWVycygpXG4gICAgICAuZ2V0QXJyYXkoKVxuICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldCgndGl0bGUnKSAhPT0gJ2JhY2tncm91bmQnKTtcbiAgfVxuXG4gIGdldCByaWdodFNsaWRlTGF5ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLm1hcExheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXQoJ3NsaWRlJykgPT09ICdyaWdodCcpO1xuICB9XG5cbiAgZ2V0IGxlZnRTbGlkZUxheWVycygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBMYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0KCdzbGlkZScpID09PSAnbGVmdCcpO1xuICB9XG5cbiAgY2hhbmdlVmlzaWJpbGl0eShncm91cDogTGF5ZXJHcm91cCwgX2xheWVyPzogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgb2xMYXllciA9IHRoaXMubWFwTGF5ZXJzLmZpbmQoXG4gICAgICAobGF5ZXIpID0+IGxheWVyLmdldFByb3BlcnRpZXMoKVsndGl0bGUnXSA9PT0gX2xheWVyPy50aXRsZSAmJiBsYXllci5nZXRQcm9wZXJ0aWVzKClbJ2dyb3VwJ10gPT09IGdyb3VwLm5hbWVcbiAgICApO1xuICAgIGlmIChncm91cC5zaW5nbGVMYXllcikge1xuICAgICAgY29uc3QgZ3JvdXBMYXllcnMgPVxuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZmlsdGVyKChsKSA9PiBsLmdyb3VwID09PSBncm91cC5uYW1lKS5tYXAoKGxheWVyKSA9PiBsYXllci50aXRsZSkgPz8gW107XG5cbiAgICAgIHRoaXMubWFwTGF5ZXJzXG4gICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXRQcm9wZXJ0aWVzKClbJ2dyb3VwJ10gPT09IGdyb3VwLm5hbWUpXG4gICAgICAgIC5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgIGlmIChncm91cExheWVycy5pbmNsdWRlcyhsYXllci5nZXRQcm9wZXJ0aWVzKClbJ3RpdGxlJ10pKSB7XG4gICAgICAgICAgICBsYXllci5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgaWYgKF9sYXllcikge1xuICAgICAgICBvbExheWVyPy5zZXRWaXNpYmxlKHRydWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzaWJpbGl0eShncm91cC5uYW1lLCBbX2xheWVyLnRpdGxlIV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllclZpc2liaWxpdHkoZ3JvdXAubmFtZSwgW10pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbExheWVyPy5zZXRWaXNpYmxlKCFvbExheWVyPy5nZXRWaXNpYmxlKCkpO1xuXG4gICAgICBjb25zdCB2aXNpYmxlTGF5ZXJzID0gZ3JvdXAudmlzaWJsZUxheWVycy5pbmNsdWRlcyhfbGF5ZXI/LnRpdGxlISlcbiAgICAgICAgPyBncm91cC52aXNpYmxlTGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyICE9PSBfbGF5ZXI/LnRpdGxlKVxuICAgICAgICA6IFsuLi5ncm91cC52aXNpYmxlTGF5ZXJzLCBfbGF5ZXI/LnRpdGxlIV07XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzaWJpbGl0eShncm91cC5uYW1lLCB2aXNpYmxlTGF5ZXJzKTtcbiAgICB9XG4gICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuICB9XG5cbiAgaXNMYXllclZpc2libGUobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgZ3JvdXA/OiBMYXllckdyb3VwKTogYm9vbGVhbiB7XG4gICAgaWYgKGdyb3VwICYmIGdyb3VwLnZpc2libGVMYXllcnMpIHtcbiAgICAgIHJldHVybiBncm91cC52aXNpYmxlTGF5ZXJzLmluY2x1ZGVzKGxheWVyLnRpdGxlID8/ICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICEhdGhpcy5vcHRpb25zQ29weVxuICAgICAgICAubGF5ZXJHcm91cHMhLmZpbmQoKGcpID0+IGcubmFtZSA9PT0gbGF5ZXIuZ3JvdXApXG4gICAgICAgID8udmlzaWJsZUxheWVycy5pbmNsdWRlcyhsYXllci50aXRsZSA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXNpYmlsaXR5KG5hbWU6IHN0cmluZywgdmlzaWJsZUxheWVyczogc3RyaW5nW10gfCBzdHJpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzID0gW1xuICAgICAgLi4uKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMgPz8gW10pLm1hcCgoZ3JvdXApID0+XG4gICAgICAgIGdyb3VwLm5hbWUgPT09IG5hbWVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgIHZpc2libGVMYXllcnM6IHZpc2libGVMYXllcnNcbiAgICAgICAgICAgICAgICA/IHR5cGVvZiB2aXNpYmxlTGF5ZXJzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgPyBbLi4uZ3JvdXAudmlzaWJsZUxheWVycywgdmlzaWJsZUxheWVyc11cbiAgICAgICAgICAgICAgICAgIDogdmlzaWJsZUxheWVyc1xuICAgICAgICAgICAgICAgIDogZ3JvdXAudmlzaWJsZUxheWVyc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogZ3JvdXBcbiAgICAgIClcbiAgICBdO1xuICB9XG5cbiAgY2hhbmdlQXV0b0xheWVyKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hdXRvbWF0aWNMYXllcnMgPSAkZXZlbnQ7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmF1dG9tYXRpY0xheWVycykge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuaWdub3JlQXV0b0xheWVyO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXllclZpc2libGVJZHgoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwTGF5ZXJzLm1hcCgobGF5ZXIsIGlkeCkgPT4gKGxheWVyLmdldFZpc2libGUoKSA/IGlkeCA6IDApKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSB8fCAtMTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICAvLyBUcnlpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG4gICAgdGhpcy5jbGVhckxheWVycyh0aGlzLm1hcC5nZXRMYXllcnMoKS5nZXRBcnJheSgpKTtcbiAgICB0aGlzLmNsZWFyTGF5ZXJzKHRoaXMucHJldmlvdXNMYXllcnMpO1xuICAgIHRoaXMubWFwLmdldFJlbmRlcmVyKCkhLmRpc3Bvc2UoKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZGVsZXRlIHRoaXMubWFwO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm1hcCA9IG51bGw7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlci5kZXN0cm95KCk7XG4gIH1cblxuICBnZXRTdHlsZShfbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyID0gX2xheWVyIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zO1xuICAgIGlmIChsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycz8uU1RZTEVTKSB7XG4gICAgICByZXR1cm4gbGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnM/LlNUWUxFUztcbiAgICB9XG4gICAgLyogTm90IG1hbmlmZXN0LWRlZmluZWQgc3R5bGU6IHVzZSBmaXJzdCBpbiBsaW5lIGJlY2F1c2UgaXQncyB0aGUgZGVmYXVsdCBvbmUgc2VudCBieSBnZW9zZXJ2ZXIgKi9cbiAgICBjb25zdCBwb3NzaWJsZVN0eWxlc0ZvclVybCA9IHRoaXMucG9zc2libGVTdHlsZXNbbGF5ZXIudXJsXSA/PyB7IGxheWVyczoge30gfTtcbiAgICBsZXQgcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIgPSBwb3NzaWJsZVN0eWxlc0ZvclVybC5sYXllcnMhW2xheWVyLnBhcmFtTGF5ZXJdO1xuICAgIGlmICghcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIpIHtcbiAgICAgIHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyID0gcG9zc2libGVTdHlsZXNGb3JVcmwubGF5ZXJzIVsobGF5ZXIucGFyYW1MYXllciA/PyAnOicpLnNwbGl0KCc6JylbMV1dID8/IHsgc3R5bGVzOiBbXSB9O1xuICAgIH1cbiAgICByZXR1cm4gcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIuc3R5bGVzWzBdPy5pZDtcbiAgfVxuXG4gIGNoYW5nZUxheWVyU3R5bGUoJGV2ZW50OiBhbnksIF9sYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgbGF5ZXIgPSBfbGF5ZXIgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnM7XG4gICAgaWYgKCFsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycykge1xuICAgICAgbGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnMgPSB7fTtcbiAgICB9XG4gICAgbGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnMuU1RZTEVTID0gJGV2ZW50O1xuICB9XG5cbiAgZ2V0QXNXbXNUeXBlKF9sYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgcmV0dXJuIF9sYXllciBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucztcbiAgfVxuXG4gIGxheWVyU3R5bGVPcHRpb25zKF9sYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgbGF5ZXIgPSBfbGF5ZXIgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnM7XG4gICAgY29uc3QgcG9zc2libGVTdHlsZXNGb3JVcmwgPSB0aGlzLnBvc3NpYmxlU3R5bGVzW2xheWVyLnVybF0gPz8geyBsYXllcnM6IHt9IH07XG4gICAgbGV0IHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyID0gcG9zc2libGVTdHlsZXNGb3JVcmwubGF5ZXJzIVtsYXllci5wYXJhbUxheWVyXTtcbiAgICBpZiAoIXBvc3NpYmxlc1N0eWxlc0ZvckxheWVyKSB7XG4gICAgICBwb3NzaWJsZXNTdHlsZXNGb3JMYXllciA9IHBvc3NpYmxlU3R5bGVzRm9yVXJsLmxheWVycyFbKGxheWVyLnBhcmFtTGF5ZXIgPz8gJzonKS5zcGxpdCgnOicpWzFdXSA/PyB7IHN0eWxlczogW10gfTtcbiAgICB9XG4gICAgcmV0dXJuIHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyLnN0eWxlcztcbiAgfVxuXG4gIHRyaWdnZXJMYXllclJlbmRlcigpIHtcbiAgICB0aGlzLm1hcC5yZW5kZXIoKTtcbiAgfVxuXG4gIGNoYW5nZVNsaWRlT3B0aW9uKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zbGlkZSA9ICRldmVudDtcbiAgICBpZiAoJGV2ZW50ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZvckVhY2goKGxheWVyKSA9PiAobGF5ZXIuc2xpZGUgPSAnYWxsJykpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZU1lbnUoKSB7XG4gICAgdGhpcy5hY3Rpb25NZW51T3BlbiQubmV4dCghdGhpcy5hY3Rpb25NZW51T3BlbiQuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9sWm9vbUVsZW1lbnQoKSB7XG4gICAgdGhpcy5vbFpvb21FbGVtZW50JC5uZXh0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vbC16b29tJykpO1xuICAgIGlmICghdGhpcy5vbFpvb21FbGVtZW50JC5nZXRWYWx1ZSgpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZ2V0T2xab29tRWxlbWVudCgpLCA1MCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHpvb21JbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vbC16b29tLWluJyk7XG4gICAgICBpZiAoem9vbUluKSB7XG4gICAgICAgIHpvb21Jbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuem9vbUluJykpO1xuICAgICAgICB6b29tSW4uc2V0QXR0cmlidXRlKCdkYXRhLXRvb2x0aXAtcG9zaXRpb24nLCAnbGVmdCcpO1xuICAgICAgICB6b29tSW4uY2xhc3NMaXN0LmFkZCgnYS10b29sdGlwJywgJy0tbm9wb3MnKTtcbiAgICAgICAgem9vbUluLnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHpvb21PdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub2wtem9vbS1vdXQnKTtcbiAgICAgIGlmICh6b29tT3V0KSB7XG4gICAgICAgIHpvb21PdXQuc2V0QXR0cmlidXRlKCdkYXRhLXRvb2x0aXAnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnpvb21PdXQnKSk7XG4gICAgICAgIHpvb21PdXQuc2V0QXR0cmlidXRlKCdkYXRhLXRvb2x0aXAtcG9zaXRpb24nLCAnbGVmdCcpO1xuICAgICAgICB6b29tT3V0LmNsYXNzTGlzdC5hZGQoJ2EtdG9vbHRpcCcsICctLW5vcG9zJyk7XG4gICAgICAgIHpvb21PdXQucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbihhY3Rpb246ICdjbGljaycgfCAnbGFzc28nIHwgJ3JlY3RhbmdsZScgfCAnem9vbScgfCAnbW92ZScgfCAnZXhwb3J0JyB8ICd1cGxvYWQnKSB7XG4gICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIuc2VsZWN0aW9uSW50ZXJhY3Rpb24uY2hhbmdlU2VsZWN0aW9uKGFjdGlvbik7XG4gICAgdGhpcy50b2dnbGVNZW51KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTGF5ZXJzKGxheWVyczogQmFzZUxheWVyW10pIHtcbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKGxheWVyKTtcbiAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmIChsYXllciBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U+KS5nZXRTb3VyY2UoKSkge1xuICAgICAgICAobGF5ZXIgYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPikuZ2V0U291cmNlKCkhLmNsZWFyKCk7XG4gICAgICAgIGxheWVyLnNldFNvdXJjZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgVGlsZUxheWVyICYmIChsYXllciBhcyBUaWxlTGF5ZXI8YW55PikuZ2V0U291cmNlKCkpIHtcbiAgICAgICAgKGxheWVyIGFzIFRpbGVMYXllcjxhbnk+KS5nZXRTb3VyY2UoKS5jbGVhcigpO1xuICAgICAgICBsYXllci5zZXRTb3VyY2UodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZExheWVyR3JvdXAoKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyA9IFtcbiAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMhLFxuICAgICAge1xuICAgICAgICBuYW1lOlxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5ncm91cCcpICtcbiAgICAgICAgICAnICcgK1xuICAgICAgICAgICh0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzIS5sZW5ndGggKyAxKSxcbiAgICAgICAgc2luZ2xlTGF5ZXI6IGZhbHNlLFxuICAgICAgICB2aXNpYmxlTGF5ZXJzOiBbXVxuICAgICAgfVxuICAgIF07XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzW3RoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5hZGRMYXllcihncm91cCk7XG4gIH1cblxuICB1cGRhdGVMYXllckdyb3VwTmFtZShncm91cDogTGF5ZXJHcm91cCwgJGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IFtuYW1lLCBzaW5nbGVMYXllciwgdmlzaWJsZUxheWVyc10gPSBbZ3JvdXAubmFtZSwgZ3JvdXAuc2luZ2xlTGF5ZXIsIGdyb3VwLnZpc2libGVMYXllcnNdO1xuICAgIGNvbnN0IGdyb3VwSW5kZXggPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzIS5maW5kSW5kZXgoKGcpID0+IGcubmFtZSA9PT0gZ3JvdXAubmFtZSk7XG4gICAgY29uc3QgbmV3TmFtZSA9ICgkZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgIGlmIChuYW1lID09PSBERUZBVUxUX0xBWUVSX0dST1VQKSB7XG4gICAgICBjb25zdCBsYXllcnNUb1RyYW5zZmVyID1cbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdyb3VwID09PSBERUZBVUxUX0xBWUVSX0dST1VQKS5tYXAoKGwpID0+IGwudGl0bGUpID8/IFtdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyA9IFtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyEsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBuZXdOYW1lLFxuICAgICAgICAgIHNpbmdsZUxheWVyLFxuICAgICAgICAgIHZpc2libGVMYXllcnM6IHZpc2libGVMYXllcnMhLmZpbHRlcigobCkgPT4gbGF5ZXJzVG9UcmFuc2Zlci5pbmNsdWRlcyhsKSlcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzLm1hcCgoZywgaSkgPT5cbiAgICAgICAgaSA9PT0gZ3JvdXBJbmRleFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBuYW1lOiBERUZBVUxUX0xBWUVSX0dST1VQLFxuICAgICAgICAgICAgICBzaW5nbGVMYXllcixcbiAgICAgICAgICAgICAgdmlzaWJsZUxheWVyczogdmlzaWJsZUxheWVycyEuZmlsdGVyKChsKSA9PiAhbGF5ZXJzVG9UcmFuc2Zlci5pbmNsdWRlcyhsKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IGdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyR3JvdXBzIS5tYXAoKGcsIGkpID0+XG4gICAgICAgIGkgPT09IGdyb3VwSW5kZXggPyB7IG5hbWU6IG5ld05hbWUsIHNpbmdsZUxheWVyLCB2aXNpYmxlTGF5ZXJzIH0gOiBnXG4gICAgICApO1xuICAgIH1cbiAgICAvLyB1cGRhdGUgZ3JvdXBzIG9uIG9wdGlvbnMgbGF5ZXJzXG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLm1hcCgobGF5ZXIpID0+XG4gICAgICAgIGxheWVyLmdyb3VwID09PSBuYW1lXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLmxheWVyLFxuICAgICAgICAgICAgICBncm91cDogbmV3TmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogbGF5ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIHVwZGF0ZSBncm91cHMgb24gb2wgbGF5ZXJzXG4gICAgdGhpcy5tYXBMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllci5nZXRQcm9wZXJ0aWVzKClbJ2dyb3VwJ10gPT09IG5hbWUpIGxheWVyLnNldCgnZ3JvdXAnLCBuZXdOYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZUxheWVyR3JvdXAobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMhLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLm5hbWUgIT09IG5hbWUpO1xuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnM/Lm1hcCgobGF5ZXIpID0+XG4gICAgICBsYXllci5ncm91cCA9PSBuYW1lID8geyAuLi5sYXllciwgZ3JvdXA6IERFRkFVTFRfTEFZRVJfR1JPVVAgfSA6IGxheWVyXG4gICAgKTtcbiAgfVxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPE1hcFdpZGdldExheWVyT3B0aW9uc1tdPiwgZ3JvdXA6IExheWVyR3JvdXApOiB2b2lkIHtcbiAgICBjb25zdCBtb3ZlZExheWVyID0gZXZlbnQuaXRlbS5kYXRhIGFzIE1hcFdpZGdldExheWVyT3B0aW9ucztcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQgIT09IGV2ZW50LmNvbnRhaW5lci5pZCkge1xuICAgICAgdGhpcy5tb3ZlTGF5ZXJCZXR3ZWVuR3JvdXBzKFxuICAgICAgICBtb3ZlZExheWVyLFxuICAgICAgICBldmVudC5jb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXllci1ncm91cCcpID8/IERFRkFVTFRfTEFZRVJfR1JPVVBcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubW92ZUxheWVySW5PcHRpb25zKGV2ZW50LmN1cnJlbnRJbmRleCwgZXZlbnQuaXRlbS5kYXRhIGFzIE1hcFdpZGdldExheWVyT3B0aW9ucywgZ3JvdXApO1xuICB9XG5cbiAgbW92ZUxheWVyQmV0d2Vlbkdyb3Vwcyhtb3ZlZExheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIG5ld0dyb3VwOiBzdHJpbmcpIHtcbiAgICAvLyByZW1vdmUgaXQgZnJvbSBvbGQgZ3JvdXBcbiAgICB0aGlzLnVwZGF0ZUxheWVyR3JvdXAoXG4gICAgICBtb3ZlZExheWVyLmdyb3VwISxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHNcbiAgICAgICAgPy5maW5kKChncm91cCkgPT4gZ3JvdXAubmFtZSA9PT0gbW92ZWRMYXllci5ncm91cCEpXG4gICAgICAgID8udmlzaWJsZUxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllciAhPT0gbW92ZWRMYXllci50aXRsZSlcbiAgICApO1xuXG4gICAgLy8gYWRkIGl0IHRvIG5ldyBncm91cFxuICAgIG1vdmVkTGF5ZXIuZ3JvdXAgPSBuZXdHcm91cDtcbiAgICB0aGlzLnVwZGF0ZUxheWVyR3JvdXAobmV3R3JvdXAgPz8gREVGQVVMVF9MQVlFUl9HUk9VUCwgdW5kZWZpbmVkLCBtb3ZlZExheWVyLnRpdGxlISk7XG4gICAgdGhpcy5yZW1vdmVFbXB0eUxheWVyR3JvdXBzKCk7XG4gIH1cblxuICBtb3ZlTGF5ZXJJbk9wdGlvbnModGFyZ2V0SWR4SW5Hcm91cDogbnVtYmVyLCBtb3ZlZExheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICBjb25zdCBncm91cExheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdyb3VwID09PSBncm91cC5uYW1lKTtcbiAgICAgIC8vIGluZGV4ZXMgaW4gb3B0aW9uc0NvcHlcbiAgICAgIGNvbnN0IGZyb21JbmRleCA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLmZpbmRJbmRleCgobGF5ZXIpID0+IGxheWVyLnRpdGxlID09PSBtb3ZlZExheWVyLnRpdGxlKTtcbiAgICAgIGNvbnN0IHRvSW5kZXggPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5maW5kSW5kZXgoKGxheWVyKSA9PiBsYXllci50aXRsZSA9PT0gZ3JvdXBMYXllcnNbdGFyZ2V0SWR4SW5Hcm91cF0udGl0bGUpO1xuXG4gICAgICBsZXQgbmV3T3JkZXIgPSB0b0luZGV4O1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMuc3BsaWNlKGZyb21JbmRleCwgMSk7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5zcGxpY2UodG9JbmRleCwgMCwgeyAuLi5tb3ZlZExheWVyLCBvcmRlcjogbmV3T3JkZXIgfSk7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyT3JkZXIoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVFeHBhbmRBbGwoZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdID0gIXRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbZ3JvdXAubmFtZV07XG4gICAgY29uc3QgbGF5ZXJzVG9FeHBhbmQgPVxuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdyb3VwID09PSBncm91cC5uYW1lKS5tYXAoKGxheWVyKSA9PiBsYXllci50aXRsZSkgPz8gW107XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlKS5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVyc1RvRXhwYW5kLmluY2x1ZGVzKGxheWVyKSlcbiAgICAgICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllcl0gPSB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlTGF5ZXJFeHBhbmQobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV0gPSAhdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdO1xuICAgIGlmICh0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV0pIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbZ3JvdXAubmFtZV0gPSB0cnVlO1xuICAgIGlmIChncm91cC52aXNpYmxlTGF5ZXJzLmV2ZXJ5KChsYXllclRpdGxlKSA9PiAhdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllclRpdGxlXSkpIHtcbiAgICAgIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbZ3JvdXAubmFtZV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVMYXllck9yZGVyKCkge1xuICAgIGxldCBvcmRlciA9IDE7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3Vwcz8uZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwTGF5ZXJzID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdyb3VwID09PSBncm91cC5uYW1lKTtcbiAgICAgIGlmIChncm91cExheWVycykge1xuICAgICAgICBncm91cExheWVycy5mb3JFYWNoKChsYXllcikgPT4gKGxheWVyLm9yZGVyID0gb3JkZXIrKykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaXNHcm91cFVzZWRCeVdpZGdldExheWVycyhncm91cDogTGF5ZXJHcm91cCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uc29tZSgobGF5ZXIpID0+IGxheWVyLmdyb3VwID09PSBncm91cC5uYW1lKTtcbiAgfVxuXG4gIHJlbW92ZUVtcHR5TGF5ZXJHcm91cHMoKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllckdyb3VwcyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJHcm91cHMhLmZpbHRlcihcbiAgICAgIChncm91cCkgPT5cbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LnNvbWUoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSkgfHwgZ3JvdXAubmFtZSA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgREVGQVVMVF9MQVlFUl9HUk9VUCA9IERFRkFVTFRfTEFZRVJfR1JPVVA7XG59XG4iLCI8cHJ5LXdpZGdldC1tYXAtY3NzPjwvcHJ5LXdpZGdldC1tYXAtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1tYXBcIj5cbiAgQGlmIChkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSB7XG4gICAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICAgI2hlYWRlclxuICAgICAgPlxuICAgICAgPHByeS1zZXR0aW5nc1xuICAgICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgICAgW2hlYWRlclByZXNlbnRdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgICAgW29wZW4kXT1cIm9wZW4kXCJcbiAgICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9zdHlsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc3R5bGUnIHwgaTE4biB9fSA6PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU3R5bGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwic3R5bGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnN0eWxlXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkZW50aWZpZXJcIlxuICAgICAgICAgICAgaWQ9XCJtYXBfc3R5bGVcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKG9wdGlvbnNDb3B5LnN0eWxlID09PSBTVFlMRV9GUk9NX1VSTCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJzdHlsZV9VUkxcIj57eyAnQHByeS53aWRnZXQubWFwLnN0eWxlVXJsJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwic3R5bGVfVVJMXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VTdHlsZVVSTCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbnNDb3B5LnN0eWxlVVJMID8/ICcnXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUF1dG9MYXllcigkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYXV0b21hdGljTGF5ZXJzID8/IGZhbHNlXCI+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hdXRvTGF5ZXInIHwgaTE4biB9fVxuICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdHRyaWJ1dGlvbnMoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucyA/PyBmYWxzZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuYXR0cmlidXRpb25zJyB8IGkxOG4gfX1cbiAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2xpZGVPcHRpb24oJGV2ZW50KVwiIFtuZ01vZGVsXT1cImhhc1NsaWRlTGF5ZXIkIHwgYXN5bmNcIj5cbiAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLnNsaWRlLmdsb2JhbCcgfCBpMThuIH19XG4gICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1sYXllci1zZXR0aW5nc1wiIGNka0Ryb3BMaXN0R3JvdXAgY2RrRHJhZ0JvdW5kYXJ5PlxuICAgICAgICAgIDxoNCBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvaDQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCIgKGNsaWNrKT1cImFkZExheWVyR3JvdXAoKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmFkZExheWVyR3JvdXAnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGZvciAoZ3JvdXAgb2Ygb3B0aW9uc0NvcHkubGF5ZXJHcm91cHM7IHRyYWNrIGdyb3VwOyBsZXQgZ3JvdXBJZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIEBpZiAoaXNHcm91cFVzZWRCeVdpZGdldExheWVycyhncm91cCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2dyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCBvLWxheWVyLXNldHRpbmdzX19ncm91cC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sYXllckdyb3VwVGl0bGUte3sgZ3JvdXBJZHggfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmxheWVyR3JvdXBOYW1lJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cIi1vYmxpZ2F0b3J5LXJlZFwiPio8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5vcHRpb25hbENvbG9uJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCB1LWRpc3BsYXktZmxleCAtcm93IC1nYXAtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xheWVyR3JvdXBUaXRsZS17eyBncm91cElkeCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUxheWVyR3JvdXBOYW1lKGdyb3VwLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJncm91cC5uYW1lID09PSBERUZBVUxUX0xBWUVSX0dST1VQID8gKCdAcHJ5LndpZGdldC5tYXAubm9Hcm91cCcgfCBpMThuKSA6IGdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLm5hbWUgIT09IERFRkFVTFRfTEFZRVJfR1JPVVApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0bi0taWNvbi1vbmx5IGEtdG9vbHRpcCBvLWxheWVyLXNldHRpbmdzX19kZWxldGUtZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmRlbGV0ZUdyb3VwJyB8IGkxOG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUxheWVyR3JvdXAoZ3JvdXAubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjE2XCIgW3dpZHRoXT1cIjE2XCIgaWNvblN2Zz1cImJpbl9ub3JtYWxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAubmFtZSAhPT0gREVGQVVMVF9MQVlFUl9HUk9VUCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLXJhZGlvLWdyb3VwX19pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtdWx0aXNlbGVjdGlvbi17eyBncm91cElkeCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJncm91cC5zaW5nbGVMYXllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVMYXllckdyb3VwU2luZ2xlTGF5ZXIoZ3JvdXAsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibXVsdGlzZWxlY3Rpb24te3sgZ3JvdXBJZHggfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLm11bHRpcGxlTGF5ZXInIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1vbm9zZWxlY3Rpb24te3sgZ3JvdXBJZHggfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ3JvdXAuc2luZ2xlTGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGF5ZXJHcm91cFNpbmdsZUxheWVyKGdyb3VwLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibW9ub3NlbGVjdGlvbi17eyBncm91cElkeCB9fVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3Muc2luZ2xlTGF5ZXInIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRMYXllcihncm91cClcIiBjbGFzcz1cImEtYnRuIC1saW5rLWxpa2VcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgKyB7eyAnQHByeS53aWRnZXQubWFwLmFkZExheWVyJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZUV4cGFuZEFsbChncm91cClcIiBjbGFzcz1cImEtYnRuIC1saW5rLWxpa2VcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdXG4gICAgICAgICAgICAgICAgICAgID8gKCdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5mb2xkQWxsJyB8IGkxOG4pXG4gICAgICAgICAgICAgICAgICAgIDogKCdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy51bmZvbGRBbGwnIHwgaTE4bilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2xheWVyc1wiXG4gICAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50LCBncm91cClcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1sYXllci1ncm91cF09XCJncm91cC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGxheWVyIG9mIG9wdGlvbnNDb3B5Py5sYXllcnM7IHRyYWNrIGxheWVyOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKGxheWVyLmdyb3VwID09PSBncm91cC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19sYXllci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJsYXllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctcGxhY2Vob2xkZXJcIiAqY2RrRHJhZ1BsYWNlaG9sZGVyPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2xheWVyLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1kaXNhYmxlZF09XCJsYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJhZy1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN2Zz1cImRyYWdfaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuLS1pY29uLW9ubHkgdW5mb2xkLWxheWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMYXllckV4cGFuZChsYXllciwgZ3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCI5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25TdmddPVwibGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXSA/ICdjaGV2cm9uX3RvcCcgOiAnY2hldnJvbl9ib3R0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImEtaDVcIj57eyBsYXllci50aXRsZSA/PyAoJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllcicgfCBpMThuOiB7IGluZGV4OiBpICsgMSB9KSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19kZWxldGUtbGF5ZXIgYS1idG4tLWljb24tb25seSBhLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MuZGVsZXRlTGF5ZXInIHwgaTE4blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUxheWVyKGksIGxheWVyLCBncm91cClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIxNlwiIFt3aWR0aF09XCIxNlwiIGljb25Tdmc9XCJiaW5fbm9ybWFsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1sYXllci1zZXR0aW5nc19fbGF5ZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIihsYXllcj8ub3BhY2l0eSA/PyAxMDApICsgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcGFjaXR5KGxheWVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5tYXAub3BhY2l0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmxheWVyT3B0aW9ucycgfCBpMThuOiB7IGluZGV4OiBpICsgMSB9IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImxheWVyX3t7IGkgKyAxIH19X3RpdGxlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubGF5ZXJUaXRsZScgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJsYXllcl97eyBpICsgMSB9fV90aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRpdGxlKCRldmVudCwgbGF5ZXIsIGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIVsnZ2Vvc2VydmVyJywgJ2F1dG8nXS5pbmNsdWRlcyhsYXllci50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbGF5ZXJUeXBlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUudGl0bGUnIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5ZXJUeXBlKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwibGF5ZXJUeXBlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF9sYXllclR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChnZXRBc1dtc1R5cGUobGF5ZXIpOyBhcyB3bXNsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xheWVyU3R5bGVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTdHlsZScgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMYXllclN0eWxlKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwibGF5ZXJTdHlsZU9wdGlvbnMobGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRTdHlsZShsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRml0KCRldmVudCwgbGF5ZXIpXCIgW25nTW9kZWxdPVwibGF5ZXIuZml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmZpdCcgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyZWxhdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd21zJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXRzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdnZW9zZXJ2ZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2ZlYXR1cmVsYXllcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAndmVjdG9ydGlsZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmFzdGVydGlsZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2NsYXNzZXNcIj57eyAnQHByeS53aWRnZXQubWFwLmNsYXNzZXMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDbGFzc2VzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInVzZWRDbGFzc2VzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5jbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfY2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmVsYXRpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd21zJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtdHMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2ZlYXR1cmVsYXllcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd2ZWN0b3J0aWxlJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3Jhc3RlcnRpbGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAubG9jYXRpb25BdHRyJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ2VvbWV0cnlGaWVsZHNGb3I6IHsgcmVzdWx0U2V0OiByZXN1bHRTZXQkLCBjbGFzc2VzOiBsYXllci5jbGFzc2VzLCB0eXBlOiBsYXllci50eXBlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFzeW5jOyBhcyBmaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYXRtYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1YmJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFya2VyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb2ludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGluZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9seWdvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGktbGluZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGktcG9seWdvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5kZXhPZihsYXllci50eXBlKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sb2NhdGlvbkF0dHJpYnV0ZV9ib3RoXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubG9jYXRpb25BdHRyaWJ1dGUuYm90aCcgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMb2NhdGlvbkF0dHJpYnV0ZXMoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xvY2F0aW9uQXR0cmlidXRlX2JvdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoWydoZWF0bWFwJywgJ2J1YmJsZSddLmluZGV4T2YobGF5ZXIudHlwZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfaW50ZW5zaXR5QXR0cmlidXRlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAuaW50ZW5zaXR5QXR0cmlidXRlJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUludGVuc2l0eUF0dHJpYnV0ZXMoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllckhhc0ludGVuc2l0eShsYXllcikuaW50ZW5zaXR5QXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF9pbnRlbnNpdHlBdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3dtcycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAnd210cycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICdmZWF0dXJlbGF5ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAndmVjdG9ydGlsZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICdyYXN0ZXJ0aWxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxheWVyLnR5cGUgIT09ICdnZW9zZXJ2ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfdXJsXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMudXJsJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX3dtc191cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVVybCgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobGF5ZXIudHlwZSA9PT0gJ3dtcycgfHwgbGF5ZXIudHlwZSA9PT0gJ3dtdHMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfcGFyYW1MYXllclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAud21zLnBhcmFtTGF5ZXInIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX3dtc19wYXJhbUxheWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VQYXJhbUxheWVyKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnBhcmFtTGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobGF5ZXIudHlwZSA9PT0gJ3dtdHMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfbWF0cml4U2V0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMubWF0cml4U2V0JyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfbWF0cml4U2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VNYXRyaXhTZXQoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIubWF0cml4U2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxheWVyLnR5cGUgPT09ICd3bXRzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3N0eWxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMuc3R5bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX3N0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VQYXJhbVN0eWxlKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxheWVyLnR5cGUgPT09ICd3bXMnIHx8IGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC50aWxlJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUGFyYW1UaWxlZCgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyPy5wYXJhbVRpbGVkID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLndtcy5wYXJhbVRpbGVkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxheWVyLnR5cGUgPT09ICdtYXJrZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuY2x1c3RlcmluZycgfCBpMThuIH19PC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJlZChsYXllciwgJGV2ZW50KVwiIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbHVzdGVyZWQnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsYXllci5jbHVzdGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5jbHVzdGVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDbHVzdGVyRGlzdGFuY2UobGF5ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0Lm1hcC5jbHVzdGVyRGlzdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1yYW5nZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChvcHRpb25zQ29weS5zbGlkZSA/PyBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwic2xpZGVfc2VsZWN0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTbGlkZSgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInNsaWRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuc2xpZGUgPz8gJ2FsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzbGlkZV9zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAob3B0aW9uc0NvcHkuYXR0cmlidXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyaWJ1dGlvblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuYXR0cmlidXRpb24nIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYXR0cmlidXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZUF0dHJpYnV0aW9uKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuYXR0cmlidXRpb24gPyBsYXllci5hdHRyaWJ1dGlvbiA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9wcnktc2V0dGluZ3M+XG4gICAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgfVxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tYnRuLWdyb3VwIC1tYXAtc2VsZWN0aW9uLWNob2ljZSAtdmVydGljYWxcIlxuICAgIFtjbGFzcy4td2l0aC1oZWFkZXJdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW2NsYXNzLi1jbG9zZWRdPVwiIShhY3Rpb25NZW51T3BlbiQgfCBhc3luYylcIlxuICAgID5cbiAgICA8ZGl2IGNsYXNzPVwiLXZlcnRpY2FsXCI+XG4gICAgICBAZm9yIChhY3Rpb24gb2YgYmFzaWNBY3Rpb25zJCB8IGFzeW5jOyB0cmFjayBhY3Rpb24pIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBhLXRvb2x0aXAgYS10b29sdGlwLS17eyBhY3Rpb24gfX1cIlxuICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VTZWxlY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAuJyArIGFjdGlvbiB8IGkxOG5cIlxuICAgICAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIFtpY29uU3ZnXT1cImFjdGlvblwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuJyArIGFjdGlvbiB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwIC1tYXAtdG9nZ2xlXCJcbiAgICAgIGlkPVwib3Blbl9tZW51XCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiYWN0aW9uTWVudU9wZW4kIHwgYXN5bmNcIlxuICAgICAgYXJpYS1jb250cm9scz1cImV4cG9ydF90eXBlXCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJtZW51XCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KClcIlxuICAgICAgPlxuICAgICAgPHByeS1pY29uXG4gICAgICAgIFtpY29uU3ZnXT1cIihhY3Rpb25NZW51T3BlbiQgfCBhc3luYykgPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgIFtoZWlnaHRdPVwiMjRcIlxuICAgICAgPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5vcGVuJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cCAtbWFwLXNlbGVjdGlvbi1jaG9pY2UgLW1hcC1leHBvcnRcIiBbY2xhc3MuLXdpdGgtaGVhZGVyXT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBhLXRvb2x0aXBcIlxuICAgICAgaWQ9XCJleHBvcnRfY2FyZFwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgYXJpYS1jb250cm9scz1cImV4cG9ydF90eXBlXCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJtZW51XCJcbiAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLmV4cG9ydCcgfCBpMThuXCJcbiAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgIChjbGljayk9XCJleHBvcnQoKVwiXG4gICAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZpbGVfZG93bmxvYWRcIj48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuZXhwb3J0JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIEBpZiAoKGxheWVycyQgfCBhc3luYyk/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJvbC1jb250cm9sIG0tbWFwLWFjdGlvbiBtLW1hcC1hY3Rpb24tLWxheWVyc1wiIFtzdHlsZS50b3AucHhdPVwibGF5ZXJzVG9wJCB8IGFzeW5jXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwibS1tYXAtYWN0aW9uX19idXR0b25cIlxuICAgICAgICBbY2xhc3MuYS10b29sdGlwXT1cIiF0aGlzLmxheWVyc1RhYk9wZW5cIlxuICAgICAgICBbY2xhc3MuLXRvb2x0aXAtbm8td3JhcF09XCIhdGhpcy5sYXllcnNUYWJPcGVuXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUxheWVyc1dpbmRvdygpXCJcbiAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAuc2VsZWN0TGF5ZXJzJyB8IGkxOG5cIlxuICAgICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImxheWVyc1wiIFt3aWR0aF09XCIxOFwiIFtoZWlnaHRdPVwiMThcIj48L3ByeS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm0tbWFwLXBvcC1pbiAtbWF4LXdpZHRoLTIyMFwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCIgW3N0eWxlLnRvcC5weF09XCJsYXllcnNUb3AkIHwgYXN5bmNcIj5cbiAgICAgIDxoNCBjbGFzcz1cImEtaDRcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3Muc2VsZWN0TGF5ZXJzJyB8IGkxOG4gfX08L2g0PlxuICAgICAgPGRpdiBjbGFzcz1cIm0tbWFwLXBvcC1pbl9fY29udGVudFwiIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImxheWVyc0hlaWdodCQgfCBhc3luY1wiPlxuICAgICAgICBAZm9yIChncm91cCBvZiAob3B0aW9ucyQgfCBhc3luYyk/LmxheWVyR3JvdXBzID8/IFtdOyB0cmFjayBncm91cDsgbGV0IGdyb3VwSWR4ID0gJGluZGV4KSB7XG4gICAgICAgICAgQGlmIChpc0dyb3VwVXNlZEJ5V2lkZ2V0TGF5ZXJzKGdyb3VwKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tbWFwLXBvcC1pbl9fdGl0bGUgbS1tYXAtcG9wLWluX19ncm91cC10aXRsZVwiPlxuICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJhLWg1XCI+XG4gICAgICAgICAgICAgICAge3sgZ3JvdXAubmFtZSA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCA/ICgnQHByeS53aWRnZXQubWFwLm5vR3JvdXAnIHwgaTE4bikgOiBncm91cC5uYW1lIH19XG4gICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZ3JvdXAuc2luZ2xlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tbWFwLXBvcC1pbl9fcmFkaW9zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tbWFwLXBvcC1pbl9fdGl0bGVcIiBbY2xhc3MuLWhpZGRlbl09XCIhbGF5ZXJzVGFiT3BlblwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImlkICsgJy0nICsgZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX0tcmFkaW8tbGF5ZXItZ3JvdXAte3sgZ3JvdXBJZHggfX1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJncm91cC52aXNpYmxlTGF5ZXJzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VWaXNpYmlsaXR5KGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwie3sgaWQgfX0tcmFkaW8tbGF5ZXItZ3JvdXAte3sgZ3JvdXBJZHggfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3Mubm9MYXllcicgfCBpMThuXG4gICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgQGZvciAobGF5ZXIgb2Ygb3B0aW9uc0NvcHkubGF5ZXJzOyB0cmFjayBsYXllcjsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKGxheWVyLmdyb3VwID09PSBncm91cC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX3RpdGxlXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxheWVyc1RhYk9wZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJpZCArICctJyArIGdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7eyBpZCB9fS1yYWRpby17eyBncm91cC5uYW1lIH19LWxheWVyLXt7IGluZGV4IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdyb3VwLnZpc2libGVMYXllcnNbMF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVmlzaWJpbGl0eShncm91cCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInt7IGlkIH19LXJhZGlvLXt7IGdyb3VwLm5hbWUgfX0tbGF5ZXIte3sgaW5kZXggfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudGl0bGUgPz8gKCdAcHJ5LndpZGdldC5tYXAubWlzc2luZ1RpdGxlJyB8IGkxOG4pXG4gICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIEBmb3IgKGxheWVyIG9mIG9wdGlvbnNDb3B5LmxheWVyczsgdHJhY2sgbGF5ZXI7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBpZiAobGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX3RpdGxlXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxheWVyc1RhYk9wZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImlzTGF5ZXJWaXNpYmxlKGxheWVyLCBncm91cClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVmlzaWJpbGl0eShncm91cCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImNoZWNrYm94LWxheWVyLXt7IGluZGV4IH19XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hlY2tib3gtbGF5ZXIte3sgaW5kZXggfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBsYXllci50aXRsZSA/PyAoJ0Bwcnkud2lkZ2V0Lm1hcC5taXNzaW5nVGl0bGUnIHwgaTE4bikgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmICgobGVnZW5kTGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cIm9sLWNvbnRyb2wgbS1tYXAtYWN0aW9uIG0tbWFwLWFjdGlvbi0tbGVnZW5kXCIgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2NsYXNzLmEtdG9vbHRpcF09XCIhdGhpcy5sZWdlbmRUYWJPcGVuXCJcbiAgICAgICAgW2NsYXNzLi10b29sdGlwLW5vLXdyYXBdPVwiIXRoaXMubGVnZW5kVGFiT3BlblwiXG4gICAgICAgIGNsYXNzPVwibS1tYXAtYWN0aW9uX19idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlTGVnZW5kV2luZG93KClcIlxuICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmRzJyB8IGkxOG5cIlxuICAgICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImxlZ2VuZFwiIFt3aWR0aF09XCIxOFwiIFtoZWlnaHRdPVwiMTVcIj48L3ByeS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm0tbWFwLXBvcC1pblwiIFtjbGFzcy4taGlkZGVuXT1cIiFsZWdlbmRUYWJPcGVuXCIgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIj5cbiAgICAgIDxoNCBjbGFzcz1cImEtaDRcIj57eyAnQHByeS53aWRnZXQubWFwLmxlZ2VuZHNUaXRsZScgfCBpMThuIH19PC9oND5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX2NvbnRlbnRcIiBbc3R5bGUubWF4LWhlaWdodC5weF09XCJsYXllcnNIZWlnaHQkIHwgYXN5bmNcIj5cbiAgICAgICAgQGZvciAoZ2VvTGF5ZXIgb2YgbGVnZW5kTGF5ZXJzJCB8IGFzeW5jOyB0cmFjayBnZW9MYXllcjsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgQGlmIChpc0xheWVyVmlzaWJsZShnZW9MYXllcikpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1wb3AtaW5fX3RpdGxlXCIgKGNsaWNrKT1cInRvZ2dsZUxlZ2VuZChpbmRleClcIj5cbiAgICAgICAgICAgICAgQGlmIChpc0xheWVyUmVuZGVyZWQoZ2VvTGF5ZXIpICYmICEhZ2VvTGF5ZXIudGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1tYXAtcG9wLWluX19kcm9wZG93bi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uU3ZnXT1cImxlZ2VuZFRhYkNsb3NlZFtpbmRleF0gPyAnY2hldnJvbl9ib3R0b20nIDogJ2NoZXZyb25fdG9wJ1wiXG4gICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxMlwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiYS1oNVwiPnt7IGdlb0xheWVyLnRpdGxlIH19PC9oNT5cbiAgICAgICAgICAgICAgQGlmICghaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKSkge1xuICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGF5ZXJMb2FkRXJyb3InIHwgaTE4blwiXG4gICAgICAgICAgICAgICAgICBbaWNvblN2Z109XCInY2xvc2UnXCJcbiAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIyMlwiXG4gICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjIyXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibS1tYXAtcG9wLWluX19pbWFnZVwiXG4gICAgICAgICAgICBbY2xhc3MuLWhpZGRlbl09XCIhbGVnZW5kVGFiT3BlbiB8fCBsZWdlbmRUYWJDbG9zZWRbaW5kZXhdIHx8ICFpc0xheWVyUmVuZGVyZWQoZ2VvTGF5ZXIpXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImxlZ2VuZEhlaWdodCQgfCBhc3luY1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGdlb0xheWVyIHwgbGVnZW5kVXJsOiB7IGNhcGFiaWxpdGllczogKHdtc0NhcGFiaWxpdGllcyQgfCBhc3luYykgfTsgYXMgdXJsKSB7XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBbc3JjXT1cInVybCB8IGdldFNlY3VyZWRJbWFnZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cIidAcHJ5LndpZGdldC5tYXAubGVnZW5kJyB8IGkxOG46IHsgbGF5ZXI6IGdlb0xheWVyLnRpdGxlIH1cIlxuICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZU5vdFByb3ZpZGVkW2luZGV4XSA9IHRydWVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCEoZ2VvTGF5ZXIgfCBsZWdlbmRVcmw6IHsgY2FwYWJpbGl0aWVzOiAod21zQ2FwYWJpbGl0aWVzJCB8IGFzeW5jKSB9KSkge1xuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tbWFwLXBvcC1pbl9fZXJyb3JcIj57eyAnQHByeS53aWRnZXQubWFwLmxlZ2VuZE5vdFByb3ZpZGVkJyB8IGkxOG4gfX08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgQGlmIChsZWZ0U2xpZGVMYXllcnMubGVuZ3RoID4gMCkge1xuICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1zbGlkZS1sZWdlbmQgLWxlZnRcIiBbc3R5bGUudG9wLnB4XT1cImxlZ2VuZFRvcCQgfCBhc3luY1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtLW1hcC1zbGlkZS1sZWdlbmRfX3RpdGxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZVRpdGxlJyB8IGkxOG4gfX06PC9zcGFuPlxuICAgICAgQGZvciAobGF5ZXIgb2YgbGVmdFNsaWRlTGF5ZXJzOyB0cmFjayBsYXllcikge1xuICAgICAgICA8ZGl2Pnt7IGxheWVyLmdldCgndGl0bGUnKSB9fTwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG5cbiAgQGlmIChyaWdodFNsaWRlTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kIC1yaWdodFwiIFtzdHlsZS50b3AucHhdPVwibGVnZW5kVG9wJCB8IGFzeW5jXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm0tbWFwLXNsaWRlLWxlZ2VuZF9fdGl0bGVcIj57eyAnQHByeS53aWRnZXQubWFwLnNsaWRlVGl0bGUnIHwgaTE4biB9fTo8L3NwYW4+XG4gICAgICBAZm9yIChsYXllciBvZiByaWdodFNsaWRlTGF5ZXJzOyB0cmFjayBsYXllcikge1xuICAgICAgICA8ZGl2Pnt7IGxheWVyLmdldCgndGl0bGUnKSB9fTwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG5cbiAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodCQgfCBhc3luY1wiIGNsYXNzPVwiby1tYXAtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1hcFwiPlxuICAgICAgPGRpdiAjbWFwUmVmIGlkPVwibWFwXCI+PC9kaXY+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgbWluPVwiMFwiXG4gICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgIHN0ZXA9XCIwLjAxXCJcbiAgICAgICAgdmFsdWU9XCI1MFwiXG4gICAgICAgICNzbGlkZXJFbGVtZW50XG4gICAgICAgIGNsYXNzPVwiby1tYXAtc2xpZGVyXCJcbiAgICAgICAgW2NsYXNzLi1oaWRkZW5dPVwiIShoYXNTbGlkZUxheWVyJCB8IGFzeW5jKVwiXG4gICAgICAgIChpbnB1dCk9XCJ0cmlnZ2VyTGF5ZXJSZW5kZXIoKVwiXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgI3BvcHVwIGNsYXNzPVwibS10b29sdGlwIG0tdG9vbHRpcC0tcG9wdXBcIiBbaGlkZGVuXT1cInRydWVcIiByb2xlPVwidG9vbHRpcFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXAtLXBvcHVwX19oZWFkZXJcIj5cbiAgICAgIDxwPnt7ICgodG9vbHRpcE1hbmFnZXIudG9vbHRpcERpc3BsYXllZEluZGV4JCB8IGFzeW5jKSA/PyAwKSArIDEgfX0gLyB7eyB0b29sdGlwTWFuYWdlci50b29sdGlwTnVtYmVyIH19PC9wPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5IGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAoY2xpY2spPVwidG9vbHRpcE1hbmFnZXIudG9vbHRpcE1vdmUoLTEpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTWFuYWdlci50b29sdGlwQ2FuTW92ZSgtMSlcIlxuICAgICAgICA+XG4gICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3dfYmFja1wiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvb2x0aXBNYW5hZ2VyLnRvb2x0aXBNb3ZlKDEpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTWFuYWdlci50b29sdGlwQ2FuTW92ZSgxKVwiXG4gICAgICAgID5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhcnJvd19yaWdodFwiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cInRvb2x0aXBNYW5hZ2VyLmNsZWFyVG9vbHRpcCh0cnVlKVwiPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXAtLXBvcHVwX19jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgI3BvcHVwQ29udGVudD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==